<?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>17066</bug_id>
          
          <creation_ts>2008-01-29 07:45:11 -0800</creation_ts>
          <short_desc>[GTK] Improve frameloader signals</short_desc>
          <delta_ts>2014-04-08 17:55:39 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>14141</blocked>
    
    <blocked>16826</blocked>
    
    <blocked>20306</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Christian Dywan">christian</reporter>
          <assigned_to name="Christian Dywan">christian</assigned_to>
          <cc>alp</cc>
    
    <cc>andersca</cc>
    
    <cc>a.renevier</cc>
    
    <cc>brian.holt</cc>
    
    <cc>cosimoc</cc>
    
    <cc>jmalonzo</cc>
    
    <cc>marco.barisione</cc>
    
    <cc>mjs</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pclouds</cc>
    
    <cc>tofu.linden</cc>
    
    <cc>uws+webkit</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>68580</commentid>
    <comment_count>0</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-29 07:45:11 -0800</bug_when>
    <thetext>The signals related to loading and loading progress need improvement. The following points should be addressed in this bug:

1. Signal naming is confusing.
2. Providing context about what is loaded, ie WebKitEventLoad.
3. There is no error reporting no failure.
4. &quot;load-done&quot; is missing from WebView for no obvious reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68583</commentid>
    <comment_count>1</comment_count>
      <attachid>18763</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-29 07:54:29 -0800</bug_when>
    <thetext>Created attachment 18763
Improve load signals

This is a suggestion for improving the above mentioned issues.

This patch makes names all signals consistently, emits &apos;load-done&apos; on the WebView, passes a WebKitEventLoad* structure to each signal and reports errors with a GError*.

Note that this does not address missing error reporting in the http backend.

I am not fully decided myself on whether this specific patch is what we want, particularly I&apos;m concerned with &apos;load-progress-changed&apos; and critique is very welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68587</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-29 10:03:28 -0800</bug_when>
    <thetext>I think the handling of provisional loads needs improved a bit here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68798</commentid>
    <comment_count>3</comment_count>
      <attachid>18763</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-30 05:40:25 -0800</bug_when>
    <thetext>Comment on attachment 18763
Improve load signals

Clearing review for now, taking a closer look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68918</commentid>
    <comment_count>4</comment_count>
      <attachid>18817</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-01-31 08:42:23 -0800</bug_when>
    <thetext>Created attachment 18817
Improve load signals Take 2

After a more in-depth look, updated patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68998</commentid>
    <comment_count>5</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-31 18:15:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=18817) [edit]
&gt; Improve load signals Take 2
&gt; 
&gt; After a more in-depth look, updated patch.
&gt; 


Careful with the trailing backslash in the .pro:

         platform/network/curl/ResourceHandleManager.cpp \
+        platform/network/gtk/ResourceErrorGtk.cpp
         platform/graphics/cairo/AffineTransformCairo.cpp \

The operator overload looks like it could lead to leaks -- didn&apos;t look closely yet though.

Will try look over this soon. Feedback from others would be great too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69141</commentid>
    <comment_count>6</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-01 17:18:49 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; The operator overload looks like it could lead to leaks -- didn&apos;t look closely
&gt; yet though.

Furthermore, you probably want to use g_error_new_literal() rather than g_error_new().

&gt; 
&gt; Will try look over this soon. Feedback from others would be great too.
&gt; 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69222</commentid>
    <comment_count>7</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-02 21:12:54 -0800</bug_when>
    <thetext>The &quot;event&quot; structures are pretty unconventional outside of GDK, but it&apos;s an interesting idea. I&apos;d be interested to hear rationales for some of the signal name changes as well.

I think I like the WEBKIT_LOAD_STATE, it reminds me of how what Epiphany maps our current mess of signals to internally.

I think a cleanup of these signals is important, and I really want to pull anyone who is hacking a GTK+ browser into this discussion, since we only get one shot at designing this. Epiphany/Galeon hackers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69486</commentid>
    <comment_count>8</comment_count>
      <attachid>18937</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-02-05 11:49:23 -0800</bug_when>
    <thetext>Created attachment 18937
Improve load signals Take 3

One part, terminology wise, was the distinction between &quot;progress&quot; and &quot;load&quot;. The former is global in relation to the view and not part of the &quot;load&quot; as such. The original &apos;load-finished&apos; was not the end of the load but in fact the end of the &quot;progress&quot;. So I replaced it to match web frame&apos;s &quot;load-done&quot; in the proper meaning. In general it&apos;s now possible to use a web view or a web frame on its own since both receive all meaningful signals.

As for enhancements, I&apos;m introducing &quot;redirect-scheduled&quot;, &quot;redirect-done&quot; and &quot;redirect-cancelled&quot; and &quot;document-load-done&quot;. Further more errors are reported in the form of gerrors.

I tried to explain all the signals in code, ie. gtkdoc. If that is not sufficient/ clear please say so.

A few slightly higher level changes:
. Renaming &apos;status-bar-text-changed&apos; to &quot;statusbar-text-changed&quot;
. Removing &apos;selection-changed&apos; and &apos;icon-loaded&apos; since they are virtually dead code; better introduce them again properly or they just cause confusion.
. Adding all signals to the web view struct so they can be cleanly overridden in derived classes.
. A bit of related code/ docs cleanup.

Note that this patch is not 100% clean, I&apos;m sure I overlooked one or two things. I am going to fix these soon while testing a bit more and depending on your feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69488</commentid>
    <comment_count>9</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-02-05 12:00:17 -0800</bug_when>
    <thetext>For reference, especially useful if you aren&apos;t particularly familiar with this part of WebCore, the docs for Mac&apos;s delegate that corresponds to our frame loading signals.

http://developer.apple.com/documentation/Cocoa/Reference/WebKit/Protocols/WebFrameLoadDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/cat/WebFrameLoadDelegate</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69606</commentid>
    <comment_count>10</comment_count>
      <attachid>18937</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-06 13:56:05 -0800</bug_when>
    <thetext>Comment on attachment 18937
Improve load signals Take 3

Clearing the request flag so the issues discussed on IRC can be fixed (avoiding event structs, removing the dead enum, explicitly creating GErrors with a static func for now and anything else I mentioned).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69616</commentid>
    <comment_count>11</comment_count>
      <attachid>18972</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-02-06 15:38:15 -0800</bug_when>
    <thetext>Created attachment 18972
Improve load signals Take 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>69618</commentid>
    <comment_count>12</comment_count>
      <attachid>18973</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-02-06 15:41:09 -0800</bug_when>
    <thetext>Created attachment 18973
Improve load signals Take 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>70587</commentid>
    <comment_count>13</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-02-13 17:48:48 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=18973) [edit]
&gt; Improve load signals Take 5
&gt; 

Can you propose these changes on the mailing list, explaining the changes and requesting review from the Obj-C API and loader hackers? I think mjs and andersca can help the most here (by luck they&apos;re also both familiar with GObject).

The old code limited the usefulness of WebView in anything but simple applications. I hope we get it right this time.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>82661</commentid>
    <comment_count>14</comment_count>
      <attachid>18973</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-06-08 13:46:18 -0700</bug_when>
    <thetext>Comment on attachment 18973
Improve load signals Take 5

Clearing review request. We&apos;ll need to take a fresh look at the loader API as discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83770</commentid>
    <comment_count>15</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-06-18 10:13:25 -0700</bug_when>
    <thetext>The patch emits the WebKitWebView signals only for the main frame but WebKit doesn&apos;t have a way to notify the application of the creation of new frames, so it&apos;s impossible to get those signals for sub frames.
IMO we have 3 possible ways to solve this:
1 - Emit the WebView signals for all the WebFrames.
2 - Emit something like new-frame when a new frame is created so the application can monitor the creation of new frames.
3 - Like 2 but still emit the WebView signals for all the WebFrames.

If we do 2 I suggest to remove the WebFrame argument from the signals, as it will always be the main frame.


I think that being able to use GError (like the mac port uses NSError) would be nice but it&apos;s not a real object so we cannot subclass it. This means that we cannot add new properties/methods if needed, so if we plan to extend it in the future (do we really need to extend it?) maybe it&apos;s better to add a WebKitWebError object.


It would be nice to provide a default error page if there is an error, but in this case the application should be able to suppress the default behaviour.
How to do this? My suggestions are:
1 - Split the load-done in load-done and load-error. Then callback for load-error returns a boolean saying if the default behaviour is wanted or not. This has also the advantage of not using load-done for errors as name load-done seems to imply success (at least to me).
2 - Add a &quot;show-errors&quot; property to WebView (or maybe WebSettings). If the property is set to TRUE (the default) then WebKit will show error pages in case of errors, else the application will have to handle errors.


Note that to make error handling work we have also to modify the soup back-end (now it uses internal error codes) and the curl one (it uses the CURL error codes and somewhere it creates a null ResourceError).


The patch doesn&apos;t implement dispatchDidFailLoading that is called for every resource that was not loaded (images, html pages, etc.). A signal for that could be useful but we can add it later.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84289</commentid>
    <comment_count>16</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-06-24 11:31:38 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; The patch emits the WebKitWebView signals only for the main frame but WebKit
&gt; doesn&apos;t have a way to notify the application of the creation of new frames, so
&gt; it&apos;s impossible to get those signals for sub frames.
&gt; IMO we have 3 possible ways to solve this:
&gt; 1 - Emit the WebView signals for all the WebFrames.
&gt; 2 - Emit something like new-frame when a new frame is created so the
&gt; application can monitor the creation of new frames.
&gt; 3 - Like 2 but still emit the WebView signals for all the WebFrames.
&gt; 
&gt; If we do 2 I suggest to remove the WebFrame argument from the signals, as it
&gt; will always be the main frame.

I think we should actually discard the WebFrame* argument from all WebView signals and add new-frame here. Average applications won&apos;t care about frames at all and it makes no sense to send dozens of signals for each frame. This way, an application interested in frames can still connect to new-frame and put their callbacks on as many frames as needed.

&gt; I think that being able to use GError (like the mac port uses NSError) would be
&gt; nice but it&apos;s not a real object so we cannot subclass it. This means that we
&gt; cannot add new properties/methods if needed, so if we plan to extend it in the
&gt; future (do we really need to extend it?) maybe it&apos;s better to add a
&gt; WebKitWebError object.

I think we should go for a WebKitWebError. The way GError is designed is hardly enough for our use cases. Usually functions fill in a nulled &amp;GError reference. It&apos;s not suitable for our cases, for instance as an argument in signal callbacks.

&gt; It would be nice to provide a default error page if there is an error, but in
&gt; this case the application should be able to suppress the default behaviour.
&gt; How to do this? My suggestions are:
&gt; 1 - Split the load-done in load-done and load-error. Then callback for
&gt; load-error returns a boolean saying if the default behaviour is wanted or not.
&gt; This has also the advantage of not using load-done for errors as name load-done
&gt; seems to imply success (at least to me).
&gt; 2 - Add a &quot;show-errors&quot; property to WebView (or maybe WebSettings). If the
&gt; property is set to TRUE (the default) then WebKit will show error pages in case
&gt; of errors, else the application will have to handle errors.

I think having *only* load-done with a trailing error struct/ object is the most intuitive approach. For instance it seems easy to confuse if you need to connect to two signals only to stop your loading animation. A boolean return could indicate whether or not WebKit should take care of eventual error pages or not.

&gt; The patch doesn&apos;t implement dispatchDidFailLoading that is called for every
&gt; resource that was not loaded (images, html pages, etc.). A signal for that
&gt; could be useful but we can add it later.

I think that&apos;s out of the scope of this bug actually, unless there is an aspect of it that conflicts/ interferes with the frame loader signals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86080</commentid>
    <comment_count>17</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-07-16 11:40:20 -0700</bug_when>
    <thetext>I added some debug messages to the frame loader to understand how it works, signals we already have are reported after &quot;-&gt;&quot;.


EMPTY PAGE
==========
When an empty page (no images, scripts, etc.) or about:blank is loaded you get the following call sequence:

FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=2, request=http://localhost/public/empty.html)
FrameLoaderClient::dispatchWillSendRequest(identifier=2, request=http://localhost/public/empty.html, response=)
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFinishLoading(identifier=2)

The provisional load stage is used when WebKit doesn&apos;t still now the mime type, etc. of the new page.

FrameLoaderClient::assignIdentifierToInitialRequest() is called when a new resource is going to be loaded, probably we are going to keep a hash map to associate identifiers with resources.

The name load-committed is not very clear but the signal is quite important, from a comment in the source code: This means the URI is valid and successfully identify the page that&apos;s going to be loaded.


PAGE WITH AN IMAGE
==================
FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=5, request=http://localhost/public/test.html)
FrameLoaderClient::dispatchWillSendRequest(identifier=5, request=http://localhost/public/test.html, response=)
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(50)
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::dispatchDidFinishLoading(identifier=5)
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=6, request=http://localhost/public/test.jpg)
FrameLoaderClient::dispatchWillSendRequest(identifier=6, request=http://localhost/public/test.jpg, response=)
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(57)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(65)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(72)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(79)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(83)
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFinishLoading(identifier=6)

Same as before but the frame loader is also informed of the loading of the image.


PAGE WITH A NON-EXISTING IMAGE
==============================
FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=9, request=http://localhost/public/test.html)
FrameLoaderClient::dispatchWillSendRequest(identifier=9, request=http://localhost/public/test.html, response=)
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(50)
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::dispatchDidFinishLoading(identifier=9)
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=10, request=http://example.invalid/no.jpg)
FrameLoaderClient::dispatchWillSendRequest(identifier=10, request=http://example.invalid/no.jpg, response=)
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFailLoading(identifier=10)

FrameLoaderClient::dispatchDidFailLoading() is called for the not existing image.


PAGE WITH AN INVALID IMAGE
==========================
FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=7, request=http://localhost/public/test.html)
FrameLoaderClient::dispatchWillSendRequest(identifier=7, request=http://localhost/public/test.html, response=)
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(50)
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::dispatchDidFinishLoading(identifier=7)
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=8, request=http://localhost/public/no.jpg)
FrameLoaderClient::dispatchWillSendRequest(identifier=8, request=http://localhost/public/no.jpg, response=)
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(59)
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFinishLoading(identifier=8)

The image does not exist but the server returns a 404 html page for it. This cannot be showed but FrameLoaderClient::dispatchDidFinishLoading() is called because the resource was loaded.


NON-EXISTING DOMAIN
===================
FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=12, request=http://example.invalid/)
FrameLoaderClient::dispatchWillSendRequest(identifier=12, request=http://example.invalid/, response=)
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::dispatchDidFailProvisionalLoad -&gt; load-done(false)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFailLoading(identifier=12)

Trying to load a page from a non-existing domain.


HTTP REDIRECT
=============
www.google.com redirects to www.google.co.uk:

FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=4, request=http://www.google.com/)
FrameLoaderClient::dispatchWillSendRequest(identifier=4, request=http://www.google.com/, response=)
FrameLoaderClient::dispatchWillSendRequest(identifier=4, request=http://www.google.co.uk/, response=http://www.google.com/)
FrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::willChangeTitle
FrameLoaderClient::didChangeTitle
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(44)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(45)
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::dispatchDidFinishLoading(identifier=4)
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=5, request=http://www.google.co.uk/intl/en_uk/images/logo.gif)
FrameLoaderClient::dispatchWillSendRequest(identifier=5, request=http://www.google.co.uk/intl/en_uk/images/logo.gif, response=)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(46)
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(56)
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=6, request=http://www.google.co.uk/images/nav_logo3.png)
FrameLoaderClient::dispatchWillSendRequest(identifier=6, request=http://www.google.co.uk/images/nav_logo3.png, response=)
FrameLoaderClient::dispatchDidFinishLoading(identifier=5)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(62)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(65)
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFinishLoading(identifier=6)

FrameLoaderClient::dispatchWillSendRequest() is called twice because of the redirect, the first time the response argument contains the new destination.

The response object (we still don&apos;t have it in the GTK port) knows about the HTTP status code, so we can distinguish between permanent or temporary redirects.


HTML redirect
=============
Redirect using HTML and a timeout:

FrameLoaderClient::provisionalLoadStarted
FrameLoaderClient::postProgressStartedNotification -&gt; load-started
FrameLoaderClient::dispatchDidStartProvisionalLoad
FrameLoaderClient::assignIdentifierToInitialRequest(identifier=11, request=http://localhost/public/test.html)
FrameLoaderClient::dispatchWillSendRequest(identifier=11, request=http://localhost/public/test.html, response=)
FrameLoaderClient::transitionToCommittedForNewPage
FrameLoaderClient::dispatchDidCommitLoad -&gt; load-committed
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(50)
FrameLoaderClient::finishedLoading
FrameLoaderClient::dispatchDidFirstLayout
FrameLoaderClient::dispatchWillPerformClientRedirect(url=about:blank, delay=10,000000, fireDate=1216223024,062564)
FrameLoaderClient::dispatchDidFinishDocumentLoad
FrameLoaderClient::dispatchDidLoadMainResource
FrameLoaderClient::frameLoadCompleted
FrameLoaderClient::dispatchDidFinishLoad -&gt; load-done(true)
FrameLoaderClient::postProgressEstimateChangedNotification -&gt; load-progress-changed(100)
FrameLoaderClient::postProgressFinishedNotification -&gt; load-finished
FrameLoaderClient::dispatchDidFinishLoading(identifier=11)
[after 10 seconds the normal loading of the new page starts]

In case of a HTML redirect the page is normally loaded but FrameLoaderClient::dispatchWillPerformClientRedirect() is called. After the specified delay a new page load happens.

If the redirect is cancelled (for instance moving to a new page) then FrameLoaderClient::dispatchDidCancelClientRedirect is called. I don&apos;t know how to cancel a pending redirect but it should be possible.


CONCLUSIONS
===========
Do we need both a load-done and load-finished signals? IMO just a progress going to 100% is ok but it&apos;s strange that load-done is emitted before notify::progress for 100%. Ideally I would prefer to be able to emit something like load-done after the progress goes to 100%.

We don&apos;t map dispatchDidFinishLoading, is it useful for tracking sub resources? maybe it&apos;s better to add it later.

It seems that there aren&apos;t so many progress change notifications so emitting a signal for each of them seems ok.

FrameLoaderClient::dispatchWillSendRequest is quite useful because it allows to handle HTTP redirects and also to change the request from the programs using webKit. The main problem for this is that we don&apos;t have a response and a data source object that should be passed as arguments to the signal.

I don&apos;t know when FrameLoaderClient::revertToProvisionalState() can be called.

Note that now some signals are emitted jsut on the frame and some others just on the WebView. We should emit every frame-specific signal on the frame and also on the web view if the frame is the main one. In this case we should not pass the frame as argument as the frame can be easily get from the WebView with webkit_web_view_get_main_frame().
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86081</commentid>
    <comment_count>18</comment_count>
      <attachid>22311</attachid>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-07-16 11:44:12 -0700</bug_when>
    <thetext>Created attachment 22311
Patch to get some debugging info from the frame loader</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86207</commentid>
    <comment_count>19</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-07-17 05:46:16 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I added some debug messages to the frame loader to understand how it works,
&gt; signals we already have are reported after &quot;-&gt;&quot;.
&gt;
&gt; [snip]
&gt;
&gt; CONCLUSIONS
&gt; ===========
&gt; Do we need both a load-done and load-finished signals? IMO just a progress
&gt; going to 100% is ok but it&apos;s strange that load-done is emitted before
&gt; notify::progress for 100%. Ideally I would prefer to be able to emit something
&gt; like load-done after the progress goes to 100%.

If we have something similar to -started, -confirmed, -done and -finished, to me it makes perfect sense the way it is. -started and -finished are basically indicator for a hypothetical progress widget, so they tell us *before* anything is loaded (-started) and tell us *after* everything is really, eventually, done (-finished).

&gt; It seems that there aren&apos;t so many progress change notifications so emitting a
&gt; signal for each of them seems ok.

WebCore is very smart with regard to that, as far as I can observe. Be that not sufficient, we can still improve that later internally. The API will be the same anyway.

&gt; Note that now some signals are emitted jsut on the frame and some others just
&gt; on the WebView. We should emit every frame-specific signal on the frame and
&gt; also on the web view if the frame is the main one. In this case we should not
&gt; pass the frame as argument as the frame can be easily get from the WebView with
&gt; webkit_web_view_get_main_frame().

That sounds reasonable, I second that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86209</commentid>
    <comment_count>20</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-07-17 05:48:02 -0700</bug_when>
    <thetext>I&apos;d like to point out that we talked about having a single &quot;load-state&quot; signal that for example knows the states Started, Confirmed, Done and Finished. On top of that we would have a &quot;progress&quot; property.
It might be a good idea to refer to this concept from now on, to avoid confusion especially for people who did not attend the meeting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86308</commentid>
    <comment_count>21</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-07-18 04:08:25 -0700</bug_when>
    <thetext>This is my proposal for the API cleanup, I would really like to know what people that are going to use this API think.

The progress change is only reported on the FrameLoaderClient for the main frame, so the relative signals and properties should be just on the web view.

The other signals are reported on every frame, so the signals/properties should be per frame but if the frame is the main one they should also be propagated to the web view.


PROGRESS
========
FrameLoaderClient::postProgressStartNotification:
- Deprecate load-started (the name is confusing)
- Add progress-started
- Emit notify::progress with progress=0 (it&apos;s not emitted by FrameLoaderClient::postProgressEstimateChanged)

FrameLoaderClient::postProgressFinishedNotification:
- Deprecate load-finished (the name is confusing)
- Add progress-finished

FrameLoaderClient::postProgressEstimateChanged:
- Deprecate load-progress-changed (the name is confusing and the argument is an int in [0,100])
- Emit notify::progress using a double in [0.0, 1.0] (for uniformity with GtkProgressBar::fraction)

do we need progress-changed and progress-finished? It&apos;s possible just to use the value of the progress property to show/hide the progress bar. Note that we can guarantee the emission of notify::progress for both 0.0 and 1.0. what do epiphany/midori devs prefer?


STATUS
======
FrameLoaderClient::didStartProvisionalLoad:
- Emit notify::load-status with load-status=PROVISIONAL

FrameLoaderClient::dispatchDidCommitLoad:
- Emit notify::load-status with load-status=COMMITTED

FrameLoaderClient::dispatchDidFinishLoad:
- Emit notify::load-status with load-status=FINISHED
- Deprecate load-done (it just uses a bool for error reporting, the name seems to always imply success and it doesn&apos;t allow to have a default behaviour for loading errors)

FrameLoaderClient::dispatchDidFailLoad:
FrameLoaderClient::dispatchDidFailProvisionalLoad:
- Emit error(error_object), if this signal is emitted before setting the status then the provisional/non-provisional status doesn&apos;t need to be propagated as we have the load-status property. The return value of the handler is used to decide if the program wants the default error page or not. Most programs will probably just ignore this signal and use the default behaviour
- Emit notify::load-status with load-status=FINISHED (or ERROR?)
- Deprecate load-done

FrameLoaderClient::revertToProvisionalState
- Emit notify::load-status with load-status=PROVISIONAL

Status? State? Do you have better suggestions for the names?


REDIRECTS
=========
FrameLoaderClient::dispatchWillSendRequest:
- Emit sending-request(object, request, response, data_source). Better name for this? We don&apos;t have objects to represent single resources, responses and data sources, so I would add this in another patch

FrameLoaderClient::dispatchWillPerformClientRedirect:
- Emit client-redirect-scheduled(const gchar *url, guint delay_ms, time_t when)
- When we will have a data source object it will be possible to cancel a scheduled redirect calling the public C function for documentLoader-&gt;stopLoading()

FrameLoaderClient::dispatchDidCancelRedirect:
- Emit client-redirect-cancelled (canceled?)

FrameLoaderClient::dispatchDidServerRedirectForProvisionalLoad:
- This method is not very useful because it&apos;s impossible to know the destination of the redirect and the HTTP code sent by the server, so I would prefer to not emit anything. If a program needs to know about HTTP redirects it can use the signal emitted by dispatchWillSendRequest
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86324</commentid>
    <comment_count>22</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-07-18 07:02:37 -0700</bug_when>
    <thetext>I forgot to say what happens when you call webkit_web_view_load_html_string() from the error handler. In this case a new page load starts, so you receive all the normal loading signals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86671</commentid>
    <comment_count>23</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-07-22 11:55:49 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; The progress change is only reported on the FrameLoaderClient for the main
&gt; frame, so the relative signals and properties should be just on the web view.

*nod*

&gt; The other signals are reported on every frame, so the signals/properties
&gt; should be per frame but if the frame is the main one they should also be
&gt; propagated to the web view.

*nod* Progress aside, we want to be able to work only with WebView or with a WebFrame, unlike currently, where we need a bit of each to do anything useful.

&gt; PROGRESS
&gt; ========
&gt; FrameLoaderClient::postProgressStartNotification:
&gt; - Deprecate load-started (the name is confusing)
&gt; - Add progress-started

&gt; - Emit notify::progress with progress=0 (it&apos;s not emitted by
&gt; FrameLoaderClient::postProgressEstimateChanged)

Agreed, we totally need &quot;progress&quot; to start with 0, even if WebCore doesn&apos;t do that.

&gt; FrameLoaderClient::postProgressFinishedNotification:
&gt; - Deprecate load-finished (the name is confusing)
&gt; - Add progress-finished
&gt; 
&gt; FrameLoaderClient::postProgressEstimateChanged:
&gt; - Deprecate load-progress-changed (the name is confusing and the argument is an
&gt; int in [0,100])

Agreed, the name is bogus.

&gt; - Emit notify::progress using a double in [0.0, 1.0] (for uniformity with
&gt; GtkProgressBar::fraction)

That&apos;s a nice idea I hadn&apos;t thought about.

&gt; do we need progress-changed and progress-finished? It&apos;s possible just to use
&gt; the value of the progress property to show/hide the progress bar. Note that we
&gt; can guarantee the emission of notify::progress for both 0.0 and 1.0. what do
&gt; epiphany/midori devs prefer?

We don&apos;t need progress-changed when we have &quot;progress&quot;, it&apos;s superfluous. And I actually tend towards having no progress signals at all, since &quot;progress&quot; does it all. The application callback code should actually become much simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86672</commentid>
    <comment_count>24</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-07-22 12:26:44 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; STATUS
&gt; ======
&gt; FrameLoaderClient::didStartProvisionalLoad:
&gt; - Emit notify::load-status with load-status=PROVISIONAL
&gt; FrameLoaderClient::dispatchDidCommitLoad:
&gt; - Emit notify::load-status with load-status=COMMITTED
&gt; FrameLoaderClient::dispatchDidFinishLoad:
&gt; - Emit notify::load-status with load-status=FINISHED
&gt; FrameLoaderClient::dispatchDidFailLoad:
&gt; FrameLoaderClient::dispatchDidFailProvisionalLoad:
&gt; - Emit error(error_object), if this signal is emitted before setting the
&gt; status then the provisional/non-provisional status doesn&apos;t need to be
&gt; propagated as we have the load-status property. The return value of the
&gt; handler is used to decide if the program wants the default error page
&gt; or not. Most programs will probably just ignore this signal and use the
&gt; default behaviour

That&apos;s looks like a nice solution and it&apos;s a nifty trick to emit error with a boolean before updating status for the last time.

I am a little of shaky with regard to semantics/ terminology here, but functionally that looks very good.

&gt; - Emit notify::load-status with load-status=FINISHED (or ERROR?)

We can&apos;t do load-status=ERROR because the final state must be reliably set after everything else. We need a state that applications can check, that means &quot;done, not loading&quot;.

&gt; - Deprecate load-done
&gt; 
&gt; FrameLoaderClient::revertToProvisionalState
&gt; - Emit notify::load-status with load-status=PROVISIONAL
&gt; 
&gt; Status? State? Do you have better suggestions for the names?

Maybe s/State/Status and s/Finished/Complete? But I&apos;m really not sure about this either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86718</commentid>
    <comment_count>25</comment_count>
    <who name="Marco Barisione">marco.barisione</who>
    <bug_when>2008-07-23 05:17:56 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; &gt; The other signals are reported on every frame, so the signals/properties
&gt; &gt; should be per frame but if the frame is the main one they should also be
&gt; &gt; propagated to the web view.
&gt;
&gt; *nod* Progress aside, we want to be able to work only with WebView or with a
&gt; WebFrame, unlike currently, where we need a bit of each to do anything useful.

For errors we want to have the signal on the web view for every frame. And for redirects?

(In reply to comment #24)
&gt; We can&apos;t do load-status=ERROR because the final state must be reliably set
&gt; after everything else. We need a state that applications can check, that means
&gt; &quot;done, not loading&quot;.

Yes, I agree.

&gt; Maybe s/State/Status and s/Finished/Complete? But I&apos;m really not sure about
&gt; this either.

Don&apos;t know about state/status (any native english speaker?), note that gtk uses both for similar things without any apparent logic. Ok for complete.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86722</commentid>
    <comment_count>26</comment_count>
    <who name="Wouter Bolsterlee">uws+webkit</who>
    <bug_when>2008-07-23 05:29:43 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; For errors we want to have the signal on the web view for every frame. And for
&gt; redirects?

Note that &quot;timeout redirects&quot; (refresh page every now and then) can also be used for frames inside a page, e.g. update a &quot;status frame&quot; every few seconds. It would be useful to know from which frame the redirect originated. Perhaps as an argument in the callback when connecting to the signal on the web view?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86823</commentid>
    <comment_count>27</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2008-07-24 00:30:33 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; REDIRECTS
&gt; =========
&gt; FrameLoaderClient::dispatchWillSendRequest:
&gt; - Emit sending-request(object, request, response, data_source). Better
&gt; name for this? We don&apos;t have objects to represent single resources,
&gt; responses and data sources, so I would add this in another patch

Since we don&apos;t have the required classes I agree it makes more sense in a patch on top of this. Discussing these new classes may need some detailed discussion that shouldn&apos;t make this bug even more complicated. :)

&gt; FrameLoaderClient::dispatchWillPerformClientRedirect:
&gt; - Emit client-redirect-scheduled(const gchar *url, guint delay_ms,
&gt; time_t when)
&gt; - When we will have a data source object it will be possible to cancel a
&gt; scheduled redirect calling the public C function for
&gt; documentLoader-&gt;stopLoading()
&gt; 
&gt; FrameLoaderClient::dispatchDidCancelRedirect:
&gt; - Emit client-redirect-cancelled (canceled?)

Being able to simply cancel a redirect-scheduled with webkit_web_view_stop_loading sounds totally nice.

I suggest s/client/ because I don&apos;t really see any meaning to this term here, outside of WebCore.

(In reply to comment #26)
&gt; (In reply to comment #25)
&gt; &gt; For errors we want to have the signal on the web view for every frame.
&gt; &gt; And for redirects?
&gt; 
&gt; Note that &quot;timeout redirects&quot; (refresh page every now and then) can also be
&gt; used for frames inside a page, e.g. update a &quot;status frame&quot; every few seconds.
&gt; It would be useful to know from which frame the redirect originated.
&gt; Perhaps as an argument in the callback when connecting to the signal on
&gt; the web view?

So it seems most useful useful to have &quot;error&quot; and the signals for redirection on the web view, with a frame argument. Since you usually are interested in either all or none.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105423</commentid>
    <comment_count>28</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2009-01-12 17:06:51 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; PROGRESS
&gt; ========
&gt; FrameLoaderClient::postProgressStartNotification:
&gt; - Deprecate load-started (the name is confusing)
&gt; - Add progress-started
&gt; - Emit notify::progress with progress=0 (it&apos;s not emitted by
&gt; FrameLoaderClient::postProgressEstimateChanged)
&gt; 
&gt; FrameLoaderClient::postProgressFinishedNotification:
&gt; - Deprecate load-finished (the name is confusing)
&gt; - Add progress-finished
&gt; 
&gt; FrameLoaderClient::postProgressEstimateChanged:
&gt; - Deprecate load-progress-changed (the name is confusing and the argument is an
&gt; int in [0,100])
&gt; - Emit notify::progress using a double in [0.0, 1.0] (for uniformity with
&gt; GtkProgressBar::fraction)
&gt; 
&gt; do we need progress-changed and progress-finished? It&apos;s possible just to use
&gt; the value of the progress property to show/hide the progress bar. Note that we
&gt; can guarantee the emission of notify::progress for both 0.0 and 1.0. what do
&gt; epiphany/midori devs prefer?

Connecting to notify::progress and understanding 0.0 as started and 1.0 as finished seems to be functionally equivalent to having the extra signals, so I think it&apos;s just a matter of what seems clearer to people. No strong opinion here, although to me at least having the two extra signals makes reading code a bit clearer maybe.

&gt; 
&gt; 
&gt; STATUS
&gt; ======
&gt; FrameLoaderClient::didStartProvisionalLoad:
&gt; - Emit notify::load-status with load-status=PROVISIONAL
&gt; 
&gt; FrameLoaderClient::dispatchDidCommitLoad:
&gt; - Emit notify::load-status with load-status=COMMITTED
&gt; 
&gt; FrameLoaderClient::dispatchDidFinishLoad:
&gt; - Emit notify::load-status with load-status=FINISHED
&gt; - Deprecate load-done (it just uses a bool for error reporting, the name seems
&gt; to always imply success and it doesn&apos;t allow to have a default behaviour for
&gt; loading errors)

Looks good to me.

&gt; 
&gt; FrameLoaderClient::dispatchDidFailLoad:
&gt; FrameLoaderClient::dispatchDidFailProvisionalLoad:
&gt; - Emit error(error_object), if this signal is emitted before setting the status
&gt; then the provisional/non-provisional status doesn&apos;t need to be propagated as we
&gt; have the load-status property. The return value of the handler is used to
&gt; decide if the program wants the default error page or not. Most programs will
&gt; probably just ignore this signal and use the default behaviour

The signal will be just &quot;error&quot;? Probably for another bug, but there has to be a way of customizing the error pages.

&gt; - Emit notify::load-status with load-status=FINISHED (or ERROR?)
&gt; - Deprecate load-done
&gt; 
&gt; FrameLoaderClient::revertToProvisionalState
&gt; - Emit notify::load-status with load-status=PROVISIONAL
&gt; 
&gt; Status? State? Do you have better suggestions for the names?

Indifferent. Status sounds a bit maybe better.

&gt; 
&gt; 
&gt; REDIRECTS
&gt; =========
&gt; FrameLoaderClient::dispatchWillSendRequest:
&gt; - Emit sending-request(object, request, response, data_source). Better name for
&gt; this? We don&apos;t have objects to represent single resources, responses and data
&gt; sources, so I would add this in another patch
&gt; 
&gt; FrameLoaderClient::dispatchWillPerformClientRedirect:
&gt; - Emit client-redirect-scheduled(const gchar *url, guint delay_ms, time_t when)
&gt; - When we will have a data source object it will be possible to cancel a
&gt; scheduled redirect calling the public C function for
&gt; documentLoader-&gt;stopLoading()
&gt; 
&gt; FrameLoaderClient::dispatchDidCancelRedirect:
&gt; - Emit client-redirect-cancelled (canceled?)
&gt; 
&gt; FrameLoaderClient::dispatchDidServerRedirectForProvisionalLoad:
&gt; - This method is not very useful because it&apos;s impossible to know the
&gt; destination of the redirect and the HTTP code sent by the server, so I would
&gt; prefer to not emit anything. If a program needs to know about HTTP redirects it
&gt; can use the signal emitted by dispatchWillSendRequest
&gt; 

Agreed this should go in next patches.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106886</commentid>
    <comment_count>29</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-01-24 16:08:50 -0800</bug_when>
    <thetext>This patch implements load-status and progress properties with according properties on the view, as well as load-status on the frame. It also includes porting GtkLauncher to the new interface.

The patch includes none of the other discussed changes and no deprecations, I figure to ease review we should do these bit by bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106887</commentid>
    <comment_count>30</comment_count>
      <attachid>27001</attachid>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-01-24 16:10:29 -0800</bug_when>
    <thetext>Created attachment 27001
Implement load-status and progress properties

Oh well, this time I&apos;m actually attaching a patch ^_~.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119903</commentid>
    <comment_count>31</comment_count>
      <attachid>27001</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-04 17:24:15 -0700</bug_when>
    <thetext>Comment on attachment 27001
Implement load-status and progress properties

&gt;  #include &quot;webkitwebframe.h&quot;
&gt;  #include &quot;webkitwebview.h&quot;
&gt; +#include &quot;webkitenumtypes.h&quot;
&gt;  #include &quot;webkitmarshal.h&quot;
&gt;  #include &quot;webkitprivate.h&quot;

This header addition is not in the correct order.

&gt; +    * Since: 1.1.1

We now need to use 1.1.7 here =).

&gt; --- a/WebKitTools/GtkLauncher/main.c
&gt; +++ b/WebKitTools/GtkLauncher/main.c

All changes to the launcher look good to me, but please put them in another commit.

&gt;      gtk_init (&amp;argc, &amp;argv);
&gt; +    if (!g_thread_supported ())
&gt; +        g_thread_init (NULL);
&gt;  

And this is no longer needed, but you know this, of course =).

The patch looks good, and since we have already had lots of discussion on this already, so I&apos;ll r+ and you can address my comments while landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120027</commentid>
    <comment_count>32</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-05-05 15:46:36 -0700</bug_when>
    <thetext>2009-05-06  Christian Dywan  &lt;christian@twotoasts.de&gt;

        Reviewed by Gustavo Noronha.

        http://bugs.webkit.org/show_bug.cgi?id=17066
        [GTK] Improve frameloader signals

        Implement load-status and progress properties on the view, as well as
        load-status on the frame. This supersedes the different load signals
        load-progress-changed, load-committed, load-done, load-started and
        load-finished which are not only misnamed but broken by design.

        * WebCoreSupport/FrameLoaderClientGtk.cpp:
        (WebKit::notifyStatus):
        (WebKit::FrameLoaderClient::postProgressStartedNotification):
        (WebKit::FrameLoaderClient::postProgressEstimateChangedNotification):
        (WebKit::FrameLoaderClient::dispatchDidFinishLoad):
        (WebKit::FrameLoaderClient::dispatchDidStartProvisionalLoad):
        * webkit/webkitprivate.h:
        * webkit/webkitwebframe.cpp:
        * webkit/webkitwebframe.h:
        * webkit/webkitwebview.cpp:
        * webkit/webkitwebview.h:</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120028</commentid>
    <comment_count>33</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-05-05 15:47:06 -0700</bug_when>
    <thetext>2009-05-06  Christian Dywan  &lt;christian@twotoasts.de&gt;

        Reviewed by Gustavo Noronha.

        http://bugs.webkit.org/show_bug.cgi?id=17066
        [GTK] Improve frameloader signals

        Update GtkLauncher to use the new load-status and progress properties
        instead of the previous loading signals.

        * GtkLauncher/main.c:
        (update_title):
        (notify_load_status_cb):
        (notify_progress_cb):
        (create_browser):
        (create_window):</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120157</commentid>
    <comment_count>34</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-06 14:38:55 -0700</bug_when>
    <thetext>Guess this is now done? =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120177</commentid>
    <comment_count>35</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2009-05-06 16:34:44 -0700</bug_when>
    <thetext>We don&apos;t have redirection yet. FrameLoader, as referred to in the title and as discussed here, also features redirecting pages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120313</commentid>
    <comment_count>36</comment_count>
      <attachid>27001</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2009-05-07 12:23:00 -0700</bug_when>
    <thetext>Comment on attachment 27001
Implement load-status and progress properties

You are right! Let me clear this review flag so that my crude search will not show this bug, then =).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966298</commentid>
    <comment_count>37</comment_count>
    <who name="Brian Holt">brian.holt</who>
    <bug_when>2014-01-10 02:12:52 -0800</bug_when>
    <thetext>Is this bug still an issue? What still needs to be done or can it be closed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>998940</commentid>
    <comment_count>38</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2014-04-08 17:55:39 -0700</bug_when>
    <thetext>WebKit1GTK+ has been removed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18763</attachid>
            <date>2008-01-29 07:54:29 -0800</date>
            <delta_ts>2008-01-31 08:42:23 -0800</delta_ts>
            <desc>Improve load signals</desc>
            <filename>load-signals.diff</filename>
            <type>text/plain</type>
            <size>18028</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShSZXZpc2lvbiAyOTcyNSkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC00OSw2ICs0OSw4IEBA
CiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8Z2xpYi9naTE4
bi5oPgorCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CkBA
IC0xODUsMjUgKzE4NywzOSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojphc3NpZ25JZGVudGlm
aWVyCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAorc3RhdGljIHZvaWQgZW1pdExvYWRFdmVu
dChXZWJLaXRMb2FkU3RhdGUgc3RhdGUsIFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2No
YXIqIHNpZ25hbCwgY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3I9UmVzb3VyY2VFcnJvcigpKQor
eworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKGZyYW1lKTsK
KyAgICBQYWdlKiBjb3JlUGFnZSA9IGNvcmUod2ViVmlldyk7CisgICAgRnJhbWVMb2FkZXIqIGxv
YWRlciA9IGNvcmUoZnJhbWUpLT5sb2FkZXIoKTsKKworICAgIFdlYktpdEV2ZW50TG9hZCogZXZl
bnQgPSAoV2ViS2l0RXZlbnRMb2FkKilnX25ldyhXZWJLaXRFdmVudExvYWQsIDEpOworICAgIGV2
ZW50LT5zdGF0ZSA9IHN0YXRlOworICAgIGV2ZW50LT5mcmFtZSA9IGZyYW1lOworICAgIGV2ZW50
LT5yZXF1ZXN0X3VyaSA9IGdfc3RyZHVwKGxvYWRlci0+b3JpZ2luYWxSZXF1ZXN0VVJMKCkuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZXZlbnQtPnByb2dyZXNzID0gbHJvdW5kKGNvcmVQ
YWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpKjEwMCk7CisgICAgZXZlbnQtPmVy
cm9yID0gZXJyb3I7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsIHNpZ25hbCwg
ZXZlbnQpOworCisgICAgZ19mcmVlKGV2ZW50LT5yZXF1ZXN0X3VyaSk7CisgICAgaWYgKGV2ZW50
LT5lcnJvcikKKyAgICAgICAgZ19lcnJvcl9mcmVlKGV2ZW50LT5lcnJvcik7CisgICAgZ19mcmVl
KGV2ZW50KTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzU3RhcnRl
ZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdG
cm9tRnJhbWUobV9mcmFtZSk7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJs
b2FkLXN0YXJ0ZWQiLCBtX2ZyYW1lKTsKKyAgICBlbWl0TG9hZEV2ZW50KFdFQktJVF9MT0FEX1NU
QVRFX1BST0dSRVNTX1NUQVJURUQsIG1fZnJhbWUsICJsb2FkLXByb2dyZXNzLXN0YXJ0ZWQiKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2Vk
Tm90aWZpY2F0aW9uKCkKIHsKLSAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zy
b21GcmFtZShtX2ZyYW1lKTsKLSAgICBQYWdlKiBjb3JlUGFnZSA9IGNvcmUod2ViVmlldyk7Ci0K
LSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImxvYWQtcHJvZ3Jlc3MtY2hhbmdl
ZCIsIGxyb3VuZChjb3JlUGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSoxMDAp
KTsKKyAgICBlbWl0TG9hZEV2ZW50KFdFQktJVF9MT0FEX1NUQVRFX1BST0dSRVNTX0NIQU5HRUQs
IG1fZnJhbWUsICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKQogewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotCi0gICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgbV9mcmFtZSk7Cisg
ICAgZW1pdExvYWRFdmVudChXRUJLSVRfTE9BRF9TVEFURV9QUk9HUkVTU19GSU5JU0hFRCwgbV9m
cmFtZSwgImxvYWQtcHJvZ3Jlc3MtZmluaXNoZWQiKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQpAQCAtMzkwLDYgKzQwNiwxMCBAQCBib29sIEZy
YW1lTG9hZGVyQ2xpZW50OjpoYXNGcmFtZVZpZXcoKSBjCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
OjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQogewogICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X2ZyYW1lLCAibG9hZC1kb25lIiwgdHJ1ZSk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBpZiAobV9mcmFtZSA9PSB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisgICAgICAgIGVtaXRMb2FkRXZlbnQo
V0VCS0lUX0xPQURfU1RBVEVfRE9ORSwgbV9mcmFtZSwgImxvYWQtZG9uZSIpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNTIzLDcgKzU0Myw3
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWkKIAogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwogICAgIGlmICht
X2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKLSAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLWNvbW1pdHRlZCIsIG1fZnJh
bWUpOworICAgICAgICBlbWl0TG9hZEV2ZW50KFdFQktJVF9MT0FEX1NUQVRFX0NPTU1JVFRFRCwg
bV9mcmFtZSwgImxvYWQtY29tbWl0dGVkIik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKQEAgLTY3MywxNCArNjkzLDIyIEBAIGJv
b2wgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZFIKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFs
TG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsK
ICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsK
KworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUp
OworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJW
aWV3KSkKKyAgICAgICAgZW1pdExvYWRFdmVudChXRUJLSVRfTE9BRF9TVEFURV9ET05FLCBtX2Zy
YW1lLCAibG9hZC1kb25lIiwgZXJyb3IpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikK
IHsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNl
KTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJh
bWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3
ZWJWaWV3KSkKKyAgICAgICAgZW1pdExvYWRFdmVudChXRUJLSVRfTE9BRF9TVEFURV9ET05FLCBt
X2ZyYW1lLCAibG9hZC1kb25lIiwgZXJyb3IpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0
IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQpAQCAtNjg4LDQwICs3
MTYsMzQgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZG93bmxvYWQoUmVzb3VyYwogICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNh
bmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCitSZXNvdXJjZUVycm9yIEZyYW1l
TG9hZGVyQ2xpZW50OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVl
c3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigp
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJDRV9FUlJP
Ul9DQU5DRUxMRUQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmluZzo6ZnJvbVVURjgo
XygiUmVxdWVzdCBjYW5jZWxsZWQiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50OjpibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK1Jlc291cmNlRXJy
b3IgRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VF
cnJvcigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJD
RV9FUlJPUl9SRVNUUklDVEVEX1BPUlQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmlu
Zzo6ZnJvbVVURjgoXygiUmVxdWVzdCBibG9ja2VkIikpKTsKIH0KIAotUmVzb3VyY2VFcnJvciBG
cmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93VVJMRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigi
RXJyb3IiLCBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfVVJJLCByZXF1ZXN0LnVybCgpLnByZXR0eVVS
TCgpLCBTdHJpbmc6OmZyb21VVEY4KF8oIlVuYWJsZSB0byBkaXNwbGF5IFVSSSIpKSk7CiB9CiAK
LVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdEZvclBvbGljeUNoYW5n
ZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNP
VVJDRV9FUlJPUl9QT0xJQ1lfQ0hBTkdFRCwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3Ry
aW5nOjpmcm9tVVRGOChfKCJMb2FkIGludGVycnVwdGVkIGJ5IHBvbGljeSBjaGFuZ2UiKSkpOwog
fQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93TUlNRVR5cGVF
cnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJD
bGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJl
cXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJDRV9F
UlJPUl9NSU1FX1RZUEUsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmluZzo6ZnJvbVVU
RjgoXygiVW5hYmxlIHRvIGRpc3BsYXkgTUlNRSB0eXBlIikpKTsKIH0KIAotUmVzb3VyY2VFcnJv
ciBGcmFtZUxvYWRlckNsaWVudDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6ZmlsZURvZXNOb3RF
eGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworICAgIHJldHVybiBSZXNv
dXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9GSUxFX05PVF9GT1VORCwg
cmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJGaWxlIG5vdCBm
b3VuZCIpKSk7CiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnQ6OnNob3VsZEZhbGxCYWNrKGNv
bnN0IFJlc291cmNlRXJyb3ImKQpJbmRleDogV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZp
ZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmNw
cAkoUmV2aXNpb24gMjk3MjUpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5j
cHAJKEFyYmVpdHNrb3BpZSkKQEAgLTYwLDEwICs2MCwxMSBAQCBlbnVtIHsKICAgICAvKiBub3Jt
YWwgc2lnbmFscyAqLwogICAgIE5BVklHQVRJT05fUkVRVUVTVEVELAogICAgIFdJTkRPV19PQkpF
Q1RfQ0xFQVJFRCwKLSAgICBMT0FEX1NUQVJURUQsCiAgICAgTE9BRF9DT01NSVRURUQsCisgICAg
TE9BRF9QUk9HUkVTU19TVEFSVEVELAogICAgIExPQURfUFJPR1JFU1NfQ0hBTkdFRCwKLSAgICBM
T0FEX0ZJTklTSEVELAorICAgIExPQURfUFJPR1JFU1NfRklOSVNIRUQsCisgICAgTE9BRF9ET05F
LAogICAgIFRJVExFX0NIQU5HRUQsCiAgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAogICAgIFNUQVRV
U19CQVJfVEVYVF9DSEFOR0VELApAQCAtOTEsNiArOTIsMTUgQEAgZW51bSB7CiAKIHN0YXRpYyBn
dWludCB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKK0dU
eXBlCit3ZWJraXRfZXZlbnRfbG9hZF9nZXRfdHlwZSAodm9pZCkKK3sKKyAgICBzdGF0aWMgR1R5
cGUgdHlwZSA9IDA7CisgICAgaWYgKCF0eXBlKQorICAgICAgICB0eXBlID0gZ19wb2ludGVyX3R5
cGVfcmVnaXN0ZXJfc3RhdGljICgid2Via2l0X2V2ZW50X2xvYWQiKTsKKyAgICByZXR1cm4gdHlw
ZTsKK30KKwogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIEdU
S19UWVBFX0NPTlRBSU5FUikKIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NvbnRleHRf
bWVudV9wb3NpdGlvbl9mdW5jKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiog
cHVzaEluLCBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogZGF0YSkKQEAgLTY1MywzMCArNjYzLDMwIEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICAgICAgICAgIEdf
VFlQRV9QT0lOVEVSKTsKIAogICAgIC8qKgotICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQtc3Rh
cnRlZDoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWNvbW1pdHRlZDoKICAgICAgKiBAd2Vi
X3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICog
QGZyYW1lOiB0aGUgZnJhbWUgZ29pbmcgdG8gZG8gdGhlIGxvYWQKKyAgICAgKiBAZXZlbnQ6IGEg
I1dlYktpdEV2ZW50TG9hZAogICAgICAqCi0gICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBi
ZWdpbnMgdG8gbG9hZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqIFdoZW4gYSAjV2Vi
S2l0V2ViRnJhbWUgbG9hZGVkIHRoZSBmaXJzdCBkYXRhIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQu
CiAgICAgICovCi0gICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTE9BRF9TVEFSVEVEXSA9IGdf
c2lnbmFsX25ldygibG9hZC1zdGFydGVkIiwKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tM
T0FEX0NPTU1JVFRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtY29tbWl0dGVkIiwKICAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCiAgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAgICAgICAg
ICAwLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBn
X2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX0JPWEVELAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCi0gICAgICAg
ICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOworICAgICAgICAgICAgV0VCS0lUX1RZUEVfRVZF
TlRfTE9BRCk7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWNvbW1pdHRl
ZDoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXByb2dyZXNzLXN0YXJ0ZWQ6CiAgICAgICog
QHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAg
ICAqIEBmcmFtZTogdGhlIG1haW4gZnJhbWUgdGhhdCByZWNlaXZlZCB0aGUgZmlyc3QgZGF0YQor
ICAgICAqIEBldmVudDogYSAjV2ViS2l0RXZlbnRMb2FkCiAgICAgICoKLSAgICAgKiBXaGVuIGEg
I1dlYktpdFdlYkZyYW1lIGxvYWRlZCB0aGUgZmlyc3QgZGF0YSB0aGlzIHNpZ25hbCBpcyBlbWl0
dGVkLgorICAgICAqIFdoZW4gYSAjV2ViS2l0V2ViRnJhbWUgYmVnaW5zIHRvIGxvYWQgdGhpcyBz
aWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tM
T0FEX0NPTU1JVFRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtY29tbWl0dGVkIiwKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tMT0FEX1BST0dSRVNTX1NUQVJURURdID0gZ19zaWduYWxfbmV3
KCJsb2FkLXByb2dyZXNzLXN0YXJ0ZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
d2ViVmlld0NsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9M
QVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKICAgICAgICAgICAgIDAsCkBAIC02ODQsMTMgKzY5NCwx
NCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAg
ICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKICAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZS
QU1FKTsKLQorICAgICAgICAgICAgV0VCS0lUX1RZUEVfRVZFTlRfTE9BRCk7CiAKICAgICAvKioK
ICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXByb2dyZXNzLWNoYW5nZWQ6CiAgICAgICogQHdl
Yl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKLSAgICAgKiBAcHJvZ3Jlc3M6IHRoZSBnbG9iYWwg
cHJvZ3Jlc3MKKyAgICAgKiBAZXZlbnQ6IGEgI1dlYktpdEV2ZW50TG9hZAorICAgICAqCisgICAg
ICogV2hlbiB0aGUgY3VycmVudCBsb2FkaW5nIHByb2Nlc3MgY2hhbmdlcyB0aGlzIHNpZ25hbCBp
cyBlbWl0dGVkLgogICAgICAqLwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfUFJP
R1JFU1NfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtcHJvZ3Jlc3MtY2hhbmdlZCIsCiAg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLApAQCAtNjk4LDE5ICs3
MDksNDUgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgICAg
ICAgICAgMCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBOVUxMLAotICAgICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0lOVCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19CT1hFRCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAg
ICAgICAgR19UWVBFX0lOVCk7CisgICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9MT0FEKTsK
IAotICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfRklOSVNIRURdID0gZ19zaWduYWxf
bmV3KCJsb2FkLWZpbmlzaGVkIiwKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2Fk
LXByb2dyZXNzLWZpbmlzaGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3
CisgICAgICogQGV2ZW50OiBhICNXZWJLaXRFdmVudExvYWQKKyAgICAgKgorICAgICAqIFdoZW4g
dGhlIGN1cnJlbnQgbG9hZGluZyBwcm9jZXNzIGhhcyBmaW5pc2hlZCB0aGlzIHNpZ25hbCBpcyBl
bWl0dGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfUFJPR1JF
U1NfRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJsb2FkLXByb2dyZXNzLWZpbmlzaGVkIiwKICAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCiAgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAg
ICAgICAgICAwLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCi0gICAgICAg
ICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX1ZPSURfX0JPWEVELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9MT0FEKTsKKworICAgIC8qKgorICAgICAqIFdl
YktpdFdlYlZpZXc6OmxvYWQtZG9uZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2Vi
VmlldworICAgICAqIEBldmVudDogYSAjV2ViS2l0RXZlbnRMb2FkCisgICAgICoKKyAgICAgKiBX
aGVuIGEgI1dlYktpdFdlYkZyYW1lIGlzIGRvbmUgbG9hZGluZyB0aGlzIHNpZ25hbCBpcyBlbWl0
dGVkLgorICAgICAqCisgICAgICogTG9vayBhdCBldmVudC0+ZXJyb3IgdG8gZmluZCBvdXQgd2hl
dGhlciB0aGUgbG9hZGluZyBmYWlsZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3Np
Z25hbHNbTE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygibG9hZC1kb25lIiwKKyAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fQk9YRUQsCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwK
LSAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CisgICAgICAgICAgICBXRUJLSVRf
VFlQRV9FVkVOVF9MT0FEKTsKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OnRpdGxl
LWNoYW5nZWQ6CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgJKFJldmlzaW9uIDI5
NzI1KQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAkoQXJiZWl0c2tvcGll
KQpAQCAtNDIsOCArNDIsMzkgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfTkFWSUdBVElP
Tl9SRVNQT05TRV9ET1dOTE9BRAogfSBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2U7CiAKLXR5cGVk
ZWYgZW51bQotewordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTE9BRF9TVEFURV9DT01NSVRU
RUQsCisgICAgV0VCS0lUX0xPQURfU1RBVEVfUFJPR1JFU1NfU1RBUlRFRCwKKyAgICBXRUJLSVRf
TE9BRF9TVEFURV9QUk9HUkVTU19DSEFOR0VELAorICAgIFdFQktJVF9MT0FEX1NUQVRFX1BST0dS
RVNTX0ZJTklTSEVELAorICAgIFdFQktJVF9MT0FEX1NUQVRFX0RPTkUsCit9IFdlYktpdExvYWRT
dGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfQ0FOQ0VM
TEVELAorICAgIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9SRVNUUklDVEVEX1BPUlQsCisgICAgV0VC
S0lUX1JFU09VUkNFX0VSUk9SX1VSSSwKKyAgICBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfUE9MSUNZ
X0NIQU5HRUQsCisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX01JTUVfVFlQRSwKKyAgICBXRUJL
SVRfUkVTT1VSQ0VfRVJST1JfRklMRV9OT1RfRk9VTkQKK30gV2ViS2l0UmVzb3VyY2VFcnJvcjsK
KworI2RlZmluZSBXRUJLSVRfUkVTT1VSQ0VfRVJST1IgZ19xdWFya19mcm9tX3N0cmluZygiV0VC
S0lUX1JFU09VUkNFX0VSUk9SIikKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdExvYWRT
dGF0ZSBzdGF0ZTsKKyAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWU7CisgICAgZ2NoYXIqIHJlcXVl
c3RfdXJpOworICAgIGd1aW50IHByb2dyZXNzOworICAgIEdFcnJvciogZXJyb3I7Cit9IFdlYktp
dEV2ZW50TG9hZDsKKworI2RlZmluZSBXRUJLSVRfVFlQRV9FVkVOVF9MT0FEICh3ZWJraXRfZXZl
bnRfbG9hZF9nZXRfdHlwZSAoKSkKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2V2ZW50X2xv
YWRfZ2V0X3R5cGUgKHZvaWQpOworCit0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9XRUJfVklF
V19UQVJHRVRfSU5GT19IVE1MID0gLSAxLAogICAgIFdFQktJVF9XRUJfVklFV19UQVJHRVRfSU5G
T19URVhUID0gLSAyCiB9IFdlYktpdFdlYlZpZXdUYXJnZXRJbmZvOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlRXJyb3JHdGsuY3BwCShSZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNw
cAkoUmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUVycm9yOjpvcGVyYXRvciBHRXJyb3Iq
KCkgY29uc3QKK3sKKyAgICBpZiAobV9pc051bGwpCisgICAgICAgIHJldHVybiBOVUxMOworCisg
ICAgR0Vycm9yKiBlcnJvciA9IGdfZXJyb3JfbmV3KFdFQktJVF9SRVNPVVJDRV9FUlJPUiwgbV9l
cnJvckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxpemVkRGVz
Y3JpcHRpb24udXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkoUmV2aXNpb24gMjk3MjUpCisrKyBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShBcmJlaXRza29waWUpCkBAIC05NzksNyArOTc5LDggQEAgd2Via2l0
Z3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9i
bXAvQk1QSW1hZ2VEZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcCAKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3hibS9YQk1JbWFnZURlY29kZXIuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvZ3RrL1Jlc291cmNlRXJyb3JHdGsuY3BwCiAKICMgLS0tLQogIyBjdXJsIGh0dHAgYmFja2Vu
ZApJbmRleDogV2ViS2l0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQucHJpCShSZXZpc2lvbiAy
OTcyNSkKKysrIFdlYktpdC5wcmkJKEFyYmVpdHNrb3BpZSkKQEAgLTY5LDYgKzY5LDcgQEAgcXQt
cG9ydDpJTkNMVURFUEFUSCArPSBcCiAgICAgJCRQV0QvV2ViS2l0L3F0L0FwaQogZ3RrLXBvcnQ6
SU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAor
ICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCiAgICAgJCRCQVNF
X0RJUi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybCBcCiAgICAgJCRCQVNFX0RJUi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUvbG9h
ZGVyL2d0ayBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKFJldmlzaW9uIDI5NzI1KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwko
QXJiZWl0c2tvcGllKQpAQCAtMTQ1LDYgKzE0NSw3IEBAIGd0ay1wb3J0IHsKICAgICAkJFBXRC9w
bGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRQV0Qvc3ZnL2dyYXBoaWNzL2NhaXJvIFwK
ICAgICAkJFBXRC9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwgXAorICAgICQkUFdEL3BsYXRmb3JtL25l
dHdvcmsvZ3RrIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyBcCiAgICAgJCRQ
V0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYgXApAQCAtMTA1MSw2ICsxMDUyLDcgQEAgZ3RrLXBvcnQgewogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIFwKKyAgICAgICAgcGxhdGZv
cm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgXApJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvci5oCShSZXZpc2lvbiAyOTg0NCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yLmgJKEFyYmVpdHNrb3BpZSkKQEAgLTQz
LDYgKzQzLDEwIEBAIGNsYXNzIE5TRXJyb3I7CiAjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZT
dHJlYW0uaD4KICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgImdsaWIuaCIK
KyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBSZXNvdXJjZUVycm9y
IHsKQEAgLTEwNSw2ICsxMDksOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIG9wZXJh
dG9yIENGU3RyZWFtRXJyb3IoKSBjb25zdDsKICNlbmRpZgogI2VuZGlmCisjaWYgUExBVEZPUk0o
R1RLKQorICAgICAgICBvcGVyYXRvciBHRXJyb3IqKCkgY29uc3Q7CisjZW5kaWYKIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIHZvaWQgdW5wYWNrUGxhdGZvcm1FcnJvcklmTmVlZGVkKCkgY29uc3QK
SW5kZXg6IFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKFJldmlzaW9uIDI5NzI1KQorKysgV2ViS2l0VG9v
bHMvR3RrTGF1bmNoZXIvbWFpbi5jCShBcmJlaXRza29waWUpCkBAIC03NCwxNiArNzQsMTYgQEAg
dGl0bGVfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldwogfQogCiBzdGF0aWMgdm9p
ZAotcHJvZ3Jlc3NfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBnaW50IHByb2dyZXNz
LCBncG9pbnRlciBkYXRhKQorcHJvZ3Jlc3NfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdl
LCBXZWJLaXRFdmVudExvYWQqIGV2ZW50LCBncG9pbnRlciBkYXRhKQogewotICAgIGxvYWRfcHJv
Z3Jlc3MgPSBwcm9ncmVzczsKKyAgICBsb2FkX3Byb2dyZXNzID0gZXZlbnQtPnByb2dyZXNzOwog
ICAgIHVwZGF0ZV90aXRsZSAoR1RLX1dJTkRPVyAobWFpbl93aW5kb3cpKTsKIH0KIAogc3RhdGlj
IHZvaWQKLWxvYWRfY29tbWl0X2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBXZWJLaXRXZWJGcmFt
ZSogZnJhbWUsIGdwb2ludGVyIGRhdGEpCitsb2FkX2NvbW1pdF9jYiAoV2ViS2l0V2ViVmlldyog
cGFnZSwgV2ViS2l0RXZlbnRMb2FkKiBldmVudCwgZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICBjb25z
dCBnY2hhciogdXJpID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKGZyYW1lKTsKKyAgICBjb25z
dCBnY2hhciogdXJpID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpKGV2ZW50LT5mcmFtZSk7CiAg
ICAgaWYgKHVyaSkKICAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0IChHVEtfRU5UUlkgKHVyaV9l
bnRyeSksIHVyaSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18817</attachid>
            <date>2008-01-31 08:42:23 -0800</date>
            <delta_ts>2008-02-05 11:49:23 -0800</delta_ts>
            <desc>Improve load signals Take 2</desc>
            <filename>load-signals.diff</filename>
            <type>text/plain</type>
            <size>29980</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShSZXZpc2lvbiAyOTg4NCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC0xLDcgKzEsNyBAQAog
LyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAq
ICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5
cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgor
ICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBp
bWVuZGlvLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNs
dWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4OCwy
MiArMTkwLDIwIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50aWZpZXIKIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQog
ewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUp
OwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFydGVkIiwgbV9m
cmFtZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1zdGFy
dGVkIik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRl
Q2hhbmdlZE5vdGlmaWNhdGlvbigpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdl
dFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7Ci0gICAgUGFnZSogY29yZVBhZ2UgPSBjb3JlKHdlYlZp
ZXcpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLXByb2dyZXNz
LWNoYW5nZWQiLCBscm91bmQoY29yZVBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNz
KCkqMTAwKSk7CisgICAgaW50IHByb2dyZXNzID0gbHJvdW5kKGNvcmUod2ViVmlldyktPnByb2dy
ZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCkgKiAxMDApOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZSh3ZWJWaWV3LCAicHJvZ3Jlc3MtY2hhbmdlZCIsIHByb2dyZXNzKTsKIH0KIAogdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKQogewog
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwot
Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgbV9m
cmFtZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1kb25l
Iik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkK
QEAgLTMzOCw5ICszMzgsNiBAQCBTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnQ6Om92ZXJyaWRlTWVk
aWFUCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OndpbmRvd09iamVjdENsZWFyZWQoKQogewot
ICAgIC8vIElzIHRoaXMgb2Jzb2xldGUgbm93PwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X2ZyYW1lLCAiY2xlYXJlZCIpOwotCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUod2ViRnJh
bWUoKSk7CiAgICAgQVNTRVJUKGNvcmVGcmFtZSk7CiAKQEAgLTM1NCw2ICszNTEsNyBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RDbGVhCiAgICAgSlNPYmplY3RSZWYgd2lu
ZG93T2JqZWN0ID0gdG9SZWYoS0pTOjpXaW5kb3c6OnJldHJpZXZlKGNvcmVGcmFtZSktPmdldE9i
amVjdCgpKTsKICAgICBBU1NFUlQod2luZG93T2JqZWN0KTsKIAorICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX2ZyYW1lLCAid2luZG93LW9iamVjdC1jbGVhcmVkIiwgY29udGV4dCwgd2luZG93
T2JqZWN0KTsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZSht
X2ZyYW1lKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgIndpbmRvdy1vYmpl
Y3QtY2xlYXJlZCIsIG1fZnJhbWUsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7CiAKQEAgLTM4Nyw5
ICszODUsMzcgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudDo6aGFzRnJhbWVWaWV3KCkgYwogICAg
IHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgdm9pZCBlbWl0TG9hZERvbmVFdmVudChXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBzaWduYWwsIGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycm9yPVJlc291cmNlRXJyb3IoKSwgYm9vbCBpc1Byb3Zpc2lvbmFsPWZhbHNlKQoreworICAg
IEdFcnJvciogZ2Vycm9yID0gZXJyb3I7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGZyYW1l
LCBzaWduYWwsIGdlcnJvciwgaXNQcm92aXNpb25hbCk7CisKKyAgICBpZiAoZ2Vycm9yKQorICAg
ICAgICBnX2Vycm9yX2ZyZWUoZ2Vycm9yKTsKK30KKworc3RhdGljIHZvaWQgZW1pdExvYWREb25l
RXZlbnQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHNpZ25hbCwgY29uc3Qg
UmVzb3VyY2VFcnJvciYgZXJyb3I9UmVzb3VyY2VFcnJvcigpLCBib29sIGlzUHJvdmlzaW9uYWw9
ZmFsc2UpCit7CisgICAgV2ViS2l0RXZlbnRMb2FkRG9uZSogZXZlbnQgPSAoV2ViS2l0RXZlbnRM
b2FkRG9uZSopZ19uZXcoV2ViS2l0RXZlbnRMb2FkRG9uZSwgMSk7CisgICAgZXZlbnQtPmZyYW1l
ID0gd2Via2l0X3dlYl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpOworICAgIGV2ZW50LT5y
ZXF1ZXN0X3VyaSA9IGdfc3RyZHVwKGNvcmUoZXZlbnQtPmZyYW1lKS0+bG9hZGVyKCktPm9yaWdp
bmFsUmVxdWVzdFVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGV2ZW50LT5wcm92
aXNpb25hbCA9IGlzUHJvdmlzaW9uYWw7CisgICAgZXZlbnQtPmVycm9yID0gZXJyb3I7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsIHNpZ25hbCwgZXZlbnQpOworCisgICAgZ19m
cmVlKGV2ZW50LT5yZXF1ZXN0X3VyaSk7CisgICAgaWYgKGV2ZW50LT5lcnJvcikKKyAgICAgICAg
Z19lcnJvcl9mcmVlKGV2ZW50LT5lcnJvcik7CisgICAgZ19mcmVlKGV2ZW50KTsKK30KKwogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKIHsKLSAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIHRydWUpOworICAgIGVtaXRM
b2FkRG9uZUV2ZW50KG1fZnJhbWUsICJsb2FkLWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZW1pdExv
YWREb25lRXZlbnQod2ViVmlldywgImxvYWQtZG9uZSIpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNDY1LDE5ICs0OTEsNDkgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRIYW5kbAogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKK3N0YXRpYyB2b2lkIGVtaXRSZWRpcmVjdEV2ZW50KFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3QgZ2NoYXIqIHNpZ25hbCwgY29uc3QgS1VS
TCYgZGVzdGluYXRpb24sIGRvdWJsZSB0aW1lLCBkb3VibGUgZGVsYXksIGJvb2wgaXNQcm92aXNp
b25hbD1mYWxzZSkKK3sKKyAgICBXZWJLaXRFdmVudFJlZGlyZWN0KiBldmVudCA9IChXZWJLaXRF
dmVudFJlZGlyZWN0KilnX25ldyhXZWJLaXRFdmVudFJlZGlyZWN0LCAxKTsKKyAgICBldmVudC0+
ZnJhbWUgPSBmcmFtZTsKKyAgICBldmVudC0+ZGVzdGluYXRpb25fdXJpID0gZ19zdHJkdXAoZGVz
dGluYXRpb24uc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgZXZlbnQtPnByb3Zpc2lvbmFs
ID0gaXNQcm92aXNpb25hbDsKKyAgICBldmVudC0+dGltZSA9IHRpbWU7CisgICAgZXZlbnQtPmRl
bGF5ID0gZGVsYXk7CisKKyAgICBpZiAod2ViVmlldykKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKHdlYlZpZXcsIHNpZ25hbCwgZXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKGZyYW1lLCBzaWduYWwsIGV2ZW50KTsKKworICAgIGdfZnJlZShldmVu
dC0+ZGVzdGluYXRpb25fdXJpKTsKKyAgICBnX2ZyZWUoZXZlbnQpOworfQorCiB2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lv
bmFsTG9hZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV9mcmFtZSwgInJlZGlyZWN0LWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdl
YmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1kb25lIiwgbV9mcmFtZSk7CiB9CiAKIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJh
bWUsICJyZWRpcmVjdC1jYW5jZWxsZWQiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1jYW5jZWxsZWQiLCBtX2ZyYW1lKTsKIH0KIAotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNv
bnN0IEtVUkwmLCBkb3VibGUsIGRvdWJsZSkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiBkZXN0aW5hdGlvbiwgZG91
YmxlIHRpbWUsIGRvdWJsZSBkZWxheSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGVt
aXRSZWRpcmVjdEV2ZW50KG1fZnJhbWUsIDAsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBkZXN0aW5h
dGlvbiwgdGltZSwgZGVsYXksIHRydWUpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0X3dl
Yl92aWV3X2dldF9tYWluX2ZyYW1lKHdlYlZpZXcpKQorICAgICAgICBlbWl0UmVkaXJlY3RFdmVu
dChtX2ZyYW1lLCB3ZWJWaWV3LCAicmVkaXJlY3Qtc2NoZWR1bGVkIiwgZGVzdGluYXRpb24sIHRp
bWUsIGRlbGF5LCB0cnVlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKQpAQCAtNDkzLDEyICs1NDksMTYgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsQ2xvcwogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCiB7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmll
dyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7Ci0KICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUod2ViVmlldywgImljb24tbG9hZGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogeworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1zdGFydGVkIik7CisKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBpZiAobV9m
cmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisgICAgICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFydGVkIiwgbV9mcmFtZSk7
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNv
bnN0IFN0cmluZyYgdGl0bGUpCkBAIC01MjgsNyArNTg4LDExIEBAIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OmRpc3BhdGNoRGlkQ29tbWkKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJkb2N1bWVudC1sb2FkLWRvbmUiKTsKKwor
ICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwor
ICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3
KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJkb2N1bWVudC1sb2Fk
LWRvbmUiLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hE
aWRGaXJzdExheW91dCgpCkBAIC02NzMsMTQgKzczNywyMiBAQCBib29sIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZExvYWRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3Vy
Y2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNp
b25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fZnJhbWUsICJsb2FkLWRvbmUiLCBmYWxzZSk7CisgICAgZW1pdExvYWREb25l
RXZlbnQobV9mcmFtZSwgImxvYWQtZG9uZSIsIGVycm9yLCB0cnVlKTsKKworICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2Zy
YW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAg
ZW1pdExvYWREb25lRXZlbnQod2ViVmlldywgImxvYWQtZG9uZSIsIGVycm9yLCB0cnVlKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbExvYWQo
Y29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG1fZnJhbWUsICJsb2FkLWRvbmUiLCBmYWxzZSk7CisgICAgZW1pdExvYWREb25lRXZlbnQobV9m
cmFtZSwgImxvYWQtZG9uZSIsIGVycm9yKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZW1pdExvYWREb25lRXZl
bnQod2ViVmlldywgImxvYWQtZG9uZSIsIGVycm9yKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKQEAgLTY4OCw0
MCArNzYwLDM0IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmMKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
OjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorUmVzb3VyY2VFcnJvciBG
cmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXRUJLSVRfUkVTT1VSQ0Vf
RVJST1JfQ0FOQ0VMTEVELCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJpbmc6OmZyb21V
VEY4KF8oIlJlcXVlc3QgY2FuY2VsbGVkIikpKTsKIH0KIAotUmVzb3VyY2VFcnJvciBGcmFtZUxv
YWRlckNsaWVudDo6YmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCitSZXNvdXJj
ZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JiByZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXRUJLSVRfUkVT
T1VSQ0VfRVJST1JfUkVTVFJJQ1RFRF9QT1JULCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBT
dHJpbmc6OmZyb21VVEY4KF8oIlJlcXVlc3QgYmxvY2tlZCIpKSk7CiB9CiAKLVJlc291cmNlRXJy
b3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd1VSTEVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1VSSSwgcmVxdWVzdC51cmwoKS5wcmV0
dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFibGUgdG8gZGlzcGxheSBVUkkiKSkpOwog
fQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjppbnRlcnJ1cHRGb3JQb2xpY3lD
aGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxv
YWRlckNsaWVudDo6aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXRUJLSVRf
UkVTT1VSQ0VfRVJST1JfUE9MSUNZX0NIQU5HRUQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCks
IFN0cmluZzo6ZnJvbVVURjgoXygiTG9hZCBpbnRlcnJ1cHRlZCBieSBwb2xpY3kgY2hhbmdlIikp
KTsKIH0KIAotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd01JTUVU
eXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCitSZXNvdXJjZUVycm9yIEZyYW1lTG9h
ZGVyQ2xpZW50OjpjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiByZXF1ZXN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXRUJLSVRfUkVTT1VS
Q0VfRVJST1JfTUlNRV9UWVBFLCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJpbmc6OmZy
b21VVEY4KF8oIlVuYWJsZSB0byBkaXNwbGF5IE1JTUUgdHlwZSIpKSk7CiB9CiAKLVJlc291cmNl
RXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmZpbGVEb2Vz
Tm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXF1ZXN0KQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoKTsKKyAgICByZXR1cm4g
UmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfRklMRV9OT1RfRk9V
TkQsIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmluZzo6ZnJvbVVURjgoXygiRmlsZSBu
b3QgZm91bmQiKSkpOwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpzaG91bGRGYWxsQmFj
ayhjb25zdCBSZXNvdXJjZUVycm9yJikKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3
ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmll
dy5jcHAJKFJldmlzaW9uIDI5ODg0KQorKysgV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZp
ZXcuY3BwCShBcmJlaXRza29waWUpCkBAIC0xLDkgKzEsOSBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgogICogIENvcHlyaWdo
dCAoQykgMjAwNyBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA4IEph
biBBbG9uem8gPGptYWxvbnpvQHVucGx1Z2dhYmxlLmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDggQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+CiAgKgogICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCkBAIC02Nyw4ICs2NywxNCBAQCBlbnVtIHsKICAgICBXSU5ET1dfT0JKRUNU
X0NMRUFSRUQsCiAgICAgTE9BRF9TVEFSVEVELAogICAgIExPQURfQ09NTUlUVEVELAotICAgIExP
QURfUFJPR1JFU1NfQ0hBTkdFRCwKLSAgICBMT0FEX0ZJTklTSEVELAorICAgIFBST0dSRVNTX1NU
QVJURUQsCisgICAgUFJPR1JFU1NfQ0hBTkdFRCwKKyAgICBQUk9HUkVTU19ET05FLAorICAgIExP
QURfRE9ORSwKKyAgICBSRURJUkVDVF9TQ0hFRFVMRUQsCisgICAgUkVESVJFQ1RfRE9ORSwKKyAg
ICBSRURJUkVDVF9DQU5DRUxMRUQsCisgICAgRE9DVU1FTlRfTE9BRF9ET05FLAogICAgIFRJVExF
X0NIQU5HRUQsCiAgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAogICAgIFNUQVRVU19CQVJfVEVYVF9D
SEFOR0VELApAQCAtOTYsNiArMTAyLDI0IEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQgd2Via2l0
X3dlYl92aWV3X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCitHVHlwZQord2Via2l0
X2V2ZW50X2xvYWRfZG9uZV9nZXRfdHlwZSAodm9pZCkKK3sKKyAgICBzdGF0aWMgR1R5cGUgdHlw
ZSA9IDA7CisgICAgaWYgKCF0eXBlKQorICAgICAgICB0eXBlID0gZ19wb2ludGVyX3R5cGVfcmVn
aXN0ZXJfc3RhdGljICgid2Via2l0X2V2ZW50X2xvYWRfZG9uZSIpOworICAgIHJldHVybiB0eXBl
OworfQorCitHVHlwZQord2Via2l0X2V2ZW50X3JlZGlyZWN0X2dldF90eXBlICh2b2lkKQorewor
ICAgIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKKyAgICBpZiAoIXR5cGUpCisgICAgICAgIHR5cGUg
PSBnX3BvaW50ZXJfdHlwZV9yZWdpc3Rlcl9zdGF0aWMgKCJ3ZWJraXRfZXZlbnRfcmVkaXJlY3Qi
KTsKKyAgICByZXR1cm4gdHlwZTsKK30KKwogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3LCB3
ZWJraXRfd2ViX3ZpZXcsIEdUS19UWVBFX0NPTlRBSU5FUikKIAogc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NvbnRleHRfbWVudV9wb3NpdGlvbl9mdW5jKEd0a01lbnUqLCBnaW50KiB4LCBn
aW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogZGF0YSkKQEAg
LTY2Myw5ICs2ODcsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
CiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1zdGFydGVkOgogICAgICAqIEB3
ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKLSAgICAg
KiBAZnJhbWU6IHRoZSBmcmFtZSBnb2luZyB0byBkbyB0aGUgbG9hZAorICAgICAqIEBmcmFtZTog
dGhlIGZyYW1lIHRoYXQgc3RhcnRlZCB0byBsb2FkCiAgICAgICoKLSAgICAgKiBXaGVuIGEgI1dl
YktpdFdlYkZyYW1lIGJlZ2lucyB0byBsb2FkIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAg
ICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBzdGFydHMgdG8gbG9hZCB0aGlzIHNpZ25hbCBpcyBl
bWl0dGVkLgogICAgICAqLwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfU1RBUlRF
RF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtc3RhcnRlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLApAQCAtNjc1LDEyICs2OTksMTIgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgICAgICAgICAgTlVMTCwKICAgICAgICAg
ICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCiAgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKLSAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CisgICAgICAgICAg
ICBHX1RZUEVfT0JKRUNUKTsKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmxvYWQt
Y29tbWl0dGVkOgogICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2ln
bmFsIGlzIGVtaXR0ZWQKLSAgICAgKiBAZnJhbWU6IHRoZSBtYWluIGZyYW1lIHRoYXQgcmVjZWl2
ZWQgdGhlIGZpcnN0IGRhdGEKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGF0IHJlY2VpdmVk
IHRoZSBmaXJzdCBkYXRhCiAgICAgICoKICAgICAgKiBXaGVuIGEgI1dlYktpdFdlYkZyYW1lIGxv
YWRlZCB0aGUgZmlyc3QgZGF0YSB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgogICAgICAqLwpAQCAt
NjkyLDE1ICs3MTYsMzEgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQo
VwogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19PQkpFQ1QsCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKLSAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1dFQl9GUkFNRSk7CisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKIAorICAgIC8q
KgorICAgICAqIFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLXN0YXJ0ZWQ6CisgICAgICogQHdlYl92
aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqCisg
ICAgICogV2hlbiBhIGxvYWRpbmcgcHJvZ3Jlc3Mgc3RhcnRzIHRoaXMgc2lnbmFsIGlzIGVtaXR0
ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbUFJPR1JFU1NfU1RBUlRF
RF0gPSBnX3NpZ25hbF9uZXcoInByb2dyZXNzLXN0YXJ0ZWQiLAorICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwogCiAgICAg
LyoqCi0gICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1wcm9ncmVzcy1jaGFuZ2VkOgorICAgICAq
IFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLWNoYW5nZWQ6CiAgICAgICogQHdlYl92aWV3OiB0aGUg
I1dlYktpdFdlYlZpZXcKLSAgICAgKiBAcHJvZ3Jlc3M6IHRoZSBnbG9iYWwgcHJvZ3Jlc3MKKyAg
ICAgKiBAcHJvZ3Jlc3M6IHRoZSBjdXJyZW50IGxvYWRpbmcgcHJvZ3Jlc3MKKyAgICAgKgorICAg
ICAqIFdoZW4gdGhlIGdsb2JhbCBsb2FkaW5nIHByb2dyZXNzIGNoYW5nZXMgdGhpcyBzaWduYWwg
aXMgZW1pdHRlZC4KICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tMT0FEX1BS
T0dSRVNTX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLAor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1BST0dSRVNTX0NIQU5HRURdID0gZ19zaWduYWxf
bmV3KCJwcm9ncmVzcy1jaGFuZ2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdl
YlZpZXdDbGFzcyksCiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFT
VCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAgICAgICAgICAwLApAQCAtNzEwLDcgKzc1MCw2OCBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMSwKICAgICAgICAgICAgIEdfVFlQRV9JTlQpOwogCi0gICAgd2Via2l0X3dl
Yl92aWV3X3NpZ25hbHNbTE9BRF9GSU5JU0hFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtZmluaXNo
ZWQiLAorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnByb2dyZXNzLWRvbmU6CisgICAg
ICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAgICAgKgorICAgICAqIFdoZW4gdGhl
IGdsb2JhbCBsb2FkaW5nIHByb2Nlc3MgaXMgZG9uZSB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgor
ICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1BST0dSRVNTX0RPTkVdID0gZ19z
aWduYWxfbmV3KCJwcm9ncmVzcy1kb25lIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5f
TEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVM
TCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6OmxvYWQtZG9uZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0
V2ViVmlldworICAgICAqIEBldmVudDogYSAjV2ViS2l0RXZlbnRMb2FkRG9uZQorICAgICAqCisg
ICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBpcyBkb25lIGxvYWRpbmcgdGhpcyBzaWduYWwg
aXMgZW1pdHRlZC4KKyAgICAgKgorICAgICAqIElmIHRoZSBsb2FkaW5nIGZhaWxlZCBmb3Igc29t
ZSByZWFzb24sIGV2ZW50LT5lcnJvciBpcyBub3QgTlVMTC4KKyAgICAgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tMT0FEX0RPTkVdID0gZ19zaWduYWxfbmV3KCJsb2FkLWRvbmUiLAor
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAg
IChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT1hFRCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfRVZFTlRfTE9BRF9ET05FKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJlZGlyZWN0LXNjaGVkdWxlZDoKKyAgICAg
KiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBldmVudDogYSAjV2ViS2l0
RXZlbnRSZWRpcmVjdAorICAgICAqCisgICAgICogV2hlbiBhIHNlcnZlciByZWRpcmVjdCBvbiAj
V2ViS2l0V2ViRnJhbWUgaXMgc2NoZWR1bGVkIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAg
ICoKKyAgICAgKiBUaGUgaW5mb3JtYXRpb24gaW4gQGV2ZW50IG1heSBiZSB1dGlsaXplZCB0byBk
aXNwbGF5CisgICAgICogc3RhdHVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSByZWRpcmVjdCB0byB0
aGUgdXNlci4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tSRURJUkVDVF9T
Q0hFRFVMRURdID0gZ19zaWduYWxfbmV3KCJyZWRpcmVjdC1zY2hlZHVsZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFs
RmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAg
IDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdf
Y2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT1hFRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAx
LAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfRVZFTlRfUkVESVJFQ1QpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0V2ViVmlldzo6cmVkaXJlY3QtZG9uZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldworICAgICAqCisgICAgICogV2hlbiBhIHNlcnZlciByZWRpcmVjdCBv
biAjV2ViS2l0V2ViRnJhbWUgd2FzIHBlcmZvcm1lZAorICAgICAqIHN1Y2Nlc3NmdWxseSB0aGlz
IHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W1JFRElSRUNUX0RPTkVdID0gZ19zaWduYWxfbmV3KCJyZWRpcmVjdC1kb25lIiwKICAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCiAgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCiAgICAgICAgICAg
ICAwLApAQCAtNzE4LDcgKzgxOSwzOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xh
c3NfaW5pdChXCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX09CSkVDVCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAotICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKKyAgICAgICAgICAgIEdfVFlQRV9PQkpFQ1QpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cmVkaXJlY3QtY2FuY2VsbGVkOgorICAg
ICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICoKKyAgICAgKiBXaGVuIGEg
c2VydmVyIHJlZGlyZWN0IG9uICNXZWJLaXRXZWJGcmFtZSB3YXMgY2FuY2VsbGVkIHRoaXMgc2ln
bmFsIGlzIGVtaXR0ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbUkVE
SVJFQ1RfQ0FOQ0VMTEVEXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtY2FuY2VsbGVkIiwKKyAg
ICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCisgICAgICAgICAgICBHX1RZUEVfT0JKRUNUKTsKKworICAgIC8qKgorICAgICAq
IFdlYktpdFdlYlZpZXc6OmRvY3VtZW50LWxvYWQtZG9uZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSAjV2ViS2l0V2ViVmlldworICAgICAqCisgICAgICogV2hlbiB0aGUgZG9jdW1lbnQgb2YgYSAj
V2ViS2l0V2ViRnJhbWUgd2FzIGxvYWRlZCB0aGlzIHNpZ25hbCBpcworICAgICAqIGVtaXR0ZWQu
IFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGFsbCBzdWJyZXNvdXJjZXMgd2Vy
ZSBsb2FkZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbRE9DVU1FTlRf
TE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygiZG9jdW1lbnQtbG9hZC1kb25lIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBn
X2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAw
KTsKIAogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OnRpdGxlLWNoYW5nZWQ6CkluZGV4
OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2ViZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJmcmFtZS5jcHAJKFJldmlzaW9uIDI5ODg0KQorKysg
V2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYmZyYW1lLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5
dGhlcgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC00Niw5ICs0NywxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIGV4dGVy
biAiQyIgewogCiBlbnVtIHsKLSAgICBDTEVBUkVELAorICAgIFdJTkRPV19PQkpFQ1RfQ0xFQVJF
RCwKKyAgICBMT0FEX1NUQVJURUQsCiAgICAgTE9BRF9DT01NSVRURUQsCiAgICAgTE9BRF9ET05F
LAorICAgIFJFRElSRUNUX1NDSEVEVUxFRCwKKyAgICBSRURJUkVDVF9ET05FLAorICAgIFJFRElS
RUNUX0NBTkNFTExFRCwKKyAgICBET0NVTUVOVF9MT0FEX0RPTkUsCiAgICAgVElUTEVfQ0hBTkdF
RCwKICAgICBIT1ZFUklOR19PVkVSX0xJTkssCiAgICAgTEFTVF9TSUdOQUwKQEAgLTEwNywxNCAr
MTEzLDI2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAgICAv
KgogICAgICAqIHNpZ25hbHMKICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNb
Q0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoImNsZWFyZWQiLAorICAgIHdlYmtpdF93ZWJfZnJhbWVf
c2lnbmFsc1tXSU5ET1dfT0JKRUNUX0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3aW5kb3ctb2Jq
ZWN0LWNsZWFyZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyks
CiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCiAgICAgICAgICAgICAwLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAg
IE5VTEwsCi0gICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKyAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURf
X1BPSU5URVJfUE9JTlRFUiwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAg
ICAgR19UWVBFX1BPSU5URVIsCisgICAgICAgICAgICBHX1RZUEVfUE9JTlRFUik7CisKKyAgICB3
ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbTE9BRF9TVEFSVEVEXSA9IGdfc2lnbmFsX25ldygibG9h
ZC1zdGFydGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAor
ICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9B
Q1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgR19UWVBFX09CSkVDVCk7CiAKICAg
ICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbTE9BRF9DT01NSVRURURdID0gZ19zaWduYWxfbmV3
KCJsb2FkLWNvbW1pdHRlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNs
YXNzKSwKQEAgLTEzNSw2ICsxNTMsNDMgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9mcmFtZV9j
bGFzc19pbml0KAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBHX1RZ
UEVfQk9PTEVBTik7CiAKKyAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbUkVESVJFQ1RfU0NI
RURVTEVEXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3Qtc2NoZWR1bGVkIiwKKyAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xv
c3VyZV9tYXJzaGFsX1ZPSURfX0JPWEVELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9SRURJUkVDVCk7CisKKyAgICB3ZWJraXRfd2Vi
X2ZyYW1lX3NpZ25hbHNbUkVESVJFQ1RfRE9ORV0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LWRv
bmUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisg
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAwKTsKKworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tSRURJUkVDVF9D
QU5DRUxMRURdID0gZ19zaWduYWxfbmV3KCJyZWRpcmVjdC1jYW5jZWxsZWQiLAorICAgICAgICAg
ICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
KworICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tET0NVTUVOVF9MT0FEX0RPTkVdID0gZ19z
aWduYWxfbmV3KCJkb2N1bWVudC1sb2FkLWRvbmUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01f
Q0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
TlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxf
Vk9JRF9fQk9PTEVBTiwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKKwogICAgIHdlYmtp
dF93ZWJfZnJhbWVfc2lnbmFsc1tUSVRMRV9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygidGl0bGUt
Y2hhbmdlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKICAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKSW5kZXg6IFdlYktpdC9ndGsvV2ViVmlldy93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2d0ay9XZWJWaWV3L3dlYmtpdHdlYnZpZXcuaAkoUmV2aXNpb24gMjk4ODQp
CisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0d2Vidmlldy5oCShBcmJlaXRza29waWUpCkBA
IC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0
aWFuQGltZW5kaW8uY29tPgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NCw4ICs0NSw1MSBAQCB0
eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9OQVZJR0FUSU9OX1JFU1BPTlNFX0RPV05MT0FECiB9
IFdlYktpdE5hdmlnYXRpb25SZXNwb25zZTsKIAotdHlwZWRlZiBlbnVtCi17Cit0eXBlZGVmIGVu
dW0geworICAgIFdFQktJVF9MT0FEX1NUQVRFX0NPTU1JVFRFRCwKKyAgICBXRUJLSVRfTE9BRF9T
VEFURV9QUk9HUkVTU19TVEFSVEVELAorICAgIFdFQktJVF9MT0FEX1NUQVRFX1BST0dSRVNTX0NI
QU5HRUQsCisgICAgV0VCS0lUX0xPQURfU1RBVEVfUFJPR1JFU1NfRklOSVNIRUQsCisgICAgV0VC
S0lUX0xPQURfU1RBVEVfRE9ORSwKK30gV2ViS2l0TG9hZFN0YXRlOworCit0eXBlZGVmIGVudW0g
eworICAgIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9DQU5DRUxMRUQsCisgICAgV0VCS0lUX1JFU09V
UkNFX0VSUk9SX1JFU1RSSUNURURfUE9SVCwKKyAgICBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfVVJJ
LAorICAgIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9QT0xJQ1lfQ0hBTkdFRCwKKyAgICBXRUJLSVRf
UkVTT1VSQ0VfRVJST1JfTUlNRV9UWVBFLAorICAgIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9GSUxF
X05PVF9GT1VORAorfSBXZWJLaXRSZXNvdXJjZUVycm9yOworCisjZGVmaW5lIFdFQktJVF9SRVNP
VVJDRV9FUlJPUiBnX3F1YXJrX2Zyb21fc3RyaW5nKCJXRUJLSVRfUkVTT1VSQ0VfRVJST1IiKQor
Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViRnJhbWUqIGZyYW1lOworICAgIGdjaGFy
KiByZXF1ZXN0X3VyaTsKKyAgICBnYm9vbGVhbiBwcm92aXNpb25hbDsKKyAgICBHRXJyb3IqIGVy
cm9yOworfSBXZWJLaXRFdmVudExvYWREb25lOworCisjZGVmaW5lIFdFQktJVF9UWVBFX0VWRU5U
X0xPQURfRE9ORSAod2Via2l0X2V2ZW50X2xvYWRfZG9uZV9nZXRfdHlwZSAoKSkKKworV0VCS0lU
X0FQSSBHVHlwZQord2Via2l0X2V2ZW50X2xvYWRfZG9uZV9nZXRfdHlwZSAodm9pZCk7CisKK3R5
cGVkZWYgc3RydWN0IHsKKyAgICBXZWJLaXRXZWJGcmFtZSogZnJhbWU7CisgICAgZ2NoYXIqIGRl
c3RpbmF0aW9uX3VyaTsKKyAgICBnYm9vbGVhbiBwcm92aXNpb25hbDsKKyAgICBndWludDMyIHRp
bWU7CisgICAgZ3VpbnQzMiBkZWxheTsKK30gV2ViS2l0RXZlbnRSZWRpcmVjdDsKKworI2RlZmlu
ZSBXRUJLSVRfVFlQRV9FVkVOVF9SRURJUkVDVCAod2Via2l0X2V2ZW50X3JlZGlyZWN0X2dldF90
eXBlICgpKQorCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfZXZlbnRfcmVkaXJlY3RfZ2V0X3R5
cGUgKHZvaWQpOworCit0eXBlZGVmIGVudW0gewogICAgIFdFQktJVF9XRUJfVklFV19UQVJHRVRf
SU5GT19IVE1MID0gLSAxLAogICAgIFdFQktJVF9XRUJfVklFV19UQVJHRVRfSU5GT19URVhUID0g
LSAyCiB9IFdlYktpdFdlYlZpZXdUYXJnZXRJbmZvOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlRXJyb3JHdGsuY3BwCShSZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNwcAkoUmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlc291cmNlRXJyb3IuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKworI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZXNvdXJjZUVycm9yOjpvcGVyYXRvciBHRXJyb3IqKCkgY29uc3QK
K3sKKyAgICBpZiAobV9pc051bGwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgR0Vycm9y
KiBlcnJvciA9IGdfZXJyb3JfbmV3KFdFQktJVF9SRVNPVVJDRV9FUlJPUiwgbV9lcnJvckNvZGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9jYWxpemVkRGVzY3JpcHRpb24u
dXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gZXJyb3I7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3IuaAko
UmV2aXNpb24gMjk4ODQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJv
ci5oCShBcmJlaXRza29waWUpCkBAIC00Myw2ICs0MywxMCBAQCBjbGFzcyBOU0Vycm9yOwogI2lu
Y2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGU3RyZWFtLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JN
KEdUSykKKyNpbmNsdWRlICJnbGliLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgY2xhc3MgUmVzb3VyY2VFcnJvciB7CkBAIC0xMDUsNiArMTA5LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBvcGVyYXRvciBDRlN0cmVhbUVycm9yKCkgY29uc3Q7CiAjZW5k
aWYKICNlbmRpZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgb3BlcmF0b3IgR0Vycm9yKigp
IGNvbnN0OworI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHVucGFja1BsYXRm
b3JtRXJyb3JJZk5lZWRlZCgpIGNvbnN0CkluZGV4OiBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0LW1h
cnNoYWwubGlzdAkoUmV2aXNpb24gMjk4ODQpCisrKyBXZWJLaXQvZ3RrL1dlYlZpZXcvd2Via2l0
LW1hcnNoYWwubGlzdAkoQXJiZWl0c2tvcGllKQpAQCAtNSw2ICs1LDcgQEAgVk9JRDpPQkpFQ1Qs
Qk9PTEVBTgogVk9JRDpPQkpFQ1QsU1RSSU5HCiBWT0lEOk9CSkVDVCxPQkpFQ1QKIFZPSUQ6T0JK
RUNULFBPSU5URVIsUE9JTlRFUgorVk9JRDpQT0lOVEVSLFBPSU5URVIKIEJPT0xFQU46U1RSSU5H
LElOVCxTVFJJTkcKIEJPT0xFQU46T0JKRUNULFNUUklORwogQk9PTEVBTjpPQkpFQ1QsU1RSSU5H
LEJPT0xFQU4KSW5kZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9HTlVtYWtlZmlsZS5hbQkoUmV2aXNpb24gMjk4ODQpCisrKyBXZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCShBcmJlaXRza29waWUpCkBAIC05NzksNyArOTc5LDggQEAgd2Via2l0Z3RrX3NvdXJj
ZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VEZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNP
SW1hZ2VEZWNvZGVyLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0v
WEJNSW1hZ2VEZWNvZGVyLmNwcCAKKwlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hi
bS9YQk1JbWFnZURlY29kZXIuY3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrL1Jl
c291cmNlRXJyb3JHdGsuY3BwCiAKICMgLS0tLQogIyBjdXJsIGh0dHAgYmFja2VuZApJbmRleDog
V2ViS2l0LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQucHJpCShSZXZpc2lvbiAyOTg4NCkKKysr
IFdlYktpdC5wcmkJKEFyYmVpdHNrb3BpZSkKQEAgLTY5LDYgKzY5LDcgQEAgcXQtcG9ydDpJTkNM
VURFUEFUSCArPSBcCiAgICAgJCRQV0QvV2ViS2l0L3F0L0FwaQogZ3RrLXBvcnQ6SU5DTFVERVBB
VEggKz0gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorICAgICQkQkFT
RV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCiAgICAgJCRCQVNFX0RJUi9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybCBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvIFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUvbG9hZGVyL2d0ayBc
CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS5wcm8JKFJldmlzaW9uIDI5ODg0KQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkoQXJiZWl0c2tv
cGllKQpAQCAtMTQ1LDYgKzE0NSw3IEBAIGd0ay1wb3J0IHsKICAgICAkJFBXRC9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlybyBcCiAgICAgJCRQV0Qvc3ZnL2dyYXBoaWNzL2NhaXJvIFwKICAgICAkJFBX
RC9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwgXAorICAgICQkUFdEL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
IFwKICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyBcCiAgICAgJCRQV0QvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9naWYgXApAQCAtMTA1Myw2ICsxMDU0LDcgQEAgZ3RrLXBvcnQgewogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3Jr
L2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL25ldHdvcmsv
Y3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vbmV0d29y
ay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgXApJbmRleDogV2ViS2l0VG9vbHMvR3RrTGF1
bmNoZXIvbWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4u
YwkoUmV2aXNpb24gMjk4ODQpCisrKyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKEFy
YmVpdHNrb3BpZSkKQEAgLTc0LDcgKzc0LDcgQEAgdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRXZWJW
aWV3KiB3ZWJfdmlldwogfQogCiBzdGF0aWMgdm9pZAotcHJvZ3Jlc3NfY2hhbmdlX2NiIChXZWJL
aXRXZWJWaWV3KiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQorcHJvZ3Jlc3Nf
Y2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBndWludCBwcm9ncmVzcywgZ3BvaW50ZXIg
ZGF0YSkKIHsKICAgICBsb2FkX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CiAgICAgdXBkYXRlX3RpdGxl
IChHVEtfV0lORE9XIChtYWluX3dpbmRvdykpOwpAQCAtMTE2LDcgKzExNiw3IEBAIGNyZWF0ZV9i
cm93c2VyICgpCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHNjcm9sbGVk
X3dpbmRvdyksIEdUS19XSURHRVQgKHdlYl92aWV3KSk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0
IChHX09CSkVDVCAod2ViX3ZpZXcpLCAidGl0bGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHRpdGxl
X2NoYW5nZV9jYiksIHdlYl92aWV3KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAo
d2ViX3ZpZXcpLCAibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAocHJvZ3Jlc3Nf
Y2hhbmdlX2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3
ZWJfdmlldyksICJwcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAocHJvZ3Jlc3NfY2hhbmdl
X2NiKSwgd2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmll
dyksICJsb2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sgKGxvYWRfY29tbWl0X2NiKSwgd2ViX3Zp
ZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJob3Zlcmlu
Zy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3ZpZXcpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18937</attachid>
            <date>2008-02-05 11:49:23 -0800</date>
            <delta_ts>2008-02-06 15:38:15 -0800</delta_ts>
            <desc>Improve load signals Take 3</desc>
            <filename>load-signals-1.diff</filename>
            <type>text/plain</type>
            <size>41154</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJ
KFJldmlzaW9uIDMwMDAwKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC05MywxNCArOTMsMTQgQEAgdm9pZCBDaHJvbWVD
bGllbnQ6OnVuZm9jdXMoKQogICAgICAgICBndGtfd2luZG93X3NldF9mb2N1cyhHVEtfV0lORE9X
KHdpbmRvdyksIE5VTEwpOwogfQogCi1QYWdlKiBDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhG
cmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgZmVh
dHVyZXMpCitQYWdlKiBDaHJvbWVDbGllbnQ6OmNyZWF0ZVdpbmRvdyhGcmFtZSogZnJhbWUsIGNv
bnN0IEZyYW1lTG9hZFJlcXVlc3QmLCBjb25zdCBXaW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMpCiB7
CiAgICAgaWYgKGZlYXR1cmVzLmRpYWxvZykgewogICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBUT0RPOiBGcmFtZUxv
YWRSZXF1ZXN0IGlzIG5vdCB1c2VkICovCi0gICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBXRUJLSVRfV0VCX1ZJRVdfR0VUX0NMQVNTKG1fd2ViVmlldyktPmNyZWF0ZV93ZWJfdmlldyht
X3dlYlZpZXcpOworICAgICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gV0VCS0lUX1dFQl9W
SUVXX0dFVF9DTEFTUyhtX3dlYlZpZXcpLT5jcmVhdGVfd2ViX3ZpZXcoa2l0KGZyYW1lKSk7CiAg
ICAgICAgIGlmICghd2ViVmlldykKICAgICAgICAgICAgIHJldHVybiAwOwogCkBAIC0yMzYsNyAr
MjM2LDcgQEAgYm9vbCBDaHJvbWVDbGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRgogdm9pZCBD
aHJvbWVDbGllbnQ6OnNldFN0YXR1c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAg
ICAgQ1N0cmluZyBzdHJpbmdNZXNzYWdlID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV93ZWJWaWV3LCAic3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCBzdHJpbmdN
ZXNzYWdlLmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgInN0
YXR1c2Jhci10ZXh0LWNoYW5nZWQiLCBzdHJpbmdNZXNzYWdlLmRhdGEoKSk7CiB9CiAKIGJvb2wg
Q2hyb21lQ2xpZW50OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKSW5kZXg6IFdlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShSZXZp
c2lvbiAzMDAwMCkKKysrIFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmln
aHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcg
Q2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AdHdvdG9hc3RzLmRlPgorICogIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFt
ZS5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxnbGliL2dpMThuLmg+CisKIHVzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViS2l0IHsKQEAgLTE4OCwyMiArMTkwLDIyIEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50aWZpZXIKIHZvaWQgRnJhbWVMb2FkZXJD
bGllbnQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFydGVkIiwgbV9mcmFtZSk7CisgICAgdW5z
aWduZWQgcHJvZ3Jlc3MgPSBscm91bmQoY29yZSh3ZWJWaWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1h
dGVkUHJvZ3Jlc3MoKSAqIDEwMCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcs
ICJwcm9ncmVzcy1zdGFydGVkIiwgcHJvZ3Jlc3MpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQogewogICAgIFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIFBh
Z2UqIGNvcmVQYWdlID0gY29yZSh3ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJWaWV3LCAibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwgbHJvdW5kKGNvcmVQYWdlLT5wcm9n
cmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpKjEwMCkpOworICAgIHVuc2lnbmVkIHByb2dyZXNz
ID0gbHJvdW5kKGNvcmUod2ViVmlldyktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCkg
KiAxMDApOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAicHJvZ3Jlc3MtY2hh
bmdlZCIsIHByb2dyZXNzKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dy
ZXNzRmluaXNoZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KHdlYlZpZXcsICJsb2FkLWZpbmlzaGVkIiwgbV9mcmFtZSk7CisgICAgdW5zaWduZWQgcHJvZ3Jl
c3MgPSBscm91bmQoY29yZSh3ZWJWaWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3Mo
KSAqIDEwMCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1k
b25lIiwgcHJvZ3Jlc3MpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRl
ckRlc3Ryb3llZCgpCkBAIC0zMzgsOSArMzQwLDYgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50
OjpvdmVycmlkZU1lZGlhVAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RD
bGVhcmVkKCkKIHsKLSAgICAvLyBJcyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV9mcmFtZSwgImNsZWFyZWQiKTsKLQogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKHdlYkZyYW1lKCkpOwogICAgIEFTU0VSVChjb3JlRnJhbWUpOwogCkBAIC0zNTQsNiAr
MzUzLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYQogICAgIEpT
T2JqZWN0UmVmIHdpbmRvd09iamVjdCA9IHRvUmVmKEtKUzo6V2luZG93OjpyZXRyaWV2ZShjb3Jl
RnJhbWUpLT5nZXRPYmplY3QoKSk7CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIGNv
bnRleHQsIHdpbmRvd09iamVjdCk7CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZp
ZXdGcm9tRnJhbWUobV9mcmFtZSk7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcs
ICJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLCBtX2ZyYW1lLCBjb250ZXh0LCB3aW5kb3dPYmplY3Qp
OwogCkBAIC0zODcsOSArMzg3LDI5IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnQ6Omhhc0ZyYW1l
VmlldygpIGMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZW1pdExvYWREb25l
RXZlbnQoV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcj1S
ZXNvdXJjZUVycm9yKCksIGJvb2wgaXNQcm92aXNpb25hbD1mYWxzZSkKK3sKKyAgICBXZWJLaXRF
dmVudExvYWREb25lKiBldmVudCA9IChXZWJLaXRFdmVudExvYWREb25lKilnX25ldyhXZWJLaXRF
dmVudExvYWREb25lLCAxKTsKKyAgICBldmVudC0+ZnJhbWUgPSBmcmFtZTsKKyAgICBldmVudC0+
cmVxdWVzdF91cmkgPSBnX3N0cmR1cChjb3JlKGV2ZW50LT5mcmFtZSktPmxvYWRlcigpLT5vcmln
aW5hbFJlcXVlc3RVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBldmVudC0+cHJv
dmlzaW9uYWwgPSBpc1Byb3Zpc2lvbmFsOworICAgIGV2ZW50LT5lcnJvciA9IGVycm9yOworCisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKGZyYW1lLCAibG9hZC1kb25lIiwgZXZlbnQpOworCisg
ICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUoZnJhbWUpOworICAg
IGlmIChmcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisg
ICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1kb25lIiwgZXZlbnQp
OworCisgICAgZ19mcmVlKGV2ZW50LT5yZXF1ZXN0X3VyaSk7CisgICAgaWYgKGV2ZW50LT5lcnJv
cikKKyAgICAgICAgZ19lcnJvcl9mcmVlKGV2ZW50LT5lcnJvcik7CisgICAgZ19mcmVlKGV2ZW50
KTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkK
IHsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIHRydWUp
OworICAgIGVtaXRMb2FkRG9uZUV2ZW50KG1fZnJhbWUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQpAQCAtNDY3LDE3ICs0ODcsMzggQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRIYW5kbAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9m
cmFtZSwgInJlZGlyZWN0LWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBn
ZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKHdlYlZpZXcsICJyZWRpcmVjdC1kb25lIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJyZWRp
cmVjdC1jYW5jZWxsZWQiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3
RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19n
ZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdl
YlZpZXcsICJyZWRpcmVjdC1jYW5jZWxsZWQiLCBtX2ZyYW1lKTsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwm
LCBkb3VibGUsIGRvdWJsZSkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFBl
cmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiBkZXN0aW5hdGlvbiwgZG91YmxlIHRpbWUs
IGRvdWJsZSBkZWxheSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIFdlYktpdEV2ZW50
UmVkaXJlY3QqIGV2ZW50ID0gKFdlYktpdEV2ZW50UmVkaXJlY3QqKWdfbmV3KFdlYktpdEV2ZW50
UmVkaXJlY3QsIDEpOworICAgIGV2ZW50LT5mcmFtZSA9IG1fZnJhbWU7CisgICAgZXZlbnQtPmRl
c3RpbmF0aW9uX3VyaSA9IGdfc3RyZHVwKGRlc3RpbmF0aW9uLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGV2ZW50LT50aW1lID0gdGltZTsKKyAgICBldmVudC0+ZGVsYXkgPSBkZWxheTsK
KworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAicmVkaXJlY3Qtc2NoZWR1bGVk
IiwgZXZlbnQpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJh
bWUobV9mcmFtZSk7CisgICAgaWYgKG1fZnJhbWUgPT0gd2Via2l0X3dlYl92aWV3X2dldF9tYWlu
X2ZyYW1lKHdlYlZpZXcpKQorICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywg
InJlZGlyZWN0LXNjaGVkdWxlZCIsIGV2ZW50KTsKKworICAgIGdfZnJlZShldmVudC0+ZGVzdGlu
YXRpb25fdXJpKTsKKyAgICBnX2ZyZWUoZXZlbnQpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpCkBAIC00OTIsMTMgKzUz
MywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQogewotICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotCi0gICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJpY29uLWxvYWRlZCIsIG1fZnJhbWUpOworICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNo
RGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogeworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X2ZyYW1lLCAibG9hZC1zdGFydGVkIik7CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
Z2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKKyAgICBpZiAobV9mcmFtZSA9PSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFydGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUp
CkBAIC01MjgsNyArNTcyLDExIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
Q29tbWkKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVu
dExvYWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fZnJhbWUsICJkb2N1bWVudC1sb2FkLWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09
IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJkb2N1bWVudC1sb2FkLWRvbmUiLCBtX2ZyYW1lKTsK
IH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCkBA
IC02NzMsMTQgKzcyMSwxNCBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExv
YWRSCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVz
b3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUs
ICJsb2FkLWRvbmUiLCBmYWxzZSk7CisgICAgZW1pdExvYWREb25lRXZlbnQobV9mcmFtZSwgZXJy
b3IsIHRydWUpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxM
b2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKKyAgICBlbWl0TG9h
ZERvbmVFdmVudChtX2ZyYW1lLCBlcnJvcik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCkBAIC02ODgsNDAgKzcz
NiwzNCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpkb3dubG9hZChSZXNvdXJjCiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KIAotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2Fu
Y2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9S
X0NBTkNFTExFRCwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChf
KCJSZXF1ZXN0IGNhbmNlbGxlZCIpKSk7CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJD
bGllbnQ6OmJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorUmVzb3VyY2VFcnJv
ciBGcmFtZUxvYWRlckNsaWVudDo6YmxvY2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNF
X0VSUk9SX1JFU1RSSUNURURfUE9SVCwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5n
Ojpmcm9tVVRGOChfKCJSZXF1ZXN0IGJsb2NrZWQiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZy
YW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJF
cnJvciIsIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9VUkksIHJlcXVlc3QudXJsKCkucHJldHR5VVJM
KCksIFN0cmluZzo6ZnJvbVVURjgoXygiVW5hYmxlIHRvIGRpc3BsYXkgVVJJIikpKTsKIH0KIAot
UmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdl
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJD
bGllbnQ6OmludGVycnVwdEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJj
ZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09V
UkNFX0VSUk9SX1BPTElDWV9DSEFOR0VELCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJp
bmc6OmZyb21VVEY4KF8oIkxvYWQgaW50ZXJydXB0ZWQgYnkgcG9saWN5IGNoYW5nZSIpKSk7CiB9
CiAKLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNs
aWVudDo6Y2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVx
dWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9y
KCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VS
Uk9SX01JTUVfVFlQRSwgcmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRG
OChfKCJVbmFibGUgdG8gZGlzcGxheSBNSU1FIHR5cGUiKSkpOwogfQogCi1SZXNvdXJjZUVycm9y
IEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4
aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX0ZJTEVfTk9UX0ZPVU5ELCBy
ZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KF8oIkZpbGUgbm90IGZv
dW5kIikpKTsKIH0KIAogYm9vbCBGcmFtZUxvYWRlckNsaWVudDo6c2hvdWxkRmFsbEJhY2soY29u
c3QgUmVzb3VyY2VFcnJvciYpCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3Bw
CShSZXZpc2lvbiAzMDAwMCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNw
cAkoQXJiZWl0c2tvcGllKQpAQCAtNDcsOSArNDcsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiBleHRlcm4gIkMiIHsKIAogZW51bSB7Ci0gICAgQ0xFQVJFRCwKKyAgICBXSU5ET1dfT0JK
RUNUX0NMRUFSRUQsCisgICAgTE9BRF9TVEFSVEVELAogICAgIExPQURfQ09NTUlUVEVELAogICAg
IExPQURfRE9ORSwKKyAgICBSRURJUkVDVF9TQ0hFRFVMRUQsCisgICAgUkVESVJFQ1RfRE9ORSwK
KyAgICBSRURJUkVDVF9DQU5DRUxMRUQsCisgICAgRE9DVU1FTlRfTE9BRF9ET05FLAogICAgIFRJ
VExFX0NIQU5HRUQsCiAgICAgSE9WRVJJTkdfT1ZFUl9MSU5LLAogICAgIExBU1RfU0lHTkFMCkBA
IC0xMDgsNyArMTEzLDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5p
dCgKICAgICAvKgogICAgICAqIHNpZ25hbHMKICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX2ZyYW1l
X3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3NpZ25hbF9uZXcoImNsZWFyZWQiLAorICAgIHdlYmtpdF93
ZWJfZnJhbWVfc2lnbmFsc1tXSU5ET1dfT0JKRUNUX0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3
aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJh
bWVDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8
IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19QT0lOVEVS
X1BPSU5URVIsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQ
RV9QT0lOVEVSLAorICAgICAgICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgd2Via2l0X3dl
Yl9mcmFtZV9zaWduYWxzW0xPQURfU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtc3RhcnRl
ZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKICAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
ICAgICAgICAgICAgIDAsCkBAIC0xMzIsOSArMTQ4LDQ2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICBOVUxMLAog
ICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19C
T09MRUFOLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0JPWEVELAogICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDEsCi0gICAgICAgICAgICBHX1RZUEVfQk9PTEVBTik7Cisg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9MT0FEX0RPTkUpOworCisgICAgd2Via2l0X3dl
Yl9mcmFtZV9zaWduYWxzW1JFRElSRUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGly
ZWN0LXNjaGVkdWxlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNz
KSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdO
QUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAg
ICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT1hFRCwKKyAg
ICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfRVZFTlRf
UkVESVJFQ1QpOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1JFRElSRUNUX0RPTkVd
ID0gZ19zaWduYWxfbmV3KCJyZWRpcmVjdC1kb25lIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9N
X0NMQVNTKGZyYW1lQ2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxf
UlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
IE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFs
X1ZPSURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICB3ZWJraXRf
d2ViX2ZyYW1lX3NpZ25hbHNbUkVESVJFQ1RfQ0FOQ0VMTEVEXSA9IGdfc2lnbmFsX25ldygicmVk
aXJlY3QtY2FuY2VsbGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CisKKyAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25h
bHNbRE9DVU1FTlRfTE9BRF9ET05FXSA9IGdfc2lnbmFsX25ldygiZG9jdW1lbnQtbG9hZC1kb25l
IiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLAorICAgICAgICAg
ICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAor
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAg
ICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCisgICAgICAgICAgICBHX1RZ
UEVfTk9ORSwgMCk7CiAKICAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbVElUTEVfQ0hBTkdF
RF0gPSBnX3NpZ25hbF9uZXcoInRpdGxlLWNoYW5nZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1MoZnJhbWVDbGFzcyksCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQtbWFy
c2hhbC5saXN0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC1tYXJzaGFs
Lmxpc3QJKFJldmlzaW9uIDMwMDAwKQorKysgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LW1hcnNo
YWwubGlzdAkoQXJiZWl0c2tvcGllKQpAQCAtNSw2ICs1LDcgQEAgVk9JRDpPQkpFQ1QsQk9PTEVB
TgogVk9JRDpPQkpFQ1QsU1RSSU5HCiBWT0lEOk9CSkVDVCxPQkpFQ1QKIFZPSUQ6T0JKRUNULFBP
SU5URVIsUE9JTlRFUgorVk9JRDpQT0lOVEVSLFBPSU5URVIKIEJPT0xFQU46U1RSSU5HLElOVCxT
VFJJTkcKIEJPT0xFQU46T0JKRUNULFNUUklORwogQk9PTEVBTjpPQkpFQ1QsU1RSSU5HLEJPT0xF
QU4KSW5kZXg6IFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShSZXZpc2lvbiAzMDAwMCkK
KysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCShBcmJlaXRza29waWUpCkBA
IC02NywxNCArNjcsMTggQEAgZW51bSB7CiAgICAgV0lORE9XX09CSkVDVF9DTEVBUkVELAogICAg
IExPQURfU1RBUlRFRCwKICAgICBMT0FEX0NPTU1JVFRFRCwKLSAgICBMT0FEX1BST0dSRVNTX0NI
QU5HRUQsCi0gICAgTE9BRF9GSU5JU0hFRCwKKyAgICBQUk9HUkVTU19TVEFSVEVELAorICAgIFBS
T0dSRVNTX0NIQU5HRUQsCisgICAgUFJPR1JFU1NfRE9ORSwKKyAgICBMT0FEX0RPTkUsCisgICAg
UkVESVJFQ1RfU0NIRURVTEVELAorICAgIFJFRElSRUNUX0RPTkUsCisgICAgUkVESVJFQ1RfQ0FO
Q0VMTEVELAorICAgIERPQ1VNRU5UX0xPQURfRE9ORSwKICAgICBUSVRMRV9DSEFOR0VELAogICAg
IEhPVkVSSU5HX09WRVJfTElOSywKICAgICBQT1BVTEFURV9QT1BVUCwKLSAgICBTVEFUVVNfQkFS
X1RFWFRfQ0hBTkdFRCwKLSAgICBJQ09ORF9MT0FERUQsCi0gICAgU0VMRUNUSU9OX0NIQU5HRUQs
CisgICAgU1RBVFVTQkFSX1RFWFRfQ0hBTkdFRCwKICAgICBDT05TT0xFX01FU1NBR0UsCiAgICAg
U0NSSVBUX0FMRVJULAogICAgIFNDUklQVF9DT05GSVJNLApAQCAtOTcsNiArMTAxLDI0IEBAIGVu
dW0gewogCiBzdGF0aWMgZ3VpbnQgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTEFTVF9TSUdOQUxd
ID0geyAwLCB9OwogCitHVHlwZQord2Via2l0X2V2ZW50X2xvYWRfZG9uZV9nZXRfdHlwZSAodm9p
ZCkKK3sKKyAgICBzdGF0aWMgR1R5cGUgdHlwZSA9IDA7CisgICAgaWYgKCF0eXBlKQorICAgICAg
ICB0eXBlID0gZ19wb2ludGVyX3R5cGVfcmVnaXN0ZXJfc3RhdGljICgid2Via2l0X2V2ZW50X2xv
YWRfZG9uZSIpOworICAgIHJldHVybiB0eXBlOworfQorCitHVHlwZQord2Via2l0X2V2ZW50X3Jl
ZGlyZWN0X2dldF90eXBlICh2b2lkKQoreworICAgIHN0YXRpYyBHVHlwZSB0eXBlID0gMDsKKyAg
ICBpZiAoIXR5cGUpCisgICAgICAgIHR5cGUgPSBnX3BvaW50ZXJfdHlwZV9yZWdpc3Rlcl9zdGF0
aWMgKCJ3ZWJraXRfZXZlbnRfcmVkaXJlY3QiKTsKKyAgICByZXR1cm4gdHlwZTsKK30KKwogR19E
RUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3LCB3ZWJraXRfd2ViX3ZpZXcsIEdUS19UWVBFX0NPTlRB
SU5FUikKIAogc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NvbnRleHRfbWVudV9wb3NpdGlv
bl9mdW5jKEd0a01lbnUqLCBnaW50KiB4LCBnaW50KiB5LCBnYm9vbGVhbiogcHVzaEluLCBXZWJL
aXRXZWJWaWV3UHJpdmF0ZSogZGF0YSkKQEAgLTQ1Niw3ICs0NzgsNyBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfd2ViX3ZpZXdfY29udGFpbmVyX2ZvCiAgICAgICAgICgqY2FsbGJhY2spKCpjdXJyZW50
LCBjYWxsYmFja0RhdGEpOwogfQogCi1zdGF0aWMgV2ViS2l0V2ViVmlldyogd2Via2l0X3dlYl92
aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3KFdlYktpdFdlYlZpZXcqKQorc3RhdGljIFdlYktpdFdl
YlZpZXcqIHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93ZWJfdmlldyhXZWJLaXRXZWJGcmFt
ZSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTY4NiwxNCAr
NzA4LDE0IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICAv
KioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXN0YXJ0ZWQ6CiAgICAgICogQHdlYl92aWV3
OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFt
ZTogdGhlIGZyYW1lIGdvaW5nIHRvIGRvIHRoZSBsb2FkCisgICAgICogQGZyYW1lOiB0aGUgZnJh
bWUgdGhhdCBzdGFydGVkIHRvIGxvYWQKICAgICAgKgotICAgICAqIFdoZW4gYSAjV2ViS2l0V2Vi
RnJhbWUgYmVnaW5zIHRvIGxvYWQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KKyAgICAgKiBXaGVu
IGEgI1dlYktpdFdlYkZyYW1lIHN0YXJ0cyB0byBsb2FkIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQu
CiAgICAgICovCiAgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTE9BRF9TVEFSVEVEXSA9IGdf
c2lnbmFsX25ldygibG9hZC1zdGFydGVkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KHdlYlZpZXdDbGFzcyksCiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5f
TEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgbG9hZF9zdGFydGVkKSwKICAgICAgICAg
ICAgIE5VTEwsCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX09CSkVDVCwKQEAgLTcwMyw0MCArNzI1LDE1NyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgLyoqCiAgICAgICogV2ViS2l0V2ViVmlldzo6
bG9hZC1jb21taXR0ZWQ6CiAgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNoIHRo
ZSBzaWduYWwgaXMgZW1pdHRlZAotICAgICAqIEBmcmFtZTogdGhlIG1haW4gZnJhbWUgdGhhdCBy
ZWNlaXZlZCB0aGUgZmlyc3QgZGF0YQorICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIHRoYXQgcmVj
ZWl2ZWQgdGhlIGZpcnN0IGRhdGEKICAgICAgKgogICAgICAqIFdoZW4gYSAjV2ViS2l0V2ViRnJh
bWUgbG9hZGVkIHRoZSBmaXJzdCBkYXRhIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCiAgICAgICov
CiAgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTE9BRF9DT01NSVRURURdID0gZ19zaWduYWxf
bmV3KCJsb2FkLWNvbW1pdHRlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJW
aWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1Qg
fCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNU
X09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGxvYWRfY29tbWl0dGVkKSwKICAgICAgICAgICAg
IE5VTEwsCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFs
X1ZPSURfX09CSkVDVCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAg
V0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6
OnByb2dyZXNzLXN0YXJ0ZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZAorICAgICAqIEBwcm9ncmVzczogdGhlIGN1cnJlbnQgbG9h
ZGluZyBwcm9ncmVzcworICAgICAqCisgICAgICogV2hlbiBhIGxvYWRpbmcgcHJvZ3Jlc3Mgc3Rh
cnRzIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3
X3NpZ25hbHNbUFJPR1JFU1NfU1RBUlRFRF0gPSBnX3NpZ25hbF9uZXcoInByb2dyZXNzLXN0YXJ0
ZWQiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHByb2dy
ZXNzX3N0YXJ0ZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAg
ICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fSU5ULAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCisgICAgICAgICAgICBHX1RZUEVfSU5UKTsKIAogICAgIC8qKgotICAgICAqIFdl
YktpdFdlYlZpZXc6OmxvYWQtcHJvZ3Jlc3MtY2hhbmdlZDoKKyAgICAgKiBXZWJLaXRXZWJWaWV3
Ojpwcm9ncmVzcy1jaGFuZ2VkOgogICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3
Ci0gICAgICogQHByb2dyZXNzOiB0aGUgZ2xvYmFsIHByb2dyZXNzCisgICAgICogQHByb2dyZXNz
OiB0aGUgY3VycmVudCBsb2FkaW5nIHByb2dyZXNzCisgICAgICoKKyAgICAgKiBXaGVuIHRoZSBn
bG9iYWwgbG9hZGluZyBwcm9ncmVzcyBjaGFuZ2VzIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCiAg
ICAgICovCi0gICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTE9BRF9QUk9HUkVTU19DSEFOR0VE
XSA9IGdfc2lnbmFsX25ldygibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwKKyAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3Mt
Y2hhbmdlZCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAog
ICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9B
Q1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJL
aXRXZWJWaWV3Q2xhc3MsIHByb2dyZXNzX2NoYW5nZWQpLAogICAgICAgICAgICAgTlVMTCwKICAg
ICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fSU5U
LAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBHX1RZUEVfSU5UKTsK
IAotICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfRklOSVNIRURdID0gZ19zaWduYWxf
bmV3KCJsb2FkLWZpbmlzaGVkIiwKKyAgICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojpwcm9n
cmVzcy1kb25lOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICog
QHByb2dyZXNzOiB0aGUgY3VycmVudCBsb2FkaW5nIHByb2dyZXNzCisgICAgICoKKyAgICAgKiBX
aGVuIHRoZSBnbG9iYWwgbG9hZGluZyBwcm9jZXNzIGlzIGRvbmUgdGhpcyBzaWduYWwgaXMgZW1p
dHRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19ET05F
XSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3MtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJP
TV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdO
QUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcHJvZ3Jlc3NfZG9uZSksCisgICAgICAgICAgICBOVUxM
LAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19JTlQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIEdfVFlQRV9J
TlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6bG9hZC1kb25lOgorICAgICAq
IEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICogQGV2ZW50OiBhICNXZWJLaXRF
dmVudExvYWREb25lCisgICAgICoKKyAgICAgKiBXaGVuIGEgI1dlYktpdFdlYkZyYW1lIGlzIGRv
bmUgbG9hZGluZyB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqCisgICAgICogSWYgdGhl
IGxvYWRpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbiwgZXZlbnQtPmVycm9yIGlzIG5vdCBOVUxM
LgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfRE9ORV0gPSBnX3Np
Z25hbF9uZXcoImxvYWQtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJW
aWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1Qg
fCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdl
YlZpZXdDbGFzcywgbG9hZF9kb25lKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0JPWEVELAorICAgICAg
ICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9MT0FE
X0RPTkUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cmVkaXJlY3Qtc2NoZWR1
bGVkOgorICAgICAqIEB3ZWJfdmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICogQGV2ZW50
OiBhICNXZWJLaXRFdmVudFJlZGlyZWN0CisgICAgICoKKyAgICAgKiBXaGVuIGEgc2VydmVyIHJl
ZGlyZWN0IG9uICNXZWJLaXRXZWJGcmFtZSBpcyBzY2hlZHVsZWQgdGhpcyBzaWduYWwgaXMgZW1p
dHRlZC4KKyAgICAgKgorICAgICAqIFRoZSBpbmZvcm1hdGlvbiBpbiBAZXZlbnQgbWF5IGJlIHV0
aWxpemVkIHRvIGRpc3BsYXkKKyAgICAgKiBzdGF0dXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJl
ZGlyZWN0IHRvIHRoZSB1c2VyLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W1JFRElSRUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LXNjaGVkdWxlZCIs
CisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAg
ICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAor
ICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVkaXJlY3Rf
c2NoZWR1bGVkKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAg
ICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX0JPWEVELAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9FVkVOVF9SRURJUkVDVCk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRXZWJWaWV3OjpyZWRpcmVjdC1kb25lOgorICAgICAqIEB3ZWJf
dmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgdGhlIHJl
ZGlyZWN0IG9jY3VyZWQgdG8KKyAgICAgKgorICAgICAqIFdoZW4gYSBzZXJ2ZXIgcmVkaXJlY3Qg
b24gI1dlYktpdFdlYkZyYW1lIHdhcyBwZXJmb3JtZWQKKyAgICAgKiBzdWNjZXNzZnVsbHkgdGhp
cyBzaWduYWwgaXMgZW1pdHRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFs
c1tSRURJUkVDVF9ET05FXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtZG9uZSIsCisgICAgICAg
ICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWdu
YWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAg
ICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVkaXJlY3RfZG9uZSksCisg
ICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1
cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAg
ICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRXZWJWaWV3OjpyZWRpcmVjdC1jYW5jZWxsZWQ6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGUgcmVkaXJlY3Qgd2FzIGNh
bmNlbGxlZCBpbgorICAgICAqCisgICAgICogV2hlbiBhIHNlcnZlciByZWRpcmVjdCBvbiAjV2Vi
S2l0V2ViRnJhbWUgd2FzIGNhbmNlbGxlZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAq
LworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFRElSRUNUX0NBTkNFTExFRF0gPSBnX3Np
Z25hbF9uZXcoInJlZGlyZWN0LWNhbmNlbGxlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxf
UlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdFdlYlZpZXdDbGFzcywgcmVkaXJlY3RfY2FuY2VsbGVkKSwKKyAgICAgICAgICAgIE5V
TEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VC
S0lUX1RZUEVfV0VCX0ZSQU1FKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OmRv
Y3VtZW50LWxvYWQtZG9uZToKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldwor
ICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIHRoZSBkb2N1bWVudCB3YXMgbG9hZGVkIG9mCisgICAg
ICoKKyAgICAgKiBXaGVuIHRoZSBkb2N1bWVudCBvZiBhICNXZWJLaXRXZWJGcmFtZSB3YXMgbG9h
ZGVkIHRoaXMgc2lnbmFsIGlzCisgICAgICogZW1pdHRlZC4gVGhpcyBkb2VzIG5vdCBuZWNlc3Nh
cmlseSBtZWFuIHRoYXQgYWxsIHN1YnJlc291cmNlcyB3ZXJlIGxvYWRlZC4KKyAgICAgKi8KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tET0NVTUVOVF9MT0FEX0RPTkVdID0gZ19zaWduYWxf
bmV3KCJkb2N1bWVudC1sb2FkLWRvbmUiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
d2ViVmlld0NsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9M
QVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCisgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBkb2N1bWVudF9sb2FkX2RvbmUpLAogICAg
ICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJl
X21hcnNoYWxfVk9JRF9fT0JKRUNULApAQCAtNzU0LDcgKzg5Myw3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tU
SVRMRV9DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygidGl0bGUtY2hhbmdlZCIsCiAgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHRpdGxl
X2NoYW5nZWQpLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfU1RSSU5HLApAQCAtNzY1LDcgKzkwNCw3
IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tIT1ZFUklOR19PVkVSX0xJTktdID0gZ19zaWduYWxfbmV3KCJob3Zl
cmluZy1vdmVyLWxpbmsiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0Ns
YXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19T
SUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZT
RVQoV2ViS2l0V2ViVmlld0NsYXNzLCBob3ZlcmluZ19vdmVyX2xpbmspLAogICAgICAgICAgICAg
TlVMTCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lE
X19TVFJJTkdfU1RSSU5HLApAQCAtNzg1LDQxICs5MjQsMzAgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1BPUFVM
QVRFX1BPUFVQXSA9IGdfc2lnbmFsX25ldygicG9wdWxhdGUtcG9wdXAiLAogICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBwb3B1bGF0
ZV9wb3B1cCksCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAg
ICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCiAgICAgICAgICAgICBHX1RZUEVf
Tk9ORSwgMSwKICAgICAgICAgICAgIEdUS19UWVBFX01FTlUpOwogCi0gICAgd2Via2l0X3dlYl92
aWV3X3NpZ25hbHNbU1RBVFVTX0JBUl9URVhUX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJzdGF0
dXMtYmFyLXRleHQtY2hhbmdlZCIsCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6OnN0
YXR1c2Jhci10ZXh0LWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCisgICAgICogQG1lc3NhZ2U6IHRoZSBzdGF0dXNiYXIg
dGV4dAorICAgICAqCisgICAgICogVGhlIHRleHQgdGhhdCBpcyB1c3VhbGx5IGRpc3BsYXllZCBp
biB0aGUgc3RhdHVzYmFyIGhhcyBjaGFuZ2VkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmll
d19zaWduYWxzW1NUQVRVU0JBUl9URVhUX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJzdGF0dXNi
YXItdGV4dC1jaGFuZ2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdf
U0lHTkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZG
U0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc3RhdHVzYmFyX3RleHRfY2hhbmdlZCksCiAgICAgICAg
ICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFy
c2hhbF9WT0lEX19TVFJJTkcsCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKICAgICAgICAg
ICAgIEdfVFlQRV9TVFJJTkcpOwogCi0gICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbSUNPTkRf
TE9BREVEXSA9IGdfc2lnbmFsX25ldygiaWNvbi1sb2FkZWQiLAotICAgICAgICAgICAgR19UWVBF
X0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKLSAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdf
U0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAsCi0gICAg
ICAgICAgICBOVUxMLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19WT0lELAotICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwotCi0gICAg
d2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU0VMRUNUSU9OX0NIQU5HRURdID0gZ19zaWduYWxfbmV3
KCJzZWxlY3Rpb24tY2hhbmdlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJW
aWV3Q2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1Qg
fCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0g
ICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZP
SUQsCi0gICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7Ci0KICAgICAvKioKICAgICAgKiBXZWJL
aXRXZWJWaWV3Ojpjb25zb2xlLW1lc3NhZ2U6CiAgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0
IG9uIHdoaWNoIHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtODI4LDcgKzk1Niw5IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICAgKiBAc291cmNlX2lkOiB0
aGUgc291cmNlIGlkCiAgICAgICogQHJldHVybjogVFJVRSB0byBzdG9wIG90aGVyIGhhbmRsZXJz
IGZyb20gYmVpbmcgaW52b2tlZCBmb3IgdGhlIGV2ZW50LiBGQUxTRSB0byBwcm9wYWdhdGUgdGhl
IGV2ZW50IGZ1cnRoZXIuCiAgICAgICoKLSAgICAgKiBBIEphdmFTY3JpcHQgY29uc29sZSBtZXNz
YWdlIHdhcyBjcmVhdGVkLgorICAgICAqIEEgSmF2YVNjcmlwdCBjb25zb2xlIG1lc3NhZ2Ugd2Fz
IGNyZWF0ZWQuIEJ5IGRlZmF1bHQgdGhlIG1lc3NhZ2UgaXMKKyAgICAgKiBwcmludGVkIHRvIHRo
ZSBzdGFuZGFyZCBvdXRwdXQuIElmIHlvdSBkb24ndCB3YW50IHRoYXQgdG8gaGFwcGVuCisgICAg
ICogc2ltcGx5IGNvbm5lY3QgdGhlIHNpZ25hbCB0byAjZ3RrX3RydWUuCiAgICAgICovCiAgICAg
d2Via2l0X3dlYl92aWV3X3NpZ25hbHNbQ09OU09MRV9NRVNTQUdFXSA9IGdfc2lnbmFsX25ldygi
Y29uc29sZS1tZXNzYWdlIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCkBAIC05NjgsMjEgKzEwOTgsNTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQoVwogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQs
CiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKioKKyAgICAgKiBXZWJLaXRX
ZWJWaWV3OjpzZXQtc2Nyb2xsLWFkanVzdG1lbnRzOgorICAgICAqIEB3ZWJfdmlldzogdGhlIG9i
amVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAgICogQGhhZGp1c3RtZW50OiB0aGUg
aG9yaXpvbnRhbCBhZGp1c3RtZW50CisgICAgICogQHZhZGp1c3RtZW50OiB0aGUgdmVydGljYWwg
YWRqdXN0bWVudAorICAgICAqLworICAgIEdUS19XSURHRVRfQ0xBU1Mod2ViVmlld0NsYXNzKS0+
c2V0X3Njcm9sbF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldC1zY3JvbGwt
YWRqdXN0bWVudHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNz
KSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdO
QUxfQUNUSU9OKSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xh
c3MsIHNldF9zY3JvbGxfYWRqdXN0bWVudHMpLAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAg
ICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVDVF9PQkpFQ1QsCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdUS19UWVBFX0FESlVTVE1FTlQsIEdUS19U
WVBFX0FESlVTVE1FTlQpOworCiAgICAgLyoKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2Ygdmly
dHVhbCBtZXRob2RzCiAgICAgICovCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGVfd2ViX3ZpZXcg
PSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7CiAgICAgd2ViVmlld0NsYXNz
LT5uYXZpZ2F0aW9uX3JlcXVlc3RlZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX25hdmlnYXRpb25f
cmVxdWVzdGVkOwogICAgIHdlYlZpZXdDbGFzcy0+d2luZG93X29iamVjdF9jbGVhcmVkID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfd2luZG93X29iamVjdF9jbGVhcmVkOwotICAgIHdlYlZpZXdDbGFz
cy0+Y2hvb3NlX2ZpbGUgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jaG9vc2VfZmlsZTsKKyAgICB3
ZWJWaWV3Q2xhc3MtPmxvYWRfc3RhcnRlZCA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5sb2FkX2Nv
bW1pdHRlZCA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5wcm9ncmVzc19zdGFydGVkID0gMDsKKyAg
ICB3ZWJWaWV3Q2xhc3MtPnByb2dyZXNzX2NoYW5nZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+
cHJvZ3Jlc3NfZG9uZSA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5sb2FkX2RvbmUgPSAwOworICAg
IHdlYlZpZXdDbGFzcy0+cmVkaXJlY3Rfc2NoZWR1bGVkID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PnJlZGlyZWN0X2RvbmUgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+cmVkaXJlY3RfY2FuY2VsbGVk
ID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmRvY3VtZW50X2xvYWRfZG9uZSA9IDA7CisgICAgd2Vi
Vmlld0NsYXNzLT50aXRsZV9jaGFuZ2VkID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPmhvdmVyaW5n
X292ZXJfbGluayA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5wb3B1bGF0ZV9wb3B1cCA9IDA7Cisg
ICAgd2ViVmlld0NsYXNzLT5zdGF0dXNiYXJfdGV4dF9jaGFuZ2VkID0gMDsKKyAgICB3ZWJWaWV3
Q2xhc3MtPmNvbnNvbGVfbWVzc2FnZSA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvbnNvbGVfbWVz
c2FnZTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9hbGVydCA9IHdlYmtpdF93ZWJfdmlld19y
ZWFsX3NjcmlwdF9hbGVydDsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9jb25maXJtID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X2NvbmZpcm07CiAgICAgd2ViVmlld0NsYXNzLT5zY3Jp
cHRfcHJvbXB0ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X3Byb21wdDsKLSAgICB3ZWJW
aWV3Q2xhc3MtPmNvbnNvbGVfbWVzc2FnZSA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvbnNvbGVf
bWVzc2FnZTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNlbGVjdF9hbGwgPSB3ZWJraXRfd2ViX3ZpZXdf
cmVhbF9zZWxlY3RfYWxsOwogICAgIHdlYlZpZXdDbGFzcy0+Y3V0X2NsaXBib2FyZCA9IHdlYmtp
dF93ZWJfdmlld19yZWFsX2N1dF9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5jb3B5X2Ns
aXBib2FyZCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NvcHlfY2xpcGJvYXJkOwogICAgIHdlYlZp
ZXdDbGFzcy0+cGFzdGVfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfcGFzdGVfY2xp
cGJvYXJkOworICAgIHdlYlZpZXdDbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtp
dF93ZWJfdmlld19zZXRfc2Nyb2xsX2FkanVzdG1lbnRzOwogCiAgICAgR09iamVjdENsYXNzKiBv
YmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYlZpZXdDbGFzcyk7CiAgICAgb2JqZWN0Q2xh
c3MtPmZpbmFsaXplID0gd2Via2l0X3dlYl92aWV3X2ZpbmFsaXplOwpAQCAtMTAwOCwxOSArMTE2
Nyw2IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFcKICAgICBjb250
YWluZXJDbGFzcy0+Zm9yYWxsID0gd2Via2l0X3dlYl92aWV3X2NvbnRhaW5lcl9mb3JhbGw7CiAK
ICAgICAvKgotICAgICAqIG1ha2UgdXMgc2Nyb2xsYWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3Rr
U2Nyb2xsZWRXaW5kb3cpCi0gICAgICovCi0gICAgd2ViVmlld0NsYXNzLT5zZXRfc2Nyb2xsX2Fk
anVzdG1lbnRzID0gd2Via2l0X3dlYl92aWV3X3NldF9zY3JvbGxfYWRqdXN0bWVudHM7Ci0gICAg
R1RLX1dJREdFVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3Np
Z25hbCA9IGdfc2lnbmFsX25ldygic2V0LXNjcm9sbC1hZGp1c3RtZW50cyIsCi0gICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAotICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAg
R19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2V0X3Njcm9sbF9hZGp1c3RtZW50
cyksCi0gICAgICAgICAgICBOVUxMLCBOVUxMLAotICAgICAgICAgICAgd2Via2l0X21hcnNoYWxf
Vk9JRF9fT0JKRUNUX09CSkVDVCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAotICAgICAg
ICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7Ci0KLSAgICAv
KgogICAgICAqIEtleSBiaW5kaW5ncwogICAgICAqLwogCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5oCShSZXZpc2lvbiAzMDAwMCkKKysrIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuaAkoQXJiZWl0c2tvcGllKQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBDaHJpc3RpYW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNDUsOCArNDYsNTAgQEAgdHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfTkFWSUdB
VElPTl9SRVNQT05TRV9ET1dOTE9BRAogfSBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2U7CiAKLXR5
cGVkZWYgZW51bQotewordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfTE9BRF9TVEFURV9DT01N
SVRURUQsCisgICAgV0VCS0lUX0xPQURfU1RBVEVfUFJPR1JFU1NfU1RBUlRFRCwKKyAgICBXRUJL
SVRfTE9BRF9TVEFURV9QUk9HUkVTU19DSEFOR0VELAorICAgIFdFQktJVF9MT0FEX1NUQVRFX1BS
T0dSRVNTX0ZJTklTSEVELAorICAgIFdFQktJVF9MT0FEX1NUQVRFX0RPTkUsCit9IFdlYktpdExv
YWRTdGF0ZTsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfQ0FO
Q0VMTEVELAorICAgIFdFQktJVF9SRVNPVVJDRV9FUlJPUl9SRVNUUklDVEVEX1BPUlQsCisgICAg
V0VCS0lUX1JFU09VUkNFX0VSUk9SX1VSSSwKKyAgICBXRUJLSVRfUkVTT1VSQ0VfRVJST1JfUE9M
SUNZX0NIQU5HRUQsCisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX01JTUVfVFlQRSwKKyAgICBX
RUJLSVRfUkVTT1VSQ0VfRVJST1JfRklMRV9OT1RfRk9VTkQKK30gV2ViS2l0UmVzb3VyY2VFcnJv
cjsKKworI2RlZmluZSBXRUJLSVRfUkVTT1VSQ0VfRVJST1IgZ19xdWFya19mcm9tX3N0cmluZygi
V0VCS0lUX1JFU09VUkNFX0VSUk9SIikKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIFdlYktpdFdl
YkZyYW1lKiBmcmFtZTsKKyAgICBnY2hhciogcmVxdWVzdF91cmk7CisgICAgZ2Jvb2xlYW4gcHJv
dmlzaW9uYWw7CisgICAgR0Vycm9yKiBlcnJvcjsKK30gV2ViS2l0RXZlbnRMb2FkRG9uZTsKKwor
I2RlZmluZSBXRUJLSVRfVFlQRV9FVkVOVF9MT0FEX0RPTkUgKHdlYmtpdF9ldmVudF9sb2FkX2Rv
bmVfZ2V0X3R5cGUgKCkpCisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF9ldmVudF9sb2FkX2Rv
bmVfZ2V0X3R5cGUgKHZvaWQpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lOworICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmk7CisgICAgZ3VpbnQzMiB0aW1l
OworICAgIGd1aW50MzIgZGVsYXk7Cit9IFdlYktpdEV2ZW50UmVkaXJlY3Q7CisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfRVZFTlRfUkVESVJFQ1QgKHdlYmtpdF9ldmVudF9yZWRpcmVjdF9nZXRfdHlw
ZSAoKSkKKworV0VCS0lUX0FQSSBHVHlwZQord2Via2l0X2V2ZW50X3JlZGlyZWN0X2dldF90eXBl
ICh2b2lkKTsKKwordHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfV0VCX1ZJRVdfVEFSR0VUX0lO
Rk9fSFRNTCA9IC0gMSwKICAgICBXRUJLSVRfV0VCX1ZJRVdfVEFSR0VUX0lORk9fVEVYVCA9IC0g
MgogfSBXZWJLaXRXZWJWaWV3VGFyZ2V0SW5mbzsKQEAgLTYwLDM0ICsxMDMsNDIgQEAgc3RydWN0
IF9XZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBHdGtD
b250YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7CiAKLSAgICAvKgotICAgICAqIGRlZmF1bHQgaGFu
ZGxlci92aXJ0dWFsIG1ldGhvZHMKLSAgICAgKiBESVNDVVNTOiBjcmVhdGVfd2ViX3ZpZXcgbmVl
ZHMgYSByZXF1ZXN0IGFuZCBzaG91bGQgd2UgbWFrZSB0aGlzIGEgc2lnbmFsIHdpdGggZGVmYXVs
dCBoYW5kbGVyPyB0aGlzIHdvdWxkCi0gICAgICogcmVxdWlyZSBzb21lb25lIGRvaW5nIGEgZ19z
aWduYWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lCi0gICAgICogV2ViVUlEZWxlZ2F0ZSBoYXMgbm90
aGluZyBmb3IgY3JlYXRlX2ZyYW1lLCBXZWJQb2xpY3lEZWxlZ2F0ZSBhcyB3ZWxsLi4uCi0gICAg
ICovCi0gICAgV2ViS2l0V2ViVmlldyogICgqY3JlYXRlX3dlYl92aWV3KSAgKFdlYktpdFdlYlZp
ZXcqIHdlYl92aWV3KTsKLQotICAgIC8qCi0gICAgICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21l
dGhpbmcgbGlrZSBXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyX1Byb3RvY29sIGluc3RlYWQKLSAg
ICAgKi8KKyAgICBXZWJLaXRXZWJWaWV3KiAoKmNyZWF0ZV93ZWJfdmlldykgKFdlYktpdFdlYkZy
YW1lKiBmcmFtZSk7CiAgICAgV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlICgqbmF2aWdhdGlvbl9y
ZXF1ZXN0ZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1l
LCBXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7Ci0KICAgICB2b2lkICgqd2luZG93X29i
amVjdF9jbGVhcmVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBm
cmFtZSwgSlNHbG9iYWxDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIHdpbmRvd19vYmpl
Y3QpOwotICAgIGdjaGFyKiAgICgqY2hvb3NlX2ZpbGUpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogb2xkX2ZpbGUpOworICAgIHZv
aWQgKCpsb2FkX3N0YXJ0ZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lKTsKKyAgICB2b2lkICgqbG9hZF9jb21taXR0ZWQpIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKKyAgICB2b2lkICgqcHJvZ3Jlc3Nfc3Rh
cnRlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBnaW50IHByb2dyZXNzKTsKKyAgICB2b2lk
ICgqcHJvZ3Jlc3NfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBnaW50IHByb2dy
ZXNzKTsKKyAgICB2b2lkICgqcHJvZ3Jlc3NfZG9uZSkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBnaW50IHByb2dyZXNzKTsKKyAgICB2b2lkICgqbG9hZF9kb25lKSAoV2ViS2l0V2ViVmlldyog
d2ViX3ZpZXcsIFdlYktpdEV2ZW50TG9hZERvbmUqIGV2ZW50KTsKKyAgICB2b2lkICgqcmVkaXJl
Y3Rfc2NoZWR1bGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdEV2ZW50UmVkaXJl
Y3QqIGV2ZW50KTsKKyAgICB2b2lkICgqcmVkaXJlY3RfZG9uZSkgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworICAgIHZvaWQgKCpyZWRpcmVjdF9jYW5j
ZWxsZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsK
KyAgICB2b2lkICgqZG9jdW1lbnRfbG9hZF9kb25lKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IFdlYktpdFdlYkZyYW1lKiBmcmFtZSk7CisgICAgdm9pZCAoKnRpdGxlX2NoYW5nZWQpIChXZWJL
aXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciog
dGl0bGUpOworICAgIHZvaWQgKCpob3ZlcmluZ19vdmVyX2xpbmspIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgY29uc3QgZ2NoYXIqIHRvb2x0aXAsIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisgICAg
dm9pZCAoKnBvcHVsYXRlX3BvcHVwKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a01lbnUq
IG1lbnUpOworICAgIHZvaWQgKCpzdGF0dXNiYXJfdGV4dF9jaGFuZ2VkKSAoV2ViS2l0V2ViVmll
dyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiB0ZXh0KTsKKyAgICBnYm9vbGVhbiAoKmNvbnNvbGVf
bWVzc2FnZSkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogbWVzc2FnZSwg
dW5zaWduZWQgaW50IGxpbmVfbnVtYmVyLCBjb25zdCBnY2hhciogc291cmNlX2lkKTsKICAgICBn
Ym9vbGVhbiAoKnNjcmlwdF9hbGVydCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRX
ZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBhbGVydF9tZXNzYWdlKTsKICAgICBnYm9vbGVh
biAoKnNjcmlwdF9jb25maXJtKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIGNvbmZpcm1fbWVzc2FnZSwgZ2Jvb2xlYW4qIGRpZF9j
b25maXJtKTsKICAgICBnYm9vbGVhbiAoKnNjcmlwdF9wcm9tcHQpIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogbWVzc2FnZSwgY29u
c3QgZ2NoYXIqIGRlZmF1bHRfdmFsdWUsIGdjaGFyKiogdmFsdWUpOwotICAgIGdib29sZWFuICgq
Y29uc29sZV9tZXNzYWdlKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBt
ZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQp
OwogICAgIHZvaWQgKCpzZWxlY3RfYWxsKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAg
IHZvaWQgKCpjdXRfY2xpcGJvYXJkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAgIHZv
aWQgKCpjb3B5X2NsaXBib2FyZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKICAgICB2b2lk
ICgqcGFzdGVfY2xpcGJvYXJkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOworICAgIHZvaWQg
KCpzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a0Fk
anVzdG1lbnQqIGhhZGp1c3RtZW50LCBHdGtBZGp1c3RtZW50KiB2YWRqdXN0bWVudCk7CiAKLSAg
ICAvKgotICAgICAqIGludGVybmFsCi0gICAgICovCi0gICAgdm9pZCAgICgqc2V0X3Njcm9sbF9h
ZGp1c3RtZW50cykgKFdlYktpdFdlYlZpZXcqLCBHdGtBZGp1c3RtZW50KiwgR3RrQWRqdXN0bWVu
dCopOworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDQpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDUpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDYpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDcpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDgpICh2b2lkKTsKIH07CiAKIFdFQktJVF9BUEkgR1R5cGUKSW5kZXg6IFdlYkNvcmUvR05V
bWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQkoUmV2aXNp
b24gMzAwMDApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCShBcmJlaXRza29waWUpCkBAIC05
ODIsNyArOTgyLDggQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VEZWNvZGVyLmNwcCBcCiAJV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcCBcCi0JV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJNSW1hZ2VEZWNvZGVyLmNwcAorCVdlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMveGJtL1hCTUltYWdlRGVjb2Rlci5jcHAgXAorCVdl
YkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAKIAogIyAtLS0t
CiAjIGN1cmwgaHR0cCBiYWNrZW5kCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3Rr
L1Jlc291cmNlRXJyb3JHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0
d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAJKFJldmlzaW9uIDApCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlRXJyb3JHdGsuY3BwCShSZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IENocmlzdGlhbiBEeXdhbiA8
Y2hyaXN0aWFuQGltZW5kaW8uY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVz
b3VyY2VFcnJvci5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorCisjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1Jlc291cmNlRXJyb3I6Om9wZXJhdG9yIEdFcnJvciooKSBjb25zdAoreworICAgIGlm
IChtX2lzTnVsbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBHRXJyb3IqIGVycm9yID0g
Z19lcnJvcl9uZXcoV0VCS0lUX1JFU09VUkNFX0VSUk9SLCBtX2Vycm9yQ29kZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9sb2NhbGl6ZWREZXNjcmlwdGlvbi51dGY4KCkuZGF0
YSgpKTsKKworICAgIHJldHVybiBlcnJvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpc
IEtlaW4gWmVpbGVudW1icnVjaCBhbSBEYXRlaWVuZGUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L25ldHdvcmsvUmVzb3VyY2VFcnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9SZXNvdXJjZUVycm9yLmgJKFJldmlzaW9uIDMwMDAwKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3IuaAkoQXJiZWl0c2tvcGllKQpAQCAtNDMsNiArNDMs
MTAgQEAgY2xhc3MgTlNFcnJvcjsKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlN0cmVhbS5o
PgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiZ2xpYi5oIgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3IgewpAQCAt
MTA1LDYgKzEwOSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgb3BlcmF0b3IgQ0ZT
dHJlYW1FcnJvcigpIGNvbnN0OwogI2VuZGlmCiAjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisg
ICAgICAgIG9wZXJhdG9yIEdFcnJvciooKSBjb25zdDsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCB1bnBhY2tQbGF0Zm9ybUVycm9ySWZOZWVkZWQoKSBjb25zdApJbmRleDog
V2ViQ29yZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShS
ZXZpc2lvbiAzMDAwMCkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKEFyYmVpdHNrb3BpZSkKQEAg
LTE0NSw2ICsxNDUsNyBAQCBndGstcG9ydCB7CiAgICAgJCRQV0QvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8gXAogICAgICQkUFdEL3N2Zy9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRQV0QvcGxhdGZv
cm0vbmV0d29yay9jdXJsIFwKKyAgICAkJFBXRC9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCiAgICAg
JCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXAogICAgICQkUFdEL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcCBcCiAgICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmIFwK
QEAgLTEwNTcsNiArMTA1OCw3IEBAIGd0ay1wb3J0IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ludFJlY3RHdGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jl
c291cmNlSGFuZGxlQ3VybC5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVz
b3VyY2VIYW5kbGVNYW5hZ2VyLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvZ3RrL1Jl
c291cmNlRXJyb3JHdGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQWZm
aW5lVHJhbnNmb3JtQ2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgXApJbmRleDogV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIv
bWFpbi5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkoUmV2
aXNpb24gMzAwMDApCisrKyBXZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKEFyYmVpdHNr
b3BpZSkKQEAgLTc0LDcgKzc0LDcgQEAgdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldwogfQogCiBzdGF0aWMgdm9pZAotcHJvZ3Jlc3NfY2hhbmdlX2NiIChXZWJLaXRXZWJW
aWV3KiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQorcHJvZ3Jlc3NfY2hhbmdl
X2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBndWludCBwcm9ncmVzcywgZ3BvaW50ZXIgZGF0YSkK
IHsKICAgICBsb2FkX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CiAgICAgdXBkYXRlX3RpdGxlIChHVEtf
V0lORE9XIChtYWluX3dpbmRvdykpOwpAQCAtMTE2LDcgKzExNiw3IEBAIGNyZWF0ZV9icm93c2Vy
ICgpCiAgICAgZ3RrX2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKHNjcm9sbGVkX3dpbmRv
dyksIEdUS19XSURHRVQgKHdlYl92aWV3KSk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0IChHX09C
SkVDVCAod2ViX3ZpZXcpLCAidGl0bGUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHRpdGxlX2NoYW5n
ZV9jYiksIHdlYl92aWV3KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAod2ViX3Zp
ZXcpLCAibG9hZC1wcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAocHJvZ3Jlc3NfY2hhbmdl
X2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmll
dyksICJwcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAocHJvZ3Jlc3NfY2hhbmdlX2NiKSwg
d2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJs
b2FkLWNvbW1pdHRlZCIsIEdfQ0FMTEJBQ0sgKGxvYWRfY29tbWl0X2NiKSwgd2ViX3ZpZXcpOwog
ICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJob3ZlcmluZy1vdmVy
LWxpbmsiLCBHX0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3ZpZXcpOwogCkluZGV4OiBX
ZWJLaXQucHJpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC5wcmkJKFJldmlzaW9uIDMwMDAwKQorKysg
V2ViS2l0LnByaQkoQXJiZWl0c2tvcGllKQpAQCAtNjksNiArNjksNyBAQCBxdC1wb3J0OklOQ0xV
REVQQVRIICs9IFwKICAgICAkJFBXRC9XZWJLaXQvcXQvQXBpCiBndGstcG9ydDpJTkNMVURFUEFU
SCArPSBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCisgICAgJCRCQVNF
X0RJUi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvZ3RrIFwKICAgICAkJEJBU0VfRElSL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jdXJsIFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8gXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9sb2FkZXIvZ3RrIFwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18972</attachid>
            <date>2008-02-06 15:38:15 -0800</date>
            <delta_ts>2008-02-06 15:41:09 -0800</delta_ts>
            <desc>Improve load signals Take 4</desc>
            <filename>load-signals-2.diff</filename>
            <type>text/plain</type>
            <size>48829</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJ
KFJldmlzaW9uIDMwMDM3KQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBDaHJvbWVD
bGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRgogdm9pZCBDaHJvbWVDbGllbnQ6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQ1N0cmluZyBzdHJpbmdNZXNz
YWdlID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3
LCAic3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCBzdHJpbmdNZXNzYWdlLmRhdGEoKSk7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgInN0YXR1c2Jhci10ZXh0LWNoYW5nZWQi
LCBzdHJpbmdNZXNzYWdlLmRhdGEoKSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50OjpzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0KCkKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShSZXZpc2lvbiAzMDAzNykKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShBcmJlaXRza29w
aWUpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJp
c3RpYW5AdHdvdG9hc3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNs
dWRlIDxnbGliL2dpMThuLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTE4OCwyMiArMTkwLDIyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmFzc2lnbklkZW50aWZpZXIKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRW
aWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3
LCAibG9hZC1zdGFydGVkIiwgbV9mcmFtZSk7CisgICAgdW5zaWduZWQgcHJvZ3Jlc3MgPSBscm91
bmQoY29yZSh3ZWJWaWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSAqIDEwMCk7
CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1zdGFydGVkIiwg
cHJvZ3Jlc3MpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NFc3Rp
bWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIFBhZ2UqIGNvcmVQYWdlID0gY29yZSh3
ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1wcm9n
cmVzcy1jaGFuZ2VkIiwgbHJvdW5kKGNvcmVQYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9n
cmVzcygpKjEwMCkpOworICAgIHVuc2lnbmVkIHByb2dyZXNzID0gbHJvdW5kKGNvcmUod2ViVmll
dyktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCkgKiAxMDApOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAicHJvZ3Jlc3MtY2hhbmdlZCIsIHByb2dyZXNzKTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRp
b24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1f
ZnJhbWUpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLWZpbmlz
aGVkIiwgbV9mcmFtZSk7CisgICAgdW5zaWduZWQgcHJvZ3Jlc3MgPSBscm91bmQoY29yZSh3ZWJW
aWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSAqIDEwMCk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1kb25lIiwgcHJvZ3Jlc3MpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRlckRlc3Ryb3llZCgpCkBAIC0zMzgs
OSArMzQwLDYgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVAogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKIHsKLSAgICAvLyBJ
cyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwg
ImNsZWFyZWQiKTsKLQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKCkpOwog
ICAgIEFTU0VSVChjb3JlRnJhbWUpOwogCkBAIC0zNTQsNiArMzUzLDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYQogICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCA9IHRvUmVmKEtKUzo6V2luZG93OjpyZXRyaWV2ZShjb3JlRnJhbWUpLT5nZXRPYmplY3QoKSk7
CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7
CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ3aW5kb3ctb2JqZWN0LWNsZWFy
ZWQiLCBtX2ZyYW1lLCBjb250ZXh0LCB3aW5kb3dPYmplY3QpOwogCkBAIC0zODcsOSArMzg3LDI1
IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnQ6Omhhc0ZyYW1lVmlldygpIGMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZW1pdExvYWREb25lRXZlbnQoV2ViS2l0V2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcj1SZXNvdXJjZUVycm9yKCksIGJvb2wg
aXNQcm92aXNpb25hbD1mYWxzZSkKK3sKKyAgICBnY2hhciogcmVxdWVzdF91cmkgPSBnX3N0cmR1
cChjb3JlKGZyYW1lKS0+bG9hZGVyKCktPm9yaWdpbmFsUmVxdWVzdFVSTCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIEdFcnJvciogZ2Vycm9yID0gZXJyb3IudG9HRXJyb3IoKTsKKwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShmcmFtZSwgImxvYWQtZG9uZSIsIHJlcXVlc3RfdXJp
LCBpc1Byb3Zpc2lvbmFsLCBnZXJyb3IpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUoZnJhbWUpOworICAgIGlmIChmcmFtZSA9PSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJWaWV3LCAibG9hZC1kb25lIiwgZnJhbWUsIHJlcXVlc3RfdXJpLCBpc1Byb3Zpc2lvbmFs
LCBnZXJyb3IpOworCisgICAgZ19mcmVlKHJlcXVlc3RfdXJpKTsKKyAgICBpZiAoZ2Vycm9yKQor
ICAgICAgICBnX2Vycm9yX2ZyZWUoZ2Vycm9yKTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKIHsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgImxvYWQtZG9uZSIsIHRydWUpOworICAgIGVtaXRMb2FkRG9uZUV2ZW50KG1fZnJh
bWUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQpA
QCAtNDY3LDE3ICs0ODMsMzUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRI
YW5kbAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgInJlZGlyZWN0LWRvbmUiKTsKKworICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAg
IGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkK
KyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1kb25lIiwg
bV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2Vs
Q2xpZW50UmVkaXJlY3QoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJyZWRpcmVjdC1jYW5jZWxsZWQiKTsKKworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmICht
X2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1jYW5jZWxsZWQiLCBt
X2ZyYW1lKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLCBkb3VibGUsIGRvdWJsZSkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJM
JiBkZXN0aW5hdGlvbiwgZG91YmxlIHRpbWUsIGRvdWJsZSBkZWxheSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmkgPSBnX3N0cmR1cChkZXN0aW5h
dGlvbi5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBndWludCB0aW1lU3RhbXAgPSB0
aW1lOworICAgIGd1aW50IGRlbGF5U2Vjb25kcyA9IGRlbGF5OworCisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fZnJhbWUsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBkZXN0aW5hdGlvbl91cmks
IHRpbWVTdGFtcCwgZGVsYXlTZWNvbmRzKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBtX2ZyYW1lLCBkZXN0aW5hdGlv
bl91cmksIHRpbWVTdGFtcCwgZGVsYXlTZWNvbmRzKTsKKworICAgIGdfZnJlZShkZXN0aW5hdGlv
bl91cmkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUxv
Y2F0aW9uV2l0aGluUGFnZSgpCkBAIC00OTIsMTMgKzUyNiwxNiBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZUljb24oKQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRW
aWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZp
ZXcsICJpY29uLWxvYWRlZCIsIG1fZnJhbWUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQo
KQogeworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1zdGFydGVkIik7
CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1l
KTsKKyAgICBpZiAobV9mcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2Vi
VmlldykpCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFy
dGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC01MjgsNyArNTY1LDExIEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWkKIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJkb2N1bWVudC1s
b2FkLWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZy
YW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcs
ICJkb2N1bWVudC1sb2FkLWRvbmUiLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCkBAIC02NzMsMTQgKzcxNCwxNCBAQCBib29s
IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0g
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJsb2FkLWRvbmUiLCBmYWxzZSk7Cisg
ICAgZW1pdExvYWREb25lRXZlbnQobV9mcmFtZSwgZXJyb3IsIHRydWUpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwg
ImxvYWQtZG9uZSIsIGZhbHNlKTsKKyAgICBlbWl0TG9hZERvbmVFdmVudChtX2ZyYW1lLCBlcnJv
cik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpCkBAIC02ODgsNDAgKzcyOSwzNCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50Ojpkb3dubG9hZChSZXNvdXJjCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUmVz
b3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX0NBTkNFTExFRCwgcmVxdWVzdC51cmwo
KS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJSZXF1ZXN0IGNhbmNlbGxlZCIpKSk7
CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Ymxv
Y2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1JFU1RSSUNURURfUE9SVCwg
cmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJSZXF1ZXN0IGJs
b2NrZWQiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RT
aG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJDRV9F
UlJPUl9VUkksIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmluZzo6ZnJvbVVURjgoXygi
VW5hYmxlIHRvIGRpc3BsYXkgVVJJIikpKTsKIH0KIAotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRl
ckNsaWVudDo6aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1BPTElDWV9DSEFOR0VE
LCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KF8oIkxvYWQgaW50
ZXJydXB0ZWQgYnkgcG9saWN5IGNoYW5nZSIpKSk7CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd01JTUVUeXBl
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX01JTUVfVFlQRSwgcmVxdWVzdC51
cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFibGUgdG8gZGlzcGxheSBN
SU1FIHR5cGUiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxl
RG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCitSZXNvdXJjZUVycm9y
IEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lU
X1JFU09VUkNFX0VSUk9SX0ZJTEVfTk9UX0ZPVU5ELCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgp
LCBTdHJpbmc6OmZyb21VVEY4KF8oIkZpbGUgbm90IGZvdW5kIikpKTsKIH0KIAogYm9vbCBGcmFt
ZUxvYWRlckNsaWVudDo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpCkluZGV4
OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShSZXZpc2lvbiAzMDAzNykKKysrIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtNDcs
OSArNDcsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBleHRlcm4gIkMiIHsKIAogZW51
bSB7Ci0gICAgQ0xFQVJFRCwKKyAgICBXSU5ET1dfT0JKRUNUX0NMRUFSRUQsCisgICAgTE9BRF9T
VEFSVEVELAogICAgIExPQURfQ09NTUlUVEVELAogICAgIExPQURfRE9ORSwKKyAgICBSRURJUkVD
VF9TQ0hFRFVMRUQsCisgICAgUkVESVJFQ1RfRE9ORSwKKyAgICBSRURJUkVDVF9DQU5DRUxMRUQs
CisgICAgRE9DVU1FTlRfTE9BRF9ET05FLAogICAgIFRJVExFX0NIQU5HRUQsCiAgICAgSE9WRVJJ
TkdfT1ZFUl9MSU5LLAogICAgIExBU1RfU0lHTkFMCkBAIC0xMDgsNyArMTEzLDE4IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAgICAvKgogICAgICAqIHNpZ25h
bHMKICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3Np
Z25hbF9uZXcoImNsZWFyZWQiLAorICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tXSU5ET1df
T0JKRUNUX0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAor
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19QT0lOVEVSX1BPSU5URVIsCisgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSLAorICAgICAgICAgICAg
R19UWVBFX1BPSU5URVIpOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0xPQURfU1RB
UlRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtc3RhcnRlZCIsCiAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKICAgICAgICAgICAgIDAsCkBAIC0xMzIs
OSArMTQ4LDUxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKLSAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT09MRUFOLAotICAgICAgICAgICAgR19U
WVBFX05PTkUsIDEsCi0gICAgICAgICAgICBHX1RZUEVfQk9PTEVBTik7CisgICAgICAgICAgICB3
ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfQk9PTEVBTl9CT1hFRCwKKyAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAzLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLAorICAgICAg
ICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLAorICAgICAg
ICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1JF
RElSRUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LXNjaGVkdWxlZCIsCisg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19VSU5UX1VJTlQsCisgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBH
X1RZUEVfVUlOVCwKKyAgICAgICAgICAgIEdfVFlQRV9VSU5UKTsKKworICAgIHdlYmtpdF93ZWJf
ZnJhbWVfc2lnbmFsc1tSRURJUkVDVF9ET05FXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtZG9u
ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19U
WVBFX05PTkUsIDApOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1JFRElSRUNUX0NB
TkNFTExFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LWNhbmNlbGxlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwor
CisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0RPQ1VNRU5UX0xPQURfRE9ORV0gPSBnX3Np
Z25hbF9uZXcoImRvY3VtZW50LWxvYWQtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JV
Tl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwogCiAgICAgd2Via2l0X3dl
Yl9mcmFtZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZS1jaGFu
Z2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLApJbmRleDog
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQtbWFyc2hhbC5saXN0CShSZXZpc2lvbiAzMDAzNykKKysrIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC1tYXJzaGFsLmxpc3QJKEFyYmVpdHNrb3BpZSkKQEAgLTEs
MTAgKzEsMTUgQEAKIFZPSUQ6T0JKRUNUCiBWT0lEOlNUUklORworVk9JRDpTVFJJTkcsQk9PTEVB
TixCT1hFRAogVk9JRDpTVFJJTkcsU1RSSU5HCitWT0lEOlNUUklORyxVSU5ULFVJTlQKIFZPSUQ6
T0JKRUNULEJPT0xFQU4KIFZPSUQ6T0JKRUNULFNUUklORwogVk9JRDpPQkpFQ1QsT0JKRUNUCiBW
T0lEOk9CSkVDVCxQT0lOVEVSLFBPSU5URVIKK1ZPSUQ6T0JKRUNULFNUUklORyxCT09MRUFOLFBP
SU5URVIKK1ZPSUQ6T0JKRUNULFNUUklORyxVSU5ULFVJTlQKK1ZPSUQ6UE9JTlRFUixQT0lOVEVS
CiBCT09MRUFOOlNUUklORyxJTlQsU1RSSU5HCiBCT09MRUFOOk9CSkVDVCxTVFJJTkcKIEJPT0xF
QU46T0JKRUNULFNUUklORyxCT09MRUFOCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAkoUmV2aXNpb24gMzAwMzcpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRN
ZW51Q2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJE
cmFnQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50R3RrLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlN1
YnN0aXR1dGVEYXRhLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgpAQCAtNjcsMTQg
KzY5LDE4IEBAIGVudW0gewogICAgIFdJTkRPV19PQkpFQ1RfQ0xFQVJFRCwKICAgICBMT0FEX1NU
QVJURUQsCiAgICAgTE9BRF9DT01NSVRURUQsCi0gICAgTE9BRF9QUk9HUkVTU19DSEFOR0VELAot
ICAgIExPQURfRklOSVNIRUQsCisgICAgUFJPR1JFU1NfU1RBUlRFRCwKKyAgICBQUk9HUkVTU19D
SEFOR0VELAorICAgIFBST0dSRVNTX0RPTkUsCisgICAgTE9BRF9ET05FLAorICAgIFJFRElSRUNU
X1NDSEVEVUxFRCwKKyAgICBSRURJUkVDVF9ET05FLAorICAgIFJFRElSRUNUX0NBTkNFTExFRCwK
KyAgICBET0NVTUVOVF9MT0FEX0RPTkUsCiAgICAgVElUTEVfQ0hBTkdFRCwKICAgICBIT1ZFUklO
R19PVkVSX0xJTkssCiAgICAgUE9QVUxBVEVfUE9QVVAsCi0gICAgU1RBVFVTX0JBUl9URVhUX0NI
QU5HRUQsCi0gICAgSUNPTkRfTE9BREVELAotICAgIFNFTEVDVElPTl9DSEFOR0VELAorICAgIFNU
QVRVU0JBUl9URVhUX0NIQU5HRUQsCiAgICAgQ09OU09MRV9NRVNTQUdFLAogICAgIFNDUklQVF9B
TEVSVCwKICAgICBTQ1JJUFRfQ09ORklSTSwKQEAgLTQ3MywxMiArNDc5LDYgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X3JlYWxfd2luZG93XwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXN0YXRpYyBnY2hhciogd2Via2l0X3dlYl92aWV3X3JlYWxfY2hvb3NlX2ZpbGUoV2ViS2l0
V2ViVmlldyosIFdlYktpdFdlYkZyYW1lKiwgY29uc3QgZ2NoYXIqIG9sZF9uYW1lKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKG9sZF9uYW1lKTsKLX0KLQog
dHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCwKICAgICBXRUJL
SVRfU0NSSVBUX0RJQUxPR19DT05GSVJNLApAQCAtNjg2LDE0ICs2ODYsMTQgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIC8qKgogICAgICAqIFdlYktpdFdl
YlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQGZyYW1lOiB0aGUgZnJhbWUgZ29pbmcg
dG8gZG8gdGhlIGxvYWQKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGF0IHN0YXJ0ZWQgdG8g
bG9hZAogICAgICAqCi0gICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBiZWdpbnMgdG8gbG9h
ZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqIFdoZW4gYSAjV2ViS2l0V2ViRnJhbWUg
c3RhcnRzIHRvIGxvYWQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tMT0FEX1NUQVJURURdID0gZ19zaWduYWxfbmV3KCJsb2FkLXN0
YXJ0ZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKICAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKLSAgICAgICAgICAgIDAsCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViVmlld0NsYXNzLCBsb2FkX3N0YXJ0ZWQpLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAg
ICAgIE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULApA
QCAtNzAzLDQwICs3MDMsMTY4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KFcKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWNvbW1pdHRlZDoKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
Ci0gICAgICogQGZyYW1lOiB0aGUgbWFpbiBmcmFtZSB0aGF0IHJlY2VpdmVkIHRoZSBmaXJzdCBk
YXRhCisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgdGhhdCByZWNlaXZlZCB0aGUgZmlyc3QgZGF0
YQogICAgICAqCiAgICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBsb2FkZWQgdGhlIGZpcnN0
IGRhdGEgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KICAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2lnbmFsc1tMT0FEX0NPTU1JVFRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtY29tbWl0dGVk
IiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCiAgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
Ci0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgbG9hZF9jb21taXR0ZWQpLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAg
IE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAogICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJB
TUUpOwogCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jlc3Mtc3RhcnRlZDoK
KyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQHByb2dyZXNzOiB0aGUgY3VycmVudCBsb2FkaW5nIHByb2dyZXNzCisgICAg
ICoKKyAgICAgKiBXaGVuIGEgbG9hZGluZyBwcm9ncmVzcyBzdGFydHMgdGhpcyBzaWduYWwgaXMg
ZW1pdHRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19T
VEFSVEVEXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3Mtc3RhcnRlZCIsCisgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcHJvZ3Jlc3Nfc3RhcnRlZCksCisgICAg
ICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19JTlQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAg
ICAgIEdfVFlQRV9JTlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jl
c3MtY2hhbmdlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAq
IEBwcm9ncmVzczogdGhlIGN1cnJlbnQgbG9hZGluZyBwcm9ncmVzcworICAgICAqCisgICAgICog
V2hlbiB0aGUgZ2xvYmFsIGxvYWRpbmcgcHJvZ3Jlc3MgY2hhbmdlcyB0aGlzIHNpZ25hbCBpcyBl
bWl0dGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1BST0dSRVNTX0NI
QU5HRURdID0gZ19zaWduYWxfbmV3KCJwcm9ncmVzcy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdz
KShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBwcm9ncmVzc19jaGFuZ2VkKSwKKyAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAg
ICAgR19UWVBFX0lOVCk7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXBy
b2dyZXNzLWNoYW5nZWQ6CisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jlc3MtZG9uZToKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldwotICAgICAqIEBwcm9ncmVzczogdGhl
IGdsb2JhbCBwcm9ncmVzcworICAgICAqIEBwcm9ncmVzczogdGhlIGN1cnJlbnQgbG9hZGluZyBw
cm9ncmVzcworICAgICAqCisgICAgICogV2hlbiB0aGUgZ2xvYmFsIGxvYWRpbmcgcHJvY2VzcyBp
cyBkb25lIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCiAgICAgICovCi0gICAgd2Via2l0X3dlYl92
aWV3X3NpZ25hbHNbTE9BRF9QUk9HUkVTU19DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygibG9hZC1w
cm9ncmVzcy1jaGFuZ2VkIiwKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19E
T05FXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3MtZG9uZSIsCiAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19T
SUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHByb2dyZXNzX2RvbmUp
LAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fSU5ULAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAg
ICAgICAgICAgICBHX1RZUEVfSU5UKTsKIAotICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xP
QURfRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJsb2FkLWZpbmlzaGVkIiwKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWRvbmU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGUgdGhhdCBpcyBkb25lIGxv
YWRpbmcKKyAgICAgKiBAcmVxdWVzdF91cmk6IHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZCB1cmkK
KyAgICAgKiBAcHJvdmlzaW9uYWw6IHdoZXRoZXIgdGhlIGxvYWQgd2FzIHByb3Zpc2lvbmFsLCBp
LmUuIG5vIGRhdGEgcmVjZWl2ZWQKKyAgICAgKiBAZXJyb3I6IGFuIGVycm9yIGlmIGFwcGxpY2Fi
bGUsIG9yICVOVUxMCisgICAgICoKKyAgICAgKiBXaGVuIGEgI1dlYktpdFdlYkZyYW1lIGlzIGRv
bmUgbG9hZGluZyB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqCisgICAgICogSWYgdGhl
IGxvYWRpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbiwgZXJyb3IgaXMgbm90ICVOVUxMLgorICAg
ICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfRE9ORV0gPSBnX3NpZ25hbF9u
ZXcoImxvYWQtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgbG9hZF9kb25lKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAor
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1NUUklOR19CT09MRUFOX1BP
SU5URVIsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgNCwKKyAgICAgICAgICAgIFdFQktJVF9U
WVBFX1dFQl9GUkFNRSwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBH
X1RZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYlZpZXc6OnJlZGlyZWN0LXNjaGVkdWxlZDoKKyAgICAgKiBAd2ViX3Zp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIHRoZSByZWRp
cmVjdCB3YXMgc2NoZWR1bGVkIGZvcgorICAgICAqIEBkZXN0aW5hdGlvbl91cmk6IHRoZSBkZXN0
aW5hdGlvbiBvZiB0aGUgcmVkaXJlY3QKKyAgICAgKiBAdGltZTogdGhlIHRpbWUgdGhlIHJlZGly
ZWN0IHdhcyBzY2hlZHVsZWQKKyAgICAgKiBAZGVsYXk6IHRoZSB0aW1lIGluIHNlY29uZHMgcmVt
YWluaW5nIHVudGlsIHRoZSByZWRpcmVjdAorICAgICAqCisgICAgICogV2hlbiBhIHNlcnZlciBy
ZWRpcmVjdCBvbiAjV2ViS2l0V2ViRnJhbWUgaXMgc2NoZWR1bGVkIHRoaXMgc2lnbmFsCisgICAg
ICogaXMgZW1pdHRlZC4gWW91IGNhbiB1c2UgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRvIHBy
b3ZpZGUgYW4KKyAgICAgKiBpbnRlcmZhY2Ugd2l0aCB2aXN1YWwgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIHJlZGlyZWN0LgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFRElS
RUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LXNjaGVkdWxlZCIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVkaXJlY3Rfc2NoZWR1
bGVkKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg
d2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1NUUklOR19VSU5UX1VJTlQsCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgNCwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwKKyAg
ICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9VSU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJl
ZGlyZWN0LWRvbmU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAgICAg
KiBAZnJhbWU6IHRoZSBmcmFtZSB0aGUgcmVkaXJlY3Qgb2NjdXJlZCB0bworICAgICAqCisgICAg
ICogV2hlbiBhIHNlcnZlciByZWRpcmVjdCBvbiAjV2ViS2l0V2ViRnJhbWUgd2FzIHBlcmZvcm1l
ZAorICAgICAqIHN1Y2Nlc3NmdWxseSB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFRElSRUNUX0RPTkVdID0gZ19zaWduYWxfbmV3
KCJyZWRpcmVjdC1kb25lIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdf
U0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmll
d0NsYXNzLCByZWRpcmVjdF9kb25lKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1F
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJlZGlyZWN0LWNhbmNlbGxlZDoK
KyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBmcmFtZTogdGhl
IGZyYW1lIHRoZSByZWRpcmVjdCB3YXMgY2FuY2VsbGVkIGluCisgICAgICoKKyAgICAgKiBXaGVu
IGEgc2VydmVyIHJlZGlyZWN0IG9uICNXZWJLaXRXZWJGcmFtZSB3YXMgY2FuY2VsbGVkIHRoaXMg
c2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNb
UkVESVJFQ1RfQ0FOQ0VMTEVEXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtY2FuY2VsbGVkIiwK
KyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAg
ICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCByZWRpcmVjdF9j
YW5jZWxsZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0V2ViVmlldzo6ZG9jdW1lbnQtbG9hZC1kb25lOgorICAgICAqIEB3ZWJf
dmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgdGhlIGRv
Y3VtZW50IHdhcyBsb2FkZWQgb2YKKyAgICAgKgorICAgICAqIFdoZW4gdGhlIGRvY3VtZW50IG9m
IGEgI1dlYktpdFdlYkZyYW1lIHdhcyBsb2FkZWQgdGhpcyBzaWduYWwgaXMKKyAgICAgKiBlbWl0
dGVkLiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBhbGwgc3VicmVzb3VyY2Vz
IHdlcmUgbG9hZGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0RPQ1VN
RU5UX0xPQURfRE9ORV0gPSBnX3NpZ25hbF9uZXcoImRvY3VtZW50LWxvYWQtZG9uZSIsCiAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3Ms
IGRvY3VtZW50X2xvYWRfZG9uZSksCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVM
TCwKICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCkBAIC03NTQs
NyArODgyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAg
IHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0
aXRsZS1jaGFuZ2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdFdlYlZpZXdDbGFzcywgdGl0bGVfY2hhbmdlZCksCiAgICAgICAgICAgICBOVUxMLAog
ICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVD
VF9TVFJJTkcsCkBAIC03NjUsNyArODkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQoVwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0hPVkVSSU5HX09WRVJf
TElOS10gPSBnX3NpZ25hbF9uZXcoImhvdmVyaW5nLW92ZXItbGluayIsCiAgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGhvdmVyaW5n
X292ZXJfbGluayksCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKICAgICAg
ICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcsCkBAIC03ODUsNDEgKzkx
MywzMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgd2Vi
a2l0X3dlYl92aWV3X3NpZ25hbHNbUE9QVUxBVEVfUE9QVVBdID0gZ19zaWduYWxfbmV3KCJwb3B1
bGF0ZS1wb3B1cCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3Mp
LAogICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChX
ZWJLaXRXZWJWaWV3Q2xhc3MsIHBvcHVsYXRlX3BvcHVwKSwKICAgICAgICAgICAgIE5VTEwsCiAg
ICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09C
SkVDVCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAgR1RLX1RZUEVf
TUVOVSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTVEFUVVNfQkFSX1RFWFRfQ0hB
TkdFRF0gPSBnX3NpZ25hbF9uZXcoInN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojo6c3RhdHVzYmFyLXRleHQtY2hhbmdlZAorICAgICAqIEB3
ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAg
KiBAbWVzc2FnZTogdGhlIHN0YXR1c2JhciB0ZXh0CisgICAgICoKKyAgICAgKiBUaGUgdGV4dCB0
aGF0IGlzIHVzdWFsbHkgZGlzcGxheWVkIGluIHRoZSBzdGF0dXNiYXIgaGFzIGNoYW5nZWQuCisg
ICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU1RBVFVTQkFSX1RFWFRfQ0hBTkdF
RF0gPSBnX3NpZ25hbF9uZXcoInN0YXR1c2Jhci10ZXh0LWNoYW5nZWQiLAogICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzdGF0dXNi
YXJfdGV4dF9jaGFuZ2VkKSwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBOVUxMLAog
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NUUklORywKICAgICAgICAgICAg
IEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CiAKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tJQ09ORF9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxv
YWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAotICAg
ICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJ
T04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxM
LAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCi0gICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTRUxFQ1RJ
T05fQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInNlbGVjdGlvbi1jaGFuZ2VkIiwKLSAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAg
ICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBn
X2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAw
KTsKLQogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNvbnNvbGUtbWVzc2FnZToKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CkBAIC04MjgsNyArOTQ1LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQoVwogICAgICAqIEBzb3VyY2VfaWQ6IHRoZSBzb3VyY2UgaWQKICAgICAgKiBAcmV0dXJuOiBU
UlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZl
bnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KICAgICAgKgotICAgICAq
IEEgSmF2YVNjcmlwdCBjb25zb2xlIG1lc3NhZ2Ugd2FzIGNyZWF0ZWQuCisgICAgICogQSBKYXZh
U2NyaXB0IGNvbnNvbGUgbWVzc2FnZSB3YXMgY3JlYXRlZC4gQnkgZGVmYXVsdCB0aGUgbWVzc2Fn
ZSBpcworICAgICAqIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gSWYgeW91IGRvbid0
IHdhbnQgdGhhdCB0byBoYXBwZW4KKyAgICAgKiBzaW1wbHkgY29ubmVjdCB0aGUgc2lnbmFsIHRv
ICNndGtfdHJ1ZS4KICAgICAgKi8KICAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tDT05TT0xF
X01FU1NBR0VdID0gZ19zaWduYWxfbmV3KCJjb25zb2xlLW1lc3NhZ2UiLAogICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKQEAgLTk2OCwyMSArMTA4Nyw1MCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
IAorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnNldC1zY3JvbGwtYWRqdXN0bWVudHM6
CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwK
KyAgICAgKiBAaGFkanVzdG1lbnQ6IHRoZSBob3Jpem9udGFsIGFkanVzdG1lbnQKKyAgICAgKiBA
dmFkanVzdG1lbnQ6IHRoZSB2ZXJ0aWNhbCBhZGp1c3RtZW50CisgICAgICovCisgICAgR1RLX1dJ
REdFVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3NpZ25hbCA9
IGdfc2lnbmFsX25ldygic2V0LXNjcm9sbC1hZGp1c3RtZW50cyIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJV
Q1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2V0X3Njcm9sbF9hZGp1c3RtZW50cyksCisg
ICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9f
T0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAg
R1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7CisKICAgICAvKgogICAg
ICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3ZWJW
aWV3Q2xhc3MtPmNyZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93
ZWJfdmlldzsKICAgICB3ZWJWaWV3Q2xhc3MtPm5hdmlnYXRpb25fcmVxdWVzdGVkID0gd2Via2l0
X3dlYl92aWV3X3JlYWxfbmF2aWdhdGlvbl9yZXF1ZXN0ZWQ7CiAgICAgd2ViVmlld0NsYXNzLT53
aW5kb3dfb2JqZWN0X2NsZWFyZWQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF93aW5kb3dfb2JqZWN0
X2NsZWFyZWQ7Ci0gICAgd2ViVmlld0NsYXNzLT5jaG9vc2VfZmlsZSA9IHdlYmtpdF93ZWJfdmll
d19yZWFsX2Nob29zZV9maWxlOworICAgIHdlYlZpZXdDbGFzcy0+bG9hZF9zdGFydGVkID0gMDsK
KyAgICB3ZWJWaWV3Q2xhc3MtPmxvYWRfY29tbWl0dGVkID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PnByb2dyZXNzX3N0YXJ0ZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+cHJvZ3Jlc3NfY2hhbmdl
ZCA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5wcm9ncmVzc19kb25lID0gMDsKKyAgICB3ZWJWaWV3
Q2xhc3MtPmxvYWRfZG9uZSA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5yZWRpcmVjdF9zY2hlZHVs
ZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+cmVkaXJlY3RfZG9uZSA9IDA7CisgICAgd2ViVmll
d0NsYXNzLT5yZWRpcmVjdF9jYW5jZWxsZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+ZG9jdW1l
bnRfbG9hZF9kb25lID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPnRpdGxlX2NoYW5nZWQgPSAwOwor
ICAgIHdlYlZpZXdDbGFzcy0+aG92ZXJpbmdfb3Zlcl9saW5rID0gMDsKKyAgICB3ZWJWaWV3Q2xh
c3MtPnBvcHVsYXRlX3BvcHVwID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPnN0YXR1c2Jhcl90ZXh0
X2NoYW5nZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+Y29uc29sZV9tZXNzYWdlID0gd2Via2l0
X3dlYl92aWV3X3JlYWxfY29uc29sZV9tZXNzYWdlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0
X2FsZXJ0ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X2FsZXJ0OwogICAgIHdlYlZpZXdD
bGFzcy0+c2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9zY3JpcHRfY29uZmly
bTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9wcm9tcHQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVh
bF9zY3JpcHRfcHJvbXB0OwotICAgIHdlYlZpZXdDbGFzcy0+Y29uc29sZV9tZXNzYWdlID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfY29uc29sZV9tZXNzYWdlOwogICAgIHdlYlZpZXdDbGFzcy0+c2Vs
ZWN0X2FsbCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NlbGVjdF9hbGw7CiAgICAgd2ViVmlld0Ns
YXNzLT5jdXRfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsK
ICAgICB3ZWJWaWV3Q2xhc3MtPmNvcHlfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxf
Y29weV9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9jbGlwYm9hcmQ7CisgICAgd2ViVmlld0NsYXNzLT5zZXRf
c2Nyb2xsX2FkanVzdG1lbnRzID0gd2Via2l0X3dlYl92aWV3X3NldF9zY3JvbGxfYWRqdXN0bWVu
dHM7CiAKICAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
Vmlld0NsYXNzKTsKICAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX3ZpZXdf
ZmluYWxpemU7CkBAIC0xMDA4LDE5ICsxMTU2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2NsYXNzX2luaXQoVwogICAgIGNvbnRhaW5lckNsYXNzLT5mb3JhbGwgPSB3ZWJraXRfd2Vi
X3ZpZXdfY29udGFpbmVyX2ZvcmFsbDsKIAogICAgIC8qCi0gICAgICogbWFrZSB1cyBzY3JvbGxh
YmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdpbmRvdykKLSAgICAgKi8KLSAgICB3
ZWJWaWV3Q2xhc3MtPnNldF9zY3JvbGxfYWRqdXN0bWVudHMgPSB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3Njcm9sbF9hZGp1c3RtZW50czsKLSAgICBHVEtfV0lER0VUX0NMQVNTKHdlYlZpZXdDbGFzcykt
PnNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsID0gZ19zaWduYWxfbmV3KCJzZXQtc2Nyb2xs
LWFkanVzdG1lbnRzIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0Ns
YXNzLCBzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSwKLSAgICAgICAgICAgIE5VTEwsIE5VTEwsCi0g
ICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAotICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDIsCi0gICAgICAgICAgICBHVEtfVFlQRV9BREpVU1RNRU5ULCBHVEtf
VFlQRV9BREpVU1RNRU5UKTsKLQotICAgIC8qCiAgICAgICogS2V5IGJpbmRpbmdzCiAgICAgICov
CiAKQEAgLTE1MDAsNiArMTYzNSwzOCBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxf
c3RyaW5nKFdlCiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRl
bnQsIE5VTEwsIE5VTEwsIGJhc2VVcmkpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19p
c19sb2FkaW5nOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogRGV0ZXJt
aW5lcyB3aGV0aGVyICN3ZWJfdmlldyBpcyBjdXJyZW50bHkgbG9hZGluZy4KKyAqCisgKiBSZXR1
cm4gdmFsdWU6ICVUUlVFIGlmIGEgbG9hZCBpcyBpbiBwcm9ncmVzcywgJUZBTFNFIG90aGVyd2lz
ZQorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklF
Vyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAgcmV0dXJuIGNvcmUod2ViVmlldyktPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpOwor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfcHJvZ3Jlc3M6CisgKiBAd2ViX3ZpZXc6
IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHdoYXQgdGhlIGN1cnJlbnQgbG9h
ZGluZyBwcm9ncmVzcyBvZiBhICN3ZWJfdmlldyBpcyBvciAtMQorICogaWYgZWl0aGVyIHRoZSB2
YWx1ZSBpcyB1bmtub3duIGJlY2F1c2UgYSBsb2FkIGlzIHByb3Zpc2lvbmFsIG9yIHRoZQorICog
d2ViIHZpZXcganVzdCBpc24ndCBsb2FkaW5nIGFueXRoaW5nLgorICoKKyAqIFJldHVybiB2YWx1
ZTogVGhlIHByb2dyZXNzIGluIHBlcmNlbnQsIG9yIC0xCisgKi8KK2dpbnQgd2Via2l0X3dlYl92
aWV3X2dldF9wcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgLTEpOworCisgICAgcmV0
dXJuIGxyb3VuZChjb3JlKHdlYlZpZXcpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygp
ICogMTAwKTsKK30KKwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldykpOwpJbmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkoUmV2aXNpb24g
MzAwMzcpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIER5d2FuIDxj
aHJpc3RpYW5AaW1lbmRpby5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDggKzQ2LDE4
IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfRE9XTkxP
QUQKIH0gV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlOwogCi10eXBlZGVmIGVudW0KLXsKK3R5cGVk
ZWYgZW51bSB7CisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX0NBTkNFTExFRCwKKyAgICBXRUJL
SVRfUkVTT1VSQ0VfRVJST1JfUkVTVFJJQ1RFRF9QT1JULAorICAgIFdFQktJVF9SRVNPVVJDRV9F
UlJPUl9VUkksCisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1BPTElDWV9DSEFOR0VELAorICAg
IFdFQktJVF9SRVNPVVJDRV9FUlJPUl9NSU1FX1RZUEUsCisgICAgV0VCS0lUX1JFU09VUkNFX0VS
Uk9SX0ZJTEVfTk9UX0ZPVU5ECit9IFdlYktpdFJlc291cmNlRXJyb3I7CisKKyNkZWZpbmUgV0VC
S0lUX1JFU09VUkNFX0VSUk9SIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9SRVNPVVJDRV9F
UlJPUiIpCisKK3R5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1dFQl9WSUVXX1RBUkdFVF9JTkZP
X0hUTUwgPSAtIDEsCiAgICAgV0VCS0lUX1dFQl9WSUVXX1RBUkdFVF9JTkZPX1RFWFQgPSAtIDIK
IH0gV2ViS2l0V2ViVmlld1RhcmdldEluZm87CkBAIC02MCwzNCArNzEsNDIgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBHdGtDb250
YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7CiAKLSAgICAvKgotICAgICAqIGRlZmF1bHQgaGFuZGxl
ci92aXJ0dWFsIG1ldGhvZHMKLSAgICAgKiBESVNDVVNTOiBjcmVhdGVfd2ViX3ZpZXcgbmVlZHMg
YSByZXF1ZXN0IGFuZCBzaG91bGQgd2UgbWFrZSB0aGlzIGEgc2lnbmFsIHdpdGggZGVmYXVsdCBo
YW5kbGVyPyB0aGlzIHdvdWxkCi0gICAgICogcmVxdWlyZSBzb21lb25lIGRvaW5nIGEgZ19zaWdu
YWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lCi0gICAgICogV2ViVUlEZWxlZ2F0ZSBoYXMgbm90aGlu
ZyBmb3IgY3JlYXRlX2ZyYW1lLCBXZWJQb2xpY3lEZWxlZ2F0ZSBhcyB3ZWxsLi4uCi0gICAgICov
Ci0gICAgV2ViS2l0V2ViVmlldyogICgqY3JlYXRlX3dlYl92aWV3KSAgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKLQotICAgIC8qCi0gICAgICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21ldGhp
bmcgbGlrZSBXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyX1Byb3RvY29sIGluc3RlYWQKLSAgICAg
Ki8KKyAgICBXZWJLaXRXZWJWaWV3KiAoKmNyZWF0ZV93ZWJfdmlldykgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKICAgICBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2UgKCpuYXZpZ2F0aW9uX3Jl
cXVlc3RlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUs
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQogICAgIHZvaWQgKCp3aW5kb3dfb2Jq
ZWN0X2NsZWFyZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZy
YW1lLCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93X29iamVj
dCk7Ci0gICAgZ2NoYXIqICAgKCpjaG9vc2VfZmlsZSkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBvbGRfZmlsZSk7CisgICAgdm9p
ZCAoKmxvYWRfc3RhcnRlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogZnJhbWUpOworICAgIHZvaWQgKCpsb2FkX2NvbW1pdHRlZCkgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworICAgIHZvaWQgKCpwcm9ncmVzc19zdGFy
dGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgcHJvZ3Jlc3MpOworICAgIHZvaWQg
KCpwcm9ncmVzc19jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgcHJvZ3Jl
c3MpOworICAgIHZvaWQgKCpwcm9ncmVzc19kb25lKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IGdpbnQgcHJvZ3Jlc3MpOworICAgIHZvaWQgKCpsb2FkX2RvbmUpIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogcmVxdWVzdF91cmks
IGdib29sZWFuIHByb3Zpc2lvbmFsLCBHRXJyb3IqIGVycm9yKTsKKyAgICB2b2lkICgqcmVkaXJl
Y3Rfc2NoZWR1bGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBm
cmFtZSwgZ2NoYXIqIGRlc3RpbmF0aW9uX3VyaSwgZ3VpbnQgdGltZSwgZ3VpbnQgZGVsYXkpOwor
ICAgIHZvaWQgKCpyZWRpcmVjdF9kb25lKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktp
dFdlYkZyYW1lKiBmcmFtZSk7CisgICAgdm9pZCAoKnJlZGlyZWN0X2NhbmNlbGxlZCkgKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworICAgIHZvaWQgKCpk
b2N1bWVudF9sb2FkX2RvbmUpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lKTsKKyAgICB2b2lkICgqdGl0bGVfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisgICAg
dm9pZCAoKmhvdmVyaW5nX292ZXJfbGluaykgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25z
dCBnY2hhciogdG9vbHRpcCwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKyAgICB2b2lkICgqcG9wdWxh
dGVfcG9wdXApIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR3RrTWVudSogbWVudSk7CisgICAg
dm9pZCAoKnN0YXR1c2Jhcl90ZXh0X2NoYW5nZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
Y29uc3QgZ2NoYXIqIHRleHQpOworICAgIGdib29sZWFuICgqY29uc29sZV9tZXNzYWdlKSAoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQg
bGluZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOwogICAgIGdib29sZWFuICgqc2Ny
aXB0X2FsZXJ0KSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgZ2NoYXIqIGFsZXJ0X21lc3NhZ2UpOwogICAgIGdib29sZWFuICgqc2NyaXB0X2Nv
bmZpcm0pIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBj
b25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlLCBnYm9vbGVhbiogZGlkX2NvbmZpcm0pOwogICAg
IGdib29sZWFuICgqc2NyaXB0X3Byb21wdCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJL
aXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSwgZ2NoYXIqKiB2YWx1ZSk7Ci0gICAgZ2Jvb2xlYW4gKCpjb25zb2xlX21lc3Nh
Z2UpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIHVuc2ln
bmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIqIHNvdXJjZV9pZCk7CiAgICAgdm9pZCAo
KnNlbGVjdF9hbGwpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAoKmN1dF9j
bGlwYm9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAoKmNvcHlfY2xp
cGJvYXJkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAgIHZvaWQgKCpwYXN0ZV9jbGlw
Ym9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisgICAgdm9pZCAoKnNldF9zY3JvbGxf
YWRqdXN0bWVudHMpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR3RrQWRqdXN0bWVudCogaGFk
anVzdG1lbnQsIEd0a0FkanVzdG1lbnQqIHZhZGp1c3RtZW50KTsKIAotICAgIC8qCi0gICAgICog
aW50ZXJuYWwKLSAgICAgKi8KLSAgICB2b2lkICAgKCpzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSAo
V2ViS2l0V2ViVmlldyosIEd0a0FkanVzdG1lbnQqLCBHdGtBZGp1c3RtZW50Kik7CisgICAgLyog
UGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkNCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNSkgKHZvaWQpOwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkNykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkOCkgKHZvaWQp
OwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQpAQCAtMTI2LDYgKzE0NSwxMiBAQCB3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZCAoV2ViS2l0V2ViVmllCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93
ZWJfdmlld19zdG9wX2xvYWRpbmcgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAorV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb2dy
ZXNzIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0
X3dlYl92aWV3X29wZW4gKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogdXJp
KTsKIApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShSZXZpc2lvbiAzMDAzNykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKEFyYmVpdHNrb3BpZSkKQEAgLTk4Miw3ICs5ODIsOCBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1J
bWFnZURlY29kZXIuY3BwCisJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJN
SW1hZ2VEZWNvZGVyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJj
ZUVycm9yR3RrLmNwcAogCiAjIC0tLS0KICMgY3VybCBodHRwIGJhY2tlbmQKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0
ay5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0Vycm9yKiBSZXNvdXJjZUVycm9yOjp0b0dF
cnJvcigpIGNvbnN0Cit7CisgICAgaWYgKG1faXNOdWxsKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIEdFcnJvciogZXJyb3IgPSBnX2Vycm9yX25ldyhXRUJLSVRfUkVTT1VSQ0VfRVJST1Is
IG1fZXJyb3JDb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvY2FsaXpl
ZERlc2NyaXB0aW9uLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIGVycm9yOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlClwgS2VpbiBaZWlsZW51bWJydWNoIGFtIERhdGVpZW5kZS4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVycm9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291cmNlRXJyb3IuaAkoUmV2aXNpb24g
MzAwMzcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VFcnJvci5oCShBcmJl
aXRza29waWUpCkBAIC00Myw2ICs0MywxMCBAQCBjbGFzcyBOU0Vycm9yOwogI2luY2x1ZGUgPENv
cmVGb3VuZGF0aW9uL0NGU3RyZWFtLmg+CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyNp
bmNsdWRlICJnbGliLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xh
c3MgUmVzb3VyY2VFcnJvciB7CkBAIC0xMDUsNiArMTA5LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBvcGVyYXRvciBDRlN0cmVhbUVycm9yKCkgY29uc3Q7CiAjZW5kaWYKICNlbmRp
ZgorI2lmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgR0Vycm9yKiB0b0dFcnJvcigpIGNvbnN0Owor
I2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHVucGFja1BsYXRmb3JtRXJyb3JJ
Zk5lZWRlZCgpIGNvbnN0CkluZGV4OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKFJldmlzaW9uIDMwMDM3KQorKysgV2ViQ29yZS9XZWJDb3Jl
LnBybwkoQXJiZWl0c2tvcGllKQpAQCAtMTQ1LDYgKzE0NSw3IEBAIGd0ay1wb3J0IHsKICAgICAk
JFBXRC9wbGF0Zm9ybS9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRQV0Qvc3ZnL2dyYXBoaWNzL2Nh
aXJvIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwgXAorICAgICQkUFdEL3BsYXRm
b3JtL25ldHdvcmsvZ3RrIFwKICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyBcCiAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wIFwKICAgICAkJFBXRC9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYgXApAQCAtMTA1Nyw2ICsxMDU4LDcgQEAgZ3RrLXBvcnQgewog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvSW50UmVjdEd0ay5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVDdXJsLmNwcCBcCiAgICAgICAgIHBs
YXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRsZU1hbmFnZXIuY3BwIFwKKyAgICAgICAg
cGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9BZmZpbmVUcmFuc2Zvcm1DYWlyby5jcHAgXAogICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcCBcCkluZGV4OiBX
ZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0VG9vbHMv
R3RrTGF1bmNoZXIvbWFpbi5jCShSZXZpc2lvbiAzMDAzNykKKysrIFdlYktpdFRvb2xzL0d0a0xh
dW5jaGVyL21haW4uYwkoQXJiZWl0c2tvcGllKQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA3IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFu
IER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDE4ICszMCwxNyBAQAogCiBzdGF0aWMgR3RrV2lkZ2V0KiBtYWluX3dpbmRv
dzsKIHN0YXRpYyBHdGtXaWRnZXQqIHVyaV9lbnRyeTsKLXN0YXRpYyBHdGtTdGF0dXNiYXIqIG1h
aW5fc3RhdHVzYmFyOwotc3RhdGljIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3Oworc3RhdGljIEd0
a1dpZGdldCogbWFpbl9zdGF0dXNiYXI7CitzdGF0aWMgR3RrV2lkZ2V0KiB3ZWJfdmlldzsKIHN0
YXRpYyBnY2hhciogbWFpbl90aXRsZTsKLXN0YXRpYyBnaW50IGxvYWRfcHJvZ3Jlc3M7Ci1zdGF0
aWMgZ3VpbnQgc3RhdHVzX2NvbnRleHRfaWQ7CitzdGF0aWMgZ3VpbnQgc3RhdHVzX2lkOwogCiBz
dGF0aWMgdm9pZAogYWN0aXZhdGVfdXJpX2VudHJ5X2NiIChHdGtXaWRnZXQqIGVudHJ5LCBncG9p
bnRlciBkYXRhKQogewogICAgIGNvbnN0IGdjaGFyKiB1cmkgPSBndGtfZW50cnlfZ2V0X3RleHQg
KEdUS19FTlRSWSAoZW50cnkpKTsKICAgICBnX2Fzc2VydCAodXJpKTsKLSAgICB3ZWJraXRfd2Vi
X3ZpZXdfb3BlbiAod2ViX3ZpZXcsIHVyaSk7CisgICAgd2Via2l0X3dlYl92aWV3X29wZW4gKFdF
QktJVF9XRUJfVklFVyAod2ViX3ZpZXcpLCB1cmkpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDgs
MjQgKzQ4LDI4IEBAIHVwZGF0ZV90aXRsZSAoR3RrV2luZG93KiB3aW5kb3cpCiB7CiAgICAgR1N0
cmluZyogc3RyaW5nID0gZ19zdHJpbmdfbmV3IChtYWluX3RpdGxlKTsKICAgICBnX3N0cmluZ19h
cHBlbmQgKHN0cmluZywgIiAtIFdlYktpdCBMYXVuY2hlciIpOwotICAgIGlmIChsb2FkX3Byb2dy
ZXNzIDwgMTAwKQotICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICIgKCVk
JSUpIiwgbG9hZF9wcm9ncmVzcyk7CisgICAgaWYgKHdlYmtpdF93ZWJfdmlld19pc19sb2FkaW5n
IChXRUJLSVRfV0VCX1ZJRVcgKHdlYl92aWV3KSkpCisgICAgeworICAgICAgICBnaW50IHByb2dy
ZXNzID0gd2Via2l0X3dlYl92aWV3X2dldF9wcm9ncmVzcyAoV0VCS0lUX1dFQl9WSUVXICh3ZWJf
dmlldykpOworICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICIgKCVkJSUp
IiwgcHJvZ3Jlc3MpOworICAgIH0KICAgICBnY2hhciogdGl0bGUgPSBnX3N0cmluZ19mcmVlIChz
dHJpbmcsIEZBTFNFKTsKICAgICBndGtfd2luZG93X3NldF90aXRsZSAod2luZG93LCB0aXRsZSk7
CiAgICAgZ19mcmVlICh0aXRsZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1saW5rX2hvdmVyX2NiIChX
ZWJLaXRXZWJWaWV3KiBwYWdlLCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiBsaW5r
LCBncG9pbnRlciBkYXRhKQorbGlua19ob3Zlcl9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IGNvbnN0IGdjaGFyKiB0aXRsZSwgY29uc3QgZ2NoYXIqIGxpbmssIGdwb2ludGVyIGRhdGEpCiB7
CiAgICAgLyogdW5kZXJmbG93IGlzIGFsbG93ZWQgKi8KLSAgICBndGtfc3RhdHVzYmFyX3BvcCAo
bWFpbl9zdGF0dXNiYXIsIHN0YXR1c19jb250ZXh0X2lkKTsKKyAgICBndGtfc3RhdHVzYmFyX3Bv
cCAoR1RLX1NUQVRVU0JBUiAobWFpbl9zdGF0dXNiYXIpLCBzdGF0dXNfaWQpOwogICAgIGlmIChs
aW5rKQotICAgICAgICBndGtfc3RhdHVzYmFyX3B1c2ggKG1haW5fc3RhdHVzYmFyLCBzdGF0dXNf
Y29udGV4dF9pZCwgbGluayk7CisgICAgICAgIGd0a19zdGF0dXNiYXJfcHVzaCAoR1RLX1NUQVRV
U0JBUiAobWFpbl9zdGF0dXNiYXIpLCBzdGF0dXNfaWQsIGxpbmspOwogfQogCiBzdGF0aWMgdm9p
ZAotdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIHdlYl9mcmFtZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBncG9pbnRlciBkYXRhKQordGl0bGVf
Y2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIHdlYl9m
cmFtZSwKKyAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIHRpdGxlLCBncG9pbnRlciBkYXRh
KQogewogICAgIGlmIChtYWluX3RpdGxlKQogICAgICAgICBnX2ZyZWUgKG1haW5fdGl0bGUpOwpA
QCAtNzQsOSArNzgsOCBAQCB0aXRsZV9jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
CiB9CiAKIHN0YXRpYyB2b2lkCi1wcm9ncmVzc19jaGFuZ2VfY2IgKFdlYktpdFdlYlZpZXcqIHBh
Z2UsIGdpbnQgcHJvZ3Jlc3MsIGdwb2ludGVyIGRhdGEpCitwcm9ncmVzc19jaGFuZ2VfY2IgKFdl
YktpdFdlYlZpZXcqIHBhZ2UsIGd1aW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQogewotICAg
IGxvYWRfcHJvZ3Jlc3MgPSBwcm9ncmVzczsKICAgICB1cGRhdGVfdGl0bGUgKEdUS19XSU5ET1cg
KG1haW5fd2luZG93KSk7CiB9CiAKQEAgLTg5LDYgKzkyLDE4IEBAIGxvYWRfY29tbWl0X2NiIChX
ZWJLaXRXZWJWaWV3KiBwYWdlLCBXZWIKIH0KIAogc3RhdGljIHZvaWQKK3JlZGlyZWN0X3NjaGVk
dWxlZF9jYiAoV2ViS2l0V2ViVmlldyogcGFnZSwgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBnY2hhciogZGVzdGluYXRpb25fdXJpLCBndWludCB0
aW1lLCBndWludCBkZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgZ3BvaW50ZXIgZGF0YSkK
K3sKKyAgICBHU3RyaW5nKiBzdHJpbmcgPSBnX3N0cmluZ19uZXcgKG1haW5fdGl0bGUpOworICAg
IGdfc3RyaW5nX2FwcGVuZF9wcmludGYgKHN0cmluZywgIiAtIFJlZGlyZWN0aW5nIGluICVkIHNl
Y29uZHMiLCBkZWxheSk7CisgICAgZ2NoYXIqIHRpdGxlID0gZ19zdHJpbmdfZnJlZSAoc3RyaW5n
LCBGQUxTRSk7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUgKEdUS19XSU5ET1cgKG1haW5fd2lu
ZG93KSwgdGl0bGUpOworICAgIGdfZnJlZSAodGl0bGUpOworfQorCitzdGF0aWMgdm9pZAogZGVz
dHJveV9jYiAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdwb2ludGVyIGRhdGEpCiB7CiAgICAgZ3RrX21h
aW5fcXVpdCAoKTsKQEAgLTk3LDEzICsxMTIsMTMgQEAgZGVzdHJveV9jYiAoR3RrV2lkZ2V0KiB3
aWRnZXQsIGdwb2ludGVyIAogc3RhdGljIHZvaWQKIGdvX2JhY2tfY2IgKEd0a1dpZGdldCogd2lk
Z2V0LCBncG9pbnRlciBkYXRhKQogewotICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrICh3ZWJf
dmlldyk7CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2JhY2sgKFdFQktJVF9XRUJfVklFVyAod2Vi
X3ZpZXcpKTsKIH0KIAogc3RhdGljIHZvaWQKIGdvX2ZvcndhcmRfY2IgKEd0a1dpZGdldCogd2lk
Z2V0LCBncG9pbnRlciBkYXRhKQogewotICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJkICh3
ZWJfdmlldyk7CisgICAgd2Via2l0X3dlYl92aWV3X2dvX2ZvcndhcmQgKFdFQktJVF9XRUJfVklF
Vyh3ZWJfdmlldykpOwogfQogCiBzdGF0aWMgR3RrV2lkZ2V0KgpAQCAtMTEyLDEzICsxMjcsMTQg
QEAgY3JlYXRlX2Jyb3dzZXIgKCkKICAgICBHdGtXaWRnZXQqIHNjcm9sbGVkX3dpbmRvdyA9IGd0
a19zY3JvbGxlZF93aW5kb3dfbmV3IChOVUxMLCBOVUxMKTsKICAgICBndGtfc2Nyb2xsZWRfd2lu
ZG93X3NldF9wb2xpY3kgKEdUS19TQ1JPTExFRF9XSU5ET1cgKHNjcm9sbGVkX3dpbmRvdyksIEdU
S19QT0xJQ1lfQVVUT01BVElDLCBHVEtfUE9MSUNZX0FVVE9NQVRJQyk7CiAKLSAgICB3ZWJfdmll
dyA9IFdFQktJVF9XRUJfVklFVyAod2Via2l0X3dlYl92aWV3X25ldyAoKSk7CisgICAgd2ViX3Zp
ZXcgPSB3ZWJraXRfd2ViX3ZpZXdfbmV3ICgpOwogICAgIGd0a19jb250YWluZXJfYWRkIChHVEtf
Q09OVEFJTkVSIChzY3JvbGxlZF93aW5kb3cpLCBHVEtfV0lER0VUICh3ZWJfdmlldykpOwogCi0g
ICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgInRpdGxlLWNoYW5nZWQi
LCBHX0NBTExCQUNLICh0aXRsZV9jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtcHJvZ3Jlc3MtY2hhbmdlZCIsIEdf
Q0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl92aWV3KTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0IChHX09CSkVDVCAod2ViX3ZpZXcpLCAibG9hZC1jb21taXR0ZWQiLCBHX0NBTExCQUNL
IChsb2FkX2NvbW1pdF9jYiksIHdlYl92aWV3KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09C
SkVDVCAod2ViX3ZpZXcpLCAiaG92ZXJpbmctb3Zlci1saW5rIiwgR19DQUxMQkFDSyAobGlua19o
b3Zlcl9jYiksIHdlYl92aWV3KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgInRp
dGxlLWNoYW5nZWQiLCBHX0NBTExCQUNLICh0aXRsZV9jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJwcm9ncmVzcy1jaGFuZ2VkIiwgR19DQUxM
QkFDSyAocHJvZ3Jlc3NfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QgKHdlYl92aWV3LCAibG9hZC1jb21taXR0ZWQiLCBHX0NBTExCQUNLIChsb2FkX2NvbW1pdF9j
YiksIHdlYl92aWV3KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgInJlZGlyZWN0
LXNjaGVkdWxlZCIsIEdfQ0FMTEJBQ0sgKHJlZGlyZWN0X3NjaGVkdWxlZF9jYiksIHdlYl92aWV3
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgImhvdmVyaW5nLW92ZXItbGluayIs
IEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7CiAKICAgICByZXR1cm4gc2Ny
b2xsZWRfd2luZG93OwogfQpAQCAtMTI2LDEwICsxNDIsMTEgQEAgY3JlYXRlX2Jyb3dzZXIgKCkK
IHN0YXRpYyBHdGtXaWRnZXQqCiBjcmVhdGVfc3RhdHVzYmFyICgpCiB7Ci0gICAgbWFpbl9zdGF0
dXNiYXIgPSBHVEtfU1RBVFVTQkFSIChndGtfc3RhdHVzYmFyX25ldyAoKSk7Ci0gICAgc3RhdHVz
X2NvbnRleHRfaWQgPSBndGtfc3RhdHVzYmFyX2dldF9jb250ZXh0X2lkIChtYWluX3N0YXR1c2Jh
ciwgIkxpbmsgSG92ZXIiKTsKKyAgICBtYWluX3N0YXR1c2JhciA9IGd0a19zdGF0dXNiYXJfbmV3
ICgpOworICAgIHN0YXR1c19pZCA9IGd0a19zdGF0dXNiYXJfZ2V0X2NvbnRleHRfaWQgKEdUS19T
VEFUVVNCQVIgKG1haW5fc3RhdHVzYmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTGluayBIb3ZlciIpOwogCi0gICAgcmV0dXJuIChHdGtXaWRnZXQq
KW1haW5fc3RhdHVzYmFyOworICAgIHJldHVybiBtYWluX3N0YXR1c2JhcjsKIH0KIAogc3RhdGlj
IEd0a1dpZGdldCoKQEAgLTE0NCwxMiArMTYxLDEyIEBAIGNyZWF0ZV90b29sYmFyICgpCiAKICAg
ICAvKiB0aGUgYmFjayBidXR0b24gKi8KICAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0dG9uX25ld19m
cm9tX3N0b2NrIChHVEtfU1RPQ0tfR09fQkFDSyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19P
QkpFQ1QgKGl0ZW0pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGdvX2JhY2tfY2IpLCBOVUxMKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0IChpdGVtLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGdvX2Jh
Y2tfY2IpLCBOVUxMKTsKICAgICBndGtfdG9vbGJhcl9pbnNlcnQgKEdUS19UT09MQkFSICh0b29s
YmFyKSwgaXRlbSwgLTEpOwogCiAgICAgLyogVGhlIGZvcndhcmQgYnV0dG9uICovCiAgICAgaXRl
bSA9IGd0a190b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayAoR1RLX1NUT0NLX0dPX0ZPUldBUkQp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChpdGVtKSwgImNsaWNrZWQiLCBHX0NB
TExCQUNLIChnb19mb3J3YXJkX2NiKSwgTlVMTCk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoaXRl
bSwgImNsaWNrZWQiLCBHX0NBTExCQUNLIChnb19mb3J3YXJkX2NiKSwgTlVMTCk7CiAgICAgZ3Rr
X3Rvb2xiYXJfaW5zZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0sIC0xKTsKIAogICAg
IC8qIFRoZSBVUkwgZW50cnkgKi8KQEAgLTE1NywxMiArMTc0LDEyIEBAIGNyZWF0ZV90b29sYmFy
ICgpCiAgICAgZ3RrX3Rvb2xfaXRlbV9zZXRfZXhwYW5kIChpdGVtLCBUUlVFKTsKICAgICB1cmlf
ZW50cnkgPSBndGtfZW50cnlfbmV3ICgpOwogICAgIGd0a19jb250YWluZXJfYWRkIChHVEtfQ09O
VEFJTkVSIChpdGVtKSwgdXJpX2VudHJ5KTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVD
VCAodXJpX2VudHJ5KSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyAoYWN0aXZhdGVfdXJpX2VudHJ5
X2NiKSwgTlVMTCk7CisgICAgZ19zaWduYWxfY29ubmVjdCAodXJpX2VudHJ5LCAiYWN0aXZhdGUi
LCBHX0NBTExCQUNLIChhY3RpdmF0ZV91cmlfZW50cnlfY2IpLCBOVUxMKTsKICAgICBndGtfdG9v
bGJhcl9pbnNlcnQgKEdUS19UT09MQkFSICh0b29sYmFyKSwgaXRlbSwgLTEpOwogCiAgICAgLyog
VGhlIGdvIGJ1dHRvbiAqLwogICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3Rv
Y2sgKEdUS19TVE9DS19PSyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkIChHX09CSkVD
VCAoaXRlbSksICJjbGlja2VkIiwgR19DQUxMQkFDSyAoYWN0aXZhdGVfdXJpX2VudHJ5X2NiKSwg
KGdwb2ludGVyKXVyaV9lbnRyeSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkIChpdGVt
LCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGFjdGl2YXRlX3VyaV9lbnRyeV9jYiksIChncG9pbnRl
cil1cmlfZW50cnkpOwogICAgIGd0a190b29sYmFyX2luc2VydCAoR1RLX1RPT0xCQVIgKHRvb2xi
YXIpLCBpdGVtLCAtMSk7CiAKICAgICByZXR1cm4gdG9vbGJhcjsKQEAgLTE3NCw3ICsxOTEsNyBA
QCBjcmVhdGVfd2luZG93ICgpCiAgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25l
dyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7CiAgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXpl
IChHVEtfV0lORE9XICh3aW5kb3cpLCA4MDAsIDYwMCk7CiAgICAgZ3RrX3dpZGdldF9zZXRfbmFt
ZSAod2luZG93LCAiR3RrTGF1bmNoZXIiKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVD
VCAod2luZG93KSwgImRlc3Ryb3kiLCBHX0NBTExCQUNLIChkZXN0cm95X2NiKSwgTlVMTCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAod2luZG93LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0sgKGRlc3Ry
b3lfY2IpLCBOVUxMKTsKIAogICAgIHJldHVybiB3aW5kb3c7CiB9CkBAIC0xOTMsOSArMjEwLDkg
QEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICBndGtfY29udGFpbmVyX2FkZCAo
R1RLX0NPTlRBSU5FUiAobWFpbl93aW5kb3cpLCB2Ym94KTsKIAogICAgIGdjaGFyKiB1cmkgPSAo
Z2NoYXIqKSAoYXJnYyA+IDEgPyBhcmd2WzFdIDogImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iKTsK
LSAgICB3ZWJraXRfd2ViX3ZpZXdfb3BlbiAod2ViX3ZpZXcsIHVyaSk7CisgICAgd2Via2l0X3dl
Yl92aWV3X29wZW4gKFdFQktJVF9XRUJfVklFVyAod2ViX3ZpZXcpLCB1cmkpOwogCi0gICAgZ3Rr
X3dpZGdldF9ncmFiX2ZvY3VzIChHVEtfV0lER0VUICh3ZWJfdmlldykpOworICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyAod2ViX3ZpZXcpOwogICAgIGd0a193aWRnZXRfc2hvd19hbGwgKG1haW5f
d2luZG93KTsKICAgICBndGtfbWFpbiAoKTsKIApJbmRleDogV2ViS2l0LnByaQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQucHJpCShSZXZpc2lvbiAzMDAzNykKKysrIFdlYktpdC5wcmkJKEFyYmVpdHNr
b3BpZSkKQEAgLTY5LDYgKzY5LDcgQEAgcXQtcG9ydDpJTkNMVURFUEFUSCArPSBcCiAgICAgJCRQ
V0QvV2ViS2l0L3F0L0FwaQogZ3RrLXBvcnQ6SU5DTFVERVBBVEggKz0gXAogICAgICQkQkFTRV9E
SVIvV2ViQ29yZS9wbGF0Zm9ybS9ndGsgXAorICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9y
bS9uZXR3b3JrL2d0ayBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
Y3VybCBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvIFwK
ICAgICAkJEJBU0VfRElSL1dlYkNvcmUvbG9hZGVyL2d0ayBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18973</attachid>
            <date>2008-02-06 15:41:09 -0800</date>
            <delta_ts>2010-06-10 17:08:25 -0700</delta_ts>
            <desc>Improve load signals Take 5</desc>
            <filename>load-signals-2.diff</filename>
            <type>text/plain</type>
            <size>48845</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAJ
KFJldmlzaW9uIDMwMDUzKQorKysgV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGll
bnRHdGsuY3BwCShBcmJlaXRza29waWUpCkBAIC0yMzYsNyArMjM2LDcgQEAgYm9vbCBDaHJvbWVD
bGllbnQ6OnJ1bkphdmFTY3JpcHRQcm9tcHQoRgogdm9pZCBDaHJvbWVDbGllbnQ6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7CiAgICAgQ1N0cmluZyBzdHJpbmdNZXNz
YWdlID0gc3RyaW5nLnV0ZjgoKTsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3
LCAic3RhdHVzLWJhci10ZXh0LWNoYW5nZWQiLCBzdHJpbmdNZXNzYWdlLmRhdGEoKSk7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgInN0YXR1c2Jhci10ZXh0LWNoYW5nZWQi
LCBzdHJpbmdNZXNzYWdlLmRhdGEoKSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50OjpzaG91bGRJ
bnRlcnJ1cHRKYXZhU2NyaXB0KCkKSW5kZXg6IFdlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJh
bWVMb2FkZXJDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShSZXZpc2lvbiAzMDA1MykKKysrIFdlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCShBcmJlaXRza29w
aWUpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2Vy
IDxhbHBAYXRva2VyLmNvbT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0
ZXIgRnJleXRoZXIKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQ2hyaXN0aWFuIER5d2FuIDxjaHJp
c3RpYW5AdHdvdG9hc3RzLmRlPgorICogIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBDaHJpc3Rp
YW4gRHl3YW4gPGNocmlzdGlhbkBpbWVuZGlvLmNvbT4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAg
LTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgogI2VuZGlmCiAKKyNpbmNs
dWRlIDxnbGliL2dpMThuLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKQEAgLTE4OCwyMiArMTkwLDIyIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmFzc2lnbklkZW50aWZpZXIKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRW
aWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3
LCAibG9hZC1zdGFydGVkIiwgbV9mcmFtZSk7CisgICAgdW5zaWduZWQgcHJvZ3Jlc3MgPSBscm91
bmQoY29yZSh3ZWJWaWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSAqIDEwMCk7
CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1zdGFydGVkIiwg
cHJvZ3Jlc3MpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NFc3Rp
bWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotICAgIFBhZ2UqIGNvcmVQYWdlID0gY29yZSh3
ZWJWaWV3KTsKLQotICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1wcm9n
cmVzcy1jaGFuZ2VkIiwgbHJvdW5kKGNvcmVQYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9n
cmVzcygpKjEwMCkpOworICAgIHVuc2lnbmVkIHByb2dyZXNzID0gbHJvdW5kKGNvcmUod2ViVmll
dyktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCkgKiAxMDApOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAicHJvZ3Jlc3MtY2hhbmdlZCIsIHByb2dyZXNzKTsKIH0K
IAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRp
b24oKQogewogICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1f
ZnJhbWUpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLWZpbmlz
aGVkIiwgbV9mcmFtZSk7CisgICAgdW5zaWduZWQgcHJvZ3Jlc3MgPSBscm91bmQoY29yZSh3ZWJW
aWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSAqIDEwMCk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJwcm9ncmVzcy1kb25lIiwgcHJvZ3Jlc3MpOwogfQog
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRlckRlc3Ryb3llZCgpCkBAIC0zMzgs
OSArMzQwLDYgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpvdmVycmlkZU1lZGlhVAogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojp3aW5kb3dPYmplY3RDbGVhcmVkKCkKIHsKLSAgICAvLyBJ
cyB0aGlzIG9ic29sZXRlIG5vdz8KLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwg
ImNsZWFyZWQiKTsKLQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKHdlYkZyYW1lKCkpOwog
ICAgIEFTU0VSVChjb3JlRnJhbWUpOwogCkBAIC0zNTQsNiArMzUzLDcgQEAgdm9pZCBGcmFtZUxv
YWRlckNsaWVudDo6d2luZG93T2JqZWN0Q2xlYQogICAgIEpTT2JqZWN0UmVmIHdpbmRvd09iamVj
dCA9IHRvUmVmKEtKUzo6V2luZG93OjpyZXRyaWV2ZShjb3JlRnJhbWUpLT5nZXRPYmplY3QoKSk7
CiAgICAgQVNTRVJUKHdpbmRvd09iamVjdCk7CiAKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgIndpbmRvdy1vYmplY3QtY2xlYXJlZCIsIGNvbnRleHQsIHdpbmRvd09iamVjdCk7
CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ3aW5kb3ctb2JqZWN0LWNsZWFy
ZWQiLCBtX2ZyYW1lLCBjb250ZXh0LCB3aW5kb3dPYmplY3QpOwogCkBAIC0zODcsOSArMzg3LDI1
IEBAIGJvb2wgRnJhbWVMb2FkZXJDbGllbnQ6Omhhc0ZyYW1lVmlldygpIGMKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAorc3RhdGljIHZvaWQgZW1pdExvYWREb25lRXZlbnQoV2ViS2l0V2ViRnJhbWUq
IGZyYW1lLCBjb25zdCBSZXNvdXJjZUVycm9yJiBlcnJvcj1SZXNvdXJjZUVycm9yKCksIGJvb2wg
aXNQcm92aXNpb25hbD1mYWxzZSkKK3sKKyAgICBnY2hhciogcmVxdWVzdF91cmkgPSBnX3N0cmR1
cChjb3JlKGZyYW1lKS0+bG9hZGVyKCktPm9yaWdpbmFsUmVxdWVzdFVSTCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIEdFcnJvciogZ2Vycm9yID0gZXJyb3IudG9HRXJyb3IoKTsKKwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShmcmFtZSwgImxvYWQtZG9uZSIsIHJlcXVlc3RfdXJp
LCBpc1Byb3Zpc2lvbmFsLCBnZXJyb3IpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUoZnJhbWUpOworICAgIGlmIChmcmFtZSA9PSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJWaWV3LCAibG9hZC1kb25lIiwgZnJhbWUsIHJlcXVlc3RfdXJpLCBpc1Byb3Zpc2lvbmFs
LCBnZXJyb3IpOworCisgICAgZ19mcmVlKHJlcXVlc3RfdXJpKTsKKyAgICBpZiAoZ2Vycm9yKQor
ICAgICAgICBnX2Vycm9yX2ZyZWUoZ2Vycm9yKTsKK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCkKIHsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9mcmFtZSwgImxvYWQtZG9uZSIsIHRydWUpOworICAgIGVtaXRMb2FkRG9uZUV2ZW50KG1fZnJh
bWUpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQpA
QCAtNDY3LDE3ICs0ODMsMzUgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRI
YW5kbAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJS
ZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgInJlZGlyZWN0LWRvbmUiKTsKKworICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAg
IGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkK
KyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1kb25lIiwg
bV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2Vs
Q2xpZW50UmVkaXJlY3QoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJyZWRpcmVjdC1jYW5jZWxsZWQiKTsKKworICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmICht
X2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1jYW5jZWxsZWQiLCBt
X2ZyYW1lKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsUGVyZm9y
bUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmLCBkb3VibGUsIGRvdWJsZSkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJM
JiBkZXN0aW5hdGlvbiwgZG91YmxlIHRpbWUsIGRvdWJsZSBkZWxheSkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGdjaGFyKiBkZXN0aW5hdGlvbl91cmkgPSBnX3N0cmR1cChkZXN0aW5h
dGlvbi5wcmV0dHlVUkwoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBndWludCB0aW1lU3RhbXAgPSB0
aW1lOworICAgIGd1aW50IGRlbGF5U2Vjb25kcyA9IGRlbGF5OworCisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fZnJhbWUsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBkZXN0aW5hdGlvbl91cmks
IHRpbWVTdGFtcCwgZGVsYXlTZWNvbmRzKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcg
PSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93
ZWJfdmlld19nZXRfbWFpbl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKHdlYlZpZXcsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBtX2ZyYW1lLCBkZXN0aW5hdGlv
bl91cmksIHRpbWVTdGFtcCwgZGVsYXlTZWNvbmRzKTsKKworICAgIGdfZnJlZShkZXN0aW5hdGlv
bl91cmkpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENoYW5nZUxv
Y2F0aW9uV2l0aGluUGFnZSgpCkBAIC00OTIsMTMgKzUyNiwxNiBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaFdpbGxDbG9zCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkUmVjZWl2ZUljb24oKQogewotICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRW
aWV3RnJvbUZyYW1lKG1fZnJhbWUpOwotCi0gICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZp
ZXcsICJpY29uLWxvYWRlZCIsIG1fZnJhbWUpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
IHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQo
KQogeworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2ZyYW1lLCAibG9hZC1zdGFydGVkIik7
CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1l
KTsKKyAgICBpZiAobV9mcmFtZSA9PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2Vi
VmlldykpCisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1zdGFy
dGVkIiwgbV9mcmFtZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
UmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC01MjgsNyArNTY1LDExIEBAIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ29tbWkKIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJkb2N1bWVudC1s
b2FkLWRvbmUiKTsKKworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZy
YW1lKG1fZnJhbWUpOworICAgIGlmIChtX2ZyYW1lID09IHdlYmtpdF93ZWJfdmlld19nZXRfbWFp
bl9mcmFtZSh3ZWJWaWV3KSkKKyAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcs
ICJkb2N1bWVudC1sb2FkLWRvbmUiLCBtX2ZyYW1lKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCkBAIC02NzMsMTQgKzcxNCwxNCBAQCBib29s
IEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZExvYWRSCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExv
YWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRj
aERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyb3IpCiB7Ci0g
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJsb2FkLWRvbmUiLCBmYWxzZSk7Cisg
ICAgZW1pdExvYWREb25lRXZlbnQobV9mcmFtZSwgZXJyb3IsIHRydWUpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJiBlcnJvcikKIHsKLSAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwg
ImxvYWQtZG9uZSIsIGZhbHNlKTsKKyAgICBlbWl0TG9hZERvbmVFdmVudChtX2ZyYW1lLCBlcnJv
cik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRvd25sb2FkKFJlc291cmNlSGFuZGxl
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpCkBAIC02ODgsNDAgKzcyOSwzNCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50Ojpkb3dubG9hZChSZXNvdXJjCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotUmVz
b3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3Vy
Y2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmNhbmNlbGxlZEVy
cm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX0NBTkNFTExFRCwgcmVxdWVzdC51cmwo
KS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJSZXF1ZXN0IGNhbmNlbGxlZCIpKSk7
CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmJsb2NrZWRFcnJvcihjb25z
dCBSZXNvdXJjZVJlcXVlc3QmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Ymxv
Y2tlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1JFU1RSSUNURURfUE9SVCwg
cmVxdWVzdC51cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJSZXF1ZXN0IGJs
b2NrZWQiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5ub3RT
aG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJl
cXVlc3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3VyY2VFcnJv
cigpOworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdFQktJVF9SRVNPVVJDRV9F
UlJPUl9VUkksIHJlcXVlc3QudXJsKCkucHJldHR5VVJMKCksIFN0cmluZzo6ZnJvbVVURjgoXygi
VW5hYmxlIHRvIGRpc3BsYXkgVVJJIikpKTsKIH0KIAotUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRl
ckNsaWVudDo6aW50ZXJydXB0Rm9yUG9saWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnQ6OmludGVycnVwdEZvclBvbGlj
eUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1BPTElDWV9DSEFOR0VE
LCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgpLCBTdHJpbmc6OmZyb21VVEY4KF8oIkxvYWQgaW50
ZXJydXB0ZWQgYnkgcG9saWN5IGNoYW5nZSIpKSk7CiB9CiAKLVJlc291cmNlRXJyb3IgRnJhbWVM
b2FkZXJDbGllbnQ6OmNhbm5vdFNob3dNSU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudDo6Y2Fubm90U2hvd01JTUVUeXBl
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNl
RXJyb3IoIkVycm9yIiwgV0VCS0lUX1JFU09VUkNFX0VSUk9SX01JTUVfVFlQRSwgcmVxdWVzdC51
cmwoKS5wcmV0dHlVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOChfKCJVbmFibGUgdG8gZGlzcGxheSBN
SU1FIHR5cGUiKSkpOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxl
RG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCitSZXNvdXJjZUVycm9y
IEZyYW1lTG9hZGVyQ2xpZW50OjpmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVxdWVzdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBS
ZXNvdXJjZUVycm9yKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgV0VCS0lU
X1JFU09VUkNFX0VSUk9SX0ZJTEVfTk9UX0ZPVU5ELCByZXF1ZXN0LnVybCgpLnByZXR0eVVSTCgp
LCBTdHJpbmc6OmZyb21VVEY4KF8oIkZpbGUgbm90IGZvdW5kIikpKTsKIH0KIAogYm9vbCBGcmFt
ZUxvYWRlckNsaWVudDo6c2hvdWxkRmFsbEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpCkluZGV4
OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwCShSZXZpc2lvbiAzMDA1MykKKysrIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtNDcs
OSArNDcsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBleHRlcm4gIkMiIHsKIAogZW51
bSB7Ci0gICAgQ0xFQVJFRCwKKyAgICBXSU5ET1dfT0JKRUNUX0NMRUFSRUQsCisgICAgTE9BRF9T
VEFSVEVELAogICAgIExPQURfQ09NTUlUVEVELAogICAgIExPQURfRE9ORSwKKyAgICBSRURJUkVD
VF9TQ0hFRFVMRUQsCisgICAgUkVESVJFQ1RfRE9ORSwKKyAgICBSRURJUkVDVF9DQU5DRUxMRUQs
CisgICAgRE9DVU1FTlRfTE9BRF9ET05FLAogICAgIFRJVExFX0NIQU5HRUQsCiAgICAgSE9WRVJJ
TkdfT1ZFUl9MSU5LLAogICAgIExBU1RfU0lHTkFMCkBAIC0xMDgsNyArMTEzLDE4IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAgICAvKgogICAgICAqIHNpZ25h
bHMKICAgICAgKi8KLSAgICB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbQ0xFQVJFRF0gPSBnX3Np
Z25hbF9uZXcoImNsZWFyZWQiLAorICAgIHdlYmtpdF93ZWJfZnJhbWVfc2lnbmFsc1tXSU5ET1df
T0JKRUNUX0NMRUFSRURdID0gZ19zaWduYWxfbmV3KCJ3aW5kb3ctb2JqZWN0LWNsZWFyZWQiLAor
ICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MoZnJhbWVDbGFzcyksCisgICAgICAgICAgICAo
R1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAg
ICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19QT0lOVEVSX1BPSU5URVIsCisgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMiwKKyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSLAorICAgICAgICAgICAg
R19UWVBFX1BPSU5URVIpOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0xPQURfU1RB
UlRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtc3RhcnRlZCIsCiAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKICAgICAgICAgICAgIDAsCkBAIC0xMzIs
OSArMTQ4LDUxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfZnJhbWVfY2xhc3NfaW5pdCgKICAg
ICAgICAgICAgIDAsCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKLSAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19CT09MRUFOLAotICAgICAgICAgICAgR19U
WVBFX05PTkUsIDEsCi0gICAgICAgICAgICBHX1RZUEVfQk9PTEVBTik7CisgICAgICAgICAgICB3
ZWJraXRfbWFyc2hhbF9WT0lEX19TVFJJTkdfQk9PTEVBTl9CT1hFRCwKKyAgICAgICAgICAgIEdf
VFlQRV9OT05FLCAzLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FLAorICAgICAg
ICAgICAgR19UWVBFX1NUUklORywKKyAgICAgICAgICAgIEdfVFlQRV9CT09MRUFOLAorICAgICAg
ICAgICAgR19UWVBFX1BPSU5URVIpOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1JF
RElSRUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LXNjaGVkdWxlZCIsCisg
ICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChH
U2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAg
ICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19VSU5UX1VJTlQsCisgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMywKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBH
X1RZUEVfVUlOVCwKKyAgICAgICAgICAgIEdfVFlQRV9VSU5UKTsKKworICAgIHdlYmtpdF93ZWJf
ZnJhbWVfc2lnbmFsc1tSRURJUkVDVF9ET05FXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtZG9u
ZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAg
ICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwK
KyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAg
ICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19U
WVBFX05PTkUsIDApOworCisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW1JFRElSRUNUX0NB
TkNFTExFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LWNhbmNlbGxlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwor
CisgICAgd2Via2l0X3dlYl9mcmFtZV9zaWduYWxzW0RPQ1VNRU5UX0xPQURfRE9ORV0gPSBnX3Np
Z25hbF9uZXcoImRvY3VtZW50LWxvYWQtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9D
TEFTUyhmcmFtZUNsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JV
Tl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19WT0lELAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDApOwogCiAgICAgd2Via2l0X3dl
Yl9mcmFtZV9zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0aXRsZS1jaGFu
Z2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKGZyYW1lQ2xhc3MpLApJbmRleDog
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQtbWFyc2hhbC5saXN0CShSZXZpc2lvbiAzMDA1MykKKysrIFdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC1tYXJzaGFsLmxpc3QJKEFyYmVpdHNrb3BpZSkKQEAgLTEs
MTAgKzEsMTUgQEAKIFZPSUQ6T0JKRUNUCiBWT0lEOlNUUklORworVk9JRDpTVFJJTkcsQk9PTEVB
TixCT1hFRAogVk9JRDpTVFJJTkcsU1RSSU5HCitWT0lEOlNUUklORyxVSU5ULFVJTlQKIFZPSUQ6
T0JKRUNULEJPT0xFQU4KIFZPSUQ6T0JKRUNULFNUUklORwogVk9JRDpPQkpFQ1QsT0JKRUNUCiBW
T0lEOk9CSkVDVCxQT0lOVEVSLFBPSU5URVIKK1ZPSUQ6T0JKRUNULFNUUklORyxCT09MRUFOLFBP
SU5URVIKK1ZPSUQ6T0JKRUNULFNUUklORyxVSU5ULFVJTlQKK1ZPSUQ6UE9JTlRFUixQT0lOVEVS
CiBCT09MRUFOOlNUUklORyxJTlQsU1RSSU5HCiBCT09MRUFOOk9CSkVDVCxTVFJJTkcKIEJPT0xF
QU46T0JKRUNULFNUUklORyxCT09MRUFOCkluZGV4OiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAkoUmV2aXNpb24gMzAwNTMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgIkNvbnRleHRN
ZW51Q2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbmNsdWRlICJE
cmFnQ2xpZW50R3RrLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRWRpdG9yQ2xp
ZW50R3RrLmgiCkBAIC01Miw2ICs1Myw3IEBACiAjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
V2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2luY2x1ZGUgIlN1
YnN0aXR1dGVEYXRhLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgpAQCAtNjcsMTQg
KzY5LDE4IEBAIGVudW0gewogICAgIFdJTkRPV19PQkpFQ1RfQ0xFQVJFRCwKICAgICBMT0FEX1NU
QVJURUQsCiAgICAgTE9BRF9DT01NSVRURUQsCi0gICAgTE9BRF9QUk9HUkVTU19DSEFOR0VELAot
ICAgIExPQURfRklOSVNIRUQsCisgICAgUFJPR1JFU1NfU1RBUlRFRCwKKyAgICBQUk9HUkVTU19D
SEFOR0VELAorICAgIFBST0dSRVNTX0RPTkUsCisgICAgTE9BRF9ET05FLAorICAgIFJFRElSRUNU
X1NDSEVEVUxFRCwKKyAgICBSRURJUkVDVF9ET05FLAorICAgIFJFRElSRUNUX0NBTkNFTExFRCwK
KyAgICBET0NVTUVOVF9MT0FEX0RPTkUsCiAgICAgVElUTEVfQ0hBTkdFRCwKICAgICBIT1ZFUklO
R19PVkVSX0xJTkssCiAgICAgUE9QVUxBVEVfUE9QVVAsCi0gICAgU1RBVFVTX0JBUl9URVhUX0NI
QU5HRUQsCi0gICAgSUNPTkRfTE9BREVELAotICAgIFNFTEVDVElPTl9DSEFOR0VELAorICAgIFNU
QVRVU0JBUl9URVhUX0NIQU5HRUQsCiAgICAgQ09OU09MRV9NRVNTQUdFLAogICAgIFNDUklQVF9B
TEVSVCwKICAgICBTQ1JJUFRfQ09ORklSTSwKQEAgLTQ3MywxMiArNDc5LDYgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X3JlYWxfd2luZG93XwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLXN0YXRpYyBnY2hhciogd2Via2l0X3dlYl92aWV3X3JlYWxfY2hvb3NlX2ZpbGUoV2ViS2l0
V2ViVmlldyosIFdlYktpdFdlYkZyYW1lKiwgY29uc3QgZ2NoYXIqIG9sZF9uYW1lKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGdfc3RyZHVwKG9sZF9uYW1lKTsKLX0KLQog
dHlwZWRlZiBlbnVtIHsKICAgICBXRUJLSVRfU0NSSVBUX0RJQUxPR19BTEVSVCwKICAgICBXRUJL
SVRfU0NSSVBUX0RJQUxPR19DT05GSVJNLApAQCAtNjg2LDE0ICs2ODYsMTQgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAgIC8qKgogICAgICAqIFdlYktpdFdl
YlZpZXc6OmxvYWQtc3RhcnRlZDoKICAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hp
Y2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVkCi0gICAgICogQGZyYW1lOiB0aGUgZnJhbWUgZ29pbmcg
dG8gZG8gdGhlIGxvYWQKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGF0IHN0YXJ0ZWQgdG8g
bG9hZAogICAgICAqCi0gICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBiZWdpbnMgdG8gbG9h
ZCB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqIFdoZW4gYSAjV2ViS2l0V2ViRnJhbWUg
c3RhcnRzIHRvIGxvYWQgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KICAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tMT0FEX1NUQVJURURdID0gZ19zaWduYWxfbmV3KCJsb2FkLXN0
YXJ0ZWQiLAogICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKICAg
ICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNU
SU9OKSwKLSAgICAgICAgICAgIDAsCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
V2ViVmlld0NsYXNzLCBsb2FkX3N0YXJ0ZWQpLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAg
ICAgIE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULApA
QCAtNzAzLDQwICs3MDMsMTY4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KFcKICAgICAvKioKICAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWNvbW1pdHRlZDoKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
Ci0gICAgICogQGZyYW1lOiB0aGUgbWFpbiBmcmFtZSB0aGF0IHJlY2VpdmVkIHRoZSBmaXJzdCBk
YXRhCisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgdGhhdCByZWNlaXZlZCB0aGUgZmlyc3QgZGF0
YQogICAgICAqCiAgICAgICogV2hlbiBhICNXZWJLaXRXZWJGcmFtZSBsb2FkZWQgdGhlIGZpcnN0
IGRhdGEgdGhpcyBzaWduYWwgaXMgZW1pdHRlZC4KICAgICAgKi8KICAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2lnbmFsc1tMT0FEX0NPTU1JVFRFRF0gPSBnX3NpZ25hbF9uZXcoImxvYWQtY29tbWl0dGVk
IiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCiAgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
Ci0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZp
ZXdDbGFzcywgbG9hZF9jb21taXR0ZWQpLAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAg
IE5VTEwsCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAogICAg
ICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJB
TUUpOwogCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jlc3Mtc3RhcnRlZDoK
KyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0
dGVkCisgICAgICogQHByb2dyZXNzOiB0aGUgY3VycmVudCBsb2FkaW5nIHByb2dyZXNzCisgICAg
ICoKKyAgICAgKiBXaGVuIGEgbG9hZGluZyBwcm9ncmVzcyBzdGFydHMgdGhpcyBzaWduYWwgaXMg
ZW1pdHRlZC4KKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19T
VEFSVEVEXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3Mtc3RhcnRlZCIsCisgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19T
VFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcHJvZ3Jlc3Nfc3RhcnRlZCksCisgICAg
ICAgICAgICBOVUxMLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19JTlQsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAg
ICAgIEdfVFlQRV9JTlQpOworCisgICAgLyoqCisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jl
c3MtY2hhbmdlZDoKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAq
IEBwcm9ncmVzczogdGhlIGN1cnJlbnQgbG9hZGluZyBwcm9ncmVzcworICAgICAqCisgICAgICog
V2hlbiB0aGUgZ2xvYmFsIGxvYWRpbmcgcHJvZ3Jlc3MgY2hhbmdlcyB0aGlzIHNpZ25hbCBpcyBl
bWl0dGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1BST0dSRVNTX0NI
QU5HRURdID0gZ19zaWduYWxfbmV3KCJwcm9ncmVzcy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdz
KShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NU
UlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBwcm9ncmVzc19jaGFuZ2VkKSwKKyAgICAg
ICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9t
YXJzaGFsX1ZPSURfX0lOVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAg
ICAgR19UWVBFX0lOVCk7CiAKICAgICAvKioKLSAgICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLXBy
b2dyZXNzLWNoYW5nZWQ6CisgICAgICogV2ViS2l0V2ViVmlldzo6cHJvZ3Jlc3MtZG9uZToKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldwotICAgICAqIEBwcm9ncmVzczogdGhl
IGdsb2JhbCBwcm9ncmVzcworICAgICAqIEBwcm9ncmVzczogdGhlIGN1cnJlbnQgbG9hZGluZyBw
cm9ncmVzcworICAgICAqCisgICAgICogV2hlbiB0aGUgZ2xvYmFsIGxvYWRpbmcgcHJvY2VzcyBp
cyBkb25lIHRoaXMgc2lnbmFsIGlzIGVtaXR0ZWQuCiAgICAgICovCi0gICAgd2Via2l0X3dlYl92
aWV3X3NpZ25hbHNbTE9BRF9QUk9HUkVTU19DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygibG9hZC1w
cm9ncmVzcy1jaGFuZ2VkIiwKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tQUk9HUkVTU19E
T05FXSA9IGdfc2lnbmFsX25ldygicHJvZ3Jlc3MtZG9uZSIsCiAgICAgICAgICAgICBHX1RZUEVf
RlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19T
SUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIHByb2dyZXNzX2RvbmUp
LAogICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fSU5ULAogICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCiAg
ICAgICAgICAgICBHX1RZUEVfSU5UKTsKIAotICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xP
QURfRklOSVNIRURdID0gZ19zaWduYWxfbmV3KCJsb2FkLWZpbmlzaGVkIiwKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3Ojpsb2FkLWRvbmU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dl
YktpdFdlYlZpZXcKKyAgICAgKiBAZnJhbWU6IHRoZSBmcmFtZSB0aGUgdGhhdCBpcyBkb25lIGxv
YWRpbmcKKyAgICAgKiBAcmVxdWVzdF91cmk6IHRoZSBvcmlnaW5hbGx5IHJlcXVlc3RlZCB1cmkK
KyAgICAgKiBAcHJvdmlzaW9uYWw6IHdoZXRoZXIgdGhlIGxvYWQgd2FzIHByb3Zpc2lvbmFsLCBp
LmUuIG5vIGRhdGEgcmVjZWl2ZWQKKyAgICAgKiBAZXJyb3I6IGFuIGVycm9yIGlmIGFwcGxpY2Fi
bGUsIG9yICVOVUxMCisgICAgICoKKyAgICAgKiBXaGVuIGEgI1dlYktpdFdlYkZyYW1lIGlzIGRv
bmUgbG9hZGluZyB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqCisgICAgICogSWYgdGhl
IGxvYWRpbmcgZmFpbGVkIGZvciBzb21lIHJlYXNvbiwgZXJyb3IgaXMgbm90ICVOVUxMLgorICAg
ICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0xPQURfRE9ORV0gPSBnX3NpZ25hbF9u
ZXcoImxvYWQtZG9uZSIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdD
bGFzcywgbG9hZF9kb25lKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAor
ICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1NUUklOR19CT09MRUFOX1BP
SU5URVIsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgNCwKKyAgICAgICAgICAgIFdFQktJVF9U
WVBFX1dFQl9GUkFNRSwKKyAgICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBH
X1RZUEVfQk9PTEVBTiwKKyAgICAgICAgICAgIEdfVFlQRV9QT0lOVEVSKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFdlYlZpZXc6OnJlZGlyZWN0LXNjaGVkdWxlZDoKKyAgICAgKiBAd2ViX3Zp
ZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBmcmFtZTogdGhlIGZyYW1lIHRoZSByZWRp
cmVjdCB3YXMgc2NoZWR1bGVkIGZvcgorICAgICAqIEBkZXN0aW5hdGlvbl91cmk6IHRoZSBkZXN0
aW5hdGlvbiBvZiB0aGUgcmVkaXJlY3QKKyAgICAgKiBAdGltZTogdGhlIHRpbWUgdGhlIHJlZGly
ZWN0IHdhcyBzY2hlZHVsZWQKKyAgICAgKiBAZGVsYXk6IHRoZSB0aW1lIGluIHNlY29uZHMgcmVt
YWluaW5nIHVudGlsIHRoZSByZWRpcmVjdAorICAgICAqCisgICAgICogV2hlbiBhIHNlcnZlciBy
ZWRpcmVjdCBvbiAjV2ViS2l0V2ViRnJhbWUgaXMgc2NoZWR1bGVkIHRoaXMgc2lnbmFsCisgICAg
ICogaXMgZW1pdHRlZC4gWW91IGNhbiB1c2UgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uIHRvIHBy
b3ZpZGUgYW4KKyAgICAgKiBpbnRlcmZhY2Ugd2l0aCB2aXN1YWwgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIHJlZGlyZWN0LgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFRElS
RUNUX1NDSEVEVUxFRF0gPSBnX3NpZ25hbF9uZXcoInJlZGlyZWN0LXNjaGVkdWxlZCIsCisgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAg
ICAgICAgR19TVFJVQ1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgcmVkaXJlY3Rfc2NoZWR1
bGVkKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg
d2Via2l0X21hcnNoYWxfVk9JRF9fT0JKRUNUX1NUUklOR19VSU5UX1VJTlQsCisgICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgNCwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSwKKyAg
ICAgICAgICAgIEdfVFlQRV9TVFJJTkcsCisgICAgICAgICAgICBHX1RZUEVfVUlOVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9VSU5UKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJl
ZGlyZWN0LWRvbmU6CisgICAgICogQHdlYl92aWV3OiB0aGUgI1dlYktpdFdlYlZpZXcKKyAgICAg
KiBAZnJhbWU6IHRoZSBmcmFtZSB0aGUgcmVkaXJlY3Qgb2NjdXJlZCB0bworICAgICAqCisgICAg
ICogV2hlbiBhIHNlcnZlciByZWRpcmVjdCBvbiAjV2ViS2l0V2ViRnJhbWUgd2FzIHBlcmZvcm1l
ZAorICAgICAqIHN1Y2Nlc3NmdWxseSB0aGlzIHNpZ25hbCBpcyBlbWl0dGVkLgorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1JFRElSRUNUX0RPTkVdID0gZ19zaWduYWxfbmV3
KCJyZWRpcmVjdC1kb25lIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdD
bGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdf
U0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmll
d0NsYXNzLCByZWRpcmVjdF9kb25lKSwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICBO
VUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAg
ICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1F
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnJlZGlyZWN0LWNhbmNlbGxlZDoK
KyAgICAgKiBAd2ViX3ZpZXc6IHRoZSAjV2ViS2l0V2ViVmlldworICAgICAqIEBmcmFtZTogdGhl
IGZyYW1lIHRoZSByZWRpcmVjdCB3YXMgY2FuY2VsbGVkIGluCisgICAgICoKKyAgICAgKiBXaGVu
IGEgc2VydmVyIHJlZGlyZWN0IG9uICNXZWJLaXRXZWJGcmFtZSB3YXMgY2FuY2VsbGVkIHRoaXMg
c2lnbmFsIGlzIGVtaXR0ZWQuCisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNb
UkVESVJFQ1RfQ0FOQ0VMTEVEXSA9IGdfc2lnbmFsX25ldygicmVkaXJlY3QtY2FuY2VsbGVkIiwK
KyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAg
ICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisg
ICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCByZWRpcmVjdF9j
YW5jZWxsZWQpLAorICAgICAgICAgICAgTlVMTCwKKyAgICAgICAgICAgIE5VTEwsCisgICAgICAg
ICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBF
X05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0V2ViVmlldzo6ZG9jdW1lbnQtbG9hZC1kb25lOgorICAgICAqIEB3ZWJf
dmlldzogdGhlICNXZWJLaXRXZWJWaWV3CisgICAgICogQGZyYW1lOiB0aGUgZnJhbWUgdGhlIGRv
Y3VtZW50IHdhcyBsb2FkZWQgb2YKKyAgICAgKgorICAgICAqIFdoZW4gdGhlIGRvY3VtZW50IG9m
IGEgI1dlYktpdFdlYkZyYW1lIHdhcyBsb2FkZWQgdGhpcyBzaWduYWwgaXMKKyAgICAgKiBlbWl0
dGVkLiBUaGlzIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhhdCBhbGwgc3VicmVzb3VyY2Vz
IHdlcmUgbG9hZGVkLgorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0RPQ1VN
RU5UX0xPQURfRE9ORV0gPSBnX3NpZ25hbF9uZXcoImRvY3VtZW50LWxvYWQtZG9uZSIsCiAgICAg
ICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdT
aWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAg
ICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3Ms
IGRvY3VtZW50X2xvYWRfZG9uZSksCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVM
TCwKICAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCkBAIC03NTQs
NyArODgyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoVwogICAg
IHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1RJVExFX0NIQU5HRURdID0gZ19zaWduYWxfbmV3KCJ0
aXRsZS1jaGFuZ2VkIiwKICAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCiAgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiksCi0gICAgICAgICAgICAwLAorICAgICAgICAgICAgR19TVFJVQ1RfT0ZGU0VU
KFdlYktpdFdlYlZpZXdDbGFzcywgdGl0bGVfY2hhbmdlZCksCiAgICAgICAgICAgICBOVUxMLAog
ICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX09CSkVD
VF9TVFJJTkcsCkBAIC03NjUsNyArODkzLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X2NsYXNzX2luaXQoVwogICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW0hPVkVSSU5HX09WRVJf
TElOS10gPSBnX3NpZ25hbF9uZXcoImhvdmVyaW5nLW92ZXItbGluayIsCiAgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAogICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAotICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRXZWJWaWV3Q2xhc3MsIGhvdmVyaW5n
X292ZXJfbGluayksCiAgICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgTlVMTCwKICAgICAg
ICAgICAgIHdlYmtpdF9tYXJzaGFsX1ZPSURfX1NUUklOR19TVFJJTkcsCkBAIC03ODUsNDEgKzkx
MywzMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgd2Vi
a2l0X3dlYl92aWV3X3NpZ25hbHNbUE9QVUxBVEVfUE9QVVBdID0gZ19zaWduYWxfbmV3KCJwb3B1
bGF0ZS1wb3B1cCIsCiAgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3Mp
LAogICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05B
TF9BQ1RJT04pLAotICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChX
ZWJLaXRXZWJWaWV3Q2xhc3MsIHBvcHVsYXRlX3BvcHVwKSwKICAgICAgICAgICAgIE5VTEwsCiAg
ICAgICAgICAgICBOVUxMLAogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09C
SkVDVCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAgR1RLX1RZUEVf
TUVOVSk7CiAKLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTVEFUVVNfQkFSX1RFWFRfQ0hB
TkdFRF0gPSBnX3NpZ25hbF9uZXcoInN0YXR1cy1iYXItdGV4dC1jaGFuZ2VkIiwKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojo6c3RhdHVzYmFyLXRleHQtY2hhbmdlZAorICAgICAqIEB3
ZWJfdmlldzogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKKyAgICAg
KiBAbWVzc2FnZTogdGhlIHN0YXR1c2JhciB0ZXh0CisgICAgICoKKyAgICAgKiBUaGUgdGV4dCB0
aGF0IGlzIHVzdWFsbHkgZGlzcGxheWVkIGluIHRoZSBzdGF0dXNiYXIgaGFzIGNoYW5nZWQuCisg
ICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbU1RBVFVTQkFSX1RFWFRfQ0hBTkdF
RF0gPSBnX3NpZ25hbF9uZXcoInN0YXR1c2Jhci10ZXh0LWNoYW5nZWQiLAogICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKICAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKLSAgICAgICAgICAgIDAs
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0NsYXNzLCBzdGF0dXNi
YXJfdGV4dF9jaGFuZ2VkKSwKICAgICAgICAgICAgIE5VTEwsCiAgICAgICAgICAgICBOVUxMLAog
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1NUUklORywKICAgICAgICAgICAg
IEdfVFlQRV9OT05FLCAxLAogICAgICAgICAgICAgR19UWVBFX1NUUklORyk7CiAKLSAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2lnbmFsc1tJQ09ORF9MT0FERURdID0gZ19zaWduYWxfbmV3KCJpY29uLWxv
YWRlZCIsCi0gICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAotICAg
ICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJ
T04pLAotICAgICAgICAgICAgMCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBOVUxM
LAotICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCi0gICAgICAgICAg
ICBHX1RZUEVfTk9ORSwgMCk7Ci0KLSAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tTRUxFQ1RJ
T05fQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInNlbGVjdGlvbi1jaGFuZ2VkIiwKLSAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCi0gICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCi0gICAgICAgICAg
ICAwLAotICAgICAgICAgICAgTlVMTCwKLSAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICBn
X2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKLSAgICAgICAgICAgIEdfVFlQRV9OT05FLCAw
KTsKLQogICAgIC8qKgogICAgICAqIFdlYktpdFdlYlZpZXc6OmNvbnNvbGUtbWVzc2FnZToKICAg
ICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIHNpZ25hbCBpcyBlbWl0dGVk
CkBAIC04MjgsNyArOTQ1LDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQoVwogICAgICAqIEBzb3VyY2VfaWQ6IHRoZSBzb3VyY2UgaWQKICAgICAgKiBAcmV0dXJuOiBU
UlVFIHRvIHN0b3Agb3RoZXIgaGFuZGxlcnMgZnJvbSBiZWluZyBpbnZva2VkIGZvciB0aGUgZXZl
bnQuIEZBTFNFIHRvIHByb3BhZ2F0ZSB0aGUgZXZlbnQgZnVydGhlci4KICAgICAgKgotICAgICAq
IEEgSmF2YVNjcmlwdCBjb25zb2xlIG1lc3NhZ2Ugd2FzIGNyZWF0ZWQuCisgICAgICogQSBKYXZh
U2NyaXB0IGNvbnNvbGUgbWVzc2FnZSB3YXMgY3JlYXRlZC4gQnkgZGVmYXVsdCB0aGUgbWVzc2Fn
ZSBpcworICAgICAqIHByaW50ZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gSWYgeW91IGRvbid0
IHdhbnQgdGhhdCB0byBoYXBwZW4KKyAgICAgKiBzaW1wbHkgY29ubmVjdCB0aGUgc2lnbmFsIHRv
ICNndGtfdHJ1ZS4KICAgICAgKi8KICAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tDT05TT0xF
X01FU1NBR0VdID0gZ19zaWduYWxfbmV3KCJjb25zb2xlLW1lc3NhZ2UiLAogICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKQEAgLTk2OCwyMSArMTA4Nyw1MCBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBnX2Nj
bG9zdXJlX21hcnNoYWxfVk9JRF9fVk9JRCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsK
IAorICAgIC8qKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnNldC1zY3JvbGwtYWRqdXN0bWVudHM6
CisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwK
KyAgICAgKiBAaGFkanVzdG1lbnQ6IHRoZSBob3Jpem9udGFsIGFkanVzdG1lbnQKKyAgICAgKiBA
dmFkanVzdG1lbnQ6IHRoZSB2ZXJ0aWNhbCBhZGp1c3RtZW50CisgICAgICovCisgICAgR1RLX1dJ
REdFVF9DTEFTUyh3ZWJWaWV3Q2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3NpZ25hbCA9
IGdfc2lnbmFsX25ldygic2V0LXNjcm9sbC1hZGp1c3RtZW50cyIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgR19TVFJV
Q1RfT0ZGU0VUKFdlYktpdFdlYlZpZXdDbGFzcywgc2V0X3Njcm9sbF9hZGp1c3RtZW50cyksCisg
ICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgd2Via2l0X21hcnNoYWxfVk9JRF9f
T0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAg
R1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7CisKICAgICAvKgogICAg
ICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3ZWJW
aWV3Q2xhc3MtPmNyZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93
ZWJfdmlldzsKICAgICB3ZWJWaWV3Q2xhc3MtPm5hdmlnYXRpb25fcmVxdWVzdGVkID0gd2Via2l0
X3dlYl92aWV3X3JlYWxfbmF2aWdhdGlvbl9yZXF1ZXN0ZWQ7CiAgICAgd2ViVmlld0NsYXNzLT53
aW5kb3dfb2JqZWN0X2NsZWFyZWQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF93aW5kb3dfb2JqZWN0
X2NsZWFyZWQ7Ci0gICAgd2ViVmlld0NsYXNzLT5jaG9vc2VfZmlsZSA9IHdlYmtpdF93ZWJfdmll
d19yZWFsX2Nob29zZV9maWxlOworICAgIHdlYlZpZXdDbGFzcy0+bG9hZF9zdGFydGVkID0gMDsK
KyAgICB3ZWJWaWV3Q2xhc3MtPmxvYWRfY29tbWl0dGVkID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3Mt
PnByb2dyZXNzX3N0YXJ0ZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+cHJvZ3Jlc3NfY2hhbmdl
ZCA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5wcm9ncmVzc19kb25lID0gMDsKKyAgICB3ZWJWaWV3
Q2xhc3MtPmxvYWRfZG9uZSA9IDA7CisgICAgd2ViVmlld0NsYXNzLT5yZWRpcmVjdF9zY2hlZHVs
ZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+cmVkaXJlY3RfZG9uZSA9IDA7CisgICAgd2ViVmll
d0NsYXNzLT5yZWRpcmVjdF9jYW5jZWxsZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+ZG9jdW1l
bnRfbG9hZF9kb25lID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPnRpdGxlX2NoYW5nZWQgPSAwOwor
ICAgIHdlYlZpZXdDbGFzcy0+aG92ZXJpbmdfb3Zlcl9saW5rID0gMDsKKyAgICB3ZWJWaWV3Q2xh
c3MtPnBvcHVsYXRlX3BvcHVwID0gMDsKKyAgICB3ZWJWaWV3Q2xhc3MtPnN0YXR1c2Jhcl90ZXh0
X2NoYW5nZWQgPSAwOworICAgIHdlYlZpZXdDbGFzcy0+Y29uc29sZV9tZXNzYWdlID0gd2Via2l0
X3dlYl92aWV3X3JlYWxfY29uc29sZV9tZXNzYWdlOwogICAgIHdlYlZpZXdDbGFzcy0+c2NyaXB0
X2FsZXJ0ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfc2NyaXB0X2FsZXJ0OwogICAgIHdlYlZpZXdD
bGFzcy0+c2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9zY3JpcHRfY29uZmly
bTsKICAgICB3ZWJWaWV3Q2xhc3MtPnNjcmlwdF9wcm9tcHQgPSB3ZWJraXRfd2ViX3ZpZXdfcmVh
bF9zY3JpcHRfcHJvbXB0OwotICAgIHdlYlZpZXdDbGFzcy0+Y29uc29sZV9tZXNzYWdlID0gd2Vi
a2l0X3dlYl92aWV3X3JlYWxfY29uc29sZV9tZXNzYWdlOwogICAgIHdlYlZpZXdDbGFzcy0+c2Vs
ZWN0X2FsbCA9IHdlYmtpdF93ZWJfdmlld19yZWFsX3NlbGVjdF9hbGw7CiAgICAgd2ViVmlld0Ns
YXNzLT5jdXRfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3V0X2NsaXBib2FyZDsK
ICAgICB3ZWJWaWV3Q2xhc3MtPmNvcHlfY2xpcGJvYXJkID0gd2Via2l0X3dlYl92aWV3X3JlYWxf
Y29weV9jbGlwYm9hcmQ7CiAgICAgd2ViVmlld0NsYXNzLT5wYXN0ZV9jbGlwYm9hcmQgPSB3ZWJr
aXRfd2ViX3ZpZXdfcmVhbF9wYXN0ZV9jbGlwYm9hcmQ7CisgICAgd2ViVmlld0NsYXNzLT5zZXRf
c2Nyb2xsX2FkanVzdG1lbnRzID0gd2Via2l0X3dlYl92aWV3X3NldF9zY3JvbGxfYWRqdXN0bWVu
dHM7CiAKICAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Vi
Vmlld0NsYXNzKTsKICAgICBvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRfd2ViX3ZpZXdf
ZmluYWxpemU7CkBAIC0xMDA4LDE5ICsxMTU2LDYgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92
aWV3X2NsYXNzX2luaXQoVwogICAgIGNvbnRhaW5lckNsYXNzLT5mb3JhbGwgPSB3ZWJraXRfd2Vi
X3ZpZXdfY29udGFpbmVyX2ZvcmFsbDsKIAogICAgIC8qCi0gICAgICogbWFrZSB1cyBzY3JvbGxh
YmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdpbmRvdykKLSAgICAgKi8KLSAgICB3
ZWJWaWV3Q2xhc3MtPnNldF9zY3JvbGxfYWRqdXN0bWVudHMgPSB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3Njcm9sbF9hZGp1c3RtZW50czsKLSAgICBHVEtfV0lER0VUX0NMQVNTKHdlYlZpZXdDbGFzcykt
PnNldF9zY3JvbGxfYWRqdXN0bWVudHNfc2lnbmFsID0gZ19zaWduYWxfbmV3KCJzZXQtc2Nyb2xs
LWFkanVzdG1lbnRzIiwKLSAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFz
cyksCi0gICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lH
TkFMX0FDVElPTiksCi0gICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0V2ViVmlld0Ns
YXNzLCBzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSwKLSAgICAgICAgICAgIE5VTEwsIE5VTEwsCi0g
ICAgICAgICAgICB3ZWJraXRfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNULAotICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDIsCi0gICAgICAgICAgICBHVEtfVFlQRV9BREpVU1RNRU5ULCBHVEtf
VFlQRV9BREpVU1RNRU5UKTsKLQotICAgIC8qCiAgICAgICogS2V5IGJpbmRpbmdzCiAgICAgICov
CiAKQEAgLTE1MDAsNiArMTYzNSwzOCBAQCB2b2lkIHdlYmtpdF93ZWJfdmlld19sb2FkX2h0bWxf
c3RyaW5nKFdlCiAgICAgd2Via2l0X3dlYl92aWV3X2xvYWRfc3RyaW5nKHdlYlZpZXcsIGNvbnRl
bnQsIE5VTEwsIE5VTEwsIGJhc2VVcmkpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19p
c19sb2FkaW5nOgorICogQHdlYl92aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogRGV0ZXJt
aW5lcyB3aGV0aGVyICN3ZWJfdmlldyBpcyBjdXJyZW50bHkgbG9hZGluZy4KKyAqCisgKiBSZXR1
cm4gdmFsdWU6ICVUUlVFIGlmIGEgbG9hZCBpcyBpbiBwcm9ncmVzcywgJUZBTFNFIG90aGVyd2lz
ZQorICovCitnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfaXNfbG9hZGluZyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklF
Vyh3ZWJWaWV3KSwgRkFMU0UpOworCisgICAgcmV0dXJuIGNvcmUod2ViVmlldyktPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nSW5BUElTZW5zZSgpOwor
fQorCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfcHJvZ3Jlc3M6CisgKiBAd2ViX3ZpZXc6
IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHdoYXQgdGhlIGN1cnJlbnQgbG9h
ZGluZyBwcm9ncmVzcyBvZiBhICN3ZWJfdmlldyBpcyBvciAtMQorICogaWYgZWl0aGVyIHRoZSB2
YWx1ZSBpcyB1bmtub3duIGJlY2F1c2UgYSBsb2FkIGlzIHByb3Zpc2lvbmFsIG9yIHRoZQorICog
d2ViIHZpZXcganVzdCBpc24ndCBsb2FkaW5nIGFueXRoaW5nLgorICoKKyAqIFJldHVybiB2YWx1
ZTogVGhlIHByb2dyZXNzIGluIHBlcmNlbnQsIG9yIC0xCisgKi8KK2dpbnQgd2Via2l0X3dlYl92
aWV3X2dldF9wcm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJu
X3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgLTEpOworCisgICAgcmV0
dXJuIGxyb3VuZChjb3JlKHdlYlZpZXcpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygp
ICogMTAwKTsKK30KKwogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc3RvcF9sb2FkaW5nKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJ
RVcod2ViVmlldykpOwpJbmRleDogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAkoUmV2aXNpb24g
MzAwNTMpCisrKyBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2hyaXN0aWFuIER5d2FuIDxj
aHJpc3RpYW5AaW1lbmRpby5jb20+CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTQ1LDggKzQ2LDE4
IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX05BVklHQVRJT05fUkVTUE9OU0VfRE9XTkxP
QUQKIH0gV2ViS2l0TmF2aWdhdGlvblJlc3BvbnNlOwogCi10eXBlZGVmIGVudW0KLXsKK3R5cGVk
ZWYgZW51bSB7CisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX0NBTkNFTExFRCwKKyAgICBXRUJL
SVRfUkVTT1VSQ0VfRVJST1JfUkVTVFJJQ1RFRF9QT1JULAorICAgIFdFQktJVF9SRVNPVVJDRV9F
UlJPUl9VUkksCisgICAgV0VCS0lUX1JFU09VUkNFX0VSUk9SX1BPTElDWV9DSEFOR0VELAorICAg
IFdFQktJVF9SRVNPVVJDRV9FUlJPUl9NSU1FX1RZUEUsCisgICAgV0VCS0lUX1JFU09VUkNFX0VS
Uk9SX0ZJTEVfTk9UX0ZPVU5ECit9IFdlYktpdFJlc291cmNlRXJyb3I7CisKKyNkZWZpbmUgV0VC
S0lUX1JFU09VUkNFX0VSUk9SIGdfcXVhcmtfZnJvbV9zdHJpbmcoIldFQktJVF9SRVNPVVJDRV9F
UlJPUiIpCisKK3R5cGVkZWYgZW51bSB7CiAgICAgV0VCS0lUX1dFQl9WSUVXX1RBUkdFVF9JTkZP
X0hUTUwgPSAtIDEsCiAgICAgV0VCS0lUX1dFQl9WSUVXX1RBUkdFVF9JTkZPX1RFWFQgPSAtIDIK
IH0gV2ViS2l0V2ViVmlld1RhcmdldEluZm87CkBAIC02MCwzNCArNzEsNDIgQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3IHsKIHN0cnVjdCBfV2ViS2l0V2ViVmlld0NsYXNzIHsKICAgICBHdGtDb250
YWluZXJDbGFzcyBwYXJlbnRfY2xhc3M7CiAKLSAgICAvKgotICAgICAqIGRlZmF1bHQgaGFuZGxl
ci92aXJ0dWFsIG1ldGhvZHMKLSAgICAgKiBESVNDVVNTOiBjcmVhdGVfd2ViX3ZpZXcgbmVlZHMg
YSByZXF1ZXN0IGFuZCBzaG91bGQgd2UgbWFrZSB0aGlzIGEgc2lnbmFsIHdpdGggZGVmYXVsdCBo
YW5kbGVyPyB0aGlzIHdvdWxkCi0gICAgICogcmVxdWlyZSBzb21lb25lIGRvaW5nIGEgZ19zaWdu
YWxfc3RvcF9lbWlzc2lvbl9ieV9uYW1lCi0gICAgICogV2ViVUlEZWxlZ2F0ZSBoYXMgbm90aGlu
ZyBmb3IgY3JlYXRlX2ZyYW1lLCBXZWJQb2xpY3lEZWxlZ2F0ZSBhcyB3ZWxsLi4uCi0gICAgICov
Ci0gICAgV2ViS2l0V2ViVmlldyogICgqY3JlYXRlX3dlYl92aWV3KSAgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKLQotICAgIC8qCi0gICAgICogVE9ETzogRklYTUU6IENyZWF0ZSBzb21ldGhp
bmcgbGlrZSBXZWJQb2xpY3lEZWNpc2lvbkxpc3RlbmVyX1Byb3RvY29sIGluc3RlYWQKLSAgICAg
Ki8KKyAgICBXZWJLaXRXZWJWaWV3KiAoKmNyZWF0ZV93ZWJfdmlldykgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKICAgICBXZWJLaXROYXZpZ2F0aW9uUmVzcG9uc2UgKCpuYXZpZ2F0aW9uX3Jl
cXVlc3RlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUs
IFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKLQogICAgIHZvaWQgKCp3aW5kb3dfb2Jq
ZWN0X2NsZWFyZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZy
YW1lLCBKU0dsb2JhbENvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgd2luZG93X29iamVj
dCk7Ci0gICAgZ2NoYXIqICAgKCpjaG9vc2VfZmlsZSkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3
LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBvbGRfZmlsZSk7CisgICAgdm9p
ZCAoKmxvYWRfc3RhcnRlZCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFt
ZSogZnJhbWUpOworICAgIHZvaWQgKCpsb2FkX2NvbW1pdHRlZCkgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworICAgIHZvaWQgKCpwcm9ncmVzc19zdGFy
dGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgcHJvZ3Jlc3MpOworICAgIHZvaWQg
KCpwcm9ncmVzc19jaGFuZ2VkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIGdpbnQgcHJvZ3Jl
c3MpOworICAgIHZvaWQgKCpwcm9ncmVzc19kb25lKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcs
IGdpbnQgcHJvZ3Jlc3MpOworICAgIHZvaWQgKCpsb2FkX2RvbmUpIChXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogcmVxdWVzdF91cmks
IGdib29sZWFuIHByb3Zpc2lvbmFsLCBHRXJyb3IqIGVycm9yKTsKKyAgICB2b2lkICgqcmVkaXJl
Y3Rfc2NoZWR1bGVkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBm
cmFtZSwgZ2NoYXIqIGRlc3RpbmF0aW9uX3VyaSwgZ3VpbnQgdGltZSwgZ3VpbnQgZGVsYXkpOwor
ICAgIHZvaWQgKCpyZWRpcmVjdF9kb25lKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktp
dFdlYkZyYW1lKiBmcmFtZSk7CisgICAgdm9pZCAoKnJlZGlyZWN0X2NhbmNlbGxlZCkgKFdlYktp
dFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUpOworICAgIHZvaWQgKCpk
b2N1bWVudF9sb2FkX2RvbmUpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJh
bWUqIGZyYW1lKTsKKyAgICB2b2lkICgqdGl0bGVfY2hhbmdlZCkgKFdlYktpdFdlYlZpZXcqIHdl
Yl92aWV3LCBXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiB0aXRsZSk7CisgICAg
dm9pZCAoKmhvdmVyaW5nX292ZXJfbGluaykgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25z
dCBnY2hhciogdG9vbHRpcCwgY29uc3QgZ2NoYXIqIHRpdGxlKTsKKyAgICB2b2lkICgqcG9wdWxh
dGVfcG9wdXApIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR3RrTWVudSogbWVudSk7CisgICAg
dm9pZCAoKnN0YXR1c2Jhcl90ZXh0X2NoYW5nZWQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
Y29uc3QgZ2NoYXIqIHRleHQpOworICAgIGdib29sZWFuICgqY29uc29sZV9tZXNzYWdlKSAoV2Vi
S2l0V2ViVmlldyogd2ViX3ZpZXcsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQg
bGluZV9udW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOwogICAgIGdib29sZWFuICgqc2Ny
aXB0X2FsZXJ0KSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiBmcmFt
ZSwgY29uc3QgZ2NoYXIqIGFsZXJ0X21lc3NhZ2UpOwogICAgIGdib29sZWFuICgqc2NyaXB0X2Nv
bmZpcm0pIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBj
b25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlLCBnYm9vbGVhbiogZGlkX2NvbmZpcm0pOwogICAg
IGdib29sZWFuICgqc2NyaXB0X3Byb21wdCkgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJL
aXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSwgZ2NoYXIqKiB2YWx1ZSk7Ci0gICAgZ2Jvb2xlYW4gKCpjb25zb2xlX21lc3Nh
Z2UpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgY29uc3QgZ2NoYXIqIG1lc3NhZ2UsIHVuc2ln
bmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIqIHNvdXJjZV9pZCk7CiAgICAgdm9pZCAo
KnNlbGVjdF9hbGwpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAoKmN1dF9j
bGlwYm9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CiAgICAgdm9pZCAoKmNvcHlfY2xp
cGJvYXJkKSAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpOwogICAgIHZvaWQgKCpwYXN0ZV9jbGlw
Ym9hcmQpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisgICAgdm9pZCAoKnNldF9zY3JvbGxf
YWRqdXN0bWVudHMpIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR3RrQWRqdXN0bWVudCogaGFk
anVzdG1lbnQsIEd0a0FkanVzdG1lbnQqIHZhZGp1c3RtZW50KTsKIAotICAgIC8qCi0gICAgICog
aW50ZXJuYWwKLSAgICAgKi8KLSAgICB2b2lkICAgKCpzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSAo
V2ViS2l0V2ViVmlldyosIEd0a0FkanVzdG1lbnQqLCBHdGtBZGp1c3RtZW50Kik7CisgICAgLyog
UGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jl
c2VydmVkNCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNSkgKHZvaWQpOwor
ICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkNikgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0
X3Jlc2VydmVkNykgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkOCkgKHZvaWQp
OwogfTsKIAogV0VCS0lUX0FQSSBHVHlwZQpAQCAtMTI2LDYgKzE0NSwxMiBAQCB3ZWJraXRfd2Vi
X3ZpZXdfZ29fZm9yd2FyZCAoV2ViS2l0V2ViVmllCiBXRUJLSVRfQVBJIHZvaWQKIHdlYmtpdF93
ZWJfdmlld19zdG9wX2xvYWRpbmcgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KTsKIAorV0VCS0lU
X0FQSSBnYm9vbGVhbgord2Via2l0X3dlYl92aWV3X2lzX2xvYWRpbmcgKFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb2dy
ZXNzIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldyk7CisKIFdFQktJVF9BUEkgdm9pZAogd2Via2l0
X3dlYl92aWV3X29wZW4gKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogdXJp
KTsKIApJbmRleDogV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0dOVW1ha2VmaWxlLmFtCShSZXZpc2lvbiAzMDA1MykKKysrIFdlYkNvcmUvR05VbWFrZWZpbGUu
YW0JKEFyYmVpdHNrb3BpZSkKQEAgLTk4Miw3ICs5ODIsOCBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29k
ZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZURl
Y29kZXIuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3hibS9YQk1J
bWFnZURlY29kZXIuY3BwCisJV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy94Ym0vWEJN
SW1hZ2VEZWNvZGVyLmNwcCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJj
ZUVycm9yR3RrLmNwcAogCiAjIC0tLS0KICMgY3VybCBodHRwIGJhY2tlbmQKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0ay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2d0ay9SZXNvdXJjZUVycm9yR3RrLmNwcAkoUmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsvUmVzb3VyY2VFcnJvckd0
ay5jcHAJKFJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggQ2hyaXN0aWFuIER5d2FuIDxjaHJpc3RpYW5AaW1lbmRpby5jb20+CisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisKKyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR0Vycm9yKiBSZXNvdXJjZUVycm9yOjp0b0dF
cnJvcigpIGNvbnN0Cit7CisgICAgaWYgKG1faXNOdWxsKQorICAgICAgICByZXR1cm4gTlVMTDsK
KworICAgIEdFcnJvciogZXJyb3IgPSBnX2Vycm9yX25ld19saXRlcmFsKFdFQktJVF9SRVNPVVJD
RV9FUlJPUiwgbV9lcnJvckNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9sb2NhbGl6ZWREZXNjcmlwdGlvbi51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVy
biBlcnJvcjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpcIEtlaW4gWmVpbGVudW1icnVj
aCBhbSBEYXRlaWVuZGUuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvUmVzb3VyY2VF
cnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9SZXNvdXJjZUVy
cm9yLmgJKFJldmlzaW9uIDMwMDUzKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL1Jlc291
cmNlRXJyb3IuaAkoQXJiZWl0c2tvcGllKQpAQCAtNDMsNiArNDMsMTAgQEAgY2xhc3MgTlNFcnJv
cjsKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRlN0cmVhbS5oPgogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShHVEspCisjaW5jbHVkZSAiZ2xpYi5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIGNsYXNzIFJlc291cmNlRXJyb3IgewpAQCAtMTA1LDYgKzEwOSw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgb3BlcmF0b3IgQ0ZTdHJlYW1FcnJvcigpIGNvbnN0
OwogI2VuZGlmCiAjZW5kaWYKKyNpZiBQTEFURk9STShHVEspCisgICAgICAgIEdFcnJvciogdG9H
RXJyb3IoKSBjb25zdDsKKyNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCB1bnBh
Y2tQbGF0Zm9ybUVycm9ySWZOZWVkZWQoKSBjb25zdApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBy
bwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShSZXZpc2lvbiAzMDA1MykKKysr
IFdlYkNvcmUvV2ViQ29yZS5wcm8JKEFyYmVpdHNrb3BpZSkKQEAgLTE0NSw2ICsxNDUsNyBAQCBn
dGstcG9ydCB7CiAgICAgJCRQV0QvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8gXAogICAgICQkUFdE
L3N2Zy9ncmFwaGljcy9jYWlybyBcCiAgICAgJCRQV0QvcGxhdGZvcm0vbmV0d29yay9jdXJsIFwK
KyAgICAkJFBXRC9wbGF0Zm9ybS9uZXR3b3JrL2d0ayBcCiAgICAgJCRQV0QvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMgXAogICAgICQkUFdEL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcCBcCiAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmIFwKQEAgLTEwNTcsNiArMTA1OCw3
IEBAIGd0ay1wb3J0IHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ludFJlY3RHdGsu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlQ3VybC5j
cHAgXAogICAgICAgICBwbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2Vy
LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL25ldHdvcmsvZ3RrL1Jlc291cmNlRXJyb3JHdGsuY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQWZmaW5lVHJhbnNmb3JtQ2Fpcm8u
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWly
by5jcHAgXApJbmRleDogV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwkoUmV2aXNpb24gMzAwNTMpCisrKyBX
ZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMJKEFyYmVpdHNrb3BpZSkKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4KICAqIENvcHly
aWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA4IENocmlzdGlhbiBEeXdhbiA8Y2hyaXN0aWFuQGltZW5kaW8uY29tPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxOCArMzAsMTcgQEAKIAogc3RhdGljIEd0a1dp
ZGdldCogbWFpbl93aW5kb3c7CiBzdGF0aWMgR3RrV2lkZ2V0KiB1cmlfZW50cnk7Ci1zdGF0aWMg
R3RrU3RhdHVzYmFyKiBtYWluX3N0YXR1c2JhcjsKLXN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldzsKK3N0YXRpYyBHdGtXaWRnZXQqIG1haW5fc3RhdHVzYmFyOworc3RhdGljIEd0a1dpZGdl
dCogd2ViX3ZpZXc7CiBzdGF0aWMgZ2NoYXIqIG1haW5fdGl0bGU7Ci1zdGF0aWMgZ2ludCBsb2Fk
X3Byb2dyZXNzOwotc3RhdGljIGd1aW50IHN0YXR1c19jb250ZXh0X2lkOworc3RhdGljIGd1aW50
IHN0YXR1c19pZDsKIAogc3RhdGljIHZvaWQKIGFjdGl2YXRlX3VyaV9lbnRyeV9jYiAoR3RrV2lk
Z2V0KiBlbnRyeSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBjb25zdCBnY2hhciogdXJpID0gZ3Rr
X2VudHJ5X2dldF90ZXh0IChHVEtfRU5UUlkgKGVudHJ5KSk7CiAgICAgZ19hc3NlcnQgKHVyaSk7
Ci0gICAgd2Via2l0X3dlYl92aWV3X29wZW4gKHdlYl92aWV3LCB1cmkpOworICAgIHdlYmtpdF93
ZWJfdmlld19vcGVuIChXRUJLSVRfV0VCX1ZJRVcgKHdlYl92aWV3KSwgdXJpKTsKIH0KIAogc3Rh
dGljIHZvaWQKQEAgLTQ4LDI0ICs0OCwyOCBAQCB1cGRhdGVfdGl0bGUgKEd0a1dpbmRvdyogd2lu
ZG93KQogewogICAgIEdTdHJpbmcqIHN0cmluZyA9IGdfc3RyaW5nX25ldyAobWFpbl90aXRsZSk7
CiAgICAgZ19zdHJpbmdfYXBwZW5kIChzdHJpbmcsICIgLSBXZWJLaXQgTGF1bmNoZXIiKTsKLSAg
ICBpZiAobG9hZF9wcm9ncmVzcyA8IDEwMCkKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50
ZiAoc3RyaW5nLCAiICglZCUlKSIsIGxvYWRfcHJvZ3Jlc3MpOworICAgIGlmICh3ZWJraXRfd2Vi
X3ZpZXdfaXNfbG9hZGluZyAoV0VCS0lUX1dFQl9WSUVXICh3ZWJfdmlldykpKQorICAgIHsKKyAg
ICAgICAgZ2ludCBwcm9ncmVzcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfcHJvZ3Jlc3MgKFdFQktJ
VF9XRUJfVklFVyAod2ViX3ZpZXcpKTsKKyAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAo
c3RyaW5nLCAiICglZCUlKSIsIHByb2dyZXNzKTsKKyAgICB9CiAgICAgZ2NoYXIqIHRpdGxlID0g
Z19zdHJpbmdfZnJlZSAoc3RyaW5nLCBGQUxTRSk7CiAgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUg
KHdpbmRvdywgdGl0bGUpOwogICAgIGdfZnJlZSAodGl0bGUpOwogfQogCiBzdGF0aWMgdm9pZAot
bGlua19ob3Zlcl9jYiAoV2ViS2l0V2ViVmlldyogcGFnZSwgY29uc3QgZ2NoYXIqIHRpdGxlLCBj
b25zdCBnY2hhciogbGluaywgZ3BvaW50ZXIgZGF0YSkKK2xpbmtfaG92ZXJfY2IgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBjb25zdCBnY2hhciogdGl0bGUsIGNvbnN0IGdjaGFyKiBsaW5rLCBn
cG9pbnRlciBkYXRhKQogewogICAgIC8qIHVuZGVyZmxvdyBpcyBhbGxvd2VkICovCi0gICAgZ3Rr
X3N0YXR1c2Jhcl9wb3AgKG1haW5fc3RhdHVzYmFyLCBzdGF0dXNfY29udGV4dF9pZCk7CisgICAg
Z3RrX3N0YXR1c2Jhcl9wb3AgKEdUS19TVEFUVVNCQVIgKG1haW5fc3RhdHVzYmFyKSwgc3RhdHVz
X2lkKTsKICAgICBpZiAobGluaykKLSAgICAgICAgZ3RrX3N0YXR1c2Jhcl9wdXNoIChtYWluX3N0
YXR1c2Jhciwgc3RhdHVzX2NvbnRleHRfaWQsIGxpbmspOworICAgICAgICBndGtfc3RhdHVzYmFy
X3B1c2ggKEdUS19TVEFUVVNCQVIgKG1haW5fc3RhdHVzYmFyKSwgc3RhdHVzX2lkLCBsaW5rKTsK
IH0KIAogc3RhdGljIHZvaWQKLXRpdGxlX2NoYW5nZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3Zp
ZXcsIFdlYktpdFdlYkZyYW1lKiB3ZWJfZnJhbWUsIGNvbnN0IGdjaGFyKiB0aXRsZSwgZ3BvaW50
ZXIgZGF0YSkKK3RpdGxlX2NoYW5nZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktp
dFdlYkZyYW1lKiB3ZWJfZnJhbWUsCisgICAgICAgICAgICAgICAgIGNvbnN0IGdjaGFyKiB0aXRs
ZSwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBpZiAobWFpbl90aXRsZSkKICAgICAgICAgZ19mcmVl
IChtYWluX3RpdGxlKTsKQEAgLTc0LDkgKzc4LDggQEAgdGl0bGVfY2hhbmdlX2NiIChXZWJLaXRX
ZWJWaWV3KiB3ZWJfdmlldwogfQogCiBzdGF0aWMgdm9pZAotcHJvZ3Jlc3NfY2hhbmdlX2NiIChX
ZWJLaXRXZWJWaWV3KiBwYWdlLCBnaW50IHByb2dyZXNzLCBncG9pbnRlciBkYXRhKQorcHJvZ3Jl
c3NfY2hhbmdlX2NiIChXZWJLaXRXZWJWaWV3KiBwYWdlLCBndWludCBwcm9ncmVzcywgZ3BvaW50
ZXIgZGF0YSkKIHsKLSAgICBsb2FkX3Byb2dyZXNzID0gcHJvZ3Jlc3M7CiAgICAgdXBkYXRlX3Rp
dGxlIChHVEtfV0lORE9XIChtYWluX3dpbmRvdykpOwogfQogCkBAIC04OSw2ICs5MiwxOCBAQCBs
b2FkX2NvbW1pdF9jYiAoV2ViS2l0V2ViVmlldyogcGFnZSwgV2ViCiB9CiAKIHN0YXRpYyB2b2lk
CityZWRpcmVjdF9zY2hlZHVsZWRfY2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIFdlYktpdFdlYkZy
YW1lKiBmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2NoYXIqIGRlc3RpbmF0
aW9uX3VyaSwgZ3VpbnQgdGltZSwgZ3VpbnQgZGVsYXksCisgICAgICAgICAgICAgICAgICAgICAg
IGdwb2ludGVyIGRhdGEpCit7CisgICAgR1N0cmluZyogc3RyaW5nID0gZ19zdHJpbmdfbmV3ICht
YWluX3RpdGxlKTsKKyAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChzdHJpbmcsICIgLSBSZWRp
cmVjdGluZyBpbiAlZCBzZWNvbmRzIiwgZGVsYXkpOworICAgIGdjaGFyKiB0aXRsZSA9IGdfc3Ry
aW5nX2ZyZWUgKHN0cmluZywgRkFMU0UpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlIChHVEtf
V0lORE9XIChtYWluX3dpbmRvdyksIHRpdGxlKTsKKyAgICBnX2ZyZWUgKHRpdGxlKTsKK30KKwor
c3RhdGljIHZvaWQKIGRlc3Ryb3lfY2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciBkYXRh
KQogewogICAgIGd0a19tYWluX3F1aXQgKCk7CkBAIC05NywxMyArMTEyLDEzIEBAIGRlc3Ryb3lf
Y2IgKEd0a1dpZGdldCogd2lkZ2V0LCBncG9pbnRlciAKIHN0YXRpYyB2b2lkCiBnb19iYWNrX2Ni
IChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ29fYmFjayAod2ViX3ZpZXcpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19iYWNrIChXRUJL
SVRfV0VCX1ZJRVcgKHdlYl92aWV3KSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBnb19mb3J3YXJkX2Ni
IChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICB3ZWJraXRfd2ViX3Zp
ZXdfZ29fZm9yd2FyZCAod2ViX3ZpZXcpOworICAgIHdlYmtpdF93ZWJfdmlld19nb19mb3J3YXJk
IChXRUJLSVRfV0VCX1ZJRVcod2ViX3ZpZXcpKTsKIH0KIAogc3RhdGljIEd0a1dpZGdldCoKQEAg
LTExMiwxMyArMTI3LDE0IEBAIGNyZWF0ZV9icm93c2VyICgpCiAgICAgR3RrV2lkZ2V0KiBzY3Jv
bGxlZF93aW5kb3cgPSBndGtfc2Nyb2xsZWRfd2luZG93X25ldyAoTlVMTCwgTlVMTCk7CiAgICAg
Z3RrX3Njcm9sbGVkX3dpbmRvd19zZXRfcG9saWN5IChHVEtfU0NST0xMRURfV0lORE9XIChzY3Jv
bGxlZF93aW5kb3cpLCBHVEtfUE9MSUNZX0FVVE9NQVRJQywgR1RLX1BPTElDWV9BVVRPTUFUSUMp
OwogCi0gICAgd2ViX3ZpZXcgPSBXRUJLSVRfV0VCX1ZJRVcgKHdlYmtpdF93ZWJfdmlld19uZXcg
KCkpOworICAgIHdlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X25ldyAoKTsKICAgICBndGtfY29u
dGFpbmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdFVCAo
d2ViX3ZpZXcpKTsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyks
ICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVfY2hhbmdlX2NiKSwgd2ViX3ZpZXcp
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJsb2FkLXByb2dy
ZXNzLWNoYW5nZWQiLCBHX0NBTExCQUNLIChwcm9ncmVzc19jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7
Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtY29tbWl0
dGVkIiwgR19DQUxMQkFDSyAobG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdf
Q0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVj
dCAod2ViX3ZpZXcsICJ0aXRsZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVfY2hhbmdlX2Ni
KSwgd2ViX3ZpZXcpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAicHJvZ3Jlc3Mt
Y2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHByb2dyZXNzX2NoYW5nZV9jYiksIHdlYl92aWV3KTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFD
SyAobG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAod2Vi
X3ZpZXcsICJyZWRpcmVjdC1zY2hlZHVsZWQiLCBHX0NBTExCQUNLIChyZWRpcmVjdF9zY2hlZHVs
ZWRfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJob3Zl
cmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3ZpZXcpOwog
CiAgICAgcmV0dXJuIHNjcm9sbGVkX3dpbmRvdzsKIH0KQEAgLTEyNiwxMCArMTQyLDExIEBAIGNy
ZWF0ZV9icm93c2VyICgpCiBzdGF0aWMgR3RrV2lkZ2V0KgogY3JlYXRlX3N0YXR1c2JhciAoKQog
ewotICAgIG1haW5fc3RhdHVzYmFyID0gR1RLX1NUQVRVU0JBUiAoZ3RrX3N0YXR1c2Jhcl9uZXcg
KCkpOwotICAgIHN0YXR1c19jb250ZXh0X2lkID0gZ3RrX3N0YXR1c2Jhcl9nZXRfY29udGV4dF9p
ZCAobWFpbl9zdGF0dXNiYXIsICJMaW5rIEhvdmVyIik7CisgICAgbWFpbl9zdGF0dXNiYXIgPSBn
dGtfc3RhdHVzYmFyX25ldyAoKTsKKyAgICBzdGF0dXNfaWQgPSBndGtfc3RhdHVzYmFyX2dldF9j
b250ZXh0X2lkIChHVEtfU1RBVFVTQkFSIChtYWluX3N0YXR1c2JhciksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxpbmsgSG92ZXIiKTsKIAotICAgIHJl
dHVybiAoR3RrV2lkZ2V0KiltYWluX3N0YXR1c2JhcjsKKyAgICByZXR1cm4gbWFpbl9zdGF0dXNi
YXI7CiB9CiAKIHN0YXRpYyBHdGtXaWRnZXQqCkBAIC0xNDQsMTIgKzE2MSwxMiBAQCBjcmVhdGVf
dG9vbGJhciAoKQogCiAgICAgLyogdGhlIGJhY2sgYnV0dG9uICovCiAgICAgaXRlbSA9IGd0a190
b29sX2J1dHRvbl9uZXdfZnJvbV9zdG9jayAoR1RLX1NUT0NLX0dPX0JBQ0spOwotICAgIGdfc2ln
bmFsX2Nvbm5lY3QgKEdfT0JKRUNUIChpdGVtKSwgImNsaWNrZWQiLCBHX0NBTExCQUNLIChnb19i
YWNrX2NiKSwgTlVMTCk7CisgICAgZ19zaWduYWxfY29ubmVjdCAoaXRlbSwgImNsaWNrZWQiLCBH
X0NBTExCQUNLIChnb19iYWNrX2NiKSwgTlVMTCk7CiAgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0IChH
VEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0sIC0xKTsKIAogICAgIC8qIFRoZSBmb3J3YXJkIGJ1
dHRvbiAqLwogICAgIGl0ZW0gPSBndGtfdG9vbF9idXR0b25fbmV3X2Zyb21fc3RvY2sgKEdUS19T
VE9DS19HT19GT1JXQVJEKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVDVCAoaXRlbSks
ICJjbGlja2VkIiwgR19DQUxMQkFDSyAoZ29fZm9yd2FyZF9jYiksIE5VTEwpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3QgKGl0ZW0sICJjbGlja2VkIiwgR19DQUxMQkFDSyAoZ29fZm9yd2FyZF9jYiks
IE5VTEwpOwogICAgIGd0a190b29sYmFyX2luc2VydCAoR1RLX1RPT0xCQVIgKHRvb2xiYXIpLCBp
dGVtLCAtMSk7CiAKICAgICAvKiBUaGUgVVJMIGVudHJ5ICovCkBAIC0xNTcsMTIgKzE3NCwxMiBA
QCBjcmVhdGVfdG9vbGJhciAoKQogICAgIGd0a190b29sX2l0ZW1fc2V0X2V4cGFuZCAoaXRlbSwg
VFJVRSk7CiAgICAgdXJpX2VudHJ5ID0gZ3RrX2VudHJ5X25ldyAoKTsKICAgICBndGtfY29udGFp
bmVyX2FkZCAoR1RLX0NPTlRBSU5FUiAoaXRlbSksIHVyaV9lbnRyeSk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCAoR19PQkpFQ1QgKHVyaV9lbnRyeSksICJhY3RpdmF0ZSIsIEdfQ0FMTEJBQ0sgKGFj
dGl2YXRlX3VyaV9lbnRyeV9jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHVyaV9l
bnRyeSwgImFjdGl2YXRlIiwgR19DQUxMQkFDSyAoYWN0aXZhdGVfdXJpX2VudHJ5X2NiKSwgTlVM
TCk7CiAgICAgZ3RrX3Rvb2xiYXJfaW5zZXJ0IChHVEtfVE9PTEJBUiAodG9vbGJhciksIGl0ZW0s
IC0xKTsKIAogICAgIC8qIFRoZSBnbyBidXR0b24gKi8KICAgICBpdGVtID0gZ3RrX3Rvb2xfYnV0
dG9uX25ld19mcm9tX3N0b2NrIChHVEtfU1RPQ0tfT0spOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZCAoR19PQkpFQ1QgKGl0ZW0pLCAiY2xpY2tlZCIsIEdfQ0FMTEJBQ0sgKGFjdGl2YXRl
X3VyaV9lbnRyeV9jYiksIChncG9pbnRlcil1cmlfZW50cnkpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZCAoaXRlbSwgImNsaWNrZWQiLCBHX0NBTExCQUNLIChhY3RpdmF0ZV91cmlfZW50
cnlfY2IpLCAoZ3BvaW50ZXIpdXJpX2VudHJ5KTsKICAgICBndGtfdG9vbGJhcl9pbnNlcnQgKEdU
S19UT09MQkFSICh0b29sYmFyKSwgaXRlbSwgLTEpOwogCiAgICAgcmV0dXJuIHRvb2xiYXI7CkBA
IC0xNzQsNyArMTkxLDcgQEAgY3JlYXRlX3dpbmRvdyAoKQogICAgIEd0a1dpZGdldCogd2luZG93
ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwogICAgIGd0a193aW5kb3df
c2V0X2RlZmF1bHRfc2l6ZSAoR1RLX1dJTkRPVyAod2luZG93KSwgODAwLCA2MDApOwogICAgIGd0
a193aWRnZXRfc2V0X25hbWUgKHdpbmRvdywgIkd0a0xhdW5jaGVyIik7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdCAoR19PQkpFQ1QgKHdpbmRvdyksICJkZXN0cm95IiwgR19DQUxMQkFDSyAoZGVzdHJv
eV9jYiksIE5VTEwpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdpbmRvdywgImRlc3Ryb3kiLCBH
X0NBTExCQUNLIChkZXN0cm95X2NiKSwgTlVMTCk7CiAKICAgICByZXR1cm4gd2luZG93OwogfQpA
QCAtMTkzLDkgKzIxMCw5IEBAIG1haW4gKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQgKEdUS19DT05UQUlORVIgKG1haW5fd2luZG93KSwgdmJveCk7CiAKICAg
ICBnY2hhciogdXJpID0gKGdjaGFyKikgKGFyZ2MgPiAxID8gYXJndlsxXSA6ICJodHRwOi8vd3d3
Lmdvb2dsZS5jb20vIik7Ci0gICAgd2Via2l0X3dlYl92aWV3X29wZW4gKHdlYl92aWV3LCB1cmkp
OworICAgIHdlYmtpdF93ZWJfdmlld19vcGVuIChXRUJLSVRfV0VCX1ZJRVcgKHdlYl92aWV3KSwg
dXJpKTsKIAotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyAoR1RLX1dJREdFVCAod2ViX3ZpZXcp
KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMgKHdlYl92aWV3KTsKICAgICBndGtfd2lkZ2V0
X3Nob3dfYWxsIChtYWluX3dpbmRvdyk7CiAgICAgZ3RrX21haW4gKCk7CiAKSW5kZXg6IFdlYktp
dC5wcmkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0LnByaQkoUmV2aXNpb24gMzAwNTMpCisrKyBXZWJL
aXQucHJpCShBcmJlaXRza29waWUpCkBAIC02OSw2ICs2OSw3IEBAIHF0LXBvcnQ6SU5DTFVERVBB
VEggKz0gXAogICAgICQkUFdEL1dlYktpdC9xdC9BcGkKIGd0ay1wb3J0OklOQ0xVREVQQVRIICs9
IFwKICAgICAkJEJBU0VfRElSL1dlYkNvcmUvcGxhdGZvcm0vZ3RrIFwKKyAgICAkJEJBU0VfRElS
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9ndGsgXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL2N1cmwgXAogICAgICQkQkFTRV9ESVIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlybyBcCiAgICAgJCRCQVNFX0RJUi9XZWJDb3JlL2xvYWRlci9ndGsgXAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22311</attachid>
            <date>2008-07-16 11:44:12 -0700</date>
            <delta_ts>2008-07-16 11:44:12 -0700</delta_ts>
            <desc>Patch to get some debugging info from the frame loader</desc>
            <filename>frameloader-debug.patch</filename>
            <type>text/plain</type>
            <size>8300</size>
            <attacher name="Marco Barisione">marco.barisione</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxl
TWFuYWdlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY3VybC9SZXNvdXJjZUhhbmRs
ZU1hbmFnZXIuY3BwCmluZGV4IGMxNGJiOTguLjFiOWJjMDYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jdXJsL1Jlc291cmNlSGFuZGxlTWFuYWdlci5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL2N1cmwvUmVzb3VyY2VIYW5kbGVNYW5hZ2VyLmNwcApAQCAt
MzAzLDcgKzMwMyw3IEBAIHZvaWQgUmVzb3VyY2VIYW5kbGVNYW5hZ2VyOjpkb3dubG9hZFRpbWVy
Q2FsbGJhY2soVGltZXI8UmVzb3VyY2VIYW5kbGVNYW5hZ2VyPioKICAgICAgICAgICAgIHByaW50
ZigiQ3VybCBFUlJPUiBmb3IgdXJsPSclcycsIGVycm9yOiAnJXMnXG4iLCB1cmwsIGN1cmxfZWFz
eV9zdHJlcnJvcihtc2ctPmRhdGEucmVzdWx0KSk7CiAjZW5kaWYKICAgICAgICAgICAgIGlmIChk
LT5jbGllbnQoKSkKLSAgICAgICAgICAgICAgICBkLT5jbGllbnQoKS0+ZGlkRmFpbChqb2IsIFJl
c291cmNlRXJyb3IoKSk7CisgICAgICAgICAgICAgICAgZC0+Y2xpZW50KCktPmRpZEZhaWwoam9i
LCBSZXNvdXJjZUVycm9yKCJmb29iYXIiLCA0MiwgImknbSBhbiB1cmwiLCAiaSdtIGEgbG9jYWxp
emVkIGRlc2NyaXB0aW9uIikpOwogICAgICAgICB9CiAKICAgICAgICAgcmVtb3ZlRnJvbUN1cmwo
am9iKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKaW5kZXggZWE3OWU5OS4uNTYxODk5MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTIwMCwxOSArMjAwLDI0
IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJl
c3BvbnNlJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBSZXNvdXJjZVJlcXVl
c3QmIHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogeworICAgIGdf
cHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChpZGVudGlm
aWVyPSVsdSwgcmVxdWVzdD0lcywgcmVzcG9uc2U9JXMpXG4iLAorICAgICAgICBpZGVudGlmaWVy
LCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlc3BvbnNlLnVybCgpLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJl
cXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKKyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNsaWVu
dDo6YXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QoaWRlbnRpZmllcj0lbHUsIHJlcXVl
c3Q9JXMpXG4iLAorICAgICAgICBpZGVudGlmaWVyLCByZXF1ZXN0LnVybCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQogewogICAgIFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcgPSBnZXRWaWV3RnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGdfcHJp
bnQoIkZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90aWZpY2F0aW9uIC0+
IGxvYWQtc3RhcnRlZFxuIik7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJs
b2FkLXN0YXJ0ZWQiLCBtX2ZyYW1lKTsKIH0KIApAQCAtMjIxLDYgKzIyNiw4IEBAIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigp
CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7
CiAgICAgUGFnZSogY29yZVBhZ2UgPSBjb3JlKHdlYlZpZXcpOwogCisgICAgZ19wcmludCgiRnJh
bWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbiAt
PiBsb2FkLXByb2dyZXNzLWNoYW5nZWQoJWQpXG4iLAorICAgICAgICAgICAgKGludCkobHJvdW5k
KGNvcmVQYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpKjEwMCkpKTsKICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImxvYWQtcHJvZ3Jlc3MtY2hhbmdlZCIsIGxy
b3VuZChjb3JlUGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSoxMDApKTsKIH0K
IApAQCAtMjI4LDYgKzIzNSw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVz
c0ZpbmlzaGVkTm90aWZpY2F0aW9uKCkKIHsKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0g
Z2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKIAorICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xp
ZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbiAtPiBsb2FkLWZpbmlzaGVkXG4i
KTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImxvYWQtZmluaXNoZWQiLCBt
X2ZyYW1lKTsKIH0KIApAQCAtNDEwLDExICs0MTgsMTMgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVu
dDo6aGFzRnJhbWVWaWV3KCkgY29uc3QKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0
Y2hEaWRGaW5pc2hMb2FkKCkKIHsKKyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRGaW5pc2hMb2FkIC0+IGxvYWQtZG9uZSh0cnVlKVxuIik7CiAgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJsb2FkLWRvbmUiLCB0cnVlKTsKIH0KIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZnJhbWVMb2FkQ29tcGxldGVkKCkKIHsKKyAgICBnX3ByaW50KCJGcmFt
ZUxvYWRlckNsaWVudDo6ZnJhbWVMb2FkQ29tcGxldGVkXG4iKTsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCkBAIC00OTAsMTYgKzUwMCwyMCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZEhhbmRsZU9ubG9hZEV2ZW50cygpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9yUHJvdmlzaW9uYWxMb2FkKCkKIHsK
KyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVy
UmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWRcbiIpOwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJl
Y3QoKQogeworICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENhbmNl
bENsaWVudFJlZGlyZWN0XG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3Qg
S1VSTCYsIGRvdWJsZSwgZG91YmxlKQordm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hX
aWxsUGVyZm9ybUNsaWVudFJlZGlyZWN0KGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIGRlbGF5LCBk
b3VibGUgZmlyZURhdGUpCiB7CisgICAgZ19wcmludCgiRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoV2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdCh1cmw9JXMsIGRlbGF5PSVmLCBmaXJlRGF0ZT0l
ZilcbiIsCisgICAgICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgZGVsYXksIGZp
cmVEYXRlKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC01MjIsNiArNTM2LDcgQEAg
dm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQogewor
ICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkXG4iKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNl
aXZlVGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKQEAgLTU0Miw2ICs1NTcsNyBAQCB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQogICAgIGdfZnJlZShmcmFt
ZURhdGEtPnVyaSk7CiAgICAgZnJhbWVEYXRhLT51cmkgPSBnX3N0cmR1cChjb3JlKG1fZnJhbWUp
LT5sb2FkZXIoKS0+dXJsKCkucHJldHR5VVJMKCkudXRmOCgpLmRhdGEoKSk7CiAKKyAgICBnX3By
aW50KCJGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkIC0+IGxvYWQtY29t
bWl0dGVkXG4iKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtY29t
bWl0dGVkIik7CiAKICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFt
ZShtX2ZyYW1lKTsKQEAgLTU1MSwxMSArNTY3LDEzIEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6
OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKIHsKKyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWRcbiIpOwogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RMYXlv
dXQoKQogeworICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpcnN0
TGF5b3V0XG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC01NzEsMjEgKzU4OSwy
NSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpjYW5jZWxQb2xpY3lDaGVjaygpCiAKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExv
YWRlciopCiB7CisgICAgZ19wcmludCgiRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkTG9h
ZE1haW5SZXNvdXJjZVxuIik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKikK
IHsKKyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNsaWVudDo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0
YXRlXG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50Ojp3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKQogeworICAgIGdfcHJpbnQoIkZy
YW1lTG9hZGVyQ2xpZW50Ojp3aWxsQ2hhbmdlVGl0bGVcbiIpOwogICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50
TG9hZGVyICpsKQogeworICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRDaGFuZ2VU
aXRsZVxuIik7CiAgICAgc2V0VGl0bGUobC0+dGl0bGUoKSwgbC0+dXJsKCkpOwogfQogCkBAIC02
MTUsNiArNjM3LDcgQEAgU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50OjpnZW5lcmF0ZWRNSU1FVHlw
ZUZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmKSBjb25zdAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGRvY3VtZW50TG9hZGVyKQogewor
ICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpmaW5pc2hlZExvYWRpbmdcbiIpOwogICAg
IGlmICghbV9wbHVnaW5WaWV3KQogICAgICAgICBjb21taXR0ZWRMb2FkKGRvY3VtZW50TG9hZGVy
LCAwLCAwKTsKICAgICBlbHNlIHsKQEAgLTYyNywxMCArNjUwLDEyIEBAIHZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnQ6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogZG9jdW1lbnRMb2FkZXIp
CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQogewor
ICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50Ojpwcm92aXNpb25hbExvYWRTdGFydGVkXG4i
KTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aWRGaW5pc2hMb2FkKCkgeworICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaWRGaW5p
c2hMb2FkXG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC02NTAsMTEgKzY3NSwx
MyBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVu
Z3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpk
aXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlk
ZW50aWZpZXIpCiB7CisgICAgZ19wcmludCgiRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlk
RmluaXNoTG9hZGluZyhpZGVudGlmaWVyPSVsdSlcbiIsIGlkZW50aWZpZXIpOwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFp
bExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0
IFJlc291cmNlRXJyb3ImKQogeworICAgIGdfcHJpbnQoIkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZhaWxMb2FkaW5nKGlkZW50aWZpZXI9JWx1KVxuIiwgaWRlbnRpZmllcik7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIApAQCAtNjY2LDExICs2OTMsMTMgQEAgYm9vbCBGcmFtZUxv
YWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1l
bnRMb2FkZXIqLAogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZhaWxQcm92
aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7CisgICAgZ19wcmludCgiRnJhbWVM
b2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZCAtPiBsb2FkLWRvbmUo
ZmFsc2UpXG4iKTsKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9u
ZSIsIGZhbHNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGYWls
TG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKKyAgICBnX3ByaW50KCJGcmFtZUxvYWRlckNs
aWVudDo6ZGlzcGF0Y2hEaWRGYWlsTG9hZCAtPiBsb2FkLWRvbmUoZmFsc2UpXG4iKTsKICAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9mcmFtZSwgImxvYWQtZG9uZSIsIGZhbHNlKTsKIH0KIApA
QCAtNzYyLDEwICs3OTEsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6c2F2ZVBsYXRmb3Jt
RGF0YVRvQ2FjaGVkUGFnZShDYWNoZWRQYWdlKikKIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZFBhZ2UoQ2FjaGVkUGFnZSopCiB7CisgICAg
Z19wcmludCgiRnJhbWVMb2FkZXJDbGllbnQ6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNo
ZWRQYWdlXG4iKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6dHJhbnNpdGlvblRvQ29t
bWl0dGVkRm9yTmV3UGFnZSgpCiB7CisgICAgZ19wcmludCgiRnJhbWVMb2FkZXJDbGllbnQ6OnRy
YW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2VcbiIpOwogICAgIEZyYW1lKiBmcmFtZSA9IGNv
cmUobV9mcmFtZSk7CiAgICAgQVNTRVJUKGZyYW1lKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27001</attachid>
            <date>2009-01-24 16:10:29 -0800</date>
            <delta_ts>2009-05-07 12:23:00 -0700</delta_ts>
            <desc>Implement load-status and progress properties</desc>
            <filename>p.diff</filename>
            <type>text/plain</type>
            <size>15197</size>
            <attacher name="Christian Dywan">christian</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRH
dGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5j
cHAKaW5kZXggMWI0MTBjNy4uNDMxZDVlMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTE2MCw2ICsxNjAsMTggQEAgU3Ry
aW5nIEZyYW1lTG9hZGVyQ2xpZW50Ojp1c2VyQWdlbnQoY29uc3QgS1VSTCYpCiAgICAgcmV0dXJu
IG1fdXNlckFnZW50OwogfQogCitzdGF0aWMgdm9pZCBub3RpZnlTdGF0dXMoV2ViS2l0V2ViRnJh
bWUqIGZyYW1lLCBXZWJLaXRMb2FkU3RhdHVzIGxvYWRTdGF0dXMpCit7CisgICAgZnJhbWUtPnBy
aXYtPmxvYWRTdGF0dXMgPSBsb2FkU3RhdHVzOworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVD
VChmcmFtZSksICJsb2FkLXN0YXR1cyIpOworCisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9
IGdldFZpZXdGcm9tRnJhbWUoZnJhbWUpOworICAgIGlmIChmcmFtZSA9PSB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpIHsKKyAgICAgICAgd2ViVmlldy0+cHJpdi0+bG9h
ZFN0YXR1cyA9IGxvYWRTdGF0dXM7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3
ZWJWaWV3KSwgImxvYWQtc3RhdHVzIik7CisgICAgfQorfQorCiBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6RG9jdW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVyQ2xpZW50OjpjcmVhdGVEb2N1bWVudExv
YWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0
aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0YSkKIHsKICAgICByZXR1cm4gRG9jdW1lbnRMb2FkZXI6
OmNyZWF0ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CkBAIC0yMzIsNiArMjQ0LDggQEAgdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpCiB7
CiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFtZSk7
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJsb2FkLXN0YXJ0ZWQiLCBtX2Zy
YW1lKTsKKworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgInByb2dyZXNz
Iik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hh
bmdlZE5vdGlmaWNhdGlvbigpCkBAIC0yNDAsNiArMjU0LDggQEAgdm9pZCBGcmFtZUxvYWRlckNs
aWVudDo6cG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCkKICAgICBQYWdl
KiBjb3JlUGFnZSA9IGNvcmUod2ViVmlldyk7CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
d2ViVmlldywgImxvYWQtcHJvZ3Jlc3MtY2hhbmdlZCIsIGxyb3VuZChjb3JlUGFnZS0+cHJvZ3Jl
c3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSoxMDApKTsKKworICAgIGdfb2JqZWN0X25vdGlmeShH
X09CSkVDVCh3ZWJWaWV3KSwgInByb2dyZXNzIik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGll
bnQ6OnBvc3RQcm9ncmVzc0ZpbmlzaGVkTm90aWZpY2F0aW9uKCkKQEAgLTI0Nyw2ICsyNjMsOCBA
QCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlv
bigpCiAgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUobV9mcmFt
ZSk7CiAKICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgImxvYWQtZmluaXNoZWQi
LCBtX2ZyYW1lKTsKKworICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh3ZWJWaWV3KSwgInBy
b2dyZXNzIik7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZyYW1lTG9hZGVyRGVzdHJv
eWVkKCkKQEAgLTQ5Miw2ICs1MTAsOCBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50OjpoYXNXZWJW
aWV3KCkgY29uc3QKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoTG9h
ZCgpCiB7CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fZnJhbWUsICJsb2FkLWRvbmUiLCB0
cnVlKTsKKworICAgIG5vdGlmeVN0YXR1cyhtX2ZyYW1lLCBXRUJLSVRfTE9BRF9GSU5JU0hFRCk7
CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmZyYW1lTG9hZENvbXBsZXRlZCgpCkBAIC01
OTEsNiArNjExLDcgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRSZWNlaXZl
SWNvbigpCiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNp
b25hbExvYWQoKQogeworICAgIG5vdGlmeVN0YXR1cyhtX2ZyYW1lLCBXRUJLSVRfTE9BRF9QUk9W
SVNJT05BTCk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkUmVjZWl2
ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC02MTYsNiArNjM3LDggQEAgdm9pZCBGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICBXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShtX2ZyYW1lKTsKICAgICBpZiAobV9mcmFtZSA9
PSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X21haW5fZnJhbWUod2ViVmlldykpCiAgICAgICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAibG9hZC1jb21taXR0ZWQiLCBtX2ZyYW1lKTsKKwor
ICAgIG5vdGlmeVN0YXR1cyhtX2ZyYW1lLCBXRUJLSVRfTE9BRF9DT01NSVRURUQpOwogfQogCiB2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9hZCgpCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYWNlOTk2ZC4uZmJlZmZlOSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMTAxLDYgKzEwMSw3IEBAIGV4dGVybiAiQyIgewogICAg
ICAgICBHdGtBZGp1c3RtZW50KiB2ZXJ0aWNhbEFkanVzdG1lbnQ7CiAKICAgICAgICAgZ2Jvb2xl
YW4gem9vbUZ1bGxDb250ZW50OworICAgICAgICBXZWJLaXRMb2FkU3RhdHVzIGxvYWRTdGF0dXM7
CiAgICAgfTsKIAogICAgICNkZWZpbmUgV0VCS0lUX1dFQl9GUkFNRV9HRVRfUFJJVkFURShvYmop
ICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1dFQl9G
UkFNRSwgV2ViS2l0V2ViRnJhbWVQcml2YXRlKSkKQEAgLTExMiw2ICsxMTMsNyBAQCBleHRlcm4g
IkMiIHsKICAgICAgICAgZ2NoYXIqIG5hbWU7CiAgICAgICAgIGdjaGFyKiB0aXRsZTsKICAgICAg
ICAgZ2NoYXIqIHVyaTsKKyAgICAgICAgV2ViS2l0TG9hZFN0YXR1cyBsb2FkU3RhdHVzOwogICAg
IH07CiAKICAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZnJhbWUuY3BwCmluZGV4IDM4ZTIzYTQuLjk4YmNmNTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIndlYmtpdHdlYmZy
YW1lLmgiCiAjaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgorI2luY2x1ZGUgIndlYmtpdGVudW10
eXBlcy5oIgogI2luY2x1ZGUgIndlYmtpdG1hcnNoYWwuaCIKICNpbmNsdWRlICJ3ZWJraXRwcml2
YXRlLmgiCiAKQEAgLTg0LDcgKzg1LDggQEAgZW51bSB7CiAKICAgICBQUk9QX05BTUUsCiAgICAg
UFJPUF9USVRMRSwKLSAgICBQUk9QX1VSSQorICAgIFBST1BfVVJJLAorICAgIFBST1BfTE9BRF9T
VEFUVVMKIH07CiAKIHN0YXRpYyBndWludCB3ZWJraXRfd2ViX2ZyYW1lX3NpZ25hbHNbTEFTVF9T
SUdOQUxdID0geyAwLCB9OwpAQCAtMTA1LDYgKzEwNyw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfZnJhbWVfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1Zh
bHVlCiAgICAgY2FzZSBQUk9QX1VSSToKICAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKHZhbHVl
LCB3ZWJraXRfd2ViX2ZyYW1lX2dldF91cmkoZnJhbWUpKTsKICAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX0xPQURfU1RBVFVTOgorICAgICAgICBnX3ZhbHVlX3NldF9lbnVtKHZhbHVlLCB3
ZWJraXRfd2ViX2ZyYW1lX2dldF9sb2FkX3N0YXR1cyhmcmFtZSkpOworICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQo
b2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjIzLDYgKzIyOCwy
MSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0V2ViRnJh
bWVDbGFzcyogZnJhbWVDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAKKyAg
ICAvKioKKyAgICAqIFdlYktpdFdlYkZyYW1lOmxvYWQtc3RhdHVzOgorICAgICoKKyAgICAqIERl
dGVybWluZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBsb2FkLgorICAgICoKKyAgICAqIFNp
bmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShv
YmplY3RDbGFzcywgUFJPUF9MT0FEX1NUQVRVUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19lbnVtKCJsb2FkLXN0YXR1cyIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9hZCBTdGF0dXMiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRl
dGVybWluZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBsb2FkIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX0xPQURf
U1RBVFVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX0xPQURfRklOSVNIRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwogICAg
IGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShmcmFtZUNsYXNzLCBzaXplb2YoV2ViS2l0V2ViRnJh
bWVQcml2YXRlKSk7CiB9CiAKQEAgLTY2Miw0ICs2ODIsMjAgQEAgdW5zaWduZWQgaW50IHdlYmtp
dF93ZWJfZnJhbWVfbnVtYmVyX29mX2FjdGl2ZV9hbmltYXRpb25zKFdlYktpdFdlYkZyYW1lKiBm
cmFtZSkKICAgICByZXR1cm4gY29udHJvbGxlci0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7
CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl9mcmFtZV9nZXRfbG9hZF9zdGF0dXM6CisgKiBAZnJh
bWU6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHN0YXR1
cyBvZiB0aGUgbG9hZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0TG9hZFN0YXR1
cyB3ZWJraXRfd2ViX2ZyYW1lX2dldF9sb2FkX3N0YXR1cyhXZWJLaXRXZWJGcmFtZSogZnJhbWUp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9GUkFNRShmcmFtZSks
IFdFQktJVF9MT0FEX0ZJTklTSEVEKTsKKworICAgIFdlYktpdFdlYkZyYW1lUHJpdmF0ZSogcHJp
diA9IGZyYW1lLT5wcml2OworICAgIHJldHVybiBwcml2LT5sb2FkU3RhdHVzOworfQorCiB9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaAppbmRleCBmY2RhY2U2Li5kNGM2YmFlIDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmgKQEAgLTU3LDYgKzU3LDEyIEBAIHN0cnVjdCBfV2ViS2l0
V2ViRnJhbWVDbGFzcyB7CiAgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQ2KSAodm9pZCk7CiB9
OwogCit0eXBlZGVmIGVudW0geworICAgIFdFQktJVF9MT0FEX1BST1ZJU0lPTkFMLAorICAgIFdF
QktJVF9MT0FEX0NPTU1JVFRFRCwKKyAgICBXRUJLSVRfTE9BRF9GSU5JU0hFRAorfSBXZWJLaXRM
b2FkU3RhdHVzOworCiBXRUJLSVRfQVBJIEdUeXBlCiB3ZWJraXRfd2ViX2ZyYW1lX2dldF90eXBl
ICAgICAgICAgICAodm9pZCk7CiAKQEAgLTk3LDYgKzEwMyw5IEBAIHdlYmtpdF93ZWJfZnJhbWVf
ZmluZF9mcmFtZSAgICAgICAgIChXZWJLaXRXZWJGcmFtZSAgICAgICAqZnJhbWUsCiBXRUJLSVRf
QVBJIEpTR2xvYmFsQ29udGV4dFJlZgogd2Via2l0X3dlYl9mcmFtZV9nZXRfZ2xvYmFsX2NvbnRl
eHQgKFdlYktpdFdlYkZyYW1lICAgICAgICpmcmFtZSk7CiAKK1dFQktJVF9BUEkgV2ViS2l0TG9h
ZFN0YXR1cword2Via2l0X3dlYl9mcmFtZV9nZXRfbG9hZF9zdGF0dXMgICAgKFdlYktpdFdlYkZy
YW1lICAgICAgICpmcmFtZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCAzNThhY2U5Li40NjExMzhhIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJ2aWV3LmNwcApAQCAtNTksNiArNTksNyBAQAogI2luY2x1ZGUgIlBhc3RlYm9hcmRI
ZWxwZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKICNpbmNs
dWRlICJTY3JpcHRWYWx1ZS5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlN1
YnN0aXR1dGVEYXRhLmgiCkBAIC0xNDYsNyArMTQ3LDkgQEAgZW51bSB7CiAgICAgUFJPUF9XSU5E
T1dfRkVBVFVSRVMsCiAgICAgUFJPUF9UUkFOU1BBUkVOVCwKICAgICBQUk9QX1pPT01fTEVWRUws
Ci0gICAgUFJPUF9GVUxMX0NPTlRFTlRfWk9PTQorICAgIFBST1BfRlVMTF9DT05URU5UX1pPT00s
CisgICAgUFJPUF9MT0FEX1NUQVRVUywKKyAgICBQUk9QX1BST0dSRVNTCiB9OwogCiBzdGF0aWMg
Z3VpbnQgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwpAQCAt
MzA0LDYgKzMwNywxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKgogICAgIGNhc2UgUFJPUF9G
VUxMX0NPTlRFTlRfWk9PTToKICAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF9mdWxsX2NvbnRlbnRfem9vbSh3ZWJWaWV3KSk7CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9MT0FEX1NUQVRVUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZW51
bSh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF9sb2FkX3N0YXR1cyh3ZWJWaWV3KSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9QUk9HUkVTUzoKKyAgICAgICAgZ192YWx1ZV9zZXRf
ZG91YmxlKHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb2dyZXNzKHdlYlZpZXcpKTsKKyAg
ICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElE
X1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOwogICAgIH0KQEAgLTE1NjksNiAr
MTU3OCwzNSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRX
ZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOwogCisgICAgLyoqCisgICAgKiBXZWJLaXRXZWJWaWV3OmxvYWQtc3RhdHVzOgorICAgICoK
KyAgICAqIERldGVybWluZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBsb2FkLgorICAgICoK
KyAgICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9MT0FEX1NUQVRVUywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19lbnVtKCJsb2FkLXN0YXR1cyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTG9hZCBT
dGF0dXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIkRldGVybWluZXMgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBsb2FkIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX0xPQURfU1RBVFVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgV0VCS0lUX0xPQURfRklOSVNIRUQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIC8qKgorICAgICogV2ViS2l0V2ViVmlldzpwcm9ncmVzczoKKyAgICAqCisgICAg
KiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHByb2dyZXNzIG9mIHRoZSBsb2FkLgorICAgICoKKyAg
ICAqIFNpbmNlOiAxLjEuMQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShvYmplY3RDbGFzcywgUFJPUF9QUk9HUkVTUywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19kb3VibGUoInByb2dyZXNzIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2dyZXNzIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IkRldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvYWQiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsIDEuMCwg
MS4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwogICAgIGdfdHlwZV9jbGFzc19hZGRfcHJp
dmF0ZSh3ZWJWaWV3Q2xhc3MsIHNpemVvZihXZWJLaXRXZWJWaWV3UHJpdmF0ZSkpOwogfQogCkBA
IC0yNjcyLDQgKzI3MTAsMzUgQEAgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X2Z1bGxfY29udGVu
dF96b29tKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdib29sZWFuIHpvb20KICAgICBnX29iamVj
dF9ub3RpZnkoR19PQkpFQ1Qod2ViVmlldyksICJmdWxsLWNvbnRlbnQtem9vbSIpOwogfQogCisv
KioKKyAqIHdlYmtpdF93ZWJfdmlld19nZXRfbG9hZF9zdGF0dXM6CisgKiBAd2ViX3ZpZXc6IGEg
I1dlYktpdFdlYlZpZXcKKyAqCisgKiBEZXRlcm1pbmVzIHRoZSBjdXJyZW50IHN0YXR1cyBvZiB0
aGUgbG9hZC4KKyAqCisgKiBTaW5jZTogMS4xLjEKKyAqLworV2ViS2l0TG9hZFN0YXR1cyB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBXRUJL
SVRfTE9BRF9GSU5JU0hFRCk7CisKKyAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdl
YlZpZXctPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmxvYWRTdGF0dXM7Cit9CisKKy8qKgorICog
d2Via2l0X3dlYl92aWV3X2dldF9wcm9ncmVzczoKKyAqIEB3ZWJfdmlldzogYSAjV2ViS2l0V2Vi
VmlldworICoKKyAqIERldGVybWluZXMgdGhlIGN1cnJlbnQgcHJvZ3Jlc3Mgb2YgdGhlIGxvYWQu
CisgKgorICogU2luY2U6IDEuMS4xCisgKi8KK2dkb3VibGUgd2Via2l0X3dlYl92aWV3X2dldF9w
cm9ncmVzcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMS4wKTsKKworICAgIHJldHVybiBscm91
bmQoY29yZSh3ZWJWaWV3KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKSAqIDEwMCk7
Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCAyYmI4YzYxLi40MDdjODFm
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJi
YWNrZm9yd2FyZGxpc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViaGlzdG9yeWl0ZW0uaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2Vic2V0dGluZ3MuaD4KIApAQCAtMjk2LDYgKzI5NywxMiBAQCBXRUJLSVRfQVBJIHZv
aWQKIHdlYmtpdF93ZWJfdmlld19zZXRfZnVsbF9jb250ZW50X3pvb20gICAgICAgICAgIChXZWJL
aXRXZWJWaWV3ICAgICAgICAqd2ViX3ZpZXcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gICAgICAgICAgICAgIGZ1bGxfY29udGVudF96
b29tKTsKIAorV0VCS0lUX0FQSSBXZWJLaXRMb2FkU3RhdHVzCit3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2xvYWRfc3RhdHVzICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92
aWV3KTsKKworV0VCS0lUX0FQSSBnZG91YmxlCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb2dyZXNz
ICAgICAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYl92aWV3KTsKKwog
R19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HdGtMYXVuY2hl
ci9tYWluLmMgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggOGVkMjY5MC4u
Y2E0M2M4YSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCisrKyBi
L1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtMzIsNyArMzIsNyBAQCBzdGF0aWMg
R3RrV2lkZ2V0KiB1cmlfZW50cnk7CiBzdGF0aWMgR3RrU3RhdHVzYmFyKiBtYWluX3N0YXR1c2Jh
cjsKIHN0YXRpYyBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldzsKIHN0YXRpYyBnY2hhciogbWFpbl90
aXRsZTsKLXN0YXRpYyBnaW50IGxvYWRfcHJvZ3Jlc3M7CitzdGF0aWMgZ2RvdWJsZSBsb2FkX3By
b2dyZXNzOwogc3RhdGljIGd1aW50IHN0YXR1c19jb250ZXh0X2lkOwogCiBzdGF0aWMgdm9pZApA
QCAtNDksNyArNDksNyBAQCB1cGRhdGVfdGl0bGUgKEd0a1dpbmRvdyogd2luZG93KQogICAgIEdT
dHJpbmcqIHN0cmluZyA9IGdfc3RyaW5nX25ldyAobWFpbl90aXRsZSk7CiAgICAgZ19zdHJpbmdf
YXBwZW5kIChzdHJpbmcsICIgLSBXZWJLaXQgTGF1bmNoZXIiKTsKICAgICBpZiAobG9hZF9wcm9n
cmVzcyA8IDEwMCkKLSAgICAgICAgZ19zdHJpbmdfYXBwZW5kX3ByaW50ZiAoc3RyaW5nLCAiICgl
ZCUlKSIsIGxvYWRfcHJvZ3Jlc3MpOworICAgICAgICBnX3N0cmluZ19hcHBlbmRfcHJpbnRmIChz
dHJpbmcsICIgKCVmJSUpIiwgbG9hZF9wcm9ncmVzcyk7CiAgICAgZ2NoYXIqIHRpdGxlID0gZ19z
dHJpbmdfZnJlZSAoc3RyaW5nLCBGQUxTRSk7CiAgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUgKHdp
bmRvdywgdGl0bGUpOwogICAgIGdfZnJlZSAodGl0bGUpOwpAQCAtNzQsMTggKzc0LDIxIEBAIHRp
dGxlX2NoYW5nZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFdlYkZyYW1lKiB3
ZWJfZnJhbWUsIGNvbnN0IGdjaGFyCiB9CiAKIHN0YXRpYyB2b2lkCi1wcm9ncmVzc19jaGFuZ2Vf
Y2IgKFdlYktpdFdlYlZpZXcqIHBhZ2UsIGdpbnQgcHJvZ3Jlc3MsIGdwb2ludGVyIGRhdGEpCitu
b3RpZnlfbG9hZF9zdGF0dXNfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVj
KiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKIHsKLSAgICBsb2FkX3Byb2dyZXNzID0gcHJvZ3Jlc3M7
Ci0gICAgdXBkYXRlX3RpdGxlIChHVEtfV0lORE9XIChtYWluX3dpbmRvdykpOworICAgIGlmICh3
ZWJraXRfd2ViX3ZpZXdfZ2V0X2xvYWRfc3RhdHVzICh3ZWJfdmlldykgPT0gV0VCS0lUX0xPQURf
Q09NTUlUVEVEKSB7CisgICAgICAgIFdlYktpdFdlYkZyYW1lKiBmcmFtZSA9IHdlYmtpdF93ZWJf
dmlld19nZXRfbWFpbl9mcmFtZSAod2ViX3ZpZXcpOworICAgICAgICBjb25zdCBnY2hhciogdXJp
ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfdXJpIChmcmFtZSk7CisgICAgICAgIGlmICh1cmkpCisg
ICAgICAgICAgICBndGtfZW50cnlfc2V0X3RleHQgKEdUS19FTlRSWSAodXJpX2VudHJ5KSwgdXJp
KTsKKyAgICB9CiB9CiAKIHN0YXRpYyB2b2lkCi1sb2FkX2NvbW1pdF9jYiAoV2ViS2l0V2ViVmll
dyogcGFnZSwgV2ViS2l0V2ViRnJhbWUqIGZyYW1lLCBncG9pbnRlciBkYXRhKQorbm90aWZ5X3By
b2dyZXNzX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgR1BhcmFtU3BlYyogcHNwZWMsIGdw
b2ludGVyIGRhdGEpCiB7Ci0gICAgY29uc3QgZ2NoYXIqIHVyaSA9IHdlYmtpdF93ZWJfZnJhbWVf
Z2V0X3VyaShmcmFtZSk7Ci0gICAgaWYgKHVyaSkKLSAgICAgICAgZ3RrX2VudHJ5X3NldF90ZXh0
IChHVEtfRU5UUlkgKHVyaV9lbnRyeSksIHVyaSk7CisgICAgbG9hZF9wcm9ncmVzcyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfcHJvZ3Jlc3MgKHdlYl92aWV3KTsKKyAgICB1cGRhdGVfdGl0bGUgKEdU
S19XSU5ET1cgKG1haW5fd2luZG93KSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMTUsMTAgKzEx
OCwxMCBAQCBjcmVhdGVfYnJvd3NlciAoKQogICAgIHdlYl92aWV3ID0gV0VCS0lUX1dFQl9WSUVX
ICh3ZWJraXRfd2ViX3ZpZXdfbmV3ICgpKTsKICAgICBndGtfY29udGFpbmVyX2FkZCAoR1RLX0NP
TlRBSU5FUiAoc2Nyb2xsZWRfd2luZG93KSwgR1RLX1dJREdFVCAod2ViX3ZpZXcpKTsKIAotICAg
IGdfc2lnbmFsX2Nvbm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJ0aXRsZS1jaGFuZ2VkIiwg
R19DQUxMQkFDSyAodGl0bGVfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOwotICAgIGdfc2lnbmFsX2Nv
bm5lY3QgKEdfT0JKRUNUICh3ZWJfdmlldyksICJsb2FkLXByb2dyZXNzLWNoYW5nZWQiLCBHX0NB
TExCQUNLIChwcm9ncmVzc19jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7Ci0gICAgZ19zaWduYWxfY29u
bmVjdCAoR19PQkpFQ1QgKHdlYl92aWV3KSwgImxvYWQtY29tbWl0dGVkIiwgR19DQUxMQkFDSyAo
bG9hZF9jb21taXRfY2IpLCB3ZWJfdmlldyk7Ci0gICAgZ19zaWduYWxfY29ubmVjdCAoR19PQkpF
Q1QgKHdlYl92aWV3KSwgImhvdmVyaW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92
ZXJfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJ0aXRs
ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodGl0bGVfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAibm90aWZ5Ojpsb2FkLXN0YXR1cyIsIEdfQ0FM
TEJBQ0sgKG5vdGlmeV9sb2FkX3N0YXR1c19jYiksIHdlYl92aWV3KTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0ICh3ZWJfdmlldywgIm5vdGlmeTo6cHJvZ3Jlc3MiLCBHX0NBTExCQUNLIChub3RpZnlf
cHJvZ3Jlc3NfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcs
ICJob3ZlcmluZy1vdmVyLWxpbmsiLCBHX0NBTExCQUNLIChsaW5rX2hvdmVyX2NiKSwgd2ViX3Zp
ZXcpOwogCiAgICAgcmV0dXJuIHNjcm9sbGVkX3dpbmRvdzsKIH0KQEAgLTE3NCw3ICsxNzcsNyBA
QCBjcmVhdGVfd2luZG93ICgpCiAgICAgR3RrV2lkZ2V0KiB3aW5kb3cgPSBndGtfd2luZG93X25l
dyAoR1RLX1dJTkRPV19UT1BMRVZFTCk7CiAgICAgZ3RrX3dpbmRvd19zZXRfZGVmYXVsdF9zaXpl
IChHVEtfV0lORE9XICh3aW5kb3cpLCA4MDAsIDYwMCk7CiAgICAgZ3RrX3dpZGdldF9zZXRfbmFt
ZSAod2luZG93LCAiR3RrTGF1bmNoZXIiKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0IChHX09CSkVD
VCAod2luZG93KSwgImRlc3Ryb3kiLCBHX0NBTExCQUNLIChkZXN0cm95X2NiKSwgTlVMTCk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAod2luZG93LCAiZGVzdHJveSIsIEdfQ0FMTEJBQ0sgKGRlc3Ry
b3lfY2IpLCBOVUxMKTsKIAogICAgIHJldHVybiB3aW5kb3c7CiB9CkBAIC0xODMsNiArMTg2LDgg
QEAgaW50CiBtYWluIChpbnQgYXJnYywgY2hhciogYXJndltdKQogewogICAgIGd0a19pbml0ICgm
YXJnYywgJmFyZ3YpOworICAgIGlmICghZ190aHJlYWRfc3VwcG9ydGVkICgpKQorICAgICAgICBn
X3RocmVhZF9pbml0IChOVUxMKTsKIAogICAgIEd0a1dpZGdldCogdmJveCA9IGd0a192Ym94X25l
dyAoRkFMU0UsIDApOwogICAgIGd0a19ib3hfcGFja19zdGFydCAoR1RLX0JPWCAodmJveCksIGNy
ZWF0ZV90b29sYmFyICgpLCBGQUxTRSwgRkFMU0UsIDApOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>