<?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>45443</bug_id>
          
          <creation_ts>2010-09-09 01:06:46 -0700</creation_ts>
          <short_desc>[GTK] Support for viewport meta tag</short_desc>
          <delta_ts>2010-12-09 06:56:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>46755</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Joone Hur">joone</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>kling</cc>
    
    <cc>mrobinson</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>276355</commentid>
    <comment_count>0</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-09 01:06:46 -0700</bug_when>
    <thetext>WebKitGtk needs to support the viewport meta tag, which was introduced by mobile Safari.
Because many mobile web sites already use it and QWebKit and WebKitEFL also support it.

For more information about the viewport meta tag, please refer to the URL below: http://developer.apple.com/safari/library/documentation/appleapplications/reference/safariwebcontent/usingtheviewport/usingtheviewport.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276376</commentid>
    <comment_count>1</comment_count>
      <attachid>67011</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-09 02:23:29 -0700</bug_when>
    <thetext>Created attachment 67011
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>276378</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-09 02:24:34 -0700</bug_when>
    <thetext>Attachment 67011 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewport.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewport.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 12 in 13 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278001</commentid>
    <comment_count>3</comment_count>
      <attachid>67362</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-12 23:52:04 -0700</bug_when>
    <thetext>Created attachment 67362
updated GtkLauncher for testing

This patch makes GtkLauncher handle the viewport-changed signal when you connect web pages for iPhone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>278032</commentid>
    <comment_count>4</comment_count>
      <attachid>67011</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-09-13 00:32:18 -0700</bug_when>
    <thetext>Comment on attachment 67011
Proposed patch

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

The patch looks good overall. I just have a few minor style nits. I&apos;d really like to see an expanded ChangeLog entry. Can you explain this feature in more depth and what it is useful for?

&gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:616
&gt; +    WebKitViewport* viewport = webkit_viewport_new(arguments);
It&apos;s probably best to use PlatformRefPtr here.

&gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:617
&gt; +    g_signal_emit_by_name(webView, &quot;viewport-changed&quot;, viewport); 
Don&apos;t need to cache webFrame or webView. Just do: 

 g_signal_emit_by_name(getViewFromFrame(kit(frame)), &quot;viewport-changed&quot;, viewport);

&gt; WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:809
&gt; +    // &quot;viewport-changed&quot; signal will be emitted when the main frame is loaded.
Nit! All on one line.

&gt; WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:812
&gt; +         WebKitViewport* viewport = webkit_viewport_new(arguments);
Again PlatformRefPtr.

&gt; WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:813
&gt; +         g_signal_emit_by_name(webView, &quot;viewport-changed&quot;, viewport); 
This can simply be g_signal_emit_by_name(webView, &quot;viewport-changed&quot;, ViewPortArguments());

&gt; WebKit/gtk/webkit/webkitviewport.cpp:70
&gt; +    viewport = WEBKIT_VIEWPORT(g_object_new(WEBKIT_TYPE_VIEWPORT, NULL));
Please make this declaration one line:
WebKitViewport* viewport = WEBKIT_VIEWPORT(g_object_new(WEBKIT_TYPE_VIEWPORT, NULL));

&gt; WebKit/gtk/webkit/webkitviewport.cpp:99
&gt; +    WebKitViewportPrivate* priv = viewport-&gt;priv;
NULL should be 0 and no need to cache this, just do this:

g_return_val_if_fail(WEBKIT_IS_VIEWPORT(viewport), 0);
return viewport-&gt;priv-&gt;width;

&gt; WebKit/gtk/webkit/webkitviewport.cpp:120
&gt; +    return priv-&gt;width;
Same fix as above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285472</commentid>
    <comment_count>5</comment_count>
      <attachid>68913</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-27 08:26:23 -0700</bug_when>
    <thetext>Created attachment 68913
Proposed Patch2

During resolving this issue, Opera viewport CSS properties spec. applied to the mainline.
https://bugs.webkit.org/show_bug.cgi?id=44201
Until then, we just had got the viewport meta tag information, but this patch also allows to get the calculated viewport configuration from WebCore.
It means that we can get the available viewport size, initial/maximum/minimum scale value through the device width/height and desktop width.

In addition, this patch supports viewport test cases (fast/viewport) except viewport-45.html.
It fails as follows,

--- /tmp/layout-test-results/fast/viewport/viewport-45-expected.txt    2010-09-27 16:56:08.000000000 +0900
+++ /tmp/layout-test-results/fast/viewport/viewport-45-actual.txt    2010-09-27 16:56:08.000000000 +0900
@@ -1,2 +1,2 @@
-viewport size 3200x3520 scale 0.100000 with limits [0.100000, 0.100000]
+viewport size 3199x3519 scale 0.100000 with limits [0.100000, 0.100000]

Therefore, I let DRT test skips this test case for WebKitGtk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285473</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-27 08:27:19 -0700</bug_when>
    <thetext>Attachment 68913 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportconfig.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:408:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 17 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285477</commentid>
    <comment_count>7</comment_count>
      <attachid>68913</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-27 08:41:58 -0700</bug_when>
    <thetext>Comment on attachment 68913
Proposed Patch2

Some comments for now... will look more later

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

&gt; ChangeLog:8
&gt; +
&gt; +        [GTK] Support for viewport meta tag
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=45443
&gt; +
&gt; +        * GNUmakefile.am: Added webkitviewportconfig.h webkitviewportconfig.cpp 

Would be good with a bit more elaborated ChangeLog

&gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:606
&gt; +void ChromeClient::didReceiveViewportArguments(Frame* frame, const WebCore::ViewportArguments&amp; arguments) const

This is going to change soon in another patch, so you might want to hold off for a bit. There is going to be a dispatchViewportDataChanged or similar.

&gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:610
&gt; +    WebCore::FloatRect rect = core(webview)-&gt;chrome()-&gt;pageRect();

Remember that the device size has to be given as in portrait mode. or better said, device width = width in portrait, and device height = width in landscape (this is without any ui elements)

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:40
&gt; +struct _WebKitViewportConfigPrivate {
&gt; +    gint width;
&gt; +    gint height;
&gt; +    gfloat targetDensityDPI;
&gt; +    gfloat initialScaleFactor;
&gt; +    gfloat minimumScaleFactor;
&gt; +    gfloat maximumScaleFactor;
&gt; +    gboolean isUserScalable;
&gt; +    gboolean isValid;
&gt; +    gint deviceDPI;
&gt; +    gint deviceWidth;
&gt; +    gint deviceHeight;
&gt; +    gint desktopWidth;
&gt; +};

You might want a way to extend this struct without causing ABI breakage

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:56
&gt; +    priv-&gt;targetDensityDPI = 0.0;

uh... that doesnt seem right. Maybe you want to use -1.0 for invalid?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285501</commentid>
    <comment_count>8</comment_count>
      <attachid>68913</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-09-27 09:32:53 -0700</bug_when>
    <thetext>Comment on attachment 68913
Proposed Patch2

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

Looks good, though we need a GTK+ guy to look at the API.

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:226
&gt; +void webkit_viewport_config_find_configuration(WebKitViewportConfig* viewportConfig, WebKitWebFrame* mainFrame, gint available_width, gint available_height)

I&apos;m thinking about renaming find to compute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>285520</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-27 10:04:58 -0700</bug_when>
    <thetext>Attachment 68913 did not build on win:
Build output: http://queues.webkit.org/results/4038156</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286303</commentid>
    <comment_count>10</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-28 09:38:52 -0700</bug_when>
    <thetext>&gt; &gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:610
&gt; &gt; +    WebCore::FloatRect rect = core(webview)-&gt;chrome()-&gt;pageRect();
&gt; 
&gt; Remember that the device size has to be given as in portrait mode. or better said, device width = width in portrait, and device height = width in landscape (this is without any ui elements)

The device size can be set when a WebKitViewportConfig object is created through webkit_viewport_config_new, so the return value of pageRect() is not relevant to the device size.

According to the opera spec, &quot;available-width is the width of the visual viewport (device-width - decorations) at scale factor 1.0&quot;
I think that pageRect() can be used for getting the available-size. Of course, it can have the same value of the device width if there is no any border.

&gt; &gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:40
&gt; &gt; +struct _WebKitViewportConfigPrivate {
&gt; &gt; +    gint width;
&gt; &gt; +    gint height;
&gt; &gt; +    gfloat targetDensityDPI;
&gt; &gt; +    gfloat initialScaleFactor;
&gt; &gt; +    gfloat minimumScaleFactor;
&gt; &gt; +    gfloat maximumScaleFactor;
&gt; &gt; +    gboolean isUserScalable;
&gt; &gt; +    gboolean isValid;
&gt; &gt; +    gint deviceDPI;
&gt; &gt; +    gint deviceWidth;
&gt; &gt; +    gint deviceHeight;
&gt; &gt; +    gint desktopWidth;
&gt; &gt; +};
&gt; 
&gt; You might want a way to extend this struct without causing ABI breakage

This is a private structure defined in cpp file , so applications cannot access this structure directly.

Thank you for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286883</commentid>
    <comment_count>11</comment_count>
      <attachid>69198</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-09-29 08:12:04 -0700</bug_when>
    <thetext>Created attachment 69198
Proposed Patch3

I updated the patch with the changes commented by Kenneth.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>286887</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 08:17:45 -0700</bug_when>
    <thetext>Attachment 69198 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportconfig.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:408:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 17 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>287034</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-29 11:50:53 -0700</bug_when>
    <thetext>Attachment 69198 did not build on win:
Build output: http://queues.webkit.org/results/4223014</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289489</commentid>
    <comment_count>14</comment_count>
      <attachid>69762</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-05 01:23:48 -0700</bug_when>
    <thetext>Created attachment 69762
Proposed Patch4

https://bugs.webkit.org/show_bug.cgi?id=46755 landed, so I updated this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289494</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-05 01:29:01 -0700</bug_when>
    <thetext>Attachment 69762 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportconfig.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:85:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportconfig.h:88:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:408:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 17 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289537</commentid>
    <comment_count>16</comment_count>
      <attachid>69762</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-05 05:03:34 -0700</bug_when>
    <thetext>Comment on attachment 69762
Proposed Patch4

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

Seems fine with the exception of calling the signal when the mainframe is constructed.

&gt; WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:915
&gt; +
&gt; +        /* In order to reset the viewport, 
&gt; +         * The &quot;viewport-config-changed&quot; signal will be emitted when the main frame is loaded.
&gt; +         */
&gt; +        WebCore::ViewportArguments arguments;
&gt; +        WebKitWebViewPrivate* webviewPriv = WEBKIT_WEB_VIEW_GET_PRIVATE(webView);
&gt; +        webkit_viewport_config_compute_configuration_internal(webviewPriv-&gt;viewportConfig.get(), arguments, WebCore::IntSize(0, 0));
&gt; +        g_signal_emit_by_name(webView, &quot;viewport-config-changed&quot;, webviewPriv-&gt;viewportConfig.get()); 

This shouldn&apos;t be needed any more. the dispatchViewportDataDidChange is called when the body is inserted into the document if a viewport meta tag hasn&apos;t been encountered at that point

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:35
&gt; +    gboolean isValid;

It is always valid now, unless you can construct one your self.

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:49
&gt; +static void webkit_viewport_config_init(WebKitViewportConfig* viewport)

which is seems that you can

&gt; WebKit/gtk/webkit/webkitviewportconfig.cpp:219
&gt; + * @available_width: the available width of the viewport
&gt; + * @available_height: the available height of the viewport

Maybe make it clear that this is without any ui components, fixed or not. The iPhone for instance has non fixed ui components</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289595</commentid>
    <comment_count>17</comment_count>
      <attachid>69762</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-05 07:30:59 -0700</bug_when>
    <thetext>Comment on attachment 69762
Proposed Patch4

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

&gt; WebKit/gtk/webkit/webkitviewportconfig.h:58
&gt; +WEBKIT_API WebKitViewportConfig* 
&gt; +webkit_viewport_config_new                      (gint desktopWidth, 
&gt; +                                                 gint deviceWidth, 
&gt; +                                                 gint deviceHeight, 
&gt; +                                                 gint deviceDPI);

I see no reason for the API user to create a new WebKitViewportConfig object, I would remove this. Also, perhaps naming this WebKitViewportFeatures, since we have WindowFeatures would make it easier to understand what this is about?

&gt; WebKit/gtk/webkit/webkitviewportconfig.h:91
&gt; +WEBKIT_API void 
&gt; +webkit_viewport_config_compute_configuration    (WebKitViewportConfig* viewportConfig, 
&gt; +                                                 WebKitWebFrame* mainFrame, 
&gt; +                                                 gint available_width,
&gt; +                                                 gint available_height);

I don&apos;t understand the purpose of this call. This feels like the user is having to manually do something that should be done automatically. How do you see API users using this?

&gt; WebKit/gtk/webkit/webkitwebview.cpp:4497
&gt; +void webkit_web_view_set_viewport_config(WebKitWebView* webView, WebKitViewportConfig* viewportConfig)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; +    g_return_if_fail(WEBKIT_IS_VIEWPORT_CONFIG(viewportConfig));
&gt; +
&gt; +    webView-&gt;priv-&gt;viewportConfig = viewportConfig;

It looks like we don&apos;t communicate the change to WebCore - I believe there is no real point to, anyway, right? Unless you change the viewport stuff through the DOM itself. I wouldn&apos;t allow setting the viewport features into the view.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289597</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-05 07:40:13 -0700</bug_when>
    <thetext>
&gt; I don&apos;t understand the purpose of this call. This feels like the user is having to manually do something that should be done automatically. How do you see API users using this?

We also do this semi automatically in qt, we the user still has to provide the visible area (it changes after rotation)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289616</commentid>
    <comment_count>19</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-05 08:19:03 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; &gt; I don&apos;t understand the purpose of this call. This feels like the user is having to manually do something that should be done automatically. How do you see API users using this?
&gt; 
&gt; We also do this semi automatically in qt, we the user still has to provide the visible area (it changes after rotation)

That makes sense! Do you see any reason not to obtain this automatically from the widget allocation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>289753</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-05 11:08:04 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; &gt; I don&apos;t understand the purpose of this call. This feels like the user is having to manually do something that should be done automatically. How do you see API users using this?
&gt; &gt; 
&gt; &gt; We also do this semi automatically in qt, we the user still has to provide the visible area (it changes after rotation)
&gt; 
&gt; That makes sense! Do you see any reason not to obtain this automatically from the widget allocation?

Because we cannot find a generic way of doing this. The viewport is different because we use tiling, thus the actual webview is the size of the contents and we use a view to pan it (only updating visible tiles). There can also be UI components on top.

We tried obtaining this manually and it has just been a pain in the a*** and not proved very flexible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290098</commentid>
    <comment_count>21</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-05 22:25:05 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 69762 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=69762&amp;action=review
&gt;
&gt; &gt; WebKit/gtk/webkit/webkitviewportconfig.h:58
&gt; &gt; +WEBKIT_API WebKitViewportConfig*
&gt; &gt; +webkit_viewport_config_new                      (gint desktopWidth,
&gt; &gt; +                                                 gint deviceWidth,
&gt; &gt; +                                                 gint deviceHeight,
&gt; &gt; +                                                 gint deviceDPI);
&gt;
&gt; I see no reason for the API user to create a new WebKitViewportConfig object, I would remove this. Also, perhaps naming this WebKitViewportFeatures, since we have WindowFeatures would make it easier to understand what this is about?

Yes, right.  I will remove this function from the public header file and change WebKitViewportConfig to WebKitViewportFeatures.


&gt; &gt; WebKit/gtk/webkit/webkitwebview.cpp:4497
&gt; &gt; +void webkit_web_view_set_viewport_config(WebKitWebView* webView, WebKitViewportConfig* viewportConfig)
&gt; &gt; +{
&gt; &gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; &gt; +    g_return_if_fail(WEBKIT_IS_VIEWPORT_CONFIG(viewportConfig));
&gt; &gt; +
&gt; &gt; +    webView-&gt;priv-&gt;viewportConfig = viewportConfig;
&gt;
&gt; It looks like we don&apos;t communicate the change to WebCore - I believe there is no real point to, anyway, right? Unless you change the viewport stuff through the DOM itself. I wouldn&apos;t allow setting the viewport features into the view.

As Kenneth said, when the size of the viewport is changed, we need to compute the optimal viewport configuration again. Therefore, there should be a way of accessing the viewportConfig via the view like getting the WindowFeatures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290189</commentid>
    <comment_count>22</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-06 04:30:08 -0700</bug_when>
    <thetext>
&gt; As Kenneth said, when the size of the viewport is changed, we need to compute the optimal viewport configuration again. Therefore, there should be a way of accessing the viewportConfig via the view like getting the WindowFeatures.

Be careful what you call the viewport. There is the actual visible viewport (which might grow, like when the address bar scrolls out on the iphone) and there is the layout viewport.

When calculating the &quot;viewport features&quot;, as you are calling it, we need the minimum actual visible viewport as input and it will output the actual layout viewport, plus min, max, initial scale etc.

I&apos;m not sure &quot;viewport features&quot; is the best name. We are currently considering calling it viewport attributes for Qt - finding a proper name for this is hard :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290281</commentid>
    <comment_count>23</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-06 07:24:19 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; I&apos;m not sure &quot;viewport features&quot; is the best name. We are currently considering calling it viewport attributes for Qt - finding a proper name for this is hard :-)

kov mentioned that he also likes ViewportAttributes as the name from #47202 
So, I will use WebKitViewportAttributes instead of WebKitViewportConfig.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290961</commentid>
    <comment_count>24</comment_count>
      <attachid>70074</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-07 06:20:59 -0700</bug_when>
    <thetext>Created attachment 70074
Proposed Patch5

- renamed WebKitViewportConfig to WebKitViewportAttributes.
- renamed viewport-config-changed signal to viewport-attributes-changed.
- not allowed to emit viewport-attributes-changed signal when dispatchDidCommitLoad() was called.
- moved webkit_viewport_attributes_new() function declaration to webkitprivate.h
- changed webkit_web_view_set_viewport_config() to webkit_web_view_init_viewport_attributes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>290963</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-07 06:25:25 -0700</bug_when>
    <thetext>Attachment 70074 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportattributes.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:406:  Extra space between gint and desktopWidth  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:407:  Extra space between gint and deviceWidth  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:408:  Extra space between gint and deviceHeight  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:409:  Extra space between gint and deviceDPI  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:412:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 20 in 19 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>291568</commentid>
    <comment_count>26</comment_count>
      <attachid>70074</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-10-08 04:57:31 -0700</bug_when>
    <thetext>Comment on attachment 70074
Proposed Patch5

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

Looks good to me, but please pass the API through Gustavo or another GTK+ reviewer.

Also you need to change one call before this can be committed.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:248
&gt; +    WebCore::ViewportAttributes attrs = WebCore::findConfigurationForViewportData(arguments, priv-&gt;desktopWidth, priv-&gt;deviceWidth, 

The API recently changed to computeViewportAttribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292046</commentid>
    <comment_count>27</comment_count>
      <attachid>70339</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-08 21:41:59 -0700</bug_when>
    <thetext>Created attachment 70339
Proposed Patch6

* Renamed WebCore::findConfigurationForViewportData to WebCore::computeViewportAttributes.
* Renamed layoutViewport to layoutSize in the ViewportAttributes Structure.

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292051</commentid>
    <comment_count>28</comment_count>
      <attachid>70339</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-10-08 22:11:13 -0700</bug_when>
    <thetext>Comment on attachment 70339
Proposed Patch6

Rejecting patch 70339 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;build-and-test&apos;, &apos;--no-clean&apos;, &apos;--no-update&apos;, &apos;--test&apos;, &apos;--quiet&apos;, &apos;--non-interactive&apos;]&quot; exit_code: 2
Last 500 characters of output:
....ok
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/parseSvnPropertyValue..........ok
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/prepareParsedPatch.............ok
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/runPatchCommand................ok
WebKitTools/Scripts/webkitperl/VCSUtils_unittest/setChangeLogDateAndReviewer....ok
All tests successful.
Files=14, Tests=304,  1 wallclock secs ( 0.73 cusr +  0.17 csys =  0.90 CPU)
Running build-dumprendertree
Compiling DumpRenderTree failed!

Full output: http://queues.webkit.org/results/4343003</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292075</commentid>
    <comment_count>29</comment_count>
      <attachid>70339</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-10-09 02:35:41 -0700</bug_when>
    <thetext>Comment on attachment 70339
Proposed Patch6

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

Aside from those comments (which are mostly about clarifying the API for the users), this looks good. Please remember you need the r+ of two GTK+ reviewers before adding new API to the port.

&gt; LayoutTests/platform/gtk/Skipped:5895
&gt;  

Why is this skipped? Open a bug about it or put a comment in the file at least.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:22
&gt; +

I&apos;m really missing here (or maybe in the WebView signal?) a gtk-doc section explaining what is this exactly and why would you want to use it, possibly with links to some doc in the web somewhere. Otherwise it&apos;s pretty mysterious API in general IMHO.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2470
&gt; +     * fit web content.

I don&apos;t think this helps in understanding what the signal is used for unless you already know about ViewPort and stuff.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2472
&gt; +     * Since: 1.3.4

This (like all other Since: tags) has to be 1.3.5 now.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:4526
&gt; +    webView-&gt;priv-&gt;viewportAttributes = webkit_viewport_attributes_new(desktopWidth, deviceWidth, deviceHeight, deviceDPI);

Missing adoptPlatformRef? Is this function mostly useful for testing? Perhaps _set_ instead of _init_ ?

&gt; WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp:1396
&gt; +}

You only need to add this in Win?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292921</commentid>
    <comment_count>30</comment_count>
      <attachid>70527</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-12 06:42:48 -0700</bug_when>
    <thetext>Created attachment 70527
Proposed Patch7

I updated this patch with the changes commented by Xan as follows, (https://bugs.webkit.org/show_bug.cgi?id=45443#c29)
* Added a bug number in the Skipped file about fast/viewport/viewport-45.html. (https://bugs.webkit.org/show_bug.cgi?id=47481)
* Added an introduction to the WebKitViewportAttributes for gtk-doc section.
* Changed the API version to 1.3.5.
* Called webkit_viewport_attributes_new through adoptPlatformRef.
* Renamed webkit_web_view_init_viewport_attributes to webkit_web_view_set_viewport_attributes.
* Added the configurationForViewport method in Mac,Wx port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>292922</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-12 06:47:00 -0700</bug_when>
    <thetext>Attachment 70527 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportattributes.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:406:  Extra space between gint and desktopWidth  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:407:  Extra space between gint and deviceWidth  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:408:  Extra space between gint and deviceHeight  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:409:  Extra space between gint and deviceDPI  [whitespace/declaration] [3]
WebKit/gtk/webkit/webkitwebview.h:412:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 20 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>293778</commentid>
    <comment_count>32</comment_count>
      <attachid>70074</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-10-13 15:51:05 -0700</bug_when>
    <thetext>Comment on attachment 70074
Proposed Patch5

Cleared Kenneth Rohde Christiansen&apos;s review+ from obsolete attachment 70074 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>295601</commentid>
    <comment_count>33</comment_count>
      <attachid>70527</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-18 10:29:55 -0700</bug_when>
    <thetext>Comment on attachment 70527
Proposed Patch7

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

Great patch! The API changes look fine to me and the documentation is awesome. I have a few very small nits.

&gt; WebKit/gtk/ChangeLog:10
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [GTK] Support for viewport meta tag
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=45443
&gt; +
&gt; +        This patch allows to get the viewport attributes to set the width and initial scale of the viewport
&gt; +        used to display web content.
&gt; +

I think this ChangeLog should be a bit bigger. This patch effectively adds viewport support to the GTK+ port, so it should probably have at least one sentence about what the viewport support does.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:116
&gt; + * Returns the width of the #WebKitViewportAttributes in pixels.
&gt; + *
&gt; + * Returns: the width of the #WebKitViewportAttributes in pixels

Does this really need to be repeated for all these methods?

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:124
&gt; +    g_return_val_if_fail(WEBKIT_IS_VIEWPORT_ATTRIBUTES(viewportAttributes), 0);
&gt; +
&gt; +    return viewportAttributes-&gt;priv-&gt;width;

I&apos;d say remove the extra line here and in the rest of the two-line methods.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:268
&gt; +// for internal use only

New comments should be complete sentences.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:4529
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; +
&gt; +    webView-&gt;priv-&gt;viewportAttributes = adoptPlatformRef(webkit_viewport_attributes_new(desktopWidth, deviceWidth, deviceHeight, deviceDPI));

I&apos;d say remove the extra line from the two line methods again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296163</commentid>
    <comment_count>34</comment_count>
      <attachid>70527</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-19 06:55:11 -0700</bug_when>
    <thetext>Comment on attachment 70527
Proposed Patch7

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

&gt; WebKit/gtk/webkit/webkitviewportattributes.h:85
&gt; +WEBKIT_API void 
&gt; +webkit_viewport_attributes_computation              (WebKitViewportAttributes* viewportAttributes, 
&gt; +                                                     WebKitWebFrame* mainFrame, 
&gt; +                                                     gint availableWidth,
&gt; +                                                     gint availableHeight);

Computation is a noun, so it&apos;s a bad name for this method (which should always be verbs). Having to provide the main frame here is also a bit weird. Perhaps the viewport should have a weak reference to the view?

&gt; WebKit/gtk/webkit/webkitwebview.h:409
&gt; +WEBKIT_API void 
&gt; +webkit_web_view_set_viewport_attributes         (WebKitWebView        *webView,
&gt; +                                                 gint                 desktopWidth, 
&gt; +                                                 gint                 deviceWidth, 
&gt; +                                                 gint                 deviceHeight, 
&gt; +                                                 gint                 deviceDPI);

I dislike this because it breaks the expectation that a get will return an object and a set would set the same object. I do not really understand why you would want to set these values manually. Why do we need this function?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296181</commentid>
    <comment_count>35</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-19 07:30:33 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; &gt; As Kenneth said, when the size of the viewport is changed, we need to compute the optimal viewport configuration again. Therefore, there should be a way of accessing the viewportConfig via the view like getting the WindowFeatures.
&gt; 
&gt; Be careful what you call the viewport. There is the actual visible viewport (which might grow, like when the address bar scrolls out on the iphone) and there is the layout viewport.
&gt; 
&gt; When calculating the &quot;viewport features&quot;, as you are calling it, we need the minimum actual visible viewport as input and it will output the actual layout viewport, plus min, max, initial scale etc.

OK, let me try to describe this process so my thinking is clearer:

Say you load a page that has a viewport tag. ChromeClient::dispatchViewportDataDidChange will eventually be called. At this point you will want to know the following:

The size of the screen (deviceHeigh/deviceWidth), the size of the are visible to the user (availableWidth/availableHeight), the screen DPI, the &quot;desktop width&quot;, so that you can provide WebCore::computeViewportAttributes with them.

Screen size and DPI should be obtainable automatically. I don&apos;t see a point in only providing available width and height when you call compute manually and using the contents size in the automatic computation, and I&apos;m really lost on the meaning of desktop width to be honest.

So what I&apos;m thinking is this:

1. We provide a viewport-attributes-changed signal in the view; while handling that signal you have to feed the ViewportAttributes with the data it requires for the computation by setting properties on it - after handling this you just need to get the ViewportAttributes object that is owned by the view and make use of the computed values as needed; we can have a viewport-attributes-available signal in the ViewportAttributes object, or a state tracking enum that we can monitor for notify signals
2. We throw away webkit_web_view_set_viewport_attributes and webkit_viewport_attributes_computation entirely

Are there any use cases that would not be covered by this that you can see? I think it makes the API more elegant and simple.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>296219</commentid>
    <comment_count>36</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-19 08:59:18 -0700</bug_when>
    <thetext>We discussed on IRC and came up with webkit_viewport_recompute which would trigger the normal process, by using the same code as the automatic path, including firing the signal.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297162</commentid>
    <comment_count>37</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-20 17:20:08 -0700</bug_when>
    <thetext>Thank you for your comments.
Before updating the patch, I&apos;d like to confirm the following issues,

1) Add &quot;void webkit_web_view_recompute_viewport_attributes(WebKitWebView* webView, gint availableWidth, gint availableHeight) instead of webkit_viewport_recompute to trigger a viewport-attribute-changed signal.

It seems to be easier to trigger the signal in WebKitWebView.  Also, we still need the availableWidth/Height parameters although these values are able to be obtained in WebKit. Because, DRT needs this function given arbitrary availableWidth/height for testing. 
Instead, we can remove webkit_viewport_attributes_computation.

2) Rename webkit_web_view_set_viewport_attributes to webkit_web_view_init_viewport_attributes.

We need this function to set the deskopWidth, deviceWidth/Height, and deviceDPI. Because WebKit cannot get these values by itself. In addition, if these values are changed, a UA should call this function to initialize the viewport attributes again.

As kov commented, we usually expect that a set would set the same object used by the get. So I&apos;m going to rename this function as above.
 
Any suggestions are appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297377</commentid>
    <comment_count>38</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-21 04:46:31 -0700</bug_when>
    <thetext>(In reply to comment #37) 
&gt; 2) Rename webkit_web_view_set_viewport_attributes to webkit_web_view_init_viewport_attributes.
&gt; 
&gt; We need this function to set the deskopWidth, deviceWidth/Height, and deviceDPI. Because WebKit cannot get these values by itself. In addition, if these values are changed, a UA should call this function to initialize the viewport attributes again.

We are able to get the deviceWidth/Height and deviceDPI in WebKitGtk as follow,

static void webkit_web_view_init(WebKitWebView* webView)
{
...
 // Attach a new WebKitViewportAttrbutes object given the viewport configuration values.
    GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(webView));
    priv-&gt;viewportAttributes = adoptPlatformRef(webkit_viewport_attributes_new(980, gdk_screen_get_width(screen), gdk_screen_get_height(screen), webViewGetDPI(webView)));

Therefore, we don&apos;t need to call webkit_web_view_init_viewport_attributes on real devices, but DRT still needs  this function to initialize the viewport attributes manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>297391</commentid>
    <comment_count>39</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-21 05:52:35 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; Thank you for your comments.
&gt; Before updating the patch, I&apos;d like to confirm the following issues,
&gt; 
&gt; 1) Add &quot;void webkit_web_view_recompute_viewport_attributes(WebKitWebView* webView, gint availableWidth, gint availableHeight) instead of webkit_viewport_recompute to trigger a viewport-attribute-changed signal.
&gt; 
&gt; It seems to be easier to trigger the signal in WebKitWebView.  Also, we still need the availableWidth/Height parameters although these values are able to be obtained in WebKit. Because, DRT needs this function given arbitrary availableWidth/height for testing. 
&gt; Instead, we can remove webkit_viewport_attributes_computation.

No, my idea is that WebKitViewportAttributes will keep a weak reference to the WebView. We will have this function:

void webkit_viewport_attributes_recompute(WebKitViewport*);

It will trigger the signal. While handling the signal you have to set availableWidth/Height on the ViewportAttributes object. No need for any other function for these.

If there&apos;s something DRT needs it&apos;s fine to have, but it should _not_ be public API just because DRT needs it. There are plenty of functions that we already use in DRT that are not public API (they are in webkitprivate.h), you can use them as example =).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298740</commentid>
    <comment_count>40</comment_count>
      <attachid>71716</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-25 00:10:12 -0700</bug_when>
    <thetext>Created attachment 71716
Proposed patch8

I updated this patch with the changes commented by Martin and kov.
Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298741</commentid>
    <comment_count>41</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-25 00:15:21 -0700</bug_when>
    <thetext>Attachment 71716 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportattributes.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 15 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>299929</commentid>
    <comment_count>42</comment_count>
      <attachid>71716</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-26 18:43:16 -0700</bug_when>
    <thetext>Comment on attachment 71716
Proposed patch8

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

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:63
&gt; +    /* viewport properties */

I think the comments in this structure can be removed. They don&apos;t add much extra information.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:159
&gt; +gfloat webkit_viewport_attributes_get_initial_scale_factor(WebKitViewportAttributes *viewportAttributes)

Asterisk should be next to the type name.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:175
&gt; +gfloat webkit_viewport_attributes_get_minimum_scale_factor(WebKitViewportAttributes *viewportAttributes)

Ditto.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:191
&gt; +gfloat webkit_viewport_attributes_get_maximum_scale_factor(WebKitViewportAttributes *viewportAttributes)

Ditto.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:207
&gt; +gfloat webkit_viewport_attributes_get_device_pixel_ratio(WebKitViewportAttributes *viewportAttributes)

Ditto.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:223
&gt; +gboolean webkit_viewport_attributes_get_is_user_scalable(WebKitViewportAttributes *viewportAttributes)

Asterisk should be next to the type.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:239
&gt; +gboolean webkit_viewport_attributes_get_is_valid(WebKitViewportAttributes *viewportAttributes)

Ditto.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:253
&gt; +/**
&gt; + * webkit_viewport_attributes_recompute:
&gt; + * @viewportAttributes: a #WebKitViewportAttributes
&gt; + *
&gt; + * Recompute the optimal viewport attributes when the size of the visible viewport is changed. 
&gt; + *
&gt; + * Since: 1.3.5
&gt; + */
&gt; +void webkit_viewport_attributes_recompute(WebKitViewportAttributes *viewportAttributes)

Ditto. I&apos;m not sure this is clear as to why you&apos;d want to call webkit_viewport_attributes_recompute. If the UA is supposed to call this when the size of the device viewport has changed, I think the comment should say that explicitly.

&gt; WebKit/gtk/webkit/webkitviewportattributes.h:78
&gt; +webkit_viewport_attributes_get_device_pixel_ratio   (WebKitViewportAttributes *viewportAttributes);
&gt; +
&gt; +WEBKIT_API gboolean 
&gt; +webkit_viewport_attributes_get_is_user_scalable     (WebKitViewportAttributes *viewportAttributes);
&gt; +
&gt; +WEBKIT_API gboolean

Ditto.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:3158
&gt; +    priv-&gt;viewportAttributes = adoptPlatformRef(webkit_viewport_attributes_new(priv-&gt;corePage, 980, gdk_screen_get_width(screen), gdk_screen_get_height(screen), webViewGetDPI(webView)));

Why is this initialized to 980 here? There should at least be a comment explaining it.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:4533
&gt; +void webkit_web_view_init_viewport_attributes(WebKitWebView* webView, gint desktopWidth, gint deviceWidth, gint deviceHeight, gint deviceDPI)

As I mentioned on IRC, it&apos;s my belief that we should wait for the DumpRenderTreeSupport code to land and have these private methods there.

&gt; WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:837
&gt; +    webkit_web_view_init_viewport_attributes(webView, 980, 320, 480, 160);
&gt; +    WebKitViewportAttributes* viewportAttributes = webkit_web_view_get_viewport_attributes(webView);
&gt; +    webkit_viewport_attributes_compute_internal(viewportAttributes, availableWidth, availableHeight);
&gt; +    fprintf(stdout, &quot;viewport size %dx%d scale %f with limits [%f, %f]\n&quot;,

Shouldn&apos;t webkit_web_view_init_viewport_attributes call webkit_viewport_attributes_compute_internal itself? Is there a situation where you&apos;d want to call webkit_web_view_init_viewport_attributes without immediately calling webkit_viewport_attributes_compute_internal? Is it possible to move webkit_viewport_attributes_compute_internal into the body of webkit_viewport_attribute_recompute and have webkit_web_view_init_viewport_attributes call webkit_viewport_attribute_recompute?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300166</commentid>
    <comment_count>43</comment_count>
      <attachid>71716</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-10-27 06:11:21 -0700</bug_when>
    <thetext>Comment on attachment 71716
Proposed patch8

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

I agree with Martin we should make those functions part of DRTSupport if possible, but I&apos;m not against pushing them if it takes a while. Also, I&apos;m not against having comments. Just make sure they have only one * at the first line, that way gtk-doc will skip them. We&apos;re almost there regarding API usability, but it still looks a bit backwards. Hopefully my comments will help a bit =)

&gt; WebKit/gtk/WebCoreSupport/ChromeClientGtk.cpp:613
&gt; +void ChromeClient::dispatchViewportDataDidChange(const ViewportArguments&amp; arguments) const
&gt; +{
&gt; +    WebKitViewportAttributes* viewportAttributes = webkit_web_view_get_viewport_attributes(m_webView);
&gt; +    FloatRect rect = core(m_webView)-&gt;chrome()-&gt;pageRect();
&gt; +    webkit_viewport_attributes_compute_internal(viewportAttributes, static_cast&lt;gint&gt;(rect.width()), static_cast&lt;gint&gt;(rect.height()));
&gt; +
&gt; +    g_signal_emit_by_name(m_webView, &quot;viewport-attributes-changed&quot;, viewportAttributes); 

You should just call webkit_viewport_recompute here =).

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:261
&gt; +    g_return_if_fail(WEBKIT_IS_VIEWPORT_ATTRIBUTES(viewportAttributes));
&gt; +
&gt; +    WebKitWebView* webView = kit(viewportAttributes-&gt;priv-&gt;page);
&gt; +    FloatRect rect = viewportAttributes-&gt;priv-&gt;page-&gt;chrome()-&gt;pageRect();
&gt; +    webkit_viewport_attributes_compute_internal(viewportAttributes, static_cast&lt;gint&gt;(rect.width()), static_cast&lt;gint&gt;(rect.height()));
&gt; +
&gt; +    g_signal_emit_by_name(webView, &quot;viewport-attributes-changed&quot;, viewportAttributes); 

This seems to be the other way around than what is needed... You first need the information, to then make the calculation. What&apos;s the point of computing the attributes as if the available size was the pageRect first, and how do you use the available size provided afterwards?

Also, you should get the DPI and screen size here instead of at the time the object is created, otherwise it is not very useful to call this when screen stuff changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300275</commentid>
    <comment_count>44</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-27 09:14:08 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; I agree with Martin we should make those functions part of DRTSupport if possible, but I&apos;m not against pushing them if it takes a while. Also, I&apos;m not against having comments. Just make sure they have only one * at the first line, that way gtk-doc will skip them. We&apos;re almost there regarding API usability, but it still looks a bit backwards. Hopefully my comments will help a bit =)

Just a heads up, DRTSupport just landed landed last night. :) I agree with your comments about the documentation, though I think we need to be extra careful. I believe that private stuff has snuck into our documentation in the past.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300758</commentid>
    <comment_count>45</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-27 18:04:13 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; (From update of attachment 71716 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71716&amp;action=review

&gt; &gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:261
&gt; &gt; +    g_return_if_fail(WEBKIT_IS_VIEWPORT_ATTRIBUTES(viewportAttributes));
&gt; &gt; +
&gt; &gt; +    WebKitWebView* webView = kit(viewportAttributes-&gt;priv-&gt;page);
&gt; &gt; +    FloatRect rect = viewportAttributes-&gt;priv-&gt;page-&gt;chrome()-&gt;pageRect();
&gt; &gt; +    webkit_viewport_attributes_compute_internal(viewportAttributes, static_cast&lt;gint&gt;(rect.width()), static_cast&lt;gint&gt;(rect.height()));
&gt; &gt; +
&gt; &gt; +    g_signal_emit_by_name(webView, &quot;viewport-attributes-changed&quot;, viewportAttributes); 
&gt; 
&gt; This seems to be the other way around than what is needed... You first need the information, to then make the calculation. What&apos;s the point of computing the attributes as if the available size was the pageRect first, and how do you use the available size provided afterwards?

The available size means the visible area of a web page, so I call the pageRect to get the visible area because it returns the webview size.  In addition, the available size is used to calculate the initial and minimum scale value through WebCore::computeViewportAttributes with the given desktopWidth, deviceWidth/height, and DeviceDPI.

&gt; Also, you should get the DPI and screen size here instead of at the time the object is created, otherwise it is not very useful to call this when screen stuff changes.
I assumed that the DPI and screen size are constant values, but we need to get the screen(device) size again as well as the available size when the screen is rotated.

Thanks, Martin and Kov, I will update the patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300850</commentid>
    <comment_count>46</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-27 20:47:00 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; (From update of attachment 71716 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=71716&amp;action=review
&gt; Shouldn&apos;t webkit_web_view_init_viewport_attributes call webkit_viewport_attributes_compute_internal itself? Is there a situation where you&apos;d want to call webkit_web_view_init_viewport_attributes without immediately calling webkit_viewport_attributes_compute_internal? Is it possible to move webkit_viewport_attributes_compute_internal into the body of webkit_viewport_attribute_recompute and have webkit_web_view_init_viewport_attributes call webkit_viewport_attribute_recompute?

It is possible to move webkit_viewport_attributes_compute_internal into the body of webkit_viewport_attribute_recompute if not consider DRT. In addition, I am going to remove webkit_web_view_init_viewport_attributes function because it is only used for DRT. Instead, I&apos;ll add a similar function in DumpRenderTreeSupportGtk as you told.

Sharing the same functionalities between WebKit and DRT seems very hard in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301545</commentid>
    <comment_count>47</comment_count>
      <attachid>72287</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-28 19:59:37 -0700</bug_when>
    <thetext>Created attachment 72287
Proposed Patch9

I applied Martin and Kov&apos;s comments to the patch.
Also, I have renamed webViewGetDPI to webkit_web_view_get_dpi and made it a private function to be called by webkit_viewport_attributes_recompute.
I am wondering if it makes sense.

Any suggestions are appreciated.
Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301547</commentid>
    <comment_count>48</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-10-28 20:03:31 -0700</bug_when>
    <thetext>Attachment 72287 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebKit/gtk/webkit/webkitviewportattributes.h:48:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:49:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:50:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:51:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:55:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:58:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:61:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:64:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:67:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:70:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:73:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:76:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:79:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitviewportattributes.h:82:  Extra space before ( in function call  [whitespace/parens] [4]
WebKit/gtk/webkit/webkitwebview.h:405:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 15 in 23 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302009</commentid>
    <comment_count>49</comment_count>
      <attachid>72287</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-10-29 13:33:00 -0700</bug_when>
    <thetext>Comment on attachment 72287
Proposed Patch9

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

&gt; WebKit/gtk/webkit/webkitprivate.h:326
&gt; +    void
&gt; +    webkit_viewport_attributes_set(WebKitViewportAttributes* viewportAttributes, const WebCore::ViewportAttributes&amp; attrs, gboolean userScalable);

This may be uneeded. See below.

&gt; WebKitTools/DumpRenderTree/LayoutTestController.h:287
&gt; +    void configurationForViewport(int availableWidth, int availableHeight);

This method actually dumps the viewport so it should be called dumpConfigurationForViewport.

&gt; WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:836
&gt; +    DumpRenderTreeSupportGtk::updateViewportAttributes(webView, availableWidth, availableHeight);

I&apos;m a little worried because the Qt implementation doesn&apos;t actually set the viewport attributes on the view. Seemingly it just calculates the appropriate viewport given the size. Shouldn&apos;t we try to replicate that as closely as possible?

Perhaps this should just call a method like this:

WebKitViewportAttributes* attributes = DumpRenderTreeSupportGtk::computeViewportAttributesForSize(availbleWidth, availableHeight);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302222</commentid>
    <comment_count>50</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-10-29 18:15:37 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (From update of attachment 72287 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=72287&amp;action=review
&gt; 
&gt; &gt; WebKit/gtk/webkit/webkitprivate.h:326
&gt; &gt; +    void
&gt; &gt; +    webkit_viewport_attributes_set(WebKitViewportAttributes* viewportAttributes, const WebCore::ViewportAttributes&amp; attrs, gboolean userScalable);
&gt; 
&gt; This may be uneeded. See below.

If we don&apos;t need it, we should use the setters or GObject property methods.

&gt; 
&gt; &gt; WebKitTools/DumpRenderTree/LayoutTestController.h:287
&gt; &gt; +    void configurationForViewport(int availableWidth, int availableHeight);
&gt; 
&gt; This method actually dumps the viewport so it should be called dumpConfigurationForViewport.
&gt; 
&gt; &gt; WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp:836
&gt; &gt; +    DumpRenderTreeSupportGtk::updateViewportAttributes(webView, availableWidth, availableHeight);
&gt; 
&gt; I&apos;m a little worried because the Qt implementation doesn&apos;t actually set the viewport attributes on the view. Seemingly it just calculates the appropriate viewport given the size. Shouldn&apos;t we try to replicate that as closely as possible?

Do we need to create a new WebKitViewportAttributes object whenever the browser loads the viewport meta tags or the device screen changes? If so, it seems a bit overhead, but I will try it.

&gt; Perhaps this should just call a method like this:
&gt; 
&gt; WebKitViewportAttributes* attributes = DumpRenderTreeSupportGtk::computeViewportAttributesForSize(availbleWidth, availableHeight);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302254</commentid>
    <comment_count>51</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-10-29 22:29:36 -0700</bug_when>
    <thetext>Please add stubs to WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp|h too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305872</commentid>
    <comment_count>52</comment_count>
      <attachid>73192</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-07 03:43:09 -0800</bug_when>
    <thetext>Created attachment 73192
Proposed Patch10

Some changes have been made to the patch according to Martin&apos;s suggestions.
- webkit_viewport_attributes_set has been removed.
- webkit_webview_get_viewport_attributes has been removed.
- Instances of the WebKitViewportAttributes are created on the fly when they need.
- All getters of the WebKitViewportAttributes has been removed.

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>305873</commentid>
    <comment_count>53</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-07 04:08:07 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; Please add stubs to WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp|h too.
It doesn&apos;t seems to need because QWebKit already has dumpConfigurationForViewport function and it doesn&apos;t share the same base class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306705</commentid>
    <comment_count>54</comment_count>
      <attachid>73192</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-11-09 04:33:02 -0800</bug_when>
    <thetext>Comment on attachment 73192
Proposed Patch10

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

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:301
&gt; + */
&gt; +void webkit_viewport_attributes_recompute(WebKitWebView* webView)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; +
&gt; +    GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(webView));
&gt; +    FloatRect rect = webView-&gt;priv-&gt;corePage-&gt;chrome()-&gt;pageRect();
&gt; +    ViewportArguments arguments = webView-&gt;priv-&gt;corePage-&gt;mainFrame()-&gt;document()-&gt;viewportArguments();
&gt; +    // The DesktopWidth has 980, because this value works well for most web pages designed for desktop user agents.
&gt; +    ViewportAttributes attrs = computeViewportAttributes(arguments, 980, gdk_screen_get_width(screen), gdk_screen_get_height(screen), webkit_web_view_get_dpi(webView), IntSize(static_cast&lt;gint&gt;(rect.width()), static_cast&lt;gint&gt;(rect.height())));
&gt; +    PlatformRefPtr&lt;WebKitViewportAttributes&gt; viewportAttributes(adoptPlatformRef(webkit_viewport_attributes_new(attrs, arguments.userScalable)));
&gt; +
&gt; +    g_signal_emit_by_name(webView, &quot;viewport-attributes-changed&quot;, viewportAttributes.get()); 

I still don&apos;t understand your choice of only firing the signal after you have computed the values. Can you describe to me how you would use this API in a browser?

&gt; WebKit/gtk/webkit/webkitviewportattributes.h:58
&gt; +WEBKIT_API void 
&gt; +webkit_viewport_attributes_recompute                (WebKitWebView* webView); 

This should take a WebKitViewPort as the argument, not a web view.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:1394
&gt; -static gdouble webViewGetDPI(WebKitWebView* webView)
&gt; +gdouble webkit_web_view_get_dpi(WebKitWebView* webView)

I suggest keeping the name, using GTK+ style for non-API stuff is actually discouraged (despite it being everywhere =().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>306796</commentid>
    <comment_count>55</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-09 07:58:55 -0800</bug_when>
    <thetext>(In reply to comment #54)
&gt; (From update of attachment 73192 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=73192&amp;action=review
&gt; 
&gt; &gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:301
&gt; &gt; + */
&gt; &gt; +void webkit_viewport_attributes_recompute(WebKitWebView* webView)
&gt; &gt; +{
&gt; &gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; &gt; +
&gt; &gt; +    GdkScreen* screen = gtk_widget_get_screen(GTK_WIDGET(webView));
&gt; &gt; +    FloatRect rect = webView-&gt;priv-&gt;corePage-&gt;chrome()-&gt;pageRect();
&gt; &gt; +    ViewportArguments arguments = webView-&gt;priv-&gt;corePage-&gt;mainFrame()-&gt;document()-&gt;viewportArguments();
&gt; &gt; +    // The DesktopWidth has 980, because this value works well for most web pages designed for desktop user agents.
&gt; &gt; +    ViewportAttributes attrs = computeViewportAttributes(arguments, 980, gdk_screen_get_width(screen), gdk_screen_get_height(screen), webkit_web_view_get_dpi(webView), IntSize(static_cast&lt;gint&gt;(rect.width()), static_cast&lt;gint&gt;(rect.height())));
&gt; &gt; +    PlatformRefPtr&lt;WebKitViewportAttributes&gt; viewportAttributes(adoptPlatformRef(webkit_viewport_attributes_new(attrs, arguments.userScalable)));
&gt; &gt; +
&gt; &gt; +    g_signal_emit_by_name(webView, &quot;viewport-attributes-changed&quot;, viewportAttributes.get()); 
&gt; 
&gt; I still don&apos;t understand your choice of only firing the signal after you have computed the values. Can you describe to me how you would use this API in a browser?

The example is included in the source file.

* &lt;informalexample&gt;&lt;programlisting&gt;
 * /&lt;!-- --&gt;* Connect to the viewport-attributes-changes signal *&lt;!-- --&gt;/
 * g_signal_connect (webView, &quot;viewport-attributes-changed&quot;, G_CALLBACK (viewport_change_cb), webView);
 g_signal_connect (web_view, &quot;size-allocate&quot;, G_CALLBACK(window_size_change_cb), web_view);
 *
 * /&lt;!-- --&gt;* Handle the signal to get the initial scale value *&lt;!-- --&gt;/
 * static void
 * viewport_change_cb(WebKitWebView* webView, WebKitViewportAttributes* viewportAttributes)
 * {
 *     gfloat initialScale; 
 *     g_object_get(G_OBJECT(viewportAttributes), &quot;initial-scale-factor&quot;, &amp;initialScale, NULL);
 *     webkit_web_view_set_full_content_zoom(webView, TRUE);
 *     webkit_web_view_set_zoom_level(webView, initialScale);
 * }
 * &lt;/programlisting&gt;&lt;/informalexample&gt;
 */

When the size of the viewport changes, we need to recompute the viewport attribute as follows,

static int window_width = 0;
static void
window_size_change_cb(WebKitWebView* web_view, GtkAllocation* allocation, gpointer user_data)
{
    if (window_width != allocation-&gt;width)
      webkit_viewport_attributes_recompute(web_view);   
    window_width = allocation-&gt;width;
}

This example code makes the browser work like Safari on the iPhone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>307222</commentid>
    <comment_count>56</comment_count>
      <attachid>73466</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-10 00:45:27 -0800</bug_when>
    <thetext>Created attachment 73466
viewport patch with example code

I am trying to update the patch according to the following requirements.
- WebkitWebView doesn&apos;t contain a WebKitViewportAttributes instance.
- Try to minimize additional new pubic APIs.


In addition, I&apos;d like to let you know there are two ways to get a WebKitViewportAttributes instance in this patch.

1) get an a WebKitViewportAttributes instance through the viewport-attributes-changed signal when the web page has the viewport meta tags.
2) create a WebKitViewportAttributes instance directly when the viewport configuration(device size,dpi..) changes.

This patch includes an example code, so you could understand how the user agents use the viewport attributes to make web pages fit the device screen.

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308601</commentid>
    <comment_count>57</comment_count>
      <attachid>73751</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-11-12 09:34:59 -0800</bug_when>
    <thetext>Created attachment 73751
proposed API

ok, since I&apos;m having trouble explaining my proposed API, I decided to write it, so you can understand what I propose and point me to any issues you see with it, and we can move forward with this instead (I did not modify ChangeLogs or the sample code comments for now).

As you will see from the code, this is what happens:

* Page with viewport tag is loaded
* viewport-attributes-recompute-requested is emitted, giving the application the possibility of providing available size, and even override screen size if required
* viewport attributes computation is performed
* viewport attributes object is marked as valid
* viewport-attributes-available is emitted, which the application can use to apply any required change to the window, etc

When the window size changes this is what happens:

* application calls webkit_viewport_recompute
* all of the steps described above happens

Open questions:

* Qt uses a hardcoded DPI of 160, why is that?
* www.engadget.com seems to work fine, except it has scrolling 100% of the time, probably because our calculation will have to take the space occupied by the scrollbars into account =(
* most sites apparently do some crazy stuff, providing very big width and height values, and a very small scale factor - it looks like using full content zoom alone is not enough!
* full content zoom fails miserably at resizing text in http://touch.facebook.com/, which is not fun

So, do you guys see any trouble with this API? What use cases are not covered? What was better in the previous approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>308603</commentid>
    <comment_count>58</comment_count>
      <attachid>73753</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-11-12 09:37:04 -0800</bug_when>
    <thetext>Created attachment 73753
proposed API

Oops, this is the correct patch - I forgot to go back to using webViewGetDPI after testing using 160 hardcoded =P. The rest of the previous comment still applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309168</commentid>
    <comment_count>59</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-14 20:21:48 -0800</bug_when>
    <thetext>&gt; * viewport-attributes-recompute-requested is emitted, giving the application the possibility of providing available size, and even override screen size if required

It seems quite good that adding the viewport-attributes-recompute-requested signal allows the user to override the screenWidth/height and availableWidth/height.
However, according to the viewport meta-tag spec, the device-width/height keyword is used instead of the screen-width/height. So, I think that using the device-width/height would avoid confusion for the developers.

&gt; * Qt uses a hardcoded DPI of 160, why is that?
I&apos;m not sure, but Nokia device may use the value.

Is it wrong to call webViewGetDPI() to set the deviceDPI value basically? 

&gt; * www.engadget.com seems to work fine, except it has scrolling 100% of the time, probably because our calculation will have to take the space occupied by the scrollbars into account =(
&gt; * most sites apparently do some crazy stuff, providing very big width and height values, and a very small scale factor - it looks like using full content zoom alone is not enough!

Your patch related to GtkLauncher doesn&apos;t scale web pages if the web pages don&apos;t have viewport meta tags. So, do you mean that you tested the web sites, which have viewport meta tags?
In case of apple.com, it has viewport meta tags, and works well.

&gt; * full content zoom fails miserably at resizing text in http://touch.facebook.com/, which is not fun

Most mobile sites for the iPhone are not zoomed-in/out because user-scalable = 0 as follows,

&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot; /&gt; 

&gt; So, do you guys see any trouble with this API? What use cases are not covered? What was better in the previous approach?

We need to let the desktopWidth, deviceDPI also be overridden, because there would be some cases for the user to set these values manually.

Thanks kov, your patch improved my patch so much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309211</commentid>
    <comment_count>60</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-15 02:29:47 -0800</bug_when>
    <thetext>
&gt; * Qt uses a hardcoded DPI of 160, why is that?

It is the dpi of the original iPhone and Android devices, so that it what web authors has been designing for.

&gt; * most sites apparently do some crazy stuff, providing very big width and height values, and a very small scale factor - it looks like using full content zoom alone is not enough!

Are you using ; in  the  metatag instead of , ? I had that issue on facebook etc. Google Android used to support ; but they say that they have removed that support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309673</commentid>
    <comment_count>61</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-11-16 04:35:25 -0800</bug_when>
    <thetext>(In reply to comment #59)
&gt; &gt; * viewport-attributes-recompute-requested is emitted, giving the application the possibility of providing available size, and even override screen size if required
&gt; 
&gt; It seems quite good that adding the viewport-attributes-recompute-requested signal allows the user to override the screenWidth/height and availableWidth/height.
&gt; However, according to the viewport meta-tag spec, the device-width/height keyword is used instead of the screen-width/height. So, I think that using the device-width/height would avoid confusion for the developers.

Sounds good to me =).

&gt; 
&gt; &gt; * Qt uses a hardcoded DPI of 160, why is that?
&gt; I&apos;m not sure, but Nokia device may use the value.
&gt; 
&gt; Is it wrong to call webViewGetDPI() to set the deviceDPI value basically? 

I have no idea =(. I would follow Qt and change it later if required, in this case, I believe.

&gt; &gt; * www.engadget.com seems to work fine, except it has scrolling 100% of the time, probably because our calculation will have to take the space occupied by the scrollbars into account =(
&gt; &gt; * most sites apparently do some crazy stuff, providing very big width and height values, and a very small scale factor - it looks like using full content zoom alone is not enough!
&gt; 
&gt; Your patch related to GtkLauncher doesn&apos;t scale web pages if the web pages don&apos;t have viewport meta tags. So, do you mean that you tested the web sites, which have viewport meta tags?
&gt; In case of apple.com, it has viewport meta tags, and works well.

Yes, I only tested sites with viewport meta tags. This one, for instance:

http://www.iui-js.org/samples/prefs.html

It doesn&apos;t work as I expected it would.

&gt; &gt; * full content zoom fails miserably at resizing text in http://touch.facebook.com/, which is not fun
&gt; 
&gt; Most mobile sites for the iPhone are not zoomed-in/out because user-scalable = 0 as follows,
&gt; 
&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot; /&gt; 

Right, I see, so that means for touch.facebook.com we should not zoom?

&gt; &gt; So, do you guys see any trouble with this API? What use cases are not covered? What was better in the previous approach?
&gt; 
&gt; We need to let the desktopWidth, deviceDPI also be overridden, because there would be some cases for the user to set these values manually.

Sure! Just need to make them properties, and they can be overriden in viewport-attributes-recompute-requested =)
 
&gt; Thanks kov, your patch improved my patch so much.

\o/ hopefully we&apos;ll get this in soon now, feel free to make the changes you suggested (use device instead of screen for the name, and add desktopWidth/deviceDPI as properties), and I&apos;ll get it reviewed once more =D

(In reply to comment #60)
&gt; &gt; * Qt uses a hardcoded DPI of 160, why is that?
&gt; 
&gt; It is the dpi of the original iPhone and Android devices, so that it what web authors has been designing for.

I see. So perhaps we should go with it indeed.
 
&gt; &gt; * most sites apparently do some crazy stuff, providing very big width and height values, and a very small scale factor - it looks like using full content zoom alone is not enough!
&gt; 
&gt; Are you using ; in  the  metatag instead of , ? I had that issue on facebook etc. Google Android used to support ; but they say that they have removed that support.

This is the meta tag in the page I mentioned above:

&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot;/&gt;

So perhaps what is wrong is we should not use zoom at all because user-scalable is 0 (the viewport computation says we should scale to 0.25 for some reason!).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309730</commentid>
    <comment_count>62</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-11-16 08:17:07 -0800</bug_when>
    <thetext>
&gt; &gt; Are you using ; in  the  metatag instead of , ? I had that issue on facebook etc. Google Android used to support ; but they say that they have removed that support.
&gt; 
&gt; This is the meta tag in the page I mentioned above:
&gt; 
&gt; &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;&quot;/&gt;
&gt; 
&gt; So perhaps what is wrong is we should not use zoom at all because user-scalable is 0 (the viewport computation says we should scale to 0.25 for some reason!).

The parser will barf on this one and misinterpret it. There is a patch in bugzilla somewhere having a patch adding support for ;. You can try testing with that, or give your input on whether we need to support ; or not.

iPhone apparently also does not support ;, which is supported by most Android phones out there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309738</commentid>
    <comment_count>63</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-11-16 08:38:24 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=47607</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311533</commentid>
    <comment_count>64</comment_count>
      <attachid>74400</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-11-19 09:54:41 -0800</bug_when>
    <thetext>Created attachment 74400
Proposed patch11

I updated the patch to let the desktopWidth, deviceDPI also be overridden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317508</commentid>
    <comment_count>65</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-12-06 02:55:40 -0800</bug_when>
    <thetext>(In reply to comment #62)
&gt; The parser will barf on this one and misinterpret it. There is a patch in bugzilla somewhere having a patch adding support for ;. You can try testing with that, or give your input on whether we need to support ; or not.
&gt; 
&gt; iPhone apparently also does not support ;, which is supported by most Android phones out there.

This tag was in a &quot;iphone UI&quot; html/css/js library, so it&apos;s surprising it is using something that iphone would not handle =(. I have no strong opinion about whether we should support this, I guess that&apos;s up to the standards masters =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317512</commentid>
    <comment_count>66</comment_count>
      <attachid>74400</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-12-06 03:06:39 -0800</bug_when>
    <thetext>Comment on attachment 74400
Proposed patch11

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

I believe this is good to go, now. Let&apos;s just fix the Since tags, and see if we can test it using the signal instead of the new DRTSupport function.

&gt; WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:91
&gt; +// For testing fast/viewport.
&gt; +void DumpRenderTreeSupportGtk::computeViewportAttributesForSize(WebKitWebView* webView, gint availableWidth, gint availableHeight)
&gt; +{
&gt; +    g_return_if_fail(WEBKIT_IS_WEB_VIEW(webView));
&gt; +
&gt; +    ViewportArguments arguments = webView-&gt;priv-&gt;corePage-&gt;mainFrame()-&gt;document()-&gt;viewportArguments();
&gt; +    // desktopWidth = 980, deviceWidth = 320, deviceHeight = 480, deviceDPI = 160
&gt; +    ViewportAttributes attrs = computeViewportAttributes(arguments, 980, 320, 480, 160, IntSize(availableWidth, availableHeight));
&gt; +
&gt; +    fprintf(stdout, &quot;viewport size %dx%d scale %f with limits [%f, %f]\n&quot;, attrs.layoutSize.width(), attrs.layoutSize.height(), attrs.initialScale, attrs.minimumScale, attrs.maximumScale);
&gt; +}

With the API we have now, all of the values used in this call can be overriden by handling the signal, can&apos;t they? If that is the case, I think it would be much more interesting to use the signal for the test =)

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2913
&gt; +    * Since: 1.3.5

All of these should now be 1.3.8 =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317755</commentid>
    <comment_count>67</comment_count>
      <attachid>75718</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-12-06 11:45:37 -0800</bug_when>
    <thetext>Created attachment 75718
P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317775</commentid>
    <comment_count>68</comment_count>
      <attachid>75721</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-12-06 12:09:21 -0800</bug_when>
    <thetext>Created attachment 75721
Proposed Patch12

We can&apos;t use the new signals instead of the new DRTSupport function, because the signals are already emitted before we set the available width/height in each test case of the viewport meta tags, so I just updated new APIs version to 1.3.8. 

Finally, we need to get the API comments reviewed by Martin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317815</commentid>
    <comment_count>69</comment_count>
      <attachid>75721</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-12-06 13:20:15 -0800</bug_when>
    <thetext>Comment on attachment 75721
Proposed Patch12

I&apos;ll say r+, and wait for Martin or Xan to take a look at the API/English and mark cq+ if it&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318362</commentid>
    <comment_count>70</comment_count>
      <attachid>75721</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2010-12-07 11:47:00 -0800</bug_when>
    <thetext>Comment on attachment 75721
Proposed Patch12

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

&gt; WebKit/gtk/WebCoreSupport/DumpRenderTreeSupportGtk.cpp:382
&gt; +void DumpRenderTreeSupportGtk::computeViewportAttributesForSize(WebKitWebView* webView, gint availableWidth, gint availableHeight)

I think this should called dumpConfigurationViewport.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:216
&gt; +     * WebKitViewportAttributs:desktop-width:

Move the default below here and the comment into the documentation.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:239
&gt; +     * WebKitViewportAttributs:device-dpi:

Set the default here and also move the comments below into the documentation. Maybe clean up the line breaking a little.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:266
&gt; +     * The width of the viewport.
&gt; +     * Before getting this property, you need to make sure that 
&gt; +     * #WebKitViewportAttributes is valid.

Maybe clean up these line breaks a little.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:427
&gt; +static void webkit_viewport_attributes_get_property(GObject* object, guint prop_id, GValue* value, GParamSpec* pspec)

Expand the abbreviations in these variable names.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:481
&gt; +static void webkit_viewport_attributes_set_property(GObject* object, guint prop_id, const GValue* value, GParamSpec *pspec)

Same here and move the asterisk.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:527
&gt; +    // This value works well for most web pages designed for desktop browsers.
&gt; +    priv-&gt;desktopWidth = 980;
&gt; +    // It is the dpi of the original iPhone and Android devices.
&gt; +    priv-&gt;deviceDPI = 160;

Change these into default property variables.

&gt; WebKit/gtk/webkit/webkitviewportattributes.cpp:550
&gt; +    // Now let the application know it is safe to use the new
&gt; +    // values.

This can be one line.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:-176
&gt; -

I think you can remove this line deletion.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2737
&gt; +     * The #WebKitWebView::viewport-attributes-recompute-requested
&gt; +     * signal will be emitted whenever recomputing the values of the
&gt; +     * viewport attributes is required. That may happen because the
&gt; +     * viewport meta tag of a page has changed, or it may happen as a
&gt; +     * consequence of an explicit browser request (caused by screen
&gt; +     * rotation, resizing, or similar reasons).

The #WebKitWebView::viewport-attributes-recompute-requested signal will be emitted when a page with a viewport metatag loads and when webkit_recompute_viewport_attributes is called.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2753
&gt; +            NULL, NULL,

These should be 0&apos;s.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2766
&gt; +     * The #WebKitWebView::viewport-attributes-available will be emitted with @viewport_attributes
&gt; +     * when the viewport attributes are updated in the case of loading web pages contain
&gt; +     * the viewport properties and calling webkit_viewport_attributes_recompute.
&gt; +     * @viewport_attributes is used to control the viewport layout to make a web page fit the device screen.

The #WebKitWebView::viewport-attributes-(changed or updated or recomputed) signal will be emitted after the emission of #WebKitWebView::viewport-attributes-recompute-requested and the subsequent viewport attribute recomputation. At this point, if the WebKitViewportAttributes are valid, the viewport attributes are available.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:2774
&gt; +            NULL, NULL,

These should be 0&apos;s.

&gt; WebKit/gtk/webkit/webkitwebview.cpp:3612
&gt; + * #WebKitWebViewpor_Attributes object attached to it as soon as it is

#WebKitWebViewportAttributes

&gt; WebKitTools/DumpRenderTree/LayoutTestController.h:288
&gt; +    void configurationForViewport(int availableWidth, int availableHeight);

This should be called dumpConfigurationForViewport.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318726</commentid>
    <comment_count>71</comment_count>
      <attachid>75888</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-12-08 04:34:38 -0800</bug_when>
    <thetext>Created attachment 75888
Proposed Patch13

I updated this patch with the changes commented by Martin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>318854</commentid>
    <comment_count>72</comment_count>
      <attachid>75919</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-12-08 10:07:40 -0800</bug_when>
    <thetext>Created attachment 75919
Proposed Patch14</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319207</commentid>
    <comment_count>73</comment_count>
      <attachid>75919</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-08 19:13:57 -0800</bug_when>
    <thetext>Comment on attachment 75919
Proposed Patch14

Rejecting patch 75919 from commit-queue.

Failed to run &quot;[&apos;./WebKitTools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sl&apos;, &apos;apply-attachment&apos;, &apos;--force-clean&apos;, &apos;--non-interactive&apos;, 75919]&quot; exit_code: 2
Last 500 characters of output:
ntroller.cpp
patching file WebKitTools/DumpRenderTree/LayoutTestController.h
patching file WebKitTools/DumpRenderTree/gtk/LayoutTestControllerGtk.cpp
patching file WebKitTools/DumpRenderTree/mac/LayoutTestControllerMac.mm
patching file WebKitTools/DumpRenderTree/win/LayoutTestControllerWin.cpp
patching file WebKitTools/DumpRenderTree/wx/LayoutTestControllerWx.cpp

Failed to run &quot;[u&apos;/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Martin Robinson&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/6909001</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319387</commentid>
    <comment_count>74</comment_count>
      <attachid>76041</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2010-12-09 03:48:39 -0800</bug_when>
    <thetext>Created attachment 76041
Proposed Patch15

Submitted the patch again due to the above reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319443</commentid>
    <comment_count>75</comment_count>
      <attachid>76041</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-09 06:56:46 -0800</bug_when>
    <thetext>Comment on attachment 76041
Proposed Patch15

Clearing flags on attachment: 76041

Committed r73608: &lt;http://trac.webkit.org/changeset/73608&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>319444</commentid>
    <comment_count>76</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-09 06:56:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67011</attachid>
            <date>2010-09-09 02:23:29 -0700</date>
            <delta_ts>2010-09-27 08:26:23 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>gtk_viewport.diff</filename>
            <type>text/plain</type>
            <size>21022</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5NDBmZDQ0Li4yZjI5MGUx
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTAtMDktMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHZpZXdw
b3J0Lmggd2Via2l0dmlld3BvcnQuY3BwIAorCiAyMDEwLTA5LTA3ICBBcm5vIFJlbmV2aWVyICA8
YXJub0ByZW5ldmllci5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSG9sZ2VyIEZyZXl0aGVy
LgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCA3NDcx
MjVkLi4zMjc3NDBmIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmls
ZS5hbQpAQCAtMzA3LDYgKzMwNyw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQo
c3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNy
Y2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3Jj
ZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oIFwKKwkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnQuaCBcCiAJJChzcmNkaXIpL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCBcCkBAIC0zNjksNiArMzcwLDcgQEAgd2Via2l0
Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdw
b3J0LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNw
cCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGQ4MTYxNGQuLjIwYWIyOTEg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTAtMDktMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAu
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtH
VEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWxs
b3dzIHRvIHNldCB0aGUgd2lkdGgsIGhlaWdodCBhbmQgc2NhbGUgb2YgdGhlIHZpZXcgCisgICAg
ICAgIGFyZWEgdXNlZCB0byBkaXNwbGF5IHdlYiBjb250ZW50CisKKyAgICAgICAgKiBXZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGll
bnQ6OmRpZFJlY2VpdmVWaWV3cG9ydEFyZ3VtZW50cyk6IEFkZGVkIGZvciBlbWl0dGluZyB0aGUg
dmlld3BvcnQtY2hhbmFnZWQgc2lnbmFsIHdpdGggdGhlIHZpZXdwb3J0IG1ldGEgdGFnIGluZm9y
bWF0aW9uLgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OnNldEN1cnNvcik6CisgICAg
ICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAgICogV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudDo6RnJhbWVMb2FkZXJDbGllbnQpOgorICAgICAgICAoV2ViS2l0OjpGcmFt
ZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKTogRW1pdCB0aGUgdmlld3BvcnQt
Y2hhbmdlZCBzaWduYWwuCisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50OjpkaXNw
YXRjaERpZEZpcnN0TGF5b3V0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRl
ckNsaWVudEd0ay5oOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6c2V0SW5p
dExheW91dENvbXBsZXRlZCk6CisgICAgICAgIChXZWJLaXQ6OkZyYW1lTG9hZGVyQ2xpZW50Ojpn
ZXRJbml0TGF5b3V0Q29tcGxldGVkKToKKyAgICAgICAgVXBkYXRlIGluZm9ybWF0aW9uIGFib3V0
IHdoZXRoZXIgdGhlIHBhZ2UgaGFzIGJlZW4gbGFpZWQgb3V0IG9yIG5vdC4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3
cG9ydC5jcHA6IEFkZGVkIGZvciBwYXNzaW5nIHRoZSB2aWV3cG9ydCBtZXRhIHRhZyBpbmZvcm1h
dGlvbiB0aHJvdWdoIHRoZSBzaWduYWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY2xhc3Nf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfaW5pdCk6CisgICAgICAgICh3ZWJraXRf
dmlld3BvcnRfbmV3KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9nZXRfd2lkdGgpOgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2dldF9oZWlnaHQpOgorICAgICAgICAod2Via2l0X3ZpZXdw
b3J0X2dldF9pbml0aWFsX3NjYWxlKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9nZXRfbWlu
aW11bV9zY2FsZSk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfZ2V0X21heGltdW1fc2NhbGUp
OgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2dldF91c2VyX3NjYWxhYmxlKToKKyAgICAgICAg
KHdlYmtpdF92aWV3cG9ydF9nZXRfaXNfdmFsaWQpOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2
aWV3cG9ydC5oOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6Cisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisKIDIwMTAtMDktMDcgIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFhhbiBMb3Blei4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAppbmRleCA3ZTQwOTBiLi5mZDExYjBmIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiRmls
ZUNob29zZXIuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHdGsuaCIKICNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtNDAsMTAgKzQxLDEyIEBACiAjaW5jbHVkZSAiUG9wdXBNZW51R3RrLmgiCiAjaW5j
bHVkZSAiU2VhcmNoUG9wdXBNZW51R3RrLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
KyNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIndlYmtpdGdlb2xvY2F0
aW9ucG9saWN5ZGVjaXNpb24uaCIKICNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3LmgiCiAjaW5jbHVk
ZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisj
aW5jbHVkZSAid2Via2l0dmlld3BvcnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaWYgRU5BQkxFKERBVEFCQVNFKQpAQCAtNjAy
LDcgKzYwNSwyMCBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0
IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNob29zZXItPmljb25M
b2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCi12b2lkIENo
cm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit2b2lkIENocm9tZUNsaWVudDo6
ZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKEZyYW1lKiBmcmFtZSwgY29uc3QgVmlld3BvcnRB
cmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBGcmFtZUxvYWRlckNsaWVudCogY2xp
ZW50ID0gc3RhdGljX2Nhc3Q8RnJhbWVMb2FkZXJDbGllbnQqPihmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpKTsKKyAgICBpZiAoY2xpZW50LT5nZXRJbml0TGF5b3V0Q29tcGxldGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYkZyYW1lKiB3ZWJGcmFtZSA9IGtpdChmcmFtZSk7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IGdldFZpZXdGcm9tRnJhbWUod2ViRnJhbWUp
OworICAgIFdlYktpdFZpZXdwb3J0KiB2aWV3cG9ydCA9IHdlYmtpdF92aWV3cG9ydF9uZXcoYXJn
dW1lbnRzKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZpZXdwb3J0LWNo
YW5nZWQiLCB2aWV3cG9ydCk7IAorICAgIGdfb2JqZWN0X3VucmVmKHZpZXdwb3J0KTsKK30KKwor
dm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuaAppbmRleCAyMWM0Njc3Li5hOTFlNjc2IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTEwOSw2ICsxMDksOCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6
OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaWRSZWNlaXZlVmlld3BvcnRBcmd1bWVudHMoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJB
U0UpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6
RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCA0YjBkYTNkLi5lMDU1NmI2IDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3Rr
LmNwcApAQCAtNTcsNiArNTcsNyBAQAogI2luY2x1ZGUgIlByb2dyZXNzVHJhY2tlci5oIgogI2lu
Y2x1ZGUgIkpTRE9NQmluZGluZy5oIgogI2luY2x1ZGUgIlNjcmlwdENvbnRyb2xsZXIuaCIKKyNp
bmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIndlYmtpdGVycm9yLmgiCiAj
aW5jbHVkZSAid2Via2l0bmV0d29ya3JlcXVlc3QuaCIKICNpbmNsdWRlICJ3ZWJraXRuZXR3b3Jr
cmVzcG9uc2UuaCIKQEAgLTgzLDYgKzg0LDcgQEAgRnJhbWVMb2FkZXJDbGllbnQ6OkZyYW1lTG9h
ZGVyQ2xpZW50KFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKICAgICAsIG1fbG9hZGluZ0Vycm9yUGFn
ZShmYWxzZSkKICAgICAsIG1fcGx1Z2luVmlldygwKQogICAgICwgbV9oYXNTZW50UmVzcG9uc2VU
b1BsdWdpbihmYWxzZSkKKyAgICAsIG1faW5pdExheW91dENvbXBsZXRlZChmYWxzZSkKIHsKICAg
ICBBU1NFUlQobV9mcmFtZSk7CiB9CkBAIC03NzMsNiArNzc1LDggQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICBpZiAobV9sb2FkaW5nRXJyb3JQ
YWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICBtX2luaXRMYXlvdXRDb21wbGV0ZWQgPSBmYWxz
ZTsKKwogICAgIC8qIFVwZGF0ZSB0aGUgVVJJIG9uY2UgZmlyc3QgZGF0YSBoYXMgYmVlbiByZWNl
aXZlZC4KICAgICAgKiBUaGlzIG1lYW5zIHRoZSBVUkkgaXMgdmFsaWQgYW5kIHN1Y2Nlc3NmdWxs
eSBpZGVudGlmeSB0aGUgcGFnZSB0aGF0J3MgZ29pbmcgdG8gYmUgbG9hZGVkLgogICAgICAqLwpA
QCAtNzk5LDYgKzgwMywxNiBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50OjpkaXNwYXRjaERpZENv
bW1pdExvYWQoKQogICAgIH0KIAogICAgIGdfb2JqZWN0X3RoYXdfbm90aWZ5KEdfT0JKRUNUKG1f
ZnJhbWUpKTsKKworICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiB3ZWJ2aWV3UHJpdiA9IFdFQktJ
VF9XRUJfVklFV19HRVRfUFJJVkFURSh3ZWJWaWV3KTsKKyAgICAvLyBJbiBvcmRlciB0byByZXNl
dCB0aGUgdmlld3BvcnQsIAorICAgIC8vICJ2aWV3cG9ydC1jaGFuZ2VkIiBzaWduYWwgd2lsbCBi
ZSBlbWl0dGVkIHdoZW4gdGhlIG1haW4gZnJhbWUgaXMgbG9hZGVkLgorICAgIGlmICh3ZWJ2aWV3
UHJpdi0+bWFpbkZyYW1lID09IG1fZnJhbWUpIHsKKyAgICAgICAgIFZpZXdwb3J0QXJndW1lbnRz
IGFyZ3VtZW50czsgCisgICAgICAgICBXZWJLaXRWaWV3cG9ydCogdmlld3BvcnQgPSB3ZWJraXRf
dmlld3BvcnRfbmV3KGFyZ3VtZW50cyk7CisgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
d2ViVmlldywgInZpZXdwb3J0LWNoYW5nZWQiLCB2aWV3cG9ydCk7IAorICAgICAgICAgZ19vYmpl
Y3RfdW5yZWYodmlld3BvcnQpOworICAgIH0KIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudDo6
ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVudExvYWQoKQpAQCAtODEwLDYgKzgyNCw3IEBAIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgbV9pbml0TGF5b3V0Q29tcGxldGVkID0gdHJ1ZTsKIH0KIAogdm9p
ZCBGcmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXQoKQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNs
aWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5oCmluZGV4IDc1MzU3NmIuLjg5ZTk0YmEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmgKQEAgLTQ2LDYgKzQ2LDggQEAgbmFtZXNwYWNl
IFdlYktpdCB7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpOwog
CiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiAgd2ViRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX2Zy
YW1lOyB9CisgICAgICAgIHZvaWQgc2V0SW5pdExheW91dENvbXBsZXRlZChib29sIGNvbXBsZXRl
ZCkgeyBtX2luaXRMYXlvdXRDb21wbGV0ZWQgPSBjb21wbGV0ZWQ7IH0KKyAgICAgICAgYm9vbCBn
ZXRJbml0TGF5b3V0Q29tcGxldGVkKCkgeyByZXR1cm4gbV9pbml0TGF5b3V0Q29tcGxldGVkOyB9
CiAKICAgICAgICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdDsKIApAQCAtMTk0LDYg
KzE5Niw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogICAgICAgICAvLyBQbHVnaW4gdmlldyB0byBy
ZWRpcmVjdCBkYXRhIHRvCiAgICAgICAgIFdlYkNvcmU6OlBsdWdpblZpZXcqIG1fcGx1Z2luVmll
dzsKICAgICAgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOworICAgICAgICBib29s
IG1faW5pdExheW91dENvbXBsZXRlZDsKICAgICB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGZj
NzFjMmMuLmM5MmNhY2EgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisr
KyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxv
Zy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydC5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1l
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uOTM4YmFkYSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRl
ZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SGl0VGVzdFJl
c3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNp
b247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNz
IFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsKIAordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdFZpZXdwb3J0IFdlYktpdFZpZXdwb3J0OwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZXdwb3J0Q2xhc3MgV2ViS2l0Vmlld3BvcnRDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggYmRlNWI1NS4uNDM0MTcxMCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHZpZXdwb3J0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJmcmFtZS5oPgpAQCAtNjIsNiArNjMsNyBAQAogI2luY2x1ZGUgIlJlc291
cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VSZXNwb25zZS5oIgorI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVk
ZSAiV2luZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCkBAIC0zMTAsNiArMzEyLDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgV2Vi
S2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbioKICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9s
aWN5X2RlY2lzaW9uX25ldyhXZWJLaXRXZWJGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7
CiAKKyAgICBXZWJLaXRWaWV3cG9ydCoKKyAgICB3ZWJraXRfdmlld3BvcnRfbmV3KGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpOworCiAgICAgLy8gRklYTUU6IG1v
dmUgdGhpcyB0byB3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIG9uY2UgdGhlIEFQSSBpcyBhZ3JlZWQg
dXBvbi4KICAgICBXRUJLSVRfQVBJIFNvdXBNZXNzYWdlKgogICAgIHdlYmtpdF9uZXR3b3JrX3Jl
cXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnQuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0dmlld3BvcnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLmU3MzZiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2
aWV3cG9ydC5jcHAKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAg
Sm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IndlYmtpdHZpZXdwb3J0LmgiCisKKyNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5oIgorI2lu
Y2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworCisjaWZkZWYgRVJST1IKKyN1bmRlZiBFUlJPUgor
I2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9ydCwgd2Via2l0X3ZpZXdwb3J0LCBHX1RZ
UEVfT0JKRUNUKTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydFByaXZhdGUgeworICAgIGdpbnQg
d2lkdGg7CisgICAgZ2ludCBoZWlnaHQ7CisgICAgZ2Zsb2F0IGluaXRpYWxTY2FsZTsKKyAgICBn
ZmxvYXQgbWluaW11bVNjYWxlOworICAgIGdmbG9hdCBtYXhpbXVtU2NhbGU7CisgICAgZ2Jvb2xl
YW4gaXNVc2VyU2NhbGFibGU7CisgICAgZ2Jvb2xlYW4gaXNWYWxpZDsKK307CisKKyNkZWZpbmUg
V0VCS0lUX1ZJRVdQT1JUX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlQsIFdlYktpdFZpZXdwb3J0UHJpdmF0
ZSkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9jbGFzc19pbml0KFdlYktpdFZpZXdw
b3J0Q2xhc3MqIHZpZXdwb3J0Q2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRl
KHZpZXdwb3J0Q2xhc3MsIHNpemVvZihXZWJLaXRWaWV3cG9ydFByaXZhdGUpKTsKK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2luaXQoV2ViS2l0Vmlld3BvcnQqIHZpZXdwb3J0KQor
eworICAgIFdlYktpdFZpZXdwb3J0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9HRVRf
UFJJVkFURSh2aWV3cG9ydCk7CisgICAgdmlld3BvcnQtPnByaXYgPSBwcml2OworCisgICAgcHJp
di0+d2lkdGggPSAwOworICAgIHByaXYtPmhlaWdodCA9IDA7CisgICAgcHJpdi0+aW5pdGlhbFNj
YWxlID0gLTEuMDsKKyAgICBwcml2LT5taW5pbXVtU2NhbGUgPSAtMS4wOworICAgIHByaXYtPm1h
eGltdW1TY2FsZSA9IC0xLjA7CisgICAgcHJpdi0+aXNVc2VyU2NhbGFibGUgPSB0cnVlOworICAg
IHByaXYtPmlzVmFsaWQgPSBmYWxzZTsKK30KKworV2ViS2l0Vmlld3BvcnQqIHdlYmtpdF92aWV3
cG9ydF9uZXcoY29uc3QgVmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykKK3sKKyAgICBXZWJL
aXRWaWV3cG9ydCogdmlld3BvcnQ7IAorICAgIHZpZXdwb3J0ID0gV0VCS0lUX1ZJRVdQT1JUKGdf
b2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVCwgTlVMTCkpOworICAgIFdlYktpdFZpZXdw
b3J0UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9HRVRfUFJJVkFURSh2aWV3cG9ydCk7
CisgICAgcHJpdi0+d2lkdGggPSBhcmd1bWVudHMud2lkdGg7CisgICAgcHJpdi0+aGVpZ2h0ID0g
YXJndW1lbnRzLmhlaWdodDsKKyAgICBwcml2LT5pbml0aWFsU2NhbGUgPSBhcmd1bWVudHMuaW5p
dGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZSA9IGFyZ3VtZW50cy5taW5pbXVtU2Nh
bGU7CisgICAgcHJpdi0+bWF4aW11bVNjYWxlID0gYXJndW1lbnRzLm1heGltdW1TY2FsZTsKKyAg
ICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9IGFyZ3VtZW50cy51c2VyU2NhbGFibGU7CisKKyAgICBp
ZiAoYXJndW1lbnRzLndpZHRoID4gMCkgCisgICAgICAgIHByaXYtPmlzVmFsaWQgPSB0cnVlOwor
CisgICAgcmV0dXJuIHZpZXdwb3J0OworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9nZXRf
d2lkdGg6CisgKiBAdmlld3BvcnQ6IGEgI1dlYktpdFZpZXdwb3J0CisgKgorICogUmV0dXJucyB0
aGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
d2lkdGggb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBTaW5jZTogMS4zLjQKKyAq
LworZ2ludCB3ZWJraXRfdmlld3BvcnRfZ2V0X3dpZHRoKFdlYktpdFZpZXdwb3J0ICp2aWV3cG9y
dCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlQodmlld3Bv
cnQpLCBOVUxMKTsKKworICAgIFdlYktpdFZpZXdwb3J0UHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0
LT5wcml2OworCisgICAgcmV0dXJuIHByaXYtPndpZHRoOworfQorCisvKioKKyAqIHdlYmtpdF92
aWV3cG9ydF9nZXRfaGVpZ2h0OgorICogQHZpZXdwb3J0OiBhICNXZWJLaXRWaWV3cG9ydAorICoK
KyAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgaW4gcGl4ZWxzLgorICoKKyAq
IFJldHVybnM6IHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBT
aW5jZTogMS4zLjQKKyAqLworZ2ludCB3ZWJraXRfdmlld3BvcnRfZ2V0X2hlaWdodChXZWJLaXRW
aWV3cG9ydCAqdmlld3BvcnQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1ZJRVdQT1JUKHZpZXdwb3J0KSwgTlVMTCk7CisKKyAgICBXZWJLaXRWaWV3cG9ydFByaXZhdGUq
IHByaXYgPSB2aWV3cG9ydC0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT53aWR0aDsKK30KKwor
LyoqCisgKiB3ZWJraXRfdmlld3BvcnRfZ2V0X2luaXRpYWxfc2NhbGU6CisgKiBAdmlld3BvcnQ6
IGEgI1dlYktpdFZpZXdwb3J0CisgKgorICogUmV0dXJucyB0aGUgaW5pdGlhbCBzY2FsZSBvZiB0
aGUgdmlld3BvcnQuCisgKgorICogUmV0dXJuczogdGhlIGluaXRpYWwgc2NhbGUgb2YgdGhlIHZp
ZXdwb3J0CisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRf
Z2V0X2luaXRpYWxfc2NhbGUoV2ViS2l0Vmlld3BvcnQgKnZpZXdwb3J0KQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVCh2aWV3cG9ydCksIE5VTEwpOworCisg
ICAgV2ViS2l0Vmlld3BvcnRQcml2YXRlKiBwcml2ID0gdmlld3BvcnQtPnByaXY7CisKKyAgICBy
ZXR1cm4gcHJpdi0+aW5pdGlhbFNjYWxlOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9n
ZXRfbWluaW11bV9zY2FsZToKKyAqIEB2aWV3cG9ydDogYSAjV2ViS2l0Vmlld3BvcnQKKyAqCisg
KiBSZXR1cm5zIHRoZSBtaW5pbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydC4KKyAqCisg
KiBSZXR1cm5zOiB0aGUgbWluaW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQKKyAqCisg
KiBTaW5jZTogMS4zLjQKKyAqLworZ2Zsb2F0IHdlYmtpdF92aWV3cG9ydF9nZXRfbWluaW11bV9z
Y2FsZShXZWJLaXRWaWV3cG9ydCAqdmlld3BvcnQpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1ZJRVdQT1JUKHZpZXdwb3J0KSwgTlVMTCk7CisKKyAgICBXZWJLaXRWaWV3
cG9ydFByaXZhdGUqIHByaXYgPSB2aWV3cG9ydC0+cHJpdjsKKworICAgIHJldHVybiBwcml2LT5t
aW5pbXVtU2NhbGU7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2dldF9tYXhpbXVtX3Nj
YWxlOgorICogQHZpZXdwb3J0OiBhICNXZWJLaXRWaWV3cG9ydAorICoKKyAqIFJldHVybnMgdGhl
IG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0LgorICoKKyAqIFJldHVybnM6IHRo
ZSBtYXhpbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydAorICoKKyAqIFNpbmNlOiAxLjMu
NAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2dldF9tYXhpbXVtX3NjYWxlKFdlYktpdFZp
ZXdwb3J0ICp2aWV3cG9ydCkKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
VklFV1BPUlQodmlld3BvcnQpLCBOVUxMKTsKKworICAgIFdlYktpdFZpZXdwb3J0UHJpdmF0ZSog
cHJpdiA9IHZpZXdwb3J0LT5wcml2OworCisgICAgcmV0dXJuIHByaXYtPm1heGltdW1TY2FsZTsK
K30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfZ2V0X3VzZXJfc2NhbGFibGU6CisgKiBAdmll
d3BvcnQ6IGEgI1dlYktpdFZpZXdwb3J0CisgKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5v
dCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhp
bXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydAorICoKKyAqIFNpbmNlOiAxLjMuNAorICov
CitnYm9vbGVhbiB3ZWJraXRfdmlld3BvcnRfZ2V0X3VzZXJfc2NhbGFibGUoV2ViS2l0Vmlld3Bv
cnQgKnZpZXdwb3J0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVX
UE9SVCh2aWV3cG9ydCksIE5VTEwpOworCisgICAgV2ViS2l0Vmlld3BvcnRQcml2YXRlKiBwcml2
ID0gdmlld3BvcnQtPnByaXY7CisKKyAgICByZXR1cm4gcHJpdi0+aXNVc2VyU2NhbGFibGU7Cit9
CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2dldF9pc192YWxpZDoKKyAqIEB2aWV3cG9ydDog
YSAjV2ViS2l0Vmlld3BvcnQKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgYSBXZWJLaXRWaWV3cG9y
dCBpcyB2YWxpZC4KKyAqCisgKiBSZXR1cm5zOiBUcnVlIGlmIGEgV2ViS2l0Vmlld3BvcnQgaXMg
dmFsaWQKKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3ZpZXdwb3J0
X2dldF9pc192YWxpZChXZWJLaXRWaWV3cG9ydCAqdmlld3BvcnQpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUKHZpZXdwb3J0KSwgTlVMTCk7CisKKyAgICBX
ZWJLaXRWaWV3cG9ydFByaXZhdGUqIHByaXYgPSB2aWV3cG9ydC0+cHJpdjsKKworICAgIHJldHVy
biBwcml2LT5pc1ZhbGlkOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
dmlld3BvcnQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3NGI0MgotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0LmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdl
YmtpdHZpZXdwb3J0X2gKKyNkZWZpbmUgd2Via2l0dmlld3BvcnRfaAorCisjaW5jbHVkZSA8Z2xp
Yi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lO
X0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlQgICAgICAgICAgICAod2Via2l0
X3ZpZXdwb3J0X2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVChvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVX
UE9SVCwgV2ViS2l0Vmlld3BvcnQpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ0xBU1Moa2xh
c3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklF
V1BPUlQsIFdlYktpdFZpZXdwb3J0Q2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlQo
b2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZ
UEVfVklFV1BPUlQpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQ0xBU1Moa2xhc3MpIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlQpKQor
I2RlZmluZSBXRUJLSVRfVklFV1BPUlRfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlQsIFdlYktpdFZpZXdwb3J0Q2xh
c3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRQcml2YXRlIFdlYktpdFZpZXdw
b3J0UHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydCB7CisgICAgR09iamVjdCBwYXJl
bnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydFBy
aXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhw
YW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfZ2V0X3R5cGUgICAgICAgICAgKHZv
aWQpOworCitXRUJLSVRfQVBJIGdpbnQKK3dlYmtpdF92aWV3cG9ydF9nZXRfd2lkdGggICAgICAg
ICAoV2ViS2l0Vmlld3BvcnQqIHZpZXdwb3J0KTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRf
dmlld3BvcnRfZ2V0X2hlaWdodCAgICAgICAgKFdlYktpdFZpZXdwb3J0KiB2aWV3cG9ydCk7CisK
K1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfZ2V0X2luaXRpYWxfc2NhbGUgKFdl
YktpdFZpZXdwb3J0KiB2aWV3cG9ydCk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmll
d3BvcnRfZ2V0X21pbmltdW1fc2NhbGUgKFdlYktpdFZpZXdwb3J0KiB2aWV3cG9ydCk7CisKK1dF
QktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfZ2V0X21heGltdW1fc2NhbGUgKFdlYktp
dFZpZXdwb3J0KiB2aWV3cG9ydCk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4KK3dlYmtpdF92aWV3
cG9ydF9nZXRfdXNlcl9zY2FsYWJsZSAoV2ViS2l0Vmlld3BvcnQqIHZpZXdwb3J0KTsKKworV0VC
S0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3ZpZXdwb3J0X2dldF9pc192YWxpZCAgICAgIChXZWJL
aXRWaWV3cG9ydCogdmlld3BvcnQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggOThmOGU0ZS4uMGI2MGQ0NyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTE3Myw2ICsxNzMsNyBAQCBlbnVtIHsKICAgICBHRU9M
T0NBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0FOQ0VMTEVELAogICAgIE9OTE9BRF9FVkVOVCwKICAg
ICBGUkFNRV9DUkVBVEVELAorICAgIFZJRVdQT1JUX0NIQU5HRUQsCiAgICAgTEFTVF9TSUdOQUwK
IH07CiAKQEAgLTI0ODAsNiArMjQ4MSwyOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
Y2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAg
IFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKICAgICAvKgorICAgICAqIFdlYktpdFdlYlZpZXc6
OnZpZXdwb3J0LWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVj
ZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB3ZWJfdmlld3BvcnQ6IHRoZSAjV2ViS2l0Vmlld3Bv
cnQgd2hpY2ggaGFzIHZpZXdwb3J0IG1ldGEgdGFncy4KKyAgICAgKgorICAgICAqIFRoZSAjV2Vi
S2l0V2ViVmlldzo6dmlld3BvcnQtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhIHdlYiBw
YWdlIAorICAgICAqIGhhcyB2aWV3cG9ydCBtZXQgdGFncy4gQWxzbywgaXQgd2lsbCBiZSBlbWl0
dGVkIHdoZW4gdGhlIG1haW4gZnJhbWUgCisgICAgICogaXMgbG9hZGVkIGZvciBpbml0aWFsaXpp
bmcgdGhlIHZpZXdwb3J0LgorICAgICAqIFRoZSB2aWV3cG9ydCB0YWcgYWxsb3dzIHRvIHNldCB0
aGUgd2lkdGgsIGhlaWdodCBhbmQgc2NhbGUgb2YgdGhlIHZpZXcgCisgICAgICogYXJlYSB1c2Vk
IHRvIGRpc3BsYXkgd2ViIGNvbnRlbnQKKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNAorICAg
ICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0NIQU5HRURdID0gZ19z
aWduYWxfbmV3KCJ2aWV3cG9ydC1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NM
QVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9S
VU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAg
TlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1Qs
CisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJ
RVdQT1JUKTsKKyAgICAgICAgICAgIAorCisgICAgLyoKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMg
b2YgdmlydHVhbCBtZXRob2RzCiAgICAgICovCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGVfd2Vi
X3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7Cg==
</data>
<flag name="review"
          id="56186"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>67362</attachid>
            <date>2010-09-12 23:52:04 -0700</date>
            <delta_ts>2010-09-27 08:26:23 -0700</delta_ts>
            <desc>updated GtkLauncher for testing</desc>
            <filename>testcase_viewport.diff</filename>
            <type>text/plain</type>
            <size>1554</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYyBiL1dlYktpdFRvb2xz
L0d0a0xhdW5jaGVyL21haW4uYwppbmRleCAxN2VkNDBmLi5jNjhiZGY0IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKKysrIGIvV2ViS2l0VG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jCkBAIC05Miw2ICs5MiwyMiBAQCBub3RpZnlfcHJvZ3Jlc3NfY2IgKFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3LCBHUGFyYW1TcGVjKiBwc3BlYywgZ3BvaW50ZXIgZGF0YSkKIH0KIAog
c3RhdGljIHZvaWQKK3ZpZXdwb3J0X2NoYW5nZV9jYihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywg
V2ViS2l0Vmlld3BvcnQqIHZpZXdwb3J0KQoreworICAgIGdpbnQgd2lkdGggPSB3ZWJraXRfdmll
d3BvcnRfZ2V0X3dpZHRoKHZpZXdwb3J0KTsKKyAgICBnaW50IGhlaWdodCA9IHdlYmtpdF92aWV3
cG9ydF9nZXRfaGVpZ2h0KHZpZXdwb3J0KTsKKyAgICBnZmxvYXQgaW5pdF9zY2FsZSA9ICB3ZWJr
aXRfdmlld3BvcnRfZ2V0X2luaXRpYWxfc2NhbGUodmlld3BvcnQpOworICAgIGdmbG9hdCBtaW5f
c2NhbGUgPSAgd2Via2l0X3ZpZXdwb3J0X2dldF9taW5pbXVtX3NjYWxlKHZpZXdwb3J0KTsKKyAg
ICBnZmxvYXQgbWF4X3NjYWxlID0gIHdlYmtpdF92aWV3cG9ydF9nZXRfbWF4aW11bV9zY2FsZSh2
aWV3cG9ydCk7CisgICAgZ2Jvb2xlYW4gdXNlcl9zY2FsYWJsZSA9ICB3ZWJraXRfdmlld3BvcnRf
Z2V0X3VzZXJfc2NhbGFibGUodmlld3BvcnQpOworICAgIGdib29sZWFuIGlzX3ZhbGlkID0gIHdl
YmtpdF92aWV3cG9ydF9nZXRfaXNfdmFsaWQodmlld3BvcnQpOworIAorICAgIAorICAgIHByaW50
ZigidyxoLGluaXQsbWluLG1heCxzY2FsZWFibGUsIGlzX3ZhbGlkICglZCwlZCwlZiwlZiwlZiwl
ZCwlZClcbiIsIHdpZHRoLCBoZWlnaHQsIGluaXRfc2NhbGUsIG1pbl9zY2FsZSwgbWF4X3NjYWxl
LCB1c2VyX3NjYWxhYmxlLCBpc192YWxpZCk7IAorCit9CisKK3N0YXRpYyB2b2lkCiBkZXN0cm95
X2NiIChHdGtXaWRnZXQqIHdpZGdldCwgZ3BvaW50ZXIgZGF0YSkKIHsKICAgICBndGtfbWFpbl9x
dWl0ICgpOwpAQCAtMTIyLDYgKzEzOCw3IEBAIGNyZWF0ZV9icm93c2VyICgpCiAgICAgZ19zaWdu
YWxfY29ubmVjdCAod2ViX3ZpZXcsICJub3RpZnk6OmxvYWQtc3RhdHVzIiwgR19DQUxMQkFDSyAo
bm90aWZ5X2xvYWRfc3RhdHVzX2NiKSwgd2ViX3ZpZXcpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3Qg
KHdlYl92aWV3LCAibm90aWZ5Ojpwcm9ncmVzcyIsIEdfQ0FMTEJBQ0sgKG5vdGlmeV9wcm9ncmVz
c19jYiksIHdlYl92aWV3KTsKICAgICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgImhvdmVy
aW5nLW92ZXItbGluayIsIEdfQ0FMTEJBQ0sgKGxpbmtfaG92ZXJfY2IpLCB3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJ2aWV3cG9ydC1jaGFuZ2VkIiwgR19DQUxM
QkFDSyAodmlld3BvcnRfY2hhbmdlX2NiKSwgd2ViX3ZpZXcpOwogCiAgICAgcmV0dXJuIHNjcm9s
bGVkX3dpbmRvdzsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>68913</attachid>
            <date>2010-09-27 08:26:23 -0700</date>
            <delta_ts>2010-09-29 08:12:04 -0700</delta_ts>
            <desc>Proposed Patch2</desc>
            <filename>viewport2.diff</filename>
            <type>text/plain</type>
            <size>34709</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0NzFmMTk2Li4wNjFmMDdm
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAK
KzIwMTAtMDktMjcgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHZpZXdw
b3J0Y29uZmlnLmggd2Via2l0dmlld3BvcnRjb25maWcuY3BwIAorCiAyMDEwLTA5LTI0ICBSb21h
aW4gUG9rcnp5d2thICA8cm9tYWluQGtkYWIuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5h
bQppbmRleCBjNzY5ZGIyLi5kYmY5MTY2IDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5hbQorKysg
Yi9HTlVtYWtlZmlsZS5hbQpAQCAtMzEwLDYgKzMxMCw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9h
cGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVz
dC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNl
LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5o
IFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaCBc
CiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5o
IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwK
IAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuaCBcCkBAIC0zNzIs
NiArMzczLDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cu
YyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YXNvdXJjZS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBc
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggM2Y4ZTk4My4uMWZjZjdhNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA5
LTI3ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRh
IHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0
NDMKKworICAgICAgICBJbmNsdWRlZCB2aWV3cG9ydCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsK
KworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBl
eGNlcHQgdmlld3BvcnQtNDUuaHRtbAorCiAyMDEwLTA5LTI3ICBQaGlsaXBwZSBOb3JtYW5kICA8
cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCB1bnNraXAgZml4ZWQg
dGVzdC4gU2VlIGFsc28gcjY4MTI2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGY0ZTJk
NzUuLmVjZGZiMmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01OTE4LDcgKzU5MTgs
NyBAQCBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdGguaXNQb2ludEluUGF0aC5lZGdlLmh0bWwK
IHdlYnNvY2tldC90ZXN0cwogCiAjIHZpZXdwb3J0IG1ldGEgdGFnIHN1cHBvcnQKLWZhc3Qvdmll
d3BvcnQKK2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJz
ZXIgcXVpcmtzIG9ubHkgYXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNl
ci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0No
YW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IGUwYzMyYjguLmRiZmRhMjAgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDUgQEAKKzIwMTAtMDktMjcgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dz
IHRvIHNldCB0aGUgd2lkdGgsIGhlaWdodCBhbmQgc2NhbGUgdmFsdWVzIG9mIHRoZSB2aWV3IAor
ICAgICAgICBhcmVhIHVzZWQgdG8gZGlzcGxheSB3ZWIgY29udGVudCB0aHJvdWdoIHRoZSB2aWV3
cG9ydCBjb25maWd1cmF0aW9uLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaWRSZWNlaXZlVmll
d3BvcnRBcmd1bWVudHMpOiBBZGRlZCBmb3IgZW1pdHRpbmcgdGhlIHZpZXdwb3J0LWNvbmZpZy1j
aGFuZ2VkIHNpZ25hbCB3aXRoIHRoZSB2aWV3cG9ydCBjb25maWd1cmF0aW9uLgorICAgICAgICAo
V2ViS2l0OjpDaHJvbWVDbGllbnQ6OnNldEN1cnNvcik6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2Fk
ZXJDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpGcmFtZUxvYWRlckNsaWVudDo6ZGlz
cGF0Y2hEaWRDb21taXRMb2FkKTogRW1pdCB0aGUgdmlld3BvcnQtY29uZmlnLWNoYW5nZWQgc2ln
bmFsLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICog
d2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcDogQWRkZWQgZm9yIGhhbmRsaW5nIHRoZSAg
dmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdf
Y2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2luaXQpOgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19uZXcpOgorICAgICAgICAod2Via2l0X3ZpZXdw
b3J0X2NvbmZpZ19nZXRfd2lkdGgpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19n
ZXRfaGVpZ2h0KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2luaXRpYWxf
c2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21pbmlt
dW1fc2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21h
eGltdW1fc2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0
X2RldmljZV9waXhlbF9yYXRpbyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dl
dF9pc191c2VyX3NjYWxhYmxlKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0
X2lzX3ZhbGlkKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZmluZF9jb25maWd1
cmF0aW9uKTogQ2FsY3VsYXRlIHRoZSB2aWV3cG9ydCBjb25maWd1cmF0aW9uIHdpdGggdGhlIHZp
ZXdwb3J0IHByb3BlcnRpZXMgYW5kIHRoZSBzY3JlZW4gcHJvcGVydGllcy4KKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9jb25maWdfZmluZF9jb25maWd1cmF0aW9uX2ludGVybmFsKToKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaDogQWRkZWQuCisgICAgICAgICogd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Rpc3Bvc2Up
OgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NldF92aWV3cG9ydF9j
b25maWcpOiBSZXBsYWNlcyB0aGUgV2ViS2l0Vmlld3BvcnRDb25maWcgaW5zdGFuY2UgdGhhdCBp
cyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAgICh3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyk6IE9idGFpbnMgdGhlIFdlYktpdFZpZXdw
b3J0Q29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGUgV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0d2Vidmlldy5oOgorCiAyMDEwLTA5LTI2ICBKZW5uIEJyYWl0aHdhaXRlICA8
amVubmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggN2U0
MDkwYi4uNjZkYTU0MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAi
Q29uc29sZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGaWxlQ2hvb3Nl
ci5oIgpAQCAtNjAyLDcgKzYwMywxOCBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZv
ckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNo
b29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwog
fQogCi12b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit2b2lkIENo
cm9tZUNsaWVudDo6ZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKEZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShraXQoZnJhbWUpKTsKKyAg
ICBXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcgPSB3ZWJraXRfd2ViX3ZpZXdf
Z2V0X3ZpZXdwb3J0X2NvbmZpZyh3ZWJ2aWV3KTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVj
dCA9IGNvcmUod2VidmlldyktPmNocm9tZSgpLT5wYWdlUmVjdCgpOworCisgICAgd2Via2l0X3Zp
ZXdwb3J0X2NvbmZpZ19maW5kX2NvbmZpZ3VyYXRpb25faW50ZXJuYWwodmlld3BvcnRDb25maWcs
IGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZShzdGF0aWNfY2FzdDxnaW50PihyZWN0LndpZHRo
KCkpLCBzdGF0aWNfY2FzdDxnaW50PihyZWN0LmhlaWdodCgpKSkpOworCisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKHdlYnZpZXcsICJ2aWV3cG9ydC1jb25maWctY2hhbmdlZCIsIHZpZXdwb3J0
Q29uZmlnKTsgCit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgV2ViQ29y
ZTo6Q3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggMjFjNDY3Ny4uYTkxZTY3NiAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xMDksNiAr
MTA5LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRv
b2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKFdlYkNvcmU6OkZy
YW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykg
Y29uc3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lKik7CiAj
aWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFz
ZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggNTI4
MTM1MS4uMjk0YzM3YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTkwNSw2ICs5MDUsMTQgQEAgdm9pZCBGcmFtZUxvYWRl
ckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICAgICAgZ19vYmplY3Rfbm90aWZ5
KEdfT0JKRUNUKHdlYlZpZXcpLCAidGl0bGUiKTsKICAgICAgICAgZ19vYmplY3RfdGhhd19ub3Rp
ZnkoR19PQkpFQ1Qod2ViVmlldykpOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2Vi
VmlldywgImxvYWQtY29tbWl0dGVkIiwgbV9mcmFtZSk7CisKKyAgICAgICAgLyogSW4gb3JkZXIg
dG8gcmVzZXQgdGhlIHZpZXdwb3J0LCAKKyAgICAgICAgICogVGhlICJ2aWV3cG9ydC1jb25maWct
Y2hhbmdlZCIgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZyYW1lIGlzIGxv
YWRlZC4KKyAgICAgICAgICovCisgICAgICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIGFy
Z3VtZW50czsKKyAgICAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYnZpZXdQcml2ID0gV0VC
S0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgICAgICB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2ZpbmRfY29uZmlndXJhdGlvbl9pbnRlcm5hbCh3ZWJ2aWV3UHJpdi0+dmlld3Bv
cnRDb25maWcuZ2V0KCksIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSgwLCAwKSk7CisgICAg
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3BvcnQtY29uZmlnLWNoYW5n
ZWQiLCB3ZWJ2aWV3UHJpdi0+dmlld3BvcnRDb25maWcuZ2V0KCkpOyAKICAgICB9CiAKICAgICBn
X29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChtX2ZyYW1lKSk7CmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4
IGZjNzFjMmMuLjY2MzM0OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRp
YWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGNvbmZpZy5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uOWI4NGNlMyAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xvY2F0aW9uUG9s
aWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNp
c2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsKIAordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q29uZmlnIFdlYktpdFZpZXdwb3J0Q29uZmlnOwordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q29uZmlnQ2xhc3MgV2ViS2l0Vmlld3BvcnRDb25m
aWdDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmgKaW5kZXggNjE2ZWU2Yi4uZjE1Njc4MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0Y29u
ZmlnLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFt
ZS5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgor
I2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMu
aCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBA
IC0xNDAsNiArMTQyLDcgQEAgZXh0ZXJuICJDIiB7CiAKICAgICAgICAgV2ViS2l0V2ViRnJhbWUq
IG1haW5GcmFtZTsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViQmFja0ZvcndhcmRM
aXN0PiBiYWNrRm9yd2FyZExpc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFZpZXdw
b3J0Q29uZmlnPiB2aWV3cG9ydENvbmZpZzsKIAogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHdGtN
ZW51PiBjdXJyZW50TWVudTsKICAgICAgICAgZ2ludCBsYXN0UG9wdXBYUG9zaXRpb247CkBAIC0z
MTYsNiArMzE5LDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lE
ZWNpc2lvbioKICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lzaW9uX25ldyhXZWJL
aXRXZWJGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAKKyAgICB2b2lkIAorICAgIHdl
YmtpdF92aWV3cG9ydF9jb25maWdfZmluZF9jb25maWd1cmF0aW9uX2ludGVybmFsKFdlYktpdFZp
ZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSBhdmFpbGFibGVTaXplKTsKKwogICAg
IC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gd2Via2l0bmV0d29ya3JlcXVlc3QuaCBvbmNlIHRoZSBB
UEkgaXMgYWdyZWVkIHVwb24uCiAgICAgV0VCS0lUX0FQSSBTb3VwTWVzc2FnZSoKICAgICB3ZWJr
aXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktpdE5ldHdvcmtSZXF1ZXN0KiByZXF1
ZXN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmln
LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODdlMzhjCi0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuY3BwCkBAIC0wLDAgKzEsMjYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR2aWV3cG9ydGNvbmZpZy5oIgor
CisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCitHX0RFRklORV9UWVBFKFdlYktpdFZpZXdw
b3J0Q29uZmlnLCB3ZWJraXRfdmlld3BvcnRfY29uZmlnLCBHX1RZUEVfT0JKRUNUKTsKKworc3Ry
dWN0IF9XZWJLaXRWaWV3cG9ydENvbmZpZ1ByaXZhdGUgeworICAgIGdpbnQgd2lkdGg7CisgICAg
Z2ludCBoZWlnaHQ7CisgICAgZ2Zsb2F0IHRhcmdldERlbnNpdHlEUEk7CisgICAgZ2Zsb2F0IGlu
aXRpYWxTY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWluaW11bVNjYWxlRmFjdG9yOworICAgIGdm
bG9hdCBtYXhpbXVtU2NhbGVGYWN0b3I7CisgICAgZ2Jvb2xlYW4gaXNVc2VyU2NhbGFibGU7Cisg
ICAgZ2Jvb2xlYW4gaXNWYWxpZDsKKyAgICBnaW50IGRldmljZURQSTsKKyAgICBnaW50IGRldmlj
ZVdpZHRoOworICAgIGdpbnQgZGV2aWNlSGVpZ2h0OworICAgIGdpbnQgZGVza3RvcFdpZHRoOwor
fTsKKworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHX0dFVF9QUklWQVRFKG9iaikgICAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRf
Q09ORklHLCBXZWJLaXRWaWV3cG9ydENvbmZpZ1ByaXZhdGUpKQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRfdmlld3BvcnRfY29uZmlnX2NsYXNzX2luaXQoV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcyog
dmlld3BvcnRDb25maWdDbGFzcykKK3sKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUodmll
d3BvcnRDb25maWdDbGFzcywgc2l6ZW9mKFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2luaXQoV2ViS2l0Vmlld3Bv
cnRDb25maWcqIHZpZXdwb3J0KQoreworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSog
cHJpdiA9IFdFQktJVF9WSUVXUE9SVF9DT05GSUdfR0VUX1BSSVZBVEUodmlld3BvcnQpOworICAg
IHZpZXdwb3J0LT5wcml2ID0gcHJpdjsKKworICAgIHByaXYtPndpZHRoID0gMDsKKyAgICBwcml2
LT5oZWlnaHQgPSAwOworICAgIHByaXYtPnRhcmdldERlbnNpdHlEUEkgPSAwLjA7CisgICAgcHJp
di0+aW5pdGlhbFNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0
b3IgPSAtMS4wOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJp
di0+aXNVc2VyU2NhbGFibGUgPSB0cnVlOworICAgIHByaXYtPmlzVmFsaWQgPSBmYWxzZTsKK30K
KworV2ViS2l0Vmlld3BvcnRDb25maWcqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfbmV3KGdpbnQg
ZGVza3RvcFdpZHRoLCBnaW50IGRldmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBk
ZXZpY2VEUEkpCit7CisgICAgV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0Q29uZmlnID0g
V0VCS0lUX1ZJRVdQT1JUX0NPTkZJRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklFV1BPUlRf
Q09ORklHLCBOVUxMKSk7CisgICAgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJVkFURSh2aWV3cG9ydENvbmZpZyk7CisKKyAg
ICBwcml2LT5kZXNrdG9wV2lkdGggPSBkZXNrdG9wV2lkdGg7CisgICAgcHJpdi0+ZGV2aWNlV2lk
dGggPSBkZXZpY2VXaWR0aDsKKyAgICBwcml2LT5kZXZpY2VIZWlnaHQgPSBkZXZpY2VIZWlnaHQ7
CisgICAgcHJpdi0+ZGV2aWNlRFBJID0gZGV2aWNlRFBJOworICAgIHByaXYtPmlzVmFsaWQgPSBm
YWxzZTsKKworICAgIHJldHVybiB2aWV3cG9ydENvbmZpZzsKK30KKworLyoqCisgKiB3ZWJraXRf
dmlld3BvcnRfY29uZmlnX2dldF93aWR0aDoKKyAqIEB2aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0
Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQg
aW4gcGl4ZWxzLgorICoKKyAqIFJldHVybnM6IHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgaW4g
cGl4ZWxzLgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnaW50IHdlYmtpdF92aWV3cG9ydF9j
b25maWdfZ2V0X3dpZHRoKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZykKK3sK
KyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdw
b3J0Q29uZmlnKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRDb25maWctPnByaXYtPndpZHRo
OworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2hlaWdodDoKKyAqIEB2
aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5zIHRo
ZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
aGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBpbiBwaXhlbHMuCisgKgorICogU2luY2U6IDEuMy40Cisg
Ki8KK2dpbnQgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaGVpZ2h0KFdlYktpdFZpZXdwb3J0
Q29uZmlnKiB2aWV3cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJL
SVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwgMCk7CisKKyAgICByZXR1cm4g
dmlld3BvcnRDb25maWctPnByaXYtPmhlaWdodDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlOgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJL
aXRWaWV3cG9ydENvbmZpZworICoKKyAqIFJldHVybnMgdGhlIGluaXRpYWwgc2NhbGUgb2YgdGhl
IHZpZXdwb3J0LgorICoKKyAqIFJldHVybnM6IHRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3
cG9ydC4KKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2Zsb2F0IHdlYmtpdF92aWV3cG9ydF9j
b25maWdfZ2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3
cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BP
UlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRDb25m
aWctPnByaXYtPmluaXRpYWxTY2FsZUZhY3RvcjsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2dldF9taW5pbXVtX3NjYWxlOgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJL
aXRWaWV3cG9ydENvbmZpZworICoKKyAqIFJldHVybnMgdGhlIG1pbmltdW0gc2NhbGUgdmFsdWUg
b2YgdGhlIHZpZXdwb3J0LgorICoKKyAqIFJldHVybnM6IHRoZSBtaW5pbXVtIHNjYWxlIHZhbHVl
IG9mIHRoZSB2aWV3cG9ydAorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0
X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWluaW11bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRD
b25maWcgKnZpZXdwb3J0Q29uZmlnKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJ
VF9JU19WSUVXUE9SVF9DT05GSUcodmlld3BvcnRDb25maWcpLCAwKTsKKworICAgIHJldHVybiB2
aWV3cG9ydENvbmZpZy0+cHJpdi0+bWluaW11bVNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdl
YmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21heGltdW1fc2NhbGU6CisgKiBAdmlld3BvcnRDb25m
aWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB0aGUgbWF4aW11bSBz
Y2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQuCisgKgorICogUmV0dXJuczogdGhlIG1heGltdW0g
c2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0CisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dm
bG9hdCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9tYXhpbXVtX3NjYWxlX2ZhY3RvcihXZWJL
aXRWaWV3cG9ydENvbmZpZyAqdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIDApOworCisg
ICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2LT5tYXhpbXVtU2NhbGVGYWN0b3I7Cit9CisK
Ky8qKgorICogd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvCisg
KiBAdmlld3BvcnRDb25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJu
cyB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSBkZXZp
Y2UgcGl4ZWwgcmF0aW8gdmF1bGUuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8oV2ViS2l0Vmlld3Bv
cnRDb25maWcgKnZpZXdwb3J0Q29uZmlnKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19WSUVXUE9SVF9DT05GSUcodmlld3BvcnRDb25maWcpLCAwKTsKKworICAgIHJldHVy
biB2aWV3cG9ydENvbmZpZy0+cHJpdi0+dGFyZ2V0RGVuc2l0eURQSTsKK30KKworLyoqCisgKiB3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc191c2VyX3NjYWxhYmxlOgorICogQHZpZXdwb3J0
Q29uZmlnOiBhICNXZWJLaXRWaWV3cG9ydENvbmZpZworICoKKyAqIERldGVybWluZXMgd2hldGhl
ciBvciBub3QgdGhlIHVzZXIgY2FuIHpvb20gaW4gYW5kIG91dC4KKyAqCisgKiBSZXR1cm5zOiBU
cnVlIGlmIHRoZSB1c2VyIGNhbiB6b29tIGluIGFuZCBvdXQuIAorICoKKyAqIFNpbmNlOiAxLjMu
NAorICovCitnYm9vbGVhbiB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc191c2VyX3NjYWxh
YmxlKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwg
ZmFsc2UpOworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2LT5pc1VzZXJTY2FsYWJs
ZTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc192YWxpZDoKKyAq
IEB2aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5z
IHdoZXRoZXIgb3Igbm90IGEgV2ViS2l0Vmlld3BvcnRDb25maWcgaXMgdmFsaWQuCisgKgorICog
UmV0dXJuczogVHJ1ZSBpZiBhIFdlYktpdFZpZXdwb3J0Q29uZmlnIGlzIHZhbGlkCisgKgorICog
U2luY2U6IDEuMy40CisgKi8KK2dib29sZWFuIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2lz
X3ZhbGlkKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZykKK3sKKyAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmln
KSwgZmFsc2UpOworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2LT5pc1ZhbGlkOwor
fQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZmluZF9jb25maWd1cmF0aW9uOgor
ICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJLaXRWaWV3cG9ydENvbmZpZworICogQG1haW5GcmFt
ZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqIEBhdmFpbGFibGVfd2lkdGg6IHRoZSBhdmFpbGFibGUg
d2lkdGggb2YgdGhlIHZpZXdwb3J0CisgKiBAYXZhaWxhYmxlX2hlaWdodDogdGhlIGF2YWlsYWJs
ZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0CisgKgorICogQ2FsY3VsYXRlIHRoZSB2aWV3cG9ydCBj
b25maWd1cmF0aW9uIHdpdGggdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgYW5kIHRoZSBzY3JlZW4g
cHJvcGVydGllcy4KKyAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBkZXZpY2Ug
d2lkdGgvaGVpZ2h0L0RQSSBhbmQgdGhlIGRlc2t0b3Agd2lkdGggc2hvdWxkIGJlIHNldCB0aHJv
dWdoIHRoZSB3ZWJraXRfdmlld3BvcnRfY29uZmlnX25ldy4KKyAqCisgKiBTaW5jZTogMS4zLjQK
KyAqLwordm9pZCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2ZpbmRfY29uZmlndXJhdGlvbihXZWJL
aXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcsIFdlYktpdFdlYkZyYW1lKiBtYWluRnJh
bWUsIGdpbnQgYXZhaWxhYmxlX3dpZHRoLCBnaW50IGF2YWlsYWJsZV9oZWlnaHQpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmln
KSk7CisgICAKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBXZWJLaXQ6OmNvcmUobWFpbkZy
YW1lKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHMgPSBmcmFtZS0+
ZG9jdW1lbnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICAKKyAgICB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2ZpbmRfY29uZmlndXJhdGlvbl9pbnRlcm5hbCh2aWV3cG9ydENvbmZpZywgYXJn
dW1lbnRzLCBXZWJDb3JlOjpJbnRTaXplKGF2YWlsYWJsZV93aWR0aCwgYXZhaWxhYmxlX2hlaWdo
dCkpOworfQorCisvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKK3ZvaWQgd2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19maW5kX2NvbmZpZ3VyYXRpb25faW50ZXJuYWwoV2ViS2l0Vmlld3BvcnRDb25maWcq
IHZpZXdwb3J0Q29uZmlnLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1l
bnRzLCBXZWJDb3JlOjpJbnRTaXplIGF2YWlsYWJsZVNpemUpCit7CisgICAgZ19yZXR1cm5faWZf
ZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSk7CisKKyAgICAv
LyBjaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudCBpcyB2YWxpZAorICAgIGlmIChhdmFpbGFibGVT
aXplLmlzRW1wdHkoKSkgeworICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2luaXQodmll
d3BvcnRDb25maWcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViS2l0Vmlld3Bv
cnRDb25maWdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJVkFU
RSh2aWV3cG9ydENvbmZpZyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9uIGNv
bmYgPSBXZWJDb3JlOjpmaW5kQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0RGF0YShhcmd1bWVudHMs
IHByaXYtPmRlc2t0b3BXaWR0aCwgcHJpdi0+ZGV2aWNlV2lkdGgsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0LCBwcml2LT5kZXZpY2VEUEksIGF2YWlsYWJs
ZVNpemUpOworCisgICAgcHJpdi0+d2lkdGggPSBjb25mLmxheW91dFZpZXdwb3J0LndpZHRoKCk7
CisgICAgcHJpdi0+aGVpZ2h0ID0gY29uZi5sYXlvdXRWaWV3cG9ydC5oZWlnaHQoKTsKKyAgICBw
cml2LT50YXJnZXREZW5zaXR5RFBJID0gY29uZi5kZXZpY2VQaXhlbFJhdGlvOworICAgIHByaXYt
PmluaXRpYWxTY2FsZUZhY3RvciA9IGNvbmYuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmlt
dW1TY2FsZUZhY3RvciA9IGNvbmYubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2Fs
ZUZhY3RvciA9IGNvbmYubWF4aW11bVNjYWxlOworICAgIHByaXYtPmlzVXNlclNjYWxhYmxlID0g
YXJndW1lbnRzLnVzZXJTY2FsYWJsZTsKKyAgICAKKyAgICBpZiAocHJpdi0+d2lkdGggPiAwKSAK
KyAgICAgICAgcHJpdi0+aXNWYWxpZCA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBwcml2LT5p
c1ZhbGlkID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2
aWV3cG9ydGNvbmZpZy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2RlOWQ0Ci0tLSAvZGV2L251
bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaApAQCAtMCww
ICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xk
cC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpZm5kZWYgd2Via2l0dmlld3BvcnRjb25maWdfaAorI2RlZmluZSB3ZWJraXR2aWV3
cG9ydGNvbmZpZ19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQ
RV9WSUVXUE9SVF9DT05GSUcgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRf
dHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHKG9iaikgICAgICAgICAgICAo
R19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NP
TkZJRywgV2ViS2l0Vmlld3BvcnRDb25maWcpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09O
RklHX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdF
QktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9DT05GSUcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hF
Q0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQ09ORklHKSkKKyNk
ZWZpbmUgV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVD
S19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9DT05GSUcpKQorI2Rl
ZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2ViS2l0
Vmlld3BvcnRDb25maWdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydENv
bmZpZ1ByaXZhdGUgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dFZpZXdwb3J0Q29uZmlnIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8q
PCBwcml2YXRlID4qLworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8K
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9B
UEkgV2ViS2l0Vmlld3BvcnRDb25maWcqIAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19uZXcgICAg
ICAgICAgICAgICAgICAgICAgKGdpbnQgZGVza3RvcFdpZHRoLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmljZVdpZHRoLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmljZUhl
aWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2ludCBkZXZpY2VEUEkpOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfY29u
ZmlnX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2ludAor
d2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfd2lkdGggICAgICAgICAgICAgICAgKFdlYktpdFZp
ZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0
X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaGVpZ2h0ICAgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0
Q29uZmlnKiB2aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmll
d3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRDb25m
aWcqIHZpZXdwb3J0Q29uZmlnKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9y
dF9jb25maWdfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydENvbmZpZyog
dmlld3BvcnRDb25maWcpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0X2Nv
bmZpZ19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3
cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0IAord2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9y
dENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRfdmlld3BvcnRfY29uZmln
X2dldF9pc191c2VyX3NjYWxhYmxlICAgICAoV2ViS2l0Vmlld3BvcnRDb25maWcgKnZpZXdwb3J0
Q29uZmlnKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19n
ZXRfaXNfdmFsaWQgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENv
bmZpZyk7CisKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF92aWV3cG9ydF9jb25maWdfZmluZF9j
b25maWd1cmF0aW9uICAgICAgIChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktp
dFdlYkZyYW1lKiBtYWluRnJhbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlX3dpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlX2hlaWdodCk7CisK
K0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRl
eCA3NjI4ODhhLi42ZGRiMmJhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAt
MTAsNiArMTAsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgog
ICogIENvcHlyaWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVzIEluYy4K
ICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJpZ2h0IChDKSAy
MDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0x
NzMsNiArMTc0LDcgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0NB
TkNFTExFRCwKICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKKyAgICBWSUVX
UE9SVF9DT05GSUdfQ0hBTkdFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTE2Niw2ICsx
MTY4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2Jq
ZWN0KQogICAgIHByaXYtPndlYldpbmRvd0ZlYXR1cmVzLmNsZWFyKCk7CiAgICAgcHJpdi0+bWFp
blJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7CisgICAg
cHJpdi0+dmlld3BvcnRDb25maWcuY2xlYXIoKTsKIAogICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRl
eHQqLCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHBy
aXYtPmRyb3BwaW5nQ29udGV4dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250
ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0Nv
bnRleHRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQpAQCAt
MjQzMCw2ICsyNDMzLDI5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfV0VCX0ZSQU1FKTsKIAogICAgIC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQt
Y29uZmlnLWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2
ZWQgdGhlIHNpZ25hbAorICAgICAqIEB3ZWJfdmlld3BvcnRfY29uZmlnOiB0aGUgI1dlYktpdFZp
ZXdwb3J0Q29uZmlnIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAgICAg
KgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtY29uZmlnLWNoYW5nZWQgd2ls
bCBiZSBlbWl0dGVkIHdoZW4gYSB3ZWIgcGFnZSAKKyAgICAgKiBoYXMgdGhlIHZpZXdwb3J0IHBy
b3BlcnRpZXMuIEFsc28sIGl0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZyYW1lIAor
ICAgICAqIGlzIGxvYWRlZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSB2aWV3cG9ydC4KKyAgICAgKiBU
aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbiAgYWxsb3dzIHRvIHNldCB0aGUgd2lkdGgsIGhlaWdo
dCBhbmQgc2NhbGUgdmFsdWVzIG9mIHRoZSB2aWV3IAorICAgICAqIGFyZWEgdXNlZCB0byBkaXNw
bGF5IHdlYiBjb250ZW50CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjQKKyAgICAgKi8KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tWSUVXUE9SVF9DT05GSUdfQ0hBTkdFRF0gPSBnX3Np
Z25hbF9uZXcoInZpZXdwb3J0LWNvbmZpZy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJ
R05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19P
QkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0NPTkZJRyk7CisgICAgICAgICAgICAKKworICAgIC8qCiAgICAgICogaW1w
bGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFz
cy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3
OwpAQCAtMzA4OSw3ICszMTE1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQo
V2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPndlYlNl
dHRpbmdzLmdldCgpLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3ZWJraXRfd2ViX3ZpZXdfc2V0dGlu
Z3Nfbm90aWZ5KSwgd2ViVmlldyk7CiAKICAgICBwcml2LT53ZWJXaW5kb3dGZWF0dXJlcyA9IGFk
b3B0UGxhdGZvcm1SZWYod2Via2l0X3dlYl93aW5kb3dfZmVhdHVyZXNfbmV3KCkpOwotCisgICAg
cHJpdi0+dmlld3BvcnRDb25maWcgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF92aWV3cG9ydF9j
b25maWdfbmV3KDAsIDAsIDAsIDApKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMgPSBhZG9wdFBs
YXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwg
Z19mcmVlLCBnX29iamVjdF91bnJlZikpOwogCiAgICAgcHJpdi0+Y3VycmVudENsaWNrQ291bnQg
PSAwOwpAQCAtNDQ1MSw2ICs0NDc3LDQ2IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19nZXRf
dmlld19zb3VyY2VfbW9kZSAoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gRkFM
U0U7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X3NldF92aWV3cG9ydF9jb25maWc6Cisg
KiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICogQHZpZXdwb3J0Q29uZmlnOiAodHJhbnNm
ZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgdG8gYmUgc2V0CisgKgorICogUmVw
bGFjZXMgdGhlICNXZWJLaXRWaWV3cG9ydENvbmZpZyBpbnN0YW5jZSB0aGF0IGlzIGN1cnJlbnRs
eSBhdHRhY2hlZAorICogdG8gQHdlYlZpZXcgd2l0aCBAdmlld3BvcnRDb25maWcuIFRoZSByZWZl
cmVuY2UgaGVsZCBieSB0aGUgQHdlYlZpZXcgb24KKyAqIHRoZSBvbGQgI1dlYktpdFZpZXdwb3J0
Q29uZmlnIGluc3RhbmNlIGlzIGRyb3BwZWQsIGFuZCB0aGUgcmVmZXJlbmNlCisgKiBjb3VudCBv
ZiBAdmlld3BvcnRDb25maWcgaXMgaW5jcmVhc2VkLgorICogCisgKiBTaW5jZTogMS4zLjQKKyAq
Lwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyhXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOwor
CisgICAgd2ViVmlldy0+cHJpdi0+dmlld3BvcnRDb25maWcgPSB2aWV3cG9ydENvbmZpZzsKK30K
KworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZzoKKyAqIEB3ZWJW
aWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktpdFZpZXdwb3J0
Q29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBUaGUgI1dlYktp
dFdlYlZpZXcgYWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkCisgKiBpbnN0YW5jZSBvZiAjV2ViS2l0
Vmlld3BvcnRDb25maWcuIFRoZSByZWZlcmVuY2UgdGhhdCBpcyByZXR1cm5lZCBieQorICogdGhp
cyBjYWxsIGlzIG93bmVkIGJ5IHRoZSAjV2ViS2l0V2ViVmlldy4gCisgKgorICogUmV0dXJuIHZh
bHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgaW5zdGFuY2UK
KyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworV2ViS2l0Vmlld3BvcnRDb25maWcqIHdlYmtpdF93
ZWJfdmlld19nZXRfdmlld3BvcnRfY29uZmlnKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7Cisg
ICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxM
KTsKKyAgIAorICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT52aWV3cG9ydENvbmZpZy5nZXQoKTsK
K30KKwogLy8gSW50ZXJuYWwgc3VicmVzb3VyY2UgbWFuYWdlbWVudAogdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfYWRkX3Jlc291cmNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGlk
ZW50aWZpZXIsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuaAppbmRleCBhMzIwMTMxLi5iZGY4MDg0IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2Vidmlldy5oCkBAIC00MDEsNiArNDAxLDEzIEBAIHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwgICAg
ICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1l
bnQgKgogd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdl
YktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQSSBXZWJLaXRWaWV3cG9y
dENvbmZpZyogCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQgCit3
ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAgICAgICAoV2ViS2l0V2Vi
VmlldyAgICAgICAgKndlYlZpZXcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZyk7CisK
IEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
IGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDYwNjVjZDAuLjliZmMxYmQgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAxMC0wOS0yNyAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gU3Vw
cG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRlc3Rp
bmcgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKworICAgICAgICAqIER1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGR1bXBDb25m
aWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCBKYXZhU2NyaXB0IEFQSSBmb3Igc2V0dGluZyB0
aGUgc2l6ZSBvZiB0aGUgdmlldyBhcmVhLgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydCk6IEFkZGVkIGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVz
LgorCiAyMDEwLTA5LTI2ICBNaWhhaSBQYXJwYXJpdGEgIDxtaWhhaXBAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFmYWkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggNzMwZjVjNy4uNTI2
ZDBlNCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTEzOSw2ICsxNDAsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlMK
ICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBK
U1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3Qg
YXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiog
ZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGF2YWlsYWJsZVdp
ZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsK
KyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSBhdmFpbGFibGVIZWlnaHQgPSBK
U1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIEFT
U0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5jb25maWd1cmF0aW9uRm9yVmlld3BvcnQo
c3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVXaWR0aCksIHN0YXRpY19jYXN0PGludD4oYXZhaWxh
YmxlSGVpZ2h0KSk7CisgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4
dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNr
KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYg
dGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1l
bnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxl
ciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmpl
Y3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTE4NjksNiArMTg4Niw3IEBAIEpTU3RhdGlj
RnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAg
ICB7ICJkdW1wQmFja0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1w
Q2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0IiwgZHVtcENvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRE9NQXNXZWJBcmNoaXZl
IiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBE
YXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgZHVtcEVkaXRpbmdDYWxsYmFja3ND
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmgKaW5kZXggNGQyMDMwMS4uNTQ5NTAxNCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0yNzksNiAr
Mjc5LDggQEAgcHVibGljOgogCiAgICAgdm9pZCBhYm9ydE1vZGFsKCk7CiAKKyAgICB2b2lkIGNv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVI
ZWlnaHQpOworCiAgICAgLy8gVGhlIGZvbGxvd2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxk
IHByb2JhYmx5IGJlIG1vdmVkIHRvIHBsYXRmb3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVz
dHMgb3V0c2lkZSBvZiBEUlQgb25jZSB0aGV5IGV4aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dp
bmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFz
ZVVSTCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCAyNDZiYmI0Li41ZTQ1OWFmIDEwMDY0NAot
LS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29u
dHJvbGxlckd0ay5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVh
bnRpIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxv
bnpvQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgwNCwzICs4MDUsMTkgQEAgdm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c2V0RWRpdGluZ0JlaGF2aW9yKGNvbnN0IGNoYXIqIGVkaXRpbmdCZWhhdmlv
cikKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQogewogfQorCit2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoZ2ludCBhdmFp
bGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgV2ViS2l0V2ViVmlldyog
d2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7CisgICAg
d2Via2l0X3dlYl92aWV3X3NldF92aWV3cG9ydF9jb25maWcod2ViVmlldywgd2Via2l0X3ZpZXdw
b3J0X2NvbmZpZ19uZXcoOTgwLCAzMjAsIDQ4MCwgMTYwKSk7CisKKyAgICBXZWJLaXRWaWV3cG9y
dENvbmZpZyogdmlld3BvcnRDb25maWcgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2Nv
bmZpZyh3ZWJWaWV3KTsKKyAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2ZpbmRfY29uZmlndXJh
dGlvbih2aWV3cG9ydENvbmZpZywgbWFpbkZyYW1lLCBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxl
SGVpZ2h0KTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAidmlld3BvcnQgc2l6ZSAlZHglZCBzY2Fs
ZSAlZiB3aXRoIGxpbWl0cyBbJWYsICVmXVxuIiwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9y
dF9jb25maWdfZ2V0X3dpZHRoKHZpZXdwb3J0Q29uZmlnKSwKKyAgICAgICAgICAgIHdlYmtpdF92
aWV3cG9ydF9jb25maWdfZ2V0X2hlaWdodCh2aWV3cG9ydENvbmZpZyksCisgICAgICAgICAgICB3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3Rvcih2aWV3cG9ydENv
bmZpZyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9taW5pbXVtX3Nj
YWxlX2ZhY3Rvcih2aWV3cG9ydENvbmZpZyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRf
Y29uZmlnX2dldF9tYXhpbXVtX3NjYWxlX2ZhY3Rvcih2aWV3cG9ydENvbmZpZykpOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69198</attachid>
            <date>2010-09-29 08:12:04 -0700</date>
            <delta_ts>2010-10-05 01:23:48 -0700</delta_ts>
            <desc>Proposed Patch3</desc>
            <filename>viewport3.diff</filename>
            <type>text/plain</type>
            <size>34822</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA1N2I1ZjVkLi4yMTMwNmU4
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDktMjggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIG5ldyBnb2JqZWN0IHR5cGUgZm9yIHN1cHBvcnRp
bmcgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBB
ZGRlZCB3ZWJraXR2aWV3cG9ydGNvbmZpZy5oIHdlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcCAKKwog
MjAxMC0wOS0yOCAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZp
bGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCAxYzk1Y2QxLi4wNTEyNDM3IDEwMDY0NAotLS0g
YS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzE2LDYgKzMxNiw3IEBA
IHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzb3VwYXV0aGRpYWxvZy5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRjb25maWcuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViZGF0YXNvdXJjZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZnJhbWUuaCBcCkBAIC0zNzgsNiArMzc5LDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAog
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lv
bi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cg
Yi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzUzNDQ5Ni4uMWIxNTgzNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE0IEBACisyMDEwLTA5LTI5ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBw
b3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBJbmNsdWRlZCB2aWV3cG9ydCB0ZXN0
IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBV
bnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQgdmlld3BvcnQtNDUuaHRtbAorCiAyMDEwLTA5LTI5
ICBKYW1lcyBLb3ppYW5za2kgIDxrb3pAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IEphbWVzIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3Rr
L1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAwZjc0ZjI5
Li5hOWVhODU1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTkyMCw3ICs1OTIwLDcg
QEAgY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5odG1sCiB3
ZWJzb2NrZXQvdGVzdHMKIAogIyB2aWV3cG9ydCBtZXRhIHRhZyBzdXBwb3J0Ci1mYXN0L3ZpZXdw
b3J0CitmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTQ1Lmh0bWwKIAogIyBQcmUtSE1UTDUgcGFyc2Vy
IHF1aXJrcyBvbmx5IGFwcGx5IHRvIHRoZSBtYWMgcG9ydCBmb3Igbm93LgogZmFzdC9wYXJzZXIv
cHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFu
Z2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCBjNjAyYWMxLi41ODk2ZDQ2IDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDQ1IEBACisyMDEwLTA5LTI4ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBT
dXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBUaGlzIHBhdGNoIGFsbG93cyB0
byBzZXQgdGhlIHdpZHRoLCBoZWlnaHQgYW5kIHNjYWxlIHZhbHVlcyBvZiB0aGUgdmlldyAKKyAg
ICAgICAgYXJlYSB1c2VkIHRvIGRpc3BsYXkgd2ViIGNvbnRlbnQgdGhyb3VnaCB0aGUgdmlld3Bv
cnQgY29uZmlndXJhdGlvbi4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6ZGlkUmVjZWl2ZVZpZXdw
b3J0QXJndW1lbnRzKTogQWRkZWQgZm9yIGVtaXR0aW5nIHRoZSB2aWV3cG9ydC1jb25maWctY2hh
bmdlZCBzaWduYWwgd2l0aCB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkQ29tbWl0TG9hZCk6IEVtaXQgdGhlIHZpZXdwb3J0LWNvbmZpZy1jaGFuZ2VkIHNpZ25h
bC4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRl
ZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR2aWV3cG9ydGNvbmZpZy5jcHA6IEFkZGVkIGZvciBoYW5kbGluZyB0aGUgIHZp
ZXdwb3J0IGNvbmZpZ3VyYXRpb24uCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2Ns
YXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19pbml0KToKKyAgICAg
ICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfbmV3KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9y
dF9jb25maWdfZ2V0X3dpZHRoKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0
X2hlaWdodCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3Nj
YWxlX2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9taW5pbXVt
X3NjYWxlX2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9tYXhp
bXVtX3NjYWxlX2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9k
ZXZpY2VfcGl4ZWxfcmF0aW8pOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRf
aXNfdXNlcl9zY2FsYWJsZSk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9p
c192YWxpZCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2NvbXB1dGVfY29uZmln
dXJhdGlvbik6IENhbGN1bGF0ZSB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbiB3aXRoIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCB0aGUgc2NyZWVuIHByb3BlcnRpZXMuCisgICAgICAgICh3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2NvbXB1dGVfY29uZmlndXJhdGlvbl9pbnRlcm5hbCk6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmg6IEFkZGVkLgorICAgICAgICAq
IHdlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNw
b3NlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zZXRfdmlld3Bv
cnRfY29uZmlnKTogUmVwbGFjZXMgdGhlIFdlYktpdFZpZXdwb3J0Q29uZmlnIGluc3RhbmNlIHRo
YXQgaXMgY3VycmVudGx5IGF0dGFjaGVkIHRvIHRoZSBXZWJLaXRXZWJWaWV3LgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9jb25maWcpOiBPYnRhaW5zIHRoZSBXZWJLaXRW
aWV3cG9ydENvbmZpZyBhc3NvY2lhdGVkIHdpdGggdGhlIFdlYktpdFdlYlZpZXcuCisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKwogMjAxMC0wOS0yOCAgSmVubiBCcmFpdGh3YWl0
ZSAgPGplbm5iQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEbWl0cnkgVGl0
b3YuCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5k
ZXggN2U0MDkwYi4uODM4MjY0NyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGaWxl
Q2hvb3Nlci5oIgpAQCAtNjAyLDcgKzYwMywxOCBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3Nl
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwog
ICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1l
cykpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit2
b2lkIENocm9tZUNsaWVudDo6ZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKEZyYW1lKiBmcmFt
ZSwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sK
KyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJ2aWV3ID0gZ2V0Vmlld0Zyb21GcmFtZShraXQoZnJhbWUp
KTsKKyAgICBXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcgPSB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyh3ZWJ2aWV3KTsKKyAgICBXZWJDb3JlOjpGbG9hdFJl
Y3QgcmVjdCA9IGNvcmUod2VidmlldyktPmNocm9tZSgpLT5wYWdlUmVjdCgpOworCisgICAgd2Vi
a2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb25faW50ZXJuYWwodmlld3Bv
cnRDb25maWcsIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZShzdGF0aWNfY2FzdDxnaW50Pihy
ZWN0LndpZHRoKCkpLCBzdGF0aWNfY2FzdDxnaW50PihyZWN0LmhlaWdodCgpKSkpOworCisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYnZpZXcsICJ2aWV3cG9ydC1jb25maWctY2hhbmdlZCIs
IHZpZXdwb3J0Q29uZmlnKTsgCit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29u
c3QgV2ViQ29yZTo6Q3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggMjFjNDY3Ny4uYTkx
ZTY3NiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBA
IC0xMDksNiArMTA5LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2
b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9u
KTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjZWl2ZVZpZXdwb3J0QXJndW1lbnRzKFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFy
Z3VtZW50cykgY29uc3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KFdlYkNvcmU6OkZy
YW1lKik7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVk
ZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsu
Y3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAK
aW5kZXggMTM0MDFmNS4uNDk3ODI4MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTkwNSw2ICs5MDUsMTQgQEAgdm9pZCBG
cmFtZUxvYWRlckNsaWVudDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKICAgICAgICAgZ19vYmpl
Y3Rfbm90aWZ5KEdfT0JKRUNUKHdlYlZpZXcpLCAidGl0bGUiKTsKICAgICAgICAgZ19vYmplY3Rf
dGhhd19ub3RpZnkoR19PQkpFQ1Qod2ViVmlldykpOwogICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUod2ViVmlldywgImxvYWQtY29tbWl0dGVkIiwgbV9mcmFtZSk7CisKKyAgICAgICAgLyog
SW4gb3JkZXIgdG8gcmVzZXQgdGhlIHZpZXdwb3J0LCAKKyAgICAgICAgICogVGhlICJ2aWV3cG9y
dC1jb25maWctY2hhbmdlZCIgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZy
YW1lIGlzIGxvYWRlZC4KKyAgICAgICAgICovCisgICAgICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzIGFyZ3VtZW50czsKKyAgICAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHdlYnZpZXdQ
cml2ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKHdlYlZpZXcpOworICAgICAgICB3ZWJr
aXRfdmlld3BvcnRfY29uZmlnX2NvbXB1dGVfY29uZmlndXJhdGlvbl9pbnRlcm5hbCh3ZWJ2aWV3
UHJpdi0+dmlld3BvcnRDb25maWcuZ2V0KCksIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSgw
LCAwKSk7CisgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3BvcnQt
Y29uZmlnLWNoYW5nZWQiLCB3ZWJ2aWV3UHJpdi0+dmlld3BvcnRDb25maWcuZ2V0KCkpOyAKICAg
ICB9CiAKICAgICBnX29iamVjdF90aGF3X25vdGlmeShHX09CSkVDVChtX2ZyYW1lKSk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdC5oCmluZGV4IGZjNzFjMmMuLjY2MzM0OWYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGNvbmZp
Zy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRp
bmdzLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uOWI4NGNlMyAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0
cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsK
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdl
b2xvY2F0aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRp
b25Qb2xpY3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFz
czsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q29uZmlnIFdlYktpdFZpZXdwb3J0
Q29uZmlnOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q29uZmlnQ2xhc3MgV2ViS2l0
Vmlld3BvcnRDb25maWdDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRwcml2YXRlLmgKaW5kZXggNjE2ZWU2Yi4uMGJhZDhiMSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3du
bG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHZpZXdwb3J0Y29uZmlnLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJmcmFtZS5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VS
ZXNwb25zZS5oIgorI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiV2lu
ZG93RmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCkBAIC0xNDAsNiArMTQyLDcgQEAgZXh0ZXJuICJDIiB7CiAKICAgICAgICAgV2Vi
S2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2Vi
QmFja0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRy
PFdlYktpdFZpZXdwb3J0Q29uZmlnPiB2aWV3cG9ydENvbmZpZzsKIAogICAgICAgICBQbGF0Zm9y
bVJlZlB0cjxHdGtNZW51PiBjdXJyZW50TWVudTsKICAgICAgICAgZ2ludCBsYXN0UG9wdXBYUG9z
aXRpb247CkBAIC0zMTYsNiArMzE5LDkgQEAgZXh0ZXJuICJDIiB7CiAgICAgV2ViS2l0R2VvbG9j
YXRpb25Qb2xpY3lEZWNpc2lvbioKICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5X2RlY2lz
aW9uX25ldyhXZWJLaXRXZWJGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAKKyAgICB2
b2lkIAorICAgIHdlYmtpdF92aWV3cG9ydF9jb25maWdfY29tcHV0ZV9jb25maWd1cmF0aW9uX2lu
dGVybmFsKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZywgY29uc3QgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSBhdmFpbGFi
bGVTaXplKTsKKwogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gd2Via2l0bmV0d29ya3JlcXVl
c3QuaCBvbmNlIHRoZSBBUEkgaXMgYWdyZWVkIHVwb24uCiAgICAgV0VCS0lUX0FQSSBTb3VwTWVz
c2FnZSoKICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktpdE5ldHdv
cmtSZXF1ZXN0KiByZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHZpZXdwb3J0Y29uZmlnLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0Y29u
ZmlnLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTQ0ZDk3Ci0tLSAv
ZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuY3Bw
CkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8
am9vbmVAa2xkcC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR2aWV3
cG9ydGNvbmZpZy5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCitHX0RFRklORV9U
WVBFKFdlYktpdFZpZXdwb3J0Q29uZmlnLCB3ZWJraXRfdmlld3BvcnRfY29uZmlnLCBHX1RZUEVf
T0JKRUNUKTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydENvbmZpZ1ByaXZhdGUgeworICAgIGdp
bnQgd2lkdGg7CisgICAgZ2ludCBoZWlnaHQ7CisgICAgZ2Zsb2F0IHRhcmdldERlbnNpdHlEUEk7
CisgICAgZ2Zsb2F0IGluaXRpYWxTY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWluaW11bVNjYWxl
RmFjdG9yOworICAgIGdmbG9hdCBtYXhpbXVtU2NhbGVGYWN0b3I7CisgICAgZ2Jvb2xlYW4gaXNV
c2VyU2NhbGFibGU7CisgICAgZ2Jvb2xlYW4gaXNWYWxpZDsKKyAgICBnaW50IGRldmljZURQSTsK
KyAgICBnaW50IGRldmljZVdpZHRoOworICAgIGdpbnQgZGV2aWNlSGVpZ2h0OworICAgIGdpbnQg
ZGVza3RvcFdpZHRoOworfTsKKworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHX0dFVF9Q
UklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQ09ORklHLCBXZWJLaXRWaWV3cG9ydENvbmZpZ1ByaXZhdGUpKQorCitz
dGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2NsYXNzX2luaXQoV2ViS2l0Vmlld3Bv
cnRDb25maWdDbGFzcyogdmlld3BvcnRDb25maWdDbGFzcykKK3sKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUodmlld3BvcnRDb25maWdDbGFzcywgc2l6ZW9mKFdlYktpdFZpZXdwb3J0Q29u
ZmlnUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2lu
aXQoV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0KQoreworICAgIFdlYktpdFZpZXdwb3J0
Q29uZmlnUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9DT05GSUdfR0VUX1BSSVZBVEUo
dmlld3BvcnQpOworICAgIHZpZXdwb3J0LT5wcml2ID0gcHJpdjsKKworICAgIHByaXYtPndpZHRo
ID0gMDsKKyAgICBwcml2LT5oZWlnaHQgPSAwOworICAgIHByaXYtPnRhcmdldERlbnNpdHlEUEkg
PSAtMS4wOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJpdi0+
bWluaW11bVNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3Ig
PSAtMS4wOworICAgIHByaXYtPmlzVXNlclNjYWxhYmxlID0gdHJ1ZTsKKyAgICBwcml2LT5pc1Zh
bGlkID0gZmFsc2U7Cit9CisKK1dlYktpdFZpZXdwb3J0Q29uZmlnKiB3ZWJraXRfdmlld3BvcnRf
Y29uZmlnX25ldyhnaW50IGRlc2t0b3BXaWR0aCwgZ2ludCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZp
Y2VIZWlnaHQsIGdpbnQgZGV2aWNlRFBJKQoreworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2
aWV3cG9ydENvbmZpZyA9IFdFQktJVF9WSUVXUE9SVF9DT05GSUcoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgTlVMTCkpOworICAgIFdlYktpdFZpZXdwb3J0Q29uZmln
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9DT05GSUdfR0VUX1BSSVZBVEUodmlld3Bv
cnRDb25maWcpOworCisgICAgcHJpdi0+ZGVza3RvcFdpZHRoID0gZGVza3RvcFdpZHRoOworICAg
IHByaXYtPmRldmljZVdpZHRoID0gZGV2aWNlV2lkdGg7CisgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0
ID0gZGV2aWNlSGVpZ2h0OworICAgIHByaXYtPmRldmljZURQSSA9IGRldmljZURQSTsKKyAgICBw
cml2LT5pc1ZhbGlkID0gZmFsc2U7CisKKyAgICByZXR1cm4gdmlld3BvcnRDb25maWc7Cit9CisK
Ky8qKgorICogd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfd2lkdGg6CisgKiBAdmlld3BvcnRD
b25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB0aGUgd2lkdGgg
b2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgd2lkdGggb2Yg
dGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2ludCB3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF93aWR0aChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmll
d3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQ
T1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIDApOworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29u
ZmlnLT5wcml2LT53aWR0aDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dl
dF9oZWlnaHQ6CisgKiBAdmlld3BvcnRDb25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisg
KgorICogUmV0dXJucyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBpbiBwaXhlbHMuCisgKgor
ICogUmV0dXJuczogdGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgaW4gcGl4ZWxzLgorICoKKyAq
IFNpbmNlOiAxLjMuNAorICovCitnaW50IHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2hlaWdo
dChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIDAp
OworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2LT5oZWlnaHQ7Cit9CisKKy8qKgor
ICogd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3I6CisgKiBA
dmlld3BvcnRDb25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB0
aGUgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuCisgKgorICogUmV0dXJuczogdGhlIGlu
aXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitn
ZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3IoV2Vi
S2l0Vmlld3BvcnRDb25maWcgKnZpZXdwb3J0Q29uZmlnKQoreworICAgIGdfcmV0dXJuX3ZhbF9p
Zl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9DT05GSUcodmlld3BvcnRDb25maWcpLCAwKTsKKwor
ICAgIHJldHVybiB2aWV3cG9ydENvbmZpZy0+cHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yOworfQor
CisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9y
OgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJLaXRWaWV3cG9ydENvbmZpZworICoKKyAqIFJl
dHVybnMgdGhlIG1pbmltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0LgorICoKKyAqIFJl
dHVybnM6IHRoZSBtaW5pbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydAorICoKKyAqIFNp
bmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWluaW11
bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRDb25maWcgKnZpZXdwb3J0Q29uZmlnKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9DT05GSUcodmlld3Bv
cnRDb25maWcpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydENvbmZpZy0+cHJpdi0+bWluaW11
bVNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21h
eGltdW1fc2NhbGVfZmFjdG9yOgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJLaXRWaWV3cG9y
dENvbmZpZworICoKKyAqIFJldHVybnMgdGhlIG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZp
ZXdwb3J0LgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2
aWV3cG9ydAorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRDb25maWcgKnZp
ZXdwb3J0Q29uZmlnKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVX
UE9SVF9DT05GSUcodmlld3BvcnRDb25maWcpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydENv
bmZpZy0+cHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3
cG9ydF9jb25maWdfZ2V0X2RldmljZV9waXhlbF9yYXRpbworICogQHZpZXdwb3J0Q29uZmlnOiBh
ICNXZWJLaXRWaWV3cG9ydENvbmZpZworICoKKyAqIFJldHVybnMgdGhlIGRldmljZSBwaXhlbCBy
YXRpbyB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHZhdWxl
LgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENv
bmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09O
RklHKHZpZXdwb3J0Q29uZmlnKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRDb25maWctPnBy
aXYtPnRhcmdldERlbnNpdHlEUEk7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19nZXRfaXNfdXNlcl9zY2FsYWJsZToKKyAqIEB2aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0Vmll
d3BvcnRDb25maWcKKyAqCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNh
biB6b29tIGluIGFuZCBvdXQuCisgKgorICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgdXNlciBjYW4g
em9vbSBpbiBhbmQgb3V0LiAKKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2Jvb2xlYW4gd2Vi
a2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaXNfdXNlcl9zY2FsYWJsZShXZWJLaXRWaWV3cG9ydENv
bmZpZyAqdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIGZhbHNlKTsKKworICAgIHJldHVy
biB2aWV3cG9ydENvbmZpZy0+cHJpdi0+aXNVc2VyU2NhbGFibGU7Cit9CisKKy8qKgorICogd2Vi
a2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaXNfdmFsaWQ6CisgKiBAdmlld3BvcnRDb25maWc6IGEg
I1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhIFdl
YktpdFZpZXdwb3J0Q29uZmlnIGlzIHZhbGlkLgorICoKKyAqIFJldHVybnM6IFRydWUgaWYgYSBX
ZWJLaXRWaWV3cG9ydENvbmZpZyBpcyB2YWxpZAorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitn
Ym9vbGVhbiB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc192YWxpZChXZWJLaXRWaWV3cG9y
dENvbmZpZyAqdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIGZhbHNlKTsKKworICAgIHJl
dHVybiB2aWV3cG9ydENvbmZpZy0+cHJpdi0+aXNWYWxpZDsKK30KKworLyoqCisgKiB3ZWJraXRf
dmlld3BvcnRfY29uZmlnX2NvbXB1dGVfY29uZmlndXJhdGlvbjoKKyAqIEB2aWV3cG9ydENvbmZp
ZzogYSAjV2ViS2l0Vmlld3BvcnRDb25maWcKKyAqIEBtYWluRnJhbWU6IGEgI1dlYktpdFdlYkZy
YW1lCisgKiBAYXZhaWxhYmxlX3dpZHRoOiB0aGUgYXZhaWxhYmxlIHdpZHRoIG9mIHRoZSB2aWV3
cG9ydAorICogQGF2YWlsYWJsZV9oZWlnaHQ6IHRoZSBhdmFpbGFibGUgaGVpZ2h0IG9mIHRoZSB2
aWV3cG9ydAorICoKKyAqIENhbGN1bGF0ZSB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbiB3aXRo
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCB0aGUgc2NyZWVuIHByb3BlcnRpZXMuCisgKiBC
ZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZGV2aWNlIHdpZHRoL2hlaWdodC9EUEkg
YW5kIHRoZSBkZXNrdG9wIHdpZHRoIHNob3VsZCBiZSBzZXQgdGhyb3VnaCB0aGUgd2Via2l0X3Zp
ZXdwb3J0X2NvbmZpZ19uZXcuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK3ZvaWQgd2Via2l0
X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb24oV2ViS2l0Vmlld3BvcnRDb25m
aWcqIHZpZXdwb3J0Q29uZmlnLCBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lLCBnaW50IGF2YWls
YWJsZV93aWR0aCwgZ2ludCBhdmFpbGFibGVfaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOworICAgCisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gV2ViS2l0Ojpjb3JlKG1haW5GcmFtZSk7CisgICAgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gZnJhbWUtPmRvY3VtZW50KCktPnZp
ZXdwb3J0QXJndW1lbnRzKCk7CisgICAgCisgICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21w
dXRlX2NvbmZpZ3VyYXRpb25faW50ZXJuYWwodmlld3BvcnRDb25maWcsIGFyZ3VtZW50cywgV2Vi
Q29yZTo6SW50U2l6ZShhdmFpbGFibGVfd2lkdGgsIGF2YWlsYWJsZV9oZWlnaHQpKTsKK30KKwor
Ly8gZm9yIGludGVybmFsIHVzZSBvbmx5Cit2b2lkIHdlYmtpdF92aWV3cG9ydF9jb25maWdfY29t
cHV0ZV9jb25maWd1cmF0aW9uX2ludGVybmFsKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9y
dENvbmZpZywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgV2Vi
Q29yZTo6SW50U2l6ZSBhdmFpbGFibGVTaXplKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VC
S0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOworCisgICAgLy8gY2hlY2sg
d2hldGhlciB0aGUgYXJndW1lbnRzIHBhcmFtZXRlciBpcyB2YWxpZAorICAgIGlmIChhdmFpbGFi
bGVTaXplLmlzRW1wdHkoKSkgeworICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2luaXQo
dmlld3BvcnRDb25maWcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViS2l0Vmll
d3BvcnRDb25maWdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJ
VkFURSh2aWV3cG9ydENvbmZpZyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9u
IGNvbmYgPSBXZWJDb3JlOjpmaW5kQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0RGF0YShhcmd1bWVu
dHMsIHByaXYtPmRlc2t0b3BXaWR0aCwgcHJpdi0+ZGV2aWNlV2lkdGgsIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0LCBwcml2LT5kZXZpY2VEUEksIGF2YWls
YWJsZVNpemUpOworCisgICAgcHJpdi0+d2lkdGggPSBjb25mLmxheW91dFZpZXdwb3J0LndpZHRo
KCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gY29uZi5sYXlvdXRWaWV3cG9ydC5oZWlnaHQoKTsKKyAg
ICBwcml2LT50YXJnZXREZW5zaXR5RFBJID0gY29uZi5kZXZpY2VQaXhlbFJhdGlvOworICAgIHBy
aXYtPmluaXRpYWxTY2FsZUZhY3RvciA9IGNvbmYuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1p
bmltdW1TY2FsZUZhY3RvciA9IGNvbmYubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1T
Y2FsZUZhY3RvciA9IGNvbmYubWF4aW11bVNjYWxlOworICAgIHByaXYtPmlzVXNlclNjYWxhYmxl
ID0gYXJndW1lbnRzLnVzZXJTY2FsYWJsZTsKKyAgICAKKyAgICBpZiAocHJpdi0+d2lkdGggPiAw
KSAKKyAgICAgICAgcHJpdi0+aXNWYWxpZCA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBwcml2
LT5pc1ZhbGlkID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGNvbmZpZy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25m
aWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDkwY2U3Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaApAQCAt
MCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVA
a2xkcC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpZm5kZWYgd2Via2l0dmlld3BvcnRjb25maWdfaAorI2RlZmluZSB3ZWJraXR2
aWV3cG9ydGNvbmZpZ19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRf
VFlQRV9WSUVXUE9SVF9DT05GSUcgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHKG9iaikgICAgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0NPTkZJRywgV2ViS2l0Vmlld3BvcnRDb25maWcpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRf
Q09ORklHX0NMQVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwg
IFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcykp
CisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9DT05GSUcob2JqKSAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQ09ORklHKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJR19DTEFTUyhrbGFzcykgKEdfVFlQRV9D
SEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9DT05GSUcpKQor
I2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lO
U1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2Vi
S2l0Vmlld3BvcnRDb25maWdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9y
dENvbmZpZ1ByaXZhdGUgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRlOworCitzdHJ1Y3QgX1dl
YktpdFZpZXdwb3J0Q29uZmlnIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAg
IC8qPCBwcml2YXRlID4qLworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSAqcHJpdjsK
K307CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcyB7CisgICAgR09iamVjdENs
YXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24g
Ki8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dl
YmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJ
VF9BUEkgV2ViS2l0Vmlld3BvcnRDb25maWcqIAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19uZXcg
ICAgICAgICAgICAgICAgICAgICAgKGdpbnQgZGVza3RvcFdpZHRoLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmljZVdpZHRoLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmlj
ZUhlaWdodCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCBkZXZpY2VEUEkpOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRf
Y29uZmlnX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2lu
dAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfd2lkdGggICAgICAgICAgICAgICAgKFdlYktp
dFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2ludAord2Vi
a2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaGVpZ2h0ICAgICAgICAgICAgICAgKFdlYktpdFZpZXdw
b3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRf
dmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRD
b25maWcqIHZpZXdwb3J0Q29uZmlnKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3
cG9ydF9jb25maWdfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydENvbmZp
Zyogdmlld3BvcnRDb25maWcpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2
aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0IAord2Via2l0X3ZpZXdwb3J0X2Nv
bmZpZ19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3
cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRfdmlld3BvcnRfY29u
ZmlnX2dldF9pc191c2VyX3NjYWxhYmxlICAgICAoV2ViS2l0Vmlld3BvcnRDb25maWcgKnZpZXdw
b3J0Q29uZmlnKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19nZXRfaXNfdmFsaWQgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9y
dENvbmZpZyk7CisKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF92aWV3cG9ydF9jb25maWdfY29t
cHV0ZV9jb25maWd1cmF0aW9uICAgIChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25m
aWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdl
YktpdFdlYkZyYW1lKiBtYWluRnJhbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlX3dpZHRoLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlX2hlaWdodCk7
CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApp
bmRleCA3NjI4ODhhLi42ZGRiMmJhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApA
QCAtMTAsNiArMTAsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5M
LgogICogIENvcHlyaWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVzIElu
Yy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJpZ2h0IChD
KSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBA
IC0xNzMsNiArMTc0LDcgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9O
X0NBTkNFTExFRCwKICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKKyAgICBW
SUVXUE9SVF9DT05GSUdfQ0hBTkdFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTE2Niw2
ICsxMTY4LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCog
b2JqZWN0KQogICAgIHByaXYtPndlYldpbmRvd0ZlYXR1cmVzLmNsZWFyKCk7CiAgICAgcHJpdi0+
bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7Cisg
ICAgcHJpdi0+dmlld3BvcnRDb25maWcuY2xlYXIoKTsKIAogICAgIEhhc2hNYXA8R2RrRHJhZ0Nv
bnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9
IHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEdka0RyYWdD
b250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGlu
Z0NvbnRleHRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQpA
QCAtMjQzMCw2ICsyNDMzLDI5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19p
bml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lU
X1RZUEVfV0VCX0ZSQU1FKTsKIAogICAgIC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3Bv
cnQtY29uZmlnLWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVj
ZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB3ZWJfdmlld3BvcnRfY29uZmlnOiB0aGUgI1dlYktp
dFZpZXdwb3J0Q29uZmlnIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAg
ICAgKgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtY29uZmlnLWNoYW5nZWQg
d2lsbCBiZSBlbWl0dGVkIHdoZW4gYSB3ZWIgcGFnZSAKKyAgICAgKiBoYXMgdGhlIHZpZXdwb3J0
IHByb3BlcnRpZXMuIEFsc28sIGl0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZyYW1l
IAorICAgICAqIGlzIGxvYWRlZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSB2aWV3cG9ydC4KKyAgICAg
KiBUaGUgdmlld3BvcnQgY29uZmlndXJhdGlvbiAgYWxsb3dzIHRvIHNldCB0aGUgd2lkdGgsIGhl
aWdodCBhbmQgc2NhbGUgdmFsdWVzIG9mIHRoZSB2aWV3IAorICAgICAqIGFyZWEgdXNlZCB0byBk
aXNwbGF5IHdlYiBjb250ZW50CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjQKKyAgICAgKi8K
KyAgICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tWSUVXUE9SVF9DT05GSUdfQ0hBTkdFRF0gPSBn
X3NpZ25hbF9uZXcoInZpZXdwb3J0LWNvbmZpZy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQ
RV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShH
X1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lE
X19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJ
VF9UWVBFX1ZJRVdQT1JUX0NPTkZJRyk7CisgICAgICAgICAgICAKKworICAgIC8qCiAgICAgICog
aW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdD
bGFzcy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92
aWV3OwpAQCAtMzA4OSw3ICszMTE1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2lu
aXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPndl
YlNldHRpbmdzLmdldCgpLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3ZWJraXRfd2ViX3ZpZXdfc2V0
dGluZ3Nfbm90aWZ5KSwgd2ViVmlldyk7CiAKICAgICBwcml2LT53ZWJXaW5kb3dGZWF0dXJlcyA9
IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3dlYl93aW5kb3dfZmVhdHVyZXNfbmV3KCkpOwotCisg
ICAgcHJpdi0+dmlld3BvcnRDb25maWcgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF92aWV3cG9y
dF9jb25maWdfbmV3KDAsIDAsIDAsIDApKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMgPSBhZG9w
dFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVh
bCwgZ19mcmVlLCBnX29iamVjdF91bnJlZikpOwogCiAgICAgcHJpdi0+Y3VycmVudENsaWNrQ291
bnQgPSAwOwpAQCAtNDQ1MSw2ICs0NDc3LDQ2IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld19zb3VyY2VfbW9kZSAoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4g
RkFMU0U7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X3NldF92aWV3cG9ydF9jb25maWc6
CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICogQHZpZXdwb3J0Q29uZmlnOiAodHJh
bnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgdG8gYmUgc2V0CisgKgorICog
UmVwbGFjZXMgdGhlICNXZWJLaXRWaWV3cG9ydENvbmZpZyBpbnN0YW5jZSB0aGF0IGlzIGN1cnJl
bnRseSBhdHRhY2hlZAorICogdG8gQHdlYlZpZXcgd2l0aCBAdmlld3BvcnRDb25maWcuIFRoZSBy
ZWZlcmVuY2UgaGVsZCBieSB0aGUgQHdlYlZpZXcgb24KKyAqIHRoZSBvbGQgI1dlYktpdFZpZXdw
b3J0Q29uZmlnIGluc3RhbmNlIGlzIGRyb3BwZWQsIGFuZCB0aGUgcmVmZXJlbmNlCisgKiBjb3Vu
dCBvZiBAdmlld3BvcnRDb25maWcgaXMgaW5jcmVhc2VkLgorICogCisgKiBTaW5jZTogMS4zLjQK
KyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyhXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3LCBXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcpCit7Cisg
ICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykp
OworCisgICAgd2ViVmlldy0+cHJpdi0+dmlld3BvcnRDb25maWcgPSB2aWV3cG9ydENvbmZpZzsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZzoKKyAqIEB3
ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktpdFZpZXdw
b3J0Q29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBUaGUgI1dl
YktpdFdlYlZpZXcgYWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkCisgKiBpbnN0YW5jZSBvZiAjV2Vi
S2l0Vmlld3BvcnRDb25maWcuIFRoZSByZWZlcmVuY2UgdGhhdCBpcyByZXR1cm5lZCBieQorICog
dGhpcyBjYWxsIGlzIG93bmVkIGJ5IHRoZSAjV2ViS2l0V2ViVmlldy4gCisgKgorICogUmV0dXJu
IHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgaW5zdGFu
Y2UKKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworV2ViS2l0Vmlld3BvcnRDb25maWcqIHdlYmtp
dF93ZWJfdmlld19nZXRfdmlld3BvcnRfY29uZmlnKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7
CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBO
VUxMKTsKKyAgIAorICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT52aWV3cG9ydENvbmZpZy5nZXQo
KTsKK30KKwogLy8gSW50ZXJuYWwgc3VicmVzb3VyY2UgbWFuYWdlbWVudAogdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfYWRkX3Jlc291cmNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIq
IGlkZW50aWZpZXIsIFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZSkKIHsKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuaAppbmRleCBhMzIwMTMxLi5iZGY4MDg0IDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5oCkBAIC00MDEsNiArNDAxLDEzIEBAIHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwg
ICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9j
dW1lbnQgKgogd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAg
KFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQSSBXZWJLaXRWaWV3
cG9ydENvbmZpZyogCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQg
Cit3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgKndlYlZpZXcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZyk7
CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGIyYTM3OTEuLmM2MDRhOGQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOSBAQAorMjAxMC0wOS0yOCAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10g
U3VwcG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRl
c3RpbmcgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKworICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGR1bXBD
b25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCBKYXZhU2NyaXB0IEFQSSBmb3Igc2V0dGlu
ZyB0aGUgc2l6ZSBvZiB0aGUgdmlldyBhcmVhLgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0
aWVzLgorCiAyMDEwLTA5LTI4ICBKb2hubnkgRGluZyAgPGpuZEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCBlZTQ0MzI1Li5lNGU0ZjEz
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAw
OCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTM5LDYgKzE0MCwyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRG
cmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKUwogICAg
IHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFs
dWVSZWYgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1
bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNl
cHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGgg
PSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0g
c3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhp
c09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChzdGF0
aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZVdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVI
ZWlnaHQpKTsKKyAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsK
K30KKwogc3RhdGljIEpTVmFsdWVSZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNb
XSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBj
b250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdl
dFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMTg3MSw2ICsxODg4LDcgQEAgSlNTdGF0aWNGdW5j
dGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsg
ImR1bXBCYWNrRm9yd2FyZExpc3QiLCBkdW1wQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMiLCBkdW1wQ2hpbGRG
cmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGls
ZEZyYW1lc0FzVGV4dCIsIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisg
ICAgICAgIHsgImR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQiLCBkdW1wQ29uZmlndXJhdGlv
bkZvclZpZXdwb3J0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBk
dW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFi
YXNlQ2FsbGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAppbmRleCA3NTVhMmIyLi43NmUzOTI1IDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI3OSw2ICsyNzks
OCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFib3J0TW9kYWwoKTsKIAorICAgIHZvaWQgY29uZmln
dXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdo
dCk7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIEFQSSB0ZXN0IGZ1bmN0aW9ucyBzaG91bGQgcHJv
YmFibHkgYmUgbW92ZWQgdG8gcGxhdGZvcm0tc3BlY2lmaWMgCiAgICAgLy8gdW5pdCB0ZXN0cyBv
dXRzaWRlIG9mIERSVCBvbmNlIHRoZXkgZXhpc3QuCiAgICAgdm9pZCBhcGlUZXN0TmV3V2luZG93
RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJM
KTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0
Q29udHJvbGxlckd0ay5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwCmluZGV4IGQ4MzEwNzYuLjgyMDIzMWIgMTAwNjQ0Ci0tLSBh
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5j
cHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkg
THRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1hbG9uem9A
Z21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtODA0LDMgKzgwNSwxOSBAQCB2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29uc3QgY2hhciogZWRpdGluZ0JlaGF2aW9yKQog
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCiB7CiB9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChnaW50IGF2YWlsYWJs
ZVdpZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyh3ZWJWaWV3LCB3ZWJraXRfdmlld3BvcnRf
Y29uZmlnX25ldyg5ODAsIDMyMCwgNDgwLCAxNjApKTsKKworICAgIFdlYktpdFZpZXdwb3J0Q29u
ZmlnKiB2aWV3cG9ydENvbmZpZyA9IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfY29uZmln
KHdlYlZpZXcpOworICAgIHdlYmtpdF92aWV3cG9ydF9jb25maWdfY29tcHV0ZV9jb25maWd1cmF0
aW9uKHZpZXdwb3J0Q29uZmlnLCBtYWluRnJhbWUsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVI
ZWlnaHQpOworCisgICAgZnByaW50ZihzdGRvdXQsICJ2aWV3cG9ydCBzaXplICVkeCVkIHNjYWxl
ICVmIHdpdGggbGltaXRzIFslZiwgJWZdXG4iLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19nZXRfd2lkdGgodmlld3BvcnRDb25maWcpLAorICAgICAgICAgICAgd2Via2l0X3Zp
ZXdwb3J0X2NvbmZpZ19nZXRfaGVpZ2h0KHZpZXdwb3J0Q29uZmlnKSwKKyAgICAgICAgICAgIHdl
YmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKHZpZXdwb3J0Q29u
ZmlnKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X21pbmltdW1fc2Nh
bGVfZmFjdG9yKHZpZXdwb3J0Q29uZmlnKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9j
b25maWdfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yKHZpZXdwb3J0Q29uZmlnKSk7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>69762</attachid>
            <date>2010-10-05 01:23:48 -0700</date>
            <delta_ts>2010-10-07 06:20:59 -0700</delta_ts>
            <desc>Proposed Patch4</desc>
            <filename>viewport4.diff</filename>
            <type>text/plain</type>
            <size>35291</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAyMzExOTc4Li4zN2VkMzc1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMDUgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSBmb3IgZ2V0dGlu
ZyB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFt
OiBBZGRlZCB3ZWJraXR2aWV3cG9ydGNvbmZpZy5oIHdlYmtpdHZpZXdwb3J0Y29uZmlnLmNwcCAK
KwogMjAxMC0xMC0wNCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9HTlVtYWtl
ZmlsZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDFjOTVjZDEuLjA1MTI0MzcgMTAwNjQ0Ci0t
LSBhL0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMTYsNiArMzE2LDcg
QEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR2aWV3cG9ydGNvbmZpZy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJkYXRhc291cmNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5oIFwKQEAgLTM3OCw2ICszNzksNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJz
aW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuY3BwIFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAxYTJkMTg3Li4xZTcyNmM0IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDUgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1
cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRl
c3QgY2FzZXMgZm9yIFdlYktpdEd0aworCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6
IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4Y2VwdCB2aWV3cG9ydC00NS5odG1sCisKIDIwMTAtMTAt
MDQgIFlhZWwgQWhhcm9uICA8eWFlbC5haGFyb25Abm9raWEuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFudG9uaW8gR29tZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGNkMTJk
YTcuLjIxYmNhZGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01ODkzLDcgKzU4OTMs
NyBAQCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBh
dGguZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9y
dAorZmFzdC92aWV3cG9ydC92aWV3cG9ydC00NS5odG1sCiAKICMgUHJlLUhNVEw1IHBhcnNlciBx
dWlya3Mgb25seSBhcHBseSB0byB0aGUgbWFjIHBvcnQgZm9yIG5vdy4KIGZhc3QvcGFyc2VyL3By
ZS1odG1sNS1wYXJzZXItcXVpcmtzLmh0bWwKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvQ2hhbmdl
TG9nIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKaW5kZXggYzYwMmFjMS4uMWViZjA3NyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKQEAg
LTEsMyArMSw0NSBAQAorMjAxMC0xMC0wNSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gU3Vw
cG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgVGhpcyBwYXRjaCBhbGxvd3MgdG8g
c2V0IHRoZSB3aWR0aCwgaGVpZ2h0IGFuZCBzY2FsZSB2YWx1ZXMgb2YgdGhlIHZpZXcgCisgICAg
ICAgIGFyZWEgdXNlZCB0byBkaXNwbGF5IHdlYiBjb250ZW50IHRocm91Z2ggdGhlIHZpZXdwb3J0
IGNvbmZpZ3VyYXRpb24uCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRH
dGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmRpc3BhdGNoVmlld3BvcnRE
YXRhRGlkQ2hhbmdlKTogQWRkZWQgZm9yIGVtaXR0aW5nIHRoZSB2aWV3cG9ydC1jb25maWctY2hh
bmdlZCBzaWduYWwgd2l0aCB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVy
Q2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6RnJhbWVMb2FkZXJDbGllbnQ6OmRpc3Bh
dGNoRGlkQ29tbWl0TG9hZCk6IEVtaXQgdGhlIHZpZXdwb3J0LWNvbmZpZy1jaGFuZ2VkIHNpZ25h
bCBmb3IgaW5pdGlhbGl6aW5nIHRoZSB2aWV3cG9ydCBzZXR0aW5nLgorICAgICAgICAqIHdlYmtp
dC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAq
IHdlYmtpdC93ZWJraXRwcml2YXRlLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0
Y29uZmlnLmNwcDogQWRkZWQgZm9yIGdldHRpbmcgdGhlIHZpZXdwb3J0IGNvbmZpZ3VyYXRpb24u
CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2NsYXNzX2luaXQpOgorICAgICAgICAo
d2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19pbml0KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9j
b25maWdfbmV3KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X3dpZHRoKToK
KyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2hlaWdodCk6CisgICAgICAgICh3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3Rvcik6CisgICAgICAg
ICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rvcik6CisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9tYXhpbXVtX3NjYWxlX2ZhY3Rvcik6Cisg
ICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8pOgor
ICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaXNfdXNlcl9zY2FsYWJsZSk6Cisg
ICAgICAgICh3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc192YWxpZCk6CisgICAgICAgICh3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2NvbXB1dGVfY29uZmlndXJhdGlvbik6IENvbXB1dGUgdGhl
IG9wdGltYWwgdmlld3BvcnQgY29uZmlndXJhdGlvbiBnaXZlbiB0aGUgYXZhaWxhYmxlIHdpZHRo
L2hlaWdodC4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9jb25maWdfY29tcHV0ZV9jb25maWd1
cmF0aW9uX2ludGVybmFsKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcu
aDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X3NldF92aWV3cG9ydF9jb25maWcpOiBSZXBsYWNlcyB0aGUgV2ViS2l0Vmlld3Bv
cnRDb25maWcgaW5zdGFuY2UgdGhhdCBpcyBjdXJyZW50bHkgYXR0YWNoZWQgdG8gdGhlIFdlYktp
dFdlYlZpZXcuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyk6
IE9idGFpbnMgdGhlIFdlYktpdFZpZXdwb3J0Q29uZmlnIGFzc29jaWF0ZWQgd2l0aCB0aGUgV2Vi
S2l0V2ViVmlldy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOgorCiAyMDEwLTA5
LTI4ICBKZW5uIEJyYWl0aHdhaXRlICA8amVubmJAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcAppbmRleCA3ZTQwOTBiLi5lNTU0ZDVmIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAKKyNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCkBAIC02MDIsNyArNjAzLDE3IEBAIHZvaWQg
Q2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5n
PiYgZmlsZW5hbWVzLCBXZWJDCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJikKK3ZvaWQgQ2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0
YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBj
b25zdAoreworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZyA9IHdlYmtp
dF93ZWJfdmlld19nZXRfdmlld3BvcnRfY29uZmlnKG1fd2ViVmlldyk7CisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QgPSBjb3JlKG1fd2ViVmlldyktPmNocm9tZSgpLT5wYWdlUmVjdCgpOwor
CisgICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb25faW50ZXJu
YWwodmlld3BvcnRDb25maWcsIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZShzdGF0aWNfY2Fz
dDxnaW50PihyZWN0LndpZHRoKCkpLCBzdGF0aWNfY2FzdDxnaW50PihyZWN0LmhlaWdodCgpKSkp
OworCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2ViVmlldywgInZpZXdwb3J0LWNvbmZp
Zy1jaGFuZ2VkIiwgdmlld3BvcnRDb25maWcpOyAKK30KKwordm9pZCBDaHJvbWVDbGllbnQ6OnNl
dEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCAy
MWM0Njc3Li5hNmRhZTdkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50R3RrLmgKQEAgLTEwOSw2ICsxMDksOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRl
eHREaXJlY3Rpb24pOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0
YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBj
b25zdDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNp
ZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNl
UXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgYi9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAppbmRleCAxMzQw
MWY1Li40OTc4MjgxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtOTA1LDYgKzkwNSwxNCBAQCB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50OjpkaXNwYXRjaERpZENvbW1pdExvYWQoKQogICAgICAgICBnX29iamVjdF9ub3RpZnko
R19PQkpFQ1Qod2ViVmlldyksICJ0aXRsZSIpOwogICAgICAgICBnX29iamVjdF90aGF3X25vdGlm
eShHX09CSkVDVCh3ZWJWaWV3KSk7CiAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJW
aWV3LCAibG9hZC1jb21taXR0ZWQiLCBtX2ZyYW1lKTsKKworICAgICAgICAvKiBJbiBvcmRlciB0
byByZXNldCB0aGUgdmlld3BvcnQsIAorICAgICAgICAgKiBUaGUgInZpZXdwb3J0LWNvbmZpZy1j
aGFuZ2VkIiBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIG1haW4gZnJhbWUgaXMgbG9h
ZGVkLgorICAgICAgICAgKi8KKyAgICAgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJn
dW1lbnRzOworICAgICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogd2Vidmlld1ByaXYgPSBXRUJL
SVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUod2ViVmlldyk7CisgICAgICAgIHdlYmtpdF92aWV3cG9y
dF9jb25maWdfY29tcHV0ZV9jb25maWd1cmF0aW9uX2ludGVybmFsKHdlYnZpZXdQcml2LT52aWV3
cG9ydENvbmZpZy5nZXQoKSwgYXJndW1lbnRzLCBXZWJDb3JlOjpJbnRTaXplKDAsIDApKTsKKyAg
ICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ2aWV3cG9ydC1jb25maWctY2hh
bmdlZCIsIHdlYnZpZXdQcml2LT52aWV3cG9ydENvbmZpZy5nZXQoKSk7IAogICAgIH0KIAogICAg
IGdfb2JqZWN0X3RoYXdfbm90aWZ5KEdfT0JKRUNUKG1fZnJhbWUpKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5k
ZXggZmM3MWMyYy4uNjYzMzQ5ZiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBhdXRo
ZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0Y29uZmlnLmg+CiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3MuaD4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMDZhM2JmLi45Yjg0Y2UzIDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oCkBAIC05Miw2ICs5Miw5IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJL
aXRIaXRUZXN0UmVzdWx0Q2xhc3MgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzOwogdHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24gV2ViS2l0R2VvbG9jYXRpb25Q
b2xpY3lEZWNpc2lvbjsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURl
Y2lzaW9uQ2xhc3MgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzOwogCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRDb25maWcgV2ViS2l0Vmlld3BvcnRDb25maWc7Cit0
eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcyBXZWJLaXRWaWV3cG9ydENv
bmZpZ0NsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAppbmRleCA2MTZlZTZiLi4wYmFkOGIxIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRj
b25maWcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgogI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZy
YW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJl
cy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
QEAgLTE0MCw2ICsxNDIsNyBAQCBleHRlcm4gIkMiIHsKIAogICAgICAgICBXZWJLaXRXZWJGcmFt
ZSogbWFpbkZyYW1lOwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJCYWNrRm9yd2Fy
ZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmll
d3BvcnRDb25maWc+IHZpZXdwb3J0Q29uZmlnOwogCiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPEd0
a01lbnU+IGN1cnJlbnRNZW51OwogICAgICAgICBnaW50IGxhc3RQb3B1cFhQb3NpdGlvbjsKQEAg
LTMxNiw2ICszMTksOSBAQCBleHRlcm4gIkMiIHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGlj
eURlY2lzaW9uKgogICAgIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdl
YktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKIAorICAgIHZvaWQgCisgICAg
d2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb25faW50ZXJuYWwoV2Vi
S2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0Q29uZmlnLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50cyYgYXJndW1lbnRzLCBXZWJDb3JlOjpJbnRTaXplIGF2YWlsYWJsZVNpemUpOwor
CiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byB3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIG9uY2Ug
dGhlIEFQSSBpcyBhZ3JlZWQgdXBvbi4KICAgICBXRUJLSVRfQVBJIFNvdXBNZXNzYWdlKgogICAg
IHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3Qq
IHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRj
b25maWcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNDcyM2UKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGNvbmZpZy5jcHAKQEAgLTAsMCAr
MSwyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRw
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHZpZXdwb3J0Y29uZmln
LmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
Vmlld3BvcnRDb25maWcsIHdlYmtpdF92aWV3cG9ydF9jb25maWcsIEdfVFlQRV9PQkpFQ1QpOwor
CitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSB7CisgICAgZ2ludCB3aWR0aDsK
KyAgICBnaW50IGhlaWdodDsKKyAgICBnZmxvYXQgdGFyZ2V0RGVuc2l0eURQSTsKKyAgICBnZmxv
YXQgaW5pdGlhbFNjYWxlRmFjdG9yOworICAgIGdmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7Cisg
ICAgZ2Zsb2F0IG1heGltdW1TY2FsZUZhY3RvcjsKKyAgICBnYm9vbGVhbiBpc1VzZXJTY2FsYWJs
ZTsKKyAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAgIGdpbnQgZGV2aWNlRFBJOworICAgIGdpbnQg
ZGV2aWNlV2lkdGg7CisgICAgZ2ludCBkZXZpY2VIZWlnaHQ7CisgICAgZ2ludCBkZXNrdG9wV2lk
dGg7Cit9OworCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9DT05GSUdfR0VUX1BSSVZBVEUob2Jq
KSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9WSUVX
UE9SVF9DT05GSUcsIFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSkpCisKK3N0YXRpYyB2b2lk
IHdlYmtpdF92aWV3cG9ydF9jb25maWdfY2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydENvbmZpZ0Ns
YXNzKiB2aWV3cG9ydENvbmZpZ0NsYXNzKQoreworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSh2aWV3cG9ydENvbmZpZ0NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRl
KSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9jb25maWdfaW5pdChXZWJLaXRW
aWV3cG9ydENvbmZpZyogdmlld3BvcnQpCit7CisgICAgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2
YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJVkFURSh2aWV3cG9ydCk7
CisgICAgdmlld3BvcnQtPnByaXYgPSBwcml2OworCisgICAgcHJpdi0+d2lkdGggPSAwOworICAg
IHByaXYtPmhlaWdodCA9IDA7CisgICAgcHJpdi0+dGFyZ2V0RGVuc2l0eURQSSA9IC0xLjA7Cisg
ICAgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT5taW5pbXVtU2Nh
bGVGYWN0b3IgPSAtMS4wOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9IC0xLjA7Cisg
ICAgcHJpdi0+aXNVc2VyU2NhbGFibGUgPSB0cnVlOworICAgIHByaXYtPmlzVmFsaWQgPSBmYWxz
ZTsKK30KKworV2ViS2l0Vmlld3BvcnRDb25maWcqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfbmV3
KGdpbnQgZGVza3RvcFdpZHRoLCBnaW50IGRldmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwg
Z2ludCBkZXZpY2VEUEkpCit7CisgICAgV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0Q29u
ZmlnID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJRyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklF
V1BPUlRfQ09ORklHLCBOVUxMKSk7CisgICAgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJVkFURSh2aWV3cG9ydENvbmZpZyk7
CisKKyAgICBwcml2LT5kZXNrdG9wV2lkdGggPSBkZXNrdG9wV2lkdGg7CisgICAgcHJpdi0+ZGV2
aWNlV2lkdGggPSBkZXZpY2VXaWR0aDsKKyAgICBwcml2LT5kZXZpY2VIZWlnaHQgPSBkZXZpY2VI
ZWlnaHQ7CisgICAgcHJpdi0+ZGV2aWNlRFBJID0gZGV2aWNlRFBJOworICAgIHByaXYtPmlzVmFs
aWQgPSBmYWxzZTsKKworICAgIHJldHVybiB2aWV3cG9ydENvbmZpZzsKK30KKworLyoqCisgKiB3
ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF93aWR0aDoKKyAqIEB2aWV3cG9ydENvbmZpZzogYSAj
V2ViS2l0Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgdmll
d3BvcnQgaW4gcGl4ZWxzLgorICoKKyAqIFJldHVybnM6IHRoZSB3aWR0aCBvZiB0aGUgdmlld3Bv
cnQgaW4gcGl4ZWxzLgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnaW50IHdlYmtpdF92aWV3
cG9ydF9jb25maWdfZ2V0X3dpZHRoKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZp
ZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklH
KHZpZXdwb3J0Q29uZmlnKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRDb25maWctPnByaXYt
PndpZHRoOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2hlaWdodDoK
KyAqIEB2aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1
cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBSZXR1cm5z
OiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBpbiBwaXhlbHMuCisgKgorICogU2luY2U6IDEu
My40CisgKi8KK2dpbnQgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaGVpZ2h0KFdlYktpdFZp
ZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfVklFV1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwgMCk7CisKKyAgICBy
ZXR1cm4gdmlld3BvcnRDb25maWctPnByaXYtPmhlaWdodDsKK30KKworLyoqCisgKiB3ZWJraXRf
dmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvcjoKKyAqIEB2aWV3cG9ydENv
bmZpZzogYSAjV2ViS2l0Vmlld3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0aWFs
IHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgaW5pdGlhbCBzY2Fs
ZSBvZiB0aGUgdmlld3BvcnQuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJr
aXRfdmlld3BvcnRfY29uZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvcihXZWJLaXRWaWV3cG9y
dENvbmZpZyAqdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VC
S0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyksIDApOworCisgICAgcmV0dXJu
IHZpZXdwb3J0Q29uZmlnLT5wcml2LT5pbml0aWFsU2NhbGVGYWN0b3I7Cit9CisKKy8qKgorICog
d2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWluaW11bV9zY2FsZV9mYWN0b3I6CisgKiBAdmll
d3BvcnRDb25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB0aGUg
bWluaW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQuCisgKgorICogUmV0dXJuczogdGhl
IG1pbmltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0CisgKgorICogU2luY2U6IDEuMy40
CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9taW5pbXVtX3NjYWxlX2Zh
Y3RvcihXZWJLaXRWaWV3cG9ydENvbmZpZyAqdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZyks
IDApOworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2LT5taW5pbXVtU2NhbGVGYWN0
b3I7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWF4aW11bV9zY2Fs
ZV9mYWN0b3I6CisgKiBAdmlld3BvcnRDb25maWc6IGEgI1dlYktpdFZpZXdwb3J0Q29uZmlnCisg
KgorICogUmV0dXJucyB0aGUgbWF4aW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQuCisg
KgorICogUmV0dXJuczogdGhlIG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0Cisg
KgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dl
dF9tYXhpbXVtX3NjYWxlX2ZhY3RvcihXZWJLaXRWaWV3cG9ydENvbmZpZyAqdmlld3BvcnRDb25m
aWcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJ
Ryh2aWV3cG9ydENvbmZpZyksIDApOworCisgICAgcmV0dXJuIHZpZXdwb3J0Q29uZmlnLT5wcml2
LT5tYXhpbXVtU2NhbGVGYWN0b3I7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvCisgKiBAdmlld3BvcnRDb25maWc6IGEgI1dlYktpdFZp
ZXdwb3J0Q29uZmlnCisgKgorICogUmV0dXJucyB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHZhbHVl
LgorICoKKyAqIFJldHVybnM6IHRoZSBkZXZpY2UgcGl4ZWwgcmF0aW8gdmF1bGUuCisgKgorICog
U2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9kZXZp
Y2VfcGl4ZWxfcmF0aW8oV2ViS2l0Vmlld3BvcnRDb25maWcgKnZpZXdwb3J0Q29uZmlnKQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9DT05GSUcodmlld3Bv
cnRDb25maWcpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydENvbmZpZy0+cHJpdi0+dGFyZ2V0
RGVuc2l0eURQSTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc191
c2VyX3NjYWxhYmxlOgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJLaXRWaWV3cG9ydENvbmZp
ZworICoKKyAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHVzZXIgY2FuIHpvb20gaW4g
YW5kIG91dC4KKyAqCisgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSB1c2VyIGNhbiB6b29tIGluIGFu
ZCBvdXQuIAorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnYm9vbGVhbiB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2dldF9pc191c2VyX3NjYWxhYmxlKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3
cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BP
UlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwgZmFsc2UpOworCisgICAgcmV0dXJuIHZpZXdwb3J0
Q29uZmlnLT5wcml2LT5pc1VzZXJTY2FsYWJsZTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3Bv
cnRfY29uZmlnX2dldF9pc192YWxpZDoKKyAqIEB2aWV3cG9ydENvbmZpZzogYSAjV2ViS2l0Vmll
d3BvcnRDb25maWcKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViS2l0Vmlld3Bv
cnRDb25maWcgaXMgdmFsaWQuCisgKgorICogUmV0dXJuczogVHJ1ZSBpZiBhIFdlYktpdFZpZXdw
b3J0Q29uZmlnIGlzIHZhbGlkCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dib29sZWFuIHdl
YmtpdF92aWV3cG9ydF9jb25maWdfZ2V0X2lzX3ZhbGlkKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2
aWV3cG9ydENvbmZpZykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklF
V1BPUlRfQ09ORklHKHZpZXdwb3J0Q29uZmlnKSwgZmFsc2UpOworCisgICAgcmV0dXJuIHZpZXdw
b3J0Q29uZmlnLT5wcml2LT5pc1ZhbGlkOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9j
b25maWdfY29tcHV0ZV9jb25maWd1cmF0aW9uOgorICogQHZpZXdwb3J0Q29uZmlnOiBhICNXZWJL
aXRWaWV3cG9ydENvbmZpZworICogQG1haW5GcmFtZTogYSAjV2ViS2l0V2ViRnJhbWUKKyAqIEBh
dmFpbGFibGVfd2lkdGg6IHRoZSBhdmFpbGFibGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0CisgKiBA
YXZhaWxhYmxlX2hlaWdodDogdGhlIGF2YWlsYWJsZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0Cisg
KgorICogQ29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3cG9ydCBjb25maWd1cmF0aW9uIGdpdmVuIHRo
ZSBhdmFpbGFibGVfd2lkdGggYW5kIGF2YWlsYWJsZV9oZWlnaHQuCisgKiBCZWZvcmUgY2FsbGlu
ZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZGV2aWNlIHdpZHRoL2hlaWdodC9EUEkgYW5kIHRoZSBkZXNr
dG9wIHdpZHRoIHNob3VsZCBiZSBzZXQgdGhyb3VnaCB0aGUgd2Via2l0X3ZpZXdwb3J0X2NvbmZp
Z19uZXcuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2Nv
bmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb24oV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0
Q29uZmlnLCBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lLCBnaW50IGF2YWlsYWJsZV93aWR0aCwg
Z2ludCBhdmFpbGFibGVfaGVpZ2h0KQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOworICAgCisgICAgV2ViQ29yZTo6RnJh
bWUqIGZyYW1lID0gV2ViS2l0Ojpjb3JlKG1haW5GcmFtZSk7CisgICAgV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHMgYXJndW1lbnRzID0gZnJhbWUtPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1l
bnRzKCk7CisgICAgCisgICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3Vy
YXRpb25faW50ZXJuYWwodmlld3BvcnRDb25maWcsIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6
ZShhdmFpbGFibGVfd2lkdGgsIGF2YWlsYWJsZV9oZWlnaHQpKTsKK30KKworLy8gZm9yIGludGVy
bmFsIHVzZSBvbmx5Cit2b2lkIHdlYmtpdF92aWV3cG9ydF9jb25maWdfY29tcHV0ZV9jb25maWd1
cmF0aW9uX2ludGVybmFsKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZywgY29u
c3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6
ZSBhdmFpbGFibGVTaXplKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQ
T1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOworCisgICAgLy8gY2hlY2sgd2hldGhlciB0aGUg
YXJndW1lbnRzIHBhcmFtZXRlciBpcyB2YWxpZAorICAgIGlmIChhdmFpbGFibGVTaXplLmlzRW1w
dHkoKSkgeworICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2luaXQodmlld3BvcnRDb25m
aWcpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViS2l0Vmlld3BvcnRDb25maWdQ
cml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0NPTkZJR19HRVRfUFJJVkFURSh2aWV3cG9y
dENvbmZpZyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRDb25maWd1cmF0aW9uIGNvbmYgPSBXZWJD
b3JlOjpmaW5kQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0RGF0YShhcmd1bWVudHMsIHByaXYtPmRl
c2t0b3BXaWR0aCwgcHJpdi0+ZGV2aWNlV2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdi0+ZGV2aWNlSGVpZ2h0LCBwcml2LT5kZXZpY2VEUEksIGF2YWlsYWJsZVNpemUpOwor
CisgICAgcHJpdi0+d2lkdGggPSBjb25mLmxheW91dFZpZXdwb3J0LndpZHRoKCk7CisgICAgcHJp
di0+aGVpZ2h0ID0gY29uZi5sYXlvdXRWaWV3cG9ydC5oZWlnaHQoKTsKKyAgICBwcml2LT50YXJn
ZXREZW5zaXR5RFBJID0gY29uZi5kZXZpY2VQaXhlbFJhdGlvOworICAgIHByaXYtPmluaXRpYWxT
Y2FsZUZhY3RvciA9IGNvbmYuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZh
Y3RvciA9IGNvbmYubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9
IGNvbmYubWF4aW11bVNjYWxlOworICAgIHByaXYtPmlzVXNlclNjYWxhYmxlID0gYXJndW1lbnRz
LnVzZXJTY2FsYWJsZTsKKyAgICAKKyAgICBpZiAocHJpdi0+d2lkdGggPiAwKSAKKyAgICAgICAg
cHJpdi0+aXNWYWxpZCA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBwcml2LT5pc1ZhbGlkID0g
ZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGNv
bmZpZy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDkwY2U3Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRjb25maWcuaApAQCAtMCwwICsxLDk1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgd2Via2l0dmlld3BvcnRjb25maWdfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGNvbmZp
Z19oCisKKyNpbmNsdWRlIDxnbGliLW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRk
ZWZpbmVzLmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9WSUVXUE9S
VF9DT05GSUcgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfdHlwZSgpKQor
I2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHKG9iaikgICAgICAgICAgICAoR19UWVBFX0NI
RUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2Vi
S2l0Vmlld3BvcnRDb25maWcpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQ09ORklHX0NMQVNT
KGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9UWVBF
X1ZJRVdQT1JUX0NPTkZJRywgV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcykpCisjZGVmaW5lIFdF
QktJVF9JU19WSUVXUE9SVF9DT05GSUcob2JqKSAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFO
Q0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQ09ORklHKSkKKyNkZWZpbmUgV0VC
S0lUX0lTX1ZJRVdQT1JUX0NPTkZJR19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9DT05GSUcpKQorI2RlZmluZSBXRUJL
SVRfVklFV1BPUlRfQ09ORklHX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9D
TEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0NPTkZJRywgV2ViS2l0Vmlld3BvcnRD
b25maWdDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydENvbmZpZ1ByaXZh
dGUgV2ViS2l0Vmlld3BvcnRDb25maWdQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0
Q29uZmlnIHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRl
ID4qLworICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVj
dCBfV2ViS2l0Vmlld3BvcnRDb25maWdDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgV2ViS2l0
Vmlld3BvcnRDb25maWcqIAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19uZXcgICAgICAgICAgICAg
ICAgICAgICAgKGdpbnQgZGVza3RvcFdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmljZVdpZHRoLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50IGRldmljZUhlaWdodCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBkZXZp
Y2VEUEkpOworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF90
eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3Zp
ZXdwb3J0X2NvbmZpZ19nZXRfd2lkdGggICAgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0Q29u
ZmlnKiB2aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19nZXRfaGVpZ2h0ICAgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2
aWV3cG9ydENvbmZpZyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfY29u
ZmlnX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdw
b3J0Q29uZmlnKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9ydF9jb25maWdf
Z2V0X21pbmltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRD
b25maWcpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRf
bWF4aW11bV9zY2FsZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZp
Zyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0IAord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfZGV2
aWNlX3BpeGVsX3JhdGlvICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZyk7
CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF9pc191
c2VyX3NjYWxhYmxlICAgICAoV2ViS2l0Vmlld3BvcnRDb25maWcgKnZpZXdwb3J0Q29uZmlnKTsK
KworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfaXNfdmFs
aWQgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0Q29uZmlnKiB2aWV3cG9ydENvbmZpZyk7CisK
K1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF92aWV3cG9ydF9jb25maWdfY29tcHV0ZV9jb25maWd1
cmF0aW9uICAgIChXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdFdlYkZyYW1l
KiBtYWluRnJhbWUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdpbnQgYXZhaWxhYmxlX3dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlX2hlaWdodCk7CisKK0dfRU5EX0RF
Q0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmll
dy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA3NjI4ODhh
Li42ZGRiMmJhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNw
cAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTAsNiArMTAs
NyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgogICogIENvcHly
aWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVzIEluYy4KICAqICBDb3B5
cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvb25l
IEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC0xNzMsNiArMTc0
LDcgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0NBTkNFTExFRCwK
ICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKKyAgICBWSUVXUE9SVF9DT05G
SUdfQ0hBTkdFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTE2Niw2ICsxMTY4LDcgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAg
IHByaXYtPndlYldpbmRvd0ZlYXR1cmVzLmNsZWFyKCk7CiAgICAgcHJpdi0+bWFpblJlc291cmNl
LmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7CisgICAgcHJpdi0+dmll
d3BvcnRDb25maWcuY2xlYXIoKTsKIAogICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9w
cGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRyb3Bw
aW5nQ29udGV4dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJv
cHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmJl
Z2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQpAQCAtMjQzMCw2ICsy
NDMzLDI5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdl
YlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZS
QU1FKTsKIAogICAgIC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtY29uZmlnLWNo
YW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNp
Z25hbAorICAgICAqIEB3ZWJfdmlld3BvcnRfY29uZmlnOiB0aGUgI1dlYktpdFZpZXdwb3J0Q29u
ZmlnIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbi4KKyAgICAgKgorICAgICAq
IFRoZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtY29uZmlnLWNoYW5nZWQgd2lsbCBiZSBlbWl0
dGVkIHdoZW4gYSB3ZWIgcGFnZSAKKyAgICAgKiBoYXMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMu
IEFsc28sIGl0IHdpbGwgYmUgZW1pdHRlZCB3aGVuIHRoZSBtYWluIGZyYW1lIAorICAgICAqIGlz
IGxvYWRlZCBmb3IgaW5pdGlhbGl6aW5nIHRoZSB2aWV3cG9ydC4KKyAgICAgKiBUaGUgdmlld3Bv
cnQgY29uZmlndXJhdGlvbiAgYWxsb3dzIHRvIHNldCB0aGUgd2lkdGgsIGhlaWdodCBhbmQgc2Nh
bGUgdmFsdWVzIG9mIHRoZSB2aWV3IAorICAgICAqIGFyZWEgdXNlZCB0byBkaXNwbGF5IHdlYiBj
b250ZW50CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjQKKyAgICAgKi8KKyAgICB3ZWJraXRf
d2ViX3ZpZXdfc2lnbmFsc1tWSUVXUE9SVF9DT05GSUdfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXco
InZpZXdwb3J0LWNvbmZpZy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNT
KHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5f
TEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVM
TCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisg
ICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQ
T1JUX0NPTkZJRyk7CisgICAgICAgICAgICAKKworICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRp
b25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+Y3JlYXRl
X3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3OwpAQCAtMzA4
OSw3ICszMTE1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKICAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPndlYlNldHRpbmdzLmdl
dCgpLCAibm90aWZ5IiwgR19DQUxMQkFDSyh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5
KSwgd2ViVmlldyk7CiAKICAgICBwcml2LT53ZWJXaW5kb3dGZWF0dXJlcyA9IGFkb3B0UGxhdGZv
cm1SZWYod2Via2l0X3dlYl93aW5kb3dfZmVhdHVyZXNfbmV3KCkpOwotCisgICAgcHJpdi0+dmll
d3BvcnRDb25maWcgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF92aWV3cG9ydF9jb25maWdfbmV3
KDAsIDAsIDAsIDApKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMgPSBhZG9wdFBsYXRmb3JtUmVm
KGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBn
X29iamVjdF91bnJlZikpOwogCiAgICAgcHJpdi0+Y3VycmVudENsaWNrQ291bnQgPSAwOwpAQCAt
NDQ1MSw2ICs0NDc3LDQ2IEBAIGdib29sZWFuIHdlYmtpdF93ZWJfdmlld19nZXRfdmlld19zb3Vy
Y2VfbW9kZSAoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gRkFMU0U7CiB9CiAK
Ky8qKgorICogd2Via2l0X3dlYl92aWV3X3NldF92aWV3cG9ydF9jb25maWc6CisgKiBAd2ViVmll
dzogYSAjV2ViS2l0V2ViVmlldworICogQHZpZXdwb3J0Q29uZmlnOiAodHJhbnNmZXIgbm9uZSk6
IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgdG8gYmUgc2V0CisgKgorICogUmVwbGFjZXMgdGhl
ICNXZWJLaXRWaWV3cG9ydENvbmZpZyBpbnN0YW5jZSB0aGF0IGlzIGN1cnJlbnRseSBhdHRhY2hl
ZAorICogdG8gQHdlYlZpZXcgd2l0aCBAdmlld3BvcnRDb25maWcuIFRoZSByZWZlcmVuY2UgaGVs
ZCBieSB0aGUgQHdlYlZpZXcgb24KKyAqIHRoZSBvbGQgI1dlYktpdFZpZXdwb3J0Q29uZmlnIGlu
c3RhbmNlIGlzIGRyb3BwZWQsIGFuZCB0aGUgcmVmZXJlbmNlCisgKiBjb3VudCBvZiBAdmlld3Bv
cnRDb25maWcgaXMgaW5jcmVhc2VkLgorICogCisgKiBTaW5jZTogMS4zLjQKKyAqLwordm9pZCB3
ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3
LCBXZWJLaXRWaWV3cG9ydENvbmZpZyogdmlld3BvcnRDb25maWcpCit7CisgICAgZ19yZXR1cm5f
aWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0NPTkZJRyh2aWV3cG9ydENvbmZpZykpOworCisgICAgd2Vi
Vmlldy0+cHJpdi0+dmlld3BvcnRDb25maWcgPSB2aWV3cG9ydENvbmZpZzsKK30KKworLyoqCisg
KiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZzoKKyAqIEB3ZWJWaWV3OiBhICNX
ZWJLaXRXZWJWaWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktpdFZpZXdwb3J0Q29uZmlnIGFz
c29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBUaGUgI1dlYktpdFdlYlZpZXcg
YWx3YXlzIGhhcyBhbiBhc3NvY2lhdGVkCisgKiBpbnN0YW5jZSBvZiAjV2ViS2l0Vmlld3BvcnRD
b25maWcuIFRoZSByZWZlcmVuY2UgdGhhdCBpcyByZXR1cm5lZCBieQorICogdGhpcyBjYWxsIGlz
IG93bmVkIGJ5IHRoZSAjV2ViS2l0V2ViVmlldy4gCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJh
bnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRDb25maWcgaW5zdGFuY2UKKyAqCisgKiBT
aW5jZTogMS4zLjQKKyAqLworV2ViS2l0Vmlld3BvcnRDb25maWcqIHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld3BvcnRfY29uZmlnKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1
cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKyAgIAor
ICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT52aWV3cG9ydENvbmZpZy5nZXQoKTsKK30KKwogLy8g
SW50ZXJuYWwgc3VicmVzb3VyY2UgbWFuYWdlbWVudAogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYWRk
X3Jlc291cmNlKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIs
IFdlYktpdFdlYlJlc291cmNlKiB3ZWJSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaAppbmRleCBhMzIwMTMxLi5iZGY4MDg0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5o
CkBAIC00MDEsNiArNDAxLDEzIEBAIHdlYmtpdF9nZXRfY2FjaGVfbW9kZWwgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgV2ViS2l0RE9NRG9jdW1lbnQgKgogd2Vi
a2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAgICAgICAgKFdlYktpdFdlYlZp
ZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQSSBXZWJLaXRWaWV3cG9ydENvbmZpZyog
Cit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCitXRUJLSVRfQVBJIHZvaWQgCit3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3ZpZXdwb3J0X2NvbmZpZyAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAg
ICAgKndlYlZpZXcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYktpdFZpZXdwb3J0Q29uZmlnICp2aWV3cG9ydENvbmZpZyk7CisKIEdfRU5EX0RF
Q0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDViNjYyYWUuLjllMmU2NDQgMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OSBAQAorMjAxMC0xMC0wNSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gU3VwcG9ydCBmb3Ig
dmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRlc3RpbmcgdGhlIHZp
ZXdwb3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKworICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGR1bXBDb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQpOiBBZGRlZCBKYXZhU2NyaXB0IEFQSSBmb3Igc2V0dGluZyB0aGUgc2l6ZSBv
ZiB0aGUgdmlldyBhcmVhLgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1
bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIu
aDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsu
Y3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydCk6IEFkZGVkIGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorCiAyMDEw
LTEwLTA0ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggZWU0NDMyNS4uZTRlNGYxMyAxMDA2NDQKLS0t
IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25l
IEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTEzOSw2ICsxNDAsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlMKICAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBD
b25maWd1cmF0aW9uRm9yVmlld3BvcnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQorewor
ICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGF2YWlsYWJsZVdpZHRoID0gSlNWYWx1ZVRv
TnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpl
eGNlcHRpb24pOworICAgIGRvdWJsZSBhdmFpbGFibGVIZWlnaHQgPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0
PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsK
KyAgICBjb250cm9sbGVyLT5jb25maWd1cmF0aW9uRm9yVmlld3BvcnQoc3RhdGljX2Nhc3Q8aW50
PihhdmFpbGFibGVXaWR0aCksIHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlSGVpZ2h0KSk7Cisg
ICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRp
YyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9
IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRo
aXNPYmplY3QpKTsKQEAgLTE4NzEsNiArMTg4OCw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91
dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJkdW1wQmFja0Zv
cndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQ
b3NpdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1Rl
eHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJk
dW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0IiwgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRE9NQXNXZWJBcmNoaXZlIiwgZHVtcERPTUFzV2Vi
QXJjaGl2ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBEYXRhYmFzZUNhbGxiYWNr
cyIsIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1
bXBFZGl0aW5nQ2FsbGJhY2tzIiwgZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
LmgKaW5kZXggNzU1YTJiMi4uNzZlMzkyNSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0yNzksNiArMjc5LDggQEAgcHVibGlj
OgogCiAgICAgdm9pZCBhYm9ydE1vZGFsKCk7CiAKKyAgICB2b2lkIGNvbmZpZ3VyYXRpb25Gb3JW
aWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpOworCiAgICAg
Ly8gVGhlIGZvbGxvd2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIG1v
dmVkIHRvIHBsYXRmb3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBE
UlQgb25jZSB0aGV5IGV4aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFz
ZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7CmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJH
dGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9s
bGVyR3RrLmNwcAppbmRleCBkODMxMDc2Li4zYWE3MjE3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
QEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KICAqIENv
cHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTgwNCwzICs4MDUsMTkgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0
RWRpdGluZ0JlaGF2aW9yKGNvbnN0IGNoYXIqIGVkaXRpbmdCZWhhdmlvcikKIHZvaWQgTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmFib3J0TW9kYWwoKQogewogfQorCit2b2lkIExheW91dFRlc3RDb250
cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQg
YXZhaWxhYmxlSGVpZ2h0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRf
d2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIHdlYmtpdF93ZWJfdmlld19z
ZXRfdmlld3BvcnRfY29uZmlnKHdlYlZpZXcsIHdlYmtpdF92aWV3cG9ydF9jb25maWdfbmV3KDk4
MCwgMzIwLCA0ODAsIDE2MCkpOworCisgICAgV2ViS2l0Vmlld3BvcnRDb25maWcqIHZpZXdwb3J0
Q29uZmlnID0gd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9jb25maWcod2ViVmlldyk7Cisg
ICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19jb21wdXRlX2NvbmZpZ3VyYXRpb24odmlld3BvcnRD
b25maWcsIG1haW5GcmFtZSwgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCk7CisKKyAg
ICBmcHJpbnRmKHN0ZG91dCwgInZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1p
dHMgWyVmLCAlZl1cbiIsCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmlnX2dldF93
aWR0aCh2aWV3cG9ydENvbmZpZyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfY29uZmln
X2dldF9oZWlnaHQodmlld3BvcnRDb25maWcpLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0
X2NvbmZpZ19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3Iodmlld3BvcnRDb25maWcpLAorICAgICAg
ICAgICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWluaW11bV9zY2FsZV9mYWN0b3Iodmll
d3BvcnRDb25maWcpLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0X2NvbmZpZ19nZXRfbWF4
aW11bV9zY2FsZV9mYWN0b3Iodmlld3BvcnRDb25maWcpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CmluZGV4IDZkZDYwOWMuLjcwMzRmNmQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcApAQCAtMTM5MCwz
ICsxMzkwLDcgQEAgdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0RWRpdGluZ0JlaGF2aW9y
KGNvbnN0IGNoYXIqIGVkaXRpbmdCZWhhdmlvcikKIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmFib3J0TW9kYWwoKQogewogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1
cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0
KQoreworfQo=
</data>
<flag name="review"
          id="59482"
          type_id="1"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70074</attachid>
            <date>2010-10-07 06:20:59 -0700</date>
            <delta_ts>2010-10-13 15:51:05 -0700</delta_ts>
            <desc>Proposed Patch5</desc>
            <filename>viewport5.diff</filename>
            <type>text/plain</type>
            <size>35022</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA0OTQxYjc0Li45Nzk5N2U4
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSBmb3IgZ2V0dGlu
ZyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBB
ZGRlZCB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMu
Y3BwIAorCiAyMDEwLTEwLTA2ICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAt
LWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggMWM5NWNkMS4uZmZj
NmE0MSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAg
LTMxNiw2ICszMTYsNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaCBcCiAJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmggXAogCSQoc3JjZGlyKS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5oIFwKQEAgLTM3OCw2ICszNzksNyBAQCB3ZWJr
aXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR2ZXJzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmll
d3BvcnRhdHRyaWJ1dGVzLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2Zv
cndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5j
cHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZWVm
NGVhOC4uNGUwYTExYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTA2ICBKb29uZSBI
dXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAg
ICBJbmNsdWRlZCB2aWV3cG9ydCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAgICAgICAq
IHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQgdmlld3Bv
cnQtNDUuaHRtbC4KKwogMjAxMC0xMC0wNiAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xpbmdA
bm9raWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHMvUmVuZGVyUGF0aC9SZW5kZXJTVkdQ
YXRoLwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAzOTg3NGQzLi44MTEyMWU3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTg5Myw3ICs1ODkzLDcgQEAgZnVsbHNjcmVlbi8K
IGNhbnZhcy9waGlsaXAvdGVzdHMvMmQucGF0aC5pc1BvaW50SW5QYXRoLmVkZ2UuaHRtbAogCiAj
IHZpZXdwb3J0IG1ldGEgdGFnIHN1cHBvcnQKLWZhc3Qvdmlld3BvcnQKK2Zhc3Qvdmlld3BvcnQv
dmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkg
dG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1
aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IGIyNDAwYTIuLmQ5ODA3ZTQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIw
MTAtMTAtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0
IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIHRvIHNldCB0aGUgd2lkdGggYW5k
IGluaXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0CisgICAgICAgIHVzZWQgdG8gZGlzcGxheSB3
ZWIgY29udGVudCB0aHJvdWdoIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hy
b21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6IEFkZGVkIGZvciBlbWl0
dGluZyB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKFdl
YktpdDo6Q2hyb21lQ2xpZW50OjpzZXRDdXJzb3IpOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRl
Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHA6IEFkZGVk
IGZvciBnZXR0aW5nIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19pbml0KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25l
dyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGgpOgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdodCk6CisgICAgICAgICh3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3IpOgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9y
KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9tYXhpbXVtX3NjYWxl
X2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfZGV2aWNl
X3BpeGVsX3JhdGlvKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9p
c191c2VyX3NjYWxhYmxlKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dl
dF9pc192YWxpZCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRh
dGlvbik6IENvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmlidXRlcyBnaXZlbiB0aGUg
YXZhaWxhYmxlIHdpZHRoL2hlaWdodCBvZiB0aGUgdmlld3BvcnQuCisgICAgICAgICh3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbCk6CisgICAgICAgICogd2Vi
a2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKToKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19p
bml0KToKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMp
OiBJbml0aWFsaXplIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKTogT2J0YWluIHRoZSBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBXZWJLaXRXZWJWaWV3LgorICAgICAgICAq
IHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisKIDIwMTAtMTAtMDYgIFNoZXJpZmYgQm90ICA8d2Vi
a2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcg
b3V0IHI2OTIwMS4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAppbmRleCA3ZTQwOTBiLi4yMjNiMDM2IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAKKyNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1
ZGUgIkZpbGVDaG9vc2VyLmgiCkBAIC02MDIsNyArNjAzLDE3IEBAIHZvaWQgQ2hyb21lQ2xpZW50
OjpjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgZmlsZW5hbWVz
LCBXZWJDCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMo
ZmlsZW5hbWVzKSk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vy
c29yJikKK3ZvaWQgQ2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShj
b25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdAoreworICAg
IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gd2Via2l0X3dl
Yl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKG1fd2ViVmlldyk7CisgICAgV2ViQ29yZTo6
RmxvYXRSZWN0IHJlY3QgPSBjb3JlKG1fd2ViVmlldyktPmNocm9tZSgpLT5wYWdlUmVjdCgpOwor
CisgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb25faW50ZXJuYWwodmll
d3BvcnRBdHRyaWJ1dGVzLCBhcmd1bWVudHMsIFdlYkNvcmU6OkludFNpemUoc3RhdGljX2Nhc3Q8
Z2ludD4ocmVjdC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC5oZWlnaHQoKSkpKTsK
KworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYlZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1
dGVzLWNoYW5nZWQiLCB2aWV3cG9ydEF0dHJpYnV0ZXMpOyAKK30KKwordm9pZCBDaHJvbWVDbGll
bnQ6OnNldEN1cnNvcihjb25zdCBXZWJDb3JlOjpDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApp
bmRleCAyMWM0Njc3Li5hNmRhZTdkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmgKQEAgLTEwOSw2ICsxMDksOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNv
cmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdw
b3J0RGF0YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1l
bnRzKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUq
KTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERh
dGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaAppbmRleCBmYzcxYzJjLi4yNDI4ZjYyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXQuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMzAsNiArMzAs
NyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
c291cGF1dGhkaWFsb2cuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1
dGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0
dGluZ3MuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMDZhM2JmLi4zOTljYjRj
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC05Miw2ICs5Miw5IEBAIHR5cGVkZWYg
c3RydWN0IF9XZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3MgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNz
OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24gV2ViS2l0
R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbjsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2Nh
dGlvblBvbGljeURlY2lzaW9uQ2xhc3MgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbkNs
YXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXNDbGFzcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzczsKKwogR19FTkRfREVDTFMKIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggNjE2ZWU2Yi4uYTU0NWQ1ZCAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0
cmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KQEAgLTYzLDYgKzY0LDcgQEAK
ICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEFyZ3Vt
ZW50cy5oIgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlP
cmlnaW4uaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMTQwLDYgKzE0Miw3IEBAIGV4dGVy
biAiQyIgewogCiAgICAgICAgIFdlYktpdFdlYkZyYW1lKiBtYWluRnJhbWU7CiAgICAgICAgIFBs
YXRmb3JtUmVmUHRyPFdlYktpdFdlYkJhY2tGb3J3YXJkTGlzdD4gYmFja0ZvcndhcmRMaXN0Owor
ICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXM+IHZpZXdwb3J0
QXR0cmlidXRlczsKIAogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHdGtNZW51PiBjdXJyZW50TWVu
dTsKICAgICAgICAgZ2ludCBsYXN0UG9wdXBYUG9zaXRpb247CkBAIC0zMTYsNiArMzE5LDExIEBA
IGV4dGVybiAiQyIgewogICAgIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qCiAgICAg
d2Via2l0X2dlb2xvY2F0aW9uX3BvbGljeV9kZWNpc2lvbl9uZXcoV2ViS2l0V2ViRnJhbWUqLCBX
ZWJDb3JlOjpHZW9sb2NhdGlvbiopOwogCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiAK
KyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoZ2ludCBkZXNrdG9wV2lkdGgsIGdp
bnQgZGV2aWNlV2lkdGgsIGdpbnQgZGV2aWNlSGVpZ2h0LCBnaW50IGRldmljZURQSSk7CisgICAg
dm9pZCAKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5h
bChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSBhdmFp
bGFibGVTaXplKTsKKwogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gd2Via2l0bmV0d29ya3Jl
cXVlc3QuaCBvbmNlIHRoZSBBUEkgaXMgYWdyZWVkIHVwb24uCiAgICAgV0VCS0lUX0FQSSBTb3Vw
TWVzc2FnZSoKICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktpdE5l
dHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1
MWE3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9y
dGF0dHJpYnV0ZXMuY3BwCkBAIC0wLDAgKzEsMjYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rv
biwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJ3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCIKKworI2luY2x1ZGUgIndlYmtpdHByaXZh
dGUuaCIKKworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMsIHdlYmtpdF92
aWV3cG9ydF9hdHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsKKworc3RydWN0IF9XZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXNQcml2YXRlIHsKKyAgICBnaW50IHdpZHRoOworICAgIGdpbnQgaGVpZ2h0
OworICAgIGdmbG9hdCB0YXJnZXREZW5zaXR5RFBJOworICAgIGdmbG9hdCBpbml0aWFsU2NhbGVG
YWN0b3I7CisgICAgZ2Zsb2F0IG1pbmltdW1TY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWF4aW11
bVNjYWxlRmFjdG9yOworICAgIGdib29sZWFuIGlzVXNlclNjYWxhYmxlOworICAgIGdib29sZWFu
IGlzVmFsaWQ7CisgICAgZ2ludCBkZXZpY2VEUEk7CisgICAgZ2ludCBkZXZpY2VXaWR0aDsKKyAg
ICBnaW50IGRldmljZUhlaWdodDsKKyAgICBnaW50IGRlc2t0b3BXaWR0aDsKK307CisKKyNkZWZp
bmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBF
X0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJV
VEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXNDbGFzcyogdmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2Fk
ZF9wcml2YXRlKHZpZXdwb3J0QXR0cmlidXRlc0NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9B
VFRSSUJVVEVTX0dFVF9QUklWQVRFKHZpZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdiA9IHBy
aXY7CisKKyAgICBwcml2LT53aWR0aCA9IDA7CisgICAgcHJpdi0+aGVpZ2h0ID0gMDsKKyAgICBw
cml2LT50YXJnZXREZW5zaXR5RFBJID0gLTEuMDsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0
b3IgPSAtMS4wOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJp
di0+bWF4aW11bVNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9
IHRydWU7CisgICAgcHJpdi0+aXNWYWxpZCA9IGZhbHNlOworfQorCitXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhnaW50IGRlc2t0b3BXaWR0
aCwgZ2ludCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZpY2VIZWlnaHQsIGdpbnQgZGV2aWNlRFBJKQor
eworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VC
S0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMsIE5VTEwpKTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUodmlld3BvcnRB
dHRyaWJ1dGVzKTsKKworICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IGRlc2t0b3BXaWR0aDsKKyAg
ICBwcml2LT5kZXZpY2VXaWR0aCA9IGRldmljZVdpZHRoOworICAgIHByaXYtPmRldmljZUhlaWdo
dCA9IGRldmljZUhlaWdodDsKKyAgICBwcml2LT5kZXZpY2VEUEkgPSBkZXZpY2VEUEk7CisgICAg
cHJpdi0+aXNWYWxpZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlczsK
K30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGg6CisgKiBA
dmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBS
ZXR1cm5zIHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgaW4gcGl4ZWxzLgorICoKKyAqIFJldHVy
bnM6IHRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQgaW4gcGl4ZWxzLgorICoKKyAqIFNpbmNlOiAx
LjMuNAorICovCitnaW50IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF93aWR0aChXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVy
bl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJp
YnV0ZXMpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndpZHRo
OworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQ6Cisg
KiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisg
KiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBpbiBwaXhlbHMuCisgKgorICogU2lu
Y2U6IDEuMy40CisgKi8KK2dpbnQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdo
dChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBn
X3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9y
dEF0dHJpYnV0ZXMpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYt
PmhlaWdodDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5p
dGlhbF9zY2FsZV9mYWN0b3I6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2
aWV3cG9ydC4KKyAqCisgKiBSZXR1cm5zOiB0aGUgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3Bv
cnQuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
ICp2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisKKyAgICBy
ZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5pbml0aWFsU2NhbGVGYWN0b3I7Cit9CisK
Ky8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFj
dG9yOgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
CisgKgorICogUmV0dXJucyB0aGUgbWluaW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQu
CisgKgorICogUmV0dXJuczogdGhlIG1pbmltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0
CisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19nZXRfbWluaW11bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICp2
aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lT
X1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisKKyAgICByZXR1
cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5taW5pbXVtU2NhbGVGYWN0b3I7Cit9CisKKy8q
KgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9y
OgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisg
KgorICogUmV0dXJucyB0aGUgbWF4aW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgdmlld3BvcnQuCisg
KgorICogUmV0dXJuczogdGhlIG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0Cisg
KgorICogU2luY2U6IDEuMy40CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICp2aWV3
cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJ
RVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisKKyAgICByZXR1cm4g
dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5tYXhpbXVtU2NhbGVGYWN0b3I7Cit9CisKKy8qKgor
ICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbworICog
QHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICog
UmV0dXJucyB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRo
ZSBkZXZpY2UgcGl4ZWwgcmF0aW8gdmF1bGUuCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dm
bG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvKFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0
cmlidXRlcyksIDApOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+dGFy
Z2V0RGVuc2l0eURQSTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19n
ZXRfaXNfdXNlcl9zY2FsYWJsZToKKyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcworICoKKyAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHVz
ZXIgY2FuIHpvb20gaW4gYW5kIG91dC4KKyAqCisgKiBSZXR1cm5zOiBUcnVlIGlmIHRoZSB1c2Vy
IGNhbiB6b29tIGluIGFuZCBvdXQuIAorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnYm9vbGVh
biB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9zY2FsYWJsZShXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92
YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0
ZXMpLCBmYWxzZSk7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5pc1Vz
ZXJTY2FsYWJsZTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aXNfdmFsaWQ6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMKKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IGEgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzIGlzIHZhbGlkLgorICoKKyAqIFJldHVybnM6IFRydWUgaWYgYSBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgaXMgdmFsaWQKKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2Jvb2xlYW4g
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIGZhbHNl
KTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQ7Cit9CisK
Ky8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb246CisgKiBAdmll
d3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqIEBtYWluRnJh
bWU6IGEgI1dlYktpdFdlYkZyYW1lCisgKiBAYXZhaWxhYmxlV2lkdGg6IHRoZSB3aWR0aCBvZiB0
aGUgdmlzaWJsZSB2aWV3cG9ydCBpbiBwaXhlbHMKKyAqIEBhdmFpbGFibGVIZWlnaHQ6IHRoZSBo
ZWlnaHQgb2YgdGhlIHZpc2libGUgdmlld3BvcnQgaW4gcGl4ZWxzCisgKgorICogQ29tcHV0ZSB0
aGUgb3B0aW1hbCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGdpdmVuIHRoZSBAYXZhaWxhYmxlV2lkdGgg
YW5kIEBhdmFpbGFibGVIZWlnaHQuCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHNp
emUgb2YgdGhlIHZpc2libGUgdmlld3BvcnQgaXMgY2hhbmdlZC4gCisgKgorICogU2luY2U6IDEu
My40CisgKi8KK3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb24oV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIFdlYktpdFdlYkZyYW1l
KiBtYWluRnJhbWUsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmll
d3BvcnRBdHRyaWJ1dGVzKSk7CisgICAKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBXZWJL
aXQ6OmNvcmUobWFpbkZyYW1lKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyBhcmd1
bWVudHMgPSBmcmFtZS0+ZG9jdW1lbnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICAKKyAg
ICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbCh2aWV3cG9y
dEF0dHJpYnV0ZXMsIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZShhdmFpbGFibGVXaWR0aCwg
YXZhaWxhYmxlSGVpZ2h0KSk7Cit9CisKKy8vIGZvciBpbnRlcm5hbCB1c2Ugb25seQordm9pZCB3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbChXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgY29uc3QgV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSBhdmFpbGFibGVTaXplKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmll
d3BvcnRBdHRyaWJ1dGVzKSk7CisKKyAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudHMg
cGFyYW1ldGVyIGlzIHZhbGlkCisgICAgaWYgKGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQodmlld3BvcnRBdHRyaWJ1dGVz
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
c1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2
aWV3cG9ydEF0dHJpYnV0ZXMpOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRy
cyA9IFdlYkNvcmU6OmZpbmRDb25maWd1cmF0aW9uRm9yVmlld3BvcnREYXRhKGFyZ3VtZW50cywg
cHJpdi0+ZGVza3RvcFdpZHRoLCBwcml2LT5kZXZpY2VXaWR0aCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcml2LT5kZXZpY2VIZWlnaHQsIHByaXYtPmRldmljZURQSSwgYXZhaWxhYmxl
U2l6ZSk7CisKKyAgICBwcml2LT53aWR0aCA9IGF0dHJzLmxheW91dFZpZXdwb3J0LndpZHRoKCk7
CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0cnMubGF5b3V0Vmlld3BvcnQuaGVpZ2h0KCk7CisgICAg
cHJpdi0+dGFyZ2V0RGVuc2l0eURQSSA9IGF0dHJzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJp
di0+aW5pdGlhbFNjYWxlRmFjdG9yID0gYXR0cnMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1p
bmltdW1TY2FsZUZhY3RvciA9IGF0dHJzLm1pbmltdW1TY2FsZTsKKyAgICBwcml2LT5tYXhpbXVt
U2NhbGVGYWN0b3IgPSBhdHRycy5tYXhpbXVtU2NhbGU7CisgICAgcHJpdi0+aXNVc2VyU2NhbGFi
bGUgPSBhcmd1bWVudHMudXNlclNjYWxhYmxlOworICAgIAorICAgIGlmIChwcml2LT53aWR0aCA+
IDApIAorICAgICAgICBwcml2LT5pc1ZhbGlkID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHBy
aXYtPmlzVmFsaWQgPSBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3Bv
cnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjN2Fi
YQotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0
cmlidXRlcy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9v
bmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNf
aAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorCisjaW5jbHVkZSA8Z2xpYi1v
YmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyAgICAgICAgICAg
ICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRf
VklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5D
RV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19DTEFT
UyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQ
RV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisj
ZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAgICAoR19UWVBF
X0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVU
RVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykg
KEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9B
VFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX0NMQVNT
KG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklF
V1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorCit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB7
CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAg
ICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9X
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9j
bGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUK
K3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9p
ZCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dp
ZHRoICAgICAgICAgICAgICAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0
cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X2hlaWdodCAgICAgICAgICAgICAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdw
b3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyogdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3
cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Zs
b2F0IAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyAg
IChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJ
VF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9z
Y2FsYWJsZSAgICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVz
KTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0
X2lzX3ZhbGlkICAgICAgICAgICAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0
QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2NvbXB1dGF0aW9uICAgICAgICAgICAgICAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2
aWV3cG9ydEF0dHJpYnV0ZXMsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBhdmFpbGFibGVX
aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZ2ludCBhdmFpbGFibGVIZWlnaHQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKaW5kZXggNzYyODg4YS4uZWVmODFhZiAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAKQEAgLTEwLDYgKzEwLDcgQEAKICAqICBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTAgSWdhbGlhIFMuTC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTW92aWFs
IENyZWF0aXZlIFRlY2hub2xvZ2llcyBJbmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEJvYmJ5
IFBvd2VycworICogIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3Jn
PgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMTczLDYgKzE3NCw3IEBAIGVudW0gewogICAgIEdF
T0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAgT05MT0FEX0VWRU5ULAog
ICAgIEZSQU1FX0NSRUFURUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRFU19DSEFOR0VELAogICAg
IExBU1RfU0lHTkFMCiB9OwogCkBAIC0xMTY2LDYgKzExNjgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgcHJpdi0+d2ViV2luZG93
RmVhdHVyZXMuY2xlYXIoKTsKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBw
cml2LT5zdWJSZXNvdXJjZXMuY2xlYXIoKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMu
Y2xlYXIoKTsKIAogICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQq
Pjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMu
ZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0
Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmJlZ2luKCk7IGl0ZXIg
IT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQpAQCAtMjQzMCw2ICsyNDMzLDI4IEBAIHN0
YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyog
d2ViVmlld0NsYXNzKQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAogICAg
IC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkCisg
ICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAg
ICAgKiBAd2ViX3ZpZXdwb3J0X2F0dHJpYnV0ZXM6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIFRo
ZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIHdpbGwgYmUgZW1p
dHRlZCB3aGVuIGEgd2ViIHBhZ2UgCisgICAgICogaGFzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVz
LgorICAgICAqIFRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGFyZSB1c2VkIGZvciBzZXR0aW5nIHRo
ZSB3aWR0aCBhbmQgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQgdG8gCisgICAgICogZml0
IHdlYiBjb250ZW50LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy40CisgICAgICovCisgICAg
d2Via2l0X3dlYl92aWV3X3NpZ25hbHNbVklFV1BPUlRfQVRUUklCVVRFU19DSEFOR0VEXSA9IGdf
c2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdf
VFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdz
KShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworICAgICAgICAgICAgCisKKyAgICAvKgog
ICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3
ZWJWaWV3Q2xhc3MtPmNyZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0
ZV93ZWJfdmlldzsKQEAgLTMwODksNyArMzExNCw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgZ19zaWduYWxfY29ubmVjdChw
cml2LT53ZWJTZXR0aW5ncy5nZXQoKSwgIm5vdGlmeSIsIEdfQ0FMTEJBQ0sod2Via2l0X3dlYl92
aWV3X3NldHRpbmdzX25vdGlmeSksIHdlYlZpZXcpOwogCiAgICAgcHJpdi0+d2ViV2luZG93RmVh
dHVyZXMgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF93ZWJfd2luZG93X2ZlYXR1cmVzX25ldygp
KTsKLQorICAgIHByaXYtPnZpZXdwb3J0QXR0cmlidXRlcyA9IGFkb3B0UGxhdGZvcm1SZWYod2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KDAsIDAsIDAsIDApKTsKICAgICBwcml2LT5zdWJS
ZXNvdXJjZXMgPSBhZG9wdFBsYXRmb3JtUmVmKGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9o
YXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZikpOwogCiAgICAgcHJpdi0+
Y3VycmVudENsaWNrQ291bnQgPSAwOwpAQCAtNDQ1MSw2ICs0NDc2LDQ1IEBAIGdib29sZWFuIHdl
YmtpdF93ZWJfdmlld19nZXRfdmlld19zb3VyY2VfbW9kZSAoV2ViS2l0V2ViVmlldyogd2ViVmll
dykKICAgICByZXR1cm4gRkFMU0U7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2luaXRf
dmlld3BvcnRfYXR0cmlidXRlczoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJWaWV3CisgKiBA
ZGVza3RvcFdpZHRoOiB0aGUgd2lkdGggb2Ygdmlld3BvcnQgaW4gcGl4ZWxzIHRoYXQgd29ya3Mg
d2VsbCBmb3IgbW9zdCB3ZWJwYWdlcyBkZXNpZ25lZCBmb3IgYSBkZXNrdG9wIFVBCisgKiBAZGV2
aWNlV2lkdGg6IHRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuIGluIHBpeGVscworICogQGRldmljZUhl
aWdodDogdGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuIGluIHBpeGVscyAKKyAqIEBkZXZpY2VEUEk6
IHRoZSBudW1iZXIgb2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuCisgKgorICogSW5pdGlh
bGl6ZSB0aGUgY3VycmVudCB2aWV3cG9ydCBzZXR0aW5nIGdpdmVuIHRoZSBAZGVza3RvcFdpZHRo
LCBAZGV2aWNlV2lkdGgsIEBkZXZpY2VIZWlnaHQsIGFuZCBAZGV2aWNlRFBJLgorICogCisgKiBT
aW5jZTogMS4zLjQKKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9hdHRy
aWJ1dGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgZGVza3RvcFdpZHRoLCBnaW50IGRl
dmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBkZXZpY2VEUEkpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgd2ViVmll
dy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzID0gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
bmV3KGRlc2t0b3BXaWR0aCwgZGV2aWNlV2lkdGgsIGRldmljZUhlaWdodCwgZGV2aWNlRFBJKTsK
K30KKworLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXM6Cisg
KiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIE9idGFpbnMgdGhlICNXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogI1dlYktpdFdlYlZpZXcu
IFRoZSAjV2ViS2l0V2ViVmlldyBhbHdheXMgaGFzIGFuIGFzc29jaWF0ZWQKKyAqIGluc3RhbmNl
IG9mICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMuIFRoZSByZWZlcmVuY2UgdGhhdCBpcyByZXR1
cm5lZCBieQorICogdGhpcyBjYWxsIGlzIG93bmVkIGJ5IHRoZSAjV2ViS2l0V2ViVmlldy4gCisg
KgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIGluc3RhbmNlCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKFdl
YktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lU
X0lTX1dFQl9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKyAgIAorICAgIHJldHVybiB3ZWJWaWV3LT5w
cml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuZ2V0KCk7Cit9CisKIC8vIEludGVybmFsIHN1YnJlc291
cmNlIG1hbmFnZW1lbnQKIHZvaWQgd2Via2l0X3dlYl92aWV3X2FkZF9yZXNvdXJjZShXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3LCBjb25zdCBjaGFyKiBpZGVudGlmaWVyLCBXZWJLaXRXZWJSZXNvdXJj
ZSogd2ViUmVzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggYTMyMDEz
MS4uNzdmYWVmYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtNDAxLDYgKzQwMSwx
NiBAQCB3ZWJraXRfZ2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9p
ZCk7CiBXRUJLSVRfQVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRf
ZG9tX2RvY3VtZW50ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmll
dyk7CiAKK1dFQktJVF9BUEkgdm9pZCAKK3dlYmtpdF93ZWJfdmlld19pbml0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXMgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAg
ICAgICBkZXNrdG9wV2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgIGRldmljZVdpZHRoLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAg
ICAgICBkZXZpY2VIZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdpbnQgICAgICAgICAgICAgICAgIGRldmljZURQSSk7CisKK1dFQktJVF9B
UEkgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiAKK3dlYmtpdF93ZWJfdmlld19nZXRfdmlld3Bv
cnRfYXR0cmlidXRlcyAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcp
OworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5n
ZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwppbmRleCBlYmNkZjQ4Li4xYTBmZjNkIDEwMDY0
NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjEgQEAKKzIwMTAtMTAtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0
ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGZvciBXZWJLaXRHdGsuCisKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChkdW1w
Q29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgSmF2YVNjcmlwdCBBUEkgZm9yIHNldHRp
bmcgdGhlIHNpemUgb2YgdGhlIHZpc2libGUgdmlld3BvcnQuCisgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgZm9yIHRlc3RpbmcgdGhlIHZpZXdwb3J0
IHByb3BlcnRpZXMuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0
aW9uRm9yVmlld3BvcnQpOiBEaXR0by4KKwogMjAxMC0xMC0wNiAgQ2hyaXMgR3VpbGxvcnkgIDxj
aHJpcy5ndWlsbG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENocmlzIEZs
ZWl6YWNoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuY3BwCmluZGV4IGVlNDQzMjUuLmU0ZTRmMTMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw2
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25l
QGtsZHAub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzksNiArMTQw
LDIyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ29uZmlndXJhdGlv
bkZvclZpZXdwb3J0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFs
dWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250
ZXh0KTsKKworICAgIGRvdWJsZSBhdmFpbGFibGVXaWR0aCA9IEpTVmFsdWVUb051bWJlcihjb250
ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsK
KyAgICBkb3VibGUgYXZhaWxhYmxlSGVpZ2h0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAg
TGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0
Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJv
bGxlci0+Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxl
V2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZUhlaWdodCkpOworICAgCisgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJl
ZiBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNP
YmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVu
dENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRp
b24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2Fz
dDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7
CkBAIC0xODcxLDYgKzE4ODgsNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAiZHVtcEJhY2tGb3J3YXJkTGlzdCIs
IGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hp
bGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIsIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgZHVtcENo
aWxkRnJhbWVzQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcENvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydCIsIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQsIGtKU1Byb3Bl
cnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwK
ICAgICAgICAgeyAiZHVtcERPTUFzV2ViQXJjaGl2ZSIsIGR1bXBET01Bc1dlYkFyY2hpdmVDYWxs
YmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRl
RG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCBkdW1wRGF0
YWJhc2VDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtK
U1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRWRpdGluZ0Nh
bGxiYWNrcyIsIGR1bXBFZGl0aW5nQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdp
dCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IDc1
NWEyYjIuLjc2ZTM5MjUgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMjc5LDYgKzI3OSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgYWJvcnRNb2RhbCgpOwogCisgICAgdm9pZCBjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50
IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKKwogICAgIC8vIFRoZSBmb2xs
b3dpbmcgQVBJIHRlc3QgZnVuY3Rpb25zIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0
Zm9ybS1zcGVjaWZpYyAKICAgICAvLyB1bml0IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhl
eSBleGlzdC4KICAgICB2b2lkIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJp
bmdSZWYgdXRmOERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAK
aW5kZXggZDgzMTA3Ni4uODY3Y2FmOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC00LDYgKzQs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgSmFuIE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CiAgKiBDb3B5cmln
aHQgKEMpIDIwMDkgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBI
dXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04
MDQsMyArODA1LDE5IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhh
dmlvcihjb25zdCBjaGFyKiBlZGl0aW5nQmVoYXZpb3IpCiB2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjphYm9ydE1vZGFsKCkKIHsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29u
ZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhl
aWdodCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9n
ZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9y
dF9hdHRyaWJ1dGVzKHdlYlZpZXcsIDk4MCwgMzIwLCA0ODAsIDE2MCk7CisKKyAgICBXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3KTsKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19jb21wdXRhdGlvbih2aWV3cG9ydEF0dHJpYnV0ZXMsIG1haW5GcmFtZSwgYXZhaWxh
YmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCk7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgInZpZXdw
b3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVmLCAlZl1cbiIsCisgICAgICAg
ICAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGgodmlld3BvcnRBdHRyaWJ1
dGVzKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQo
dmlld3BvcnRBdHRyaWJ1dGVzKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2dldF9pbml0aWFsX3NjYWxlX2ZhY3Rvcih2aWV3cG9ydEF0dHJpYnV0ZXMpLAorICAgICAg
ICAgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9y
KHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3Iodmlld3BvcnRBdHRyaWJ1dGVzKSk7Cit9CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcAppbmRleCA2ZGQ2MDljLi43MDM0ZjZkIDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHAKQEAgLTEzOTAsMyArMTM5MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OnNl
dEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKiBlZGl0aW5nQmVoYXZpb3IpCiB2b2lkIExheW91
dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKIHsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50
IGF2YWlsYWJsZUhlaWdodCkKK3sKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70339</attachid>
            <date>2010-10-08 21:41:59 -0700</date>
            <delta_ts>2010-10-12 06:42:48 -0700</delta_ts>
            <desc>Proposed Patch6</desc>
            <filename>viewport6.diff</filename>
            <type>text/plain</type>
            <size>35071</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxZTJjZWI3Li40YjExZDdm
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSBmb3IgZ2V0dGlu
ZyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBB
ZGRlZCB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMu
Y3BwIAorCiAyMDEwLTEwLTA3ICBKb2NlbHluIFR1cmNvdHRlICA8am9jZWx5bi50dXJjb3R0ZUBu
b2tpYS5jb20+LCBBbmRyYXMgQmVjc2kgIDxhYmVjc2lAd2Via2l0Lm9yZz4sIEJhbGF6cyBLZWxl
bWVuICA8a2JhbGF6c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGgg
Um9oZGUgQ2hyaXN0aWFuc2VuLgpkaWZmIC0tZ2l0IGEvR05VbWFrZWZpbGUuYW0gYi9HTlVtYWtl
ZmlsZS5hbQppbmRleCAxYzk1Y2QxLi5mZmM2YTQxIDEwMDY0NAotLS0gYS9HTlVtYWtlZmlsZS5h
bQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzE2LDYgKzMxNiw3IEBAIHdlYmtpdGd0a19zdGF0
aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRuZXR3b3Jr
cmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jl
c3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRp
YWxvZy5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9y
d2FyZGxpc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFz
b3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmgg
XApAQCAtMzc4LDYgKzM3OSw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKIAlXZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmggXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmMgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZlcnNpb24uY3BwIFwKKwlX
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3BwIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0YTBiYTE0Li5jODIwNDc4IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTQgQEAKKzIwMTAtMTAtMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9y
IHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMg
Zm9yIFdlYktpdEd0aworCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBm
YXN0L3ZpZXdwb3J0IGV4Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEwLTA4ICBOaWtv
bGFzIFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5vdCByZXZp
ZXdlZC4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKaW5kZXggMmE1NzA2Yi4uY2NjNDhhMyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKKysrIGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQKQEAgLTU4OTEsNyArNTg5MSw3IEBAIGZ1bGxzY3JlZW4v
CiBjYW52YXMvcGhpbGlwL3Rlc3RzLzJkLnBhdGguaXNQb2ludEluUGF0aC5lZGdlLmh0bWwKIAog
IyB2aWV3cG9ydCBtZXRhIHRhZyBzdXBwb3J0Ci1mYXN0L3ZpZXdwb3J0CitmYXN0L3ZpZXdwb3J0
L3ZpZXdwb3J0LTQ1Lmh0bWwKIAogIyBQcmUtSE1UTDUgcGFyc2VyIHF1aXJrcyBvbmx5IGFwcGx5
IHRvIHRoZSBtYWMgcG9ydCBmb3Igbm93LgogZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1x
dWlya3MuaHRtbApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwppbmRleCA2MjBkZDQ1Li5kYjdlNmU1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisy
MDEwLTEwLTA4ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9y
dCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NDU0NDMKKworICAgICAgICBUaGlzIHBhdGNoIGFsbG93cyB0byBzZXQgdGhlIHdpZHRoIGFu
ZCBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydAorICAgICAgICB1c2VkIHRvIGRpc3BsYXkg
d2ViIGNvbnRlbnQgdGhyb3VnaCB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKworICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UpOiBBZGRlZCBmb3IgZW1p
dHRpbmcgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwuCisgICAgICAgIChX
ZWJLaXQ6OkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAg
ICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0
ZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwOiBBZGRl
ZCBmb3IgZ2V0dGluZyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF92
aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19u
ZXcpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoKToKKyAg
ICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQpOgorICAgICAgICAo
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKToKKyAg
ICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rv
cik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2Fs
ZV9mYWN0b3IpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2Rldmlj
ZV9waXhlbF9yYXRpbyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aXNfdXNlcl9zY2FsYWJsZSk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19n
ZXRfaXNfdmFsaWQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0
YXRpb24pOiBDb21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgZ2l2ZW4gdGhl
IGF2YWlsYWJsZSB3aWR0aC9oZWlnaHQgb2YgdGhlIHZpZXdwb3J0LgorICAgICAgICAod2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb25faW50ZXJuYWwpOgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZSk6CisgICAgICAg
ICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9hdHRyaWJ1dGVz
KTogSW5pdGlhbGl6ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyk6IE9idGFpbiB0aGUgV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgV2ViS2l0V2ViVmlldy4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0d2Vidmlldy5oOgorCiAyMDEwLTEwLTA3ICBDYXJsb3MgR2FyY2lhIENh
bXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBYYW4gTG9w
ZXouCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5k
ZXggN2U0MDkwYi4uMjIzYjAzNiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5j
bHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRlICJGaWxl
Q2hvb3Nlci5oIgpAQCAtNjAyLDcgKzYwMywxNyBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3Nl
SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwog
ICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1l
cykpOwogfQogCi12b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYpCit2
b2lkIENocm9tZUNsaWVudDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyA9IHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld3BvcnRfYXR0cmlidXRlcyhtX3dlYlZpZXcpOworICAgIFdlYkNvcmU6OkZsb2F0UmVj
dCByZWN0ID0gY29yZShtX3dlYlZpZXcpLT5jaHJvbWUoKS0+cGFnZVJlY3QoKTsKKworICAgIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uX2ludGVybmFsKHZpZXdwb3J0QXR0
cmlidXRlcywgYXJndW1lbnRzLCBXZWJDb3JlOjpJbnRTaXplKHN0YXRpY19jYXN0PGdpbnQ+KHJl
Y3Qud2lkdGgoKSksIHN0YXRpY19jYXN0PGdpbnQ+KHJlY3QuaGVpZ2h0KCkpKSk7CisKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1jaGFu
Z2VkIiwgdmlld3BvcnRBdHRyaWJ1dGVzKTsgCit9CisKK3ZvaWQgQ2hyb21lQ2xpZW50OjpzZXRD
dXJzb3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
aCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggMjFj
NDY3Ny4uYTZkYWU3ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCkBAIC0xMDksNiArMTA5LDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAg
dmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0
RGlyZWN0aW9uKTsKIAorICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFE
aWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29u
c3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lKik7CiAjaWYg
RU5BQkxFKERBVEFCQVNFKQogICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1
b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5k
ZXggZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBhdXRo
ZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uMzk5Y2I0YyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xvY2F0
aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xp
Y3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsKIAor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3Mg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDYxNmVlNmIuLmE1NDVkNWQgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTE0MCw2ICsxNDIsNyBAQCBleHRlcm4gIkMiIHsK
IAogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwogICAgICAgICBQbGF0Zm9ybVJl
ZlB0cjxXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICAgICAg
UGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2aWV3cG9ydEF0dHJpYnV0
ZXM7CiAKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVudT4gY3VycmVudE1lbnU7CiAgICAg
ICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwpAQCAtMzE2LDYgKzMxOSwxMSBAQCBleHRlcm4g
IkMiIHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKgogICAgIHdlYmtpdF9n
ZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6
R2VvbG9jYXRpb24qKTsKIAorICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogCisgICAgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KGdpbnQgZGVza3RvcFdpZHRoLCBnaW50IGRldmlj
ZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBkZXZpY2VEUEkpOworICAgIHZvaWQgCisg
ICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb25faW50ZXJuYWwoV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIGNvbnN0IFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMsIFdlYkNvcmU6OkludFNpemUgYXZhaWxhYmxlU2l6
ZSk7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIHdlYmtpdG5ldHdvcmtyZXF1ZXN0Lmgg
b25jZSB0aGUgQVBJIGlzIGFncmVlZCB1cG9uLgogICAgIFdFQktJVF9BUEkgU291cE1lc3NhZ2Uq
CiAgICAgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShXZWJLaXROZXR3b3JrUmVx
dWVzdCogcmVxdWVzdCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTliOTFlCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1
dGVzLmNwcApAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29u
ZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgiCisKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzLCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlcywgR19UWVBFX09CSkVDVCk7CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSB7CisgICAgZ2ludCB3aWR0aDsKKyAgICBnaW50IGhlaWdodDsKKyAgICBn
ZmxvYXQgdGFyZ2V0RGVuc2l0eURQSTsKKyAgICBnZmxvYXQgaW5pdGlhbFNjYWxlRmFjdG9yOwor
ICAgIGdmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgZ2Zsb2F0IG1heGltdW1TY2FsZUZh
Y3RvcjsKKyAgICBnYm9vbGVhbiBpc1VzZXJTY2FsYWJsZTsKKyAgICBnYm9vbGVhbiBpc1ZhbGlk
OworICAgIGdpbnQgZGV2aWNlRFBJOworICAgIGdpbnQgZGV2aWNlV2lkdGg7CisgICAgZ2ludCBk
ZXZpY2VIZWlnaHQ7CisgICAgZ2ludCBkZXNrdG9wV2lkdGg7Cit9OworCisjZGVmaW5lIFdFQktJ
VF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3
cG9ydF9hdHRyaWJ1dGVzX2NsYXNzX2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3Mq
IHZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKQoreworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0
ZSh2aWV3cG9ydEF0dHJpYnV0ZXNDbGFzcywgc2l6ZW9mKFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
c1ByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
aW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0KQoreworICAgIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRF
U19HRVRfUFJJVkFURSh2aWV3cG9ydCk7CisgICAgdmlld3BvcnQtPnByaXYgPSBwcml2OworCisg
ICAgcHJpdi0+d2lkdGggPSAwOworICAgIHByaXYtPmhlaWdodCA9IDA7CisgICAgcHJpdi0+dGFy
Z2V0RGVuc2l0eURQSSA9IC0xLjA7CisgICAgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yID0gLTEu
MDsKKyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IgPSAtMS4wOworICAgIHByaXYtPm1heGlt
dW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJpdi0+aXNVc2VyU2NhbGFibGUgPSB0cnVlOwor
ICAgIHByaXYtPmlzVmFsaWQgPSBmYWxzZTsKK30KKworV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
KiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoZ2ludCBkZXNrdG9wV2lkdGgsIGdpbnQg
ZGV2aWNlV2lkdGgsIGdpbnQgZGV2aWNlSGVpZ2h0LCBnaW50IGRldmljZURQSSkKK3sKKyAgICBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyA9IFdFQktJVF9WSUVX
UE9SVF9BVFRSSUJVVEVTKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJV
VEVTLCBOVUxMKSk7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9
IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKHZpZXdwb3J0QXR0cmlidXRl
cyk7CisKKyAgICBwcml2LT5kZXNrdG9wV2lkdGggPSBkZXNrdG9wV2lkdGg7CisgICAgcHJpdi0+
ZGV2aWNlV2lkdGggPSBkZXZpY2VXaWR0aDsKKyAgICBwcml2LT5kZXZpY2VIZWlnaHQgPSBkZXZp
Y2VIZWlnaHQ7CisgICAgcHJpdi0+ZGV2aWNlRFBJID0gZGV2aWNlRFBJOworICAgIHByaXYtPmlz
VmFsaWQgPSBmYWxzZTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXM7Cit9CisKKy8q
KgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoOgorICogQHZpZXdwb3J0
QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyB0
aGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBSZXR1cm5zOiB0aGUg
d2lkdGggb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscy4KKyAqCisgKiBTaW5jZTogMS4zLjQKKyAq
LworZ2ludCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGgoV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwg
MCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT53aWR0aDsKK30KKwor
LyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaGVpZ2h0OgorICogQHZpZXdw
b3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJu
cyB0aGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydCBpbiBwaXhlbHMuCisgKgorICogUmV0dXJuczog
dGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgaW4gcGl4ZWxzLgorICoKKyAqIFNpbmNlOiAxLjMu
NAorICovCitnaW50IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQoV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1
dGVzKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5oZWlnaHQ7
Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2luaXRpYWxfc2Nh
bGVfZmFjdG9yOgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzCisgKgorICogUmV0dXJucyB0aGUgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQu
CisgKgorICogUmV0dXJuczogdGhlIGluaXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICoK
KyAqIFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3Bv
cnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVX
UE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworCisgICAgcmV0dXJuIHZp
ZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yOworfQorCisvKioKKyAq
IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3RvcjoKKyAq
IEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAq
IFJldHVybnMgdGhlIG1pbmltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0LgorICoKKyAq
IFJldHVybnM6IHRoZSBtaW5pbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydAorICoKKyAq
IFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0
X21pbmltdW1fc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRB
dHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9S
VF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworCisgICAgcmV0dXJuIHZpZXdw
b3J0QXR0cmlidXRlcy0+cHJpdi0+bWluaW11bVNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9tYXhpbXVtX3NjYWxlX2ZhY3RvcjoKKyAqIEB2
aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJl
dHVybnMgdGhlIG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhlIHZpZXdwb3J0LgorICoKKyAqIFJl
dHVybnM6IHRoZSBtYXhpbXVtIHNjYWxlIHZhbHVlIG9mIHRoZSB2aWV3cG9ydAorICoKKyAqIFNp
bmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21h
eGltdW1fc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRy
aWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9B
VFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworCisgICAgcmV0dXJuIHZpZXdwb3J0
QXR0cmlidXRlcy0+cHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8KKyAqIEB2aWV3cG9y
dEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJldHVybnMg
dGhlIGRldmljZSBwaXhlbCByYXRpbyB2YWx1ZS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGV2aWNl
IHBpeGVsIHJhdGlvIHZhdWxlLgorICoKKyAqIFNpbmNlOiAxLjMuNAorICovCitnZmxvYXQgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyhXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxf
aWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMp
LCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPnRhcmdldERlbnNp
dHlEUEk7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3Vz
ZXJfc2NhbGFibGU6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMKKyAqCisgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6
b29tIGluIGFuZCBvdXQuCisgKgorICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgdXNlciBjYW4gem9v
bSBpbiBhbmQgb3V0LiAKKyAqCisgKiBTaW5jZTogMS4zLjQKKyAqLworZ2Jvb2xlYW4gd2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3VzZXJfc2NhbGFibGUoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgZmFs
c2UpOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+aXNVc2VyU2NhbGFi
bGU7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlk
OgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisg
KgorICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBp
cyB2YWxpZC4KKyAqCisgKiBSZXR1cm5zOiBUcnVlIGlmIGEgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIGlzIHZhbGlkCisgKgorICogU2luY2U6IDEuMy40CisgKi8KK2dib29sZWFuIHdlYmtpdF92
aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc192YWxpZChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMg
KnZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCBmYWxzZSk7CisKKyAg
ICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5pc1ZhbGlkOworfQorCisvKioKKyAq
IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uOgorICogQHZpZXdwb3J0QXR0
cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKiBAbWFpbkZyYW1lOiBhICNX
ZWJLaXRXZWJGcmFtZQorICogQGF2YWlsYWJsZVdpZHRoOiB0aGUgd2lkdGggb2YgdGhlIHZpc2li
bGUgdmlld3BvcnQgaW4gcGl4ZWxzCisgKiBAYXZhaWxhYmxlSGVpZ2h0OiB0aGUgaGVpZ2h0IG9m
IHRoZSB2aXNpYmxlIHZpZXdwb3J0IGluIHBpeGVscworICoKKyAqIENvbXB1dGUgdGhlIG9wdGlt
YWwgdmlld3BvcnQgYXR0cmlidXRlcyBnaXZlbiB0aGUgQGF2YWlsYWJsZVdpZHRoIGFuZCBAYXZh
aWxhYmxlSGVpZ2h0LgorICogSXQgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBzaXplIG9mIHRo
ZSB2aXNpYmxlIHZpZXdwb3J0IGlzIGNoYW5nZWQuIAorICoKKyAqIFNpbmNlOiAxLjMuNAorICov
Cit2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uKFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzLCBXZWJLaXRXZWJGcmFtZSogbWFpbkZy
YW1lLCBnaW50IGF2YWlsYWJsZVdpZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0
cmlidXRlcykpOworICAgCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gV2ViS2l0Ojpjb3Jl
KG1haW5GcmFtZSk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0g
ZnJhbWUtPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgCisgICAgd2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb25faW50ZXJuYWwodmlld3BvcnRBdHRyaWJ1
dGVzLCBhcmd1bWVudHMsIFdlYkNvcmU6OkludFNpemUoYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJs
ZUhlaWdodCkpOworfQorCisvLyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKK3ZvaWQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb25faW50ZXJuYWwoV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzJiBhcmd1bWVudHMsIFdlYkNvcmU6OkludFNpemUgYXZhaWxhYmxlU2l6ZSkKK3sKKyAgICBn
X3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0
cmlidXRlcykpOworCisgICAgLy8gY2hlY2sgd2hldGhlciB0aGUgYXJndW1lbnRzIHBhcmFtZXRl
ciBpcyB2YWxpZAorICAgIGlmIChhdmFpbGFibGVTaXplLmlzRW1wdHkoKSkgeworICAgICAgICB3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KHZpZXdwb3J0QXR0cmlidXRlcyk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRl
KiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUodmlld3BvcnRB
dHRyaWJ1dGVzKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cnMgPSBXZWJD
b3JlOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgcHJpdi0+ZGVza3RvcFdp
ZHRoLCBwcml2LT5kZXZpY2VXaWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2
LT5kZXZpY2VIZWlnaHQsIHByaXYtPmRldmljZURQSSwgYXZhaWxhYmxlU2l6ZSk7CisKKyAgICBw
cml2LT53aWR0aCA9IGF0dHJzLmxheW91dFNpemUud2lkdGgoKTsKKyAgICBwcml2LT5oZWlnaHQg
PSBhdHRycy5sYXlvdXRTaXplLmhlaWdodCgpOworICAgIHByaXYtPnRhcmdldERlbnNpdHlEUEkg
PSBhdHRycy5kZXZpY2VQaXhlbFJhdGlvOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3RvciA9
IGF0dHJzLmluaXRpYWxTY2FsZTsKKyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IgPSBhdHRy
cy5taW5pbXVtU2NhbGU7CisgICAgcHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yID0gYXR0cnMubWF4
aW11bVNjYWxlOworICAgIHByaXYtPmlzVXNlclNjYWxhYmxlID0gYXJndW1lbnRzLnVzZXJTY2Fs
YWJsZTsKKyAgICAKKyAgICBpZiAocHJpdi0+d2lkdGggPiAwKSAKKyAgICAgICAgcHJpdi0+aXNW
YWxpZCA9IHRydWU7CisgICAgZWxzZQorICAgICAgICBwcml2LT5pc1ZhbGlkID0gZmFsc2U7Cit9
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMu
aCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YzdhYmEKLS0tIC9kZXYvbnVsbAorKysgYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaApAQCAtMCwwICsxLDg5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisK
KyNpZm5kZWYgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzX2gKKyNkZWZpbmUgd2Via2l0dmlld3Bv
cnRhdHRyaWJ1dGVzX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2Jq
KSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZ
UEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKSkKKyNkZWZp
bmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BP
UlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChv
YmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX0lT
X1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQ
RSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUykpCisjZGVmaW5lIFdF
QktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktp
dFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlc1ByaXZhdGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZTsKKwor
c3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgeworICAgIEdPYmplY3QgcGFyZW50X2lu
c3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
Q2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5n
IGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQz
KSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIGdpbnQK
K3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF93aWR0aCAgICAgICAgICAgICAgICAoV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRfQVBJ
IGdpbnQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQgICAgICAgICAgICAg
ICAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJL
SVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2luaXRpYWxfc2Nh
bGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7
CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfbWlu
aW11bV9zY2FsZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRy
aWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X2dldF9tYXhpbXVtX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3
cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRfQVBJIGdmbG9hdCAKK3dlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8gICAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRfQVBJIGdib29sZWFuIAord2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3VzZXJfc2NhbGFibGUgICAgIChXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xl
YW4KK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc192YWxpZCAgICAgICAgICAgICAo
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRf
QVBJIHZvaWQgCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbiAgICAgICAg
ICAgICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0
V2ViRnJhbWUqIG1haW5GcmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlV2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpbnQgYXZhaWxhYmxlSGVpZ2h0
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CmluZGV4IDIwYzliMTYuLmU0OWY4N2QgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
CkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBT
LkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMg
SW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTE3Myw2ICsxNzQsNyBAQCBlbnVtIHsKICAgICBHRU9MT0NBVElPTl9QT0xJQ1lfREVDSVNJ
T05fQ0FOQ0VMTEVELAogICAgIE9OTE9BRF9FVkVOVCwKICAgICBGUkFNRV9DUkVBVEVELAorICAg
IFZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRCwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAt
MTE5Myw2ICsxMTk1LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09i
amVjdCogb2JqZWN0KQogICAgIHByaXYtPndlYldpbmRvd0ZlYXR1cmVzLmNsZWFyKCk7CiAgICAg
cHJpdi0+bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFy
KCk7CisgICAgcHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmNsZWFyKCk7CiAKICAgICBIYXNoTWFw
PEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGVuZERyb3BwaW5n
Q29udGV4dHMgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmVuZCgpOwogICAgIGZvciAoSGFzaE1h
cDxHZGtEcmFnQ29udGV4dCosIERyb3BwaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdGVyID0gcHJp
di0+ZHJvcHBpbmdDb250ZXh0cy5iZWdpbigpOyBpdGVyICE9IGVuZERyb3BwaW5nQ29udGV4dHM7
ICsraXRlcikKQEAgLTI0NTcsNiArMjQ2MCwyOCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAg
ICAgIFdFQktJVF9UWVBFX1dFQl9GUkFNRSk7CiAKICAgICAvKgorICAgICAqIFdlYktpdFdlYlZp
ZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZAorICAgICAqIEB3ZWJfdmlldzogdGhlIG9i
amVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAgICogQHdlYl92aWV3cG9ydF9hdHRy
aWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZpZXdw
b3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhIHdlYiBwYWdlIAor
ICAgICAqIGhhcyB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAgICAgKiBUaGUgdmlld3BvcnQg
YXR0cmlidXRlcyBhcmUgdXNlZCBmb3Igc2V0dGluZyB0aGUgd2lkdGggYW5kIGluaXRpYWwgc2Nh
bGUgb2YgdGhlIHZpZXdwb3J0IHRvIAorICAgICAqIGZpdCB3ZWIgY29udGVudC4KKyAgICAgKgor
ICAgICAqIFNpbmNlOiAxLjMuNAorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxz
W1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInZpZXdwb3J0LWF0
dHJpYnV0ZXMtY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3
Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBH
X1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsIE5VTEws
CisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAg
ICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRS
SUJVVEVTKTsKKyAgICAgICAgICAgIAorCisgICAgLyoKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMg
b2YgdmlydHVhbCBtZXRob2RzCiAgICAgICovCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGVfd2Vi
X3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7CkBAIC0zMTIwLDcg
KzMxNDUsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3KQogICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCks
ICJub3RpZnkiLCBHX0NBTExCQUNLKHdlYmtpdF93ZWJfdmlld19zZXR0aW5nc19ub3RpZnkpLCB3
ZWJWaWV3KTsKIAogICAgIHByaXYtPndlYldpbmRvd0ZlYXR1cmVzID0gYWRvcHRQbGF0Zm9ybVJl
Zih3ZWJraXRfd2ViX3dpbmRvd19mZWF0dXJlc19uZXcoKSk7Ci0KKyAgICBwcml2LT52aWV3cG9y
dEF0dHJpYnV0ZXMgPSBhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X25ldygwLCAwLCAwLCAwKSk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzID0gYWRvcHRQbGF0Zm9y
bVJlZihnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJl
ZSwgZ19vYmplY3RfdW5yZWYpKTsKIAogICAgIHByaXYtPmN1cnJlbnRDbGlja0NvdW50ID0gMDsK
QEAgLTQ0ODIsNiArNDUwNyw0NSBAQCBnYm9vbGVhbiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdf
c291cmNlX21vZGUgKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIEZBTFNFOwog
fQogCisvKioKKyAqIHdlYmtpdF93ZWJfdmlld19pbml0X3ZpZXdwb3J0X2F0dHJpYnV0ZXM6Cisg
KiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICogQGRlc2t0b3BXaWR0aDogdGhlIHdpZHRo
IG9mIHZpZXdwb3J0IGluIHBpeGVscyB0aGF0IHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2VicGFnZXMg
ZGVzaWduZWQgZm9yIGEgZGVza3RvcCBVQQorICogQGRldmljZVdpZHRoOiB0aGUgd2lkdGggb2Yg
dGhlIHNjcmVlbiBpbiBwaXhlbHMKKyAqIEBkZXZpY2VIZWlnaHQ6IHRoZSBoZWlnaHQgb2YgdGhl
IHNjcmVlbiBpbiBwaXhlbHMgCisgKiBAZGV2aWNlRFBJOiB0aGUgbnVtYmVyIG9mIGRvdHMgcGVy
IGluY2ggb2YgdGhlIHNjcmVlbgorICoKKyAqIEluaXRpYWxpemUgdGhlIGN1cnJlbnQgdmlld3Bv
cnQgc2V0dGluZyBnaXZlbiB0aGUgQGRlc2t0b3BXaWR0aCwgQGRldmljZVdpZHRoLCBAZGV2aWNl
SGVpZ2h0LCBhbmQgQGRldmljZURQSS4KKyAqIAorICogU2luY2U6IDEuMy40CisgKi8KK3ZvaWQg
d2Via2l0X3dlYl92aWV3X2luaXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBnaW50IGRlc2t0b3BXaWR0aCwgZ2ludCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZpY2VI
ZWlnaHQsIGdpbnQgZGV2aWNlRFBJKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIHdlYlZpZXctPnByaXYtPnZpZXdwb3J0QXR0cmli
dXRlcyA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhkZXNrdG9wV2lkdGgsIGRldmlj
ZVdpZHRoLCBkZXZpY2VIZWlnaHQsIGRldmljZURQSSk7Cit9CisKKy8qKgorICogd2Via2l0X3dl
Yl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzOgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdl
YlZpZXcKKyAqCisgKiBPYnRhaW5zIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFzc29j
aWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBUaGUgI1dlYktpdFdlYlZpZXcgYWx3
YXlzIGhhcyBhbiBhc3NvY2lhdGVkCisgKiBpbnN0YW5jZSBvZiAjV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzLiBUaGUgcmVmZXJlbmNlIHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAqIHRoaXMgY2FsbCBp
cyBvd25lZCBieSB0aGUgI1dlYktpdFdlYlZpZXcuIAorICoKKyAqIFJldHVybiB2YWx1ZTogKHRy
YW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpbnN0YW5jZQorICoK
KyAqIFNpbmNlOiAxLjMuNAorICovCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93
ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwg
TlVMTCk7CisgICAKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVz
LmdldCgpOworfQorCiAvLyBJbnRlcm5hbCBzdWJyZXNvdXJjZSBtYW5hZ2VtZW50CiB2b2lkIHdl
YmtpdF93ZWJfdmlld19hZGRfcmVzb3VyY2UoV2ViS2l0V2ViVmlldyogd2ViVmlldywgY29uc3Qg
Y2hhciogaWRlbnRpZmllciwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291cmNlKQogewpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IGEzMjAxMzEuLjc3ZmFlZmIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQwMSw2ICs0MDEsMTYgQEAgd2Via2l0X2dldF9jYWNoZV9t
b2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRE
T01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCAgICAgICAgICAg
ICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCitXRUJLSVRfQVBJIHZvaWQg
Cit3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9hdHRyaWJ1dGVzICAgICAgICAoV2ViS2l0
V2ViVmlldyAgICAgICAgKndlYlZpZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgZGVza3RvcFdpZHRoLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
ICAgICAgICAgICBkZXZpY2VXaWR0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCAgICAgICAgICAgICAgICAgZGV2aWNlSGVpZ2h0LCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAg
ICAgICAgICAgICBkZXZpY2VEUEkpOworCitXRUJLSVRfQVBJIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRlcyogCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMgICAgICAgICAg
ICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogR19FTkRfREVDTFMKIAogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKaW5kZXggMTE2ZmZjMy4uNmFkNWI1NCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEw
LTEwLTA4ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBt
ZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NDU0NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGUgdmlld3BvcnQgcHJv
cGVydGllcyBmb3IgV2ViS2l0R3RrLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dCk6IEFkZGVkIEphdmFTY3JpcHQgQVBJIGZvciBzZXR0aW5nIHRoZSBzaXplIG9mIHRoZSB2aXNp
YmxlIHZpZXdwb3J0LgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0
aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3Bw
OgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dCk6IEFkZGVkIGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8u
CisKIDIwMTAtMTAtMDggIEpvY2VseW4gVHVyY290dGUgIDxqb2NlbHluLnR1cmNvdHRlQG5va2lh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbi4K
ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVy
LmNwcAppbmRleCAwYTdjMTFmLi45ZjIwYmUzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9y
Zz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTM5LDYgKzE0MCwyMiBAQCBz
dGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKUwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0
UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFy
Z3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291
bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisK
KyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJn
dW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgZG91
YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNb
MV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRl
c3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xs
ZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmNv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZVdpZHRoKSwg
c3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVIZWlnaHQpKTsKKyAgIAorICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZHVtcERh
dGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVm
IGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwg
Y29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewog
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMTg3
Miw2ICsxODg5LDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0
YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgImR1bXBCYWNrRm9yd2FyZExpc3QiLCBkdW1wQmFj
a0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVT
Y3JvbGxQb3NpdGlvbnMiLCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsIGR1bXBDaGlsZEZyYW1l
c0FzVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBDb25maWd1cmF0aW9uRm9y
Vmlld3BvcnQiLCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0LCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAg
IHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBkdW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgZHVtcERhdGFiYXNlQ2Fs
bGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0
eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcEVkaXRpbmdDYWxsYmFja3Mi
LCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCA3NTVhMmIyLi43
NmUzOTI1IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmgKQEAgLTI3OSw2ICsyNzksOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFib3J0
TW9kYWwoKTsKIAorICAgIHZvaWQgY29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFi
bGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCk7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIEFQ
SSB0ZXN0IGZ1bmN0aW9ucyBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gcGxhdGZvcm0tc3Bl
Y2lmaWMgCiAgICAgLy8gdW5pdCB0ZXN0cyBvdXRzaWRlIG9mIERSVCBvbmNlIHRoZXkgZXhpc3Qu
CiAgICAgdm9pZCBhcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0
ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCmluZGV4IGQ4
MzEwNzYuLjg2N2NhZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0
ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApAQCAtNCw2ICs0LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEph
biBNaWNoYWVsIEFsb256byA8am1hbG9uem9AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAy
MDA5IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29u
ZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtODA0LDMgKzgw
NSwxOSBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5nQmVoYXZpb3IoY29u
c3QgY2hhciogZWRpdGluZ0JlaGF2aW9yKQogdm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJv
cnRNb2RhbCgpCiB7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7
CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92
aWV3KG1haW5GcmFtZSk7CisgICAgd2Via2l0X3dlYl92aWV3X2luaXRfdmlld3BvcnRfYXR0cmli
dXRlcyh3ZWJWaWV3LCA5ODAsIDMyMCwgNDgwLCAxNjApOworCisgICAgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXMod2ViVmlldyk7CisgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Y29tcHV0YXRpb24odmlld3BvcnRBdHRyaWJ1dGVzLCBtYWluRnJhbWUsIGF2YWlsYWJsZVdpZHRo
LCBhdmFpbGFibGVIZWlnaHQpOworCisgICAgZnByaW50ZihzdGRvdXQsICJ2aWV3cG9ydCBzaXpl
ICVkeCVkIHNjYWxlICVmIHdpdGggbGltaXRzIFslZiwgJWZdXG4iLAorICAgICAgICAgICAgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoKHZpZXdwb3J0QXR0cmlidXRlcyksCisg
ICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaGVpZ2h0KHZpZXdwb3J0
QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aW5pdGlhbF9zY2FsZV9mYWN0b3Iodmlld3BvcnRBdHRyaWJ1dGVzKSwKKyAgICAgICAgICAgIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rvcih2aWV3cG9y
dEF0dHJpYnV0ZXMpLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0
X21heGltdW1fc2NhbGVfZmFjdG9yKHZpZXdwb3J0QXR0cmlidXRlcykpOworfQpkaWZmIC0tZ2l0
IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2lu
LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxl
cldpbi5jcHAKaW5kZXggNmRkNjA5Yy4uNzAzNGY2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBA
IC0xMzkwLDMgKzEzOTAsNyBAQCB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzZXRFZGl0aW5n
QmVoYXZpb3IoY29uc3QgY2hhciogZWRpdGluZ0JlaGF2aW9yKQogdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6YWJvcnRNb2RhbCgpCiB7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFi
bGVIZWlnaHQpCit7Cit9Cg==
</data>
<flag name="review"
          id="60171"
          type_id="1"
          status="-"
          setter="xan.lopez"
    />
    <flag name="commit-queue"
          id="60170"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>70527</attachid>
            <date>2010-10-12 06:42:48 -0700</date>
            <delta_ts>2010-10-25 00:10:12 -0700</delta_ts>
            <desc>Proposed Patch7</desc>
            <filename>viewport7.diff</filename>
            <type>text/plain</type>
            <size>38268</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBlMTkwMmUxLi4xOWM0NjM1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSB0byBnZXQgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCAK
KwogMjAxMC0xMC0wOCAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgQ3NhYmEgT3N6dHJvZ29uw6FjLgpkaWZmIC0tZ2l0IGEvR05VbWFr
ZWZpbGUuYW0gYi9HTlVtYWtlZmlsZS5hbQppbmRleCAxYzk1Y2QxLi5mZmM2YTQxIDEwMDY0NAot
LS0gYS9HTlVtYWtlZmlsZS5hbQorKysgYi9HTlVtYWtlZmlsZS5hbQpAQCAtMzE2LDYgKzMxNiw3
IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmZyYW1lLmggXApAQCAtMzc4LDYgKzM3OSw3IEBAIHdlYmtpdGd0a19zb3VyY2Vz
ICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmMgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHZlcnNpb24uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuY3Bw
IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmNwcCBcCiAJV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyYzYxOGYzLi5lZmMyYTI4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTAtMDggIEpvb25lIEh1ciAgPGpvb25lQGts
ZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIEluY2x1ZGVkIHZp
ZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0aworCisgICAgICAgICogcGxhdGZvcm0vZ3Rr
L1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4Y2VwdCB2aWV3cG9ydC00NS5odG1sLgor
CiAyMDEwLTEwLTExICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZWJhc2VsaW5lIHNvbWUgZmFpbGluZyBHVEsrIHRlc3RzLgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
dGsvU2tpcHBlZAppbmRleCA1N2M1NDhiLi5hNWM5MmJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tp
cHBlZApAQCAtNTg4NSw3ICs1ODg1LDggQEAgZnVsbHNjcmVlbi8KIGNhbnZhcy9waGlsaXAvdGVz
dHMvMmQucGF0aC5pc1BvaW50SW5QYXRoLmVkZ2UuaHRtbAogCiAjIHZpZXdwb3J0IG1ldGEgdGFn
IHN1cHBvcnQKLWZhc3Qvdmlld3BvcnQKKyMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ3NDgxCitmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTQ1Lmh0bWwKIAogIyBQcmUt
SE1UTDUgcGFyc2VyIHF1aXJrcyBvbmx5IGFwcGx5IHRvIHRoZSBtYWMgcG9ydCBmb3Igbm93Lgog
ZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRleCA5MmViY2U2Li40
MjgzNmI0IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysgYi9XZWJLaXQvZ3Rr
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDEwLTEwLTA4ICBKb29uZSBIdXIgIDxqb29u
ZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBUaGlzIHBh
dGNoIGFsbG93cyB0byBnZXQgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgdG8gc2V0IHRoZSB3aWR0
aCBhbmQgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQKKyAgICAgICAgdXNlZCB0byBkaXNw
bGF5IHdlYiBjb250ZW50LgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0
RGF0YURpZENoYW5nZSk6IEFkZGVkIHRvIGVtaXQgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hh
bmdlZCBzaWduYWwuCisgICAgICAgIChXZWJLaXQ6OkNocm9tZUNsaWVudDo6c2V0Q3Vyc29yKToK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDoKKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuY3BwOiBBZGRlZCB0byBnZXQgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMu
CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQpOgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2dldF93aWR0aCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aGVpZ2h0KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pbml0aWFs
X3NjYWxlX2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
bWluaW11bV9zY2FsZV9mYWN0b3IpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8pOgorICAgICAgICAod2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3VzZXJfc2NhbGFibGUpOgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uKTogQ29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3cG9ydCBh
dHRyaWJ1dGVzIGdpdmVuIHRoZSBhdmFpbGFibGUgd2lkdGgvaGVpZ2h0IG9mIHRoZSB2aWV3cG9y
dC4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uX2ludGVy
bmFsKToKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg6CisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2Rpc3Bvc2UpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2luaXQpOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NldF92
aWV3cG9ydF9hdHRyaWJ1dGVzKTogU2V0IGEgbmV3IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBn
aXZlbiB0aGUgZGVza3RvcFdpZHRoLCBkZXZpY2VXaWR0aCwgZGV2aWNlSGVpZ2h0LCBhbmQgZGV2
aWNlRFBJLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVz
KTogUmV0dXJuIHRoZSBpbnN0YW5jZSBvZiB0aGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGhl
bGQgYnkgdGhlIGdpdmVuIFdlYktpdFdlYlZpZXcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdl
YnZpZXcuaDoKKwogMjAxMC0xMC0wOSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6LgpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDdlNDA5MGIuLjIyM2Iw
MzYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
QEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWVD
bGllbnRHdGsuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIK
ICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRmlsZUNob29zZXIuaCIKQEAgLTYw
Miw3ICs2MDMsMTcgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxlcyhjb25z
dCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkMKICAgICBjaG9vc2VyLT5pY29u
TG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAotdm9pZCBD
aHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQordm9pZCBDaHJvbWVDbGllbnQ6
OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
KiB2aWV3cG9ydEF0dHJpYnV0ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXMobV93ZWJWaWV3KTsKKyAgICBXZWJDb3JlOjpGbG9hdFJlY3QgcmVjdCA9IGNvcmUobV93
ZWJWaWV3KS0+Y2hyb21lKCktPnBhZ2VSZWN0KCk7CisKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbCh2aWV3cG9ydEF0dHJpYnV0ZXMsIGFyZ3VtZW50
cywgV2ViQ29yZTo6SW50U2l6ZShzdGF0aWNfY2FzdDxnaW50PihyZWN0LndpZHRoKCkpLCBzdGF0
aWNfY2FzdDxnaW50PihyZWN0LmhlaWdodCgpKSkpOworCisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fd2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIHZpZXdwb3J0QXR0
cmlidXRlcyk7IAorfQorCit2b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IFdlYkNv
cmU6OkN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IDIxYzQ2NzcuLmE2ZGFlN2QgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysr
IGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAtMTA5LDYg
KzEwOSw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRU
b29sVGlwKGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CiAKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0OworCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkK
ICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFt
ZSosIGNvbnN0IFdURjo6U3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGZjNzFjMmMuLjI0Mjhm
NjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNw
b25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
ZGVmaW5lcy5oCmluZGV4IGIwNmEzYmYuLjM5OWNiNGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZp
bmVzLmgKQEAgLTkyLDYgKzkyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1
bHRDbGFzcyBXZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9u
OwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyBX
ZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9X
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzOwordHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlc0NsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHBy
aXZhdGUuaAppbmRleCA2MTZlZTZiLi5hNTQ1ZDVkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0
ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3Bv
cnRhdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR3ZWJmcmFtZS5oPgpAQCAtNjMsNiArNjQsNyBAQAogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgIlZpZXdwb3J0QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiV2luZG93
RmVhdHVyZXMuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCkBAIC0xNDAsNiArMTQyLDcgQEAgZXh0ZXJuICJDIiB7CiAKICAgICAgICAgV2ViS2l0
V2ViRnJhbWUqIG1haW5GcmFtZTsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViQmFj
a0ZvcndhcmRMaXN0PiBiYWNrRm9yd2FyZExpc3Q7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwogCiAgICAgICAgIFBs
YXRmb3JtUmVmUHRyPEd0a01lbnU+IGN1cnJlbnRNZW51OwogICAgICAgICBnaW50IGxhc3RQb3B1
cFhQb3NpdGlvbjsKQEAgLTMxNiw2ICszMTksMTEgQEAgZXh0ZXJuICJDIiB7CiAgICAgV2ViS2l0
R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbioKICAgICB3ZWJraXRfZ2VvbG9jYXRpb25fcG9saWN5
X2RlY2lzaW9uX25ldyhXZWJLaXRXZWJGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0aW9uKik7CiAK
KyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIAorICAgIHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX25ldyhnaW50IGRlc2t0b3BXaWR0aCwgZ2ludCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZp
Y2VIZWlnaHQsIGdpbnQgZGV2aWNlRFBJKTsKKyAgICB2b2lkIAorICAgIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uX2ludGVybmFsKFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyogdmlld3BvcnRBdHRyaWJ1dGVzLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYg
YXJndW1lbnRzLCBXZWJDb3JlOjpJbnRTaXplIGF2YWlsYWJsZVNpemUpOworCiAgICAgLy8gRklY
TUU6IG1vdmUgdGhpcyB0byB3ZWJraXRuZXR3b3JrcmVxdWVzdC5oIG9uY2UgdGhlIEFQSSBpcyBh
Z3JlZWQgdXBvbi4KICAgICBXRUJLSVRfQVBJIFNvdXBNZXNzYWdlKgogICAgIHdlYmtpdF9uZXR3
b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNw
cCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQyOTZjMgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAKQEAgLTAsMCAr
MSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRw
Lm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5oIgorCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisvKioKKyAqIFNFQ1RJT046
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzCisgKiBAc2hvcnRfZGVzY3JpcHRpb246IFJlcHJlc2Vu
dHMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgb2YgYSB3ZWJwYWdlCisgKiBAc2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQKKyAqCisgKiAjV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzIGNvbnRhaW5zIHRoZSBzaXplIGFuZCBzY2FsZSBvZiB0aGUgdmll
d3BvcnQuIAorICogQSB1c2VyIGFnZW50IGNhbiB1c2UgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyB0byBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQuCisgKiBUaGlzIGFsbG93cyB0byBmaXQg
YSB3ZWJwYWdlIHRvIHRoZSBkZXZpY2Ugc2NyZWVuLgorICogCisgKiBBICNXZWJLaXRXZWJWaWV3
IGNvbnRhaW5zIGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcywgc28geW91IGNhbiB1c2UgI3dl
YmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcworICogdG8gZ2V0IHRoZSAjV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFuZCB1c2UgI3dlYmtpdF93ZWJfdmlld19zZXRfdmlld3Bv
cnRfYXR0cmlidXRlcworICogdG8gc2V0IGEgbmV3ICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMu
CisgKiAKKyAqICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZXMgc2ln
bmFsIHdpbGwgYmUgZW1pdHRlZCB3aXRoIAorICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3
aGVuIGEgd2VicGFnZSBoYXMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgKgorICogRm9yIG1v
cmUgaW5mb3JtYXRpb24gb24gdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMsIHJlZmVyIHRvIHRoZSBT
YWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQKKyAqIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29t
L3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBwbGVhcHBsaWNhdGlvbnMvcmVmZXJlbmNl
L3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0YXRhZ3MuaHRtbAorICoKKyAqIDxpbmZvcm1hbGV4
YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogLzwhLS0gLS0+KiBTZXQgYSBuZXcgV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzIGdpdmVuIHRoZSBkZXNrdG9wIHdpZHRoLCB0aGUgZGV2aWNlIHNpemUs
IGFuZCB0aGUgZGV2aWNlIERQSS4gKjwhLS0gLS0+LworICogIHdlYmtpdF93ZWJfdmlld19zZXRf
dmlld3BvcnRfYXR0cmlidXRlcyh3ZWJfdmlldywgOTgwLCAzMjAsIDQ4MCwgMTYwKTsKKworICog
LzwhLS0gLS0+KiBHZXQgdGhlIGN1cnJlbnQgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICo8IS0t
IC0tPi8KKyAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0g
d2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKHdlYl92aWV3KTsKKworICog
LzwhLS0gLS0+KiBDb25uZWN0IHRvIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZXMgc2ln
bmFsICo8IS0tIC0tPi8KKyAqIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAidmlld3BvcnQt
YXR0cmlidXRlcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfY2hhbmdlX2NiKSwgd2Vi
X3ZpZXcpOworICoKKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8K
KworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlIHsKKyAgICBnaW50IHdpZHRoOworICAgIGdpbnQgaGVpZ2h0OworICAg
IGdmbG9hdCB0YXJnZXREZW5zaXR5RFBJOworICAgIGdmbG9hdCBpbml0aWFsU2NhbGVGYWN0b3I7
CisgICAgZ2Zsb2F0IG1pbmltdW1TY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWF4aW11bVNjYWxl
RmFjdG9yOworICAgIGdib29sZWFuIGlzVXNlclNjYWxhYmxlOworICAgIGdib29sZWFuIGlzVmFs
aWQ7CisgICAgZ2ludCBkZXZpY2VEUEk7CisgICAgZ2ludCBkZXZpY2VXaWR0aDsKKyAgICBnaW50
IGRldmljZUhlaWdodDsKKyAgICBnaW50IGRlc2t0b3BXaWR0aDsKK307CisKKyNkZWZpbmUgV0VC
S0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFz
cyogdmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2
YXRlKHZpZXdwb3J0QXR0cmlidXRlc0NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAgV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJV
VEVTX0dFVF9QUklWQVRFKHZpZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdiA9IHByaXY7CisK
KyAgICBwcml2LT53aWR0aCA9IDA7CisgICAgcHJpdi0+aGVpZ2h0ID0gMDsKKyAgICBwcml2LT50
YXJnZXREZW5zaXR5RFBJID0gLTEuMDsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IgPSAt
MS4wOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJpdi0+bWF4
aW11bVNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9IHRydWU7
CisgICAgcHJpdi0+aXNWYWxpZCA9IGZhbHNlOworfQorCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhnaW50IGRlc2t0b3BXaWR0aCwgZ2lu
dCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZpY2VIZWlnaHQsIGdpbnQgZGV2aWNlRFBJKQoreworICAg
IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJ
RVdQT1JUX0FUVFJJQlVURVMoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJ
QlVURVMsIE5VTEwpKTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2
ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUodmlld3BvcnRBdHRyaWJ1
dGVzKTsKKworICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IGRlc2t0b3BXaWR0aDsKKyAgICBwcml2
LT5kZXZpY2VXaWR0aCA9IGRldmljZVdpZHRoOworICAgIHByaXYtPmRldmljZUhlaWdodCA9IGRl
dmljZUhlaWdodDsKKyAgICBwcml2LT5kZXZpY2VEUEkgPSBkZXZpY2VEUEk7CisgICAgcHJpdi0+
aXNWYWxpZCA9IGZhbHNlOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlczsKK30KKwor
LyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGg6CisgKiBAdmlld3Bv
cnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5z
IHRoZSB3aWR0aCBvZiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpbiBwaXhlbHMuCisg
KgorICogUmV0dXJuczogdGhlIHdpZHRoIG9mIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
IGluIHBpeGVscworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnaW50IHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2dldF93aWR0aChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0
QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BP
UlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKworICAgIHJldHVybiB2aWV3
cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndpZHRoOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQ6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlICNX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW4gcGl4ZWxzLgorICoKKyAqIFJldHVybnM6IHRoZSBo
ZWlnaHQgb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW4gcGl4ZWxzCisgKgorICog
U2luY2U6IDEuMy41CisgKi8KK2dpbnQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hl
aWdodChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAg
ICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3
cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnBy
aXYtPmhlaWdodDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aW5pdGlhbF9zY2FsZV9mYWN0b3I6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0aWFsIHNjYWxlIG9mIHRo
ZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzLgorICoKKyAqIFJldHVybnM6IHRoZSBpbml0aWFs
IHNjYWxlIG9mIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogU2luY2U6IDEu
My41CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9z
Y2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMp
Cit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVU
RVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1
dGVzLT5wcml2LT5pbml0aWFsU2NhbGVGYWN0b3I7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yOgorICogQHZpZXdwb3J0QXR0
cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyB0aGUg
bWluaW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcy4KKyAq
CisgKiBSZXR1cm5zOiB0aGUgbWluaW11bSBzY2FsZSB2YWx1ZSBvZiB0aGUgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnZmxvYXQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDAp
OworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+bWluaW11bVNjYWxlRmFj
dG9yOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9tYXhpbXVt
X3NjYWxlX2ZhY3RvcjoKKyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0
QXR0cmlidXRlcworICoKKyAqIFJldHVybnMgdGhlIG1heGltdW0gc2NhbGUgdmFsdWUgb2YgdGhl
ICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMuCisgKgorICogUmV0dXJuczogdGhlIG1heGltdW0g
c2NhbGUgdmFsdWUgb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBTaW5j
ZTogMS4zLjUKKyAqLworZ2Zsb2F0IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9tYXhp
bXVtX3NjYWxlX2ZhY3RvcihXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0cmli
dXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRU
UklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0
dHJpYnV0ZXMtPnByaXYtPm1heGltdW1TY2FsZUZhY3RvcjsKK30KKworLyoqCisgKiB3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvOgorICogQHZpZXdwb3J0
QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyB0
aGUgZGV2aWNlIHBpeGVsIHJhdGlvIHZhbHVlLgorICoKKyAqIFJldHVybnM6IHRoZSBkZXZpY2Ug
cGl4ZWwgcmF0aW8gdmF1bGUKKyAqCisgKiBTaW5jZTogMS4zLjUKKyAqLworZ2Zsb2F0IHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9kZXZpY2VfcGl4ZWxfcmF0aW8oV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwg
MCk7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT50YXJnZXREZW5zaXR5
RFBJOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc191c2Vy
X3NjYWxhYmxlOgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzCisgKgorICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9v
bSBpbiBhbmQgb3V0LgorICoKKyAqIFJldHVybnM6IFRydWUgaWYgdGhlIHVzZXIgY2FuIHpvb20g
aW4gYW5kIG91dCAKKyAqCisgKiBTaW5jZTogMS4zLjUKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3VzZXJfc2NhbGFibGUoV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgZmFsc2Up
OworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+aXNVc2VyU2NhbGFibGU7
Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkOgor
ICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgor
ICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMg
dmFsaWQuCisgKgorICogUmV0dXJuczogVHJ1ZSBpZiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMgaXMgdmFsaWQKKyAqCisgKiBTaW5jZTogMS4zLjUKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAq
dmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIGZhbHNlKTsKKworICAg
IHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQ7Cit9CisKKy8qKgorICog
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb246CisgKiBAdmlld3BvcnRBdHRy
aWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqIEBtYWluRnJhbWU6IGEgI1dl
YktpdFdlYkZyYW1lCisgKiBAYXZhaWxhYmxlV2lkdGg6IHRoZSB3aWR0aCBvZiB0aGUgdmlzaWJs
ZSB2aWV3cG9ydCBpbiBwaXhlbHMKKyAqIEBhdmFpbGFibGVIZWlnaHQ6IHRoZSBoZWlnaHQgb2Yg
dGhlIHZpc2libGUgdmlld3BvcnQgaW4gcGl4ZWxzCisgKgorICogQ29tcHV0ZSB0aGUgb3B0aW1h
bCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGdpdmVuIHRoZSBAYXZhaWxhYmxlV2lkdGggYW5kIEBhdmFp
bGFibGVIZWlnaHQuCisgKiBJdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIHNpemUgb2YgdGhl
IHZpc2libGUgdmlld3BvcnQgaXMgY2hhbmdlZC4gCisgKgorICogU2luY2U6IDEuMy41CisgKi8K
K3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0YXRpb24oV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIFdlYktpdFdlYkZyYW1lKiBtYWluRnJh
bWUsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRy
aWJ1dGVzKSk7CisgICAKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBXZWJLaXQ6OmNvcmUo
bWFpbkZyYW1lKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHMgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICAKKyAgICB3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbCh2aWV3cG9ydEF0dHJpYnV0
ZXMsIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZShhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxl
SGVpZ2h0KSk7Cit9CisKKy8vIGZvciBpbnRlcm5hbCB1c2Ugb25seQordm9pZCB3ZWJraXRfdmll
d3BvcnRfYXR0cmlidXRlc19jb21wdXRhdGlvbl9pbnRlcm5hbChXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHMmIGFyZ3VtZW50cywgV2ViQ29yZTo6SW50U2l6ZSBhdmFpbGFibGVTaXplKQoreworICAgIGdf
cmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRy
aWJ1dGVzKSk7CisKKyAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBhcmd1bWVudHMgcGFyYW1ldGVy
IGlzIHZhbGlkCisgICAgaWYgKGF2YWlsYWJsZVNpemUuaXNFbXB0eSgpKSB7CisgICAgICAgIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQodmlld3BvcnRBdHRyaWJ1dGVzKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUq
IHByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2aWV3cG9ydEF0
dHJpYnV0ZXMpOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRycyA9IFdlYkNv
cmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2LT5kZXNrdG9wV2lk
dGgsIHByaXYtPmRldmljZVdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYt
PmRldmljZUhlaWdodCwgcHJpdi0+ZGV2aWNlRFBJLCBhdmFpbGFibGVTaXplKTsKKworICAgIHBy
aXYtPndpZHRoID0gYXR0cnMubGF5b3V0U2l6ZS53aWR0aCgpOworICAgIHByaXYtPmhlaWdodCA9
IGF0dHJzLmxheW91dFNpemUuaGVpZ2h0KCk7CisgICAgcHJpdi0+dGFyZ2V0RGVuc2l0eURQSSA9
IGF0dHJzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yID0g
YXR0cnMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IGF0dHJz
Lm1pbmltdW1TY2FsZTsKKyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IgPSBhdHRycy5tYXhp
bXVtU2NhbGU7CisgICAgcHJpdi0+aXNVc2VyU2NhbGFibGUgPSBhcmd1bWVudHMudXNlclNjYWxh
YmxlOworICAgIAorICAgIGlmIChwcml2LT53aWR0aCA+IDApIAorICAgICAgICBwcml2LT5pc1Zh
bGlkID0gdHJ1ZTsKKyAgICBlbHNlCisgICAgICAgIHByaXYtPmlzVmFsaWQgPSBmYWxzZTsKK30K
ZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5o
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdjN2FiYQotLS0gL2Rldi9udWxsCisrKyBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKwor
I2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9y
dGF0dHJpYnV0ZXNfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZ
UEVfVklFV1BPUlRfQVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmop
ICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQ
RV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmlu
ZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVD
S19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9S
VF9BVFRSSUJVVEVTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9i
aiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNf
VklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VC
S0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0Vf
R0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitz
dHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5z
dGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXNQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXND
bGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcg
Zm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2
b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgq
X3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMp
ICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2ludAor
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoICAgICAgICAgICAgICAgIChXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkg
Z2ludAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdodCAgICAgICAgICAgICAg
IChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJ
VF9BUEkgZ2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2Fs
ZV9mYWN0b3IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKTsK
KworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5p
bXVtX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJp
YnV0ZXMpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X21heGltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdw
b3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0IAord2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMgKnZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9zY2FsYWJsZSAgICAgKFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnYm9vbGVh
bgord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkICAgICAgICAgICAgIChX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9B
UEkgdm9pZCAKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uICAgICAgICAg
ICAgICAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRX
ZWJGcmFtZSogbWFpbkZyYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2ludCBhdmFpbGFibGVXaWR0aCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ludCBhdmFpbGFibGVIZWlnaHQp
OworCitHX0VORF9ERUNMUworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAK
aW5kZXggMDBhYzkyNi4uMWFmNDg5MSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAK
QEAgLTEwLDYgKzEwLDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAgSWdhbGlhIFMu
TC4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTW92aWFsIENyZWF0aXZlIFRlY2hub2xvZ2llcyBJ
bmMuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IEJvYmJ5IFBvd2VycworICogIENvcHlyaWdodCAo
QykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtMTczLDYgKzE3NCw3IEBAIGVudW0gewogICAgIEdFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lP
Tl9DQU5DRUxMRUQsCiAgICAgT05MT0FEX0VWRU5ULAogICAgIEZSQU1FX0NSRUFURUQsCisgICAg
VklFV1BPUlRfQVRUUklCVVRFU19DSEFOR0VELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0x
MTk2LDYgKzExOTgsNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xlYXIoKTsKICAgICBw
cml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMuY2xlYXIo
KTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuY2xlYXIoKTsKIAogICAgIEhhc2hNYXA8
R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdD
b250ZXh0cyA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFw
PEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2
LT5kcm9wcGluZ0NvbnRleHRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsg
KytpdGVyKQpAQCAtMjQ2MCw2ICsyNDYzLDI3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmll
d19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAg
ICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAogICAgIC8qCisgICAgICogV2ViS2l0V2ViVmll
dzo6dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkCisgICAgICogQHdlYl92aWV3OiB0aGUgb2Jq
ZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRl
czogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRoZSB2aWV3cG9ydCBh
dHRyaWJ1dGVzLgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLWNoYW5nZWQgd2lsbCBiZSBlbWl0dGVkIHdpdGggQHZpZXdwb3J0X2F0dHJpYnV0
ZXMgIAorICAgICAqIHdoZW4gYSB3ZWJwYWdlIGhhcyB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4g
WW91IGNhbiBhbHNvIGdldCB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBieSBjYWxsaW5n
IAorICAgICAqICN3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMuCisgICAg
ICogQHZpZXdwb3J0X2F0dHJpYnV0ZXMgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2aWV3cG9ydCBs
YXlvdXQgdG8gZml0IGEgd2VicGFnZSB0byB0aGUgZGV2aWNlIHNjcmVlbi4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJ
RVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRF0gPSBnX3NpZ25hbF9uZXcoInZpZXdwb3J0LWF0dHJp
YnV0ZXMtY2hhbmdlZCIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xh
c3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJ
R05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisg
ICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAg
R19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJV
VEVTKTsKKworICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9k
cwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dl
Yl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3OwpAQCAtMzEyMyw3ICszMTQ3LDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICBn
X3NpZ25hbF9jb25uZWN0KHByaXYtPndlYlNldHRpbmdzLmdldCgpLCAibm90aWZ5IiwgR19DQUxM
QkFDSyh3ZWJraXRfd2ViX3ZpZXdfc2V0dGluZ3Nfbm90aWZ5KSwgd2ViVmlldyk7CiAKICAgICBw
cml2LT53ZWJXaW5kb3dGZWF0dXJlcyA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3dlYl93aW5k
b3dfZmVhdHVyZXNfbmV3KCkpOwotCisgICAgcHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzID0gYWRv
cHRQbGF0Zm9ybVJlZih3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoMCwgMCwgMCwgMCkp
OwogICAgIHByaXYtPnN1YlJlc291cmNlcyA9IGFkb3B0UGxhdGZvcm1SZWYoZ19oYXNoX3RhYmxl
X25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0X3VucmVm
KSk7CiAKICAgICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCA9IDA7CkBAIC00NDg1LDYgKzQ1MDks
NDMgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2RlIChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorLyoqCisgKiB3ZWJr
aXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXM6CisgKiBAd2ViVmlldzogYSAjV2Vi
S2l0V2ViVmlldworICogQGRlc2t0b3BXaWR0aDogdGhlIHdpZHRoIG9mIHZpZXdwb3J0IGluIHBp
eGVscyB0aGF0IHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2VicGFnZXMgZGVzaWduZWQgZm9yIGEgZGVz
a3RvcCBVQQorICogQGRldmljZVdpZHRoOiB0aGUgd2lkdGggb2YgdGhlIHNjcmVlbiBpbiBwaXhl
bHMKKyAqIEBkZXZpY2VIZWlnaHQ6IHRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbiBpbiBwaXhlbHMg
CisgKiBAZGV2aWNlRFBJOiB0aGUgbnVtYmVyIG9mIGRvdHMgcGVyIGluY2ggb2YgdGhlIHNjcmVl
bgorICoKKyAqIFNldHMgYSBuZXcgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBnaXZlbiB0aGUg
QGRlc2t0b3BXaWR0aCwgQGRldmljZVdpZHRoLCBAZGV2aWNlSGVpZ2h0LCBhbmQgQGRldmljZURQ
SS4KKyAqIEl0IGlzIGludGVybmFsbHkgYXR0YWNoZWQgdG8gdGhlIGdpdmVuICNXZWJLaXRXZWJW
aWV3LgorICogCisgKiBTaW5jZTogMS4zLjUKKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBkZXNrdG9w
V2lkdGgsIGdpbnQgZGV2aWNlV2lkdGgsIGdpbnQgZGV2aWNlSGVpZ2h0LCBnaW50IGRldmljZURQ
SSkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7
CisKKyAgICB3ZWJWaWV3LT5wcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMgPSBhZG9wdFBsYXRmb3Jt
UmVmKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhkZXNrdG9wV2lkdGgsIGRldmljZVdp
ZHRoLCBkZXZpY2VIZWlnaHQsIGRldmljZURQSSkpOworfQorCisvKioKKyAqIHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlczoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJW
aWV3CisgKgorICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMgaGVsZCBieSB0aGUgZ2l2ZW4gI1dlYktpdFdlYlZpZXcuCisgKgorICogUmV0dXJu
IHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlu
c3RhbmNlCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK1dlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVX
KHdlYlZpZXcpLCBOVUxMKTsKKyAgIAorICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT52aWV3cG9y
dEF0dHJpYnV0ZXMuZ2V0KCk7Cit9CisKIC8vIEludGVybmFsIHN1YnJlc291cmNlIG1hbmFnZW1l
bnQKIHZvaWQgd2Via2l0X3dlYl92aWV3X2FkZF9yZXNvdXJjZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBjaGFyKiBpZGVudGlmaWVyLCBXZWJLaXRXZWJSZXNvdXJjZSogd2ViUmVzb3Vy
Y2UpCiB7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggYTMyMDEzMS4uZTBjOGY3MSAx
MDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtNDAxLDYgKzQwMSwxNiBAQCB3ZWJraXRf
Z2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRf
QVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJ
VF9BUEkgdm9pZCAKK3dlYmtpdF93ZWJfdmlld19zZXRfdmlld3BvcnRfYXR0cmlidXRlcyAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICBkZXNrdG9w
V2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgICAgICAgICAgIGRldmljZVdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnaW50ICAgICAgICAgICAgICAgICBkZXZpY2VI
ZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdpbnQgICAgICAgICAgICAgICAgIGRldmljZURQSSk7CisKK1dFQktJVF9BUEkgV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzKiAKK3dlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRl
cyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDNmZmExNzguLjNlMmFmMjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBA
QAorMjAxMC0xMC0wOCAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gU3VwcG9ydCBmb3Igdmll
d3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTQ1NDQzCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRlc3RpbmcgdGhlIHZpZXdw
b3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKGR1bXBDb25maWd1cmF0aW9uRm9y
Vmlld3BvcnQpOiBBZGRlZCBKYXZhU2NyaXB0IEFQSSB0byBzZXQgdGhlIHNpemUgb2YgdGhlIHZp
c2libGUgdmlld3BvcnQuCisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVu
Y3Rpb25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5o
OgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5j
cHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdw
b3J0KTogQWRkZWQgdG8gdGVzdCB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMuY3BwOgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6
CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0
KTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xs
ZXJXeC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KTogRGl0dG8uCisKIDIwMTAtMTAtMTEgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDBh
N2MxMWYuLjlmMjBiZTMgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xMzksNiArMTQwLDIyIEBAIHN0YXRpYyBKU1ZhbHVl
UmVmIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTCiAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQog
CitzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVj
dCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJsZSBh
dmFpbGFibGVXaWR0aCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4
Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBkb3VibGUgYXZhaWxhYmxl
SGVpZ2h0ID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9u
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIq
IGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0
R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlV2lkdGgpLCBzdGF0aWNfY2FzdDxp
bnQ+KGF2YWlsYWJsZUhlaWdodCkpOworICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZp
bmVkKGNvbnRleHQpOworfQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRGF0YWJhc2VDYWxsYmFj
a3NDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpT
T2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVl
UmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVz
dENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxl
cio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0xODcyLDYgKzE4ODksNyBA
QCBKU1N0YXRpY0Z1bmN0aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25z
KCkKICAgICAgICAgeyAiZHVtcEJhY2tGb3J3YXJkTGlzdCIsIGR1bXBCYWNrRm9yd2FyZExpc3RD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9u
cyIsIGR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAiZHVtcENoaWxkRnJhbWVzQXNUZXh0IiwgZHVtcENoaWxkRnJhbWVzQXNUZXh0Q2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKKyAgICAgICAgeyAiZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCIsIGR1
bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERPTUFz
V2ViQXJjaGl2ZSIsIGR1bXBET01Bc1dlYkFyY2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJkdW1wRGF0YWJhc2VDYWxsYmFja3MiLCBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsIGR1bXBFZGl0aW5n
Q2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCmluZGV4IDc1NWEyYjIuLjc2ZTM5MjUgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgK
KysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaApA
QCAtMjc5LDYgKzI3OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWJvcnRNb2RhbCgpOwogCisg
ICAgdm9pZCBjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQg
YXZhaWxhYmxlSGVpZ2h0KTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3QgZnVuY3Rp
b25zIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAKICAgICAv
LyB1bml0IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KICAgICB2b2lkIGFw
aVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEsIEpTU3Ry
aW5nUmVmIGJhc2VVUkwpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggZDgzMTA3Ni4uY2FjNTIz
MCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5
b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hhZWwgQWxv
bnpvIDxqbWFsb256b0BnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29sbGFib3Jh
IEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MDQsMyArODA1LDE5IEBAIHZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKiBlZGl0
aW5nQmVoYXZpb3IpCiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKIHsK
IH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0
KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICBXZWJLaXRX
ZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9mcmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1l
KTsKKyAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmlldywg
OTgwLCAzMjAsIDQ4MCwgMTYwKTsKKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmll
d3BvcnRBdHRyaWJ1dGVzID0gd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVz
KHdlYlZpZXcpOworICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGF0aW9uKHZp
ZXdwb3J0QXR0cmlidXRlcywgbWFpbkZyYW1lLCBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVp
Z2h0KTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAidmlld3BvcnQgc2l6ZSAlZHglZCBzY2FsZSAl
ZiB3aXRoIGxpbWl0cyBbJWYsICVmXVxuIiwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF93aWR0aCh2aWV3cG9ydEF0dHJpYnV0ZXMpLAorICAgICAgICAgICAgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdodCh2aWV3cG9ydEF0dHJpYnV0ZXMpLAor
ICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2luaXRpYWxfc2NhbGVf
ZmFjdG9yKHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19nZXRfbWluaW11bV9zY2FsZV9mYWN0b3Iodmlld3BvcnRBdHRyaWJ1dGVzKSwK
KyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9tYXhpbXVtX3NjYWxl
X2ZhY3Rvcih2aWV3cG9ydEF0dHJpYnV0ZXMpKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCBj
NjZjOWRhLi4yNDdlNWIzIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCkBAIC05NDQsMyArOTQ0LDggQEAg
dm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCiB7CiAgICAgW05TQXBwIGFi
b3J0TW9kYWxdOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQorewor
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVz
dENvbnRyb2xsZXJXaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91
dFRlc3RDb250cm9sbGVyV2luLmNwcAppbmRleCA2ZGQ2MDljLi43MDM0ZjZkIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHAKQEAgLTEzOTAsMyArMTM5MCw3IEBAIHZvaWQgTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OnNldEVkaXRpbmdCZWhhdmlvcihjb25zdCBjaGFyKiBlZGl0aW5nQmVoYXZpb3IpCiB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjphYm9ydE1vZGFsKCkKIHsKIH0KKwordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0
aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKaW5kZXggNWZiYTFj
Zi4uYmY3MzY3MiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5
b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
d3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKQEAgLTUwNSw2ICs1MDUsMTEgQEAgdm9pZCBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6YWJvcnRNb2RhbCgpCiB7CiB9CiAKK3ZvaWQgTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgs
IGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCiBK
U1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0
eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAogewogICAg
IC8vIEZJWE1FOiBJbXBsZW1lbnQK
</data>
<flag name="review"
          id="60386"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71716</attachid>
            <date>2010-10-25 00:10:12 -0700</date>
            <delta_ts>2010-10-28 19:59:37 -0700</delta_ts>
            <desc>Proposed patch8</desc>
            <filename>viewport8.diff</filename>
            <type>text/plain</type>
            <size>39960</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAzZWIyZjMyLi5hZTk3MmZm
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMjUgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSB0byBnZXQgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCAK
KwogMjAxMC0xMC0yNCAgQW5kZXJzIEJha2tlbiAgPGFnYmFra2VuQGdtYWlsLmNvbT4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxl
LmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNmRlNjRhMC4uZDJhZTRkYSAxMDA2NDQKLS0tIGEv
R05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTMxOSw2ICszMTksNyBAQCB3
ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHZpZXdwb3J0YXR0cmlidXRlcy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR3ZWJkYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViZGF0YXNvdXJjZS5oIFwKQEAgLTM3OSw2ICszODAsNyBAQCB3ZWJraXRndGtfc291cmNlcyAr
PSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2
ZXJzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVz
LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXAogCVdlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYzdkMjY4OS4uMTYwYzBkMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTI1ICBKb29uZSBIdXIgIDxqb29uZUBrbGRw
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
R1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBJbmNsdWRlZCB2aWV3
cG9ydCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9T
a2lwcGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQgdmlld3BvcnQtNDUuaHRtbC4KKwog
MjAxMC0xMC0yNCAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAg
ICBVbnJldmlld2VkIHNraXAuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsv
U2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IDM1NDU4ZGYu
LjZkMWE1NDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisr
KyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01ODU0LDcgKzU4NTQsOCBA
QCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGgu
ZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9ydAor
IyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmll
d3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkg
YXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFy
c2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCmluZGV4IGQxMzA3NjYuLmFlMWNkZjIgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcg
QEAKKzIwMTAtMTAtMjUgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZp
ZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRv
IG9mZmVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgorICAgICAgICBJ
dCBpcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUgc2l6ZSwgaW5p
dGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB3
aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmlld3Bv
cnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkgU2Fm
YXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0aGUg
dmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFy
eSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkv
ZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9h
cnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmRpc3BhdGNoVmll
d3BvcnREYXRhRGlkQ2hhbmdlKTogQWRkZWQgdGhpcyBjYWxsYmFjayB0byBlbWl0IHRoZSB2aWV3
cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRl
Lmg6IEFkZGVkIHByaXZhdGUgZnVuY3Rpb25zIHN1Y2ggYXMgd2Via2l0X3dlYl92aWV3X2luaXRf
dmlld3BvcnRfYXR0cmlidXRlcywgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3LCBhbmQg
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZV9pbnRlcm5hbC4KKyAgICAgICAgKiB3
ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcDogQWRkZWQgdGhpcyBnb2JqZWN0IHRv
IGdldCB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcpOgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoKToKKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQpOgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rvcik6CisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3Ip
OgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9y
YXRpbyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9z
Y2FsYWJsZSk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdmFs
aWQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKTogUmVj
b21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgd2hlbiB0aGUgc2l6ZSBvZiB0
aGUgdmlzaWJsZSB2aWV3cG9ydCBpcyBjaGFuZ2VkLgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfY29tcHV0ZV9pbnRlcm5hbCk6IENvbXB1dGUgdGhlIG9wdGltYWwgdmlld3Bv
cnQgYXR0cmlidXRlcyB3aXRoIHRoZSBnaXZlbiBhdmFpbGFibGUgc2l6ZSBvZiB0aGUgdmlld3Bv
cnQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oOiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vidmlldy5jcHA6CisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfZGlzcG9zZSk6CisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdCk6IFN1
cHBvcnQgZm9yIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsLgorICAgICAg
ICAod2Via2l0X3dlYl92aWV3X2luaXQpOiBBdHRhY2ggYSBuZXcgV2VLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMgb2JqZWN0IHRvIHRoZSBXZWJLaXRXZWJWaWV3IHdpdGggdGhlIGdpdmVuIHZpZXdwb3J0
IGNvbmZpZ3VyYXRpb24gdmFsdWVzLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2luaXRfdmll
d3BvcnRfYXR0cmlidXRlcyk6IEFkZGVkIGEgcHJpdmF0ZSBmdW5jdGlvbiB0byBpbml0aWFsaXpl
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHdpdGggdGhlIGdpdmVuIGRlc2t0b3BXaWR0aCwgZGV2
aWNlV2lkdGgsIGRldmljZUhlaWdodCwgYW5kIGRldmljZURQSS4KKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyk6IEFkZGVkIGEgZ2V0dGVyIHRvIG9idGFp
biB0aGUgaW5zdGFuY2Ugb2YgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGhlbGQgYnkgdGhlIGdp
dmVuIFdlYktpdFdlYlZpZXcuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuaDoKKwog
MjAxMC0xMC0yMiAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmNwcAppbmRleCBiODcyYjMwLi41MjAzMzc5IDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAKKyNpbmNs
dWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCkBAIC02MDMsNiArNjA0LDE1IEBAIHZvaWQg
Q2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5n
PiYgZmlsZW5hbWVzLCBXZWJDCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJ
Y29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50OjpkaXNwYXRj
aFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRz
KSBjb25zdAoreworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1
dGVzID0gd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKG1fd2ViVmlldyk7
CisgICAgRmxvYXRSZWN0IHJlY3QgPSBjb3JlKG1fd2ViVmlldyktPmNocm9tZSgpLT5wYWdlUmVj
dCgpOworICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGVfaW50ZXJuYWwodmll
d3BvcnRBdHRyaWJ1dGVzLCBzdGF0aWNfY2FzdDxnaW50PihyZWN0LndpZHRoKCkpLCBzdGF0aWNf
Y2FzdDxnaW50PihyZWN0LmhlaWdodCgpKSk7CisKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV93ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwgdmlld3BvcnRBdHRyaWJ1
dGVzKTsgCit9CisKIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJikK
IHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50R3RrLmgKaW5kZXggYjkyNTMxMy4uMjE4MTllNSAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xMDksNiArMTA5LDggQEAgbmFtZXNw
YWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRvb2xUaXAoY29uc3QgV1RG
OjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAorICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3Q7CisKICAgICAgICAgdmlydHVhbCB2b2lkIHByaW50
KFdlYkNvcmU6OkZyYW1lKik7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQogICAgICAgICB2aXJ0dWFs
IHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1lKiwgY29uc3QgV1RGOjpT
dHJpbmcmKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXggZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVl
c3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291
cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXgg
YjA2YTNiZi4uMzk5Y2I0YyAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVm
aW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiAr
OTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhp
dFRlc3RSZXN1bHRDbGFzczsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGlj
eURlY2lzaW9uIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9u
UG9saWN5RGVjaXNpb25DbGFzczsKIAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisK
IEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDYx
NmVlNmIuLjkzYjlhNGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMz
LDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3Jr
cmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBA
IC02Myw2ICs2NCw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJS
ZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVk
ZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2lu
Y2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTE0MCw2
ICsxNDIsNyBAQCBleHRlcm4gIkMiIHsKIAogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZy
YW1lOwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Q+IGJh
Y2tGb3J3YXJkTGlzdDsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzPiB2aWV3cG9ydEF0dHJpYnV0ZXM7CiAKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3Rr
TWVudT4gY3VycmVudE1lbnU7CiAgICAgICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwpAQCAt
MzE2LDYgKzMxOSwxNSBAQCBleHRlcm4gIkMiIHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGlj
eURlY2lzaW9uKgogICAgIHdlYmtpdF9nZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdl
YktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6R2VvbG9jYXRpb24qKTsKIAorICAgIC8vIFRoaXMgYWxs
b3dzIHRvIGluaXRpYWxpemUgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgbWFudWFsbHkgd2l0aCB0
aGUgZ2l2ZW4gY29uZmlndXJhdGlvbiB2YWx1ZXMuCisgICAgV0VCS0lUX0FQSSB2b2lkCisgICAg
d2Via2l0X3dlYl92aWV3X2luaXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3ICp3
ZWJWaWV3LCBnaW50IGRlc2t0b3BXaWR0aCwgZ2ludCBkZXZpY2VXaWR0aCwgZ2ludCBkZXZpY2VI
ZWlnaHQsIGdpbnQgZGV2aWNlRFBJKTsKKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoK
KyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoV2ViQ29yZTo6UGFnZSosIGdpbnQg
ZGVza3RvcFdpZHRoLCBnaW50IGRldmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBk
ZXZpY2VEUEkpOworICAgIHZvaWQKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21w
dXRlX2ludGVybmFsKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVz
LCBnaW50IGF2YWlsYWJsZVdpZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCk7CisKICAgICAvLyBG
SVhNRTogbW92ZSB0aGlzIHRvIHdlYmtpdG5ldHdvcmtyZXF1ZXN0Lmggb25jZSB0aGUgQVBJIGlz
IGFncmVlZCB1cG9uLgogICAgIFdFQktJVF9BUEkgU291cE1lc3NhZ2UqCiAgICAgd2Via2l0X25l
dHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMu
Y3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDc1Zjg1Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApAQCAtMCww
ICsxLDI4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGts
ZHAub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRl
LmgiCisKKy8qKgorICogU0VDVElPTjp3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9y
dF9kZXNjcmlwdGlvbjogUmVwcmVzZW50cyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdl
YiBwYWdlCisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVz
LWNoYW5nZWQKKyAqCisgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIG9mZmVycyB0aGUgdmll
d3BvcnQgcHJvcGVydGllcyB0byB1c2VyIGFnZW50cyB0byAKKyAqIGNvbnRyb2wgdGhlIHZpZXdw
b3J0IGxheW91dC4gSXQgY29udGFpbnMgdGhlIHNpemUsIGluaXRpYWwgc2NhbGUgd2l0aCBsaW1p
dHMsIAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8g
c2NhbGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3cG9ydC4KKyAqIFRoaXMgYWxsb3dzIHRvIGZp
dCBhIHdlYiBwYWdlIHRvIHRoZSBkZXZpY2Ugc2NyZWVuLgorICogCisgKiAjV2ViS2l0V2ViVmll
dyBhbHdheXMgaGFzIGFuIGFzc29jaWF0ZWQgaW5zdGFuY2Ugb2YgI1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcywgCisgKiBzbyB5b3UgY2FuIGNhbGwgI3dlYmtpdF93ZWJfdmlld19nZXRfdmlld3Bv
cnRfYXR0cmlidXRlcyB0byBnZXQgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMuCisgKiBB
bHNvLCB5b3UgaGF2ZSB0byBjYWxsICN3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1
dGUgdG8gZ2V0IHRoZSBvcHRpbWFsIAorICogdmlld3BvcnQgYXR0cmlidXRlcyB3aGVuIHRoZSBz
aXplIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0IGlzIGNoYW5nZWQuCisgKiAKKyAqICNXZWJLaXRX
ZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRl
ZCB3aXRoIAorICogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hlbiB0aGUgdmlld3Bv
cnQgYXR0cmlidXRlcyBhcmUgdXBkYXRlZC4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBv
biB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2Ug
bGlicmFyeSBhdAorICogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkv
ZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9h
cnRpY2xlcy9tZXRhdGFncy5odG1sCisgKgorICogPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxp
c3Rpbmc+CisgKiAvPCEtLSAtLT4qIEdldCB0aGUgY3VycmVudCBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMgKjwhLS0gLS0+LworICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0
dHJpYnV0ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViX3Zp
ZXcpOworCisgKiAvPCEtLSAtLT4qIENvbm5lY3QgdG8gdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMt
Y2hhbmdlcyBzaWduYWwgKjwhLS0gLS0+LworICogZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcs
ICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQiLCBHX0NBTExCQUNLICh2aWV3cG9ydF9jaGFu
Z2VfY2IpLCB3ZWJfdmlldyk7CisgKgorICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhh
bXBsZT4KKyAqLworCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzLCB3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlcywgR19UWVBFX09CSkVDVCk7CisKK3N0cnVjdCBfV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSB7CisgICAgLyogdmlld3BvcnQgcHJvcGVydGllcyAqLwor
ICAgIGdpbnQgd2lkdGg7CisgICAgZ2ludCBoZWlnaHQ7CisgICAgZ2Zsb2F0IHRhcmdldERlbnNp
dHlEUEk7CisgICAgZ2Zsb2F0IGluaXRpYWxTY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWluaW11
bVNjYWxlRmFjdG9yOworICAgIGdmbG9hdCBtYXhpbXVtU2NhbGVGYWN0b3I7CisgICAgZ2Jvb2xl
YW4gaXNVc2VyU2NhbGFibGU7CisgICAgLyogdmlld3BvcnQgY29uZmlndXJhdGlvbiB2YWx1ZXMg
Ki8KKyAgICBnaW50IGRldmljZURQSTsKKyAgICBnaW50IGRldmljZVdpZHRoOworICAgIGdpbnQg
ZGV2aWNlSGVpZ2h0OworICAgIGdpbnQgZGVza3RvcFdpZHRoOworICAgIC8qIHdoZXRoZXIgdGhl
IHZpZXdwb3J0IHByb3BlcnRpZXMgYXJlIHZhbGlkIG9yIG5vdCAqLworICAgIGdib29sZWFuIGlz
VmFsaWQ7CisgICAgUGFnZSogcGFnZTsKK307CisKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FU
VFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfY2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyogdmlld3BvcnRBdHRy
aWJ1dGVzQ2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHZpZXdwb3J0QXR0
cmlidXRlc0NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRF
KHZpZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdiA9IHByaXY7CisKKyAgICBwcml2LT53aWR0
aCA9IDA7CisgICAgcHJpdi0+aGVpZ2h0ID0gMDsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0
b3IgPSAtMS4wOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJp
di0+bWF4aW11bVNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT50YXJnZXREZW5zaXR5RFBJ
ID0gLTEuMDsKKyAgICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9IHRydWU7Cit9CisKK1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KFBhZ2UqIHBh
Z2UsIGdpbnQgZGVza3RvcFdpZHRoLCBnaW50IGRldmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdo
dCwgZ2ludCBkZXZpY2VEUEkpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3
cG9ydEF0dHJpYnV0ZXMgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgTlVMTCkpOworICAgIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19H
RVRfUFJJVkFURSh2aWV3cG9ydEF0dHJpYnV0ZXMpOworCisgICAgcHJpdi0+ZGVza3RvcFdpZHRo
ID0gZGVza3RvcFdpZHRoOworICAgIHByaXYtPmRldmljZVdpZHRoID0gZGV2aWNlV2lkdGg7Cisg
ICAgcHJpdi0+ZGV2aWNlSGVpZ2h0ID0gZGV2aWNlSGVpZ2h0OworICAgIHByaXYtPmRldmljZURQ
SSA9IGRldmljZURQSTsKKyAgICBwcml2LT5pc1ZhbGlkID0gZmFsc2U7CisgICAgcHJpdi0+cGFn
ZSA9IHBhZ2U7CisKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1dGVzOworfQorCisvKioKKyAq
IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF93aWR0aDoKKyAqIEB2aWV3cG9ydEF0dHJp
YnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJldHVybnMgdGhlIHdp
ZHRoIG9mIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICoKKyAqIFJldHVybnM6IHRoZSB3aWR0
aCBvZiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpbiBwaXhlbHMKKyAqCisgKiBTaW5j
ZTogMS4zLjUKKyAqLworZ2ludCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGgo
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19y
ZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRB
dHRyaWJ1dGVzKSwgMCk7CisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+d2lk
dGg7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdodDoK
KyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoK
KyAqIFJldHVybnMgdGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAqCisg
KiBSZXR1cm5zOiB0aGUgaGVpZ2h0IG9mIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlu
IHBpeGVscworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnaW50IHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9oZWlnaHQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0
dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JU
X0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisgICAgcmV0dXJuIHZpZXdwb3J0
QXR0cmlidXRlcy0+cHJpdi0+aGVpZ2h0OworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvcjoKKyAqIEB2aWV3cG9ydEF0dHJpYnV0
ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJldHVybnMgdGhlIGluaXRp
YWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgKgorICogUmV0dXJuczogdGhl
IGluaXRpYWwgc2NhbGUgb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBT
aW5jZTogMS4zLjUKKyAqLworZ2Zsb2F0IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9p
bml0aWFsX3NjYWxlX2ZhY3RvcihXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0
cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRf
QVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKyAgICByZXR1cm4gdmlld3BvcnRB
dHRyaWJ1dGVzLT5wcml2LT5pbml0aWFsU2NhbGVGYWN0b3I7Cit9CisKKy8qKgorICogd2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yOgorICogQHZpZXdw
b3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJu
cyB0aGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAqCisgKiBS
ZXR1cm5zOiB0aGUgbWluaW11bSBzY2FsZSBvZiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRl
cworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAq
dmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworICAgIHJldHVy
biB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPm1pbmltdW1TY2FsZUZhY3RvcjsKK30KKworLyoq
CisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3I6
CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAq
CisgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVz
LgorICoKKyAqIFJldHVybnM6IHRoZSBtYXhpbXVtIHNjYWxlIG9mIHRoZSAjV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK2dmbG9hdCB3ZWJraXRfdmll
d3BvcnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7
CisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+bWF4aW11bVNjYWxlRmFjdG9y
OworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9kZXZpY2VfcGl4
ZWxfcmF0aW86CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSBkZXZpY2UgcGl4ZWwgcmF0aW8gY2FsY3VsYXRlZCBi
eSB0aGUgRGV2aWNlIERQSS4KKyAqCisgKiBSZXR1cm5zOiB0aGUgZGV2aWNlIHBpeGVsIHJhdGlv
CisgKgorICogU2luY2U6IDEuMy41CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19nZXRfZGV2aWNlX3BpeGVsX3JhdGlvKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmll
d3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19W
SUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworICAgIHJldHVybiB2
aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPnRhcmdldERlbnNpdHlEUEk7Cit9CisKKy8qKgorICog
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3VzZXJfc2NhbGFibGU6CisgKiBAdmll
d3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBEZXRl
cm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29tIGluIGFuZCBvdXQuCisgKgor
ICogUmV0dXJuczogVHJ1ZSBpZiB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0IAorICoKKyAq
IFNpbmNlOiAxLjMuNQorICovCitnYm9vbGVhbiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19n
ZXRfaXNfdXNlcl9zY2FsYWJsZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgKnZpZXdwb3J0QXR0
cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRf
QVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCBmYWxzZSk7CisgICAgcmV0dXJuIHZpZXdw
b3J0QXR0cmlidXRlcy0+cHJpdi0+aXNVc2VyU2NhbGFibGU7Cit9CisKKy8qKgorICogd2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkOgorICogQHZpZXdwb3J0QXR0cmlidXRl
czogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmV0dXJucyB3aGV0aGVyIG9y
IG5vdCBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgKgorICogUmV0dXJu
czogVHJ1ZSBpZiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQKKyAqCisgKiBT
aW5jZTogMS4zLjUKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0
X2lzX3ZhbGlkKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKQor
eworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVT
KHZpZXdwb3J0QXR0cmlidXRlcyksIGZhbHNlKTsKKyAgICByZXR1cm4gdmlld3BvcnRBdHRyaWJ1
dGVzLT5wcml2LT5pc1ZhbGlkOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX3JlY29tcHV0ZToKKyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0
QXR0cmlidXRlcworICoKKyAqIFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3cG9ydCBhdHRyaWJ1
dGVzIHdoZW4gdGhlIHNpemUgb2YgdGhlIHZpc2libGUgdmlld3BvcnQgaXMgY2hhbmdlZC4gCisg
KgorICogU2luY2U6IDEuMy41CisgKi8KK3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
cmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVModmll
d3BvcnRBdHRyaWJ1dGVzKSk7CisKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0ga2l0KHZp
ZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+cGFnZSk7CisgICAgRmxvYXRSZWN0IHJlY3QgPSB2aWV3
cG9ydEF0dHJpYnV0ZXMtPnByaXYtPnBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpOworICAgIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGVfaW50ZXJuYWwodmlld3BvcnRBdHRyaWJ1
dGVzLCBzdGF0aWNfY2FzdDxnaW50PihyZWN0LndpZHRoKCkpLCBzdGF0aWNfY2FzdDxnaW50Pihy
ZWN0LmhlaWdodCgpKSk7CisKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZp
ZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIHZpZXdwb3J0QXR0cmlidXRlcyk7IAorfQorCisv
KioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGVfaW50ZXJuYWw6CisgKiBA
dmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqIEBhdmFp
bGFibGVXaWR0aDogdGhlIHdpZHRoIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0IGluIHBpeGVscwor
ICogQGF2YWlsYWJsZUhlaWdodDogdGhlIGhlaWdodCBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydCBp
biBwaXhlbHMKKyAqCisgKiBJbnRlcm5hbCB1c2Ugb25seS4gQ29tcHV0ZSB0aGUgb3B0aW1hbCB2
aWV3cG9ydCBhdHRyaWJ1dGVzIHdpdGggdGhlIGdpdmVuIEBhdmFpbGFibGVXaWR0aCBhbmQgQGF2
YWlsYWJsZUhlaWdodC4KKyAqCisgKi8KK3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Y29tcHV0ZV9pbnRlcm5hbChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmli
dXRlcywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAg
Z19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0
dHJpYnV0ZXMpKTsKKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2aWV3cG9ydEF0dHJpYnV0
ZXMpOworICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3VtZW50cyA9IHByaXYtPnBhZ2UtPm1haW5G
cmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOworICAgIFZpZXdwb3J0QXR0
cmlidXRlcyBhdHRycyA9IGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2
LT5kZXNrdG9wV2lkdGgsIHByaXYtPmRldmljZVdpZHRoLCBwcml2LT5kZXZpY2VIZWlnaHQsIHBy
aXYtPmRldmljZURQSSwgSW50U2l6ZShzdGF0aWNfY2FzdDxnaW50PihhdmFpbGFibGVXaWR0aCks
IHN0YXRpY19jYXN0PGdpbnQ+KGF2YWlsYWJsZUhlaWdodCkpKTsKKworICAgIHByaXYtPmlzVmFs
aWQgPSB0cnVlOworICAgIHByaXYtPndpZHRoID0gYXR0cnMubGF5b3V0U2l6ZS53aWR0aCgpOwor
ICAgIHByaXYtPmhlaWdodCA9IGF0dHJzLmxheW91dFNpemUuaGVpZ2h0KCk7CisgICAgcHJpdi0+
dGFyZ2V0RGVuc2l0eURQSSA9IGF0dHJzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+aW5p
dGlhbFNjYWxlRmFjdG9yID0gYXR0cnMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1T
Y2FsZUZhY3RvciA9IGF0dHJzLm1pbmltdW1TY2FsZTsKKyAgICBwcml2LT5tYXhpbXVtU2NhbGVG
YWN0b3IgPSBhdHRycy5tYXhpbXVtU2NhbGU7CisgICAgcHJpdi0+aXNVc2VyU2NhbGFibGUgPSBh
cmd1bWVudHMudXNlclNjYWxhYmxlOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDY3
YzdhCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRh
dHRyaWJ1dGVzLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBK
b29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIHdlYmtpdHZpZXdwb3J0YXR0cmlidXRl
c19oCisjZGVmaW5lIHdlYmtpdHZpZXdwb3J0YXR0cmlidXRlc19oCisKKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisKK0dfQkVHSU5f
REVDTFMKKworI2RlZmluZSBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTICAgICAgICAg
ICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBlKCkpCisjZGVmaW5lIFdFQktJ
VF9WSUVXUE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RB
TkNFX0NBU1QoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcykpCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0NM
QVNTKGtsYXNzKSAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKSkK
KyNkZWZpbmUgV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqKSAgICAgICAgIChHX1RZ
UEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklC
VVRFUykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTX0NMQVNTKGtsYXNz
KSAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfQ0xB
U1Mob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfQ0xBU1MoKG9iaiksICBXRUJLSVRfVFlQRV9W
SUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlc1ByaXZhdGU7CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
IHsKKyAgICBHT2JqZWN0IHBhcmVudF9pbnN0YW5jZTsKKworICAgIC8qPCBwcml2YXRlID4qLwor
ICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgKnByaXY7Cit9OworCitzdHJ1Y3Qg
X1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzIHsKKyAgICBHT2JqZWN0Q2xhc3MgcGFyZW50
X2NsYXNzOworCisgICAgLyogUGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZv
aWQgKCpfd2Via2l0X3Jlc2VydmVkMCkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2Vy
dmVkMSkgKHZvaWQpOworICAgIHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMikgKHZvaWQpOworICAg
IHZvaWQgKCpfd2Via2l0X3Jlc2VydmVkMykgKHZvaWQpOworfTsKKworV0VCS0lUX0FQSSBHVHlw
ZQord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3R5cGUgICAgICAgICAgICAgICAgICh2
b2lkKTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
d2lkdGggICAgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRB
dHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnaW50Cit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19nZXRfaGVpZ2h0ICAgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmll
d3BvcnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9pbml0aWFsX3NjYWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21pbmltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0Cit3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IgKFdlYktp
dFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBn
ZmxvYXQgCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfZGV2aWNlX3BpeGVsX3JhdGlv
ICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VC
S0lUX0FQSSBnYm9vbGVhbiAKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc191c2Vy
X3NjYWxhYmxlICAgICAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICp2aWV3cG9ydEF0dHJpYnV0
ZXMpOworCitXRUJLSVRfQVBJIGdib29sZWFuCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19n
ZXRfaXNfdmFsaWQgICAgICAgICAgICAgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3Bv
cnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSB2b2lkIAord2Via2l0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXNfcmVjb21wdXRlICAgICAgICAgICAgICAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMq
IHZpZXdwb3J0QXR0cmlidXRlcyk7IAorR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGY1ZDBlZjYuLjNkYzQ3NTggMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVh
dGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dl
cnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUu
aCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNp
bmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNs
aWVudEd0ay5oIgpAQCAtMTczLDYgKzE3NSw3IEBAIGVudW0gewogICAgIEdFT0xPQ0FUSU9OX1BP
TElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAgT05MT0FEX0VWRU5ULAogICAgIEZSQU1FX0NS
RUFURUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRFU19DSEFOR0VELAogICAgIExBU1RfU0lHTkFM
CiB9OwogCkBAIC0xMTk2LDYgKzExOTksNyBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdf
ZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xl
YXIoKTsKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNv
dXJjZXMuY2xlYXIoKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuY2xlYXIoKTsKIAog
ICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBEcm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3Ig
ZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRyb3BwaW5nQ29udGV4dHMuZW5kKCk7CiAgICAg
Zm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0KiwgRHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRzLmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBp
bmdDb250ZXh0czsgKytpdGVyKQpAQCAtMjQ2MCw2ICsyNDY0LDI3IEBAIHN0YXRpYyB2b2lkIHdl
YmtpdF93ZWJfdmlld19jbGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNz
KQogICAgICAgICAgICAgV0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAogICAgIC8qCisgICAgICog
V2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkCisgICAgICogQHdlYl92
aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICAgKiBAdmlld3Bv
cnRfYXR0cmlidXRlczogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRo
ZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3
Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgd2lsbCBiZSBlbWl0dGVkIHdpdGggQHZpZXdw
b3J0X2F0dHJpYnV0ZXMgIAorICAgICAqIHdoZW4gdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYXJl
IHVwZGF0ZWQgaW4gdGhlIGNhc2Ugb2YgbG9hZGluZyB3ZWIgcGFnZXMgY29udGFpbiAKKyAgICAg
KiB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQgY2FsbGluZyB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19yZWNvbXB1dGUuCisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0ZXMgaXMgdXNlZCB0
byBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQgdG8gZml0IGEgd2ViIHBhZ2UgdG8gdGhlIGRl
dmljZSBzY3JlZW4uCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICB3
ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tWSUVXUE9SVF9BVFRSSUJVVEVTX0NIQU5HRURdID0gZ19z
aWduYWxfbmV3KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQiLAorICAgICAgICAgICAgR19U
WVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3Mp
KEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZP
SURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VC
S0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyk7CisKKyAgICAvKgogICAgICAqIGltcGxlbWVu
dGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3ZWJWaWV3Q2xhc3MtPmNy
ZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93ZWJfdmlldzsKQEAg
LTMxMjgsNiArMzE1MywxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogCiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMgPSBhZG9w
dFBsYXRmb3JtUmVmKHdlYmtpdF93ZWJfd2luZG93X2ZlYXR1cmVzX25ldygpKTsKIAorICAgIC8v
IEF0dGFjaCBhIG5ldyBXZWJLaXRWaWV3cG9ydEF0dHJidXRlcyBvYmplY3Qgd2l0aCB0aGUgZ2l2
ZW4gdmlld3BvcnQgY29uZmlndXJhdGlvbiB2YWx1ZXMuCisgICAgR2RrU2NyZWVuKiBzY3JlZW4g
PSBndGtfd2lkZ2V0X2dldF9zY3JlZW4oR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgcHJpdi0+
dmlld3BvcnRBdHRyaWJ1dGVzID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19uZXcocHJpdi0+Y29yZVBhZ2UsIDk4MCwgZ2RrX3NjcmVlbl9nZXRfd2lkdGgoc2Ny
ZWVuKSwgZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbiksIHdlYlZpZXdHZXREUEkod2ViVmll
dykpKTsKKwogICAgIHByaXYtPnN1YlJlc291cmNlcyA9IGFkb3B0UGxhdGZvcm1SZWYoZ19oYXNo
X3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2JqZWN0
X3VucmVmKSk7CiAKICAgICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCA9IDA7CkBAIC00NDg5LDYg
KzQ1MTgsNDAgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9tb2Rl
IChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorLyoqCisg
KiB3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9hdHRyaWJ1dGVzOgorICogQHdlYlZpZXc6
IGEgI1dlYktpdFdlYlZpZXcKKyAqIEBkZXNrdG9wV2lkdGg6IHRoZSB3aWR0aCBvZiB2aWV3cG9y
dCBpbiBwaXhlbHMgdGhhdCB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBm
b3IgYSBkZXNrdG9wIFVBCisgKiBAZGV2aWNlV2lkdGg6IHRoZSB3aWR0aCBvZiB0aGUgc2NyZWVu
IGluIHBpeGVscworICogQGRldmljZUhlaWdodDogdGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuIGlu
IHBpeGVscyAKKyAqIEBkZXZpY2VEUEk6IHRoZSBudW1iZXIgb2YgZG90cyBwZXIgaW5jaCBvZiB0
aGUgc2NyZWVuCisgKgorICogSW50ZXJuYWwgdXNlIG9ubHkuIFNldHMgYSBuZXcgI1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyB3aXRoIHRoZSBnaXZlbiBAZGVza3RvcFdpZHRoLCBAZGV2aWNlV2lk
dGgsIEBkZXZpY2VIZWlnaHQsIGFuZCBAZGV2aWNlRFBJLgorICogVGhlIGNyZWF0ZWQgI1dlYktp
dFZpZXdwb3J0QXR0cmlidXRlcyBpcyBhdHRhY2hlZCB0byB0aGUgZ2l2ZW4gI1dlYktpdFdlYlZp
ZXcuCisgKiAKKyAqLwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9hdHRyaWJ1
dGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgZGVza3RvcFdpZHRoLCBnaW50IGRldmlj
ZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBkZXZpY2VEUEkpCit7CisgICAgZ19yZXR1
cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworICAgIHdlYlZpZXctPnBy
aXYtPnZpZXdwb3J0QXR0cmlidXRlcyA9IGFkb3B0UGxhdGZvcm1SZWYod2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfbmV3KHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLCBkZXNrdG9wV2lkdGgsIGRl
dmljZVdpZHRoLCBkZXZpY2VIZWlnaHQsIGRldmljZURQSSkpOworfQorCisvKioKKyAqIHdlYmtp
dF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlczoKKyAqIEB3ZWJWaWV3OiBhICNXZWJL
aXRXZWJWaWV3CisgKgorICogUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgdGhlICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgaGVsZCBieSB0aGUgZ2l2ZW4gI1dlYktpdFdlYlZpZXcuCisgKgorICog
UmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIGluc3RhbmNlCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1dF
Ql9WSUVXKHdlYlZpZXcpLCBOVUxMKTsKKyAgICByZXR1cm4gd2ViVmlldy0+cHJpdi0+dmlld3Bv
cnRBdHRyaWJ1dGVzLmdldCgpOworfQorCiAvLyBJbnRlcm5hbCBzdWJyZXNvdXJjZSBtYW5hZ2Vt
ZW50CiB2b2lkIHdlYmtpdF93ZWJfdmlld19hZGRfcmVzb3VyY2UoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgY29uc3QgY2hhciogaWRlbnRpZmllciwgV2ViS2l0V2ViUmVzb3VyY2UqIHdlYlJlc291
cmNlKQogewpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDlkZmI2NTQuLjZiMWU5YzUg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQwMSw2ICs0MDEsOSBAQCB3ZWJraXRf
Z2V0X2NhY2hlX21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRf
QVBJIFdlYktpdERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50
ICAgICAgICAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJ
VF9BUEkgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Via2l0X3dlYl92aWV3X2dldF92aWV3
cG9ydF9hdHRyaWJ1dGVzICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsK
KwogR19FTkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggYWQ0ODRiYy4uYzZiNmQ0YyAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDI1IEBACisyMDEwLTEwLTI1ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBT
dXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGVz
dGluZyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBmb3IgV2ViS2l0R3RrLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZHVtcENv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIHRoaXMgSmF2YVNjcmlwdCBBUEkgdG8gc2V0
IHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0LgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5
b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0
VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIHRoaXMgZnVuY3Rpb24gdG8gdGVzdCB0aGUg
dmlld3BvcnQgcHJvcGVydGllcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisKIDIw
MTAtMTAtMjQgIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI3MDQxMy4KZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRleCBiNWNjODc0
Li41MWZkNWJkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0
VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMTM5LDYgKzE0MCwyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBk
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0
LCBKUwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICBy
ZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxh
YmxlV2lkdGggPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRp
b24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdo
dCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7Cisg
ICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250
cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFBy
aXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRyb2xsZXItPmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZVdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50Pihh
dmFpbGFibGVIZWlnaHQpKTsKKyAgIAorICAgIHJldHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChj
b250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVSZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2Fs
bGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIExheW91dFRlc3RDb250
cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihK
U09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwpAQCAtMTg4NSw2ICsxOTAyLDcgQEAgSlNT
dGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAg
ICAgICAgIHsgImR1bXBCYWNrRm9yd2FyZExpc3QiLCBkdW1wQmFja0ZvcndhcmRMaXN0Q2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMiLCBk
dW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsIGR1bXBDaGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCisgICAgICAgIHsgImR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQiLCBkdW1wQ29u
ZmlndXJhdGlvbkZvclZpZXdwb3J0LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFy
Y2hpdmUiLCBkdW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
ZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKICAgICAgICAgeyAiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxi
YWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCA2ODllMTE0Li4xZmYxN2NhIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI4
MSw2ICsyODEsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBm
cm9tLCBpbnQgbGVuZ3RoKTsKIAorICAgIHZvaWQgY29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGlu
dCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCk7CisKICAgICAvLyBUaGUgZm9s
bG93aW5nIEFQSSB0ZXN0IGZ1bmN0aW9ucyBzaG91bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gcGxh
dGZvcm0tc3BlY2lmaWMgCiAgICAgLy8gdW5pdCB0ZXN0cyBvdXRzaWRlIG9mIERSVCBvbmNlIHRo
ZXkgZXhpc3QuCiAgICAgdm9pZCBhcGlUZXN0TmV3V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3Ry
aW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBiYXNlVVJMKTsKZGlmZiAtLWdpdCBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3Bw
CmluZGV4IDE4MWVmOWYuLjBkNzBiZjIgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKKysrIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApAQCAtNCw2ICs0
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBOdWFudGkgTHRkLgogICogQ29weXJpZ2h0IChD
KSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1hbG9uem9AZ21haWwuY29tPgogICogQ29weXJp
Z2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUg
SHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NjQsNiArNjUsOCBAQCB2b2lkIHdlYmtpdF93ZWJfaW5zcGVjdG9yX2V4ZWN1dGVfc2NyaXB0KFdl
YktpdFdlYkluc3BlY3RvciogaW5zcGVjdG9yLCBsb25nIGNhbAogZ2NoYXIqIHdlYmtpdF93ZWJf
ZnJhbWVfbWFya2VyX3RleHRfZm9yX2xpc3RfaXRlbShXZWJLaXRXZWJGcmFtZSogZnJhbWUsIEpT
Q29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIG5vZGVPYmplY3QpOwogdm9pZCB3ZWJraXRf
d2ViX3ZpZXdfZXhlY3V0ZV9jb3JlX2NvbW1hbmRfYnlfbmFtZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBjb25zdCBnY2hhciogbmFtZSwgY29uc3QgZ2NoYXIqIHZhbHVlKTsKIGdib29sZWFuIHdl
YmtpdF93ZWJfdmlld19pc19jb21tYW5kX2VuYWJsZWQoV2ViS2l0V2ViVmlldyogd2ViVmlldywg
Y29uc3QgZ2NoYXIqIG5hbWUpOwordm9pZCB3ZWJraXRfd2ViX3ZpZXdfaW5pdF92aWV3cG9ydF9h
dHRyaWJ1dGVzKFdlYktpdFdlYlZpZXcgKndlYlZpZXcsIGdpbnQgZGVza3RvcFdpZHRoLCBnaW50
IGRldmljZVdpZHRoLCBnaW50IGRldmljZUhlaWdodCwgZ2ludCBkZXZpY2VEUEkpOwordm9pZCB3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlX2ludGVybmFsKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzLCBnaW50IGF2YWlsYWJsZVdpZHRoLCBnaW50
IGF2YWlsYWJsZUhlaWdodCk7CiB9CiAKIExheW91dFRlc3RDb250cm9sbGVyOjp+TGF5b3V0VGVz
dENvbnRyb2xsZXIoKQpAQCAtODIyLDMgKzgyNSwxOSBAQCBib29sIExheW91dFRlc3RDb250cm9s
bGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHRoaXMuCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxh
YmxlSGVpZ2h0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3ZWJraXRfd2ViX2Zy
YW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh3ZWJWaWV3KTsKKworICAg
IHdlYmtpdF93ZWJfdmlld19pbml0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmlldywgOTgwLCAz
MjAsIDQ4MCwgMTYwKTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0
cmlidXRlcyA9IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3
KTsKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlX2ludGVybmFsKHZpZXdw
b3J0QXR0cmlidXRlcywgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCk7CisgICAgZnBy
aW50ZihzdGRvdXQsICJ2aWV3cG9ydCBzaXplICVkeCVkIHNjYWxlICVmIHdpdGggbGltaXRzIFsl
ZiwgJWZdXG4iLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dp
ZHRoKHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19nZXRfaGVpZ2h0KHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3Iodmlld3BvcnRB
dHRyaWJ1dGVzKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9t
aW5pbXVtX3NjYWxlX2ZhY3Rvcih2aWV3cG9ydEF0dHJpYnV0ZXMpLAorICAgICAgICAgICAgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yKHZpZXdwb3J0
QXR0cmlidXRlcykpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGM1ZDVhOTAuLjI4MmM3MDEg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29u
dHJvbGxlck1hYy5tbQorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTk0OSwzICs5NDksNyBAQCBib29sIExheW91dFRlc3RD
b250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKIHsKICAg
ICByZXR1cm4gW21haW5GcmFtZSBoYXNTcGVsbGluZ01hcmtlcjpmcm9tIGxlbmd0aDpsZW5ndGhd
OwogfQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0
KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKworfQpkaWZmIC0t
Z2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVy
V2luLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHAKaW5kZXggOWU4ZWQxZS4uZmJlODEzOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3Bw
CkBAIC0xNDAxLDMgKzE0MDEsOCBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVs
bGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiByZXQ7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQp
Cit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRl
eCBlZWZjNTg3Li5jNGQ2YTNhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcApAQCAtNTExLDYgKzUxMSwxMSBA
QCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWln
aHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCiBKU1JldGFpblB0cjxKU1N0cmlu
Z1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9w
ZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQK
</data>
<flag name="review"
          id="61823"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72287</attachid>
            <date>2010-10-28 19:59:37 -0700</date>
            <delta_ts>2010-11-07 03:43:09 -0800</delta_ts>
            <desc>Proposed Patch9</desc>
            <filename>viewport9.diff</filename>
            <type>text/plain</type>
            <size>40707</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBkM2ZiYzY4Li4yNjZhMTY5
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTAtMjggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSB0byBnZXQgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCAK
KwogMjAxMC0xMC0yNiAgQW50b25pbyBHb21lcyAgPGFnb21lc0ByaW0uY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFt
IGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNDA1NjljZC4uZGI5MzVkYSAxMDA2NDQKLS0tIGEvR05V
bWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0KQEAgLTMxOSw2ICszMTksNyBAQCB3ZWJr
aXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR3ZWJkYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YXNvdXJjZS5oIFwKQEAgLTM4MSw2ICszODIsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBc
CiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJz
aW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNw
cCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXAogCVdlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZjNmN2ViMy4uOThiMzE4OCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTEwLTI4ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RL
XSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBJbmNsdWRlZCB2aWV3cG9y
dCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lw
cGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQgdmlld3BvcnQtNDUuaHRtbC4KKwogMjAx
MC0xMC0yNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgdXBkYXRpbmcgZHJ0X2V4cGVjdGF0aW9ucy50eHQuCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0
ay9Ta2lwcGVkCmluZGV4IDYyYzI5NWMuLjkzNDlhNDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lw
cGVkCkBAIC01NjY2LDcgKzU2NjYsOCBAQCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0
cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcg
c3VwcG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1I
TVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBm
YXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDU3YzNlMjcuLjFj
YzBkZjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTAtMTAtMjggIEpvb25lIEh1ciAgPGpvb25l
QGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRv
IHVzZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhh
dCBjb250YWlucyB0aGUgc2l6ZSwgaW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAg
IGFuZCBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRo
ZSBjb250ZW50cyBpbiB0aGUgdmlld3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1
cmUgd2FzIGludHJvZHVjZWQgYnkgU2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9y
bWF0aW9uIG9uIAorICAgICAgICB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhl
IFNhZmFyaSByZWZlcmVuY2UgbGlicmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5h
cHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9y
ZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpD
aHJvbWVDbGllbnQ6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKTogQWRkZWQgdGhpcyBj
YWxsYmFjayB0byBrbm93IHdoZXRoZXIgdGhlIHZpZXdwb3J0IGFyZ3VtZW50cyBpcyBhdmFpbGFi
bGUuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAg
KER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6dXBkYXRlVmlld3BvcnRBdHRyaWJ1dGVzKTogQWRk
ZWQgdGhpcyBmdW5jdGlvbiB0byB1cGRhdGUgdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3
aXRoIHRoZSBnaXZlbiBhdmFpbGFibGVXaWR0aCBhbmQgYXZhaWxhYmxlSGVpZ3RoLgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorICAgICAgICAq
IHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6IEFkZGVkIHByaXZhdGUgZnVuY3Rpb25zIHN1
Y2ggYXMgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3IGFuZCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19zZXQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5jcHA6IEFkZGVkIGZ1bmN0aW9ucyB0byBnZXQgZWFjaCB2YWx1ZSBvZiB0aGUgdmlld3BvcnQg
YXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNzX2lu
aXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfaW5pdCk6CisgICAgICAg
ICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcpOgorICAgICAgICAod2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX2dldF9oZWlnaHQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X2luaXRpYWxfc2NhbGVfZmFjdG9yKToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rvcik6CisgICAgICAgICh3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19nZXRfbWF4aW11bV9zY2FsZV9mYWN0b3IpOgorICAgICAgICAod2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyk6CisgICAgICAgICh3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9zY2FsYWJsZSk6CisgICAgICAg
ICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaXNfdmFsaWQpOgorICAgICAgICAod2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKTogUmVjb21wdXRlIHRoZSBvcHRpbWFs
IHZpZXdwb3J0IGF0dHJpYnV0ZXMgYW5kIGVtaXQgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hh
bmdlZCBzaWduYWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXQpOgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDogQWRkZWQuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2Rpc3Bvc2UpOiBSZW5hbWUgd2ViVmlld0dldERQSSB0byB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Rw
aS4gCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RwaSk6IFJlbmFtZSB3ZWJWaWV3R2V0
RFBJIHRvIHdlYmtpdF93ZWJfdmlld19nZXRfZHBpIGFuZCBtYWtlIGl0IGEgcHJpdmF0ZSBmdW5j
dGlvbiB0byBiZSBjYWxsZWQgYnkgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRl
LgorICAgICAgICAod2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKTogUmVuYW1lIHdlYlZp
ZXdHZXREUEkgdG8gd2Via2l0X3dlYl92aWV3X2dldF9kcGkuCisgICAgICAgICh3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdCk6IFN1cHBvcnQgZm9yIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNo
YW5nZWQgc2lnbmFsLgorICAgICAgICAocGl4ZWxzRnJvbVNpemUpOgorICAgICAgICAod2Via2l0
X3dlYl92aWV3X2luaXQpOiBBdHRhY2ggYSBuZXcgV2VLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgb2Jq
ZWN0IHRvIHRoZSBXZWJLaXRXZWJWaWV3IHdpdGggdGhlIGdpdmVuIFBhZ2Ugb2JqZWN0LgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKTogQWRkZWQgYSBn
ZXR0ZXIgdG8gb2J0YWluIHRoZSBpbnN0YW5jZSBvZiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMg
aGVsZCBieSB0aGUgZ2l2ZW4gV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
d2Vidmlldy5oOgorCiAyMDEwLTEwLTI3ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpA
aWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggZTg2NGVh
Ny4uMzc1MGUwNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVD
bGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50
R3RrLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNocm9tZUNsaWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29u
c29sZS5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogI2luY2x1ZGUg
IkZpbGVTeXN0ZW0uaCIKQEAgLTYwNyw2ICs2MDgsMTEgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNo
b29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdl
YkMKICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxl
bmFtZXMpKTsKIH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlk
Q2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAg
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKHdlYmtpdF93ZWJfdmlld19nZXRf
dmlld3BvcnRfYXR0cmlidXRlcyhtX3dlYlZpZXcpKTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6
OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCBiOTI1MzEzLi4y
MTgxOWU1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgK
QEAgLTEwOSw2ICsxMDksOCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rp
b24pOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5n
ZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUo
REFUQUJBU0UpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2Vi
Q29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDgyOTYy
MDYuLjIzNzQ4YTYgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHly
aWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE5LDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKIAotI2luY2x1ZGUgIndl
YmtpdHdlYnZpZXcuaCIKICNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwpAQCAtNTQsMyArNTQsMTQgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmxpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oKQogICAgIHJldHVybiBzX2xpbmtzSW5j
bHVkZWRJblRhYkNoYWluOwogfQogCisvLyBGb3IgdGVzdGluZyBmYXN0L3ZpZXdwb3J0Lgordm9p
ZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnVwZGF0ZVZpZXdwb3J0QXR0cmlidXRlcyhXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWlsYWJsZVdpZHRoLCBnaW50IGF2YWlsYWJsZUhl
aWdodCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3
KSk7CisKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyA9
IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3KTsKKyAgICBW
aWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFp
bkZyYW1lKCktPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgLy8gZGVza3Rv
cFdpZHRoID0gOTgwLCBkZXZpY2VXaWR0aCA9IDMyMCwgZGV2aWNlSGVpZ2h0ID0gNDgwLCBkZXZp
Y2VEUEkgPSAxNjAKKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21wdXRlVmlld3Bv
cnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgOTgwLCAzMjAsIDQ4MCwgMTYwLCBJbnRTaXplKGF2YWls
YWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpKTsKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19zZXQodmlld3BvcnRBdHRyaWJ1dGVzLCBhdHRycywgYXJndW1lbnRzLnVzZXJTY2FsYWJs
ZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaAppbmRleCA1YjQ5NGZmLi4xMDg2NWU4IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTE5LDYg
KzE5LDggQEAKICNpZm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKICNkZWZpbmUgRHVt
cFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKIAorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVz
Lmg+CisKIGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ayB7CiAKIHB1YmxpYzoKQEAgLTMw
LDYgKzMyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZElu
Rm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0No
YWluKCk7CisgICAgc3RhdGljIHZvaWQgdXBkYXRlVmlld3BvcnRBdHRyaWJ1dGVzKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0
KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2RydFJ1bjsKZGlmZiAtLWdpdCBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5k
ZXggZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBhdXRo
ZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uMzk5Y2I0YyAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5cGVk
ZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xvY2F0
aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xp
Y3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsKIAor
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3Mg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDYxNmVlNmIuLjI1MDgwNTEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHdl
YmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNs
dWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIK
ICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgi
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTE0MCw2ICsxNDIsNyBAQCBleHRlcm4gIkMiIHsK
IAogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwogICAgICAgICBQbGF0Zm9ybVJl
ZlB0cjxXZWJLaXRXZWJCYWNrRm9yd2FyZExpc3Q+IGJhY2tGb3J3YXJkTGlzdDsKKyAgICAgICAg
UGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2aWV3cG9ydEF0dHJpYnV0
ZXM7CiAKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVudT4gY3VycmVudE1lbnU7CiAgICAg
ICAgIGdpbnQgbGFzdFBvcHVwWFBvc2l0aW9uOwpAQCAtMzE2LDYgKzMxOSwxNSBAQCBleHRlcm4g
IkMiIHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKgogICAgIHdlYmtpdF9n
ZW9sb2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6
R2VvbG9jYXRpb24qKTsKIAorICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoKKyAgICB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoV2ViQ29yZTo6UGFnZSopOworCisgICAgdm9pZAor
ICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVz
JiBhdHRycywgZ2Jvb2xlYW4gdXNlclNjYWxhYmxlKTsKKworICAgIGdkb3VibGUgCisgICAgd2Vi
a2l0X3dlYl92aWV3X2dldF9kcGkoV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CisKICAgICAvLyBG
SVhNRTogbW92ZSB0aGlzIHRvIHdlYmtpdG5ldHdvcmtyZXF1ZXN0Lmggb25jZSB0aGUgQVBJIGlz
IGFncmVlZCB1cG9uLgogICAgIFdFQktJVF9BUEkgU291cE1lc3NhZ2UqCiAgICAgd2Via2l0X25l
dHdvcmtfcmVxdWVzdF9nZXRfbWVzc2FnZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMu
Y3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWM2MmI3Ci0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApAQCAtMCww
ICsxLDI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGts
ZHAub3JnPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAid2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRl
LmgiCisKKy8qKgorICogU0VDVElPTjp3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9y
dF9kZXNjcmlwdGlvbjogUmVwcmVzZW50cyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdl
YiBwYWdlCisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVz
LWNoYW5nZWQKKyAqCisgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIG9mZmVycyB0aGUgdmll
d3BvcnQgcHJvcGVydGllcyB0byB1c2VyIGFnZW50cyB0byAKKyAqIGNvbnRyb2wgdGhlIHZpZXdw
b3J0IGxheW91dC4gSXQgY29udGFpbnMgdGhlIHNpemUsIGluaXRpYWwgc2NhbGUgd2l0aCBsaW1p
dHMsIAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8g
c2NhbGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3cG9ydC4KKyAqIFRoaXMgbWFrZXMgYSB3ZWIg
cGFnZSBmaXQgdGhlIGRldmljZSBzY3JlZW4uCisgKiAKKyAqICNXZWJLaXRXZWJWaWV3IGFsd2F5
cyBoYXMgYW4gYXNzb2NpYXRlZCBpbnN0YW5jZSBvZiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
LCAKKyAqIHNvIHlvdSBjYW4gY2FsbCAjd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzIHRvIGdldCB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcy4KKyAqIEFsc28sIHlv
dSBoYXZlIHRvIGNhbGwgI3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSB0byBn
ZXQgdGhlIG9wdGltYWwgCisgKiB2aWV3cG9ydCBhdHRyaWJ1dGVzIHdoZW4gdGhlIHNpemUgb2Yg
dGhlIHZpc2libGUgdmlld3BvcnQgaXMgY2hhbmdlZC4KKyAqIAorICogI1dlYktpdFdlYlZpZXc6
OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIHdpdGgg
CisgKiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGVuIHRoZSB2aWV3cG9ydCBhdHRy
aWJ1dGVzIGFyZSB1cGRhdGVkLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzLCByZWZlciB0byB0aGUgU2FmYXJpIHJlZmVyZW5jZSBsaWJyYXJ5
IGF0CisgKiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9zYWZhcmkvbGlicmFyeS9kb2N1bWVu
dGF0aW9uL2FwcGxlYXBwbGljYXRpb25zL3JlZmVyZW5jZS9zYWZhcmlodG1scmVmL2FydGljbGVz
L21ldGF0YWdzLmh0bWwKKyAqCisgKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz4K
KyAqIC88IS0tIC0tPiogR2V0IHRoZSBjdXJyZW50IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyAq
PCEtLSAtLT4vCisgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRl
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJfdmlldyk7CisK
KyAqIC88IS0tIC0tPiogQ29ubmVjdCB0byB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2Vz
IHNpZ25hbCAqPCEtLSAtLT4vCisgKiBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgInZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHZpZXdwb3J0X2NoYW5nZV9jYiks
IHdlYl92aWV3KTsKKyAqCisgKiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgor
ICovCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
KworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlIHsKKyAgICBnaW50IHdpZHRoOworICAgIGdpbnQgaGVpZ2h0OworICAg
IGdmbG9hdCB0YXJnZXREZW5zaXR5RFBJOworICAgIGdmbG9hdCBpbml0aWFsU2NhbGVGYWN0b3I7
CisgICAgZ2Zsb2F0IG1pbmltdW1TY2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgbWF4aW11bVNjYWxl
RmFjdG9yOworICAgIGdib29sZWFuIGlzVXNlclNjYWxhYmxlOworICAgIGdib29sZWFuIGlzVmFs
aWQ7CisgICAgUGFnZSogcGFnZTsKK307CisKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJ
QlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChv
YmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Y2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyogdmlld3BvcnRBdHRyaWJ1
dGVzQ2xhc3MpCit7CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKHZpZXdwb3J0QXR0cmli
dXRlc0NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKHZp
ZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdiA9IHByaXY7CisKKyAgICBwcml2LT53aWR0aCA9
IDA7CisgICAgcHJpdi0+aGVpZ2h0ID0gMDsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3Ig
PSAtMS4wOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IC0xLjA7CisgICAgcHJpdi0+
bWF4aW11bVNjYWxlRmFjdG9yID0gLTEuMDsKKyAgICBwcml2LT50YXJnZXREZW5zaXR5RFBJID0g
LTEuMDsKKyAgICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9IHRydWU7Cit9CisKK1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KFBhZ2UqIHBhZ2Up
Cit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMgPSBX
RUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklFV1BP
UlRfQVRUUklCVVRFUywgTlVMTCkpOworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZh
dGUqIHByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2aWV3cG9y
dEF0dHJpYnV0ZXMpOworCisgICAgcHJpdi0+aXNWYWxpZCA9IGZhbHNlOworICAgIHByaXYtPnBh
Z2UgPSBwYWdlOworCisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlczsKK30KKworLyoqCisg
KiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfd2lkdGg6CisgKiBAdmlld3BvcnRBdHRy
aWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSB3
aWR0aCBvZiB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgd2lk
dGggb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW4gcGl4ZWxzCisgKgorICogU2lu
Y2U6IDEuMy41CisgKi8KK2dpbnQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRo
KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0
QXR0cmlidXRlcyksIDApOworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndp
ZHRoOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9oZWlnaHQ6
CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAq
CisgKiBSZXR1cm5zIHRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgKgor
ICogUmV0dXJuczogdGhlIGhlaWdodCBvZiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBp
biBwaXhlbHMKKyAqCisgKiBTaW5jZTogMS4zLjUKKyAqLworZ2ludCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19nZXRfaGVpZ2h0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRB
dHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9S
VF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDApOworICAgIHJldHVybiB2aWV3cG9y
dEF0dHJpYnV0ZXMtPnByaXYtPmhlaWdodDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3I6CisgKiBAdmlld3BvcnRBdHRyaWJ1
dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZXR1cm5zIHRoZSBpbml0
aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICoKKyAqIFJldHVybnM6IHRo
ZSBpbml0aWFsIHNjYWxlIG9mIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICog
U2luY2U6IDEuMy41CisgKi8KK2dmbG9hdCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
aW5pdGlhbF9zY2FsZV9mYWN0b3IoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0
dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JU
X0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgMCk7CisgICAgcmV0dXJuIHZpZXdwb3J0
QXR0cmlidXRlcy0+cHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yOworfQorCisvKioKKyAqIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3RvcjoKKyAqIEB2aWV3
cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJldHVy
bnMgdGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgKgorICog
UmV0dXJuczogdGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMKKyAqCisgKiBTaW5jZTogMS4zLjUKKyAqLworZ2Zsb2F0IHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX2dldF9taW5pbXVtX3NjYWxlX2ZhY3RvcihXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMq
IHZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRf
SVNfVklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKyAgICByZXR1
cm4gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5taW5pbXVtU2NhbGVGYWN0b3I7Cit9CisKKy8q
KgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9y
OgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisg
KgorICogUmV0dXJucyB0aGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQgcHJvcGVydGll
cy4KKyAqCisgKiBSZXR1cm5zOiB0aGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnZmxvYXQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9m
YWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKHZpZXdwb3J0QXR0cmlidXRlcyksIDAp
OworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPm1heGltdW1TY2FsZUZhY3Rv
cjsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfZGV2aWNlX3Bp
eGVsX3JhdGlvOgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzCisgKgorICogUmV0dXJucyB0aGUgZGV2aWNlIHBpeGVsIHJhdGlvIGNhbGN1bGF0ZWQg
YnkgdGhlIERldmljZSBEUEkuCisgKgorICogUmV0dXJuczogdGhlIGRldmljZSBwaXhlbCByYXRp
bworICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitnZmxvYXQgd2Via2l0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyhXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZp
ZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNf
VklFV1BPUlRfQVRUUklCVVRFUyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAwKTsKKyAgICByZXR1cm4g
dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT50YXJnZXREZW5zaXR5RFBJOworfQorCisvKioKKyAq
IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc191c2VyX3NjYWxhYmxlOgorICogQHZp
ZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgorICogRGV0
ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LgorICoK
KyAqIFJldHVybnM6IFRydWUgaWYgdGhlIHVzZXIgY2FuIHpvb20gaW4gYW5kIG91dCAKKyAqCisg
KiBTaW5jZTogMS4zLjUKKyAqLworZ2Jvb2xlYW4gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X2lzX3VzZXJfc2NhbGFibGUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0
dHJpYnV0ZXMpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0lTX1ZJRVdQT1JU
X0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSwgZmFsc2UpOworICAgIHJldHVybiB2aWV3
cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVXNlclNjYWxhYmxlOworfQorCisvKioKKyAqIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9pc192YWxpZDoKKyAqIEB2aWV3cG9ydEF0dHJpYnV0
ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIFJldHVybnMgd2hldGhlciBv
ciBub3QgYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICoKKyAqIFJldHVy
bnM6IFRydWUgaWYgYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkCisgKgorICog
U2luY2U6IDEuMy41CisgKi8KK2dib29sZWFuIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dl
dF9pc192YWxpZChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykK
K3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFpbChXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRF
Uyh2aWV3cG9ydEF0dHJpYnV0ZXMpLCBmYWxzZSk7CisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmli
dXRlcy0+cHJpdi0+aXNWYWxpZDsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmli
dXRlc19yZWNvbXB1dGU6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMKKyAqCisgKiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmli
dXRlcyBhbmQgZW1pdCB0aGUgdmlld3BvcnQtYXR0cmlidXRlLWNoYW5nZWQgc2lnbmFsLiAKKyAq
IFVzZXIgYWdlbnRzIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgdGhlIGRlc2t0b3BXaWR0
aCwgZGV2aWNlIHdpZHRoL2hlaWdodCwgZGV2aWNlIERQSSwgYW5kIHRoZSB2aXNpYmxlIHZpZXdw
b3J0IHNpemUgaGFzIGNoYW5nZWQuCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK3ZvaWQgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lT
X1ZJRVdQT1JUX0FUVFJJQlVURVModmlld3BvcnRBdHRyaWJ1dGVzKSk7CisKKyAgICBXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVU
RVNfR0VUX1BSSVZBVEUodmlld3BvcnRBdHRyaWJ1dGVzKTsKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0ga2l0KHByaXYtPnBhZ2UpOworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dp
ZGdldF9nZXRfc2NyZWVuKEdUS19XSURHRVQod2ViVmlldykpOworICAgIEZsb2F0UmVjdCByZWN0
ID0gcHJpdi0+cGFnZS0+Y2hyb21lKCktPnBhZ2VSZWN0KCk7CisgICAgVmlld3BvcnRBcmd1bWVu
dHMgYXJndW1lbnRzID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnZpZXdw
b3J0QXJndW1lbnRzKCk7CisKKyAgICAvLyBUaGUgRGVza3RvcFdpZHRoIGhhcyA5ODAsIGJlY2F1
c2UgdGhpcyB2YWx1ZSB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBmb3Ig
ZGVza3RvcCB1c2VyIGFnZW50cy4KKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21w
dXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgOTgwLCBnZGtfc2NyZWVuX2dldF93aWR0
aChzY3JlZW4pLCBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2NyZWVuKSwgd2Via2l0X3dlYl92aWV3
X2dldF9kcGkod2ViVmlldyksIEludFNpemUoc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC53aWR0aCgp
KSwgc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC5oZWlnaHQoKSkpKTsKKyAgICB3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19zZXQodmlld3BvcnRBdHRyaWJ1dGVzLCBhdHRycywgYXJndW1lbnRzLnVz
ZXJTY2FsYWJsZSk7CisKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIHZpZXdwb3J0QXR0cmlidXRlcyk7IAorfQorCisvKiBJ
bnRlcm5hbCB1c2Ugb25seS4gU2V0IGVhY2ggdmFsdWUgb2YgdGhlIFZpZXdwb3J0QXR0cmlidXRl
cyB0byB0aGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzICovCit2b2lkIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX3NldChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmli
dXRlcywgY29uc3QgVmlld3BvcnRBdHRyaWJ1dGVzJiBhdHRycywgZ2Jvb2xlYW4gdXNlclNjYWxh
YmxlKSAKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJV
VEVTKHZpZXdwb3J0QXR0cmlidXRlcykpOworCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKHZp
ZXdwb3J0QXR0cmlidXRlcyk7CisgICAgcHJpdi0+aXNWYWxpZCA9IHRydWU7CisgICAgcHJpdi0+
d2lkdGggPSBhdHRycy5sYXlvdXRTaXplLndpZHRoKCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0
cnMubGF5b3V0U2l6ZS5oZWlnaHQoKTsKKyAgICBwcml2LT50YXJnZXREZW5zaXR5RFBJID0gYXR0
cnMuZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IgPSBhdHRy
cy5pbml0aWFsU2NhbGU7CisgICAgcHJpdi0+bWluaW11bVNjYWxlRmFjdG9yID0gYXR0cnMubWlu
aW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9IGF0dHJzLm1heGltdW1T
Y2FsZTsKKyAgICBwcml2LT5pc1VzZXJTY2FsYWJsZSA9IHVzZXJTY2FsYWJsZTsKK30KZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMGIyMGRiYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRl
ZiB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJp
YnV0ZXNfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklF
V1BPUlRfQVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19n
ZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVX
UE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJL
SVRfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFT
U19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRS
SUJVVEVTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdF
QktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BP
UlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFz
cyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJ
RVdQT1JUX0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NM
QVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3Qg
X1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7
CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2
YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7
CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1
dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsK
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lk
KTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dl
dF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgZ2ludAord2Via2l0
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3dpZHRoICAgICAgICAgICAgICAgIChXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2ludAor
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2hlaWdodCAgICAgICAgICAgICAgIChXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkg
Z2Zsb2F0Cit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0
b3IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VC
S0lUX0FQSSBnZmxvYXQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9taW5pbXVtX3Nj
YWxlX2ZhY3RvciAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMp
OworCitXRUJLSVRfQVBJIGdmbG9hdAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21h
eGltdW1fc2NhbGVfZmFjdG9yIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0
cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Zsb2F0IAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X2RldmljZV9waXhlbF9yYXRpbyAgIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgKnZp
ZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgZ2Jvb2xlYW4gCit3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19nZXRfaXNfdXNlcl9zY2FsYWJsZSAgICAgKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyAqdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworV0VCS0lUX0FQSSBnYm9vbGVhbgord2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X2lzX3ZhbGlkICAgICAgICAgICAgIChXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK1dFQktJVF9BUEkgdm9p
ZCAKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSAgICAgICAgICAgICAgICAo
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpOyAKKworR19FTkRf
REVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2
aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDk3NGI1
M2YuLmMyZTRlMmMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcu
Y3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsx
MCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENv
cHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9v
bmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDYgKzQ1
LDcgQEAKICNpbmNsdWRlICJBYnN0cmFjdERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNs
dWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsu
aCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgpAQCAtMTczLDYgKzE3NSw3IEBA
IGVudW0gewogICAgIEdFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAg
T05MT0FEX0VWRU5ULAogICAgIEZSQU1FX0NSRUFURUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRF
U19DSEFOR0VELAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xMjYxLDYgKzEyNjQsNyBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAg
cHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xlYXIoKTsKICAgICBwcml2LT5tYWluUmVzb3VyY2Uu
Y2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMuY2xlYXIoKTsKKyAgICBwcml2LT52aWV3
cG9ydEF0dHJpYnV0ZXMuY2xlYXIoKTsKIAogICAgIEhhc2hNYXA8R2RrRHJhZ0NvbnRleHQqLCBE
cm9wcGluZ0NvbnRleHQqPjo6aXRlcmF0b3IgZW5kRHJvcHBpbmdDb250ZXh0cyA9IHByaXYtPmRy
b3BwaW5nQ29udGV4dHMuZW5kKCk7CiAgICAgZm9yIChIYXNoTWFwPEdka0RyYWdDb250ZXh0Kiwg
RHJvcHBpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ZXIgPSBwcml2LT5kcm9wcGluZ0NvbnRleHRz
LmJlZ2luKCk7IGl0ZXIgIT0gZW5kRHJvcHBpbmdDb250ZXh0czsgKytpdGVyKQpAQCAtMTMyMSw3
ICsxMzI1LDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0X3dlYl92aWV3X2dldF9hY2Nlc3Np
YmxlKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiBjb3JlQWNjZXNzaWJsZS0+d3JhcHBl
cigpOwogfQogCi1zdGF0aWMgZ2RvdWJsZSB3ZWJWaWV3R2V0RFBJKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCitnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRfZHBpKFdlYktpdFdlYlZpZXcqIHdl
YlZpZXcpCiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSB3ZWJWaWV3LT5wcml2
OwogICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5ncyA9IHByaXYtPndlYlNldHRpbmdz
LmdldCgpOwpAQCAtMTM1Miw3ICsxMzU2LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3
X3NjcmVlbl9jaGFuZ2VkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtTY3JlZW4qIHByZXZpb3UKIAog
ICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5ncyA9IHByaXYtPndlYlNldHRpbmdzLmdl
dCgpOwogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGNvcmUod2ViVmlldyktPnNldHRpbmdzKCk7
Ci0gICAgZ2RvdWJsZSBEUEkgPSB3ZWJWaWV3R2V0RFBJKHdlYlZpZXcpOworICAgIGdkb3VibGUg
RFBJID0gd2Via2l0X3dlYl92aWV3X2dldF9kcGkod2ViVmlldyk7CiAKICAgICBndWludCBkZWZh
dWx0Rm9udFNpemUsIGRlZmF1bHRNb25vc3BhY2VGb250U2l6ZSwgbWluaW11bUZvbnRTaXplLCBt
aW5pbXVtTG9naWNhbEZvbnRTaXplOwogCkBAIC0yNTI1LDYgKzI1MjksMjcgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3
Q2xhc3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOwogCiAgICAgLyoKKyAg
ICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQKKyAgICAgKiBA
d2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2
aWV3cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBo
YXMgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdl
YlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2l0aCBA
dmlld3BvcnRfYXR0cmlidXRlcyAgCisgICAgICogd2hlbiB0aGUgdmlld3BvcnQgYXR0cmlidXRl
cyBhcmUgdXBkYXRlZCBpbiB0aGUgY2FzZSBvZiBsb2FkaW5nIHdlYiBwYWdlcyBjb250YWluIAor
ICAgICAqIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlcyBpcyB1
c2VkIHRvIGNvbnRyb2wgdGhlIHZpZXdwb3J0IGxheW91dCB0byBmaXQgYSB3ZWIgcGFnZSB0byB0
aGUgZGV2aWNlIHNjcmVlbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRF0g
PSBnX3NpZ25hbF9uZXcoInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAg
ICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCiAgICAgICogaW1w
bGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFz
cy0+Y3JlYXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3
OwpAQCAtMzA1Miw3ICszMDc3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X3VwZGF0
ZV9zZXR0aW5ncyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogCiBzdGF0aWMgaW5saW5lIGdpbnQg
cGl4ZWxzRnJvbVNpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBzaXplKQogewotICAg
IGdkb3VibGUgRFBJID0gd2ViVmlld0dldERQSSh3ZWJWaWV3KTsKKyAgICBnZG91YmxlIERQSSA9
IHdlYmtpdF93ZWJfdmlld19nZXRfZHBpKHdlYlZpZXcpOwogICAgIHJldHVybiBzaXplIC8gNzIu
MCAqIERQSTsKIH0KIApAQCAtMzE5OCw2ICszMjIzLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2luaXQoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIAogICAgIHByaXYtPndlYldpbmRv
d0ZlYXR1cmVzID0gYWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfd2ViX3dpbmRvd19mZWF0dXJlc19u
ZXcoKSk7CiAKKyAgICAvLyBBdHRhY2ggYSBuZXcgV2ViS2l0Vmlld3BvcnRBdHRyYnV0ZXMgb2Jq
ZWN0IHdpdGggdGhlIGdpdmVuIFBhZ2UuCisgICAgcHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzID0g
YWRvcHRQbGF0Zm9ybVJlZih3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcocHJpdi0+Y29y
ZVBhZ2UpKTsKKwogICAgIHByaXYtPnN1YlJlc291cmNlcyA9IGFkb3B0UGxhdGZvcm1SZWYoZ19o
YXNoX3RhYmxlX25ld19mdWxsKGdfc3RyX2hhc2gsIGdfc3RyX2VxdWFsLCBnX2ZyZWUsIGdfb2Jq
ZWN0X3VucmVmKSk7CiAKICAgICBwcml2LT5jdXJyZW50Q2xpY2tDb3VudCA9IDA7CkBAIC00NTU5
LDYgKzQ1ODcsMjIgQEAgZ2Jvb2xlYW4gd2Via2l0X3dlYl92aWV3X2dldF92aWV3X3NvdXJjZV9t
b2RlIChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiBGQUxTRTsKIH0KIAorLyoq
CisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXM6CisgKiBAd2ViVmll
dzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSAj
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGhlbGQgYnkgdGhlIGdpdmVuICNXZWJLaXRXZWJWaWV3
LgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyBpbnN0YW5jZQorICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRl
cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisgICAgcmV0dXJuIHdlYlZpZXctPnBy
aXYtPnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKTsKK30KKwogLy8gSW50ZXJuYWwgc3VicmVzb3Vy
Y2UgbWFuYWdlbWVudAogdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYWRkX3Jlc291cmNlKFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGNvbnN0IGNoYXIqIGlkZW50aWZpZXIsIFdlYktpdFdlYlJlc291cmNl
KiB3ZWJSZXNvdXJjZSkKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdl
YnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA5ZGZiNjU0
Li42YjFlOWM1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MDEsNiArNDAxLDkg
QEAgd2Via2l0X2dldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQp
OwogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2Rv
bV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcp
OwogCitXRUJLSVRfQVBJIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF93ZWJfdmll
d19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAq
d2ViVmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDJmMDI4OTkuLmMxY2Mw
MzQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAxMC0xMC0yOCAgSm9vbmUgSHVyICA8am9vbmVA
a2xkcC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgW0dUS10gU3VwcG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgQWRkIHN1cHBv
cnQgZm9yIHRlc3RpbmcgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAg
ICAgKGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIEphdmFTY3JpcHQg
QVBJIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAgICAgICAgKExh
eW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Z3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIGZ1bmN0aW9uIHRv
IHRlc3QgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBEaXR0by4KKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwOgorICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAg
ICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwOgorICAg
ICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERp
dHRvLgorCiAyMDEwLTEwLTI3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDgzNjU1YmQuLmU3NDdmZTUg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9s
bGVyLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNDAsNiArMTQxLDIyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZy
YW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTCiAgICAg
cmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1
ZVJlZiBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBK
U09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3Vt
ZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2Vw
dGlvbikKK3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJsZSBhdmFpbGFibGVXaWR0aCA9
IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAg
QVNTRVJUKCEqZXhjZXB0aW9uKTsKKyAgICBkb3VibGUgYXZhaWxhYmxlSGVpZ2h0ID0gSlNWYWx1
ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQo
ISpleGNlcHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBz
dGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlz
T2JqZWN0KSk7CisgICAgY29udHJvbGxlci0+Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KHN0YXRp
Y19jYXN0PGludD4oYXZhaWxhYmxlV2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZUhl
aWdodCkpOworICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
fQorCiBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNv
bnRyb2xsZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0
UHJpdmF0ZSh0aGlzT2JqZWN0KSk7CkBAIC0xODkzLDYgKzE5MTAsNyBAQCBKU1N0YXRpY0Z1bmN0
aW9uKiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAi
ZHVtcEJhY2tGb3J3YXJkTGlzdCIsIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIsIGR1bXBDaGlsZEZy
YW1lU2Nyb2xsUG9zaXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENoaWxk
RnJhbWVzQXNUZXh0IiwgZHVtcENoaWxkRnJhbWVzQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAiZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCIsIGR1bXBDb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERPTUFzV2ViQXJjaGl2ZSIsIGR1
bXBET01Bc1dlYkFyY2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8
IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRGF0YWJh
c2VDYWxsYmFja3MiLCBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsIGR1bXBFZGl0aW5nQ2FsbGJhY2tzQ2FsbGJh
Y2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURv
bnREZWxldGUgfSwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91
dFRlc3RDb250cm9sbGVyLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCmluZGV4IDI3NTE4YjcuLjVmM2JkMjEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMjg0LDYgKzI4NCw4
IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBs
ZW5ndGgpOwogCisgICAgdm9pZCBjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJs
ZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJ
IHRlc3QgZnVuY3Rpb25zIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVj
aWZpYyAKICAgICAvLyB1bml0IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4K
ICAgICB2b2lkIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRm
OERhdGEsIEpTU3RyaW5nUmVmIGJhc2VVUkwpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggMDRk
OTdlYi4uMGUwZTQxNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3Rr
L0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC00LDYgKzQsNyBAQAogICog
Q29weXJpZ2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFu
IE1pY2hhZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgQ29sbGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25l
QGtsZHAub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04MjYsMyArODI3
LDE4IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCwg
aW50KQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4gZmFsc2U7CiB9
CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChp
bnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgV2ViS2l0V2Vi
Vmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7
CisgICAgQVNTRVJUKHdlYlZpZXcpOworCisgICAgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjp1
cGRhdGVWaWV3cG9ydEF0dHJpYnV0ZXMod2ViVmlldywgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJs
ZUhlaWdodCk7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0
ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmlldyk7Cisg
ICAgZnByaW50ZihzdGRvdXQsICJ2aWV3cG9ydCBzaXplICVkeCVkIHNjYWxlICVmIHdpdGggbGlt
aXRzIFslZiwgJWZdXG4iLAorICAgICAgICAgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Z2V0X3dpZHRoKHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAgICB3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19nZXRfaGVpZ2h0KHZpZXdwb3J0QXR0cmlidXRlcyksCisgICAgICAgICAg
ICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfaW5pdGlhbF9zY2FsZV9mYWN0b3Iodmll
d3BvcnRBdHRyaWJ1dGVzKSwKKyAgICAgICAgICAgIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X2dldF9taW5pbXVtX3NjYWxlX2ZhY3Rvcih2aWV3cG9ydEF0dHJpYnV0ZXMpLAorICAgICAgICAg
ICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X21heGltdW1fc2NhbGVfZmFjdG9yKHZp
ZXdwb3J0QXR0cmlidXRlcykpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGM1ZDVhOTAuLjI4
MmM3MDEgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRU
ZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTk0OSwzICs5NDksNyBAQCBib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkK
IHsKICAgICByZXR1cm4gW21haW5GcmFtZSBoYXNTcGVsbGluZ01hcmtlcjpmcm9tIGxlbmd0aDps
ZW5ndGhdOwogfQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZp
ZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKworfQpk
aWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0
Q29udHJvbGxlcldpbi5jcHAKaW5kZXggOWU4ZWQxZS4uZmJlODEzOCAxMDA2NDQKLS0tIGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJX
aW4uY3BwCkBAIC0xNDAxLDMgKzE0MDEsOCBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpo
YXNTcGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIHJldHVybiByZXQ7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNv
bmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVI
ZWlnaHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgorfQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAg
Yi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cAppbmRleCBlZWZjNTg3Li5jNGQ2YTNhIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAorKysgYi9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcApAQCAtNTExLDYgKzUx
MSwxMSBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQs
IGludCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFi
bGVIZWlnaHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudAorfQorCiBKU1JldGFpblB0cjxK
U1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFy
KiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQK
</data>
<flag name="review"
          id="62516"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73192</attachid>
            <date>2010-11-07 03:43:09 -0800</date>
            <delta_ts>2010-11-19 09:54:41 -0800</delta_ts>
            <desc>Proposed Patch10</desc>
            <filename>viewport10.diff</filename>
            <type>text/plain</type>
            <size>38075</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhNWUyMzUwLi5jMDJiMzM1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTEtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSB0byBnZXQgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCAK
KwogMjAxMC0xMS0wNCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9HTlVtYWtlZmls
ZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQwNTY5Y2QuLmRiOTM1ZGEgMTAwNjQ0Ci0tLSBh
L0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMTksNiArMzE5LDcgQEAg
d2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFzb3VyY2UuaCBcCkBAIC0zODEsNiArMzgyLDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMg
Kz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkYTBhMDUuLjI1Y2JhMDAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMS0wNiAgSm9vbmUgSHVyICA8am9vbmVAa2xk
cC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0dUS10gU3VwcG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgSW5jbHVkZWQgdmll
d3BvcnQgdGVzdCBjYXNlcyBmb3IgV2ViS2l0R3RrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2tpcHBlZDogVW5za2lwIGZhc3Qvdmlld3BvcnQgZXhjZXB0IHZpZXdwb3J0LTQ1Lmh0bWwuCisK
IDIwMTAtMTEtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4
IGRkZTNmMGQuLjBkZDJkYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NjE0LDcg
KzU2MTQsOCBAQCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9p
bnRJblBhdGguZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92
aWV3cG9ydAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEK
K2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVp
cmtzIG9ubHkgYXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUt
aHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDZiMzMxMDguLmYxZWQyOTAgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTAtMTEtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBv
cnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBn
b2JqZWN0IHRvIG9mZmVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgor
ICAgICAgICBJdCBpcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUg
c2l6ZSwgaW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlv
biBhYm91dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0
aGUgdmlld3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVj
ZWQgYnkgU2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAg
ICAgICB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVu
Y2UgbGlicmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJp
L2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJp
aHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmRp
c3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKTogQWRkZWQgdGhpcyBjYWxsYmFjayB0byBrbm93
IHdoZXRoZXIgdGhlIHZpZXdwb3J0IGFyZ3VtZW50cyBpcyBhdmFpbGFibGUuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUpOiBBZGRlZCB0aGlz
IGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aXRoIHRo
ZSBnaXZlbiBhdmFpbGFibGVXaWR0aCBhbmQgYXZhaWxhYmxlSGVpZ3RoLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAq
IHdlYmtpdC93ZWJraXRwcml2YXRlLmg6IEFkZGVkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X25ldyBhcyBhIHByaXZhdGUgZnVuY3Rpb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdw
b3J0YXR0cmlidXRlcy5jcHA6IEFkZGVkIGZ1bmN0aW9ucyB0byBnZXQgZWFjaCB2YWx1ZSBvZiB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfaW5p
dCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkpOgor
ICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KToKKyAgICAgICAgKHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSk6IFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2
aWV3cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5n
ZWQgc2lnbmFsLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDog
QWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2dldF9kcGkpOiBSZW5hbWUgd2ViVmlld0dldERQSSB0byB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RwaSBhbmQgbWFrZSBpdCBhIHByaXZhdGUgZnVuY3Rpb24uIAorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKTogUmVuYW1lIHdlYlZpZXdHZXREUEkgdG8g
d2Via2l0X3dlYl92aWV3X2dldF9kcGkuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdCk6IFN1cHBvcnQgZm9yIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFs
LgorICAgICAgICAocGl4ZWxzRnJvbVNpemUpOiBSZW5hbWUgd2ViVmlld0dldERQSSB0byB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RwaS4KKwogMjAxMC0xMS0wMyAgRGFuaWVsIEJhdGVzICA8ZGJhdGVz
QHJpbS5jb20+CiAKICAgICAgICAgRm9yIHVubmFtZWQgZnJhbWVzLCB3aW5kb3cubmFtZSByZXR1
cm5zIGEgZ2VuZXJhdGVkIG5hbWUKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcAppbmRleCBlODY0ZWE3Li40OWIwODVhIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgpAQCAtNjA3LDYgKzYwOCwx
MSBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxX
VEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNv
bjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCit2b2lkIENocm9tZUNsaWVu
dDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmlld3BvcnRBcmd1bWVudHMm
IGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNv
bXB1dGUobV93ZWJWaWV3KTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCA4N2YxZGFiLi45YWMwMzk5IDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTEwOSw2ICsxMDks
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRp
cChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDgyOTYyMDYuLmM5NmMxNzIgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTE5LDcgKzIwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKIAotI2luY2x1ZGUgIndlYmtpdHdlYnZpZXcuaCIK
ICNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpA
QCAtNTQsMyArNTQsMTQgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmxpbmtzSW5j
bHVkZWRJbkZvY3VzQ2hhaW4oKQogICAgIHJldHVybiBzX2xpbmtzSW5jbHVkZWRJblRhYkNoYWlu
OwogfQogCisvLyBGb3IgdGVzdGluZyBmYXN0L3ZpZXdwb3J0LgorV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzKiBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0
ZXNGb3JTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdp
bnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9J
U19XRUJfVklFVyh3ZWJWaWV3KSwgTlVMTCk7CisKKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1
bWVudHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCkt
PnZpZXdwb3J0QXJndW1lbnRzKCk7CisgICAgLy8gZGVza3RvcFdpZHRoID0gOTgwLCBkZXZpY2VX
aWR0aCA9IDMyMCwgZGV2aWNlSGVpZ2h0ID0gNDgwLCBkZXZpY2VEUEkgPSAxNjAKKyAgICBWaWV3
cG9ydEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50
cywgOTgwLCAzMjAsIDQ4MCwgMTYwLCBJbnRTaXplKGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVI
ZWlnaHQpKTsKKworICAgIHJldHVybiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcoYXR0
cnMsIGFyZ3VtZW50cy51c2VyU2NhbGFibGUpOworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKaW5kZXggNWI0OTRmZi4uMGUz
MDk2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5oCkBAIC0xOSw2ICsxOSw4IEBACiAjaWZuZGVmIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0a19oCiAjZGVmaW5lIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0a19oCiAKKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCiBjbGFzcyBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsgewogCiBwdWJsaWM6CkBAIC0zMCw2ICszMiw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyB2b2lkIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCk7CiAgICAgc3RhdGljIGJv
b2wgbGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpOworICAgIHN0YXRpYyBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMqIGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2RydFJ1bjsKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKaW5kZXgg
ZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgK
KysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBhdXRoZGlh
bG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdzLmg+CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uMzk5Y2I0YyAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5cGVkZWYg
c3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xvY2F0aW9u
UG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lE
ZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsKIAordHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDNhYzM1NjMuLjQ4NTgxZGIgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3VsdC5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vi
dmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMuaCIKICNp
bmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2luLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTMyNiw2ICszMjgsMTIgQEAgZXh0ZXJuICJDIiB7CiAg
ICAgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbioKICAgICB3ZWJraXRfZ2VvbG9jYXRp
b25fcG9saWN5X2RlY2lzaW9uX25ldyhXZWJLaXRXZWJGcmFtZSosIFdlYkNvcmU6Okdlb2xvY2F0
aW9uKik7CiAKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqCisgICAgd2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfbmV3KGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyYsIGdi
b29sZWFuKTsKKworICAgIGdkb3VibGUgCisgICAgd2Via2l0X3dlYl92aWV3X2dldF9kcGkoV2Vi
S2l0V2ViVmlldyogd2ViVmlldyk7CisKICAgICAvLyBGSVhNRTogbW92ZSB0aGlzIHRvIHdlYmtp
dG5ldHdvcmtyZXF1ZXN0Lmggb25jZSB0aGUgQVBJIGlzIGFncmVlZCB1cG9uLgogICAgIFdFQktJ
VF9BUEkgU291cE1lc3NhZ2UqCiAgICAgd2Via2l0X25ldHdvcmtfcmVxdWVzdF9nZXRfbWVzc2Fn
ZShXZWJLaXROZXR3b3JrUmVxdWVzdCogcmVxdWVzdCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mMmQ2NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApAQCAtMCwwICsxLDMwMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAid2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgiCisKKyNpbmNsdWRlICJD
aHJvbWUuaCIKKyNpbmNsdWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgorCisvKioKKyAqIFNFQ1RJT046d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzCisg
KiBAc2hvcnRfZGVzY3JpcHRpb246IFJlcHJlc2VudHMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMg
b2YgYSB3ZWIgcGFnZQorICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0
cmlidXRlcy1jaGFuZ2VkCisgKgorICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBvZmZlcnMg
dGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgdG8gdXNlciBhZ2VudHMgdG8gCisgKiBjb250cm9sIHRo
ZSB2aWV3cG9ydCBsYXlvdXQuIEl0IGNvbnRhaW5zIHRoZSBzaXplLCBpbml0aWFsIHNjYWxlIHdp
dGggbGltaXRzLCAKKyAqIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgdXNlciBpcyBh
YmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmlld3BvcnQuCisgKiBUaGlzIG1ha2Vz
IGEgd2ViIHBhZ2UgZml0IHRoZSBkZXZpY2Ugc2NyZWVuLgorICogCisgKiBZb3UgbmVlZCB0byBj
YWxsICN3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUgdG8gZ2V0IHRoZSBvcHRp
bWFsIAorICogdmlld3BvcnQgYXR0cmlidXRlcyB3aGVuIHRoZSBzaXplIG9mIHRoZSB2aXNpYmxl
IHZpZXdwb3J0IGlzIGNoYW5nZWQuCisgKiAKKyAqICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aXRoIAorICogdGhlICNX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hlbiB5b3UgY2FsbCAjd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfcmVjb21wdXRlLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzLCByZWZlciB0byB0aGUgU2FmYXJpIHJlZmVyZW5jZSBsaWJyYXJ5
IGF0CisgKiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9zYWZhcmkvbGlicmFyeS9kb2N1bWVu
dGF0aW9uL2FwcGxlYXBwbGljYXRpb25zL3JlZmVyZW5jZS9zYWZhcmlodG1scmVmL2FydGljbGVz
L21ldGF0YWdzLmh0bWwKKyAqCisgKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlzdGluZz4K
KyAqIC88IS0tIC0tPiogQ29ubmVjdCB0byB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2Vz
IHNpZ25hbCAqPCEtLSAtLT4vCisgKiBnX3NpZ25hbF9jb25uZWN0ICh3ZWJWaWV3LCAidmlld3Bv
cnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfY2hhbmdlX2NiKSwg
d2ViVmlldyk7CisgKgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHNpZ25hbCB0byBnZXQgdGhl
IGluaXRpYWwgc2NhbGUgdmFsdWUgKjwhLS0gLS0+LworICogc3RhdGljIHZvaWQKKyAqIHZpZXdw
b3J0X2NoYW5nZV9jYihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykKKyAqIHsKKyAqICAgICBnZmxvYXQgaW5pdGlhbFNj
YWxlOyAKKyAqICAgICBnX29iamVjdF9nZXQoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzKSwg
ImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVMTCk7CisgKiAgICAgd2Vi
a2l0X3dlYl92aWV3X3NldF9mdWxsX2NvbnRlbnRfem9vbSh3ZWJWaWV3LCBUUlVFKTsKKyAqICAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywgaW5pdGlhbFNjYWxlKTsK
KyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KKwordXNp
bmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsK
KyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1dJRFRILAorICAgIFBST1BfSEVJR0hULAorICAgIFBS
T1BfSU5JVElBTF9TQ0FMRV9GQUNUT1IsCisgICAgUFJPUF9NSU5JTVVNX1NDQUxFX0ZBQ1RPUiwK
KyAgICBQUk9QX01BWElNVU1fU0NBTEVfRkFDVE9SLAorICAgIFBST1BfREVWSUNFX1BJWEVMX1JB
VElPLAorICAgIFBST1BfVVNFUl9TQ0FMQUJMRSwKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzLCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlcywgR19UWVBFX09C
SkVDVCk7CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSB7CisgICAg
Z2ludCB3aWR0aDsKKyAgICBnaW50IGhlaWdodDsKKyAgICBnZmxvYXQgaW5pdGlhbFNjYWxlRmFj
dG9yOworICAgIGdmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgZ2Zsb2F0IG1heGltdW1T
Y2FsZUZhY3RvcjsKKyAgICBnZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICBnYm9vbGVhbiB1
c2VyU2NhbGFibGU7Cit9OworCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dF
VF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VC
S0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJp
dmF0ZSkpCisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9w
ZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMqIHBzcGVjKTsKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Y2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyoga2NsYXNzKQoreworICAg
IEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2NsYXNzKTsKKyAg
ICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X2dldF9wcm9wZXJ0eTsKKworICAgIEdQYXJhbUZsYWdzIGZsYWdzID0gKEdQYXJhbUZsYWdzKShX
RUJLSVRfUEFSQU1fUkVBREFCTEUpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dHM6d2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0
LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBQUk9QX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ3aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJXaWR0
aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdpZHRoIG9m
IHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmbGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dHM6aGVpZ2h0OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJoZWlnaHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSGVp
Z2h0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaGVpZ2h0
IG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmbGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dHM6aW5pdGlhbC1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgaW5pdGlh
bCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAg
ICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSU5JVElBTF9TQ0FMRV9G
QUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNf
ZmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbC1zY2Fs
ZS1mYWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSW5pdGlh
bCBTY2FsZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgor
ICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOm1pbmltdW0tc2NhbGUtZmFjdG9yOgorICAg
ICAqCisgICAgICogVGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIk1pbmltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQu
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZsYWdzKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czptYXhp
bXVtLXNjYWxlLWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBtYXhpbXVtIHNjYWxlIG9mIHRo
ZSB2aWV3cG9ydC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhpbXVtLXNjYWxlLWZhY3RvciIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJNYXhpbXVtIFNjYWxlIEZhY3Rv
ciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1heGltdW0g
c2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLXBpeGVsLXJhdGlvOgorICAgICAqCisgICAgICogVGhl
IGRldmljZSBwaXhlbCByYXRpbyBvZiB0aGUgdmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVW
SUNFX1BJWEVMX1JBVElPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
dmljZS1waXhlbC1yYXRpbyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJEZXZpY2UgUGl4ZWwgUmF0aW8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBkZXZpY2UgcGl4ZWwgcmF0aW8gb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykpOwor
ICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOnVzZXItc2NhbGFibGU6Cisg
ICAgICoKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29t
IGluIGFuZCBvdXQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVVNFUl9TQ0FMQUJMRSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygidXNlci1zY2FsYWJsZSIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVXNlciBTY2FsYWJsZSIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0
aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZs
YWdzKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2NsYXNzLCBzaXplb2YoV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3Bv
cnQpCit7CisgICAgdmlld3BvcnQtPnByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19H
RVRfUFJJVkFURSh2aWV3cG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdW
YWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMo
b2JqZWN0KTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gV0VC
S0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUodmlld3BvcnRBdHRyaWJ1dGVzKTsK
KworICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT53aWR0aCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOSVRJQUxfU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+aW5pdGlhbFNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTklNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWluaW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWElNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF4aW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9QSVhFTF9SQVRJ
TzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPmRldmljZVBpeGVsUmF0
aW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFUl9TQ0FMQUJMRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+dXNlclNjYWxhYmxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9
Cit9CisKK1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfbmV3KGNvbnN0IFZpZXdwb3J0QXR0cmlidXRlcyYgYXR0cmlidXRlcywgZ2Jvb2xlYW4gdXNl
clNjYWxhYmxlKQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRy
aWJ1dGVzID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMoZ19vYmplY3RfbmV3KFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIE5VTEwpKTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXNQcml2YXRlKiBwcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZB
VEUodmlld3BvcnRBdHRyaWJ1dGVzKTsKKworICAgIHByaXYtPndpZHRoID0gYXR0cmlidXRlcy5s
YXlvdXRTaXplLndpZHRoKCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0cmlidXRlcy5sYXlvdXRT
aXplLmhlaWdodCgpOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3RvciA9IGF0dHJpYnV0ZXMu
aW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3RvciA9IGF0dHJpYnV0ZXMu
bWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9IGF0dHJpYnV0ZXMu
bWF4aW11bVNjYWxlOworICAgIHByaXYtPmRldmljZVBpeGVsUmF0aW8gPSBhdHRyaWJ1dGVzLmRl
dmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+dXNlclNjYWxhYmxlID0gdXNlclNjYWxhYmxlOwor
CisgICAgcmV0dXJuIHZpZXdwb3J0QXR0cmlidXRlczsKK30KKworLyoqCisgKiB3ZWJraXRfdmll
d3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGU6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmll
d3BvcnQgYXR0cmlidXRlcyBhbmQgZW1pdCB0aGUgdmlld3BvcnQtYXR0cmlidXRlLWNoYW5nZWQg
c2lnbmFsLiAKKyAqIFVzZXIgYWdlbnRzIHNob3VsZCBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgdGhl
IGRldmljZSB3aWR0aC9oZWlnaHQsIGRldmljZSBEUEksIGFuZCB0aGUgdmlzaWJsZSB2aWV3cG9y
dCBzaXplIGhhcyBjaGFuZ2VkLgorICoKKyAqIFNpbmNlOiAxLjMuNQorICovCit2b2lkIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKwor
ICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKEdUS19XSURHRVQo
d2ViVmlldykpOworICAgIEZsb2F0UmVjdCByZWN0ID0gd2ViVmlldy0+cHJpdi0+Y29yZVBhZ2Ut
PmNocm9tZSgpLT5wYWdlUmVjdCgpOworICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3VtZW50cyA9
IHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+dmlld3Bv
cnRBcmd1bWVudHMoKTsKKyAgICAvLyBUaGUgRGVza3RvcFdpZHRoIGhhcyA5ODAsIGJlY2F1c2Ug
dGhpcyB2YWx1ZSB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBmb3IgZGVz
a3RvcCB1c2VyIGFnZW50cy4KKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21wdXRl
Vmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgOTgwLCBnZGtfc2NyZWVuX2dldF93aWR0aChz
Y3JlZW4pLCBnZGtfc2NyZWVuX2dldF9oZWlnaHQoc2NyZWVuKSwgd2Via2l0X3dlYl92aWV3X2dl
dF9kcGkod2ViVmlldyksIEludFNpemUoc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC53aWR0aCgpKSwg
c3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC5oZWlnaHQoKSkpKTsKKyAgICBQbGF0Zm9ybVJlZlB0cjxX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXM+IHZpZXdwb3J0QXR0cmlidXRlcyhhZG9wdFBsYXRmb3Jt
UmVmKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhhdHRycywgYXJndW1lbnRzLnVzZXJT
Y2FsYWJsZSkpKTsKKworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3Bv
cnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwgdmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKTsgCit9CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZmNiODYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaApAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+Cisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNp
Zm5kZWYgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzX2gKKyNkZWZpbmUgd2Via2l0dmlld3BvcnRh
dHRyaWJ1dGVzX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBF
X1ZJRVdQT1JUX0FUVFJJQlVURVMgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqKSAg
ICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVf
VklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKSkKKyNkZWZpbmUg
V0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRf
QVRUUklCVVRFUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmop
LCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1ZJ
RVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUykpCisjZGVmaW5lIFdFQktJ
VF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dF
VF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlc0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0
QXR0cmlidXRlc1ByaXZhdGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZTsKKworc3Ry
dWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgeworICAgIEdPYmplY3QgcGFyZW50X2luc3Rh
bmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
UHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xh
c3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZv
ciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9p
ZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAo
dm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQgCit3
ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUgICAgICAgICAgICAgICAgKFdlYktp
dFdlYlZpZXcqIHdlYlZpZXcpOyAKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGEzZDZjMjEuLmM5MjcxNDQgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVh
dGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dl
cnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAq
CiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJBYnN0cmFjdERh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0SW1wbC5oIgogI2luY2x1ZGUgIkNh
Y2hlLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgi
CiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1l
bnVDbGllbnRHdGsuaCIKQEAgLTE3Myw2ICsxNzUsNyBAQCBlbnVtIHsKICAgICBHRU9MT0NBVElP
Tl9QT0xJQ1lfREVDSVNJT05fQ0FOQ0VMTEVELAogICAgIE9OTE9BRF9FVkVOVCwKICAgICBGUkFN
RV9DUkVBVEVELAorICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRCwKICAgICBMQVNUX1NJ
R05BTAogfTsKIApAQCAtMTM4OCw3ICsxMzkxLDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0
X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIHJldHVybiBj
b3JlQWNjZXNzaWJsZS0+d3JhcHBlcigpOwogfQogCi1zdGF0aWMgZ2RvdWJsZSB3ZWJWaWV3R2V0
RFBJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitnZG91YmxlIHdlYmtpdF93ZWJfdmlld19nZXRf
ZHBpKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiB7CiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUq
IHByaXYgPSB3ZWJWaWV3LT5wcml2OwogICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5n
cyA9IHByaXYtPndlYlNldHRpbmdzLmdldCgpOwpAQCAtMTQxOSw3ICsxNDIyLDcgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtTY3JlZW4qIHByZXZpb3UKIAogICAgIFdlYktpdFdlYlNldHRpbmdzKiB3ZWJTZXR0aW5ncyA9
IHByaXYtPndlYlNldHRpbmdzLmdldCgpOwogICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGNvcmUo
d2ViVmlldyktPnNldHRpbmdzKCk7Ci0gICAgZ2RvdWJsZSBEUEkgPSB3ZWJWaWV3R2V0RFBJKHdl
YlZpZXcpOworICAgIGdkb3VibGUgRFBJID0gd2Via2l0X3dlYl92aWV3X2dldF9kcGkod2ViVmll
dyk7CiAKICAgICBndWludCBkZWZhdWx0Rm9udFNpemUsIGRlZmF1bHRNb25vc3BhY2VGb250U2l6
ZSwgbWluaW11bUZvbnRTaXplLCBtaW5pbXVtTG9naWNhbEZvbnRTaXplOwogCkBAIC0yNTkyLDYg
KzI1OTUsMjcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJf
RlJBTUUpOwogCiAgICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1
dGVzLWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQg
dGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoK
KyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3
aWxsIGJlIGVtaXR0ZWQgd2l0aCBAdmlld3BvcnRfYXR0cmlidXRlcyAgCisgICAgICogd2hlbiB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcyBhcmUgdXBkYXRlZCBpbiB0aGUgY2FzZSBvZiBsb2FkaW5n
IHdlYiBwYWdlcyBjb250YWluIAorICAgICAqIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBj
YWxsaW5nIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAgICAgKiBAdmll
d3BvcnRfYXR0cmlidXRlcyBpcyB1c2VkIHRvIGNvbnRyb2wgdGhlIHZpZXdwb3J0IGxheW91dCB0
byBtYWtlIGEgd2ViIHBhZ2UgZml0IHRoZSBkZXZpY2Ugc2NyZWVuLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy41CisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbVklFV1BP
UlRfQVRUUklCVVRFU19DSEFOR0VEXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRl
cy1jaGFuZ2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyks
CisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFM
X0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAg
ICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZ
UEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMp
OworCisgICAgLyoKICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCiAg
ICAgICovCiAgICAgd2ViVmlld0NsYXNzLT5jcmVhdGVfd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3Zp
ZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7CkBAIC0zMTI2LDcgKzMxNTAsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfdXBkYXRlX3NldHRpbmdzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
CiAKIHN0YXRpYyBpbmxpbmUgZ2ludCBwaXhlbHNGcm9tU2l6ZShXZWJLaXRXZWJWaWV3KiB3ZWJW
aWV3LCBnaW50IHNpemUpCiB7Ci0gICAgZ2RvdWJsZSBEUEkgPSB3ZWJWaWV3R2V0RFBJKHdlYlZp
ZXcpOworICAgIGdkb3VibGUgRFBJID0gd2Via2l0X3dlYl92aWV3X2dldF9kcGkod2ViVmlldyk7
CiAgICAgcmV0dXJuIHNpemUgLyA3Mi4wICogRFBJOwogfQogCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKaW5kZXggYWIzMzAzZC4uZGJl
ZDIxOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTExLTA2ICBKb29uZSBIdXIgIDxqb29u
ZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBBZGQgc3Vw
cG9ydCBmb3IgdGVzdGluZyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBmb3IgV2ViS2l0R3RrLgor
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAoZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIHRoaXMgSmF2YVNjcmlw
dCBBUEkgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0LgorICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgorICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIHRoaXMgZnVuY3Rpb24g
dG8gdGVzdCB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgIChMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJRdC5jcHA6CisgICAgICAgIChMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcDoKKyAg
ICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBE
aXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4
LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmll
d3BvcnQpOiBEaXR0by4KKwogMjAxMC0xMS0wNCAgTWloYWkgUGFycGFyaXRhICA8bWloYWlwQGNo
cm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGZpeCB0byB3ZWJraXQtcGF0Y2ggcmVi
YXNlbGluZS1zZXJ2ZXIgc28gdGhhdCBpdCBydW5zIHVuZGVyCmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggOTYxOTM4OS4u
ZThiMzQ2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw2ICsxNDEsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZHVt
cENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwg
SlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRp
YyBKU1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoSlNDb250ZXh0UmVmIGNv
bnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXpl
X3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJl
ZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50IDwgMikKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisgICAgZG91YmxlIGF2YWlsYWJs
ZVdpZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9u
KTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJsZSBhdmFpbGFibGVIZWlnaHQg
PSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFdLCBleGNlcHRpb24pOworICAg
IEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJv
bGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2
YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5jb25maWd1cmF0aW9uRm9yVmlld3Bv
cnQoc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVXaWR0aCksIHN0YXRpY19jYXN0PGludD4oYXZh
aWxhYmxlSGVpZ2h0KSk7CisgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxi
YWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RS
ZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJn
dW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJv
bGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNP
YmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTE4OTYsNiArMTkxMyw3IEBAIEpTU3Rh
dGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAg
ICAgICB7ICJkdW1wQmFja0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVt
cENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVS
ZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJk
dW1wQ2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAorICAgICAgICB7ICJkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0IiwgZHVtcENvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydCwga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRE9NQXNXZWJBcmNo
aXZlIiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJl
YWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1
bXBEYXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwgZHVtcEVkaXRpbmdDYWxsYmFj
a3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0
cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggYjYxODYwYi4uM2E4YWQ3OCAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0yODQs
NiArMjg0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNTcGVsbGluZ01hcmtlcihpbnQgZnJv
bSwgaW50IGxlbmd0aCk7CiAKKyAgICB2b2lkIGNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQg
YXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpOworCiAgICAgLy8gVGhlIGZvbGxv
d2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIHBsYXRm
b3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBEUlQgb25jZSB0aGV5
IGV4aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmlu
Z1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcApp
bmRleCBhYjcwYTNlLi4xZGM0NDg3IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVy
VHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQsNiArNCw3
IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KICAqIENvcHlyaWdo
dCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1
ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3
LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogZXh0ZXJuICJDIiB7CiBib29sIHdlYmtpdF93ZWJfZnJh
bWVfcGF1c2VfYW5pbWF0aW9uKFdlYktpdFdlYkZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG5h
bWUsIGRvdWJsZSB0aW1lLCBjb25zdCBnY2hhciogZWxlbWVudCk7CkBAIC04MjgsMyArODMwLDE1
IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCwgaW50
KQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KICAgICByZXR1cm4gZmFsc2U7CiB9CisK
K3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQg
YXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgV2ViS2l0V2ViVmll
dyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFtZSk7Cisg
ICAgQVNTRVJUKHdlYlZpZXcpOworCisgICAgZ2ludCB3aWR0aCwgaGVpZ2h0OworICAgIGdmbG9h
dCBpbml0aWFsU2NhbGUsIG1pbmltdW1TY2FsZSwgbWF4aW11bVNjYWxlOyAKKyAgICBQbGF0Zm9y
bVJlZlB0cjxXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXM+IHZpZXdwb3J0QXR0cmlidXRlcyhhZG9w
dFBsYXRmb3JtUmVmKER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0
cmlidXRlc0ZvclNpemUod2ViVmlldywgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCkp
KTsKKyAgICBnX29iamVjdF9nZXQoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKSwg
IndpZHRoIiwgJndpZHRoLCAiaGVpZ2h0IiwgJmhlaWdodCwgImluaXRpYWwtc2NhbGUtZmFjdG9y
IiwgJmluaXRpYWxTY2FsZSwgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwgJm1pbmltdW1TY2FsZSwg
Im1heGltdW0tc2NhbGUtZmFjdG9yIiwgJm1heGltdW1TY2FsZSwgTlVMTCk7IAorICAgIGZwcmlu
dGYoc3Rkb3V0LCAidmlld3BvcnQgc2l6ZSAlZHglZCBzY2FsZSAlZiB3aXRoIGxpbWl0cyBbJWYs
ICVmXVxuIiwgd2lkdGgsIGhlaWdodCwgaW5pdGlhbFNjYWxlLCBtaW5pbXVtU2NhbGUsIG1heGlt
dW1TY2FsZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
TGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9t
YWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KaW5kZXggNDMxZDRlOS4uNjk2MTk1NSAxMDA2
NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9s
bGVyTWFjLm1tCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0
Q29udHJvbGxlck1hYy5tbQpAQCAtOTUxLDMgKzk1MSw3IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRy
b2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQogewogICAgIHJl
dHVybiBbbWFpbkZyYW1lIGhhc1NwZWxsaW5nTWFya2VyOmZyb20gbGVuZ3RoOmxlbmd0aF07CiB9
Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50
IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworCit9CmRpZmYgLS1naXQg
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVy
V2luLmNwcAppbmRleCAzODZmMTE4Li43YjQxNjY2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCisrKyBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKQEAg
LTE0MDMsMyArMTQwMyw4IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5n
TWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
cmV0dXJuIHJldDsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlv
bkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sK
KyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCmluZGV4IDMy
NjE0YzEuLjBkYjU2YjggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4
L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCkBAIC01MTEsNiArNTExLDExIEBAIGJv
b2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCwgaW50KQogICAg
IHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJh
dGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkK
K3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisKIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVm
PiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3BlcnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5
TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudAo=
</data>
<flag name="review"
          id="63576"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73466</attachid>
            <date>2010-11-10 00:45:27 -0800</date>
            <delta_ts>2010-11-19 09:54:41 -0800</delta_ts>
            <desc>viewport patch with example code</desc>
            <filename>viewport_test.diff</filename>
            <type>text/plain</type>
            <size>39206</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBhNWUyMzUwLi5jMDJiMzM1
IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMTEtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdw
b3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00NTQ0MworCisgICAgICAgIEFkZGVkIGEgbmV3IGdvYmplY3QgdHlwZSB0byBnZXQgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCAK
KwogMjAxMC0xMS0wNCAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9HTlVtYWtlZmls
ZS5hbSBiL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQwNTY5Y2QuLmRiOTM1ZGEgMTAwNjQ0Ci0tLSBh
L0dOVW1ha2VmaWxlLmFtCisrKyBiL0dOVW1ha2VmaWxlLmFtCkBAIC0zMTksNiArMzE5LDcgQEAg
d2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYmRhdGFzb3VyY2UuaCBcCkBAIC0zODEsNiArMzgyLDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMg
Kz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAg
XAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwIFwKIAlXZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFkYTBhMDUuLjI1Y2JhMDAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0xMS0wNiAgSm9vbmUgSHVyICA8am9vbmVAa2xk
cC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
W0dUS10gU3VwcG9ydCBmb3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgSW5jbHVkZWQgdmll
d3BvcnQgdGVzdCBjYXNlcyBmb3IgV2ViS2l0R3RrCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsv
U2tpcHBlZDogVW5za2lwIGZhc3Qvdmlld3BvcnQgZXhjZXB0IHZpZXdwb3J0LTQ1Lmh0bWwuCisK
IDIwMTAtMTEtMDQgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4
IGRkZTNmMGQuLjBkZDJkYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NjE0LDcg
KzU2MTQsOCBAQCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9p
bnRJblBhdGguZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92
aWV3cG9ydAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEK
K2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVp
cmtzIG9ubHkgYXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUt
aHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDZiMzMxMDguLmYxZWQyOTAgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTAtMTEtMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBv
cnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBn
b2JqZWN0IHRvIG9mZmVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgor
ICAgICAgICBJdCBpcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUg
c2l6ZSwgaW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlv
biBhYm91dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0
aGUgdmlld3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVj
ZWQgYnkgU2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAg
ICAgICB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVu
Y2UgbGlicmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJp
L2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJp
aHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0OjpDaHJvbWVDbGllbnQ6OmRp
c3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKTogQWRkZWQgdGhpcyBjYWxsYmFjayB0byBrbm93
IHdoZXRoZXIgdGhlIHZpZXdwb3J0IGFyZ3VtZW50cyBpcyBhdmFpbGFibGUuCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBv
cnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcDoKKyAgICAgICAgKER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUpOiBBZGRlZCB0aGlz
IGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aXRoIHRo
ZSBnaXZlbiBhdmFpbGFibGVXaWR0aCBhbmQgYXZhaWxhYmxlSGVpZ3RoLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAq
IHdlYmtpdC93ZWJraXRwcml2YXRlLmg6IEFkZGVkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X25ldyBhcyBhIHByaXZhdGUgZnVuY3Rpb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdw
b3J0YXR0cmlidXRlcy5jcHA6IEFkZGVkIGZ1bmN0aW9ucyB0byBnZXQgZWFjaCB2YWx1ZSBvZiB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzX2NsYXNzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfaW5p
dCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkpOgor
ICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KToKKyAgICAgICAgKHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSk6IFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2
aWV3cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5n
ZWQgc2lnbmFsLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDog
QWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Vi
a2l0X3dlYl92aWV3X2dldF9kcGkpOiBSZW5hbWUgd2ViVmlld0dldERQSSB0byB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2RwaSBhbmQgbWFrZSBpdCBhIHByaXZhdGUgZnVuY3Rpb24uIAorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X3NjcmVlbl9jaGFuZ2VkKTogUmVuYW1lIHdlYlZpZXdHZXREUEkgdG8g
d2Via2l0X3dlYl92aWV3X2dldF9kcGkuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdCk6IFN1cHBvcnQgZm9yIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFs
LgorICAgICAgICAocGl4ZWxzRnJvbVNpemUpOiBSZW5hbWUgd2ViVmlld0dldERQSSB0byB3ZWJr
aXRfd2ViX3ZpZXdfZ2V0X2RwaS4KKwogMjAxMC0xMS0wMyAgRGFuaWVsIEJhdGVzICA8ZGJhdGVz
QHJpbS5jb20+CiAKICAgICAgICAgRm9yIHVubmFtZWQgZnJhbWVzLCB3aW5kb3cubmFtZSByZXR1
cm5zIGEgZ2VuZXJhdGVkIG5hbWUKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21l
Q2xpZW50R3RrLmNwcAppbmRleCBlODY0ZWE3Li4zY2M3NGZlIDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3RrLmgiCiAKKyNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRHVtcFJlbmRlclRy
ZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgpAQCAtNjA3LDYgKzYwOCwx
MiBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxX
VEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNob29zZXItPmljb25Mb2FkZWQoSWNv
bjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCit2b2lkIENocm9tZUNsaWVu
dDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmlld3BvcnRBcmd1bWVudHMm
IGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXM+IHZpZXdwb3J0QXR0cmlidXRlcyhhZG9wdFBsYXRmb3JtUmVmKHdlYmtpdF92aWV3
cG9ydF9hdHRyaWJ1dGVzX25ldyhtX3dlYlZpZXcpKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fd2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIHZpZXdwb3J0QXR0
cmlidXRlcy5nZXQoKSk7IAorfQorCiB2b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IDg3ZjFkYWIuLjlhYzAzOTkgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAtMTA5LDYgKzEwOSw4
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlw
KGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CiAKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAg
ICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNv
bnN0IFdURjo6U3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggODI5NjIwNi4uZTc0ZWVkZSAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRH
dGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBw
b3J0R3RrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSBSZXNlYXJj
aCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwpAQCAtMTksNyArMjAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkR1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogCi0jaW5jbHVkZSAid2Via2l0d2Vidmlldy5oIgog
I2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CkBA
IC01NCwzICs1NCwxNCBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6bGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbigpCiAgICAgcmV0dXJuIHNfbGlua3NJbmNsdWRlZEluVGFiQ2hhaW47
CiB9CiAKKy8vIEZvciB0ZXN0aW5nIGZhc3Qvdmlld3BvcnQuCit2b2lkIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUoV2ViS2l0V2ViVmll
dyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWlnaHQpCit7
CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisg
ICAgVmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJpdi0+Y29yZVBhZ2Ut
Pm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOworICAgIC8vIGRl
c2t0b3BXaWR0aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAsIGRldmljZUhlaWdodCA9IDQ4MCwg
ZGV2aWNlRFBJID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJzID0gY29tcHV0ZVZp
ZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIwLCA0ODAsIDE2MCwgSW50U2l6ZShh
dmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwg
InZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVmLCAlZl1cbiIsIGF0
dHJzLmxheW91dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0U2l6ZS5oZWlnaHQoKSwgYXR0cnMu
aW5pdGlhbFNjYWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0dHJzLm1heGltdW1TY2FsZSk7Cit9
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGsuaAppbmRleCA1YjQ5NGZmLi5kY2UzMTU1IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTE5LDYgKzE5LDgg
QEAKICNpZm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKICNkZWZpbmUgRHVtcFJlbmRl
clRyZWVTdXBwb3J0R3RrX2gKIAorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CisK
IGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ayB7CiAKIHB1YmxpYzoKQEAgLTMwLDYgKzMy
LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXND
aGFpbihib29sKTsKICAgICBzdGF0aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7
CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUoV2ViS2l0
V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWln
aHQpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNfZHJ0UnVuOwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApp
bmRleCBmYzcxYzJjLi4yNDI4ZjYyIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0c291cGF1
dGhkaWFsb2cuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg+
CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2Vic2V0dGluZ3Mu
aD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaCBiL1dlYktp
dC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMDZhM2JmLi4zOTljYjRjIDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKKysrIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC05Miw2ICs5Miw5IEBAIHR5cGVkZWYgc3RydWN0
IF9XZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3MgV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzOwogdHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24gV2ViS2l0R2VvbG9j
YXRpb25Qb2xpY3lEZWNpc2lvbjsKIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBv
bGljeURlY2lzaW9uQ2xhc3MgV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbkNsYXNzOwog
Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFz
cyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzczsKKwogR19FTkRfREVDTFMKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggYi9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggM2FjMzU2My4uMWJkNGRkZCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRoaXR0ZXN0cmVzdWx0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KQEAgLTYzLDYgKzY0LDcgQEAKICNpbmNs
dWRlICJSZXNvdXJjZUhhbmRsZS5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgogI2lu
Y2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlICJWaWV3cG9ydEFyZ3VtZW50cy5o
IgogI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4u
aCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAtMzI2LDYgKzMyOCw5IEBAIGV4dGVybiAiQyIg
ewogICAgIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb24qCiAgICAgd2Via2l0X2dlb2xv
Y2F0aW9uX3BvbGljeV9kZWNpc2lvbl9uZXcoV2ViS2l0V2ViRnJhbWUqLCBXZWJDb3JlOjpHZW9s
b2NhdGlvbiopOwogCisgICAgZ2RvdWJsZSAKKyAgICB3ZWJWaWV3R2V0RFBJKFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpOworCiAgICAgLy8gRklYTUU6IG1vdmUgdGhpcyB0byB3ZWJraXRuZXR3b3Jr
cmVxdWVzdC5oIG9uY2UgdGhlIEFQSSBpcyBhZ3JlZWQgdXBvbi4KICAgICBXRUJLSVRfQVBJIFNv
dXBNZXNzYWdlKgogICAgIHdlYmtpdF9uZXR3b3JrX3JlcXVlc3RfZ2V0X21lc3NhZ2UoV2ViS2l0
TmV0d29ya1JlcXVlc3QqIHJlcXVlc3QpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZGI1N2RjYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdw
b3J0YXR0cmlidXRlcy5jcHAKQEAgLTAsMCArMSwyOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIndlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgi
CisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIu
aD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHZpZXdwb3J0YXR0cmlidXRlcworICogQHNob3J0
X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIG9mIGEgd2Vi
IHBhZ2UKKyAqIEBzZWVfYWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMt
Y2hhbmdlZAorICoKKyAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgb2ZmZXJzIHRoZSB2aWV3
cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzIHRvIAorICogY29udHJvbCB0aGUgdmlld3Bv
cnQgbGF5b3V0LiBJdCBjb250YWlucyB0aGUgc2l6ZSwgaW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0
cywgCisgKiBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBhIHVzZXIgaXMgYWJsZSB0byBz
Y2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICogVGhpcyBtYWtlcyBhIHdlYiBw
YWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAqIAorICogWW91IG5lZWQgdG8gY2FsbCAjd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlIHRvIGdldCB0aGUgb3B0aW1hbCAKKyAq
IHZpZXdwb3J0IGF0dHJpYnV0ZXMgd2hlbiB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9y
dCBpcyBjaGFuZ2VkLgorICogCisgKiAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRl
cy1jaGFuZ2VkIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2l0aCAKKyAqIHRoZSAjV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzIHdoZW4geW91IGNhbGwgI3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X3JlY29tcHV0ZS4KKyAqCisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmlld3BvcnQg
cHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFyeSBhdAorICog
aHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9h
cHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFn
cy5odG1sCisgKgorICogPGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rpbmc+CisgKiAvPCEt
LSAtLT4qIENvbm5lY3QgdG8gdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlcyBzaWduYWwg
KjwhLS0gLS0+LworICogZ19zaWduYWxfY29ubmVjdCAod2ViVmlldywgInZpZXdwb3J0LWF0dHJp
YnV0ZXMtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHZpZXdwb3J0X2NoYW5nZV9jYiksIHdlYlZpZXcp
OworICoKKyAqIC88IS0tIC0tPiogSGFuZGxlIHRoZSBzaWduYWwgdG8gZ2V0IHRoZSBpbml0aWFs
IHNjYWxlIHZhbHVlICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkCisgKiB2aWV3cG9ydF9jaGFu
Z2VfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2
aWV3cG9ydEF0dHJpYnV0ZXMpCisgKiB7CisgKiAgICAgZ2Zsb2F0IGluaXRpYWxTY2FsZTsgCisg
KiAgICAgZ19vYmplY3RfZ2V0KEdfT0JKRUNUKHZpZXdwb3J0QXR0cmlidXRlcyksICJpbml0aWFs
LXNjYWxlLWZhY3RvciIsICZpbml0aWFsU2NhbGUsIE5VTEwpOworICogICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfZnVsbF9jb250ZW50X3pvb20od2ViVmlldywgVFJVRSk7CisgKiAgICAgd2Via2l0
X3dlYl92aWV3X3NldF96b29tX2xldmVsKHdlYlZpZXcsIGluaXRpYWxTY2FsZSk7CisgKiB9Cisg
KiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICovCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSB7CisgICAgUFJP
UF8wLAorCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0lOSVRJ
QUxfU0NBTEVfRkFDVE9SLAorICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgUFJP
UF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAg
ICBQUk9QX1VTRVJfU0NBTEFCTEUsCit9OworCitHX0RFRklORV9UWVBFKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcywgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMsIEdfVFlQRV9PQkpFQ1QpOwor
CitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgeworICAgIGdpbnQgd2lk
dGg7CisgICAgZ2ludCBoZWlnaHQ7CisgICAgZ2Zsb2F0IGluaXRpYWxTY2FsZUZhY3RvcjsKKyAg
ICBnZmxvYXQgbWluaW11bVNjYWxlRmFjdG9yOworICAgIGdmbG9hdCBtYXhpbXVtU2NhbGVGYWN0
b3I7CisgICAgZ2Zsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgZ2Jvb2xlYW4gdXNlclNjYWxh
YmxlOworfTsKKworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFU
RShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBF
X1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUpKQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYyk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNzX2lu
aXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MqIGtjbGFzcykKK3sKKyAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtjbGFzcyk7CisgICAgZ29iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJv
cGVydHk7CisKKyAgICBHUGFyYW1GbGFncyBmbGFncyA9IChHUGFyYW1GbGFncykoV0VCS0lUX1BB
UkFNX1JFQURBQkxFKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRz
OndpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3Rh
bGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lk
dGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiV2lkdGgiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgdmll
d3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmhl
aWdodDoKKyAgICAgKgorICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LgorICAgICAq
CisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdf
cGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVp
Z2h0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkhlaWdodCIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUg
dmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRz
OmluaXRpYWwtc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhlIGluaXRpYWwgc2NhbGUg
b2YgdGhlIHZpZXdwb3J0LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9SLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwtc2NhbGUtZmFjdG9y
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkluaXRpYWwgU2NhbGUg
RmFjdG9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaW5p
dGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFY
RkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAgICAvKioKKyAgICAgKiBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0czptaW5pbXVtLXNjYWxlLWZhY3RvcjoKKyAgICAgKgorICAg
ICAqIFRoZSBtaW5pbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9N
SU5JTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJtaW5pbXVtLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJNaW5pbXVtIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykp
OworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWF4aW11bS1zY2Fs
ZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3Bv
cnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0b3IiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWF4aW11bSBTY2FsZSBGYWN0b3IiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVtIHNjYWxlIG9m
IHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRzOmRldmljZS1waXhlbC1yYXRpbzoKKyAgICAgKgorICAgICAqIFRoZSBkZXZpY2Ug
cGl4ZWwgcmF0aW8gb2YgdGhlIHZpZXdwb3J0LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41
CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xh
c3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFVklDRV9QSVhF
TF9SQVRJTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2UtcGl4
ZWwtcmF0aW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNl
IFBpeGVsIFJhdGlvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0x
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp1c2VyLXNjYWxhYmxlOgorICAgICAqCisg
ICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQg
b3V0LgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX1VTRVJfU0NBTEFCTEUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oInVzZXItc2NhbGFibGUiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIlVzZXIgU2NhbGFibGUiKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIHVzZXIg
Y2FuIHpvb20gaW4gYW5kIG91dC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncykpOwor
CisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtjbGFzcywgc2l6ZW9mKFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlc1ByaXZhdGUpKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfaW5pdChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0KQorewor
ICAgIHZpZXdwb3J0LT5wcml2ID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZB
VEUodmlld3BvcnQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZh
bHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMq
IHZpZXdwb3J0QXR0cmlidXRlcyA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKG9iamVjdCk7
CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IFdFQktJVF9WSUVX
UE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKHZpZXdwb3J0QXR0cmlidXRlcyk7CisKKyAgICBz
d2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFsdWVf
c2V0X2ludCh2YWx1ZSwgcHJpdi0+d2lkdGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmhlaWdodCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPmluaXRpYWxTY2FsZUZhY3Rvcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU5JTVVNX1NDQUxFX0ZBQ1RPUjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1pbmltdW1TY2FsZUZhY3Rvcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUjoKKyAg
ICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1heGltdW1TY2FsZUZhY3Rvcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU86CisgICAg
ICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT5kZXZpY2VQaXhlbFJhdGlvKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRVJfU0NBTEFCTEU6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnVzZXJTY2FsYWJsZSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCisv
KioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldzoKKyAqIEB2aWV3cG9ydEF0dHJp
YnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICoKKyAqIENyZWF0ZSBhIG5ldyBp
bnN0YW5jZSBvZiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdpdGggdGhlIGNvbXB1dGVkIHZp
ZXdwb3J0IGF0dHJpYnV0ZXMgdW5kZXIgdGhlIGN1cnJlbnQgdmlld3BvcnQgY29uZmlndXJhdGlv
bi4gCisgKiBJZiB0aGUgdmlld3BvcnQgY29uZmlndXJhdGlvbiBoYXMgY2hhbmdlZCwgaXQgbmVl
ZHMgdG8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mICNXZWJLaXRWaWV3cG9ydEF0dGlidXRlLgorICoK
KyAqIFNpbmNlOiAxLjMuNQorICovCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF92
aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJRVdQ
T1JUX0FUVFJJQlVURVMoZ19vYmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVU
RVMsIE5VTEwpKTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0g
V0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUodmlld3BvcnRBdHRyaWJ1dGVz
KTsKKworICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRfc2NyZWVuKEdUS19X
SURHRVQod2ViVmlldykpOworICAgIEZsb2F0UmVjdCByZWN0ID0gd2ViVmlldy0+cHJpdi0+Y29y
ZVBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpOworICAgIFZpZXdwb3J0QXJndW1lbnRzIGFyZ3Vt
ZW50cyA9IHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1lbnQoKS0+
dmlld3BvcnRBcmd1bWVudHMoKTsKKworICAgIC8vIFRoZSBEZXNrdG9wV2lkdGggaGFzIDk4MCwg
YmVjYXVzZSB0aGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRlc2lnbmVk
IGZvciBkZXNrdG9wIHVzZXIgYWdlbnRzLgorICAgIFZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgZ2RrX3NjcmVl
bl9nZXRfd2lkdGgoc2NyZWVuKSwgZ2RrX3NjcmVlbl9nZXRfaGVpZ2h0KHNjcmVlbiksIHdlYlZp
ZXdHZXREUEkod2ViVmlldyksIEludFNpemUoc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC53aWR0aCgp
KSwgc3RhdGljX2Nhc3Q8Z2ludD4ocmVjdC5oZWlnaHQoKSkpKTsKKworICAgIHByaXYtPndpZHRo
ID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0
cmlidXRlcy5sYXlvdXRTaXplLmhlaWdodCgpOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworICAgIHByaXYtPmRldmljZVBpeGVsUmF0aW8g
PSBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+dXNlclNjYWxhYmxlID0g
YXJndW1lbnRzLnVzZXJTY2FsYWJsZTsKKworICAgIHJldHVybiB2aWV3cG9ydEF0dHJpYnV0ZXM7
Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MmFlMDEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaApAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5v
cmc+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpZm5kZWYgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzX2gKKyNkZWZpbmUgd2Via2l0dmll
d3BvcnRhdHRyaWJ1dGVzX2gKKworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8
d2Via2l0L3dlYmtpdGRlZmluZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJ
VF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfZ2V0X3R5cGUoKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMo
b2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKSkKKyNk
ZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVf
Q0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRF
UywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklF
V1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBF
KChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lU
X0lTX1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1Nf
VFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUykpCisjZGVmaW5l
IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RB
TkNFX0dFVF9DTEFTUygob2JqKSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZTsK
Kworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgeworICAgIEdPYmplY3QgcGFyZW50
X2luc3RhbmNlOworCisgICAgLyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSAqcHJpdjsKK307CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzQ2xhc3MgeworICAgIEdPYmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRk
aW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQw
KSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQzKSAodm9pZCk7Cit9OworCitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19nZXRfdHlwZSAgICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyhX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGEzZDZjMjEuLjRkZjBkMDcgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBD
cmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQ
b3dlcnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4K
ICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQ0LDYgKzQ1LDcgQEAKICNpbmNsdWRlICJBYnN0cmFj
dERhdGFiYXNlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0SW1wbC5oIgogI2luY2x1ZGUg
IkNhY2hlLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50R3Rr
LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCiAjaW5jbHVkZSAiQ29udGV4
dE1lbnVDbGllbnRHdGsuaCIKQEAgLTE3Myw2ICsxNzUsNyBAQCBlbnVtIHsKICAgICBHRU9MT0NB
VElPTl9QT0xJQ1lfREVDSVNJT05fQ0FOQ0VMTEVELAogICAgIE9OTE9BRF9FVkVOVCwKICAgICBG
UkFNRV9DUkVBVEVELAorICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRCwKICAgICBMQVNU
X1NJR05BTAogfTsKIApAQCAtMTM4OCw3ICsxMzkxLDcgQEAgc3RhdGljIEF0a09iamVjdCogd2Vi
a2l0X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKEd0a1dpZGdldCogd2lkZ2V0KQogICAgIHJldHVy
biBjb3JlQWNjZXNzaWJsZS0+d3JhcHBlcigpOwogfQogCi1zdGF0aWMgZ2RvdWJsZSB3ZWJWaWV3
R2V0RFBJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitnZG91YmxlIHdlYlZpZXdHZXREUEkoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXZWJLaXRXZWJWaWV3UHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXctPnByaXY7CiAgICAgV2ViS2l0V2ViU2V0dGluZ3MqIHdlYlNldHRpbmdzID0gcHJp
di0+d2ViU2V0dGluZ3MuZ2V0KCk7CkBAIC0yNTkyLDYgKzI1OTUsMjcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xh
c3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJBTUUpOwogCiAgICAgLyoKKyAgICAg
KiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQKKyAgICAgKiBAd2Vi
X3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3
cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMg
dGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZp
ZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2l0aCBAdmll
d3BvcnRfYXR0cmlidXRlcyAgCisgICAgICogd2hlbiB0aGUgdmlld3BvcnQgYXR0cmlidXRlcyBh
cmUgdXBkYXRlZCBpbiB0aGUgY2FzZSBvZiBsb2FkaW5nIHdlYiBwYWdlcyBjb250YWluIAorICAg
ICAqIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlcyBpcyB1c2Vk
IHRvIGNvbnRyb2wgdGhlIHZpZXdwb3J0IGxheW91dCB0byBtYWtlIGEgd2ViIHBhZ2UgZml0IHRo
ZSBkZXZpY2Ugc2NyZWVuLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisg
ICAgd2Via2l0X3dlYl92aWV3X3NpZ25hbHNbVklFV1BPUlRfQVRUUklCVVRFU19DSEFOR0VEXSA9
IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwKKyAgICAgICAgICAg
IEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZs
YWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAw
LAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hh
bF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAg
IFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisgICAgLyoKICAgICAgKiBpbXBs
ZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCiAgICAgICovCiAgICAgd2ViVmlld0NsYXNz
LT5jcmVhdGVfd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jcmVhdGVfd2ViX3ZpZXc7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKaW5kZXggYWIzMzAzZC4uZGJlZDIxOCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTEx
LTA2ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRh
IHRhZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0
NDMKKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGVzdGluZyB0aGUgdmlld3BvcnQgcHJvcGVy
dGllcyBmb3IgV2ViS2l0R3RrLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuY3BwOgorICAgICAgICAoZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6
IEFkZGVkIHRoaXMgSmF2YVNjcmlwdCBBUEkgdG8gc2V0IHRoZSBzaXplIG9mIHRoZSB2aXNpYmxl
IHZpZXdwb3J0LgorICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9u
cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwOgor
ICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6
IEFkZGVkIHRoaXMgZnVuY3Rpb24gdG8gdGVzdCB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06Cisg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTog
RGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvcXQvTGF5b3V0VGVzdENvbnRyb2xsZXJR
dC5jcHA6CisgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZp
ZXdwb3J0KTogRGl0dG8uCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RD
b250cm9sbGVyV2luLmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpjb25maWd1
cmF0aW9uRm9yVmlld3BvcnQpOiBEaXR0by4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9M
YXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVy
Ojpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBEaXR0by4KKwogMjAxMC0xMS0wNCAgTWloYWkg
UGFycGFyaXRhICA8bWloYWlwQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkIGZp
eCB0byB3ZWJraXQtcGF0Y2ggcmViYXNlbGluZS1zZXJ2ZXIgc28gdGhhdCBpdCBydW5zIHVuZGVy
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAKaW5kZXggOTYxOTM4OS4uZThiMzQ2ZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8q
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5v
cmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw2ICsxNDEsMjIgQEAg
c3RhdGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjayhK
U0NvbnRleHRSZWYgY29udGV4dCwgSlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0aW9uRm9yVmll
d3BvcnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVj
dFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBh
cmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENv
dW50IDwgMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwor
CisgICAgZG91YmxlIGF2YWlsYWJsZVdpZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFy
Z3VtZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRv
dWJsZSBhdmFpbGFibGVIZWlnaHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRz
WzFdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRU
ZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9s
bGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5j
b25maWd1cmF0aW9uRm9yVmlld3BvcnQoc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVXaWR0aCks
IHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlSGVpZ2h0KSk7CisgICAKKyAgICByZXR1cm4gSlNW
YWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBE
YXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91
dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTE4
OTYsNiArMTkxMyw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpz
dGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJkdW1wQmFja0ZvcndhcmRMaXN0IiwgZHVtcEJh
Y2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1l
U2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFt
ZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3Bl
cnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0IiwgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCwga0pTUHJvcGVydHlBdHRy
aWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAg
ICB7ICJkdW1wRE9NQXNXZWJBcmNoaXZlIiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCiAgICAgICAgIHsgImR1bXBEYXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNh
bGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVy
dHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tz
IiwgZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvV2Vi
S2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggYjYxODYwYi4u
M2E4YWQ3OCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oCkBAIC0yODQsNiArMjg0LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNT
cGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCk7CiAKKyAgICB2b2lkIGNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQp
OworCiAgICAgLy8gVGhlIGZvbGxvd2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2Jh
Ymx5IGJlIG1vdmVkIHRvIHBsYXRmb3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0
c2lkZSBvZiBEUlQgb25jZSB0aGV5IGV4aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0Rh
dGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENv
bnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRl
c3RDb250cm9sbGVyR3RrLmNwcAppbmRleCBhYjcwYTNlLi4xNjk4N2M2IDEwMDY0NAotLS0gYS9X
ZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3Bw
CisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJp
Z2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093
blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogZXh0ZXJuICJDIiB7
CiBib29sIHdlYmtpdF93ZWJfZnJhbWVfcGF1c2VfYW5pbWF0aW9uKFdlYktpdFdlYkZyYW1lKiBm
cmFtZSwgY29uc3QgZ2NoYXIqIG5hbWUsIGRvdWJsZSB0aW1lLCBjb25zdCBnY2hhciogZWxlbWVu
dCk7CkBAIC04MjgsMyArODMwLDEwIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1Nw
ZWxsaW5nTWFya2VyKGludCwgaW50KQogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQp
Cit7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dl
Yl92aWV3KG1haW5GcmFtZSk7CisgICAgQVNTRVJUKHdlYlZpZXcpOworICAgIER1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUod2ViVmlldywg
YXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0gYi9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KaW5k
ZXggNDMxZDRlOS4uNjk2MTk1NSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQpAQCAtOTUxLDMgKzk1MSw3
IEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9t
LCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiBbbWFpbkZyYW1lIGhhc1NwZWxsaW5nTWFya2Vy
OmZyb20gbGVuZ3RoOmxlbmd0aF07CiB9Cit2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpjb25m
aWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRoLCBpbnQgYXZhaWxhYmxlSGVp
Z2h0KQoreworCit9CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
TGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAppbmRleCAzODZmMTE4Li43YjQxNjY2IDEw
MDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRy
b2xsZXJXaW4uY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAKQEAgLTE0MDMsMyArMTQwMyw4IEBAIGJvb2wgTGF5b3V0VGVz
dENvbnRyb2xsZXI6Omhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJuIHJldDsKIH0KKwordm9pZCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwg
aW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCit9
CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29u
dHJvbGxlcld4LmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RD
b250cm9sbGVyV3guY3BwCmluZGV4IDMyNjE0YzEuLjBkYjU2YjggMTAwNjQ0Ci0tLSBhL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3BwCisrKyBi
L1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRlc3RDb250cm9sbGVyV3guY3Bw
CkBAIC01MTEsNiArNTExLDExIEBAIGJvb2wgTGF5b3V0VGVzdENvbnRyb2xsZXI6Omhhc1NwZWxs
aW5nTWFya2VyKGludCwgaW50KQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0
aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50Cit9CisK
IEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBMYXlvdXRUZXN0Q29udHJvbGxlcjo6cGFnZVByb3Bl
cnR5KGNvbnN0IGNoYXIqIHByb3BlcnR5TmFtZSwgaW50IHBhZ2VOdW1iZXIpIGNvbnN0CiB7CiAg
ICAgLy8gRklYTUU6IEltcGxlbWVudApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNo
ZXIvbWFpbi5jIGIvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCmluZGV4IDRhYmVlMDgu
LmE5ZTQ5OTAgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYworKysg
Yi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKQEAgLTEyOSw2ICsxMjksNDEgQEAgY2xv
c2Vfd2ViX3ZpZXdfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBHdGtXaWRnZXQqIHdpbmRv
dykKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQKK3ZpZXdwb3J0X2NoYW5nZV9j
YihXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3
cG9ydEF0dHJpYnV0ZXMpCit7CisgICAgcHJpbnRmKCIlc1xuIiwgX19mdW5jX18pOworICAgIGdp
bnQgd2lkdGgsIGhlaWdodDsKKyAgICBnZmxvYXQgaW5pdGlhbFNjYWxlLCBtaW5pbXVtU2NhbGUs
IG1heGltdW1TY2FsZSwgZGV2aWNlUGl4ZWxSYXRpbzsgCisgICAgZ2Jvb2xlYW4gdXNlclNjYWxh
YmxlOworICAgIGdfb2JqZWN0X2dldChHX09CSkVDVCh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAid2lk
dGgiLCAmd2lkdGgsICJoZWlnaHQiLCAmaGVpZ2h0LCAKKyAgICAgICAgICAgICAgICAiaW5pdGlh
bC1zY2FsZS1mYWN0b3IiLCAmaW5pdGlhbFNjYWxlLCAibWluaW11bS1zY2FsZS1mYWN0b3IiLCAm
bWluaW11bVNjYWxlLCAKKyAgICAgICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0b3IiLCAm
bWF4aW11bVNjYWxlLCAiZGV2aWNlLXBpeGVsLXJhdGlvIiwgJmRldmljZVBpeGVsUmF0aW8sIAor
ICAgICAgICAgICAgICAgICJ1c2VyLXNjYWxhYmxlIiwgJnVzZXJTY2FsYWJsZSwgTlVMTCk7IAor
ICAgIHByaW50ZigidyxoKCVkLCVkKSBpbml0LG1pbixtYXgoJWYsJWYsJWYpIHNjYWxhYmxlLCBk
ZXZpY2UgcGl4ZWwgcmF0aW8oJWQsJWYpIFxuIiwgCisgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0
LCBpbml0aWFsU2NhbGUsIG1pbmltdW1TY2FsZSwgbWF4aW11bVNjYWxlLCB1c2VyU2NhbGFibGUs
IGRldmljZVBpeGVsUmF0aW8pOyAKKworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfZnVsbF9jb250
ZW50X3pvb20od2ViX3ZpZXcsIFRSVUUpOworICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9s
ZXZlbCh3ZWJfdmlldywgaW5pdGlhbFNjYWxlKTsKK30KKworc3RhdGljIGludCB3aW5kb3dfd2lk
dGggPSAwOworc3RhdGljIHZvaWQKK3dpbmRvd19zaXplX2NoYW5nZV9jYihXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldywgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbiwgZ3BvaW50ZXIgdXNlcl9kYXRh
KQoreworICAgIGlmICh3aW5kb3dfd2lkdGggIT0gYWxsb2NhdGlvbi0+d2lkdGgpIHsKKyAgICAg
IGdmbG9hdCBpbml0aWFsU2NhbGU7CisgICAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZp
ZXdwb3J0QXR0cmlidXRlcyA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX25ldyh3ZWJfdmll
dyk7CisgICAgICBnX29iamVjdF9nZXQoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzKSwgImlu
aXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVMTCk7CisgICAgICBwcmludGYo
IiVzIGluaXRpYWwgc2NhbGUgPSAlZlxuIiwgX19mdW5jX18sIGluaXRpYWxTY2FsZSk7CisgICAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2V0X2Z1bGxfY29udGVudF96b29tKHdlYl92aWV3LCBUUlVFKTsK
KyAgICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCh3ZWJfdmlldywgaW5pdGlhbFNj
YWxlKTsKKworICAgICAgZ19vYmplY3RfdW5yZWYodmlld3BvcnRBdHRyaWJ1dGVzKTsKKyAgIH0K
KyAgICB3aW5kb3dfd2lkdGggPSBhbGxvY2F0aW9uLT53aWR0aDsKK30KKwogc3RhdGljIEd0a1dp
ZGdldCoKIGNyZWF0ZV9icm93c2VyIChHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlf
ZW50cnksIEd0a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldykKIHsK
QEAgLTE0NCw2ICsxNzksOCBAQCBjcmVhdGVfYnJvd3NlciAoR3RrV2lkZ2V0KiB3aW5kb3csIEd0
a1dpZGdldCogdXJpX2VudHJ5LCBHdGtXaWRnZXQqIHN0YXR1c2JhciwgVwogICAgIGdfc2lnbmFs
X2Nvbm5lY3QgKHdlYl92aWV3LCAiY3JlYXRlLXdlYi12aWV3IiwgR19DQUxMQkFDSyAoY3JlYXRl
X3dlYl92aWV3X2NiKSwgd2luZG93KTsKICAgICBnX3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywg
IndlYi12aWV3LXJlYWR5IiwgR19DQUxMQkFDSyAod2ViX3ZpZXdfcmVhZHlfY2IpLCB3aW5kb3cp
OwogICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAiY2xvc2Utd2ViLXZpZXciLCBHX0NB
TExCQUNLIChjbG9zZV93ZWJfdmlld19jYiksIHdpbmRvdyk7CisgICAgZ19zaWduYWxfY29ubmVj
dCAod2ViX3ZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQiLCBHX0NBTExCQUNLICh2
aWV3cG9ydF9jaGFuZ2VfY2IpLCB3ZWJfdmlldyk7CisgICAgZ19zaWduYWxfY29ubmVjdCAod2Vi
X3ZpZXcsICJzaXplLWFsbG9jYXRlIiwgR19DQUxMQkFDSyh3aW5kb3dfc2l6ZV9jaGFuZ2VfY2Ip
LCB3ZWJfdmlldyk7CiAKICAgICByZXR1cm4gc2Nyb2xsZWRfd2luZG93OwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73751</attachid>
            <date>2010-11-12 09:34:59 -0800</date>
            <delta_ts>2010-11-12 09:37:04 -0800</delta_ts>
            <desc>proposed API</desc>
            <filename>0001-Proposed-API.patch</filename>
            <type>text/plain</type>
            <size>49673</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBlZmI4OTAzZjBmZTMxMjEwMmZkNjM4ZmQwMjc4ZTg0Y2YwOWZlYzhhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CkRhdGU6IEZyaSwgMTIgTm92IDIwMTAgMTU6MjA6NDkgLTAyMDAKU3ViamVjdDogW1BBVENIXSBQ
cm9wb3NlZCBBUEkKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDExICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgMiArCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCAgICAgIHwgICAgNyArCiBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oICAgICAgICB8ICAgIDIgKwogLi4uL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgICAgfCAgIDEzICstCiAuLi4v
Z3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oICB8ICAgIDMgKwog
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgfCAgICA2
ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgICAg
ICB8ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAgICAg
ICAgICAgfCAgIDI0ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5jcHAgICAgIHwgIDQ2MSArKysrKysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggICAgICAgfCAgIDY1ICsrKwogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrLQogV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oICAgICAgICAgICAgICAgICAgfCAgICAzICsK
IFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYyAgICAgICAgICAgICAgICAgICAgIHwgICA2
OSArKystCiAxOCBmaWxlcyBjaGFuZ2VkLCA4MjIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
dmlld3BvcnRhdHRyaWJ1dGVzLmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggNzg2NzBmZS4uOGJjODU1ZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTExICBKb29uZSBIdXIgIDxqb29uZUBrbGRw
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
R1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBBZGRlZCBhIG5ldyBn
b2JqZWN0IHR5cGUgdG8gZ2V0IHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIHdlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5jcHAgCisKIDIwMTAtMTEtMTAgIENzYWJhIE9zenRyb2dvbsOhYyAg
PG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlm
ZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNDA1NjljZC4u
ZGI5MzVkYSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0K
QEAgLTMxOSw2ICszMTksNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwKQEAgLTM4MSw2ICszODIsNyBA
QCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0
ZS5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNv
dXJjZS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggN2NmYmRjOC4uMzBhMDZjMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTExICBK
b29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKwor
ICAgICAgICBJbmNsdWRlZCB2aWV3cG9ydCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQg
dmlld3BvcnQtNDUuaHRtbC4KKwogMjAxMC0xMS0xMSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2tpcCBhIG5ld2x5LWNyYXNoaW5nIHRlc3Qgb24gV2luZG93cwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5OTM3OWNlLi42MTEwMTc2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTYyNyw3ICs1NjI3LDggQEAgZnVsbHNjcmVlbi8KIGNhbnZh
cy9waGlsaXAvdGVzdHMvMmQucGF0aC5pc1BvaW50SW5QYXRoLmVkZ2UuaHRtbAogCiAjIHZpZXdw
b3J0IG1ldGEgdGFnIHN1cHBvcnQKLWZhc3Qvdmlld3BvcnQKKyMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDgxCitmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTQ1Lmh0
bWwKIAogIyBQcmUtSE1UTDUgcGFyc2VyIHF1aXJrcyBvbmx5IGFwcGx5IHRvIHRoZSBtYWMgcG9y
dCBmb3Igbm93LgogZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCA2ZDlhNjUyLi4xYjY3YjI4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEwLTExLTExICBKb29u
ZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZ29iamVjdCB0byBvZmZlciB0aGUgdmlld3BvcnQg
cHJvcGVydGllcyB0byB1c2VyIGFnZW50cy4KKyAgICAgICAgSXQgaXMgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIHRoYXQgY29udGFpbnMgdGhlIHNpemUsIGluaXRpYWwgc2NhbGUgd2l0aCBsaW1p
dHMsIAorICAgICAgICBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBhIHVzZXIgaXMgYWJs
ZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIGJ5IFNhZmFyaSBvbiB0aGUgaVBob25lLiBG
b3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAKKyAgICAgICAgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMs
IHJlZmVyIHRvIHRoZSBTYWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQgCisgICAgICAgIGh0dHA6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBwbGVh
cHBsaWNhdGlvbnMvcmVmZXJlbmNlL3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0YXRhZ3MuaHRt
bAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6
IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVu
dHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXNGb3JTaXplKTogQWRkZWQgdGhpcyBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2l0aCB0aGUgZ2l2ZW4gYXZhaWxhYmxlV2lkdGggYW5kIGF2
YWlsYWJsZUhlaWd0aC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0
L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOiBBZGRl
ZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcgYXMgYSBwcml2YXRlIGZ1bmN0aW9uLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwOiBBZGRlZCBmdW5j
dGlvbnMgdG8gZ2V0IGVhY2ggdmFsdWUgb2YgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX25ldyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1
dGUpOiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmlidXRlcyBhbmQgZW1pdCB0
aGUgdmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfZHBpKTogUmVuYW1l
IHdlYlZpZXdHZXREUEkgdG8gd2Via2l0X3dlYl92aWV3X2dldF9kcGkgYW5kIG1ha2UgaXQgYSBw
cml2YXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zY3JlZW5fY2hhbmdl
ZCk6IFJlbmFtZSB3ZWJWaWV3R2V0RFBJIHRvIHdlYmtpdF93ZWJfdmlld19nZXRfZHBpLgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBTdXBwb3J0IGZvciB0aGUgdmlld3Bv
cnQtYXR0cmlidXRlcy1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKHBpeGVsc0Zyb21TaXplKTog
UmVuYW1lIHdlYlZpZXdHZXREUEkgdG8gd2Via2l0X3dlYl92aWV3X2dldF9kcGkuCisKIDIwMTAt
MTEtMDggIE5pY29sYXMgRHVmcmVzbmUgIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggZDYzMzE3Yy4uZmYyMGQ5
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApA
QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNocm9tZUNs
aWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKQEAgLTYwNyw2ICs2MDgsMTIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNob29zZUljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkMKICAgICBj
aG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsK
IH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNv
bnN0IFZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAgLy8gUmVjb21w
dXRlIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIG1ha2luZyBpdCB2YWxpZC4KKyAgICB3ZWJraXRW
aWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9h
dHRyaWJ1dGVzKG1fd2ViVmlldyksIHRydWUpOworfQorCiB2b2lkIENocm9tZUNsaWVudDo6c2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IDgyNTJmMDYuLmI0YTFh
MzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAt
MTEwLDYgKzExMCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb29sVGlwKGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7
CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0OworCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3Jl
OjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggODI5NjIwNi4u
ZTc0ZWVkZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMTksNyArMjAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogCi0jaW5jbHVkZSAid2Via2l0
d2Vidmlldy5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC01NCwzICs1NCwxNCBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6bGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpCiAgICAgcmV0dXJuIHNfbGlua3NJbmNsdWRl
ZEluVGFiQ2hhaW47CiB9CiAKKy8vIEZvciB0ZXN0aW5nIGZhc3Qvdmlld3BvcnQuCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFi
bGVIZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldykpOworCisgICAgVmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJp
di0+Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygp
OworICAgIC8vIGRlc2t0b3BXaWR0aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAsIGRldmljZUhl
aWdodCA9IDQ4MCwgZGV2aWNlRFBJID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJz
ID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIwLCA0ODAsIDE2
MCwgSW50U2l6ZShhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBmcHJp
bnRmKHN0ZG91dCwgInZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVm
LCAlZl1cbiIsIGF0dHJzLmxheW91dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0U2l6ZS5oZWln
aHQoKSwgYXR0cnMuaW5pdGlhbFNjYWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0dHJzLm1heGlt
dW1TY2FsZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuaAppbmRleCA1YjQ5NGZmLi5kY2UzMTU1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAg
LTE5LDYgKzE5LDggQEAKICNpZm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKICNkZWZp
bmUgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKIAorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRk
ZWZpbmVzLmg+CisKIGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ayB7CiAKIHB1YmxpYzoK
QEAgLTMwLDYgKzMyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc2V0TGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5G
b2N1c0NoYWluKCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0Zv
clNpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBh
dmFpbGFibGVIZWlnaHQpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNfZHJ0UnVuOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cAppbmRleCBiMjNiZDcwLi43MmU4ZDlhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMTI3Niw2ICsxMjc2LDEyIEBAIHN0
YXRpYyB2b2lkIHBvc3RDb21taXRGcmFtZVZpZXdTZXR1cChXZWJLaXRXZWJGcmFtZSAqZnJhbWUs
IEZyYW1lVmlldyAqdmlldywgYm9vCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoY29udGFpbmluZ1dpbmRvdyk7CiAgICAgdmlldy0+
c2V0R3RrQWRqdXN0bWVudHMocHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQuZ2V0KCksIHByaXYt
PnZlcnRpY2FsQWRqdXN0bWVudC5nZXQoKSwgcmVzZXRWYWx1ZXMpOwogCisgICAgLy8gSW52YWxp
ZGF0ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRlcyAtIHRoZXkgd2lsbCBvbmx5IGJlIHZhbGlkCisg
ICAgLy8gYWdhaW4gaWYgdGhlIHBhZ2Ugd2UncmUgYmVnaW5uaW5nIHRvIGxvYWQgbm93IGhhcyBh
bgorICAgIC8vIGFwcHJvcHJpYXRlIHZpZXdwb3J0IG1ldGEgdGFnLgorICAgIGNvbnRhaW5pbmdX
aW5kb3ctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+aXNWYWxpZCA9IEZBTFNFOwor
ICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChjb250YWluaW5nV2luZG93LT5wcml2LT52aWV3
cG9ydEF0dHJpYnV0ZXMuZ2V0KCkpLCAidmFsaWQiKTsKKwogICAgIGlmIChwcml2LT5jdXJyZW50
TWVudSkgewogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHdGtNZW51PiBtZW51KHByaXYtPmN1cnJl
bnRNZW51KTsKICAgICAgICAgcHJpdi0+Y3VycmVudE1lbnUuY2xlYXIoKTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgK
aW5kZXggZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
Lmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uMzk5Y2I0YyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xv
Y2F0aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Q
b2xpY3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsK
IAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xh
c3MgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDczODU2NzcuLjI3NjJhZDQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3Vs
dC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTEzNiw2ICsxMzgsNyBAQCBleHRlcm4gIkMi
IHsKICAgICAgICAgV2ViQ29yZTo6UGFnZSogY29yZVBhZ2U7CiAgICAgICAgIFBsYXRmb3JtUmVm
UHRyPFdlYktpdFdlYlNldHRpbmdzPiB3ZWJTZXR0aW5nczsKICAgICAgICAgUGxhdGZvcm1SZWZQ
dHI8V2ViS2l0V2ViSW5zcGVjdG9yPiB3ZWJJbnNwZWN0b3I7CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwogICAgICAg
ICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJXaW5kb3dGZWF0dXJlcz4gd2ViV2luZG93RmVhdHVy
ZXM7CiAKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKQEAgLTIxMyw2ICsyMTYs
MjIgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdib29sZWFuIGRpc3Bvc2VkOwogICAgIH07CiAK
KyAgICBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgeworICAgICAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgICAgICBpbnQgc2NyZWVuV2lkdGg7CisgICAgICAg
IGludCBzY3JlZW5IZWlnaHQ7CisgICAgICAgIGludCBhdmFpbGFibGVXaWR0aDsKKyAgICAgICAg
aW50IGF2YWlsYWJsZUhlaWdodDsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVp
Z2h0OworICAgICAgICBmbG9hdCBpbml0aWFsU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1p
bmltdW1TY2FsZUZhY3RvcjsKKyAgICAgICAgZmxvYXQgbWF4aW11bVNjYWxlRmFjdG9yOworICAg
ICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvOworICAgICAgICBnYm9vbGVhbiB1c2VyU2NhbGFi
bGU7CisgICAgICAgIGdib29sZWFuIGlzVmFsaWQ7CisgICAgfTsKKwogICAgIFdURjo6U3RyaW5n
CiAgICAgd2Via2l0VXNlckFnZW50KCk7CiAKQEAgLTMyNiw2ICszNDUsOSBAQCBleHRlcm4gIkMi
IHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKgogICAgIHdlYmtpdF9nZW9s
b2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6R2Vv
bG9jYXRpb24qKTsKIAorICAgIGdkb3VibGUgCisgICAgd2ViVmlld0dldERQSShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KTsKKwogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gd2Via2l0bmV0d29y
a3JlcXVlc3QuaCBvbmNlIHRoZSBBUEkgaXMgYWdyZWVkIHVwb24uCiAgICAgV0VCS0lUX0FQSSBT
b3VwTWVzc2FnZSoKICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKQEAgLTQzMiw2ICs0NTQsOCBAQCBleHRlcm4gIkMi
IHsKIAogICAgIHZvaWQgd2Via2l0V2ViVmlld0VudGVyRnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKiBub2RlKTsKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdF
eGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKKworICAgIHZvaWQgd2Via2l0
Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyosIGJv
b2wpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTU2NmUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJp
YnV0ZXMuY3BwCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpv
b25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3Jh
IEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtp
dHZpZXdwb3J0YXR0cmlidXRlcworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIHRo
ZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIG9mIGEgd2ViIHBhZ2UKKyAqIEBzZWVfYWxzbzogI1dlYktp
dFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZAorICoKKyAqICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgb2ZmZXJzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdl
bnRzIHRvCisgKiBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQuIEl0IGNvbnRhaW5zIHRoZSBz
aXplLCBpbml0aWFsIHNjYWxlIHdpdGggbGltaXRzLAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0
IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8gc2NhbGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3
cG9ydC4KKyAqIFRoaXMgbWFrZXMgYSB3ZWIgcGFnZSBmaXQgdGhlIGRldmljZSBzY3JlZW4uCisg
KgorICogWW91IG5lZWQgdG8gY2FsbCAjd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21w
dXRlIHRvIGdldCB0aGUgb3B0aW1hbAorICogdmlld3BvcnQgYXR0cmlidXRlcyB3aGVuIHRoZSBz
aXplIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0IGlzIGNoYW5nZWQuCisgKgorICogI1dlYktpdFdl
YlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVk
IHdpdGgKKyAqIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdoZW4geW91IGNhbGwgI3dl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAqCisgKiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiBvbiB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSBy
ZWZlcmVuY2UgbGlicmFyeSBhdAorICogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJp
L2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJp
aHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisgKgorICogPGluZm9ybWFsZXhhbXBsZT48
cHJvZ3JhbWxpc3Rpbmc+CisgKiAvPCEtLSAtLT4qIENvbm5lY3QgdG8gdGhlIHZpZXdwb3J0LWF0
dHJpYnV0ZXMtY2hhbmdlcyBzaWduYWwgKjwhLS0gLS0+LworICogZ19zaWduYWxfY29ubmVjdCAo
d2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHZpZXdw
b3J0X2NoYW5nZV9jYiksIHdlYlZpZXcpOworICoKKyAqIC88IS0tIC0tPiogSGFuZGxlIHRoZSBz
aWduYWwgdG8gZ2V0IHRoZSBpbml0aWFsIHNjYWxlIHZhbHVlICo8IS0tIC0tPi8KKyAqIHN0YXRp
YyB2b2lkCisgKiB2aWV3cG9ydF9jaGFuZ2VfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCisgKiB7CisgKiAgICAg
Z2Zsb2F0IGluaXRpYWxTY2FsZTsKKyAqICAgICBnX29iamVjdF9nZXQoR19PQkpFQ1Qodmlld3Bv
cnRBdHRyaWJ1dGVzKSwgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVM
TCk7CisgKiAgICAgd2Via2l0X3dlYl92aWV3X3NldF9mdWxsX2NvbnRlbnRfem9vbSh3ZWJWaWV3
LCBUUlVFKTsKKyAqICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywg
aW5pdGlhbFNjYWxlKTsKKyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1w
bGU+CisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1NDUkVFTl9XSURUSCwKKyAg
ICBQUk9QX1NDUkVFTl9IRUlHSFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgUFJP
UF9BVkFJTEFCTEVfSEVJR0hULAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9IRUlHSFQsCisg
ICAgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFD
VE9SLAorICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgUFJPUF9ERVZJQ0VfUElY
RUxfUkFUSU8sCisgICAgUFJPUF9VU0VSX1NDQUxBQkxFLAorICAgIFBST1BfVkFMSUQKK307CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzLCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlcywgR19UWVBFX09CSkVDVCk7CisKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FU
VFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpOworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpOworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
c0NsYXNzKiBrY2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhrY2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5Owor
CisgICAgR1BhcmFtRmxhZ3MgZmxhZ3MgPSAoR1BhcmFtRmxhZ3MpKFdFQktJVF9QQVJBTV9SRUFE
QUJMRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpzY3JlZW4t
d2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1
ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2
aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVy
cmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8g
dGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1NDUkVFTl9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NyZWVu
LXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNjcmVlbiBX
aWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdpZHRo
IG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6c2NyZWVuLWhlaWdodDoKKyAgICAgKgorICAgICAqIFRo
ZSBoZWlnaHQgb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxs
eQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29t
cHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1
ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2
ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NDUkVFTl9IRUlHSFQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjcmVlbi1oZWlnaHQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiU2NyZWVuIEhlaWdodCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuLiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dHM6YXZhaWxhYmxlLXdpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSBj
dXJyZW50IHZpc2libGUgYXJlYS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICogc2Ft
ZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNhc2Vz
CisgICAgICogeW91IG1heSBoYXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dlciB0
aGFuIHRoZSB2aXNpYmxlCisgICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0IGlu
aXRpYWxpemVkIHRvIHRoZSBzaXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQsIGJ1
dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0V2Vi
Vmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAgICog
bGV0IHRoZSBlbmdpbmUga25vdyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMKKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImF2YWlsYWJsZS13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJBdmFpbGFibGUgV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmF2YWlsYWJsZS1oZWln
aHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjdXJyZW50IHZpc2libGUgYXJl
YS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICogc2FtZSBhcyB0aGUgc3BhY2UgYWxs
b2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNhc2VzCisgICAgICogeW91IG1heSBo
YXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlCisg
ICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0IGluaXRpYWxpemVkIHRvIHRoZSBz
aXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRl
IGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAgICogbGV0IHRoZSBlbmdpbmUga25v
dyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMKKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFCTEVfSEVJ
R0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2lu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtaGVpZ2h0
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkF2YWlsYWJsZSBIZWln
aHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWlnaHQg
b2YgdGhlIHZpc2libGUgYXJlYS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp3aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3
aWR0aCBvZiB0aGUgdmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIldpZHRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpoZWlnaHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVp
Z2h0IG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJIZWlnaHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czppbml0aWFsLXNjYWxlLWZhY3RvcjoKKyAgICAg
KgorICAgICAqIFRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbml0aWFsLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJJbml0aWFsIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGluaXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWluaW11
bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUg
dmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluaW11bS1zY2FsZS1mYWN0b3IiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWluaW11bSBTY2FsZSBGYWN0b3Ii
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtaW5pbXVtIHNj
YWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRzOm1heGltdW0tc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhl
IG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqCisgICAgICogU2luY2U6IDEu
My41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01BWElNVU1f
U0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGlt
dW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
Ik1heGltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtcGl4ZWwtcmF0aW86
CisgICAgICoKKyAgICAgKiBUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGV2aWNlLXBpeGVsLXJhdGlvIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBQaXhlbCBSYXRpbyIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGRldmljZSBwaXhlbCByYXRpbyBvZiB0aGUg
dmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsYWdzKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dHM6dXNlci1zY2FsYWJsZToKKyAgICAgKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBu
b3QgdGhlIHVzZXIgY2FuIHpvb20gaW4gYW5kIG91dC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAx
LjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9VU0VSX1ND
QUxBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJ1c2VyLXNj
YWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJVc2VyIFNj
YWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRlcm1p
bmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29tIGluIGFuZCBvdXQuIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRzOnZhbGlkOgorICAgICAqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9y
IG5vdCB0aGUgYXR0cmlidXRlcyBhcmUKKyAgICAgKiB2YWxpZC4gI1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyBhcmUgb25seSB2YWxpZCBvbiBwYWdlcyB3aGljaAorICAgICAqIGhhdmUgYSB2aWV3
cG9ydCBtZXRhIHRhZywgYW5kIGhhdmUgYWxyZWFkeSBoYWQgdGhlIGF0dHJpYnV0ZXMKKyAgICAg
KiBjYWxjdWxhdGVkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1ZBTElELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJ2YWxpZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVmFsaWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGF0dHJpYnV0ZXMgYXJlIHZhbGlk
LCBhbmQgY2FuIGJlIHVzZWQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7Cisg
ICAgdmlld3BvcnQtPnByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFU
RSh2aWV3cG9ydCk7CisgICAgdmlld3BvcnQtPnByaXYtPmlzVmFsaWQgPSBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisKKyAg
ICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1dJRFRIOgorICAgICAg
ICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPnNjcmVlbldpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2lu
dCh2YWx1ZSwgcHJpdi0+c2NyZWVuSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2
LT5hdmFpbGFibGVXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFC
TEVfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmF2YWlsYWJs
ZUhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT53aWR0aCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOSVRJQUxfU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+aW5pdGlhbFNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTklNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWluaW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWElNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF4aW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9QSVhFTF9SQVRJ
TzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPmRldmljZVBpeGVsUmF0
aW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFUl9TQ0FMQUJMRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+dXNlclNjYWxhYmxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCBwcml2LT5pc1ZhbGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworICAg
IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJ
RVdQT1JUX0FUVFJJQlVURVMob2JqZWN0KTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQ
cml2YXRlKiBwcml2ID0gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2OworCisgICAgc3dpdGNoIChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9XSURUSDoKKyAgICAgICAgcHJpdi0+c2Ny
ZWVuV2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0NSRUVOX0hFSUdIVDoKKyAgICAgICAgcHJpdi0+c2NyZWVuSGVpZ2h0ID0gZ192
YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlM
QUJMRV9XSURUSDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlV2lkdGggPSBnX3ZhbHVlX2dldF9p
bnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX0hFSUdI
VDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0gZ192YWx1ZV9nZXRfaW50KHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzLCBib29sIG1ha2VWYWxp
ZCkKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gdmlld3Bv
cnRBdHRyaWJ1dGVzLT5wcml2OworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBwcml2LT53
ZWJWaWV3OworCisgICAgLy8gR2RrU2NyZWVuKiBzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3Jl
ZW4oR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgLy8gcHJpdi0+c2NyZWVuV2lkdGggPSBnZGtf
c2NyZWVuX2dldF93aWR0aChzY3JlZW4pOworICAgIC8vIHByaXYtPnNjcmVlbkhlaWdodCA9IGdk
a19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOworCisgICAgSW50UmVjdCB3aW5kb3dSZWN0KHdl
YlZpZXctPnByaXYtPmNvcmVQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpKTsKKyAgICBwcml2
LT5zY3JlZW5XaWR0aCA9IHdpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICBwcml2LT5zY3JlZW5IZWln
aHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOworCisgICAgSW50UmVjdCByZWN0KHdlYlZpZXctPnBy
aXYtPmNvcmVQYWdlLT5jaHJvbWUoKS0+cGFnZVJlY3QoKSk7CisgICAgcHJpdi0+YXZhaWxhYmxl
V2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0gcmVjdC5o
ZWlnaHQoKTsKKworICAgIC8vIEZpcnN0IG9mIGFsbCwgd2UgZ2l2ZSB0aGUgYXBwbGljYXRpb24g
YW4gb3Bwb3J0dW5pdHkgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmFsdWVzLgorICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUt
cmVxdWVzdGVkIiwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworICAgIFZpZXdwb3J0QXJndW1lbnRz
IGFyZ3VtZW50cyA9IHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKworICAgIC8vIFRoZSBEZXNrdG9wV2lkdGggaGFz
IDk4MCwgYmVjYXVzZSB0aGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRl
c2lnbmVkIGZvciBkZXNrdG9wIHVzZXIgYWdlbnRzLgorICAgIFZpZXdwb3J0QXR0cmlidXRlcyBh
dHRyaWJ1dGVzID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgcHJp
di0+c2NyZWVuV2lkdGgsIHByaXYtPnNjcmVlbkhlaWdodCwgMTYwLCBJbnRTaXplKHByaXYtPmF2
YWlsYWJsZVdpZHRoLCBwcml2LT5hdmFpbGFibGVIZWlnaHQpKTsKKworICAgIHByaXYtPndpZHRo
ID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0
cmlidXRlcy5sYXlvdXRTaXplLmhlaWdodCgpOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworICAgIHByaXYtPmRldmljZVBpeGVsUmF0aW8g
PSBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+dXNlclNjYWxhYmxlID0g
YXJndW1lbnRzLnVzZXJTY2FsYWJsZTsKKworICAgIGlmIChtYWtlVmFsaWQpIHsKKyAgICAgICAg
cHJpdi0+aXNWYWxpZCA9IFRSVUU7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh2
aWV3cG9ydEF0dHJpYnV0ZXMpLCAidmFsaWQiKTsKKyAgICB9CisKKyAgICAvLyBOb3cgbGV0IHRo
ZSBhcHBsaWNhdGlvbiBrbm93IGl0IGlzIHNhZmUgdG8gdXNlIHRoZSBuZXcKKyAgICAvLyB2YWx1
ZXMuCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1
dGVzLWF2YWlsYWJsZSIsIHZpZXdwb3J0QXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmll
d3BvcnRBdHRyaWJ1dGVzKQoreworICAgIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0
ZSh2aWV3cG9ydEF0dHJpYnV0ZXMsIGZhbHNlKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGJmNzM3NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyAg
ICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklC
VVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXND
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFU19DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9W
SUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlICpwcml2OworfTsKKwor
c3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8K
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBlICAgICAgICAgICAg
ICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZShXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2NTMxZWUxLi5m
NTgyZWY3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTAsNiArMTAsNyBA
QAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgogICogIENvcHlyaWdo
dCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVzIEluYy4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1
ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Myw3ICs0NCw3IEBA
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIK
ICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKICNpbmNsdWRlICJDb250ZXh0TWVu
dUNsaWVudEd0ay5oIgpAQCAtNzMsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRH
dGsuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhZ2VDYWNoZS5oIgpAQCAtMTczLDYgKzE3NSw4IEBAIGVudW0gewogICAgIEdFT0xPQ0FUSU9O
X1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAgT05MT0FEX0VWRU5ULAogICAgIEZSQU1F
X0NSRUFURUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRFU19SRUNPTVBVVEVfUkVRVUVTVEVELAor
ICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxBQkxFLAogICAgIExBU1RfU0lHTkFMCiB9Owog
CkBAIC0xODYsNiArMTkwLDcgQEAgZW51bSB7CiAgICAgUFJPUF9FRElUQUJMRSwKICAgICBQUk9Q
X1NFVFRJTkdTLAogICAgIFBST1BfV0VCX0lOU1BFQ1RPUiwKKyAgICBQUk9QX1ZJRVdQT1JUX0FU
VFJJQlVURVMsCiAgICAgUFJPUF9XSU5ET1dfRkVBVFVSRVMsCiAgICAgUFJPUF9UUkFOU1BBUkVO
VCwKICAgICBQUk9QX1pPT01fTEVWRUwsCkBAIC00ODMsNiArNDg4LDkgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZSoKICAgICBjYXNlIFBST1BfV0VCX0lOU1BFQ1RPUjoKICAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3
KSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfdmll
d3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3KSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJP
UF9XSU5ET1dfRkVBVFVSRVM6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF93aW5kb3dfZmVhdHVyZXMod2ViVmlldykpOwogICAgICAgICBicmVh
azsKQEAgLTEzMjUsNiArMTMzMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKICAgICB9CiAKICAgICBwcml2LT53ZWJJbnNwZWN0b3IuY2xl
YXIoKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuY2xlYXIoKTsKICAgICBwcml2LT53
ZWJXaW5kb3dGZWF0dXJlcy5jbGVhcigpOwogICAgIHByaXYtPm1haW5SZXNvdXJjZS5jbGVhcigp
OwogICAgIHByaXYtPnN1YlJlc291cmNlcy5jbGVhcigpOwpAQCAtMTM4OCw3ICsxMzk3LDcgQEAg
c3RhdGljIEF0a09iamVjdCogd2Via2l0X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKEd0a1dpZGdl
dCogd2lkZ2V0KQogICAgIHJldHVybiBjb3JlQWNjZXNzaWJsZS0+d3JhcHBlcigpOwogfQogCi1z
dGF0aWMgZ2RvdWJsZSB3ZWJWaWV3R2V0RFBJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitnZG91
YmxlIHdlYlZpZXdHZXREUEkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgV2ViS2l0V2ViU2V0dGlu
Z3MqIHdlYlNldHRpbmdzID0gcHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCk7CkBAIC0yNTkyLDYgKzI2
MDEsNTggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJB
TUUpOwogCiAgICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVz
LXJlY29tcHV0ZS1yZXF1ZXN0ZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2gg
cmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMu
CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMt
cmVjb21wdXRlLXJlcXVlc3RlZAorICAgICAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hlbmV2
ZXIgcmVjb21wdXRpbmcgdGhlIHZhbHVlcyBvZiB0aGUKKyAgICAgKiB2aWV3cG9ydCBhdHRyaWJ1
dGVzIGlzIHJlcXVpcmVkLiBUaGF0IG1heSBoYXBwZW4gYmVjYXVzZSB0aGUKKyAgICAgKiB2aWV3
cG9ydCBtZXRhIHRhZyBvZiBhIHBhZ2UgaGFzIGNoYW5nZWQsIG9yIGl0IG1heSBoYXBwZW4gYXMg
YQorICAgICAqIGNvbnNlcXVlbmNlIG9mIGFuIGV4cGxpY2l0IGJyb3dzZXIgcmVxdWVzdCAoY2F1
c2VkIGJ5IHNjcmVlbgorICAgICAqIHJvdGF0aW9uLCByZXNpemluZywgb3Igc2ltaWxhciByZWFz
b25zKS4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdpbGwg
aGF2ZSBzY3JlZW4sIGFuZCBhdmFpbGFibGUKKyAgICAgKiBzaXplcyBwcmUtZmlsbGVkIGJ5IHZh
bHVlcyB0aGF0IG1ha2Ugc2Vuc2UgZm9yIHRoZSBjdXJyZW50CisgICAgICogc2NyZWVuIGFuZCB3
aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRob3NlIHZhbHVlcyBpZiB5b3UKKyAgICAgKiBo
YXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIChmb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWRlIHlvdXIK
KyAgICAgKiB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSB2aXNpYmxlIGFyZWEsIHlv
dSBzaG91bGQKKyAgICAgKiBvdmVycmlkZSB0aGUgYXZhaWxhYmxlLXdpZHRoIGFuZCBhdmFpbGFi
bGUtaGVpZ2h0IHByb3BlcnRpZXMgdG8KKyAgICAgKiB0aGUgYWN0dWFsIHZpc2libGUgYXJlYSku
CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2lnbmFsc1tWSUVXUE9SVF9BVFRSSUJVVEVTX0FWQUlMQUJMRV0gPSBnX3NpZ25hbF9uZXco
InZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsCisgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxf
Vk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCisgICAgICogV2ViS2l0
V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUKKyAgICAgKiBAd2ViX3ZpZXc6
IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9h
dHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZp
ZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZp
ZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2l0aCBAdmlld3BvcnRf
YXR0cmlidXRlcworICAgICAqIHdoZW4gdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYXJlIHVwZGF0
ZWQgaW4gdGhlIGNhc2Ugb2YgbG9hZGluZyB3ZWIgcGFnZXMgY29udGFpbgorICAgICAqIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X3JlY29tcHV0ZS4KKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlcyBpcyB1c2VkIHRvIGNvbnRy
b2wgdGhlIHZpZXdwb3J0IGxheW91dCB0byBtYWtlIGEgd2ViIHBhZ2UgZml0IHRoZSBkZXZpY2Ug
c2NyZWVuLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgd2Via2l0
X3dlYl92aWV3X3NpZ25hbHNbVklFV1BPUlRfQVRUUklCVVRFU19BVkFJTEFCTEVdID0gZ19zaWdu
YWxfbmV3KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJsZSIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJL
SVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCiAgICAgICogaW1wbGVtZW50
YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+Y3Jl
YXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3OwpAQCAt
MjgzMyw2ICsyODk0LDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKIAogICAgIC8qKgorICAgICogV2ViS2l0V2ViVmlldzp2aWV3cG9ydC1hdHRyaWJ1dGVzOgor
ICAgICoKKyAgICAqIFRoZSBhc3NvY2lhdGVkICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5z
dGFuY2UuCisgICAgKgorICAgICogU2luY2U6IDEuMy41CisgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVU
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVmlld3BvcnQgQXR0cmlidXRlcyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgYXNzb2NpYXRlZCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICAvKioKICAgICAqIFdlYktpdFdlYlZpZXc6d2luZG93LWZlYXR1cmVzOgogICAgICoKICAgICAq
IEFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMgaW5zdGFuY2UuCkBAIC0zMjU5
LDYgKzMzMzQsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKICAgICBwcml2LT53ZWJJbnNwZWN0b3IgPSBhZG9wdFBsYXRmb3JtUmVm
KFdFQktJVF9XRUJfSU5TUEVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfSU5TUEVD
VE9SLCBOVUxMKSkpOwogICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF9pbnNwZWN0b3JfY2xp
ZW50KHByaXYtPndlYkluc3BlY3Rvci5nZXQoKSwgcHJpdi0+Y29yZVBhZ2UpOwogCisgICAgLy8g
QW5kIG91ciBWaWV3cG9ydEF0dHJpYnV0ZXMgZnJpZW5kLgorICAgIHByaXYtPnZpZXdwb3J0QXR0
cmlidXRlcyA9IGFkb3B0UGxhdGZvcm1SZWYoV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIE5VTEwpKSk7CisgICAg
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT53ZWJWaWV3ID0gd2ViVmlldzsKKwogICAg
IC8vIFRoZSBzbWFydCBwb2ludGVyIHdpbGwgY2FsbCBnX29iamVjdF9yZWZfc2luayBvbiB0aGVz
ZSBhZGp1c3RtZW50cy4KICAgICBwcml2LT5ob3Jpem9udGFsQWRqdXN0bWVudCA9IEdUS19BREpV
U1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7
CiAgICAgcHJpdi0+dmVydGljYWxBZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVz
dG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTsKQEAgLTMzOTgsNiArMzQ3
NywyOSBAQCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9y
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPndlYklu
c3BlY3Rvci5nZXQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXM6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIE9idGFp
bnMgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICog
I1dlYktpdFdlYlZpZXcuIEV2ZXJ5ICNXZWJLaXRXZWJWaWV3IG9iamVjdCBoYXMgYQorICogI1dl
YktpdFdlYlZpZXdwb3JfQXR0cmlidXRlcyBvYmplY3QgYXR0YWNoZWQgdG8gaXQgYXMgc29vbiBh
cyBpdCBpcworICogY3JlYXRlZCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIE5V
TEwgaWYgdGhlIGFyZ3VtZW50IGlzCisgKiBub3QgYSB2YWxpZCAjV2ViS2l0V2ViVmlldy4gRG8g
bm90ZSBob3dldmVyIHRoYXQgdGhlIHZpZXdwb3J0CisgKiBhdHRyaWJ1dGVzIG9iamVjdCBvbmx5
IGNvbnRhaW5zIHZhbGlkIGluZm9ybWF0aW9uIHdoZW4gdGhlIGN1cnJlbnQKKyAqIHBhZ2UgaGFz
IGEgdmlld3BvcnQgbWV0YSB0YWcuIFlvdSBjYW4gY2hlY2sgd2hldGhlciB0aGUgZGF0YSBzaG91
bGQKKyAqIGJlIHVzZWQgYnkgY2hlY2tpbmcgdGhlICNXZWJLaXRWaWV3cG9ydDp2YWxpZCBwcm9w
ZXJ0eS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKyAgICByZXR1cm4gd2ViVmlldy0+
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpOworfQorCiAvLyBpbnRlcm5hbAogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF93aW5kb3dfZmVhdHVyZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMqIHdlYldpbmRvd0ZlYXR1cmVzKQogewpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDlkZmI2NTQuLjZiMWU5YzUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQwMSw2ICs0MDEsOSBAQCB3ZWJraXRfZ2V0X2NhY2hl
X21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRfQVBJIFdlYktp
dERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJVF9BUEkgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogR19FTkRf
REVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWlu
LmMgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggNGFiZWUwOC4uYTYyMTNi
OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCisrKyBiL1dlYktp
dFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtMTI5LDYgKzEyOSw2NSBAQCBjbG9zZV93ZWJf
dmlld19jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAg
IHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZAordmlld3BvcnRfcmVjb21wdXRlX2NiIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1
dGVzLCBHdGtXaWRnZXQqIHdpbmRvdykKK3sKKyAgICBpbnQgc2NyZWVuX3dpZHRoLCBzY3JlZW5f
aGVpZ2h0OworICAgIGludCBhdmFpbGFibGVfd2lkdGgsIGF2YWlsYWJsZV9oZWlnaHQ7CisgICAg
Z19vYmplY3RfZ2V0IChHX09CSkVDVCAoYXR0cmlidXRlcyksCisgICAgICAgICAgICAgICAgICAi
c2NyZWVuLXdpZHRoIiwgJnNjcmVlbl93aWR0aCwgInNjcmVlbi1oZWlnaHQiLCAmc2NyZWVuX2hl
aWdodCwKKyAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtd2lkdGgiLCAmYXZhaWxhYmxlX3dp
ZHRoLCAiYXZhaWxhYmxlLWhlaWdodCIsICZhdmFpbGFibGVfaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgTlVMTCk7CisgICAgZ19tZXNzYWdlICgiU2NyZWVuOiAlZHglZCB8IEF2YWlsYWJsZTog
JWR4JWQiLCBzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQsIGF2YWlsYWJsZV93aWR0aCwgYXZh
aWxhYmxlX2hlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfZnJvbV92aWV3cG9ydF9h
dHRyaWJ1dGVzIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMsIFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3KQoreworICAgIGdib29sZWFuIGlzX3ZhbGlkOworICAgIGdfb2JqZWN0
X2dldChhdHRyaWJ1dGVzLCAidmFsaWQiLCAmaXNfdmFsaWQsIE5VTEwpOworCisgICAgaWYgKGlz
X3ZhbGlkKSB7CisgICAgICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgICAgICAgZ2Zsb2F0IGlu
aXRpYWxTY2FsZSwgbWluaW11bVNjYWxlLCBtYXhpbXVtU2NhbGUsIGRldmljZVBpeGVsUmF0aW87
CisgICAgICAgIGdib29sZWFuIHVzZXJTY2FsYWJsZTsKKyAgICAgICAgZ19vYmplY3RfZ2V0IChH
X09CSkVDVCAoYXR0cmlidXRlcyksICJ3aWR0aCIsICZ3aWR0aCwgImhlaWdodCIsICZoZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxT
Y2FsZSwgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwgJm1pbmltdW1TY2FsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0b3IiLCAmbWF4aW11bVNjYWxlLCAiZGV2aWNl
LXBpeGVsLXJhdGlvIiwgJmRldmljZVBpeGVsUmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAg
InVzZXItc2NhbGFibGUiLCAmdXNlclNjYWxhYmxlLCBOVUxMKTsKKyAgICAgICAgcHJpbnRmKCJ3
LGgoJWQsJWQpIGluaXQsbWluLG1heCglZiwlZiwlZikgc2NhbGFibGUsIGRldmljZSBwaXhlbCBy
YXRpbyglZCwlZikgXG4iLAorICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgaW5pdGlhbFNj
YWxlLCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSwgdXNlclNjYWxhYmxlLCBkZXZpY2VQaXhl
bFJhdGlvKTsKKworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgKHdlYl92
aWV3LCBpbml0aWFsU2NhbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfbWVzc2FnZSAoIlZp
ZXdwb3J0QXR0cmlidXRlcyBpbnZhbGlkYXRlZC4iKTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3
X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgMS4wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHZpZXdwb3J0X2F2YWlsYWJsZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB1cGRh
dGVfZnJvbV92aWV3cG9ydF9hdHRyaWJ1dGVzIChhdHRyaWJ1dGVzLCB3ZWJfdmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkCit2aWV3cG9ydF92YWxpZF9jaGFuZ2VkX2NiIChXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMqIGF0dHJpYnV0ZXMsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldykKK3sKKyAgICB1cGRhdGVfZnJvbV92aWV3cG9ydF9hdHRyaWJ1dGVzIChhdHRyaWJ1
dGVzLCB3ZWJfdmlldyk7Cit9CisKK3N0YXRpYyB2b2lkCit3aW5kb3dfc2l6ZV9jaGFuZ2VfY2Io
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24sIGdwb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKyAgICBzdGF0aWMgaW50IHByZXZpb3VzX3dpZHRoID0gMDsKKwor
ICAgIGlmIChwcmV2aW91c193aWR0aCA9PSBhbGxvY2F0aW9uLT53aWR0aCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMgKHdlYl92aWV3KSk7CisgICAgcHJldmlv
dXNfd2lkdGggPSBhbGxvY2F0aW9uLT53aWR0aDsKK30KKwogc3RhdGljIEd0a1dpZGdldCoKIGNy
ZWF0ZV9icm93c2VyIChHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlfZW50cnksIEd0
a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldykKIHsKQEAgLTE0NCw2
ICsyMDMsMTIgQEAgY3JlYXRlX2Jyb3dzZXIgKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQq
IHVyaV9lbnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFcKICAgICBnX3NpZ25hbF9jb25uZWN0
ICh3ZWJfdmlldywgImNyZWF0ZS13ZWItdmlldyIsIEdfQ0FMTEJBQ0sgKGNyZWF0ZV93ZWJfdmll
d19jYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJ3ZWItdmll
dy1yZWFkeSIsIEdfQ0FMTEJBQ0sgKHdlYl92aWV3X3JlYWR5X2NiKSwgd2luZG93KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgImNsb3NlLXdlYi12aWV3IiwgR19DQUxMQkFDSyAo
Y2xvc2Vfd2ViX3ZpZXdfY2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92
aWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwgR19DQUxMQkFD
SyAodmlld3BvcnRfcmVjb21wdXRlX2NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
ICh3ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIiwgR19DQUxMQkFDSyAo
dmlld3BvcnRfYXZhaWxhYmxlX2NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3
ZWJfdmlldywgInNpemUtYWxsb2NhdGUiLCBHX0NBTExCQUNLKHdpbmRvd19zaXplX2NoYW5nZV9j
YiksIHdlYl92aWV3KTsKKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRl
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAoYXR0cmlidXRlcywgIm5vdGlmeTo6dmFsaWQiLCBHX0NBTExC
QUNLICh2aWV3cG9ydF92YWxpZF9jaGFuZ2VkX2NiKSwgd2ViX3ZpZXcpOwogCiAgICAgcmV0dXJu
IHNjcm9sbGVkX3dpbmRvdzsKIH0KQEAgLTIwOSwxMiArMjc0LDE0IEBAIGNyZWF0ZV93aW5kb3cg
KFdlYktpdFdlYlZpZXcqKiBvdXRfd2ViX3ZpZXcpCiAgICAgR3RrV2lkZ2V0ICpzdGF0dXNiYXI7
CiAKICAgICBnX2F0b21pY19pbnRfaW5jICgmd2luZG93X2NvdW50KTsKLSAgIAorCiAgICAgd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwogICAgIGd0a193aW5k
b3dfc2V0X2RlZmF1bHRfc2l6ZSAoR1RLX1dJTkRPVyAod2luZG93KSwgODAwLCA2MDApOwogICAg
IGd0a193aWRnZXRfc2V0X25hbWUgKHdpbmRvdywgIkd0a0xhdW5jaGVyIik7CiAKICAgICB3ZWJf
dmlldyA9IFdFQktJVF9XRUJfVklFVyAod2Via2l0X3dlYl92aWV3X25ldyAoKSk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X3NldF9mdWxsX2NvbnRlbnRfem9vbSAod2ViX3ZpZXcsIFRSVUUpOworCiAg
ICAgdXJpX2VudHJ5ID0gZ3RrX2VudHJ5X25ldyAoKTsKIAogICAgIHZib3ggPSBndGtfdmJveF9u
ZXcgKEZBTFNFLCAwKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73753</attachid>
            <date>2010-11-12 09:37:04 -0800</date>
            <delta_ts>2010-11-12 09:37:04 -0800</delta_ts>
            <desc>proposed API</desc>
            <filename>0001-Proposed-API.patch</filename>
            <type>text/plain</type>
            <size>49673</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">RnJvbSBlZmI4OTAzZjBmZTMxMjEwMmZkNjM4ZmQwMjc4ZTg0Y2YwOWZlYzhhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgPGduc0Bnbm9tZS5vcmc+
CkRhdGU6IEZyaSwgMTIgTm92IDIwMTAgMTU6MjA6NDkgLTAyMDAKU3ViamVjdDogW1BBVENIXSBQ
cm9wb3NlZCBBUEkKCi0tLQogQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgIDExICsKIEdOVW1ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgICAgMiArCiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8ICAgMTEgKwogTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1Nr
aXBwZWQgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBXZWJLaXQvZ3RrL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMzcgKysKIFdlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCAgICAgIHwgICAgNyArCiBXZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oICAgICAgICB8ICAgIDIgKwogLi4uL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgICAgfCAgIDEzICstCiAuLi4v
Z3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oICB8ICAgIDMgKwog
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAgfCAgICA2
ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHwg
ICAgMSArCiBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggICAgICAgICAgICAgICAg
ICB8ICAgIDMgKwogV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oICAgICAgICAgICAg
ICAgICAgfCAgIDI0ICsKIFdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5jcHAgICAgIHwgIDQ2MSArKysrKysrKysrKysrKysrKysrKwogV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggICAgICAgfCAgIDY1ICsrKwogV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgICAgICAgICAgICAgICAgfCAgMTA2ICsrKysrLQogV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oICAgICAgICAgICAgICAgICAgfCAgICAzICsK
IFdlYktpdFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYyAgICAgICAgICAgICAgICAgICAgIHwgICA2
OSArKystCiAxOCBmaWxlcyBjaGFuZ2VkLCA4MjIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMo
LSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0
dmlld3BvcnRhdHRyaWJ1dGVzLmgKCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggNzg2NzBmZS4uOGJjODU1ZCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTExICBKb29uZSBIdXIgIDxqb29uZUBrbGRw
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBb
R1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICBBZGRlZCBhIG5ldyBn
b2JqZWN0IHR5cGUgdG8gZ2V0IHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorCisgICAgICAgICog
R05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIHdlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5jcHAgCisKIDIwMTAtMTEtMTAgIENzYWJhIE9zenRyb2dvbsOhYyAg
PG9zc3lAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBIeWF0dC4KZGlm
ZiAtLWdpdCBhL0dOVW1ha2VmaWxlLmFtIGIvR05VbWFrZWZpbGUuYW0KaW5kZXggNDA1NjljZC4u
ZGI5MzVkYSAxMDA2NDQKLS0tIGEvR05VbWFrZWZpbGUuYW0KKysrIGIvR05VbWFrZWZpbGUuYW0K
QEAgLTMxOSw2ICszMTksNyBAQCB3ZWJraXRndGtfc3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2Rp
cikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1cml0eW9yaWdpbi5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIFwKIAkkKHNyY2Rpcikv
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGly
KS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oIFwKQEAgLTM4MSw2ICszODIsNyBA
QCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0
ZS5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmNwcCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
YmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNv
dXJjZS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5k
ZXggN2NmYmRjOC4uMzBhMDZjMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisr
KyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTExICBK
b29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKwor
ICAgICAgICBJbmNsdWRlZCB2aWV3cG9ydCB0ZXN0IGNhc2VzIGZvciBXZWJLaXRHdGsKKworICAg
ICAgICAqIHBsYXRmb3JtL2d0ay9Ta2lwcGVkOiBVbnNraXAgZmFzdC92aWV3cG9ydCBleGNlcHQg
dmlld3BvcnQtNDUuaHRtbC4KKwogMjAxMC0xMS0xMSAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgU2tpcCBhIG5ld2x5LWNyYXNoaW5nIHRlc3Qgb24gV2luZG93cwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCA5OTM3OWNlLi42MTEwMTc2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTYyNyw3ICs1NjI3LDggQEAgZnVsbHNjcmVlbi8KIGNhbnZh
cy9waGlsaXAvdGVzdHMvMmQucGF0aC5pc1BvaW50SW5QYXRoLmVkZ2UuaHRtbAogCiAjIHZpZXdw
b3J0IG1ldGEgdGFnIHN1cHBvcnQKLWZhc3Qvdmlld3BvcnQKKyMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDgxCitmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTQ1Lmh0
bWwKIAogIyBQcmUtSE1UTDUgcGFyc2VyIHF1aXJrcyBvbmx5IGFwcGx5IHRvIHRoZSBtYWMgcG9y
dCBmb3Igbm93LgogZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCA2ZDlhNjUyLi4xYjY3YjI4IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEwLTExLTExICBKb29u
ZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZ29iamVjdCB0byBvZmZlciB0aGUgdmlld3BvcnQg
cHJvcGVydGllcyB0byB1c2VyIGFnZW50cy4KKyAgICAgICAgSXQgaXMgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIHRoYXQgY29udGFpbnMgdGhlIHNpemUsIGluaXRpYWwgc2NhbGUgd2l0aCBsaW1p
dHMsIAorICAgICAgICBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBhIHVzZXIgaXMgYWJs
ZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIGJ5IFNhZmFyaSBvbiB0aGUgaVBob25lLiBG
b3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAKKyAgICAgICAgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMs
IHJlZmVyIHRvIHRoZSBTYWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQgCisgICAgICAgIGh0dHA6
Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBwbGVh
cHBsaWNhdGlvbnMvcmVmZXJlbmNlL3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0YXRhZ3MuaHRt
bAorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6
IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVu
dHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXNGb3JTaXplKTogQWRkZWQgdGhpcyBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2l0aCB0aGUgZ2l2ZW4gYXZhaWxhYmxlV2lkdGggYW5kIGF2
YWlsYWJsZUhlaWd0aC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6CisgICAgICAgICogd2Via2l0
L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0cHJpdmF0ZS5oOiBBZGRl
ZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19uZXcgYXMgYSBwcml2YXRlIGZ1bmN0aW9uLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwOiBBZGRlZCBmdW5j
dGlvbnMgdG8gZ2V0IGVhY2ggdmFsdWUgb2YgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX25ldyk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1
dGUpOiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmlidXRlcyBhbmQgZW1pdCB0
aGUgdmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKiB3ZWJraXQv
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg6IEFkZGVkLgorICAgICAgICAqIHdlYmtpdC93ZWJr
aXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfZHBpKTogUmVuYW1l
IHdlYlZpZXdHZXREUEkgdG8gd2Via2l0X3dlYl92aWV3X2dldF9kcGkgYW5kIG1ha2UgaXQgYSBw
cml2YXRlIGZ1bmN0aW9uLiAKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19zY3JlZW5fY2hhbmdl
ZCk6IFJlbmFtZSB3ZWJWaWV3R2V0RFBJIHRvIHdlYmtpdF93ZWJfdmlld19nZXRfZHBpLgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBTdXBwb3J0IGZvciB0aGUgdmlld3Bv
cnQtYXR0cmlidXRlcy1jaGFuZ2VkIHNpZ25hbC4KKyAgICAgICAgKHBpeGVsc0Zyb21TaXplKTog
UmVuYW1lIHdlYlZpZXdHZXREUEkgdG8gd2Via2l0X3dlYl92aWV3X2dldF9kcGkuCisKIDIwMTAt
MTEtMDggIE5pY29sYXMgRHVmcmVzbmUgIDxuaWNvbGFzLmR1ZnJlc25lQGNvbGxhYm9yYS5jby51
az4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKaW5kZXggZDYzMzE3Yy4uZmYyMGQ5
ZCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsu
Y3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApA
QCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNocm9tZUNs
aWVudEd0ay5oIgogCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKQEAgLTYwNyw2ICs2MDgsMTIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNob29zZUljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkMKICAgICBj
aG9vc2VyLT5pY29uTG9hZGVkKEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsK
IH0KIAordm9pZCBDaHJvbWVDbGllbnQ6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNv
bnN0IFZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAgLy8gUmVjb21w
dXRlIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIG1ha2luZyBpdCB2YWxpZC4KKyAgICB3ZWJraXRW
aWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9h
dHRyaWJ1dGVzKG1fd2ViVmlldyksIHRydWUpOworfQorCiB2b2lkIENocm9tZUNsaWVudDo6c2V0
Q3Vyc29yKGNvbnN0IEN1cnNvciYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdp
dCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCmluZGV4IDgyNTJmMDYuLmI0YTFh
MzcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3Rr
LmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAt
MTEwLDYgKzExMCw4IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb29sVGlwKGNvbnN0IFdURjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7
CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0OworCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwcmludChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRB
QkFTRSkKICAgICAgICAgdmlydHVhbCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3Jl
OjpGcmFtZSosIGNvbnN0IFdURjo6U3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggODI5NjIwNi4u
ZTc0ZWVkZSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoK
ICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYwpAQCAtMTksNyArMjAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkR1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIgogCi0jaW5jbHVkZSAid2Via2l0
d2Vidmlldy5oIgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC01NCwzICs1NCwxNCBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
azo6bGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpCiAgICAgcmV0dXJuIHNfbGlua3NJbmNsdWRl
ZEluVGFiQ2hhaW47CiB9CiAKKy8vIEZvciB0ZXN0aW5nIGZhc3Qvdmlld3BvcnQuCit2b2lkIER1
bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0ZvclNpemUo
V2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFi
bGVIZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2Vi
VmlldykpOworCisgICAgVmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJp
di0+Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygp
OworICAgIC8vIGRlc2t0b3BXaWR0aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAsIGRldmljZUhl
aWdodCA9IDQ4MCwgZGV2aWNlRFBJID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJz
ID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIwLCA0ODAsIDE2
MCwgSW50U2l6ZShhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBmcHJp
bnRmKHN0ZG91dCwgInZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVm
LCAlZl1cbiIsIGF0dHJzLmxheW91dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0U2l6ZS5oZWln
aHQoKSwgYXR0cnMuaW5pdGlhbFNjYWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0dHJzLm1heGlt
dW1TY2FsZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBS
ZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVu
ZGVyVHJlZVN1cHBvcnRHdGsuaAppbmRleCA1YjQ5NGZmLi5kY2UzMTU1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAg
LTE5LDYgKzE5LDggQEAKICNpZm5kZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKICNkZWZp
bmUgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrX2gKIAorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRk
ZWZpbmVzLmg+CisKIGNsYXNzIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ayB7CiAKIHB1YmxpYzoK
QEAgLTMwLDYgKzMyLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIHZvaWQgc2V0TGlua3NJbmNs
dWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5G
b2N1c0NoYWluKCk7CisgICAgc3RhdGljIHZvaWQgY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlc0Zv
clNpemUoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBh
dmFpbGFibGVIZWlnaHQpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBib29sIHNfZHJ0UnVuOwpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0
ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNw
cAppbmRleCBiMjNiZDcwLi43MmU4ZDlhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcApAQCAtMTI3Niw2ICsxMjc2LDEyIEBAIHN0
YXRpYyB2b2lkIHBvc3RDb21taXRGcmFtZVZpZXdTZXR1cChXZWJLaXRXZWJGcmFtZSAqZnJhbWUs
IEZyYW1lVmlldyAqdmlldywgYm9vCiAgICAgV2ViS2l0V2ViVmlld1ByaXZhdGUqIHByaXYgPSBX
RUJLSVRfV0VCX1ZJRVdfR0VUX1BSSVZBVEUoY29udGFpbmluZ1dpbmRvdyk7CiAgICAgdmlldy0+
c2V0R3RrQWRqdXN0bWVudHMocHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQuZ2V0KCksIHByaXYt
PnZlcnRpY2FsQWRqdXN0bWVudC5nZXQoKSwgcmVzZXRWYWx1ZXMpOwogCisgICAgLy8gSW52YWxp
ZGF0ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRlcyAtIHRoZXkgd2lsbCBvbmx5IGJlIHZhbGlkCisg
ICAgLy8gYWdhaW4gaWYgdGhlIHBhZ2Ugd2UncmUgYmVnaW5uaW5nIHRvIGxvYWQgbm93IGhhcyBh
bgorICAgIC8vIGFwcHJvcHJpYXRlIHZpZXdwb3J0IG1ldGEgdGFnLgorICAgIGNvbnRhaW5pbmdX
aW5kb3ctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+aXNWYWxpZCA9IEZBTFNFOwor
ICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVChjb250YWluaW5nV2luZG93LT5wcml2LT52aWV3
cG9ydEF0dHJpYnV0ZXMuZ2V0KCkpLCAidmFsaWQiKTsKKwogICAgIGlmIChwcml2LT5jdXJyZW50
TWVudSkgewogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxHdGtNZW51PiBtZW51KHByaXYtPmN1cnJl
bnRNZW51KTsKICAgICAgICAgcHJpdi0+Y3VycmVudE1lbnUuY2xlYXIoKTsKZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgK
aW5kZXggZmM3MWMyYy4uMjQyOGY2MiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmgKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0bmV0d29ya3Jlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYmZyYW1lLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnNldHRpbmdz
Lmg+CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmggYi9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKaW5kZXggYjA2YTNiZi4uMzk5Y2I0YyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaApAQCAtOTIsNiArOTIsOSBAQCB0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0SGl0VGVzdFJlc3VsdENsYXNzIFdlYktpdEhpdFRlc3RSZXN1bHRDbGFzczsKIHR5
cGVkZWYgc3RydWN0IF9XZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uIFdlYktpdEdlb2xv
Y2F0aW9uUG9saWN5RGVjaXNpb247CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Q
b2xpY3lEZWNpc2lvbkNsYXNzIFdlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzczsK
IAordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXM7Cit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xh
c3MgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3M7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIGIvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCmluZGV4IDczODU2NzcuLjI3NjJhZDQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAorKysgYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRwcml2YXRlLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZG93bmxvYWQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0aGl0dGVzdHJlc3Vs
dC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2Vidmlldy5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmZyYW1lLmg+CkBAIC02Myw2ICs2NCw3IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaW5jbHVkZSAiVmlld3BvcnRBcmd1bWVudHMu
aCIKICNpbmNsdWRlICJXaW5kb3dGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNlY3VyaXR5T3JpZ2lu
LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTEzNiw2ICsxMzgsNyBAQCBleHRlcm4gIkMi
IHsKICAgICAgICAgV2ViQ29yZTo6UGFnZSogY29yZVBhZ2U7CiAgICAgICAgIFBsYXRmb3JtUmVm
UHRyPFdlYktpdFdlYlNldHRpbmdzPiB3ZWJTZXR0aW5nczsKICAgICAgICAgUGxhdGZvcm1SZWZQ
dHI8V2ViS2l0V2ViSW5zcGVjdG9yPiB3ZWJJbnNwZWN0b3I7CisgICAgICAgIFBsYXRmb3JtUmVm
UHRyPFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwogICAgICAg
ICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJXaW5kb3dGZWF0dXJlcz4gd2ViV2luZG93RmVhdHVy
ZXM7CiAKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1haW5GcmFtZTsKQEAgLTIxMyw2ICsyMTYs
MjIgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdib29sZWFuIGRpc3Bvc2VkOwogICAgIH07CiAK
KyAgICBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUgeworICAgICAgICBX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgICAgICBpbnQgc2NyZWVuV2lkdGg7CisgICAgICAg
IGludCBzY3JlZW5IZWlnaHQ7CisgICAgICAgIGludCBhdmFpbGFibGVXaWR0aDsKKyAgICAgICAg
aW50IGF2YWlsYWJsZUhlaWdodDsKKyAgICAgICAgaW50IHdpZHRoOworICAgICAgICBpbnQgaGVp
Z2h0OworICAgICAgICBmbG9hdCBpbml0aWFsU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1p
bmltdW1TY2FsZUZhY3RvcjsKKyAgICAgICAgZmxvYXQgbWF4aW11bVNjYWxlRmFjdG9yOworICAg
ICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvOworICAgICAgICBnYm9vbGVhbiB1c2VyU2NhbGFi
bGU7CisgICAgICAgIGdib29sZWFuIGlzVmFsaWQ7CisgICAgfTsKKwogICAgIFdURjo6U3RyaW5n
CiAgICAgd2Via2l0VXNlckFnZW50KCk7CiAKQEAgLTMyNiw2ICszNDUsOSBAQCBleHRlcm4gIkMi
IHsKICAgICBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uKgogICAgIHdlYmtpdF9nZW9s
b2NhdGlvbl9wb2xpY3lfZGVjaXNpb25fbmV3KFdlYktpdFdlYkZyYW1lKiwgV2ViQ29yZTo6R2Vv
bG9jYXRpb24qKTsKIAorICAgIGdkb3VibGUgCisgICAgd2ViVmlld0dldERQSShXZWJLaXRXZWJW
aWV3KiB3ZWJWaWV3KTsKKwogICAgIC8vIEZJWE1FOiBtb3ZlIHRoaXMgdG8gd2Via2l0bmV0d29y
a3JlcXVlc3QuaCBvbmNlIHRoZSBBUEkgaXMgYWdyZWVkIHVwb24uCiAgICAgV0VCS0lUX0FQSSBT
b3VwTWVzc2FnZSoKICAgICB3ZWJraXRfbmV0d29ya19yZXF1ZXN0X2dldF9tZXNzYWdlKFdlYktp
dE5ldHdvcmtSZXF1ZXN0KiByZXF1ZXN0KTsKQEAgLTQzMiw2ICs0NTQsOCBAQCBleHRlcm4gIkMi
IHsKIAogICAgIHZvaWQgd2Via2l0V2ViVmlld0VudGVyRnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3
KiB3ZWJWaWV3LCBXZWJDb3JlOjpOb2RlKiBub2RlKTsKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdF
eGl0RnVsbHNjcmVlbihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KTsKKworICAgIHZvaWQgd2Via2l0
Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyosIGJv
b2wpOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYTU2NmUK
LS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJp
YnV0ZXMuY3BwCkBAIC0wLDAgKzEsNDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpv
b25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgQ29sbGFib3Jh
IEx0ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIndlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5oIgorCisjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAid2Via2l0cHJpdmF0ZS5o
IgorCisjaW5jbHVkZSA8Z2xpYi9naTE4bi1saWIuaD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtp
dHZpZXdwb3J0YXR0cmlidXRlcworICogQHNob3J0X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIHRo
ZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIG9mIGEgd2ViIHBhZ2UKKyAqIEBzZWVfYWxzbzogI1dlYktp
dFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZAorICoKKyAqICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgb2ZmZXJzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdl
bnRzIHRvCisgKiBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQuIEl0IGNvbnRhaW5zIHRoZSBz
aXplLCBpbml0aWFsIHNjYWxlIHdpdGggbGltaXRzLAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0
IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8gc2NhbGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3
cG9ydC4KKyAqIFRoaXMgbWFrZXMgYSB3ZWIgcGFnZSBmaXQgdGhlIGRldmljZSBzY3JlZW4uCisg
KgorICogWW91IG5lZWQgdG8gY2FsbCAjd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21w
dXRlIHRvIGdldCB0aGUgb3B0aW1hbAorICogdmlld3BvcnQgYXR0cmlidXRlcyB3aGVuIHRoZSBz
aXplIG9mIHRoZSB2aXNpYmxlIHZpZXdwb3J0IGlzIGNoYW5nZWQuCisgKgorICogI1dlYktpdFdl
YlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVk
IHdpdGgKKyAqIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdoZW4geW91IGNhbGwgI3dl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAqCisgKiBGb3IgbW9yZSBpbmZv
cm1hdGlvbiBvbiB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSBy
ZWZlcmVuY2UgbGlicmFyeSBhdAorICogaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJp
L2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJp
aHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisgKgorICogPGluZm9ybWFsZXhhbXBsZT48
cHJvZ3JhbWxpc3Rpbmc+CisgKiAvPCEtLSAtLT4qIENvbm5lY3QgdG8gdGhlIHZpZXdwb3J0LWF0
dHJpYnV0ZXMtY2hhbmdlcyBzaWduYWwgKjwhLS0gLS0+LworICogZ19zaWduYWxfY29ubmVjdCAo
d2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIEdfQ0FMTEJBQ0sgKHZpZXdw
b3J0X2NoYW5nZV9jYiksIHdlYlZpZXcpOworICoKKyAqIC88IS0tIC0tPiogSGFuZGxlIHRoZSBz
aWduYWwgdG8gZ2V0IHRoZSBpbml0aWFsIHNjYWxlIHZhbHVlICo8IS0tIC0tPi8KKyAqIHN0YXRp
YyB2b2lkCisgKiB2aWV3cG9ydF9jaGFuZ2VfY2IoV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCisgKiB7CisgKiAgICAg
Z2Zsb2F0IGluaXRpYWxTY2FsZTsKKyAqICAgICBnX29iamVjdF9nZXQoR19PQkpFQ1Qodmlld3Bv
cnRBdHRyaWJ1dGVzKSwgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVM
TCk7CisgKiAgICAgd2Via2l0X3dlYl92aWV3X3NldF9mdWxsX2NvbnRlbnRfem9vbSh3ZWJWaWV3
LCBUUlVFKTsKKyAqICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwod2ViVmlldywg
aW5pdGlhbFNjYWxlKTsKKyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1w
bGU+CisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1NDUkVFTl9XSURUSCwKKyAg
ICBQUk9QX1NDUkVFTl9IRUlHSFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgUFJP
UF9BVkFJTEFCTEVfSEVJR0hULAorICAgIFBST1BfV0lEVEgsCisgICAgUFJPUF9IRUlHSFQsCisg
ICAgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFD
VE9SLAorICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgUFJPUF9ERVZJQ0VfUElY
RUxfUkFUSU8sCisgICAgUFJPUF9VU0VSX1NDQUxBQkxFLAorICAgIFBST1BfVkFMSUQKK307CisK
K0dfREVGSU5FX1RZUEUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzLCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlcywgR19UWVBFX09CSkVDVCk7CisKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FU
VFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRF
KChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2
YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpOworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMpOworCitzdGF0aWMgdm9pZCB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
c0NsYXNzKiBrY2xhc3MpCit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09C
SkVDVF9DTEFTUyhrY2xhc3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5Owor
CisgICAgR1BhcmFtRmxhZ3MgZmxhZ3MgPSAoR1BhcmFtRmxhZ3MpKFdFQktJVF9QQVJBTV9SRUFE
QUJMRSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpzY3JlZW4t
d2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1
ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2
aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVy
cmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8g
dGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X1NDUkVFTl9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NyZWVu
LXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlNjcmVlbiBX
aWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdpZHRo
IG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6c2NyZWVuLWhlaWdodDoKKyAgICAgKgorICAgICAqIFRo
ZSBoZWlnaHQgb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxs
eQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29t
cHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1
ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2
ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1NDUkVFTl9IRUlHSFQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgInNjcmVlbi1oZWlnaHQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiU2NyZWVuIEhlaWdodCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuLiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dHM6YXZhaWxhYmxlLXdpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSBj
dXJyZW50IHZpc2libGUgYXJlYS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICogc2Ft
ZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNhc2Vz
CisgICAgICogeW91IG1heSBoYXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dlciB0
aGFuIHRoZSB2aXNpYmxlCisgICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0IGlu
aXRpYWxpemVkIHRvIHRoZSBzaXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQsIGJ1
dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0V2Vi
Vmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAgICog
bGV0IHRoZSBlbmdpbmUga25vdyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMKKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImF2YWlsYWJsZS13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJBdmFpbGFibGUgV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsK
KworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmF2YWlsYWJsZS1oZWln
aHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBjdXJyZW50IHZpc2libGUgYXJl
YS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICogc2FtZSBhcyB0aGUgc3BhY2UgYWxs
b2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNhc2VzCisgICAgICogeW91IG1heSBo
YXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlCisg
ICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0IGluaXRpYWxpemVkIHRvIHRoZSBz
aXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRl
IGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAgICogbGV0IHRoZSBlbmdpbmUga25v
dyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMKKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFCTEVfSEVJ
R0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2lu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtaGVpZ2h0
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkF2YWlsYWJsZSBIZWln
aHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWlnaHQg
b2YgdGhlIHZpc2libGUgYXJlYS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp3aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3
aWR0aCBvZiB0aGUgdmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIldpZHRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpoZWlnaHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVp
Z2h0IG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJIZWlnaHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czppbml0aWFsLXNjYWxlLWZhY3RvcjoKKyAgICAg
KgorICAgICAqIFRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJpbml0aWFsLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJJbml0aWFsIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGluaXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
bGFncykpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWluaW11
bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUg
dmlld3BvcnQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluaW11bS1zY2FsZS1mYWN0b3IiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWluaW11bSBTY2FsZSBGYWN0b3Ii
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtaW5pbXVtIHNj
YWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRzOm1heGltdW0tc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhl
IG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqCisgICAgICogU2luY2U6IDEu
My41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX01BWElNVU1f
U0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heGlt
dW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
Ik1heGltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJUaGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisKKyAg
ICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtcGl4ZWwtcmF0aW86
CisgICAgICoKKyAgICAgKiBUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU8sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGV2aWNlLXBpeGVsLXJhdGlvIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBQaXhlbCBSYXRpbyIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGRldmljZSBwaXhlbCByYXRpbyBvZiB0aGUg
dmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZsYWdzKSk7CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dHM6dXNlci1zY2FsYWJsZToKKyAgICAgKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBu
b3QgdGhlIHVzZXIgY2FuIHpvb20gaW4gYW5kIG91dC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAx
LjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9VU0VSX1ND
QUxBQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVj
X2Jvb2xlYW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJ1c2VyLXNj
YWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJVc2VyIFNj
YWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRlcm1p
bmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29tIGluIGFuZCBvdXQuIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmxhZ3MpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRzOnZhbGlkOgorICAgICAqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9y
IG5vdCB0aGUgYXR0cmlidXRlcyBhcmUKKyAgICAgKiB2YWxpZC4gI1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyBhcmUgb25seSB2YWxpZCBvbiBwYWdlcyB3aGljaAorICAgICAqIGhhdmUgYSB2aWV3
cG9ydCBtZXRhIHRhZywgYW5kIGhhdmUgYWxyZWFkeSBoYWQgdGhlIGF0dHJpYnV0ZXMKKyAgICAg
KiBjYWxjdWxhdGVkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1ZBTElELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJ2YWxpZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVmFsaWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkRldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGF0dHJpYnV0ZXMgYXJlIHZhbGlk
LCBhbmQgY2FuIGJlIHVzZWQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzKSk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7Cisg
ICAgdmlld3BvcnQtPnByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFU
RSh2aWV3cG9ydCk7CisgICAgdmlld3BvcnQtPnByaXYtPmlzVmFsaWQgPSBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisKKyAg
ICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfU0NSRUVOX1dJRFRIOgorICAgICAg
ICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPnNjcmVlbldpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2lu
dCh2YWx1ZSwgcHJpdi0+c2NyZWVuSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2
LT5hdmFpbGFibGVXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFC
TEVfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmF2YWlsYWJs
ZUhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9XSURUSDoKKyAgICAgICAg
Z192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT53aWR0aCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+
aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0lOSVRJQUxfU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+aW5pdGlhbFNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01JTklNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWluaW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BWElNVU1fU0NBTEVfRkFD
VE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF4aW11bVNjYWxl
RmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9QSVhFTF9SQVRJ
TzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPmRldmljZVBpeGVsUmF0
aW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVVNFUl9TQ0FMQUJMRToKKyAgICAg
ICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+dXNlclNjYWxhYmxlKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29s
ZWFuKHZhbHVlLCBwcml2LT5pc1ZhbGlkKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9p
ZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX3NldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50
IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMgKnBzcGVjKQoreworICAg
IFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJ
RVdQT1JUX0FUVFJJQlVURVMob2JqZWN0KTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQ
cml2YXRlKiBwcml2ID0gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2OworCisgICAgc3dpdGNoIChw
cm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX1NDUkVFTl9XSURUSDoKKyAgICAgICAgcHJpdi0+c2Ny
ZWVuV2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfU0NSRUVOX0hFSUdIVDoKKyAgICAgICAgcHJpdi0+c2NyZWVuSGVpZ2h0ID0gZ192
YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlM
QUJMRV9XSURUSDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlV2lkdGggPSBnX3ZhbHVlX2dldF9p
bnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX0hFSUdI
VDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0gZ192YWx1ZV9nZXRfaW50KHZhbHVl
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9J
TlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3ZvaWQgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzLCBib29sIG1ha2VWYWxp
ZCkKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gdmlld3Bv
cnRBdHRyaWJ1dGVzLT5wcml2OworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSBwcml2LT53
ZWJWaWV3OworCisgICAgLy8gR2RrU2NyZWVuKiBzY3JlZW4gPSBndGtfd2lkZ2V0X2dldF9zY3Jl
ZW4oR1RLX1dJREdFVCh3ZWJWaWV3KSk7CisgICAgLy8gcHJpdi0+c2NyZWVuV2lkdGggPSBnZGtf
c2NyZWVuX2dldF93aWR0aChzY3JlZW4pOworICAgIC8vIHByaXYtPnNjcmVlbkhlaWdodCA9IGdk
a19zY3JlZW5fZ2V0X2hlaWdodChzY3JlZW4pOworCisgICAgSW50UmVjdCB3aW5kb3dSZWN0KHdl
YlZpZXctPnByaXYtPmNvcmVQYWdlLT5jaHJvbWUoKS0+d2luZG93UmVjdCgpKTsKKyAgICBwcml2
LT5zY3JlZW5XaWR0aCA9IHdpbmRvd1JlY3Qud2lkdGgoKTsKKyAgICBwcml2LT5zY3JlZW5IZWln
aHQgPSB3aW5kb3dSZWN0LmhlaWdodCgpOworCisgICAgSW50UmVjdCByZWN0KHdlYlZpZXctPnBy
aXYtPmNvcmVQYWdlLT5jaHJvbWUoKS0+cGFnZVJlY3QoKSk7CisgICAgcHJpdi0+YXZhaWxhYmxl
V2lkdGggPSByZWN0LndpZHRoKCk7CisgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0gcmVjdC5o
ZWlnaHQoKTsKKworICAgIC8vIEZpcnN0IG9mIGFsbCwgd2UgZ2l2ZSB0aGUgYXBwbGljYXRpb24g
YW4gb3Bwb3J0dW5pdHkgdG8gb3ZlcnJpZGUgc29tZSBvZiB0aGUgdmFsdWVzLgorICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUt
cmVxdWVzdGVkIiwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworICAgIFZpZXdwb3J0QXJndW1lbnRz
IGFyZ3VtZW50cyA9IHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLT5tYWluRnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKworICAgIC8vIFRoZSBEZXNrdG9wV2lkdGggaGFz
IDk4MCwgYmVjYXVzZSB0aGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRl
c2lnbmVkIGZvciBkZXNrdG9wIHVzZXIgYWdlbnRzLgorICAgIFZpZXdwb3J0QXR0cmlidXRlcyBh
dHRyaWJ1dGVzID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgcHJp
di0+c2NyZWVuV2lkdGgsIHByaXYtPnNjcmVlbkhlaWdodCwgMTYwLCBJbnRTaXplKHByaXYtPmF2
YWlsYWJsZVdpZHRoLCBwcml2LT5hdmFpbGFibGVIZWlnaHQpKTsKKworICAgIHByaXYtPndpZHRo
ID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CisgICAgcHJpdi0+aGVpZ2h0ID0gYXR0
cmlidXRlcy5sYXlvdXRTaXplLmhlaWdodCgpOworICAgIHByaXYtPmluaXRpYWxTY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOworICAgIHByaXYtPm1pbmltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAgIHByaXYtPm1heGltdW1TY2FsZUZhY3Rv
ciA9IGF0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworICAgIHByaXYtPmRldmljZVBpeGVsUmF0aW8g
PSBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87CisgICAgcHJpdi0+dXNlclNjYWxhYmxlID0g
YXJndW1lbnRzLnVzZXJTY2FsYWJsZTsKKworICAgIGlmIChtYWtlVmFsaWQpIHsKKyAgICAgICAg
cHJpdi0+aXNWYWxpZCA9IFRSVUU7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09CSkVDVCh2
aWV3cG9ydEF0dHJpYnV0ZXMpLCAidmFsaWQiKTsKKyAgICB9CisKKyAgICAvLyBOb3cgbGV0IHRo
ZSBhcHBsaWNhdGlvbiBrbm93IGl0IGlzIHNhZmUgdG8gdXNlIHRoZSBuZXcKKyAgICAvLyB2YWx1
ZXMuCisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1
dGVzLWF2YWlsYWJsZSIsIHZpZXdwb3J0QXR0cmlidXRlcyk7Cit9CisKK3ZvaWQgd2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmll
d3BvcnRBdHRyaWJ1dGVzKQoreworICAgIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0
ZSh2aWV3cG9ydEF0dHJpYnV0ZXMsIGZhbHNlKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNGJmNzM3NAotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZp
ZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorCisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitH
X0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyAg
ICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlwZSgpKQorI2RlZmlu
ZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVD
S19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklC
VVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXND
bGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAg
ICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFU19DTEFT
UyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9W
SUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNf
R0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3Mp
KQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0
ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlICpwcml2OworfTsKKwor
c3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7CisgICAgR09iamVjdENsYXNz
IHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8K
KyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtp
dF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lk
KTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9B
UEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBlICAgICAgICAgICAg
ICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfbmV3KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpOworCitX
RUJLSVRfQVBJIHZvaWQKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZShXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKK0dfRU5EX0RFQ0xT
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5j
cHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAppbmRleCA2NTMxZWUxLi5m
NTgyZWY3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAor
KysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcApAQCAtMTAsNiArMTAsNyBA
QAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2FsaWEgUy5MLgogICogIENvcHlyaWdo
dCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9naWVzIEluYy4KICAqICBDb3B5cmln
aHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1
ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC00Myw3ICs0NCw3IEBA
CiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2Uu
aCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIK
ICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKICNpbmNsdWRlICJDb250ZXh0TWVu
dUNsaWVudEd0ay5oIgpAQCAtNzMsNiArNzQsNyBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQu
aCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRH
dGsuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRo
SGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhZ2VDYWNoZS5oIgpAQCAtMTczLDYgKzE3NSw4IEBAIGVudW0gewogICAgIEdFT0xPQ0FUSU9O
X1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAgT05MT0FEX0VWRU5ULAogICAgIEZSQU1F
X0NSRUFURUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRFU19SRUNPTVBVVEVfUkVRVUVTVEVELAor
ICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxBQkxFLAogICAgIExBU1RfU0lHTkFMCiB9Owog
CkBAIC0xODYsNiArMTkwLDcgQEAgZW51bSB7CiAgICAgUFJPUF9FRElUQUJMRSwKICAgICBQUk9Q
X1NFVFRJTkdTLAogICAgIFBST1BfV0VCX0lOU1BFQ1RPUiwKKyAgICBQUk9QX1ZJRVdQT1JUX0FU
VFJJQlVURVMsCiAgICAgUFJPUF9XSU5ET1dfRkVBVFVSRVMsCiAgICAgUFJPUF9UUkFOU1BBUkVO
VCwKICAgICBQUk9QX1pPT01fTEVWRUwsCkBAIC00ODMsNiArNDg4LDkgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3Bf
aWQsIEdWYWx1ZSoKICAgICBjYXNlIFBST1BfV0VCX0lOU1BFQ1RPUjoKICAgICAgICAgZ192YWx1
ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3
KSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTOgor
ICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfdmll
d3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3KSk7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJP
UF9XSU5ET1dfRkVBVFVSRVM6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF93aW5kb3dfZmVhdHVyZXMod2ViVmlldykpOwogICAgICAgICBicmVh
azsKQEAgLTEzMjUsNiArMTMzMyw3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNw
b3NlKEdPYmplY3QqIG9iamVjdCkKICAgICB9CiAKICAgICBwcml2LT53ZWJJbnNwZWN0b3IuY2xl
YXIoKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuY2xlYXIoKTsKICAgICBwcml2LT53
ZWJXaW5kb3dGZWF0dXJlcy5jbGVhcigpOwogICAgIHByaXYtPm1haW5SZXNvdXJjZS5jbGVhcigp
OwogICAgIHByaXYtPnN1YlJlc291cmNlcy5jbGVhcigpOwpAQCAtMTM4OCw3ICsxMzk3LDcgQEAg
c3RhdGljIEF0a09iamVjdCogd2Via2l0X3dlYl92aWV3X2dldF9hY2Nlc3NpYmxlKEd0a1dpZGdl
dCogd2lkZ2V0KQogICAgIHJldHVybiBjb3JlQWNjZXNzaWJsZS0+d3JhcHBlcigpOwogfQogCi1z
dGF0aWMgZ2RvdWJsZSB3ZWJWaWV3R2V0RFBJKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCitnZG91
YmxlIHdlYlZpZXdHZXREUEkoV2ViS2l0V2ViVmlldyogd2ViVmlldykKIHsKICAgICBXZWJLaXRX
ZWJWaWV3UHJpdmF0ZSogcHJpdiA9IHdlYlZpZXctPnByaXY7CiAgICAgV2ViS2l0V2ViU2V0dGlu
Z3MqIHdlYlNldHRpbmdzID0gcHJpdi0+d2ViU2V0dGluZ3MuZ2V0KCk7CkBAIC0yNTkyLDYgKzI2
MDEsNTggQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2Vi
Vmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgICAgICBXRUJLSVRfVFlQRV9XRUJfRlJB
TUUpOwogCiAgICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVz
LXJlY29tcHV0ZS1yZXF1ZXN0ZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2gg
cmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMu
CisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMt
cmVjb21wdXRlLXJlcXVlc3RlZAorICAgICAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hlbmV2
ZXIgcmVjb21wdXRpbmcgdGhlIHZhbHVlcyBvZiB0aGUKKyAgICAgKiB2aWV3cG9ydCBhdHRyaWJ1
dGVzIGlzIHJlcXVpcmVkLiBUaGF0IG1heSBoYXBwZW4gYmVjYXVzZSB0aGUKKyAgICAgKiB2aWV3
cG9ydCBtZXRhIHRhZyBvZiBhIHBhZ2UgaGFzIGNoYW5nZWQsIG9yIGl0IG1heSBoYXBwZW4gYXMg
YQorICAgICAqIGNvbnNlcXVlbmNlIG9mIGFuIGV4cGxpY2l0IGJyb3dzZXIgcmVxdWVzdCAoY2F1
c2VkIGJ5IHNjcmVlbgorICAgICAqIHJvdGF0aW9uLCByZXNpemluZywgb3Igc2ltaWxhciByZWFz
b25zKS4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdpbGwg
aGF2ZSBzY3JlZW4sIGFuZCBhdmFpbGFibGUKKyAgICAgKiBzaXplcyBwcmUtZmlsbGVkIGJ5IHZh
bHVlcyB0aGF0IG1ha2Ugc2Vuc2UgZm9yIHRoZSBjdXJyZW50CisgICAgICogc2NyZWVuIGFuZCB3
aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIHRob3NlIHZhbHVlcyBpZiB5b3UKKyAgICAgKiBo
YXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIChmb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWRlIHlvdXIK
KyAgICAgKiB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSB2aXNpYmxlIGFyZWEsIHlv
dSBzaG91bGQKKyAgICAgKiBvdmVycmlkZSB0aGUgYXZhaWxhYmxlLXdpZHRoIGFuZCBhdmFpbGFi
bGUtaGVpZ2h0IHByb3BlcnRpZXMgdG8KKyAgICAgKiB0aGUgYWN0dWFsIHZpc2libGUgYXJlYSku
CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICB3ZWJraXRfd2ViX3Zp
ZXdfc2lnbmFsc1tWSUVXUE9SVF9BVFRSSUJVVEVTX0FWQUlMQUJMRV0gPSBnX3NpZ25hbF9uZXco
InZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsCisgICAgICAgICAgICBH
X1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFn
cykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxf
Vk9JRF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCisgICAgICogV2ViS2l0
V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUKKyAgICAgKiBAd2ViX3ZpZXc6
IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9h
dHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZp
ZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZp
ZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCB3aWxsIGJlIGVtaXR0ZWQgd2l0aCBAdmlld3BvcnRf
YXR0cmlidXRlcworICAgICAqIHdoZW4gdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYXJlIHVwZGF0
ZWQgaW4gdGhlIGNhc2Ugb2YgbG9hZGluZyB3ZWIgcGFnZXMgY29udGFpbgorICAgICAqIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVz
X3JlY29tcHV0ZS4KKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlcyBpcyB1c2VkIHRvIGNvbnRy
b2wgdGhlIHZpZXdwb3J0IGxheW91dCB0byBtYWtlIGEgd2ViIHBhZ2UgZml0IHRoZSBkZXZpY2Ug
c2NyZWVuLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgd2Via2l0
X3dlYl92aWV3X3NpZ25hbHNbVklFV1BPUlRfQVRUUklCVVRFU19BVkFJTEFCTEVdID0gZ19zaWdu
YWxfbmV3KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJsZSIsCisgICAgICAgICAgICBHX1RZ
UEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxGbGFncyko
R19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJL
SVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCiAgICAgICogaW1wbGVtZW50
YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+Y3Jl
YXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3OwpAQCAt
MjgzMyw2ICsyODk0LDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKIAogICAgIC8qKgorICAgICogV2ViS2l0V2ViVmlldzp2aWV3cG9ydC1hdHRyaWJ1dGVzOgor
ICAgICoKKyAgICAqIFRoZSBhc3NvY2lhdGVkICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5z
dGFuY2UuCisgICAgKgorICAgICogU2luY2U6IDEuMy41CisgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVU
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVmlld3BvcnQgQXR0cmlidXRlcyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgYXNzb2NpYXRlZCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICAvKioKICAgICAqIFdlYktpdFdlYlZpZXc6d2luZG93LWZlYXR1cmVzOgogICAgICoKICAgICAq
IEFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMgaW5zdGFuY2UuCkBAIC0zMjU5
LDYgKzMzMzQsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKICAgICBwcml2LT53ZWJJbnNwZWN0b3IgPSBhZG9wdFBsYXRmb3JtUmVm
KFdFQktJVF9XRUJfSU5TUEVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfSU5TUEVD
VE9SLCBOVUxMKSkpOwogICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF9pbnNwZWN0b3JfY2xp
ZW50KHByaXYtPndlYkluc3BlY3Rvci5nZXQoKSwgcHJpdi0+Y29yZVBhZ2UpOwogCisgICAgLy8g
QW5kIG91ciBWaWV3cG9ydEF0dHJpYnV0ZXMgZnJpZW5kLgorICAgIHByaXYtPnZpZXdwb3J0QXR0
cmlidXRlcyA9IGFkb3B0UGxhdGZvcm1SZWYoV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIE5VTEwpKSk7CisgICAg
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT53ZWJWaWV3ID0gd2ViVmlldzsKKwogICAg
IC8vIFRoZSBzbWFydCBwb2ludGVyIHdpbGwgY2FsbCBnX29iamVjdF9yZWZfc2luayBvbiB0aGVz
ZSBhZGp1c3RtZW50cy4KICAgICBwcml2LT5ob3Jpem9udGFsQWRqdXN0bWVudCA9IEdUS19BREpV
U1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7
CiAgICAgcHJpdi0+dmVydGljYWxBZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVz
dG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTsKQEAgLTMzOTgsNiArMzQ3
NywyOSBAQCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9y
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPndlYklu
c3BlY3Rvci5nZXQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXM6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIE9idGFp
bnMgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICog
I1dlYktpdFdlYlZpZXcuIEV2ZXJ5ICNXZWJLaXRXZWJWaWV3IG9iamVjdCBoYXMgYQorICogI1dl
YktpdFdlYlZpZXdwb3JfQXR0cmlidXRlcyBvYmplY3QgYXR0YWNoZWQgdG8gaXQgYXMgc29vbiBh
cyBpdCBpcworICogY3JlYXRlZCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIE5V
TEwgaWYgdGhlIGFyZ3VtZW50IGlzCisgKiBub3QgYSB2YWxpZCAjV2ViS2l0V2ViVmlldy4gRG8g
bm90ZSBob3dldmVyIHRoYXQgdGhlIHZpZXdwb3J0CisgKiBhdHRyaWJ1dGVzIG9iamVjdCBvbmx5
IGNvbnRhaW5zIHZhbGlkIGluZm9ybWF0aW9uIHdoZW4gdGhlIGN1cnJlbnQKKyAqIHBhZ2UgaGFz
IGEgdmlld3BvcnQgbWV0YSB0YWcuIFlvdSBjYW4gY2hlY2sgd2hldGhlciB0aGUgZGF0YSBzaG91
bGQKKyAqIGJlIHVzZWQgYnkgY2hlY2tpbmcgdGhlICNXZWJLaXRWaWV3cG9ydDp2YWxpZCBwcm9w
ZXJ0eS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisgKgorICogU2luY2U6IDEuMy41CisgKi8KK1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2Zh
aWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKyAgICByZXR1cm4gd2ViVmlldy0+
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpOworfQorCiAvLyBpbnRlcm5hbAogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X3NldF93aW5kb3dfZmVhdHVyZXMoV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMqIHdlYldpbmRvd0ZlYXR1cmVzKQogewpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDlkZmI2NTQuLjZiMWU5YzUgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQwMSw2ICs0MDEsOSBAQCB3ZWJraXRfZ2V0X2NhY2hl
X21vZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRfQVBJIFdlYktp
dERPTURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAg
ICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJVF9BUEkgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogR19FTkRf
REVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWlu
LmMgYi9XZWJLaXRUb29scy9HdGtMYXVuY2hlci9tYWluLmMKaW5kZXggNGFiZWUwOC4uYTYyMTNi
OSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvR3RrTGF1bmNoZXIvbWFpbi5jCisrKyBiL1dlYktp
dFRvb2xzL0d0a0xhdW5jaGVyL21haW4uYwpAQCAtMTI5LDYgKzEyOSw2NSBAQCBjbG9zZV93ZWJf
dmlld19jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a1dpZGdldCogd2luZG93KQogICAg
IHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZAordmlld3BvcnRfcmVjb21wdXRlX2NiIChX
ZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1
dGVzLCBHdGtXaWRnZXQqIHdpbmRvdykKK3sKKyAgICBpbnQgc2NyZWVuX3dpZHRoLCBzY3JlZW5f
aGVpZ2h0OworICAgIGludCBhdmFpbGFibGVfd2lkdGgsIGF2YWlsYWJsZV9oZWlnaHQ7CisgICAg
Z19vYmplY3RfZ2V0IChHX09CSkVDVCAoYXR0cmlidXRlcyksCisgICAgICAgICAgICAgICAgICAi
c2NyZWVuLXdpZHRoIiwgJnNjcmVlbl93aWR0aCwgInNjcmVlbi1oZWlnaHQiLCAmc2NyZWVuX2hl
aWdodCwKKyAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtd2lkdGgiLCAmYXZhaWxhYmxlX3dp
ZHRoLCAiYXZhaWxhYmxlLWhlaWdodCIsICZhdmFpbGFibGVfaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgTlVMTCk7CisgICAgZ19tZXNzYWdlICgiU2NyZWVuOiAlZHglZCB8IEF2YWlsYWJsZTog
JWR4JWQiLCBzY3JlZW5fd2lkdGgsIHNjcmVlbl9oZWlnaHQsIGF2YWlsYWJsZV93aWR0aCwgYXZh
aWxhYmxlX2hlaWdodCk7Cit9CisKK3N0YXRpYyB2b2lkCit1cGRhdGVfZnJvbV92aWV3cG9ydF9h
dHRyaWJ1dGVzIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMsIFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3KQoreworICAgIGdib29sZWFuIGlzX3ZhbGlkOworICAgIGdfb2JqZWN0
X2dldChhdHRyaWJ1dGVzLCAidmFsaWQiLCAmaXNfdmFsaWQsIE5VTEwpOworCisgICAgaWYgKGlz
X3ZhbGlkKSB7CisgICAgICAgIGdpbnQgd2lkdGgsIGhlaWdodDsKKyAgICAgICAgZ2Zsb2F0IGlu
aXRpYWxTY2FsZSwgbWluaW11bVNjYWxlLCBtYXhpbXVtU2NhbGUsIGRldmljZVBpeGVsUmF0aW87
CisgICAgICAgIGdib29sZWFuIHVzZXJTY2FsYWJsZTsKKyAgICAgICAgZ19vYmplY3RfZ2V0IChH
X09CSkVDVCAoYXR0cmlidXRlcyksICJ3aWR0aCIsICZ3aWR0aCwgImhlaWdodCIsICZoZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxT
Y2FsZSwgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwgJm1pbmltdW1TY2FsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0b3IiLCAmbWF4aW11bVNjYWxlLCAiZGV2aWNl
LXBpeGVsLXJhdGlvIiwgJmRldmljZVBpeGVsUmF0aW8sCisgICAgICAgICAgICAgICAgICAgICAg
InVzZXItc2NhbGFibGUiLCAmdXNlclNjYWxhYmxlLCBOVUxMKTsKKyAgICAgICAgcHJpbnRmKCJ3
LGgoJWQsJWQpIGluaXQsbWluLG1heCglZiwlZiwlZikgc2NhbGFibGUsIGRldmljZSBwaXhlbCBy
YXRpbyglZCwlZikgXG4iLAorICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgaW5pdGlhbFNj
YWxlLCBtaW5pbXVtU2NhbGUsIG1heGltdW1TY2FsZSwgdXNlclNjYWxhYmxlLCBkZXZpY2VQaXhl
bFJhdGlvKTsKKworICAgICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgKHdlYl92
aWV3LCBpbml0aWFsU2NhbGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdfbWVzc2FnZSAoIlZp
ZXdwb3J0QXR0cmlidXRlcyBpbnZhbGlkYXRlZC4iKTsKKyAgICAgICAgd2Via2l0X3dlYl92aWV3
X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgMS4wKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lk
IHZpZXdwb3J0X2F2YWlsYWJsZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRlcywgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICB1cGRh
dGVfZnJvbV92aWV3cG9ydF9hdHRyaWJ1dGVzIChhdHRyaWJ1dGVzLCB3ZWJfdmlldyk7Cit9CisK
K3N0YXRpYyB2b2lkCit2aWV3cG9ydF92YWxpZF9jaGFuZ2VkX2NiIChXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMqIGF0dHJpYnV0ZXMsIEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJLaXRXZWJWaWV3KiB3
ZWJfdmlldykKK3sKKyAgICB1cGRhdGVfZnJvbV92aWV3cG9ydF9hdHRyaWJ1dGVzIChhdHRyaWJ1
dGVzLCB3ZWJfdmlldyk7Cit9CisKK3N0YXRpYyB2b2lkCit3aW5kb3dfc2l6ZV9jaGFuZ2VfY2Io
V2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIEd0a0FsbG9jYXRpb24qIGFsbG9jYXRpb24sIGdwb2lu
dGVyIHVzZXJfZGF0YSkKK3sKKyAgICBzdGF0aWMgaW50IHByZXZpb3VzX3dpZHRoID0gMDsKKwor
ICAgIGlmIChwcmV2aW91c193aWR0aCA9PSBhbGxvY2F0aW9uLT53aWR0aCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlICh3ZWJraXRf
d2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMgKHdlYl92aWV3KSk7CisgICAgcHJldmlv
dXNfd2lkdGggPSBhbGxvY2F0aW9uLT53aWR0aDsKK30KKwogc3RhdGljIEd0a1dpZGdldCoKIGNy
ZWF0ZV9icm93c2VyIChHdGtXaWRnZXQqIHdpbmRvdywgR3RrV2lkZ2V0KiB1cmlfZW50cnksIEd0
a1dpZGdldCogc3RhdHVzYmFyLCBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldykKIHsKQEAgLTE0NCw2
ICsyMDMsMTIgQEAgY3JlYXRlX2Jyb3dzZXIgKEd0a1dpZGdldCogd2luZG93LCBHdGtXaWRnZXQq
IHVyaV9lbnRyeSwgR3RrV2lkZ2V0KiBzdGF0dXNiYXIsIFcKICAgICBnX3NpZ25hbF9jb25uZWN0
ICh3ZWJfdmlldywgImNyZWF0ZS13ZWItdmlldyIsIEdfQ0FMTEJBQ0sgKGNyZWF0ZV93ZWJfdmll
d19jYiksIHdpbmRvdyk7CiAgICAgZ19zaWduYWxfY29ubmVjdCAod2ViX3ZpZXcsICJ3ZWItdmll
dy1yZWFkeSIsIEdfQ0FMTEJBQ0sgKHdlYl92aWV3X3JlYWR5X2NiKSwgd2luZG93KTsKICAgICBn
X3NpZ25hbF9jb25uZWN0ICh3ZWJfdmlldywgImNsb3NlLXdlYi12aWV3IiwgR19DQUxMQkFDSyAo
Y2xvc2Vfd2ViX3ZpZXdfY2IpLCB3aW5kb3cpOworICAgIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92
aWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwgR19DQUxMQkFD
SyAodmlld3BvcnRfcmVjb21wdXRlX2NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
ICh3ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIiwgR19DQUxMQkFDSyAo
dmlld3BvcnRfYXZhaWxhYmxlX2NiKSwgd2luZG93KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0ICh3
ZWJfdmlldywgInNpemUtYWxsb2NhdGUiLCBHX0NBTExCQUNLKHdpbmRvd19zaXplX2NoYW5nZV9j
YiksIHdlYl92aWV3KTsKKworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRl
cyA9IHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJfdmlldyk7Cisg
ICAgZ19zaWduYWxfY29ubmVjdCAoYXR0cmlidXRlcywgIm5vdGlmeTo6dmFsaWQiLCBHX0NBTExC
QUNLICh2aWV3cG9ydF92YWxpZF9jaGFuZ2VkX2NiKSwgd2ViX3ZpZXcpOwogCiAgICAgcmV0dXJu
IHNjcm9sbGVkX3dpbmRvdzsKIH0KQEAgLTIwOSwxMiArMjc0LDE0IEBAIGNyZWF0ZV93aW5kb3cg
KFdlYktpdFdlYlZpZXcqKiBvdXRfd2ViX3ZpZXcpCiAgICAgR3RrV2lkZ2V0ICpzdGF0dXNiYXI7
CiAKICAgICBnX2F0b21pY19pbnRfaW5jICgmd2luZG93X2NvdW50KTsKLSAgIAorCiAgICAgd2lu
ZG93ID0gZ3RrX3dpbmRvd19uZXcgKEdUS19XSU5ET1dfVE9QTEVWRUwpOwogICAgIGd0a193aW5k
b3dfc2V0X2RlZmF1bHRfc2l6ZSAoR1RLX1dJTkRPVyAod2luZG93KSwgODAwLCA2MDApOwogICAg
IGd0a193aWRnZXRfc2V0X25hbWUgKHdpbmRvdywgIkd0a0xhdW5jaGVyIik7CiAKICAgICB3ZWJf
dmlldyA9IFdFQktJVF9XRUJfVklFVyAod2Via2l0X3dlYl92aWV3X25ldyAoKSk7CisgICAgd2Vi
a2l0X3dlYl92aWV3X3NldF9mdWxsX2NvbnRlbnRfem9vbSAod2ViX3ZpZXcsIFRSVUUpOworCiAg
ICAgdXJpX2VudHJ5ID0gZ3RrX2VudHJ5X25ldyAoKTsKIAogICAgIHZib3ggPSBndGtfdmJveF9u
ZXcgKEZBTFNFLCAwKTsKLS0gCjEuNy4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74400</attachid>
            <date>2010-11-19 09:54:41 -0800</date>
            <delta_ts>2010-12-06 12:09:21 -0800</delta_ts>
            <desc>Proposed patch11</desc>
            <filename>viewport11.diff</filename>
            <type>text/plain</type>
            <size>56361</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhYjUyOWI1Li40YjU1M2Y0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEt
MTkgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTExLTE5ICBZYWVsIEFoYXJvbiAgPHlhZWwu
YWhhcm9uQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ3RrL1NraXBwZWQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAppbmRleCAzZWYzOTFjLi42ODFhNjkwIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9ndGsvU2tpcHBlZApAQCAtNTU5MCw3ICs1NTkwLDggQEAgZnVsbHNjcmVlbi8KIGNhbnZh
cy9waGlsaXAvdGVzdHMvMmQucGF0aC5pc1BvaW50SW5QYXRoLmVkZ2UuaHRtbAogCiAjIHZpZXdw
b3J0IG1ldGEgdGFnIHN1cHBvcnQKLWZhc3Qvdmlld3BvcnQKKyMgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3NDgxCitmYXN0L3ZpZXdwb3J0L3ZpZXdwb3J0LTQ1Lmh0
bWwKIAogIyBQcmUtSE1UTDUgcGFyc2VyIHF1aXJrcyBvbmx5IGFwcGx5IHRvIHRoZSBtYWMgcG9y
dCBmb3Igbm93LgogZmFzdC9wYXJzZXIvcHJlLWh0bWw1LXBhcnNlci1xdWlya3MuaHRtbApkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay9DaGFuZ2VMb2cgYi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwppbmRl
eCBiYzAwYjg1Li4xMDlkNTUzIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvZ3RrL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDEwLTExLTE5ICBKb29u
ZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgZ29iamVjdCB0byBvZmZlciB0aGUgdmlld3BvcnQg
cHJvcGVydGllcyB0byB1c2VyIGFnZW50cy4KKyAgICAgICAgSXQgaXMgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIHRoYXQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHNpemUsIGluaXRpYWwgc2NhbGUg
d2l0aCBsaW1pdHMsIAorICAgICAgICBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBhIHVz
ZXIgaXMgYWJsZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICAgICAg
ICAKKyAgICAgICAgVGhpcyBmZWF0dXJlIHdhcyBpbnRyb2R1Y2VkIGJ5IFNhZmFyaSBvbiB0aGUg
aVBob25lLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiAKKyAgICAgICAgdGhlIHZpZXdwb3J0IHBy
b3BlcnRpZXMsIHJlZmVyIHRvIHRoZSBTYWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQgCisgICAg
ICAgIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRp
b24vYXBwbGVhcHBsaWNhdGlvbnMvcmVmZXJlbmNlL3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0
YXRhZ3MuaHRtbAorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZGVkIHdlYmtpdHZpZXdw
b3J0YXR0cmlidXRlcy5oIHdlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAuIAorICAgICAgICAq
IFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OkNo
cm9tZUNsaWVudDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UpOiBBZGRlZCB0aGlzIGNh
bGxiYWNrIHRvIGtub3cgd2hldGhlciB0aGUgdmlld3BvcnQgYXJndW1lbnRzIGlzIGF2YWlsYWJs
ZS4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaDoKKyAgICAgICAg
KiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwOgorICAgICAgICAo
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzRm9yU2l6
ZSk6IEFkZGVkIHRoaXMgZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRl
cyB3aXRoIHRoZSBnaXZlbiBhdmFpbGFibGVXaWR0aCBhbmQgYXZhaWxhYmxlSGVpZ2h0LgorICAg
ICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oOgorICAgICAg
ICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50R3RrLmNwcDogCisgICAgICAgIChX
ZWJLaXQ6OnBvc3RDb21taXRGcmFtZVZpZXdTZXR1cCk6IEludmFsaWRhdGUgdGhlIHZpZXdwb3J0
IGF0dHJpYnV0ZXMuCisgICAgICAgICogd2Via2l0L3dlYmtpdC5oOgorICAgICAgICAqIHdlYmtp
dC93ZWJraXRkZWZpbmVzLmg6CisgICAgICAgICogd2Via2l0L3dlYmtpdHByaXZhdGUuaDogQWRk
ZWQgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlIGFzIGEgcHJpdmF0ZSBmdW5jdGlv
bi4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcDogQWRkZWQu
CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19pbml0KToKKyAgICAg
ICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQpOgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX3NldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRWaWV3cG9ydEF0dHJp
YnV0ZXNSZWNvbXB1dGUpOiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmlidXRl
cyBhbmQgZW1pdCB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUgc2lnbmFsLgorICAg
ICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKTogYSBwdWJsaWMgQVBJ
IGZvciBjYWxsaW5nIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZS4KKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg6IEFkZGVkLgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19nZXRfcHJv
cGVydHkpOiBBZGRlZCBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVURVMuCisgICAgICAgICh3ZWJraXRf
d2ViX3ZpZXdfZGlzcG9zZSk6IERlYWxsb2NhdGUgdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyBpbnN0YW5jZS4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0KTogQWRkZWQg
dGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCBhbmQgd2Via2l0Vmll
d3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlIHNpZ25hbHMuCisgICAgICAgICh3ZWJraXRfd2ViX3Zp
ZXdfaW5pdCk6IFNldCB0aGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAg
ICAgICAod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKTogQWRkZWQgYSBn
ZXR0ZXIgdG8gb2J0YWluIHRoZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UgaGVs
ZCBieSB0aGUgZ2l2ZW4gV2ViS2l0V2ViVmlldy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0d2Vi
dmlldy5oOgorCiAyMDEwLTExLTE4ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL0dOVW1ha2VmaWxlLmFtIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQppbmRleCBhM2Jl
ODE2Li45YzY3YzFhIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KQEAgLTExNyw2ICsxMTcsNyBAQCB3ZWJraXRndGtf
c3RhdGljX2hfYXBpICs9IFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0bmV0
d29ya3Jlc3BvbnNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRzZWN1
cml0eW9yaWdpbi5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1
dGhkaWFsb2cuaCBcCisJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0
YXR0cmlidXRlcy5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFj
a2ZvcndhcmRsaXN0LmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJk
YXRhYmFzZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNv
dXJjZS5oIFwKQEAgLTE4MCw2ICsxODEsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXRzb3VwYXV0aGRpYWxvZy5jIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2ZXJzaW9uLmNw
cCBcCisJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViYmFja2ZvcndhcmRsaXN0LmNwcCBcCiAJV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmZyYW1lLmNwcCBcCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0Nocm9tZUNsaWVudEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9t
ZUNsaWVudEd0ay5jcHAKaW5kZXggZDYzMzE3Yy4uZmYyMGQ5ZCAxMDA2NDQKLS0tIGEvV2ViS2l0
L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCisrKyBiL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcApAQCAtMjQsNiArMjQsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogCisjaW5jbHVk
ZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkR1bXBSZW5kZXJU
cmVlU3VwcG9ydEd0ay5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKQEAgLTYwNyw2ICs2MDgs
MTIgQEAgdm9pZCBDaHJvbWVDbGllbnQ6OmNob29zZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8
V1RGOjpTdHJpbmc+JiBmaWxlbmFtZXMsIFdlYkMKICAgICBjaG9vc2VyLT5pY29uTG9hZGVkKElj
b246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpKTsKIH0KIAordm9pZCBDaHJvbWVDbGll
bnQ6OmRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFZpZXdwb3J0QXJndW1lbnRz
JiBhcmd1bWVudHMpIGNvbnN0Cit7CisgICAgLy8gUmVjb21wdXRlIHRoZSB2aWV3cG9ydCBhdHRy
aWJ1dGVzIG1ha2luZyBpdCB2YWxpZC4KKyAgICB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNv
bXB1dGUod2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKG1fd2ViVmlldyks
IHRydWUpOworfQorCiB2b2lkIENocm9tZUNsaWVudDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYp
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0No
cm9tZUNsaWVudEd0ay5oCmluZGV4IDgyNTJmMDYuLmI0YTFhMzcgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaApAQCAtMTEwLDYgKzExMCw4IEBAIG5hbWVz
cGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFdU
Rjo6U3RyaW5nJiwgV2ViQ29yZTo6VGV4dERpcmVjdGlvbik7CiAKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoVmlld3BvcnREYXRhRGlkQ2hhbmdlKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzJiBhcmd1bWVudHMpIGNvbnN0OworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwcmlu
dChXZWJDb3JlOjpGcmFtZSopOwogI2lmIEVOQUJMRShEQVRBQkFTRSkKICAgICAgICAgdmlydHVh
bCB2b2lkIGV4Y2VlZGVkRGF0YWJhc2VRdW90YShXZWJDb3JlOjpGcmFtZSosIGNvbnN0IFdURjo6
U3RyaW5nJik7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5jcHAgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5jcHAKaW5kZXggZjIzN2U5ZC4uNmNiOTQ1YiAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCisr
KyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNw
cApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAt
MjcsNyArMjgsNiBAQAogI2luY2x1ZGUgIkpTVmFsdWUuaCIKICNpbmNsdWRlICJOb2RlTGlzdC5o
IgogI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKLSNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3Lmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTc3
LDMgKzc3LDE1IEBAIEpTVmFsdWVSZWYgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpub2Rlc0Zy
b21SZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlCiAgICAgUmVmUHRyPE5vZGVMaXN0
PiBub2RlcyA9IGRvY3VtZW50LT5ub2Rlc0Zyb21SZWN0KHgsIHksIHRvcCwgcmlnaHQsIGJvdHRv
bSwgbGVmdCwgaWdub3JlQ2xpcHBpbmcpOwogICAgIHJldHVybiB0b1JlZihleGVjLCB0b0pTKGV4
ZWMsIGpzRG9jdW1lbnQtPmdsb2JhbE9iamVjdCgpLCBub2Rlcy5nZXQoKSkpOwogfQorCisvLyBG
b3IgdGVzdGluZyBmYXN0L3ZpZXdwb3J0Lgordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIGdfcmV0
dXJuX2lmX2ZhaWwoV0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpKTsKKworICAgIFZpZXdwb3J0
QXJndW1lbnRzIGFyZ3VtZW50cyA9IHdlYlZpZXctPnByaXYtPmNvcmVQYWdlLT5tYWluRnJhbWUo
KS0+ZG9jdW1lbnQoKS0+dmlld3BvcnRBcmd1bWVudHMoKTsKKyAgICAvLyBkZXNrdG9wV2lkdGgg
PSA5ODAsIGRldmljZVdpZHRoID0gMzIwLCBkZXZpY2VIZWlnaHQgPSA0ODAsIGRldmljZURQSSA9
IDE2MAorICAgIFZpZXdwb3J0QXR0cmlidXRlcyBhdHRycyA9IGNvbXB1dGVWaWV3cG9ydEF0dHJp
YnV0ZXMoYXJndW1lbnRzLCA5ODAsIDMyMCwgNDgwLCAxNjAsIEludFNpemUoYXZhaWxhYmxlV2lk
dGgsIGF2YWlsYWJsZUhlaWdodCkpOworCisgICAgZnByaW50ZihzdGRvdXQsICJ2aWV3cG9ydCBz
aXplICVkeCVkIHNjYWxlICVmIHdpdGggbGltaXRzIFslZiwgJWZdXG4iLCBhdHRycy5sYXlvdXRT
aXplLndpZHRoKCksIGF0dHJzLmxheW91dFNpemUuaGVpZ2h0KCksIGF0dHJzLmluaXRpYWxTY2Fs
ZSwgYXR0cnMubWluaW11bVNjYWxlLCBhdHRycy5tYXhpbXVtU2NhbGUpOworfQpkaWZmIC0tZ2l0
IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCBi
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKaW5k
ZXggMTdlOWY2ZC4uMzc1ZTc3MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCkBAIC0yMCw2ICsyMCw3IEBACiAjZGVmaW5l
IER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0a19oCiAKICNpbmNsdWRlICJKU1N0cmluZ1JlZi5oIgor
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAKIGNsYXNzIER1bXBSZW5kZXJUcmVl
U3VwcG9ydEd0ayB7CiAKQEAgLTMzLDYgKzM0LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgbGlu
a3NJbmNsdWRlZEluRm9jdXNDaGFpbigpOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG5vZGVzRnJv
bVJlY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIGludCB4LCBpbnQg
eSwgdW5zaWduZWQgdG9wLCB1bnNpZ25lZCByaWdodCwgdW5zaWduZWQgYm90dG9tLCB1bnNpZ25l
ZCBsZWZ0LCBib29sIGlnbm9yZUNsaXBwaW5nKTsKKyAgICBzdGF0aWMgdm9pZCBjb21wdXRlVmll
d3BvcnRBdHRyaWJ1dGVzRm9yU2l6ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWls
YWJsZVdpZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCk7CiAKIHByaXZhdGU6CiAgICAgc3RhdGlj
IGJvb2wgc19kcnRSdW47CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVM
b2FkZXJDbGllbnRHdGsuY3BwCmluZGV4IGIyM2JkNzAuLjcyZThkOWEgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCisrKyBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwCkBAIC0xMjc2
LDYgKzEyNzYsMTIgQEAgc3RhdGljIHZvaWQgcG9zdENvbW1pdEZyYW1lVmlld1NldHVwKFdlYktp
dFdlYkZyYW1lICpmcmFtZSwgRnJhbWVWaWV3ICp2aWV3LCBib28KICAgICBXZWJLaXRXZWJWaWV3
UHJpdmF0ZSogcHJpdiA9IFdFQktJVF9XRUJfVklFV19HRVRfUFJJVkFURShjb250YWluaW5nV2lu
ZG93KTsKICAgICB2aWV3LT5zZXRHdGtBZGp1c3RtZW50cyhwcml2LT5ob3Jpem9udGFsQWRqdXN0
bWVudC5nZXQoKSwgcHJpdi0+dmVydGljYWxBZGp1c3RtZW50LmdldCgpLCByZXNldFZhbHVlcyk7
CiAKKyAgICAvLyBJbnZhbGlkYXRlIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIC0gdGhleSB3aWxs
IG9ubHkgYmUgdmFsaWQKKyAgICAvLyBhZ2FpbiBpZiB0aGUgcGFnZSB3ZSdyZSBiZWdpbm5pbmcg
dG8gbG9hZCBub3cgaGFzIGFuCisgICAgLy8gYXBwcm9wcmlhdGUgdmlld3BvcnQgbWV0YSB0YWcu
CisgICAgY29udGFpbmluZ1dpbmRvdy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT5p
c1ZhbGlkID0gRkFMU0U7CisgICAgZ19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKGNvbnRhaW5pbmdX
aW5kb3ctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKSksICJ2YWxpZCIpOworCiAgICAg
aWYgKHByaXYtPmN1cnJlbnRNZW51KSB7CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPEd0a01lbnU+
IG1lbnUocHJpdi0+Y3VycmVudE1lbnUpOwogICAgICAgICBwcml2LT5jdXJyZW50TWVudS5jbGVh
cigpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0LmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXQuaAppbmRleCBmYzcxYzJjLi4yNDI4ZjYyIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaApA
QCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVxdWVzdC5o
PgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmll
d3BvcnRhdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2Uu
aD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0d2Vic2V0dGluZ3MuaD4KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dGRlZmluZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAppbmRleCBiMDZh
M2JmLi4zOTljYjRjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVz
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCkBAIC05Miw2ICs5Miw5
IEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3MgV2ViS2l0SGl0VGVz
dFJlc3VsdENsYXNzOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVj
aXNpb24gV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbjsKIHR5cGVkZWYgc3RydWN0IF9X
ZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uQ2xhc3MgV2ViS2l0R2VvbG9jYXRpb25Qb2xp
Y3lEZWNpc2lvbkNsYXNzOwogCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlczsKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXNDbGFzcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzczsKKwogR19F
TkRfREVDTFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRw
cml2YXRlLmggYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKaW5kZXggNzM4NTY3
Ny4uMDE4NzZiNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaApAQCAtMzMsNiArMzMsNyBA
QAogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkb3dubG9hZC5oPgogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXRoaXR0ZXN0cmVzdWx0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1
ZXN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oPgogI2lu
Y2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdl
YmRhdGFzb3VyY2UuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZnJhbWUuaD4KQEAgLTEz
Niw2ICsxMzcsNyBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgV2ViQ29yZTo6UGFnZSogY29yZVBh
Z2U7CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYlNldHRpbmdzPiB3ZWJTZXR0aW5n
czsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViSW5zcGVjdG9yPiB3ZWJJbnNwZWN0
b3I7CisgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcz4gdmll
d3BvcnRBdHRyaWJ1dGVzOwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJXaW5kb3dG
ZWF0dXJlcz4gd2ViV2luZG93RmVhdHVyZXM7CiAKICAgICAgICAgV2ViS2l0V2ViRnJhbWUqIG1h
aW5GcmFtZTsKQEAgLTIxMyw2ICsyMTUsMjUgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAgIGdib29s
ZWFuIGRpc3Bvc2VkOwogICAgIH07CiAKKyAgICBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmli
dXRlc1ByaXZhdGUgeworICAgICAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3OworICAgICAgICBp
bnQgZGV2aWNlV2lkdGg7CisgICAgICAgIGludCBkZXZpY2VIZWlnaHQ7CisgICAgICAgIGludCBh
dmFpbGFibGVXaWR0aDsKKyAgICAgICAgaW50IGF2YWlsYWJsZUhlaWdodDsKKyAgICAgICAgaW50
IGRlc2t0b3BXaWR0aDsKKyAgICAgICAgaW50IGRldmljZURQSTsKKworICAgICAgICBpbnQgd2lk
dGg7CisgICAgICAgIGludCBoZWlnaHQ7CisgICAgICAgIGZsb2F0IGluaXRpYWxTY2FsZUZhY3Rv
cjsKKyAgICAgICAgZmxvYXQgbWluaW11bVNjYWxlRmFjdG9yOworICAgICAgICBmbG9hdCBtYXhp
bXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgICAg
IGdib29sZWFuIHVzZXJTY2FsYWJsZTsKKyAgICAgICAgZ2Jvb2xlYW4gaXNWYWxpZDsKKyAgICB9
OworCiAgICAgV1RGOjpTdHJpbmcKICAgICB3ZWJraXRVc2VyQWdlbnQoKTsKIApAQCAtNDMyLDYg
KzQ1Myw4IEBAIGV4dGVybiAiQyIgewogCiAgICAgdm9pZCB3ZWJraXRXZWJWaWV3RW50ZXJGdWxs
c2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYkNvcmU6Ok5vZGUqIG5vZGUpOwogICAg
IHZvaWQgd2Via2l0V2ViVmlld0V4aXRGdWxsc2NyZWVuKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcp
OworCisgICAgdm9pZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUoV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzKiwgYm9vbCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjQ1MTc3NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAKQEAgLTAsMCArMSw1NjcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMCBDb2xsYWJvcmEgTHRkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgiCisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNs
dWRlICJ3ZWJraXRwcml2YXRlLmgiCisKKyNpbmNsdWRlIDxnbGliL2dpMThuLWxpYi5oPgorCisv
KioKKyAqIFNFQ1RJT046d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzCisgKiBAc2hvcnRfZGVzY3Jp
cHRpb246IFJlcHJlc2VudHMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgb2YgYSB3ZWIgcGFnZQor
ICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1
dGUtcmVxdWVzdGVkCisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRy
aWJ1dGVzLWF2YWlsYWJsZQorICoKKyAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgb2ZmZXJz
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzIHRvCisgKiBjb250cm9sIHRo
ZSB2aWV3cG9ydCBsYXlvdXQuIEl0IGNvbnRhaW5zIHRoZSB2aWV3cG9ydCBzaXplLCBpbml0aWFs
IHNjYWxlIHdpdGggbGltaXRzLAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgYSB1
c2VyIGlzIGFibGUgdG8gc2NhbGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3cG9ydC4KKyAqIFRo
aXMgbWFrZXMgYSB3ZWIgcGFnZSBmaXQgdGhlIGRldmljZSBzY3JlZW4uCisgKgorICogVGhlICNX
ZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJsZSBzaWduYWwgd2lsbCBi
ZSBlbWl0dGVkIHdpdGggI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICogd2hlbiB0aGUgdmll
d3BvcnQgYXR0cmlidXRlcyBhcmUgdXBkYXRlZCBpbiB0aGUgY2FzZSBvZiBsb2FkaW5nIHdlYiBw
YWdlcyBjb250YWluCisgKiB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQgY2FsbGluZyB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUuCisgKgorICogSWYgdGhlIGRldmljZSBz
aXplLCBhdmFpbGFibGUgc2l6ZSwgZGVza3RvcCB3aWR0aCwgb3IgZGV2aWNlIERQSSBuZWVkcyB0
byBiZSBjaGFuZ2VkIGR1ZSB0byAKKyAqIGEgY29uc2VxdWVuY2Ugb2YgYW4gZXhwbGljaXQgYnJv
d3NlciByZXF1ZXN0IChjYXVzZWQgYnkgc2NyZWVuIHJvdGF0aW9uLCByZXNpemluZywgb3Igc2lt
aWxhciByZWFzb25zKSwKKyAqIFlvdSBzaG91bGQgY2FsbCAjd2Via2l0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXNfcmVjb21wdXRlIHRvIHJlY29tcHV0ZSB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQg
CisgKiBvdmVycmlkZSB0aG9zZSB2YWx1ZXMgaW4gdGhlIGhhbmRsZXIgb2YgI1dlYktpdFdlYlZp
ZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCBzaWduYWwuCisgKgor
ICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMsIHJlZmVy
IHRvIHRoZSBTYWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQKKyAqIGh0dHA6Ly9kZXZlbG9wZXIu
YXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBwbGVhcHBsaWNhdGlvbnMv
cmVmZXJlbmNlL3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0YXRhZ3MuaHRtbAorICoKKyAqIDxp
bmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogLzwhLS0gLS0+KiBDb25uZWN0IHRv
IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZXMgc2lnbmFsICo8IS0tIC0tPi8KKyAqIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRlcyA9IHdlYmtpdF93ZWJfdmlld19nZXRf
dmlld3BvcnRfYXR0cmlidXRlcyAod2ViX3ZpZXcpOworICogZ19zaWduYWxfY29ubmVjdCAod2Vi
X3ZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQiLCBHX0NBTExC
QUNLICh2aWV3cG9ydF9yZWNvbXB1dGVfY2IpLCB3aW5kb3cpOworICogZ19zaWduYWxfY29ubmVj
dCAod2ViX3ZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJsZSIsIEdfQ0FMTEJBQ0sg
KHZpZXdwb3J0X2F2YWlsYWJsZV9jYiksIHdpbmRvdyk7CisgKiBnX3NpZ25hbF9jb25uZWN0IChh
dHRyaWJ1dGVzLCAibm90aWZ5Ojp2YWxpZCIsIEdfQ0FMTEJBQ0sgKHZpZXdwb3J0X3ZhbGlkX2No
YW5nZWRfY2IpLCB3ZWJfdmlldyk7CisgKgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdw
b3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCBzaWduYWwgdG8gb3ZlcnJpZGUgdGhl
IGRldmljZSB3aWR0aCAqPCEtLSAtLT4vCisgKiBzdGF0aWMgdm9pZAorICogdmlld3BvcnRfcmVj
b21wdXRlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzKiBhdHRyaWJ1dGVzLCBHdGtXaWRnZXQqIHdpbmRvdykKKyAqIHsKKyAqICAgICBpbnQgb3Zl
cnJpZGVfYXZhaWxhYmxlX3dpZHRoID0gNDgwOworICogICAgIGdfb2JqZWN0X3NldCAoR19PQkpF
Q1QoYXR0cmlidXRlcyksICJhdmFpbGFibGUtd2lkdGgiLCBvdmVycmlkZV9hdmFpbGFibGVfd2lk
dGgsIE5VTEwpOworICogfQorICoKKyAqIC88IS0tIC0tPiogSGFuZGxlIHRoZSB2aWV3cG9ydC1h
dHRyaWJ1dGVzLWF2YWlsYWJsZSBzaWduYWwgdG8gcmVjb21wdXRlIHRoZSBpbml0aWFsIHNjYWxl
IGZhY3RvciAqPCEtLSAtLT4vCisgKiBzdGF0aWMgdm9pZCAKKyAqIHZpZXdwb3J0X2F2YWlsYWJs
ZV9jYiAoV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyog
YXR0cmlidXRlcywgZ3BvaW50ZXIgZGF0YSkKKyAqIHsKKyAqICAgICBnZmxvYXQgaW5pdGlhbFNj
YWxlOworICogICAgIGdfb2JqZWN0X2dldCAoR19PQkpFQ1QgKGF0cmlidXRlcyksICJpbml0aWFs
LXNjYWxlLWZhY3RvciIsICZpbml0aWFsU2NhbGUsIE5VTEwpOworICogICAgIHdlYmtpdF93ZWJf
dmlld19zZXRfem9vbV9sZXZlbCAod2ViX3ZpZXcsIGluaXRpYWxTY2FsZSk7CisgKiB9CisgKiAK
KyAqIC88IS0tIC0tPiogSGFuZGxlIHRoZSBub3RpZnk6OnZhbGlkIHNpZ25hbCB0byBpbml0aWFs
aXplIHRoZSB6b29tIGxldmVsICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkCisgKiB2aWV3cG9y
dF92YWxpZF9jaGFuZ2VkX2NiIChXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIGF0dHJpYnV0ZXMs
IEdQYXJhbVNwZWMqIHBzcGVjLCBXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldykKKyAqIHsKKyAqICAg
ICBnYm9vbGVhbiBpc192YWxpZDsKKyAqICAgICBnX29iamVjdF9nZXQgKGF0dHJpYnV0ZXMsICJ2
YWxpZCIsICZpc192YWxpZCwgTlVMTCk7CisgKiAgICAgaWYgKCFpc192YWxpZCkgCisgKiAgICAg
ICAgIHdlYmtpdF93ZWJfdmlld19zZXRfem9vbV9sZXZlbCAod2ViX3ZpZXcsIDEuMCk7CisgKiB9
CisgKiA8L3Byb2dyYW1saXN0aW5nPjwvaW5mb3JtYWxleGFtcGxlPgorICovCisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworZW51bSB7CisgICAg
UFJPUF8wLAorCisgICAgUFJPUF9ERVZJQ0VfV0lEVEgsCisgICAgUFJPUF9ERVZJQ0VfSEVJR0hU
LAorICAgIFBST1BfQVZBSUxBQkxFX1dJRFRILAorICAgIFBST1BfQVZBSUxBQkxFX0hFSUdIVCwK
KyAgICBQUk9QX0RFU0tUT1BfV0lEVEgsCisgICAgUFJPUF9ERVZJQ0VfRFBJLAorICAgIFBST1Bf
V0lEVEgsCisgICAgUFJPUF9IRUlHSFQsCisgICAgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwK
KyAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9G
QUNUT1IsCisgICAgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU8sCisgICAgUFJPUF9VU0VSX1NDQUxB
QkxFLAorICAgIFBST1BfVkFMSUQKK307CisKK0dfREVGSU5FX1RZUEUoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzLCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlcywgR19UWVBFX09CSkVDVCk7CisK
KyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX1BSSVZBVEUob2JqKSAgICAo
R19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9B
VFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSkKKworc3RhdGljIHZv
aWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVj
dCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpOworc3Rh
dGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyAq
cHNwZWMpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19jbGFzc19p
bml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKiBrY2xhc3MpCit7CisgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrY2xhc3MpOworICAgIGdvYmpl
Y3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3By
b3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5OworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dHM6ZGV2aWNlLXdpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRo
ZSBzY3JlZW4uIFRoaXMgdmFsdWUgaXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBwcmUt
Y29tcHV0ZWQgZHVyaW5nIGEgdmlld3BvcnQgYXR0cmlidXRlcyByZWNvbXB1dGF0aW9uLCBhbmQK
KyAgICAgKiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgaGFuZGxlciBvZgorICAgICAqIFdlYktp
dFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZC4gWW91Cisg
ICAgICogc2hvdWxkIG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29vZCByZWFz
b24uCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJkZXZpY2Utd2lkdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiRGV2aWNlIFdpZHRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHNjcmVlbi4iKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtaGVpZ2h0
OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuLiBUaGlzIHZhbHVlIGlz
IGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVkIGR1cmluZyBhIHZpZXdw
b3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICogY2FuIGJlIG92ZXJyaWRl
biBieSB0aGUgaGFuZGxlciBvZgorICAgICAqIFdlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJp
YnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZC4gWW91CisgICAgICogc2hvdWxkIG5vdCBkbyB0aGF0
IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29vZCByZWFzb24uCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVW
SUNFX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGV2aWNlLWhl
aWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgSGVp
Z2h0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaGVpZ2h0
IG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6YXZhaWxhYmxlLXdpZHRoOgorICAgICAqCisgICAgICog
VGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IHZpc2libGUgYXJlYS4gVGhpcyB3aWxsIHVzdWFsbHkg
YmUgdGhlCisgICAgICogc2FtZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZSB3aWRnZXQs
IGJ1dCBpbiBzb21lIGNhc2VzCisgICAgICogeW91IG1heSBoYXZlIGRlY2lkZWQgdG8gbWFrZSB0
aGUgd2lkZ2V0IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlCisgICAgICogYXJlYS4gVGhpcyB2YWx1
ZSBpcyBieSBkZWZhdWx0IGluaXRpYWxpemVkIHRvIHRoZSBzaXplCisgICAgICogYWxsb2NhdGVk
IGJ5IHRoZSB3aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBoYW5kbGVyCisg
ICAgICogb2YgV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVx
dWVzdGVkIHRvCisgICAgICogbGV0IHRoZSBlbmdpbmUga25vdyB3aGF0IHRoZSB2aXNpYmxlIGFy
ZWEgaXMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVj
dF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFBST1BfQVZBSUxBQkxFX1dJRFRILAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtd2lkdGgiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiQXZhaWxhYmxlIFdpZHRoIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZpc2libGUgYXJlYS4iKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRf
UEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0czphdmFpbGFibGUtaGVpZ2h0OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUg
Y3VycmVudCB2aXNpYmxlIGFyZWEuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZQorICAgICAqIHNh
bWUgYXMgdGhlIHNwYWNlIGFsbG9jYXRlZCB0byB0aGUgd2lkZ2V0LCBidXQgaW4gc29tZSBjYXNl
cworICAgICAqIHlvdSBtYXkgaGF2ZSBkZWNpZGVkIHRvIG1ha2UgdGhlIHdpZGdldCBiaWdnZXIg
dGhhbiB0aGUgdmlzaWJsZQorICAgICAqIGFyZWEuIFRoaXMgdmFsdWUgaXMgYnkgZGVmYXVsdCBp
bml0aWFsaXplZCB0byB0aGUgc2l6ZQorICAgICAqIGFsbG9jYXRlZCBieSB0aGUgd2lkZ2V0LCBi
dXQgeW91IGNhbiBvdmVycmlkZSBpdCBpbiB0aGUgaGFuZGxlcgorICAgICAqIG9mIFdlYktpdFdl
YlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCB0bworICAgICAq
IGxldCB0aGUgZW5naW5lIGtub3cgd2hhdCB0aGUgdmlzaWJsZSBhcmVhIGlzLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0FWQUlMQUJMRV9IRUlHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImF2YWlsYWJsZS1oZWlnaHQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiQXZhaWxhYmxlIEhlaWdodCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJ
VEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRlc2t0b3At
d2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2Ygdmlld3BvcnQgdGhhdCB3b3JrcyB3
ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyAKKyAgICAgKiBkZXNpZ25lZCBmb3IgZGVza3RvcC4gVGhp
cyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJp
bmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBi
ZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3
cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBu
b3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0RFU0tUT1BfV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImRlc2t0b3Atd2lkdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
RGVza3RvcCBXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
VGhlIHdpZHRoIG9mIHZpZXdwb3J0IHRoYXQgd29ya3Mgd2VsbCBmb3IgbW9zdCB3ZWIgcGFnZXMg
ZGVzaWduZWQgZm9yIGRlc2t0b3AuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLWRwaToKKyAgICAgKgorICAgICAq
IFRoZSBudW1iZXIgb2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuLgorICAgICAqIFRoaXMg
dmFsdWUgaXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBwcmUtY29tcHV0ZWQgZHVyaW5n
IGEgdmlld3BvcnQgYXR0cmlidXRlcyByZWNvbXB1dGF0aW9uLCBhbmQKKyAgICAgKiBjYW4gYmUg
b3ZlcnJpZGVuIGJ5IHRoZSBoYW5kbGVyIG9mCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3Bv
cnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiBZb3UKKyAgICAgKiBzaG91bGQgbm90
IGRvIHRoYXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9ERVZJQ0VfRFBJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZp
Y2UtZHBpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBE
UEkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBudW1iZXIg
b2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuLiIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOndpZHRoOgorICAgICAqCisg
ICAgICogVGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKiBCZWZvcmUgZ2V0dGluZyB0
aGlzIHByb3BlcnR5LCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAKKyAgICAgKiAjV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqIAorICAgICAqIFNpbmNlOiAxLjMu
NQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENs
YXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XSURUSCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpoZWlnaHQ6
CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKiBCZWZv
cmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAKKyAg
ICAgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3Bl
Y19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkhlaWdodCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQu
IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VC
S0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0czppbml0aWFsLXNjYWxlLWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFs
IHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4KKyAgICAgKiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3Bl
cnR5LCB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAKKyAgICAgKiAjV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICov
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9S
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluaXRpYWwtc2NhbGUtZmFj
dG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkluaXRpYWwgU2Nh
bGUgRmFjdG9yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUg
aW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWluaW11bS1zY2FsZS1m
YWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQu
CisgICAgICogQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgCisgICAgICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAg
ICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9NSU5JTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJtaW5pbXVtLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJNaW5pbXVtIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZp
ZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktp
dFZpZXdwb3J0QXR0cmlidXRzOm1heGltdW0tc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICog
VGhlIG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5n
IHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4z
LjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUFYSU1VTV9T
Q0FMRV9GQUNUT1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfZmxvYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4aW11
bS1zY2FsZS1mYWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
TWF4aW11bSBTY2FsZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIlRoZSBtYXhpbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JF
QURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZp
Y2UtcGl4ZWwtcmF0aW86CisgICAgICoKKyAgICAgKiBUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9m
IHRoZSB2aWV3cG9ydC4KKyAgICAgKiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCB5b3Ug
bmVlZCB0byBtYWtlIHN1cmUgdGhhdCAKKyAgICAgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
IGlzIHZhbGlkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy41CisgICAgICovCisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNlIFBpeGVsIFJhdGlvIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgZGV2aWNlIHBpeGVsIHJh
dGlvIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp1c2VyLXNjYWxhYmxlOgorICAgICAqCisg
ICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQg
b3V0LgorICAgICAqIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1h
a2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQu
CisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFBST1BfVVNFUl9TQ0FMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygidXNlci1zY2FsYWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVXNlciBTY2FsYWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4g
em9vbSBpbiBhbmQgb3V0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9S
RUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6dmFs
aWQ6CisgICAgICoKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1
dGVzIGFyZQorICAgICAqIHZhbGlkLiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFyZSBvbmx5
IHZhbGlkIG9uIHBhZ2VzIHdoaWNoCisgICAgICogaGF2ZSBhIHZpZXdwb3J0IG1ldGEgdGFnLCBh
bmQgaGF2ZSBhbHJlYWR5IGhhZCB0aGUgYXR0cmlidXRlcworICAgICAqIGNhbGN1bGF0ZWQuCisg
ICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjUKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFBST1BfVkFMSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfYm9vbGVhbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oInZhbGlkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJW
YWxpZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5l
cyB3aGV0aGVyIG9yIG5vdCB0aGUgYXR0cmlidXRlcyBhcmUgdmFsaWQsIGFuZCBjYW4gYmUgdXNl
ZC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7Cisg
ICAgdmlld3BvcnQtPnByaXYgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFU
RSh2aWV3cG9ydCk7CisgICAgdmlld3BvcnQtPnByaXYtPmlzVmFsaWQgPSBGQUxTRTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5KEdPYmpl
Y3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNw
ZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisKKyAg
ICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfREVWSUNFX1dJRFRIOgorICAgICAg
ICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmRldmljZVdpZHRoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2lu
dCh2YWx1ZSwgcHJpdi0+ZGV2aWNlSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2
LT5hdmFpbGFibGVXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFC
TEVfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmF2YWlsYWJs
ZUhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVNLVE9QX1dJRFRIOgor
ICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmRlc2t0b3BXaWR0aCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfRFBJOgorICAgICAgICBnX3ZhbHVlX3Nl
dF9pbnQodmFsdWUsIHByaXYtPmRldmljZURQSSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT53aWR0aCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVf
c2V0X2ludCh2YWx1ZSwgcHJpdi0+aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01JTklNVU1fU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+bWluaW11bVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01BWElNVU1fU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0RFVklDRV9QSVhFTF9SQVRJTzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUs
IHByaXYtPmRldmljZVBpeGVsUmF0aW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VVNFUl9TQ0FMQUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJpdi0+
dXNlclNjYWxhYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEOgorICAg
ICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pc1ZhbGlkKTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BF
UlRZX0lEKG9iamVjdCwgcHJvcF9pZCwgcHNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3NldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIGNvbnN0IEdWYWx1ZSogdmFsdWUsIEdQYXJh
bVNwZWMgKnBzcGVjKQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRB
dHRyaWJ1dGVzID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqZWN0KTsKKyAgICBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gdmlld3BvcnRBdHRyaWJ1dGVzLT5w
cml2OworCisgICAgc3dpdGNoIChwcm9wX2lkKSB7CisgICAgY2FzZSBQUk9QX0RFVklDRV9XSURU
SDoKKyAgICAgICAgcHJpdi0+ZGV2aWNlV2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX0hFSUdIVDoKKyAgICAgICAgcHJp
di0+ZGV2aWNlSGVpZ2h0ID0gZ192YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxl
V2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVZBSUxBQkxFX0hFSUdIVDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0g
Z192YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RF
U0tUT1BfV0lEVEg6CisgICAgICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IGdfdmFsdWVfZ2V0X2lu
dCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfRFBJOgorICAg
ICAgICBwcml2LT5kZXZpY2VEUEkgPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVS
VFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUoV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMsIGJvb2wgbWFrZVZhbGlkKQoreworICAgIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMt
PnByaXY7CisgICAgV2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHByaXYtPndlYlZpZXc7CisKKyAg
ICBJbnRSZWN0IHdpbmRvd1JlY3Qod2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPmNocm9tZSgpLT53
aW5kb3dSZWN0KCkpOworICAgIHByaXYtPmRldmljZVdpZHRoID0gd2luZG93UmVjdC53aWR0aCgp
OworICAgIHByaXYtPmRldmljZUhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICBJ
bnRSZWN0IHJlY3Qod2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgp
KTsKKyAgICBwcml2LT5hdmFpbGFibGVXaWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBwcml2LT5h
dmFpbGFibGVIZWlnaHQgPSByZWN0LmhlaWdodCgpOworCisgICAgLy8gVGhpcyB2YWx1ZSB3b3Jr
cyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBmb3IgZGVza3RvcCBicm93c2Vycy4K
KyAgICBwcml2LT5kZXNrdG9wV2lkdGggPSA5ODA7CisgICAgLy8gSXQgaXMgdGhlIGRwaSBvZiB0
aGUgb3JpZ2luYWwgaVBob25lIGFuZCBBbmRyb2lkIGRldmljZXMuCisgICAgcHJpdi0+ZGV2aWNl
RFBJID0gMTYwOworCisgICAgLy8gRmlyc3Qgb2YgYWxsLCB3ZSBnaXZlIHRoZSBhcHBsaWNhdGlv
biBhbiBvcHBvcnR1bml0eSB0byBvdmVycmlkZSBzb21lIG9mIHRoZSB2YWx1ZXMuCisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0
ZS1yZXF1ZXN0ZWQiLCB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCisgICAgVmlld3BvcnRBcmd1bWVu
dHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1
bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOworCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMgPSBjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgcHJpdi0+ZGVz
a3RvcFdpZHRoLCBwcml2LT5kZXZpY2VXaWR0aCwgcHJpdi0+ZGV2aWNlSGVpZ2h0LCBwcml2LT5k
ZXZpY2VEUEksIEludFNpemUocHJpdi0+YXZhaWxhYmxlV2lkdGgsIHByaXYtPmF2YWlsYWJsZUhl
aWdodCkpOworCisgICAgcHJpdi0+d2lkdGggPSBhdHRyaWJ1dGVzLmxheW91dFNpemUud2lkdGgo
KTsKKyAgICBwcml2LT5oZWlnaHQgPSBhdHRyaWJ1dGVzLmxheW91dFNpemUuaGVpZ2h0KCk7Cisg
ICAgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5pbml0aWFsU2NhbGU7Cisg
ICAgcHJpdi0+bWluaW11bVNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5taW5pbXVtU2NhbGU7Cisg
ICAgcHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5tYXhpbXVtU2NhbGU7Cisg
ICAgcHJpdi0+ZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbzsK
KyAgICBwcml2LT51c2VyU2NhbGFibGUgPSBhcmd1bWVudHMudXNlclNjYWxhYmxlOworCisgICAg
aWYgKG1ha2VWYWxpZCkgeworICAgICAgICBwcml2LT5pc1ZhbGlkID0gVFJVRTsKKyAgICAgICAg
Z19vYmplY3Rfbm90aWZ5KEdfT0JKRUNUKHZpZXdwb3J0QXR0cmlidXRlcyksICJ2YWxpZCIpOwor
ICAgIH0KKworICAgIC8vIE5vdyBsZXQgdGhlIGFwcGxpY2F0aW9uIGtub3cgaXQgaXMgc2FmZSB0
byB1c2UgdGhlIG5ldworICAgIC8vIHZhbHVlcy4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
d2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIiwgdmlld3BvcnRBdHRyaWJ1
dGVzKTsKK30KKworLyoqCisgKiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGU6
CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAq
CisgKiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmlld3BvcnQgYXR0cmlidXRlcyBhbmQgZW1pdCB0
aGUgdmlld3BvcnQtYXR0cmlidXRlLWF2YWlsYWJsZSBzaWduYWwuIAorICogVGhlIHZpZXdwb3J0
LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCBzaWduYWwgYWxzbyB3aWxsIGJlIGhhbmRs
ZWQgdG8gb3ZlcnJpZGUgCisgKiB0aGUgZGV2aWNlIHNpemUsIGF2YWlsYWJsZSBzaXplLCBkZXNr
dG9wIHdpZHRoLCBvciBkZXZpY2UgRFBJLgorICoKKyAqIFNpbmNlOiAxLjMuNQorICovCit2b2lk
IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcykKK3sKKyAgICB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0
ZXNSZWNvbXB1dGUodmlld3BvcnRBdHRyaWJ1dGVzLCBmYWxzZSk7Cit9CmRpZmYgLS1naXQgYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjdkOTBjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0
dmlld3BvcnRhdHRyaWJ1dGVzX2gKKyNkZWZpbmUgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzX2gK
KworI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmlu
ZXMuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FU
VFJJQlVURVMgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3R5cGUo
KSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqKSAgICAgICAgICAgIChH
X1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRU
UklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQ
T1JUX0FUVFJJQlVURVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgo
a2xhc3MpLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyhv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQ
RV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJ
QlVURVNfQ0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VC
S0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUykpCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9B
VFRSSUJVVEVTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2Jq
KSwgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRlc0NsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc1By
aXZhdGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAg
Lyo8IHByaXZhdGUgPiovCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSAqcHJp
djsKK307CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MgeworICAgIEdP
YmplY3RDbGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhw
YW5zaW9uICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9p
ZCAoKl93ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2
ZWQyKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9Owor
CitXRUJLSVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlwZSAg
ICAgICAgICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX3JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0
QXR0cmlidXRlcyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcAppbmRleCAwZGMxOWYzLi4xYzljZDZkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3LmNwcApAQCAtMTAsNiArMTAsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAx
MCBJZ2FsaWEgUy5MLgogICogIENvcHlyaWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVj
aG5vbG9naWVzIEluYy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC00Myw3ICs0NCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgog
I2luY2x1ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJ
bXBsLmgiCi0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNp
bmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNH
dGsuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgpAQCAtNzMsNiArNzQsNyBA
QAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5o
IgogI2luY2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgpAQCAtMTczLDYgKzE3NSw4
IEBAIGVudW0gewogICAgIEdFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAg
ICAgT05MT0FEX0VWRU5ULAogICAgIEZSQU1FX0NSRUFURUQsCisgICAgVklFV1BPUlRfQVRUUklC
VVRFU19SRUNPTVBVVEVfUkVRVUVTVEVELAorICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxB
QkxFLAogICAgIExBU1RfU0lHTkFMCiB9OwogCkBAIC0xODYsNiArMTkwLDcgQEAgZW51bSB7CiAg
ICAgUFJPUF9FRElUQUJMRSwKICAgICBQUk9QX1NFVFRJTkdTLAogICAgIFBST1BfV0VCX0lOU1BF
Q1RPUiwKKyAgICBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVURVMsCiAgICAgUFJPUF9XSU5ET1dfRkVB
VFVSRVMsCiAgICAgUFJPUF9UUkFOU1BBUkVOVCwKICAgICBQUk9QX1pPT01fTEVWRUwsCkBAIC00
OTUsNiArNTAwLDkgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2dldF9wcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BfaWQsIEdWYWx1ZSoKICAgICBjYXNlIFBST1BfV0VC
X0lOU1BFQ1RPUjoKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X2luc3BlY3Rvcih3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTOgorICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFs
dWUsIHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyh3ZWJWaWV3KSk7Cisg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgUFJPUF9XSU5ET1dfRkVBVFVSRVM6CiAgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF93aW5kb3dfZmVhdHVy
ZXMod2ViVmlldykpOwogICAgICAgICBicmVhazsKQEAgLTEzMzcsNiArMTM0NSw3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKICAgICB9CiAK
ICAgICBwcml2LT53ZWJJbnNwZWN0b3IuY2xlYXIoKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJp
YnV0ZXMuY2xlYXIoKTsKICAgICBwcml2LT53ZWJXaW5kb3dGZWF0dXJlcy5jbGVhcigpOwogICAg
IHByaXYtPm1haW5SZXNvdXJjZS5jbGVhcigpOwogICAgIHByaXYtPnN1YlJlc291cmNlcy5jbGVh
cigpOwpAQCAtMjYwNCw2ICsyNjEzLDU4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19j
bGFzc19pbml0KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAg
V0VCS0lUX1RZUEVfV0VCX0ZSQU1FKTsKIAogICAgIC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6
dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkCisgICAgICogQHdlYl92aWV3
OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICAgKiBAdmlld3BvcnRf
YXR0cmlidXRlczogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRoZSB2
aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2
aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgd2ls
bCBiZSBlbWl0dGVkIHdoZW5ldmVyIHJlY29tcHV0aW5nIHRoZSB2YWx1ZXMgb2YgdGhlCisgICAg
ICogdmlld3BvcnQgYXR0cmlidXRlcyBpcyByZXF1aXJlZC4gVGhhdCBtYXkgaGFwcGVuIGJlY2F1
c2UgdGhlCisgICAgICogdmlld3BvcnQgbWV0YSB0YWcgb2YgYSBwYWdlIGhhcyBjaGFuZ2VkLCBv
ciBpdCBtYXkgaGFwcGVuIGFzIGEKKyAgICAgKiBjb25zZXF1ZW5jZSBvZiBhbiBleHBsaWNpdCBi
cm93c2VyIHJlcXVlc3QgKGNhdXNlZCBieSBzY3JlZW4KKyAgICAgKiByb3RhdGlvbiwgcmVzaXpp
bmcsIG9yIHNpbWlsYXIgcmVhc29ucykuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyB3aWxsIGhhdmUgZGV2aWNlIHNpemUsIGF2YWlsYWJsZSBzaXplLAorICAg
ICAqIGRlc2t0b3Agd2lkdGgsIGFuZCBkZXZpY2UgRFBJIHByZS1maWxsZWQgYnkgdmFsdWVzIHRo
YXQgbWFrZSBzZW5zZSBmb3IgdGhlIGN1cnJlbnQKKyAgICAgKiBzY3JlZW4gYW5kIHdpZGdldCwg
YnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhvc2UgdmFsdWVzIGlmIHlvdQorICAgICAqIGhhdmUgc3Bl
Y2lhbCByZXF1aXJlbWVudHMgKGZvciBpbnN0YW5jZSwgaWYgeW91IG1hZGUgeW91cgorICAgICAq
IHdpZGdldCBiaWdnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHZpc2libGUgYXJlYSwgeW91IHNob3Vs
ZAorICAgICAqIG92ZXJyaWRlIHRoZSBhdmFpbGFibGUtd2lkdGggYW5kIGF2YWlsYWJsZS1oZWln
aHQgcHJvcGVydGllcyB0bworICAgICAqIHRoZSBhY3R1YWwgdmlzaWJsZSBhcmVhKS4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWdu
YWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxBQkxFXSA9IGdfc2lnbmFsX25ldygidmlld3Bv
cnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9G
Uk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJ
R05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19P
QkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisgICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3
Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJsZQorICAgICAqIEB3ZWJfdmlldzogdGhlIG9i
amVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0
ZXM6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQg
YXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQt
YXR0cmlidXRlcy1hdmFpbGFibGUgd2lsbCBiZSBlbWl0dGVkIHdpdGggQHZpZXdwb3J0X2F0dHJp
YnV0ZXMKKyAgICAgKiB3aGVuIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIGlu
IHRoZSBjYXNlIG9mIGxvYWRpbmcgd2ViIHBhZ2VzIGNvbnRhaW4KKyAgICAgKiB0aGUgdmlld3Bv
cnQgcHJvcGVydGllcyBhbmQgY2FsbGluZyB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNv
bXB1dGUuCisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0ZXMgaXMgdXNlZCB0byBjb250cm9sIHRo
ZSB2aWV3cG9ydCBsYXlvdXQgdG8gbWFrZSBhIHdlYiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVl
bi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuNQorICAgICAqLworICAgIHdlYmtpdF93ZWJf
dmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxBQkxFXSA9IGdfc2lnbmFsX25l
dygidmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUiLAorICAgICAgICAgICAgR19UWVBFX0ZS
T01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lH
TkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAsCisgICAgICAg
ICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09C
SkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZ
UEVfVklFV1BPUlRfQVRUUklCVVRFUyk7CisKKyAgICAvKgogICAgICAqIGltcGxlbWVudGF0aW9u
cyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZV93
ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93ZWJfdmlldzsKQEAgLTI4NDUs
NiArMjkwNiwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJL
aXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAK
ICAgICAvKioKKyAgICAqIFdlYktpdFdlYlZpZXc6dmlld3BvcnQtYXR0cmlidXRlczoKKyAgICAq
CisgICAgKiBUaGUgYXNzb2NpYXRlZCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNl
LgorICAgICoKKyAgICAqIFNpbmNlOiAxLjMuNQorICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgi
dmlld3BvcnQtYXR0cmlidXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlZpZXdwb3J0IEF0dHJpYnV0ZXMiKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGFz
c29jaWF0ZWQgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9UWVBF
X1ZJRVdQT1JUX0FUVFJJQlVURVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoq
CiAgICAgKiBXZWJLaXRXZWJWaWV3OndpbmRvdy1mZWF0dXJlczoKICAgICAqCiAgICAgKiBBbiBh
c3NvY2lhdGVkIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzIGluc3RhbmNlLgpAQCAtMzI3MSw2ICsz
MzQ2LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcq
IHdlYlZpZXcpCiAgICAgcHJpdi0+d2ViSW5zcGVjdG9yID0gYWRvcHRQbGF0Zm9ybVJlZihXRUJL
SVRfV0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwg
TlVMTCkpKTsKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfaW5zcGVjdG9yX2NsaWVudChw
cml2LT53ZWJJbnNwZWN0b3IuZ2V0KCksIHByaXYtPmNvcmVQYWdlKTsKIAorICAgIC8vIEFuZCBv
dXIgVmlld3BvcnRBdHRyaWJ1dGVzIGZyaWVuZC4KKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0
ZXMgPSBhZG9wdFBsYXRmb3JtUmVmKFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKGdfb2JqZWN0
X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBOVUxMKSkpOworICAgIHByaXYt
PnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+d2ViVmlldyA9IHdlYlZpZXc7CisKICAgICAvLyBU
aGUgc21hcnQgcG9pbnRlciB3aWxsIGNhbGwgZ19vYmplY3RfcmVmX3Npbmsgb24gdGhlc2UgYWRq
dXN0bWVudHMuCiAgICAgcHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBHVEtfQURKVVNUTUVO
VChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpOwogICAg
IHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50
X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7CkBAIC0zNDEwLDYgKzM0ODksMjkg
QEAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT53ZWJJbnNwZWN0
b3IuZ2V0KCk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzOgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBPYnRhaW5zIHRo
ZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJL
aXRXZWJWaWV3LiBFdmVyeSAjV2ViS2l0V2ViVmlldyBvYmplY3QgaGFzIGEKKyAqICNXZWJLaXRX
ZWJWaWV3cG9yX0F0dHJpYnV0ZXMgb2JqZWN0IGF0dGFjaGVkIHRvIGl0IGFzIHNvb24gYXMgaXQg
aXMKKyAqIGNyZWF0ZWQsIHNvIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IHJldHVybiBOVUxMIGlm
IHRoZSBhcmd1bWVudCBpcworICogbm90IGEgdmFsaWQgI1dlYktpdFdlYlZpZXcuIERvIG5vdGUg
aG93ZXZlciB0aGF0IHRoZSB2aWV3cG9ydAorICogYXR0cmlidXRlcyBvYmplY3Qgb25seSBjb250
YWlucyB2YWxpZCBpbmZvcm1hdGlvbiB3aGVuIHRoZSBjdXJyZW50CisgKiBwYWdlIGhhcyBhIHZp
ZXdwb3J0IG1ldGEgdGFnLiBZb3UgY2FuIGNoZWNrIHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkCisg
KiBiZSB1c2VkIGJ5IGNoZWNraW5nIHRoZSAjV2ViS2l0Vmlld3BvcnQ6dmFsaWQgcHJvcGVydHku
CisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICoKKyAqIFNpbmNlOiAxLjMuNQorICovCitXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRl
cyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdF
QktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYt
PnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKTsKK30KKwogLy8gaW50ZXJuYWwKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19zZXRfd2luZG93X2ZlYXR1cmVzKFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcsIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3ZWJXaW5kb3dGZWF0dXJlcykKIHsKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA5ZGZiNjU0Li42YjFlOWM1IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQv
d2Via2l0d2Vidmlldy5oCkBAIC00MDEsNiArNDAxLDkgQEAgd2Via2l0X2dldF9jYWNoZV9tb2Rl
bCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwogV0VCS0lUX0FQSSBXZWJLaXRET01E
b2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9kb2N1bWVudCAgICAgICAgICAgICAg
ICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRl
cyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CisKIEdfRU5EX0RFQ0xT
CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDM1MzJjOTIuLmYwMDhiYjYgMTAwNjQ0Ci0tLSBhL1dlYktpdFRv
b2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBA
QAorMjAxMC0xMS0xOSAgSm9vbmUgSHVyICA8am9vbmVAa2xkcC5vcmc+CisKKyAgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2
aWV3cG9ydCBtZXRhIHRhZworICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSB2
aWV3cG9ydCBwcm9wZXJ0aWVzIGZvciBXZWJLaXRHdGsuCisKKyAgICAgICAgICogRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAgICAgICAgKGR1bXBDb25maWd1cmF0
aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIEphdmFTY3JpcHQgQVBJIHRvIHNldCB0aGUgc2l6
ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaDoKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmln
dXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgdGhpcyBmdW5jdGlvbiB0byB0ZXN0IHRoZSB2aWV3
cG9ydCBwcm9wZXJ0aWVzLgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVz
dENvbnRyb2xsZXJNYWMubW06CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZp
Z3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9x
dC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisgICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHA6CisgICAgICAgICAoTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTog
RGl0dG8uCisKIDIwMTAtMTEtMTggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBw
bGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCAtIGFzIHBlciBEUlQtbWFjLCBhbHdheXMgZW5h
YmxlZCBkZXZlbG9wZXIgZXh0cmFzLApkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCmluZGV4IDk2MTkzODkuLmU4YjM0NmQgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNw
cAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBK
b29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0xNDAsNiArMTQxLDIyIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTCiAgICAgcmV0dXJu
IEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBk
dW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291
bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikK
K3sKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IDIpCisgICAgICAgIHJldHVybiBKU1ZhbHVlTWFr
ZVVuZGVmaW5lZChjb250ZXh0KTsKKworICAgIGRvdWJsZSBhdmFpbGFibGVXaWR0aCA9IEpTVmFs
dWVUb051bWJlcihjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJU
KCEqZXhjZXB0aW9uKTsKKyAgICBkb3VibGUgYXZhaWxhYmxlSGVpZ2h0ID0gSlNWYWx1ZVRvTnVt
YmVyKGNvbnRleHQsIGFyZ3VtZW50c1sxXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNl
cHRpb24pOworCisgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xsZXIgPSBzdGF0aWNf
Y2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0ZSh0aGlzT2JqZWN0
KSk7CisgICAgY29udHJvbGxlci0+Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KHN0YXRpY19jYXN0
PGludD4oYXZhaWxhYmxlV2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJsZUhlaWdodCkp
OworICAgCisgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworfQorCiBz
dGF0aWMgSlNWYWx1ZVJlZiBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjayhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3Qs
IHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgTGF5b3V0VGVzdENvbnRyb2xsZXIqIGNvbnRyb2xs
ZXIgPSBzdGF0aWNfY2FzdDxMYXlvdXRUZXN0Q29udHJvbGxlcio+KEpTT2JqZWN0R2V0UHJpdmF0
ZSh0aGlzT2JqZWN0KSk7CkBAIC0xODk2LDYgKzE5MTMsNyBAQCBKU1N0YXRpY0Z1bmN0aW9uKiBM
YXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKCkKICAgICAgICAgeyAiZHVtcEJh
Y2tGb3J3YXJkTGlzdCIsIGR1bXBCYWNrRm9yd2FyZExpc3RDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAg
ICAgICB7ICJkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9ucyIsIGR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENoaWxkRnJhbWVz
QXNUZXh0IiwgZHVtcENoaWxkRnJhbWVzQXNUZXh0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAgICAgICAg
eyAiZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCIsIGR1bXBDb25maWd1cmF0aW9uRm9yVmll
d3BvcnQsIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERPTUFzV2ViQXJjaGl2ZSIsIGR1bXBET01B
c1dlYkFyY2hpdmVDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wRGF0YWJhc2VDYWxs
YmFja3MiLCBkdW1wRGF0YWJhc2VDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJkdW1wRWRpdGluZ0NhbGxiYWNrcyIsIGR1bXBFZGl0aW5nQ2FsbGJhY2tzQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmggYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5oCmluZGV4IGI2MTg2MGIuLjNhOGFkNzggMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKKysrIGIvV2ViS2l0VG9vbHMvRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaApAQCAtMjg0LDYgKzI4NCw4IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgaGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgp
OwogCisgICAgdm9pZCBjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRo
LCBpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKKwogICAgIC8vIFRoZSBmb2xsb3dpbmcgQVBJIHRlc3Qg
ZnVuY3Rpb25zIHNob3VsZCBwcm9iYWJseSBiZSBtb3ZlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyAK
ICAgICAvLyB1bml0IHRlc3RzIG91dHNpZGUgb2YgRFJUIG9uY2UgdGhleSBleGlzdC4KICAgICB2
b2lkIGFwaVRlc3ROZXdXaW5kb3dEYXRhTG9hZEJhc2VVUkwoSlNTdHJpbmdSZWYgdXRmOERhdGEs
IEpTU3RyaW5nUmVmIGJhc2VVUkwpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKaW5kZXggMzlmYjExNi4u
MjY3YmEwMyAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91
dFRlc3RDb250cm9sbGVyR3RrLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9n
dGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IE51YW50aSBMdGQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmFuIE1pY2hh
ZWwgQWxvbnpvIDxqbWFsb256b0BnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQ29s
bGFib3JhIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAu
b3JnPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00Nyw2ICs0OCw3IEBACiAj
aW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdC5oPgogI2lu
Y2x1ZGUgPHd0Zi9nb2JqZWN0L0dPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVm
UHRyLmg+CiAKIGV4dGVybiAiQyIgewogYm9vbCB3ZWJraXRfd2ViX2ZyYW1lX3BhdXNlX2FuaW1h
dGlvbihXZWJLaXRXZWJGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBuYW1lLCBkb3VibGUgdGlt
ZSwgY29uc3QgZ2NoYXIqIGVsZW1lbnQpOwpAQCAtODI3LDMgKzgyOSwxMCBAQCBib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRo
LCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh3ZWJW
aWV3KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0dHJp
YnV0ZXNGb3JTaXplKHdlYlZpZXcsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGIxOWQ2YjUuLmY4ZDVkZDIgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0KQEAgLTk1MywzICs5NTMsNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNT
cGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gW21haW5G
cmFtZSBoYXNTcGVsbGluZ01hcmtlcjpmcm9tIGxlbmd0aDpsZW5ndGhdOwogfQordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVX
aWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5k
ZXggMDA0M2NlNi4uZGFhZjgxMCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xNDA5LDMgKzE0
MDksOCBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQg
ZnJvbSwgaW50IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiByZXQ7
CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRleCAzMjYxNGMxLi4wZGI1
NmI4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcApAQCAtNTExLDYgKzUxMSwxMSBAQCBib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudAorfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBw
YWdlTnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
</data>
<flag name="review"
          id="64995"
          type_id="1"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75718</attachid>
            <date>2010-12-06 11:45:37 -0800</date>
            <delta_ts>2010-12-06 12:09:21 -0800</delta_ts>
            <desc>P</desc>
            <filename>viewport12.diff</filename>
            <type>text/plain</type>
            <size>56247</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5ZTdiMzVhLi5lNmYxZDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTIt
MDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEyLTA2ICBNaWhhaSBQYXJwYXJpdGEgIDxt
aWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgbW92ZSBvZiBDaHJvbWl1
bSBiYXNlbGluZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGViYzc5MzQuLjk5N2Fi
NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NTA1LDcgKzU1MDUsOCBAQCBmdWxs
c2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5o
dG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQv
dmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkg
dG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1
aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IDI2NjQ2YjYuLjg3MTU1ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIw
MTAtMTItMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0
IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVy
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUgdmlld3BvcnQgc2l6ZSwg
aW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91
dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmll
d3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkg
U2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0
aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGli
cmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJh
cnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJl
Zi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNw
cC4gCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6
IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVu
dHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXNGb3JTaXplKTogQWRkZWQgdGhpcyBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSB2aWV3
cG9ydCBhdHRyaWJ1dGVzIHdpdGggdGhlIGdpdmVuIGF2YWlsYWJsZVdpZHRoIGFuZCBhdmFpbGFi
bGVIZWlnaHQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
OiAKKyAgICAgICAgKFdlYktpdDo6cG9zdENvbW1pdEZyYW1lVmlld1NldHVwKTogSW52YWxpZGF0
ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
cHJpdmF0ZS5oOiBBZGRlZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUgYXMgYSBw
cml2YXRlIGZ1bmN0aW9uLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkpOgorICAgICAgICAo
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtp
dFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZSk6IFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3
cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJs
ZSBzaWduYWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUp
OiBhIHB1YmxpYyBBUEkgZm9yIGNhbGxpbmcgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21w
dXRlLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDogQWRkZWQu
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2dldF9wcm9wZXJ0eSk6IEFkZGVkIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUy4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTogRGVhbGxvY2F0ZSB0aGUgV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBBZGRlZCB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVk
IGFuZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUgc2lnbmFscy4KKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19pbml0KTogU2V0IHRoZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMg
aW5zdGFuY2UuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXMpOiBBZGRlZCBhIGdldHRlciB0byBvYnRhaW4gdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyBpbnN0YW5jZSBoZWxkIGJ5IHRoZSBnaXZlbiBXZWJLaXRXZWJWaWV3LgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisKIDIwMTAtMTItMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGE4NDZmN2YuLmFiYWRjZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTE5LDYgKzEx
OSw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhc291cmNlLmggXApAQCAtMTgyLDYgKzE4Myw3IEBAIHdlYmtpdGd0a19z
b3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmMgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHZlcnNpb24uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmNwcCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCAxOTBhZTliLi5jNjhhZDU4IDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
R3RrLmgiCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpA
QCAtNjE2LDYgKzYxNywxMiBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNob29zZXIt
Pmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCit2
b2lkIENocm9tZUNsaWVudDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmll
d3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICAvLyBSZWNvbXB1dGUgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMgbWFraW5nIGl0IHZhbGlkLgorICAgIHdlYmtpdFZpZXdwb3J0
QXR0cmlidXRlc1JlY29tcHV0ZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXMobV93ZWJWaWV3KSwgdHJ1ZSk7Cit9CisKIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3Io
Y29uc3QgQ3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggODI1MmYwNi4uYjRhMWEzNyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xMTAsNiAr
MTEwLDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRv
b2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3Q7CisKICAgICAgICAgdmly
dHVhbCB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lKik7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCAxMDY5NGQwLi5iMjRlZDEw
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zNzcsMyArMzc4LDE0IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKQogICAgIFNlY3VyaXR5T3JpZ2luOjpy
ZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKIH0KIAorLy8gRm9yIHRlc3RpbmcgZmFzdC92
aWV3cG9ydC4KK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wdXRlVmlld3BvcnRB
dHRyaWJ1dGVzRm9yU2l6ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWlsYWJsZVdp
ZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVu
dHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnZp
ZXdwb3J0QXJndW1lbnRzKCk7CisgICAgLy8gZGVza3RvcFdpZHRoID0gOTgwLCBkZXZpY2VXaWR0
aCA9IDMyMCwgZGV2aWNlSGVpZ2h0ID0gNDgwLCBkZXZpY2VEUEkgPSAxNjAKKyAgICBWaWV3cG9y
dEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywg
OTgwLCAzMjAsIDQ4MCwgMTYwLCBJbnRTaXplKGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWln
aHQpKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAidmlld3BvcnQgc2l6ZSAlZHglZCBzY2FsZSAl
ZiB3aXRoIGxpbWl0cyBbJWYsICVmXVxuIiwgYXR0cnMubGF5b3V0U2l6ZS53aWR0aCgpLCBhdHRy
cy5sYXlvdXRTaXplLmhlaWdodCgpLCBhdHRycy5pbml0aWFsU2NhbGUsIGF0dHJzLm1pbmltdW1T
Y2FsZSwgYXR0cnMubWF4aW11bVNjYWxlKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCmluZGV4IGVmNTdiMTQuLmQ4ZDlm
NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaApAQCAtMjEsNiArMjEsNyBAQAogCiAKICNpbmNsdWRlICJKU1N0cmluZ1Jl
Zi5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAKICNpbmNsdWRlIDxhdGsv
YXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpAQCAtNDAsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0
aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7CiAgICAgc3RhdGljIEpTVmFsdWVS
ZWYgbm9kZXNGcm9tUmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwg
aW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3AsIHVuc2lnbmVkIHJpZ2h0LCB1bnNpZ25lZCBib3R0
b20sIHVuc2lnbmVkIGxlZnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcpOworICAgIHN0YXRpYyB2b2lk
IGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAgIC8vIEZJ
WE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVpciBBUEkgaGFzIGJl
ZW4gZGlzY3Vzc2VkLgogICAgIHN0YXRpYyBHU0xpc3QqIGdldEZyYW1lQ2hpbGRyZW4oV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggM2RiYmExMi4uMzRiNWIxMSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTEy
ODIsNiArMTI4MiwxMiBAQCBzdGF0aWMgdm9pZCBwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXAoV2Vi
S2l0V2ViRnJhbWUgKmZyYW1lLCBGcmFtZVZpZXcgKnZpZXcsIGJvbwogICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKGNvbnRhaW5pbmdX
aW5kb3cpOwogICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKHByaXYtPmhvcml6b250YWxBZGp1
c3RtZW50LmdldCgpLCBwcml2LT52ZXJ0aWNhbEFkanVzdG1lbnQuZ2V0KCksIHJlc2V0VmFsdWVz
KTsKIAorICAgIC8vIEludmFsaWRhdGUgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgLSB0aGV5IHdp
bGwgb25seSBiZSB2YWxpZAorICAgIC8vIGFnYWluIGlmIHRoZSBwYWdlIHdlJ3JlIGJlZ2lubmlu
ZyB0byBsb2FkIG5vdyBoYXMgYW4KKyAgICAvLyBhcHByb3ByaWF0ZSB2aWV3cG9ydCBtZXRhIHRh
Zy4KKyAgICBjb250YWluaW5nV2luZG93LT5wcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYt
PmlzVmFsaWQgPSBGQUxTRTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoY29udGFpbmlu
Z1dpbmRvdy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKSwgInZhbGlkIik7CisKICAg
ICBpZiAocHJpdi0+Y3VycmVudE1lbnUpIHsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVu
dT4gbWVudShwcml2LT5jdXJyZW50TWVudSk7CiAgICAgICAgIHByaXYtPmN1cnJlbnRNZW51LmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGZjNzFjMmMuLjI0MjhmNjIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2
aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJj
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJzZXR0aW5ncy5oPgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGIw
NmEzYmYuLjM5OWNiNGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmlu
ZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTkyLDYgKzky
LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyBXZWJLaXRIaXRU
ZXN0UmVzdWx0Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lE
ZWNpc2lvbiBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uOwogdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyBXZWJLaXRHZW9sb2NhdGlvblBv
bGljeURlY2lzaW9uQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCAwYjU5
NzQ2Li5kOTk2NWU3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgpAQCAt
MTM3LDYgKzEzOCw3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3Jl
UGFnZTsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViU2V0dGluZ3M+IHdlYlNldHRp
bmdzOwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3Bl
Y3RvcjsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2
aWV3cG9ydEF0dHJpYnV0ZXM7CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYldpbmRv
d0ZlYXR1cmVzPiB3ZWJXaW5kb3dGZWF0dXJlczsKIAogICAgICAgICBXZWJLaXRXZWJGcmFtZSog
bWFpbkZyYW1lOwpAQCAtMjE1LDYgKzIxNywyNSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2Jv
b2xlYW4gZGlzcG9zZWQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAg
IGludCBkZXZpY2VXaWR0aDsKKyAgICAgICAgaW50IGRldmljZUhlaWdodDsKKyAgICAgICAgaW50
IGF2YWlsYWJsZVdpZHRoOworICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICBp
bnQgZGVza3RvcFdpZHRoOworICAgICAgICBpbnQgZGV2aWNlRFBJOworCisgICAgICAgIGludCB3
aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlRmFj
dG9yOworICAgICAgICBmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1h
eGltdW1TY2FsZUZhY3RvcjsKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAg
ICAgZ2Jvb2xlYW4gdXNlclNjYWxhYmxlOworICAgICAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAg
IH07CisKICAgICBXVEY6OlN0cmluZwogICAgIHdlYmtpdFVzZXJBZ2VudCgpOwogCkBAIC0zNzQs
NiArMzk1LDggQEAgZXh0ZXJuICJDIiB7CiAKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdFbnRlckZ1
bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CiAg
ICAgdm9pZCB3ZWJraXRXZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmll
dyk7CisKKyAgICB2b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqLCBib29sKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MDIyOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJ3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2lu
Y2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisK
Ky8qKgorICogU0VDVElPTjp3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9ydF9kZXNj
cmlwdGlvbjogUmVwcmVzZW50cyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdlYiBwYWdl
CisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29t
cHV0ZS1yZXF1ZXN0ZWQKKyAqIEBzZWVfYWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0
dHJpYnV0ZXMtYXZhaWxhYmxlCisgKgorICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBvZmZl
cnMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgdG8gdXNlciBhZ2VudHMgdG8KKyAqIGNvbnRyb2wg
dGhlIHZpZXdwb3J0IGxheW91dC4gSXQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHNpemUsIGluaXRp
YWwgc2NhbGUgd2l0aCBsaW1pdHMsCisgKiBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBh
IHVzZXIgaXMgYWJsZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICog
VGhpcyBtYWtlcyBhIHdlYiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAqCisgKiBUaGUg
I1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIHNpZ25hbCB3aWxs
IGJlIGVtaXR0ZWQgd2l0aCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKiB3aGVuIHRoZSB2
aWV3cG9ydCBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIGluIHRoZSBjYXNlIG9mIGxvYWRpbmcgd2Vi
IHBhZ2VzIGNvbnRhaW4KKyAqIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAqCisgKiBJZiB0aGUgZGV2aWNl
IHNpemUsIGF2YWlsYWJsZSBzaXplLCBkZXNrdG9wIHdpZHRoLCBvciBkZXZpY2UgRFBJIG5lZWRz
IHRvIGJlIGNoYW5nZWQgZHVlIHRvIAorICogYSBjb25zZXF1ZW5jZSBvZiBhbiBleHBsaWNpdCBi
cm93c2VyIHJlcXVlc3QgKGNhdXNlZCBieSBzY3JlZW4gcm90YXRpb24sIHJlc2l6aW5nLCBvciBz
aW1pbGFyIHJlYXNvbnMpLAorICogWW91IHNob3VsZCBjYWxsICN3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19yZWNvbXB1dGUgdG8gcmVjb21wdXRlIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFu
ZCAKKyAqIG92ZXJyaWRlIHRob3NlIHZhbHVlcyBpbiB0aGUgaGFuZGxlciBvZiAjV2ViS2l0V2Vi
Vmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbC4KKyAq
CisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVm
ZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFyeSBhdAorICogaHR0cDovL2RldmVsb3Bl
ci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9u
cy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisgKgorICog
PGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rpbmc+CisgKiAvPCEtLSAtLT4qIENvbm5lY3Qg
dG8gdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlcyBzaWduYWwgKjwhLS0gLS0+LworICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gd2Via2l0X3dlYl92aWV3X2dl
dF92aWV3cG9ydF9hdHRyaWJ1dGVzICh3ZWJfdmlldyk7CisgKiBnX3NpZ25hbF9jb25uZWN0ICh3
ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsIEdfQ0FM
TEJBQ0sgKHZpZXdwb3J0X3JlY29tcHV0ZV9jYiksIHdpbmRvdyk7CisgKiBnX3NpZ25hbF9jb25u
ZWN0ICh3ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIiwgR19DQUxMQkFD
SyAodmlld3BvcnRfYXZhaWxhYmxlX2NiKSwgd2luZG93KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3Qg
KGF0dHJpYnV0ZXMsICJub3RpZnk6OnZhbGlkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfdmFsaWRf
Y2hhbmdlZF9jYiksIHdlYl92aWV3KTsKKyAqCisgKiAvPCEtLSAtLT4qIEhhbmRsZSB0aGUgdmll
d3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCB0byBvdmVycmlkZSB0
aGUgZGV2aWNlIHdpZHRoICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkCisgKiB2aWV3cG9ydF9y
ZWNvbXB1dGVfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqIGF0dHJpYnV0ZXMsIEd0a1dpZGdldCogd2luZG93KQorICogeworICogICAgIGludCBv
dmVycmlkZV9hdmFpbGFibGVfd2lkdGggPSA0ODA7CisgKiAgICAgZ19vYmplY3Rfc2V0IChHX09C
SkVDVChhdHRyaWJ1dGVzKSwgImF2YWlsYWJsZS13aWR0aCIsIG92ZXJyaWRlX2F2YWlsYWJsZV93
aWR0aCwgTlVMTCk7CisgKiB9CisgKgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdwb3J0
LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIHNpZ25hbCB0byByZWNvbXB1dGUgdGhlIGluaXRpYWwgc2Nh
bGUgZmFjdG9yICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkIAorICogdmlld3BvcnRfYXZhaWxh
YmxlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
KiBhdHRyaWJ1dGVzLCBncG9pbnRlciBkYXRhKQorICogeworICogICAgIGdmbG9hdCBpbml0aWFs
U2NhbGU7CisgKiAgICAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoYXRyaWJ1dGVzKSwgImluaXRp
YWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVMTCk7CisgKiAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgaW5pdGlhbFNjYWxlKTsKKyAqIH0KKyAq
IAorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIG5vdGlmeTo6dmFsaWQgc2lnbmFsIHRvIGluaXRp
YWxpemUgdGhlIHpvb20gbGV2ZWwgKjwhLS0gLS0+LworICogc3RhdGljIHZvaWQKKyAqIHZpZXdw
b3J0X3ZhbGlkX2NoYW5nZWRfY2IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRl
cywgR1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KQorICogeworICog
ICAgIGdib29sZWFuIGlzX3ZhbGlkOworICogICAgIGdfb2JqZWN0X2dldCAoYXR0cmlidXRlcywg
InZhbGlkIiwgJmlzX3ZhbGlkLCBOVUxMKTsKKyAqICAgICBpZiAoIWlzX3ZhbGlkKSAKKyAqICAg
ICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgMS4wKTsKKyAq
IH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisKKyAgICBQUk9QX0RFVklDRV9XSURUSCwKKyAgICBQUk9QX0RFVklDRV9IRUlH
SFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgUFJPUF9BVkFJTEFCTEVfSEVJR0hU
LAorICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAgICBQUk9QX0RFVklDRV9EUEksCisgICAgUFJP
UF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9S
LAorICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgUFJPUF9NQVhJTVVNX1NDQUxF
X0ZBQ1RPUiwKKyAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICBQUk9QX1VTRVJfU0NB
TEFCTEUsCisgICAgUFJPUF9WQUxJRAorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsK
KworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURShvYmopICAg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUpKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYyk7Citz
dGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
ICpwc3BlYyk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNz
X2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MqIGtjbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtjbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0czpkZXZpY2Utd2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2Yg
dGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHBy
ZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFu
ZAorICAgICAqIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBoYW5kbGVyIG9mCisgICAgICogV2Vi
S2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiBZb3UK
KyAgICAgKiBzaG91bGQgbm90IGRvIHRoYXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJl
YXNvbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9ERVZJQ0VfV0lEVEgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRldmljZS13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJEZXZpY2UgV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuLiIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRldmljZS1oZWln
aHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uIFRoaXMgdmFsdWUg
aXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBwcmUtY29tcHV0ZWQgZHVyaW5nIGEgdmll
d3BvcnQgYXR0cmlidXRlcyByZWNvbXB1dGF0aW9uLCBhbmQKKyAgICAgKiBjYW4gYmUgb3ZlcnJp
ZGVuIGJ5IHRoZSBoYW5kbGVyIG9mCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiBZb3UKKyAgICAgKiBzaG91bGQgbm90IGRvIHRo
YXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9E
RVZJQ0VfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2Ut
aGVpZ2h0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBI
ZWlnaHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWln
aHQgb2YgdGhlIHNjcmVlbi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czphdmFpbGFibGUtd2lkdGg6CisgICAgICoKKyAgICAg
KiBUaGUgd2lkdGggb2YgdGhlIGN1cnJlbnQgdmlzaWJsZSBhcmVhLiBUaGlzIHdpbGwgdXN1YWxs
eSBiZSB0aGUKKyAgICAgKiBzYW1lIGFzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhlIHdpZGdl
dCwgYnV0IGluIHNvbWUgY2FzZXMKKyAgICAgKiB5b3UgbWF5IGhhdmUgZGVjaWRlZCB0byBtYWtl
IHRoZSB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUKKyAgICAgKiBhcmVhLiBUaGlzIHZh
bHVlIGlzIGJ5IGRlZmF1bHQgaW5pdGlhbGl6ZWQgdG8gdGhlIHNpemUKKyAgICAgKiBhbGxvY2F0
ZWQgYnkgdGhlIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgaXQgaW4gdGhlIGhhbmRsZXIK
KyAgICAgKiBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1y
ZXF1ZXN0ZWQgdG8KKyAgICAgKiBsZXQgdGhlIGVuZ2luZSBrbm93IHdoYXQgdGhlIHZpc2libGUg
YXJlYSBpcy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZS13aWR0aCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJBdmFpbGFibGUgV2lkdGgiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRzOmF2YWlsYWJsZS1oZWlnaHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRo
ZSBjdXJyZW50IHZpc2libGUgYXJlYS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICog
c2FtZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNh
c2VzCisgICAgICogeW91IG1heSBoYXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dl
ciB0aGFuIHRoZSB2aXNpYmxlCisgICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0
IGluaXRpYWxpemVkIHRvIHRoZSBzaXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQs
IGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0
V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAg
ICogbGV0IHRoZSBlbmdpbmUga25vdyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMuCisgICAgICoK
KyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfQVZBSUxBQkxFX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXZhaWxhYmxlLWhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJBdmFpbGFibGUgSGVpZ2h0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgaGVpZ2h0IG9mIHRoZSB2aXNpYmxlIGFyZWEuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGVza3Rv
cC13aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB2aWV3cG9ydCB0aGF0IHdvcmtz
IHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIAorICAgICAqIGRlc2lnbmVkIGZvciBkZXNrdG9wLiBU
aGlzIHZhbHVlIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVkIGR1
cmluZyBhIHZpZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICogY2Fu
IGJlIG92ZXJyaWRlbiBieSB0aGUgaGFuZGxlciBvZgorICAgICAqIFdlYktpdFdlYlZpZXc6OnZp
ZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZC4gWW91CisgICAgICogc2hvdWxk
IG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29vZCByZWFzb24uCisgICAgICoK
KyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVza3RvcC13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJEZXNrdG9wIFdpZHRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgd2lkdGggb2Ygdmlld3BvcnQgdGhhdCB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdl
cyBkZXNpZ25lZCBmb3IgZGVza3RvcC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtZHBpOgorICAgICAqCisgICAg
ICogVGhlIG51bWJlciBvZiBkb3RzIHBlciBpbmNoIG9mIHRoZSBzY3JlZW4uCisgICAgICogVGhp
cyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJp
bmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBi
ZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3
cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBu
b3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0RFVklDRV9EUEksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
dmljZS1kcGkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNl
IERQSSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG51bWJl
ciBvZiBkb3RzIHBlciBpbmNoIG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6d2lkdGg6CisgICAgICoK
KyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5n
IHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICogCisgICAgICogU2luY2U6IDEu
My44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1dJRFRILAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmhlaWdo
dDoKKyAgICAgKgorICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJl
Zm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAor
ICAgICAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSGVpZ2h0IiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9y
dC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRzOmluaXRpYWwtc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhlIGluaXRp
YWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJv
cGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSU5JVElBTF9TQ0FMRV9GQUNU
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxv
YXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbC1zY2FsZS1m
YWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSW5pdGlhbCBT
Y2FsZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czptaW5pbXVtLXNjYWxl
LWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBtaW5pbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9y
dC4KKyAgICAgKiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCB5b3UgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCAKKyAgICAgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgor
ICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIk1pbmltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUg
dmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWF4aW11bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAg
KiBUaGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuCisgICAgICogQmVmb3JlIGdldHRp
bmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgCisgICAgICogI1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAx
LjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NQVhJTVVN
X1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhp
bXVtLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJNYXhpbXVtIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRl
dmljZS1waXhlbC1yYXRpbzoKKyAgICAgKgorICAgICAqIFRoZSBkZXZpY2UgcGl4ZWwgcmF0aW8g
b2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIHlv
dSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1waXhlbC1yYXRpbyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgUGl4ZWwgUmF0aW8iKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBkZXZpY2UgcGl4ZWwg
cmF0aW8gb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOnVzZXItc2NhbGFibGU6CisgICAgICoK
KyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29tIGluIGFu
ZCBvdXQuCisgICAgICogQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgCisgICAgICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxp
ZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9VU0VSX1NDQUxBQkxFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJ1c2VyLXNjYWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJVc2VyIFNjYWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNh
biB6b29tIGluIGFuZCBvdXQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp2
YWxpZDoKKyAgICAgKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGF0dHJp
YnV0ZXMgYXJlCisgICAgICogdmFsaWQuICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXJlIG9u
bHkgdmFsaWQgb24gcGFnZXMgd2hpY2gKKyAgICAgKiBoYXZlIGEgdmlld3BvcnQgbWV0YSB0YWcs
IGFuZCBoYXZlIGFscmVhZHkgaGFkIHRoZSBhdHRyaWJ1dGVzCisgICAgICogY2FsY3VsYXRlZC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9WQUxJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygidmFsaWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlZhbGlkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRlcm1p
bmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZCwgYW5kIGNhbiBiZSB1
c2VkLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrY2xhc3MsIHNpemVvZihXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydCkKK3sK
KyAgICB2aWV3cG9ydC0+cHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklW
QVRFKHZpZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdi0+aXNWYWxpZCA9IEZBTFNFOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRl
cyA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKG9iamVjdCk7CisgICAgV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdjsKKwor
ICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ERVZJQ0VfV0lEVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlV2lkdGgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
aW50KHZhbHVlLCBwcml2LT5kZXZpY2VIZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHBy
aXYtPmF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlM
QUJMRV9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+YXZhaWxh
YmxlSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU0tUT1BfV0lEVEg6
CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGVza3RvcFdpZHRoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9EUEk6CisgICAgICAgIGdfdmFsdWVf
c2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlRFBJKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPndpZHRo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5oZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSU5JVElBTF9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVWSUNFX1BJWEVMX1JBVElPOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+ZGV2aWNlUGl4ZWxSYXRpbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9VU0VSX1NDQUxBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2
LT51c2VyU2NhbGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSUQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmlzVmFsaWQpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyAqcHNwZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9y
dEF0dHJpYnV0ZXMgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMt
PnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfREVWSUNFX1dJ
RFRIOgorICAgICAgICBwcml2LT5kZXZpY2VXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfSEVJR0hUOgorICAgICAgICBw
cml2LT5kZXZpY2VIZWlnaHQgPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAgICAgICBwcml2LT5hdmFpbGFi
bGVXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BVkFJTEFCTEVfSEVJR0hUOgorICAgICAgICBwcml2LT5hdmFpbGFibGVIZWlnaHQg
PSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVTS1RPUF9XSURUSDoKKyAgICAgICAgcHJpdi0+ZGVza3RvcFdpZHRoID0gZ192YWx1ZV9nZXRf
aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9EUEk6Cisg
ICAgICAgIHByaXYtPmRldmljZURQSSA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgYm9vbCBtYWtlVmFsaWQpCit7CisgICAg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRl
cy0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gcHJpdi0+d2ViVmlldzsKKwor
ICAgIEludFJlY3Qgd2luZG93UmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCkt
PndpbmRvd1JlY3QoKSk7CisgICAgcHJpdi0+ZGV2aWNlV2lkdGggPSB3aW5kb3dSZWN0LndpZHRo
KCk7CisgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQoKTsKKworICAg
IEludFJlY3QgcmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCktPnBhZ2VSZWN0
KCkpOworICAgIHByaXYtPmF2YWlsYWJsZVdpZHRoID0gcmVjdC53aWR0aCgpOworICAgIHByaXYt
PmF2YWlsYWJsZUhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBUaGlzIHZhbHVlIHdv
cmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRlc2lnbmVkIGZvciBkZXNrdG9wIGJyb3dzZXJz
LgorICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IDk4MDsKKyAgICAvLyBJdCBpcyB0aGUgZHBpIG9m
IHRoZSBvcmlnaW5hbCBpUGhvbmUgYW5kIEFuZHJvaWQgZGV2aWNlcy4KKyAgICBwcml2LT5kZXZp
Y2VEUEkgPSAxNjA7CisKKyAgICAvLyBGaXJzdCBvZiBhbGwsIHdlIGdpdmUgdGhlIGFwcGxpY2F0
aW9uIGFuIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZhbHVlcy4KKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21w
dXRlLXJlcXVlc3RlZCIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKKyAgICBWaWV3cG9ydEFyZ3Vt
ZW50cyBhcmd1bWVudHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7CisKKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMg
YXR0cmlidXRlcyA9IGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2LT5k
ZXNrdG9wV2lkdGgsIHByaXYtPmRldmljZVdpZHRoLCBwcml2LT5kZXZpY2VIZWlnaHQsIHByaXYt
PmRldmljZURQSSwgSW50U2l6ZShwcml2LT5hdmFpbGFibGVXaWR0aCwgcHJpdi0+YXZhaWxhYmxl
SGVpZ2h0KSk7CisKKyAgICBwcml2LT53aWR0aCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0
aCgpOworICAgIHByaXYtPmhlaWdodCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS5oZWlnaHQoKTsK
KyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsK
KyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsK
KyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsK
KyAgICBwcml2LT5kZXZpY2VQaXhlbFJhdGlvID0gYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlv
OworICAgIHByaXYtPnVzZXJTY2FsYWJsZSA9IGFyZ3VtZW50cy51c2VyU2NhbGFibGU7CisKKyAg
ICBpZiAobWFrZVZhbGlkKSB7CisgICAgICAgIHByaXYtPmlzVmFsaWQgPSBUUlVFOworICAgICAg
ICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzKSwgInZhbGlkIik7
CisgICAgfQorCisgICAgLy8gTm93IGxldCB0aGUgYXBwbGljYXRpb24ga25vdyBpdCBpcyBzYWZl
IHRvIHVzZSB0aGUgbmV3CisgICAgLy8gdmFsdWVzLgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUiLCB2aWV3cG9ydEF0dHJp
YnV0ZXMpOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0
ZToKKyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcwor
ICoKKyAqIFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0
IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGUtYXZhaWxhYmxlIHNpZ25hbC4gCisgKiBUaGUgdmlld3Bv
cnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCBhbHNvIHdpbGwgYmUgaGFu
ZGxlZCB0byBvdmVycmlkZSAKKyAqIHRoZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUsIGRl
c2t0b3Agd2lkdGgsIG9yIGRldmljZSBEUEkuCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK3Zv
aWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIHdlYmtpdFZpZXdwb3J0QXR0cmli
dXRlc1JlY29tcHV0ZSh2aWV3cG9ydEF0dHJpYnV0ZXMsIGZhbHNlKTsKK30KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2Q5MGMxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlRf
QVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9B
VFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJLSVRfVklF
V1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVT
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRU
UklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JU
X0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
UHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAg
ICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlICpw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7CisgICAg
R09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBl
eHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBl
ICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3Bv
cnRBdHRyaWJ1dGVzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCmluZGV4IDU1OTkwNmEuLjM4OGNiMmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBU
ZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTQzLDcgKzQ0LDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlz
dEltcGwuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGll
c0d0ay5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50R3RrLmgiCkBAIC03Myw2ICs3NCw3
IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hl
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCkBAIC0xNzMsNyArMTc1
LDYgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0NBTkNFTExFRCwK
ICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKLQogICAgIFNIT1VMRF9CRUdJ
Tl9FRElUSU5HLAogICAgIFNIT1VMRF9FTkRfRURJVElORywKICAgICBTSE9VTERfSU5TRVJUX05P
REUsCkBAIC0xODUsNyArMTg2LDggQEAgZW51bSB7CiAgICAgRURJVElOR19CRUdBTiwKICAgICBV
U0VSX0NIQU5HRURfQ09OVEVOVFMsCiAgICAgRURJVElOR19FTkRFRCwKLQorICAgIFZJRVdQT1JU
X0FUVFJJQlVURVNfUkVDT01QVVRFX1JFUVVFU1RFRCwKKyAgICBWSUVXUE9SVF9BVFRSSUJVVEVT
X0FWQUlMQUJMRSwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTk5LDYgKzIwMSw3IEBAIGVu
dW0gewogICAgIFBST1BfRURJVEFCTEUsCiAgICAgUFJPUF9TRVRUSU5HUywKICAgICBQUk9QX1dF
Ql9JTlNQRUNUT1IsCisgICAgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAogICAgIFBST1BfV0lO
RE9XX0ZFQVRVUkVTLAogICAgIFBST1BfVFJBTlNQQVJFTlQsCiAgICAgUFJPUF9aT09NX0xFVkVM
LApAQCAtNTA4LDYgKzUxMSw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqCiAgICAgY2FzZSBQ
Uk9QX1dFQl9JTlNQRUNUT1I6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldykpOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmll
dykpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfV0lORE9XX0ZFQVRVUkVTOgogICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93
X2ZlYXR1cmVzKHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzU1LDYgKzEzNjEsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAg
ICAgfQogCiAgICAgcHJpdi0+d2ViSW5zcGVjdG9yLmNsZWFyKCk7CisgICAgcHJpdi0+dmlld3Bv
cnRBdHRyaWJ1dGVzLmNsZWFyKCk7CiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xlYXIo
KTsKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJj
ZXMuY2xlYXIoKTsKQEAgLTI3MTgsNiArMjcyNSw1OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKIAogICAg
IC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUt
cmVxdWVzdGVkCisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRo
ZSBzaWduYWwKKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlczogdGhlICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAqCisg
ICAgICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1y
ZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIHdoZW5ldmVyIHJlY29tcHV0
aW5nIHRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICogdmlld3BvcnQgYXR0cmlidXRlcyBpcyByZXF1
aXJlZC4gVGhhdCBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlCisgICAgICogdmlld3BvcnQgbWV0YSB0
YWcgb2YgYSBwYWdlIGhhcyBjaGFuZ2VkLCBvciBpdCBtYXkgaGFwcGVuIGFzIGEKKyAgICAgKiBj
b25zZXF1ZW5jZSBvZiBhbiBleHBsaWNpdCBicm93c2VyIHJlcXVlc3QgKGNhdXNlZCBieSBzY3Jl
ZW4KKyAgICAgKiByb3RhdGlvbiwgcmVzaXppbmcsIG9yIHNpbWlsYXIgcmVhc29ucykuCisgICAg
ICoKKyAgICAgKiBUaGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aWxsIGhhdmUgZGV2aWNl
IHNpemUsIGF2YWlsYWJsZSBzaXplLAorICAgICAqIGRlc2t0b3Agd2lkdGgsIGFuZCBkZXZpY2Ug
RFBJIHByZS1maWxsZWQgYnkgdmFsdWVzIHRoYXQgbWFrZSBzZW5zZSBmb3IgdGhlIGN1cnJlbnQK
KyAgICAgKiBzY3JlZW4gYW5kIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhvc2UgdmFs
dWVzIGlmIHlvdQorICAgICAqIGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgKGZvciBpbnN0YW5j
ZSwgaWYgeW91IG1hZGUgeW91cgorICAgICAqIHdpZGdldCBiaWdnZXIgdGhhbiB0aGUgYXZhaWxh
YmxlIHZpc2libGUgYXJlYSwgeW91IHNob3VsZAorICAgICAqIG92ZXJyaWRlIHRoZSBhdmFpbGFi
bGUtd2lkdGggYW5kIGF2YWlsYWJsZS1oZWlnaHQgcHJvcGVydGllcyB0bworICAgICAqIHRoZSBh
Y3R1YWwgdmlzaWJsZSBhcmVhKS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAq
LworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxB
QkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVz
dGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAg
IGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9O
RSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisg
ICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJs
ZQorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFs
CisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0ZXM6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIFRo
ZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUgd2lsbCBiZSBl
bWl0dGVkIHdpdGggQHZpZXdwb3J0X2F0dHJpYnV0ZXMKKyAgICAgKiB3aGVuIHRoZSB2aWV3cG9y
dCBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIGluIHRoZSBjYXNlIG9mIGxvYWRpbmcgd2ViIHBhZ2Vz
IGNvbnRhaW4KKyAgICAgKiB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQgY2FsbGluZyB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUuCisgICAgICogQHZpZXdwb3J0X2F0dHJp
YnV0ZXMgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQgdG8gbWFrZSBhIHdl
YiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMu
OAorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVU
RVNfQVZBSUxBQkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFi
bGUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAg
Z19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05F
LCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyk7CisKKyAg
ICAvKgogICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8K
ICAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFs
X2NyZWF0ZV93ZWJfdmlldzsKQEAgLTI5NjEsNiArMzAyMCwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAKICAgICAvKioKKyAgICAqIFdlYktpdFdlYlZpZXc6
dmlld3BvcnQtYXR0cmlidXRlczoKKyAgICAqCisgICAgKiBUaGUgYXNzb2NpYXRlZCAjV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICoKKyAgICAqIFNpbmNlOiAxLjMuOAor
ICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywg
UFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgidmlld3BvcnQtYXR0cmlidXRlcyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlZpZXdw
b3J0IEF0dHJpYnV0ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGFzc29jaWF0ZWQgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIGluc3RhbmNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCiAgICAgKiBXZWJLaXRXZWJWaWV3OndpbmRvdy1m
ZWF0dXJlczoKICAgICAqCiAgICAgKiBBbiBhc3NvY2lhdGVkIFdlYktpdFdlYldpbmRvd0ZlYXR1
cmVzIGluc3RhbmNlLgpAQCAtMzM4Nyw2ICszNDYwLDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+d2ViSW5zcGVj
dG9yID0gYWRvcHRQbGF0Zm9ybVJlZihXRUJLSVRfV0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwgTlVMTCkpKTsKICAgICB3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9zZXRfaW5zcGVjdG9yX2NsaWVudChwcml2LT53ZWJJbnNwZWN0b3IuZ2V0KCksIHByaXYt
PmNvcmVQYWdlKTsKIAorICAgIC8vIEFuZCBvdXIgVmlld3BvcnRBdHRyaWJ1dGVzIGZyaWVuZC4K
KyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMgPSBhZG9wdFBsYXRmb3JtUmVmKFdFQktJVF9W
SUVXUE9SVF9BVFRSSUJVVEVTKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRS
SUJVVEVTLCBOVUxMKSkpOworICAgIHByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+d2Vi
VmlldyA9IHdlYlZpZXc7CisKICAgICAvLyBUaGUgc21hcnQgcG9pbnRlciB3aWxsIGNhbGwgZ19v
YmplY3RfcmVmX3Npbmsgb24gdGhlc2UgYWRqdXN0bWVudHMuCiAgICAgcHJpdi0+aG9yaXpvbnRh
bEFkanVzdG1lbnQgPSBHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCkpOwogICAgIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IEdU
S19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wKSk7CkBAIC0zNTI2LDYgKzM2MDMsMjkgQEAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVy
biB3ZWJWaWV3LT5wcml2LT53ZWJJbnNwZWN0b3IuZ2V0KCk7CiB9CiAKKy8qKgorICogd2Via2l0
X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzOgorICogQHdlYlZpZXc6IGEgI1dlYktp
dFdlYlZpZXcKKyAqCisgKiBPYnRhaW5zIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFz
c29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBFdmVyeSAjV2ViS2l0V2ViVmll
dyBvYmplY3QgaGFzIGEKKyAqICNXZWJLaXRXZWJWaWV3cG9yX0F0dHJpYnV0ZXMgb2JqZWN0IGF0
dGFjaGVkIHRvIGl0IGFzIHNvb24gYXMgaXQgaXMKKyAqIGNyZWF0ZWQsIHNvIHRoaXMgZnVuY3Rp
b24gd2lsbCBvbmx5IHJldHVybiBOVUxMIGlmIHRoZSBhcmd1bWVudCBpcworICogbm90IGEgdmFs
aWQgI1dlYktpdFdlYlZpZXcuIERvIG5vdGUgaG93ZXZlciB0aGF0IHRoZSB2aWV3cG9ydAorICog
YXR0cmlidXRlcyBvYmplY3Qgb25seSBjb250YWlucyB2YWxpZCBpbmZvcm1hdGlvbiB3aGVuIHRo
ZSBjdXJyZW50CisgKiBwYWdlIGhhcyBhIHZpZXdwb3J0IG1ldGEgdGFnLiBZb3UgY2FuIGNoZWNr
IHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkCisgKiBiZSB1c2VkIGJ5IGNoZWNraW5nIHRoZSAjV2Vi
S2l0Vmlld3BvcnQ6dmFsaWQgcHJvcGVydHkuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNm
ZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICoKKyAq
IFNpbmNlOiAxLjMuOAorICovCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7
CisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKTsKK30K
KwogLy8gaW50ZXJuYWwKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfd2luZG93X2Zl
YXR1cmVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3
ZWJXaW5kb3dGZWF0dXJlcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA1MTRk
ODNjLi4zNGM0ZDVlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MjcsNiArNDI3
LDkgQEAgd2Via2l0X2dldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv
aWQpOwogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2RvbV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZp
ZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAqd2ViVmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQxNzZiMzEuLmQ2
NTUxNGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMi0wNiAgSm9vbmUgSHVyICA8am9v
bmVAa2xkcC5vcmc+CisKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGZvciBXZWJLaXRH
dGsuCisKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAgKGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIEph
dmFTY3JpcHQgQVBJIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgICogRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgdGhp
cyBmdW5jdGlvbiB0byB0ZXN0IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgor
ICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoK
KyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0
KTogRGl0dG8uCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisKIDIwMTAtMTItMDMgIE1paGFpIFBh
cnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAppbmRleCBhMjI1NzlhLi5hZTE1NGRkIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29u
ZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQwLDYgKzE0
MSwyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKUwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgZHVtcENvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGggPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJs
ZVdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVIZWlnaHQpKTsKKyAgIAorICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVS
ZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwpAQCAtMTkxNCw2ICsxOTMxLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgImR1bXBCYWNrRm9yd2FyZExpc3Qi
LCBkdW1wQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMiLCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsIGR1bXBD
aGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBDb25maWd1
cmF0aW9uRm9yVmlld3BvcnQiLCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0LCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBkdW1wRE9NQXNXZWJBcmNoaXZlQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgZHVtcERh
dGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcEVkaXRpbmdD
YWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCAy
ZTljODU2Li5iMTU2M2MxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI4NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKTsKIAorICAgIHZvaWQg
Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJs
ZUhlaWdodCk7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIEFQSSB0ZXN0IGZ1bmN0aW9ucyBzaG91
bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gcGxhdGZvcm0tc3BlY2lmaWMgCiAgICAgLy8gdW5pdCB0
ZXN0cyBvdXRzaWRlIG9mIERSVCBvbmNlIHRoZXkgZXhpc3QuCiAgICAgdm9pZCBhcGlUZXN0TmV3
V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBi
YXNlVVJMKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDgzODc0ZjQuLjIwMDRkMWYgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1h
bG9uem9AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBleHRl
cm4gIkMiIHsKIHZvaWQgd2Via2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUo
dW5zaWduZWQgbG9uZyBsb25nIHNpemUpOwpAQCAtODE5LDMgKzgyMSwxMCBAQCBib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRo
LCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh3ZWJW
aWV3KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0dHJp
YnV0ZXNGb3JTaXplKHdlYlZpZXcsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGJlM2ViMDkuLmU0YWFlMDQgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0KQEAgLTk4OSwzICs5ODksNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNT
cGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gW21haW5G
cmFtZSBoYXNTcGVsbGluZ01hcmtlcjpmcm9tIGxlbmd0aDpsZW5ndGhdOwogfQordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVX
aWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5k
ZXggYjFhNGVmNC4uY2FmNWFmOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xNDE1LDMgKzE0
MTUsOCBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQg
ZnJvbSwgaW50IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiByZXQ7
CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRleCAxMjBhMWI2Li40MWU1
MjFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcApAQCAtNTExLDYgKzUxMSwxMSBAQCBib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudAorfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBw
YWdlTnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75721</attachid>
            <date>2010-12-06 12:09:21 -0800</date>
            <delta_ts>2010-12-08 04:34:38 -0800</delta_ts>
            <desc>Proposed Patch12</desc>
            <filename>viewport12.diff</filename>
            <type>text/plain</type>
            <size>56247</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5ZTdiMzVhLi5lNmYxZDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTIt
MDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEyLTA2ICBNaWhhaSBQYXJwYXJpdGEgIDxt
aWhhaXBAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgbW92ZSBvZiBDaHJvbWl1
bSBiYXNlbGluZXMuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGViYzc5MzQuLjk5N2Fi
NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NTA1LDcgKzU1MDUsOCBAQCBmdWxs
c2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5o
dG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQv
dmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkg
dG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1
aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IDI2NjQ2YjYuLjg3MTU1ZGEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIw
MTAtMTItMDYgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0
IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVy
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUgdmlld3BvcnQgc2l6ZSwg
aW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91
dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmll
d3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkg
U2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0
aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGli
cmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJh
cnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJl
Zi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNw
cC4gCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6
IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVu
dHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXNGb3JTaXplKTogQWRkZWQgdGhpcyBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSB2aWV3
cG9ydCBhdHRyaWJ1dGVzIHdpdGggdGhlIGdpdmVuIGF2YWlsYWJsZVdpZHRoIGFuZCBhdmFpbGFi
bGVIZWlnaHQuCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
OiAKKyAgICAgICAgKFdlYktpdDo6cG9zdENvbW1pdEZyYW1lVmlld1NldHVwKTogSW52YWxpZGF0
ZSB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgICAgKiB3ZWJraXQvd2Via2l0Lmg6Cisg
ICAgICAgICogd2Via2l0L3dlYmtpdGRlZmluZXMuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0
cHJpdmF0ZS5oOiBBZGRlZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUgYXMgYSBw
cml2YXRlIGZ1bmN0aW9uLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNz
X2luaXQpOgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfaW5pdCk6CisgICAg
ICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkpOgorICAgICAgICAo
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KToKKyAgICAgICAgKHdlYmtp
dFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZSk6IFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3
cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJs
ZSBzaWduYWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUp
OiBhIHB1YmxpYyBBUEkgZm9yIGNhbGxpbmcgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21w
dXRlLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDogQWRkZWQu
CisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dl
Yl92aWV3X2dldF9wcm9wZXJ0eSk6IEFkZGVkIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUy4KKyAg
ICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTogRGVhbGxvY2F0ZSB0aGUgV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNz
X2luaXQpOiBBZGRlZCB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVk
IGFuZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUgc2lnbmFscy4KKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19pbml0KTogU2V0IHRoZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMg
aW5zdGFuY2UuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXMpOiBBZGRlZCBhIGdldHRlciB0byBvYnRhaW4gdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyBpbnN0YW5jZSBoZWxkIGJ5IHRoZSBnaXZlbiBXZWJLaXRXZWJWaWV3LgorICAgICAgICAqIHdl
YmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisKIDIwMTAtMTItMDYgIE1hcnRpbiBSb2JpbnNvbiAgPG1y
b2JpbnNvbkBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFhhbiBMb3Blei4KZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0gYi9XZWJLaXQvZ3RrL0dOVW1ha2Vm
aWxlLmFtCmluZGV4IGE4NDZmN2YuLmFiYWRjZjkgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvR05V
bWFrZWZpbGUuYW0KKysrIGIvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQpAQCAtMTE5LDYgKzEx
OSw3IEBAIHdlYmtpdGd0a19zdGF0aWNfaF9hcGkgKz0gXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXRuZXR3b3JrcmVzcG9uc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNlY3VyaXR5b3JpZ2luLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oIFwKKwkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxpc3QuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmRhdGFiYXNlLmggXAogCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJkYXRhc291cmNlLmggXApAQCAtMTgyLDYgKzE4Myw3IEBAIHdlYmtpdGd0a19z
b3VyY2VzICs9IFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmggXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmMgXAogCVdlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHZlcnNpb24uY3BwIFwKKwlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJiYWNrZm9yd2FyZGxp
c3QuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJkYXRhc291cmNlLmNwcCBcCiAJ
V2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2ViZnJhbWUuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAppbmRleCAxOTBhZTliLi5jNjhhZDU4IDEw
MDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAK
KysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCkBAIC0y
NCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50
R3RrLmgiCiAKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5j
bHVkZSAiRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpA
QCAtNjE2LDYgKzYxNywxMiBAQCB2b2lkIENocm9tZUNsaWVudDo6Y2hvb3NlSWNvbkZvckZpbGVz
KGNvbnN0IFZlY3RvcjxXVEY6OlN0cmluZz4mIGZpbGVuYW1lcywgV2ViQwogICAgIGNob29zZXIt
Pmljb25Mb2FkZWQoSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKGZpbGVuYW1lcykpOwogfQogCit2
b2lkIENocm9tZUNsaWVudDo6ZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgVmll
d3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3QKK3sKKyAgICAvLyBSZWNvbXB1dGUgdGhl
IHZpZXdwb3J0IGF0dHJpYnV0ZXMgbWFraW5nIGl0IHZhbGlkLgorICAgIHdlYmtpdFZpZXdwb3J0
QXR0cmlidXRlc1JlY29tcHV0ZSh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXMobV93ZWJWaWV3KSwgdHJ1ZSk7Cit9CisKIHZvaWQgQ2hyb21lQ2xpZW50OjpzZXRDdXJzb3Io
Y29uc3QgQ3Vyc29yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaCBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKaW5kZXggODI1MmYwNi4uYjRhMWEzNyAxMDA2
NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCkBAIC0xMTAsNiAr
MTEwLDggQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHNldFRv
b2xUaXAoY29uc3QgV1RGOjpTdHJpbmcmLCBXZWJDb3JlOjpUZXh0RGlyZWN0aW9uKTsKIAorICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hWaWV3cG9ydERhdGFEaWRDaGFuZ2UoY29uc3QgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykgY29uc3Q7CisKICAgICAgICAgdmly
dHVhbCB2b2lkIHByaW50KFdlYkNvcmU6OkZyYW1lKik7CiAjaWYgRU5BQkxFKERBVEFCQVNFKQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1b3RhKFdlYkNvcmU6OkZyYW1l
KiwgY29uc3QgV1RGOjpTdHJpbmcmKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcCBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAppbmRleCAxMDY5NGQwLi5iMjRlZDEw
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIFJl
c2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCkBAIC0zNzcsMyArMzc4LDE0IEBAIHZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrOjpyZXNldE9yaWdpbkFjY2Vzc1doaXRlTGlzdHMoKQogICAgIFNlY3VyaXR5T3JpZ2luOjpy
ZXNldE9yaWdpbkFjY2Vzc1doaXRlbGlzdHMoKTsKIH0KIAorLy8gRm9yIHRlc3RpbmcgZmFzdC92
aWV3cG9ydC4KK3ZvaWQgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpjb21wdXRlVmlld3BvcnRB
dHRyaWJ1dGVzRm9yU2l6ZShXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3LCBnaW50IGF2YWlsYWJsZVdp
ZHRoLCBnaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKFdFQktJ
VF9JU19XRUJfVklFVyh3ZWJWaWV3KSk7CisKKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVu
dHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnZp
ZXdwb3J0QXJndW1lbnRzKCk7CisgICAgLy8gZGVza3RvcFdpZHRoID0gOTgwLCBkZXZpY2VXaWR0
aCA9IDMyMCwgZGV2aWNlSGVpZ2h0ID0gNDgwLCBkZXZpY2VEUEkgPSAxNjAKKyAgICBWaWV3cG9y
dEF0dHJpYnV0ZXMgYXR0cnMgPSBjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywg
OTgwLCAzMjAsIDQ4MCwgMTYwLCBJbnRTaXplKGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWln
aHQpKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAidmlld3BvcnQgc2l6ZSAlZHglZCBzY2FsZSAl
ZiB3aXRoIGxpbWl0cyBbJWYsICVmXVxuIiwgYXR0cnMubGF5b3V0U2l6ZS53aWR0aCgpLCBhdHRy
cy5sYXlvdXRTaXplLmhlaWdodCgpLCBhdHRycy5pbml0aWFsU2NhbGUsIGF0dHJzLm1pbmltdW1T
Y2FsZSwgYXR0cnMubWF4aW11bVNjYWxlKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmggYi9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCmluZGV4IGVmNTdiMTQuLmQ4ZDlm
NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmgKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJl
ZVN1cHBvcnRHdGsuaApAQCAtMjEsNiArMjEsNyBAQAogCiAKICNpbmNsdWRlICJKU1N0cmluZ1Jl
Zi5oIgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRkZWZpbmVzLmg+CiAKICNpbmNsdWRlIDxhdGsv
YXRrLmg+CiAjaW5jbHVkZSA8Z2xpYi5oPgpAQCAtNDAsNiArNDEsNyBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgc2V0TGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbihib29sKTsKICAgICBzdGF0
aWMgYm9vbCBsaW5rc0luY2x1ZGVkSW5Gb2N1c0NoYWluKCk7CiAgICAgc3RhdGljIEpTVmFsdWVS
ZWYgbm9kZXNGcm9tUmVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwg
aW50IHgsIGludCB5LCB1bnNpZ25lZCB0b3AsIHVuc2lnbmVkIHJpZ2h0LCB1bnNpZ25lZCBib3R0
b20sIHVuc2lnbmVkIGxlZnQsIGJvb2wgaWdub3JlQ2xpcHBpbmcpOworICAgIHN0YXRpYyB2b2lk
IGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXNGb3JTaXplKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcs
IGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAgIC8vIEZJ
WE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVpciBBUEkgaGFzIGJl
ZW4gZGlzY3Vzc2VkLgogICAgIHN0YXRpYyBHU0xpc3QqIGdldEZyYW1lQ2hpbGRyZW4oV2ViS2l0
V2ViRnJhbWUqIGZyYW1lKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
RnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggM2RiYmExMi4uMzRiNWIxMSAxMDA2NDQKLS0tIGEv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIv
V2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTEy
ODIsNiArMTI4MiwxMiBAQCBzdGF0aWMgdm9pZCBwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXAoV2Vi
S2l0V2ViRnJhbWUgKmZyYW1lLCBGcmFtZVZpZXcgKnZpZXcsIGJvbwogICAgIFdlYktpdFdlYlZp
ZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKGNvbnRhaW5pbmdX
aW5kb3cpOwogICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKHByaXYtPmhvcml6b250YWxBZGp1
c3RtZW50LmdldCgpLCBwcml2LT52ZXJ0aWNhbEFkanVzdG1lbnQuZ2V0KCksIHJlc2V0VmFsdWVz
KTsKIAorICAgIC8vIEludmFsaWRhdGUgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgLSB0aGV5IHdp
bGwgb25seSBiZSB2YWxpZAorICAgIC8vIGFnYWluIGlmIHRoZSBwYWdlIHdlJ3JlIGJlZ2lubmlu
ZyB0byBsb2FkIG5vdyBoYXMgYW4KKyAgICAvLyBhcHByb3ByaWF0ZSB2aWV3cG9ydCBtZXRhIHRh
Zy4KKyAgICBjb250YWluaW5nV2luZG93LT5wcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYt
PmlzVmFsaWQgPSBGQUxTRTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoY29udGFpbmlu
Z1dpbmRvdy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKSwgInZhbGlkIik7CisKICAg
ICBpZiAocHJpdi0+Y3VycmVudE1lbnUpIHsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVu
dT4gbWVudShwcml2LT5jdXJyZW50TWVudSk7CiAgICAgICAgIHByaXYtPmN1cnJlbnRNZW51LmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGZjNzFjMmMuLjI0MjhmNjIgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0
Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2
aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJj
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtp
dC93ZWJraXR3ZWJzZXR0aW5ncy5oPgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGIw
NmEzYmYuLjM5OWNiNGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmlu
ZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTkyLDYgKzky
LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyBXZWJLaXRIaXRU
ZXN0UmVzdWx0Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lE
ZWNpc2lvbiBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uOwogdHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyBXZWJLaXRHZW9sb2NhdGlvblBv
bGljeURlY2lzaW9uQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzOworCiBH
X0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCAwYjU5
NzQ2Li5kOTk2NWU3IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRl
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0
L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3Jl
cXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0
d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgpAQCAt
MTM3LDYgKzEzOCw3IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3Jl
UGFnZTsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViU2V0dGluZ3M+IHdlYlNldHRp
bmdzOwogICAgICAgICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3Bl
Y3RvcjsKKyAgICAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2
aWV3cG9ydEF0dHJpYnV0ZXM7CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYldpbmRv
d0ZlYXR1cmVzPiB3ZWJXaW5kb3dGZWF0dXJlczsKIAogICAgICAgICBXZWJLaXRXZWJGcmFtZSog
bWFpbkZyYW1lOwpAQCAtMjE1LDYgKzIxNywyNSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2Jv
b2xlYW4gZGlzcG9zZWQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAg
IGludCBkZXZpY2VXaWR0aDsKKyAgICAgICAgaW50IGRldmljZUhlaWdodDsKKyAgICAgICAgaW50
IGF2YWlsYWJsZVdpZHRoOworICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICBp
bnQgZGVza3RvcFdpZHRoOworICAgICAgICBpbnQgZGV2aWNlRFBJOworCisgICAgICAgIGludCB3
aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlRmFj
dG9yOworICAgICAgICBmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1h
eGltdW1TY2FsZUZhY3RvcjsKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAg
ICAgZ2Jvb2xlYW4gdXNlclNjYWxhYmxlOworICAgICAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAg
IH07CisKICAgICBXVEY6OlN0cmluZwogICAgIHdlYmtpdFVzZXJBZ2VudCgpOwogCkBAIC0zNzQs
NiArMzk1LDggQEAgZXh0ZXJuICJDIiB7CiAKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdFbnRlckZ1
bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CiAg
ICAgdm9pZCB3ZWJraXRXZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmll
dyk7CisKKyAgICB2b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRW
aWV3cG9ydEF0dHJpYnV0ZXMqLCBib29sKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi42MDIyOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcApAQCAtMCwwICsxLDU2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIENvbGxhYm9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJ3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2lu
Y2x1ZGUgIndlYmtpdHByaXZhdGUuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisK
Ky8qKgorICogU0VDVElPTjp3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9ydF9kZXNj
cmlwdGlvbjogUmVwcmVzZW50cyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdlYiBwYWdl
CisgKiBAc2VlX2Fsc286ICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29t
cHV0ZS1yZXF1ZXN0ZWQKKyAqIEBzZWVfYWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0
dHJpYnV0ZXMtYXZhaWxhYmxlCisgKgorICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBvZmZl
cnMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgdG8gdXNlciBhZ2VudHMgdG8KKyAqIGNvbnRyb2wg
dGhlIHZpZXdwb3J0IGxheW91dC4gSXQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHNpemUsIGluaXRp
YWwgc2NhbGUgd2l0aCBsaW1pdHMsCisgKiBhbmQgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBh
IHVzZXIgaXMgYWJsZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdwb3J0LgorICog
VGhpcyBtYWtlcyBhIHdlYiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAqCisgKiBUaGUg
I1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIHNpZ25hbCB3aWxs
IGJlIGVtaXR0ZWQgd2l0aCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKiB3aGVuIHRoZSB2
aWV3cG9ydCBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIGluIHRoZSBjYXNlIG9mIGxvYWRpbmcgd2Vi
IHBhZ2VzIGNvbnRhaW4KKyAqIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFuZCBjYWxsaW5nIHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZS4KKyAqCisgKiBJZiB0aGUgZGV2aWNl
IHNpemUsIGF2YWlsYWJsZSBzaXplLCBkZXNrdG9wIHdpZHRoLCBvciBkZXZpY2UgRFBJIG5lZWRz
IHRvIGJlIGNoYW5nZWQgZHVlIHRvIAorICogYSBjb25zZXF1ZW5jZSBvZiBhbiBleHBsaWNpdCBi
cm93c2VyIHJlcXVlc3QgKGNhdXNlZCBieSBzY3JlZW4gcm90YXRpb24sIHJlc2l6aW5nLCBvciBz
aW1pbGFyIHJlYXNvbnMpLAorICogWW91IHNob3VsZCBjYWxsICN3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19yZWNvbXB1dGUgdG8gcmVjb21wdXRlIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGFu
ZCAKKyAqIG92ZXJyaWRlIHRob3NlIHZhbHVlcyBpbiB0aGUgaGFuZGxlciBvZiAjV2ViS2l0V2Vi
Vmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbC4KKyAq
CisgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVm
ZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFyeSBhdAorICogaHR0cDovL2RldmVsb3Bl
ci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9u
cy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisgKgorICog
PGluZm9ybWFsZXhhbXBsZT48cHJvZ3JhbWxpc3Rpbmc+CisgKiAvPCEtLSAtLT4qIENvbm5lY3Qg
dG8gdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlcyBzaWduYWwgKjwhLS0gLS0+LworICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzID0gd2Via2l0X3dlYl92aWV3X2dl
dF92aWV3cG9ydF9hdHRyaWJ1dGVzICh3ZWJfdmlldyk7CisgKiBnX3NpZ25hbF9jb25uZWN0ICh3
ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsIEdfQ0FM
TEJBQ0sgKHZpZXdwb3J0X3JlY29tcHV0ZV9jYiksIHdpbmRvdyk7CisgKiBnX3NpZ25hbF9jb25u
ZWN0ICh3ZWJfdmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIiwgR19DQUxMQkFD
SyAodmlld3BvcnRfYXZhaWxhYmxlX2NiKSwgd2luZG93KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3Qg
KGF0dHJpYnV0ZXMsICJub3RpZnk6OnZhbGlkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfdmFsaWRf
Y2hhbmdlZF9jYiksIHdlYl92aWV3KTsKKyAqCisgKiAvPCEtLSAtLT4qIEhhbmRsZSB0aGUgdmll
d3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCB0byBvdmVycmlkZSB0
aGUgZGV2aWNlIHdpZHRoICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkCisgKiB2aWV3cG9ydF9y
ZWNvbXB1dGVfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqIGF0dHJpYnV0ZXMsIEd0a1dpZGdldCogd2luZG93KQorICogeworICogICAgIGludCBv
dmVycmlkZV9hdmFpbGFibGVfd2lkdGggPSA0ODA7CisgKiAgICAgZ19vYmplY3Rfc2V0IChHX09C
SkVDVChhdHRyaWJ1dGVzKSwgImF2YWlsYWJsZS13aWR0aCIsIG92ZXJyaWRlX2F2YWlsYWJsZV93
aWR0aCwgTlVMTCk7CisgKiB9CisgKgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdwb3J0
LWF0dHJpYnV0ZXMtYXZhaWxhYmxlIHNpZ25hbCB0byByZWNvbXB1dGUgdGhlIGluaXRpYWwgc2Nh
bGUgZmFjdG9yICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkIAorICogdmlld3BvcnRfYXZhaWxh
YmxlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
KiBhdHRyaWJ1dGVzLCBncG9pbnRlciBkYXRhKQorICogeworICogICAgIGdmbG9hdCBpbml0aWFs
U2NhbGU7CisgKiAgICAgZ19vYmplY3RfZ2V0IChHX09CSkVDVCAoYXRyaWJ1dGVzKSwgImluaXRp
YWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVMTCk7CisgKiAgICAgd2Via2l0X3dl
Yl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgaW5pdGlhbFNjYWxlKTsKKyAqIH0KKyAq
IAorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIG5vdGlmeTo6dmFsaWQgc2lnbmFsIHRvIGluaXRp
YWxpemUgdGhlIHpvb20gbGV2ZWwgKjwhLS0gLS0+LworICogc3RhdGljIHZvaWQKKyAqIHZpZXdw
b3J0X3ZhbGlkX2NoYW5nZWRfY2IgKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRl
cywgR1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdlYlZpZXcqIHdlYl92aWV3KQorICogeworICog
ICAgIGdib29sZWFuIGlzX3ZhbGlkOworICogICAgIGdfb2JqZWN0X2dldCAoYXR0cmlidXRlcywg
InZhbGlkIiwgJmlzX3ZhbGlkLCBOVUxMKTsKKyAqICAgICBpZiAoIWlzX3ZhbGlkKSAKKyAqICAg
ICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgMS4wKTsKKyAq
IH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4YW1wbGU+CisgKi8KKwordXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitlbnVtIHsKKyAg
ICBQUk9QXzAsCisKKyAgICBQUk9QX0RFVklDRV9XSURUSCwKKyAgICBQUk9QX0RFVklDRV9IRUlH
SFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgUFJPUF9BVkFJTEFCTEVfSEVJR0hU
LAorICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAgICBQUk9QX0RFVklDRV9EUEksCisgICAgUFJP
UF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9S
LAorICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAgUFJPUF9NQVhJTVVNX1NDQUxF
X0ZBQ1RPUiwKKyAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICBQUk9QX1VTRVJfU0NB
TEFCTEUsCisgICAgUFJPUF9WQUxJRAorfTsKKworR19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsK
KworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURShvYmopICAg
IChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JU
X0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUpKQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYyk7Citz
dGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVj
ICpwc3BlYyk7CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2NsYXNz
X2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MqIGtjbGFzcykKK3sKKyAgICBHT2Jq
ZWN0Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtjbGFzcyk7CisgICAgZ29i
amVjdENsYXNzLT5nZXRfcHJvcGVydHkgPSB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
cHJvcGVydHk7CisgICAgZ29iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSB3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0czpkZXZpY2Utd2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2Yg
dGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHBy
ZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFu
ZAorICAgICAqIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBoYW5kbGVyIG9mCisgICAgICogV2Vi
S2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiBZb3UK
KyAgICAgKiBzaG91bGQgbm90IGRvIHRoYXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJl
YXNvbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0
X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgUFJPUF9ERVZJQ0VfV0lEVEgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImRldmljZS13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJEZXZpY2UgV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuLiIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEV1JJVEUp
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRldmljZS1oZWln
aHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uIFRoaXMgdmFsdWUg
aXMgYWx3YXlzIGF1dG9tYXRpY2FsbHkKKyAgICAgKiBwcmUtY29tcHV0ZWQgZHVyaW5nIGEgdmll
d3BvcnQgYXR0cmlidXRlcyByZWNvbXB1dGF0aW9uLCBhbmQKKyAgICAgKiBjYW4gYmUgb3ZlcnJp
ZGVuIGJ5IHRoZSBoYW5kbGVyIG9mCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiBZb3UKKyAgICAgKiBzaG91bGQgbm90IGRvIHRo
YXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9E
RVZJQ0VfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2Ut
aGVpZ2h0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBI
ZWlnaHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWln
aHQgb2YgdGhlIHNjcmVlbi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAg
KiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czphdmFpbGFibGUtd2lkdGg6CisgICAgICoKKyAgICAg
KiBUaGUgd2lkdGggb2YgdGhlIGN1cnJlbnQgdmlzaWJsZSBhcmVhLiBUaGlzIHdpbGwgdXN1YWxs
eSBiZSB0aGUKKyAgICAgKiBzYW1lIGFzIHRoZSBzcGFjZSBhbGxvY2F0ZWQgdG8gdGhlIHdpZGdl
dCwgYnV0IGluIHNvbWUgY2FzZXMKKyAgICAgKiB5b3UgbWF5IGhhdmUgZGVjaWRlZCB0byBtYWtl
IHRoZSB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUKKyAgICAgKiBhcmVhLiBUaGlzIHZh
bHVlIGlzIGJ5IGRlZmF1bHQgaW5pdGlhbGl6ZWQgdG8gdGhlIHNpemUKKyAgICAgKiBhbGxvY2F0
ZWQgYnkgdGhlIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgaXQgaW4gdGhlIGhhbmRsZXIK
KyAgICAgKiBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1y
ZXF1ZXN0ZWQgdG8KKyAgICAgKiBsZXQgdGhlIGVuZ2luZSBrbm93IHdoYXQgdGhlIHZpc2libGUg
YXJlYSBpcy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZS13aWR0aCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfKCJBdmFpbGFibGUgV2lkdGgiKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRzOmF2YWlsYWJsZS1oZWlnaHQ6CisgICAgICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRo
ZSBjdXJyZW50IHZpc2libGUgYXJlYS4gVGhpcyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICog
c2FtZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVkIHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNh
c2VzCisgICAgICogeW91IG1heSBoYXZlIGRlY2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dl
ciB0aGFuIHRoZSB2aXNpYmxlCisgICAgICogYXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0
IGluaXRpYWxpemVkIHRvIHRoZSBzaXplCisgICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQs
IGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGluIHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0
V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAg
ICogbGV0IHRoZSBlbmdpbmUga25vdyB3aGF0IHRoZSB2aXNpYmxlIGFyZWEgaXMuCisgICAgICoK
KyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfQVZBSUxBQkxFX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXZhaWxhYmxlLWhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfKCJBdmFpbGFibGUgSGVpZ2h0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgaGVpZ2h0IG9mIHRoZSB2aXNpYmxlIGFyZWEuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURX
UklURSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGVza3Rv
cC13aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB2aWV3cG9ydCB0aGF0IHdvcmtz
IHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIAorICAgICAqIGRlc2lnbmVkIGZvciBkZXNrdG9wLiBU
aGlzIHZhbHVlIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVkIGR1
cmluZyBhIHZpZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICogY2Fu
IGJlIG92ZXJyaWRlbiBieSB0aGUgaGFuZGxlciBvZgorICAgICAqIFdlYktpdFdlYlZpZXc6OnZp
ZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZC4gWW91CisgICAgICogc2hvdWxk
IG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29vZCByZWFzb24uCisgICAgICoK
KyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxs
X3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZGVza3RvcC13aWR0aCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJEZXNrdG9wIFdpZHRoIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJUaGUgd2lkdGggb2Ygdmlld3BvcnQgdGhhdCB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdl
cyBkZXNpZ25lZCBmb3IgZGVza3RvcC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioK
KyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtZHBpOgorICAgICAqCisgICAg
ICogVGhlIG51bWJlciBvZiBkb3RzIHBlciBpbmNoIG9mIHRoZSBzY3JlZW4uCisgICAgICogVGhp
cyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJp
bmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBi
ZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3
cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBu
b3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0RFVklDRV9EUEksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
dmljZS1kcGkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNl
IERQSSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG51bWJl
ciBvZiBkb3RzIHBlciBpbmNoIG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6d2lkdGg6CisgICAgICoK
KyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5n
IHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICogCisgICAgICogU2luY2U6IDEu
My44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0
Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX1dJRFRILAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiVGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmhlaWdo
dDoKKyAgICAgKgorICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJl
Zm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAor
ICAgICAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAg
KiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3Bl
cnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBS
T1BfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWlnaHQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSGVpZ2h0IiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9y
dC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBX
RUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRzOmluaXRpYWwtc2NhbGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhlIGluaXRp
YWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJv
cGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfSU5JVElBTF9TQ0FMRV9GQUNU
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxv
YXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbC1zY2FsZS1m
YWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiSW5pdGlhbCBT
Y2FsZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czptaW5pbXVtLXNjYWxl
LWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBtaW5pbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9y
dC4KKyAgICAgKiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCB5b3UgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCAKKyAgICAgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgor
ICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF8oIk1pbmltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUg
dmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dHM6bWF4aW11bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAg
KiBUaGUgbWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuCisgICAgICogQmVmb3JlIGdldHRp
bmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgCisgICAgICogI1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAx
LjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9NQVhJTVVN
X1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhp
bXVtLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJNYXhpbXVtIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRl
dmljZS1waXhlbC1yYXRpbzoKKyAgICAgKgorICAgICAqIFRoZSBkZXZpY2UgcGl4ZWwgcmF0aW8g
b2YgdGhlIHZpZXdwb3J0LgorICAgICAqIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIHlv
dSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1waXhlbC1yYXRpbyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgUGl4ZWwgUmF0aW8iKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBkZXZpY2UgcGl4ZWwg
cmF0aW8gb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8q
KgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOnVzZXItc2NhbGFibGU6CisgICAgICoK
KyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29tIGluIGFu
ZCBvdXQuCisgICAgICogQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgCisgICAgICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxp
ZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgUFJPUF9VU0VSX1NDQUxBQkxFLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJ1c2VyLXNjYWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJVc2VyIFNjYWxhYmxlIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNh
biB6b29tIGluIGFuZCBvdXQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFN
X1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czp2
YWxpZDoKKyAgICAgKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhlIGF0dHJp
YnV0ZXMgYXJlCisgICAgICogdmFsaWQuICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXJlIG9u
bHkgdmFsaWQgb24gcGFnZXMgd2hpY2gKKyAgICAgKiBoYXZlIGEgdmlld3BvcnQgbWV0YSB0YWcs
IGFuZCBoYXZlIGFscmVhZHkgaGFkIHRoZSBhdHRyaWJ1dGVzCisgICAgICogY2FsY3VsYXRlZC4K
KyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNz
X2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgUFJPUF9WQUxJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygidmFsaWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IlZhbGlkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRlcm1p
bmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZCwgYW5kIGNhbiBiZSB1
c2VkLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFMU0UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsK
KworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrY2xhc3MsIHNpemVvZihXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydCkKK3sK
KyAgICB2aWV3cG9ydC0+cHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklW
QVRFKHZpZXdwb3J0KTsKKyAgICB2aWV3cG9ydC0+cHJpdi0+aXNWYWxpZCA9IEZBTFNFOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09i
amVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBw
c3BlYykKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRl
cyA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKG9iamVjdCk7CisgICAgV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdjsKKwor
ICAgIHN3aXRjaCAocHJvcF9pZCkgeworICAgIGNhc2UgUFJPUF9ERVZJQ0VfV0lEVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlV2lkdGgpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9zZXRf
aW50KHZhbHVlLCBwcml2LT5kZXZpY2VIZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHBy
aXYtPmF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlM
QUJMRV9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+YXZhaWxh
YmxlSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU0tUT1BfV0lEVEg6
CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGVza3RvcFdpZHRoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9EUEk6CisgICAgICAgIGdfdmFsdWVf
c2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlRFBJKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPndpZHRo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5oZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSU5JVElBTF9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZh
bHVlLCBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVWSUNFX1BJWEVMX1JBVElPOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+ZGV2aWNlUGl4ZWxSYXRpbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9VU0VSX1NDQUxBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2
LT51c2VyU2NhbGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSUQ6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmlzVmFsaWQpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJP
UEVSVFlfSUQob2JqZWN0LCBwcm9wX2lkLCBwc3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5
KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1Bh
cmFtU3BlYyAqcHNwZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9y
dEF0dHJpYnV0ZXMgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMt
PnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BfaWQpIHsKKyAgICBjYXNlIFBST1BfREVWSUNFX1dJ
RFRIOgorICAgICAgICBwcml2LT5kZXZpY2VXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfSEVJR0hUOgorICAgICAgICBw
cml2LT5kZXZpY2VIZWlnaHQgPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAgICAgICBwcml2LT5hdmFpbGFi
bGVXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9BVkFJTEFCTEVfSEVJR0hUOgorICAgICAgICBwcml2LT5hdmFpbGFibGVIZWlnaHQg
PSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVTS1RPUF9XSURUSDoKKyAgICAgICAgcHJpdi0+ZGVza3RvcFdpZHRoID0gZ192YWx1ZV9nZXRf
aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9EUEk6Cisg
ICAgICAgIHByaXYtPmRldmljZURQSSA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BfaWQsIHBzcGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcywgYm9vbCBtYWtlVmFsaWQpCit7CisgICAg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRl
cy0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gcHJpdi0+d2ViVmlldzsKKwor
ICAgIEludFJlY3Qgd2luZG93UmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCkt
PndpbmRvd1JlY3QoKSk7CisgICAgcHJpdi0+ZGV2aWNlV2lkdGggPSB3aW5kb3dSZWN0LndpZHRo
KCk7CisgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQoKTsKKworICAg
IEludFJlY3QgcmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCktPnBhZ2VSZWN0
KCkpOworICAgIHByaXYtPmF2YWlsYWJsZVdpZHRoID0gcmVjdC53aWR0aCgpOworICAgIHByaXYt
PmF2YWlsYWJsZUhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBUaGlzIHZhbHVlIHdv
cmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRlc2lnbmVkIGZvciBkZXNrdG9wIGJyb3dzZXJz
LgorICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IDk4MDsKKyAgICAvLyBJdCBpcyB0aGUgZHBpIG9m
IHRoZSBvcmlnaW5hbCBpUGhvbmUgYW5kIEFuZHJvaWQgZGV2aWNlcy4KKyAgICBwcml2LT5kZXZp
Y2VEUEkgPSAxNjA7CisKKyAgICAvLyBGaXJzdCBvZiBhbGwsIHdlIGdpdmUgdGhlIGFwcGxpY2F0
aW9uIGFuIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRlIHNvbWUgb2YgdGhlIHZhbHVlcy4KKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21w
dXRlLXJlcXVlc3RlZCIsIHZpZXdwb3J0QXR0cmlidXRlcyk7CisKKyAgICBWaWV3cG9ydEFyZ3Vt
ZW50cyBhcmd1bWVudHMgPSB3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRv
Y3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7CisKKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMg
YXR0cmlidXRlcyA9IGNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2LT5k
ZXNrdG9wV2lkdGgsIHByaXYtPmRldmljZVdpZHRoLCBwcml2LT5kZXZpY2VIZWlnaHQsIHByaXYt
PmRldmljZURQSSwgSW50U2l6ZShwcml2LT5hdmFpbGFibGVXaWR0aCwgcHJpdi0+YXZhaWxhYmxl
SGVpZ2h0KSk7CisKKyAgICBwcml2LT53aWR0aCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0
aCgpOworICAgIHByaXYtPmhlaWdodCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS5oZWlnaHQoKTsK
KyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsK
KyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsK
KyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IgPSBhdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsK
KyAgICBwcml2LT5kZXZpY2VQaXhlbFJhdGlvID0gYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlv
OworICAgIHByaXYtPnVzZXJTY2FsYWJsZSA9IGFyZ3VtZW50cy51c2VyU2NhbGFibGU7CisKKyAg
ICBpZiAobWFrZVZhbGlkKSB7CisgICAgICAgIHByaXYtPmlzVmFsaWQgPSBUUlVFOworICAgICAg
ICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzKSwgInZhbGlkIik7
CisgICAgfQorCisgICAgLy8gTm93IGxldCB0aGUgYXBwbGljYXRpb24ga25vdyBpdCBpcyBzYWZl
IHRvIHVzZSB0aGUgbmV3CisgICAgLy8gdmFsdWVzLgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZSh3ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUiLCB2aWV3cG9ydEF0dHJp
YnV0ZXMpOworfQorCisvKioKKyAqIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0
ZToKKyAqIEB2aWV3cG9ydEF0dHJpYnV0ZXM6IGEgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcwor
ICoKKyAqIFJlY29tcHV0ZSB0aGUgb3B0aW1hbCB2aWV3cG9ydCBhdHRyaWJ1dGVzIGFuZCBlbWl0
IHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGUtYXZhaWxhYmxlIHNpZ25hbC4gCisgKiBUaGUgdmlld3Bv
cnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCBhbHNvIHdpbGwgYmUgaGFu
ZGxlZCB0byBvdmVycmlkZSAKKyAqIHRoZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUsIGRl
c2t0b3Agd2lkdGgsIG9yIGRldmljZSBEUEkuCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK3Zv
aWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIHdlYmtpdFZpZXdwb3J0QXR0cmli
dXRlc1JlY29tcHV0ZSh2aWV3cG9ydEF0dHJpYnV0ZXMsIGZhbHNlKTsKK30KZGlmZiAtLWdpdCBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uN2Q5MGMxYgotLS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiB3ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNf
aAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVm
aW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfVklFV1BPUlRf
QVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlw
ZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAgICAgICAgICAg
KEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRfVFlQRV9WSUVXUE9SVF9B
VFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2RlZmluZSBXRUJLSVRfVklF
V1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNU
KChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVXUE9SVF9BVFRSSUJVVEVT
KG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiksIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRU
UklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBFKChrbGFzcyksICBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JU
X0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChv
YmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
UHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOworCitzdHJ1Y3QgX1dlYktp
dFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRfaW5zdGFuY2U7CisKKyAg
ICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlICpw
cml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcyB7CisgICAg
R09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRpbmcgZm9yIGZ1dHVyZSBl
eHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDApICh2b2lkKTsKKyAgICB2
b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDMpICh2b2lkKTsKK307
CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF90eXBl
ICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9pZAord2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3Bv
cnRBdHRyaWJ1dGVzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCmluZGV4IDU1OTkwNmEuLjM4OGNiMmQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5LCAy
MDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1vdmlhbCBDcmVhdGl2ZSBU
ZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBCb2JieSBQb3dlcnMKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTQzLDcgKzQ0LDcgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgi
CiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkTGlz
dEltcGwuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGll
c0d0ay5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50R3RrLmgiCkBAIC03Myw2ICs3NCw3
IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkljb25EYXRhYmFzZS5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1ZGUgIk1lbW9yeUNhY2hl
LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cy5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgiCkBAIC0xNzMsNyArMTc1
LDYgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lTSU9OX0NBTkNFTExFRCwK
ICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKLQogICAgIFNIT1VMRF9CRUdJ
Tl9FRElUSU5HLAogICAgIFNIT1VMRF9FTkRfRURJVElORywKICAgICBTSE9VTERfSU5TRVJUX05P
REUsCkBAIC0xODUsNyArMTg2LDggQEAgZW51bSB7CiAgICAgRURJVElOR19CRUdBTiwKICAgICBV
U0VSX0NIQU5HRURfQ09OVEVOVFMsCiAgICAgRURJVElOR19FTkRFRCwKLQorICAgIFZJRVdQT1JU
X0FUVFJJQlVURVNfUkVDT01QVVRFX1JFUVVFU1RFRCwKKyAgICBWSUVXUE9SVF9BVFRSSUJVVEVT
X0FWQUlMQUJMRSwKICAgICBMQVNUX1NJR05BTAogfTsKIApAQCAtMTk5LDYgKzIwMSw3IEBAIGVu
dW0gewogICAgIFBST1BfRURJVEFCTEUsCiAgICAgUFJPUF9TRVRUSU5HUywKICAgICBQUk9QX1dF
Ql9JTlNQRUNUT1IsCisgICAgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAogICAgIFBST1BfV0lO
RE9XX0ZFQVRVUkVTLAogICAgIFBST1BfVFJBTlNQQVJFTlQsCiAgICAgUFJPUF9aT09NX0xFVkVM
LApAQCAtNTA4LDYgKzUxMSw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19nZXRfcHJv
cGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqCiAgICAgY2FzZSBQ
Uk9QX1dFQl9JTlNQRUNUT1I6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF9pbnNwZWN0b3Iod2ViVmlldykpOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2Jq
ZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmll
dykpOworICAgICAgICBicmVhazsKICAgICBjYXNlIFBST1BfV0lORE9XX0ZFQVRVUkVTOgogICAg
ICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93
X2ZlYXR1cmVzKHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzU1LDYgKzEzNjEsNyBA
QCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAg
ICAgfQogCiAgICAgcHJpdi0+d2ViSW5zcGVjdG9yLmNsZWFyKCk7CisgICAgcHJpdi0+dmlld3Bv
cnRBdHRyaWJ1dGVzLmNsZWFyKCk7CiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xlYXIo
KTsKICAgICBwcml2LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJj
ZXMuY2xlYXIoKTsKQEAgLTI3MTgsNiArMjcyNSw1OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAg
ICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKIAogICAg
IC8qCisgICAgICogV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUt
cmVxdWVzdGVkCisgICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRo
ZSBzaWduYWwKKyAgICAgKiBAdmlld3BvcnRfYXR0cmlidXRlczogdGhlICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAqCisg
ICAgICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1y
ZXF1ZXN0ZWQKKyAgICAgKiBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIHdoZW5ldmVyIHJlY29tcHV0
aW5nIHRoZSB2YWx1ZXMgb2YgdGhlCisgICAgICogdmlld3BvcnQgYXR0cmlidXRlcyBpcyByZXF1
aXJlZC4gVGhhdCBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlCisgICAgICogdmlld3BvcnQgbWV0YSB0
YWcgb2YgYSBwYWdlIGhhcyBjaGFuZ2VkLCBvciBpdCBtYXkgaGFwcGVuIGFzIGEKKyAgICAgKiBj
b25zZXF1ZW5jZSBvZiBhbiBleHBsaWNpdCBicm93c2VyIHJlcXVlc3QgKGNhdXNlZCBieSBzY3Jl
ZW4KKyAgICAgKiByb3RhdGlvbiwgcmVzaXppbmcsIG9yIHNpbWlsYXIgcmVhc29ucykuCisgICAg
ICoKKyAgICAgKiBUaGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aWxsIGhhdmUgZGV2aWNl
IHNpemUsIGF2YWlsYWJsZSBzaXplLAorICAgICAqIGRlc2t0b3Agd2lkdGgsIGFuZCBkZXZpY2Ug
RFBJIHByZS1maWxsZWQgYnkgdmFsdWVzIHRoYXQgbWFrZSBzZW5zZSBmb3IgdGhlIGN1cnJlbnQK
KyAgICAgKiBzY3JlZW4gYW5kIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhvc2UgdmFs
dWVzIGlmIHlvdQorICAgICAqIGhhdmUgc3BlY2lhbCByZXF1aXJlbWVudHMgKGZvciBpbnN0YW5j
ZSwgaWYgeW91IG1hZGUgeW91cgorICAgICAqIHdpZGdldCBiaWdnZXIgdGhhbiB0aGUgYXZhaWxh
YmxlIHZpc2libGUgYXJlYSwgeW91IHNob3VsZAorICAgICAqIG92ZXJyaWRlIHRoZSBhdmFpbGFi
bGUtd2lkdGggYW5kIGF2YWlsYWJsZS1oZWlnaHQgcHJvcGVydGllcyB0bworICAgICAqIHRoZSBh
Y3R1YWwgdmlzaWJsZSBhcmVhKS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAq
LworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxB
QkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVz
dGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgTlVMTCwgTlVMTCwKKyAgICAgICAgICAg
IGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9O
RSwgMSwKKyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisg
ICAgLyoKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWF2YWlsYWJs
ZQorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFs
CisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0ZXM6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIFRo
ZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFibGUgd2lsbCBiZSBl
bWl0dGVkIHdpdGggQHZpZXdwb3J0X2F0dHJpYnV0ZXMKKyAgICAgKiB3aGVuIHRoZSB2aWV3cG9y
dCBhdHRyaWJ1dGVzIGFyZSB1cGRhdGVkIGluIHRoZSBjYXNlIG9mIGxvYWRpbmcgd2ViIHBhZ2Vz
IGNvbnRhaW4KKyAgICAgKiB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQgY2FsbGluZyB3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUuCisgICAgICogQHZpZXdwb3J0X2F0dHJp
YnV0ZXMgaXMgdXNlZCB0byBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQgdG8gbWFrZSBhIHdl
YiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMu
OAorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVU
RVNfQVZBSUxBQkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1hdmFpbGFi
bGUiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAg
ICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9O
KSwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICBOVUxMLCBOVUxMLAorICAgICAgICAgICAg
Z19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05F
LCAxLAorICAgICAgICAgICAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyk7CisKKyAg
ICAvKgogICAgICAqIGltcGxlbWVudGF0aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8K
ICAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFs
X2NyZWF0ZV93ZWJfdmlldzsKQEAgLTI5NjEsNiArMzAyMCwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CiAKICAgICAvKioKKyAgICAqIFdlYktpdFdlYlZpZXc6
dmlld3BvcnQtYXR0cmlidXRlczoKKyAgICAqCisgICAgKiBUaGUgYXNzb2NpYXRlZCAjV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICoKKyAgICAqIFNpbmNlOiAxLjMuOAor
ICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywg
UFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX29iamVjdCgidmlld3BvcnQtYXR0cmlidXRlcyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlZpZXdw
b3J0IEF0dHJpYnV0ZXMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiVGhlIGFzc29jaWF0ZWQgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzIGluc3RhbmNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCiAgICAgKiBXZWJLaXRXZWJWaWV3OndpbmRvdy1m
ZWF0dXJlczoKICAgICAqCiAgICAgKiBBbiBhc3NvY2lhdGVkIFdlYktpdFdlYldpbmRvd0ZlYXR1
cmVzIGluc3RhbmNlLgpAQCAtMzM4Nyw2ICszNDYwLDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93
ZWJfdmlld19pbml0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+d2ViSW5zcGVj
dG9yID0gYWRvcHRQbGF0Zm9ybVJlZihXRUJLSVRfV0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXco
V0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RPUiwgTlVMTCkpKTsKICAgICB3ZWJraXRfd2ViX2luc3Bl
Y3Rvcl9zZXRfaW5zcGVjdG9yX2NsaWVudChwcml2LT53ZWJJbnNwZWN0b3IuZ2V0KCksIHByaXYt
PmNvcmVQYWdlKTsKIAorICAgIC8vIEFuZCBvdXIgVmlld3BvcnRBdHRyaWJ1dGVzIGZyaWVuZC4K
KyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMgPSBhZG9wdFBsYXRmb3JtUmVmKFdFQktJVF9W
SUVXUE9SVF9BVFRSSUJVVEVTKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRS
SUJVVEVTLCBOVUxMKSkpOworICAgIHByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+d2Vi
VmlldyA9IHdlYlZpZXc7CisKICAgICAvLyBUaGUgc21hcnQgcG9pbnRlciB3aWxsIGNhbGwgZ19v
YmplY3RfcmVmX3Npbmsgb24gdGhlc2UgYWRqdXN0bWVudHMuCiAgICAgcHJpdi0+aG9yaXpvbnRh
bEFkanVzdG1lbnQgPSBHVEtfQURKVVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAs
IDAuMCwgMC4wLCAwLjAsIDAuMCkpOwogICAgIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IEdU
S19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwg
MC4wKSk7CkBAIC0zNTI2LDYgKzM2MDMsMjkgQEAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRf
d2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVy
biB3ZWJWaWV3LT5wcml2LT53ZWJJbnNwZWN0b3IuZ2V0KCk7CiB9CiAKKy8qKgorICogd2Via2l0
X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzOgorICogQHdlYlZpZXc6IGEgI1dlYktp
dFdlYlZpZXcKKyAqCisgKiBPYnRhaW5zIHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFz
c29jaWF0ZWQgd2l0aCB0aGUKKyAqICNXZWJLaXRXZWJWaWV3LiBFdmVyeSAjV2ViS2l0V2ViVmll
dyBvYmplY3QgaGFzIGEKKyAqICNXZWJLaXRXZWJWaWV3cG9yX0F0dHJpYnV0ZXMgb2JqZWN0IGF0
dGFjaGVkIHRvIGl0IGFzIHNvb24gYXMgaXQgaXMKKyAqIGNyZWF0ZWQsIHNvIHRoaXMgZnVuY3Rp
b24gd2lsbCBvbmx5IHJldHVybiBOVUxMIGlmIHRoZSBhcmd1bWVudCBpcworICogbm90IGEgdmFs
aWQgI1dlYktpdFdlYlZpZXcuIERvIG5vdGUgaG93ZXZlciB0aGF0IHRoZSB2aWV3cG9ydAorICog
YXR0cmlidXRlcyBvYmplY3Qgb25seSBjb250YWlucyB2YWxpZCBpbmZvcm1hdGlvbiB3aGVuIHRo
ZSBjdXJyZW50CisgKiBwYWdlIGhhcyBhIHZpZXdwb3J0IG1ldGEgdGFnLiBZb3UgY2FuIGNoZWNr
IHdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkCisgKiBiZSB1c2VkIGJ5IGNoZWNraW5nIHRoZSAjV2Vi
S2l0Vmlld3BvcnQ6dmFsaWQgcHJvcGVydHkuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNm
ZXIgbm9uZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICoKKyAq
IFNpbmNlOiAxLjMuOAorICovCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQorewor
ICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7
CisgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKTsKK30K
KwogLy8gaW50ZXJuYWwKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfd2luZG93X2Zl
YXR1cmVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3
ZWJXaW5kb3dGZWF0dXJlcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtp
dHdlYnZpZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA1MTRk
ODNjLi4zNGM0ZDVlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MjcsNiArNDI3
LDkgQEAgd2Via2l0X2dldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZv
aWQpOwogV0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0
X2RvbV9kb2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZp
ZXcpOwogCitXRUJLSVRfQVBJIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAg
ICAqd2ViVmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDQxNzZiMzEuLmQ2
NTUxNGQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMi0wNiAgSm9vbmUgSHVyICA8am9v
bmVAa2xkcC5vcmc+CisKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgIEFk
ZCBzdXBwb3J0IGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGZvciBXZWJLaXRH
dGsuCisKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAgKGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIEph
dmFTY3JpcHQgQVBJIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAg
ICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgICogRHVt
cFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgdGhp
cyBmdW5jdGlvbiB0byB0ZXN0IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgICAo
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgor
ICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoK
KyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0
KTogRGl0dG8uCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6
Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisKIDIwMTAtMTItMDMgIE1paGFpIFBh
cnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVG9u
eSBDaGFuZy4KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRl
c3RDb250cm9sbGVyLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RD
b250cm9sbGVyLmNwcAppbmRleCBhMjI1NzlhLi5hZTE1NGRkIDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0xLDUgKzEs
NiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29u
ZUBrbGRwLm9yZz4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTQwLDYgKzE0
MSwyMiBAQCBzdGF0aWMgSlNWYWx1ZVJlZiBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0Nh
bGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKUwogICAgIHJldHVybiBKU1ZhbHVlTWFrZVVu
ZGVmaW5lZChjb250ZXh0KTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgZHVtcENvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24s
IEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1Zh
bHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYgKGFy
Z3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGggPSBKU1ZhbHVlVG9OdW1iZXIoY29u
dGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7
CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0LCBh
cmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKworICAg
IExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0VGVz
dENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNvbnRy
b2xsZXItPmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChzdGF0aWNfY2FzdDxpbnQ+KGF2YWlsYWJs
ZVdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVIZWlnaHQpKTsKKyAgIAorICAgIHJl
dHVybiBKU1ZhbHVlTWFrZVVuZGVmaW5lZChjb250ZXh0KTsKK30KKwogc3RhdGljIEpTVmFsdWVS
ZWYgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpT
T2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1l
bnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0
aW9uKQogewogICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nh
c3Q8TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkp
OwpAQCAtMTkxNCw2ICsxOTMxLDcgQEAgSlNTdGF0aWNGdW5jdGlvbiogTGF5b3V0VGVzdENvbnRy
b2xsZXI6OnN0YXRpY0Z1bmN0aW9ucygpCiAgICAgICAgIHsgImR1bXBCYWNrRm9yd2FyZExpc3Qi
LCBkdW1wQmFja0ZvcndhcmRMaXN0Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9u
bHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcENo
aWxkRnJhbWVTY3JvbGxQb3NpdGlvbnMiLCBkdW1wQ2hpbGRGcmFtZVNjcm9sbFBvc2l0aW9uc0Nh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lc0FzVGV4dCIsIGR1bXBD
aGlsZEZyYW1lc0FzVGV4dENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwg
a0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgImR1bXBDb25maWd1
cmF0aW9uRm9yVmlld3BvcnQiLCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0LCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBkdW1wRE9NQXNXZWJBcmNoaXZlQ2Fs
bGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFiYXNlQ2FsbGJhY2tzIiwgZHVtcERh
dGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcEVkaXRpbmdD
YWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCmRpZmYgLS1n
aXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oIGIv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCAy
ZTljODU2Li5iMTU2M2MxIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI4NSw2ICsyODUsOCBAQCBwdWJsaWM6CiAKICAgICBi
b29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3RoKTsKIAorICAgIHZvaWQg
Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWlsYWJs
ZUhlaWdodCk7CisKICAgICAvLyBUaGUgZm9sbG93aW5nIEFQSSB0ZXN0IGZ1bmN0aW9ucyBzaG91
bGQgcHJvYmFibHkgYmUgbW92ZWQgdG8gcGxhdGZvcm0tc3BlY2lmaWMgCiAgICAgLy8gdW5pdCB0
ZXN0cyBvdXRzaWRlIG9mIERSVCBvbmNlIHRoZXkgZXhpc3QuCiAgICAgdm9pZCBhcGlUZXN0TmV3
V2luZG93RGF0YUxvYWRCYXNlVVJMKEpTU3RyaW5nUmVmIHV0ZjhEYXRhLCBKU1N0cmluZ1JlZiBi
YXNlVVJMKTsKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCmluZGV4IDgzODc0ZjQuLjIwMDRkMWYgMTAwNjQ0
Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxl
ckd0ay5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcApAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBO
dWFudGkgTHRkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IEphbiBNaWNoYWVsIEFsb256byA8am1h
bG9uem9AZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IENvbGxhYm9yYSBMdGQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDcsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpYnNv
dXAvc291cC5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXQuaD4KICNpbmNsdWRlIDx3dGYvZ29i
amVjdC9HT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBleHRl
cm4gIkMiIHsKIHZvaWQgd2Via2l0X2FwcGxpY2F0aW9uX2NhY2hlX3NldF9tYXhpbXVtX3NpemUo
dW5zaWduZWQgbG9uZyBsb25nIHNpemUpOwpAQCAtODE5LDMgKzgyMSwxMCBAQCBib29sIExheW91
dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IHRoaXMuCiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIExheW91dFRl
c3RDb250cm9sbGVyOjpjb25maWd1cmF0aW9uRm9yVmlld3BvcnQoaW50IGF2YWlsYWJsZVdpZHRo
LCBpbnQgYXZhaWxhYmxlSGVpZ2h0KQoreworICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXcgPSB3
ZWJraXRfd2ViX2ZyYW1lX2dldF93ZWJfdmlldyhtYWluRnJhbWUpOworICAgIEFTU0VSVCh3ZWJW
aWV3KTsKKyAgICBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmNvbXB1dGVWaWV3cG9ydEF0dHJp
YnV0ZXNGb3JTaXplKHdlYlZpZXcsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpOwor
fQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RD
b250cm9sbGVyTWFjLm1tIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRl
c3RDb250cm9sbGVyTWFjLm1tCmluZGV4IGJlM2ViMDkuLmU0YWFlMDQgMTAwNjQ0Ci0tLSBhL1dl
YktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQor
KysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJN
YWMubW0KQEAgLTk4OSwzICs5ODksNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNT
cGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gW21haW5G
cmFtZSBoYXNTcGVsbGluZ01hcmtlcjpmcm9tIGxlbmd0aDpsZW5ndGhdOwogfQordm9pZCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVX
aWR0aCwgaW50IGF2YWlsYWJsZUhlaWdodCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5k
ZXggYjFhNGVmNC4uY2FmNWFmOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xNDE1LDMgKzE0
MTUsOCBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQg
ZnJvbSwgaW50IGxlbmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiByZXQ7
CiB9CisKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklY
TUU6IEltcGxlbWVudCB0aGlzLgorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRl
clRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVu
ZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRleCAxMjBhMWI2Li40MWU1
MjFmIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcApAQCAtNTExLDYgKzUxMSwxMSBAQCBib29sIExheW91dFRl
c3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8g
RklYTUU6IEltcGxlbWVudAorfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVz
dENvbnRyb2xsZXI6OnBhZ2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBw
YWdlTnVtYmVyKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
</data>
<flag name="review"
          id="66549"
          type_id="1"
          status="-"
          setter="mrobinson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75888</attachid>
            <date>2010-12-08 04:34:38 -0800</date>
            <delta_ts>2010-12-08 10:07:40 -0800</delta_ts>
            <desc>Proposed Patch13</desc>
            <filename>viewport13.patch</filename>
            <type>text/plain</type>
            <size>56004</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0YjBiNTliLi4wMDg3MDJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTIt
MDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEyLTA3ICBNYXJ0aW4gUm9iaW5zb24gIDxt
cm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBSZWJhc2VsaW5lIEdUSysgcmVzdWx0cyBh
ZnRlciByNzMzODUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBl
ZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGViYzc5MzQuLjk5N2Fi
NzIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NTA1LDcgKzU1MDUsOCBAQCBmdWxs
c2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5o
dG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQv
dmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkg
dG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1
aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCmluZGV4IDczNjczODguLjE2YTg4ZjEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
Q2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIw
MTAtMTItMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0
IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVy
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUgdmlld3BvcnQgc2l6ZSwg
aW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91
dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmll
d3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkg
U2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0
aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGli
cmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJh
cnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJl
Zi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRk
ZWQgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNw
cC4gCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6
IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVu
dHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0
ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5j
cHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBDb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIHZpZXdwb3J0
IGF0dHJpYnV0ZXMgd2l0aCB0aGUgZ2l2ZW4gYXZhaWxhYmxlV2lkdGggYW5kIGF2YWlsYWJsZUhl
aWdodC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
aDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IAor
ICAgICAgICAoV2ViS2l0Ojpwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXApOiBJbnZhbGlkYXRlIHRo
ZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAg
ICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2
YXRlLmg6IEFkZGVkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZSBhcyBhIHByaXZh
dGUgZnVuY3Rpb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5j
cHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5p
dCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KToKKyAgICAgICAg
KHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJr
aXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0Vmll
d3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKTogUmVjb21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0
IGF0dHJpYnV0ZXMgYW5kIGVtaXQgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWdu
YWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUpOiBhIHB1
YmxpYyBBUEkgZm9yIGNhbGxpbmcgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlLgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDogQWRkZWQuCisgICAg
ICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2dldF9wcm9wZXJ0eSk6IEFkZGVkIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUy4KKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTogRGVhbGxvY2F0ZSB0aGUgV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQp
OiBBZGRlZCB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIGFuZCB2
aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFscy4KKyAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19pbml0KTogU2V0IHRoZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisg
ICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMpOiBBZGRlZCBh
IGdldHRlciB0byBvYnRhaW4gdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpbnN0YW5jZSBo
ZWxkIGJ5IHRoZSBnaXZlbiBXZWJLaXRXZWJWaWV3LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3
ZWJ2aWV3Lmg6CisKIDIwMTAtMTItMDYgIE5hdGUgQ2hhcGluICA8amFwaGV0QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUuYW0KaW5kZXggYTg0
NmY3Zi4uYWJhZGNmOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbQorKysg
Yi9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMTksNiArMTE5LDcgQEAgd2Via2l0Z3Rr
X3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdG5l
dHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0c2Vj
dXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHNvdXBh
dXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3cG9y
dGF0dHJpYnV0ZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJh
Y2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vi
ZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFz
b3VyY2UuaCBcCkBAIC0xODIsNiArMTgzLDcgQEAgd2Via2l0Z3RrX3NvdXJjZXMgKz0gXAogCVdl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmVyc2lvbi5j
cHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHAgXAog
CVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5jcHAgXAogCVdlYktp
dC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwIFwKIAlXZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJmcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuY3BwCmluZGV4IDE5MGFlOWIuLmM2OGFkNTggMTAwNjQ0Ci0tLSBhL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysgYi9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsuaCIKIAorI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRlICJEdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC02MTYsNiArNjE3LDEy
IEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFdU
Rjo6U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJDCiAgICAgY2hvb3Nlci0+aWNvbkxvYWRlZChJY29u
OjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKK3ZvaWQgQ2hyb21lQ2xpZW50
OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBWaWV3cG9ydEFyZ3VtZW50cyYg
YXJndW1lbnRzKSBjb25zdAoreworICAgIC8vIFJlY29tcHV0ZSB0aGUgdmlld3BvcnQgYXR0cmli
dXRlcyBtYWtpbmcgaXQgdmFsaWQuCisgICAgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21w
dXRlKHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyhtX3dlYlZpZXcpLCB0
cnVlKTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJzb3ImKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJv
bWVDbGllbnRHdGsuaAppbmRleCA4MjUyZjA2Li5iNGExYTM3IDEwMDY0NAotLS0gYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2Vi
Q29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTExMCw2ICsxMTAsOCBAQCBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBXVEY6
OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQo
V2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBXVEY6OlN0
cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDEwNjk0ZDAuLmMyNzk2OTkgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHAK
QEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9u
IExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTM3
NywzICszNzgsMTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OnJlc2V0T3JpZ2lu
QWNjZXNzV2hpdGVMaXN0cygpCiAgICAgU2VjdXJpdHlPcmlnaW46OnJlc2V0T3JpZ2luQWNjZXNz
V2hpdGVsaXN0cygpOwogfQogCisvLyBGb3IgdGVzdGluZyBmYXN0L3ZpZXdwb3J0Lgordm9pZCBE
dW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVI
ZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmll
dykpOworCisgICAgVmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJpdi0+
Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOwor
ICAgIC8vIGRlc2t0b3BXaWR0aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAsIGRldmljZUhlaWdo
dCA9IDQ4MCwgZGV2aWNlRFBJID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJzID0g
Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIwLCA0ODAsIDE2MCwg
SW50U2l6ZShhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBmcHJpbnRm
KHN0ZG91dCwgInZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVmLCAl
Zl1cbiIsIGF0dHJzLmxheW91dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0U2l6ZS5oZWlnaHQo
KSwgYXR0cnMuaW5pdGlhbFNjYWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0dHJzLm1heGltdW1T
Y2FsZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5k
ZXJUcmVlU3VwcG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVy
VHJlZVN1cHBvcnRHdGsuaAppbmRleCBlZjU3YjE0Li43ZTljZGIzIDEwMDY0NAotLS0gYS9XZWJL
aXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTIx
LDYgKzIxLDcgQEAKIAogCiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0ZGVmaW5lcy5oPgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPGds
aWIuaD4KQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldExpbmtz
SW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgbGlua3NJbmNsdWRl
ZEluRm9jdXNDaGFpbigpOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG5vZGVzRnJvbVJlY3QoSlND
b250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIGludCB4LCBpbnQgeSwgdW5zaWdu
ZWQgdG9wLCB1bnNpZ25lZCByaWdodCwgdW5zaWduZWQgYm90dG9tLCB1bnNpZ25lZCBsZWZ0LCBi
b29sIGlnbm9yZUNsaXBwaW5nKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdp
bnQgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtp
dHdlYmZyYW1lLmggb25jZSB0aGVpciBBUEkgaGFzIGJlZW4gZGlzY3Vzc2VkLgogICAgIHN0YXRp
YyBHU0xpc3QqIGdldEZyYW1lQ2hpbGRyZW4oV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3Bw
IGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5k
ZXggOTYxM2JiMS4uY2I0MWU2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTEyODEsNiArMTI4MSwxMiBAQCBzdGF0aWMg
dm9pZCBwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXAoV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBGcmFt
ZVZpZXcgKnZpZXcsIGJvbwogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lU
X1dFQl9WSUVXX0dFVF9QUklWQVRFKGNvbnRhaW5pbmdXaW5kb3cpOwogICAgIHZpZXctPnNldEd0
a0FkanVzdG1lbnRzKHByaXYtPmhvcml6b250YWxBZGp1c3RtZW50LmdldCgpLCBwcml2LT52ZXJ0
aWNhbEFkanVzdG1lbnQuZ2V0KCksIHJlc2V0VmFsdWVzKTsKIAorICAgIC8vIEludmFsaWRhdGUg
dGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgLSB0aGV5IHdpbGwgb25seSBiZSB2YWxpZAorICAgIC8v
IGFnYWluIGlmIHRoZSBwYWdlIHdlJ3JlIGJlZ2lubmluZyB0byBsb2FkIG5vdyBoYXMgYW4KKyAg
ICAvLyBhcHByb3ByaWF0ZSB2aWV3cG9ydCBtZXRhIHRhZy4KKyAgICBjb250YWluaW5nV2luZG93
LT5wcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQgPSBGQUxTRTsKKyAgICBn
X29iamVjdF9ub3RpZnkoR19PQkpFQ1QoY29udGFpbmluZ1dpbmRvdy0+cHJpdi0+dmlld3BvcnRB
dHRyaWJ1dGVzLmdldCgpKSwgInZhbGlkIik7CisKICAgICBpZiAocHJpdi0+Y3VycmVudE1lbnUp
IHsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVudT4gbWVudShwcml2LT5jdXJyZW50TWVu
dSk7CiAgICAgICAgIHByaXYtPmN1cnJlbnRNZW51LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4
IGZjNzFjMmMuLjI0MjhmNjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5o
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRp
YWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93
ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGIwNmEzYmYuLjM5OWNiNGMgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTkyLDYgKzkyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dl
YktpdEhpdFRlc3RSZXN1bHRDbGFzcyBXZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3M7CiB0eXBlZGVm
IHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiBXZWJLaXRHZW9sb2NhdGlv
blBvbGljeURlY2lzaW9uOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5
RGVjaXNpb25DbGFzcyBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uQ2xhc3M7CiAKK3R5
cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCAwYjU5NzQ2Li5kOTk2NWU3IDEwMDY0NAotLS0g
YS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dl
YmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJr
aXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdl
YnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgpAQCAtMTM3LDYgKzEzOCw3IEBAIGV4dGVybiAi
QyIgewogICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZTsKICAgICAgICAgUGxhdGZvcm1S
ZWZQdHI8V2ViS2l0V2ViU2V0dGluZ3M+IHdlYlNldHRpbmdzOwogICAgICAgICBQbGF0Zm9ybVJl
ZlB0cjxXZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3BlY3RvcjsKKyAgICAgICAgUGxhdGZvcm1S
ZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2aWV3cG9ydEF0dHJpYnV0ZXM7CiAgICAg
ICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzPiB3ZWJXaW5kb3dGZWF0
dXJlczsKIAogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwpAQCAtMjE1LDYgKzIx
NywyNSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2Jvb2xlYW4gZGlzcG9zZWQ7CiAgICAgfTsK
IAorICAgIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSB7CisgICAgICAg
IFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAgIGludCBkZXZpY2VXaWR0aDsKKyAgICAg
ICAgaW50IGRldmljZUhlaWdodDsKKyAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoOworICAgICAg
ICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICBpbnQgZGVza3RvcFdpZHRoOworICAgICAg
ICBpbnQgZGV2aWNlRFBJOworCisgICAgICAgIGludCB3aWR0aDsKKyAgICAgICAgaW50IGhlaWdo
dDsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlRmFjdG9yOworICAgICAgICBmbG9hdCBtaW5p
bXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1heGltdW1TY2FsZUZhY3RvcjsKKyAgICAg
ICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAgICAgZ2Jvb2xlYW4gdXNlclNjYWxhYmxl
OworICAgICAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAgIH07CisKICAgICBXVEY6OlN0cmluZwog
ICAgIHdlYmtpdFVzZXJBZ2VudCgpOwogCkBAIC0zNzQsNiArMzk1LDggQEAgZXh0ZXJuICJDIiB7
CiAKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdFbnRlckZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyog
d2ViVmlldywgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CiAgICAgdm9pZCB3ZWJraXRXZWJWaWV3RXhp
dEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CisKKyAgICB2b2lkIHdlYmtpdFZp
ZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqLCBib29s
KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTliZWFmCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1
dGVzLmNwcApAQCAtMCwwICsxLDU1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29u
ZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBM
dGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIK
KworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VDVElPTjp3ZWJraXR2
aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUmVwcmVzZW50cyB0aGUg
dmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdlYiBwYWdlCisgKiBAc2VlX2Fsc286ICNXZWJLaXRX
ZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQKKyAqIEBzZWVf
YWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZAorICoKKyAq
ICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgb2ZmZXJzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVz
IHRvIHVzZXIgYWdlbnRzIHRvCisgKiBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQuIEl0IGNv
bnRhaW5zIHRoZSB2aWV3cG9ydCBzaXplLCBpbml0aWFsIHNjYWxlIHdpdGggbGltaXRzLAorICog
YW5kIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8gc2NhbGUgdGhl
IGNvbnRlbnRzIGluIHRoZSB2aWV3cG9ydC4KKyAqIFRoaXMgbWFrZXMgYSB3ZWIgcGFnZSBmaXQg
dGhlIGRldmljZSBzY3JlZW4uCisgKgorICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aXRoICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMKKyAqIHdoZW4gdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYXJlIHVwZGF0
ZWQgaW4gdGhlIGNhc2Ugb2YgbG9hZGluZyB3ZWIgcGFnZXMgY29udGFpbgorICogdGhlIHZpZXdw
b3J0IHByb3BlcnRpZXMgYW5kIGNhbGxpbmcgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVj
b21wdXRlLgorICoKKyAqIElmIHRoZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUsIGRlc2t0
b3Agd2lkdGgsIG9yIGRldmljZSBEUEkgbmVlZHMgdG8gYmUgY2hhbmdlZCBkdWUgdG8gCisgKiBh
IGNvbnNlcXVlbmNlIG9mIGFuIGV4cGxpY2l0IGJyb3dzZXIgcmVxdWVzdCAoY2F1c2VkIGJ5IHNj
cmVlbiByb3RhdGlvbiwgcmVzaXppbmcsIG9yIHNpbWlsYXIgcmVhc29ucyksCisgKiBZb3Ugc2hv
dWxkIGNhbGwgI3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSB0byByZWNvbXB1
dGUgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgYW5kIAorICogb3ZlcnJpZGUgdGhvc2UgdmFsdWVz
IGluIHRoZSBoYW5kbGVyIG9mICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJl
Y29tcHV0ZS1yZXF1ZXN0ZWQgc2lnbmFsLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9u
IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLCByZWZlciB0byB0aGUgU2FmYXJpIHJlZmVyZW5jZSBs
aWJyYXJ5IGF0CisgKiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9zYWZhcmkvbGlicmFyeS9k
b2N1bWVudGF0aW9uL2FwcGxlYXBwbGljYXRpb25zL3JlZmVyZW5jZS9zYWZhcmlodG1scmVmL2Fy
dGljbGVzL21ldGF0YWdzLmh0bWwKKyAqCisgKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9ncmFtbGlz
dGluZz4KKyAqIC88IS0tIC0tPiogQ29ubmVjdCB0byB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1j
aGFuZ2VzIHNpZ25hbCAqPCEtLSAtLT4vCisgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIGF0
dHJpYnV0ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMgKHdlYl92
aWV3KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAidmlld3BvcnQtYXR0cmlidXRl
cy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfcmVjb21wdXRlX2Ni
KSwgd2luZG93KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAidmlld3BvcnQtYXR0
cmlidXRlcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfY2hhbmdlZF9jYiksIHdpbmRv
dyk7CisgKiBnX3NpZ25hbF9jb25uZWN0IChhdHRyaWJ1dGVzLCAibm90aWZ5Ojp2YWxpZCIsIEdf
Q0FMTEJBQ0sgKHZpZXdwb3J0X3ZhbGlkX2NoYW5nZWRfY2IpLCB3ZWJfdmlldyk7CisgKgorICog
LzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVl
c3RlZCBzaWduYWwgdG8gb3ZlcnJpZGUgdGhlIGRldmljZSB3aWR0aCAqPCEtLSAtLT4vCisgKiBz
dGF0aWMgdm9pZAorICogdmlld3BvcnRfcmVjb21wdXRlX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJf
dmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzLCBHdGtXaWRnZXQqIHdp
bmRvdykKKyAqIHsKKyAqICAgICBpbnQgb3ZlcnJpZGVfYXZhaWxhYmxlX3dpZHRoID0gNDgwOwor
ICogICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QoYXR0cmlidXRlcyksICJhdmFpbGFibGUtd2lk
dGgiLCBvdmVycmlkZV9hdmFpbGFibGVfd2lkdGgsIE5VTEwpOworICogfQorICoKKyAqIC88IS0t
IC0tPiogSGFuZGxlIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHRvIHJl
Y29tcHV0ZSB0aGUgaW5pdGlhbCBzY2FsZSBmYWN0b3IgKjwhLS0gLS0+LworICogc3RhdGljIHZv
aWQgCisgKiB2aWV3cG9ydF9jaGFuZ2VkX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmlldywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzLCBncG9pbnRlciBkYXRhKQorICogewor
ICogICAgIGdmbG9hdCBpbml0aWFsU2NhbGU7CisgKiAgICAgZ19vYmplY3RfZ2V0IChHX09CSkVD
VCAoYXRyaWJ1dGVzKSwgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2FsZSwgTlVM
TCk7CisgKiAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmlldywgaW5p
dGlhbFNjYWxlKTsKKyAqIH0KKyAqIAorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIG5vdGlmeTo6
dmFsaWQgc2lnbmFsIHRvIGluaXRpYWxpemUgdGhlIHpvb20gbGV2ZWwgKjwhLS0gLS0+LworICog
c3RhdGljIHZvaWQKKyAqIHZpZXdwb3J0X3ZhbGlkX2NoYW5nZWRfY2IgKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcyogYXR0cmlidXRlcywgR1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdlYlZpZXcq
IHdlYl92aWV3KQorICogeworICogICAgIGdib29sZWFuIGlzX3ZhbGlkOworICogICAgIGdfb2Jq
ZWN0X2dldCAoYXR0cmlidXRlcywgInZhbGlkIiwgJmlzX3ZhbGlkLCBOVUxMKTsKKyAqICAgICBp
ZiAoIWlzX3ZhbGlkKSAKKyAqICAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVs
ICh3ZWJfdmlldywgMS4wKTsKKyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZvcm1hbGV4
YW1wbGU+CisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0RFVklDRV9XSURUSCwK
KyAgICBQUk9QX0RFVklDRV9IRUlHSFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgsCisgICAg
UFJPUF9BVkFJTEFCTEVfSEVJR0hULAorICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAgICBQUk9Q
X0RFVklDRV9EUEksCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAgICBQUk9Q
X0lOSVRJQUxfU0NBTEVfRkFDVE9SLAorICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1IsCisg
ICAgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJ
TywKKyAgICBQUk9QX1VTRVJfU0NBTEFCTEUsCisgICAgUFJPUF9WQUxJRAorfTsKKworR19ERUZJ
TkVfVFlQRShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1
dGVzLCBHX1RZUEVfT0JKRUNUKTsKKworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRF
U19HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiks
IFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
c1ByaXZhdGUpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlELCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpOworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJRCwg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyAqcGFyYW1TcGVjKTsKKworc3RhdGljIHZv
aWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdChXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNDbGFzcyoga2NsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENsYXNz
ID0gR19PQkpFQ1RfQ0xBU1Moa2NsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0
eSA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eTsKKyAgICBnb2JqZWN0
Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3NldF9wcm9w
ZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRldmljZS13
aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuLiBUaGlzIHZhbHVl
IGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVkIGR1cmluZyBhIHZp
ZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICogY2FuIGJlIG92ZXJy
aWRkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1h
dHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8g
dGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0RFVklDRV9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFy
YW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGV2aWNl
LXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBX
aWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdpZHRo
IG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLWhlaWdodDoKKyAgICAgKgorICAgICAqIFRo
ZSBoZWlnaHQgb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21hdGljYWxs
eQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVzIHJlY29t
cHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRsZXIgb2YK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1
ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2
ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFVklDRV9IRUlHSFQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1oZWlnaHQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNlIEhlaWdodCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVuLiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9Q
QVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRzOmF2YWlsYWJsZS13aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgY3Vy
cmVudCB2aXNpYmxlIGFyZWEuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZQorICAgICAqIHNhbWUg
YXMgdGhlIHNwYWNlIGFsbG9jYXRlZCB0byB0aGUgd2lkZ2V0LCBidXQgaW4gc29tZSBjYXNlcwor
ICAgICAqIHlvdSBtYXkgaGF2ZSBkZWNpZGVkIHRvIG1ha2UgdGhlIHdpZGdldCBiaWdnZXIgdGhh
biB0aGUgdmlzaWJsZQorICAgICAqIGFyZWEuIFRoaXMgdmFsdWUgaXMgYnkgZGVmYXVsdCBpbml0
aWFsaXplZCB0byB0aGUgc2l6ZQorICAgICAqIGFsbG9jYXRlZCBieSB0aGUgd2lkZ2V0LCBidXQg
eW91IGNhbiBvdmVycmlkZSBpdCBpbiB0aGUgaGFuZGxlcgorICAgICAqIG9mIFdlYktpdFdlYlZp
ZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCB0bworICAgICAqIGxl
dCB0aGUgZW5naW5lIGtub3cgd2hhdCB0aGUgdmlzaWJsZSBhcmVhIGlzLgorICAgICAqCisgICAg
ICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX0FWQUlMQUJMRV9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YXZhaWxhYmxlLXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8o
IkF2YWlsYWJsZSBXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XygiVGhlIHdpZHRoIG9mIHRoZSB2aXNpYmxlIGFyZWEuIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6YXZhaWxhYmxlLWhlaWdo
dDoKKyAgICAgKgorICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgdmlzaWJsZSBhcmVh
LiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUKKyAgICAgKiBzYW1lIGFzIHRoZSBzcGFjZSBhbGxv
Y2F0ZWQgdG8gdGhlIHdpZGdldCwgYnV0IGluIHNvbWUgY2FzZXMKKyAgICAgKiB5b3UgbWF5IGhh
dmUgZGVjaWRlZCB0byBtYWtlIHRoZSB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIHZpc2libGUKKyAg
ICAgKiBhcmVhLiBUaGlzIHZhbHVlIGlzIGJ5IGRlZmF1bHQgaW5pdGlhbGl6ZWQgdG8gdGhlIHNp
emUKKyAgICAgKiBhbGxvY2F0ZWQgYnkgdGhlIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUg
aXQgaW4gdGhlIGhhbmRsZXIKKyAgICAgKiBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRy
aWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQgdG8KKyAgICAgKiBsZXQgdGhlIGVuZ2luZSBrbm93
IHdoYXQgdGhlIHZpc2libGUgYXJlYSBpcy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAor
ICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFCTEVfSEVJ
R0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2lu
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtaGVpZ2h0
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkF2YWlsYWJsZSBIZWln
aHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWlnaHQg
b2YgdGhlIHZpc2libGUgYXJlYS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAg
ICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXNrdG9wLXdpZHRoOgorICAgICAqCisgICAg
ICogVGhlIHdpZHRoIG9mIHZpZXdwb3J0IHRoYXQgd29ya3Mgd2VsbCBmb3IgbW9zdCB3ZWIgcGFn
ZXMgZGVzaWduZWQgZm9yIAorICAgICAqIGRlc2t0b3AuIFRoaXMgdmFsdWUgaXMgaW5pdGlhbGl6
ZWQgdG8gOTgwIHBpeGVscyBieSBkZWZhdWx0IGFuZCB1c2VkIAorICAgICAqIGR1cmluZyBhIHZp
ZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbi4gQWxzbywgaXQgY2FuIGJlIG92ZXJyaWRl
biBieSAKKyAgICAgKiB0aGUgaGFuZGxlciBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRy
aWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIAorICAgICAqIFlvdSBzaG91bGQgbm90IGRvIHRo
YXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAgICAqIFNp
bmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
Z29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9E
RVNLVE9QX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJh
bV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNrdG9w
LXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRlc2t0b3Ag
V2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSB3aWR0
aCBvZiB2aWV3cG9ydCB0aGF0IHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRlc2lnbmVk
IGZvciBkZXNrdG9wLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgOTgwLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisgICAgICog
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLWRwaToKKyAgICAgKgorICAgICAqIFRoZSBu
dW1iZXIgb2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuLiBUaGlzIHZhbHVlIGlzIAorICAg
ICAqIGluaXRpYWxpemVkIHRvIDE2MCBkcGkgYnkgZGVmYXVsdCBhbmQgdXNlZCBkdXJpbmcgYSB2
aWV3cG9ydCAKKyAgICAgKiBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGJlY2F1c2UgaXQgaXMg
dGhlIGRwaSBvZiB0aGUgb3JpZ2luYWwgCisgICAgICogaVBob25lIGFuZCBBbmRyb2lkIGRldmlj
ZXMuIEFsc28sIGl0IGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIAorICAgICAqIGhhbmRsZXIgb2Yg
V2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkLiAK
KyAgICAgKiBZb3Ugc2hvdWxkIG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29v
ZCByZWFzb24uCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX0RQSSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiZGV2aWNlLWRwaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfKCJEZXZpY2UgRFBJIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgbnVtYmVyIG9mIGRvdHMgcGVyIGluY2ggb2YgdGhlIHNjcmVlbi4iKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDE2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRzOndpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSB2aWV3cG9ydC4g
QmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgCisgICAgICogeW91IG5lZWQgdG8gbWFrZSBz
dXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKiAKKyAg
ICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBST1BfV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFt
X3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpZHRoIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldpZHRoIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0
LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dHM6aGVpZ2h0OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUgdmlld3Bv
cnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksCisgICAgICogeW91IG5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgor
ICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9IRUlHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3Bh
cmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhlaWdo
dCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJIZWlnaHQiKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWlnaHQgb2YgdGhlIHZp
ZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dHM6aW5pdGlhbC1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUg
aW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVy
dHksCisgICAgICogeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLwor
ICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsLXNjYWxlLWZhY3Rv
ciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJJbml0aWFsIFNjYWxl
IEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGlu
aXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01B
WEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOm1pbmltdW0tc2NhbGUtZmFj
dG9yOgorICAgICAqCisgICAgICogVGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiBC
ZWZvcmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCAKKyAgICAgKiB5b3UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisgICAg
ICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9w
ZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ
Uk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF8oIk1pbmltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIiks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dHM6bWF4aW11bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUgbWF4aW11
bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksIAor
ICAgICAqIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0ICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBn
X29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0b3IiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWF4aW11bSBTY2FsZSBGYWN0
b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBtYXhpbXVt
IHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9B
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtcGl4ZWwtcmF0aW86Cisg
ICAgICoKKyAgICAgKiBUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4gQmVm
b3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwKKyAgICAgKiB5b3UgbmVlZCB0byBtYWtlIHN1cmUg
dGhhdCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisgICAgICog
U2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0
eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9Q
X0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXygiRGV2aWNlIFBpeGVsIFJhdGlvIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfKCJUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0czp1c2VyLXNjYWxhYmxlOgorICAgICAqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9y
IG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LgorICAgICAqIEJlZm9yZSBnZXR0aW5n
IHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAqICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4z
LjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVVNFUl9TQ0FM
QUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19i
b29sZWFuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygidXNlci1zY2Fs
YWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVXNlciBTY2Fs
YWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5l
cyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LiIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAg
ICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6dmFsaWQ6CisgICAgICoKKyAgICAgKiBEZXRlcm1p
bmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZC4gCisgICAgICogI1dl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyBhcmUgb25seSB2YWxpZCBvbiBwYWdlcyAKKyAgICAgKiB3
aGljaCBoYXZlIGEgdmlld3BvcnQgbWV0YSB0YWcsIGFuZCBoYXZlIGFscmVhZHkgCisgICAgICog
aGFkIHRoZSBhdHRyaWJ1dGVzIGNhbGN1bGF0ZWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4z
LjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RD
bGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVkFMSUQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9vbGVhbigK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oInZhbGlkIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJWYWxpZCIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgYXR0
cmlidXRlcyBhcmUgdmFsaWQsIGFuZCBjYW4gYmUgdXNlZC4iKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3By
aXZhdGUoa2NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpOwor
fQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAgdmlld3BvcnQtPnByaXYgPSBXRUJL
SVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2aWV3cG9ydCk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBv
YmplY3QsIGd1aW50IHByb3BlcnR5SUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFt
U3BlYykKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRl
cyA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKG9iamVjdCk7CisgICAgV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdjsKKwor
ICAgIHN3aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgUFJPUF9ERVZJQ0VfV0lEVEg6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlV2lkdGgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX0hFSUdIVDoKKyAgICAgICAgZ192YWx1ZV9z
ZXRfaW50KHZhbHVlLCBwcml2LT5kZXZpY2VIZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUs
IHByaXYtPmF2YWlsYWJsZVdpZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FW
QUlMQUJMRV9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+YXZh
aWxhYmxlSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU0tUT1BfV0lE
VEg6CisgICAgICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGVza3RvcFdpZHRoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9EUEk6CisgICAgICAgIGdfdmFs
dWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlRFBJKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBQUk9QX1dJRFRIOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPndp
ZHRoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0hFSUdIVDoKKyAgICAgICAgZ192
YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5oZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfSU5JVElBTF9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0
KHZhbHVlLCBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0
KHZhbHVlLCBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1I6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0
KHZhbHVlLCBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3IpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfREVWSUNFX1BJWEVMX1JBVElPOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2
YWx1ZSwgcHJpdi0+ZGV2aWNlUGl4ZWxSYXRpbyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UFJPUF9VU0VSX1NDQUxBQkxFOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBw
cml2LT51c2VyU2NhbGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVkFMSUQ6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPmlzVmFsaWQpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wZXJ0eUlELCBwYXJhbVNwZWMpOworICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3Nl
dF9wcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BlcnR5SUQsIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3BlYykKK3sKKyAgICBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRlcyA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVT
KG9iamVjdCk7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZp
ZXdwb3J0QXR0cmlidXRlcy0+cHJpdjsKKworICAgIHN3aXRjaCAocHJvcGVydHlJRCkgeworICAg
IGNhc2UgUFJPUF9ERVZJQ0VfV0lEVEg6CisgICAgICAgIHByaXYtPmRldmljZVdpZHRoID0gZ192
YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklD
RV9IRUlHSFQ6CisgICAgICAgIHByaXYtPmRldmljZUhlaWdodCA9IGdfdmFsdWVfZ2V0X2ludCh2
YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFCTEVfV0lEVEg6Cisg
ICAgICAgIHByaXYtPmF2YWlsYWJsZVdpZHRoID0gZ192YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0FWQUlMQUJMRV9IRUlHSFQ6CisgICAgICAgIHBy
aXYtPmF2YWlsYWJsZUhlaWdodCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9ERVNLVE9QX1dJRFRIOgorICAgICAgICBwcml2LT5kZXNrdG9w
V2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfREVWSUNFX0RQSToKKyAgICAgICAgcHJpdi0+ZGV2aWNlRFBJID0gZ192YWx1ZV9nZXRf
aW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpF
Q1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJRCwgcGFyYW1TcGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmli
dXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmlidXRl
cywgYm9vbCBtYWtlVmFsaWQpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0
ZSogcHJpdiA9IHZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3ID0gcHJpdi0+d2ViVmlldzsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCh3ZWJWaWV3
LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCktPndpbmRvd1JlY3QoKSk7CisgICAgcHJpdi0+ZGV2
aWNlV2lkdGggPSB3aW5kb3dSZWN0LndpZHRoKCk7CisgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0ID0g
d2luZG93UmVjdC5oZWlnaHQoKTsKKworICAgIEludFJlY3QgcmVjdCh3ZWJWaWV3LT5wcml2LT5j
b3JlUGFnZS0+Y2hyb21lKCktPnBhZ2VSZWN0KCkpOworICAgIHByaXYtPmF2YWlsYWJsZVdpZHRo
ID0gcmVjdC53aWR0aCgpOworICAgIHByaXYtPmF2YWlsYWJsZUhlaWdodCA9IHJlY3QuaGVpZ2h0
KCk7CisKKyAgICAvLyBUaGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRl
c2lnbmVkIGZvciBkZXNrdG9wIGJyb3dzZXJzLgorICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IDk4
MDsKKyAgICAvLyBJdCBpcyB0aGUgZHBpIG9mIHRoZSBvcmlnaW5hbCBpUGhvbmUgYW5kIEFuZHJv
aWQgZGV2aWNlcy4KKyAgICBwcml2LT5kZXZpY2VEUEkgPSAxNjA7CisKKyAgICAvLyBGaXJzdCBv
ZiBhbGwsIHdlIGdpdmUgdGhlIGFwcGxpY2F0aW9uIGFuIG9wcG9ydHVuaXR5IHRvIG92ZXJyaWRl
IHNvbWUgb2YgdGhlIHZhbHVlcy4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywg
InZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsIHZpZXdwb3J0QXR0cmli
dXRlcyk7CisKKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHMgPSB3ZWJWaWV3LT5wcml2
LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRzKCk7
CisKKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2LT5kZXNrdG9wV2lkdGgsIHByaXYtPmRldmljZVdpZHRo
LCBwcml2LT5kZXZpY2VIZWlnaHQsIHByaXYtPmRldmljZURQSSwgSW50U2l6ZShwcml2LT5hdmFp
bGFibGVXaWR0aCwgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBwcml2LT53aWR0aCA9
IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0aCgpOworICAgIHByaXYtPmhlaWdodCA9IGF0dHJp
YnV0ZXMubGF5b3V0U2l6ZS5oZWlnaHQoKTsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0b3Ig
PSBhdHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsKKyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0b3Ig
PSBhdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsKKyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0b3Ig
PSBhdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKKyAgICBwcml2LT5kZXZpY2VQaXhlbFJhdGlvID0g
YXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOworICAgIHByaXYtPnVzZXJTY2FsYWJsZSA9IGFy
Z3VtZW50cy51c2VyU2NhbGFibGU7CisKKyAgICBpZiAobWFrZVZhbGlkKSB7CisgICAgICAgIHBy
aXYtPmlzVmFsaWQgPSBUUlVFOworICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qodmll
d3BvcnRBdHRyaWJ1dGVzKSwgInZhbGlkIik7CisgICAgfQorCisgICAgLy8gTm93IGxldCB0aGUg
YXBwbGljYXRpb24ga25vdyBpdCBpcyBzYWZlIHRvIHVzZSB0aGUgbmV3IHZhbHVlcy4KKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdl
ZCIsIHZpZXdwb3J0QXR0cmlidXRlcyk7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfcmVjb21wdXRlOgorICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzCisgKgorICogUmVjb21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0
dHJpYnV0ZXMgYW5kIGVtaXQgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZS1jaGFuZ2VkIHNpZ25hbC4g
CisgKiBUaGUgdmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCBh
bHNvIHdpbGwgYmUgaGFuZGxlZCB0byBvdmVycmlkZSAKKyAqIHRoZSBkZXZpY2Ugc2l6ZSwgYXZh
aWxhYmxlIHNpemUsIGRlc2t0b3Agd2lkdGgsIG9yIGRldmljZSBEUEkuCisgKgorICogU2luY2U6
IDEuMy44CisgKi8KK3ZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIHdlYmtp
dFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZSh2aWV3cG9ydEF0dHJpYnV0ZXMsIGZhbHNlKTsK
K30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRl
cy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MGMxYgotLS0gL2Rldi9udWxsCisrKyBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9y
Zz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8K
KworI2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXNfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNsdWRlIDx3
ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhv
YmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBXRUJLSVRf
VFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMpKQorI2Rl
ZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdfVFlQRV9D
SEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVT
LCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9JU19WSUVX
UE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUo
KG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBXRUJLSVRf
SVNfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUg
V0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVfSU5TVEFO
Q0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlOwor
CitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBwYXJlbnRf
aW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXNQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXNDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8qIFBhZGRp
bmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDAp
ICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAgICB2b2lk
ICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZl
ZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9BUEkgdm9p
ZAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmCmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IGExZDU1MGYuLmE1ZTMwMGQgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAgQ29weXJp
Z2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1v
dmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykgMjAwOSBC
b2JieSBQb3dlcnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRw
Lm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTQzLDcgKzQ0LDcgQEAKICNpbmNsdWRlICJB
WE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQWJzdHJhY3REYXRhYmFzZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkTGlzdEltcGwuaCIKLSNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgorI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudEd0ay5oIgogI2luY2x1ZGUgIkNs
aXBib2FyZFV0aWxpdGllc0d0ay5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50R3RrLmgi
CkBAIC03Myw2ICs3NCw3IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUg
Ikljb25EYXRhYmFzZS5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudEd0ay5oIgorI2luY2x1
ZGUgIk1lbW9yeUNhY2hlLmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0
cy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNhY2hlLmgi
CkBAIC0xNzMsNyArMTc1LDYgQEAgZW51bSB7CiAgICAgR0VPTE9DQVRJT05fUE9MSUNZX0RFQ0lT
SU9OX0NBTkNFTExFRCwKICAgICBPTkxPQURfRVZFTlQsCiAgICAgRlJBTUVfQ1JFQVRFRCwKLQog
ICAgIFNIT1VMRF9CRUdJTl9FRElUSU5HLAogICAgIFNIT1VMRF9FTkRfRURJVElORywKICAgICBT
SE9VTERfSU5TRVJUX05PREUsCkBAIC0xODUsNiArMTg2LDggQEAgZW51bSB7CiAgICAgRURJVElO
R19CRUdBTiwKICAgICBVU0VSX0NIQU5HRURfQ09OVEVOVFMsCiAgICAgRURJVElOR19FTkRFRCwK
KyAgICBWSUVXUE9SVF9BVFRSSUJVVEVTX1JFQ09NUFVURV9SRVFVRVNURUQsCisgICAgVklFV1BP
UlRfQVRUUklCVVRFU19BVkFJTEFCTEUsCiAKICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTE5OSw2
ICsyMDIsNyBAQCBlbnVtIHsKICAgICBQUk9QX0VESVRBQkxFLAogICAgIFBST1BfU0VUVElOR1Ms
CiAgICAgUFJPUF9XRUJfSU5TUEVDVE9SLAorICAgIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUywK
ICAgICBQUk9QX1dJTkRPV19GRUFUVVJFUywKICAgICBQUk9QX1RSQU5TUEFSRU5ULAogICAgIFBS
T1BfWk9PTV9MRVZFTCwKQEAgLTUwOCw2ICs1MTIsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2Vi
X3ZpZXdfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVl
KgogICAgIGNhc2UgUFJPUF9XRUJfSU5TUEVDVE9SOgogICAgICAgICBnX3ZhbHVlX3NldF9vYmpl
Y3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9yKHdlYlZpZXcpKTsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVURVM6CisgICAgICAgIGdf
dmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRy
aWJ1dGVzKHdlYlZpZXcpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBQUk9QX1dJTkRPV19G
RUFUVVJFUzoKICAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3Zp
ZXdfZ2V0X3dpbmRvd19mZWF0dXJlcyh3ZWJWaWV3KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM1
NSw2ICsxMzYyLDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVj
dCogb2JqZWN0KQogICAgIH0KIAogICAgIHByaXYtPndlYkluc3BlY3Rvci5jbGVhcigpOworICAg
IHByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5jbGVhcigpOwogICAgIHByaXYtPndlYldpbmRvd0Zl
YXR1cmVzLmNsZWFyKCk7CiAgICAgcHJpdi0+bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJp
di0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7CkBAIC0yNzE4LDYgKzI3MjYsNTUgQEAgc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3
Q2xhc3MpCiAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9O
RSwgMCk7CiAKICAgICAvKgorICAgICAqIFdlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0
ZXMtcmVjb21wdXRlLXJlcXVlc3RlZAorICAgICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGlj
aCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAgICogQHZpZXdwb3J0X2F0dHJpYnV0ZXM6IHRoZSAj
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdoaWNoIGhhcyB0aGUgdmlld3BvcnQgYXR0cmlidXRl
cy4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRl
cy1yZWNvbXB1dGUtcmVxdWVzdGVkIAorICAgICAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hl
biBhIHBhZ2Ugd2l0aCBhIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICogbG9hZHMgYW5kIHdoZW4g
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlIGlzIGNhbGxlZC4KKyAgICAgKgor
ICAgICAqIFRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdpbGwgaGF2ZSBkZXZpY2Ugc2l6
ZSwgYXZhaWxhYmxlIHNpemUsCisgICAgICogZGVza3RvcCB3aWR0aCwgYW5kIGRldmljZSBEUEkg
cHJlLWZpbGxlZCBieSB2YWx1ZXMgdGhhdCBtYWtlIHNlbnNlIAorICAgICAqIGZvciB0aGUgY3Vy
cmVudCBzY3JlZW4gYW5kIHdpZGdldCwgYnV0IHlvdSBjYW4gb3ZlcnJpZGUgdGhvc2UgdmFsdWVz
IAorICAgICAqIGlmIHlvdSBoYXZlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIChmb3IgaW5zdGFuY2Us
IGlmIHlvdSBtYWRlIHlvdXIKKyAgICAgKiB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJs
ZSB2aXNpYmxlIGFyZWEsIHlvdSBzaG91bGQgb3ZlcnJpZGUgCisgICAgICogdGhlIGF2YWlsYWJs
ZS13aWR0aCBhbmQgYXZhaWxhYmxlLWhlaWdodCBwcm9wZXJ0aWVzIHRvIHRoZSBhY3R1YWwgCisg
ICAgICogdmlzaWJsZSBhcmVhKS4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAq
LworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQVZBSUxB
QkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVz
dGVkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwK
KyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisgICAgLyoK
KyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQKKyAgICAg
KiBAd2ViX3ZpZXc6IHRoZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAq
IEB2aWV3cG9ydF9hdHRyaWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGlj
aCBoYXMgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktp
dFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgd2lsbCBiZSBlbWl0
dGVkIAorICAgICAqIGFmdGVyIHRoZSBlbWlzc2lvbiBvZiAjV2ViS2l0V2ViVmlldzo6dmlld3Bv
cnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIAorICAgICAqIGFuZCB0aGUgc3Vic2Vx
dWVudCB2aWV3cG9ydCBhdHRyaWJ1dGUgcmVjb21wdXRhdGlvbi4gQXQgdGhpcyBwb2ludCwgCisg
ICAgICogaWYgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXJlIHZhbGlkLCB0aGUgdmll
d3BvcnQgYXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlLgorICAgICAqIAorICAgICAqIFNpbmNlOiAx
LjMuOAorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJ
QlVURVNfQVZBSUxBQkxFXSA9IGdfc2lnbmFsX25ldygidmlld3BvcnQtYXR0cmlidXRlcy1jaGFu
Z2VkIiwKKyAgICAgICAgICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAg
ICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElP
TiksCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgIGdfY2Ns
b3N1cmVfbWFyc2hhbF9WT0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwK
KyAgICAgICAgICAgIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisgICAgLyoK
ICAgICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCiAgICAgICovCiAgICAg
d2ViVmlld0NsYXNzLT5jcmVhdGVfd2ViX3ZpZXcgPSB3ZWJraXRfd2ViX3ZpZXdfcmVhbF9jcmVh
dGVfd2ViX3ZpZXc7CkBAIC0yOTYxLDYgKzMwMTgsMjAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dl
Yl92aWV3X2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEQUJMRSkpOwogCiAgICAgLyoqCisgICAgKiBXZWJLaXRXZWJWaWV3OnZpZXdw
b3J0LWF0dHJpYnV0ZXM6CisgICAgKgorICAgICogVGhlIGFzc29jaWF0ZWQgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyBpbnN0YW5jZS4KKyAgICAqCisgICAgKiBTaW5jZTogMS4zLjgKKyAgICAq
LworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1Bf
VklFV1BPUlRfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19vYmplY3QoInZpZXdwb3J0LWF0dHJpYnV0ZXMiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJWaWV3cG9ydCBB
dHRyaWJ1dGVzIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF8oIlRoZSBhc3NvY2lhdGVkIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBp
bnN0YW5jZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1f
UkVBREFCTEUpKTsKKworICAgIC8qKgogICAgICogV2ViS2l0V2ViVmlldzp3aW5kb3ctZmVhdHVy
ZXM6CiAgICAgKgogICAgICogQW4gYXNzb2NpYXRlZCBXZWJLaXRXZWJXaW5kb3dGZWF0dXJlcyBp
bnN0YW5jZS4KQEAgLTMzODcsNiArMzQ1OCwxMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3Zp
ZXdfaW5pdChXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHByaXYtPndlYkluc3BlY3RvciA9
IGFkb3B0UGxhdGZvcm1SZWYoV0VCS0lUX1dFQl9JTlNQRUNUT1IoZ19vYmplY3RfbmV3KFdFQktJ
VF9UWVBFX1dFQl9JTlNQRUNUT1IsIE5VTEwpKSk7CiAgICAgd2Via2l0X3dlYl9pbnNwZWN0b3Jf
c2V0X2luc3BlY3Rvcl9jbGllbnQocHJpdi0+d2ViSW5zcGVjdG9yLmdldCgpLCBwcml2LT5jb3Jl
UGFnZSk7CiAKKyAgICAvLyBBbmQgb3VyIFZpZXdwb3J0QXR0cmlidXRlcyBmcmllbmQuCisgICAg
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzID0gYWRvcHRQbGF0Zm9ybVJlZihXRUJLSVRfVklFV1BP
UlRfQVRUUklCVVRFUyhnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRF
UywgTlVMTCkpKTsKKyAgICBwcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPndlYlZpZXcg
PSB3ZWJWaWV3OworCiAgICAgLy8gVGhlIHNtYXJ0IHBvaW50ZXIgd2lsbCBjYWxsIGdfb2JqZWN0
X3JlZl9zaW5rIG9uIHRoZXNlIGFkanVzdG1lbnRzLgogICAgIHByaXYtPmhvcml6b250YWxBZGp1
c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAs
IDAuMCwgMC4wLCAwLjApKTsKICAgICBwcml2LT52ZXJ0aWNhbEFkanVzdG1lbnQgPSBHVEtfQURK
VVNUTUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkp
OwpAQCAtMzUyNiw2ICszNjAxLDI5IEBAIFdlYktpdFdlYkluc3BlY3Rvciogd2Via2l0X3dlYl92
aWV3X2dldF9pbnNwZWN0b3IoV2ViS2l0V2ViVmlldyogd2ViVmlldykKICAgICByZXR1cm4gd2Vi
Vmlldy0+cHJpdi0+d2ViSW5zcGVjdG9yLmdldCgpOwogfQogCisvKioKKyAqIHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlczoKKyAqIEB3ZWJWaWV3OiBhICNXZWJLaXRXZWJW
aWV3CisgKgorICogT2J0YWlucyB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBhc3NvY2lh
dGVkIHdpdGggdGhlCisgKiAjV2ViS2l0V2ViVmlldy4gRXZlcnkgI1dlYktpdFdlYlZpZXcgb2Jq
ZWN0IGhhcyBhCisgKiAjV2ViS2l0V2ViVmlld3BvckF0dHJpYnV0ZXMgb2JqZWN0IGF0dGFjaGVk
IHRvIGl0IGFzIHNvb24gYXMgaXQgaXMKKyAqIGNyZWF0ZWQsIHNvIHRoaXMgZnVuY3Rpb24gd2ls
bCBvbmx5IHJldHVybiBOVUxMIGlmIHRoZSBhcmd1bWVudCBpcworICogbm90IGEgdmFsaWQgI1dl
YktpdFdlYlZpZXcuIERvIG5vdGUgaG93ZXZlciB0aGF0IHRoZSB2aWV3cG9ydAorICogYXR0cmli
dXRlcyBvYmplY3Qgb25seSBjb250YWlucyB2YWxpZCBpbmZvcm1hdGlvbiB3aGVuIHRoZSBjdXJy
ZW50CisgKiBwYWdlIGhhcyBhIHZpZXdwb3J0IG1ldGEgdGFnLiBZb3UgY2FuIGNoZWNrIHdoZXRo
ZXIgdGhlIGRhdGEgc2hvdWxkCisgKiBiZSB1c2VkIGJ5IGNoZWNraW5nIHRoZSAjV2ViS2l0Vmll
d3BvcnQ6dmFsaWQgcHJvcGVydHkuCisgKgorICogUmV0dXJuIHZhbHVlOiAodHJhbnNmZXIgbm9u
ZSk6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICoKKyAqIFNpbmNl
OiAxLjMuOAorICovCitXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHdlYmtpdF93ZWJfdmlld19n
ZXRfdmlld3BvcnRfYXR0cmlidXRlcyhXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQoreworICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKFdFQktJVF9JU19XRUJfVklFVyh3ZWJWaWV3KSwgMCk7CisgICAg
cmV0dXJuIHdlYlZpZXctPnByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5nZXQoKTsKK30KKwogLy8g
aW50ZXJuYWwKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19zZXRfd2luZG93X2ZlYXR1cmVz
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzKiB3ZWJXaW5k
b3dGZWF0dXJlcykKIHsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZp
ZXcuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAppbmRleCA1MTRkODNjLi4z
NGM0ZDVlIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKKysr
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCkBAIC00MjcsNiArNDI3LDkgQEAg
d2Via2l0X2dldF9jYWNoZV9tb2RlbCAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQpOwog
V0VCS0lUX0FQSSBXZWJLaXRET01Eb2N1bWVudCAqCiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2RvbV9k
b2N1bWVudCAgICAgICAgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOwog
CitXRUJLSVRfQVBJIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyoKK3dlYmtpdF93ZWJfdmlld19n
ZXRfdmlld3BvcnRfYXR0cmlidXRlcyAgICAgICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2Vi
Vmlldyk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMv
Q2hhbmdlTG9nIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCmluZGV4IGU2OTM0ZDUuLjdmYWQ0OTAg
MTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZworKysgYi9XZWJLaXRUb29scy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAxMC0xMi0wOCAgSm9vbmUgSHVyICA8am9vbmVAa2xk
cC5vcmc+CisKKyAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICBbR1RLXSBTdXBwb3J0IGZvciB2aWV3cG9ydCBtZXRhIHRhZworICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ1NDQzCisKKyAgICAgICAgIEFkZCBzdXBw
b3J0IGZvciB0ZXN0aW5nIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIGZvciBXZWJLaXRHdGsuCisK
KyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwOgorICAg
ICAgICAgKGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIEphdmFTY3Jp
cHQgQVBJIHRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAgICAgICAg
IChMYXlvdXRUZXN0Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgICogRHVt
cFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgICogRHVtcFJlbmRl
clRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogQWRkZWQgdGhpcyBmdW5j
dGlvbiB0byB0ZXN0IHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLgorICAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW06CisgICAgICAgICAoTGF5b3V0
VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAg
ICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0
dG8uCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JW
aWV3cG9ydCk6IERpdHRvLgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0
Q29udHJvbGxlcld4LmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxlcjo6Y29uZmln
dXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisKIDIwMTAtMTItMDYgIFNhbSBXZWluaWcgIDxz
YW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5j
cHAKaW5kZXggYTIyNTc5YS4uYWUxNTRkZCAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJl
bmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw2ICsxNDEsMjIgQEAgc3Rh
dGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29u
dGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0aW9uRm9yVmlld3Bv
cnQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJl
ZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1
bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIGlmIChhcmd1bWVudENvdW50
IDwgMikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWVNYWtlVW5kZWZpbmVkKGNvbnRleHQpOworCisg
ICAgZG91YmxlIGF2YWlsYWJsZVdpZHRoID0gSlNWYWx1ZVRvTnVtYmVyKGNvbnRleHQsIGFyZ3Vt
ZW50c1swXSwgZXhjZXB0aW9uKTsKKyAgICBBU1NFUlQoISpleGNlcHRpb24pOworICAgIGRvdWJs
ZSBhdmFpbGFibGVIZWlnaHQgPSBKU1ZhbHVlVG9OdW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzFd
LCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlvbik7CisKKyAgICBMYXlvdXRUZXN0
Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVy
Kj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKKyAgICBjb250cm9sbGVyLT5jb25m
aWd1cmF0aW9uRm9yVmlld3BvcnQoc3RhdGljX2Nhc3Q8aW50PihhdmFpbGFibGVXaWR0aCksIHN0
YXRpY19jYXN0PGludD4oYXZhaWxhYmxlSGVpZ2h0KSk7CisgICAKKyAgICByZXR1cm4gSlNWYWx1
ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRh
YmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBm
dW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNv
bnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsKICAg
ICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0YXRpY19jYXN0PExheW91dFRl
c3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNPYmplY3QpKTsKQEAgLTE5MTQs
NiArMTkzMSw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRlc3RDb250cm9sbGVyOjpzdGF0
aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJkdW1wQmFja0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tG
b3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJv
cGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBDaGlsZEZyYW1lU2Ny
b2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFjaywga0pT
UHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0
ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNB
c1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1wQ29uZmlndXJhdGlvbkZvclZp
ZXdwb3J0IiwgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCwga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7
ICJkdW1wRE9NQXNXZWJBcmNoaXZlIiwgZHVtcERPTUFzV2ViQXJjaGl2ZUNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCiAgICAgICAgIHsgImR1bXBEYXRhYmFzZUNhbGxiYWNrcyIsIGR1bXBEYXRhYmFzZUNhbGxi
YWNrc0NhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBFZGl0aW5nQ2FsbGJhY2tzIiwg
ZHVtcEVkaXRpbmdDYWxsYmFja3NDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApkaWZmIC0tZ2l0IGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuaCBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKaW5kZXggMmU5Yzg1Ni4uYjE1
NjNjMSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENv
bnRyb2xsZXIuaAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5oCkBAIC0yODUsNiArMjg1LDggQEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNTcGVs
bGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0aCk7CiAKKyAgICB2b2lkIGNvbmZpZ3VyYXRp
b25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpOwor
CiAgICAgLy8gVGhlIGZvbGxvd2luZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5
IGJlIG1vdmVkIHRvIHBsYXRmb3JtLXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lk
ZSBvZiBEUlQgb25jZSB0aGV5IGV4aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0RhdGFM
b2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7CmRp
ZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRy
b2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RD
b250cm9sbGVyR3RrLmNwcAppbmRleCA4Mzg3NGY0Li45N2FhNTQ0IDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisr
KyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0
ay5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWls
LmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
ICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0Lmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQdHIuaD4KIAogZXh0ZXJuICJDIiB7CiB2
b2lkIHdlYmtpdF9hcHBsaWNhdGlvbl9jYWNoZV9zZXRfbWF4aW11bV9zaXplKHVuc2lnbmVkIGxv
bmcgbG9uZyBzaXplKTsKQEAgLTgxOSwzICs4MjEsMTAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50LCBpbnQpCiAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCB0aGlzLgogICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWls
YWJsZUhlaWdodCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gd2Via2l0X3dlYl9m
cmFtZV9nZXRfd2ViX3ZpZXcobWFpbkZyYW1lKTsKKyAgICBBU1NFUlQod2ViVmlldyk7CisgICAg
RHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KHdl
YlZpZXcsIGF2YWlsYWJsZVdpZHRoLCBhdmFpbGFibGVIZWlnaHQpOworfQpkaWZmIC0tZ2l0IGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1t
IGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFj
Lm1tCmluZGV4IGJlM2ViMDkuLmU0YWFlMDQgMTAwNjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQorKysgYi9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENvbnRyb2xsZXJNYWMubW0KQEAgLTk4OSwz
ICs5ODksNyBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihp
bnQgZnJvbSwgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gW21haW5GcmFtZSBoYXNTcGVsbGlu
Z01hcmtlcjpmcm9tIGxlbmd0aDpsZW5ndGhdOwogfQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6Y29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCBhdmFpbGFibGVXaWR0aCwgaW50IGF2YWls
YWJsZUhlaWdodCkKK3sKKworfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0xheW91dFRlc3RDb250cm9sbGVyV2luLmNwcCBiL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAKaW5kZXggYjFhNGVmNC4uY2Fm
NWFmOSAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRl
c3RDb250cm9sbGVyV2luLmNwcAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4v
TGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCkBAIC0xNDE1LDMgKzE0MTUsOCBAQCBib29sIExh
eW91dFRlc3RDb250cm9sbGVyOjpoYXNTcGVsbGluZ01hcmtlcihpbnQgZnJvbSwgaW50IGxlbmd0
aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIHJldHVybiByZXQ7CiB9CisKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxl
V2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVudCB0
aGlzLgorfQpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlv
dXRUZXN0Q29udHJvbGxlcld4LmNwcAppbmRleCAxMjBhMWI2Li40MWU1MjFmIDEwMDY0NAotLS0g
YS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxlcld4LmNw
cAorKysgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93eC9MYXlvdXRUZXN0Q29udHJvbGxl
cld4LmNwcApAQCAtNTExLDYgKzUxMSwxMSBAQCBib29sIExheW91dFRlc3RDb250cm9sbGVyOjpo
YXNTcGVsbGluZ01hcmtlcihpbnQsIGludCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQg
TGF5b3V0VGVzdENvbnRyb2xsZXI6OmNvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxh
YmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgLy8gRklYTUU6IEltcGxlbWVu
dAorfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gTGF5b3V0VGVzdENvbnRyb2xsZXI6OnBh
Z2VQcm9wZXJ0eShjb25zdCBjaGFyKiBwcm9wZXJ0eU5hbWUsIGludCBwYWdlTnVtYmVyKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75919</attachid>
            <date>2010-12-08 10:07:40 -0800</date>
            <delta_ts>2010-12-09 03:48:39 -0800</delta_ts>
            <desc>Proposed Patch14</desc>
            <filename>viewport14.patch</filename>
            <type>text/plain</type>
            <size>56413</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmNDQ4NmYxLi44MGUwYTZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTIt
MDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEyLTA4ICBQaGlsaXBwZSBOb3JtYW5kICA8
cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9u
aGEgU2lsdmEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCmluZGV4IGExMmI1ZjMuLmI4MTZmNzAg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVkCkBAIC01NDg5LDcgKzU0ODksOCBAQCBmdWxsc2Ny
ZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8yZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5odG1s
CiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3VwcG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQvdmll
d3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRMNSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkgdG8g
dGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJr
cy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCmluZGV4IDc0NTYyNTguLmU4ZDI1OWMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTAt
MTItMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1l
dGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00
NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVyIHRo
ZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVzZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBjb250YWlucyB0aGUgdmlld3BvcnQgc2l6ZSwgaW5p
dGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisgICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB3
aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNjYWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmlld3Bv
cnQuCisgICAgICAgIAorICAgICAgICBUaGlzIGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkgU2Fm
YXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0aGUg
dmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIgdG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFy
eSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVsb3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkv
ZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9h
cnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmggd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcC4g
CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6IEFk
ZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVudHMg
aXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6
CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBDb25maWd1cmF0aW9uRm9y
Vmlld3BvcnQpOiBBZGRlZCB0aGlzIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlIHZpZXdwb3J0IGF0
dHJpYnV0ZXMgd2l0aCB0aGUgZ2l2ZW4gYXZhaWxhYmxlV2lkdGggYW5kIGF2YWlsYWJsZUhlaWdo
dC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaDoK
KyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IAorICAg
ICAgICAoV2ViS2l0Ojpwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXApOiBJbnZhbGlkYXRlIHRoZSB2
aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAgICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAg
KiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgorICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRl
Lmg6IEFkZGVkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZSBhcyBhIHByaXZhdGUg
ZnVuY3Rpb24uCisgICAgICAgICogd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHA6
IEFkZGVkLgorICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdCk6
CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KToKKyAgICAgICAgKHdl
YmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRf
dmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHkpOgorICAgICAgICAod2Via2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUmVjb21wdXRlKTogUmVjb21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0
dHJpYnV0ZXMgYW5kIGVtaXQgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwu
CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUpOiBhIHB1Ymxp
YyBBUEkgZm9yIGNhbGxpbmcgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlLgorICAg
ICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaDogQWRkZWQuCisgICAgICAg
ICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dl
dF9wcm9wZXJ0eSk6IEFkZGVkIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUy4KKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19kaXNwb3NlKTogRGVhbGxvY2F0ZSB0aGUgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzIGluc3RhbmNlLgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBB
ZGRlZCB0aGUgdmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIGFuZCB2aWV3
cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFscy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmll
d19pbml0KTogU2V0IHRoZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisgICAg
ICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMpOiBBZGRlZCBhIGdl
dHRlciB0byBvYnRhaW4gdGhlIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpbnN0YW5jZSBoZWxk
IGJ5IHRoZSBnaXZlbiBXZWJLaXRXZWJWaWV3LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2
aWV3Lmg6CisKIDIwMTAtMTItMDggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAgPGd1c3Rhdm8ubm9y
b25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWGFuIExvcGV6Lgpk
aWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdC9ndGsvR05VbWFr
ZWZpbGUuYW0KaW5kZXggYTg0NmY3Zi4uYWJhZGNmOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9H
TlVtYWtlZmlsZS5hbQorKysgYi9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMTksNiAr
MTE5LDcgQEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dl
YmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuaCBcCkBAIC0xODIsNiArMTgzLDcgQEAgd2Via2l0Z3Rr
X3NvdXJjZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0
YXR0cmlidXRlcy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJk
bGlzdC5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwIFwK
IAlXZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDE5MGFlOWIuLjkxMGNkNTQg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNw
cAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAg
LTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGll
bnRHdGsuaCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNp
bmNsdWRlICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKICNpbmNsdWRlICJFbGVtZW50Lmgi
CkBAIC02MTYsNiArNjE3LDEyIEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmls
ZXMoY29uc3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJDCiAgICAgY2hvb3Nl
ci0+aWNvbkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAK
K3ZvaWQgQ2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBW
aWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdAoreworICAgIC8vIFJlY29tcHV0ZSB0
aGUgdmlld3BvcnQgYXR0cmlidXRlcyBtYWtpbmcgaXQgdmFsaWQuCisgICAgd2Via2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzUmVjb21wdXRlKHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmli
dXRlcyhtX3dlYlZpZXcpKTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCA4MjUyZjA2Li5iNGExYTM3IDEwMDY0NAot
LS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dl
YktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTExMCw2ICsxMTAs
OCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRp
cChjb25zdCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBj
b25zdCBXVEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IDEwNjk0ZDAuLmMyNzk2OTkgMTAw
NjQ0Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmNwcAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3Vw
cG9ydEd0ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM3NywzICszNzgsMTQgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6
OnJlc2V0T3JpZ2luQWNjZXNzV2hpdGVMaXN0cygpCiAgICAgU2VjdXJpdHlPcmlnaW46OnJlc2V0
T3JpZ2luQWNjZXNzV2hpdGVsaXN0cygpOwogfQogCisvLyBGb3IgdGVzdGluZyBmYXN0L3ZpZXdw
b3J0Lgordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmR1bXBDb25maWd1cmF0aW9uRm9y
Vmlld3BvcnQoV2ViS2l0V2ViVmlldyogd2ViVmlldywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2lu
dCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VC
X1ZJRVcod2ViVmlldykpOworCisgICAgVmlld3BvcnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2Vi
Vmlldy0+cHJpdi0+Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFy
Z3VtZW50cygpOworICAgIC8vIGRlc2t0b3BXaWR0aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAs
IGRldmljZUhlaWdodCA9IDQ4MCwgZGV2aWNlRFBJID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1
dGVzIGF0dHJzID0gY29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIw
LCA0ODAsIDE2MCwgSW50U2l6ZShhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisK
KyAgICBmcHJpbnRmKHN0ZG91dCwgInZpZXdwb3J0IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBs
aW1pdHMgWyVmLCAlZl1cbiIsIGF0dHJzLmxheW91dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0
U2l6ZS5oZWlnaHQoKSwgYXR0cnMuaW5pdGlhbFNjYWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0
dHJzLm1heGltdW1TY2FsZSk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaAppbmRleCBlZjU3YjE0Li43ZTljZGIzIDEwMDY0
NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0
R3RrLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogCiAjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgog
I2luY2x1ZGUgPGdsaWIuaD4KQEAgLTQwLDYgKzQxLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2
b2lkIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hhaW4oYm9vbCk7CiAgICAgc3RhdGljIGJvb2wg
bGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpOwogICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG5vZGVz
RnJvbVJlY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIGludCB4LCBp
bnQgeSwgdW5zaWduZWQgdG9wLCB1bnNpZ25lZCByaWdodCwgdW5zaWduZWQgYm90dG9tLCB1bnNp
Z25lZCBsZWZ0LCBib29sIGlnbm9yZUNsaXBwaW5nKTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wQ29u
ZmlndXJhdGlvbkZvclZpZXdwb3J0KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxh
YmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0KTsKIAogICAgIC8vIEZJWE1FOiBNb3ZlIHRo
ZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0aGVpciBBUEkgaGFzIGJlZW4gZGlzY3Vzc2Vk
LgogICAgIHN0YXRpYyBHU0xpc3QqIGdldEZyYW1lQ2hpbGRyZW4oV2ViS2l0V2ViRnJhbWUqIGZy
YW1lKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJD
bGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKaW5kZXggMWRlMzdmNC4uY2Y3MmJiNCAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKQEAgLTEyOTIsNiArMTI5Miwx
MiBAQCBzdGF0aWMgdm9pZCBwb3N0Q29tbWl0RnJhbWVWaWV3U2V0dXAoV2ViS2l0V2ViRnJhbWUg
KmZyYW1lLCBGcmFtZVZpZXcgKnZpZXcsIGJvbwogICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBw
cml2ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklWQVRFKGNvbnRhaW5pbmdXaW5kb3cpOwogICAg
IHZpZXctPnNldEd0a0FkanVzdG1lbnRzKHByaXYtPmhvcml6b250YWxBZGp1c3RtZW50LmdldCgp
LCBwcml2LT52ZXJ0aWNhbEFkanVzdG1lbnQuZ2V0KCksIHJlc2V0VmFsdWVzKTsKIAorICAgIC8v
IEludmFsaWRhdGUgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgLSB0aGV5IHdpbGwgb25seSBiZSB2
YWxpZAorICAgIC8vIGFnYWluIGlmIHRoZSBwYWdlIHdlJ3JlIGJlZ2lubmluZyB0byBsb2FkIG5v
dyBoYXMgYW4KKyAgICAvLyBhcHByb3ByaWF0ZSB2aWV3cG9ydCBtZXRhIHRhZy4KKyAgICBjb250
YWluaW5nV2luZG93LT5wcml2LT52aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQgPSBG
QUxTRTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1QoY29udGFpbmluZ1dpbmRvdy0+cHJp
di0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKSwgInZhbGlkIik7CisKICAgICBpZiAocHJpdi0+
Y3VycmVudE1lbnUpIHsKICAgICAgICAgUGxhdGZvcm1SZWZQdHI8R3RrTWVudT4gbWVudShwcml2
LT5jdXJyZW50TWVudSk7CiAgICAgICAgIHByaXYtPmN1cnJlbnRNZW51LmNsZWFyKCk7CmRpZmYg
LS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdC5oCmluZGV4IGZjNzFjMmMuLjI0MjhmNjIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICsz
MCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJr
aXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJp
YnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1
ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJz
ZXR0aW5ncy5oPgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5o
IGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oCmluZGV4IGIwNmEzYmYuLjM5OWNi
NGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9X
ZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVzLmgKQEAgLTkyLDYgKzkyLDkgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRDbGFzcyBXZWJLaXRIaXRUZXN0UmVzdWx0Q2xh
c3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2VvbG9jYXRpb25Qb2xpY3lEZWNpc2lvbiBXZWJL
aXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uOwogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xv
Y2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9u
Q2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzOwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmli
dXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzOworCiBHX0VORF9ERUNMUwog
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBi
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaAppbmRleCAwZjhkNzAwLi5hMTI1N2Mx
IDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2Vi
S2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRl
c3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNp
bmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8d2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJj
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgpAQCAtMTM3LDYgKzEzOCw3
IEBAIGV4dGVybiAiQyIgewogICAgICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlUGFnZTsKICAgICAg
ICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2ViU2V0dGluZ3M+IHdlYlNldHRpbmdzOwogICAgICAg
ICBQbGF0Zm9ybVJlZlB0cjxXZWJLaXRXZWJJbnNwZWN0b3I+IHdlYkluc3BlY3RvcjsKKyAgICAg
ICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzPiB2aWV3cG9ydEF0dHJp
YnV0ZXM7CiAgICAgICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzPiB3
ZWJXaW5kb3dGZWF0dXJlczsKIAogICAgICAgICBXZWJLaXRXZWJGcmFtZSogbWFpbkZyYW1lOwpA
QCAtMjE1LDYgKzIxNywyNSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2Jvb2xlYW4gZGlzcG9z
ZWQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0
ZSB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAgIGludCBkZXZpY2VX
aWR0aDsKKyAgICAgICAgaW50IGRldmljZUhlaWdodDsKKyAgICAgICAgaW50IGF2YWlsYWJsZVdp
ZHRoOworICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICBpbnQgZGVza3RvcFdp
ZHRoOworICAgICAgICBpbnQgZGV2aWNlRFBJOworCisgICAgICAgIGludCB3aWR0aDsKKyAgICAg
ICAgaW50IGhlaWdodDsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlRmFjdG9yOworICAgICAg
ICBmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1heGltdW1TY2FsZUZh
Y3RvcjsKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAgICAgZ2Jvb2xlYW4g
dXNlclNjYWxhYmxlOworICAgICAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAgIH07CisKICAgICBX
VEY6OlN0cmluZwogICAgIHdlYmtpdFVzZXJBZ2VudCgpOwogCkBAIC0zNzcsNiArMzk4LDggQEAg
ZXh0ZXJuICJDIiB7CiAKICAgICB2b2lkIHdlYmtpdFdlYlZpZXdFbnRlckZ1bGxzY3JlZW4oV2Vi
S2l0V2ViVmlldyogd2ViVmlldywgV2ViQ29yZTo6Tm9kZSogbm9kZSk7CiAgICAgdm9pZCB3ZWJr
aXRXZWJWaWV3RXhpdEZ1bGxzY3JlZW4oV2ViS2l0V2ViVmlldyogd2ViVmlldyk7CisKKyAgICB2
b2lkIHdlYmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0ZXMqKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3Bv
cnRhdHRyaWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2Nl
YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRh
dHRyaWJ1dGVzLmNwcApAQCAtMCwwICsxLDU3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MCBKb29uZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxh
Ym9yYSBMdGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR2aWV3cG9ydGF0
dHJpYnV0ZXMuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZh
dGUuaCIKKworI2luY2x1ZGUgPGdsaWIvZ2kxOG4tbGliLmg+CisKKy8qKgorICogU0VDVElPTjp3
ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMKKyAqIEBzaG9ydF9kZXNjcmlwdGlvbjogUmVwcmVzZW50
cyB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBvZiBhIHdlYiBwYWdlCisgKiBAc2VlX2Fsc286ICNX
ZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQKKyAq
IEBzZWVfYWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZAor
ICoKKyAqICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgb2ZmZXJzIHRoZSB2aWV3cG9ydCBwcm9w
ZXJ0aWVzIHRvIHVzZXIgYWdlbnRzIHRvCisgKiBjb250cm9sIHRoZSB2aWV3cG9ydCBsYXlvdXQu
IEl0IGNvbnRhaW5zIHRoZSB2aWV3cG9ydCBzaXplLCBpbml0aWFsIHNjYWxlIHdpdGggbGltaXRz
LAorICogYW5kIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgYSB1c2VyIGlzIGFibGUgdG8gc2Nh
bGUgdGhlIGNvbnRlbnRzIGluIHRoZSB2aWV3cG9ydC4KKyAqIFRoaXMgbWFrZXMgYSB3ZWIgcGFn
ZSBmaXQgdGhlIGRldmljZSBzY3JlZW4uCisgKgorICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3
cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aXRoICNXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqIHdoZW4gdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYXJl
IHVwZGF0ZWQgaW4gdGhlIGNhc2Ugb2YgbG9hZGluZyB3ZWIgcGFnZXMgY29udGFpbgorICogdGhl
IHZpZXdwb3J0IHByb3BlcnRpZXMgYW5kIGNhbGxpbmcgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfcmVjb21wdXRlLgorICoKKyAqIElmIHRoZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUs
IGRlc2t0b3Agd2lkdGgsIG9yIGRldmljZSBEUEkgbmVlZHMgdG8gYmUgY2hhbmdlZCBkdWUgdG8g
CisgKiBhIGNvbnNlcXVlbmNlIG9mIGFuIGV4cGxpY2l0IGJyb3dzZXIgcmVxdWVzdCAoY2F1c2Vk
IGJ5IHNjcmVlbiByb3RhdGlvbiwgcmVzaXppbmcsIG9yIHNpbWlsYXIgcmVhc29ucyksCisgKiBZ
b3Ugc2hvdWxkIGNhbGwgI3dlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3JlY29tcHV0ZSB0byBy
ZWNvbXB1dGUgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgYW5kIAorICogb3ZlcnJpZGUgdGhvc2Ug
dmFsdWVzIGluIHRoZSBoYW5kbGVyIG9mICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1
dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQgc2lnbmFsLgorICoKKyAqIEZvciBtb3JlIGluZm9ybWF0
aW9uIG9uIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzLCByZWZlciB0byB0aGUgU2FmYXJpIHJlZmVy
ZW5jZSBsaWJyYXJ5IGF0CisgKiBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9zYWZhcmkvbGli
cmFyeS9kb2N1bWVudGF0aW9uL2FwcGxlYXBwbGljYXRpb25zL3JlZmVyZW5jZS9zYWZhcmlodG1s
cmVmL2FydGljbGVzL21ldGF0YWdzLmh0bWwKKyAqCisgKiA8aW5mb3JtYWxleGFtcGxlPjxwcm9n
cmFtbGlzdGluZz4KKyAqIC88IS0tIC0tPiogQ29ubmVjdCB0byB0aGUgdmlld3BvcnQtYXR0cmli
dXRlcy1jaGFuZ2VzIHNpZ25hbCAqPCEtLSAtLT4vCisgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
ZXMqIGF0dHJpYnV0ZXMgPSB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMg
KHdlYl92aWV3KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAidmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfcmVjb21w
dXRlX2NiKSwgd2luZG93KTsKKyAqIGdfc2lnbmFsX2Nvbm5lY3QgKHdlYl92aWV3LCAidmlld3Bv
cnQtYXR0cmlidXRlcy1jaGFuZ2VkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfY2hhbmdlZF9jYiks
IHdpbmRvdyk7CisgKiBnX3NpZ25hbF9jb25uZWN0IChhdHRyaWJ1dGVzLCAibm90aWZ5Ojp2YWxp
ZCIsIEdfQ0FMTEJBQ0sgKHZpZXdwb3J0X3ZhbGlkX2NoYW5nZWRfY2IpLCB3ZWJfdmlldyk7Cisg
KgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRl
LXJlcXVlc3RlZCBzaWduYWwgdG8gb3ZlcnJpZGUgdGhlIGRldmljZSB3aWR0aCAqPCEtLSAtLT4v
CisgKiBzdGF0aWMgdm9pZAorICogdmlld3BvcnRfcmVjb21wdXRlX2NiIChXZWJLaXRXZWJWaWV3
KiB3ZWJfdmlldywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzLCBHdGtXaWRn
ZXQqIHdpbmRvdykKKyAqIHsKKyAqICAgICBpbnQgb3ZlcnJpZGVfYXZhaWxhYmxlX3dpZHRoID0g
NDgwOworICogICAgIGdfb2JqZWN0X3NldCAoR19PQkpFQ1QoYXR0cmlidXRlcyksICJhdmFpbGFi
bGUtd2lkdGgiLCBvdmVycmlkZV9hdmFpbGFibGVfd2lkdGgsIE5VTEwpOworICogfQorICoKKyAq
IC88IS0tIC0tPiogSGFuZGxlIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFs
IHRvIHJlY29tcHV0ZSB0aGUgaW5pdGlhbCBzY2FsZSBmYWN0b3IgKjwhLS0gLS0+LworICogc3Rh
dGljIHZvaWQgCisgKiB2aWV3cG9ydF9jaGFuZ2VkX2NiIChXZWJLaXRXZWJWaWV3KiB3ZWJfdmll
dywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVzLCBncG9pbnRlciBkYXRhKQor
ICogeworICogICAgIGdmbG9hdCBpbml0aWFsU2NhbGU7CisgKiAgICAgZ19vYmplY3RfZ2V0IChH
X09CSkVDVCAoYXRyaWJ1dGVzKSwgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwgJmluaXRpYWxTY2Fs
ZSwgTlVMTCk7CisgKiAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29tX2xldmVsICh3ZWJfdmll
dywgaW5pdGlhbFNjYWxlKTsKKyAqIH0KKyAqIAorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIG5v
dGlmeTo6dmFsaWQgc2lnbmFsIHRvIGluaXRpYWxpemUgdGhlIHpvb20gbGV2ZWwgKjwhLS0gLS0+
LworICogc3RhdGljIHZvaWQKKyAqIHZpZXdwb3J0X3ZhbGlkX2NoYW5nZWRfY2IgKFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRlcywgR1BhcmFtU3BlYyogcHNwZWMsIFdlYktpdFdl
YlZpZXcqIHdlYl92aWV3KQorICogeworICogICAgIGdib29sZWFuIGlzX3ZhbGlkOworICogICAg
IGdfb2JqZWN0X2dldCAoYXR0cmlidXRlcywgInZhbGlkIiwgJmlzX3ZhbGlkLCBOVUxMKTsKKyAq
ICAgICBpZiAoIWlzX3ZhbGlkKSAKKyAqICAgICAgICAgd2Via2l0X3dlYl92aWV3X3NldF96b29t
X2xldmVsICh3ZWJfdmlldywgMS4wKTsKKyAqIH0KKyAqIDwvcHJvZ3JhbWxpc3Rpbmc+PC9pbmZv
cm1hbGV4YW1wbGU+CisgKi8KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX0RFVklDRV9X
SURUSCwKKyAgICBQUk9QX0RFVklDRV9IRUlHSFQsCisgICAgUFJPUF9BVkFJTEFCTEVfV0lEVEgs
CisgICAgUFJPUF9BVkFJTEFCTEVfSEVJR0hULAorICAgIFBST1BfREVTS1RPUF9XSURUSCwKKyAg
ICBQUk9QX0RFVklDRV9EUEksCisgICAgUFJPUF9XSURUSCwKKyAgICBQUk9QX0hFSUdIVCwKKyAg
ICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9SLAorICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNU
T1IsCisgICAgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX0RFVklDRV9QSVhF
TF9SQVRJTywKKyAgICBQUk9QX1VTRVJfU0NBTEFCTEUsCisgICAgUFJPUF9WQUxJRAorfTsKKwor
R19ERUZJTkVfVFlQRShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMsIHdlYmtpdF92aWV3cG9ydF9h
dHRyaWJ1dGVzLCBHX1RZUEVfT0JKRUNUKTsKKworI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRU
UklCVVRFU19HRVRfUFJJVkFURShvYmopICAgIChHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUo
KG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlc1ByaXZhdGUpKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19nZXRfcHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlELCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpOworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVy
dHlJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKTsKKworc3Rh
dGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdChXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXNDbGFzcyoga2NsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogZ29iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2NsYXNzKTsKKyAgICBnb2JqZWN0Q2xhc3MtPmdldF9w
cm9wZXJ0eSA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eTsKKyAgICBn
b2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX3Nl
dF9wcm9wZXJ0eTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOmRl
dmljZS13aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB0aGUgc2NyZWVuLiBUaGlz
IHZhbHVlIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVkIGR1cmlu
ZyBhIHZpZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICogY2FuIGJl
IG92ZXJyaWRkZW4gYnkgdGhlIGhhbmRsZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3
cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBu
b3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0RFVklDRV9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
ZGV2aWNlLXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRl
dmljZSBXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhl
IHdpZHRoIG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhJTlQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLWhlaWdodDoKKyAgICAgKgorICAg
ICAqIFRoZSBoZWlnaHQgb2YgdGhlIHNjcmVlbi4gVGhpcyB2YWx1ZSBpcyBhbHdheXMgYXV0b21h
dGljYWxseQorICAgICAqIHByZS1jb21wdXRlZCBkdXJpbmcgYSB2aWV3cG9ydCBhdHRyaWJ1dGVz
IHJlY29tcHV0YXRpb24sIGFuZAorICAgICAqIGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIGhhbmRs
ZXIgb2YKKyAgICAgKiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0
ZS1yZXF1ZXN0ZWQuIFlvdQorICAgICAqIHNob3VsZCBub3QgZG8gdGhhdCB1bmxlc3MgeW91IGhh
dmUgYSB2ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAg
ICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFVklDRV9IRUlHSFQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1oZWlnaHQiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNlIEhlaWdodCIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVu
LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdF
QktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRzOmF2YWlsYWJsZS13aWR0aDoKKyAgICAgKgorICAgICAqIFRoZSB3aWR0aCBvZiB0
aGUgY3VycmVudCB2aXNpYmxlIGFyZWEuIFRoaXMgd2lsbCB1c3VhbGx5IGJlIHRoZQorICAgICAq
IHNhbWUgYXMgdGhlIHNwYWNlIGFsbG9jYXRlZCB0byB0aGUgd2lkZ2V0LCBidXQgaW4gc29tZSBj
YXNlcworICAgICAqIHlvdSBtYXkgaGF2ZSBkZWNpZGVkIHRvIG1ha2UgdGhlIHdpZGdldCBiaWdn
ZXIgdGhhbiB0aGUgdmlzaWJsZQorICAgICAqIGFyZWEuIFRoaXMgdmFsdWUgaXMgYnkgZGVmYXVs
dCBpbml0aWFsaXplZCB0byB0aGUgc2l6ZQorICAgICAqIGFsbG9jYXRlZCBieSB0aGUgd2lkZ2V0
LCBidXQgeW91IGNhbiBvdmVycmlkZSBpdCBpbiB0aGUgaGFuZGxlcgorICAgICAqIG9mIFdlYktp
dFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCB0bworICAg
ICAqIGxldCB0aGUgZW5naW5lIGtub3cgd2hhdCB0aGUgdmlzaWJsZSBhcmVhIGlzLgorICAgICAq
CisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX0FWQUlMQUJMRV9XSURUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYXZhaWxhYmxlLXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF8oIkF2YWlsYWJsZSBXaWR0aCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXygiVGhlIHdpZHRoIG9mIHRoZSB2aXNpYmxlIGFyZWEuIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklU
RSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6YXZhaWxhYmxl
LWhlaWdodDoKKyAgICAgKgorICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIGN1cnJlbnQgdmlzaWJs
ZSBhcmVhLiBUaGlzIHdpbGwgdXN1YWxseSBiZSB0aGUKKyAgICAgKiBzYW1lIGFzIHRoZSBzcGFj
ZSBhbGxvY2F0ZWQgdG8gdGhlIHdpZGdldCwgYnV0IGluIHNvbWUgY2FzZXMKKyAgICAgKiB5b3Ug
bWF5IGhhdmUgZGVjaWRlZCB0byBtYWtlIHRoZSB3aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIHZpc2li
bGUKKyAgICAgKiBhcmVhLiBUaGlzIHZhbHVlIGlzIGJ5IGRlZmF1bHQgaW5pdGlhbGl6ZWQgdG8g
dGhlIHNpemUKKyAgICAgKiBhbGxvY2F0ZWQgYnkgdGhlIHdpZGdldCwgYnV0IHlvdSBjYW4gb3Zl
cnJpZGUgaXQgaW4gdGhlIGhhbmRsZXIKKyAgICAgKiBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9y
dC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQgdG8KKyAgICAgKiBsZXQgdGhlIGVuZ2lu
ZSBrbm93IHdoYXQgdGhlIHZpc2libGUgYXJlYSBpcy4KKyAgICAgKgorICAgICAqIFNpbmNlOiAx
LjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVj
dENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9BVkFJTEFC
TEVfSEVJR0hULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9z
cGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUt
aGVpZ2h0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkF2YWlsYWJs
ZSBIZWlnaHQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBo
ZWlnaHQgb2YgdGhlIHZpc2libGUgYXJlYS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElO
VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAv
KioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXNrdG9wLXdpZHRoOgorICAgICAq
CisgICAgICogVGhlIHdpZHRoIG9mIHZpZXdwb3J0IHRoYXQgd29ya3Mgd2VsbCBmb3IgbW9zdCB3
ZWIgcGFnZXMgZGVzaWduZWQgZm9yIAorICAgICAqIGRlc2t0b3AuIFRoaXMgdmFsdWUgaXMgaW5p
dGlhbGl6ZWQgdG8gOTgwIHBpeGVscyBieSBkZWZhdWx0IGFuZCB1c2VkIAorICAgICAqIGR1cmlu
ZyBhIHZpZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbi4gQWxzbywgaXQgY2FuIGJlIG92
ZXJyaWRlbiBieSAKKyAgICAgKiB0aGUgaGFuZGxlciBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9y
dC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIAorICAgICAqIFlvdSBzaG91bGQgbm90
IGRvIHRoYXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9ERVNLVE9QX1dJRFRILAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJk
ZXNrdG9wLXdpZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRl
c2t0b3AgV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSB3aWR0aCBvZiB2aWV3cG9ydCB0aGF0IHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRl
c2lnbmVkIGZvciBkZXNrdG9wLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTgwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisgICAgLyoqCisg
ICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLWRwaToKKyAgICAgKgorICAgICAq
IFRoZSBudW1iZXIgb2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuLiBUaGlzIHZhbHVlIGlz
IAorICAgICAqIGluaXRpYWxpemVkIHRvIDE2MCBkcGkgYnkgZGVmYXVsdCBhbmQgdXNlZCBkdXJp
bmcgYSB2aWV3cG9ydCAKKyAgICAgKiBhdHRyaWJ1dGVzIHJlY29tcHV0YXRpb24sIGJlY2F1c2Ug
aXQgaXMgdGhlIGRwaSBvZiB0aGUgb3JpZ2luYWwgCisgICAgICogaVBob25lIGFuZCBBbmRyb2lk
IGRldmljZXMuIEFsc28sIGl0IGNhbiBiZSBvdmVycmlkZW4gYnkgdGhlIAorICAgICAqIGhhbmRs
ZXIgb2YgV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVz
dGVkLiAKKyAgICAgKiBZb3Ugc2hvdWxkIG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZl
cnkgZ29vZCByZWFzb24uCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAg
ICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX0RQSSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGV2aWNlLWRwaSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgRFBJIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgbnVtYmVyIG9mIGRvdHMgcGVyIGluY2ggb2YgdGhlIHNjcmVl
bi4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDE2MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFdFQktJVF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRzOndpZHRoOgorICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSB2aWV3
cG9ydC4gQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgCisgICAgICogeW91IG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAg
KiAKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfV0lEVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn
X3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndp
ZHRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIldpZHRoIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZp
ZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dHM6aGVpZ2h0OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUg
dmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVydHksCisgICAgICogeW91IG5lZWQg
dG8gbWFrZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAg
ICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2lu
c3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUFJPUF9IRUlHSFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJIZWlnaHQi
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBoZWlnaHQgb2Yg
dGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dHM6aW5pdGlhbC1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAg
KiBUaGUgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMg
cHJvcGVydHksCisgICAgICogeW91IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9JTklUSUFMX1NDQUxFX0ZB
Q1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19m
bG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsLXNjYWxl
LWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJJbml0aWFs
IFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygi
VGhlIGluaXRpYWwgc2NhbGUgb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOm1pbmltdW0tc2Nh
bGUtZmFjdG9yOgorICAgICAqCisgICAgICogVGhlIG1pbmltdW0gc2NhbGUgb2YgdGhlIHZpZXdw
b3J0LiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3BlcnR5LCAKKyAgICAgKiB5b3UgbmVlZCB0byBt
YWtlIHN1cmUgdGhhdCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAq
CisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIm1pbmltdW0tc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF8oIk1pbmltdW0gU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3Bv
cnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dHM6bWF4aW11bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBUaGUg
bWF4aW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJvcGVy
dHksIAorICAgICAqIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0ICNXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUFYSU1VTV9TQ0FMRV9GQUNUT1Is
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxvYXQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4aW11bS1zY2FsZS1mYWN0
b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWF4aW11bSBTY2Fs
ZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBt
YXhpbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19N
QVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisK
KyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpkZXZpY2UtcGl4ZWwtcmF0
aW86CisgICAgICoKKyAgICAgKiBUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9y
dC4gQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwKKyAgICAgKiB5b3UgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisg
ICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXZpY2UtcGl4ZWwtcmF0aW8iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXygiRGV2aWNlIFBpeGVsIFJhdGlvIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJUaGUgZGV2aWNlIHBpeGVsIHJhdGlvIG9mIHRoZSB2aWV3cG9ydC4i
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
V0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0czp1c2VyLXNjYWxhYmxlOgorICAgICAqCisgICAgICogRGV0ZXJtaW5lcyB3aGV0
aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LgorICAgICAqIEJlZm9yZSBn
ZXR0aW5nIHRoaXMgcHJvcGVydHksIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IAorICAgICAq
ICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVVNF
Ul9TQ0FMQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1f
c3BlY19ib29sZWFuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygidXNl
ci1zY2FsYWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVXNl
ciBTY2FsYWJsZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0
ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0aGUgdXNlciBjYW4gem9vbSBpbiBhbmQgb3V0LiIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoq
CisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6dmFsaWQ6CisgICAgICoKKyAgICAgKiBE
ZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZC4gCisgICAg
ICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBhcmUgb25seSB2YWxpZCBvbiBwYWdlcyAKKyAg
ICAgKiB3aGljaCBoYXZlIGEgdmlld3BvcnQgbWV0YSB0YWcsIGFuZCBoYXZlIGFscmVhZHkgCisg
ICAgICogaGFkIHRoZSBhdHRyaWJ1dGVzIGNhbGN1bGF0ZWQuCisgICAgICoKKyAgICAgKiBTaW5j
ZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdv
YmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfVkFM
SUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfYm9v
bGVhbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oInZhbGlkIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJWYWxpZCIpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCB0
aGUgYXR0cmlidXRlcyBhcmUgdmFsaWQsIGFuZCBjYW4gYmUgdXNlZC4iKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICBnX3R5cGVfY2xhc3Nf
YWRkX3ByaXZhdGUoa2NsYXNzLCBzaXplb2YoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0
ZSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19pbml0KFdl
YktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnQpCit7CisgICAgdmlld3BvcnQtPnByaXYg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19HRVRfUFJJVkFURSh2aWV3cG9ydCk7CisKKyAg
ICB2aWV3cG9ydC0+cHJpdi0+ZGV2aWNlV2lkdGggPSAwOworICAgIHZpZXdwb3J0LT5wcml2LT5k
ZXZpY2VIZWlnaHQgPSAwOworICAgIHZpZXdwb3J0LT5wcml2LT5hdmFpbGFibGVXaWR0aCA9IDA7
CisgICAgdmlld3BvcnQtPnByaXYtPmF2YWlsYWJsZUhlaWdodCA9IDA7CisgICAgdmlld3BvcnQt
PnByaXYtPmRlc2t0b3BXaWR0aCA9IDk4MDsgLy8gVGhpcyB2YWx1ZSB3b3JrcyB3ZWxsIGZvciBt
b3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBmb3IgZGVza3RvcCBicm93c2Vycy4KKyAgICB2aWV3cG9y
dC0+cHJpdi0+ZGV2aWNlRFBJID0gMTYwOyAvLyBJdCBpcyB0aGUgZHBpIG9mIHRoZSBvcmlnaW5h
bCBpUGhvbmUgYW5kIEFuZHJvaWQgZGV2aWNlcy4KKyAgICB2aWV3cG9ydC0+cHJpdi0+d2lkdGgg
PSAwOworICAgIHZpZXdwb3J0LT5wcml2LT5oZWlnaHQgPSAwOworICAgIHZpZXdwb3J0LT5wcml2
LT5pbml0aWFsU2NhbGVGYWN0b3IgPSAtMTsKKyAgICB2aWV3cG9ydC0+cHJpdi0+bWluaW11bVNj
YWxlRmFjdG9yID0gLTE7CisgICAgdmlld3BvcnQtPnByaXYtPm1heGltdW1TY2FsZUZhY3RvciA9
IC0xOworICAgIHZpZXdwb3J0LT5wcml2LT5kZXZpY2VQaXhlbFJhdGlvID0gLTE7CisgICAgdmll
d3BvcnQtPnByaXYtPnVzZXJTY2FsYWJsZSA9IFRSVUU7CisgICAgdmlld3BvcnQtPnByaXYtPmlz
VmFsaWQgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfZ2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcGVydHlJRCwgR1ZhbHVl
KiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVjKQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0gV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMo
b2JqZWN0KTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gdmll
d3BvcnRBdHRyaWJ1dGVzLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7CisgICAg
Y2FzZSBQUk9QX0RFVklDRV9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBw
cml2LT5kZXZpY2VXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0Vf
SEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmRldmljZUhlaWdo
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFCTEVfV0lEVEg6CisgICAg
ICAgIGdfdmFsdWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+YXZhaWxhYmxlV2lkdGgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX0hFSUdIVDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5hdmFpbGFibGVIZWlnaHQpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfREVTS1RPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZh
bHVlLCBwcml2LT5kZXNrdG9wV2lkdGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
REVWSUNFX0RQSToKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT5kZXZpY2VE
UEkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfV0lEVEg6CisgICAgICAgIGdfdmFs
dWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+d2lkdGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmhlaWdo
dCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9JTklUSUFMX1NDQUxFX0ZBQ1RPUjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPmluaXRpYWxTY2FsZUZhY3Rv
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NSU5JTVVNX1NDQUxFX0ZBQ1RPUjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1pbmltdW1TY2FsZUZhY3Rv
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUjoK
KyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1heGltdW1TY2FsZUZhY3Rv
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfUElYRUxfUkFUSU86Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT5kZXZpY2VQaXhlbFJhdGlvKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1VTRVJfU0NBTEFCTEU6CisgICAgICAgIGdf
dmFsdWVfc2V0X2Jvb2xlYW4odmFsdWUsIHByaXYtPnVzZXJTY2FsYWJsZSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9WQUxJRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2
YWx1ZSwgcHJpdi0+aXNWYWxpZCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SUQs
IHBhcmFtU3BlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3Vp
bnQgcHJvcGVydHlJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcGFyYW1TcGVj
KQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzID0g
V0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqZWN0KTsKKyAgICBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNQcml2YXRlKiBwcml2ID0gdmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2OworCisgICAg
c3dpdGNoIChwcm9wZXJ0eUlEKSB7CisgICAgY2FzZSBQUk9QX0RFVklDRV9XSURUSDoKKyAgICAg
ICAgcHJpdi0+ZGV2aWNlV2lkdGggPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfREVWSUNFX0hFSUdIVDoKKyAgICAgICAgcHJpdi0+ZGV2aWNl
SGVpZ2h0ID0gZ192YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlV2lkdGggPSBn
X3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZB
SUxBQkxFX0hFSUdIVDoKKyAgICAgICAgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0ID0gZ192YWx1ZV9n
ZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RFU0tUT1BfV0lE
VEg6CisgICAgICAgIHByaXYtPmRlc2t0b3BXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfRFBJOgorICAgICAgICBwcml2
LT5kZXZpY2VEUEkgPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wZXJ0eUlELCBwYXJhbVNwZWMpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3ZvaWQgd2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHByaXYtPndlYlZpZXc7CisKKyAgICBJbnRSZWN0IHdpbmRvd1Jl
Y3Qod2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZWN0KCkpOworICAg
IHByaXYtPmRldmljZVdpZHRoID0gd2luZG93UmVjdC53aWR0aCgpOworICAgIHByaXYtPmRldmlj
ZUhlaWdodCA9IHdpbmRvd1JlY3QuaGVpZ2h0KCk7CisKKyAgICBJbnRSZWN0IHJlY3Qod2ViVmll
dy0+cHJpdi0+Y29yZVBhZ2UtPmNocm9tZSgpLT5wYWdlUmVjdCgpKTsKKyAgICBwcml2LT5hdmFp
bGFibGVXaWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBwcml2LT5hdmFpbGFibGVIZWlnaHQgPSBy
ZWN0LmhlaWdodCgpOworCisgICAgLy8gRmlyc3Qgb2YgYWxsLCB3ZSBnaXZlIHRoZSBhcHBsaWNh
dGlvbiBhbiBvcHBvcnR1bml0eSB0byBvdmVycmlkZSBzb21lIG9mIHRoZSB2YWx1ZXMuCisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKHdlYlZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29t
cHV0ZS1yZXF1ZXN0ZWQiLCB2aWV3cG9ydEF0dHJpYnV0ZXMpOworCisgICAgVmlld3BvcnRBcmd1
bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPm1haW5GcmFtZSgpLT5k
b2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOworCisgICAgVmlld3BvcnRBdHRyaWJ1dGVz
IGF0dHJpYnV0ZXMgPSBjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKGFyZ3VtZW50cywgcHJpdi0+
ZGVza3RvcFdpZHRoLCBwcml2LT5kZXZpY2VXaWR0aCwgcHJpdi0+ZGV2aWNlSGVpZ2h0LCBwcml2
LT5kZXZpY2VEUEksIEludFNpemUocHJpdi0+YXZhaWxhYmxlV2lkdGgsIHByaXYtPmF2YWlsYWJs
ZUhlaWdodCkpOworCisgICAgcHJpdi0+d2lkdGggPSBhdHRyaWJ1dGVzLmxheW91dFNpemUud2lk
dGgoKTsKKyAgICBwcml2LT5oZWlnaHQgPSBhdHRyaWJ1dGVzLmxheW91dFNpemUuaGVpZ2h0KCk7
CisgICAgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5pbml0aWFsU2NhbGU7
CisgICAgcHJpdi0+bWluaW11bVNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5taW5pbXVtU2NhbGU7
CisgICAgcHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yID0gYXR0cmlidXRlcy5tYXhpbXVtU2NhbGU7
CisgICAgcHJpdi0+ZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRp
bzsKKyAgICBwcml2LT51c2VyU2NhbGFibGUgPSBhcmd1bWVudHMudXNlclNjYWxhYmxlOworCisg
ICAgaWYgKCFwcml2LT5pc1ZhbGlkKSB7CisgICAgICAgIHByaXYtPmlzVmFsaWQgPSBUUlVFOwor
ICAgICAgICBnX29iamVjdF9ub3RpZnkoR19PQkpFQ1Qodmlld3BvcnRBdHRyaWJ1dGVzKSwgInZh
bGlkIik7CisgICAgfQorCisgICAgLy8gTm93IGxldCB0aGUgYXBwbGljYXRpb24ga25vdyBpdCBp
cyBzYWZlIHRvIHVzZSB0aGUgbmV3IHZhbHVlcy4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
d2ViVmlldywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsIHZpZXdwb3J0QXR0cmlidXRl
cyk7Cit9CisKKy8qKgorICogd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlOgor
ICogQHZpZXdwb3J0QXR0cmlidXRlczogYSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzCisgKgor
ICogUmVjb21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYW5kIGVtaXQgdGhl
IHZpZXdwb3J0LWF0dHJpYnV0ZS1jaGFuZ2VkIHNpZ25hbC4gCisgKiBUaGUgdmlld3BvcnQtYXR0
cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCBhbHNvIHdpbGwgYmUgaGFuZGxlZCB0
byBvdmVycmlkZSAKKyAqIHRoZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUsIGRlc2t0b3Ag
d2lkdGgsIG9yIGRldmljZSBEUEkuCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK3ZvaWQgd2Vi
a2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdwb3J0QXR0cmlidXRl
cyogdmlld3BvcnRBdHRyaWJ1dGVzKQoreworICAgIGlmICghdmlld3BvcnRBdHRyaWJ1dGVzLT5w
cml2LT5pc1ZhbGlkKQorICAgICAgICByZXR1cm47CisgICAgd2Via2l0Vmlld3BvcnRBdHRyaWJ1
dGVzUmVjb21wdXRlKHZpZXdwb3J0QXR0cmlidXRlcyk7Cit9CmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL3dlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBiL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjdkOTBjMWIKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXMuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgd2Via2l0dmlld3Bv
cnRhdHRyaWJ1dGVzX2gKKyNkZWZpbmUgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzX2gKKworI2lu
Y2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRlZmluZXMuaD4K
KworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVU
RVMgICAgICAgICAgICAod2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0X3R5cGUoKSkKKyNk
ZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMob2JqKSAgICAgICAgICAgIChHX1RZUEVf
Q0hFQ0tfSU5TVEFOQ0VfQ0FTVCgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRF
UywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKSkKKyNkZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FU
VFJJQlVURVNfQ0xBU1Moa2xhc3MpICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3Mp
LCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1
dGVzQ2xhc3MpKQorI2RlZmluZSBXRUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFUyhvYmopICAg
ICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBXRUJLSVRfVFlQRV9WSUVX
UE9SVF9BVFRSSUJVVEVTKSkKKyNkZWZpbmUgV0VCS0lUX0lTX1ZJRVdQT1JUX0FUVFJJQlVURVNf
Q0xBU1Moa2xhc3MpIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgV0VCS0lUX1RZ
UEVfVklFV1BPUlRfQVRUUklCVVRFUykpCisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9BVFRSSUJV
VEVTX0dFVF9DTEFTUyhvYmopICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgIFdF
QktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0Ns
YXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUg
V2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgeworICAgIEdPYmplY3QgcGFyZW50X2luc3RhbmNlOworCisgICAgLyo8IHBy
aXZhdGUgPiovCisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSAqcHJpdjsKK307
CisKK3N0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MgeworICAgIEdPYmplY3RD
bGFzcyBwYXJlbnRfY2xhc3M7CisKKyAgICAvKiBQYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9u
ICovCisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93
ZWJraXRfcmVzZXJ2ZWQxKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQyKSAo
dm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRfcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCitXRUJL
SVRfQVBJIEdUeXBlCit3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfdHlwZSAgICAgICAg
ICAgICAgICAgKHZvaWQpOworCitXRUJLSVRfQVBJIHZvaWQKK3dlYmtpdF92aWV3cG9ydF9hdHRy
aWJ1dGVzX3JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMqIHZpZXdwb3J0QXR0cmli
dXRlcyk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5jcHAgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcAppbmRleCA5M2EzMTg4Li42OTlmMWNjIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmNwcAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
LmNwcApAQCAtMTAsNiArMTAsNyBAQAogICogIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCBJZ2Fs
aWEgUy5MLgogICogIENvcHlyaWdodCAoQykgMjAwOSBNb3ZpYWwgQ3JlYXRpdmUgVGVjaG5vbG9n
aWVzIEluYy4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDkgQm9iYnkgUG93ZXJzCisgKiAgQ29weXJp
Z2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xkcC5vcmc+CiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC00Myw3ICs0NCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkFic3RyYWN0RGF0YWJhc2UuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RJbXBsLmgi
Ci0jaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDaHJvbWVDbGllbnRHdGsuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIK
ICNpbmNsdWRlICJDb250ZXh0TWVudUNsaWVudEd0ay5oIgpAQCAtNzMsNiArNzQsNyBAQAogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJY29uRGF0YWJhc2UuaCIKICNpbmNs
dWRlICJJbnNwZWN0b3JDbGllbnRHdGsuaCIKKyNpbmNsdWRlICJNZW1vcnlDYWNoZS5oIgogI2lu
Y2x1ZGUgIk1vdXNlRXZlbnRXaXRoSGl0VGVzdFJlc3VsdHMuaCIKICNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhZ2VDYWNoZS5oIgpAQCAtMTczLDcgKzE3NSw2IEBAIGVu
dW0gewogICAgIEdFT0xPQ0FUSU9OX1BPTElDWV9ERUNJU0lPTl9DQU5DRUxMRUQsCiAgICAgT05M
T0FEX0VWRU5ULAogICAgIEZSQU1FX0NSRUFURUQsCi0KICAgICBTSE9VTERfQkVHSU5fRURJVElO
RywKICAgICBTSE9VTERfRU5EX0VESVRJTkcsCiAgICAgU0hPVUxEX0lOU0VSVF9OT0RFLApAQCAt
MTg1LDYgKzE4Niw4IEBAIGVudW0gewogICAgIEVESVRJTkdfQkVHQU4sCiAgICAgVVNFUl9DSEFO
R0VEX0NPTlRFTlRTLAogICAgIEVESVRJTkdfRU5ERUQsCisgICAgVklFV1BPUlRfQVRUUklCVVRF
U19SRUNPTVBVVEVfUkVRVUVTVEVELAorICAgIFZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRCwK
IAogICAgIExBU1RfU0lHTkFMCiB9OwpAQCAtMTk5LDYgKzIwMiw3IEBAIGVudW0gewogICAgIFBS
T1BfRURJVEFCTEUsCiAgICAgUFJPUF9TRVRUSU5HUywKICAgICBQUk9QX1dFQl9JTlNQRUNUT1Is
CisgICAgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVTLAogICAgIFBST1BfV0lORE9XX0ZFQVRVUkVT
LAogICAgIFBST1BfVFJBTlNQQVJFTlQsCiAgICAgUFJPUF9aT09NX0xFVkVMLApAQCAtNTA4LDYg
KzUxMiw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19nZXRfcHJvcGVydHkoR09iamVj
dCogb2JqZWN0LCBndWludCBwcm9wX2lkLCBHVmFsdWUqCiAgICAgY2FzZSBQUk9QX1dFQl9JTlNQ
RUNUT1I6CiAgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Via2l0X3dlYl92aWV3
X2dldF9pbnNwZWN0b3Iod2ViVmlldykpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1Bf
VklFV1BPUlRfQVRUUklCVVRFUzoKKyAgICAgICAgZ192YWx1ZV9zZXRfb2JqZWN0KHZhbHVlLCB3
ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMod2ViVmlldykpOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIFBST1BfV0lORE9XX0ZFQVRVUkVTOgogICAgICAgICBnX3ZhbHVl
X3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19nZXRfd2luZG93X2ZlYXR1cmVzKHdl
YlZpZXcpKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMzU1LDYgKzEzNjIsNyBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2ViX3ZpZXdfZGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCiAgICAgfQogCiAgICAg
cHJpdi0+d2ViSW5zcGVjdG9yLmNsZWFyKCk7CisgICAgcHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVz
LmNsZWFyKCk7CiAgICAgcHJpdi0+d2ViV2luZG93RmVhdHVyZXMuY2xlYXIoKTsKICAgICBwcml2
LT5tYWluUmVzb3VyY2UuY2xlYXIoKTsKICAgICBwcml2LT5zdWJSZXNvdXJjZXMuY2xlYXIoKTsK
QEAgLTI3MTgsNiArMjcyNiw1NSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3Nf
aW5pdChXZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgZ19jY2xvc3Vy
ZV9tYXJzaGFsX1ZPSURfX1ZPSUQsIEdfVFlQRV9OT05FLCAwKTsKIAogICAgIC8qCisgICAgICog
V2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkCisg
ICAgICogQHdlYl92aWV3OiB0aGUgb2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAg
ICAgKiBAdmlld3BvcnRfYXR0cmlidXRlczogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMg
d2hpY2ggaGFzIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAqCisgICAgICogVGhlICNX
ZWJLaXRXZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQgCisg
ICAgICogc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCB3aGVuIGEgcGFnZSB3aXRoIGEgdmlld3BvcnQg
bWV0YSB0YWcKKyAgICAgKiBsb2FkcyBhbmQgd2hlbiB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRl
c19yZWNvbXB1dGUgaXMgY2FsbGVkLgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgd2lsbCBoYXZlIGRldmljZSBzaXplLCBhdmFpbGFibGUgc2l6ZSwKKyAgICAg
KiBkZXNrdG9wIHdpZHRoLCBhbmQgZGV2aWNlIERQSSBwcmUtZmlsbGVkIGJ5IHZhbHVlcyB0aGF0
IG1ha2Ugc2Vuc2UgCisgICAgICogZm9yIHRoZSBjdXJyZW50IHNjcmVlbiBhbmQgd2lkZ2V0LCBi
dXQgeW91IGNhbiBvdmVycmlkZSB0aG9zZSB2YWx1ZXMgCisgICAgICogaWYgeW91IGhhdmUgc3Bl
Y2lhbCByZXF1aXJlbWVudHMgKGZvciBpbnN0YW5jZSwgaWYgeW91IG1hZGUgeW91cgorICAgICAq
IHdpZGdldCBiaWdnZXIgdGhhbiB0aGUgYXZhaWxhYmxlIHZpc2libGUgYXJlYSwgeW91IHNob3Vs
ZCBvdmVycmlkZSAKKyAgICAgKiB0aGUgYXZhaWxhYmxlLXdpZHRoIGFuZCBhdmFpbGFibGUtaGVp
Z2h0IHByb3BlcnRpZXMgdG8gdGhlIGFjdHVhbCAKKyAgICAgKiB2aXNpYmxlIGFyZWEpLgorICAg
ICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgd2Via2l0X3dlYl92aWV3X3Np
Z25hbHNbVklFV1BPUlRfQVRUUklCVVRFU19SRUNPTVBVVEVfUkVRVUVTVEVEXSA9IGdfc2lnbmFs
X25ldygidmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIiwKKyAgICAgICAg
ICAgIEdfVFlQRV9GUk9NX0NMQVNTKHdlYlZpZXdDbGFzcyksCisgICAgICAgICAgICAoR1NpZ25h
bEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgMCwgMCwKKyAgICAgICAgICAgIGdfY2Nsb3N1cmVfbWFyc2hhbF9W
T0lEX19PQkpFQ1QsCisgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMSwKKyAgICAgICAgICAgIFdF
QktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpOworCisgICAgLyoKKyAgICAgKiBXZWJLaXRX
ZWJWaWV3Ojp2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQKKyAgICAgKiBAd2ViX3ZpZXc6IHRo
ZSBvYmplY3Qgd2hpY2ggcmVjZWl2ZWQgdGhlIHNpZ25hbAorICAgICAqIEB2aWV3cG9ydF9hdHRy
aWJ1dGVzOiB0aGUgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB3aGljaCBoYXMgdGhlIHZpZXdw
b3J0IGF0dHJpYnV0ZXMuCisgICAgICoKKyAgICAgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgd2lsbCBiZSBlbWl0dGVkIAorICAgICAqIGFm
dGVyIHRoZSBlbWlzc2lvbiBvZiAjV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1y
ZWNvbXB1dGUtcmVxdWVzdGVkIAorICAgICAqIGFuZCB0aGUgc3Vic2VxdWVudCB2aWV3cG9ydCBh
dHRyaWJ1dGUgcmVjb21wdXRhdGlvbi4gQXQgdGhpcyBwb2ludCwgCisgICAgICogaWYgdGhlICNX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXJlIHZhbGlkLCB0aGUgdmlld3BvcnQgYXR0cmlidXRl
cyBhcmUgYXZhaWxhYmxlLgorICAgICAqIAorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLwor
ICAgIHdlYmtpdF93ZWJfdmlld19zaWduYWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfQ0hBTkdFRF0g
PSBnX3NpZ25hbF9uZXcoInZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJL
SVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCiAgICAgICogaW1wbGVtZW50
YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwogICAgICAqLwogICAgIHdlYlZpZXdDbGFzcy0+Y3Jl
YXRlX3dlYl92aWV3ID0gd2Via2l0X3dlYl92aWV3X3JlYWxfY3JlYXRlX3dlYl92aWV3OwpAQCAt
Mjk2MSw2ICszMDE4LDIwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19jbGFzc19pbml0
KFdlYktpdFdlYlZpZXdDbGFzcyogd2ViVmlld0NsYXNzKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUp
KTsKIAogICAgIC8qKgorICAgICogV2ViS2l0V2ViVmlldzp2aWV3cG9ydC1hdHRyaWJ1dGVzOgor
ICAgICoKKyAgICAqIFRoZSBhc3NvY2lhdGVkICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5z
dGFuY2UuCisgICAgKgorICAgICogU2luY2U6IDEuMy44CisgICAgKi8KKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1ZJRVdQT1JUX0FUVFJJQlVU
RVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfb2Jq
ZWN0KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVmlld3BvcnQgQXR0cmlidXRlcyIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJU
aGUgYXNzb2NpYXRlZCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7CisKKyAg
ICAvKioKICAgICAqIFdlYktpdFdlYlZpZXc6d2luZG93LWZlYXR1cmVzOgogICAgICoKICAgICAq
IEFuIGFzc29jaWF0ZWQgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMgaW5zdGFuY2UuCkBAIC0zMzg3
LDYgKzM0NTgsMTAgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2luaXQoV2ViS2l0V2Vi
Vmlldyogd2ViVmlldykKICAgICBwcml2LT53ZWJJbnNwZWN0b3IgPSBhZG9wdFBsYXRmb3JtUmVm
KFdFQktJVF9XRUJfSU5TUEVDVE9SKGdfb2JqZWN0X25ldyhXRUJLSVRfVFlQRV9XRUJfSU5TUEVD
VE9SLCBOVUxMKSkpOwogICAgIHdlYmtpdF93ZWJfaW5zcGVjdG9yX3NldF9pbnNwZWN0b3JfY2xp
ZW50KHByaXYtPndlYkluc3BlY3Rvci5nZXQoKSwgcHJpdi0+Y29yZVBhZ2UpOwogCisgICAgLy8g
QW5kIG91ciBWaWV3cG9ydEF0dHJpYnV0ZXMgZnJpZW5kLgorICAgIHByaXYtPnZpZXdwb3J0QXR0
cmlidXRlcyA9IGFkb3B0UGxhdGZvcm1SZWYoV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVMoZ19v
YmplY3RfbmV3KFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsIE5VTEwpKSk7CisgICAg
cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLT5wcml2LT53ZWJWaWV3ID0gd2ViVmlldzsKKwogICAg
IC8vIFRoZSBzbWFydCBwb2ludGVyIHdpbGwgY2FsbCBnX29iamVjdF9yZWZfc2luayBvbiB0aGVz
ZSBhZGp1c3RtZW50cy4KICAgICBwcml2LT5ob3Jpem9udGFsQWRqdXN0bWVudCA9IEdUS19BREpV
U1RNRU5UKGd0a19hZGp1c3RtZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7
CiAgICAgcHJpdi0+dmVydGljYWxBZGp1c3RtZW50ID0gR1RLX0FESlVTVE1FTlQoZ3RrX2FkanVz
dG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTsKQEAgLTM1MjYsNiArMzYw
MSwyOSBAQCBXZWJLaXRXZWJJbnNwZWN0b3IqIHdlYmtpdF93ZWJfdmlld19nZXRfaW5zcGVjdG9y
KFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCiAgICAgcmV0dXJuIHdlYlZpZXctPnByaXYtPndlYklu
c3BlY3Rvci5nZXQoKTsKIH0KIAorLyoqCisgKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0
X2F0dHJpYnV0ZXM6CisgKiBAd2ViVmlldzogYSAjV2ViS2l0V2ViVmlldworICoKKyAqIE9idGFp
bnMgdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICog
I1dlYktpdFdlYlZpZXcuIEV2ZXJ5ICNXZWJLaXRXZWJWaWV3IG9iamVjdCBoYXMgYQorICogI1dl
YktpdFdlYlZpZXdwb3JBdHRyaWJ1dGVzIG9iamVjdCBhdHRhY2hlZCB0byBpdCBhcyBzb29uIGFz
IGl0IGlzCisgKiBjcmVhdGVkLCBzbyB0aGlzIGZ1bmN0aW9uIHdpbGwgb25seSByZXR1cm4gTlVM
TCBpZiB0aGUgYXJndW1lbnQgaXMKKyAqIG5vdCBhIHZhbGlkICNXZWJLaXRXZWJWaWV3LiBEbyBu
b3RlIGhvd2V2ZXIgdGhhdCB0aGUgdmlld3BvcnQKKyAqIGF0dHJpYnV0ZXMgb2JqZWN0IG9ubHkg
Y29udGFpbnMgdmFsaWQgaW5mb3JtYXRpb24gd2hlbiB0aGUgY3VycmVudAorICogcGFnZSBoYXMg
YSB2aWV3cG9ydCBtZXRhIHRhZy4gWW91IGNhbiBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHNob3Vs
ZAorICogYmUgdXNlZCBieSBjaGVja2luZyB0aGUgI1dlYktpdFZpZXdwb3J0OnZhbGlkIHByb3Bl
cnR5LgorICoKKyAqIFJldHVybiB2YWx1ZTogKHRyYW5zZmVyIG5vbmUpOiB0aGUgI1dlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyBpbnN0YW5jZS4KKyAqCisgKiBTaW5jZTogMS4zLjgKKyAqLworV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXMoV2ViS2l0V2ViVmlldyogd2ViVmlldykKK3sKKyAgICBnX3JldHVybl92YWxfaWZfZmFp
bChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldyksIDApOworICAgIHJldHVybiB3ZWJWaWV3LT5w
cml2LT52aWV3cG9ydEF0dHJpYnV0ZXMuZ2V0KCk7Cit9CisKIC8vIGludGVybmFsCiBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfc2V0X3dpbmRvd19mZWF0dXJlcyhXZWJLaXRXZWJWaWV3KiB3
ZWJWaWV3LCBXZWJLaXRXZWJXaW5kb3dGZWF0dXJlcyogd2ViV2luZG93RmVhdHVyZXMpCiB7CmRp
ZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmggYi9XZWJLaXQvZ3Rr
L3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmgKaW5kZXggNTE0ZDgzYy4uMzRjNGQ1ZSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oCisrKyBiL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdHdlYnZpZXcuaApAQCAtNDI3LDYgKzQyNyw5IEBAIHdlYmtpdF9nZXRfY2FjaGVf
bW9kZWwgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKTsKIFdFQktJVF9BUEkgV2ViS2l0
RE9NRG9jdW1lbnQgKgogd2Via2l0X3dlYl92aWV3X2dldF9kb21fZG9jdW1lbnQgICAgICAgICAg
ICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKIAorV0VCS0lUX0FQSSBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMqCit3ZWJraXRfd2ViX3ZpZXdfZ2V0X3ZpZXdwb3J0X2F0dHJp
YnV0ZXMgICAgICAgICAoV2ViS2l0V2ViVmlldyAgICAgICAgKndlYlZpZXcpOworCiBHX0VORF9E
RUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktp
dFRvb2xzL0NoYW5nZUxvZwppbmRleCA5Y2FiYzA4Li41NGJkOTg3IDEwMDY0NAotLS0gYS9XZWJL
aXRUb29scy9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjcgQEAKKzIwMTAtMTItMDggIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAgW0dUS10gU3VwcG9ydCBm
b3Igdmlld3BvcnQgbWV0YSB0YWcKKyAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGVzdGluZyB0
aGUgdmlld3BvcnQgcHJvcGVydGllcyBmb3IgV2ViS2l0R3RrLgorCisgICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcDoKKyAgICAgICAgIChkdW1wQ29uZmln
dXJhdGlvbkZvclZpZXdwb3J0Q2FsbGJhY2spOiBBZGRlZCB0aGlzIEpTIGNhbGxiYWNrIHRvIHNl
dCB0aGUgc2l6ZSBvZiB0aGUgdmlzaWJsZSB2aWV3cG9ydC4KKyAgICAgICAgIChMYXlvdXRUZXN0
Q29udHJvbGxlcjo6c3RhdGljRnVuY3Rpb25zKToKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUv
TGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvZ3RrL0xh
eW91dFRlc3RDb250cm9sbGVyR3RrLmNwcDoKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJvbGxl
cjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IEFkZGVkIHRoaXMgZnVuY3Rpb24gdG8g
dGVzdCB0aGUgdmlld3BvcnQgcHJvcGVydGllcy4KKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tOgorICAgICAgICAgKExheW91dFRlc3RDb250
cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisgICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL3F0L0xheW91dFRlc3RDb250cm9sbGVyUXQuY3BwOgorICAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0
dG8uCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQpOiBEaXR0by4KKyAgICAgICAgICogRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1
bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBEaXR0by4KKwogMjAxMC0xMi0wNyAgVG9ueSBD
aGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9qYW4gVmFm
YWkuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29u
dHJvbGxlci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJv
bGxlci5jcHAKaW5kZXggYTIyNTc5YS4uNWJiZDNmNiAxMDA2NDQKLS0tIGEvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktpdFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVAa2xk
cC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw2ICsxNDEsMjIg
QEAgc3RhdGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnNDYWxsYmFj
ayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmlu
ZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0aW9uRm9y
Vmlld3BvcnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rp
b24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgaWYg
KGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQo
Y29udGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGggPSBKU1ZhbHVlVG9OdW1iZXIo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4Y2VwdGlv
bik7CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFsdWVUb051bWJlcihjb250ZXh0
LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9uKTsKKwor
ICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8TGF5b3V0
VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOworICAgIGNv
bnRyb2xsZXItPmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoc3RhdGljX2Nhc3Q8aW50Pihh
dmFpbGFibGVXaWR0aCksIHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlSGVpZ2h0KSk7CisgICAK
KyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0YXRpYyBK
U1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90
IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxlciA9IHN0
YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRlKHRoaXNP
YmplY3QpKTsKQEAgLTE5MTQsNiArMTkzMSw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExheW91dFRl
c3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJkdW1wQmFja0Zvcndh
cmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0
ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsg
ImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3Np
dGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNBc1RleHQi
LCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFk
T25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJkdW1w
Q29uZmlndXJhdGlvbkZvclZpZXdwb3J0IiwgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBkdW1wRE9N
QXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFiYXNlQ2Fs
bGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmli
dXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAg
eyAiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxiYWNrLCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVs
ZXRlIH0sCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRy
b2xsZXIuaAppbmRleCAyZTljODU2Li5lMzljOTM5IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9E
dW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI4NSw2ICsyODUsOCBAQCBw
dWJsaWM6CiAKICAgICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQgbGVuZ3Ro
KTsKIAorICAgIHZvaWQgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZhaWxhYmxl
V2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpOworCiAgICAgLy8gVGhlIGZvbGxvd2luZyBBUEkg
dGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIHBsYXRmb3JtLXNwZWNp
ZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBEUlQgb25jZSB0aGV5IGV4aXN0Lgog
ICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1JlZiB1dGY4
RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1w
UmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0VG9vbHMv
RHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRleCA4Mzg3
NGY0Li44MzVmN2Q4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9ndGsv
TGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQsNiArNCw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBKYW4g
TWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9vbmVA
a2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxOSwzICs4MjAs
MTAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50LCBp
bnQpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVybiBmYWxzZTsKIH0K
Kwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9y
dChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgV2ViS2l0
V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1haW5GcmFt
ZSk7CisgICAgQVNTRVJUKHdlYlZpZXcpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9ydEd0azo6
ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCh3ZWJWaWV3LCBhdmFpbGFibGVXaWR0aCwgYXZh
aWxhYmxlSGVpZ2h0KTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVl
L21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBiL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJU
cmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCBiZTNlYjA5Li41ZGY5NDFk
IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0VGVzdENv
bnRyb2xsZXJNYWMubW0KKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0xheW91
dFRlc3RDb250cm9sbGVyTWFjLm1tCkBAIC05ODksMyArOTg5LDcgQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgpCiB7CiAg
ICAgcmV0dXJuIFttYWluRnJhbWUgaGFzU3BlbGxpbmdNYXJrZXI6ZnJvbSBsZW5ndGg6bGVuZ3Ro
XTsKIH0KK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDb25maWd1cmF0aW9uRm9yVmll
d3BvcnQoaW50IC8qYXZhaWxhYmxlV2lkdGgqLywgaW50IC8qYXZhaWxhYmxlSGVpZ2h0Ki8pCit7
CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRU
ZXN0Q29udHJvbGxlcldpbi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93aW4vTGF5
b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCmluZGV4IGIxYTRlZjQuLmVkYjA1MTcgMTAwNjQ0Ci0t
LSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJvbGxlcldp
bi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRlc3RDb250
cm9sbGVyV2luLmNwcApAQCAtMTQxNSwzICsxNDE1LDggQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJv
bGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICByZXR1cm4gcmV0OwogfQorCit2b2lkIExheW91dFRlc3RDb250cm9s
bGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCAvKmF2YWlsYWJsZVdpZHRoKi8s
IGludCAvKmF2YWlsYWJsZUhlaWdodCovKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhp
cy4KK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRl
c3RDb250cm9sbGVyV3guY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0
VGVzdENvbnRyb2xsZXJXeC5jcHAKaW5kZXggMTIwYTFiNi4uNzE0YTRjNCAxMDA2NDQKLS0tIGEv
V2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAK
KysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJX
eC5jcHAKQEAgLTUxMSw2ICs1MTEsMTEgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFz
U3BlbGxpbmdNYXJrZXIoaW50LCBpbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIExh
eW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCAvKmF2
YWlsYWJsZVdpZHRoKi8sIGludCAvKmF2YWlsYWJsZUhlaWdodCovKQoreworICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRlc3RDb250
cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQgcGFnZU51
bWJlcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50Cg==
</data>
<flag name="review"
          id="66776"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
    <flag name="commit-queue"
          id="66777"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>76041</attachid>
            <date>2010-12-09 03:48:39 -0800</date>
            <delta_ts>2010-12-09 06:56:46 -0800</delta_ts>
            <desc>Proposed Patch15</desc>
            <filename>viewport15.patch</filename>
            <type>text/plain</type>
            <size>56305</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjY2Y4YWEzLi40NTdhODRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTIt
MDkgIEpvb25lIEh1ciAgPGpvb25lQGtsZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEg
dGFnCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0
MworCisgICAgICAgIEluY2x1ZGVkIHZpZXdwb3J0IHRlc3QgY2FzZXMgZm9yIFdlYktpdEd0awor
CisgICAgICAgICogcGxhdGZvcm0vZ3RrL1NraXBwZWQ6IFVuc2tpcCBmYXN0L3ZpZXdwb3J0IGV4
Y2VwdCB2aWV3cG9ydC00NS5odG1sLgorCiAyMDEwLTEyLTA5ICBZdXRhIEtpdGFtdXJhICA8eXV0
YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9ndGsvU2tpcHBlZCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9T
a2lwcGVkCmluZGV4IDE0MTBlYTAuLmQ2MDcxODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2d0ay9Ta2lwcGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2d0ay9Ta2lwcGVk
CkBAIC01NDkxLDcgKzU0OTEsOCBAQCBmdWxsc2NyZWVuLwogY2FudmFzL3BoaWxpcC90ZXN0cy8y
ZC5wYXRoLmlzUG9pbnRJblBhdGguZWRnZS5odG1sCiAKICMgdmlld3BvcnQgbWV0YSB0YWcgc3Vw
cG9ydAotZmFzdC92aWV3cG9ydAorIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDc0ODEKK2Zhc3Qvdmlld3BvcnQvdmlld3BvcnQtNDUuaHRtbAogCiAjIFByZS1ITVRM
NSBwYXJzZXIgcXVpcmtzIG9ubHkgYXBwbHkgdG8gdGhlIG1hYyBwb3J0IGZvciBub3cuCiBmYXN0
L3BhcnNlci9wcmUtaHRtbDUtcGFyc2VyLXF1aXJrcy5odG1sCmRpZmYgLS1naXQgYS9XZWJLaXQv
Z3RrL0NoYW5nZUxvZyBiL1dlYktpdC9ndGsvQ2hhbmdlTG9nCmluZGV4IDVhYTVlOGMuLmJhYmRj
ODAgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9ndGsvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTAtMTItMDkgIEpvb25lIEh1ciAgPGpvb25lQGts
ZHAub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFtHVEtdIFN1cHBvcnQgZm9yIHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NTQ0MworCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBhIG5ldyBnb2JqZWN0IHRvIG9mZmVyIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIHRvIHVz
ZXIgYWdlbnRzLgorICAgICAgICBJdCBpcyBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgdGhhdCBj
b250YWlucyB0aGUgdmlld3BvcnQgc2l6ZSwgaW5pdGlhbCBzY2FsZSB3aXRoIGxpbWl0cywgCisg
ICAgICAgIGFuZCBpbmZvcm1hdGlvbiBhYm91dCB3aGV0aGVyIGEgdXNlciBpcyBhYmxlIHRvIHNj
YWxlIHRoZSBjb250ZW50cyBpbiB0aGUgdmlld3BvcnQuCisgICAgICAgIAorICAgICAgICBUaGlz
IGZlYXR1cmUgd2FzIGludHJvZHVjZWQgYnkgU2FmYXJpIG9uIHRoZSBpUGhvbmUuIEZvciBtb3Jl
IGluZm9ybWF0aW9uIG9uIAorICAgICAgICB0aGUgdmlld3BvcnQgcHJvcGVydGllcywgcmVmZXIg
dG8gdGhlIFNhZmFyaSByZWZlcmVuY2UgbGlicmFyeSBhdCAKKyAgICAgICAgaHR0cDovL2RldmVs
b3Blci5hcHBsZS5jb20vc2FmYXJpL2xpYnJhcnkvZG9jdW1lbnRhdGlvbi9hcHBsZWFwcGxpY2F0
aW9ucy9yZWZlcmVuY2Uvc2FmYXJpaHRtbHJlZi9hcnRpY2xlcy9tZXRhdGFncy5odG1sCisKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5hbTogQWRkZWQgd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgg
d2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmNwcC4gCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQv
Q2hyb21lQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Q2hyb21lQ2xpZW50OjpkaXNw
YXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZSk6IEFkZGVkIHRoaXMgY2FsbGJhY2sgdG8ga25vdyB3
aGV0aGVyIHRoZSB2aWV3cG9ydCBhcmd1bWVudHMgaXMgYXZhaWxhYmxlLgorICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5jcHA6CisgICAgICAgIChEdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGs6OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIGZ1bmN0
aW9uIHRvIGNvbXB1dGUgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMgd2l0aCB0aGUgZ2l2ZW4gYXZh
aWxhYmxlV2lkdGggYW5kIGF2YWlsYWJsZUhlaWdodC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9G
cmFtZUxvYWRlckNsaWVudEd0ay5jcHA6IAorICAgICAgICAoV2ViS2l0Ojpwb3N0Q29tbWl0RnJh
bWVWaWV3U2V0dXApOiBJbnZhbGlkYXRlIHRoZSB2aWV3cG9ydCBhdHRyaWJ1dGVzLgorICAgICAg
ICAqIHdlYmtpdC93ZWJraXQuaDoKKyAgICAgICAgKiB3ZWJraXQvd2Via2l0ZGVmaW5lcy5oOgor
ICAgICAgICAqIHdlYmtpdC93ZWJraXRwcml2YXRlLmg6IEFkZGVkIHdlYmtpdFZpZXdwb3J0QXR0
cmlidXRlc1JlY29tcHV0ZSBhcyBhIHByaXZhdGUgZnVuY3Rpb24uCisgICAgICAgICogd2Via2l0
L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5jcHA6IEFkZGVkLgorICAgICAgICAod2Via2l0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY2xhc3NfaW5pdCk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19pbml0KToKKyAgICAgICAgKHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dl
dF9wcm9wZXJ0eSk6CisgICAgICAgICh3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJv
cGVydHkpOgorICAgICAgICAod2Via2l0Vmlld3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlKTogUmVj
b21wdXRlIHRoZSBvcHRpbWFsIHZpZXdwb3J0IGF0dHJpYnV0ZXMgYW5kIGVtaXQgdGhlIHZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwuCisgICAgICAgICh3ZWJraXRfdmlld3BvcnRf
YXR0cmlidXRlc19yZWNvbXB1dGUpOiBhIHB1YmxpYyBBUEkgZm9yIGNhbGxpbmcgd2Via2l0Vmll
d3BvcnRBdHRyaWJ1dGVzUmVjb21wdXRlLgorICAgICAgICAqIHdlYmtpdC93ZWJraXR2aWV3cG9y
dGF0dHJpYnV0ZXMuaDogQWRkZWQuCisgICAgICAgICogd2Via2l0L3dlYmtpdHdlYnZpZXcuY3Bw
OgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2dldF9wcm9wZXJ0eSk6IEFkZGVkIFBST1BfVklF
V1BPUlRfQVRUUklCVVRFUy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19kaXNwb3NlKTogRGVh
bGxvY2F0ZSB0aGUgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlLgorICAgICAgICAo
d2Via2l0X3dlYl92aWV3X2NsYXNzX2luaXQpOiBBZGRlZCB0aGUgdmlld3BvcnQtYXR0cmlidXRl
cy1yZWNvbXB1dGUtcmVxdWVzdGVkIGFuZCB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2ln
bmFscy4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19pbml0KTogU2V0IHRoZSBXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXMpOiBBZGRlZCBhIGdldHRlciB0byBvYnRhaW4gdGhlIFdlYktpdFZp
ZXdwb3J0QXR0cmlidXRlcyBpbnN0YW5jZSBoZWxkIGJ5IHRoZSBnaXZlbiBXZWJLaXRXZWJWaWV3
LgorICAgICAgICAqIHdlYmtpdC93ZWJraXR3ZWJ2aWV3Lmg6CisgICAgICAgICogd2Via2l0L3dl
YmtpdHdlYnZpZXdwcml2YXRlLmg6IEFkZGVkIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBhcyBh
IHByaXZhdGUgdmFyaWFibGUuCisKIDIwMTAtMTItMDggIEd1c3Rhdm8gTm9yb25oYSBTaWx2YSAg
PGd1c3Rhdm8ubm9yb25oYUBjb2xsYWJvcmEuY28udWs+CiAKICAgICAgICAgQnVpbGQgZml4LiBU
YWtlIHdlYlZpZXd7RW50ZXIsRXhpdH1GdWxsc2NyZWVuIGJhY2sgb3V0IG9mIHRoZQpkaWZmIC0t
Z2l0IGEvV2ViS2l0L2d0ay9HTlVtYWtlZmlsZS5hbSBiL1dlYktpdC9ndGsvR05VbWFrZWZpbGUu
YW0KaW5kZXggYTg0NmY3Zi4uYWJhZGNmOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9HTlVtYWtl
ZmlsZS5hbQorKysgYi9XZWJLaXQvZ3RrL0dOVW1ha2VmaWxlLmFtCkBAIC0xMTksNiArMTE5LDcg
QEAgd2Via2l0Z3RrX3N0YXRpY19oX2FwaSArPSBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdG5ldHdvcmtyZXNwb25zZS5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0c2VjdXJpdHlvcmlnaW4uaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHNvdXBhdXRoZGlhbG9nLmggXAorCSQoc3JjZGlyKS9XZWJLaXQvZ3RrL3dlYmtpdC93
ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0
L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5oIFwKIAkkKHNyY2RpcikvV2ViS2l0L2d0ay93ZWJr
aXQvd2Via2l0d2ViZGF0YWJhc2UuaCBcCiAJJChzcmNkaXIpL1dlYktpdC9ndGsvd2Via2l0L3dl
YmtpdHdlYmRhdGFzb3VyY2UuaCBcCkBAIC0xODIsNiArMTgzLDcgQEAgd2Via2l0Z3RrX3NvdXJj
ZXMgKz0gXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBcCiAJV2ViS2l0L2d0
ay93ZWJraXQvd2Via2l0c291cGF1dGhkaWFsb2cuYyBcCiAJV2ViS2l0L2d0ay93ZWJraXQvd2Vi
a2l0dmVyc2lvbi5jcHAgXAorCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmli
dXRlcy5jcHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmJhY2tmb3J3YXJkbGlzdC5j
cHAgXAogCVdlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYmRhdGFzb3VyY2UuY3BwIFwKIAlXZWJL
aXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJmcmFtZS5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0
ay9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9DaHJvbWVDbGllbnRHdGsuY3BwCmluZGV4IDYwYzc4ODAuLmFkMjlhZjAgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmNwcAorKysg
Yi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5jcHAKQEAgLTI0LDYg
KzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnRHdGsu
aCIKIAorI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNvbnNvbGUuaCIKICNpbmNsdWRl
ICJEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC02
MTcsNiArNjE4LDEyIEBAIHZvaWQgQ2hyb21lQ2xpZW50OjpjaG9vc2VJY29uRm9yRmlsZXMoY29u
c3QgVmVjdG9yPFdURjo6U3RyaW5nPiYgZmlsZW5hbWVzLCBXZWJDCiAgICAgY2hvb3Nlci0+aWNv
bkxvYWRlZChJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoZmlsZW5hbWVzKSk7CiB9CiAKK3ZvaWQg
Q2hyb21lQ2xpZW50OjpkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBWaWV3cG9y
dEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdAoreworICAgIC8vIFJlY29tcHV0ZSB0aGUgdmll
d3BvcnQgYXR0cmlidXRlcyBtYWtpbmcgaXQgdmFsaWQuCisgICAgd2Via2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUmVjb21wdXRlKHdlYmtpdF93ZWJfdmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyht
X3dlYlZpZXcpKTsKK30KKwogdm9pZCBDaHJvbWVDbGllbnQ6OnNldEN1cnNvcihjb25zdCBDdXJz
b3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9y
dC9DaHJvbWVDbGllbnRHdGsuaAppbmRleCA4MjUyZjA2Li5iNGExYTM3IDEwMDY0NAotLS0gYS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEd0ay5oCisrKyBiL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50R3RrLmgKQEAgLTExMCw2ICsxMTAsOCBAQCBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25z
dCBXVEY6OlN0cmluZyYsIFdlYkNvcmU6OlRleHREaXJlY3Rpb24pOwogCisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaFZpZXdwb3J0RGF0YURpZENoYW5nZShjb25zdCBXZWJDb3JlOjpWaWV3
cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cHJpbnQoV2ViQ29yZTo6RnJhbWUqKTsKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoV2ViQ29yZTo6RnJhbWUqLCBjb25zdCBX
VEY6OlN0cmluZyYpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1w
UmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCmluZGV4IGI0NTVjMWEuLjkxZTVhMTEgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmNw
cAorKysgYi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0
ay5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4g
TW90aW9uIExpbWl0ZWQgMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
QEAgLTQwOCwzICs0MDksMTUgQEAgdm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGs6OmxheW91
dEZyYW1lKFdlYktpdFdlYkZyYW1lKiBmcmFtZSkKIAogICAgIHZpZXctPmxheW91dCgpOwogfQor
CisvLyBGb3IgdGVzdGluZyBmYXN0L3ZpZXdwb3J0Lgordm9pZCBEdW1wUmVuZGVyVHJlZVN1cHBv
cnRHdGs6OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoV2ViS2l0V2ViVmlldyogd2ViVmll
dywgZ2ludCBhdmFpbGFibGVXaWR0aCwgZ2ludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAgZ19y
ZXR1cm5faWZfZmFpbChXRUJLSVRfSVNfV0VCX1ZJRVcod2ViVmlldykpOworCisgICAgVmlld3Bv
cnRBcmd1bWVudHMgYXJndW1lbnRzID0gd2ViVmlldy0+cHJpdi0+Y29yZVBhZ2UtPm1haW5GcmFt
ZSgpLT5kb2N1bWVudCgpLT52aWV3cG9ydEFyZ3VtZW50cygpOworICAgIC8vIGRlc2t0b3BXaWR0
aCA9IDk4MCwgZGV2aWNlV2lkdGggPSAzMjAsIGRldmljZUhlaWdodCA9IDQ4MCwgZGV2aWNlRFBJ
ID0gMTYwCisgICAgVmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJzID0gY29tcHV0ZVZpZXdwb3J0QXR0
cmlidXRlcyhhcmd1bWVudHMsIDk4MCwgMzIwLCA0ODAsIDE2MCwgSW50U2l6ZShhdmFpbGFibGVX
aWR0aCwgYXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgInZpZXdwb3J0
IHNpemUgJWR4JWQgc2NhbGUgJWYgd2l0aCBsaW1pdHMgWyVmLCAlZl1cbiIsIGF0dHJzLmxheW91
dFNpemUud2lkdGgoKSwgYXR0cnMubGF5b3V0U2l6ZS5oZWlnaHQoKSwgYXR0cnMuaW5pdGlhbFNj
YWxlLCBhdHRycy5taW5pbXVtU2NhbGUsIGF0dHJzLm1heGltdW1TY2FsZSk7Cit9CmRpZmYgLS1n
aXQgYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5o
IGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuaApp
bmRleCA2ZGI2MjY4Li5kZDFkNDlkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0R1bXBSZW5kZXJUcmVlU3VwcG9ydEd0ay5oCisrKyBiL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrLmgKQEAgLTIxLDYgKzIxLDcgQEAKIAogCiAj
aW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5o
PgogCiAjaW5jbHVkZSA8YXRrL2F0ay5oPgogI2luY2x1ZGUgPGdsaWIuaD4KQEAgLTQwLDYgKzQx
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldExpbmtzSW5jbHVkZWRJbkZvY3VzQ2hh
aW4oYm9vbCk7CiAgICAgc3RhdGljIGJvb2wgbGlua3NJbmNsdWRlZEluRm9jdXNDaGFpbigpOwog
ICAgIHN0YXRpYyBKU1ZhbHVlUmVmIG5vZGVzRnJvbVJlY3QoSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTVmFsdWVSZWYgdmFsdWUsIGludCB4LCBpbnQgeSwgdW5zaWduZWQgdG9wLCB1bnNpZ25lZCBy
aWdodCwgdW5zaWduZWQgYm90dG9tLCB1bnNpZ25lZCBsZWZ0LCBib29sIGlnbm9yZUNsaXBwaW5n
KTsKKyAgICBzdGF0aWMgdm9pZCBkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KFdlYktpdFdl
YlZpZXcqIHdlYlZpZXcsIGdpbnQgYXZhaWxhYmxlV2lkdGgsIGdpbnQgYXZhaWxhYmxlSGVpZ2h0
KTsKIAogICAgIC8vIEZJWE1FOiBNb3ZlIHRoZXNlIHRvIHdlYmtpdHdlYmZyYW1lLmggb25jZSB0
aGVpciBBUEkgaGFzIGJlZW4gZGlzY3Vzc2VkLgogICAgIHN0YXRpYyBHU0xpc3QqIGdldEZyYW1l
Q2hpbGRyZW4oV2ViS2l0V2ViRnJhbWUqIGZyYW1lKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
V2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRHdGsuY3BwIGIvV2ViS2l0L2d0ay9XZWJD
b3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEd0ay5jcHAKaW5kZXggNjgzNDk0OS4uNWMxMmM2
OSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKKysrIGIvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEd0ay5jcHAKQEAgLTEyOTIsNiArMTI5MiwxMiBAQCBzdGF0aWMgdm9pZCBwb3N0Q29tbWl0RnJh
bWVWaWV3U2V0dXAoV2ViS2l0V2ViRnJhbWUgKmZyYW1lLCBGcmFtZVZpZXcgKnZpZXcsIGJvbwog
ICAgIFdlYktpdFdlYlZpZXdQcml2YXRlKiBwcml2ID0gV0VCS0lUX1dFQl9WSUVXX0dFVF9QUklW
QVRFKGNvbnRhaW5pbmdXaW5kb3cpOwogICAgIHZpZXctPnNldEd0a0FkanVzdG1lbnRzKHByaXYt
Pmhvcml6b250YWxBZGp1c3RtZW50LmdldCgpLCBwcml2LT52ZXJ0aWNhbEFkanVzdG1lbnQuZ2V0
KCksIHJlc2V0VmFsdWVzKTsKIAorICAgIC8vIEludmFsaWRhdGUgdGhlIHZpZXdwb3J0IGF0dHJp
YnV0ZXMgLSB0aGV5IHdpbGwgb25seSBiZSB2YWxpZAorICAgIC8vIGFnYWluIGlmIHRoZSBwYWdl
IHdlJ3JlIGJlZ2lubmluZyB0byBsb2FkIG5vdyBoYXMgYW4KKyAgICAvLyBhcHByb3ByaWF0ZSB2
aWV3cG9ydCBtZXRhIHRhZy4KKyAgICBjb250YWluaW5nV2luZG93LT5wcml2LT52aWV3cG9ydEF0
dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQgPSBGQUxTRTsKKyAgICBnX29iamVjdF9ub3RpZnkoR19P
QkpFQ1QoY29udGFpbmluZ1dpbmRvdy0+cHJpdi0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpKSwg
InZhbGlkIik7CisKICAgICBpZiAocHJpdi0+Y3VycmVudE1lbnUpIHsKICAgICAgICAgUGxhdGZv
cm1SZWZQdHI8R3RrTWVudT4gbWVudShwcml2LT5jdXJyZW50TWVudSk7CiAgICAgICAgIHByaXYt
PmN1cnJlbnRNZW51LmNsZWFyKCk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJr
aXQuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCmluZGV4IGZjNzFjMmMuLjI0MjhmNjIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdC5oCisrKyBiL1dlYktpdC9ndGsv
d2Via2l0L3dlYmtpdC5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtp
dG5ldHdvcmtyZXF1ZXN0Lmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdG5ldHdvcmtyZXNwb25z
ZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXRzb3VwYXV0aGRpYWxvZy5oPgorI2luY2x1ZGUg
PHdlYmtpdC93ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXMuaD4KICNpbmNsdWRlIDx3ZWJraXQvd2Vi
a2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJmcmFtZS5oPgog
I2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3ZWJzZXR0aW5ncy5oPgpkaWZmIC0tZ2l0IGEvV2ViS2l0
L2d0ay93ZWJraXQvd2Via2l0ZGVmaW5lcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0ZGVm
aW5lcy5oCmluZGV4IGIwNmEzYmYuLjM5OWNiNGMgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Vi
a2l0L3dlYmtpdGRlZmluZXMuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXRkZWZpbmVz
LmgKQEAgLTkyLDYgKzkyLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEhpdFRlc3RSZXN1bHRD
bGFzcyBXZWJLaXRIaXRUZXN0UmVzdWx0Q2xhc3M7CiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0R2Vv
bG9jYXRpb25Qb2xpY3lEZWNpc2lvbiBXZWJLaXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uOwog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEdlb2xvY2F0aW9uUG9saWN5RGVjaXNpb25DbGFzcyBXZWJL
aXRHZW9sb2NhdGlvblBvbGljeURlY2lzaW9uQ2xhc3M7CiAKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRWaWV3cG9ydEF0dHJpYnV0ZXMgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzOwordHlwZWRlZiBz
dHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzIFdlYktpdFZpZXdwb3J0QXR0cmli
dXRlc0NsYXNzOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9n
dGsvd2Via2l0L3dlYmtpdHByaXZhdGUuaCBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHByaXZh
dGUuaAppbmRleCA0ODg5YTE1Li4wODM2NDBkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXRwcml2YXRlLmgKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0cHJpdmF0ZS5o
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdGRvd25sb2FkLmg+CiAj
aW5jbHVkZSA8d2Via2l0L3dlYmtpdGhpdHRlc3RyZXN1bHQuaD4KICNpbmNsdWRlIDx3ZWJraXQv
d2Via2l0bmV0d29ya3JlcXVlc3QuaD4KKyNpbmNsdWRlIDx3ZWJraXQvd2Via2l0dmlld3BvcnRh
dHRyaWJ1dGVzLmg+CiAjaW5jbHVkZSA8d2Via2l0L3dlYmtpdHdlYnZpZXcuaD4KICNpbmNsdWRl
IDx3ZWJraXQvd2Via2l0d2ViZGF0YXNvdXJjZS5oPgogI2luY2x1ZGUgPHdlYmtpdC93ZWJraXR3
ZWJmcmFtZS5oPgpAQCAtMTQxLDYgKzE0MiwyNSBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgZ2Jv
b2xlYW4gZGlzcG9zZWQ7CiAgICAgfTsKIAorICAgIHN0cnVjdCBfV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzUHJpdmF0ZSB7CisgICAgICAgIFdlYktpdFdlYlZpZXcqIHdlYlZpZXc7CisgICAgICAg
IGludCBkZXZpY2VXaWR0aDsKKyAgICAgICAgaW50IGRldmljZUhlaWdodDsKKyAgICAgICAgaW50
IGF2YWlsYWJsZVdpZHRoOworICAgICAgICBpbnQgYXZhaWxhYmxlSGVpZ2h0OworICAgICAgICBp
bnQgZGVza3RvcFdpZHRoOworICAgICAgICBpbnQgZGV2aWNlRFBJOworCisgICAgICAgIGludCB3
aWR0aDsKKyAgICAgICAgaW50IGhlaWdodDsKKyAgICAgICAgZmxvYXQgaW5pdGlhbFNjYWxlRmFj
dG9yOworICAgICAgICBmbG9hdCBtaW5pbXVtU2NhbGVGYWN0b3I7CisgICAgICAgIGZsb2F0IG1h
eGltdW1TY2FsZUZhY3RvcjsKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAg
ICAgZ2Jvb2xlYW4gdXNlclNjYWxhYmxlOworICAgICAgICBnYm9vbGVhbiBpc1ZhbGlkOworICAg
IH07CisKICAgICBXVEY6OlN0cmluZwogICAgIHdlYmtpdFVzZXJBZ2VudCgpOwogCkBAIC0yNDks
NiArMjY5LDkgQEAgZXh0ZXJuICJDIiB7CiAKICAgICBXRUJLSVRfQVBJIFdlYktpdFdlYkRhdGFi
YXNlICoKICAgICB3ZWJraXRfc2VjdXJpdHlfb3JpZ2luX2dldF93ZWJfZGF0YWJhc2UoV2ViS2l0
U2VjdXJpdHlPcmlnaW4qIHNlY3VyaXR5T3JpZ2luLCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUp
OworCisgICAgLy8gV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHByaXZhdGUKKyAgICB2b2lkIHdl
YmtpdFZpZXdwb3J0QXR0cmlidXRlc1JlY29tcHV0ZShXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMq
KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR2aWV3
cG9ydGF0dHJpYnV0ZXMuY3BwIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRy
aWJ1dGVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTA4ODQzCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1
dGVzLmNwcApAQCAtMCwwICsxLDU3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb29u
ZSBIdXIgPGpvb25lQGtsZHAub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDEwIENvbGxhYm9yYSBM
dGQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJ3ZWJraXR2aWV3cG9ydGF0dHJpYnV0
ZXMuaCIKKworI2luY2x1ZGUgIkNocm9tZS5oIgorI2luY2x1ZGUgIndlYmtpdHByaXZhdGUuaCIK
KyNpbmNsdWRlICJ3ZWJraXR3ZWJ2aWV3cHJpdmF0ZS5oIgorCisjaW5jbHVkZSA8Z2xpYi9naTE4
bi1saWIuaD4KKworLyoqCisgKiBTRUNUSU9OOndlYmtpdHZpZXdwb3J0YXR0cmlidXRlcworICog
QHNob3J0X2Rlc2NyaXB0aW9uOiBSZXByZXNlbnRzIHRoZSB2aWV3cG9ydCBwcm9wZXJ0aWVzIG9m
IGEgd2ViIHBhZ2UKKyAqIEBzZWVfYWxzbzogI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJp
YnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZAorICogQHNlZV9hbHNvOiAjV2ViS2l0V2ViVmlldzo6
dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkCisgKgorICogI1dlYktpdFZpZXdwb3J0QXR0cmli
dXRlcyBvZmZlcnMgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMgdG8gdXNlciBhZ2VudHMgdG8KKyAq
IGNvbnRyb2wgdGhlIHZpZXdwb3J0IGxheW91dC4gSXQgY29udGFpbnMgdGhlIHZpZXdwb3J0IHNp
emUsIGluaXRpYWwgc2NhbGUgd2l0aCBsaW1pdHMsCisgKiBhbmQgaW5mb3JtYXRpb24gYWJvdXQg
d2hldGhlciBhIHVzZXIgaXMgYWJsZSB0byBzY2FsZSB0aGUgY29udGVudHMgaW4gdGhlIHZpZXdw
b3J0LgorICogVGhpcyBtYWtlcyBhIHdlYiBwYWdlIGZpdCB0aGUgZGV2aWNlIHNjcmVlbi4KKyAq
CisgKiBUaGUgI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWdu
YWwgd2lsbCBiZSBlbWl0dGVkIHdpdGggI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcworICogd2hl
biB0aGUgdmlld3BvcnQgYXR0cmlidXRlcyBhcmUgdXBkYXRlZCBpbiB0aGUgY2FzZSBvZiBsb2Fk
aW5nIHdlYiBwYWdlcyBjb250YWluCisgKiB0aGUgdmlld3BvcnQgcHJvcGVydGllcyBhbmQgY2Fs
bGluZyB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGUuCisgKgorICogSWYgdGhl
IGRldmljZSBzaXplLCBhdmFpbGFibGUgc2l6ZSwgZGVza3RvcCB3aWR0aCwgb3IgZGV2aWNlIERQ
SSBuZWVkcyB0byBiZSBjaGFuZ2VkIGR1ZSB0byAKKyAqIGEgY29uc2VxdWVuY2Ugb2YgYW4gZXhw
bGljaXQgYnJvd3NlciByZXF1ZXN0IChjYXVzZWQgYnkgc2NyZWVuIHJvdGF0aW9uLCByZXNpemlu
Zywgb3Igc2ltaWxhciByZWFzb25zKSwKKyAqIFlvdSBzaG91bGQgY2FsbCAjd2Via2l0X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlIHRvIHJlY29tcHV0ZSB0aGUgdmlld3BvcnQgcHJvcGVy
dGllcyBhbmQgCisgKiBvdmVycmlkZSB0aG9zZSB2YWx1ZXMgaW4gdGhlIGhhbmRsZXIgb2YgI1dl
YktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCBzaWdu
YWwuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIHZpZXdwb3J0IHByb3BlcnRp
ZXMsIHJlZmVyIHRvIHRoZSBTYWZhcmkgcmVmZXJlbmNlIGxpYnJhcnkgYXQKKyAqIGh0dHA6Ly9k
ZXZlbG9wZXIuYXBwbGUuY29tL3NhZmFyaS9saWJyYXJ5L2RvY3VtZW50YXRpb24vYXBwbGVhcHBs
aWNhdGlvbnMvcmVmZXJlbmNlL3NhZmFyaWh0bWxyZWYvYXJ0aWNsZXMvbWV0YXRhZ3MuaHRtbAor
ICoKKyAqIDxpbmZvcm1hbGV4YW1wbGU+PHByb2dyYW1saXN0aW5nPgorICogLzwhLS0gLS0+KiBD
b25uZWN0IHRvIHRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZXMgc2lnbmFsICo8IS0tIC0t
Pi8KKyAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlcyogYXR0cmlidXRlcyA9IHdlYmtpdF93ZWJf
dmlld19nZXRfdmlld3BvcnRfYXR0cmlidXRlcyAod2ViX3ZpZXcpOworICogZ19zaWduYWxfY29u
bmVjdCAod2ViX3ZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQi
LCBHX0NBTExCQUNLICh2aWV3cG9ydF9yZWNvbXB1dGVfY2IpLCB3aW5kb3cpOworICogZ19zaWdu
YWxfY29ubmVjdCAod2ViX3ZpZXcsICJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQiLCBHX0NB
TExCQUNLICh2aWV3cG9ydF9jaGFuZ2VkX2NiKSwgd2luZG93KTsKKyAqIGdfc2lnbmFsX2Nvbm5l
Y3QgKGF0dHJpYnV0ZXMsICJub3RpZnk6OnZhbGlkIiwgR19DQUxMQkFDSyAodmlld3BvcnRfdmFs
aWRfY2hhbmdlZF9jYiksIHdlYl92aWV3KTsKKyAqCisgKiAvPCEtLSAtLT4qIEhhbmRsZSB0aGUg
dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIHNpZ25hbCB0byBvdmVycmlk
ZSB0aGUgZGV2aWNlIHdpZHRoICo8IS0tIC0tPi8KKyAqIHN0YXRpYyB2b2lkCisgKiB2aWV3cG9y
dF9yZWNvbXB1dGVfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMqIGF0dHJpYnV0ZXMsIEd0a1dpZGdldCogd2luZG93KQorICogeworICogICAgIGlu
dCBvdmVycmlkZV9hdmFpbGFibGVfd2lkdGggPSA0ODA7CisgKiAgICAgZ19vYmplY3Rfc2V0IChH
X09CSkVDVChhdHRyaWJ1dGVzKSwgImF2YWlsYWJsZS13aWR0aCIsIG92ZXJyaWRlX2F2YWlsYWJs
ZV93aWR0aCwgTlVMTCk7CisgKiB9CisgKgorICogLzwhLS0gLS0+KiBIYW5kbGUgdGhlIHZpZXdw
b3J0LWF0dHJpYnV0ZXMtY2hhbmdlZCBzaWduYWwgdG8gcmVjb21wdXRlIHRoZSBpbml0aWFsIHNj
YWxlIGZhY3RvciAqPCEtLSAtLT4vCisgKiBzdGF0aWMgdm9pZCAKKyAqIHZpZXdwb3J0X2NoYW5n
ZWRfY2IgKFdlYktpdFdlYlZpZXcqIHdlYl92aWV3LCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMq
IGF0dHJpYnV0ZXMsIGdwb2ludGVyIGRhdGEpCisgKiB7CisgKiAgICAgZ2Zsb2F0IGluaXRpYWxT
Y2FsZTsKKyAqICAgICBnX29iamVjdF9nZXQgKEdfT0JKRUNUIChhdHJpYnV0ZXMpLCAiaW5pdGlh
bC1zY2FsZS1mYWN0b3IiLCAmaW5pdGlhbFNjYWxlLCBOVUxMKTsKKyAqICAgICB3ZWJraXRfd2Vi
X3ZpZXdfc2V0X3pvb21fbGV2ZWwgKHdlYl92aWV3LCBpbml0aWFsU2NhbGUpOworICogfQorICog
CisgKiAvPCEtLSAtLT4qIEhhbmRsZSB0aGUgbm90aWZ5Ojp2YWxpZCBzaWduYWwgdG8gaW5pdGlh
bGl6ZSB0aGUgem9vbSBsZXZlbCAqPCEtLSAtLT4vCisgKiBzdGF0aWMgdm9pZAorICogdmlld3Bv
cnRfdmFsaWRfY2hhbmdlZF9jYiAoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiBhdHRyaWJ1dGVz
LCBHUGFyYW1TcGVjKiBwc3BlYywgV2ViS2l0V2ViVmlldyogd2ViX3ZpZXcpCisgKiB7CisgKiAg
ICAgZ2Jvb2xlYW4gaXNfdmFsaWQ7CisgKiAgICAgZ19vYmplY3RfZ2V0IChhdHRyaWJ1dGVzLCAi
dmFsaWQiLCAmaXNfdmFsaWQsIE5VTEwpOworICogICAgIGlmICghaXNfdmFsaWQpIAorICogICAg
ICAgICB3ZWJraXRfd2ViX3ZpZXdfc2V0X3pvb21fbGV2ZWwgKHdlYl92aWV3LCAxLjApOworICog
fQorICogPC9wcm9ncmFtbGlzdGluZz48L2luZm9ybWFsZXhhbXBsZT4KKyAqLworCit1c2luZyBu
YW1lc3BhY2UgV2ViS2l0OwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK2VudW0geworICAg
IFBST1BfMCwKKworICAgIFBST1BfREVWSUNFX1dJRFRILAorICAgIFBST1BfREVWSUNFX0hFSUdI
VCwKKyAgICBQUk9QX0FWQUlMQUJMRV9XSURUSCwKKyAgICBQUk9QX0FWQUlMQUJMRV9IRUlHSFQs
CisgICAgUFJPUF9ERVNLVE9QX1dJRFRILAorICAgIFBST1BfREVWSUNFX0RQSSwKKyAgICBQUk9Q
X1dJRFRILAorICAgIFBST1BfSEVJR0hULAorICAgIFBST1BfSU5JVElBTF9TQ0FMRV9GQUNUT1Is
CisgICAgUFJPUF9NSU5JTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICBQUk9QX01BWElNVU1fU0NBTEVf
RkFDVE9SLAorICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAorICAgIFBST1BfVVNFUl9TQ0FM
QUJMRSwKKyAgICBQUk9QX1ZBTElECit9OworCitHX0RFRklORV9UWVBFKFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlcywgd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXMsIEdfVFlQRV9PQkpFQ1QpOwor
CisjZGVmaW5lIFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTX0dFVF9QUklWQVRFKG9iaikgICAg
KEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX1RZUEVfVklFV1BPUlRf
QVRUUklCVVRFUywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSkpCisKK3N0YXRpYyB2
b2lkIHdlYmtpdF92aWV3cG9ydF9hdHRyaWJ1dGVzX2dldF9wcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BlcnR5SUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBhcmFtU3Bl
Yyk7CitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRfcHJvcGVydHko
R09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUqIHZhbHVlLCBH
UGFyYW1TcGVjKiBwYXJhbVNwZWMpOworCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0
cmlidXRlc19jbGFzc19pbml0KFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc0NsYXNzKiBrY2xhc3Mp
Cit7CisgICAgR09iamVjdENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyhrY2xh
c3MpOworICAgIGdvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gd2Via2l0X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfZ2V0X3Byb3BlcnR5OworICAgIGdvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0g
d2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0X3Byb3BlcnR5OworCisgICAgLyoqCisgICAg
ICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6ZGV2aWNlLXdpZHRoOgorICAgICAqCisgICAgICog
VGhlIHdpZHRoIG9mIHRoZSBzY3JlZW4uIFRoaXMgdmFsdWUgaXMgYWx3YXlzIGF1dG9tYXRpY2Fs
bHkKKyAgICAgKiBwcmUtY29tcHV0ZWQgZHVyaW5nIGEgdmlld3BvcnQgYXR0cmlidXRlcyByZWNv
bXB1dGF0aW9uLCBhbmQKKyAgICAgKiBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgaGFuZGxlciBv
ZgorICAgICAqIFdlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJl
cXVlc3RlZC4gWW91CisgICAgICogc2hvdWxkIG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBh
IHZlcnkgZ29vZCByZWFzb24uCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX1dJRFRILAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZpY2Utd2lkdGgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiRGV2aWNlIFdpZHRoIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHNjcmVlbi4iKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
czpkZXZpY2UtaGVpZ2h0OgorICAgICAqCisgICAgICogVGhlIGhlaWdodCBvZiB0aGUgc2NyZWVu
LiBUaGlzIHZhbHVlIGlzIGFsd2F5cyBhdXRvbWF0aWNhbGx5CisgICAgICogcHJlLWNvbXB1dGVk
IGR1cmluZyBhIHZpZXdwb3J0IGF0dHJpYnV0ZXMgcmVjb21wdXRhdGlvbiwgYW5kCisgICAgICog
Y2FuIGJlIG92ZXJyaWRlbiBieSB0aGUgaGFuZGxlciBvZgorICAgICAqIFdlYktpdFdlYlZpZXc6
OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZC4gWW91CisgICAgICogc2hv
dWxkIG5vdCBkbyB0aGF0IHVubGVzcyB5b3UgaGF2ZSBhIHZlcnkgZ29vZCByZWFzb24uCisgICAg
ICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0
YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFBST1BfREVWSUNFX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZGV2aWNlLWhlaWdodCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJEZXZpY2UgSGVpZ2h0IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfKCJUaGUgaGVpZ2h0IG9mIHRoZSBzY3JlZW4uIiksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19N
QVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOworCisg
ICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6YXZhaWxhYmxlLXdpZHRoOgor
ICAgICAqCisgICAgICogVGhlIHdpZHRoIG9mIHRoZSBjdXJyZW50IHZpc2libGUgYXJlYS4gVGhp
cyB3aWxsIHVzdWFsbHkgYmUgdGhlCisgICAgICogc2FtZSBhcyB0aGUgc3BhY2UgYWxsb2NhdGVk
IHRvIHRoZSB3aWRnZXQsIGJ1dCBpbiBzb21lIGNhc2VzCisgICAgICogeW91IG1heSBoYXZlIGRl
Y2lkZWQgdG8gbWFrZSB0aGUgd2lkZ2V0IGJpZ2dlciB0aGFuIHRoZSB2aXNpYmxlCisgICAgICog
YXJlYS4gVGhpcyB2YWx1ZSBpcyBieSBkZWZhdWx0IGluaXRpYWxpemVkIHRvIHRoZSBzaXplCisg
ICAgICogYWxsb2NhdGVkIGJ5IHRoZSB3aWRnZXQsIGJ1dCB5b3UgY2FuIG92ZXJyaWRlIGl0IGlu
IHRoZSBoYW5kbGVyCisgICAgICogb2YgV2ViS2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRl
cy1yZWNvbXB1dGUtcmVxdWVzdGVkIHRvCisgICAgICogbGV0IHRoZSBlbmdpbmUga25vdyB3aGF0
IHRoZSB2aXNpYmxlIGFyZWEgaXMuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfQVZBSUxBQkxFX1dJRFRILAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2ludCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdmFpbGFibGUtd2lkdGgiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiQXZhaWxhYmxlIFdpZHRoIiksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgd2lkdGggb2YgdGhlIHZp
c2libGUgYXJlYS4iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWElOVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXRUJLSVRfUEFSQU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJL
aXRWaWV3cG9ydEF0dHJpYnV0czphdmFpbGFibGUtaGVpZ2h0OgorICAgICAqCisgICAgICogVGhl
IGhlaWdodCBvZiB0aGUgY3VycmVudCB2aXNpYmxlIGFyZWEuIFRoaXMgd2lsbCB1c3VhbGx5IGJl
IHRoZQorICAgICAqIHNhbWUgYXMgdGhlIHNwYWNlIGFsbG9jYXRlZCB0byB0aGUgd2lkZ2V0LCBi
dXQgaW4gc29tZSBjYXNlcworICAgICAqIHlvdSBtYXkgaGF2ZSBkZWNpZGVkIHRvIG1ha2UgdGhl
IHdpZGdldCBiaWdnZXIgdGhhbiB0aGUgdmlzaWJsZQorICAgICAqIGFyZWEuIFRoaXMgdmFsdWUg
aXMgYnkgZGVmYXVsdCBpbml0aWFsaXplZCB0byB0aGUgc2l6ZQorICAgICAqIGFsbG9jYXRlZCBi
eSB0aGUgd2lkZ2V0LCBidXQgeW91IGNhbiBvdmVycmlkZSBpdCBpbiB0aGUgaGFuZGxlcgorICAg
ICAqIG9mIFdlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVl
c3RlZCB0bworICAgICAqIGxldCB0aGUgZW5naW5lIGtub3cgd2hhdCB0aGUgdmlzaWJsZSBhcmVh
IGlzLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3Rf
Y2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBQUk9QX0FWQUlMQUJMRV9IRUlHSFQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImF2YWlsYWJsZS1oZWlnaHQiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXygiQXZhaWxhYmxlIEhlaWdodCIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgdmlzaWJsZSBhcmVhLiIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJ
VF9QQVJBTV9SRUFEV1JJVEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0
cmlidXRzOmRlc2t0b3Atd2lkdGg6CisgICAgICoKKyAgICAgKiBUaGUgd2lkdGggb2Ygdmlld3Bv
cnQgdGhhdCB3b3JrcyB3ZWxsIGZvciBtb3N0IHdlYiBwYWdlcyBkZXNpZ25lZCBmb3IgCisgICAg
ICogZGVza3RvcC4gVGhpcyB2YWx1ZSBpcyBpbml0aWFsaXplZCB0byA5ODAgcGl4ZWxzIGJ5IGRl
ZmF1bHQgYW5kIHVzZWQgCisgICAgICogZHVyaW5nIGEgdmlld3BvcnQgYXR0cmlidXRlcyByZWNv
bXB1dGF0aW9uLiBBbHNvLCBpdCBjYW4gYmUgb3ZlcnJpZGVuIGJ5IAorICAgICAqIHRoZSBoYW5k
bGVyIG9mIFdlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVl
c3RlZC4gCisgICAgICogWW91IHNob3VsZCBub3QgZG8gdGhhdCB1bmxlc3MgeW91IGhhdmUgYSB2
ZXJ5IGdvb2QgcmVhc29uLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisg
ICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0RFU0tUT1BfV0lEVEgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfaW50KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2t0b3Atd2lkdGgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiRGVza3RvcCBXaWR0aCIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhlIHdpZHRoIG9mIHZpZXdwb3J0IHRoYXQgd29y
a3Mgd2VsbCBmb3IgbW9zdCB3ZWIgcGFnZXMgZGVzaWduZWQgZm9yIGRlc2t0b3AuIiksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA5ODAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFS
QU1fUkVBRFdSSVRFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0
czpkZXZpY2UtZHBpOgorICAgICAqCisgICAgICogVGhlIG51bWJlciBvZiBkb3RzIHBlciBpbmNo
IG9mIHRoZSBzY3JlZW4uIFRoaXMgdmFsdWUgaXMgCisgICAgICogaW5pdGlhbGl6ZWQgdG8gMTYw
IGRwaSBieSBkZWZhdWx0IGFuZCB1c2VkIGR1cmluZyBhIHZpZXdwb3J0IAorICAgICAqIGF0dHJp
YnV0ZXMgcmVjb21wdXRhdGlvbiwgYmVjYXVzZSBpdCBpcyB0aGUgZHBpIG9mIHRoZSBvcmlnaW5h
bCAKKyAgICAgKiBpUGhvbmUgYW5kIEFuZHJvaWQgZGV2aWNlcy4gQWxzbywgaXQgY2FuIGJlIG92
ZXJyaWRlbiBieSB0aGUgCisgICAgICogaGFuZGxlciBvZiBXZWJLaXRXZWJWaWV3Ojp2aWV3cG9y
dC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQuIAorICAgICAqIFlvdSBzaG91bGQgbm90
IGRvIHRoYXQgdW5sZXNzIHlvdSBoYXZlIGEgdmVyeSBnb29kIHJlYXNvbi4KKyAgICAgKgorICAg
ICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UFJPUF9ERVZJQ0VfRFBJLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19w
YXJhbV9zcGVjX2ludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXZp
Y2UtZHBpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIkRldmljZSBE
UEkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBudW1iZXIg
b2YgZG90cyBwZXIgaW5jaCBvZiB0aGUgc2NyZWVuLiIpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdf
TUFYSU5ULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURXUklURSkpOwor
CisgICAgLyoqCisgICAgICogV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dHM6d2lkdGg6CisgICAgICoK
KyAgICAgKiBUaGUgd2lkdGggb2YgdGhlIHZpZXdwb3J0LiBCZWZvcmUgZ2V0dGluZyB0aGlzIHBy
b3BlcnR5LCAKKyAgICAgKiB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAjV2ViS2l0Vmlld3Bv
cnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqIAorICAgICAqIFNpbmNlOiAxLjMuOAorICAg
ICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPUF9XSURUSCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGgiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygiV2lkdGgiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlRoZSB3aWR0aCBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czpoZWlnaHQ6CisgICAg
ICoKKyAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB2aWV3cG9ydC4gQmVmb3JlIGdldHRpbmcgdGhp
cyBwcm9wZXJ0eSwKKyAgICAgKiB5b3UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCAjV2ViS2l0Vmll
d3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAgICAqCisgICAgICogU2luY2U6IDEuMy44Cisg
ICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9QX0hFSUdIVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19pbnQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVpZ2h0IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkhlaWdodCIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXygiVGhlIGhlaWdodCBvZiB0aGUgdmlld3BvcnQuIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR19NQVhJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURB
QkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czppbml0aWFs
LXNjYWxlLWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBpbml0aWFsIHNjYWxlIG9mIHRoZSB2
aWV3cG9ydC4gQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwKKyAgICAgKiB5b3UgbmVlZCB0
byBtYWtlIHN1cmUgdGhhdCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGlzIHZhbGlkLgorICAg
ICAqCisgICAgICogU2luY2U6IDEuMy44CisgICAgICovCisgICAgZ19vYmplY3RfY2xhc3NfaW5z
dGFsbF9wcm9wZXJ0eShnb2JqZWN0Q2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9SLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImluaXRpYWwtc2NhbGUtZmFjdG9yIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF8oIkluaXRpYWwgU2NhbGUgRmFjdG9yIiksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJUaGUgaW5pdGlhbCBzY2FsZSBvZiB0aGUgdmll
d3BvcnQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAtMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAgLyoqCisgICAgICogV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dHM6bWluaW11bS1zY2FsZS1mYWN0b3I6CisgICAgICoKKyAgICAgKiBU
aGUgbWluaW11bSBzY2FsZSBvZiB0aGUgdmlld3BvcnQuIEJlZm9yZSBnZXR0aW5nIHRoaXMgcHJv
cGVydHksIAorICAgICAqIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0ICNXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAg
Ki8KKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfTUlOSU1VTV9TQ0FMRV9GQUNU
T1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3BhcmFtX3NwZWNfZmxv
YXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWluaW11bS1zY2FsZS1m
YWN0b3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiTWluaW11bSBT
Y2FsZSBGYWN0b3IiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRo
ZSBtaW5pbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9ydC4iKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0czptYXhpbXVtLXNjYWxl
LWZhY3RvcjoKKyAgICAgKgorICAgICAqIFRoZSBtYXhpbXVtIHNjYWxlIG9mIHRoZSB2aWV3cG9y
dC4gQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgCisgICAgICogeW91IG5lZWQgdG8gbWFr
ZSBzdXJlIHRoYXQgI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBpcyB2YWxpZC4KKyAgICAgKgor
ICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUFJPUF9NQVhJTVVNX1NDQUxFX0ZBQ1RPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdfcGFyYW1fc3BlY19mbG9hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJtYXhpbXVtLXNjYWxlLWZhY3RvciIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfKCJNYXhpbXVtIFNjYWxlIEZhY3RvciIpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXygiVGhlIG1heGltdW0gc2NhbGUgb2YgdGhlIHZpZXdwb3J0
LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKworICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdw
b3J0QXR0cmlidXRzOmRldmljZS1waXhlbC1yYXRpbzoKKyAgICAgKgorICAgICAqIFRoZSBkZXZp
Y2UgcGl4ZWwgcmF0aW8gb2YgdGhlIHZpZXdwb3J0LiBCZWZvcmUgZ2V0dGluZyB0aGlzIHByb3Bl
cnR5LAorICAgICAqIHlvdSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0ICNXZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXMgaXMgdmFsaWQuCisgICAgICoKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8K
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KGdvYmplY3RDbGFzcywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1BfREVWSUNFX1BJWEVMX1JBVElPLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Zsb2F0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRldmljZS1waXhlbC1yYXRpbyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXZpY2UgUGl4ZWwgUmF0
aW8iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlRoZSBkZXZpY2Ug
cGl4ZWwgcmF0aW8gb2YgdGhlIHZpZXdwb3J0LiIpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01B
WEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVBREFCTEUpKTsKKwor
ICAgIC8qKgorICAgICAqIFdlYktpdFZpZXdwb3J0QXR0cmlidXRzOnVzZXItc2NhbGFibGU6Cisg
ICAgICoKKyAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGNhbiB6b29t
IGluIGFuZCBvdXQuCisgICAgICogQmVmb3JlIGdldHRpbmcgdGhpcyBwcm9wZXJ0eSwgeW91IG5l
ZWQgdG8gbWFrZSBzdXJlIHRoYXQgCisgICAgICogI1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyBp
cyB2YWxpZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9VU0VSX1NDQUxBQkxFLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX2Jvb2xlYW4oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJ1c2VyLXNjYWxhYmxlIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJVc2VyIFNjYWxhYmxlIiksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfKCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSB1
c2VyIGNhbiB6b29tIGluIGFuZCBvdXQuIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lU
X1BBUkFNX1JFQURBQkxFKSk7CisKKyAgICAvKioKKyAgICAgKiBXZWJLaXRWaWV3cG9ydEF0dHJp
YnV0czp2YWxpZDoKKyAgICAgKgorICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgdGhl
IGF0dHJpYnV0ZXMgYXJlIHZhbGlkLiAKKyAgICAgKiAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVz
IGFyZSBvbmx5IHZhbGlkIG9uIHBhZ2VzIAorICAgICAqIHdoaWNoIGhhdmUgYSB2aWV3cG9ydCBt
ZXRhIHRhZywgYW5kIGhhdmUgYWxyZWFkeSAKKyAgICAgKiBoYWQgdGhlIGF0dHJpYnV0ZXMgY2Fs
Y3VsYXRlZC4KKyAgICAgKgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkoZ29iamVjdENsYXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUFJPUF9WQUxJRCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGdfcGFyYW1fc3BlY19ib29sZWFuKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXygidmFsaWQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF8oIlZhbGlkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
KCJEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZSBhdHRyaWJ1dGVzIGFyZSB2YWxpZCwgYW5k
IGNhbiBiZSB1c2VkLiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRkFM
U0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUJLSVRfUEFSQU1fUkVB
REFCTEUpKTsKKworICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrY2xhc3MsIHNpemVvZihX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2YXRlKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtp
dF92aWV3cG9ydF9hdHRyaWJ1dGVzX2luaXQoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3
cG9ydCkKK3sKKyAgICB2aWV3cG9ydC0+cHJpdiA9IFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVT
X0dFVF9QUklWQVRFKHZpZXdwb3J0KTsKKworICAgIHZpZXdwb3J0LT5wcml2LT5kZXZpY2VXaWR0
aCA9IDA7CisgICAgdmlld3BvcnQtPnByaXYtPmRldmljZUhlaWdodCA9IDA7CisgICAgdmlld3Bv
cnQtPnByaXYtPmF2YWlsYWJsZVdpZHRoID0gMDsKKyAgICB2aWV3cG9ydC0+cHJpdi0+YXZhaWxh
YmxlSGVpZ2h0ID0gMDsKKyAgICB2aWV3cG9ydC0+cHJpdi0+ZGVza3RvcFdpZHRoID0gOTgwOyAv
LyBUaGlzIHZhbHVlIHdvcmtzIHdlbGwgZm9yIG1vc3Qgd2ViIHBhZ2VzIGRlc2lnbmVkIGZvciBk
ZXNrdG9wIGJyb3dzZXJzLgorICAgIHZpZXdwb3J0LT5wcml2LT5kZXZpY2VEUEkgPSAxNjA7IC8v
IEl0IGlzIHRoZSBkcGkgb2YgdGhlIG9yaWdpbmFsIGlQaG9uZSBhbmQgQW5kcm9pZCBkZXZpY2Vz
LgorICAgIHZpZXdwb3J0LT5wcml2LT53aWR0aCA9IDA7CisgICAgdmlld3BvcnQtPnByaXYtPmhl
aWdodCA9IDA7CisgICAgdmlld3BvcnQtPnByaXYtPmluaXRpYWxTY2FsZUZhY3RvciA9IC0xOwor
ICAgIHZpZXdwb3J0LT5wcml2LT5taW5pbXVtU2NhbGVGYWN0b3IgPSAtMTsKKyAgICB2aWV3cG9y
dC0+cHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yID0gLTE7CisgICAgdmlld3BvcnQtPnByaXYtPmRl
dmljZVBpeGVsUmF0aW8gPSAtMTsKKyAgICB2aWV3cG9ydC0+cHJpdi0+dXNlclNjYWxhYmxlID0g
VFJVRTsKKyAgICB2aWV3cG9ydC0+cHJpdi0+aXNWYWxpZCA9IEZBTFNFOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19nZXRfcHJvcGVydHkoR09iamVjdCogb2Jq
ZWN0LCBndWludCBwcm9wZXJ0eUlELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNw
ZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMg
PSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhvYmplY3QpOworICAgIFdlYktpdFZpZXdwb3J0
QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisKKyAg
ICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICBjYXNlIFBST1BfREVWSUNFX1dJRFRIOgorICAg
ICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmRldmljZVdpZHRoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBQUk9QX0RFVklDRV9IRUlHSFQ6CisgICAgICAgIGdfdmFsdWVfc2V0
X2ludCh2YWx1ZSwgcHJpdi0+ZGV2aWNlSGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0FWQUlMQUJMRV9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBw
cml2LT5hdmFpbGFibGVXaWR0aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJ
TEFCTEVfSEVJR0hUOgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmF2YWls
YWJsZUhlaWdodCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVNLVE9QX1dJRFRI
OgorICAgICAgICBnX3ZhbHVlX3NldF9pbnQodmFsdWUsIHByaXYtPmRlc2t0b3BXaWR0aCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0VfRFBJOgorICAgICAgICBnX3ZhbHVl
X3NldF9pbnQodmFsdWUsIHByaXYtPmRldmljZURQSSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9XSURUSDoKKyAgICAgICAgZ192YWx1ZV9zZXRfaW50KHZhbHVlLCBwcml2LT53aWR0
aCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9IRUlHSFQ6CisgICAgICAgIGdfdmFs
dWVfc2V0X2ludCh2YWx1ZSwgcHJpdi0+aGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0lOSVRJQUxfU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2
YWx1ZSwgcHJpdi0+aW5pdGlhbFNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX01JTklNVU1fU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2
YWx1ZSwgcHJpdi0+bWluaW11bVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX01BWElNVU1fU0NBTEVfRkFDVE9SOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2
YWx1ZSwgcHJpdi0+bWF4aW11bVNjYWxlRmFjdG9yKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0RFVklDRV9QSVhFTF9SQVRJTzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIHByaXYtPmRldmljZVBpeGVsUmF0aW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBS
T1BfVVNFUl9TQ0FMQUJMRToKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9vbGVhbih2YWx1ZSwgcHJp
di0+dXNlclNjYWxhYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZBTElEOgor
ICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5pc1ZhbGlkKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BS
T1BFUlRZX0lEKG9iamVjdCwgcHJvcGVydHlJRCwgcGFyYW1TcGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19zZXRf
cHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9wZXJ0eUlELCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwYXJhbVNwZWMpCit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRy
aWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMgPSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFUyhv
YmplY3QpOworICAgIFdlYktpdFZpZXdwb3J0QXR0cmlidXRlc1ByaXZhdGUqIHByaXYgPSB2aWV3
cG9ydEF0dHJpYnV0ZXMtPnByaXY7CisKKyAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICBj
YXNlIFBST1BfREVWSUNFX1dJRFRIOgorICAgICAgICBwcml2LT5kZXZpY2VXaWR0aCA9IGdfdmFs
dWVfZ2V0X2ludCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9ERVZJQ0Vf
SEVJR0hUOgorICAgICAgICBwcml2LT5kZXZpY2VIZWlnaHQgPSBnX3ZhbHVlX2dldF9pbnQodmFs
dWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfQVZBSUxBQkxFX1dJRFRIOgorICAg
ICAgICBwcml2LT5hdmFpbGFibGVXaWR0aCA9IGdfdmFsdWVfZ2V0X2ludCh2YWx1ZSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9BVkFJTEFCTEVfSEVJR0hUOgorICAgICAgICBwcml2
LT5hdmFpbGFibGVIZWlnaHQgPSBnX3ZhbHVlX2dldF9pbnQodmFsdWUpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfREVTS1RPUF9XSURUSDoKKyAgICAgICAgcHJpdi0+ZGVza3RvcFdp
ZHRoID0gZ192YWx1ZV9nZXRfaW50KHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX0RFVklDRV9EUEk6CisgICAgICAgIHByaXYtPmRldmljZURQSSA9IGdfdmFsdWVfZ2V0X2lu
dCh2YWx1ZSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNU
X1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BlcnR5SUQsIHBhcmFtU3BlYyk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0
ZXNSZWNvbXB1dGUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMp
Cit7CisgICAgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSogcHJpdiA9IHZpZXdwb3J0
QXR0cmlidXRlcy0+cHJpdjsKKyAgICBXZWJLaXRXZWJWaWV3KiB3ZWJWaWV3ID0gcHJpdi0+d2Vi
VmlldzsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+
Y2hyb21lKCktPndpbmRvd1JlY3QoKSk7CisgICAgcHJpdi0+ZGV2aWNlV2lkdGggPSB3aW5kb3dS
ZWN0LndpZHRoKCk7CisgICAgcHJpdi0+ZGV2aWNlSGVpZ2h0ID0gd2luZG93UmVjdC5oZWlnaHQo
KTsKKworICAgIEludFJlY3QgcmVjdCh3ZWJWaWV3LT5wcml2LT5jb3JlUGFnZS0+Y2hyb21lKCkt
PnBhZ2VSZWN0KCkpOworICAgIHByaXYtPmF2YWlsYWJsZVdpZHRoID0gcmVjdC53aWR0aCgpOwor
ICAgIHByaXYtPmF2YWlsYWJsZUhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7CisKKyAgICAvLyBGaXJz
dCBvZiBhbGwsIHdlIGdpdmUgdGhlIGFwcGxpY2F0aW9uIGFuIG9wcG9ydHVuaXR5IHRvIG92ZXJy
aWRlIHNvbWUgb2YgdGhlIHZhbHVlcy4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUod2ViVmll
dywgInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsIHZpZXdwb3J0QXR0
cmlidXRlcyk7CisKKyAgICBWaWV3cG9ydEFyZ3VtZW50cyBhcmd1bWVudHMgPSB3ZWJWaWV3LT5w
cml2LT5jb3JlUGFnZS0+bWFpbkZyYW1lKCktPmRvY3VtZW50KCktPnZpZXdwb3J0QXJndW1lbnRz
KCk7CisKKyAgICBWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGNvbXB1dGVWaWV3cG9y
dEF0dHJpYnV0ZXMoYXJndW1lbnRzLCBwcml2LT5kZXNrdG9wV2lkdGgsIHByaXYtPmRldmljZVdp
ZHRoLCBwcml2LT5kZXZpY2VIZWlnaHQsIHByaXYtPmRldmljZURQSSwgSW50U2l6ZShwcml2LT5h
dmFpbGFibGVXaWR0aCwgcHJpdi0+YXZhaWxhYmxlSGVpZ2h0KSk7CisKKyAgICBwcml2LT53aWR0
aCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0aCgpOworICAgIHByaXYtPmhlaWdodCA9IGF0
dHJpYnV0ZXMubGF5b3V0U2l6ZS5oZWlnaHQoKTsKKyAgICBwcml2LT5pbml0aWFsU2NhbGVGYWN0
b3IgPSBhdHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsKKyAgICBwcml2LT5taW5pbXVtU2NhbGVGYWN0
b3IgPSBhdHRyaWJ1dGVzLm1pbmltdW1TY2FsZTsKKyAgICBwcml2LT5tYXhpbXVtU2NhbGVGYWN0
b3IgPSBhdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKKyAgICBwcml2LT5kZXZpY2VQaXhlbFJhdGlv
ID0gYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOworICAgIHByaXYtPnVzZXJTY2FsYWJsZSA9
IGFyZ3VtZW50cy51c2VyU2NhbGFibGU7CisKKyAgICBpZiAoIXByaXYtPmlzVmFsaWQpIHsKKyAg
ICAgICAgcHJpdi0+aXNWYWxpZCA9IFRSVUU7CisgICAgICAgIGdfb2JqZWN0X25vdGlmeShHX09C
SkVDVCh2aWV3cG9ydEF0dHJpYnV0ZXMpLCAidmFsaWQiKTsKKyAgICB9CisKKyAgICAvLyBOb3cg
bGV0IHRoZSBhcHBsaWNhdGlvbiBrbm93IGl0IGlzIHNhZmUgdG8gdXNlIHRoZSBuZXcgdmFsdWVz
LgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSh3ZWJWaWV3LCAidmlld3BvcnQtYXR0cmlidXRl
cy1jaGFuZ2VkIiwgdmlld3BvcnRBdHRyaWJ1dGVzKTsKK30KKworLyoqCisgKiB3ZWJraXRfdmll
d3BvcnRfYXR0cmlidXRlc19yZWNvbXB1dGU6CisgKiBAdmlld3BvcnRBdHRyaWJ1dGVzOiBhICNX
ZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMKKyAqCisgKiBSZWNvbXB1dGUgdGhlIG9wdGltYWwgdmll
d3BvcnQgYXR0cmlidXRlcyBhbmQgZW1pdCB0aGUgdmlld3BvcnQtYXR0cmlidXRlLWNoYW5nZWQg
c2lnbmFsLiAKKyAqIFRoZSB2aWV3cG9ydC1hdHRyaWJ1dGVzLXJlY29tcHV0ZS1yZXF1ZXN0ZWQg
c2lnbmFsIGFsc28gd2lsbCBiZSBoYW5kbGVkIHRvIG92ZXJyaWRlIAorICogdGhlIGRldmljZSBz
aXplLCBhdmFpbGFibGUgc2l6ZSwgZGVza3RvcCB3aWR0aCwgb3IgZGV2aWNlIERQSS4KKyAqCisg
KiBTaW5jZTogMS4zLjgKKyAqLwordm9pZCB3ZWJraXRfdmlld3BvcnRfYXR0cmlidXRlc19yZWNv
bXB1dGUoV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzKiB2aWV3cG9ydEF0dHJpYnV0ZXMpCit7Cisg
ICAgaWYgKCF2aWV3cG9ydEF0dHJpYnV0ZXMtPnByaXYtPmlzVmFsaWQpCisgICAgICAgIHJldHVy
bjsKKyAgICB3ZWJraXRWaWV3cG9ydEF0dHJpYnV0ZXNSZWNvbXB1dGUodmlld3BvcnRBdHRyaWJ1
dGVzKTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0
cmlidXRlcy5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0dmlld3BvcnRhdHRyaWJ1dGVzLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q5MGMxYgotLS0gL2Rldi9udWxs
CisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHZpZXdwb3J0YXR0cmlidXRlcy5oCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29uZUBr
bGRwLm9yZz4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKworI2lmbmRlZiB3ZWJraXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorI2RlZmluZSB3ZWJr
aXR2aWV3cG9ydGF0dHJpYnV0ZXNfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3QuaD4KKyNpbmNs
dWRlIDx3ZWJraXQvd2Via2l0ZGVmaW5lcy5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUg
V0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyAgICAgICAgICAgICh3ZWJraXRfdmlld3Bv
cnRfYXR0cmlidXRlc19nZXRfdHlwZSgpKQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklC
VVRFUyhvYmopICAgICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmopLCBX
RUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMp
KQorI2RlZmluZSBXRUJLSVRfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgICAgKEdf
VFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRS
SUJVVEVTLCBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNDbGFzcykpCisjZGVmaW5lIFdFQktJVF9J
U19WSUVXUE9SVF9BVFRSSUJVVEVTKG9iaikgICAgICAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNF
X1RZUEUoKG9iaiksIFdFQktJVF9UWVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMpKQorI2RlZmluZSBX
RUJLSVRfSVNfVklFV1BPUlRfQVRUUklCVVRFU19DTEFTUyhrbGFzcykgKEdfVFlQRV9DSEVDS19D
TEFTU19UWVBFKChrbGFzcyksICBXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKSkKKyNk
ZWZpbmUgV0VCS0lUX1ZJRVdQT1JUX0FUVFJJQlVURVNfR0VUX0NMQVNTKG9iaikgIChHX1RZUEVf
SU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCAgV0VCS0lUX1RZUEVfVklFV1BPUlRfQVRUUklCVVRF
UywgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzUHJpdmF0ZSBXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXNQcml2
YXRlOworCitzdHJ1Y3QgX1dlYktpdFZpZXdwb3J0QXR0cmlidXRlcyB7CisgICAgR09iamVjdCBw
YXJlbnRfaW5zdGFuY2U7CisKKyAgICAvKjwgcHJpdmF0ZSA+Ki8KKyAgICBXZWJLaXRWaWV3cG9y
dEF0dHJpYnV0ZXNQcml2YXRlICpwcml2OworfTsKKworc3RydWN0IF9XZWJLaXRWaWV3cG9ydEF0
dHJpYnV0ZXNDbGFzcyB7CisgICAgR09iamVjdENsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8q
IFBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkICgqX3dlYmtpdF9yZXNl
cnZlZDApICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDEpICh2b2lkKTsKKyAg
ICB2b2lkICgqX3dlYmtpdF9yZXNlcnZlZDIpICh2b2lkKTsKKyAgICB2b2lkICgqX3dlYmtpdF9y
ZXNlcnZlZDMpICh2b2lkKTsKK307CisKK1dFQktJVF9BUEkgR1R5cGUKK3dlYmtpdF92aWV3cG9y
dF9hdHRyaWJ1dGVzX2dldF90eXBlICAgICAgICAgICAgICAgICAodm9pZCk7CisKK1dFQktJVF9B
UEkgdm9pZAord2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfcmVjb21wdXRlKFdlYktpdFZpZXdw
b3J0QXR0cmlidXRlcyogdmlld3BvcnRBdHRyaWJ1dGVzKTsKKworR19FTkRfREVDTFMKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3LmNwcCBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCmluZGV4IDNiODdjMjMuLjQ2NTJjNDYg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCisrKyBiL1dl
YktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuY3BwCkBAIC0xMCw2ICsxMCw3IEBACiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwIElnYWxpYSBTLkwuCiAgKiAgQ29weXJpZ2h0IChDKSAy
MDA5IE1vdmlhbCBDcmVhdGl2ZSBUZWNobm9sb2dpZXMgSW5jLgogICogIENvcHlyaWdodCAoQykg
MjAwOSBCb2JieSBQb3dlcnMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9vbmUgSHVyIDxqb29u
ZUBrbGRwLm9yZz4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTE3NCw3ICsxNzUsNiBAQCBlbnVt
IHsKICAgICBHRU9MT0NBVElPTl9QT0xJQ1lfREVDSVNJT05fQ0FOQ0VMTEVELAogICAgIE9OTE9B
RF9FVkVOVCwKICAgICBGUkFNRV9DUkVBVEVELAotCiAgICAgU0hPVUxEX0JFR0lOX0VESVRJTkcs
CiAgICAgU0hPVUxEX0VORF9FRElUSU5HLAogICAgIFNIT1VMRF9JTlNFUlRfTk9ERSwKQEAgLTE4
Niw2ICsxODYsOCBAQCBlbnVtIHsKICAgICBFRElUSU5HX0JFR0FOLAogICAgIFVTRVJfQ0hBTkdF
RF9DT05URU5UUywKICAgICBFRElUSU5HX0VOREVELAorICAgIFZJRVdQT1JUX0FUVFJJQlVURVNf
UkVDT01QVVRFX1JFUVVFU1RFRCwKKyAgICBWSUVXUE9SVF9BVFRSSUJVVEVTX0NIQU5HRUQsCiAK
ICAgICBMQVNUX1NJR05BTAogfTsKQEAgLTIwMCw2ICsyMDIsNyBAQCBlbnVtIHsKICAgICBQUk9Q
X0VESVRBQkxFLAogICAgIFBST1BfU0VUVElOR1MsCiAgICAgUFJPUF9XRUJfSU5TUEVDVE9SLAor
ICAgIFBST1BfVklFV1BPUlRfQVRUUklCVVRFUywKICAgICBQUk9QX1dJTkRPV19GRUFUVVJFUywK
ICAgICBQUk9QX1RSQU5TUEFSRU5ULAogICAgIFBST1BfWk9PTV9MRVZFTCwKQEAgLTUyNSw2ICs1
MjgsOSBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3Byb3BlcnR5KEdPYmplY3Qq
IG9iamVjdCwgZ3VpbnQgcHJvcF9pZCwgR1ZhbHVlKgogICAgIGNhc2UgUFJPUF9XRUJfSU5TUEVD
VE9SOgogICAgICAgICBnX3ZhbHVlX3NldF9vYmplY3QodmFsdWUsIHdlYmtpdF93ZWJfdmlld19n
ZXRfaW5zcGVjdG9yKHdlYlZpZXcpKTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1ZJ
RVdQT1JUX0FUVFJJQlVURVM6CisgICAgICAgIGdfdmFsdWVfc2V0X29iamVjdCh2YWx1ZSwgd2Vi
a2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1dGVzKHdlYlZpZXcpKTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBQUk9QX1dJTkRPV19GRUFUVVJFUzoKICAgICAgICAgZ192YWx1ZV9z
ZXRfb2JqZWN0KHZhbHVlLCB3ZWJraXRfd2ViX3ZpZXdfZ2V0X3dpbmRvd19mZWF0dXJlcyh3ZWJW
aWV3KSk7CiAgICAgICAgIGJyZWFrOwpAQCAtMTM3Miw2ICsxMzc4LDcgQEAgc3RhdGljIHZvaWQg
d2Via2l0X3dlYl92aWV3X2Rpc3Bvc2UoR09iamVjdCogb2JqZWN0KQogICAgIH0KIAogICAgIHBy
aXYtPndlYkluc3BlY3Rvci5jbGVhcigpOworICAgIHByaXYtPnZpZXdwb3J0QXR0cmlidXRlcy5j
bGVhcigpOwogICAgIHByaXYtPndlYldpbmRvd0ZlYXR1cmVzLmNsZWFyKCk7CiAgICAgcHJpdi0+
bWFpblJlc291cmNlLmNsZWFyKCk7CiAgICAgcHJpdi0+c3ViUmVzb3VyY2VzLmNsZWFyKCk7CkBA
IC0yNzM1LDYgKzI3NDIsNTUgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2NsYXNzX2lu
aXQoV2ViS2l0V2ViVmlld0NsYXNzKiB3ZWJWaWV3Q2xhc3MpCiAgICAgICAgIGdfY2Nsb3N1cmVf
bWFyc2hhbF9WT0lEX19WT0lELCBHX1RZUEVfTk9ORSwgMCk7CiAKICAgICAvKgorICAgICAqIFdl
YktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZAorICAg
ICAqIEB3ZWJfdmlldzogdGhlIG9iamVjdCB3aGljaCByZWNlaXZlZCB0aGUgc2lnbmFsCisgICAg
ICogQHZpZXdwb3J0X2F0dHJpYnV0ZXM6IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIHdo
aWNoIGhhcyB0aGUgdmlld3BvcnQgYXR0cmlidXRlcy4KKyAgICAgKgorICAgICAqIFRoZSAjV2Vi
S2l0V2ViVmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1yZWNvbXB1dGUtcmVxdWVzdGVkIAorICAg
ICAqIHNpZ25hbCB3aWxsIGJlIGVtaXR0ZWQgd2hlbiBhIHBhZ2Ugd2l0aCBhIHZpZXdwb3J0IG1l
dGEgdGFnCisgICAgICogbG9hZHMgYW5kIHdoZW4gd2Via2l0X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
cmVjb21wdXRlIGlzIGNhbGxlZC4KKyAgICAgKgorICAgICAqIFRoZSAjV2ViS2l0Vmlld3BvcnRB
dHRyaWJ1dGVzIHdpbGwgaGF2ZSBkZXZpY2Ugc2l6ZSwgYXZhaWxhYmxlIHNpemUsCisgICAgICog
ZGVza3RvcCB3aWR0aCwgYW5kIGRldmljZSBEUEkgcHJlLWZpbGxlZCBieSB2YWx1ZXMgdGhhdCBt
YWtlIHNlbnNlIAorICAgICAqIGZvciB0aGUgY3VycmVudCBzY3JlZW4gYW5kIHdpZGdldCwgYnV0
IHlvdSBjYW4gb3ZlcnJpZGUgdGhvc2UgdmFsdWVzIAorICAgICAqIGlmIHlvdSBoYXZlIHNwZWNp
YWwgcmVxdWlyZW1lbnRzIChmb3IgaW5zdGFuY2UsIGlmIHlvdSBtYWRlIHlvdXIKKyAgICAgKiB3
aWRnZXQgYmlnZ2VyIHRoYW4gdGhlIGF2YWlsYWJsZSB2aXNpYmxlIGFyZWEsIHlvdSBzaG91bGQg
b3ZlcnJpZGUgCisgICAgICogdGhlIGF2YWlsYWJsZS13aWR0aCBhbmQgYXZhaWxhYmxlLWhlaWdo
dCBwcm9wZXJ0aWVzIHRvIHRoZSBhY3R1YWwgCisgICAgICogdmlzaWJsZSBhcmVhKS4KKyAgICAg
KgorICAgICAqIFNpbmNlOiAxLjMuOAorICAgICAqLworICAgIHdlYmtpdF93ZWJfdmlld19zaWdu
YWxzW1ZJRVdQT1JUX0FUVFJJQlVURVNfUkVDT01QVVRFX1JFUVVFU1RFRF0gPSBnX3NpZ25hbF9u
ZXcoInZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVjb21wdXRlLXJlcXVlc3RlZCIsCisgICAgICAgICAg
ICBHX1RZUEVfRlJPTV9DTEFTUyh3ZWJWaWV3Q2xhc3MpLAorICAgICAgICAgICAgKEdTaWduYWxG
bGFncykoR19TSUdOQUxfUlVOX0xBU1QgfCBHX1NJR05BTF9BQ1RJT04pLAorICAgICAgICAgICAg
MCwKKyAgICAgICAgICAgIDAsIDAsCisgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNoYWxfVk9J
RF9fT0JKRUNULAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDEsCisgICAgICAgICAgICBXRUJL
SVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTKTsKKworICAgIC8qCisgICAgICogV2ViS2l0V2Vi
Vmlldzo6dmlld3BvcnQtYXR0cmlidXRlcy1jaGFuZ2VkCisgICAgICogQHdlYl92aWV3OiB0aGUg
b2JqZWN0IHdoaWNoIHJlY2VpdmVkIHRoZSBzaWduYWwKKyAgICAgKiBAdmlld3BvcnRfYXR0cmli
dXRlczogdGhlICNXZWJLaXRWaWV3cG9ydEF0dHJpYnV0ZXMgd2hpY2ggaGFzIHRoZSB2aWV3cG9y
dCBhdHRyaWJ1dGVzLgorICAgICAqCisgICAgICogVGhlICNXZWJLaXRXZWJWaWV3Ojp2aWV3cG9y
dC1hdHRyaWJ1dGVzLWNoYW5nZWQgc2lnbmFsIHdpbGwgYmUgZW1pdHRlZCAKKyAgICAgKiBhZnRl
ciB0aGUgZW1pc3Npb24gb2YgI1dlYktpdFdlYlZpZXc6OnZpZXdwb3J0LWF0dHJpYnV0ZXMtcmVj
b21wdXRlLXJlcXVlc3RlZCAKKyAgICAgKiBhbmQgdGhlIHN1YnNlcXVlbnQgdmlld3BvcnQgYXR0
cmlidXRlIHJlY29tcHV0YXRpb24uIEF0IHRoaXMgcG9pbnQsIAorICAgICAqIGlmIHRoZSAjV2Vi
S2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFyZSB2YWxpZCwgdGhlIHZpZXdwb3J0IGF0dHJpYnV0ZXMg
YXJlIGF2YWlsYWJsZS4KKyAgICAgKiAKKyAgICAgKiBTaW5jZTogMS4zLjgKKyAgICAgKi8KKyAg
ICB3ZWJraXRfd2ViX3ZpZXdfc2lnbmFsc1tWSUVXUE9SVF9BVFRSSUJVVEVTX0NIQU5HRURdID0g
Z19zaWduYWxfbmV3KCJ2aWV3cG9ydC1hdHRyaWJ1dGVzLWNoYW5nZWQiLAorICAgICAgICAgICAg
R19UWVBFX0ZST01fQ0xBU1Mod2ViVmlld0NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxh
Z3MpKEdfU0lHTkFMX1JVTl9MQVNUIHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIDAs
CisgICAgICAgICAgICAwLCAwLAorICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURf
X09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAxLAorICAgICAgICAgICAgV0VCS0lU
X1RZUEVfVklFV1BPUlRfQVRUUklCVVRFUyk7CisKKyAgICAvKgogICAgICAqIGltcGxlbWVudGF0
aW9ucyBvZiB2aXJ0dWFsIG1ldGhvZHMKICAgICAgKi8KICAgICB3ZWJWaWV3Q2xhc3MtPmNyZWF0
ZV93ZWJfdmlldyA9IHdlYmtpdF93ZWJfdmlld19yZWFsX2NyZWF0ZV93ZWJfdmlldzsKQEAgLTI5
NzgsNiArMzAzNCwyMCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfY2xhc3NfaW5pdChX
ZWJLaXRXZWJWaWV3Q2xhc3MqIHdlYlZpZXdDbGFzcykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0VCS0lUX1BBUkFNX1JFQURBQkxFKSk7
CiAKICAgICAvKioKKyAgICAqIFdlYktpdFdlYlZpZXc6dmlld3BvcnQtYXR0cmlidXRlczoKKyAg
ICAqCisgICAgKiBUaGUgYXNzb2NpYXRlZCAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3Rh
bmNlLgorICAgICoKKyAgICAqIFNpbmNlOiAxLjMuOAorICAgICovCisgICAgZ19vYmplY3RfY2xh
c3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9WSUVXUE9SVF9BVFRSSUJVVEVT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19wYXJhbV9zcGVjX29iamVj
dCgidmlld3BvcnQtYXR0cmlidXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF8oIlZpZXdwb3J0IEF0dHJpYnV0ZXMiKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXygiVGhl
IGFzc29jaWF0ZWQgV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGluc3RhbmNlIiksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9U
WVBFX1ZJRVdQT1JUX0FUVFJJQlVURVMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdFQktJVF9QQVJBTV9SRUFEQUJMRSkpOworCisgICAg
LyoqCiAgICAgKiBXZWJLaXRXZWJWaWV3OndpbmRvdy1mZWF0dXJlczoKICAgICAqCiAgICAgKiBB
biBhc3NvY2lhdGVkIFdlYktpdFdlYldpbmRvd0ZlYXR1cmVzIGluc3RhbmNlLgpAQCAtMzQwNCw2
ICszNDc0LDEwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19pbml0KFdlYktpdFdlYlZp
ZXcqIHdlYlZpZXcpCiAgICAgcHJpdi0+d2ViSW5zcGVjdG9yID0gYWRvcHRQbGF0Zm9ybVJlZihX
RUJLSVRfV0VCX0lOU1BFQ1RPUihnX29iamVjdF9uZXcoV0VCS0lUX1RZUEVfV0VCX0lOU1BFQ1RP
UiwgTlVMTCkpKTsKICAgICB3ZWJraXRfd2ViX2luc3BlY3Rvcl9zZXRfaW5zcGVjdG9yX2NsaWVu
dChwcml2LT53ZWJJbnNwZWN0b3IuZ2V0KCksIHByaXYtPmNvcmVQYWdlKTsKIAorICAgIC8vIEFu
ZCBvdXIgVmlld3BvcnRBdHRyaWJ1dGVzIGZyaWVuZC4KKyAgICBwcml2LT52aWV3cG9ydEF0dHJp
YnV0ZXMgPSBhZG9wdFBsYXRmb3JtUmVmKFdFQktJVF9WSUVXUE9SVF9BVFRSSUJVVEVTKGdfb2Jq
ZWN0X25ldyhXRUJLSVRfVFlQRV9WSUVXUE9SVF9BVFRSSUJVVEVTLCBOVUxMKSkpOworICAgIHBy
aXYtPnZpZXdwb3J0QXR0cmlidXRlcy0+cHJpdi0+d2ViVmlldyA9IHdlYlZpZXc7CisKICAgICAv
LyBUaGUgc21hcnQgcG9pbnRlciB3aWxsIGNhbGwgZ19vYmplY3RfcmVmX3Npbmsgb24gdGhlc2Ug
YWRqdXN0bWVudHMuCiAgICAgcHJpdi0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBHVEtfQURKVVNU
TUVOVChndGtfYWRqdXN0bWVudF9uZXcoMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCkpOwog
ICAgIHByaXYtPnZlcnRpY2FsQWRqdXN0bWVudCA9IEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3Rt
ZW50X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSk7CkBAIC0zNTQzLDYgKzM2MTcs
MjkgQEAgV2ViS2l0V2ViSW5zcGVjdG9yKiB3ZWJraXRfd2ViX3ZpZXdfZ2V0X2luc3BlY3RvcihX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIHJldHVybiB3ZWJWaWV3LT5wcml2LT53ZWJJbnNw
ZWN0b3IuZ2V0KCk7CiB9CiAKKy8qKgorICogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9h
dHRyaWJ1dGVzOgorICogQHdlYlZpZXc6IGEgI1dlYktpdFdlYlZpZXcKKyAqCisgKiBPYnRhaW5z
IHRoZSAjV2ViS2l0Vmlld3BvcnRBdHRyaWJ1dGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqICNX
ZWJLaXRXZWJWaWV3LiBFdmVyeSAjV2ViS2l0V2ViVmlldyBvYmplY3QgaGFzIGEKKyAqICNXZWJL
aXRXZWJWaWV3cG9yQXR0cmlidXRlcyBvYmplY3QgYXR0YWNoZWQgdG8gaXQgYXMgc29vbiBhcyBp
dCBpcworICogY3JlYXRlZCwgc28gdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgcmV0dXJuIE5VTEwg
aWYgdGhlIGFyZ3VtZW50IGlzCisgKiBub3QgYSB2YWxpZCAjV2ViS2l0V2ViVmlldy4gRG8gbm90
ZSBob3dldmVyIHRoYXQgdGhlIHZpZXdwb3J0CisgKiBhdHRyaWJ1dGVzIG9iamVjdCBvbmx5IGNv
bnRhaW5zIHZhbGlkIGluZm9ybWF0aW9uIHdoZW4gdGhlIGN1cnJlbnQKKyAqIHBhZ2UgaGFzIGEg
dmlld3BvcnQgbWV0YSB0YWcuIFlvdSBjYW4gY2hlY2sgd2hldGhlciB0aGUgZGF0YSBzaG91bGQK
KyAqIGJlIHVzZWQgYnkgY2hlY2tpbmcgdGhlICNXZWJLaXRWaWV3cG9ydDp2YWxpZCBwcm9wZXJ0
eS4KKyAqCisgKiBSZXR1cm4gdmFsdWU6ICh0cmFuc2ZlciBub25lKTogdGhlICNXZWJLaXRWaWV3
cG9ydEF0dHJpYnV0ZXMgaW5zdGFuY2UuCisgKgorICogU2luY2U6IDEuMy44CisgKi8KK1dlYktp
dFZpZXdwb3J0QXR0cmlidXRlcyogd2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1
dGVzKFdlYktpdFdlYlZpZXcqIHdlYlZpZXcpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0lTX1dFQl9WSUVXKHdlYlZpZXcpLCAwKTsKKyAgICByZXR1cm4gd2ViVmlldy0+cHJp
di0+dmlld3BvcnRBdHRyaWJ1dGVzLmdldCgpOworfQorCiAvLyBpbnRlcm5hbAogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X3NldF93aW5kb3dfZmVhdHVyZXMoV2ViS2l0V2ViVmlldyogd2Vi
VmlldywgV2ViS2l0V2ViV2luZG93RmVhdHVyZXMqIHdlYldpbmRvd0ZlYXR1cmVzKQogewpkaWZm
IC0tZ2l0IGEvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlldy5oIGIvV2ViS2l0L2d0ay93
ZWJraXQvd2Via2l0d2Vidmlldy5oCmluZGV4IDUxNGQ4M2MuLjM0YzRkNWUgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXcuaAorKysgYi9XZWJLaXQvZ3RrL3dlYmtp
dC93ZWJraXR3ZWJ2aWV3LmgKQEAgLTQyNyw2ICs0MjcsOSBAQCB3ZWJraXRfZ2V0X2NhY2hlX21v
ZGVsICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCk7CiBXRUJLSVRfQVBJIFdlYktpdERP
TURvY3VtZW50ICoKIHdlYmtpdF93ZWJfdmlld19nZXRfZG9tX2RvY3VtZW50ICAgICAgICAgICAg
ICAgIChXZWJLaXRXZWJWaWV3ICAgICAgICAqd2ViVmlldyk7CiAKK1dFQktJVF9BUEkgV2ViS2l0
Vmlld3BvcnRBdHRyaWJ1dGVzKgord2Via2l0X3dlYl92aWV3X2dldF92aWV3cG9ydF9hdHRyaWJ1
dGVzICAgICAgICAgKFdlYktpdFdlYlZpZXcgICAgICAgICp3ZWJWaWV3KTsKKwogR19FTkRfREVD
TFMKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3ZWJ2aWV3
cHJpdmF0ZS5oIGIvV2ViS2l0L2d0ay93ZWJraXQvd2Via2l0d2Vidmlld3ByaXZhdGUuaAppbmRl
eCA2NjY2NWIyLi5kZWM2ZGFkIDEwMDY0NAotLS0gYS9XZWJLaXQvZ3RrL3dlYmtpdC93ZWJraXR3
ZWJ2aWV3cHJpdmF0ZS5oCisrKyBiL1dlYktpdC9ndGsvd2Via2l0L3dlYmtpdHdlYnZpZXdwcml2
YXRlLmgKQEAgLTU0LDYgKzU0LDcgQEAgc3RydWN0IF9XZWJLaXRXZWJWaWV3UHJpdmF0ZSB7CiAg
ICAgV2ViQ29yZTo6UGFnZSogY29yZVBhZ2U7CiAgICAgUGxhdGZvcm1SZWZQdHI8V2ViS2l0V2Vi
U2V0dGluZ3M+IHdlYlNldHRpbmdzOwogICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdlYkluc3Bl
Y3Rvcj4gd2ViSW5zcGVjdG9yOworICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFZpZXdwb3J0QXR0
cmlidXRlcz4gdmlld3BvcnRBdHRyaWJ1dGVzOwogICAgIFBsYXRmb3JtUmVmUHRyPFdlYktpdFdl
YldpbmRvd0ZlYXR1cmVzPiB3ZWJXaW5kb3dGZWF0dXJlczsKIAogICAgIFdlYktpdFdlYkZyYW1l
KiBtYWluRnJhbWU7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9DaGFuZ2VMb2cgYi9XZWJLaXRU
b29scy9DaGFuZ2VMb2cKaW5kZXggNzdmY2FmMy4uNzllNTgyOSAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvQ2hhbmdlTG9nCisrKyBiL1dlYktpdFRvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3
IEBACisyMDEwLTEyLTA5ICBKb29uZSBIdXIgIDxqb29uZUBrbGRwLm9yZz4KKworICAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgIFtHVEtdIFN1cHBvcnQgZm9y
IHZpZXdwb3J0IG1ldGEgdGFnCisgICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NDU0NDMKKworICAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHRlc3RpbmcgdGhl
IHZpZXdwb3J0IHByb3BlcnRpZXMgZm9yIFdlYktpdEd0ay4KKworICAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgICAoZHVtcENvbmZpZ3Vy
YXRpb25Gb3JWaWV3cG9ydENhbGxiYWNrKTogQWRkZWQgdGhpcyBKUyBjYWxsYmFjayB0byBzZXQg
dGhlIHNpemUgb2YgdGhlIHZpc2libGUgdmlld3BvcnQuCisgICAgICAgICAoTGF5b3V0VGVzdENv
bnRyb2xsZXI6OnN0YXRpY0Z1bmN0aW9ucyk6CisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0xh
eW91dFRlc3RDb250cm9sbGVyLmg6CisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9MYXlv
dXRUZXN0Q29udHJvbGxlckd0ay5jcHA6CisgICAgICAgICAoTGF5b3V0VGVzdENvbnRyb2xsZXI6
OmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQpOiBBZGRlZCB0aGlzIGZ1bmN0aW9uIHRvIHRl
c3QgdGhlIHZpZXdwb3J0IHByb3BlcnRpZXMuCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21h
Yy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbToKKyAgICAgICAgIChMYXlvdXRUZXN0Q29udHJv
bGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRvLgorICAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9xdC9MYXlvdXRUZXN0Q29udHJvbGxlclF0LmNwcDoKKyAgICAgICAgIChM
YXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCk6IERpdHRv
LgorICAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4u
Y3BwOgorICAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZv
clZpZXdwb3J0KTogRGl0dG8uCisgICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3d4L0xheW91dFRl
c3RDb250cm9sbGVyV3guY3BwOgorICAgICAgICAgKExheW91dFRlc3RDb250cm9sbGVyOjpkdW1w
Q29uZmlndXJhdGlvbkZvclZpZXdwb3J0KTogRGl0dG8uCisKIDIwMTAtMTItMDggIFdpbGxpYW0g
U2llZ3Jpc3QgPHdzaWVncmlzdEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJp
YyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRU
ZXN0Q29udHJvbGxlci5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0
Q29udHJvbGxlci5jcHAKaW5kZXggYTIyNTc5YS4uNWJiZDNmNiAxMDA2NDQKLS0tIGEvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1dlYktp
dFRvb2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMSw1ICsx
LDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8am9v
bmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE0MCw2ICsx
NDEsMjIgQEAgc3RhdGljIEpTVmFsdWVSZWYgZHVtcENoaWxkRnJhbWVTY3JvbGxQb3NpdGlvbnND
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlMKICAgICByZXR1cm4gSlNWYWx1ZU1ha2VV
bmRlZmluZWQoY29udGV4dCk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlUmVmIGR1bXBDb25maWd1cmF0
aW9uRm9yVmlld3BvcnRDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
ZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBj
b25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7Cisg
ICAgaWYgKGFyZ3VtZW50Q291bnQgPCAyKQorICAgICAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRl
ZmluZWQoY29udGV4dCk7CisKKyAgICBkb3VibGUgYXZhaWxhYmxlV2lkdGggPSBKU1ZhbHVlVG9O
dW1iZXIoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pOworICAgIEFTU0VSVCghKmV4
Y2VwdGlvbik7CisgICAgZG91YmxlIGF2YWlsYWJsZUhlaWdodCA9IEpTVmFsdWVUb051bWJlcihj
b250ZXh0LCBhcmd1bWVudHNbMV0sIGV4Y2VwdGlvbik7CisgICAgQVNTRVJUKCEqZXhjZXB0aW9u
KTsKKworICAgIExheW91dFRlc3RDb250cm9sbGVyKiBjb250cm9sbGVyID0gc3RhdGljX2Nhc3Q8
TGF5b3V0VGVzdENvbnRyb2xsZXIqPihKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwor
ICAgIGNvbnRyb2xsZXItPmR1bXBDb25maWd1cmF0aW9uRm9yVmlld3BvcnQoc3RhdGljX2Nhc3Q8
aW50PihhdmFpbGFibGVXaWR0aCksIHN0YXRpY19jYXN0PGludD4oYXZhaWxhYmxlSGVpZ2h0KSk7
CisgICAKKyAgICByZXR1cm4gSlNWYWx1ZU1ha2VVbmRlZmluZWQoY29udGV4dCk7Cit9CisKIHN0
YXRpYyBKU1ZhbHVlUmVmIGR1bXBEYXRhYmFzZUNhbGxiYWNrc0NhbGxiYWNrKEpTQ29udGV4dFJl
ZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwg
c2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFs
dWVSZWYqIGV4Y2VwdGlvbikKIHsKICAgICBMYXlvdXRUZXN0Q29udHJvbGxlciogY29udHJvbGxl
ciA9IHN0YXRpY19jYXN0PExheW91dFRlc3RDb250cm9sbGVyKj4oSlNPYmplY3RHZXRQcml2YXRl
KHRoaXNPYmplY3QpKTsKQEAgLTE5MTQsNiArMTkzMSw3IEBAIEpTU3RhdGljRnVuY3Rpb24qIExh
eW91dFRlc3RDb250cm9sbGVyOjpzdGF0aWNGdW5jdGlvbnMoKQogICAgICAgICB7ICJkdW1wQmFj
a0ZvcndhcmRMaXN0IiwgZHVtcEJhY2tGb3J3YXJkTGlzdENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgImR1bXBDaGlsZEZyYW1lU2Nyb2xsUG9zaXRpb25zIiwgZHVtcENoaWxkRnJhbWVTY3Jv
bGxQb3NpdGlvbnNDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1By
b3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJkdW1wQ2hpbGRGcmFtZXNB
c1RleHQiLCBkdW1wQ2hpbGRGcmFtZXNBc1RleHRDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1
dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7
ICJkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0IiwgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3
cG9ydENhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgImR1bXBET01Bc1dlYkFyY2hpdmUiLCBk
dW1wRE9NQXNXZWJBcmNoaXZlQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkg
fCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAiZHVtcERhdGFi
YXNlQ2FsbGJhY2tzIiwgZHVtcERhdGFiYXNlQ2FsbGJhY2tzQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAg
ICAgICAgeyAiZHVtcEVkaXRpbmdDYWxsYmFja3MiLCBkdW1wRWRpdGluZ0NhbGxiYWNrc0NhbGxi
YWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVE
b250RGVsZXRlIH0sCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9MYXlv
dXRUZXN0Q29udHJvbGxlci5oIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvTGF5b3V0VGVz
dENvbnRyb2xsZXIuaAppbmRleCAyZTljODU2Li5lMzljOTM5IDEwMDY0NAotLS0gYS9XZWJLaXRU
b29scy9EdW1wUmVuZGVyVHJlZS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCisrKyBiL1dlYktpdFRv
b2xzL0R1bXBSZW5kZXJUcmVlL0xheW91dFRlc3RDb250cm9sbGVyLmgKQEAgLTI4NSw2ICsyODUs
OCBAQCBwdWJsaWM6CiAKICAgICBib29sIGhhc1NwZWxsaW5nTWFya2VyKGludCBmcm9tLCBpbnQg
bGVuZ3RoKTsKIAorICAgIHZvaWQgZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydChpbnQgYXZh
aWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpOworCiAgICAgLy8gVGhlIGZvbGxvd2lu
ZyBBUEkgdGVzdCBmdW5jdGlvbnMgc2hvdWxkIHByb2JhYmx5IGJlIG1vdmVkIHRvIHBsYXRmb3Jt
LXNwZWNpZmljIAogICAgIC8vIHVuaXQgdGVzdHMgb3V0c2lkZSBvZiBEUlQgb25jZSB0aGV5IGV4
aXN0LgogICAgIHZvaWQgYXBpVGVzdE5ld1dpbmRvd0RhdGFMb2FkQmFzZVVSTChKU1N0cmluZ1Jl
ZiB1dGY4RGF0YSwgSlNTdHJpbmdSZWYgYmFzZVVSTCk7CmRpZmYgLS1naXQgYS9XZWJLaXRUb29s
cy9EdW1wUmVuZGVyVHJlZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwIGIvV2ViS2l0
VG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0xheW91dFRlc3RDb250cm9sbGVyR3RrLmNwcAppbmRl
eCA4Mzg3NGY0Li44MzVmN2Q4IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJl
ZS9ndGsvTGF5b3V0VGVzdENvbnRyb2xsZXJHdGsuY3BwCisrKyBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2d0ay9MYXlvdXRUZXN0Q29udHJvbGxlckd0ay5jcHAKQEAgLTQsNiArNCw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTnVhbnRpIEx0ZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBKYW4gTWljaGFlbCBBbG9uem8gPGptYWxvbnpvQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBDb2xsYWJvcmEgTHRkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvb25lIEh1ciA8
am9vbmVAa2xkcC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTgxOSwz
ICs4MjAsMTAgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIo
aW50LCBpbnQpCiAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgogICAgIHJldHVybiBmYWxz
ZTsKIH0KKwordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JW
aWV3cG9ydChpbnQgYXZhaWxhYmxlV2lkdGgsIGludCBhdmFpbGFibGVIZWlnaHQpCit7CisgICAg
V2ViS2l0V2ViVmlldyogd2ViVmlldyA9IHdlYmtpdF93ZWJfZnJhbWVfZ2V0X3dlYl92aWV3KG1h
aW5GcmFtZSk7CisgICAgQVNTRVJUKHdlYlZpZXcpOworICAgIER1bXBSZW5kZXJUcmVlU3VwcG9y
dEd0azo6ZHVtcENvbmZpZ3VyYXRpb25Gb3JWaWV3cG9ydCh3ZWJWaWV3LCBhdmFpbGFibGVXaWR0
aCwgYXZhaWxhYmxlSGVpZ2h0KTsKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbSBiL1dlYktpdFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9MYXlvdXRUZXN0Q29udHJvbGxlck1hYy5tbQppbmRleCBiZTNlYjA5Li41
ZGY5NDFkIDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvTGF5b3V0
VGVzdENvbnRyb2xsZXJNYWMubW0KKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0xheW91dFRlc3RDb250cm9sbGVyTWFjLm1tCkBAIC05ODksMyArOTg5LDcgQEAgYm9vbCBMYXlv
dXRUZXN0Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgp
CiB7CiAgICAgcmV0dXJuIFttYWluRnJhbWUgaGFzU3BlbGxpbmdNYXJrZXI6ZnJvbSBsZW5ndGg6
bGVuZ3RoXTsKIH0KK3ZvaWQgTGF5b3V0VGVzdENvbnRyb2xsZXI6OmR1bXBDb25maWd1cmF0aW9u
Rm9yVmlld3BvcnQoaW50IC8qYXZhaWxhYmxlV2lkdGgqLywgaW50IC8qYXZhaWxhYmxlSGVpZ2h0
Ki8pCit7CisKK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9M
YXlvdXRUZXN0Q29udHJvbGxlcldpbi5jcHAgYi9XZWJLaXRUb29scy9EdW1wUmVuZGVyVHJlZS93
aW4vTGF5b3V0VGVzdENvbnRyb2xsZXJXaW4uY3BwCmluZGV4IGIxYTRlZjQuLmVkYjA1MTcgMTAw
NjQ0Ci0tLSBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9MYXlvdXRUZXN0Q29udHJv
bGxlcldpbi5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0xheW91dFRl
c3RDb250cm9sbGVyV2luLmNwcApAQCAtMTQxNSwzICsxNDE1LDggQEAgYm9vbCBMYXlvdXRUZXN0
Q29udHJvbGxlcjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50IGZyb20sIGludCBsZW5ndGgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gcmV0OwogfQorCit2b2lkIExheW91dFRlc3RD
b250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGludCAvKmF2YWlsYWJsZVdp
ZHRoKi8sIGludCAvKmF2YWlsYWJsZUhlaWdodCovKQoreworICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhpcy4KK30KZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0R1bXBSZW5kZXJUcmVlL3d4L0xh
eW91dFRlc3RDb250cm9sbGVyV3guY3BwIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gv
TGF5b3V0VGVzdENvbnRyb2xsZXJXeC5jcHAKaW5kZXggMTIwYTFiNi4uNzE0YTRjNCAxMDA2NDQK
LS0tIGEvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRyb2xsZXJX
eC5jcHAKKysrIGIvV2ViS2l0VG9vbHMvRHVtcFJlbmRlclRyZWUvd3gvTGF5b3V0VGVzdENvbnRy
b2xsZXJXeC5jcHAKQEAgLTUxMSw2ICs1MTEsMTEgQEAgYm9vbCBMYXlvdXRUZXN0Q29udHJvbGxl
cjo6aGFzU3BlbGxpbmdNYXJrZXIoaW50LCBpbnQpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2
b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpkdW1wQ29uZmlndXJhdGlvbkZvclZpZXdwb3J0KGlu
dCAvKmF2YWlsYWJsZVdpZHRoKi8sIGludCAvKmF2YWlsYWJsZUhlaWdodCovKQoreworICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IExheW91dFRl
c3RDb250cm9sbGVyOjpwYWdlUHJvcGVydHkoY29uc3QgY2hhciogcHJvcGVydHlOYW1lLCBpbnQg
cGFnZU51bWJlcikgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSW1wbGVtZW50Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>