<?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>98457</bug_id>
          
          <creation_ts>2012-10-04 15:20:59 -0700</creation_ts>
          <short_desc>ScrollingStateNodes should be referenced via IDs on RenderLayerBacking</short_desc>
          <delta_ts>2012-10-10 20:39:15 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Beth Dakin">bdakin</assigned_to>
          <cc>andersca</cc>
    
    <cc>bdakin</cc>
    
    <cc>benjamin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>735065</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-04 15:20:59 -0700</bug_when>
    <thetext>The next step to getting the ScrollingTree into shape where it can take multiple nodes is to associate RenderLayerBackings with ScrollingStateNodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735084</commentid>
    <comment_count>1</comment_count>
      <attachid>167191</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-04 15:46:48 -0700</bug_when>
    <thetext>Created attachment 167191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735089</commentid>
    <comment_count>2</comment_count>
      <attachid>167191</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-04 15:52:29 -0700</bug_when>
    <thetext>Comment on attachment 167191
Patch

Attachment 167191 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14152687</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735092</commentid>
    <comment_count>3</comment_count>
      <attachid>167191</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-04 15:55:44 -0700</bug_when>
    <thetext>Comment on attachment 167191
Patch

Attachment 167191 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14171445</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735095</commentid>
    <comment_count>4</comment_count>
      <attachid>167191</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-04 16:05:04 -0700</bug_when>
    <thetext>Comment on attachment 167191
Patch

Attachment 167191 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14173327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735119</commentid>
    <comment_count>5</comment_count>
      <attachid>167191</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-04 16:41:51 -0700</bug_when>
    <thetext>Comment on attachment 167191
Patch

Attachment 167191 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14183158</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735135</commentid>
    <comment_count>6</comment_count>
      <attachid>167191</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-04 16:56:37 -0700</bug_when>
    <thetext>Comment on attachment 167191
Patch

Attachment 167191 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14176279</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735139</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-04 17:00:40 -0700</bug_when>
    <thetext>Do you have to make the caller of ScrollingCoordinator aware of the ScrollingStateNodes?  I thought it was the ScrollingCoordinator&apos;s job to deal with these mappings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735141</commentid>
    <comment_count>8</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-04 17:02:39 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Do you have to make the caller of ScrollingCoordinator aware of the ScrollingStateNodes?  I thought it was the ScrollingCoordinator&apos;s job to deal with these mappings.

I am trying to keep it mostly internal to ScrollingCoordinator. The actual ScrollingStateNodes are definitely contained within the class still. Is there something in particular that you think violates that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735143</commentid>
    <comment_count>9</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-04 17:04:24 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Do you have to make the caller of ScrollingCoordinator aware of the ScrollingStateNodes?  I thought it was the ScrollingCoordinator&apos;s job to deal with these mappings.

Maybe you are referring to these functions:

    void detachFromStateTree(RenderLayerBacking*);
    void clearStateTree();

Perhaps it would be more appropriate to re-name those so that they don&apos;t reference the state tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735166</commentid>
    <comment_count>10</comment_count>
      <attachid>167215</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-04 17:29:59 -0700</bug_when>
    <thetext>Created attachment 167215
Patch that should build

AKA ERMAHGERD THE ERF DERFS

Maybe there is a better way to get this building, but ScrollingCoordinator already seems like such a mess with the if-defs that I&apos;m not really sure what the best choice is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735182</commentid>
    <comment_count>11</comment_count>
      <attachid>167215</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-04 17:40:05 -0700</bug_when>
    <thetext>Comment on attachment 167215
Patch that should build

Attachment 167215 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14175308</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735189</commentid>
    <comment_count>12</comment_count>
      <attachid>167215</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-04 17:47:56 -0700</bug_when>
    <thetext>Comment on attachment 167215
Patch that should build

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

&gt; Source/WebCore/dom/Document.cpp:4064
&gt;              v-&gt;cacheCurrentScrollPosition();
&gt; -            if (page() &amp;&amp; page()-&gt;mainFrame() == m_frame)
&gt; +            if (page &amp;&amp; page-&gt;mainFrame() == m_frame) {
&gt;                  v-&gt;resetScrollbarsAndClearContentsSize();
&gt; -            else
&gt; +                if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; +                    scrollingCoordinator-&gt;clearStateTree();
&gt; +            } else

Maybe this should be done in a separate patch? This patch is big enough already.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:255
&gt; +    // ensureRootStateNodeForFrameView() can fail if, for example, the FrameView does not have a
&gt; +    // RenderLayerBacking. If that is the case, then we should not do any more work here.

The comment would be more useful if it said when this might happen (to allow a developer to reproduce the scenario).

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:462
&gt; +static RenderLayerBacking* backingForFrameView(FrameView* frameView)

I&apos;m not sure why SC ever needs to know about RLB.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:503
&gt; +void ScrollingCoordinator::detachFromStateTree(RenderLayerBacking* backing)

Why not just pass the ID in here?

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:549
&gt; +    if (!rootLayerID) {
&gt; +        rootLayerID = generateScrollLayerID();
&gt; +        backing-&gt;setScrollLayerID(rootLayerID);
&gt; +    }

I think this code should live in RLB.

&gt; Source/WebCore/rendering/RenderLayer.cpp:4462
&gt; +        if (isRootLayer() &amp;&amp; compositor()-&gt;scrollLayer()) {
&gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; +                if (Page* page = frame-&gt;page()) {
&gt; +                    if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; +                        scrollingCoordinator-&gt;frameViewRootLayerDidChange(frame-&gt;view());
&gt; +                }
&gt; +            }
&gt; +        }

Seems like an odd place to put this. I think we should try to keep all of the calls into SC in RLC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735197</commentid>
    <comment_count>13</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-04 17:54:28 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/130439</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736022</commentid>
    <comment_count>14</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-05 15:16:41 -0700</bug_when>
    <thetext>ScrollingCoordinator is really kind of a mess.  What would you think about making the interface just a vtable and separating the implementation bits into separate subclasses instead of one implemenation that&apos;s all sliced up to hell?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736409</commentid>
    <comment_count>15</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-07 13:27:10 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; http://trac.webkit.org/changeset/130439

Simon, did you mean to paste this somewhere else?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736410</commentid>
    <comment_count>16</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-07 13:34:37 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; ScrollingCoordinator is really kind of a mess.  What would you think about making the interface just a vtable and separating the implementation bits into separate subclasses instead of one implemenation that&apos;s all sliced up to hell?

I definitely agree that ScrollingCoordinator is a huge mess. I didn&apos;t realize how bad it was until I wrote this patch. I don&apos;t love the idea of virtualization here because we would be adding run-time cost for something that is known at compile-time. This may not actually be a performance-critical area, but I still think it&apos;s a best-practice that is worth sticking to.

What could work instead would be to make ScrollingCoordinator.h a very small file that looks something like this:

#if PLATFORM(MAC)
#include &quot;ScrollingCoordinatorMac.h&quot;
typedef ScrollingCoordinatorMac ScrollingCoordinator;
#endif

#if PLATFORM(CHROMIUM)
#include &quot;ScrollingCoordinatorChromium.h&quot;
typedef ScrollingCoordiantorChromium ScrollingCoordinator;
#endif

// Other platforms here.

And then ScrollingCoordinatorMac and ScrollingCoordinatorChromium could inherit from a ScrollingCoordinatorBase that could contain any legitimately shared functionality.

At this point, I do think something like that would be greatly preferable to this rat&apos;s nest, but some of the forking is unfortunate. I guess we&apos;re already in that state though.

I&apos;m not going to focus on this re-structuring for this patch because it will be a big task on its own. But I do think we should do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736411</commentid>
    <comment_count>17</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-07 13:39:49 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 167215 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167215&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Document.cpp:4064
&gt; &gt;              v-&gt;cacheCurrentScrollPosition();
&gt; &gt; -            if (page() &amp;&amp; page()-&gt;mainFrame() == m_frame)
&gt; &gt; +            if (page &amp;&amp; page-&gt;mainFrame() == m_frame) {
&gt; &gt;                  v-&gt;resetScrollbarsAndClearContentsSize();
&gt; &gt; -            else
&gt; &gt; +                if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; &gt; +                    scrollingCoordinator-&gt;clearStateTree();
&gt; &gt; +            } else
&gt; 
&gt; Maybe this should be done in a separate patch? This patch is big enough already.
&gt; 

This code is required in this patch because this patch also makes it so ScrollingStateTree does not automatically create a root node upon its own creation. With that change in place, this code is required to avoid crashing. Both of these things could technically be done in another patch, but there would have to be some weird temporary code that accounts for the fact that we would always creat root state node that is not ready to be ScrollingCoordinator&apos;s HashMap since it hasn&apos;t been associated with a FrameView. I don&apos;t think it&apos;s the right trade-off to do this work in a separate patch, so I&apos;m going to leave it in for now.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:255
&gt; &gt; +    // ensureRootStateNodeForFrameView() can fail if, for example, the FrameView does not have a
&gt; &gt; +    // RenderLayerBacking. If that is the case, then we should not do any more work here.
&gt; 
&gt; The comment would be more useful if it said when this might happen (to allow a developer to reproduce the scenario).
&gt; 

I changed this into an assertion since that is the most accurate comment.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:462
&gt; &gt; +static RenderLayerBacking* backingForFrameView(FrameView* frameView)
&gt; 
&gt; I&apos;m not sure why SC ever needs to know about RLB.
&gt; 

I changed this so that it does not.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:503
&gt; &gt; +void ScrollingCoordinator::detachFromStateTree(RenderLayerBacking* backing)
&gt; 
&gt; Why not just pass the ID in here?
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:549
&gt; &gt; +    if (!rootLayerID) {
&gt; &gt; +        rootLayerID = generateScrollLayerID();
&gt; &gt; +        backing-&gt;setScrollLayerID(rootLayerID);
&gt; &gt; +    }
&gt; 
&gt; I think this code should live in RLB.
&gt; 

Moved it.

&gt; &gt; Source/WebCore/rendering/RenderLayer.cpp:4462
&gt; &gt; +        if (isRootLayer() &amp;&amp; compositor()-&gt;scrollLayer()) {
&gt; &gt; +            if (Frame* frame = renderer()-&gt;frame()) {
&gt; &gt; +                if (Page* page = frame-&gt;page()) {
&gt; &gt; +                    if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; &gt; +                        scrollingCoordinator-&gt;frameViewRootLayerDidChange(frame-&gt;view());
&gt; &gt; +                }
&gt; &gt; +            }
&gt; &gt; +        }
&gt; 
&gt; Seems like an odd place to put this. I think we should try to keep all of the calls into SC in RLC.

Okay, I moved it back to RLC, and I put it after RLC&apos;s call to ensureBacking() so that we can be sure we have a backing.

Simon, I am re-opening this bug because I don&apos;t think you meant to close it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736413</commentid>
    <comment_count>18</comment_count>
      <attachid>167487</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-07 14:07:27 -0700</bug_when>
    <thetext>Created attachment 167487
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736415</commentid>
    <comment_count>19</comment_count>
      <attachid>167487</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-07 14:12:47 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14205437</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736416</commentid>
    <comment_count>20</comment_count>
      <attachid>167487</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-07 14:13:35 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/14204434</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736417</commentid>
    <comment_count>21</comment_count>
      <attachid>167487</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-10-07 14:16:25 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/14205438</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736418</commentid>
    <comment_count>22</comment_count>
      <attachid>167487</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-07 14:16:26 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14221069</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736419</commentid>
    <comment_count>23</comment_count>
      <attachid>167487</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-07 14:21:54 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14207331</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736423</commentid>
    <comment_count>24</comment_count>
      <attachid>167487</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-07 14:33:09 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass win-ews (win):
Output: http://queues.webkit.org/results/14217137</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736440</commentid>
    <comment_count>25</comment_count>
      <attachid>167487</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-07 15:24:04 -0700</bug_when>
    <thetext>Comment on attachment 167487
Patch

Attachment 167487 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14211206</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736464</commentid>
    <comment_count>26</comment_count>
      <attachid>167496</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-07 19:59:17 -0700</bug_when>
    <thetext>Created attachment 167496
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736469</commentid>
    <comment_count>27</comment_count>
      <attachid>167496</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-07 20:09:00 -0700</bug_when>
    <thetext>Comment on attachment 167496
Patch

Attachment 167496 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14204509</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736470</commentid>
    <comment_count>28</comment_count>
      <attachid>167496</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-07 20:09:37 -0700</bug_when>
    <thetext>Comment on attachment 167496
Patch

Attachment 167496 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14201597</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736472</commentid>
    <comment_count>29</comment_count>
      <attachid>167496</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-07 20:18:10 -0700</bug_when>
    <thetext>Comment on attachment 167496
Patch

Attachment 167496 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14214200</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736826</commentid>
    <comment_count>30</comment_count>
      <attachid>167570</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 11:20:57 -0700</bug_when>
    <thetext>Created attachment 167570
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736851</commentid>
    <comment_count>31</comment_count>
      <attachid>167570</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-08 11:40:30 -0700</bug_when>
    <thetext>Comment on attachment 167570
Patch

Attachment 167570 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14211442</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736881</commentid>
    <comment_count>32</comment_count>
      <attachid>167577</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 11:52:48 -0700</bug_when>
    <thetext>Created attachment 167577
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736949</commentid>
    <comment_count>33</comment_count>
      <attachid>167577</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 12:59:01 -0700</bug_when>
    <thetext>Comment on attachment 167577
Patch

Attachment 167577 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14215424</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736951</commentid>
    <comment_count>34</comment_count>
      <attachid>167577</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-10-08 13:06:48 -0700</bug_when>
    <thetext>Comment on attachment 167577
Patch

Attachment 167577 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/14229209</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736952</commentid>
    <comment_count>35</comment_count>
      <attachid>167592</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 13:09:07 -0700</bug_when>
    <thetext>Created attachment 167592
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737016</commentid>
    <comment_count>36</comment_count>
      <attachid>167592</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-08 14:07:02 -0700</bug_when>
    <thetext>Comment on attachment 167592
Patch

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

&gt; Source/WebCore/loader/HistoryController.cpp:131
&gt; +        Page* page = m_frame-&gt;page();
&gt; +        if (page &amp;&amp; page-&gt;mainFrame() == m_frame) {
&gt; +            if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; +                scrollingCoordinator-&gt;frameViewRootLayerDidChange(view);
&gt; +        }

This is a bit mysterious here, and it&apos;s a shame to call into ScrollingCoordinator from yet another file. What work does it need to do?

&gt; Source/WebCore/page/FrameView.h:137
&gt; +    uint64_t scrollLayerID() const;

Does this have to be public on FrameView? Can&apos;t FrameView pass its own ID into the SC?

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:153
&gt; +

Blanky.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:473
&gt; +    ASSERT(node-&gt;isScrollingStateScrollingNode());
&gt; +    return toScrollingStateScrollingNode(node);

toScrollingStateScrollingNode will ASSERT for you; no need to ASSERT here too.

&gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:92
&gt; +    size_t size = m_children-&gt;size();
&gt; +    for (size_t i = 0; i &lt; size; ++i)
&gt; +        m_children-&gt;at(i)-&gt;removeChild(node);

Looks like you&apos;re iterating the array while mutating it here.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:972
&gt; +static uint64_t generateScrollLayerID()
&gt; +{
&gt; +    static uint64_t uniqueScrollLayerID = 1;
&gt; +    return uniqueScrollLayerID++;
&gt; +}

I think the ID generation should be on ScrollingCoordinator. Calling could look like:

m_id = scrollingCoordinator-&gt;attach(scrollingCoordinator-&gt;uniqueNodeID(), someConstraintsData)

where attach returns the ID passed in, for convenience.

&gt; Source/WebCore/rendering/RenderLayerBacking.cpp:978
&gt; +void RenderLayerBacking::attachToScrollingCoordinator()
&gt; +{
&gt; +    if (!m_scrollLayerID)
&gt; +        m_scrollLayerID = generateScrollLayerID();
&gt; +}

But this isn&apos;t attaching, it&apos;s just making an ID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737032</commentid>
    <comment_count>37</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 14:19:09 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 167592 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=167592&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/HistoryController.cpp:131
&gt; &gt; +        Page* page = m_frame-&gt;page();
&gt; &gt; +        if (page &amp;&amp; page-&gt;mainFrame() == m_frame) {
&gt; &gt; +            if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; &gt; +                scrollingCoordinator-&gt;frameViewRootLayerDidChange(view);
&gt; &gt; +        }
&gt; 
&gt; This is a bit mysterious here, and it&apos;s a shame to call into ScrollingCoordinator from yet another file. What work does it need to do?
&gt; 

This creates a root state node for the cached page. There is none otherwise because the root state node for the previous page was destroyed when its FrameView and backing went away.

&gt; &gt; Source/WebCore/page/FrameView.h:137
&gt; &gt; +    uint64_t scrollLayerID() const;
&gt; 
&gt; Does this have to be public on FrameView? Can&apos;t FrameView pass its own ID into the SC?
&gt; 

It definitely does need to be public. ScrollingCoordinator needs to be able to access this ID whenever it has messages to send to the scrolling thread.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:153
&gt; &gt; +
&gt; 
&gt; Blanky.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingCoordinator.cpp:473
&gt; &gt; +    ASSERT(node-&gt;isScrollingStateScrollingNode());
&gt; &gt; +    return toScrollingStateScrollingNode(node);
&gt; 
&gt; toScrollingStateScrollingNode will ASSERT for you; no need to ASSERT here too.
&gt; 

Fixed.

&gt; &gt; Source/WebCore/page/scrolling/ScrollingStateNode.cpp:92
&gt; &gt; +    size_t size = m_children-&gt;size();
&gt; &gt; +    for (size_t i = 0; i &lt; size; ++i)
&gt; &gt; +        m_children-&gt;at(i)-&gt;removeChild(node);
&gt; 
&gt; Looks like you&apos;re iterating the array while mutating it here.
&gt; 

Hmm, kind of. I don&apos;t think this is actually dangerous. We NOT mutating the array we are iterating. We are potentially mutating the array that belongs to one of the objects in the array that we are iterating, if that makes sense.

&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:972
&gt; &gt; +static uint64_t generateScrollLayerID()
&gt; &gt; +{
&gt; &gt; +    static uint64_t uniqueScrollLayerID = 1;
&gt; &gt; +    return uniqueScrollLayerID++;
&gt; &gt; +}
&gt; 
&gt; I think the ID generation should be on ScrollingCoordinator. Calling could look like:
&gt; 
&gt; m_id = scrollingCoordinator-&gt;attach(scrollingCoordinator-&gt;uniqueNodeID(), someConstraintsData)
&gt; 
&gt; where attach returns the ID passed in, for convenience.
&gt; 

Okay. Your last comments made me think you wanted this code on RLB, so I move it there. I see what you want now. That is fine.

&gt; &gt; Source/WebCore/rendering/RenderLayerBacking.cpp:978
&gt; &gt; +void RenderLayerBacking::attachToScrollingCoordinator()
&gt; &gt; +{
&gt; &gt; +    if (!m_scrollLayerID)
&gt; &gt; +        m_scrollLayerID = generateScrollLayerID();
&gt; &gt; +}
&gt; 
&gt; But this isn&apos;t attaching, it&apos;s just making an ID.

Do you have another name suggestion? I was trying to avoid being overly-explict about the state tree since we are trying to keep that internal to ScrollingCoordinator, so I chose attachToScrollingCoordinator(). We could do something like addToScrollLayerHashMap().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737088</commentid>
    <comment_count>38</comment_count>
      <attachid>167624</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 14:58:34 -0700</bug_when>
    <thetext>Created attachment 167624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737132</commentid>
    <comment_count>39</comment_count>
      <attachid>167624</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2012-10-08 15:38:48 -0700</bug_when>
    <thetext>Comment on attachment 167624
Patch

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

&gt; Source/WebCore/dom/Document.cpp:4063
&gt;              v-&gt;cacheCurrentScrollPosition();
&gt; -            if (page() &amp;&amp; page()-&gt;mainFrame() == m_frame)
&gt; +            if (page &amp;&amp; page-&gt;mainFrame() == m_frame) {
&gt;                  v-&gt;resetScrollbarsAndClearContentsSize();
&gt; -            else
&gt; +                if (ScrollingCoordinator* scrollingCoordinator = page-&gt;scrollingCoordinator())
&gt; +                    scrollingCoordinator-&gt;clearStateTree();

Let&apos;s file a bug to clean up the page cache save/restore and make it more symmetrical.

&gt; Source/WebCore/page/scrolling/ScrollingCoordinator.h:144
&gt; +    uint64_t attachToStateTree(uint64_t);

It&apos;s still odd that attach() isn&apos;t really attaching anything; it&apos;s making a node in the tree that will be filled in later. Can we just create the node with a new ID when we &quot;fill in&quot; that node later?

I think we should have a typedef (&quot;ScrollingNodeID&quot;) for the uint64_t too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737359</commentid>
    <comment_count>40</comment_count>
      <attachid>167674</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-08 19:36:18 -0700</bug_when>
    <thetext>Created attachment 167674
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737403</commentid>
    <comment_count>41</comment_count>
      <attachid>167674</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-08 21:45:16 -0700</bug_when>
    <thetext>Comment on attachment 167674
Patch

Attachment 167674 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14209754

New failing tests:
ScrollingCoordinatorChromiumTest.wheelEventHandler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737983</commentid>
    <comment_count>42</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-10-09 11:32:53 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; (From update of attachment 167674 [details])
&gt; Attachment 167674 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/14209754
&gt; 
&gt; New failing tests:
&gt; ScrollingCoordinatorChromiumTest.wheelEventHandler

You plan to fix this before landing, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737990</commentid>
    <comment_count>43</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-09 11:35:25 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (In reply to comment #41)
&gt; &gt; (From update of attachment 167674 [details] [details])
&gt; &gt; Attachment 167674 [details] [details] did not pass chromium-ews (chromium-xvfb):
&gt; &gt; Output: http://queues.webkit.org/results/14209754
&gt; &gt; 
&gt; &gt; New failing tests:
&gt; &gt; ScrollingCoordinatorChromiumTest.wheelEventHandler
&gt; 
&gt; You plan to fix this before landing, right?

I believe I know how to fix this, yes. And I have that fix in place. I&apos;m going to land and watch the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738013</commentid>
    <comment_count>44</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-09 11:47:53 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/130783</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739393</commentid>
    <comment_count>45</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-10 16:41:12 -0700</bug_when>
    <thetext>This caused https://bugs.webkit.org/show_bug.cgi?id=98968</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739562</commentid>
    <comment_count>46</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2012-10-10 20:39:15 -0700</bug_when>
    <thetext>This also caused https://bugs.webkit.org/show_bug.cgi?id=98984</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167191</attachid>
            <date>2012-10-04 15:46:48 -0700</date>
            <delta_ts>2012-10-04 17:29:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review.txt</filename>
            <type>text/plain</type>
            <size>31737</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDQyNSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxMi0xMC0wNCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgUmV0dXJucyB0aGUgUmVuZGVy
TGF5ZXJCYWNraW5nIGZvciBhIGdpdmVuIEZyYW1lVmlldy4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiYWNraW5n
Rm9yRnJhbWVWaWV3KToKKworICAgICAgICBSZXR1cm5zIHRoZSBleGlzdGluZyBTY3JvbGxpbmdT
dGF0ZU5vZGUgZm9yIGEgZ2l2ZW4gRnJhbWVWaWV3IGJ5IAorICAgICAgICBsb29raW5nIGl0IHVw
IGluIHRoZSBIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBh
IFJlbmRlckxheWVyQmFja2luZyBpcyBkZXN0cm95ZWQuIEF0IHRoYXQgdGltZSwgCisgICAgICAg
IGl0cyBhc3NvY2lhdGVkIFNjcm9sbGluZ1N0YXRlTm9kZSBpcyBkZXN0cm95ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZSk6CisK
KyAgICAgICAgY2xlYXJTdGF0ZVRyZWUoKSBjbGVhcnMgdGhlIEhhc2hNYXAgYW5kIGRlc3Ryb3lz
IGFsbCBvZiB0aGUgbm9kZXMgaW4gCisgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUpOgor
CisgICAgICAgIElEcyB0byBhc3NvY2lhdGUgd2l0aCBSZW5kZXJMYXllckJhY2tpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTY3JvbGxMYXllcklEKToKKworICAgICAgICBDcmVhdGVz
IGEgbmV3IHJvb3Qgc3RhdGUgbm9kZSBmb3IgdGhlIGdpdmVuIEZyYW1lVmlldy4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KToKKworICAgICAgICBBbGwgb2YgdGhpcyBjb2RlIHVzZWQgdG8gcmVmZXIgdG8gdGhl
IHJvb3RTdGF0ZU5vZGUgZGlyZWN0bHkuIAorICAgICAgICBJbnN0ZWFkLCBub3cgaXQgbG9va3Mg
dXAgdGhlIHByb3BlciBTY3JvbGxpbmdTdGF0ZU5vZGUgZm9yIHRoZSBnaXZlbiAKKyAgICAgICAg
RnJhbWVWaWV3IGluIHRoZSBIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290
TGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5
ZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9y
Tm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25Gb3JOb2RlKToKKworICAgICAgICBOZXcgcmVtb3ZlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3
aGVuIHRoZSBzYXRlIHRyZWUgaXMgY2xlYXJlZCBhbmQgd2hlbiAKKyAgICAgICAgYSBSZW5kZXJM
YXllckJhY2tpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6
OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6cGFyZW50KToKKworICAgICAgICBOZXcg
Y29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3RpbmcgdG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAgIE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5
IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9uIG9mIHRoZSAKKyAgICAgICAgU2Nyb2xs
aW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2Rl
IHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVyTGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0
ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRl
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJv
b3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVUcmVlKToKKworICAgICAgICBN
b3ZlIHRoZSBjYWxsIHRvIFNjcm9sbGluZ0Nvb3JpZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVy
RGlkQ2hhbmdlKCkgCisgICAgICAgIGZyb20gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hS
b290TGF5ZXIoKSB0byAKKyAgICAgICAgUmVuZGVyTGF5ZXI6OmVuc3VyZUJhY2tpbmcoKS4gVGhl
IHByb2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgc2l0ZSBpcyAKKyAgICAgICAgdGhhdCB0aGVyZSBp
cyBubyBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgc3RhdGUg
CisgICAgICAgIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZl
IGVub3VnaCBpbmZvcm1hdGlvbiB0byAKKyAgICAgICAgY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRk
IGl0IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRh
Y2hSb290TGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5zdXJlQmFja2luZyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNr
aW5nIGhhcyBhIG5ldyBkYXRhIG1lbWJlciBjYWxsZWQgbV9zY3JvbGxMYXllcklELiBJZiAKKyAg
ICAgICAgdGhpcyBSZW5kZXJMYXllckJhY2tpbmcgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHNjcm9s
bGluZyB0cmVlLCB0aGVuIAorICAgICAgICB0aGUgSUQgd2l0aCBiZSB1bmlxdWUgYW5kIG5vbi16
ZXJvLiAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6flJlbmRlckxh
eWVyQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFj
aEZyb21TY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgIChSZW5kZXJMYXllckJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzY3JvbGxMYXll
cklEKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0U2Nyb2xsTGF5
ZXJJRCk6CisKIDIwMTItMTAtMDQgIFByYXZpbiBEICA8cHJhdmluZC4yazRAZ21haWwuY29tPgog
CiAgICAgICAgIExheW91dCBicm9rZW4gYWZ0ZXIgY2xvbmluZyBhbmQgcmUtaW5zZXJ0aW5nIGEg
dGFibGUgd2l0aCBhIG1pc3BsYWNlZCA8Zm9ybT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cAkocmV2aXNpb24gMTMwMTg0KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDA2NiwxNCArNDA2NiwxOCBAQCB2b2lkIERvY3VtZW50OjpzZXRJ
blBhZ2VDYWNoZShib29sIGZsYWcpCiAgICAgbV9pblBhZ2VDYWNoZSA9IGZsYWc7CiAKICAgICBG
cmFtZVZpZXcqIHYgPSB2aWV3KCk7CisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKwog
ICAgIGlmIChmbGFnKSB7CiAgICAgICAgIEFTU0VSVCghbV9zYXZlZFJlbmRlcmVyKTsKICAgICAg
ICAgbV9zYXZlZFJlbmRlcmVyID0gcmVuZGVyZXIoKTsKICAgICAgICAgaWYgKHYpIHsKICAgICAg
ICAgICAgIHYtPmNhY2hlQ3VycmVudFNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAo
cGFnZSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkKKyAgICAgICAgICAgIGlm
IChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUpIHsKICAgICAgICAgICAgICAg
ICB2LT5yZXNldFNjcm9sbGJhcnNBbmRDbGVhckNvbnRlbnRzU2l6ZSgpOwotICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5n
Q29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+Y2xlYXJTdGF0ZVRyZWUoKTsKKyAgICAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHYtPnJlc2V0U2Nyb2xsYmFycygpOwogICAgICAg
ICB9CiAgICAgICAgIG1fc3R5bGVSZWNhbGNUaW1lci5zdG9wKCk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEzMDE4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNh
Y2hlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRp
bmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KIApAQCAtMTIzLDggKzEyNCwxMyBAQCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0
b3JlU2Nyb2xsUG9zCiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5yZXN0b3JlVmll
d1N0YXRlKCk7CiAgICAgCiAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXco
KSkgeworICAgICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOworICAgICAgICBpZiAo
cGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CisgICAgICAgICAgICBpZiAo
U2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+
ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKHZpZXcpOworICAgICAgICB9CisKICAgICAgICAg
aWYgKCF2aWV3LT53YXNTY3JvbGxlZEJ5VXNlcigpKSB7Ci0gICAgICAgICAgICBQYWdlKiBwYWdl
ID0gbV9mcmFtZS0+cGFnZSgpOwogICAgICAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+bWFpbkZy
YW1lKCkgPT0gbV9mcmFtZSAmJiBtX2N1cnJlbnRJdGVtLT5wYWdlU2NhbGVGYWN0b3IoKSkKICAg
ICAgICAgICAgICAgICBwYWdlLT5zZXRQYWdlU2NhbGVGYWN0b3IobV9jdXJyZW50SXRlbS0+cGFn
ZVNjYWxlRmFjdG9yKCksIG1fY3VycmVudEl0ZW0tPnNjcm9sbFBvaW50KCkpOwogICAgICAgICAg
ICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMwMTg0KQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04Niw2ICs4Niw5NyBAQCBTY3JvbGxpbmdUcmVlKiBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2NyCiB9CiAjZW5kaWYKIAorc3RhdGljIFJlbmRlckxheWVyQmFja2luZyogYmFja2luZ0Zv
ckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisgICAgRnJhbWUqIGZyYW1lID0gZnJhbWVWaWV3LT5mcmFtZSgpOworICAg
IGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVuZGVyVmlldyogdmlldyA9
IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKTsKKyAgICBpZiAoIXZpZXcpCisgICAgICAgIHJldHVy
biAwOworCisgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gdmlldy0+bGF5ZXIoKTsKKyAgICBpZiAo
IWxheWVyKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBsYXllci0+YmFja2luZygp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKKyAgICByZXR1cm4gMDsKKyNl
bmRpZgorfQorCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAg
UmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gYmFja2luZ0ZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpOworICAgIGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB1aW50NjRf
dCBzY3JvbGxMYXllcklEID0gYmFja2luZy0+c2Nyb2xsTGF5ZXJJRCgpOworICAgIGlmICghc2Ny
b2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBT
Y3JvbGxpbmdTdGF0ZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3N0YXRlTm9kZU1hcC5m
aW5kKHNjcm9sbExheWVySUQpOworICAgIGlmIChpdCA9PSBtX3N0YXRlTm9kZU1hcC5lbmQoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBpdC0+
c2Vjb25kOworICAgIEFTU0VSVChub2RlLT5pc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgp
KTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoUmVuZGVyTGF5
ZXJCYWNraW5nKiBiYWNraW5nKQoreworICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQgPSBiYWNr
aW5nLT5zY3JvbGxMYXllcklEKCk7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50
YWtlKHNjcm9sbExheWVySUQpOworCisgICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRl
c3Ryb3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUg
SGFzaE1hcC4KKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFy
ZSBhY3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xl
YXJTdGF0ZVRyZWUoKQoreworICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7CisgICAgaWYgKFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2Rl
KG5vZGUpOworfQorCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVTY3JvbGxMYXllcklEKCkKK3sK
KyAgICBzdGF0aWMgdWludDY0X3QgdW5pcXVlU2Nyb2xsTGF5ZXJJRCA9IDE7CisgICAgcmV0dXJu
IHVuaXF1ZVNjcm9sbExheWVySUQrKzsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKK3sK
KyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIGV4aXN0aW5nTm9kZSA9IHN0YXRlTm9k
ZUZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmIChleGlzdGluZ05vZGUgJiYgZXhpc3Rp
bmdOb2RlID09IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNsZWFyU3RhdGVUcmVlKCk7CisKKyAgICBSZW5kZXJMYXllckJhY2tp
bmcqIGJhY2tpbmcgPSBiYWNraW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFi
YWNraW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBDcmVhdGUgYSBuZXcgbm9kZSBmb3Ig
dGhlIEZyYW1lVmlldywgYW5kIHNldCBpdCBhcyB0aGUgcm9vdCBub2RlLgorICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5zZXRSb290U3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZTo6Y3JlYXRlKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLmdldCgpKSk7CisKKyAgICAvLyBOb3cgZ2V0
IG9yIHNldCBhbiBJRCBmb3IgdGhlIGJhY2tpbmcsIGFuZCB0aGVuIGFkZCB0aGUgY29tYmluYXRp
b24gdG8gdGhlIEhhc2hNYXAuCisgICAgdWludDY0X3Qgcm9vdExheWVySUQgPSBiYWNraW5nLT5z
Y3JvbGxMYXllcklEKCk7CisgICAgaWYgKCFyb290TGF5ZXJJRCkgeworICAgICAgICByb290TGF5
ZXJJRCA9IGdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCgpOworICAgICAgICBiYWNraW5nLT5zZXRTY3Jv
bGxMYXllcklEKHJvb3RMYXllcklEKTsKKyAgICB9CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHJv
b3RMYXllcklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKK30KKwog
Ym9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZp
ZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKQEAgLTE1NywxMSArMjQ4LDE4IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZy
YW1lVmlld0xheW8KICAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFt
ZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVu
IGlmIHRoZQogICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5v
dCB0aGUgbWFpbiBmcmFtZS4KICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBj
b21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9p
bnQoKSk7Ci0gICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5IHdhbnQgdG8gaGF2ZSB0aGUg
YWJpbGl0eSB0byBzZXQgbm9uLWZhc3Qgc2Nyb2xsaW5nIHJlZ2lvbnMgZm9yIG1vcmUgdGhhbgor
ICAgIC8vIGp1c3QgdGhlIHJvb3Qgbm9kZS4gQnV0IHJpZ2h0IG5vdywgdGhpcyBjb25jZXB0IG9u
bHkgYXBwbGllcyB0byB0aGUgcm9vdC4KKyAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZv
ck5vZGUobm9uRmFzdFNjcm9sbGFibGVSZWdpb24sIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCkpOwogCiAgICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmll
dyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47CiAKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBp
ZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwogICAgIFNjcm9sbFBhcmFtZXRlcnMgc2Nyb2xs
UGFyYW1ldGVyczsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGlj
aXR5ID0gZnJhbWVWaWV3LT5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSgpOwogICAgIHNjcm9s
bFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5ID0gZnJhbWVWaWV3LT52ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkoKTsKQEAgLTE3NCwxNSArMjcyLDE1IEBAIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW8KICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0
UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3Qo
KS5zaXplKCkpOwogICAgIHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3
LT5jb250ZW50c1NpemUoKTsKIAotICAgIHNldFNjcm9sbFBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1l
dGVycyk7CisgICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywg
bm9kZSk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZl
bnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZyYW1lVmlldyopCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZChGcmFtZVZpZXcqIGZy
YW1lVmlldykKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3Bh
Z2UpOwogCi0gICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHJlY29t
cHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKIH0KIAog
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3SGFzU2xvd1JlcGFpbnRPYmplY3Rz
RGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtMjMyLDEwICszMzAsMTggQEAgdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdAogICAgIGlmICghY29vcmRpbmF0
ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwogCisg
ICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9k
ZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9y
RnJhbWVWaWV3KGZyYW1lVmlldyk7CisKKyAgICAvLyBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KCkgY2FuIGZhaWwgaWYsIGZvciBleGFtcGxlLCB0aGUgRnJhbWVWaWV3IGRvZXMgbm90
IGhhdmUgYQorICAgIC8vIFJlbmRlckxheWVyQmFja2luZy4gSWYgdGhhdCBpcyB0aGUgY2FzZSwg
dGhlbiB3ZSBzaG91bGQgbm90IGRvIGFueSBtb3JlIHdvcmsgaGVyZS4KKyAgICBpZiAoIW1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGZyYW1lVmlld0xheW91dFVwZGF0ZWQoZnJhbWVWaWV3KTsKLSAgICByZWNvbXB1dGVXaGVlbEV2
ZW50SGFuZGxlckNvdW50KCk7CisgICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ckZyYW1lVmlldyhmcmFtZVZpZXcpOwogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVy
UG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAgICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZv
ckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1l
VmlldykpOwogfQogCiBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9z
aXRpb25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQ
b3NpdGlvbikKQEAgLTI1NCw3ICszNjAsMTEgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
cmVxdWVzdFNjcm9sbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRpY1Njcm9sbCgpKTsKKyAg
ICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZSA9IHN0YXRlTm9kZUZvckZy
YW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICghc3RhdGVOb2RlKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBzdGF0ZU5vZGUtPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOwogICAgIHNjaGVk
dWxlVHJlZVN0YXRlQ29tbWl0KCk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQpAQCAtMzU2LDE0
ICs0NjYsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgogfQog
I2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRI
YW5kbGVyQ291bnQoKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxF
dmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKKyAg
ICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybjsKKwogICAgIHVu
c2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQgPSAwOwogICAgIGZvciAoRnJhbWUqIGZyYW1l
ID0gbV9wYWdlLT5tYWluRnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS0+dHJh
dmVyc2VOZXh0KCkpIHsKICAgICAgICAgaWYgKGZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICAg
ICAgd2hlZWxFdmVudEhhbmRsZXJDb3VudCArPSBmcmFtZS0+ZG9jdW1lbnQoKS0+d2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpOwogICAgIH0KLSAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQpOworICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JO
b2RlKHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIG5vZGUpOwogfQogCiBib29sIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZpZXcqIGZyYW1lVmlldykK
QEAgLTQxNywzOSArNTMxLDM3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEZvcmNl
TWFpblQKIH0KIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGlj
c0xheWVyKiBzY3JvbGxMYXllciwgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQogewotICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNjcm9sbExheWVyKHNjcm9s
bExheWVyKTsKKyAgICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgc2No
ZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29u
c3QgUmVnaW9uJiByZWdpb24sIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsK
LSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXROb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihyZWdpb24pOworICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKHJlZ2lvbik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJh
bWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFy
YW1ldGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewotICAgIC8vIEZJ
WE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIGFuZCBhbGwgb2YgdGhlIG90aGVyIGZ1
bmN0aW9ucyBpbiB0aGlzIGNsYXNzIG5lZWQgdG8KLSAgICAvLyBoYW5kbGUgbW9yZSB0aGFuIGp1
c3QgdGhlIHJvb3Qgbm9kZS4gCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMu
dmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJh
bWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIo
c2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOwotICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxiYXJN
b2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOwotICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9k
ZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFy
YW1ldGVycy5zY3JvbGxPcmlnaW4pOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7
Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Q29udGVudHNT
aXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKKyAgICBub2RlLT5zZXRIb3Jpem9u
dGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5KTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFy
YW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG5vZGUtPnNldEhhc0VuYWJs
ZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihz
Y3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgbm9kZS0+
c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Ny
b2xsYmFyTW9kZSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBh
cmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlKTsKKworICAgIG5vZGUtPnNldFNjcm9sbE9y
aWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbik7CisgICAgbm9kZS0+c2V0Vmlld3Bv
cnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKKyAgICBub2RlLT5zZXRDb250
ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUpOwogICAgIHNjaGVkdWxlVHJl
ZVN0YXRlQ29tbWl0KCk7CiB9CiAKIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUo
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKiBub2RlKQogewotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkt
PnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAg
bm9kZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsK
ICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlz
aW9uIDEzMDE4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nv
b3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgog
I2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgpAQCAtNTAsOCArNTEsMTEgQEAgY2xh
c3MgRnJhbWVWaWV3OwogY2xhc3MgR3JhcGhpY3NMYXllcjsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBS
ZWdpb247CitjbGFzcyBSZW5kZXJMYXllckJhY2tpbmc7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsK
IGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRl
Tm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGlu
Z1N0YXRlVHJlZTsKIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC0xMzcsMTUg
KzE0MSwyMSBAQCBwdWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAg
IH07CiAKKyAgICB2b2lkIGRldGFjaEZyb21TdGF0ZVRyZWUoUmVuZGVyTGF5ZXJCYWNraW5nKik7
CisgICAgdm9pZCBjbGVhclN0YXRlVHJlZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpOworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmll
dyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9k
ZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxh
eWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogCi0gICAgdm9pZCBzZXRTY3JvbGxM
YXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mKTsKKyAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGlj
c0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsUGFyYW1ldGVycyB7CiAgICAgICAgIFNjcm9sbEVs
YXN0aWNpdHkgaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHk7CkBAIC0xNjMsOCArMTczLDggQEAg
cHJpdmF0ZToKICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAgfTsKIAotICAgIHZv
aWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJik7Ci0gICAgdm9p
ZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFNjcm9s
bFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JO
b2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKICAgICB2b2lkIHNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBv
c2l0aW9uKCk7CkBAIC0xODUsNiArMTk1LDggQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlKiBtX3ByaXZhdGU7CisKKyAgICBIYXNoTWFwPHVpbnQ2
NF90LCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBtX3N0YXRlTm9kZU1hcDsKIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMwMTg0
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JO
b25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3Qg
UmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKikKIHsKIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUu
Y3BwCShyZXZpc2lvbiAxMzAzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3NywyMSBAQCB2
b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6YXBwZW5kQ2hpbGQoUGFzCiAgICAgbV9jaGlsZHJlbi0+
YXBwZW5kKGNoaWxkTm9kZSk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVD
aGlsZChTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgaWYgKCFtX2NoaWxkcmVuKQor
ICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2l6ZV90IGluZGV4ID0gbV9jaGlsZHJlbi0+Zmlu
ZChub2RlKSkgeworICAgICAgICBtX2NoaWxkcmVuLT5yZW1vdmUoaW5kZXgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgc2l6ZV90IHNpemUgPSBtX2NoaWxkcmVuLT5zaXplKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIG1fY2hpbGRyZW4t
PmF0KGkpLT5yZW1vdmVDaGlsZChub2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCShyZXZpc2lv
biAxMzAzNDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsOCBAQCBwdWJsaWM6CiAgICAgU2Ny
b2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlVHJlZSopOwogICAgIHZpcnR1YWwgflNjcm9s
bGluZ1N0YXRlTm9kZSgpOwogCisgICAgdmlydHVhbCBib29sIGlzU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKCkgeyByZXR1cm4gZmFsc2U7IH0KKwogICAgIHZpcnR1YWwgUGFzc093blB0cjxT
Y3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkgPSAwOwogICAgIHZvaWQgY2xv
bmVBbmRSZXNldENoaWxkTm9kZXMoU2Nyb2xsaW5nU3RhdGVOb2RlKik7CiAKQEAgLTY2LDEwICs2
OCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JvbGxpbmdTdGF0ZVRyZWUoU2Nyb2xsaW5n
U3RhdGVUcmVlKiB0cmVlKSB7IG1fc2Nyb2xsaW5nU3RhdGVUcmVlID0gdHJlZTsgfQogCiAgICAg
U2Nyb2xsaW5nU3RhdGVOb2RlKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQot
CiAgICAgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsaW5nU3RhdGVOb2RlKiBwYXJlbnQpIHsgbV9wYXJl
bnQgPSBwYXJlbnQ7IH0KKwogICAgIHZvaWQgYXBwZW5kQ2hpbGQoUGFzc093blB0cjxTY3JvbGxp
bmdTdGF0ZU5vZGU+KTsKIAorICAgIHZvaWQgcmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2Rl
Kik7CisKIHByb3RlY3RlZDoKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVO
b2RlKik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCShyZXZpc2lvbiAxMzAzNDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsOCBAQCBwdWJsaWM6CiAgICAgICAgIFJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uID0gMSA8PCAxMiwKICAgICB9OwogCisgICAgdmlydHVhbCBi
b29sIGlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkgT1ZFUlJJREUgeyByZXR1cm4gdHJ1
ZTsgfQorCiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xvbmVB
bmRSZXNldE5vZGUoKSBPVkVSUklERTsKIAogICAgIHZpcnR1YWwgYm9vbCBoYXNDaGFuZ2VkUHJv
cGVydGllcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fY2hhbmdlZFByb3BlcnRpZXM7IH0K
QEAgLTEzNCw2ICsxMzYsMTUgQEAgcHJpdmF0ZToKICAgICBJbnRQb2ludCBtX3Njcm9sbE9yaWdp
bjsKIH07CiAKK2lubGluZSBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHRvU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAgICBBU1NF
UlQoIW5vZGUgfHwgbm9kZS0+aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSk7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSo+KG5vZGUpOwor
fQorICAgIAorLy8gVGhpcyB3aWxsIGNhdGNoIGFueW9uZSBkb2luZyBhbiB1bm5lY2Vzc2FyeSBj
YXN0Lgordm9pZCB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShjb25zdCBTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUqKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYg
Ly8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNwcAkocmV2aXNpb24gMTMw
MzQyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNyBAQCBQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlVHJlZT4gU2Nyb2xsaW5nCiB9CiAKIFNjcm9sbGluZ1N0YXRlVHJlZTo6U2Nyb2xsaW5n
U3RhdGVUcmVlKCkKLSAgICA6IG1fcm9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGU6OmNyZWF0ZSh0aGlzKSkKLSAgICAsIG1faGFzQ2hhbmdlZFByb3BlcnRpZXMoZmFsc2Up
CisgICAgOiBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQogewogfQogCkBAIC01Nyw2ICs1
NiwxOCBAQCBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gU2Nyb2xsaW5nCiAgICAgcmV0
dXJuIHRyZWVTdGF0ZS5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgU2Nyb2xsaW5nU3RhdGVUcmVlOjpy
ZW1vdmVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobV9yb290
U3RhdGVOb2RlKTsKKworICAgIGlmIChub2RlID09IG1fcm9vdFN0YXRlTm9kZSkgeworICAgICAg
ICBtX3Jvb3RTdGF0ZU5vZGUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9y
b290U3RhdGVOb2RlLT5yZW1vdmVDaGlsZChub2RlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCShy
ZXZpc2lvbiAxMzAxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVRyZWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsMTggKzU1LDE5IEBAIHB1YmxpYzoK
ICAgICB+U2Nyb2xsaW5nU3RhdGVUcmVlKCk7CiAKICAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIHJvb3RTdGF0ZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RTdGF0ZU5vZGUuZ2V0
KCk7IH0KKyAgICB2b2lkIHNldFJvb3RTdGF0ZU5vZGUoUGFzc093blB0cjxTY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGU+IHJvb3RTdGF0ZU5vZGUpIHsgbV9yb290U3RhdGVOb2RlID0gcm9vdFN0
YXRlTm9kZTsgfQogCiAgICAgLy8gQ29waWVzIHRoZSBjdXJyZW50IHRyZWUgc3RhdGUgYW5kIGNs
ZWFycyB0aGUgY2hhbmdlZCBwcm9wZXJ0aWVzIG1hc2sgaW4gdGhlIG9yaWdpbmFsLgogICAgIFBh
c3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBjb21taXQoKTsKIAorICAgIHZvaWQgcmVtb3Zl
Tm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKwogICAgIHZvaWQgc2V0SGFzQ2hhbmdlZFByb3Bl
cnRpZXMoYm9vbCBjaGFuZ2VkUHJvcGVydGllcykgeyBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzID0g
Y2hhbmdlZFByb3BlcnRpZXM7IH0KICAgICBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29u
c3QgeyByZXR1cm4gbV9oYXNDaGFuZ2VkUHJvcGVydGllczsgfQogCiBwcml2YXRlOgogICAgIFNj
cm9sbGluZ1N0YXRlVHJlZSgpOwogCi0gICAgdm9pZCBzZXRSb290U3RhdGVOb2RlKFBhc3NPd25Q
dHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290U3RhdGVOb2RlKSB7IG1fcm9vdFN0
YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KLQogICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU+IG1fcm9vdFN0YXRlTm9kZTsKICAgICBib29sIG1faGFzQ2hhbmdlZFByb3Bl
cnRpZXM7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CShyZXZpc2lvbiAxMzAxODQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw3IEBACiAjaW5jbHVkZSAiU2Nyb2xs
QW5pbWF0b3IuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTb3VyY2VHcmFwaGljLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNldC5oIgpAQCAtNDQ1MCw2ICs0NDUxLDE1IEBAIFJlbmRlckxheWVyQmFja2luZyogUmVu
ZGVyTGF5ZXI6OmVuc3VyZUIKICAgICAgICAgbV9iYWNraW5nID0gYWRvcHRQdHIobmV3IFJlbmRl
ckxheWVyQmFja2luZyh0aGlzKSk7CiAgICAgICAgIGNvbXBvc2l0b3IoKS0+bGF5ZXJCZWNhbWVD
b21wb3NpdGVkKHRoaXMpOwogCisgICAgICAgIGlmIChpc1Jvb3RMYXllcigpICYmIGNvbXBvc2l0
b3IoKS0+c2Nyb2xsTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IHJl
bmRlcmVyKCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGFnZSogcGFnZSA9IGZy
YW1lLT5wYWdlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5h
dG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKGZyYW1lLT52aWV3KCkpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgICAg
ICB1cGRhdGVPclJlbW92ZUZpbHRlckVmZmVjdCgpOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTMw
MTg0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6
Om1fY3JlYXRpbmdQcmltYQogCiBSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2lu
ZyhSZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBtX293bmluZ0xheWVyKGxheWVyKQorICAgICwg
bV9zY3JvbGxMYXllcklEKDApCiAgICAgLCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91bmRzKGZh
bHNlKQogICAgICwgbV9pc01haW5GcmFtZVJlbmRlclZpZXdMYXllcihmYWxzZSkKICAgICAsIG1f
dXNpbmdUaWxlZENhY2hlTGF5ZXIoZmFsc2UpCkBAIC0xMzksNiArMTQwLDcgQEAgUmVuZGVyTGF5
ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKAogICAgIHVwZGF0ZUZvcmVncm91bmRMYXll
cihmYWxzZSk7CiAgICAgdXBkYXRlTWFza0xheWVyKGZhbHNlKTsKICAgICB1cGRhdGVTY3JvbGxp
bmdMYXllcnMoZmFsc2UpOworICAgIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpOwog
ICAgIGRlc3Ryb3lHcmFwaGljc0xheWVycygpOwogfQogCkBAIC05NTksNiArOTYxLDI0IEBAIGJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmcKICAgICByZXR1cm4gbGF5ZXJD
aGFuZ2VkOwogfQogCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCkKK3sKKyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgaXMgMCwgdGhlbiB0
aGlzIGJhY2tpbmcgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4K
KyAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSog
cGFnZSA9IHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGlu
YXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxpbmdD
b29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmRldGFjaEZyb21TdGF0ZVRyZWUodGhpcyk7CisgICAgbV9zY3JvbGxMYXllcklEID0gMDsKK30K
KwogR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGlu
Z1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBwaGFzZSA9IEdy
YXBoaWNzTGF5ZXJQYWludEJhY2tncm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCShyZXZpc2lvbiAxMzAxODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTg3LDYgKzg3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2Nyb2xsaW5nTGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3Njcm9sbGluZ0xheWVyOyB9CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xs
aW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0xheWVyLmdldCgpOyB9CiAgICAg
R3JhcGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsgfQorCisgICAgdWludDY0X3Qgc2Nyb2xsTGF5
ZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJRDsgfQorICAgIHZvaWQgc2V0U2Ny
b2xsTGF5ZXJJRCh1aW50NjRfdCBzY3JvbGxMYXllcklEKSB7IG1fc2Nyb2xsTGF5ZXJJRCA9IHNj
cm9sbExheWVySUQ7IH0KICAgICAKICAgICBib29sIGhhc01hc2tMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fbWFza0xheWVyICE9IDA7IH0KIApAQCAtMTkzLDYgKzE5Niw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCByZXF1aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3Q7CiAgICAgYm9vbCB1cGRh
dGVTY3JvbGxpbmdMYXllcnMoYm9vbCBzY3JvbGxpbmdMYXllcnMpOwogCisgICAgdm9pZCBkZXRh
Y2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKwogICAgIEdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlIHBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAKICAgICBJ
bnRTaXplIGNvbnRlbnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OwpAQCAtMjU2LDYg
KzI2MSw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsaW5n
TGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgdXNpbmcgY29tcG9zaXRlZCBzY3Jv
bGxpbmcuCiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsaW5nQ29udGVudHNMYXll
cjsgLy8gb25seSB1c2VkIGlmIHRoZSBsYXllciBpcyB1c2luZyBjb21wb3NpdGVkIHNjcm9sbGlu
Zy4KIAorICAgIHVpbnQ2NF90IG1fc2Nyb2xsTGF5ZXJJRDsKKwogICAgIEludFJlY3QgbV9jb21w
b3NpdGVkQm91bmRzOwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91bmRzOyAg
ICAgIC8vIGJvdW5kcyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBtYWtlIHRyYW5zZm9ybS1v
cmlnaW4gd29yawpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29t
cG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDEzMDE4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzA4LDkgKzIzMDgsNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExh
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKLSAgICAgICAg
c2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRl
clZpZXctPmZyYW1lVmlldygpKTsKLQogICAgIG1fcm9vdExheWVyQXR0YWNobWVudCA9IGF0dGFj
aG1lbnQ7CiAgICAgcm9vdExheWVyQXR0YWNobWVudENoYW5nZWQoKTsKIH0K
</data>
<flag name="commit-queue"
          id="179790"
          type_id="3"
          status="-"
          setter="webkit-ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167215</attachid>
            <date>2012-10-04 17:29:59 -0700</date>
            <delta_ts>2012-10-07 14:07:27 -0700</delta_ts>
            <desc>Patch that should build</desc>
            <filename>for-review-2.txt</filename>
            <type>text/plain</type>
            <size>35069</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMiBAQAorMjAxMi0xMC0wNCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgUmV0dXJucyB0aGUgUmVuZGVy
TGF5ZXJCYWNraW5nIGZvciBhIGdpdmVuIEZyYW1lVmlldy4KKyAgICAgICAgKiBwYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpiYWNraW5n
Rm9yRnJhbWVWaWV3KToKKworICAgICAgICBSZXR1cm5zIHRoZSBleGlzdGluZyBTY3JvbGxpbmdT
dGF0ZU5vZGUgZm9yIGEgZ2l2ZW4gRnJhbWVWaWV3IGJ5IAorICAgICAgICBsb29raW5nIGl0IHVw
IGluIHRoZSBIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgVGhpcyBpcyBjYWxsZWQgd2hlbiBh
IFJlbmRlckxheWVyQmFja2luZyBpcyBkZXN0cm95ZWQuIEF0IHRoYXQgdGltZSwgCisgICAgICAg
IGl0cyBhc3NvY2lhdGVkIFNjcm9sbGluZ1N0YXRlTm9kZSBpcyBkZXN0cm95ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0YXRlVHJlZSk6CisK
KyAgICAgICAgY2xlYXJTdGF0ZVRyZWUoKSBjbGVhcnMgdGhlIEhhc2hNYXAgYW5kIGRlc3Ryb3lz
IGFsbCBvZiB0aGUgbm9kZXMgaW4gCisgICAgICAgIHRoZSBjdXJyZW50IHN0YXRlIHRyZWUuCisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUpOgor
CisgICAgICAgIElEcyB0byBhc3NvY2lhdGUgd2l0aCBSZW5kZXJMYXllckJhY2tpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVTY3JvbGxMYXllcklEKToKKworICAgICAgICBDcmVhdGVz
IGEgbmV3IHJvb3Qgc3RhdGUgbm9kZSBmb3IgdGhlIGdpdmVuIEZyYW1lVmlldy4KKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KToKKworICAgICAgICBBbGwgb2YgdGhpcyBjb2RlIHVzZWQgdG8gcmVmZXIgdG8gdGhl
IHJvb3RTdGF0ZU5vZGUgZGlyZWN0bHkuIAorICAgICAgICBJbnN0ZWFkLCBub3cgaXQgbG9va3Mg
dXAgdGhlIHByb3BlciBTY3JvbGxpbmdTdGF0ZU5vZGUgZm9yIHRoZSBnaXZlbiAKKyAgICAgICAg
RnJhbWVWaWV3IGluIHRoZSBIYXNoTWFwLgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdSb290
TGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5
ZXJGb3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9y
Tm9kZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVS
ZWdpb25Gb3JOb2RlKToKKworICAgICAgICBOZXcgcmVtb3ZlIGZ1bmN0aW9ucyBhcmUgdXNlZCB3
aGVuIHRoZSBzYXRlIHRyZWUgaXMgY2xlYXJlZCBhbmQgd2hlbiAKKyAgICAgICAgYSBSZW5kZXJM
YXllckJhY2tpbmcgaXMgZGVzdHJveWVkLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZU5vZGU6
OnJlbW92ZUNoaWxkKToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6cGFyZW50KToKKworICAgICAgICBOZXcg
Y29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3RpbmcgdG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAgIE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5
IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9uIG9mIHRoZSAKKyAgICAgICAgU2Nyb2xs
aW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2Rl
IHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVyTGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0
ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRl
VHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
U3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJv
b3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVUcmVlKToKKworICAgICAgICBN
b3ZlIHRoZSBjYWxsIHRvIFNjcm9sbGluZ0Nvb3JpZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVy
RGlkQ2hhbmdlKCkgCisgICAgICAgIGZyb20gUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hS
b290TGF5ZXIoKSB0byAKKyAgICAgICAgUmVuZGVyTGF5ZXI6OmVuc3VyZUJhY2tpbmcoKS4gVGhl
IHByb2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgc2l0ZSBpcyAKKyAgICAgICAgdGhhdCB0aGVyZSBp
cyBubyBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgc3RhdGUg
CisgICAgICAgIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZl
IGVub3VnaCBpbmZvcm1hdGlvbiB0byAKKyAgICAgICAgY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRk
IGl0IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBv
c2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRh
Y2hSb290TGF5ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6ZW5zdXJlQmFja2luZyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNr
aW5nIGhhcyBhIG5ldyBkYXRhIG1lbWJlciBjYWxsZWQgbV9zY3JvbGxMYXllcklELiBJZiAKKyAg
ICAgICAgdGhpcyBSZW5kZXJMYXllckJhY2tpbmcgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHNjcm9s
bGluZyB0cmVlLCB0aGVuIAorICAgICAgICB0aGUgSUQgd2l0aCBiZSB1bmlxdWUgYW5kIG5vbi16
ZXJvLiAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6flJlbmRlckxh
eWVyQmFja2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFj
aEZyb21TY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgIChSZW5kZXJMYXllckJh
Y2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzY3JvbGxMYXll
cklEKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2V0U2Nyb2xsTGF5
ZXJJRCk6CisKIDIwMTItMTAtMDQgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAK
ICAgICAgICAgQnVpbGQgZml4IGFmdGVyIHIxMzA0MTEuIEFkZCB0aGUgcmlnaHQgb2Zmc2V0LgpA
QCAtNzgsNiArMTk3LDcgQEAKICAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OmNyZWF0ZSk6CiAgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKICAg
ICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2Uu
aDoKKwogMjAxMi0xMC0wNCAgUHJhdmluIEQgIDxwcmF2aW5kLjJrNEBnbWFpbC5jb20+CiAKICAg
ICAgICAgTGF5b3V0IGJyb2tlbiBhZnRlciBjbG9uaW5nIGFuZCByZS1pbnNlcnRpbmcgYSB0YWJs
ZSB3aXRoIGEgbWlzcGxhY2VkIDxmb3JtPgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MDUwLDE0ICs0MDUwLDE4IEBAIHZvaWQgRG9jdW1lbnQ6OnNldEluUGFn
ZUNhY2hlKGJvb2wgZmxhZykKICAgICBtX2luUGFnZUNhY2hlID0gZmxhZzsKIAogICAgIEZyYW1l
VmlldyogdiA9IHZpZXcoKTsKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOworCiAgICAg
aWYgKGZsYWcpIHsKICAgICAgICAgQVNTRVJUKCFtX3NhdmVkUmVuZGVyZXIpOwogICAgICAgICBt
X3NhdmVkUmVuZGVyZXIgPSByZW5kZXJlcigpOwogICAgICAgICBpZiAodikgewogICAgICAgICAg
ICAgdi0+Y2FjaGVDdXJyZW50U2Nyb2xsUG9zaXRpb24oKTsKLSAgICAgICAgICAgIGlmIChwYWdl
KCkgJiYgcGFnZSgpLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKQorICAgICAgICAgICAgaWYgKHBh
Z2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgewogICAgICAgICAgICAgICAgIHYt
PnJlc2V0U2Nyb2xsYmFyc0FuZENsZWFyQ29udGVudHNTaXplKCk7Ci0gICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAg
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5jbGVhclN0YXRlVHJlZSgpOworICAgICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICAgICAgdi0+cmVzZXRTY3JvbGxiYXJzKCk7CiAgICAgICAgIH0K
ICAgICAgICAgbV9zdHlsZVJlY2FsY1RpbWVyLnN0b3AoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9IaXN0b3J5Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTMwNDMyKQorKysgU291
cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQYWdlQ2FjaGUu
aCIKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKKyNpbmNsdWRlICJTY3JvbGxpbmdDb29yZGluYXRv
ci5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgogCkBAIC0xMjMsOCArMTI0LDEzIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3MKICAgICBtX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCktPnJlc3RvcmVWaWV3U3Rh
dGUoKTsKICAgICAKICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbV9mcmFtZS0+dmlldygpKSB7
CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7CisgICAgICAgIGlmIChwYWdl
ICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUpIHsKKyAgICAgICAgICAgIGlmIChTY3Jv
bGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdD
b29yZGluYXRvcigpKQorICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFt
ZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2Uodmlldyk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAo
IXZpZXctPndhc1Njcm9sbGVkQnlVc2VyKCkpIHsKLSAgICAgICAgICAgIFBhZ2UqIHBhZ2UgPSBt
X2ZyYW1lLT5wYWdlKCk7CiAgICAgICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUo
KSA9PSBtX2ZyYW1lICYmIG1fY3VycmVudEl0ZW0tPnBhZ2VTY2FsZUZhY3RvcigpKQogICAgICAg
ICAgICAgICAgIHBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihtX2N1cnJlbnRJdGVtLT5wYWdlU2Nh
bGVGYWN0b3IoKSwgbV9jdXJyZW50SXRlbS0+c2Nyb2xsUG9pbnQoKSk7CiAgICAgICAgICAgICBl
bHNlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGlu
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNiw2ICsxMDYsNyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGluYXRl
c1NjCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0aWMg
UmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSogZnJhbWUsIGNvbnN0
IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKQogewogICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbjsKQEAgLTE0Nyw5ICsxNDgsMTEgQEAgc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFz
dFNjcm9sbGFibGVSZQogCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwogfQor
I2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVwZGF0
ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwogCkBA
IC0xNTcsMTEgKzE2MCwxOCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdM
YXlvCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVy
ZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUK
ICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1h
aW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOwot
ICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsK
KworICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkg
dG8gc2V0IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAvLyBq
dXN0IHRoZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxp
ZXMgdG8gdGhlIHJvb3QuCisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpKTsKIAogICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVW
aWV3KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFub2Rl
KQorICAgICAgICByZXR1cm47CisKICAgICBTY3JvbGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFtZXRl
cnM7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9IGZy
YW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKICAgICBzY3JvbGxQYXJhbWV0
ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3JvbGxF
bGFzdGljaXR5KCk7CkBAIC0xNzQsMTUgKzE4NCwxOCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdMYXlvCiAgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJ
bnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgp
KTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVu
dHNTaXplKCk7CiAKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzKHNjcm9sbFBhcmFtZXRlcnMpOwor
ICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKKyNlbmRpZgogfQogCi12b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdl
ZChGcmFtZVZpZXcqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxF
dmVudEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKIAotICAgIHJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmZyYW1lVmlld0hhc1Nsb3dSZXBhaW50T2JqZWN0c0RpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldykKQEAgLTIwNyw2ICsyMjAsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdGaXhlCiAgICAgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlv
bk9uTWFpblRocmVhZCgpOwogfQogCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKIHN0
YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZy
YW1lVmlldykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0yMjMsNiAr
MjM3LDcgQEAgc3RhdGljIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbQogICAgIHJl
dHVybiAwOwogI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewpAQCAt
MjMyLDEwICsyNDcsMjMgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9v
dAogICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSkK
ICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICAv
LyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2RlLCB0
aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFt
ZVZpZXcoZnJhbWVWaWV3KTsKKworICAgIC8vIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZp
ZXcoKSBjYW4gZmFpbCBpZiwgZm9yIGV4YW1wbGUsIHRoZSBGcmFtZVZpZXcgZG9lcyBub3QgaGF2
ZSBhCisgICAgLy8gUmVuZGVyTGF5ZXJCYWNraW5nLiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVu
IHdlIHNob3VsZCBub3QgZG8gYW55IG1vcmUgd29yayBoZXJlLgorICAgIGlmICghbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlmCisK
ICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7Ci0gICAgcmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxM
YXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5
ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgCisjaWYgRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZp
ZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpOworI2VuZGlm
CiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVw
ZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9u
KQpAQCAtMjU0LDcgKzI4MiwxMSBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9s
bFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAgIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3
KGZyYW1lVmlldyk7CisgICAgaWYgKCFzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRp
b24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CiAgICAgc2NoZWR1bGVUcmVl
U3RhdGVDb21taXQoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0zMDAsOSArMzMyLDEw
IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmEKICAgICBmcmFtZVZp
ZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9sZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAK
KyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7Ci0jaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorI2lmIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
CiAgICAgaWYgKCFtX3BhZ2UpCkBAIC0zMTYsNiArMzQ5LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dXBkYXRlTWFpbkZyYQogICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24o
LWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNj
cm9sbExheWVyUG9zaXRpb24oKQogewpAQCAtMzU2LDE0ICszOTAsMjIgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1l
VmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xM
SU5HKQorICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZv
ckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJl
ZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAg
ICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53
aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVy
Q291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJD
b3VudEZvck5vZGUod2hlZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7CisjZWxzZQorICAgIFVO
VVNFRF9QQVJBTShmcmFtZVZpZXcpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAt
NDE3LDM5ICs0NTksMTI4IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldEZvcmNlTWFp
blQKIH0KIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCi12b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllcikKK3N0
YXRpYyBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmdGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBm
cmFtZVZpZXcpCit7CisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIEZyYW1l
KiBmcmFtZSA9IGZyYW1lVmlldy0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVudFJlbmRlcmVy
KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlckxheWVy
KiBsYXllciA9IHZpZXctPmxheWVyKCk7CisgICAgaWYgKCFsYXllcikKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICByZXR1cm4gbGF5ZXItPmJhY2tpbmcoKTsKKyNlbHNlCisgICAgVU5VU0VEX1BB
UkFNKGZyYW1lVmlldyk7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFJlbmRlckxheWVyQmFja2luZyogYmFj
a2luZyA9IGJhY2tpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoIWJhY2tpbmcp
CisgICAgICAgIHJldHVybiAwOworCisgICAgdWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCA9IGJhY2tp
bmctPnNjcm9sbExheWVySUQoKTsKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKKyAg
ICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQtPnNlY29uZDsKKyAgICBBU1NFUlQobm9k
ZS0+aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSk7CisgICAgcmV0dXJuIHRvU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFJlbmRlckxheWVyQmFja2luZyogYmFja2luZykKK3sK
KyAgICB1aW50NjRfdCBzY3JvbGxMYXllcklEID0gYmFja2luZy0+c2Nyb2xsTGF5ZXJJRCgpOwor
ICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5n
U3RhdGVOb2RlKiBub2RlID0gbV9zdGF0ZU5vZGVNYXAudGFrZShzY3JvbGxMYXllcklEKTsKKwor
ICAgIC8vIEZJWE1FOiByZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBhbmQgdGhv
c2UgY2hpbGRyZW4gbWlnaHQgc3RpbGwgYmUgaW4gdGhlIEhhc2hNYXAuCisgICAgLy8gVGhpcyB3
aWxsIGJlIGEgYmlnIHByb2JsZW0gb25jZSB0aGVyZSBhcmUgYWN0dWFsbHkgY2hpbGRyZW4gaW4g
dGhlIHRyZWUuCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9
CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKKyAgICBt
X3N0YXRlTm9kZU1hcC5jbGVhcigpOworICAgIGlmIChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUqIG5vZGUgPSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKworc3RhdGljIHVp
bnQ2NF90IGdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCgpCit7CisgICAgc3RhdGljIHVpbnQ2NF90IHVu
aXF1ZVNjcm9sbExheWVySUQgPSAxOworICAgIHJldHVybiB1bmlxdWVTY3JvbGxMYXllcklEKys7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JG
cmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhclN0
YXRlVHJlZSgpOworCisgICAgUmVuZGVyTGF5ZXJCYWNraW5nKiBiYWNraW5nID0gYmFja2luZ0Zv
ckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICghYmFja2luZykKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSBGcmFtZVZpZXcsIGFuZCBzZXQg
aXQgYXMgdGhlIHJvb3Qgbm9kZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0Um9vdFN0
YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0
YXRlVHJlZS5nZXQoKSkpOworCisgICAgLy8gTm93IGdldCBvciBzZXQgYW4gSUQgZm9yIHRoZSBi
YWNraW5nLCBhbmQgdGhlbiBhZGQgdGhlIGNvbWJpbmF0aW9uIHRvIHRoZSBIYXNoTWFwLgorICAg
IHVpbnQ2NF90IHJvb3RMYXllcklEID0gYmFja2luZy0+c2Nyb2xsTGF5ZXJJRCgpOworICAgIGlm
ICghcm9vdExheWVySUQpIHsKKyAgICAgICAgcm9vdExheWVySUQgPSBnZW5lcmF0ZVNjcm9sbExh
eWVySUQoKTsKKyAgICAgICAgYmFja2luZy0+c2V0U2Nyb2xsTGF5ZXJJRChyb290TGF5ZXJJRCk7
CisgICAgfQorICAgIG1fc3RhdGVOb2RlTWFwLnNldChyb290TGF5ZXJJRCwgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllciwgU2Ny
b2xsaW5nU3RhdGVOb2RlKiBub2RlKQogewotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCktPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKKyAgICBub2RlLT5zZXRT
Y3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsK
IH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdp
b24oY29uc3QgUmVnaW9uJiByZWdpb24pCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRO
b25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiByZWdpb24sIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOwor
ICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKHJlZ2lvbik7CiAgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJz
KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUo
Y29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycywgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBub2RlKQogewotICAgIC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlz
IGZ1bmN0aW9uIGFuZCBhbGwgb2YgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNsYXNzIG5l
ZWQgdG8KLSAgICAvLyBoYW5kbGUgbW9yZSB0aGFuIGp1c3QgdGhlIHJvb3Qgbm9kZS4gCi0gICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SG9yaXpvbnRhbFNjcm9s
bEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7
Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0VmVydGljYWxT
Y3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5
KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
LT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9y
aXpvbnRhbFNjcm9sbGJhck1vZGUpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRl
Tm9kZSgpLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOwot
ICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZpZXdwb3J0UmVj
dChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29u
dGVudHNTaXplKTsKKyAgICBub2RlLT5zZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3Jv
bGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRW
ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVs
YXN0aWNpdHkpOworICAgIG5vZGUtPnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNj
cm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpOworICAgIG5vZGUt
PnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJs
ZWRWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1v
ZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7CisgICAgbm9kZS0+
c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxi
YXJNb2RlKTsKKworICAgIG5vZGUtPnNldFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNj
cm9sbE9yaWdpbik7CisgICAgbm9kZS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMu
dmlld3BvcnRSZWN0KTsKKyAgICBub2RlLT5zZXRDb250ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVy
cy5jb250ZW50c1NpemUpOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKIAot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNp
Z25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewotICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgbm9kZS0+c2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNv
bW1pdCgpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcu
aD4KICNlbmRpZgpAQCAtNTAsOCArNTEsMTEgQEAgY2xhc3MgRnJhbWVWaWV3OwogY2xhc3MgR3Jh
cGhpY3NMYXllcjsKIGNsYXNzIFBhZ2U7CiBjbGFzcyBSZWdpb247CitjbGFzcyBSZW5kZXJMYXll
ckJhY2tpbmc7CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJpdmF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAogI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC0xMzcsMTUgKzE0MSwyMiBAQCBwdWJsaWM6CiAgICAg
ICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAgIH07CiAKKyAgICB2b2lkIGRldGFjaEZy
b21TdGF0ZVRyZWUoUmVuZGVyTGF5ZXJCYWNraW5nKik7CisgICAgdm9pZCBjbGVhclN0YXRlVHJl
ZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2Uq
KTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHZv
aWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcq
KTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmll
dyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFp
blRocmVhZCgpOwogCi0gICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7Ci0g
ICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKyNpZiBF
TkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2Rl
KEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKyAgICB2b2lkIHNldE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqKTsKIAogICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKICAgICAgICAg
U2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKQEAgLTE2Myw4ICsx
NzQsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAgfTsK
IAotICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJik7
Ci0gICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKTsKKyAgICB2b2lk
IHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVy
Q291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyNl
bmRpZgorCiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWlu
VGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKIAogICAgIHZvaWQgdXBkYXRlTWFp
bkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwpAQCAtMTgyLDYgKzE5NSw4IEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CiAg
ICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKICAgICBUaW1lcjxTY3Jv
bGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKKwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFw
OwogI2VuZGlmCiAKICAgICBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Tm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMwNDMyKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTEsNDIgKzUxLDM5IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZy
YW1lVmlld1ZlcnQKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xs
TGF5ZXIoR3JhcGhpY3NMYXllciopCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91
bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxp
bmdSZWFzb25zKQogewogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKQorYm9vbCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKIHsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMo
Y29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRM
YXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9v
bCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRs
ZXJDb3VudCh1bnNpZ25lZCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNG
aXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpCiB7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVB
cmVhKiwgR3JhcGhpY3NMYXllciopCiB7CiB9CiAKLWJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0Cit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKFJlbmRlckxheWVyQmFja2luZyopCiB7Ci0gICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklz
Q29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKIHsKIH0KIAotdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFw
aGljc0xheWVyKiwgYm9vbCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RT
dGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KikKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxl
QXJlYSosIEdyYXBoaWNzTGF5ZXIqKQotewotfQogI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDYgKzc3LDIxIEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjphcHBlbmRD
aGlsZChQYXMKICAgICBtX2NoaWxkcmVuLT5hcHBlbmQoY2hpbGROb2RlKTsKIH0KIAordm9pZCBT
Y3JvbGxpbmdTdGF0ZU5vZGU6OnJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaXpl
X3QgaW5kZXggPSBtX2NoaWxkcmVuLT5maW5kKG5vZGUpKSB7CisgICAgICAgIG1fY2hpbGRyZW4t
PnJlbW92ZShpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSA9IG1fY2hpbGRyZW4tPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbi0+YXQoaSktPnJlbW92ZUNoaWxkKG5vZGUpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVOb2RlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw4IEBAIHB1YmxpYzoKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVU
cmVlKik7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nU3RhdGVOb2RlKCk7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSB7IHJldHVybiBmYWxzZTsgfQor
CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xvbmVBbmRSZXNl
dE5vZGUoKSA9IDA7CiAgICAgdm9pZCBjbG9uZUFuZFJlc2V0Q2hpbGROb2RlcyhTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKIApAQCAtNjYsMTAgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNj
cm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHRyZWUpIHsgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUgPSB0cmVlOyB9CiAKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIHBhcmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0KICAgICB2b2lkIHNldFBhcmVudChTY3JvbGxpbmdT
dGF0ZU5vZGUqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorCiAgICAgdm9pZCBhcHBl
bmRDaGlsZChQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4pOwogCisgICAgdm9pZCByZW1v
dmVDaGlsZChTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbGlu
Z1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEy
LAogICAgIH07CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0Tm9kZSgpIE9WRVJSSURFOwogCiAgICAg
dmlydHVhbCBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQpAQCAtMTM0LDYgKzEzNiwxNSBAQCBwcml2YXRlOgog
ICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOwogfTsKIAoraW5saW5lIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKj4obm9kZSk7Cit9CisgICAgCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55
b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVRyZWUuY3BwCShyZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw3IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBTY3JvbGxpbmcKIH0KIAogU2Ny
b2xsaW5nU3RhdGVUcmVlOjpTY3JvbGxpbmdTdGF0ZVRyZWUoKQotICAgIDogbV9yb290U3RhdGVO
b2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9o
YXNDaGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKKyAgICA6IG1faGFzQ2hhbmdlZFByb3BlcnRpZXMo
ZmFsc2UpCiB7CiB9CiAKQEAgLTU3LDYgKzU2LDE4IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVUcmVlPiBTY3JvbGxpbmcKICAgICByZXR1cm4gdHJlZVN0YXRlLnJlbGVhc2UoKTsKIH0KIAor
dm9pZCBTY3JvbGxpbmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVChtX3Jvb3RTdGF0ZU5vZGUpOworCisgICAgaWYgKG5vZGUgPT0g
bV9yb290U3RhdGVOb2RlKSB7CisgICAgICAgIG1fcm9vdFN0YXRlTm9kZSA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3Jvb3RTdGF0ZU5vZGUtPnJlbW92ZUNoaWxkKG5vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxOCArNTUsMTkgQEAgcHVibGljOgogICAgIH5TY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAog
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogcm9vdFN0YXRlTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdFN0YXRlTm9kZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0Um9vdFN0YXRlTm9k
ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gcm9vdFN0YXRlTm9kZSkg
eyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2RlOyB9CiAKICAgICAvLyBDb3BpZXMgdGhl
IGN1cnJlbnQgdHJlZSBzdGF0ZSBhbmQgY2xlYXJzIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMgbWFz
ayBpbiB0aGUgb3JpZ2luYWwuCiAgICAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IGNv
bW1pdCgpOwogCisgICAgdm9pZCByZW1vdmVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiAg
ICAgdm9pZCBzZXRIYXNDaGFuZ2VkUHJvcGVydGllcyhib29sIGNoYW5nZWRQcm9wZXJ0aWVzKSB7
IG1faGFzQ2hhbmdlZFByb3BlcnRpZXMgPSBjaGFuZ2VkUHJvcGVydGllczsgfQogICAgIGJvb2wg
aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoYW5nZWRQcm9wZXJ0
aWVzOyB9CiAKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKCk7CiAKLSAgICB2b2lk
IHNldFJvb3RTdGF0ZU5vZGUoUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+
IHJvb3RTdGF0ZU5vZGUpIHsgbV9yb290U3RhdGVOb2RlID0gcm9vdFN0YXRlTm9kZTsgfQotCiAg
ICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gbV9yb290U3RhdGVOb2RlOwog
ICAgIGJvb2wgbV9oYXNDaGFuZ2VkUHJvcGVydGllczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYg
Kzg5LDcgQEAKICNpbmNsdWRlICJTY3JvbGxBbmltYXRvci5oIgogI2luY2x1ZGUgIlNjcm9sbGJh
ci5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29v
cmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNvdXJjZUdyYXBo
aWMuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2V0LmgiCkBAIC00NDUxLDYgKzQ0NTIsMTUg
QEAgUmVuZGVyTGF5ZXJCYWNraW5nKiBSZW5kZXJMYXllcjo6ZW5zdXJlQgogICAgICAgICBtX2Jh
Y2tpbmcgPSBhZG9wdFB0cihuZXcgUmVuZGVyTGF5ZXJCYWNraW5nKHRoaXMpKTsKICAgICAgICAg
Y29tcG9zaXRvcigpLT5sYXllckJlY2FtZUNvbXBvc2l0ZWQodGhpcyk7CiAKKyAgICAgICAgaWYg
KGlzUm9vdExheWVyKCkgJiYgY29tcG9zaXRvcigpLT5zY3JvbGxMYXllcigpKSB7CisgICAgICAg
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcmVuZGVyZXIoKS0+ZnJhbWUoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFn
ZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UoZnJhbWUtPnZpZXco
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCiAgICAgICAgIHVwZGF0ZU9yUmVtb3ZlRmlsdGVyRWZmZWN0KCk7
CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBA
QCBib29sIFJlbmRlckxheWVyQmFja2luZzo6bV9jcmVhdGluZ1ByaW1hCiAKIFJlbmRlckxheWVy
QmFja2luZzo6UmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRlckxheWVyKiBsYXllcikKICAgICA6IG1f
b3duaW5nTGF5ZXIobGF5ZXIpCisgICAgLCBtX3Njcm9sbExheWVySUQoMCkKICAgICAsIG1fYXJ0
aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHMoZmFsc2UpCiAgICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVy
Vmlld0xheWVyKGZhbHNlKQogICAgICwgbV91c2luZ1RpbGVkQ2FjaGVMYXllcihmYWxzZSkKQEAg
LTEzOCw2ICsxMzksNyBAQCBSZW5kZXJMYXllckJhY2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmco
CiAgICAgdXBkYXRlRm9yZWdyb3VuZExheWVyKGZhbHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIo
ZmFsc2UpOwogICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhmYWxzZSk7CisgICAgZGV0YWNoRnJv
bVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9
CiAKQEAgLTk2Myw2ICs5NjUsMjQgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNj
cm9sbGluZwogICAgIHJldHVybiBsYXllckNoYW5nZWQ7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQoreworICAgIC8vIElmIG1f
c2Nyb2xsTGF5ZXJJRCBpcyAwLCB0aGVuIHRoaXMgYmFja2luZyBpcyBub3QgYXR0YWNoZWQgdG8g
dGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgorICAgIGlmICghbV9zY3JvbGxMYXllcklEKQorICAg
ICAgICByZXR1cm47CisKKyAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXIoKS0+ZnJhbWUoKS0+cGFn
ZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nQ29v
cmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZGV0YWNoRnJvbVN0YXRlVHJlZSh0aGlzKTsKKyAg
ICBtX3Njcm9sbExheWVySUQgPSAwOworfQorCiBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBS
ZW5kZXJMYXllckJhY2tpbmc6OnBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdAog
ewogICAgIHVuc2lnbmVkIHBoYXNlID0gR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJl
dmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJh
Y2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQCBwdWJsaWM6CiAgICAgYm9v
bCBoYXNTY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXI7IH0K
ICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsaW5nTGF5ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdDb250ZW50
c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdldCgpOyB9
CisKKyAgICB1aW50NjRfdCBzY3JvbGxMYXllcklEKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxM
YXllcklEOyB9CisgICAgdm9pZCBzZXRTY3JvbGxMYXllcklEKHVpbnQ2NF90IHNjcm9sbExheWVy
SUQpIHsgbV9zY3JvbGxMYXllcklEID0gc2Nyb2xsTGF5ZXJJRDsgfQogICAgIAogICAgIGJvb2wg
aGFzTWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIgIT0gMDsgfQogCkBAIC0x
OTMsNiArMTk2LDggQEAgcHJpdmF0ZToKICAgICBib29sIHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5
ZXIoKSBjb25zdDsKICAgICBib29sIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGlu
Z0xheWVycyk7CiAKKyAgICB2b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpOwor
CiAgICAgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZUZvclByaW1hcnlM
YXllcigpIGNvbnN0OwogICAgIAogICAgIEludFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGlu
Z0xheWVyKCkgY29uc3Q7CkBAIC0yNTYsNiArMjYxLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8
R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxpbmdMYXllcjsgLy8gb25seSB1c2VkIGlmIHRoZSBsYXll
ciBpcyB1c2luZyBjb21wb3NpdGVkIHNjcm9sbGluZy4KICAgICBPd25QdHI8R3JhcGhpY3NMYXll
cj4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlz
IHVzaW5nIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgogCisgICAgdWludDY0X3QgbV9zY3JvbGxMYXll
cklEOworCiAgICAgSW50UmVjdCBtX2NvbXBvc2l0ZWRCb3VuZHM7CiAKICAgICBib29sIG1fYXJ0
aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHM7ICAgICAgLy8gYm91bmRzIGhhZCB0byBiZSBtYWRlIG5v
bi16ZXJvIHRvIG1ha2UgdHJhbnNmb3JtLW9yaWdpbiB3b3JrCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24g
MTMwNDMyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMDgsOSArMjMwOCw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGEKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCkpOwotCiAgICAgbV9y
b290TGF5ZXJBdHRhY2htZW50ID0gYXR0YWNobWVudDsKICAgICByb290TGF5ZXJBdHRhY2htZW50
Q2hhbmdlZCgpOwogfQo=
</data>
<flag name="review"
          id="179818"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="179819"
          type_id="3"
          status="-"
          setter="peter+ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167487</attachid>
            <date>2012-10-07 14:07:27 -0700</date>
            <delta_ts>2012-10-07 19:59:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-3.txt</filename>
            <type>text/plain</type>
            <size>36227</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDYwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wNyAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wNSAgRGlyayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFNWRyByYWRpYWxHcmFkaWVudCBzaG91bGQgc3VwcG9ydCAnZnInIGZvciBm
b2NhbCByYWRpdXMgKGp1c3QgbGlrZSBDYW52YXMpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQwNTAsMTQgKzQwNTAsMTggQEAgdm9pZCBEb2N1bWVudDo6c2V0
SW5QYWdlQ2FjaGUoYm9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFnOwogCiAgICAg
RnJhbWVWaWV3KiB2ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisK
ICAgICBpZiAoZmxhZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7CiAgICAg
ICAgIG1fc2F2ZWRSZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAg
ICAgICAgICB2LT5jYWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYg
KHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAgICBp
ZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAgICAgICAgICAg
ICAgdi0+cmVzZXRTY3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7CisgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKICAgICAg
ICAgfQogICAgICAgICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzA0MzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKQEAgLTEyMyw4ICsxMjQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVz
dG9yZVNjcm9sbFBvcwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZp
ZXdTdGF0ZSgpOwogICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3
KCkpIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYg
KHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgeworICAgICAgICAgICAgaWYg
KFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3It
PmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAgICAgfQorCiAgICAgICAg
IGlmICghdmlldy0+d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAgICAgICAgUGFnZSogcGFn
ZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5G
cmFtZSgpID09IG1fZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpCiAg
ICAgICAgICAgICAgICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fY3VycmVudEl0ZW0tPnBh
Z2VTY2FsZUZhY3RvcigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsKICAgICAgICAg
ICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEzMDQz
MikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzgyLDYgKzc4MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmlldzo6dGlsZWRCYWNraW5n
KCkKICAgICByZXR1cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50aWxlZEJhY2tpbmcoKTsK
IH0KIAordWludDY0X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QKK3sKKyAgICBS
ZW5kZXJWaWV3KiByb290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAgIGlmICghcm9vdCkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByb290
LT5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7Cit9CisKICNpZiBFTkFC
TEUoUlVCQkVSX0JBTkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6OmxheWVyRm9yT3Zl
cmhhbmdBcmVhcygpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmll
dy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlz
aW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEzMSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNPbmVT
aG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3aGVuIGFu
eSBTY3JvbGxhYmxlQXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Nyb2xsaW5nVHJlZSwgdGhp
cyBzaG91bGQKKyAgICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9uIFNjcm9sbGFibGVB
cmVhLgorICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsKICNlbmRpZgogCiAgICAg
Ym9vbCBoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2
aXNpb24gMTMwNDMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgYm9vbCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6Y29vcmRpbmF0ZXNTYwogI2VuZGlmCiB9CiAKKyNpZiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQogc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNjcm9s
bGFibGVSZWdpb24oRnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikK
IHsKICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CkBAIC0xNDcsOSArMTQ4LDEx
IEBAIHN0YXRpYyBSZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmUKIAogICAgIHJldHVy
biBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVWaWV3KQog
eworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKIApAQCAtMTU3LDExICsxNjAsMTggQEAgdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5bwogICAgIC8vIGFsbCBzY3JvbGxhYmxl
IGFyZWFzLCBzdWNoIGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4g
V2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gaWYgdGhlCiAgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBs
YXlvdXQgd2FzIHVwZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgogICAgIFJlZ2lvbiBub25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3Bh
Z2UtPm1haW5GcmFtZSgpLCBJbnRQb2ludCgpKTsKLSAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbik7CisKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3
ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcg
cmVnaW9ucyBmb3IgbW9yZSB0aGFuCisgICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmln
aHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgorICAgIHNldE5v
bkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CiAKICAgICBpZiAoIWNvb3JkaW5h
dGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1l
VmlldyhmcmFtZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
U2Nyb2xsUGFyYW1ldGVycyBzY3JvbGxQYXJhbWV0ZXJzOwogICAgIHNjcm9sbFBhcmFtZXRlcnMu
aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxF
bGFzdGljaXR5KCk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNp
dHkgPSBmcmFtZVZpZXctPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpOwpAQCAtMTc0LDE1ICsx
ODQsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5bwogICAgIHNj
cm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZp
ZXctPnZpc2libGVDb250ZW50UmVjdCgpLnNpemUoKSk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5j
b250ZW50c1NpemUgPSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOwogCi0gICAgc2V0U2Nyb2xs
UGFyYW1ldGVycyhzY3JvbGxQYXJhbWV0ZXJzKTsKKyAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9y
Tm9kZShzY3JvbGxQYXJhbWV0ZXJzLCBub2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZy
YW1lVmlldyk7CisjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVW
aWV3V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KikKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZy
YW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
QVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7
CisgICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIYXNTbG93UmVw
YWludE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMDcsNiArMjIw
LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0
ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAorI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0aWMgR3JhcGhpY3NMYXllciogc2Nyb2xs
TGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMjIzLDYgKzIzNyw3IEBAIHN0YXRpYyBHcmFwaGljc0xh
eWVyKiBzY3JvbGxMYXllckZvckZyYW0KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorI2VuZGlm
CiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5n
ZShGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKQEAgLTIzMiwxMCArMjQ3LDE5IEBAIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3QKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Ny
b2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBu
b3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4K
KyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNT
RVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworI2VuZGlmCisKICAg
ICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7Ci0gICAgcmVjb21wdXRlV2hlZWxF
dmVudEhhbmRsZXJDb3VudCgpOworICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRG
b3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXll
clBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJG
b3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9M
TElORykKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpOworI2VuZGlmCiB9
CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0
ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpA
QCAtMjU0LDcgKzI3OCwxMSBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Ny
b2xsCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1fc2Nyb2xsaW5nU3RhdGVU
cmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBv
c2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAgIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZy
YW1lVmlldyk7CisgICAgaWYgKCFzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24s
IGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CiAgICAgc2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0zMDAsOSArMzI4LDEwIEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmEKICAgICBmcmFtZVZpZXct
PnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9sZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAKKyNp
ZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAg
ICAgaWYgKCFtX3BhZ2UpCkBAIC0zMTYsNiArMzQ1LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6dXBkYXRlTWFpbkZyYQogICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZy
YW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9s
bExheWVyUG9zaXRpb24oKQogewpAQCAtMzU2LDE0ICszODYsMjIgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQorICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZy
YW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAgICAg
ICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVl
bEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291
bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUod2hlZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShmcmFtZVZpZXcpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtNDE3
LDM5ICs0NTUsODggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Rm9yY2VNYWluVAog
fQogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQorU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9y
RnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIHVpbnQ2NF90IHNjcm9sbExh
eWVySUQgPSBmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKTsKKyAgICBpZiAoIXNjcm9sbExheWVy
SUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5n
U3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3Jv
bGxMYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQtPnNlY29uZDsK
KyAgICBBU1NFUlQobm9kZS0+aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSk7CisgICAg
cmV0dXJuIHRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKG5vZGUpOworfQorCit2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKHVpbnQ2NF90IHNjcm9sbExh
eWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAgICByZXR1cm47CisKKyAg
ICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1hcC50YWtlKHNjcm9sbExh
eWVySUQpOworCisgICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxsIGRlc3Ryb3kgY2hpbGRy
ZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0aGUgSGFzaE1hcC4KKyAg
ICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJlIGFyZSBhY3R1YWxseSBj
aGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cmVtb3ZlTm9k
ZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6Y2xlYXJTdGF0ZVRyZWUo
KQoreworICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7CisgICAgaWYgKFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2Rl
KCkpCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSogZXhpc3RpbmdOb2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Cisg
ICAgaWYgKGV4aXN0aW5nTm9kZSAmJiBleGlzdGluZ05vZGUgPT0gbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJTdGF0ZVRy
ZWUoKTsKKworICAgIC8vIENyZWF0ZSBhIG5ldyBub2RlIGZvciB0aGUgRnJhbWVWaWV3LCBhbmQg
c2V0IGl0IGFzIHRoZSByb290IG5vZGUuCisgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnNldFJv
b3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUobV9zY3JvbGxp
bmdTdGF0ZVRyZWUuZ2V0KCkpKTsKKworICAgIC8vIE5vdyBnZXQgb3Igc2V0IGFuIElEIGZvciB0
aGUgYmFja2luZywgYW5kIHRoZW4gYWRkIHRoZSBjb21iaW5hdGlvbiB0byB0aGUgSGFzaE1hcC4K
KyAgICB1aW50NjRfdCByb290TGF5ZXJJRCA9IGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpOwor
ICAgIEFTU0VSVChyb290TGF5ZXJJRCk7CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHJvb3RMYXll
cklELCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKK30KKwordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIq
IHNjcm9sbExheWVyLCBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCiB7Ci0gICAgbV9zY3JvbGxp
bmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIp
OworICAgIG5vZGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKICAgICBzY2hlZHVsZVRy
ZWVTdGF0ZUNvbW1pdCgpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdp
b24mIHJlZ2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewotICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKHJlZ2lvbik7CisgICAgbm9kZS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVn
aW9uKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMm
IHNjcm9sbFBhcmFtZXRlcnMpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQ
YXJhbWV0ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJz
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCiB7Ci0gICAgLy8gRklYTUU6IElu
IHRoZSBmdXR1cmUsIHRoaXMgZnVuY3Rpb24gYW5kIGFsbCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25z
IGluIHRoaXMgY2xhc3MgbmVlZCB0bwotICAgIC8vIGhhbmRsZSBtb3JlIHRoYW4ganVzdCB0aGUg
cm9vdCBub2RlLiAKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9k
ZSgpLT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNh
bFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCktPnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMu
aGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCktPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQ
YXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Ny
b2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7Ci0gICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9s
bFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlKTsKLQotICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJz
LnNjcm9sbE9yaWdpbik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUo
KS0+c2V0Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKLSAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRDb250ZW50c1NpemUoc2Ny
b2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUpOworICAgIG5vZGUtPnNldEhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkp
OworICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZEhvcml6
b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9s
bGJhcik7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBh
cmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIb3Jp
em9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJN
b2RlKTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVy
cy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOworCisgICAgbm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNj
cm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBub2RlLT5zZXRWaWV3cG9ydFJlY3Qo
c2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOworICAgIG5vZGUtPnNldENvbnRlbnRzU2l6
ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVD
b21taXQoKTsKIH0KIAogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50
SGFuZGxlckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25l
ZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5v
ZGUpCiB7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKKyAgICBub2RlLT5z
ZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOwogICAgIHNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTMw
NDMyKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1RocmVhZGluZy5oPgogI2VuZGlmCkBAIC01Miw2ICs1Myw4IEBAIGNsYXNzIFBhZ2U7
CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yUHJpdmF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNzIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAogI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC0xMzcsMTUgKzE0MCwyMCBAQCBwdWJsaWM6
CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAgIH07CiAKKyAgICB2b2lkIGRl
dGFjaEZyb21TdGF0ZVRyZWUodWludDY0X3QpOworICAgIHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsK
KwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBTY3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAK
LSAgICB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICB2b2lkIGVu
c3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3Kik7CisK
KyAgICB2b2lkIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoRnJh
bWVWaWV3Kik7CiAgICAgYm9vbCBoYXNOb25MYXllckZpeGVkT2JqZWN0cyhGcmFtZVZpZXcqKTsK
ICAgICB2b2lkIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoKTsKIAogICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXIoR3JhcGhpY3NMYXllciopOwotICAgIHZv
aWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJik7CiAKICAgICBzdHJ1
Y3QgU2Nyb2xsUGFyYW1ldGVycyB7CiAgICAgICAgIFNjcm9sbEVsYXN0aWNpdHkgaG9yaXpvbnRh
bFNjcm9sbEVsYXN0aWNpdHk7CkBAIC0xNjMsOCArMTcxLDIyIEBAIHByaXZhdGU6CiAgICAgICAg
IEludFNpemUgY29udGVudHNTaXplOwogICAgIH07CiAKKyAgICAvLyBGSVhNRTogVGhlc2UgZnVu
Y3Rpb25zIGFyZSB1c2VkIG9ubHkgYnkgU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS4gU2Ny
b2xsaW5nQ29vcmRpbmF0b3IKKyAgICAvLyBub3cgdXNlcyBuZXcgdmVyc2lvbnM6IHNldFNjcm9s
bFBhcmFtZXRlcnNGb3JOb2RlKCkgYW5kIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2Rl
KCkuCisgICAgLy8gVG8gcmVzb2x2ZSB0aGlzIGFuZCBhbGwgb2YgdGhlIGlmLWRlZnMgaW4gdGhp
cyBjbGFzcywgd2Ugc2hvdWxkIG1ha2UgU2Nyb2xsaW5nQ29vcmRpbmF0b3IKKyAgICAvLyBqdXN0
IGJlIGEgdHlwZWRlZiB0aGF0IGRlZmluZXMgU2Nyb2xsaW5nQ29vcmRpbmF0b3JNYWMgdG8gYmUg
U2Nyb2xsaW5nQ29vcmRpbmF0b3IsIGFuZCBzYW1lCisgICAgLy8gZm9yIENocm9taXVtIGFuZCBv
dGhlciBwbGF0Zm9ybXMuIEFueSBzaGFyZWQgZnVuY3Rpb25hbGl0eSBjYW4gYmUgaW4gc29tZXRo
aW5nIGNhbGxlZCAKKyAgICAvLyBTY3JvbGxpbmdDb29yZGluYXRvckJhc2Ugd2hpY2ggYWxsIG9m
IHRoZSBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMgd2lsbCBpbmhlcml0IGZyb20uCiAgICAgdm9p
ZCBzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKTsKICAgICB2b2lk
IHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpOworCisjaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKKyAgICB2b2lkIHNldFNjcm9sbExheWVyRm9yTm9kZShHcmFwaGljc0xh
eWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
Kik7CisgICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJh
bWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKik7CisjZW5kaWYKKwogICAgIHZvaWQgc2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQ
b3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xsaW5nUmVhc29ucyk7CiAKICAgICB2
b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24oKTsKQEAgLTE4Miw2ICsyMDQs
OCBAQCBwcml2YXRlOgogICAgIE93blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IG1fc2Nyb2xsaW5n
U3RhdGVUcmVlOwogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVlPiBtX3Njcm9sbGluZ1RyZWU7CiAg
ICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlQ29tbWl0
dGVyVGltZXI7CisKKyAgICBIYXNoTWFwPHVpbnQ2NF90LCBTY3JvbGxpbmdTdGF0ZU5vZGUqPiBt
X3N0YXRlTm9kZU1hcDsKICNlbmRpZgogCiAgICAgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRl
KiBtX3ByaXZhdGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvck5vbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAJKHJldmlzaW9uIDEzMDQzMikK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9u
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDM4ICs1NSw0NyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYpCit2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWlu
VGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKQogewogfQogCi12b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMm
KQorYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJz
KCkgY29uc3QKIHsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVyRm9yRml4ZWRQb3NpdGlvbkxheWVycyhH
cmFwaGljc0xheWVyKiwgYm9vbCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0U2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFk
U2Nyb2xsaW5nUmVhc29ucykKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNG
aXhlZFRvQ29udGFpbmVyTGF5ZXIoR3JhcGhpY3NMYXllciosIGJvb2wpCiB7CiB9CiAKLWJvb2wg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycygpIGNvbnN0
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlk
Q2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCiB7Ci0gICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzQ29udGFpbmVy
Rm9yRml4ZWRQb3NpdGlvbkxheWVycyhHcmFwaGljc0xheWVyKiwgYm9vbCkKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUoUmVuZGVyTGF5ZXJCYWNraW5nKikK
IHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250
YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNsZWFyU3RhdGVUcmVlKCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBo
aWNzTGF5ZXIqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9k
ZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQoreworfQorCit2b2lkIHNldFNjcm9sbFBhcmFtZXRl
cnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCiB7CiB9CisKK3ZvaWQgc2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudCh1bnNpZ25lZCkKK3sKK30KKwogI2VuZGlmIC8vICFFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQogCiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTc3LDYgKzc3LDIxIEBAIHZvaWQgU2Nyb2xsaW5nU3RhdGVOb2RlOjphcHBlbmRD
aGlsZChQYXMKICAgICBtX2NoaWxkcmVuLT5hcHBlbmQoY2hpbGROb2RlKTsKIH0KIAordm9pZCBT
Y3JvbGxpbmdTdGF0ZU5vZGU6OnJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkK
K3sKKyAgICBpZiAoIW1fY2hpbGRyZW4pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaXpl
X3QgaW5kZXggPSBtX2NoaWxkcmVuLT5maW5kKG5vZGUpKSB7CisgICAgICAgIG1fY2hpbGRyZW4t
PnJlbW92ZShpbmRleCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSA9IG1fY2hpbGRyZW4tPnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgbV9jaGlsZHJlbi0+YXQoaSktPnJlbW92ZUNoaWxkKG5vZGUpOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nU3RhdGVOb2RlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2
ICs0OCw4IEBAIHB1YmxpYzoKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVU
cmVlKik7CiAgICAgdmlydHVhbCB+U2Nyb2xsaW5nU3RhdGVOb2RlKCk7CiAKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoKSB7IHJldHVybiBmYWxzZTsgfQor
CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4gY2xvbmVBbmRSZXNl
dE5vZGUoKSA9IDA7CiAgICAgdm9pZCBjbG9uZUFuZFJlc2V0Q2hpbGROb2RlcyhTY3JvbGxpbmdT
dGF0ZU5vZGUqKTsKIApAQCAtNjYsMTAgKzY4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFNj
cm9sbGluZ1N0YXRlVHJlZShTY3JvbGxpbmdTdGF0ZVRyZWUqIHRyZWUpIHsgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUgPSB0cmVlOyB9CiAKICAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIHBhcmVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9Ci0KICAgICB2b2lkIHNldFBhcmVudChTY3JvbGxpbmdT
dGF0ZU5vZGUqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorCiAgICAgdm9pZCBhcHBl
bmRDaGlsZChQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlTm9kZT4pOwogCisgICAgdm9pZCByZW1v
dmVDaGlsZChTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKKwogcHJvdGVjdGVkOgogICAgIFNjcm9sbGlu
Z1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1
OCw4IEBAIHB1YmxpYzoKICAgICAgICAgUmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24gPSAxIDw8IDEy
LAogICAgIH07CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUoKSBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8
U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0Tm9kZSgpIE9WRVJSSURFOwogCiAgICAg
dmlydHVhbCBib29sIGhhc0NoYW5nZWRQcm9wZXJ0aWVzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9jaGFuZ2VkUHJvcGVydGllczsgfQpAQCAtMTM0LDYgKzEzNiwxNSBAQCBwcml2YXRlOgog
ICAgIEludFBvaW50IG1fc2Nyb2xsT3JpZ2luOwogfTsKIAoraW5saW5lIFNjcm9sbGluZ1N0YXRl
U2Nyb2xsaW5nTm9kZSogdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoU2Nyb2xsaW5nU3Rh
dGVOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCBub2RlLT5pc1Njcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKj4obm9kZSk7Cit9CisgICAgCisvLyBUaGlzIHdpbGwgY2F0Y2ggYW55
b25lIGRvaW5nIGFuIHVubmVjZXNzYXJ5IGNhc3QuCit2b2lkIHRvU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKGNvbnN0IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVRyZWUuY3BwCShyZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw4ICsz
Niw3IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBTY3JvbGxpbmcKIH0KIAogU2Ny
b2xsaW5nU3RhdGVUcmVlOjpTY3JvbGxpbmdTdGF0ZVRyZWUoKQotICAgIDogbV9yb290U3RhdGVO
b2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKHRoaXMpKQotICAgICwgbV9o
YXNDaGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKKyAgICA6IG1faGFzQ2hhbmdlZFByb3BlcnRpZXMo
ZmFsc2UpCiB7CiB9CiAKQEAgLTU3LDYgKzU2LDE4IEBAIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVUcmVlPiBTY3JvbGxpbmcKICAgICByZXR1cm4gdHJlZVN0YXRlLnJlbGVhc2UoKTsKIH0KIAor
dm9pZCBTY3JvbGxpbmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlKQoreworICAgIEFTU0VSVChtX3Jvb3RTdGF0ZU5vZGUpOworCisgICAgaWYgKG5vZGUgPT0g
bV9yb290U3RhdGVOb2RlKSB7CisgICAgICAgIG1fcm9vdFN0YXRlTm9kZSA9IDA7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBtX3Jvb3RTdGF0ZU5vZGUtPnJlbW92ZUNoaWxkKG5vZGUp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoVEhSRUFE
RURfU0NST0xMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVUcmVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHJldmlzaW9uIDEzMDQzMikKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NSwxOCArNTUsMTkgQEAgcHVibGljOgogICAgIH5TY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAog
ICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogcm9vdFN0YXRlTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fcm9vdFN0YXRlTm9kZS5nZXQoKTsgfQorICAgIHZvaWQgc2V0Um9vdFN0YXRlTm9k
ZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gcm9vdFN0YXRlTm9kZSkg
eyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2RlOyB9CiAKICAgICAvLyBDb3BpZXMgdGhl
IGN1cnJlbnQgdHJlZSBzdGF0ZSBhbmQgY2xlYXJzIHRoZSBjaGFuZ2VkIHByb3BlcnRpZXMgbWFz
ayBpbiB0aGUgb3JpZ2luYWwuCiAgICAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IGNv
bW1pdCgpOwogCisgICAgdm9pZCByZW1vdmVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiAg
ICAgdm9pZCBzZXRIYXNDaGFuZ2VkUHJvcGVydGllcyhib29sIGNoYW5nZWRQcm9wZXJ0aWVzKSB7
IG1faGFzQ2hhbmdlZFByb3BlcnRpZXMgPSBjaGFuZ2VkUHJvcGVydGllczsgfQogICAgIGJvb2wg
aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX2hhc0NoYW5nZWRQcm9wZXJ0
aWVzOyB9CiAKIHByaXZhdGU6CiAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlKCk7CiAKLSAgICB2b2lk
IHNldFJvb3RTdGF0ZU5vZGUoUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU+
IHJvb3RTdGF0ZU5vZGUpIHsgbV9yb290U3RhdGVOb2RlID0gcm9vdFN0YXRlTm9kZTsgfQotCiAg
ICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gbV9yb290U3RhdGVOb2RlOwog
ICAgIGJvb2wgbV9oYXNDaGFuZ2VkUHJvcGVydGllczsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkocmV2aXNpb24gMTMwNDMy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDcgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6Om1f
Y3JlYXRpbmdQcmltYQogCiBSZW5kZXJMYXllckJhY2tpbmc6OlJlbmRlckxheWVyQmFja2luZyhS
ZW5kZXJMYXllciogbGF5ZXIpCiAgICAgOiBtX293bmluZ0xheWVyKGxheWVyKQorICAgICwgbV9z
Y3JvbGxMYXllcklEKDApCiAgICAgLCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91bmRzKGZhbHNl
KQogICAgICwgbV9pc01haW5GcmFtZVJlbmRlclZpZXdMYXllcihmYWxzZSkKICAgICAsIG1fdXNp
bmdUaWxlZENhY2hlTGF5ZXIoZmFsc2UpCkBAIC0xMzgsNiArMTM5LDcgQEAgUmVuZGVyTGF5ZXJC
YWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKAogICAgIHVwZGF0ZUZvcmVncm91bmRMYXllcihm
YWxzZSk7CiAgICAgdXBkYXRlTWFza0xheWVyKGZhbHNlKTsKICAgICB1cGRhdGVTY3JvbGxpbmdM
YXllcnMoZmFsc2UpOworICAgIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpOwogICAg
IGRlc3Ryb3lHcmFwaGljc0xheWVycygpOwogfQogCkBAIC05NjMsNiArOTY1LDM2IEBAIGJvb2wg
UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVTY3JvbGxpbmcKICAgICByZXR1cm4gbGF5ZXJDaGFu
Z2VkOwogfQogCitzdGF0aWMgdWludDY0X3QgZ2VuZXJhdGVTY3JvbGxMYXllcklEKCkKK3sKKyAg
ICBzdGF0aWMgdWludDY0X3QgdW5pcXVlU2Nyb2xsTGF5ZXJJRCA9IDE7CisgICAgcmV0dXJuIHVu
aXF1ZVNjcm9sbExheWVySUQrKzsKK30KKwordm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmF0dGFj
aFRvU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQoreworICAgIGlmICghbV9zY3JvbGxMYXllcklEKQor
ICAgICAgICBtX3Njcm9sbExheWVySUQgPSBnZW5lcmF0ZVNjcm9sbExheWVySUQoKTsKK30KKwor
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigp
Cit7CisgICAgLy8gSWYgbV9zY3JvbGxMYXllcklEIGlzIDAsIHRoZW4gdGhpcyBiYWNraW5nIGlz
IG5vdCBhdHRhY2hlZCB0byB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCisgICAgaWYgKCFtX3Nj
cm9sbExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSByZW5kZXJl
cigpLT5mcmFtZSgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisK
KyAgICBTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5z
Y3JvbGxpbmdDb29yZGluYXRvcigpOworICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCisg
ICAgICAgIHJldHVybjsKKworICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5kZXRhY2hGcm9tU3Rh
dGVUcmVlKG1fc2Nyb2xsTGF5ZXJJRCk7CisgICAgbV9zY3JvbGxMYXllcklEID0gMDsKK30KKwog
R3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1Bo
YXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBwaGFzZSA9IEdyYXBo
aWNzTGF5ZXJQYWludEJhY2tncm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5oCShyZXZpc2lvbiAxMzA0MzIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDYgKzg3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzU2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX3Njcm9sbGluZ0xheWVyOyB9CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5n
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0xheWVyLmdldCgpOyB9CiAgICAgR3Jh
cGhpY3NMYXllciogc2Nyb2xsaW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Ny
b2xsaW5nQ29udGVudHNMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBhdHRhY2hUb1Njcm9sbGlu
Z0Nvb3JkaW5hdG9yKCk7CisgICAgdWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCgpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsTGF5ZXJJRDsgfQogICAgIAogICAgIGJvb2wgaGFzTWFza0xheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIgIT0gMDsgfQogCkBAIC0xOTMsNiArMTk2LDggQEAgcHJp
dmF0ZToKICAgICBib29sIHJlcXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdDsKICAgICBi
b29sIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhib29sIHNjcm9sbGluZ0xheWVycyk7CiAKKyAgICB2
b2lkIGRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpOworCiAgICAgR3JhcGhpY3NMYXll
clBhaW50aW5nUGhhc2UgcGFpbnRpbmdQaGFzZUZvclByaW1hcnlMYXllcigpIGNvbnN0OwogICAg
IAogICAgIEludFNpemUgY29udGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CkBA
IC0yNTYsNiArMjYxLDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9z
Y3JvbGxpbmdMYXllcjsgLy8gb25seSB1c2VkIGlmIHRoZSBsYXllciBpcyB1c2luZyBjb21wb3Np
dGVkIHNjcm9sbGluZy4KICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxpbmdDb250
ZW50c0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlzIHVzaW5nIGNvbXBvc2l0ZWQg
c2Nyb2xsaW5nLgogCisgICAgdWludDY0X3QgbV9zY3JvbGxMYXllcklEOworCiAgICAgSW50UmVj
dCBtX2NvbXBvc2l0ZWRCb3VuZHM7CiAKICAgICBib29sIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRC
b3VuZHM7ICAgICAgLy8gYm91bmRzIGhhZCB0byBiZSBtYWRlIG5vbi16ZXJvIHRvIG1ha2UgdHJh
bnNmb3JtLW9yaWdpbiB3b3JrCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkocmV2aXNpb24gMTMwNDMyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5NCw2ICs0OTQsMTIgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0
ZUJhY2tpbgogCiAgICAgICAgICAgICBsYXllci0+ZW5zdXJlQmFja2luZygpOwogCisgICAgICAg
ICAgICBpZiAobGF5ZXItPmlzUm9vdExheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBsYXllci0+
YmFja2luZygpLT5hdHRhY2hUb1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgICAgICAgICAg
ICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMt
PnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nv
b3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LT5mcmFt
ZVZpZXcoKSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIC8vIFRoaXMgbGF5ZXIgYW5k
IGFsbCBvZiBpdHMgZGVzY2VuZGFudHMgaGF2ZSBjYWNoZWQgcmVwYWludHMgcmVjdHMgdGhhdCBh
cmUgcmVsYXRpdmUgdG8KICAgICAgICAgICAgIC8vIHRoZSByZXBhaW50IGNvbnRhaW5lciwgc28g
Y2hhbmdlIHdoZW4gY29tcG9zaXRpbmcgY2hhbmdlczsgd2UgbmVlZCB0byB1cGRhdGUgdGhlbSBo
ZXJlLgogICAgICAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkKQEAgLTIzMDgsOSArMjMxNCw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGEKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0
b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29y
ZGluYXRvci0+ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy0+ZnJhbWVW
aWV3KCkpOwotCiAgICAgbV9yb290TGF5ZXJBdHRhY2htZW50ID0gYXR0YWNobWVudDsKICAgICBy
b290TGF5ZXJBdHRhY2htZW50Q2hhbmdlZCgpOwogfQo=
</data>
<flag name="commit-queue"
          id="180175"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167496</attachid>
            <date>2012-10-07 19:59:17 -0700</date>
            <delta_ts>2012-10-08 11:20:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-4.txt</filename>
            <type>text/plain</type>
            <size>36232</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDYxMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wNyAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wNyAgTWFydGluIFJvYmluc29uICA8bXJvYmluc29uQGln
YWxpYS5jb20+CiAKICAgICAgICAgW1NvdXBdIENsZWFuIHVwIFJlc291cmNlRXJyb3IgY3JlYXRp
b24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMTMwNjEzKQorKysgU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1MCwxNCAr
NDA1MCwxOCBAQCB2b2lkIERvY3VtZW50OjpzZXRJblBhZ2VDYWNoZShib29sIGZsYWcpCiAgICAg
bV9pblBhZ2VDYWNoZSA9IGZsYWc7CiAKICAgICBGcmFtZVZpZXcqIHYgPSB2aWV3KCk7CisgICAg
UGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKwogICAgIGlmIChmbGFnKSB7CiAgICAgICAgIEFT
U0VSVCghbV9zYXZlZFJlbmRlcmVyKTsKICAgICAgICAgbV9zYXZlZFJlbmRlcmVyID0gcmVuZGVy
ZXIoKTsKICAgICAgICAgaWYgKHYpIHsKICAgICAgICAgICAgIHYtPmNhY2hlQ3VycmVudFNjcm9s
bFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBpZiAocGFnZSgpICYmIHBhZ2UoKS0+bWFpbkZyYW1l
KCkgPT0gbV9mcmFtZSkKKyAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgp
ID09IG1fZnJhbWUpIHsKICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnNBbmRDbGVh
ckNvbnRlbnRzU2l6ZSgpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRv
ci0+Y2xlYXJTdGF0ZVRyZWUoKTsKKyAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAg
IHYtPnJlc2V0U2Nyb2xsYmFycygpOwogICAgICAgICB9CiAgICAgICAgIG1fc3R5bGVSZWNhbGNU
aW1lci5zdG9wKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0b3J5Q29udHJv
bGxlci5jcHAJKHJldmlzaW9uIDEzMDYxMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9IaXN0
b3J5Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3Vw
LmgiCisjaW5jbHVkZSAiU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIApAQCAtMTIzLDggKzEyNCwxMyBA
QCB2b2lkIEhpc3RvcnlDb250cm9sbGVyOjpyZXN0b3JlU2Nyb2xsUG9zCiAgICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT5yZXN0b3JlVmlld1N0YXRlKCk7CiAgICAgCiAgICAgaWYgKEZy
YW1lVmlldyogdmlldyA9IG1fZnJhbWUtPnZpZXcoKSkgeworICAgICAgICBQYWdlKiBwYWdlID0g
bV9mcmFtZS0+cGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9
PSBtX2ZyYW1lKSB7CisgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAg
ICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdl
KHZpZXcpOworICAgICAgICB9CisKICAgICAgICAgaWYgKCF2aWV3LT53YXNTY3JvbGxlZEJ5VXNl
cigpKSB7Ci0gICAgICAgICAgICBQYWdlKiBwYWdlID0gbV9mcmFtZS0+cGFnZSgpOwogICAgICAg
ICAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSAmJiBtX2N1cnJl
bnRJdGVtLT5wYWdlU2NhbGVGYWN0b3IoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5zZXRQYWdl
U2NhbGVGYWN0b3IobV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFjdG9yKCksIG1fY3VycmVudEl0
ZW0tPnNjcm9sbFBvaW50KCkpOwogICAgICAgICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3LmNwcAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03ODIsNiArNzgyLDE5IEBAIFRpbGVkQmFj
a2luZyogRnJhbWVWaWV3Ojp0aWxlZEJhY2tpbmcoKQogICAgIHJldHVybiBiYWNraW5nLT5ncmFw
aGljc0xheWVyKCktPnRpbGVkQmFja2luZygpOwogfQogCit1aW50NjRfdCBGcmFtZVZpZXc6OnNj
cm9sbExheWVySUQoKSBjb25zdAoreworICAgIFJlbmRlclZpZXcqIHJvb3QgPSByb290UmVuZGVy
ZXIodGhpcyk7CisgICAgaWYgKCFyb290KQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRl
ckxheWVyQmFja2luZyogYmFja2luZyA9IHJvb3QtPmxheWVyKCktPmJhY2tpbmcoKTsKKyAgICBp
ZiAoIWJhY2tpbmcpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGJhY2tpbmctPnNj
cm9sbExheWVySUQoKTsKK30KKwogI2lmIEVOQUJMRShSVUJCRVJfQkFORElORykKIEdyYXBoaWNz
TGF5ZXIqIEZyYW1lVmlldzo6bGF5ZXJGb3JPdmVyaGFuZ0FyZWFzKCkgY29uc3QKIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuaAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSwxMCBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXROZWVkc09uZVNob3REcmF3aW5nU3luY2hyb25pemF0aW9uKCk7
CiAKICAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CisK
KyAgICAvLyBJbiB0aGUgZnV0dXJlIHdoZW4gYW55IFNjcm9sbGFibGVBcmVhIGNhbiBoYXZlIGEg
bm9kZSBpbiB0aCBTY3JvbGxpbmdUcmVlLCB0aGlzIHNob3VsZAorICAgIC8vIGJlY29tZSBhIHZp
cnR1YWwgZnVuY3Rpb24gb24gU2Nyb2xsYWJsZUFyZWEuCisgICAgdWludDY0X3Qgc2Nyb2xsTGF5
ZXJJRCgpIGNvbnN0OwogI2VuZGlmCiAKICAgICBib29sIGhhc0NvbXBvc2l0ZWRDb250ZW50KCkg
Y29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29y
ZGluYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCShyZXZpc2lvbiAxMzA2MTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjb29yZGlu
YXRlc1NjCiAjZW5kaWYKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0
aWMgUmVnaW9uIGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihGcmFtZSogZnJhbWUsIGNv
bnN0IEludFBvaW50JiBmcmFtZUxvY2F0aW9uKQogewogICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbjsKQEAgLTE0Nyw5ICsxNDgsMTEgQEAgc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9u
RmFzdFNjcm9sbGFibGVSZQogCiAgICAgcmV0dXJuIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uOwog
fQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW91dFVw
ZGF0ZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9M
TElORykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAgIEFTU0VSVChtX3BhZ2UpOwog
CkBAIC0xNTcsMTEgKzE2MCwxOCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZp
ZXdMYXlvCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBv
dmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0
aGUKICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhl
IG1haW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0
ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkp
OwotICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KTsKKworICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxp
dHkgdG8gc2V0IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAv
LyBqdXN0IHRoZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFw
cGxpZXMgdG8gdGhlIHJvb3QuCisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2Rl
KG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRl
Tm9kZSgpKTsKIAogICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJh
bWVWaWV3KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKiBub2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFu
b2RlKQorICAgICAgICByZXR1cm47CisKICAgICBTY3JvbGxQYXJhbWV0ZXJzIHNjcm9sbFBhcmFt
ZXRlcnM7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSA9
IGZyYW1lVmlldy0+aG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoKTsKICAgICBzY3JvbGxQYXJh
bWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSA9IGZyYW1lVmlldy0+dmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KCk7CkBAIC0xNzQsMTUgKzE4NCwxOCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpmcmFtZVZpZXdMYXlvCiAgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3Qg
PSBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6
ZSgpKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29u
dGVudHNTaXplKCk7CiAKLSAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzKHNjcm9sbFBhcmFtZXRlcnMp
OworICAgIHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKHNjcm9sbFBhcmFtZXRlcnMsIG5vZGUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oZnJhbWVWaWV3KTsKKyNlbmRpZgogfQogCi12b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hh
bmdlZChGcmFtZVZpZXcqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hl
ZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAgICAg
QVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKIAotICAgIHJlY29t
cHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKKyAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFu
ZGxlckNvdW50Rm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CiB9CiAKIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0hhc1Nsb3dSZXBhaW50T2JqZWN0c0RpZENoYW5nZShGcmFtZVZp
ZXcqIGZyYW1lVmlldykKQEAgLTIwNyw2ICsyMjAsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdGaXhlCiAgICAgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3Np
dGlvbk9uTWFpblRocmVhZCgpOwogfQogCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
IHN0YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW1lVmlldyhGcmFtZVZpZXcq
IGZyYW1lVmlldykKIHsKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC0yMjMs
NiArMjM3LDcgQEAgc3RhdGljIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyRm9yRnJhbQogICAg
IHJldHVybiAwOwogI2VuZGlmCiB9CisjZW5kaWYKIAogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewpA
QCAtMjMyLDEwICsyNDcsMTkgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
Um9vdAogICAgIGlmICghY29vcmRpbmF0ZXNTY3JvbGxpbmdGb3JGcmFtZVZpZXcoZnJhbWVWaWV3
KSkKICAgICAgICAgcmV0dXJuOwogCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAg
ICAvLyBJZiB0aGUgcm9vdCBsYXllciBkb2VzIG5vdCBoYXZlIGEgU2Nyb2xsaW5nU3RhdGVOb2Rl
LCB0aGVuIHdlIHNob3VsZCBjcmVhdGUgb25lLgorICAgIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBBU1NFUlQobV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKSk7CisjZW5kaWYKKwogICAgIGZyYW1lVmlld0xheW91dFVwZGF0ZWQoZnJh
bWVWaWV3KTsKLSAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgcmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogICAg
IHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKLSAg
ICBzZXRTY3JvbGxMYXllcihzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpKTsKKyAg
ICAKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHNldFNjcm9sbExheWVyRm9y
Tm9kZShzY3JvbGxMYXllckZvckZyYW1lVmlldyhmcmFtZVZpZXcpLCBzdGF0ZU5vZGVGb3JGcmFt
ZVZpZXcoZnJhbWVWaWV3KSk7CisjZW5kaWYKIH0KIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6cmVxdWVzdFNjcm9sbFBvc2l0aW9uVXBkYXRlKEZyYW1lVmlldyogZnJhbWVWaWV3LCBjb25z
dCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pCkBAIC0yNTQsNyArMjc4LDExIEBAIGJvb2wgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnJlcXVlc3RTY3JvbGwKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0UmVx
dWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFt
bWF0aWNTY3JvbGwoKSk7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5v
ZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoIXN0YXRlTm9k
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVOb2RlLT5zZXRSZXF1ZXN0ZWRT
Y3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRpY1Nj
cm9sbCgpKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogICAgIHJldHVybiB0cnVl
OwogI2Vsc2UKQEAgLTMwMCw5ICszMjgsMTAgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
dXBkYXRlTWFpbkZyYQogICAgIGZyYW1lVmlldy0+c2V0SW5Qcm9ncmFtbWF0aWNTY3JvbGwob2xk
UHJvZ3JhbW1hdGljU2Nyb2xsKTsKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
CiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBv
c2l0aW9uKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBpZiAoIW1fcGFnZSkKQEAgLTMxNiw2ICsz
NDUsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgICAg
IHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsK
ICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1h
aW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7CkBAIC0zNTYs
MTQgKzM4NiwyMiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2CiB9
CiAjZW5kaWYKIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZWNvbXB1dGVXaGVl
bEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogewor
I2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYg
KCFub2RlKQorICAgICAgICByZXR1cm47CisKICAgICB1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxl
ckNvdW50ID0gMDsKICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IG1fcGFnZS0+bWFpbkZyYW1lKCk7
IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCktPnRyYXZlcnNlTmV4dCgpKSB7CiAgICAgICAg
IGlmIChmcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgICAgIHdoZWVsRXZlbnRIYW5kbGVyQ291
bnQgKz0gZnJhbWUtPmRvY3VtZW50KCktPndoZWVsRXZlbnRIYW5kbGVyQ291bnQoKTsKICAgICB9
Ci0gICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsK
KyAgICBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh3aGVlbEV2ZW50SGFuZGxlckNv
dW50LCBub2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7CisjZW5kaWYK
IH0KIAogYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFzTm9uTGF5ZXJGaXhlZE9iamVjdHMo
RnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC00MTcsMzkgKzQ1NSw4OCBAQCB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXRGb3JjZU1haW5UCiB9CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NS
T0xMSU5HKQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXIoR3JhcGhp
Y3NMYXllciogc2Nyb2xsTGF5ZXIpCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZp
ZXcpCit7CisgICAgdWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCA9IGZyYW1lVmlldy0+c2Nyb2xsTGF5
ZXJJRCgpOworICAgIGlmICghc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBIYXNoTWFwPHVpbnQ2NF90LCBTY3JvbGxpbmdTdGF0ZU5vZGUqPjo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3N0YXRlTm9kZU1hcC5maW5kKHNjcm9sbExheWVySUQpOworICAgIGlmIChpdCA9PSBt
X3N0YXRlTm9kZU1hcC5lbmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBTY3JvbGxpbmdT
dGF0ZU5vZGUqIG5vZGUgPSBpdC0+c2Vjb25kOworICAgIEFTU0VSVChub2RlLT5pc1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZy
b21TdGF0ZVRyZWUodWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExh
eWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9
IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7CisKKyAgICAvLyBGSVhNRTogcmVt
b3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5kIHRob3NlIGNoaWxkcmVuIG1pZ2h0
IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgorICAgIC8vIFRoaXMgd2lsbCBiZSBhIGJpZyBwcm9i
bGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVuIGluIHRoZSB0cmVlLgorICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit7CisgICAgbV9zdGF0ZU5vZGVNYXAuY2xl
YXIoKTsKKyAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7
CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5v
ZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0
aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjbGVhclN0YXRlVHJlZSgpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3
IG5vZGUgZm9yIHRoZSBGcmFtZVZpZXcsIGFuZCBzZXQgaXQgYXMgdGhlIHJvb3Qgbm9kZS4KKyAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOworCisgICAg
Ly8gTm93IGdldCBvciBzZXQgYW4gSUQgZm9yIHRoZSBiYWNraW5nLCBhbmQgdGhlbiBhZGQgdGhl
IGNvbWJpbmF0aW9uIHRvIHRoZSBIYXNoTWFwLgorICAgIHVpbnQ2NF90IHJvb3RMYXllcklEID0g
ZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCk7CisgICAgQVNTRVJUKHJvb3RMYXllcklEKTsKKyAg
ICBtX3N0YXRlTm9kZU1hcC5zZXQocm9vdExheWVySUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3Jv
bGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRl
Tm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
LT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIo
c2Nyb2xsTGF5ZXIpOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJl
Z2lvbiYgcmVnaW9uKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIG5vZGUpCiB7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0
ZU5vZGUoKS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKKyAgICBub2RlLT5z
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOwogICAgIHNjaGVkdWxlVHJlZVN0YXRl
Q29tbWl0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFt
ZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycykKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9s
bFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSkKIHsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiBh
bmQgYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcyBuZWVkIHRvCi0gICAg
Ly8gaGFuZGxlIG1vcmUgdGhhbiBqdXN0IHRoZSByb290IG5vZGUuIAotICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUpOwotCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0
U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFy
YW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7
CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVy
cy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsK
KyAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0
ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBh
cmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOworICAgIG5vZGUtPnNldFZlcnRpY2Fs
U2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CisK
KyAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4p
OworICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVj
dCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNT
aXplKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCiAKLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxF
dmVudEhhbmRsZXJDb3VudCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZl
bnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQpOworICAgIG5vZGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hl
ZWxFdmVudEhhbmRsZXJDb3VudCk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzA2MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjZW5kaWYK
QEAgLTUyLDYgKzUzLDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFJlZ2lvbjsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOworY2xhc3MgU2Ny
b2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xh
c3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
QEAgLTEzNywxNSArMTQwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgSXNJbWFnZURvY3VtZW50ID0g
MSA8PCA0CiAgICAgfTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZSh1aW50NjRfdCk7
CisgICAgdm9pZCBjbGVhclN0YXRlVHJlZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpOworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmll
dyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9k
ZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxh
eWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxM
YXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mKTsKIAogICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKICAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKQEAgLTE2Myw4
ICsxNzEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAg
fTsKIAorICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgorICAgIC8vIG5v
dyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSBhbmQgc2V0
V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKS4KKyAgICAvLyBUbyByZXNvbHZlIHRoaXMg
YW5kIGFsbCBvZiB0aGUgaWYtZGVmcyBpbiB0aGlzIGNsYXNzLCB3ZSBzaG91bGQgbWFrZSBTY3Jv
bGxpbmdDb29yZGluYXRvcgorICAgIC8vIGp1c3QgYmUgYSB0eXBlZGVmIHRoYXQgZGVmaW5lcyBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYyB0byBiZSBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIHNh
bWUKKyAgICAvLyBmb3IgQ2hyb21pdW0gYW5kIG90aGVyIHBsYXRmb3Jtcy4gQW55IHNoYXJlZCBm
dW5jdGlvbmFsaXR5IGNhbiBiZSBpbiBzb21ldGhpbmcgY2FsbGVkIAorICAgIC8vIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQmFzZSB3aGljaCBhbGwgb2YgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9u
cyB3aWxsIGluaGVyaXQgZnJvbS4KICAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3Qg
U2Nyb2xsUGFyYW1ldGVycyYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1
bnNpZ25lZCk7CisKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIHZvaWQgc2V0
U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxpbmdTdGF0ZU5vZGUqKTsK
KyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24m
LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFNjcm9sbFBhcmFt
ZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVu
c2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyNlbmRpZgorCiAgICAgdm9p
ZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJl
YWRTY3JvbGxpbmdSZWFzb25zKTsKIAogICAgIHZvaWQgdXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5
ZXJQb3NpdGlvbigpOwpAQCAtMTgyLDYgKzIwNCw4IEBAIHByaXZhdGU6CiAgICAgT3duUHRyPFNj
cm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CiAgICAgUmVmUHRyPFNjcm9s
bGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKICAgICBUaW1lcjxTY3JvbGxpbmdDb29yZGluYXRv
cj4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKKworICAgIEhhc2hNYXA8dWlu
dDY0X3QsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFwOwogI2VuZGlmCiAKICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yTm9uZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3JOb25lLmNwcAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
MzggKzU1LDQ3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWUKIHsK
IH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdp
b24oY29uc3QgUmVnaW9uJikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFt
ZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCitib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdAogeworICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJD
b3VudCh1bnNpZ25lZCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNDb250
YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKQogewogfQog
Ci12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKQordm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGlj
c0xheWVyKiwgYm9vbCkKIHsKIH0KIAotYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3VwcG9y
dHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xsYWJsZUFyZWEqLCBHcmFw
aGljc0xheWVyKikKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBo
aWNzTGF5ZXIqLCBib29sKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0
YXRlVHJlZSh1aW50NjRfdCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0
TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKK3ZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKIHsKIH0KIAotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXllckRpZENoYW5nZShTY3Jv
bGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQoreworfQorCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBh
cmFtZXRlcnMmKQogewogfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQoreworfQorCiAjZW5kaWYgLy8gIUVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24gMTMwNjEzKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjEgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OmFw
cGVuZENoaWxkKFBhcwogICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZE5vZGUpOwogfQogCit2
b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQobm9kZSkpIHsKKyAgICAgICAgbV9jaGls
ZHJlbi0+cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVf
dCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cmVtb3ZlQ2hpbGQobm9kZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdT
dGF0ZVRyZWUqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKIAorICAgIHZp
cnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFu
ZFJlc2V0Tm9kZSgpID0gMDsKICAgICB2b2lkIGNsb25lQW5kUmVzZXRDaGlsZE5vZGVzKFNjcm9s
bGluZ1N0YXRlTm9kZSopOwogCkBAIC02NiwxMCArNjgsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkgeyBtX3Njcm9s
bGluZ1N0YXRlVHJlZSA9IHRyZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9s
bGluZ1N0YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKICAgICB2b2lk
IGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CiAKKyAgICB2b2lk
IHJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgU2Ny
b2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuaAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiA9IDEg
PDwgMTIsCiAgICAgfTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgUGFzc093
blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkgT1ZFUlJJREU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiArMTM2LDE1IEBAIHByaXZh
dGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiB9OwogCitpbmxpbmUgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxp
bmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKK30KKyAgICAKKy8vIFRoaXMgd2lsbCBjYXRj
aCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDEzMDYxMykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDcgQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogfQog
CiBTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgpCi0gICAgOiBtX3Jvb3RT
dGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcykpCi0gICAg
LCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQorICAgIDogbV9oYXNDaGFuZ2VkUHJvcGVy
dGllcyhmYWxzZSkKIHsKIH0KIApAQCAtNTcsNiArNTYsMTggQEAgUGFzc093blB0cjxTY3JvbGxp
bmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgpOwog
fQogCit2b2lkIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShTY3JvbGxpbmdTdGF0ZU5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7CisKKyAgICBpZiAobm9k
ZSA9PSBtX3Jvb3RTdGF0ZU5vZGUpIHsKKyAgICAgICAgbV9yb290U3RhdGVOb2RlID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdFN0YXRlTm9kZS0+cmVtb3ZlQ2hpbGQo
bm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAkocmV2aXNpb24gMTMwNjEzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDE4ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgflNjcm9sbGluZ1N0YXRlVHJlZSgp
OwogCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290U3Rh
dGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290U3RhdGVO
b2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KIAogICAgIC8vIENvcGll
cyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGll
cyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KICAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJl
ZT4gY29tbWl0KCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7
CisKICAgICB2b2lkIHNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wgY2hhbmdlZFByb3BlcnRp
ZXMpIHsgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGNoYW5nZWRQcm9wZXJ0aWVzOyB9CiAgICAg
Ym9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hhbmdlZFBy
b3BlcnRpZXM7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAotICAg
IHZvaWQgc2V0Um9vdFN0YXRlTm9kZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT4gcm9vdFN0YXRlTm9kZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2RlOyB9
Ci0KICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0ZU5v
ZGU7CiAgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAx
MzA2MTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2lu
Zzo6bV9jcmVhdGluZ1ByaW1hCiAKIFJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJCYWNr
aW5nKFJlbmRlckxheWVyKiBsYXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIobGF5ZXIpCisgICAg
LCBtX3Njcm9sbExheWVySUQoMCkKICAgICAsIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHMo
ZmFsc2UpCiAgICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKGZhbHNlKQogICAgICwg
bV91c2luZ1RpbGVkQ2FjaGVMYXllcihmYWxzZSkKQEAgLTEzOCw2ICsxMzksNyBAQCBSZW5kZXJM
YXllckJhY2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmcoCiAgICAgdXBkYXRlRm9yZWdyb3VuZExh
eWVyKGZhbHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZVNjcm9s
bGluZ0xheWVycyhmYWxzZSk7CisgICAgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7
CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTk2Myw2ICs5NjUsMzYgQEAg
Ym9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZwogICAgIHJldHVybiBsYXll
ckNoYW5nZWQ7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVNjcm9sbExheWVySUQoKQor
eworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVTY3JvbGxMYXllcklEID0gMTsKKyAgICByZXR1
cm4gdW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOworfQorCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcigpCit7CisgICAgaWYgKCFtX3Njcm9sbExheWVy
SUQpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXJJRCA9IGdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCgpOwor
fQorCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkKK3sKKyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgaXMgMCwgdGhlbiB0aGlzIGJhY2tp
bmcgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBpZiAo
IW1fc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9IHJl
bmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxpbmdDb29yZGluYXRv
cikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmRldGFjaEZy
b21TdGF0ZVRyZWUobV9zY3JvbGxMYXllcklEKTsKKyAgICBtX3Njcm9sbExheWVySUQgPSAwOwor
fQorCiBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50
aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdAogewogICAgIHVuc2lnbmVkIHBoYXNlID0g
R3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDEzMDYxMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtODcsNiArODcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTY3JvbGxpbmdMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXI7IH0KICAgICBHcmFwaGljc0xheWVyKiBzY3Jv
bGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCk7IH0KICAg
ICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIGF0dGFjaFRvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICB1aW50NjRfdCBzY3JvbGxMYXllcklEKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxMYXllcklEOyB9CiAgICAgCiAgICAgYm9vbCBoYXNNYXNrTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciAhPSAwOyB9CiAKQEAgLTE5Myw2ICsxOTYsOCBA
QCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0Owog
ICAgIGJvb2wgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgc2Nyb2xsaW5nTGF5ZXJzKTsKIAor
ICAgIHZvaWQgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKICAgICBHcmFwaGlj
c0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3Q7
CiAgICAgCiAgICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25z
dDsKQEAgLTI1Niw2ICsyNjEsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVy
PiBtX3Njcm9sbGluZ0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlzIHVzaW5nIGNv
bXBvc2l0ZWQgc2Nyb2xsaW5nLgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbGlu
Z0NvbnRlbnRzTGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgdXNpbmcgY29tcG9z
aXRlZCBzY3JvbGxpbmcuCiAKKyAgICB1aW50NjRfdCBtX3Njcm9sbExheWVySUQ7CisKICAgICBJ
bnRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJbmZs
YXRlZEJvdW5kczsgICAgICAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXplcm8gdG8gbWFr
ZSB0cmFuc2Zvcm0tb3JpZ2luIHdvcmsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMzA2MTMpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCwxMiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
dXBkYXRlQmFja2luCiAKICAgICAgICAgICAgIGxheWVyLT5lbnN1cmVCYWNraW5nKCk7CiAKKyAg
ICAgICAgICAgIGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGxh
eWVyLT5iYWNraW5nKCktPmF0dGFjaFRvU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0g
dGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXct
PmZyYW1lVmlldygpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVGhpcyBsYXll
ciBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBoYXZlIGNhY2hlZCByZXBhaW50cyByZWN0cyB0
aGF0IGFyZSByZWxhdGl2ZSB0bwogICAgICAgICAgICAgLy8gdGhlIHJlcGFpbnQgY29udGFpbmVy
LCBzbyBjaGFuZ2Ugd2hlbiBjb21wb3NpdGluZyBjaGFuZ2VzOyB3ZSBuZWVkIHRvIHVwZGF0ZSB0
aGVtIGhlcmUuCiAgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKQpAQCAtMjMwOCw5ICsy
MzE0LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LT5m
cmFtZVZpZXcoKSk7Ci0KICAgICBtX3Jvb3RMYXllckF0dGFjaG1lbnQgPSBhdHRhY2htZW50Owog
ICAgIHJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2VkKCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="180188"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167570</attachid>
            <date>2012-10-08 11:20:57 -0700</date>
            <delta_ts>2012-10-08 11:52:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-5.txt</filename>
            <type>text/plain</type>
            <size>36247</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wOCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE51bGwtY2hlY2sgZm9yIERPTVdpbmRvdyBiZWZvcmUgZmVlZGluZyBpdCB0
byBGZWF0dXJlT2JzZXJ2ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNTAsMTQgKzQwNTAsMTggQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUo
Ym9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFnOwogCiAgICAgRnJhbWVWaWV3KiB2
ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisKICAgICBpZiAoZmxh
ZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7CiAgICAgICAgIG1fc2F2ZWRS
ZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICB2LT5j
YWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKHBhZ2UoKSAmJiBw
YWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAgICBpZiAocGFnZSAmJiBw
YWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAgICAgICAgICAgICAgdi0+cmVzZXRT
Y3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAg
LTEyMyw4ICsxMjQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZVNjcm9sbFBv
cwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZpZXdTdGF0ZSgpOwog
ICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKKyAgICAg
ICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgcGFn
ZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgeworICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghdmlldy0+
d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUt
PnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1f
ZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpCiAgICAgICAgICAgICAg
ICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fY3VycmVudEl0ZW0tPnBhZ2VTY2FsZUZhY3Rv
cigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsKICAgICAgICAgICAgIGVsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDYgKzc4
MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmlldzo6dGlsZWRCYWNraW5nKCkKICAgICByZXR1
cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50aWxlZEJhY2tpbmcoKTsKIH0KIAordWludDY0
X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiBy
b290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByb290LT5sYXllcigpLT5i
YWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7Cit9CisKICNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6OmxheWVyRm9yT3ZlcmhhbmdBcmVhcygp
IGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMDY1MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3aGVuIGFueSBTY3JvbGxhYmxl
QXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Nyb2xsaW5nVHJlZSwgdGhpcyBzaG91bGQKKyAg
ICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9uIFNjcm9sbGFibGVBcmVhLgorICAgIHVp
bnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBoYXNDb21w
b3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMwNjUz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgYm9vbCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6Y29vcmRpbmF0ZXNTYwogI2VuZGlmCiB9CiAKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQogc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24o
RnJhbWUqIGZyYW1lLCBjb25zdCBJbnRQb2ludCYgZnJhbWVMb2NhdGlvbikKIHsKICAgICBSZWdp
b24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb247CkBAIC0xNDcsOSArMTQ4LDExIEBAIHN0YXRpYyBS
ZWdpb24gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmUKIAogICAgIHJldHVybiBub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbjsKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpm
cmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVWaWV3KQogeworI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBB
U1NFUlQobV9wYWdlKTsKIApAQCAtMTU3LDExICsxNjAsMTggQEAgdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6ZnJhbWVWaWV3TGF5bwogICAgIC8vIGFsbCBzY3JvbGxhYmxlIGFyZWFzLCBzdWNo
IGFzIHN1YmZyYW1lcywgb3ZlcmZsb3cgZGl2cyBhbmQgbGlzdCBib3hlcy4gV2UgbmVlZCB0byBk
byB0aGlzIGV2ZW4gaWYgdGhlCiAgICAgLy8gZnJhbWUgdmlldyB3aG9zZSBsYXlvdXQgd2FzIHVw
ZGF0ZWQgaXMgbm90IHRoZSBtYWluIGZyYW1lLgogICAgIFJlZ2lvbiBub25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbiA9IGNvbXB1dGVOb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihtX3BhZ2UtPm1haW5GcmFt
ZSgpLCBJbnRQb2ludCgpKTsKLSAgICBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihub25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbik7CisKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0
byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3Ig
bW9yZSB0aGFuCisgICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlz
IGNvbmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgorICAgIHNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CiAKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5n
Rm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKIAorICAgIFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZp
ZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgU2Nyb2xsUGFyYW1l
dGVycyBzY3JvbGxQYXJhbWV0ZXJzOwogICAgIHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNj
cm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZpZXctPmhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KCk7
CiAgICAgc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkgPSBmcmFtZVZp
ZXctPnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSgpOwpAQCAtMTc0LDE1ICsxODQsMTggQEAgdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3TGF5bwogICAgIHNjcm9sbFBhcmFtZXRl
cnMudmlld3BvcnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBmcmFtZVZpZXctPnZpc2libGVD
b250ZW50UmVjdCgpLnNpemUoKSk7CiAgICAgc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUg
PSBmcmFtZVZpZXctPmNvbnRlbnRzU2l6ZSgpOwogCi0gICAgc2V0U2Nyb2xsUGFyYW1ldGVycyhz
Y3JvbGxQYXJhbWV0ZXJzKTsKKyAgICBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZShzY3JvbGxQ
YXJhbWV0ZXJzLCBub2RlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGZyYW1lVmlldyk7Cisj
ZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxFdmVu
dEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZyYW1lVmlldyogZnJh
bWVWaWV3KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFn
ZSk7CiAKLSAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgcmVjb21w
dXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogfQogCiB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIYXNTbG93UmVwYWludE9iamVjdHNE
aWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMDcsNiArMjIwLDcgQEAgdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0ZVNob3VsZFVwZGF0
ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCiBzdGF0aWMgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFt
ZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQpAQCAtMjIzLDYgKzIzNyw3IEBAIHN0YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxM
YXllckZvckZyYW0KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcq
IGZyYW1lVmlldykKIHsKQEAgLTIzMiwxMCArMjQ3LDE5IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmZyYW1lVmlld1Jvb3QKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJh
bWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCisgICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNj
cm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVS
b290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJUKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworI2VuZGlmCisKICAgICBmcmFtZVZpZXdM
YXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7Ci0gICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJD
b3VudCgpOworICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25N
YWluVGhyZWFkKCk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXco
ZnJhbWVWaWV3KSk7CisgICAgCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICBz
ZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwg
c3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcq
IGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpAQCAtMjU0LDcgKzI3
OCwxMSBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFt
ZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7Cisg
ICAgaWYgKCFzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlTm9k
ZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+
aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0zMDAsOSArMzI4LDEwIEBAIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmEKICAgICBmcmFtZVZpZXctPnNldEluUHJvZ3Jh
bW1hdGljU2Nyb2xsKG9sZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAKKyNpZiBFTkFCTEUoVEhS
RUFERURfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZy
YW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKCFtX3Bh
Z2UpCkBAIC0zMTYsNiArMzQ1LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRl
TWFpbkZyYQogICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Ny
b2xsUG9zaXRpb24oKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRp
b24oKQogewpAQCAtMzU2LDE0ICszODYsMjIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
aGFuZGxlV2hlZWxFdgogfQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJl
Y29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcq
IGZyYW1lVmlldykKIHsKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIFNjcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFt
ZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdW5zaWduZWQg
d2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3Bh
Z2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5l
eHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICB3aGVl
bEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxl
ckNvdW50KCk7CiAgICAgfQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVu
dEhhbmRsZXJDb3VudCk7CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hl
ZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFt
ZVZpZXcpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc05vbkxh
eWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtNDE3LDM5ICs0NTUsODgg
QEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Rm9yY2VNYWluVAogfQogCiAjaWYgRU5B
QkxFKFRIUkVBREVEX1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNj
cm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQorU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZy
YW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQgPSBmcmFt
ZVZpZXctPnNjcm9sbExheWVySUQoKTsKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAg
IHJldHVybiAwOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsK
KyAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQtPnZhbHVlOworICAgIEFTU0VSVChu
b2RlLT5pc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICByZXR1cm4gdG9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUodWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAg
ICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0
YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7CisKKyAg
ICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5kIHRob3Nl
IGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgorICAgIC8vIFRoaXMgd2ls
bCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVuIGluIHRo
ZSB0cmVlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit7CisgICAgbV9z
dGF0ZU5vZGVNYXAuY2xlYXIoKTsKKyAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAgICAgICAg
bV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3
KiBmcmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGlu
Z05vZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoZXhpc3Rp
bmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRl
Tm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVhclN0YXRlVHJlZSgpOworCisgICAg
Ly8gQ3JlYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSBGcmFtZVZpZXcsIGFuZCBzZXQgaXQgYXMgdGhl
IHJvb3Qgbm9kZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5n
ZXQoKSkpOworCisgICAgLy8gTm93IGdldCBvciBzZXQgYW4gSUQgZm9yIHRoZSBiYWNraW5nLCBh
bmQgdGhlbiBhZGQgdGhlIGNvbWJpbmF0aW9uIHRvIHRoZSBIYXNoTWFwLgorICAgIHVpbnQ2NF90
IHJvb3RMYXllcklEID0gZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCk7CisgICAgQVNTRVJUKHJv
b3RMYXllcklEKTsKKyAgICBtX3N0YXRlTm9kZU1hcC5zZXQocm9vdExheWVySUQsIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIs
IFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+
cm9vdFN0YXRlTm9kZSgpLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgbm9kZS0+
c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0
KCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCiB7Ci0gICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9u
KTsKKyAgICBub2RlLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOwogICAgIHNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1l
dGVycykKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JO
b2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwg
dGhpcyBmdW5jdGlvbiBhbmQgYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFz
cyBuZWVkIHRvCi0gICAgLy8gaGFuZGxlIG1vcmUgdGhhbiBqdXN0IHRoZSByb290IG5vZGUuIAot
ICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxT
Y3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNp
dHkpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFz
RW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9y
aXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5v
ZGUoKS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFz
RW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJz
Lmhvcml6b250YWxTY3JvbGxiYXJNb2RlKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9v
dFN0YXRlTm9kZSgpLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52
ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2lu
KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWaWV3cG9y
dFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG1fc2Nyb2xsaW5nU3Rh
dGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJz
LmNvbnRlbnRzU2l6ZSk7CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHko
c2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+
c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBu
b2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNF
bmFibGVkVmVydGljYWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxi
YXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOworICAgIG5v
ZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Ny
b2xsYmFyTW9kZSk7CisKKyAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFyYW1ldGVy
cy5zY3JvbGxPcmlnaW4pOworICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0
ZXJzLnZpZXdwb3J0UmVjdCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFt
ZXRlcnMuY29udGVudHNTaXplKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQog
CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRI
YW5kbGVyQ291bnQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOworICAgIG5vZGUtPnNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CiAgICAgc2NoZWR1bGVUcmVlU3Rh
dGVDb21taXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2lm
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFk
aW5nLmg+CiAjZW5kaWYKQEAgLTUyLDYgKzUzLDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFJlZ2lv
bjsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2
YXRlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAjaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKQEAgLTEzNywxNSArMTQwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgSXNJ
bWFnZURvY3VtZW50ID0gMSA8PCA0CiAgICAgfTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbVN0YXRl
VHJlZSh1aW50NjRfdCk7CisgICAgdm9pZCBjbGVhclN0YXRlVHJlZSgpOworCiBwcml2YXRlOgog
ICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIAotICAgIHZvaWQgcmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRl
Tm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIHN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKworICAgIHZvaWQgcmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAg
ICBib29sIGhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyopOwogICAgIHZvaWQgdXBk
YXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogCiAgICAg
dm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXROb25GYXN0
U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKIAogICAgIHN0cnVjdCBTY3JvbGxQYXJh
bWV0ZXJzIHsKICAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3Rp
Y2l0eTsKQEAgLTE2Myw4ICsxNzEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgSW50U2l6ZSBjb250
ZW50c1NpemU7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgb25seSBieSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGlu
YXRvcgorICAgIC8vIG5vdyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zv
ck5vZGUoKSBhbmQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKS4KKyAgICAvLyBU
byByZXNvbHZlIHRoaXMgYW5kIGFsbCBvZiB0aGUgaWYtZGVmcyBpbiB0aGlzIGNsYXNzLCB3ZSBz
aG91bGQgbWFrZSBTY3JvbGxpbmdDb29yZGluYXRvcgorICAgIC8vIGp1c3QgYmUgYSB0eXBlZGVm
IHRoYXQgZGVmaW5lcyBTY3JvbGxpbmdDb29yZGluYXRvck1hYyB0byBiZSBTY3JvbGxpbmdDb29y
ZGluYXRvciwgYW5kIHNhbWUKKyAgICAvLyBmb3IgQ2hyb21pdW0gYW5kIG90aGVyIHBsYXRmb3Jt
cy4gQW55IHNoYXJlZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBpbiBzb21ldGhpbmcgY2FsbGVkIAor
ICAgIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmFzZSB3aGljaCBhbGwgb2YgdGhlIHBsYXRmb3Jt
IGltcGxlbWVudGF0aW9ucyB3aWxsIGluaGVyaXQgZnJvbS4KICAgICB2b2lkIHNldFNjcm9sbFBh
cmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVu
dEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CisKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQorICAgIHZvaWQgc2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqLCBTY3JvbGxp
bmdTdGF0ZU5vZGUqKTsKKyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9k
ZShjb25zdCBSZWdpb24mLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lk
IHNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmLCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyAgICB2b2lkIHNldFdoZWVsRXZlbnRIYW5kbGVy
Q291bnRGb3JOb2RlKHVuc2lnbmVkLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqKTsKKyNl
bmRpZgorCiAgICAgdm9pZCBzZXRTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWlu
VGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFzb25zKTsKIAogICAgIHZvaWQgdXBkYXRlTWFp
bkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpOwpAQCAtMTgyLDYgKzIwNCw4IEBAIHByaXZhdGU6
CiAgICAgT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gbV9zY3JvbGxpbmdTdGF0ZVRyZWU7CiAg
ICAgUmVmUHRyPFNjcm9sbGluZ1RyZWU+IG1fc2Nyb2xsaW5nVHJlZTsKICAgICBUaW1lcjxTY3Jv
bGxpbmdDb29yZGluYXRvcj4gbV9zY3JvbGxpbmdTdGF0ZVRyZWVDb21taXR0ZXJUaW1lcjsKKwor
ICAgIEhhc2hNYXA8dWludDY0X3QsIFNjcm9sbGluZ1N0YXRlTm9kZSo+IG1fc3RhdGVOb2RlTWFw
OwogI2VuZGlmCiAKICAgICBTY3JvbGxpbmdDb29yZGluYXRvclByaXZhdGUqIG1fcHJpdmF0ZTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
Tm9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsMzggKzU1LDQ3IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFNjcm9sbExheWUKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFz
dFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRo
cmVhZFNjcm9sbGluZ1JlYXNvbnMpCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCitib29sIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpzdXBwb3J0c0ZpeGVkUG9zaXRpb25MYXllcnMoKSBjb25zdAogewor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hl
ZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIq
LCBib29sKQogewogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTaG91bGRVcGRh
dGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKE1haW5UaHJlYWRTY3JvbGxpbmdSZWFz
b25zKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWlu
ZXJMYXllcihHcmFwaGljc0xheWVyKiwgYm9vbCkKIHsKIH0KIAotYm9vbCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c3VwcG9ydHNGaXhlZFBvc2l0aW9uTGF5ZXJzKCkgY29uc3QKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UoU2Nyb2xs
YWJsZUFyZWEqLCBHcmFwaGljc0xheWVyKikKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNDb250YWluZXJGb3JGaXhlZFBvc2l0
aW9uTGF5ZXJzKEdyYXBoaWNzTGF5ZXIqLCBib29sKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZGV0YWNoRnJvbVN0YXRlVHJlZSh1aW50NjRfdCkKIHsKIH0KIAotdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0TGF5ZXJJc0ZpeGVkVG9Db250YWluZXJMYXllcihHcmFwaGljc0xheWVy
KiwgYm9vbCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKIHsK
IH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2Nyb2xsYWJsZUFyZWFTY3JvbGxMYXll
ckRpZENoYW5nZShTY3JvbGxhYmxlQXJlYSosIEdyYXBoaWNzTGF5ZXIqKQordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcq
KQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJz
KGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQogewogfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQoreworfQorCiAjZW5kaWYg
Ly8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNp
b24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjEgQEAgdm9pZCBTY3JvbGxp
bmdTdGF0ZU5vZGU6OmFwcGVuZENoaWxkKFBhcwogICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGls
ZE5vZGUpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xs
aW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQobm9kZSkpIHsK
KyAgICAgICAgbV9jaGlsZHJlbi0+cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cmVt
b3ZlQ2hpbGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMwNjUzKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFNjcm9sbGluZ1N0YXRl
Tm9kZShTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5v
ZGUoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgp
IHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3Rh
dGVOb2RlPiBjbG9uZUFuZFJlc2V0Tm9kZSgpID0gMDsKICAgICB2b2lkIGNsb25lQW5kUmVzZXRD
aGlsZE5vZGVzKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkBAIC02NiwxMCArNjgsMTIgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0U2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZSog
dHJlZSkgeyBtX3Njcm9sbGluZ1N0YXRlVHJlZSA9IHRyZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0
YXRlTm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLQogICAgIHZvaWQg
c2V0UGFyZW50KFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50
OyB9CisKICAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2Rl
Pik7CiAKKyAgICB2b2lkIHJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiBwcm90
ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBSZXF1ZXN0ZWRTY3Jv
bGxQb3NpdGlvbiA9IDEgPDwgMTIsCiAgICAgfTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAg
IHZpcnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2Rl
KCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiAr
MTM2LDE1IEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiB9OwogCitp
bmxpbmUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8
IG5vZGUtPmlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpOworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKK30KKyAgICAKKy8v
IFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQg
dG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxp
bmdOb2RlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uv
c2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDggKzM2LDcgQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+
IFNjcm9sbGluZwogfQogCiBTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgp
Ci0gICAgOiBtX3Jvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVh
dGUodGhpcykpCi0gICAgLCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQorICAgIDogbV9o
YXNDaGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKIHsKIH0KIApAQCAtNTcsNiArNTYsMTggQEAgUGFz
c093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogICAgIHJldHVybiB0cmVlU3Rh
dGUucmVsZWFzZSgpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShT
Y3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7
CisKKyAgICBpZiAobm9kZSA9PSBtX3Jvb3RTdGF0ZU5vZGUpIHsKKyAgICAgICAgbV9yb290U3Rh
dGVOb2RlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdFN0YXRlTm9k
ZS0+cmVtb3ZlQ2hpbGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2Vu
ZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAkocmV2aXNpb24gMTMw
NjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE4ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgflNjcm9s
bGluZ1N0YXRlVHJlZSgpOwogCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290
U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgICAg
dm9pZCBzZXRSb290U3RhdGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlPiByb290U3RhdGVOb2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0K
IAogICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNo
YW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KICAgICBQYXNzT3duUHRyPFNj
cm9sbGluZ1N0YXRlVHJlZT4gY29tbWl0KCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xs
aW5nU3RhdGVOb2RlKik7CisKICAgICB2b2lkIHNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wg
Y2hhbmdlZFByb3BlcnRpZXMpIHsgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGNoYW5nZWRQcm9w
ZXJ0aWVzOyB9CiAgICAgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJu
IG1faGFzQ2hhbmdlZFByb3BlcnRpZXM7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0
ZVRyZWUoKTsKIAotICAgIHZvaWQgc2V0Um9vdFN0YXRlTm9kZShQYXNzT3duUHRyPFNjcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZT4gcm9vdFN0YXRlTm9kZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSBy
b290U3RhdGVOb2RlOyB9Ci0KICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
PiBtX3Jvb3RTdGF0ZU5vZGU7CiAgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJCYWNraW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBib29sIFJl
bmRlckxheWVyQmFja2luZzo6bV9jcmVhdGluZ1ByaW1hCiAKIFJlbmRlckxheWVyQmFja2luZzo6
UmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRlckxheWVyKiBsYXllcikKICAgICA6IG1fb3duaW5nTGF5
ZXIobGF5ZXIpCisgICAgLCBtX3Njcm9sbExheWVySUQoMCkKICAgICAsIG1fYXJ0aWZpY2lhbGx5
SW5mbGF0ZWRCb3VuZHMoZmFsc2UpCiAgICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVy
KGZhbHNlKQogICAgICwgbV91c2luZ1RpbGVkQ2FjaGVMYXllcihmYWxzZSkKQEAgLTEzOCw2ICsx
MzksNyBAQCBSZW5kZXJMYXllckJhY2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmcoCiAgICAgdXBk
YXRlRm9yZWdyb3VuZExheWVyKGZhbHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOwog
ICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVycyhmYWxzZSk7CisgICAgZGV0YWNoRnJvbVNjcm9sbGlu
Z0Nvb3JkaW5hdG9yKCk7CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTk2
Myw2ICs5NjUsMzYgQEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZwog
ICAgIHJldHVybiBsYXllckNoYW5nZWQ7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVNj
cm9sbExheWVySUQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVTY3JvbGxMYXllcklE
ID0gMTsKKyAgICByZXR1cm4gdW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOworfQorCit2b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcigpCit7CisgICAgaWYg
KCFtX3Njcm9sbExheWVySUQpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXJJRCA9IGdlbmVyYXRlU2Ny
b2xsTGF5ZXJJRCgpOworfQorCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNj
cm9sbGluZ0Nvb3JkaW5hdG9yKCkKK3sKKyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgaXMgMCwg
dGhlbiB0aGlzIGJhY2tpbmcgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBTY3JvbGxpbmdDb29yZGlu
YXRvci4KKyAgICBpZiAoIW1fc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
UGFnZSogcGFnZSA9IHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2Up
CisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3Jv
bGxpbmdDb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmRldGFjaEZyb21TdGF0ZVRyZWUobV9zY3JvbGxMYXllcklEKTsKKyAgICBtX3Njcm9s
bExheWVySUQgPSAwOworfQorCiBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBSZW5kZXJMYXll
ckJhY2tpbmc6OnBhaW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdAogewogICAgIHVu
c2lnbmVkIHBoYXNlID0gR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZDsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDEz
MDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTY3Jv
bGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXI7IH0KICAgICBHcmFw
aGljc0xheWVyKiBzY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5
ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdDb250ZW50c0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdldCgpOyB9CisKKyAgICB2
b2lkIGF0dGFjaFRvU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICB1aW50NjRfdCBzY3JvbGxM
YXllcklEKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxMYXllcklEOyB9CiAgICAgCiAgICAgYm9v
bCBoYXNNYXNrTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciAhPSAwOyB9CiAKQEAg
LTE5Myw2ICsxOTYsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxDb3JuZXJM
YXllcigpIGNvbnN0OwogICAgIGJvb2wgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgc2Nyb2xs
aW5nTGF5ZXJzKTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7
CisKICAgICBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFy
eUxheWVyKCkgY29uc3Q7CiAgICAgCiAgICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21wb3N0
aW5nTGF5ZXIoKSBjb25zdDsKQEAgLTI1Niw2ICsyNjEsOCBAQCBwcml2YXRlOgogICAgIE93blB0
cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbGluZ0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxh
eWVyIGlzIHVzaW5nIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgogICAgIE93blB0cjxHcmFwaGljc0xh
eWVyPiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIg
aXMgdXNpbmcgY29tcG9zaXRlZCBzY3JvbGxpbmcuCiAKKyAgICB1aW50NjRfdCBtX3Njcm9sbExh
eWVySUQ7CisKICAgICBJbnRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKIAogICAgIGJvb2wgbV9h
cnRpZmljaWFsbHlJbmZsYXRlZEJvdW5kczsgICAgICAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUg
bm9uLXplcm8gdG8gbWFrZSB0cmFuc2Zvcm0tb3JpZ2luIHdvcmsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lv
biAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3Np
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCwxMiBAQCBib29sIFJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFja2luCiAKICAgICAgICAgICAgIGxheWVyLT5lbnN1cmVC
YWNraW5nKCk7CiAKKyAgICAgICAgICAgIGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkgeworICAg
ICAgICAgICAgICAgIGxheWVyLT5iYWNraW5nKCktPmF0dGFjaFRvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IoKTsKKyAgICAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5n
ZShtX3JlbmRlclZpZXctPmZyYW1lVmlldygpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAg
ICAgLy8gVGhpcyBsYXllciBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBoYXZlIGNhY2hlZCBy
ZXBhaW50cyByZWN0cyB0aGF0IGFyZSByZWxhdGl2ZSB0bwogICAgICAgICAgICAgLy8gdGhlIHJl
cGFpbnQgY29udGFpbmVyLCBzbyBjaGFuZ2Ugd2hlbiBjb21wb3NpdGluZyBjaGFuZ2VzOyB3ZSBu
ZWVkIHRvIHVwZGF0ZSB0aGVtIGhlcmUuCiAgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgp
KQpAQCAtMjMwOCw5ICsyMzE0LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFj
aFJvb3RMYQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9y
KiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0g
ICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2Uo
bV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKSk7Ci0KICAgICBtX3Jvb3RMYXllckF0dGFjaG1lbnQg
PSBhdHRhY2htZW50OwogICAgIHJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2VkKCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="180287"
          type_id="3"
          status="-"
          setter="peter+ews"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167577</attachid>
            <date>2012-10-08 11:52:48 -0700</date>
            <delta_ts>2012-10-08 13:09:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-6.txt</filename>
            <type>text/plain</type>
            <size>35665</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtMTA2OSw5ICsxMDY5LDcgQEAKICNkZWZpbmUgRU5B
QkxFX1BMVUdJTl9QQUNLQUdFX1NJTVBMRV9IQVNIIDEKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
TUFDKSAmJiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVE
ID49IDEwODAKLSNkZWZpbmUgRU5BQkxFX1RIUkVBREVEX1NDUk9MTElORyAxCi0jZW5kaWYKKwog
CiAvKiBTZXQgdXAgYSBkZWZpbmUgZm9yIGEgY29tbW9uIGVycm9yIHRoYXQgaXMgaW50ZW5kZWQg
dG8gY2F1c2UgYSBidWlsZCBlcnJvciAtLSB0aHVzIHRoZSBzcGFjZSBhZnRlciBFcnJvci4gKi8K
ICNkZWZpbmUgV1RGX1BMQVRGT1JNX0NGTkVUV09SSyBFcnJvciBVU0VfbWFjcm9fc2hvdWxkX2Jl
X3VzZWRfd2l0aF9DRk5FVFdPUksKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDY1NykKKysr
IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBA
QAorMjAxMi0xMC0wOCAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNj
cm9sbGluZ1N0YXRlTm9kZXMgc2hvdWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAg
ICAgUmVuZGVyTGF5ZXJCYWNraW5nCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5v
ZGVzIHdpdGggYSAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJv
bSBSZW5kZXJMYXllckJhY2tpbmdzIHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9u
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yLiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAg
IHJvb3QgU2Nyb2xsaW5nU3RhdGVOb2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3Jl
YXRpb24gb2YgdGhlIAorICAgICAgICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBj
b25zdGFudGx5IHJlLXVzZWQgZm9yIGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhp
cyBkb2Vzbid0IHdvcmsgaW4gdGhlIG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAg
ICAgIGFsbG93IHRoYXQgU2Nyb2xsaW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3Nv
Y2lhdGlvbiB3aXRoIGEgCisgICAgICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRj
aCBkb2VzIGFsc28gaW50cm9kdWNlIHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2Vz
IHdpdGggdGhlIFNjcm9sbGluZ1N0YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdv
aW5nIGludG8gdGhlIHBhZ2UgY2FjaGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAg
ICAgIHRyZWUuIFdoZW4gdGhlIHBhZ2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFj
Y2VzcyB0byB0aGUgCisgICAgICAgIFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdh
bnQgdG8gYmUgZG9pbmcgYW55dGhpbmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRl
Tm9kZXMgYW55d2F5LgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlz
IHJlc3RvcmVkIGZyb20gdGhlIHBhZ2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZSgpIHRvIHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAg
KiBsb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9y
eUNvbnRyb2xsZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAg
ICAgVGhpcyBuZXcgRnJhbWVWaWV3IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXll
cklEIGZvciBhIGdpdmVuIEZyYW1lVmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmll
dyk6CisKKyAgICAgICAgVGhlcmUgaXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0
aCB0aGUgdGVycmlibGUgCisgICAgICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
IEkgYWRkZWQgYSBGSVhNRSB0byB0aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2Fu
IGF2b2lkIHRoaXMgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdDb29yZGluYXRvci5jcHA6CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRv
IHJlZmVyIHRvIHRoZSByb290U3RhdGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwg
bm93IGl0IGxvb2tzIHVwIHRoZSBwcm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2
ZW4gCisgICAgICAgIEZyYW1lVmlldyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3Um9vdExheWVyRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25G
b3JOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3Jv
bGxQYXJhbWV0ZXJzRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVy
bnMgdGhlIGV4aXN0aW5nIFNjcm9sbGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcg
YnkgCisgICAgICAgIGxvb2tpbmcgaXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJD
b3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAg
ICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3ll
ZC4gQXQgdGhhdCB0aW1lLCAKKyAgICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVO
b2RlIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpkZXRhY2hGcm9tU3RhdGVUcmVlKToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFy
cyB0aGUgSGFzaE1hcCBhbmQgZGVzdHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAg
dGhlIGN1cnJlbnQgc3RhdGUgdHJlZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjbGVhclN0YXRlVHJlZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0
YXRlIG5vZGUgZm9yIHRoZSBnaXZlbiBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAg
ICAgICAgU29tZSBuZXcgZnVuY3Rpb25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAg
ICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRp
b25Pbk1haW5UaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnN1cHBvcnRzRml4ZWRQb3NpdGlvbkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0TGF5ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhl
ZFRvQ29udGFpbmVyTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNjcm9sbGFibGVBcmVhU2Nyb2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJh
bWVWaWV3KToKKyAgICAgICAgKFdlYkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJl
bW92ZSBmdW5jdGlvbnMgYXJlIHVzZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5k
IHdoZW4gCisgICAgICAgIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAg
ICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nU3RhdGVOb2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUpOgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNjcm9sbGluZ1N0YXRlTm9kZTo6cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2Ug
ZnVuY3Rpb24gZm9yIGNhc3RpbmcgdG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAg
ICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OnRvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorCisgICAgICAgIE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJv
b3Qgbm9kZSB1cG9uIGNyZWF0aW9uIG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVl
LiBXZSBub3cgd2FudCB0byB3YWl0IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAg
ICAgICB3ZSBoYXZlIGEgUmVuZGVyTGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgor
ICAgICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUp
OgorICAgICAgICAoU2Nyb2xsaW5nU3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJh
Y2tpbmcgaGFzIGEgbmV3IGRhdGEgbWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAor
ICAgICAgICB0aGlzIFJlbmRlckxheWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Ny
b2xsaW5nIHRyZWUsIHRoZW4gCisgICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9u
LXplcm8uIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9T
Y3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tp
bmc6OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyQmFja2luZy5oOgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAg
ICAgICAgTW92ZSB0aGUgY2FsbCB0byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZSgpIAorICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6
YXR0YWNoUm9vdExheWVyKCkgdG8gCisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVw
ZGF0ZUJhY2tpbmcoKS4gVGhlIHByb2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNp
dGUgaXMgdGhhdCB0aGVyZSBpcyBubyBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRy
eWluZyB0byBzZXQgCisgICAgICAgIHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBu
b2RlIGJlZm9yZSB3ZSBoYXZlIGVub3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRl
IHRoYXQgbm9kZSBhbmQgYWRkIGl0IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxh
eWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKToKKwogMjAxMi0xMC0wOCAgTWlrZSBXZXN0
ICA8bWt3c3RAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE51bGwtY2hlY2sgZm9yIERPTVdpbmRv
dyBiZWZvcmUgZmVlZGluZyBpdCB0byBGZWF0dXJlT2JzZXJ2ZXIuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNTAsMTQgKzQwNTAsMTggQEAgdm9pZCBEb2N1
bWVudDo6c2V0SW5QYWdlQ2FjaGUoYm9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFn
OwogCiAgICAgRnJhbWVWaWV3KiB2ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5w
YWdlKCk7CisKICAgICBpZiAoZmxhZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJl
cik7CiAgICAgICAgIG1fc2F2ZWRSZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2
KSB7CiAgICAgICAgICAgICB2LT5jYWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAg
ICAgICAgaWYgKHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAg
ICAgICAgICBpZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAg
ICAgICAgICAgICAgdi0+cmVzZXRTY3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3Iq
IHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7
CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMo
KTsKICAgICAgICAgfQogICAgICAgICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAx
MzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBhZ2VDYWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9s
bGluZ0Nvb3JkaW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CiAKQEAgLTEyMyw4ICsxMjQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJv
bGxlcjo6cmVzdG9yZVNjcm9sbFBvcwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
cmVzdG9yZVZpZXdTdGF0ZSgpOwogICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2Zy
YW1lLT52aWV3KCkpIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAg
ICAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgeworICAgICAg
ICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBh
Z2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29v
cmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAgICAgfQor
CiAgICAgICAgIGlmICghdmlldy0+d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAgICAgICAg
UGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdlICYmIHBh
Z2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFj
dG9yKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fY3VycmVu
dEl0ZW0tPnBhZ2VTY2FsZUZhY3RvcigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsK
ICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlz
aW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgyLDYgKzc4MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmlldzo6dGls
ZWRCYWNraW5nKCkKICAgICByZXR1cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50aWxlZEJh
Y2tpbmcoKTsKIH0KIAordWludDY0X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QK
K3sKKyAgICBSZW5kZXJWaWV3KiByb290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAgIGlmICgh
cm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tp
bmcgPSByb290LT5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7Cit9CisK
ICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6Omxh
eWVyRm9yT3ZlcmhhbmdBcmVhcygpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmgJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVhbCBUaWxl
ZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhlIGZ1dHVy
ZSB3aGVuIGFueSBTY3JvbGxhYmxlQXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Nyb2xsaW5n
VHJlZSwgdGhpcyBzaG91bGQKKyAgICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9uIFNj
cm9sbGFibGVBcmVhLgorICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsKICNlbmRp
ZgogCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9y
LmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcg
QEAgc3RhdGljIFJlZ2lvbiBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZQogCiB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVW
aWV3KQogeworCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdl
KTsKIApAQCAtMTU3LDcgKzE1OCwxNCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdMYXlvCiAgICAgLy8gYWxsIHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVz
LCBvdmVyZmxvdyBkaXZzIGFuZCBsaXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBp
ZiB0aGUKICAgICAvLyBmcmFtZSB2aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3Qg
dGhlIG1haW4gZnJhbWUuCiAgICAgUmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29t
cHV0ZU5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50
KCkpOworCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICAvLyBJbiB0aGUgZnV0
dXJlLCB3ZSBtYXkgd2FudCB0byBoYXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3Jv
bGxpbmcgcmVnaW9ucyBmb3IgbW9yZSB0aGFuCisgICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBC
dXQgcmlnaHQgbm93LCB0aGlzIGNvbmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgorICAg
IHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
biwgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisjZWxzZQogICAgIHNl
dE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKKyNlbmRp
ZgogCiAgICAgaWYgKCFjb29yZGluYXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcp
KQogICAgICAgICByZXR1cm47CkBAIC0xNzQsMTUgKzE4MiwyMyBAQCB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvCiAgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJl
Y3QgPSBJbnRSZWN0KEludFBvaW50KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCku
c2l6ZSgpKTsKICAgICBzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+
Y29udGVudHNTaXplKCk7CiAKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1lVmlldyhm
cmFtZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2Ny
b2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywgbm9kZSk7CisjZWxzZQogICAg
IHNldFNjcm9sbFBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1ldGVycyk7CisjZW5kaWYKIH0KIAotdm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxFdmVudEhhbmRsZXJDb3VudENo
YW5nZWQoRnJhbWVWaWV3KikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1do
ZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZWNv
bXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgcmVjb21wdXRlV2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdIYXNTbG93UmVwYWludE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVW
aWV3KiBmcmFtZVZpZXcpCkBAIC0yMDcsNiArMjIzLDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9z
aXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
CiBzdGF0aWMgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3
KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMjIz
LDYgKzI0MCw3IEBAIHN0YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW0KICAg
ICByZXR1cm4gMDsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsK
QEAgLTIzMiwxMCArMjUwLDE5IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmll
d1Jvb3QKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmll
dykpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisg
ICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9k
ZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9y
RnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpOworI2VuZGlmCisKICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZy
YW1lVmlldyk7Ci0gICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHJl
Y29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAg
ICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0g
ICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7Cisg
ICAgCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICBzZXRTY3JvbGxMYXllckZv
ck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9yRnJh
bWVWaWV3KGZyYW1lVmlldykpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnJlcXVlc3RTY3JvbGxQb3NpdGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29u
c3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKQpAQCAtMjU0LDcgKzI4MSwxMSBAQCBib29sIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJl
cXVlc3RlZFNjcm9sbFBvc2l0aW9uKHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3Jh
bW1hdGljU2Nyb2xsKCkpOworICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVO
b2RlID0gc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFzdGF0ZU5v
ZGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVk
U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNT
Y3JvbGwoKSk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKICAgICByZXR1cm4gdHJ1
ZTsKICNlbHNlCkBAIC0zMDAsOSArMzMxLDEwIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnVwZGF0ZU1haW5GcmEKICAgICBmcmFtZVZpZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9s
ZFByb2dyYW1tYXRpY1Njcm9sbCk7CiB9CiAKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5H
KQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQ
b3NpdGlvbigpCiB7Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUo
VEhSRUFERURfU0NST0xMSU5HKQorI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAg
ICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCiAgICAgaWYgKCFtX3BhZ2UpCkBAIC0zMTYsNiAr
MzQ4LDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYQogICAgICAg
ICBzY3JvbGxMYXllci0+c2V0UG9zaXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7
CiAjZW5kaWYKIH0KKyNlbmRpZgogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVN
YWluRnJhbWVTY3JvbGxQb3NpdGlvbkFuZFNjcm9sbExheWVyUG9zaXRpb24oKQogewpAQCAtMzU2
LDE0ICszODksMjIgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgog
fQogI2VuZGlmCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hl
ZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsK
KyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRs
ZXJDb3VudCA9IDA7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAg
ICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNv
dW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAg
fQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7
CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hlZWxFdmVudEhhbmRsZXJD
b3VudCwgbm9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcpOworI2VuZGlm
CiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3Rz
KEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtNDE3LDM5ICs0NTgsODggQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0Rm9yY2VNYWluVAogfQogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1ND
Uk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBo
aWNzTGF5ZXIqIHNjcm9sbExheWVyKQorU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVW
aWV3KQoreworICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQgPSBmcmFtZVZpZXctPnNjcm9sbExh
eWVySUQoKTsKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoaXQgPT0g
bV9zdGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgU2Nyb2xsaW5n
U3RhdGVOb2RlKiBub2RlID0gaXQtPnZhbHVlOworICAgIEFTU0VSVChub2RlLT5pc1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSgpKTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZy
b21TdGF0ZVRyZWUodWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExh
eWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9
IG1fc3RhdGVOb2RlTWFwLnRha2Uoc2Nyb2xsTGF5ZXJJRCk7CisKKyAgICAvLyBGSVhNRTogcmVt
b3ZlTm9kZSgpIHdpbGwgZGVzdHJveSBjaGlsZHJlbiwgYW5kIHRob3NlIGNoaWxkcmVuIG1pZ2h0
IHN0aWxsIGJlIGluIHRoZSBIYXNoTWFwLgorICAgIC8vIFRoaXMgd2lsbCBiZSBhIGJpZyBwcm9i
bGVtIG9uY2UgdGhlcmUgYXJlIGFjdHVhbGx5IGNoaWxkcmVuIGluIHRoZSB0cmVlLgorICAgIG1f
c2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit7CisgICAgbV9zdGF0ZU5vZGVNYXAuY2xl
YXIoKTsKKyAgICBpZiAoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OmVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7
CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5v
ZGVGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0
aW5nTm9kZSA9PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjbGVhclN0YXRlVHJlZSgpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3
IG5vZGUgZm9yIHRoZSBGcmFtZVZpZXcsIGFuZCBzZXQgaXQgYXMgdGhlIHJvb3Qgbm9kZS4KKyAg
ICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGU6OmNyZWF0ZShtX3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOworCisgICAg
Ly8gTm93IGdldCBvciBzZXQgYW4gSUQgZm9yIHRoZSBiYWNraW5nLCBhbmQgdGhlbiBhZGQgdGhl
IGNvbWJpbmF0aW9uIHRvIHRoZSBIYXNoTWFwLgorICAgIHVpbnQ2NF90IHJvb3RMYXllcklEID0g
ZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCk7CisgICAgQVNTRVJUKHJvb3RMYXllcklEKTsKKyAg
ICBtX3N0YXRlTm9kZU1hcC5zZXQocm9vdExheWVySUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCkpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3Jv
bGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRl
Tm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
LT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIo
c2Nyb2xsTGF5ZXIpOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJl
Z2lvbiYgcmVnaW9uKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUqIG5vZGUpCiB7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0
ZU5vZGUoKS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKKyAgICBub2RlLT5z
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOwogICAgIHNjaGVkdWxlVHJlZVN0YXRl
Q29tbWl0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFt
ZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycykKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9s
bFBhcmFtZXRlcnMmIHNjcm9sbFBhcmFtZXRlcnMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9k
ZSogbm9kZSkKIHsKLSAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiBh
bmQgYWxsIG9mIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBjbGFzcyBuZWVkIHRvCi0gICAg
Ly8gaGFuZGxlIG1vcmUgdGhhbiBqdXN0IHRoZSByb290IG5vZGUuIAotICAgIG1fc2Nyb2xsaW5n
U3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5
KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG1fc2Ny
b2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3Rp
Y2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbV9z
Y3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZEhvcml6b250
YWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJh
cik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5h
YmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2Fs
U2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRIb3Jpem9udGFsU2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJh
ck1vZGUpOwotCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0
U2Nyb2xsT3JpZ2luKHNjcm9sbFBhcmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFy
YW1ldGVycy52aWV3cG9ydFJlY3QpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCktPnNldENvbnRlbnRzU2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7
CisgICAgbm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVy
cy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3Jv
bGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsK
KyAgICBub2RlLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0
ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIYXNFbmFi
bGVkVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxT
Y3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBh
cmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOworICAgIG5vZGUtPnNldFZlcnRpY2Fs
U2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CisK
KyAgICBub2RlLT5zZXRTY3JvbGxPcmlnaW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4p
OworICAgIG5vZGUtPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVj
dCk7CisgICAgbm9kZS0+c2V0Q29udGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNT
aXplKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCiAKLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxF
dmVudEhhbmRsZXJDb3VudCkKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZl
bnRIYW5kbGVyQ291bnRGb3JOb2RlKHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZl
bnRIYW5kbGVyQ291bnQpOworICAgIG5vZGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hl
ZWxFdmVudEhhbmRsZXJDb3VudCk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0K
IApJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdDb29yZGluYXRvci5oCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogI2lmIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjZW5kaWYK
QEAgLTUyLDYgKzUzLDggQEAgY2xhc3MgUGFnZTsKIGNsYXNzIFJlZ2lvbjsKIGNsYXNzIFNjcm9s
bGFibGVBcmVhOwogY2xhc3MgU2Nyb2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOworY2xhc3MgU2Ny
b2xsaW5nU3RhdGVOb2RlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xh
c3MgU2Nyb2xsaW5nU3RhdGVUcmVlOwogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykK
QEAgLTEzNywxNSArMTQwLDIwIEBAIHB1YmxpYzoKICAgICAgICAgSXNJbWFnZURvY3VtZW50ID0g
MSA8PCA0CiAgICAgfTsKIAorICAgIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZSh1aW50NjRfdCk7
CisgICAgdm9pZCBjbGVhclN0YXRlVHJlZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNj
cm9sbGluZ0Nvb3JkaW5hdG9yKFBhZ2UqKTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpOworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmll
dyhGcmFtZVZpZXcqKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9k
ZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxh
eWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRl
U2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZCgpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxM
YXllcihHcmFwaGljc0xheWVyKik7Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bihjb25zdCBSZWdpb24mKTsKIAogICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKICAgICAg
ICAgU2Nyb2xsRWxhc3RpY2l0eSBob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKQEAgLTE2Myw4
ICsxNzEsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAg
fTsKIAorICAgIC8vIEZJWE1FOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgorICAgIC8vIG5v
dyB1c2VzIG5ldyB2ZXJzaW9uczogc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSBhbmQgc2V0
V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUoKS4KKyAgICAvLyBUbyByZXNvbHZlIHRoaXMg
YW5kIGFsbCBvZiB0aGUgaWYtZGVmcyBpbiB0aGlzIGNsYXNzLCB3ZSBzaG91bGQgbWFrZSBTY3Jv
bGxpbmdDb29yZGluYXRvcgorICAgIC8vIGp1c3QgYmUgYSB0eXBlZGVmIHRoYXQgZGVmaW5lcyBT
Y3JvbGxpbmdDb29yZGluYXRvck1hYyB0byBiZSBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIHNh
bWUKKyAgICAvLyBmb3IgQ2hyb21pdW0gYW5kIG90aGVyIHBsYXRmb3Jtcy4gQW55IHNoYXJlZCBm
dW5jdGlvbmFsaXR5IGNhbiBiZSBpbiBzb21ldGhpbmcgY2FsbGVkIAorICAgIC8vIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yQmFzZSB3aGljaCBhbGwgb2YgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9u
cyB3aWxsIGluaGVyaXQgZnJvbS4KICAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3Qg
U2Nyb2xsUGFyYW1ldGVycyYpOwogICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1
bnNpZ25lZCk7CisgICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdp
b24mKTsKKworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRTY3Jv
bGxMYXllckZvck5vZGUoR3JhcGhpY3NMYXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAg
IHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNj
cm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVy
c0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOworICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWdu
ZWQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworI2VuZGlmCisKICAgICB2b2lkIHNl
dFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNj
cm9sbGluZ1JlYXNvbnMpOwogCiAgICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBv
c2l0aW9uKCk7CkBAIC0xODIsNiArMjA1LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8U2Nyb2xs
aW5nU3RhdGVUcmVlPiBtX3Njcm9sbGluZ1N0YXRlVHJlZTsKICAgICBSZWZQdHI8U2Nyb2xsaW5n
VHJlZT4gbV9zY3JvbGxpbmdUcmVlOwogICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBt
X3Njcm9sbGluZ1N0YXRlVHJlZUNvbW1pdHRlclRpbWVyOworCisgICAgSGFzaE1hcDx1aW50NjRf
dCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj4gbV9zdGF0ZU5vZGVNYXA7CiAjZW5kaWYKIAogICAgIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5v
bmUuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCAr
NTksNiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2NyCiB7CiB9CiAK
LXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Ny
b2xsUGFyYW1ldGVycyYpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpCi17Ci19Ci0KIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQo
TWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpCiB7CiB9CkBAIC04Nyw2ICs3OSwyNyBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4CiB2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVh
KiwgR3JhcGhpY3NMYXllciopCiB7CiB9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRl
dGFjaEZyb21TdGF0ZVRyZWUodWludDY0X3QpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQoreworfQorCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9s
bFBhcmFtZXRlcnMmKQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQoreworfQorCiAjZW5kaWYgLy8gIUVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24gMTMwNjUzKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjEgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6
OmFwcGVuZENoaWxkKFBhcwogICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZE5vZGUpOwogfQog
Cit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2Rl
KiBub2RlKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQobm9kZSkpIHsKKyAgICAgICAgbV9j
aGlsZHJlbi0+cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNp
emVfdCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cmVtb3ZlQ2hpbGQobm9k
ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxp
bmdTdGF0ZVRyZWUqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKIAorICAg
IHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZh
bHNlOyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9u
ZUFuZFJlc2V0Tm9kZSgpID0gMDsKICAgICB2b2lkIGNsb25lQW5kUmVzZXRDaGlsZE5vZGVzKFNj
cm9sbGluZ1N0YXRlTm9kZSopOwogCkBAIC02NiwxMCArNjgsMTIgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0U2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkgeyBtX3Nj
cm9sbGluZ1N0YXRlVHJlZSA9IHRyZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogcGFy
ZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLQogICAgIHZvaWQgc2V0UGFyZW50KFNj
cm9sbGluZ1N0YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKICAgICB2
b2lkIGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CiAKKyAgICB2
b2lkIHJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiBwcm90ZWN0ZWQ6CiAgICAg
U2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNj
cm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiA9
IDEgPDwgMTIsCiAgICAgfTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgUGFz
c093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkgT1ZFUlJJREU7
CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiArMTM2LDE1IEBAIHBy
aXZhdGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiB9OwogCitpbmxpbmUgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKK30KKyAgICAKKy8vIFRoaXMgd2lsbCBj
YXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9TY3JvbGxpbmdT
dGF0ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0
ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Nj
cm9sbGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDggKzM2LDcgQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwog
fQogCiBTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgpCi0gICAgOiBtX3Jv
b3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcykpCi0g
ICAgLCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQorICAgIDogbV9oYXNDaGFuZ2VkUHJv
cGVydGllcyhmYWxzZSkKIHsKIH0KIApAQCAtNTcsNiArNTYsMTggQEAgUGFzc093blB0cjxTY3Jv
bGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgp
OwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShTY3JvbGxpbmdTdGF0
ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7CisKKyAgICBpZiAo
bm9kZSA9PSBtX3Jvb3RTdGF0ZU5vZGUpIHsKKyAgICAgICAgbV9yb290U3RhdGVOb2RlID0gMDsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdFN0YXRlTm9kZS0+cmVtb3ZlQ2hp
bGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291
cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDE4ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgflNjcm9sbGluZ1N0YXRlVHJl
ZSgpOwogCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290
U3RhdGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290U3Rh
dGVOb2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KIAogICAgIC8vIENv
cGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVy
dGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KICAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRl
VHJlZT4gY29tbWl0KCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2Rl
Kik7CisKICAgICB2b2lkIHNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wgY2hhbmdlZFByb3Bl
cnRpZXMpIHsgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGNoYW5nZWRQcm9wZXJ0aWVzOyB9CiAg
ICAgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hhbmdl
ZFByb3BlcnRpZXM7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAot
ICAgIHZvaWQgc2V0Um9vdFN0YXRlTm9kZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZT4gcm9vdFN0YXRlTm9kZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2Rl
OyB9Ci0KICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0
ZU5vZGU7CiAgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lv
biAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBib29sIFJlbmRlckxheWVyQmFj
a2luZzo6bV9jcmVhdGluZ1ByaW1hCiAKIFJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJC
YWNraW5nKFJlbmRlckxheWVyKiBsYXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIobGF5ZXIpCisg
ICAgLCBtX3Njcm9sbExheWVySUQoMCkKICAgICAsIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3Vu
ZHMoZmFsc2UpCiAgICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKGZhbHNlKQogICAg
ICwgbV91c2luZ1RpbGVkQ2FjaGVMYXllcihmYWxzZSkKQEAgLTEzOCw2ICsxMzksNyBAQCBSZW5k
ZXJMYXllckJhY2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmcoCiAgICAgdXBkYXRlRm9yZWdyb3Vu
ZExheWVyKGZhbHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZVNj
cm9sbGluZ0xheWVycyhmYWxzZSk7CisgICAgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9y
KCk7CiAgICAgZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTk2Myw2ICs5NjUsMzYg
QEAgYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZwogICAgIHJldHVybiBs
YXllckNoYW5nZWQ7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVNjcm9sbExheWVySUQo
KQoreworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlxdWVTY3JvbGxMYXllcklEID0gMTsKKyAgICBy
ZXR1cm4gdW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOworfQorCit2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcigpCit7CisgICAgaWYgKCFtX3Njcm9sbExh
eWVySUQpCisgICAgICAgIG1fc2Nyb2xsTGF5ZXJJRCA9IGdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCgp
OworfQorCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkKK3sKKyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgaXMgMCwgdGhlbiB0aGlzIGJh
Y2tpbmcgaXMgbm90IGF0dGFjaGVkIHRvIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBp
ZiAoIW1fc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9
IHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJl
dHVybjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxpbmdDb29yZGlu
YXRvcikKKyAgICAgICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmRldGFj
aEZyb21TdGF0ZVRyZWUobV9zY3JvbGxMYXllcklEKTsKKyAgICBtX3Njcm9sbExheWVySUQgPSAw
OworfQorCiBHcmFwaGljc0xheWVyUGFpbnRpbmdQaGFzZSBSZW5kZXJMYXllckJhY2tpbmc6OnBh
aW50aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdAogewogICAgIHVuc2lnbmVkIHBoYXNl
ID0gR3JhcGhpY3NMYXllclBhaW50QmFja2dyb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDEzMDY1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtODcsNiArODcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTY3JvbGxpbmdMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXI7IH0KICAgICBHcmFwaGljc0xheWVyKiBz
Y3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCk7IH0K
ICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIGF0dGFjaFRv
U2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICB1aW50NjRfdCBzY3JvbGxMYXllcklEKCkgY29u
c3QgeyByZXR1cm4gbV9zY3JvbGxMYXllcklEOyB9CiAgICAgCiAgICAgYm9vbCBoYXNNYXNrTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX21hc2tMYXllciAhPSAwOyB9CiAKQEAgLTE5Myw2ICsxOTYs
OCBAQCBwcml2YXRlOgogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0
OwogICAgIGJvb2wgdXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgc2Nyb2xsaW5nTGF5ZXJzKTsK
IAorICAgIHZvaWQgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKICAgICBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29u
c3Q7CiAgICAgCiAgICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBj
b25zdDsKQEAgLTI1Niw2ICsyNjEsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xh
eWVyPiBtX3Njcm9sbGluZ0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlzIHVzaW5n
IGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9s
bGluZ0NvbnRlbnRzTGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgdXNpbmcgY29t
cG9zaXRlZCBzY3JvbGxpbmcuCiAKKyAgICB1aW50NjRfdCBtX3Njcm9sbExheWVySUQ7CisKICAg
ICBJbnRSZWN0IG1fY29tcG9zaXRlZEJvdW5kczsKIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJ
bmZsYXRlZEJvdW5kczsgICAgICAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXplcm8gdG8g
bWFrZSB0cmFuc2Zvcm0tb3JpZ2luIHdvcmsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCwxMiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6dXBkYXRlQmFja2luCiAKICAgICAgICAgICAgIGxheWVyLT5lbnN1cmVCYWNraW5nKCk7CiAK
KyAgICAgICAgICAgIGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkgeworICAgICAgICAgICAgICAg
IGxheWVyLT5iYWNraW5nKCktPmF0dGFjaFRvU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gdGhpcy0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZp
ZXctPmZyYW1lVmlldygpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVGhpcyBs
YXllciBhbmQgYWxsIG9mIGl0cyBkZXNjZW5kYW50cyBoYXZlIGNhY2hlZCByZXBhaW50cyByZWN0
cyB0aGF0IGFyZSByZWxhdGl2ZSB0bwogICAgICAgICAgICAgLy8gdGhlIHJlcGFpbnQgY29udGFp
bmVyLCBzbyBjaGFuZ2Ugd2hlbiBjb21wb3NpdGluZyBjaGFuZ2VzOyB3ZSBuZWVkIHRvIHVwZGF0
ZSB0aGVtIGhlcmUuCiAgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKQpAQCAtMjMwOCw5
ICsyMzE0LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYQogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdD
b29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9s
bGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3
LT5mcmFtZVZpZXcoKSk7Ci0KICAgICBtX3Jvb3RMYXllckF0dGFjaG1lbnQgPSBhdHRhY2htZW50
OwogICAgIHJvb3RMYXllckF0dGFjaG1lbnRDaGFuZ2VkKCk7CiB9Cg==
</data>
<flag name="commit-queue"
          id="180313"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167592</attachid>
            <date>2012-10-08 13:09:07 -0700</date>
            <delta_ts>2012-10-08 14:58:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-7.txt</filename>
            <type>text/plain</type>
            <size>35710</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wOCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE51bGwtY2hlY2sgZm9yIERPTVdpbmRvdyBiZWZvcmUgZmVlZGluZyBpdCB0
byBGZWF0dXJlT2JzZXJ2ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNTAsMTQgKzQwNTAsMTggQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUo
Ym9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFnOwogCiAgICAgRnJhbWVWaWV3KiB2
ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisKICAgICBpZiAoZmxh
ZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7CiAgICAgICAgIG1fc2F2ZWRS
ZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICB2LT5j
YWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKHBhZ2UoKSAmJiBw
YWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAgICBpZiAocGFnZSAmJiBw
YWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAgICAgICAgICAgICAgdi0+cmVzZXRT
Y3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAg
LTEyMyw4ICsxMjQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZVNjcm9sbFBv
cwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZpZXdTdGF0ZSgpOwog
ICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKKyAgICAg
ICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgcGFn
ZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgeworICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghdmlldy0+
d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUt
PnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1f
ZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpCiAgICAgICAgICAgICAg
ICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fY3VycmVudEl0ZW0tPnBhZ2VTY2FsZUZhY3Rv
cigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsKICAgICAgICAgICAgIGVsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDYgKzc4
MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmlldzo6dGlsZWRCYWNraW5nKCkKICAgICByZXR1
cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50aWxlZEJhY2tpbmcoKTsKIH0KIAordWludDY0
X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiBy
b290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByb290LT5sYXllcigpLT5i
YWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7Cit9CisKICNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6OmxheWVyRm9yT3ZlcmhhbmdBcmVhcygp
IGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMDY1MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3aGVuIGFueSBTY3JvbGxhYmxl
QXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Nyb2xsaW5nVHJlZSwgdGhpcyBzaG91bGQKKyAg
ICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9uIFNjcm9sbGFibGVBcmVhLgorICAgIHVp
bnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBoYXNDb21w
b3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMwNjUz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNiArMTUwLDcgQEAgc3RhdGljIFJlZ2lvbiBjb21w
dXRlTm9uRmFzdFNjcm9sbGFibGVSZQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFt
ZVZpZXdMYXlvdXRVcGRhdGVkKEZyYW1lVmlldyogZnJhbWVWaWV3KQogeworCiAgICAgQVNTRVJU
KGlzTWFpblRocmVhZCgpKTsKICAgICBBU1NFUlQobV9wYWdlKTsKIApAQCAtMTU3LDcgKzE1OCwx
NCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdMYXlvCiAgICAgLy8gYWxs
IHNjcm9sbGFibGUgYXJlYXMsIHN1Y2ggYXMgc3ViZnJhbWVzLCBvdmVyZmxvdyBkaXZzIGFuZCBs
aXN0IGJveGVzLiBXZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiBpZiB0aGUKICAgICAvLyBmcmFtZSB2
aWV3IHdob3NlIGxheW91dCB3YXMgdXBkYXRlZCBpcyBub3QgdGhlIG1haW4gZnJhbWUuCiAgICAg
UmVnaW9uIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uID0gY29tcHV0ZU5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKG1fcGFnZS0+bWFpbkZyYW1lKCksIEludFBvaW50KCkpOworCisjaWYgRU5BQkxFKFRI
UkVBREVEX1NDUk9MTElORykKKyAgICAvLyBJbiB0aGUgZnV0dXJlLCB3ZSBtYXkgd2FudCB0byBo
YXZlIHRoZSBhYmlsaXR5IHRvIHNldCBub24tZmFzdCBzY3JvbGxpbmcgcmVnaW9ucyBmb3IgbW9y
ZSB0aGFuCisgICAgLy8ganVzdCB0aGUgcm9vdCBub2RlLiBCdXQgcmlnaHQgbm93LCB0aGlzIGNv
bmNlcHQgb25seSBhcHBsaWVzIHRvIHRoZSByb290LgorICAgIHNldE5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uRm9yTm9kZShub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiwgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKSk7CisjZWxzZQogICAgIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVn
aW9uKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKTsKKyNlbmRpZgogCiAgICAgaWYgKCFjb29yZGlu
YXRlc1Njcm9sbGluZ0ZvckZyYW1lVmlldyhmcmFtZVZpZXcpKQogICAgICAgICByZXR1cm47CkBA
IC0xNzQsMTUgKzE4MiwyMyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdM
YXlvCiAgICAgc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3QgPSBJbnRSZWN0KEludFBvaW50
KCksIGZyYW1lVmlldy0+dmlzaWJsZUNvbnRlbnRSZWN0KCkuc2l6ZSgpKTsKICAgICBzY3JvbGxQ
YXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSA9IGZyYW1lVmlldy0+Y29udGVudHNTaXplKCk7CiAKKyNp
ZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSogbm9kZSA9IHN0YXRlTm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUo
c2Nyb2xsUGFyYW1ldGVycywgbm9kZSk7CisjZWxzZQogICAgIHNldFNjcm9sbFBhcmFtZXRlcnMo
c2Nyb2xsUGFyYW1ldGVycyk7CisjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6ZnJhbWVWaWV3V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KikKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRD
aGFuZ2VkKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KCk7CisgICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmll
dyhmcmFtZVZpZXcpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdI
YXNTbG93UmVwYWludE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0y
MDcsNiArMjIzLDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZQog
ICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsK
IH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0aWMgR3JhcGhpY3NMYXll
ciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMjIzLDYgKzI0MCw3IEBAIHN0YXRpYyBH
cmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW0KICAgICByZXR1cm4gMDsKICNlbmRpZgog
fQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXll
ckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKQEAgLTIzMiwxMCArMjUwLDE5IEBA
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3QKICAgICBpZiAoIWNvb3Jk
aW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsK
IAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgLy8gSWYgdGhlIHJvb3QgbGF5
ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3Jl
YXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7
CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworI2Vu
ZGlmCisKICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7Ci0gICAgcmVjb21w
dXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5k
bGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVT
Y3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Ny
b2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgCisjaWYgRU5BQkxFKFRIUkVB
REVEX1NDUk9MTElORykKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpOwor
I2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlcXVlc3RTY3JvbGxQb3Np
dGlvblVwZGF0ZShGcmFtZVZpZXcqIGZyYW1lVmlldywgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBv
c2l0aW9uKQpAQCAtMjU0LDcgKzI4MSwxMSBAQCBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpy
ZXF1ZXN0U2Nyb2xsCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFJlcXVlc3RlZFNjcm9sbFBvc2l0aW9u
KHNjcm9sbFBvc2l0aW9uLCBmcmFtZVZpZXctPmluUHJvZ3JhbW1hdGljU2Nyb2xsKCkpOworICAg
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogc3RhdGVOb2RlID0gc3RhdGVOb2RlRm9yRnJh
bWVWaWV3KGZyYW1lVmlldyk7CisgICAgaWYgKCFzdGF0ZU5vZGUpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN0YXRlTm9kZS0+c2V0UmVxdWVzdGVkU2Nyb2xsUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24sIGZyYW1lVmlldy0+aW5Qcm9ncmFtbWF0aWNTY3JvbGwoKSk7CiAgICAgc2NoZWR1
bGVUcmVlU3RhdGVDb21taXQoKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCkBAIC0zMDAsOSAr
MzMxLDEwIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmEKICAgICBm
cmFtZVZpZXctPnNldEluUHJvZ3JhbW1hdGljU2Nyb2xsKG9sZFByb2dyYW1tYXRpY1Njcm9sbCk7
CiB9CiAKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQogdm9pZCBTY3JvbGxpbmdDb29y
ZGluYXRvcjo6dXBkYXRlTWFpbkZyYW1lU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7Ci0jaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQor
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBBU1NFUlQoaXNNYWluVGhyZWFk
KCkpOwogCiAgICAgaWYgKCFtX3BhZ2UpCkBAIC0zMTYsNiArMzQ4LDcgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYQogICAgICAgICBzY3JvbGxMYXllci0+c2V0UG9z
aXRpb24oLWZyYW1lVmlldy0+c2Nyb2xsUG9zaXRpb24oKSk7CiAjZW5kaWYKIH0KKyNlbmRpZgog
CiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxQb3NpdGlv
bkFuZFNjcm9sbExheWVyUG9zaXRpb24oKQogewpAQCAtMzU2LDE0ICszODksMjIgQEAgdm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6aGFuZGxlV2hlZWxFdgogfQogI2VuZGlmCiAKLXZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnQoKQordm9p
ZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKKyNpZiBFTkFCTEUoVEhSRUFERURf
U0NST0xMSU5HKQorICAgIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IHN0YXRl
Tm9kZUZvckZyYW1lVmlldyhmcmFtZVZpZXcpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0
dXJuOworCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50
KCkpCiAgICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVu
dCgpLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQotICAgIHNldFdoZWVsRXZlbnRI
YW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgc2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUod2hlZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVWaWV3
KQpAQCAtNDE3LDM5ICs0NTgsODggQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Rm9y
Y2VNYWluVAogfQogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLXZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVy
KQorU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3Rh
dGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIHVpbnQ2NF90
IHNjcm9sbExheWVySUQgPSBmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKTsKKyAgICBpZiAoIXNj
cm9sbExheWVySUQpCisgICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwg
U2Nyb2xsaW5nU3RhdGVOb2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAu
ZmluZChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkp
CisgICAgICAgIHJldHVybiAwOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQt
PnZhbHVlOworICAgIEFTU0VSVChub2RlLT5pc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgp
KTsKKyAgICByZXR1cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisK
K3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUodWludDY0X3Qg
c2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJldHVy
bjsKKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IG1fc3RhdGVOb2RlTWFwLnRha2Uo
c2Nyb2xsTGF5ZXJJRCk7CisKKyAgICAvLyBGSVhNRTogcmVtb3ZlTm9kZSgpIHdpbGwgZGVzdHJv
eSBjaGlsZHJlbiwgYW5kIHRob3NlIGNoaWxkcmVuIG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBIYXNo
TWFwLgorICAgIC8vIFRoaXMgd2lsbCBiZSBhIGJpZyBwcm9ibGVtIG9uY2UgdGhlcmUgYXJlIGFj
dHVhbGx5IGNoaWxkcmVuIGluIHRoZSB0cmVlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
ZW1vdmVOb2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0
YXRlVHJlZSgpCit7CisgICAgbV9zdGF0ZU5vZGVNYXAuY2xlYXIoKTsKKyAgICBpZiAoU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKSkKKyAgICAgICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9k
ZSk7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmVuc3VyZVJvb3RTdGF0ZU5vZGVG
b3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCit7CisgICAgU2Nyb2xsaW5nU3RhdGVT
Y3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JGcmFtZVZpZXcoZnJhbWVW
aWV3KTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjbGVh
clN0YXRlVHJlZSgpOworCisgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgZm9yIHRoZSBGcmFtZVZp
ZXcsIGFuZCBzZXQgaXQgYXMgdGhlIHJvb3Qgbm9kZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+c2V0Um9vdFN0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGU6OmNyZWF0ZSht
X3Njcm9sbGluZ1N0YXRlVHJlZS5nZXQoKSkpOworCisgICAgLy8gTm93IGdldCBvciBzZXQgYW4g
SUQgZm9yIHRoZSBiYWNraW5nLCBhbmQgdGhlbiBhZGQgdGhlIGNvbWJpbmF0aW9uIHRvIHRoZSBI
YXNoTWFwLgorICAgIHVpbnQ2NF90IHJvb3RMYXllcklEID0gZnJhbWVWaWV3LT5zY3JvbGxMYXll
cklEKCk7CisgICAgQVNTRVJUKHJvb3RMYXllcklEKTsKKyAgICBtX3N0YXRlTm9kZU1hcC5zZXQo
cm9vdExheWVySUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhp
Y3NMYXllciogc2Nyb2xsTGF5ZXIsIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSkKIHsKLSAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTY3JvbGxMYXllcihzY3Jv
bGxMYXllcik7CisgICAgbm9kZS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOwogICAgIHNj
aGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYgcmVnaW9uKQordm9pZCBT
Y3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKGNv
bnN0IFJlZ2lvbiYgcmVnaW9uLCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCiB7
Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Tm9uRmFzdFNj
cm9sbGFibGVSZWdpb24ocmVnaW9uKTsKKyAgICBub2RlLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihyZWdpb24pOwogICAgIHNjaGVkdWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKLXZvaWQg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFy
YW1ldGVycyYgc2Nyb2xsUGFyYW1ldGVycykKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFNjcm9sbFBhcmFtZXRlcnNGb3JOb2RlKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmIHNjcm9sbFBh
cmFtZXRlcnMsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSkKIHsKLSAgICAvLyBG
SVhNRTogSW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiBhbmQgYWxsIG9mIHRoZSBvdGhlciBm
dW5jdGlvbnMgaW4gdGhpcyBjbGFzcyBuZWVkIHRvCi0gICAgLy8gaGFuZGxlIG1vcmUgdGhhbiBq
dXN0IHRoZSByb290IG5vZGUuIAotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCktPnNldEhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9y
aXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJz
LnZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJv
b3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZEhvcml6b250YWxTY3JvbGxiYXIoc2Nyb2xsUGFy
YW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcik7Ci0gICAgbV9zY3JvbGxpbmdT
dGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFy
KHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKLSAgICBtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIb3Jpem9udGFsU2Nyb2xsYmFy
TW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlKTsKLSAgICBtX3Nj
cm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1v
ZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbGJhck1vZGUpOwotCi0gICAgbV9zY3Jv
bGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBh
cmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0
YXRlTm9kZSgpLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xsUGFyYW1ldGVycy52aWV3cG9ydFJlY3Qp
OwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldENvbnRlbnRz
U2l6ZShzY3JvbGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CisgICAgbm9kZS0+c2V0SG9yaXpv
bnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsRWxh
c3RpY2l0eSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBh
cmFtZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRIYXNFbmFi
bGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9u
dGFsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIo
c2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOworICAgIG5vZGUt
PnNldEhvcml6b250YWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNj
cm9sbGJhck1vZGUpOworICAgIG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsYmFyTW9kZShzY3JvbGxQ
YXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7CisKKyAgICBub2RlLT5zZXRTY3JvbGxP
cmlnaW4oc2Nyb2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOworICAgIG5vZGUtPnNldFZpZXdw
b3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCk7CisgICAgbm9kZS0+c2V0Q29u
dGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKICAgICBzY2hlZHVsZVRy
ZWVTdGF0ZUNvbW1pdCgpOwogfQogCiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdo
ZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCkKK3Zv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JOb2Rl
KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSogbm9kZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgp
LT5zZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOworICAg
IG5vZGUtPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7
CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCShyZXZp
c2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KIAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAjZW5kaWYKQEAgLTUyLDYgKzUzLDggQEAgY2xh
c3MgUGFnZTsKIGNsYXNzIFJlZ2lvbjsKIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogY2xhc3MgU2Ny
b2xsaW5nQ29vcmRpbmF0b3JQcml2YXRlOworY2xhc3MgU2Nyb2xsaW5nU3RhdGVOb2RlOworY2xh
c3MgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOwogY2xhc3MgU2Nyb2xsaW5nU3RhdGVUcmVl
OwogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKQEAgLTEzNywxNSArMTQwLDIwIEBA
IHB1YmxpYzoKICAgICAgICAgSXNJbWFnZURvY3VtZW50ID0gMSA8PCA0CiAgICAgfTsKIAorICAg
IHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZSh1aW50NjRfdCk7CisgICAgdm9pZCBjbGVhclN0YXRl
VHJlZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKFBh
Z2UqKTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAg
IHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKTsKKyAgICBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZp
ZXcqKTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1l
VmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1l
VmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZCgpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7
Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKIAog
ICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKICAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBo
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKQEAgLTE2Myw4ICsxNzEsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBU
aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgorICAgIC8vIG5vdyB1c2VzIG5ldyB2ZXJzaW9uczog
c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSBhbmQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUoKS4KKyAgICAvLyBUbyByZXNvbHZlIHRoaXMgYW5kIGFsbCBvZiB0aGUgaWYtZGVm
cyBpbiB0aGlzIGNsYXNzLCB3ZSBzaG91bGQgbWFrZSBTY3JvbGxpbmdDb29yZGluYXRvcgorICAg
IC8vIGp1c3QgYmUgYSB0eXBlZGVmIHRoYXQgZGVmaW5lcyBTY3JvbGxpbmdDb29yZGluYXRvck1h
YyB0byBiZSBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIHNhbWUKKyAgICAvLyBmb3IgQ2hyb21p
dW0gYW5kIG90aGVyIHBsYXRmb3Jtcy4gQW55IHNoYXJlZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBp
biBzb21ldGhpbmcgY2FsbGVkIAorICAgIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmFzZSB3aGlj
aCBhbGwgb2YgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyB3aWxsIGluaGVyaXQgZnJvbS4K
ICAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpOwog
ICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CisgICAgdm9pZCBz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKworI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhp
Y3NMYXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xs
UGFyYW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0
V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSopOworI2VuZGlmCisKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAg
ICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CkBAIC0xODIsNiAr
MjA1LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Njcm9s
bGluZ1N0YXRlVHJlZTsKICAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVl
OwogICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNv
bW1pdHRlclRpbWVyOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVOb2Rl
Kj4gbV9zdGF0ZU5vZGVNYXA7CiAjZW5kaWYKIAogICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJp
dmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxMzA2
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCArNTksNiBAQCB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2NyCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
dW5zaWduZWQpCi17Ci19Ci0KIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMpCiB7CiB9CkBAIC04Nyw2ICs3OSwyNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRMYXllcklzRml4CiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJl
YVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCiB7
CiB9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUodWlu
dDY0X3QpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVl
KCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9k
ZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmKQoreworfQor
Cit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVu
c2lnbmVkKQoreworfQorCiAjZW5kaWYgLy8gIUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcs
NiArNzcsMjEgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OmFwcGVuZENoaWxkKFBhcwogICAg
IG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZE5vZGUpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRl
Tm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQoreworICAgIGlmICgh
bV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNpemVfdCBpbmRleCA9IG1f
Y2hpbGRyZW4tPmZpbmQobm9kZSkpIHsKKyAgICAgICAgbV9jaGlsZHJlbi0+cmVtb3ZlKGluZGV4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJl
bi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAg
ICBtX2NoaWxkcmVuLT5hdChpKS0+cmVtb3ZlQ2hpbGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5v
ZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcv
U2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVi
bGljOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKICAgICB2
aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9s
bGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFs
IFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFuZFJlc2V0Tm9kZSgpID0gMDsK
ICAgICB2b2lkIGNsb25lQW5kUmVzZXRDaGlsZE5vZGVzKFNjcm9sbGluZ1N0YXRlTm9kZSopOwog
CkBAIC02NiwxMCArNjgsMTIgQEAgcHVibGljOgogICAgIHZvaWQgc2V0U2Nyb2xsaW5nU3RhdGVU
cmVlKFNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkgeyBtX3Njcm9sbGluZ1N0YXRlVHJlZSA9IHRy
ZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4g
bV9wYXJlbnQ7IH0KLQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9sbGluZ1N0YXRlTm9kZSogcGFy
ZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKICAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NP
d25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CiAKKyAgICB2b2lkIHJlbW92ZUNoaWxkKFNjcm9s
bGluZ1N0YXRlTm9kZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNj
cm9sbGluZ1N0YXRlTm9kZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNp
b24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGlj
OgogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiA9IDEgPDwgMTIsCiAgICAgfTsKIAor
ICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURF
IHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0
ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wg
aGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5nZWRQ
cm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiArMTM2LDE1IEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQg
bV9zY3JvbGxPcmlnaW47CiB9OwogCitpbmxpbmUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
KiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUp
Cit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUqPihub2RlKTsKK30KKyAgICAKKy8vIFRoaXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4g
dW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29u
c3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJ
KHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDcgQEAgUGFzc093
blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogfQogCiBTY3JvbGxpbmdTdGF0ZVRy
ZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgpCi0gICAgOiBtX3Jvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcykpCi0gICAgLCBtX2hhc0NoYW5nZWRQcm9w
ZXJ0aWVzKGZhbHNlKQorICAgIDogbV9oYXNDaGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKIHsKIH0K
IApAQCAtNTcsNiArNTYsMTggQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9s
bGluZwogICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgpOwogfQogCit2b2lkIFNjcm9sbGlu
Z1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAg
QVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7CisKKyAgICBpZiAobm9kZSA9PSBtX3Jvb3RTdGF0ZU5v
ZGUpIHsKKyAgICAgICAgbV9yb290U3RhdGVOb2RlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1fcm9vdFN0YXRlTm9kZS0+cmVtb3ZlQ2hpbGQobm9kZSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdT
dGF0ZVRyZWUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDE4ICs1NSwx
OSBAQCBwdWJsaWM6CiAgICAgflNjcm9sbGluZ1N0YXRlVHJlZSgpOwogCiAgICAgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290
U3RhdGVOb2RlLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290U3RhdGVOb2RlKFBhc3NPd25QdHI8
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290U3RhdGVOb2RlKSB7IG1fcm9vdFN0YXRl
Tm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KIAogICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVl
IHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmln
aW5hbC4KICAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJlZT4gY29tbWl0KCk7CiAKKyAg
ICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisKICAgICB2b2lkIHNldEhh
c0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wgY2hhbmdlZFByb3BlcnRpZXMpIHsgbV9oYXNDaGFuZ2Vk
UHJvcGVydGllcyA9IGNoYW5nZWRQcm9wZXJ0aWVzOyB9CiAgICAgYm9vbCBoYXNDaGFuZ2VkUHJv
cGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hhbmdlZFByb3BlcnRpZXM7IH0KIAogcHJp
dmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAotICAgIHZvaWQgc2V0Um9vdFN0YXRl
Tm9kZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZT4gcm9vdFN0YXRlTm9k
ZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2RlOyB9Ci0KICAgICBPd25QdHI8U2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0ZU5vZGU7CiAgICAgYm9vbCBtX2hh
c0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjYyLDQgKzI2MiwxMyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpzY3JvbGxhYmxlQXJlCiAgICAgfQogfQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNp
ZGVyIHJlbW92aW5nIHRoZXNlIHN0dWJzIHdoZW4gd2UgcmVzb2x2ZSB0aGUgaWYtZGVmIHNvdXAg
aW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRh
Y2hGcm9tU3RhdGVUcmVlKHVpbnQ2NF90KQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpjbGVhclN0YXRlVHJlZSgpCit7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6bV9jcmVh
dGluZ1ByaW1hCiAKIFJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJCYWNraW5nKFJlbmRl
ckxheWVyKiBsYXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIobGF5ZXIpCisgICAgLCBtX3Njcm9s
bExheWVySUQoMCkKICAgICAsIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHMoZmFsc2UpCiAg
ICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKGZhbHNlKQogICAgICwgbV91c2luZ1Rp
bGVkQ2FjaGVMYXllcihmYWxzZSkKQEAgLTEzOCw2ICsxMzksNyBAQCBSZW5kZXJMYXllckJhY2tp
bmc6On5SZW5kZXJMYXllckJhY2tpbmcoCiAgICAgdXBkYXRlRm9yZWdyb3VuZExheWVyKGZhbHNl
KTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZVNjcm9sbGluZ0xheWVy
cyhmYWxzZSk7CisgICAgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAgICAgZGVz
dHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTk2Myw2ICs5NjUsMzYgQEAgYm9vbCBSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZwogICAgIHJldHVybiBsYXllckNoYW5nZWQ7
CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVNjcm9sbExheWVySUQoKQoreworICAgIHN0
YXRpYyB1aW50NjRfdCB1bmlxdWVTY3JvbGxMYXllcklEID0gMTsKKyAgICByZXR1cm4gdW5pcXVl
U2Nyb2xsTGF5ZXJJRCsrOworfQorCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9T
Y3JvbGxpbmdDb29yZGluYXRvcigpCit7CisgICAgaWYgKCFtX3Njcm9sbExheWVySUQpCisgICAg
ICAgIG1fc2Nyb2xsTGF5ZXJJRCA9IGdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCgpOworfQorCit2b2lk
IFJlbmRlckxheWVyQmFja2luZzo6ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkKK3sK
KyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgaXMgMCwgdGhlbiB0aGlzIGJhY2tpbmcgaXMgbm90
IGF0dGFjaGVkIHRvIHRoZSBTY3JvbGxpbmdDb29yZGluYXRvci4KKyAgICBpZiAoIW1fc2Nyb2xs
TGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFnZSogcGFnZSA9IHJlbmRlcmVyKCkt
PmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAg
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9s
bGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxpbmdDb29yZGluYXRvcikKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmRldGFjaEZyb21TdGF0ZVRy
ZWUobV9zY3JvbGxMYXllcklEKTsKKyAgICBtX3Njcm9sbExheWVySUQgPSAwOworfQorCiBHcmFw
aGljc0xheWVyUGFpbnRpbmdQaGFzZSBSZW5kZXJMYXllckJhY2tpbmc6OnBhaW50aW5nUGhhc2VG
b3JQcmltYXJ5TGF5ZXIoKSBjb25zdAogewogICAgIHVuc2lnbmVkIHBoYXNlID0gR3JhcGhpY3NM
YXllclBhaW50QmFja2dyb3VuZDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmgJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiAr
ODcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNTY3JvbGxpbmdMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fc2Nyb2xsaW5nTGF5ZXI7IH0KICAgICBHcmFwaGljc0xheWVyKiBzY3JvbGxpbmdMYXll
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nTGF5ZXIuZ2V0KCk7IH0KICAgICBHcmFwaGlj
c0xheWVyKiBzY3JvbGxpbmdDb250ZW50c0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxp
bmdDb250ZW50c0xheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIGF0dGFjaFRvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKTsKKyAgICB1aW50NjRfdCBzY3JvbGxMYXllcklEKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JvbGxMYXllcklEOyB9CiAgICAgCiAgICAgYm9vbCBoYXNNYXNrTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX21hc2tMYXllciAhPSAwOyB9CiAKQEAgLTE5Myw2ICsxOTYsOCBAQCBwcml2YXRl
OgogICAgIGJvb2wgcmVxdWlyZXNTY3JvbGxDb3JuZXJMYXllcigpIGNvbnN0OwogICAgIGJvb2wg
dXBkYXRlU2Nyb2xsaW5nTGF5ZXJzKGJvb2wgc2Nyb2xsaW5nTGF5ZXJzKTsKIAorICAgIHZvaWQg
ZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisKICAgICBHcmFwaGljc0xheWVyUGFp
bnRpbmdQaGFzZSBwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVyKCkgY29uc3Q7CiAgICAgCiAg
ICAgSW50U2l6ZSBjb250ZW50T2Zmc2V0SW5Db21wb3N0aW5nTGF5ZXIoKSBjb25zdDsKQEAgLTI1
Niw2ICsyNjEsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9s
bGluZ0xheWVyOyAvLyBvbmx5IHVzZWQgaWYgdGhlIGxheWVyIGlzIHVzaW5nIGNvbXBvc2l0ZWQg
c2Nyb2xsaW5nLgogICAgIE93blB0cjxHcmFwaGljc0xheWVyPiBtX3Njcm9sbGluZ0NvbnRlbnRz
TGF5ZXI7IC8vIG9ubHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgdXNpbmcgY29tcG9zaXRlZCBzY3Jv
bGxpbmcuCiAKKyAgICB1aW50NjRfdCBtX3Njcm9sbExheWVySUQ7CisKICAgICBJbnRSZWN0IG1f
Y29tcG9zaXRlZEJvdW5kczsKIAogICAgIGJvb2wgbV9hcnRpZmljaWFsbHlJbmZsYXRlZEJvdW5k
czsgICAgICAvLyBib3VuZHMgaGFkIHRvIGJlIG1hZGUgbm9uLXplcm8gdG8gbWFrZSB0cmFuc2Zv
cm0tb3JpZ2luIHdvcmsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ckNvbXBvc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDk0LDYgKzQ5NCwxMiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQmFj
a2luCiAKICAgICAgICAgICAgIGxheWVyLT5lbnN1cmVCYWNraW5nKCk7CiAKKyAgICAgICAgICAg
IGlmIChsYXllci0+aXNSb290TGF5ZXIoKSkgeworICAgICAgICAgICAgICAgIGxheWVyLT5iYWNr
aW5nKCktPmF0dGFjaFRvU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKKyAgICAgICAgICAgICAgICBp
ZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Ny
b2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXctPmZyYW1lVmll
dygpKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gVGhpcyBsYXllciBhbmQgYWxs
IG9mIGl0cyBkZXNjZW5kYW50cyBoYXZlIGNhY2hlZCByZXBhaW50cyByZWN0cyB0aGF0IGFyZSBy
ZWxhdGl2ZSB0bwogICAgICAgICAgICAgLy8gdGhlIHJlcGFpbnQgY29udGFpbmVyLCBzbyBjaGFu
Z2Ugd2hlbiBjb21wb3NpdGluZyBjaGFuZ2VzOyB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGVtIGhlcmUu
CiAgICAgICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKQpAQCAtMjMwOCw5ICsyMzE0LDYgQEAg
dm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmF0dGFjaFJvb3RMYQogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9
IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCi0gICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5h
dG9yLT5mcmFtZVZpZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LT5mcmFtZVZpZXco
KSk7Ci0KICAgICBtX3Jvb3RMYXllckF0dGFjaG1lbnQgPSBhdHRhY2htZW50OwogICAgIHJvb3RM
YXllckF0dGFjaG1lbnRDaGFuZ2VkKCk7CiB9Cg==
</data>
<flag name="review"
          id="180315"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167624</attachid>
            <date>2012-10-08 14:58:34 -0700</date>
            <delta_ts>2012-10-08 19:36:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-8.txt</filename>
            <type>text/plain</type>
            <size>36321</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wOCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE51bGwtY2hlY2sgZm9yIERPTVdpbmRvdyBiZWZvcmUgZmVlZGluZyBpdCB0
byBGZWF0dXJlT2JzZXJ2ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNTAsMTQgKzQwNTAsMTggQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUo
Ym9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFnOwogCiAgICAgRnJhbWVWaWV3KiB2
ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisKICAgICBpZiAoZmxh
ZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7CiAgICAgICAgIG1fc2F2ZWRS
ZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2KSB7CiAgICAgICAgICAgICB2LT5j
YWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYgKHBhZ2UoKSAmJiBw
YWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAgICBpZiAocGFnZSAmJiBw
YWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAgICAgICAgICAgICAgdi0+cmVzZXRT
Y3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9y
ID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAgICAgICAgICAgc2Ny
b2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7CisgICAgICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKICAgICAgICAgfQogICAgICAg
ICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVy
L0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2
ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgogI2lu
Y2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKQEAg
LTEyMyw4ICsxMjQsMTMgQEAgdm9pZCBIaXN0b3J5Q29udHJvbGxlcjo6cmVzdG9yZVNjcm9sbFBv
cwogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVzdG9yZVZpZXdTdGF0ZSgpOwog
ICAgIAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBtX2ZyYW1lLT52aWV3KCkpIHsKKyAgICAg
ICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgcGFn
ZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgeworICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghdmlldy0+
d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUt
PnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1f
ZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNjYWxlRmFjdG9yKCkpCiAgICAgICAgICAgICAg
ICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1fY3VycmVudEl0ZW0tPnBhZ2VTY2FsZUZhY3Rv
cigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2ludCgpKTsKICAgICAgICAgICAgIGVsc2UKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgyLDYgKzc4
MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmlldzo6dGlsZWRCYWNraW5nKCkKICAgICByZXR1
cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50aWxlZEJhY2tpbmcoKTsKIH0KIAordWludDY0
X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkgY29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiBy
b290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAgIGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcqIGJhY2tpbmcgPSByb290LT5sYXllcigpLT5i
YWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJl
dHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7Cit9CisKICNpZiBFTkFCTEUoUlVCQkVSX0JB
TkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZpZXc6OmxheWVyRm9yT3ZlcmhhbmdBcmVhcygp
IGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHJldmlzaW9uIDEzMDY1MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
MSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5
bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhlIGZ1dHVyZSB3aGVuIGFueSBTY3JvbGxhYmxl
QXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Nyb2xsaW5nVHJlZSwgdGhpcyBzaG91bGQKKyAg
ICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9uIG9uIFNjcm9sbGFibGVBcmVhLgorICAgIHVp
bnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsKICNlbmRpZgogCiAgICAgYm9vbCBoYXNDb21w
b3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmNwcAkocmV2aXNpb24gMTMwNjUz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyArMTU3LDE0IEBAIHZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmZyYW1lVmlld0xheW8KICAgICAvLyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3Vj
aCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMgYW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8g
ZG8gdGhpcyBldmVuIGlmIHRoZQogICAgIC8vIGZyYW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1
cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4KICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9sbGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJh
bWUoKSwgSW50UG9pbnQoKSk7CisKKyNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorICAg
IC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0
IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZvciBtb3JlIHRoYW4KKyAgICAvLyBqdXN0IHRo
ZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRoaXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8g
dGhlIHJvb3QuCisgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsK
KyNlbHNlCiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVS
ZWdpb24pOworI2VuZGlmCiAKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVW
aWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKQEAgLTE3NCwxNSArMTgxLDIzIEBAIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW8KICAgICBzY3JvbGxQYXJhbWV0
ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxl
Q29udGVudFJlY3QoKS5zaXplKCkpOwogICAgIHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXpl
ID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsKIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2Rl
Rm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICghbm9kZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1l
dGVycywgbm9kZSk7CisjZWxzZQogICAgIHNldFNjcm9sbFBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1l
dGVycyk7CisjZW5kaWYKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3
V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQoRnJhbWVWaWV3KikKK3ZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZlbnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZyYW1l
VmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNT
RVJUKG1fcGFnZSk7CiAKLSAgICByZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50KCk7Cisg
ICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcp
OwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpmcmFtZVZpZXdIYXNTbG93UmVwYWlu
dE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCkBAIC0yMDcsNiArMjIyLDcg
QEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0ZVNo
b3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAorI2lmIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0aWMgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5
ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFtZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpAQCAtMjIzLDYgKzIzOSw3IEBAIHN0YXRpYyBHcmFwaGljc0xheWVy
KiBzY3JvbGxMYXllckZvckZyYW0KICAgICByZXR1cm4gMDsKICNlbmRpZgogfQorI2VuZGlmCiAK
IHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShG
cmFtZVZpZXcqIGZyYW1lVmlldykKIHsKQEAgLTIzMiwxMCArMjQ5LDE5IEBAIHZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3QKICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xs
aW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgLy8gSWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3Qg
aGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhlbiB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAg
ICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJU
KG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworI2VuZGlmCisKICAgICBm
cmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmlldyk7Ci0gICAgcmVjb21wdXRlV2hlZWxFdmVu
dEhhbmRsZXJDb3VudCgpOworICAgIHJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRhdGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBv
c2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgc2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JG
cmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElO
RykKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJh
bWVWaWV3KSwgc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpKTsKKyNl
bmRpZgogfQogCiBib29sIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRp
b25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZVZpZXcsIGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3Np
dGlvbikKQEAgLTI1NCw3ICsyODAsMTEgQEAgYm9vbCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVx
dWVzdFNjcm9sbAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKLSAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihz
Y3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRpY1Njcm9sbCgpKTsKKyAgICBT
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZSA9IHN0YXRlTm9kZUZvcklEKGZy
YW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAgICBpZiAoIXN0YXRlTm9kZSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVOb2RlLT5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlv
bihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblByb2dyYW1tYXRpY1Njcm9sbCgpKTsKICAg
ICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogICAgIHJldHVybiB0cnVlOwogI2Vsc2UKQEAg
LTMwMCw5ICszMzAsMTAgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZy
YQogICAgIGZyYW1lVmlldy0+c2V0SW5Qcm9ncmFtbWF0aWNTY3JvbGwob2xkUHJvZ3JhbW1hdGlj
U2Nyb2xsKTsKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiB2b2lkIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCkKIHsK
LSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpICYmIEVOQUJMRShUSFJFQURFRF9TQ1JP
TExJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKICAgICBpZiAoIW1fcGFnZSkKQEAgLTMxNiw2ICszNDcsNyBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJhCiAgICAgICAgIHNjcm9sbExheWVy
LT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3JvbGxQb3NpdGlvbigpKTsKICNlbmRpZgogfQor
I2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9s
bFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlvbigpCiB7CkBAIC0zNTYsMTQgKzM4OCwyMiBA
QCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpoYW5kbGVXaGVlbEV2CiB9CiAjZW5kaWYKIAot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxl
ckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQogeworI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2Rl
ID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklEKCkpOworICAgIGlmICgh
bm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgdW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJD
b3VudCA9IDA7CiAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBp
ZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50
ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQot
ICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7Cisg
ICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUod2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCwgbm9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShmcmFtZVZpZXcpOworI2VuZGlmCiB9
CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZy
YW1lVmlldyogZnJhbWVWaWV3KQpAQCAtNDE2LDQwICs0NTYsOTkgQEAgdm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6c2V0Rm9yY2VNYWluVAogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0KIAordWludDY0X3QgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVuaXF1ZVNjcm9sbExheWVySUQoKQoreworICAgIHN0YXRpYyB1aW50NjRfdCB1bmlx
dWVTY3JvbGxMYXllcklEID0gMTsKKyAgICByZXR1cm4gdW5pcXVlU2Nyb2xsTGF5ZXJJRCsrOwor
fQorCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNjcm9sbExheWVyKQorU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBTY3JvbGxpbmdDb29yZGluYXRvcjo6c3RhdGVOb2RlRm9y
SUQodWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisg
ICAgICAgIHJldHVybiAwOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVO
b2RlKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9zdGF0ZU5vZGVNYXAuZmluZChzY3JvbGxMYXll
cklEKTsKKyAgICBpZiAoaXQgPT0gbV9zdGF0ZU5vZGVNYXAuZW5kKCkpCisgICAgICAgIHJldHVy
biAwOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlID0gaXQtPnZhbHVlOworICAgIHJl
dHVybiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShub2RlKTsKK30KKwordWludDY0X3Qg
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmF0dGFjaFRvU3RhdGVUcmVlKHVpbnQ2NF90IHNjcm9sbExh
eWVySUQpCit7CisgICAgQVNTRVJUKHNjcm9sbExheWVySUQpOworCisgICAgU2Nyb2xsaW5nU3Rh
dGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JJRChzY3JvbGxMYXll
cklEKTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9PSBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm4gc2Nyb2xsTGF5ZXJJ
RDsKKworICAgIGNsZWFyU3RhdGVUcmVlKCk7CisKKyAgICAvLyBGSVhNRTogSW4gdGhlIGZ1dHVy
ZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gdGFrZSBhIHBhcmVudCBJRCBzbyB0aGF0IGl0
IGNhbgorICAgIC8vIGFwcGVuZCB0aGUgbm9kZSBpbiB0aGUgYXBwcm9wcmlhdGUgc3BvdCBpbiB0
aGUgc3RhdGUgdHJlZS4gRm9yIG5vdyB3ZSBhbHdheXMgYXNzdW1lCisgICAgLy8gdGhpcyBpcyB0
aGUgcm9vdCBub2RlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRSb290U3RhdGVOb2Rl
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LmdldCgpKSk7CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHNjcm9sbExheWVySUQsIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworICAgIHJldHVybiBzY3JvbGxMYXllcklE
OworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVlKHVp
bnQ2NF90IHNjcm9sbExheWVySUQpCit7CisgICAgaWYgKCFzY3JvbGxMYXllcklEKQorICAgICAg
ICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUgPSBtX3N0YXRlTm9kZU1h
cC50YWtlKHNjcm9sbExheWVySUQpOworCisgICAgLy8gRklYTUU6IHJlbW92ZU5vZGUoKSB3aWxs
IGRlc3Ryb3kgY2hpbGRyZW4sIGFuZCB0aG9zZSBjaGlsZHJlbiBtaWdodCBzdGlsbCBiZSBpbiB0
aGUgSGFzaE1hcC4KKyAgICAvLyBUaGlzIHdpbGwgYmUgYSBiaWcgcHJvYmxlbSBvbmNlIHRoZXJl
IGFyZSBhY3R1YWxseSBjaGlsZHJlbiBpbiB0aGUgdHJlZS4KKyAgICBtX3Njcm9sbGluZ1N0YXRl
VHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
Y2xlYXJTdGF0ZVRyZWUoKQoreworICAgIG1fc3RhdGVOb2RlTWFwLmNsZWFyKCk7CisgICAgaWYg
KFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9kZSA9IG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCkpCisgICAgICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yZW1vdmVO
b2RlKG5vZGUpOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjplbnN1cmVSb290U3Rh
dGVOb2RlRm9yRnJhbWVWaWV3KEZyYW1lVmlldyogZnJhbWVWaWV3KQoreworICAgIGF0dGFjaFRv
U3RhdGVUcmVlKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKK30KKwordm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsTGF5ZXJGb3JOb2RlKEdyYXBoaWNzTGF5ZXIqIHNjcm9s
bExheWVyLCBTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCiB7Ci0gICAgbV9zY3JvbGxpbmdTdGF0
ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXIpOworICAg
IG5vZGUtPnNldFNjcm9sbExheWVyKHNjcm9sbExheWVyKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0
ZUNvbW1pdCgpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uRm9yTm9kZShjb25zdCBSZWdpb24mIHJl
Z2lvbiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewotICAgIG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KHJlZ2lvbik7CisgICAgbm9kZS0+c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsK
ICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCi12b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFtZXRlcnMmIHNjcm9s
bFBhcmFtZXRlcnMpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0
ZXJzRm9yTm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzLCBTY3Jv
bGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCiB7Ci0gICAgLy8gRklYTUU6IEluIHRoZSBm
dXR1cmUsIHRoaXMgZnVuY3Rpb24gYW5kIGFsbCBvZiB0aGUgb3RoZXIgZnVuY3Rpb25zIGluIHRo
aXMgY2xhc3MgbmVlZCB0bwotICAgIC8vIGhhbmRsZSBtb3JlIHRoYW4ganVzdCB0aGUgcm9vdCBu
b2RlLiAKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIb3Jp
em9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxF
bGFzdGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9s
bEVsYXN0aWNpdHkpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkt
PnNldEhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5h
YmxlZEhvcml6b250YWxTY3JvbGxiYXIpOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290
U3RhdGVOb2RlKCktPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxQYXJhbWV0
ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFy
YW1ldGVycy5ob3Jpem9udGFsU2Nyb2xsYmFyTW9kZSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRy
ZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNjcm9sbFBhcmFt
ZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlKTsKLQotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVl
LT5yb290U3RhdGVOb2RlKCktPnNldFNjcm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9s
bE9yaWdpbik7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0
Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRDb250ZW50c1NpemUoc2Nyb2xsUGFy
YW1ldGVycy5jb250ZW50c1NpemUpOworICAgIG5vZGUtPnNldEhvcml6b250YWxTY3JvbGxFbGFz
dGljaXR5KHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkpOworICAg
IG5vZGUtPnNldFZlcnRpY2FsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRp
Y2FsU2Nyb2xsRWxhc3RpY2l0eSk7CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZEhvcml6b250YWxT
Y3JvbGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcik7
CisgICAgbm9kZS0+c2V0SGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRl
cnMuaGFzRW5hYmxlZFZlcnRpY2FsU2Nyb2xsYmFyKTsKKyAgICBub2RlLT5zZXRIb3Jpem9udGFs
U2Nyb2xsYmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3JvbGxiYXJNb2RlKTsK
KyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy52ZXJ0
aWNhbFNjcm9sbGJhck1vZGUpOworCisgICAgbm9kZS0+c2V0U2Nyb2xsT3JpZ2luKHNjcm9sbFBh
cmFtZXRlcnMuc2Nyb2xsT3JpZ2luKTsKKyAgICBub2RlLT5zZXRWaWV3cG9ydFJlY3Qoc2Nyb2xs
UGFyYW1ldGVycy52aWV3cG9ydFJlY3QpOworICAgIG5vZGUtPnNldENvbnRlbnRzU2l6ZShzY3Jv
bGxQYXJhbWV0ZXJzLmNvbnRlbnRzU2l6ZSk7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQo
KTsKIH0KIAogCi12b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxl
ckNvdW50KHVuc2lnbmVkIHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpCit2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCB3aGVl
bEV2ZW50SGFuZGxlckNvdW50LCBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUpCiB7
Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0V2hlZWxFdmVu
dEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNvdW50KTsKKyAgICBub2RlLT5zZXRXaGVl
bEV2ZW50SGFuZGxlckNvdW50KHdoZWVsRXZlbnRIYW5kbGVyQ291bnQpOwogICAgIHNjaGVkdWxl
VHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAkocmV2aXNpb24gMTMwNjUzKQor
KysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAKICNpZiBFTkFCTEUoVEhSRUFERURfU0NST0xMSU5HKQorI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CiAjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgogI2VuZGlmCkBAIC01Miw2ICs1Myw4IEBAIGNsYXNzIFBhZ2U7CiBjbGFz
cyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yUHJpdmF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNzIFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsKIAogI2lmIEVOQUJM
RShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC0xMzcsMTUgKzE0MCwyMiBAQCBwdWJsaWM6CiAgICAg
ICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAgIH07CiAKKyAgICB1aW50NjRfdCB1bmlx
dWVTY3JvbGxMYXllcklEKCk7CisgICAgdWludDY0X3QgYXR0YWNoVG9TdGF0ZVRyZWUodWludDY0
X3QpOworICAgIHZvaWQgZGV0YWNoRnJvbVN0YXRlVHJlZSh1aW50NjRfdCk7CisgICAgdm9pZCBj
bGVhclN0YXRlVHJlZSgpOworCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yKFBhZ2UqKTsKIAotICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3Vu
dCgpOworICAgIHZvaWQgZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcq
KTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0YXRlTm9kZUZvcklEKHVpbnQ2
NF90KTsKKworICAgIHZvaWQgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudEZvckZyYW1l
VmlldyhGcmFtZVZpZXcqKTsKICAgICBib29sIGhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1l
VmlldyopOwogICAgIHZvaWQgdXBkYXRlU2hvdWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9u
TWFpblRocmVhZCgpOwogCiAgICAgdm9pZCBzZXRTY3JvbGxMYXllcihHcmFwaGljc0xheWVyKik7
Ci0gICAgdm9pZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKIAog
ICAgIHN0cnVjdCBTY3JvbGxQYXJhbWV0ZXJzIHsKICAgICAgICAgU2Nyb2xsRWxhc3RpY2l0eSBo
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eTsKQEAgLTE2Myw4ICsxNzMsMjMgQEAgcHJpdmF0ZToK
ICAgICAgICAgSW50U2l6ZSBjb250ZW50c1NpemU7CiAgICAgfTsKIAorICAgIC8vIEZJWE1FOiBU
aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgb25seSBieSBTY3JvbGxpbmdDb29yZGluYXRvckNocm9t
aXVtLiBTY3JvbGxpbmdDb29yZGluYXRvcgorICAgIC8vIG5vdyB1c2VzIG5ldyB2ZXJzaW9uczog
c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoKSBhbmQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3Vu
dEZvck5vZGUoKS4KKyAgICAvLyBUbyByZXNvbHZlIHRoaXMgYW5kIGFsbCBvZiB0aGUgaWYtZGVm
cyBpbiB0aGlzIGNsYXNzLCB3ZSBzaG91bGQgbWFrZSBTY3JvbGxpbmdDb29yZGluYXRvcgorICAg
IC8vIGp1c3QgYmUgYSB0eXBlZGVmIHRoYXQgZGVmaW5lcyBTY3JvbGxpbmdDb29yZGluYXRvck1h
YyB0byBiZSBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIHNhbWUKKyAgICAvLyBmb3IgQ2hyb21p
dW0gYW5kIG90aGVyIHBsYXRmb3Jtcy4gQW55IHNoYXJlZCBmdW5jdGlvbmFsaXR5IGNhbiBiZSBp
biBzb21ldGhpbmcgY2FsbGVkIAorICAgIC8vIFNjcm9sbGluZ0Nvb3JkaW5hdG9yQmFzZSB3aGlj
aCBhbGwgb2YgdGhlIHBsYXRmb3JtIGltcGxlbWVudGF0aW9ucyB3aWxsIGluaGVyaXQgZnJvbS4K
ICAgICB2b2lkIHNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpOwog
ICAgIHZvaWQgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCk7CisgICAgdm9pZCBz
ZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbihjb25zdCBSZWdpb24mKTsKKworI2lmIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCisgICAgdm9pZCBzZXRTY3JvbGxMYXllckZvck5vZGUoR3JhcGhp
Y3NMYXllciosIFNjcm9sbGluZ1N0YXRlTm9kZSopOworICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKGNvbnN0IFJlZ2lvbiYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZSopOworICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xs
UGFyYW1ldGVycyYsIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSopOworICAgIHZvaWQgc2V0
V2hlZWxFdmVudEhhbmRsZXJDb3VudEZvck5vZGUodW5zaWduZWQsIFNjcm9sbGluZ1N0YXRlU2Ny
b2xsaW5nTm9kZSopOworI2VuZGlmCisKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVNjcm9sbExh
eWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpOwogCiAg
ICAgdm9pZCB1cGRhdGVNYWluRnJhbWVTY3JvbGxMYXllclBvc2l0aW9uKCk7CkBAIC0xODIsNiAr
MjA3LDggQEAgcHJpdmF0ZToKICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVUcmVlPiBtX3Njcm9s
bGluZ1N0YXRlVHJlZTsKICAgICBSZWZQdHI8U2Nyb2xsaW5nVHJlZT4gbV9zY3JvbGxpbmdUcmVl
OwogICAgIFRpbWVyPFNjcm9sbGluZ0Nvb3JkaW5hdG9yPiBtX3Njcm9sbGluZ1N0YXRlVHJlZUNv
bW1pdHRlclRpbWVyOworCisgICAgSGFzaE1hcDx1aW50NjRfdCwgU2Nyb2xsaW5nU3RhdGVOb2Rl
Kj4gbV9zdGF0ZU5vZGVNYXA7CiAjZW5kaWYKIAogICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJp
dmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCShyZXZpc2lvbiAxMzA2
NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCArNTksNiBAQCB2b2lkIFNjcm9sbGlu
Z0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2NyCiB7CiB9CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYpCi17Ci19
Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
dW5zaWduZWQpCi17Ci19Ci0KIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNob3VsZFVw
ZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoTWFpblRocmVhZFNjcm9sbGluZ1Jl
YXNvbnMpCiB7CiB9CkBAIC04Nyw2ICs3OSwzMiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRMYXllcklzRml4CiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJl
YVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVBcmVhKiwgR3JhcGhpY3NMYXllciopCiB7
CiB9CisKK3VpbnQ2NF90IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjphdHRhY2hUb1N0YXRlVHJlZSh1
aW50NjRfdCBpZCkKK3sKKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUodWludDY0X3QpCit7Cit9CisKK3ZvaWQgU2Nyb2xs
aW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQor
eworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNv
bnN0IFNjcm9sbFBhcmFtZXRlcnMmKQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQoreworfQorCiAjZW5kaWYgLy8g
IUVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24g
MTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjEgQEAgdm9pZCBTY3JvbGxpbmdT
dGF0ZU5vZGU6OmFwcGVuZENoaWxkKFBhcwogICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZE5v
ZGUpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xsaW5n
U3RhdGVOb2RlKiBub2RlKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQobm9kZSkpIHsKKyAg
ICAgICAgbV9jaGlsZHJlbi0+cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIHNpemVfdCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cmVtb3Zl
Q2hpbGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVO
QUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFNjcm9sbGluZ1N0YXRlTm9k
ZShTY3JvbGxpbmdTdGF0ZVRyZWUqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUo
KTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsg
cmV0dXJuIGZhbHNlOyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVO
b2RlPiBjbG9uZUFuZFJlc2V0Tm9kZSgpID0gMDsKICAgICB2b2lkIGNsb25lQW5kUmVzZXRDaGls
ZE5vZGVzKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkBAIC02NiwxMCArNjgsMTIgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0U2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZSogdHJl
ZSkgeyBtX3Njcm9sbGluZ1N0YXRlVHJlZSA9IHRyZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0YXRl
Tm9kZSogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLQogICAgIHZvaWQgc2V0
UGFyZW50KFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9
CisKICAgICB2b2lkIGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7
CiAKKyAgICB2b2lkIHJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiBwcm90ZWN0
ZWQ6CiAgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU4LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQ
b3NpdGlvbiA9IDEgPDwgMTIsCiAgICAgfTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGlu
Z1N0YXRlU2Nyb2xsaW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZp
cnR1YWwgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkg
T1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiArMTM2
LDE1IEBAIHByaXZhdGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiB9OwogCitpbmxp
bmUgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZShTY3JvbGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5v
ZGUtPmlzU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKK30KKyAgICAKKy8vIFRo
aXMgd2lsbCBjYXRjaCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9T
Y3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdO
b2RlKik7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdTdGF0ZVRyZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDggKzM2LDcgQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNj
cm9sbGluZwogfQogCiBTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgpCi0g
ICAgOiBtX3Jvb3RTdGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUo
dGhpcykpCi0gICAgLCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQorICAgIDogbV9oYXND
aGFuZ2VkUHJvcGVydGllcyhmYWxzZSkKIHsKIH0KIApAQCAtNTcsNiArNTYsMTggQEAgUGFzc093
blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogICAgIHJldHVybiB0cmVlU3RhdGUu
cmVsZWFzZSgpOwogfQogCit2b2lkIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShTY3Jv
bGxpbmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7CisK
KyAgICBpZiAobm9kZSA9PSBtX3Jvb3RTdGF0ZU5vZGUpIHsKKyAgICAgICAgbV9yb290U3RhdGVO
b2RlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdFN0YXRlTm9kZS0+
cmVtb3ZlQ2hpbGQobm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAkocmV2aXNpb24gMTMwNjUz
KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTU1LDE4ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgflNjcm9sbGlu
Z1N0YXRlVHJlZSgpOwogCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3Rh
dGVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgICAgdm9p
ZCBzZXRSb290U3RhdGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
PiByb290U3RhdGVOb2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KIAog
ICAgIC8vIENvcGllcyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5n
ZWQgcHJvcGVydGllcyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KICAgICBQYXNzT3duUHRyPFNjcm9s
bGluZ1N0YXRlVHJlZT4gY29tbWl0KCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5n
U3RhdGVOb2RlKik7CisKICAgICB2b2lkIHNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wgY2hh
bmdlZFByb3BlcnRpZXMpIHsgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGNoYW5nZWRQcm9wZXJ0
aWVzOyB9CiAgICAgYm9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ2hhbmdlZFByb3BlcnRpZXM7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVRy
ZWUoKTsKIAotICAgIHZvaWQgc2V0Um9vdFN0YXRlTm9kZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0
YXRlU2Nyb2xsaW5nTm9kZT4gcm9vdFN0YXRlTm9kZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290
U3RhdGVOb2RlOyB9Ci0KICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBt
X3Jvb3RTdGF0ZU5vZGU7CiAgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Ny
b2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lv
biAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3Jv
bGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDQgKzI2
MiwxOCBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlCiAgICAgfQog
fQogCisvLyBGSVhNRTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZXNlIHN0dWJzIHdo
ZW4gd2UgcmVzb2x2ZSB0aGUgaWYtZGVmIHNvdXAgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCit1
aW50NjRfdCBTY3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUodWludDY0X3Qg
aWQpCit7CisgICAgcmV0dXJuIGlkOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpk
ZXRhY2hGcm9tU3RhdGVUcmVlKHVpbnQ2NF90KQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpjbGVhclN0YXRlVHJlZSgpCit7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCShyZXZpc2lvbiAxMzA2NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTUsNiArOTUsNyBAQCBib29sIFJlbmRlckxheWVyQmFja2luZzo6bV9j
cmVhdGluZ1ByaW1hCiAKIFJlbmRlckxheWVyQmFja2luZzo6UmVuZGVyTGF5ZXJCYWNraW5nKFJl
bmRlckxheWVyKiBsYXllcikKICAgICA6IG1fb3duaW5nTGF5ZXIobGF5ZXIpCisgICAgLCBtX3Nj
cm9sbExheWVySUQoMCkKICAgICAsIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHMoZmFsc2Up
CiAgICAgLCBtX2lzTWFpbkZyYW1lUmVuZGVyVmlld0xheWVyKGZhbHNlKQogICAgICwgbV91c2lu
Z1RpbGVkQ2FjaGVMYXllcihmYWxzZSkKQEAgLTEzOCw2ICsxMzksNyBAQCBSZW5kZXJMYXllckJh
Y2tpbmc6On5SZW5kZXJMYXllckJhY2tpbmcoCiAgICAgdXBkYXRlRm9yZWdyb3VuZExheWVyKGZh
bHNlKTsKICAgICB1cGRhdGVNYXNrTGF5ZXIoZmFsc2UpOwogICAgIHVwZGF0ZVNjcm9sbGluZ0xh
eWVycyhmYWxzZSk7CisgICAgZGV0YWNoRnJvbVNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CiAgICAg
ZGVzdHJveUdyYXBoaWNzTGF5ZXJzKCk7CiB9CiAKQEAgLTk2Myw2ICs5NjUsNDEgQEAgYm9vbCBS
ZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZVNjcm9sbGluZwogICAgIHJldHVybiBsYXllckNoYW5n
ZWQ7CiB9CiAKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphdHRhY2hUb1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yKCkKK3sKKyAgICAvLyBJZiBtX3Njcm9sbExheWVySUQgbm9uLXplcm8sIHRoZW4gdGhp
cyBiYWNraW5nIGlzIGFscmVhZHkgYXR0YWNoZWQgdG8gdGhlIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LgorICAgIGlmIChtX3Njcm9sbExheWVySUQpCisgICAgICAgIHJldHVybjsKKworICAgIFBhZ2Uq
IHBhZ2UgPSByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRp
bmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRvcigpOworICAgIGlmICghc2Nyb2xsaW5n
Q29vcmRpbmF0b3IpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX3Njcm9sbExheWVySUQg
PSBzY3JvbGxpbmdDb29yZGluYXRvci0+YXR0YWNoVG9TdGF0ZVRyZWUoc2Nyb2xsaW5nQ29vcmRp
bmF0b3ItPnVuaXF1ZVNjcm9sbExheWVySUQoKSk7Cit9CisKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjpkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKQoreworICAgIC8vIElmIG1fc2Ny
b2xsTGF5ZXJJRCBpcyAwLCB0aGVuIHRoaXMgYmFja2luZyBpcyBub3QgYXR0YWNoZWQgdG8gdGhl
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yLgorICAgIGlmICghbV9zY3JvbGxMYXllcklEKQorICAgICAg
ICByZXR1cm47CisKKyAgICBQYWdlKiBwYWdlID0gcmVuZGVyZXIoKS0+ZnJhbWUoKS0+cGFnZSgp
OworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nQ29vcmRp
bmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3Io
KTsKKyAgICBpZiAoIXNjcm9sbGluZ0Nvb3JkaW5hdG9yKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZGV0YWNoRnJvbVN0YXRlVHJlZShtX3Njcm9sbExheWVy
SUQpOworICAgIG1fc2Nyb2xsTGF5ZXJJRCA9IDA7Cit9CisKIEdyYXBoaWNzTGF5ZXJQYWludGlu
Z1BoYXNlIFJlbmRlckxheWVyQmFja2luZzo6cGFpbnRpbmdQaGFzZUZvclByaW1hcnlMYXllcigp
IGNvbnN0CiB7CiAgICAgdW5zaWduZWQgcGhhc2UgPSBHcmFwaGljc0xheWVyUGFpbnRCYWNrZ3Jv
dW5kOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw5IEBAIHB1YmxpYzoK
ICAgICBib29sIGhhc1Njcm9sbGluZ0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxpbmdM
YXllcjsgfQogICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGluZ0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxpbmdMYXllci5nZXQoKTsgfQogICAgIEdyYXBoaWNzTGF5ZXIqIHNjcm9sbGlu
Z0NvbnRlbnRzTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGluZ0NvbnRlbnRzTGF5ZXIu
Z2V0KCk7IH0KKworICAgIHZvaWQgYXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcigpOworICAg
IHVpbnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbExheWVySUQ7
IH0KICAgICAKICAgICBib29sIGhhc01hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xh
eWVyICE9IDA7IH0KIApAQCAtMTkzLDYgKzE5Niw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCByZXF1
aXJlc1Njcm9sbENvcm5lckxheWVyKCkgY29uc3Q7CiAgICAgYm9vbCB1cGRhdGVTY3JvbGxpbmdM
YXllcnMoYm9vbCBzY3JvbGxpbmdMYXllcnMpOwogCisgICAgdm9pZCBkZXRhY2hGcm9tU2Nyb2xs
aW5nQ29vcmRpbmF0b3IoKTsKKwogICAgIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlIHBhaW50
aW5nUGhhc2VGb3JQcmltYXJ5TGF5ZXIoKSBjb25zdDsKICAgICAKICAgICBJbnRTaXplIGNvbnRl
bnRPZmZzZXRJbkNvbXBvc3RpbmdMYXllcigpIGNvbnN0OwpAQCAtMjU2LDYgKzI2MSw4IEBAIHBy
aXZhdGU6CiAgICAgT3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsaW5nTGF5ZXI7IC8vIG9u
bHkgdXNlZCBpZiB0aGUgbGF5ZXIgaXMgdXNpbmcgY29tcG9zaXRlZCBzY3JvbGxpbmcuCiAgICAg
T3duUHRyPEdyYXBoaWNzTGF5ZXI+IG1fc2Nyb2xsaW5nQ29udGVudHNMYXllcjsgLy8gb25seSB1
c2VkIGlmIHRoZSBsYXllciBpcyB1c2luZyBjb21wb3NpdGVkIHNjcm9sbGluZy4KIAorICAgIHVp
bnQ2NF90IG1fc2Nyb2xsTGF5ZXJJRDsKKwogICAgIEludFJlY3QgbV9jb21wb3NpdGVkQm91bmRz
OwogCiAgICAgYm9vbCBtX2FydGlmaWNpYWxseUluZmxhdGVkQm91bmRzOyAgICAgIC8vIGJvdW5k
cyBoYWQgdG8gYmUgbWFkZSBub24temVybyB0byBtYWtlIHRyYW5zZm9ybS1vcmlnaW4gd29yawpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9z
aXRvci5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTQsNiArNDk0LDEy
IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVCYWNraW4KIAogICAgICAgICAg
ICAgbGF5ZXItPmVuc3VyZUJhY2tpbmcoKTsKIAorICAgICAgICAgICAgaWYgKGxheWVyLT5pc1Jv
b3RMYXllcigpKSB7CisgICAgICAgICAgICAgICAgbGF5ZXItPmJhY2tpbmcoKS0+YXR0YWNoVG9T
Y3JvbGxpbmdDb29yZGluYXRvcigpOworICAgICAgICAgICAgICAgIGlmIChTY3JvbGxpbmdDb29y
ZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxpbmdDb29yZGluYXRv
cigpKQorICAgICAgICAgICAgICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCkpOworICAgICAgICAg
ICAgfQorCiAgICAgICAgICAgICAvLyBUaGlzIGxheWVyIGFuZCBhbGwgb2YgaXRzIGRlc2NlbmRh
bnRzIGhhdmUgY2FjaGVkIHJlcGFpbnRzIHJlY3RzIHRoYXQgYXJlIHJlbGF0aXZlIHRvCiAgICAg
ICAgICAgICAvLyB0aGUgcmVwYWludCBjb250YWluZXIsIHNvIGNoYW5nZSB3aGVuIGNvbXBvc2l0
aW5nIGNoYW5nZXM7IHdlIG5lZWQgdG8gdXBkYXRlIHRoZW0gaGVyZS4KICAgICAgICAgICAgIGlm
IChsYXllci0+cGFyZW50KCkpCkBAIC0yMzA4LDkgKzIzMTQsNiBAQCB2b2lkIFJlbmRlckxheWVy
Q29tcG9zaXRvcjo6YXR0YWNoUm9vdExhCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoU2Ny
b2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGluZ0Nvb3JkaW5hdG9yID0gdGhpcy0+c2Nyb2xsaW5n
Q29vcmRpbmF0b3IoKSkKLSAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jv
b3RMYXllckRpZENoYW5nZShtX3JlbmRlclZpZXctPmZyYW1lVmlldygpKTsKLQogICAgIG1fcm9v
dExheWVyQXR0YWNobWVudCA9IGF0dGFjaG1lbnQ7CiAgICAgcm9vdExheWVyQXR0YWNobWVudENo
YW5nZWQoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167674</attachid>
            <date>2012-10-08 19:36:18 -0700</date>
            <delta_ts>2012-10-09 11:26:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>for-review-9.txt</filename>
            <type>text/plain</type>
            <size>38375</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzMDY1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzOCBAQAorMjAxMi0xMC0wOCAgQmV0aCBE
YWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk4NDU3CisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgc2hv
dWxkIGJlIHJlZmVyZW5jZWQgdmlhIElEcyBvbiAKKyAgICAgICAgUmVuZGVyTGF5ZXJCYWNraW5n
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhc3NvY2lhdGVzIGFsbCBTY3JvbGxpbmdTdGF0ZU5vZGVzIHdpdGggYSAKKyAgICAgICAg
UmVuZGVyTGF5ZXJCYWNraW5nIHZpYSBhIEhhc2hNYXAgZnJvbSBSZW5kZXJMYXllckJhY2tpbmdz
IHRvIAorICAgICAgICBTY3JvbGxpbmdTdGF0ZU5vZGVzIG9uIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
LiBQcmlvciB0byB0aGlzIHBhdGNoLCB0aGUgCisgICAgICAgIHJvb3QgU2Nyb2xsaW5nU3RhdGVO
b2RlIHdhcyBjcmVhdGVkIGltbWVkaWF0ZWx5IHVwb24gY3JlYXRpb24gb2YgdGhlIAorICAgICAg
ICBTY3JvbGxpbmdDb29yZGluYXRvciwgYW5kIGl0IHdhcyBjb25zdGFudGx5IHJlLXVzZWQgZm9y
IGV2ZXJ5IG1haW4gCisgICAgICAgIEZyYW1lVmlldy4gVGhpcyBkb2Vzbid0IHdvcmsgaW4gdGhl
IG5ldyBtb2RlbCBzaW5jZSB0aGF0IGRvZXNuJ3QgCisgICAgICAgIGFsbG93IHRoYXQgU2Nyb2xs
aW5nU3RhdGVOb2RlIHRvIGhhdmUgYSBkZWZpbml0ZSBhc3NvY2lhdGlvbiB3aXRoIGEgCisgICAg
ICAgIFJlbmRlckxheWVyQmFja2luZy4gU28gdGhpcyBwYXRjaCBkb2VzIGFsc28gaW50cm9kdWNl
IHNvbWUgbGlmZXRpbWUgCisgICAgICAgIGRpZmZlcmVuY2VzIHdpdGggdGhlIFNjcm9sbGluZ1N0
YXRlTm9kZXMuCisKKyAgICAgICAgSWYgYSBwYWdlIGlzIGdvaW5nIGludG8gdGhlIHBhZ2UgY2Fj
aGUsIHdlIHNob3VsZCBjbGVhciB0aGUgc3RhdGUgCisgICAgICAgIHRyZWUuIFdoZW4gdGhlIHBh
Z2UgaXMgaW4gdGhlIGNhY2hlLCB3ZSB3b24ndCBoYXZlIGFjY2VzcyB0byB0aGUgCisgICAgICAg
IFJlbmRlckxheWVyQmFja2luZywgYW5kIHdlIGRvbid0IHdhbnQgdG8gYmUgZG9pbmcgYW55dGhp
bmcgd2l0aCB0aGUgCisgICAgICAgIFNjcm9sbGluZ1N0YXRlTm9kZXMgYW55d2F5LgorICAgICAg
ICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6c2V0SW5Q
YWdlQ2FjaGUpOgorCisgICAgICAgIFdoZW4gYSBwYWdlIGlzIHJlc3RvcmVkIGZyb20gdGhlIHBh
Z2UgY2FjaGUsIGNhbGwgCisgICAgICAgIGZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIHRv
IHJlLWNyZWF0ZSB0aGUgc3RhdGUgdHJlZS4KKyAgICAgICAgKiBsb2FkZXIvSGlzdG9yeUNvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUNvbnRyb2xsZXI6OnJlc3RvcmVT
Y3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSk6CisKKyAgICAgICAgVGhpcyBuZXcgRnJhbWVWaWV3
IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSBzY3JvbGxMYXllcklEIGZvciBhIGdpdmVuIEZyYW1l
Vmlldy4KKyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZVZpZXc6OnNjcm9sbExheWVySUQpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9GcmFtZVZpZXcuaDoKKyAgICAgICAgKEZyYW1lVmlldyk6CisKKyAgICAgICAgVGhlcmUg
aXMgYSBsb3Qgb2YgdW5mb3J0dW5hdGUgZmlkZGxpbmcgd2l0aCB0aGUgdGVycmlibGUgCisgICAg
ICAgIGlmLWRlZnMgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuIEkgYWRkZWQgYSBGSVhNRSB0byB0
aGUgaGVhZGVyCisgICAgICAgIG5vdGluZyBob3cgd2UgY2FuIGF2b2lkIHRoaXMgaW4gdGhlIGZ1
dHVyZS4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5jcHA6
CisKKyAgICAgICAgQWxsIG9mIHRoaXMgY29kZSB1c2VkIHRvIHJlZmVyIHRvIHRoZSByb290U3Rh
dGVOb2RlIGRpcmVjdGx5LiAKKyAgICAgICAgSW5zdGVhZCwgbm93IGl0IGxvb2tzIHVwIHRoZSBw
cm9wZXIgU2Nyb2xsaW5nU3RhdGVOb2RlIGZvciB0aGUgZ2l2ZW4gCisgICAgICAgIEZyYW1lVmll
dyBpbiB0aGUgSGFzaE1hcC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpmcmFtZVZpZXdXaGVlbEV2ZW50SGFuZGxlckNvdW50Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3Um9vdExheWVyRGlk
Q2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpyZXF1ZXN0
U2Nyb2xsUG9zaXRpb25VcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnJlY29tcHV0ZVdoZWVsRXZlbnRIYW5kbGVyQ291
bnRGb3JGcmFtZVZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6
OnNldFNjcm9sbExheWVyRm9yTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29y
ZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb25Gb3JOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhh
bmRsZXJDb3VudEZvck5vZGUpOgorCisgICAgICAgIFJldHVybnMgdGhlIGV4aXN0aW5nIFNjcm9s
bGluZ1N0YXRlTm9kZSBmb3IgYSBnaXZlbiBGcmFtZVZpZXcgYnkgCisgICAgICAgIGxvb2tpbmcg
aXQgdXAgaW4gdGhlIEhhc2hNYXAuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3
aGVuIGEgUmVuZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4gQXQgdGhhdCB0aW1lLCAKKyAg
ICAgICAgaXRzIGFzc29jaWF0ZWQgU2Nyb2xsaW5nU3RhdGVOb2RlIGlzIGRlc3Ryb3llZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9tU3RhdGVUcmVl
KToKKworICAgICAgICBjbGVhclN0YXRlVHJlZSgpIGNsZWFycyB0aGUgSGFzaE1hcCBhbmQgZGVz
dHJveXMgYWxsIG9mIHRoZSBub2RlcyBpbiAKKyAgICAgICAgdGhlIGN1cnJlbnQgc3RhdGUgdHJl
ZS4KKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpjbGVhclN0YXRlVHJl
ZSk6CisKKyAgICAgICAgQ3JlYXRlcyBhIG5ldyByb290IHN0YXRlIG5vZGUgZm9yIHRoZSBnaXZl
biBGcmFtZVZpZXcuCisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6ZW5z
dXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyk6CisKKyAgICAgICAgU29tZSBuZXcgZnVuY3Rp
b25zIGZvciB0aGUgbmV3IG5vZGUgc3R1ZmYuCisgICAgICAgICogcGFnZS9zY3JvbGxpbmcvU2Ny
b2xsaW5nQ29vcmRpbmF0b3IuaDoKKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdD
b29yZGluYXRvck5vbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnN1cHBvcnRzRml4ZWRQb3NpdGlv
bkxheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0TGF5
ZXJJc0NvbnRhaW5lckZvckZpeGVkUG9zaXRpb25MYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldExheWVySXNGaXhlZFRvQ29udGFpbmVyTGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNjcm9sbGFibGVBcmVhU2Ny
b2xsTGF5ZXJEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmRldGFjaEZyb21TdGF0ZVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjplbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVWaWV3KToKKyAgICAgICAgKFdl
YkNvcmU6OnNldFNjcm9sbFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6c2V0V2hlZWxF
dmVudEhhbmRsZXJDb3VudCk6CisKKyAgICAgICAgTmV3IHJlbW92ZSBmdW5jdGlvbnMgYXJlIHVz
ZWQgd2hlbiB0aGUgc2F0ZSB0cmVlIGlzIGNsZWFyZWQgYW5kIHdoZW4gCisgICAgICAgIGEgUmVu
ZGVyTGF5ZXJCYWNraW5nIGlzIGRlc3Ryb3llZC4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZU5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nU3RhdGVO
b2RlOjpyZW1vdmVDaGlsZCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBwYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZU5vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGlu
Z1N0YXRlTm9kZTo6aXNTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUpOgorICAgICAgICAoU2Ny
b2xsaW5nU3RhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGluZ1N0YXRlTm9kZTo6
cGFyZW50KToKKworICAgICAgICBOZXcgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIGNhc3Rpbmcg
dG8gU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rlcy4KKyAgICAgICAgKiBwYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Ny
b2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKToKKyAgICAgICAgKFdlYkNvcmUpOgorCisgICAgICAg
IE5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhIHJvb3Qgbm9kZSB1cG9uIGNyZWF0aW9u
IG9mIHRoZSAKKyAgICAgICAgU2Nyb2xsaW5nU3RhdGVUcmVlLiBXZSBub3cgd2FudCB0byB3YWl0
IHRvIGNyZWF0ZSB0aGUgcm9vdCBub2RlIHVudGlsIAorICAgICAgICB3ZSBoYXZlIGEgUmVuZGVy
TGF5ZXJCYWNraW5nIHRvIGFzc29jaWF0ZSBpdCB3aXRoLgorICAgICAgICAqIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxpbmdT
dGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxp
bmdTdGF0ZVRyZWU6OnJlbW92ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmg6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxpbmdTdGF0ZVRyZWU6OnNldFJvb3RTdGF0ZU5vZGUpOgorICAgICAgICAoU2Nyb2xsaW5n
U3RhdGVUcmVlKToKKworICAgICAgICBSZW5kZXJMYXllckJhY2tpbmcgaGFzIGEgbmV3IGRhdGEg
bWVtYmVyIGNhbGxlZCBtX3Njcm9sbExheWVySUQuIElmIAorICAgICAgICB0aGlzIFJlbmRlckxh
eWVyQmFja2luZyBpcyByZXByZXNlbnRlZCBpbiB0aGUgc2Nyb2xsaW5nIHRyZWUsIHRoZW4gCisg
ICAgICAgIHRoZSBJRCB3aXRoIGJlIHVuaXF1ZSBhbmQgbm9uLXplcm8uIAorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
TGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJCYWNraW5nOjp+UmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlU2Nyb2xsTGF5ZXJJRCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6YXR0YWNoVG9TY3JvbGxpbmdDb29yZGluYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OmRldGFjaEZyb21TY3JvbGxp
bmdDb29yZGluYXRvcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
OgorICAgICAgICAoUmVuZGVyTGF5ZXJCYWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6c2Nyb2xsTGF5ZXJJRCk6CisKKyAgICAgICAgTW92ZSB0aGUgY2FsbCB0
byBTY3JvbGxpbmdDb29yaWRpbmF0b3I6OmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSgpIAor
ICAgICAgICBmcm9tIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNoUm9vdExheWVyKCkgdG8g
CisgICAgICAgIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6IHVwZGF0ZUJhY2tpbmcoKS4gVGhlIHBy
b2JsZW0gd2l0aCB0aGUgb2xkIGNhbGwgCisgICAgICAgIHNpdGUgaXMgdGhhdCB0aGVyZSBpcyBu
byBiYWNraW5nIGF0IHRoYXQgdGltZSwgc28gd2UgYXJlIHRyeWluZyB0byBzZXQgCisgICAgICAg
IHN0YXRlIG9uIHRoZSByb290IHNjcm9sbGluZyBzdGF0ZSBub2RlIGJlZm9yZSB3ZSBoYXZlIGVu
b3VnaCAKKyAgICAgICAgaW5mb3JtYXRpb24gdG8gY3JlYXRlIHRoYXQgbm9kZSBhbmQgYWRkIGl0
IHRvIHRoZSBIYXNoTWFwLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVC
YWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6YXR0YWNo
Um9vdExheWVyKToKKwogMjAxMi0xMC0wOCAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIE51bGwtY2hlY2sgZm9yIERPTVdpbmRvdyBiZWZvcmUgZmVlZGluZyBpdCB0
byBGZWF0dXJlT2JzZXJ2ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9u
IDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwNTAsMTQgKzQwNTAsMjUgQEAgdm9pZCBEb2N1bWVudDo6c2V0SW5QYWdlQ2FjaGUo
Ym9vbCBmbGFnKQogICAgIG1faW5QYWdlQ2FjaGUgPSBmbGFnOwogCiAgICAgRnJhbWVWaWV3KiB2
ID0gdmlldygpOworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisKICAgICBpZiAoZmxh
ZykgewogICAgICAgICBBU1NFUlQoIW1fc2F2ZWRSZW5kZXJlcik7CiAgICAgICAgIG1fc2F2ZWRS
ZW5kZXJlciA9IHJlbmRlcmVyKCk7CiAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAvLyBG
SVhNRTogVGhlcmUgaXMgc29tZSBzY3JvbGxpbmcgcmVsYXRlZCB3b3JrIHRoYXQgbmVlZHMgdG8g
aGFwcGVuIHdoZW5ldmVyIGEgcGFnZSBnb2VzIGludG8gdGhlCisgICAgICAgICAgICAvLyBwYWdl
IGNhY2hlIGFuZCBzaW1pbGFyIHdvcmsgdGhhdCBuZWVkcyB0byBvY2N1ciB3aGVuIGl0IGNvbWVz
IG91dC4gVGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgd29yaworICAgICAgICAgICAgLy8gdGhhdCBu
ZWVkcyB0byBoYXBwZW4gd2hlbiB3ZSBlbnRlciwgYW5kIHRoZSB3b3JrIHRoYXQgbmVlZHMgdG8g
aGFwcGVuIHdoZW4gd2UgZXhpdCBpcyBpbgorICAgICAgICAgICAgLy8gSGlzdG9yeUNvbnRyb2xs
ZXI6OnJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpLiBJdCBjYW4ndCBiZSBoZXJl
IGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBpcworICAgICAgICAgICAgLy8gY2FsbGVkIHRvbyBlYXJs
eSBvbiBpbiB0aGUgcHJvY2VzcyBvZiBhIHBhZ2UgZXhpdGluZyB0aGUgY2FjaGUgZm9yIHRoYXQg
d29yayB0byBiZSBwb3NzaWJsZSBpbiB0aGlzCisgICAgICAgICAgICAvLyBmdW5jdGlvbi4gSXQg
d291bGQgYmUgbmljZSBpZiB0aGVyZSB3YXMgbW9yZSBzeW1tZXRyeSBoZXJlLgorICAgICAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk4Njk4CiAgICAg
ICAgICAgICB2LT5jYWNoZUN1cnJlbnRTY3JvbGxQb3NpdGlvbigpOwotICAgICAgICAgICAgaWYg
KHBhZ2UoKSAmJiBwYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUpCisgICAgICAgICAgICBp
ZiAocGFnZSAmJiBwYWdlLT5tYWluRnJhbWUoKSA9PSBtX2ZyYW1lKSB7CiAgICAgICAgICAgICAg
ICAgdi0+cmVzZXRTY3JvbGxiYXJzQW5kQ2xlYXJDb250ZW50c1NpemUoKTsKLSAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpZiAoU2Nyb2xsaW5nQ29vcmRpbmF0b3IqIHNjcm9sbGlu
Z0Nvb3JkaW5hdG9yID0gcGFnZS0+c2Nyb2xsaW5nQ29vcmRpbmF0b3IoKSkKKyAgICAgICAgICAg
ICAgICAgICAgc2Nyb2xsaW5nQ29vcmRpbmF0b3ItPmNsZWFyU3RhdGVUcmVlKCk7CisgICAgICAg
ICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICB2LT5yZXNldFNjcm9sbGJhcnMoKTsKICAgICAg
ICAgfQogICAgICAgICBtX3N0eWxlUmVjYWxjVGltZXIuc3RvcCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL0hpc3RvcnlDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvSGlzdG9yeUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBhZ2VD
YWNoZS5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgorI2luY2x1ZGUgIlNjcm9sbGluZ0Nvb3Jk
aW5hdG9yLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3Ry
aW5nLmg+CiAKQEAgLTEyMSwxMCArMTIyLDIwIEBAIHZvaWQgSGlzdG9yeUNvbnRyb2xsZXI6OnJl
c3RvcmVTY3JvbGxQb3MKICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgZ3JlYXQgdG8gd29yayBv
dXQgYSB3YXkgdG8gcHV0IHRoaXMgY29kZSBpbiBXZWJDb3JlIGluc3RlYWQgb2YgY2FsbGluZwog
ICAgIC8vIHRocm91Z2ggdG8gdGhlIGNsaWVudC4gSXQncyBjdXJyZW50bHkgdXNlZCBvbmx5IGZv
ciB0aGUgUERGIHZpZXcgb24gTWFjLgogICAgIG1fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+
cmVzdG9yZVZpZXdTdGF0ZSgpOwotICAgIAorCisgICAgLy8gRklYTUU6IFRoZXJlIGlzIHNvbWUg
c2Nyb2xsaW5nIHJlbGF0ZWQgd29yayB0aGF0IG5lZWRzIHRvIGhhcHBlbiB3aGVuZXZlciBhIHBh
Z2UgZ29lcyBpbnRvIHRoZQorICAgIC8vIHBhZ2UgY2FjaGUgYW5kIHNpbWlsYXIgd29yayB0aGF0
IG5lZWRzIHRvIG9jY3VyIHdoZW4gaXQgY29tZXMgb3V0LiBUaGlzIGlzIHdoZXJlIHdlIGRvIHRo
ZSB3b3JrCisgICAgLy8gdGhhdCBuZWVkcyB0byBoYXBwZW4gd2hlbiB3ZSBleGl0LCBhbmQgdGhl
IHdvcmsgdGhhdCBuZWVkcyB0byBoYXBwZW4gd2hlbiB3ZSBlbnRlciBpcyBpbgorICAgIC8vIERv
Y3VtZW50OjpzZXRJc0luUGFnZUNhY2hlKGJvb2wpLiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZXJl
IHdhcyBtb3JlIHN5bW1ldHJ5IGluIHRoZXNlIHNwb3RzLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODY5OAogICAgIGlmIChGcmFtZVZpZXcqIHZpZXcg
PSBtX2ZyYW1lLT52aWV3KCkpIHsKKyAgICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2Uo
KTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gbV9mcmFtZSkgewor
ICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRv
ciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCkpCisgICAgICAgICAgICAgICAgc2Nyb2xs
aW5nQ29vcmRpbmF0b3ItPmZyYW1lVmlld1Jvb3RMYXllckRpZENoYW5nZSh2aWV3KTsKKyAgICAg
ICAgfQorCiAgICAgICAgIGlmICghdmlldy0+d2FzU2Nyb2xsZWRCeVVzZXIoKSkgewotICAgICAg
ICAgICAgUGFnZSogcGFnZSA9IG1fZnJhbWUtPnBhZ2UoKTsKICAgICAgICAgICAgIGlmIChwYWdl
ICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IG1fZnJhbWUgJiYgbV9jdXJyZW50SXRlbS0+cGFnZVNj
YWxlRmFjdG9yKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKG1f
Y3VycmVudEl0ZW0tPnBhZ2VTY2FsZUZhY3RvcigpLCBtX2N1cnJlbnRJdGVtLT5zY3JvbGxQb2lu
dCgpKTsKICAgICAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAJ
KHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzgyLDYgKzc4MiwxOSBAQCBUaWxlZEJhY2tpbmcqIEZyYW1lVmll
dzo6dGlsZWRCYWNraW5nKCkKICAgICByZXR1cm4gYmFja2luZy0+Z3JhcGhpY3NMYXllcigpLT50
aWxlZEJhY2tpbmcoKTsKIH0KIAordWludDY0X3QgRnJhbWVWaWV3OjpzY3JvbGxMYXllcklEKCkg
Y29uc3QKK3sKKyAgICBSZW5kZXJWaWV3KiByb290ID0gcm9vdFJlbmRlcmVyKHRoaXMpOworICAg
IGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZW5kZXJMYXllckJhY2tpbmcq
IGJhY2tpbmcgPSByb290LT5sYXllcigpLT5iYWNraW5nKCk7CisgICAgaWYgKCFiYWNraW5nKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBiYWNraW5nLT5zY3JvbGxMYXllcklEKCk7
Cit9CisKICNpZiBFTkFCTEUoUlVCQkVSX0JBTkRJTkcpCiBHcmFwaGljc0xheWVyKiBGcmFtZVZp
ZXc6OmxheWVyRm9yT3ZlcmhhbmdBcmVhcygpIGNvbnN0CiB7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmgJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw2ICsxMzEsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0TmVlZHNPbmVTaG90RHJhd2luZ1N5bmNocm9uaXphdGlvbigpOwogCiAgICAgdmlydHVh
bCBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpIE9WRVJSSURFOworCisgICAgLy8gSW4gdGhl
IGZ1dHVyZSB3aGVuIGFueSBTY3JvbGxhYmxlQXJlYSBjYW4gaGF2ZSBhIG5vZGUgaW4gdGggU2Ny
b2xsaW5nVHJlZSwgdGhpcyBzaG91bGQKKyAgICAvLyBiZWNvbWUgYSB2aXJ0dWFsIGZ1bmN0aW9u
IG9uIFNjcm9sbGFibGVBcmVhLgorICAgIHVpbnQ2NF90IHNjcm9sbExheWVySUQoKSBjb25zdDsK
ICNlbmRpZgogCiAgICAgYm9vbCBoYXNDb21wb3NpdGVkQ29udGVudCgpIGNvbnN0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3Jk
aW5hdG9yLmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTcsNyAr
MTU3LDE0IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld0xheW8KICAgICAv
LyBhbGwgc2Nyb2xsYWJsZSBhcmVhcywgc3VjaCBhcyBzdWJmcmFtZXMsIG92ZXJmbG93IGRpdnMg
YW5kIGxpc3QgYm94ZXMuIFdlIG5lZWQgdG8gZG8gdGhpcyBldmVuIGlmIHRoZQogICAgIC8vIGZy
YW1lIHZpZXcgd2hvc2UgbGF5b3V0IHdhcyB1cGRhdGVkIGlzIG5vdCB0aGUgbWFpbiBmcmFtZS4K
ICAgICBSZWdpb24gbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPSBjb21wdXRlTm9uRmFzdFNjcm9s
bGFibGVSZWdpb24obV9wYWdlLT5tYWluRnJhbWUoKSwgSW50UG9pbnQoKSk7CisKKyNpZiBFTkFC
TEUoVEhSRUFERURfU0NST0xMSU5HKQorICAgIC8vIEluIHRoZSBmdXR1cmUsIHdlIG1heSB3YW50
IHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc2V0IG5vbi1mYXN0IHNjcm9sbGluZyByZWdpb25zIGZv
ciBtb3JlIHRoYW4KKyAgICAvLyBqdXN0IHRoZSByb290IG5vZGUuIEJ1dCByaWdodCBub3csIHRo
aXMgY29uY2VwdCBvbmx5IGFwcGxpZXMgdG8gdGhlIHJvb3QuCisgICAgc2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb25Gb3JOb2RlKG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLCBtX3Njcm9sbGluZ1N0
YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKTsKKyNlbHNlCiAgICAgc2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24obm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOworI2VuZGlmCiAKICAgICBpZiAoIWNv
b3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAgICAgICAgIHJldHVy
bjsKQEAgLTE3NCwxNSArMTgxLDIzIEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1l
Vmlld0xheW8KICAgICBzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0UmVjdCA9IEludFJlY3QoSW50
UG9pbnQoKSwgZnJhbWVWaWV3LT52aXNpYmxlQ29udGVudFJlY3QoKS5zaXplKCkpOwogICAgIHNj
cm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplID0gZnJhbWVWaWV3LT5jb250ZW50c1NpemUoKTsK
IAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5zY3JvbGxMYXllcklE
KCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2Nyb2xsUGFy
YW1ldGVyc0Zvck5vZGUoc2Nyb2xsUGFyYW1ldGVycywgbm9kZSk7CisjZWxzZQogICAgIHNldFNj
cm9sbFBhcmFtZXRlcnMoc2Nyb2xsUGFyYW1ldGVycyk7CisjZW5kaWYKIH0KIAotdm9pZCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6ZnJhbWVWaWV3V2hlZWxFdmVudEhhbmRsZXJDb3VudENoYW5nZWQo
RnJhbWVWaWV3KikKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1doZWVsRXZl
bnRIYW5kbGVyQ291bnRDaGFuZ2VkKEZyYW1lVmlldyogZnJhbWVWaWV3KQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CiAgICAgQVNTRVJUKG1fcGFnZSk7CiAKLSAgICByZWNvbXB1dGVX
aGVlbEV2ZW50SGFuZGxlckNvdW50KCk7CisgICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJD
b3VudEZvckZyYW1lVmlldyhmcmFtZVZpZXcpOwogfQogCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5h
dG9yOjpmcmFtZVZpZXdIYXNTbG93UmVwYWludE9iamVjdHNEaWRDaGFuZ2UoRnJhbWVWaWV3KiBm
cmFtZVZpZXcpCkBAIC0yMDcsNiArMjIyLDcgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZnJhbWVWaWV3Rml4ZQogICAgIHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25P
bk1haW5UaHJlYWQoKTsKIH0KIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCiBzdGF0
aWMgR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoRnJhbWVWaWV3KiBmcmFt
ZVZpZXcpCiB7CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpAQCAtMjIzLDYgKzIz
OSw3IEBAIHN0YXRpYyBHcmFwaGljc0xheWVyKiBzY3JvbGxMYXllckZvckZyYW0KICAgICByZXR1
cm4gMDsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZy
YW1lVmlld1Jvb3RMYXllckRpZENoYW5nZShGcmFtZVZpZXcqIGZyYW1lVmlldykKIHsKQEAgLTIz
MiwxMCArMjQ5LDE5IEBAIHZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OmZyYW1lVmlld1Jvb3QK
ICAgICBpZiAoIWNvb3JkaW5hdGVzU2Nyb2xsaW5nRm9yRnJhbWVWaWV3KGZyYW1lVmlldykpCiAg
ICAgICAgIHJldHVybjsKIAorI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgLy8g
SWYgdGhlIHJvb3QgbGF5ZXIgZG9lcyBub3QgaGF2ZSBhIFNjcm9sbGluZ1N0YXRlTm9kZSwgdGhl
biB3ZSBzaG91bGQgY3JlYXRlIG9uZS4KKyAgICBlbnN1cmVSb290U3RhdGVOb2RlRm9yRnJhbWVW
aWV3KGZyYW1lVmlldyk7CisgICAgQVNTRVJUKG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3Rh
dGVOb2RlKCkpOworI2VuZGlmCisKICAgICBmcmFtZVZpZXdMYXlvdXRVcGRhdGVkKGZyYW1lVmll
dyk7Ci0gICAgcmVjb21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpOworICAgIHJlY29tcHV0
ZVdoZWVsRXZlbnRIYW5kbGVyQ291bnRGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KTsKICAgICB1cGRh
dGVTaG91bGRVcGRhdGVTY3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7Ci0gICAgc2V0
U2Nyb2xsTGF5ZXIoc2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSk7CisgICAgCisj
aWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICBzZXRTY3JvbGxMYXllckZvck5vZGUo
c2Nyb2xsTGF5ZXJGb3JGcmFtZVZpZXcoZnJhbWVWaWV3KSwgc3RhdGVOb2RlRm9ySUQoZnJhbWVW
aWV3LT5zY3JvbGxMYXllcklEKCkpKTsKKyNlbmRpZgogfQogCiBib29sIFNjcm9sbGluZ0Nvb3Jk
aW5hdG9yOjpyZXF1ZXN0U2Nyb2xsUG9zaXRpb25VcGRhdGUoRnJhbWVWaWV3KiBmcmFtZVZpZXcs
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbikKQEAgLTI1NCw3ICsyODAsMTEgQEAgYm9v
bCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVxdWVzdFNjcm9sbAogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5z
ZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5pblBy
b2dyYW1tYXRpY1Njcm9sbCgpKTsKKyAgICBTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIHN0
YXRlTm9kZSA9IHN0YXRlTm9kZUZvcklEKGZyYW1lVmlldy0+c2Nyb2xsTGF5ZXJJRCgpKTsKKyAg
ICBpZiAoIXN0YXRlTm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3RhdGVOb2Rl
LT5zZXRSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbiwgZnJhbWVWaWV3LT5p
blByb2dyYW1tYXRpY1Njcm9sbCgpKTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwog
ICAgIHJldHVybiB0cnVlOwogI2Vsc2UKQEAgLTMwMCw5ICszMzAsMTAgQEAgdm9pZCBTY3JvbGxp
bmdDb29yZGluYXRvcjo6dXBkYXRlTWFpbkZyYQogICAgIGZyYW1lVmlldy0+c2V0SW5Qcm9ncmFt
bWF0aWNTY3JvbGwob2xkUHJvZ3JhbW1hdGljU2Nyb2xsKTsKIH0KIAorI2lmIEVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCiB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVNYWluRnJh
bWVTY3JvbGxMYXllclBvc2l0aW9uKCkKIHsKLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpICYmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAKICAgICBpZiAoIW1fcGFn
ZSkKQEAgLTMxNiw2ICszNDcsNyBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1cGRhdGVN
YWluRnJhCiAgICAgICAgIHNjcm9sbExheWVyLT5zZXRQb3NpdGlvbigtZnJhbWVWaWV3LT5zY3Jv
bGxQb3NpdGlvbigpKTsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQgU2Nyb2xsaW5nQ29vcmRp
bmF0b3I6OnVwZGF0ZU1haW5GcmFtZVNjcm9sbFBvc2l0aW9uQW5kU2Nyb2xsTGF5ZXJQb3NpdGlv
bigpCiB7CkBAIC0zNTYsMTQgKzM4OCwyMiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpo
YW5kbGVXaGVlbEV2CiB9CiAjZW5kaWYKIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6cmVj
b21wdXRlV2hlZWxFdmVudEhhbmRsZXJDb3VudCgpCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9y
OjpyZWNvbXB1dGVXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyog
ZnJhbWVWaWV3KQogeworI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCisgICAgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlID0gc3RhdGVOb2RlRm9ySUQoZnJhbWVWaWV3LT5z
Y3JvbGxMYXllcklEKCkpOworICAgIGlmICghbm9kZSkKKyAgICAgICAgcmV0dXJuOworCiAgICAg
dW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCA9IDA7CiAgICAgZm9yIChGcmFtZSogZnJh
bWUgPSBtX3BhZ2UtPm1haW5GcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLT50
cmF2ZXJzZU5leHQoKSkgewogICAgICAgICBpZiAoZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAg
ICAgICB3aGVlbEV2ZW50SGFuZGxlckNvdW50ICs9IGZyYW1lLT5kb2N1bWVudCgpLT53aGVlbEV2
ZW50SGFuZGxlckNvdW50KCk7CiAgICAgfQotICAgIHNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQo
d2hlZWxFdmVudEhhbmRsZXJDb3VudCk7CisgICAgc2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ck5vZGUod2hlZWxFdmVudEhhbmRsZXJDb3VudCwgbm9kZSk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShmcmFtZVZpZXcpOworI2VuZGlmCiB9CiAKIGJvb2wgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6
Omhhc05vbkxheWVyRml4ZWRPYmplY3RzKEZyYW1lVmlldyogZnJhbWVWaWV3KQpAQCAtNDE2LDQw
ICs0NTYsOTkgQEAgdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Rm9yY2VNYWluVAogICAg
IHVwZGF0ZVNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJlYWQoKTsKIH0K
IAorU2Nyb2xsaW5nTm9kZUlEIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjp1bmlxdWVTY3JvbGxMYXll
cklEKCkKK3sKKyAgICBzdGF0aWMgU2Nyb2xsaW5nTm9kZUlEIHVuaXF1ZVNjcm9sbExheWVySUQg
PSAxOworICAgIHJldHVybiB1bmlxdWVTY3JvbGxMYXllcklEKys7Cit9CisKICNpZiBFTkFCTEUo
VEhSRUFERURfU0NST0xMSU5HKQotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xs
TGF5ZXIoR3JhcGhpY3NMYXllciogc2Nyb2xsTGF5ZXIpCitTY3JvbGxpbmdTdGF0ZVNjcm9sbGlu
Z05vZGUqIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzdGF0ZU5vZGVGb3JJRChTY3JvbGxpbmdOb2Rl
SUQgc2Nyb2xsTGF5ZXJJRCkKK3sKKyAgICBpZiAoIXNjcm9sbExheWVySUQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgSGFzaE1hcDxTY3JvbGxpbmdOb2RlSUQsIFNjcm9sbGluZ1N0YXRlTm9k
ZSo+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fc3RhdGVOb2RlTWFwLmZpbmQoc2Nyb2xsTGF5ZXJJ
RCk7CisgICAgaWYgKGl0ID09IG1fc3RhdGVOb2RlTWFwLmVuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogbm9kZSA9IGl0LT52YWx1ZTsKKyAgICByZXR1
cm4gdG9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUobm9kZSk7Cit9CisKK1Njcm9sbGluZ05v
ZGVJRCBTY3JvbGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9k
ZUlEIHNjcm9sbExheWVySUQpCit7CisgICAgQVNTRVJUKHNjcm9sbExheWVySUQpOworCisgICAg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBleGlzdGluZ05vZGUgPSBzdGF0ZU5vZGVGb3JJ
RChzY3JvbGxMYXllcklEKTsKKyAgICBpZiAoZXhpc3RpbmdOb2RlICYmIGV4aXN0aW5nTm9kZSA9
PSBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICByZXR1cm4g
c2Nyb2xsTGF5ZXJJRDsKKworICAgIGNsZWFyU3RhdGVUcmVlKCk7CisKKyAgICAvLyBGSVhNRTog
SW4gdGhlIGZ1dHVyZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGhhdmUgdG8gdGFrZSBhIHBhcmVudCBJ
RCBzbyB0aGF0IGl0IGNhbgorICAgIC8vIGFwcGVuZCB0aGUgbm9kZSBpbiB0aGUgYXBwcm9wcmlh
dGUgc3BvdCBpbiB0aGUgc3RhdGUgdHJlZS4gRm9yIG5vdyB3ZSBhbHdheXMgYXNzdW1lCisgICAg
Ly8gdGhpcyBpcyB0aGUgcm9vdCBub2RlLgorICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5zZXRS
b290U3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTo6Y3JlYXRlKG1fc2Nyb2xs
aW5nU3RhdGVUcmVlLmdldCgpKSk7CisgICAgbV9zdGF0ZU5vZGVNYXAuc2V0KHNjcm9sbExheWVy
SUQsIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCkpOworICAgIHJldHVybiBz
Y3JvbGxMYXllcklEOworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpkZXRhY2hGcm9t
U3RhdGVUcmVlKFNjcm9sbGluZ05vZGVJRCBzY3JvbGxMYXllcklEKQoreworICAgIGlmICghc2Ny
b2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlID0gbV9zdGF0ZU5vZGVNYXAudGFrZShzY3JvbGxMYXllcklEKTsKKworICAgIC8vIEZJWE1F
OiByZW1vdmVOb2RlKCkgd2lsbCBkZXN0cm95IGNoaWxkcmVuLCBhbmQgdGhvc2UgY2hpbGRyZW4g
bWlnaHQgc3RpbGwgYmUgaW4gdGhlIEhhc2hNYXAuCisgICAgLy8gVGhpcyB3aWxsIGJlIGEgYmln
IHByb2JsZW0gb25jZSB0aGVyZSBhcmUgYWN0dWFsbHkgY2hpbGRyZW4gaW4gdGhlIHRyZWUuCisg
ICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJlbW92ZU5vZGUobm9kZSk7Cit9CisKK3ZvaWQgU2Ny
b2xsaW5nQ29vcmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKKyAgICBtX3N0YXRlTm9kZU1h
cC5jbGVhcigpOworICAgIGlmIChTY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUqIG5vZGUgPSBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpKQorICAgICAgICBtX3Njcm9sbGlu
Z1N0YXRlVHJlZS0+cmVtb3ZlTm9kZShub2RlKTsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqIGZyYW1lVmll
dykKK3sKKyAgICBhdHRhY2hUb1N0YXRlVHJlZShmcmFtZVZpZXctPnNjcm9sbExheWVySUQoKSk7
Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyRm9yTm9kZShH
cmFwaGljc0xheWVyKiBzY3JvbGxMYXllciwgU2Nyb2xsaW5nU3RhdGVOb2RlKiBub2RlKQogewot
ICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFNjcm9sbExheWVy
KHNjcm9sbExheWVyKTsKKyAgICBub2RlLT5zZXRTY3JvbGxMYXllcihzY3JvbGxMYXllcik7CiAg
ICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAotdm9pZCBTY3JvbGxpbmdDb29yZGlu
YXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCit2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5v
ZGUoY29uc3QgUmVnaW9uJiByZWdpb24sIFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSogbm9k
ZSkKIHsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXROb25G
YXN0U2Nyb2xsYWJsZVJlZ2lvbihyZWdpb24pOworICAgIG5vZGUtPnNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKHJlZ2lvbik7CiAgICAgc2NoZWR1bGVUcmVlU3RhdGVDb21taXQoKTsKIH0KIAot
dm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3Jv
bGxQYXJhbWV0ZXJzJiBzY3JvbGxQYXJhbWV0ZXJzKQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRv
cjo6c2V0U2Nyb2xsUGFyYW1ldGVyc0Zvck5vZGUoY29uc3QgU2Nyb2xsUGFyYW1ldGVycyYgc2Ny
b2xsUGFyYW1ldGVycywgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBub2RlKQogewotICAg
IC8vIEZJWE1FOiBJbiB0aGUgZnV0dXJlLCB0aGlzIGZ1bmN0aW9uIGFuZCBhbGwgb2YgdGhlIG90
aGVyIGZ1bmN0aW9ucyBpbiB0aGlzIGNsYXNzIG5lZWQgdG8KLSAgICAvLyBoYW5kbGUgbW9yZSB0
aGFuIGp1c3QgdGhlIHJvb3Qgbm9kZS4gCi0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RT
dGF0ZU5vZGUoKS0+c2V0SG9yaXpvbnRhbFNjcm9sbEVsYXN0aWNpdHkoc2Nyb2xsUGFyYW1ldGVy
cy5ob3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eSk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUt
PnJvb3RTdGF0ZU5vZGUoKS0+c2V0VmVydGljYWxTY3JvbGxFbGFzdGljaXR5KHNjcm9sbFBhcmFt
ZXRlcnMudmVydGljYWxTY3JvbGxFbGFzdGljaXR5KTsKLSAgICBtX3Njcm9sbGluZ1N0YXRlVHJl
ZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIYXNFbmFibGVkSG9yaXpvbnRhbFNjcm9sbGJhcihzY3Jv
bGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKTsKLSAgICBtX3Njcm9s
bGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRIYXNFbmFibGVkVmVydGljYWxTY3Jv
bGxiYXIoc2Nyb2xsUGFyYW1ldGVycy5oYXNFbmFibGVkVmVydGljYWxTY3JvbGxiYXIpOwotICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldEhvcml6b250YWxTY3Jv
bGxiYXJNb2RlKHNjcm9sbFBhcmFtZXRlcnMuaG9yaXpvbnRhbFNjcm9sbGJhck1vZGUpOwotICAg
IG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVOb2RlKCktPnNldFZlcnRpY2FsU2Nyb2xs
YmFyTW9kZShzY3JvbGxQYXJhbWV0ZXJzLnZlcnRpY2FsU2Nyb2xsYmFyTW9kZSk7Ci0KLSAgICBt
X3Njcm9sbGluZ1N0YXRlVHJlZS0+cm9vdFN0YXRlTm9kZSgpLT5zZXRTY3JvbGxPcmlnaW4oc2Ny
b2xsUGFyYW1ldGVycy5zY3JvbGxPcmlnaW4pOwotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5y
b290U3RhdGVOb2RlKCktPnNldFZpZXdwb3J0UmVjdChzY3JvbGxQYXJhbWV0ZXJzLnZpZXdwb3J0
UmVjdCk7Ci0gICAgbV9zY3JvbGxpbmdTdGF0ZVRyZWUtPnJvb3RTdGF0ZU5vZGUoKS0+c2V0Q29u
dGVudHNTaXplKHNjcm9sbFBhcmFtZXRlcnMuY29udGVudHNTaXplKTsKKyAgICBub2RlLT5zZXRI
b3Jpem9udGFsU2Nyb2xsRWxhc3RpY2l0eShzY3JvbGxQYXJhbWV0ZXJzLmhvcml6b250YWxTY3Jv
bGxFbGFzdGljaXR5KTsKKyAgICBub2RlLT5zZXRWZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkoc2Ny
b2xsUGFyYW1ldGVycy52ZXJ0aWNhbFNjcm9sbEVsYXN0aWNpdHkpOworICAgIG5vZGUtPnNldEhh
c0VuYWJsZWRIb3Jpem9udGFsU2Nyb2xsYmFyKHNjcm9sbFBhcmFtZXRlcnMuaGFzRW5hYmxlZEhv
cml6b250YWxTY3JvbGxiYXIpOworICAgIG5vZGUtPnNldEhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9s
bGJhcihzY3JvbGxQYXJhbWV0ZXJzLmhhc0VuYWJsZWRWZXJ0aWNhbFNjcm9sbGJhcik7CisgICAg
bm9kZS0+c2V0SG9yaXpvbnRhbFNjcm9sbGJhck1vZGUoc2Nyb2xsUGFyYW1ldGVycy5ob3Jpem9u
dGFsU2Nyb2xsYmFyTW9kZSk7CisgICAgbm9kZS0+c2V0VmVydGljYWxTY3JvbGxiYXJNb2RlKHNj
cm9sbFBhcmFtZXRlcnMudmVydGljYWxTY3JvbGxiYXJNb2RlKTsKKworICAgIG5vZGUtPnNldFNj
cm9sbE9yaWdpbihzY3JvbGxQYXJhbWV0ZXJzLnNjcm9sbE9yaWdpbik7CisgICAgbm9kZS0+c2V0
Vmlld3BvcnRSZWN0KHNjcm9sbFBhcmFtZXRlcnMudmlld3BvcnRSZWN0KTsKKyAgICBub2RlLT5z
ZXRDb250ZW50c1NpemUoc2Nyb2xsUGFyYW1ldGVycy5jb250ZW50c1NpemUpOwogICAgIHNjaGVk
dWxlVHJlZVN0YXRlQ29tbWl0KCk7CiB9CiAKIAotdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh1bnNpZ25lZCB3aGVlbEV2ZW50SGFuZGxlckNvdW50
KQordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudEZv
ck5vZGUodW5zaWduZWQgd2hlZWxFdmVudEhhbmRsZXJDb3VudCwgU2Nyb2xsaW5nU3RhdGVTY3Jv
bGxpbmdOb2RlKiBub2RlKQogewotICAgIG1fc2Nyb2xsaW5nU3RhdGVUcmVlLT5yb290U3RhdGVO
b2RlKCktPnNldFdoZWVsRXZlbnRIYW5kbGVyQ291bnQod2hlZWxFdmVudEhhbmRsZXJDb3VudCk7
CisgICAgbm9kZS0+c2V0V2hlZWxFdmVudEhhbmRsZXJDb3VudCh3aGVlbEV2ZW50SGFuZGxlckNv
dW50KTsKICAgICBzY2hlZHVsZVRyZWVTdGF0ZUNvbW1pdCgpOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgJ
KHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ0Nvb3JkaW5hdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogCiAjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRl
ZC5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNlbmRpZgpAQCAtNDUsNiArNDYsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIHVuc2lnbmVkIE1haW5UaHJlYWRTY3Jv
bGxpbmdSZWFzb25zOwordHlwZWRlZiB1aW50NjRfdCBTY3JvbGxpbmdOb2RlSUQ7CiAKIGNsYXNz
IEZyYW1lVmlldzsKIGNsYXNzIEdyYXBoaWNzTGF5ZXI7CkBAIC01Miw2ICs1NCw4IEBAIGNsYXNz
IFBhZ2U7CiBjbGFzcyBSZWdpb247CiBjbGFzcyBTY3JvbGxhYmxlQXJlYTsKIGNsYXNzIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZTsKK2NsYXNzIFNjcm9sbGluZ1N0YXRlTm9kZTsKK2NsYXNz
IFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZTsKIGNsYXNzIFNjcm9sbGluZ1N0YXRlVHJlZTsK
IAogI2lmIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJTkcpCkBAIC0xMzcsMTUgKzE0MSwyOCBAQCBw
dWJsaWM6CiAgICAgICAgIElzSW1hZ2VEb2N1bWVudCA9IDEgPDwgNAogICAgIH07CiAKKyAgICAv
LyBHZW5lcmF0ZXMgYSB1bmlxdWUgaWQgdG8gYXNzb2NpYXRlIHdpdGggYSBsYXllciB0aGF0IHdp
bGwgYmUgcmVwcmVzZW50ZWQgYnkgYSBub2RlIGluIHRoZSBzY3JvbGxpbmcgdHJlZS4KKyAgICBT
Y3JvbGxpbmdOb2RlSUQgdW5pcXVlU2Nyb2xsTGF5ZXJJRCgpOworCisgICAgLy8gVGhlc2UgZnVu
Y3Rpb25zIGFyZSB1c2VkIHRvIGluZGljdGFlIHRoYXQgYSBsYXllciBzaG91bGQgYmUgKG9yIHNo
b3VsZCBub3QgbG9uZ2VyIGJlKSByZXByZXNlbnRlZCBieSBhIG5vZGUKKyAgICAvLyBpbiB0aGUg
c2Nyb2xsaW5nIHRyZWUuCisgICAgU2Nyb2xsaW5nTm9kZUlEIGF0dGFjaFRvU3RhdGVUcmVlKFNj
cm9sbGluZ05vZGVJRCk7CisgICAgdm9pZCBkZXRhY2hGcm9tU3RhdGVUcmVlKFNjcm9sbGluZ05v
ZGVJRCk7CisKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpcGVzIG91dCB0aGUgY3VycmVudCB0cmVl
LgorICAgIHZvaWQgY2xlYXJTdGF0ZVRyZWUoKTsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBT
Y3JvbGxpbmdDb29yZGluYXRvcihQYWdlKik7CiAKLSAgICB2b2lkIHJlY29tcHV0ZVdoZWVsRXZl
bnRIYW5kbGVyQ291bnQoKTsKKyAgICB2b2lkIGVuc3VyZVJvb3RTdGF0ZU5vZGVGb3JGcmFtZVZp
ZXcoRnJhbWVWaWV3Kik7CisgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiBzdGF0ZU5v
ZGVGb3JJRChTY3JvbGxpbmdOb2RlSUQpOworCisgICAgdm9pZCByZWNvbXB1dGVXaGVlbEV2ZW50
SGFuZGxlckNvdW50Rm9yRnJhbWVWaWV3KEZyYW1lVmlldyopOwogICAgIGJvb2wgaGFzTm9uTGF5
ZXJGaXhlZE9iamVjdHMoRnJhbWVWaWV3Kik7CiAgICAgdm9pZCB1cGRhdGVTaG91bGRVcGRhdGVT
Y3JvbGxMYXllclBvc2l0aW9uT25NYWluVGhyZWFkKCk7CiAKICAgICB2b2lkIHNldFNjcm9sbExh
eWVyKEdyYXBoaWNzTGF5ZXIqKTsKLSAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9u
KGNvbnN0IFJlZ2lvbiYpOwogCiAgICAgc3RydWN0IFNjcm9sbFBhcmFtZXRlcnMgewogICAgICAg
ICBTY3JvbGxFbGFzdGljaXR5IGhvcml6b250YWxTY3JvbGxFbGFzdGljaXR5OwpAQCAtMTYzLDgg
KzE4MCwyNCBAQCBwcml2YXRlOgogICAgICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKICAgICB9
OwogCisgICAgLy8gRklYTUU6IFRoZXNlIGZ1bmN0aW9ucyBhcmUgdXNlZCBvbmx5IGJ5IFNjcm9s
bGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uIFNjcm9sbGluZ0Nvb3JkaW5hdG9yCisgICAgLy8gbm93
IHVzZXMgbmV3IHZlcnNpb25zOiBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9yTm9kZSgpIGFuZCBzZXRX
aGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSgpLgorICAgIC8vIFRvIHJlc29sdmUgdGhpcyBh
bmQgYWxsIG9mIHRoZSBpZi1kZWZzIGluIHRoaXMgY2xhc3MsIHdlIHNob3VsZCBtYWtlIFNjcm9s
bGluZ0Nvb3JkaW5hdG9yCisgICAgLy8ganVzdCBiZSBhIHR5cGVkZWYgdGhhdCBkZWZpbmVzIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yTWFjIHRvIGJlIFNjcm9sbGluZ0Nvb3JkaW5hdG9yLCBhbmQgc2Ft
ZQorICAgIC8vIGZvciBDaHJvbWl1bSBhbmQgb3RoZXIgcGxhdGZvcm1zLiBBbnkgc2hhcmVkIGZ1
bmN0aW9uYWxpdHkgY2FuIGJlIGluIHNvbWV0aGluZyBjYWxsZWQgCisgICAgLy8gU2Nyb2xsaW5n
Q29vcmRpbmF0b3JCYXNlIHdoaWNoIGFsbCBvZiB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb25z
IHdpbGwgaW5oZXJpdCBmcm9tLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD05ODcwMAogICAgIHZvaWQgc2V0U2Nyb2xsUGFyYW1ldGVycyhjb25zdCBTY3Jv
bGxQYXJhbWV0ZXJzJik7CiAgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50KHVuc2ln
bmVkKTsKKyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKGNvbnN0IFJlZ2lvbiYp
OworCisjaWYgRU5BQkxFKFRIUkVBREVEX1NDUk9MTElORykKKyAgICB2b2lkIHNldFNjcm9sbExh
eWVyRm9yTm9kZShHcmFwaGljc0xheWVyKiwgU2Nyb2xsaW5nU3RhdGVOb2RlKik7CisgICAgdm9p
ZCBzZXROb25GYXN0U2Nyb2xsYWJsZVJlZ2lvbkZvck5vZGUoY29uc3QgUmVnaW9uJiwgU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisgICAgdm9pZCBzZXRTY3JvbGxQYXJhbWV0ZXJzRm9y
Tm9kZShjb25zdCBTY3JvbGxQYXJhbWV0ZXJzJiwgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2Rl
Kik7CisgICAgdm9pZCBzZXRXaGVlbEV2ZW50SGFuZGxlckNvdW50Rm9yTm9kZSh1bnNpZ25lZCwg
U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisjZW5kaWYKKwogICAgIHZvaWQgc2V0U2hv
dWxkVXBkYXRlU2Nyb2xsTGF5ZXJQb3NpdGlvbk9uTWFpblRocmVhZChNYWluVGhyZWFkU2Nyb2xs
aW5nUmVhc29ucyk7CiAKICAgICB2b2lkIHVwZGF0ZU1haW5GcmFtZVNjcm9sbExheWVyUG9zaXRp
b24oKTsKQEAgLTE4Miw2ICsyMTUsOCBAQCBwcml2YXRlOgogICAgIE93blB0cjxTY3JvbGxpbmdT
dGF0ZVRyZWU+IG1fc2Nyb2xsaW5nU3RhdGVUcmVlOwogICAgIFJlZlB0cjxTY3JvbGxpbmdUcmVl
PiBtX3Njcm9sbGluZ1RyZWU7CiAgICAgVGltZXI8U2Nyb2xsaW5nQ29vcmRpbmF0b3I+IG1fc2Ny
b2xsaW5nU3RhdGVUcmVlQ29tbWl0dGVyVGltZXI7CisKKyAgICBIYXNoTWFwPFNjcm9sbGluZ05v
ZGVJRCwgU2Nyb2xsaW5nU3RhdGVOb2RlKj4gbV9zdGF0ZU5vZGVNYXA7CiAjZW5kaWYKIAogICAg
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yUHJpdmF0ZSogbV9wcml2YXRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nQ29vcmRpbmF0b3JOb25lLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdDb29yZGluYXRv
ck5vbmUuY3BwCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9s
bGluZy9TY3JvbGxpbmdDb29yZGluYXRvck5vbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwx
NCArNTksNiBAQCB2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXROb25GYXN0U2NyCiB7CiB9
CiAKLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbFBhcmFtZXRlcnMoY29uc3Qg
U2Nyb2xsUGFyYW1ldGVycyYpCi17Ci19Ci0KLXZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNl
dFdoZWVsRXZlbnRIYW5kbGVyQ291bnQodW5zaWduZWQpCi17Ci19Ci0KIHZvaWQgU2Nyb2xsaW5n
Q29vcmRpbmF0b3I6OnNldFNob3VsZFVwZGF0ZVNjcm9sbExheWVyUG9zaXRpb25Pbk1haW5UaHJl
YWQoTWFpblRocmVhZFNjcm9sbGluZ1JlYXNvbnMpCiB7CiB9CkBAIC04Nyw2ICs3OSwzMiBAQCB2
b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRMYXllcklzRml4CiB2b2lkIFNjcm9sbGluZ0Nv
b3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlYVNjcm9sbExheWVyRGlkQ2hhbmdlKFNjcm9sbGFibGVB
cmVhKiwgR3JhcGhpY3NMYXllciopCiB7CiB9CisKK1Njcm9sbGluZ05vZGVJRCBTY3JvbGxpbmdD
b29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQoreworICAg
IHJldHVybiBpZDsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNoRnJvbVN0
YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29vcmRpbmF0
b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6
ZW5zdXJlUm9vdFN0YXRlTm9kZUZvckZyYW1lVmlldyhGcmFtZVZpZXcqKQoreworfQorCit2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBh
cmFtZXRlcnMmKQoreworfQorCit2b2lkIFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRXaGVlbEV2
ZW50SGFuZGxlckNvdW50KHVuc2lnbmVkKQoreworfQorCiAjZW5kaWYgLy8gIUVOQUJMRShUSFJF
QURFRF9TQ1JPTExJTkcpCiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1N0YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysg
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzcsNiArNzcsMjEgQEAgdm9pZCBTY3JvbGxpbmdTdGF0ZU5vZGU6OmFw
cGVuZENoaWxkKFBhcwogICAgIG1fY2hpbGRyZW4tPmFwcGVuZChjaGlsZE5vZGUpOwogfQogCit2
b2lkIFNjcm9sbGluZ1N0YXRlTm9kZTo6cmVtb3ZlQ2hpbGQoU2Nyb2xsaW5nU3RhdGVOb2RlKiBu
b2RlKQoreworICAgIGlmICghbV9jaGlsZHJlbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KHNpemVfdCBpbmRleCA9IG1fY2hpbGRyZW4tPmZpbmQobm9kZSkpIHsKKyAgICAgICAgbV9jaGls
ZHJlbi0+cmVtb3ZlKGluZGV4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHNpemVf
dCBzaXplID0gbV9jaGlsZHJlbi0+c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgKytpKQorICAgICAgICBtX2NoaWxkcmVuLT5hdChpKS0+cmVtb3ZlQ2hpbGQobm9kZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURF
RF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxp
bmdTdGF0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9TY3JvbGxpbmdTdGF0ZU5vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIFNjcm9sbGluZ1N0YXRlTm9kZShTY3JvbGxpbmdT
dGF0ZVRyZWUqKTsKICAgICB2aXJ0dWFsIH5TY3JvbGxpbmdTdGF0ZU5vZGUoKTsKIAorICAgIHZp
cnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZSgpIHsgcmV0dXJuIGZhbHNl
OyB9CisKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPiBjbG9uZUFu
ZFJlc2V0Tm9kZSgpID0gMDsKICAgICB2b2lkIGNsb25lQW5kUmVzZXRDaGlsZE5vZGVzKFNjcm9s
bGluZ1N0YXRlTm9kZSopOwogCkBAIC02NiwxMCArNjgsMTIgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0U2Nyb2xsaW5nU3RhdGVUcmVlKFNjcm9sbGluZ1N0YXRlVHJlZSogdHJlZSkgeyBtX3Njcm9s
bGluZ1N0YXRlVHJlZSA9IHRyZWU7IH0KIAogICAgIFNjcm9sbGluZ1N0YXRlTm9kZSogcGFyZW50
KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KLQogICAgIHZvaWQgc2V0UGFyZW50KFNjcm9s
bGluZ1N0YXRlTm9kZSogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisKICAgICB2b2lk
IGFwcGVuZENoaWxkKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVOb2RlPik7CiAKKyAgICB2b2lk
IHJlbW92ZUNoaWxkKFNjcm9sbGluZ1N0YXRlTm9kZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgU2Ny
b2xsaW5nU3RhdGVOb2RlKFNjcm9sbGluZ1N0YXRlTm9kZSopOwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9sbGluZ05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVNjcm9s
bGluZ05vZGUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4
LDYgKzU4LDggQEAgcHVibGljOgogICAgICAgICBSZXF1ZXN0ZWRTY3JvbGxQb3NpdGlvbiA9IDEg
PDwgMTIsCiAgICAgfTsKIAorICAgIHZpcnR1YWwgYm9vbCBpc1Njcm9sbGluZ1N0YXRlU2Nyb2xs
aW5nTm9kZSgpIE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHZpcnR1YWwgUGFzc093
blB0cjxTY3JvbGxpbmdTdGF0ZU5vZGU+IGNsb25lQW5kUmVzZXROb2RlKCkgT1ZFUlJJREU7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgaGFzQ2hhbmdlZFByb3BlcnRpZXMoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX2NoYW5nZWRQcm9wZXJ0aWVzOyB9CkBAIC0xMzQsNiArMTM2LDE1IEBAIHByaXZh
dGU6CiAgICAgSW50UG9pbnQgbV9zY3JvbGxPcmlnaW47CiB9OwogCitpbmxpbmUgU2Nyb2xsaW5n
U3RhdGVTY3JvbGxpbmdOb2RlKiB0b1Njcm9sbGluZ1N0YXRlU2Nyb2xsaW5nTm9kZShTY3JvbGxp
bmdTdGF0ZU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IG5vZGUtPmlzU2Nyb2xs
aW5nU3RhdGVTY3JvbGxpbmdOb2RlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY3JvbGxp
bmdTdGF0ZVNjcm9sbGluZ05vZGUqPihub2RlKTsKK30KKyAgICAKKy8vIFRoaXMgd2lsbCBjYXRj
aCBhbnlvbmUgZG9pbmcgYW4gdW5uZWNlc3NhcnkgY2FzdC4KK3ZvaWQgdG9TY3JvbGxpbmdTdGF0
ZVNjcm9sbGluZ05vZGUoY29uc3QgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKik7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShUSFJFQURFRF9TQ1JPTExJ
TkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRy
ZWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL1Njcm9s
bGluZ1N0YXRlVHJlZS5jcHAJKHJldmlzaW9uIDEzMDY1MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1N0YXRlVHJlZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDggKzM2LDcgQEAgUGFzc093blB0cjxTY3JvbGxpbmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogfQog
CiBTY3JvbGxpbmdTdGF0ZVRyZWU6OlNjcm9sbGluZ1N0YXRlVHJlZSgpCi0gICAgOiBtX3Jvb3RT
dGF0ZU5vZGUoU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlOjpjcmVhdGUodGhpcykpCi0gICAg
LCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzKGZhbHNlKQorICAgIDogbV9oYXNDaGFuZ2VkUHJvcGVy
dGllcyhmYWxzZSkKIHsKIH0KIApAQCAtNTcsNiArNTYsMTggQEAgUGFzc093blB0cjxTY3JvbGxp
bmdTdGF0ZVRyZWU+IFNjcm9sbGluZwogICAgIHJldHVybiB0cmVlU3RhdGUucmVsZWFzZSgpOwog
fQogCit2b2lkIFNjcm9sbGluZ1N0YXRlVHJlZTo6cmVtb3ZlTm9kZShTY3JvbGxpbmdTdGF0ZU5v
ZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG1fcm9vdFN0YXRlTm9kZSk7CisKKyAgICBpZiAobm9k
ZSA9PSBtX3Jvb3RTdGF0ZU5vZGUpIHsKKyAgICAgICAgbV9yb290U3RhdGVOb2RlID0gMDsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fcm9vdFN0YXRlTm9kZS0+cmVtb3ZlQ2hpbGQo
bm9kZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShU
SFJFQURFRF9TQ1JPTExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9T
Y3JvbGxpbmdTdGF0ZVRyZWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL3Nj
cm9sbGluZy9TY3JvbGxpbmdTdGF0ZVRyZWUuaAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNl
L1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nU3RhdGVUcmVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTU1LDE4ICs1NSwxOSBAQCBwdWJsaWM6CiAgICAgflNjcm9sbGluZ1N0YXRlVHJlZSgp
OwogCiAgICAgU2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlKiByb290U3RhdGVOb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9yb290U3RhdGVOb2RlLmdldCgpOyB9CisgICAgdm9pZCBzZXRSb290U3Rh
dGVOb2RlKFBhc3NPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiByb290U3RhdGVO
b2RlKSB7IG1fcm9vdFN0YXRlTm9kZSA9IHJvb3RTdGF0ZU5vZGU7IH0KIAogICAgIC8vIENvcGll
cyB0aGUgY3VycmVudCB0cmVlIHN0YXRlIGFuZCBjbGVhcnMgdGhlIGNoYW5nZWQgcHJvcGVydGll
cyBtYXNrIGluIHRoZSBvcmlnaW5hbC4KICAgICBQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlVHJl
ZT4gY29tbWl0KCk7CiAKKyAgICB2b2lkIHJlbW92ZU5vZGUoU2Nyb2xsaW5nU3RhdGVOb2RlKik7
CisKICAgICB2b2lkIHNldEhhc0NoYW5nZWRQcm9wZXJ0aWVzKGJvb2wgY2hhbmdlZFByb3BlcnRp
ZXMpIHsgbV9oYXNDaGFuZ2VkUHJvcGVydGllcyA9IGNoYW5nZWRQcm9wZXJ0aWVzOyB9CiAgICAg
Ym9vbCBoYXNDaGFuZ2VkUHJvcGVydGllcygpIGNvbnN0IHsgcmV0dXJuIG1faGFzQ2hhbmdlZFBy
b3BlcnRpZXM7IH0KIAogcHJpdmF0ZToKICAgICBTY3JvbGxpbmdTdGF0ZVRyZWUoKTsKIAotICAg
IHZvaWQgc2V0Um9vdFN0YXRlTm9kZShQYXNzT3duUHRyPFNjcm9sbGluZ1N0YXRlU2Nyb2xsaW5n
Tm9kZT4gcm9vdFN0YXRlTm9kZSkgeyBtX3Jvb3RTdGF0ZU5vZGUgPSByb290U3RhdGVOb2RlOyB9
Ci0KICAgICBPd25QdHI8U2Nyb2xsaW5nU3RhdGVTY3JvbGxpbmdOb2RlPiBtX3Jvb3RTdGF0ZU5v
ZGU7CiAgICAgYm9vbCBtX2hhc0NoYW5nZWRQcm9wZXJ0aWVzOwogfTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL2Nocm9t
aXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21pdW0uY3BwCShyZXZpc2lvbiAxMzA2NTMpCisr
KyBTb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGlu
YXRvckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYyLDQgKzI2MiwxOSBAQCB2b2lk
IFNjcm9sbGluZ0Nvb3JkaW5hdG9yOjpzY3JvbGxhYmxlQXJlCiAgICAgfQogfQogCisvLyBGSVhN
RTogV2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5nIHRoZXNlIHN0dWJzIHdoZW4gd2UgcmVzb2x2
ZSB0aGUgaWYtZGVmIHNvdXAgaW4gU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTg3MDAKK1Njcm9sbGluZ05vZGVJRCBTY3Jv
bGxpbmdDb29yZGluYXRvcjo6YXR0YWNoVG9TdGF0ZVRyZWUoU2Nyb2xsaW5nTm9kZUlEIGlkKQor
eworICAgIHJldHVybiBpZDsKK30KKwordm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6ZGV0YWNo
RnJvbVN0YXRlVHJlZShTY3JvbGxpbmdOb2RlSUQpCit7Cit9CisKK3ZvaWQgU2Nyb2xsaW5nQ29v
cmRpbmF0b3I6OmNsZWFyU3RhdGVUcmVlKCkKK3sKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAJKHJldmlzaW9uIDEzMDY1
MykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NSw2ICs5NSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpt
X2NyZWF0aW5nUHJpbWEKIAogUmVuZGVyTGF5ZXJCYWNraW5nOjpSZW5kZXJMYXllckJhY2tpbmco
UmVuZGVyTGF5ZXIqIGxheWVyKQogICAgIDogbV9vd25pbmdMYXllcihsYXllcikKKyAgICAsIG1f
c2Nyb2xsTGF5ZXJJRCgwKQogICAgICwgbV9hcnRpZmljaWFsbHlJbmZsYXRlZEJvdW5kcyhmYWxz
ZSkKICAgICAsIG1faXNNYWluRnJhbWVSZW5kZXJWaWV3TGF5ZXIoZmFsc2UpCiAgICAgLCBtX3Vz
aW5nVGlsZWRDYWNoZUxheWVyKGZhbHNlKQpAQCAtMTM4LDYgKzEzOSw3IEBAIFJlbmRlckxheWVy
QmFja2luZzo6flJlbmRlckxheWVyQmFja2luZygKICAgICB1cGRhdGVGb3JlZ3JvdW5kTGF5ZXIo
ZmFsc2UpOwogICAgIHVwZGF0ZU1hc2tMYXllcihmYWxzZSk7CiAgICAgdXBkYXRlU2Nyb2xsaW5n
TGF5ZXJzKGZhbHNlKTsKKyAgICBkZXRhY2hGcm9tU2Nyb2xsaW5nQ29vcmRpbmF0b3IoKTsKICAg
ICBkZXN0cm95R3JhcGhpY3NMYXllcnMoKTsKIH0KIApAQCAtOTYzLDYgKzk2NSw0MSBAQCBib29s
IFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlU2Nyb2xsaW5nCiAgICAgcmV0dXJuIGxheWVyQ2hh
bmdlZDsKIH0KIAordm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OmF0dGFjaFRvU2Nyb2xsaW5nQ29v
cmRpbmF0b3IoKQoreworICAgIC8vIElmIG1fc2Nyb2xsTGF5ZXJJRCBub24temVybywgdGhlbiB0
aGlzIGJhY2tpbmcgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byB0aGUgU2Nyb2xsaW5nQ29vcmRpbmF0
b3IuCisgICAgaWYgKG1fc2Nyb2xsTGF5ZXJJRCkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGFn
ZSogcGFnZSA9IHJlbmRlcmVyKCktPmZyYW1lKCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIFNjcm9sbGluZ0Nvb3JkaW5hdG9yKiBzY3JvbGxpbmdDb29y
ZGluYXRvciA9IHBhZ2UtPnNjcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgaWYgKCFzY3JvbGxp
bmdDb29yZGluYXRvcikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fc2Nyb2xsTGF5ZXJJ
RCA9IHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5hdHRhY2hUb1N0YXRlVHJlZShzY3JvbGxpbmdDb29y
ZGluYXRvci0+dW5pcXVlU2Nyb2xsTGF5ZXJJRCgpKTsKK30KKwordm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OmRldGFjaEZyb21TY3JvbGxpbmdDb29yZGluYXRvcigpCit7CisgICAgLy8gSWYgbV9z
Y3JvbGxMYXllcklEIGlzIDAsIHRoZW4gdGhpcyBiYWNraW5nIGlzIG5vdCBhdHRhY2hlZCB0byB0
aGUgU2Nyb2xsaW5nQ29vcmRpbmF0b3IuCisgICAgaWYgKCFtX3Njcm9sbExheWVySUQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFBhZ2UqIHBhZ2UgPSByZW5kZXJlcigpLT5mcmFtZSgpLT5wYWdl
KCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBTY3JvbGxpbmdDb29y
ZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSBwYWdlLT5zY3JvbGxpbmdDb29yZGluYXRv
cigpOworICAgIGlmICghc2Nyb2xsaW5nQ29vcmRpbmF0b3IpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5kZXRhY2hGcm9tU3RhdGVUcmVlKG1fc2Nyb2xsTGF5
ZXJJRCk7CisgICAgbV9zY3JvbGxMYXllcklEID0gMDsKK30KKwogR3JhcGhpY3NMYXllclBhaW50
aW5nUGhhc2UgUmVuZGVyTGF5ZXJCYWNraW5nOjpwYWludGluZ1BoYXNlRm9yUHJpbWFyeUxheWVy
KCkgY29uc3QKIHsKICAgICB1bnNpZ25lZCBwaGFzZSA9IEdyYXBoaWNzTGF5ZXJQYWludEJhY2tn
cm91bmQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5oCShyZXZpc2lvbiAxMzA2NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDkgQEAgcHVibGlj
OgogICAgIGJvb2wgaGFzU2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbGlu
Z0xheWVyOyB9CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xsaW5nTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX3Njcm9sbGluZ0xheWVyLmdldCgpOyB9CiAgICAgR3JhcGhpY3NMYXllciogc2Nyb2xs
aW5nQ29udGVudHNMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsaW5nQ29udGVudHNMYXll
ci5nZXQoKTsgfQorCisgICAgdm9pZCBhdHRhY2hUb1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCk7Cisg
ICAgdWludDY0X3Qgc2Nyb2xsTGF5ZXJJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xsTGF5ZXJJ
RDsgfQogICAgIAogICAgIGJvb2wgaGFzTWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNr
TGF5ZXIgIT0gMDsgfQogCkBAIC0xOTMsNiArMTk2LDggQEAgcHJpdmF0ZToKICAgICBib29sIHJl
cXVpcmVzU2Nyb2xsQ29ybmVyTGF5ZXIoKSBjb25zdDsKICAgICBib29sIHVwZGF0ZVNjcm9sbGlu
Z0xheWVycyhib29sIHNjcm9sbGluZ0xheWVycyk7CiAKKyAgICB2b2lkIGRldGFjaEZyb21TY3Jv
bGxpbmdDb29yZGluYXRvcigpOworCiAgICAgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UgcGFp
bnRpbmdQaGFzZUZvclByaW1hcnlMYXllcigpIGNvbnN0OwogICAgIAogICAgIEludFNpemUgY29u
dGVudE9mZnNldEluQ29tcG9zdGluZ0xheWVyKCkgY29uc3Q7CkBAIC0yNTYsNiArMjYxLDggQEAg
cHJpdmF0ZToKICAgICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxpbmdMYXllcjsgLy8g
b25seSB1c2VkIGlmIHRoZSBsYXllciBpcyB1c2luZyBjb21wb3NpdGVkIHNjcm9sbGluZy4KICAg
ICBPd25QdHI8R3JhcGhpY3NMYXllcj4gbV9zY3JvbGxpbmdDb250ZW50c0xheWVyOyAvLyBvbmx5
IHVzZWQgaWYgdGhlIGxheWVyIGlzIHVzaW5nIGNvbXBvc2l0ZWQgc2Nyb2xsaW5nLgogCisgICAg
dWludDY0X3QgbV9zY3JvbGxMYXllcklEOworCiAgICAgSW50UmVjdCBtX2NvbXBvc2l0ZWRCb3Vu
ZHM7CiAKICAgICBib29sIG1fYXJ0aWZpY2lhbGx5SW5mbGF0ZWRCb3VuZHM7ICAgICAgLy8gYm91
bmRzIGhhZCB0byBiZSBtYWRlIG5vbi16ZXJvIHRvIG1ha2UgdHJhbnNmb3JtLW9yaWdpbiB3b3Jr
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAkocmV2aXNpb24gMTMwNjUzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw2ICs0OTQs
MTIgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUJhY2tpbgogCiAgICAgICAg
ICAgICBsYXllci0+ZW5zdXJlQmFja2luZygpOwogCisgICAgICAgICAgICBpZiAobGF5ZXItPmlz
Um9vdExheWVyKCkpIHsKKyAgICAgICAgICAgICAgICBsYXllci0+YmFja2luZygpLT5hdHRhY2hU
b1Njcm9sbGluZ0Nvb3JkaW5hdG9yKCk7CisgICAgICAgICAgICAgICAgaWYgKFNjcm9sbGluZ0Nv
b3JkaW5hdG9yKiBzY3JvbGxpbmdDb29yZGluYXRvciA9IHRoaXMtPnNjcm9sbGluZ0Nvb3JkaW5h
dG9yKCkpCisgICAgICAgICAgICAgICAgICAgIHNjcm9sbGluZ0Nvb3JkaW5hdG9yLT5mcmFtZVZp
ZXdSb290TGF5ZXJEaWRDaGFuZ2UobV9yZW5kZXJWaWV3LT5mcmFtZVZpZXcoKSk7CisgICAgICAg
ICAgICB9CisKICAgICAgICAgICAgIC8vIFRoaXMgbGF5ZXIgYW5kIGFsbCBvZiBpdHMgZGVzY2Vu
ZGFudHMgaGF2ZSBjYWNoZWQgcmVwYWludHMgcmVjdHMgdGhhdCBhcmUgcmVsYXRpdmUgdG8KICAg
ICAgICAgICAgIC8vIHRoZSByZXBhaW50IGNvbnRhaW5lciwgc28gY2hhbmdlIHdoZW4gY29tcG9z
aXRpbmcgY2hhbmdlczsgd2UgbmVlZCB0byB1cGRhdGUgdGhlbSBoZXJlLgogICAgICAgICAgICAg
aWYgKGxheWVyLT5wYXJlbnQoKSkKQEAgLTIzMDgsOSArMjMxNCw2IEBAIHZvaWQgUmVuZGVyTGF5
ZXJDb21wb3NpdG9yOjphdHRhY2hSb290TGEKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChT
Y3JvbGxpbmdDb29yZGluYXRvciogc2Nyb2xsaW5nQ29vcmRpbmF0b3IgPSB0aGlzLT5zY3JvbGxp
bmdDb29yZGluYXRvcigpKQotICAgICAgICBzY3JvbGxpbmdDb29yZGluYXRvci0+ZnJhbWVWaWV3
Um9vdExheWVyRGlkQ2hhbmdlKG1fcmVuZGVyVmlldy0+ZnJhbWVWaWV3KCkpOwotCiAgICAgbV9y
b290TGF5ZXJBdHRhY2htZW50ID0gYXR0YWNobWVudDsKICAgICByb290TGF5ZXJBdHRhY2htZW50
Q2hhbmdlZCgpOwogfQo=
</data>
<flag name="review"
          id="180417"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="180432"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>