<?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>34527</bug_id>
          
          <creation_ts>2010-02-03 07:08:41 -0800</creation_ts>
          <short_desc>[Haiku] Improve/maintain Haiku port</short_desc>
          <delta_ts>2010-02-08 11:53:55 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephan Aßmus">superstippi</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>levin</cc>
    
    <cc>simon.maxime</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>187344</commentid>
    <comment_count>0</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:08:41 -0800</bug_when>
    <thetext>Series of patches to bring up to date and flesh out various aspects of the Haiku port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187346</commentid>
    <comment_count>1</comment_count>
      <attachid>48023</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:16:56 -0800</bug_when>
    <thetext>Created attachment 48023
Separate patch to fix small coding style violations.

Patch can be applied individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187348</commentid>
    <comment_count>2</comment_count>
      <attachid>48025</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:19:10 -0800</bug_when>
    <thetext>Created attachment 48025
This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.

Patch can be applied individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187351</commentid>
    <comment_count>3</comment_count>
      <attachid>48027</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:31:34 -0800</bug_when>
    <thetext>Created attachment 48027
Implements homeDirectoryPath() and listDirectory() on the Haiku platform.

Can be applied individually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187357</commentid>
    <comment_count>4</comment_count>
      <attachid>48031</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:40:51 -0800</bug_when>
    <thetext>Created attachment 48031
Fixes to rect conversion and image rendering on Haiku

The patch can be applied individually.

The changes to the rect conversions are indeed correct. In Haiku (to stay compatibly with BeOS), a BRect specifies the left/top and bottom/right pixel *indices*, even though the values are floating point. So a rectangle covering just one pixel would be specified as BRect(0, 0, 0, 0). In WebCore and other frame works, such rectangles would be expressed as 0, 0, 1, 1. In WebCore, the width and height of rectangles refer to the distance between pixels, while on Haiku, a one pixel rect has indeed a width and height of 0, as confusing as that may be.

The part of the patch that affects WebCore/platform/graphics/haiku/ImageHaiku.cpp also implements the drawing methods more correctly. Image observers are notified, and pattern drawing takes the &quot;phase&quot; into account which makes scrolled backgrounds render correctly. Transformations are still not supported, since the Haiku drawing backend itself does not yet support them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187361</commentid>
    <comment_count>5</comment_count>
      <attachid>48032</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 07:55:33 -0800</bug_when>
    <thetext>Created attachment 48032
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

The patch can be applied individually, but cannot be broken into smaller pieces.

PathHaiku was irritatingly implemented as BRegion, while BRegion has nothing to do with paths. BShape is the way to go. I&apos;ve implemented the subset of functionality that can be implemented using BShape.

PathGradient was previously not implemented at all. I&apos;ve taken the Qt implementation as a reference and websites using gradients seem to render fine.

GraphicsContextHaiku was not implementing a great deal of functionality. The patch implements

 * partial support for paths and gradients
 * more clipping methods
 * support for round rects
 * support for transparency layers
 * support for translating the context, as needed for scrolling
 * changes the strokeArc() method to produce beautiful arcs as needed for box elements
   without the need to implement clipping paths.
 * implements filling rects
 * implements rounding to device pixels
 * a few missing new methods that broke the build on Haiku
 * fixes a few warnings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187362</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 07:58:04 -0800</bug_when>
    <thetext>Attachment 48032 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:63:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:64:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:75:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:76:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:312:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:325:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:423:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:432:  Should have a space between // and comment  [whitespace/comments] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:436:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:450:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:452:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/haiku/GradientHaiku.cpp:54:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 12


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187368</commentid>
    <comment_count>7</comment_count>
      <attachid>48033</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:11:52 -0800</bug_when>
    <thetext>Created attachment 48033
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

The attachment 48032 had all the explanation, don&apos;t know how to retrieve it. This version fixes some style issues pointed out by the style-checker-bot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187370</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 08:14:17 -0800</bug_when>
    <thetext>Attachment 48033 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:63:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:64:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:75:  Missing space before {  [whitespace/braces] [5]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:76:  Missing space before {  [whitespace/braces] [5]
Total errors found: 4


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187375</commentid>
    <comment_count>9</comment_count>
      <attachid>48036</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:19:57 -0800</bug_when>
    <thetext>Created attachment 48036
Various fixes to mouse/wheel/keyboard event propagation on Haiku

This patch can be applied individually.

 * Some compiler warnings were fixed.
 * Wrong coordinates were extracted from the Haiku event BMessage, resulting in an offset for mouse moved events.
 * Improved the compatibility of keyboard events.
 * Use the correct code for the tab/backspace key in EventHandlerHaiku.cpp and fix the build by not including PlatformScrollBar.h
 * Generate a correct timestamp for mouse/wheel events. The value is documented as being in seconds.
 * Fill the modifier flags in mouse/wheel events.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187377</commentid>
    <comment_count>10</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:22:27 -0800</bug_when>
    <thetext>All the patches are against r54275.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187378</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 08:27:19 -0800</bug_when>
    <thetext>Attachment 48036 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/haiku/PlatformWheelEventHaiku.cpp:56:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformWheelEventHaiku.cpp:57:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformWheelEventHaiku.cpp:58:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformWheelEventHaiku.cpp:59:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformMouseEventHaiku.cpp:78:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformMouseEventHaiku.cpp:79:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformMouseEventHaiku.cpp:80:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/haiku/PlatformMouseEventHaiku.cpp:81:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 8


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187380</commentid>
    <comment_count>12</comment_count>
      <attachid>48037</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:31:38 -0800</bug_when>
    <thetext>Created attachment 48037
HaikuLauncher minimal browser shell

This patch adds an implementation for the Haiku browser shell. There was no previous implementation checked into the repository, except for the WebCoreSupport classes. There are minimal changes there, but the important detail of the HaikuLauncher code is that it uses an offscreen bitmap/view combination to perform drawing, and that any events which happen in the window thread are forwarded to a new class WebProcess, which is an event handler in the main thread. Thus, all calls into WebKit happen on the main thread. Except for keyboard input, the HaikuLauncher is functional. Some sites result in &quot;about:blank&quot; to be loaded halfway through loading the site (but without actually showing an about:blank page). After such an event, the shell becomes unusable and will soon crash when calling some pure virtual method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187383</commentid>
    <comment_count>13</comment_count>
      <attachid>48038</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:35:04 -0800</bug_when>
    <thetext>Created attachment 48038
Various fixes to mouse/wheel/keyboard event propagation on Haiku

Fixed style violations of previous patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187385</commentid>
    <comment_count>14</comment_count>
      <attachid>48039</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:39:31 -0800</bug_when>
    <thetext>Created attachment 48039
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

Fixed remaining coding style issues, though I don&apos;t know if the style script is correct in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187386</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-03 08:40:48 -0800</bug_when>
    <thetext>Attachment 48039 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:69:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:70:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:71:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:72:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:74:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:75:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:76:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:77:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:88:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:89:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:90:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:91:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:93:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:94:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:95:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/platform/graphics/haiku/GraphicsContextHaiku.cpp:96:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 16


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187388</commentid>
    <comment_count>16</comment_count>
      <attachid>48040</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 08:45:38 -0800</bug_when>
    <thetext>Created attachment 48040
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

Darn, forgot to fix up tabs. Sorry about the mess! Should pass the style check now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187429</commentid>
    <comment_count>17</comment_count>
      <attachid>48023</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:31:55 -0800</bug_when>
    <thetext>Comment on attachment 48023
Separate patch to fix small coding style violations.

Whoops. This need a ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187438</commentid>
    <comment_count>18</comment_count>
      <attachid>48025</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:56:43 -0800</bug_when>
    <thetext>Comment on attachment 48025
This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.

All of these patches need changelogs. See http://webkit.org/coding/contributing.html (prepare-ChangeLog is the command). Please look at other entries in the ChangeLog to note typical formatting.

Here&apos;s some details on ChangeLog formatting:
Leave the Reviewed by NOBODY (OOPS) but remove the no tests oops and either say what tests cover the change or why there are no tests added.

Other typical formatting is

  Bug Title
  Bug Link

  Small description or even better function by function small descriptions of the changes done (see other changelog entries for good examples).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187439</commentid>
    <comment_count>19</comment_count>
      <attachid>48027</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:57:13 -0800</bug_when>
    <thetext>Comment on attachment 48027
Implements homeDirectoryPath() and listDirectory() on the Haiku platform.

No ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187440</commentid>
    <comment_count>20</comment_count>
      <attachid>48031</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:57:28 -0800</bug_when>
    <thetext>Comment on attachment 48031
Fixes to rect conversion and image rendering on Haiku

No ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187441</commentid>
    <comment_count>21</comment_count>
      <attachid>48037</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:57:43 -0800</bug_when>
    <thetext>Comment on attachment 48037
HaikuLauncher minimal browser shell

No ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187442</commentid>
    <comment_count>22</comment_count>
      <attachid>48038</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:57:56 -0800</bug_when>
    <thetext>Comment on attachment 48038
Various fixes to mouse/wheel/keyboard event propagation on Haiku

No ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187443</commentid>
    <comment_count>23</comment_count>
      <attachid>48040</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 10:58:12 -0800</bug_when>
    <thetext>Comment on attachment 48040
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

No ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187458</commentid>
    <comment_count>24</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 11:43:56 -0800</bug_when>
    <thetext>Thanks a lot for the comment. I was aware that the Changelogs are missing, but was confused how those are attached. Are they supposed to be part of the patch as if I modified the Changelog file? I&apos;ve read through the contributor documentation, but I didn&apos;t know what to do about the problem that I need to separate all my changes into smaller patches. I figured I can&apos;t use those scripts then. I&apos;ll figure it out and replace the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187494</commentid>
    <comment_count>25</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-03 13:26:07 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Thanks a lot for the comment. I was aware that the Changelogs are missing, but
&gt; was confused how those are attached. Are they supposed to be part of the patch
&gt; as if I modified the Changelog file? 

Yes.

&gt;I didn&apos;t know what to do about the problem that I need to
&gt; separate all my changes into smaller patches. 

If I understand what you&apos;re asking, you&apos;re saying that yo have all of these patches in your tree at once so the ChangeLog would be clutter with too many things.

Well, some people use svn-create-patch and save a diff. Then create little patches for each change that they apply/unapply. Other people use git. I guess another approach would be to create the ChangeLog and edit it separately for each patch (but admittedly that sounds painful). It is hard to say what would work best for you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187650</commentid>
    <comment_count>26</comment_count>
      <attachid>48105</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-03 23:56:46 -0800</bug_when>
    <thetext>Created attachment 48105
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

Now with changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187655</commentid>
    <comment_count>27</comment_count>
      <attachid>48108</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 00:06:17 -0800</bug_when>
    <thetext>Created attachment 48108
Various fixes to mouse/wheel/keyboard event propagation on Haiku

Now with changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187670</commentid>
    <comment_count>28</comment_count>
      <attachid>48111</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 00:53:15 -0800</bug_when>
    <thetext>Created attachment 48111
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

Really sorry for the mess. This time I&apos;ve used a different method of creating the patch, so hopefully it applies cleanly now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187674</commentid>
    <comment_count>29</comment_count>
      <attachid>48114</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:05:55 -0800</bug_when>
    <thetext>Created attachment 48114
 Various fixes to mouse/wheel/keyboard event propagation on Haiku

Ok, reassured by the successful style check, I am using the same method to create a patch for the rest of the patches with added ChangeLog diff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187678</commentid>
    <comment_count>30</comment_count>
      <attachid>48116</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:19:30 -0800</bug_when>
    <thetext>Created attachment 48116
Fixes to rect conversion and image rendering on Haiku

Patch includes ChangeLog now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187679</commentid>
    <comment_count>31</comment_count>
      <attachid>48117</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:26:43 -0800</bug_when>
    <thetext>Created attachment 48117
Implements homeDirectoryPath() and listDirectory() on the Haiku platform.

Patch now includes ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187681</commentid>
    <comment_count>32</comment_count>
      <attachid>48119</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:31:54 -0800</bug_when>
    <thetext>Created attachment 48119
Separate patch to fix small coding style violations.

Patch now includes diff to ChangeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187683</commentid>
    <comment_count>33</comment_count>
      <attachid>48120</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:38:15 -0800</bug_when>
    <thetext>Created attachment 48120
This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.

Patch includes diff to ChangeLog now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187687</commentid>
    <comment_count>34</comment_count>
      <attachid>48122</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 01:59:52 -0800</bug_when>
    <thetext>Created attachment 48122
HaikuLauncher minimal browser shell

Patch now contains a ChangeLog. CheckerBoardView has been removed, it was added accidentally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187689</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-04 02:06:44 -0800</bug_when>
    <thetext>Attachment 48122 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Last 3072 characters of output:
e use: LeakTracker_h  [build/header_guard] [5]
WebKit/haiku/HaikuLauncher/LeakTracker.h:34:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/haiku/HaikuLauncher/LeakTracker.h:52:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/haiku/HaikuLauncher/LeakTracker.h:53:  Missing space before ( in if(  [whitespace/parens] [5]
WebKit/haiku/HaikuLauncher/LeakTracker.h:54:  This { should be at the end of the previous line  [whitespace/braces] [4]
WebKit/haiku/HaikuLauncher/LeakTracker.h:71:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:133:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:292:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:293:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:294:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:295:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:315:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.cpp:321:  Should have a space between // and comment  [whitespace/comments] [4]
WebKit/haiku/WebCoreSupport/EditCommandHaiku.h:32:  #ifndef header guard has wrong style, please use: EditCommandHaiku_h  [build/header_guard] [5]
WebKit/haiku/API/WebView.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/haiku/API/WebView.cpp:165:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/haiku/API/WebView.cpp:166:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/haiku/API/WebView.cpp:167:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
WebKit/haiku/HaikuLauncher/LauncherApp.h:27:  #ifndef header guard has wrong style, please use: LauncherApp_h  [build/header_guard] [5]
WebKit/haiku/HaikuLauncher/LauncherApp.cpp:49:  LOAD_AT_STARTING is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/haiku/HaikuLauncher/LauncherApp.cpp:71:  Use 0 instead of NULL.  [readability/null] [5]
WebKit/haiku/API/WebFrame.h:42:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/haiku/WebCoreSupport/ChromeClientHaiku.h:36:  Alphabetical sorting problem.  [build/include_order] [4]
WebKit/haiku/WebCoreSupport/FrameLoaderClientHaiku.cpp:595:  Missing space after ,  [whitespace/comma] [3]
WebKit/haiku/API/WebProcess.h:40:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
WebKit/haiku/API/WebProcess.h:70:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 39


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187692</commentid>
    <comment_count>36</comment_count>
      <attachid>48123</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 02:13:24 -0800</bug_when>
    <thetext>Created attachment 48123
Implementation of FontPlatformData for Haiku port.

This file was implemented by Maxime Simone. I have no idea why it was not added to the repository yet, but it is certainly needed by the Haiku port. Maxime is CC on this ticket, so maybe he can comment. To me, the code looks fine as a first implementation. Eventually, it should use more of Haiku&apos;s font API to remove some hard coded font names, but for now it will definitely work fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187693</commentid>
    <comment_count>37</comment_count>
      <attachid>48124</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 02:16:50 -0800</bug_when>
    <thetext>Created attachment 48124
More robust conversion from BString to String.

Another patch by Maxime Simone. It could be that this more robust conversion is not needed anymore since some recent changes to Haiku&apos;s BString implementation. However, since the Haiku API does not throw on allocation failures, checking BString::String() against NULL is more correct indeed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187694</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-04 02:18:56 -0800</bug_when>
    <thetext>Attachment 48124 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/text/haiku/StringHaiku.cpp:29:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187695</commentid>
    <comment_count>39</comment_count>
      <attachid>48125</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 02:25:12 -0800</bug_when>
    <thetext>Created attachment 48125
Implementation of GlyphPage::fill() for Haiku port.

Patch by Ryan Leavengood (I assume based on copyright). The file is necessary for the Haiku port to work, but I don&apos;t know myself what it actually is. Maybe Maxime can comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187696</commentid>
    <comment_count>40</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2010-02-04 02:29:19 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Created an attachment (id=48122) [details]
&gt; HaikuLauncher minimal browser shell
&gt; 
&gt; Patch now contains a ChangeLog. CheckerBoardView has been removed, it was added
&gt; accidentally.

I think you should create a separated bug for this part of the port. Having
multiple tiny bugs (with a patch per bug) is easier to review, and also your
patches would be handled faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187699</commentid>
    <comment_count>41</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2010-02-04 02:34:09 -0800</bug_when>
    <thetext>(In reply to comment #36)
&gt; Created an attachment (id=48123) [details]
&gt; Implementation of FontPlatformData for Haiku port.
&gt; 
&gt; This file was implemented by Maxime Simone. I have no idea why it was not added
&gt; to the repository yet, but it is certainly needed by the Haiku port. Maxime is
&gt; CC on this ticket, so maybe he can comment. To me, the code looks fine as a
&gt; first implementation. Eventually, it should use more of Haiku&apos;s font API to
&gt; remove some hard coded font names, but for now it will definitely work fine.

There was a bug filled in bugzilla about these files. You may find it. In fact it was discussed but I thought not including it it for the moment to be better. Maybe someone more aware of this part of WebKit can comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187701</commentid>
    <comment_count>42</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2010-02-04 02:38:41 -0800</bug_when>
    <thetext>(In reply to comment #39)
&gt; Created an attachment (id=48125) [details]
&gt; Implementation of GlyphPage::fill() for Haiku port.
&gt; 
&gt; Patch by Ryan Leavengood (I assume based on copyright). The file is necessary
&gt; for the Haiku port to work, but I don&apos;t know myself what it actually is. Maybe
&gt; Maxime can comment.

Ditoo previous comment (this was discussed but not commited).
Would need comments from the experts.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187707</commentid>
    <comment_count>43</comment_count>
      <attachid>48122</attachid>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 02:49:59 -0800</bug_when>
    <thetext>Comment on attachment 48122
HaikuLauncher minimal browser shell

Will create separate bug for the HaikuLauncher code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187711</commentid>
    <comment_count>44</comment_count>
    <who name="Stephan Aßmus">superstippi</who>
    <bug_when>2010-02-04 03:06:24 -0800</bug_when>
    <thetext>The bug which tracked comments for FontPlatformData is https://bugs.webkit.org/show_bug.cgi?id=28131. I agree with Eric&apos;s review and will try to address the remaining issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187742</commentid>
    <comment_count>45</comment_count>
    <who name="Maxime Simon">simon.maxime</who>
    <bug_when>2010-02-04 04:48:29 -0800</bug_when>
    <thetext>(In reply to comment #44)
&gt; The bug which tracked comments for FontPlatformData is
&gt; https://bugs.webkit.org/show_bug.cgi?id=28131. I agree with Eric&apos;s review and
&gt; will try to address the remaining issues.

I was searching it as well (but you were quicker).
Indeed this should really be improved.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>187993</commentid>
    <comment_count>46</comment_count>
      <attachid>48119</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-04 16:19:51 -0800</bug_when>
    <thetext>Comment on attachment 48119
Separate patch to fix small coding style violations.

Clearing flags on attachment: 48119

Committed r54383: &lt;http://trac.webkit.org/changeset/54383&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188226</commentid>
    <comment_count>47</comment_count>
      <attachid>48124</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-05 11:08:13 -0800</bug_when>
    <thetext>Comment on attachment 48124
More robust conversion from BString to String.

Clearing flags on attachment: 48124

Committed r54434: &lt;http://trac.webkit.org/changeset/54434&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188270</commentid>
    <comment_count>48</comment_count>
      <attachid>48125</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-02-05 13:37:35 -0800</bug_when>
    <thetext>Comment on attachment 48125
Implementation of GlyphPage::fill() for Haiku port.

Clearing flags on attachment: 48125

Committed r54442: &lt;http://trac.webkit.org/changeset/54442&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188343</commentid>
    <comment_count>49</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-05 15:39:22 -0800</bug_when>
    <thetext>Can we retire this epic bug and use one patch per bug?  &quot;Improve/maintain Haiku port&quot; is not a task that will ever be finished.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188688</commentid>
    <comment_count>50</comment_count>
      <attachid>48111</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 10:59:51 -0800</bug_when>
    <thetext>Comment on attachment 48111
Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188689</commentid>
    <comment_count>51</comment_count>
      <attachid>48114</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 11:01:00 -0800</bug_when>
    <thetext>Comment on attachment 48114
 Various fixes to mouse/wheel/keyboard event propagation on Haiku

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188690</commentid>
    <comment_count>52</comment_count>
      <attachid>48116</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 11:01:07 -0800</bug_when>
    <thetext>Comment on attachment 48116
Fixes to rect conversion and image rendering on Haiku

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188691</commentid>
    <comment_count>53</comment_count>
      <attachid>48117</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 11:01:16 -0800</bug_when>
    <thetext>Comment on attachment 48117
Implements homeDirectoryPath() and listDirectory() on the Haiku platform.

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188692</commentid>
    <comment_count>54</comment_count>
      <attachid>48123</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 11:01:23 -0800</bug_when>
    <thetext>Comment on attachment 48123
Implementation of FontPlatformData for Haiku port.

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188693</commentid>
    <comment_count>55</comment_count>
      <attachid>48120</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-08 11:01:47 -0800</bug_when>
    <thetext>Comment on attachment 48120
This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.

I believe that this has been submitted in a separate bug which is great! (So I&apos;m obsoleting this patch and removing r? to remove it from the review queue.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188709</commentid>
    <comment_count>56</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-02-08 11:53:55 -0800</bug_when>
    <thetext>Thanks!  Looks like there aren&apos;t any more patches here and its safe to retire this bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48023</attachid>
            <date>2010-02-03 07:16:56 -0800</date>
            <delta_ts>2010-02-04 01:31:54 -0800</delta_ts>
            <desc>Separate patch to fix small coding style violations.</desc>
            <filename>codingstyle.diff</filename>
            <type>text/plain</type>
            <size>1921</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwCShyZXZpc2lv
biA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBACiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlSWNvbkZvckNhY2hlZEltYWdlKENhY2hlZEltYWdlKikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiAwOyAgICAgCisgICAgcmV0dXJuIDA7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVJdGVt
SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1l
bnVJdGVtSGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFp
a3UvQ29udGV4dE1lbnVJdGVtSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3
IEBACiBQbGF0Zm9ybU1lbnVJdGVtRGVzY3JpcHRpb24gQ29udGV4dE1lbnVJdGVtOjpyZWxlYXNl
UGxhdGZvcm1EZXNjcmlwdGlvbigpCiB7CiAgICAgQk1lbnVJdGVtKiBpdGVtID0gbV9wbGF0Zm9y
bURlc2NyaXB0aW9uOwotICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbiA9IE5VTEw7CisgICAgbV9w
bGF0Zm9ybURlc2NyaXB0aW9uID0gMDsKICAgICByZXR1cm4gaXRlbTsKIH0KIApAQCAtMTE2LDcg
KzExNiw3IEBACiAgICAgICAgIG1fcGxhdGZvcm1EZXNjcmlwdGlvbi0+TWVzc2FnZSgpLT53aGF0
ID0gYWN0aW9uOwogfQogCi1TdHJpbmcgQ29udGV4dE1lbnVJdGVtOjp0aXRsZSgpIGNvbnN0IAor
U3RyaW5nIENvbnRleHRNZW51SXRlbTo6dGl0bGUoKSBjb25zdAogewogICAgIGlmIChtX3BsYXRm
b3JtRGVzY3JpcHRpb24pCiAgICAgICAgIHJldHVybiAiIjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZUNob29z
ZXIuaCIKIAorI2luY2x1ZGUgIkljb24uaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgot
I2luY2x1ZGUgIkljb24uaCIKIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L0xvY2FsaXplZFN0cmluZ3NIYWlrdS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Mb2NhbGl6ZWRTdHJpbmdzSGFpa3UuY3BwCShyZXZpc2lv
biA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTG9jYWxpemVkU3RyaW5nc0hhaWt1
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKIAorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogCg==
</data>
<flag name="review"
          id="30629"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="30663"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48025</attachid>
            <date>2010-02-03 07:19:10 -0800</date>
            <delta_ts>2010-02-04 01:38:15 -0800</delta_ts>
            <desc>This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.</desc>
            <filename>mimedatabase.diff</filename>
            <type>text/plain</type>
            <size>2414</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlr
dS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlw
ZVJlZ2lzdHJ5SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3Rl
cGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsMjkgKzI5LDMyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAKKyNpbmNsdWRlIDxNaW1lVHlwZS5oPgogCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIHN0cnVjdCBFeHRlbnNpb25NYXAgewogICAgIGNvbnN0IGNoYXIqIGV4dGVu
c2lvbjsKICAgICBjb25zdCBjaGFyKiBtaW1lVHlwZTsKIH07CiAKLXN0YXRpYyBjb25zdCBFeHRl
bnNpb25NYXAgZXh0ZW5zaW9uTWFwIFtdID0gewotICAgIHsgImJtcCIsICJpbWFnZS9ibXAiIH0s
CitzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcFtdID0geworICAgIHsgInBu
ZyIsICJpbWFnZS9wbmciIH0sCisgICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCiAgICAgeyAi
Z2lmIiwgImltYWdlL2dpZiIgfSwKICAgICB7ICJodG1sIiwgInRleHQvaHRtbCIgfSwKLSAgICB7
ICJpY28iLCAiaW1hZ2UveC1pY29uIiB9LCAgIAorICAgIHsgInN2ZyIsICJpbWFnZS9zdmcreG1s
IiB9LAorICAgIHsgImpzIiwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIgfSwKKyAgICB7ICJ0
ZXh0IiwgInRleHQvcGxhaW4iIH0sCisgICAgeyAidHh0IiwgInRleHQvcGxhaW4iIH0sCisgICAg
eyAiYm1wIiwgImltYWdlL2JtcCIgfSwKKyAgICB7ICJpY28iLCAiaW1hZ2UveC1pY29uIiB9LAog
ICAgIHsgImpwZWciLCAiaW1hZ2UvanBlZyIgfSwKLSAgICB7ICJqcGciLCAiaW1hZ2UvanBlZyIg
fSwKLSAgICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiIH0sCiAgICAgeyAicGRm
IiwgImFwcGxpY2F0aW9uL3BkZiIgfSwKLSAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAogICAg
IHsgInJzcyIsICJhcHBsaWNhdGlvbi9yc3MreG1sIiB9LAotICAgIHsgInN2ZyIsICJpbWFnZS9z
dmcreG1sIiB9LAotICAgIHsgInRleHQiLCAidGV4dC9wbGFpbiIgfSwKLSAgICB7ICJ0eHQiLCAi
dGV4dC9wbGFpbiIgfSwKICAgICB7ICJ4Ym0iLCAiaW1hZ2UveC14Yml0bWFwIiB9LAogICAgIHsg
InhtbCIsICJ0ZXh0L3htbCIgfSwKICAgICB7ICJ4c2wiLCAidGV4dC94c2wiIH0sCkBAIC02Miwx
MiArNjYsMjMgQEAKIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcgJmV4dCkKIHsKICAgICBTdHJpbmcgc3RyID0gZXh0Lmxvd2VyKCk7
CisKKyAgICAvLyBUcnkgc3lzdGVtIGJ1aWx0LWluIHR5cGVzCiAgICAgY29uc3QgRXh0ZW5zaW9u
TWFwICpleHRNYXAgPSBleHRlbnNpb25NYXA7CiAgICAgd2hpbGUgKGV4dE1hcC0+ZXh0ZW5zaW9u
KSB7CiAgICAgICAgIGlmIChzdHIgPT0gZXh0TWFwLT5leHRlbnNpb24pCiAgICAgICAgICAgICBy
ZXR1cm4gZXh0TWFwLT5taW1lVHlwZTsKICAgICAgICAgKytleHRNYXA7CiAgICAgfQorCisgICAg
Ly8gVHJ5IHN5c3RlbSBtaW1lIGRhdGFiYXNlCisgICAgU3RyaW5nIGZha2VGaWxlTmFtZSgiZmls
ZW5hbWUuIik7CisgICAgZmFrZUZpbGVOYW1lLmFwcGVuZChzdHIpOworCisgICAgQk1pbWVUeXBl
IHR5cGU7CisgICAgaWYgKEJNaW1lVHlwZTo6R3Vlc3NNaW1lVHlwZShmYWtlRmlsZU5hbWUudXRm
OCgpLmRhdGEoKSwgJnR5cGUpID09IEJfT0spCisgICAgICAgIHJldHVybiB0eXBlLlR5cGUoKTsK
KwogICAgIC8vIHVua25vd24sIGxldCdzIGp1c3QgYXNzdW1lIHBsYWluIHRleHQKICAgICByZXR1
cm4gInRleHQvcGxhaW4iOwogfQo=
</data>
<flag name="review"
          id="30631"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48027</attachid>
            <date>2010-02-03 07:31:34 -0800</date>
            <delta_ts>2010-02-04 01:26:43 -0800</delta_ts>
            <desc>Implements homeDirectoryPath() and listDirectory() on the Haiku platform.</desc>
            <filename>filesystem.diff</filename>
            <type>text/plain</type>
            <size>1353</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3RlbUhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5jcHAJKHJldmlz
aW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0yOSw5ICszMCwxNCBAQAogI2luY2x1ZGUgIkZpbGVTeXN0
ZW0uaCIKIAogI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgPERpcmVjdG9yeS5oPgorI2luY2x1ZGUgPEVudHJ5Lmg+CisjaW5jbHVk
ZSA8RmlsZS5oPgorI2luY2x1ZGUgPEZpbmREaXJlY3RvcnkuaD4KKyNpbmNsdWRlIDxQYXRoLmg+
CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDMsOCArNDksMTEgQEAKIAogU3RyaW5nIGhv
bWVEaXJlY3RvcnlQYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBT
dHJpbmcoKTsKKyAgICBCUGF0aCBwYXRoOworICAgIGlmIChmaW5kX2RpcmVjdG9yeShCX1VTRVJf
RElSRUNUT1JZLCAmcGF0aCkgIT0gQl9PSykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisg
ICAgcmV0dXJuIFN0cmluZyhwYXRoLlBhdGgoKSk7CiB9CiAKIENTdHJpbmcgb3BlblRlbXBvcmFy
eUZpbGUoY29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKQEAg
LTc0LDcgKzgzLDEwIEBACiBWZWN0b3I8U3RyaW5nPiBsaXN0RGlyZWN0b3J5KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBmaWx0ZXIpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gZW50
cmllczsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJEaXJlY3RvcnkgZGlyZWN0b3J5KHBh
dGgudXRmOCgpLmRhdGEoKSk7CisgICAgZW50cnlfcmVmIHJlZjsKKyAgICB3aGlsZSAoZGlyZWN0
b3J5LkdldE5leHRSZWYoJnJlZikgPT0gQl9PSykKKyAgICAgICAgZW50cmllcy5hcHBlbmQocmVm
Lm5hbWUpOyAgICAgICAgCiAgICAgcmV0dXJuIGVudHJpZXM7CiB9CiAK
</data>
<flag name="review"
          id="30633"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48031</attachid>
            <date>2010-02-03 07:40:51 -0800</date>
            <delta_ts>2010-02-04 01:19:30 -0800</delta_ts>
            <desc>Fixes to rect conversion and image rendering on Haiku</desc>
            <filename>rects_and_images.diff</filename>
            <type>text/plain</type>
            <size>6619</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNw
cAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lt
YWdlSGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogQ29weXJpZ2h0
IChDKSAyMDA2IFNpbW9uIEhhdXNtYW5uIDxoYXVzbWFubkBrZGUub3JnPgogICogQ29weXJpZ2h0
IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4K
ICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM1LDggKzM2LDEwIEBACiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUg
IlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb24uaD4KICNpbmNs
dWRlIDxCaXRtYXAuaD4KICNpbmNsdWRlIDxWaWV3Lmg+CkBAIC0xMDUsMzUgKzEwOCw1OSBAQAog
ICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRlIGF0CiAgICAgLy8gaHR0cDovL3d3dy5tZXll
cndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4c3BpcmFsL2RlbW8uaHRtbAogICAgIGN0eHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKLSAgICBjdHh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5C
b3VuZHMoKSwgZHN0UmVjdCk7CisgICAgY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPkRyYXdCaXRt
YXAoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QpOwogICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAg
IGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0
aGlzKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgc3JjUG9pbnQsIENvbG9yU3Bh
Y2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCit2b2lk
IEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qp
CiB7Ci0gICAgLy8gRklYTUU6IGZpbmlzaCB0aGlzIHRvIHN1cHBvcnQgYWxzbyBwaGFzZWQgcG9z
aXRpb24gKHNyY1BvaW50KQogICAgIHN0YXJ0QW5pbWF0aW9uKCk7CiAKICAgICBCQml0bWFwKiBp
bWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpbWFnZSB8fCAh
aW1hZ2UtPklzVmFsaWQoKSkgLy8gSWYgdGhlIGltYWdlIGhhc24ndCBmdWxseSBsb2FkZWQuCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IGN1cnJlbnRXID0gMDsKLSAgICBmbG9hdCBjdXJy
ZW50SCA9IDA7CisgICAgLy8gRmlndXJlIG91dCBpZiB0aGUgaW1hZ2UgaGFzIGFueSBhbHBoYSB0
cmFuc3BhcmVuY3ksIHdlIGNhbiB1c2UgZmFzdGVyIGRyYXdpbmcgaWYgbm90CisgICAgYm9vbCBo
YXNBbHBoYSA9IHRydWU7CiAKKyAgICB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDgqPihpbWFnZS0+Qml0cygpKTsKKyAgICB1aW50MzIgd2lkdGggPSBpbWFnZS0+Qm91bmRzKCku
SW50ZWdlcldpZHRoKCkgKyAxOworICAgIHVpbnQzMiBoZWlnaHQgPSBpbWFnZS0+Qm91bmRzKCku
SW50ZWdlckhlaWdodCgpICsgMTsKKyAgICB1aW50MzIgYnByID0gaW1hZ2UtPkJ5dGVzUGVyUm93
KCk7CisgICAgZm9yICh1aW50MzIgeSA9IDA7IHkgPCBoZWlnaHQgJiYgIWhhc0FscGhhOyB5Kysp
IHsKKyAgICAgICAgdWludDgqIHAgPSBiaXRzOworICAgICAgICBmb3IgKHVpbnQzMiB4ID0gMDsg
eCA8IHdpZHRoICYmICFoYXNBbHBoYTsgeCsrKSB7CisgICAgICAgICAgICBoYXNBbHBoYSA9IHBb
M10gPCAyNTU7CisgICAgICAgICAgICBwICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgYml0cyAr
PSBicHI7CisgICAgfQorCiAgICAgY29udGV4dC0+c2F2ZSgpOwotICAgIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKyAgICBpZiAoaGFzQWxw
aGEpCisgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShC
X09QX0FMUEhBKTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOwogICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5n
SW50UmVjdChkc3RSZWN0KSk7Ci0KLSAgICB3aGlsZSAoY3VycmVudFcgPCBkc3RSZWN0LndpZHRo
KCkpIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRIIDwgZHN0UmVjdC5oZWlnaHQoKSkgewotICAg
ICAgICAgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPkRyYXdCaXRtYXAoaW1hZ2UsIEJQ
b2ludChkc3RSZWN0LngoKSArIGN1cnJlbnRXLCBkc3RSZWN0LnkoKSArIGN1cnJlbnRIKSk7Ci0g
ICAgICAgICAgICBjdXJyZW50SCArPSB0aWxlUmVjdC5oZWlnaHQoKTsKKyAgICBmbG9hdCBjdXJy
ZW50VyA9IHBoYXNlLngoKTsKKyAgICBCUmVjdCBiVGlsZVJlY3QodGlsZVJlY3QpOworICAgIHdo
aWxlIChjdXJyZW50VyA8IGRzdFJlY3QueCgpICsgZHN0UmVjdC53aWR0aCgpKSB7CisgICAgICAg
IGZsb2F0IGN1cnJlbnRIID0gcGhhc2UueSgpOworICAgICAgICB3aGlsZSAoY3VycmVudEggPCBk
c3RSZWN0LnkoKSArIGRzdFJlY3QuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIEJSZWN0IGJEc3RS
ZWN0KGN1cnJlbnRXLCBjdXJyZW50SCwgY3VycmVudFcgKyB3aWR0aCAtIDEsIGN1cnJlbnRIICsg
aGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJh
d0JpdG1hcChpbWFnZSwgYlRpbGVSZWN0LCBiRHN0UmVjdCk7CisgICAgICAgICAgICBjdXJyZW50
SCArPSBoZWlnaHQ7CiAgICAgICAgIH0KLSAgICAgICAgY3VycmVudFcgKz0gdGlsZVJlY3Qud2lk
dGgoKTsKLSAgICAgICAgY3VycmVudEggPSAwOworICAgICAgICBjdXJyZW50VyArPSB3aWR0aDsK
ICAgICB9CiAgICAgY29udGV4dC0+cmVzdG9yZSgpOworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwogfQogCiB2b2lkIEJp
dG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5j
cHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9o
YWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzLCA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4
ICszMywxOSBAQAogCiBOYXRpdmVJbWFnZVB0ciBSR0JBMzJCdWZmZXI6OmFzTmV3TmF0aXZlSW1h
Z2UoKSBjb25zdAogewotICAgIEJCaXRtYXAqIGJtcCA9IG5ldyBCQml0bWFwKEJSZWN0KDAsIDAs
IHdpZHRoKCksIGhlaWdodCgpKSwgQl9SR0IzMik7Ci0gICAgYm1wLT5TZXRCaXRzKG1fYnl0ZXMu
ZGF0YSgpLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSwgMCwgQl9SR0IzMik7Cisg
ICAgaW50IGJ5dGVzUGVyUm93ID0gd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOworICAgIEJC
aXRtYXAqIGJtcCA9IG5ldyBCQml0bWFwKEJSZWN0KDAsIDAsIHdpZHRoKCkgLSAxLCBoZWlnaHQo
KSAtIDEpLCAwLAorICAgICAgICBCX1JHQkEzMiwgYnl0ZXNQZXJSb3cpOworCisgICAgY29uc3Qg
dWludDgqIHNyYyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDgqPihtX2J5dGVzLmRhdGEo
KSk7CisgICAgdWludDgqIGRzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihibXAtPkJpdHMo
KSk7CisgICAgaW50IGggPSBoZWlnaHQoKTsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGg7IHkr
KykgeworICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIGJ5dGVzUGVyUm93KTsKKyAgICAgICAgZHN0
ICs9IGJ5dGVzUGVyUm93OworICAgICAgICBzcmMgKz0gYnl0ZXNQZXJSb3c7CisgICAgfQorCiAg
ICAgcmV0dXJuIGJtcDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9GbG9hdFJlY3RIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9GbG9hdFJlY3RIYWlrdS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVu
Z29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhh
biBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKQEAgLTM1LDEzICszNiwxMyBAQAogCiBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBC
UmVjdCYgcmVjdCkKICAgICA6IG1fbG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCi0gICAgLCBtX3Np
emUocmVjdC5XaWR0aCgpLCByZWN0LkhlaWdodCgpKQorICAgICwgbV9zaXplKHJlY3QuV2lkdGgo
KSArIDEsIHJlY3QuSGVpZ2h0KCkgKyAxKQogewogfQogCiBGbG9hdFJlY3Q6Om9wZXJhdG9yIEJS
ZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwg
QlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ludFJlY3RIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRS
ZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvSW50UmVjdEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEz
IEBACiAKIEludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHJlY3QpCiAgICAgOiBtX2xvY2F0
aW9uKHJlY3QuTGVmdFRvcCgpKQotICAgICwgbV9zaXplKHJlY3QuSW50ZWdlcldpZHRoKCksIHJl
Y3QuSW50ZWdlckhlaWdodCgpKQorICAgICwgbV9zaXplKHJlY3QuSW50ZWdlcldpZHRoKCkgKyAx
LCByZWN0LkludGVnZXJIZWlnaHQoKSArIDEpCiB7CiB9CiAKIEludFJlY3Q6Om9wZXJhdG9yIEJS
ZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUo
d2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwg
QlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>
<flag name="review"
          id="30639"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48032</attachid>
            <date>2010-02-03 07:55:33 -0800</date>
            <delta_ts>2010-02-03 08:11:52 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>36022</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJ
KHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRo
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgog
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMCwxNSArMzEsMjAgQEAKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxSZWdpb24uaD4KKyNpbmNsdWRlICJTdHJv
a2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPFNoYXBlLmg+CisjaW5jbHVkZSA8Vmlldy5oPgog
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGF0aDo6UGF0aCgpCi0gICAgOiBtX3BhdGgobmV3
IEJSZWdpb24oKSkKKyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCkpCiB7CiB9CiAKQEAgLTQ4LDcg
KzU0LDcgQEAKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6IG1fcGF0
aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorICAgIDogbV9wYXRoKG5ldyBC
U2hhcGUoKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKIHsKIH0KIApAQCAtNjcsMjggKzczLDEyNSBA
QAogCiBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVs
ZSBydWxlKSBjb25zdAogewotICAgIHJldHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKKyAg
ICAvLyBUT0RPOiBUaGlzIGlzIHByb2JhYmx5IHRvbyBleHBlbnNpdmUuIFVzZSBvbmUgaW5zdGFu
Y2Ugb2YgYSBzY3JhdGNoCisgICAgLy8gaW1hZ2UuCisgICAgQkJpdG1hcCBiaXRtYXAoQlJlY3Qo
MCwgMCwgMCwgMCksCisgICAgICAgIEJfQklUTUFQX0NMRUFSX1RPX1dISVRFIHwgQl9CSVRNQVBf
QUNDRVBUU19WSUVXUywgQl9SR0IzMik7CisgICAgQlZpZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAw
KSwgIiIsIDAsIDApOworICAgIGJpdG1hcC5Mb2NrKCk7CisgICAgYml0bWFwLkFkZENoaWxkKCZ2
aWV3KTsKKyAgICAvLyBDdXJyZW50IHBlbiBsb2NhdGlvbiBpcyB1c2VkIGFzIG9yaWdpbiBmb3Ig
dGhlIHNoYXBlLgorICAgIHZpZXcuTW92ZVBlblRvKC1wb2ludC54KCksIC1wb2ludC55KCkpOwor
ICAgIC8vIFRPRE86IEhhbmRsZSBXaW5kUnVsZS4uLiAobmVlZHMgc3VwcG9ydCBpbiBCVmlldywg
dGhlIGJhY2tlbmQgYWxyZWFkeQorICAgIC8vIHN1cHBvcnQgaXQuKQorICAgIHZpZXcuRmlsbFNo
YXBlKG1fcGF0aCk7CisgICAgdmlldy5TeW5jKCk7CisKKyAgICB1aW50OCogYml0cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRtYXAuQml0cygpKTsKKyAgICBib29sIHJlc3VsdCA9IGJp
dHNbMF0gPCAxMjg7CisKKyAgICB2aWV3LlJlbW92ZVNlbGYoKTsKKyAgICBiaXRtYXAuVW5sb2Nr
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhT
dHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIEFTU0VSVChhcHBsaWVyKTsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgcHJvYmFi
bHkgdG9vIGV4cGVuc2l2ZS4gVXNlIG9uZSBpbnN0YW5jZSBvZiBhIHNjcmF0Y2gKKyAgICAvLyBp
bWFnZSwgc2VlIGFib3ZlLgorICAgIC8vIFRPRE86IENvZGUgZHVwbGljYXRpb24gYWJvdmUuCisg
ICAgQkJpdG1hcCBiaXRtYXAoQlJlY3QoMCwgMCwgMCwgMCksCisgICAgICAgIEJfQklUTUFQX0NM
RUFSX1RPX1dISVRFIHwgQl9CSVRNQVBfQUNDRVBUU19WSUVXUywgQl9SR0IzMik7CisgICAgQlZp
ZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAwKSwgIiIsIDAsIDApOworICAgIGJpdG1hcC5Mb2NrKCk7
CisgICAgYml0bWFwLkFkZENoaWxkKCZ2aWV3KTsKKyAgICAvLyBDdXJyZW50IHBlbiBsb2NhdGlv
biBpcyB1c2VkIGFzIG9yaWdpbiBmb3IgdGhlIHNoYXBlLgorICAgIHZpZXcuTW92ZVBlblRvKC1w
b2ludC54KCksIC1wb2ludC55KCkpOworICAgIC8vIFRPRE86IEhhbmRsZSBXaW5kUnVsZS4uLiAo
bmVlZHMgc3VwcG9ydCBpbiBCVmlldywgdGhlIGJhY2tlbmQgYWxyZWFkeQorICAgIC8vIHN1cHBv
cnQgaXQuKQorICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZ2aWV3KTsKKyAgICBhcHBsaWVy
LT5zdHJva2VTdHlsZSgmY29udGV4dCk7CisgICAgCisgICAgdmlldy5TdHJva2VTaGFwZShtX3Bh
dGgpOworICAgIHZpZXcuU3luYygpOworCisgICAgdWludDgqIGJpdHMgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4Kj4oYml0bWFwLkJpdHMoKSk7CisgICAgYm9vbCByZXN1bHQgPSBiaXRzWzBdIDwg
MTI4OworCisgICAgdmlldy5SZW1vdmVTZWxmKCk7CisgICAgYml0bWFwLlVubG9jaygpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9y
IGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3Mg
VHJhbnNsYXRlSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNsYXRlSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQorICAgICAgICAgICAgOiBtX3NoYXBlKHNoYXBlKQorICAgICAgICAgICAgLCBtX3Np
emUoc2l6ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qg
SXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICBwb2lu
dC0+eCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTGluZVRvKGludDMyIGxpbmVD
b3VudCwgQlBvaW50KiBsaW5lUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobGlu
ZUNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBsaW5lUHRzLT54ICs9IG1fc2l6ZS53aWR0aCgp
OworICAgICAgICAgICAgICAgIGxpbmVQdHMtPnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAg
ICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBC
X09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVy
VG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0
c1swXS54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1swXS55
ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0ueCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0ueSArPSBtX3NpemUu
aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzJdLnggKz0gbV9zaXplLndpZHRo
KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzJdLnkgKz0gbV9zaXplLmhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0
ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBCU2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNv
bnN0IEZsb2F0U2l6ZSYgbV9zaXplOworICAgIH0gdHJhbnNsYXRlSXRlcmF0b3IobV9wYXRoLCBz
aXplKTsKKworICAgIHRyYW5zbGF0ZUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxv
YXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aC0+
RnJhbWUoKTsKKyAgICByZXR1cm4gbV9wYXRoLT5Cb3VuZHMoKTsKIH0KIAogdm9pZCBQYXRoOjpt
b3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgLy8gRklYTUU6IFVzZSBPZmZz
ZXRCeT8KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJSZWN0IGJvdW5kcyA9IG1fcGF0aC0+
Qm91bmRzKCk7CisgICAgdHJhbnNsYXRlKEZsb2F0U2l6ZShwb2ludC54KCkgLSBib3VuZHMubGVm
dCwgcG9pbnQueSgpIC0gYm91bmRzLnRvcCkpOwogfQogCiB2b2lkIFBhdGg6OmFkZExpbmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9wYXRo
LT5MaW5lVG8ocCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCkBAIC05OCw3ICsyMDEsMTEgQEAKIAogdm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxv
YXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgQlBvaW50IHBvaW50c1szXTsKKyAgICBwb2ludHNbMF0gPSBjcDE7CisgICAgcG9p
bnRzWzFdID0gY3AyOworICAgIHBvaW50c1syXSA9IHA7CisgICAgbV9wYXRoLT5CZXppZXJUbyhw
b2ludHMpOwogfQogCiB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBj
b25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQpAQCAtMTA4LDcgKzIxNSw3IEBACiAK
IHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2lu
dCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkK
QEAgLTExOCw3ICsyMjUsMTIgQEAKIAogdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcikKIHsKLSAgICBtX3BhdGgtPkluY2x1ZGUocik7CisgICAgbV9wYXRoLT5DbG9zZSgpOwor
ICAgIG1fcGF0aC0+TW92ZVRvKEJQb2ludChyLngoKSwgci55KCkpKTsKKyAgICBtX3BhdGgtPkxp
bmVUbyhCUG9pbnQoci54KCkgKyByLndpZHRoKCksIHIueSgpKSk7CisgICAgbV9wYXRoLT5MaW5l
VG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCByLnkoKSArIHIuaGVpZ2h0KCkpKTsKKyAgICBt
X3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCksIHIueSgpICsgci5oZWlnaHQoKSkpOworICAgIG1f
cGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcikKQEAgLTEyOCwxMiArMjQwLDEyIEBACiAKIHZvaWQgUGF0aDo6Y2xlYXIoKQogewotICAg
IG1fcGF0aC0+TWFrZUVtcHR5KCk7CisgICAgbV9wYXRoLT5DbGVhcigpOwogfQogCiBib29sIFBh
dGg6OmlzRW1wdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFs
aWQoKTsKKyAgICByZXR1cm4gIW1fcGF0aC0+Qm91bmRzKCkuSXNWYWxpZCgpOwogfQogCiBTdHJp
bmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdApAQCAtMTQ5LDE4ICsyNjEsMTA2IEBACiAKIHZv
aWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRv
IG1vZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBjbGFzcyBUcmFuc2Zvcm1JdGVy
YXRvciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFu
c2Zvcm1JdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFu
c2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBz
dGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICBy
ZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0
ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMg
PSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0
cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJD
b3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChi
ZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zv
cm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0g
PSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJl
emllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAg
ICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNs
b3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0
aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsK
IH0KIAogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9y
IGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3Mg
VHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2lu
dCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0
cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAg
ICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAg
ICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXpp
ZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVy
UHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemll
clB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJf
T0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsK
KyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1fdHJhbnNmb3JtOworICAgIH0g
dHJhbnNmb3JtSXRlcmF0b3IobV9wYXRoLCB0cmFuc2Zvcm0pOworCisgICAgdHJhbnNmb3JtSXRl
cmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gbV9wYXRoLT5Cb3VuZHMo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEtl
dmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAdGhl
b2xsaXZpZXJzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywy
NiArMjgsNDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgog
Ci0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDxHcmFkaWVudExpbmVhci5oPgor
I2luY2x1ZGUgPEdyYWRpZW50UmFkaWFsLmg+CisjaW5jbHVkZSA8Vmlldy5oPgogCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0ZSBtX2dyYWRpZW50OwogfQogCiBQbGF0Zm9y
bUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmIChtX2dyYWRpZW50KQorICAgICAgICByZXR1
cm4gbV9ncmFkaWVudDsKKworICAgIGlmIChtX3JhZGlhbCkgeworICAgICAgICAvLyBUT0RPOiBT
dXBwb3J0IG1fcjA/CisgICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgQkdyYWRpZW50UmFkaWFsKG1f
cDAsIG1fcjEpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgQkdyYWRp
ZW50TGluZWFyKG1fcDAsIG1fcDEpOworICAgIH0KKyAgICBzaXplX3Qgc2l6ZSA9IG1fc3RvcHMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
IGNvbnN0IENvbG9yU3RvcCYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAgICAgIHJnYl9jb2xvciBj
b2xvcjsKKyAgICAgICAgY29sb3IucmVkID0gKHVpbnQ4KShzdG9wLnJlZCAqIDI1NS4wKTsKKyAg
ICAgICAgY29sb3IuZ3JlZW4gPSAodWludDgpKHN0b3AuZ3JlZW4gKiAyNTUuMCk7CisgICAgICAg
IGNvbG9yLmJsdWUgPSAodWludDgpKHN0b3AuYmx1ZSAqIDI1NS4wKTsKKyAgICAgICAgY29sb3Iu
YWxwaGEgPSAodWludDgpKHN0b3AuYWxwaGEgKiAyNTUuMCk7CisgICAgICAgIG1fZ3JhZGllbnQt
PkFkZENvbG9yKGNvbG9yLCBzdG9wLnN0b3ApOworICAgIH0KKyAgICByZXR1cm4gbV9ncmFkaWVu
dDsKIH0KIAotdm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmKQordm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5GaWxsUmVjdChyZWN0LCAqbV9ncmFkaWVudCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lvbiA1
NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgog
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMywxMiArMzQsMTUgQEAKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgorI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgPEJpdG1hcC5oPgogI2luY2x1ZGUgPEdyYXBo
aWNzRGVmcy5oPgogI2luY2x1ZGUgPFJlZ2lvbi5oPgorI2luY2x1ZGUgPFNoYXBlLmg+CiAjaW5j
bHVkZSA8Vmlldy5oPgogI2luY2x1ZGUgPFdpbmRvdy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBA
IC01MSwxNiArNTUsMTUxIEBACiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJW
aWV3KiB2aWV3KTsKICAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKLSAg
ICBCVmlldyogbV92aWV3OworICAgIHN0cnVjdCBMYXllciB7CisgICAgcHVibGljOgorICAgICAg
ICBMYXllcihCVmlldyogX3ZpZXcpCisgICAgICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAg
ICAgICAsIGJpdG1hcCgwKQorICAgICAgICAgICAgLCBzdHJva2VDb2xvcigocmdiX2NvbG9yKXsg
MCwgMCwgMCwgMCB9KQorICAgICAgICAgICAgLCBmaWxsQ29sb3IoKHJnYl9jb2xvcil7IDAsIDAs
IDAsIDI1NSB9KQorICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgyNTUpCisgICAgICAgICAgICAs
IGN1cnJlbnRTaGFwZSgwKQorICAgICAgICAgICAgLCBsb2NhdGlvbkluUGFyZW50KEJfT1JJR0lO
KQorICAgICAgICAgICAgLCBhY2N1bXVsYXRlZE9yaWdpbihCX09SSUdJTikKKyAgICAgICAgICAg
ICwgcHJldmlvdXMoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIExheWVyKExheWVy
KiBwcmV2aW91cykKKyAgICAgICAgICAgIDogdmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAo
MCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3IoKHJnYl9jb2xvcil7IDAsIDAsIDAsIDAgfSkK
KyAgICAgICAgICAgICwgZmlsbENvbG9yKChyZ2JfY29sb3IpeyAwLCAwLCAwLCAyNTUgfSkKKyAg
ICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUo
MCkKKyAgICAgICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAg
ICwgYWNjdW11bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHBy
ZXZpb3VzKQorICAgICAgICB7CisgICAgICAgICAgICBCUmVnaW9uIHBhcmVudENsaXBwaW5nOwor
ICAgICAgICAgICAgcHJldmlvdXMtPnZpZXctPkdldENsaXBwaW5nUmVnaW9uKCZwYXJlbnRDbGlw
cGluZyk7CisgICAgICAgICAgICBCUmVjdCBmcmFtZUluUGFyZW50ID0gcGFyZW50Q2xpcHBpbmcu
RnJhbWUoKTsKKyAgICAgICAgICAgIGlmICghZnJhbWVJblBhcmVudC5Jc1ZhbGlkKCkpCisgICAg
ICAgICAgICAgICAgZnJhbWVJblBhcmVudCA9IHByZXZpb3VzLT52aWV3LT5Cb3VuZHMoKTsKKyAg
ICAgICAgICAgIEJSZWN0IGJvdW5kcyA9IGZyYW1lSW5QYXJlbnQuT2Zmc2V0VG9Db3B5KEJfT1JJ
R0lOKTsKKyAgICAgICAgICAgIGxvY2F0aW9uSW5QYXJlbnQgKz0gZnJhbWVJblBhcmVudC5MZWZ0
VG9wKCk7CisgICAgICAgICAgICB2aWV3ID0gbmV3IEJWaWV3KGJvdW5kcywgIldlYkNvcmUgdHJh
bnNwYXJlbmN5IGxheWVyIiwgMCwgMCk7CisgICAgICAgICAgICBiaXRtYXAgPSBuZXcgQkJpdG1h
cChib3VuZHMsIEJfUkdCQTMyLCB0cnVlKTsKKyAgICAgICAgICAgIGJpdG1hcC0+TG9jaygpOwor
ICAgICAgICAgICAgYml0bWFwLT5BZGRDaGlsZCh2aWV3KTsKKyAgICAgICAgICAgIHZpZXctPlNl
dEhpZ2hDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxSZWN0KHZpZXct
PkJvdW5kcygpKTsKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihwcmV2aW91cy0+dmll
dy0+SGlnaENvbG9yKCkpOworICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01vZGUocHJldmlv
dXMtPnZpZXctPkRyYXdpbmdNb2RlKCkpOworICAgICAgICAgICAgdmlldy0+U2V0QmxlbmRpbmdN
b2RlKEJfUElYRUxfQUxQSEEsIEJfQUxQSEFfQ09NUE9TSVRFKTsKKyAgICAgICAgICAgIC8vIFRP
RE86IGxvY2F0aW9uSW5QYXJlbnQgYW5kIGFjY3VtdWxhdGVkT3JpZ2luIGNhbgorICAgICAgICAg
ICAgLy8gcHJvYmFibHkgc29tZWhvdyBiZSBtZXJnZWQuIEJ1dCBmb3Igbm93IGl0IHdvcmtzLgor
ICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmlnaW4ueCA9IC1mcmFtZUluUGFyZW50LmxlZnQ7Cisg
ICAgICAgICAgICBhY2N1bXVsYXRlZE9yaWdpbi55ID0gLWZyYW1lSW5QYXJlbnQudG9wOworICAg
ICAgICAgICAgdmlldy0+U2V0T3JpZ2luKHByZXZpb3VzLT5hY2N1bXVsYXRlZE9yaWdpbiArIGFj
Y3VtdWxhdGVkT3JpZ2luKTsKKyAgICAgICAgICAgIHZpZXctPlNldFNjYWxlKHByZXZpb3VzLT52
aWV3LT5TY2FsZSgpKTsKKyAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUocHJldmlvdXMtPnZp
ZXctPlBlblNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgfkxheWVyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGJpdG1hcCkgeworICAgICAgICAgICAgICAgIGJpdG1hcC0+VW5sb2Nr
KCk7CisgICAgICAgICAgICAgICAgLy8gRGVsZXRpbmcgdGhlIGJpdG1hcCB3aWxsIGFsc28gdGFr
ZSBjYXJlIG9mIHRoZSB2aWV3LAorICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGJp
dG1hcCwgdGhlIHZpZXcgZG9lcyBub3QgYmVsb25nIHRvIHVzIChpbml0aWFsIGxheWVyKS4KKyAg
ICAgICAgICAgICAgICBkZWxldGUgYml0bWFwOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZGVsZXRlIGN1cnJlbnRTaGFwZTsKKyAgICAgICAgfQorCisgICAgICAgIEJWaWV3KiB2aWV3Owor
ICAgICAgICBCQml0bWFwKiBiaXRtYXA7CisgICAgICAgIHJnYl9jb2xvciBzdHJva2VDb2xvcjsK
KyAgICAgICAgcmdiX2NvbG9yIGZpbGxDb2xvcjsKKyAgICAgICAgdWludDggZ2xvYmFsQWxwaGE7
CisgICAgICAgIEJTaGFwZSogY3VycmVudFNoYXBlOworICAgICAgICBCUG9pbnQgbG9jYXRpb25J
blBhcmVudDsKKyAgICAgICAgQlBvaW50IGFjY3VtdWxhdGVkT3JpZ2luOworCisgICAgICAgIExh
eWVyKiBwcmV2aW91czsKKyAgICB9OworCisgICAgQlZpZXcqIHZpZXcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudExheWVyLT52aWV3OworICAgIH0KKworICAgIHZvaWQg
c2V0U2hhcGUoQlNoYXBlKiBzaGFwZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2N1cnJlbnRM
YXllci0+Y3VycmVudFNoYXBlOworICAgICAgICBtX2N1cnJlbnRMYXllci0+Y3VycmVudFNoYXBl
ID0gc2hhcGU7CisgICAgfQorCisgICAgQlNoYXBlKiBzaGFwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIW1fY3VycmVudExheWVyLT5jdXJyZW50U2hhcGUpCisgICAgICAgICAgICBtX2N1
cnJlbnRMYXllci0+Y3VycmVudFNoYXBlID0gbmV3IEJTaGFwZSgpOworICAgICAgICByZXR1cm4g
bV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hMYXll
cihmbG9hdCBvcGFjaXR5KQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50TGF5ZXIgPSBuZXcgTGF5
ZXIobV9jdXJyZW50TGF5ZXIpOworICAgICAgICBtX2N1cnJlbnRMYXllci0+Z2xvYmFsQWxwaGEg
PSAodWludDgpKG9wYWNpdHkgKiAyNTUuMCk7CisgICAgfQorCisgICAgdm9pZCBwb3BMYXllcigp
CisgICAgeworICAgICAgICBpZiAoIW1fY3VycmVudExheWVyLT5wcmV2aW91cykKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgTGF5ZXIqIGxheWVyID0gbV9jdXJyZW50TGF5ZXI7CisgICAg
ICAgIG1fY3VycmVudExheWVyID0gbGF5ZXItPnByZXZpb3VzOworICAgICAgICBpZiAobGF5ZXIt
Pmdsb2JhbEFscGhhID4gMCkgeworICAgICAgICAgICAgLy8gUG9zdCBwcm9jZXNzIHRoZSBiaXRt
YXAgaW4gb3JkZXIgdG8gYXBwbHkgZ2xvYmFsIGFscGhhLi4uCisgICAgICAgICAgICBpZiAobGF5
ZXItPmdsb2JhbEFscGhhIDwgMjU1KSB7CisgICAgICAgICAgICAgICAgdWludDgqIGJpdHMgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4Kj4obGF5ZXItPmJpdG1hcC0+Qml0cygpKTsKKyAgICAgICAg
ICAgICAgICB1aW50MzIgd2lkdGggPSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VyV2lk
dGgoKSArIDE7CisgICAgICAgICAgICAgICAgdWludDMyIGhlaWdodCA9IGxheWVyLT5iaXRtYXAt
PkJvdW5kcygpLkludGVnZXJIZWlnaHQoKSArIDE7CisgICAgICAgICAgICAgICAgdWludDMyIGJw
ciA9IGxheWVyLT5iaXRtYXAtPkJ5dGVzUGVyUm93KCk7CisgICAgICAgICAgICAgICAgdWludDgg
YWxwaGEgPSBsYXllci0+Z2xvYmFsQWxwaGE7CisgICAgICAgICAgICAgICAgZm9yICh1aW50MzIg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgICAgICB1aW50OCogcCA9
IGJpdHM7CisgICAgICAgICAgICAgICAgICAgIGZvciAodWludDMyIHggPSAwOyB4IDwgd2lkdGg7
IHgrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhlcmUgaXMgYSBtZXRo
b2QgdG8gZG8gc2hpZnRpbmcgd2l0aG91dCBiaXQgZXJyb3JzLgorICAgICAgICAgICAgICAgICAg
ICAgICAgcFswXSA9ICh1aW50OCkoKHVpbnQxNilwWzBdICogYWxwaGEgPj4gOCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwWzFdID0gKHVpbnQ4KSgodWludDE2KXBbMV0gKiBhbHBoYSA+PiA4
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBbMl0gPSAodWludDgpKCh1aW50MTYpcFsyXSAq
IGFscGhhID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFszXSA9ICh1aW50OCkoKHVp
bnQxNilwWzNdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDQ7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYml0cyArPSBicHI7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQlBvaW50IGJp
dG1hcExvY2F0aW9uKGxheWVyLT5sb2NhdGlvbkluUGFyZW50KTsKKyAgICAgICAgICAgIGJpdG1h
cExvY2F0aW9uIC09IG1fY3VycmVudExheWVyLT5hY2N1bXVsYXRlZE9yaWdpbjsKKyAgICAgICAg
ICAgIG1fY3VycmVudExheWVyLT52aWV3LT5EcmF3Qml0bWFwKGxheWVyLT5iaXRtYXAsIGJpdG1h
cExvY2F0aW9uKTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbGF5ZXI7CisgICAgfQorCisg
ICAgTGF5ZXIqIG1fY3VycmVudExheWVyOwogfTsKIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpCi0gICAg
OiBtX3ZpZXcodmlldykKKyAgICA6IG1fY3VycmVudExheWVyKG5ldyBMYXllcih2aWV3KSkKIHsK
IH0KIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKIHsKKyAgICB3aGlsZSAoTGF5ZXIqIHByZXZpb3VzID0gbV9jdXJyZW50
TGF5ZXItPnByZXZpb3VzKSB7CisgICAgICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXIgPSBwcmV2aW91czsKKyAgICB9CisgICAgZGVsZXRlIG1fY3VycmVu
dExheWVyOwogfQogCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKQEAgLTc4LDE3ICsyMTcsMTggQEAKIAogUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9kYXRhLT5tX3ZpZXc7CisgICAgcmV0dXJuIG1fZGF0YS0+dmlldygp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogewotICAg
IG1fZGF0YS0+bV92aWV3LT5QdXNoU3RhdGUoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UHVzaFN0
YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
CiB7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlBvcFN0YXRlKCk7CisgICAgbV9kYXRhLT5tX2N1cnJl
bnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4gLT0gbV9kYXRhLT52aWV3KCktPk9yaWdpbigpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5Qb3BTdGF0ZSgpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCBy
ZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtOTcsMjEgKzIzNywxOCBAQAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+
bV92aWV3LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVj
dCk7CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+
bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAg
IG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2lu
dCYgcG9pbnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlIHx8IHN0cm9rZVRoaWNr
bmVzcygpIDw9IDAuMGYgfHwgIXN0cm9rZUNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlr
dVN0cm9rZVN0eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VMaW5lKHBvaW50MSwg
cG9pbnQyLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBv
bmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KQEAgLTEy
MCwyMiArMjU3LDc0IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxFbGxpcHNlKHJlY3QpOworICAgIG1fZGF0
YS0+dmlldygpLT5GaWxsRWxsaXBzZShyZWN0KTsKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBO
b1N0cm9rZSkKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0
SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9rZUVsbGlw
c2UocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFu
Z2xlU3BhbikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25l
c3MoKSA8PSAwLjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VBcmMocmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVT
cGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgIC8vIFRPRE86IFRoZSBjb2RlIGJlbG93
IHdpbGwgb25seSBtYWtlIHJvdW5kLWNvcm5lciBib3hlbiBsb29rIG5pY2UuIEZvciBhbiB1dHRl
cmx5IHNob2NraW5nCisgICAgLy8gaW1wbGVtZW50YXRpb24gb2Ygcm91bmQgY29ybmVyIGRyYXdp
bmcsIHNlZSBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoKS4gSXQgdHJpZXMKKyAg
ICAvLyB0byB1c2Ugb25lIChvciB0d28pIGFscGhhIG1hc2socykgcGVyIGJveCBjb3JuZXIgdG8g
Y3V0IG9mZiBhIHRoaWNrZXIgc3Ryb2tlIGFuZCBkb3VibGVzCisgICAgLy8gdGhlIHN0cm9rZSB3
aXRoLiBBbGwgdGhpcyB0byBhbGlnbiB0aGUgYXJjIHdpdGggdGhlIGJveCBzaWRlcy4uLgorCisg
ICAgZmxvYXQgcGVuU2l6ZSA9IHN0cm9rZVRoaWNrbmVzcygpIC8gMi4wZjsKKyAgICBtX2RhdGEt
PnZpZXcoKS0+U2V0UGVuU2l6ZShwZW5TaXplKTsKKyAgICBCUmVjdCBiUmVjdChyZWN0LngoKSwg
cmVjdC55KCksIHJlY3QucmlnaHQoKSwgcmVjdC5ib3R0b20oKSk7CisgICAgaWYgKHN0YXJ0QW5n
bGUgPj0gMCAmJiBzdGFydEFuZ2xlIDwgOTApIHsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVu
U2l6ZTsKKyAgICAgICAgYlJlY3QudG9wICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVj
dC5ib3R0b20gLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgfSBlbHNlIGlmIChzdGFydEFuZ2xlID49
IDkwICYmIHN0YXJ0QW5nbGUgPCAxODApIHsKKyAgICAgICAgYlJlY3QubGVmdCArPSBwZW5TaXpl
IC8gMi4wZjsKKyAgICAgICAgYlJlY3QudG9wICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBi
UmVjdC5yaWdodCAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBl
blNpemUgLyAyLjBmOworICAgIH0gZWxzZSBpZiAoc3RhcnRBbmdsZSA+PSAxODAgJiYgc3RhcnRB
bmdsZSA8IDI3MCkgeworICAgICAgICBiUmVjdC5sZWZ0ICs9IHBlblNpemUgLyAyLjBmOworICAg
ICAgICBiUmVjdC5yaWdodCAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QuYm90dG9t
IC09IHBlblNpemU7CisgICAgfSBlbHNlIGlmIChzdGFydEFuZ2xlID49IDI3MCAmJiBzdGFydEFu
Z2xlIDwgMzYwKSB7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBlblNpemU7CisgICAgICAgIGJS
ZWN0LmJvdHRvbSAtPSBwZW5TaXplOworICAgIH0KKyAgICBiUmVjdC5PZmZzZXRUbyhmbG9vcmYo
YlJlY3QubGVmdCksIGZsb29yZihiUmVjdC50b3ApKTsKKyAgICB1aW50MzIgZmxhZ3MgPSBtX2Rh
dGEtPnZpZXcoKS0+RmxhZ3MoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RmxhZ3MoZmxhZ3Mg
fCBCX1NVQlBJWEVMX1BSRUNJU0UpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VBcmMoYlJl
Y3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBt
X2RhdGEtPnZpZXcoKS0+U2V0RmxhZ3MoZmxhZ3MpOworCisgICAgbV9kYXRhLT52aWV3KCktPlNl
dFBlblNpemUoc3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZGF0YS0+c2hhcGUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy9tX2RhdGEtPnZpZXcoKS0+U2V0RmlsbFJ1bGUodG9I
YWlrdUZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+TW92ZVBlblRv
KEJfT1JJR0lOKTsKKworICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKSB7
CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikgeworICAgICAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisvLyAgICAg
ICAgICAgIEJHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKy8vICAgICAgICAgICAgLy9ncmFkaWVudC0+U2V0VHJh
bnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zv
cm0oKSk7CisvLyAgICAgICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VTaGFwZShtX2RhdGEt
PnNoYXBlKCksICpncmFkaWVudCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2Rh
dGEtPnZpZXcoKS0+U3Ryb2tlU2hhcGUobV9kYXRhLT5zaGFwZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBtX2RhdGEtPnNldFNoYXBlKDApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCog
cG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKQEAgLTE0NywxMCArMzM2LDEwIEBACiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50
c1tpXSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQog
ICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2ICszNDcsMTggQEAK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZ2Jf
Y29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPm1fdmlldy0+SGlnaENvbG9yKCk7Ci0gICAgbV9kYXRh
LT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxS
ZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29sb3IpOwor
ICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+dmlldygpLT5IaWdoQ29sb3IoKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBtX2RhdGEtPnZpZXco
KS0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihvbGRD
b2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OworCisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBi
b3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC0xNzUsMjUgKzM2Niw5MCBAQAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0
aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsCi0gICAgLy8gdGhlIHNpemVz
IGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFs
Ci0gICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxBcmMgY2FsbHMgYXJlIG5lZWRlZC4KKyAgICBCUG9p
bnQgcG9pbnRzWzNdOworICAgIGNvbnN0IGZsb2F0IGtSYWRpdXNCZXppZXJTY2FsZSA9IDAuNTZm
OworCisgICAgQlNoYXBlIHNoYXBlOworICAgIHNoYXBlLk1vdmVUbyhCUG9pbnQocmVjdC54KCkg
KyB0b3BMZWZ0LndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgc2hhcGUuTGluZVRvKEJQb2ludChy
ZWN0LnJpZ2h0KCkgLSB0b3BSaWdodC53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIHBvaW50c1sw
XS54ID0gcmVjdC5yaWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxlICogdG9wUmlnaHQud2lkdGgo
KTsKKyAgICBwb2ludHNbMF0ueSA9IHJlY3QueSgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC5y
aWdodCgpOworICAgIHBvaW50c1sxXS55ID0gcmVjdC55KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUg
KiB0b3BSaWdodC5oZWlnaHQoKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3QucmlnaHQoKTsKKyAg
ICBwb2ludHNbMl0ueSA9IHJlY3QueSgpICsgdG9wUmlnaHQuaGVpZ2h0KCk7CisgICAgc2hhcGUu
QmV6aWVyVG8ocG9pbnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QucmlnaHQoKSwg
cmVjdC5ib3R0b20oKSAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSk7CisgICAgcG9pbnRzWzBdLngg
PSByZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1
c0JlemllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSBy
ZWN0LnJpZ2h0KCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdodC53aWR0aCgpOwor
ICAgIHBvaW50c1sxXS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3Qu
cmlnaHQoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LmJv
dHRvbSgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuTGluZVRvKEJQ
b2ludChyZWN0LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwgcmVjdC5ib3R0b20oKSkpOworICAg
IHBvaW50c1swXS54ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21MZWZ0
LndpZHRoKCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpOworICAgIHBvaW50c1sx
XS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1
c0JlemllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzJdLnggPSBy
ZWN0LngoKTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5o
ZWlnaHQoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNoYXBlLkxpbmVUbyhC
UG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdC5oZWlnaHQoKSkpOworICAgIHBvaW50
c1swXS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LnkoKSAtIGtSYWRpdXNC
ZXppZXJTY2FsZSAqIHRvcExlZnQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0Lngo
KSArIGtSYWRpdXNCZXppZXJTY2FsZSAqIHRvcExlZnQud2lkdGgoKTsKKyAgICBwb2ludHNbMV0u
eSA9IHJlY3QueSgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCkgKyB0b3BMZWZ0LndpZHRo
KCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LnkoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2lu
dHMpOworICAgIHNoYXBlLkNsb3NlKCk7CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2Rh
dGEtPnZpZXcoKS0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xv
cihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisgICAg
bV9kYXRhLT52aWV3KCktPkZpbGxTaGFwZSgmc2hhcGUpOworICAgIG1fZGF0YS0+dmlldygpLT5T
ZXRIaWdoQ29sb3Iob2xkQ29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBh
dGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGEtPnNoYXBlKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIC8vbV9kYXRhLT52aWV3KCktPlNldEZpbGxSdWxlKHRvSGFpa3VGaWxs
UnVsZShmaWxsUnVsZSgpKSk7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJ
Tik7CisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fY29tbW9uLT5z
dGF0ZS5maWxsR3JhZGllbnQgfHwgZmlsbENvbG9yKCkuYWxwaGEoKSkgeworLy8gICAgICAgIGRy
YXdGaWxsZWRTaGFkb3dQYXRoKHRoaXMsIHAsIHBhdGgpOyBUT0RPOiBXaGF0J3MgdGhpcyBzaGFk
b3cgYnVzaW5lc3M/CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pIHsK
KyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV9jb21t
b24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICAgICAgQkdyYWRpZW50KiBncmFkaWVu
dCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKyAg
ICAgICAgICAgIC8vZ3JhZGllbnQtPlNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdy
YWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworICAgICAgICAgICAgbV9kYXRhLT52
aWV3KCktPkZpbGxTaGFwZShtX2RhdGEtPnNoYXBlKCksICpncmFkaWVudCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKG1fZGF0YS0+c2hh
cGUoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9kYXRhLT5zZXRTaGFwZSgwKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBtX2RhdGEtPnNldFNoYXBlKG5ldyBCU2hhcGUoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBpZiAoIW1fZGF0YS0+c2hhcGUoKSkgeworICAgICAgICBtX2RhdGEtPnNldFNo
YXBlKG5ldyBCU2hhcGUoKnBhdGgucGxhdGZvcm1QYXRoKCkpKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBtX2RhdGEtPnNoYXBlKCktPkFkZFNoYXBlKHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAg
IH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQpAQCAtMjAyLDEyICs0NTgsMjMgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQlJlZ2lvbiBy
ZWdpb24ocmVjdCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9u
KCZyZWdpb24pOworICAgIG1fZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigm
cmVnaW9uKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNs
aXBSdWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3
Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxQYXRoPiYgcGF0aHMsIGludCB3aWR0aCwgaW50IG9mZnNl
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgLyogd2lkdGggKi8sIGludCAvKiBvZmZzZXQgKi8s
IGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTIyMSwxMSArNDg4LDExIEBACiAKICAgICBpZiAocmVj
dHMuc2l6ZSgpID4gMSkgewogICAgICAgICBCUmVnaW9uICAgIHJlZ2lvbjsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQogICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUoQlJl
Y3QocmVjdHNbaV0pKTsKIAotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNv
bG9yKTsKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCks
IEJfTUlYRURfQ09MT1JTKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihj
b2xvcik7CisgICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlZ2lvbi5GcmFtZSgp
LCBCX01JWEVEX0NPTE9SUyk7CiAgICAgfQogfQogCkBAIC0yNDgsOCArNTE1LDEyIEBACiAKIEZs
b2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlY3Q7Cisg
ICAgRmxvYXRSZWN0IHJvdW5kZWQocmVjdCk7CisgICAgcm91bmRlZC5zZXRYKHJvdW5kZihyZWN0
LngoKSkpOworICAgIHJvdW5kZWQuc2V0WShyb3VuZGYocmVjdC55KCkpKTsKKyAgICByb3VuZGVk
LnNldFdpZHRoKHJvdW5kZihyZWN0LndpZHRoKCkpKTsKKyAgICByb3VuZGVkLnNldEhlaWdodChy
b3VuZGYocmVjdC5oZWlnaHQoKSkpOworICAgIHJldHVybiByb3VuZGVkOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAt
MjU3LDcgKzUyOCw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnB1c2hMYXllcihvcGFj
aXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkK
QEAgLTI2NSw3ICs1MzYsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5wb3BMYXllcigp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKQEAgLTI3Myw3ICs1NDQsMTEgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+dmll
dygpLT5QdXNoU3RhdGUoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKDAsIDAs
IDAsIDApOworICAgIG1fZGF0YS0+dmlldygpLT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+
UG9wU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKQEAgLTI4MSwxMCArNTU2LDEwIEBACiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmxvYXQgb2xk
U2l6ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNl
dFBlblNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdl
dEhhaWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xk
U2l6ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldygpLT5QZW5TaXplKCk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUod2lkdGgpOworICAgIG1fZGF0YS0+dmlldygp
LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52
aWV3KCktPlNldFBlblNpemUob2xkU2l6ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTMwNSw5ICs1ODAsMTQgQEAKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1f
ZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxp
bWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5lTW9kZShtb2RlLCBtX2RhdGEtPnZp
ZXcoKS0+TGluZUpvaW5Nb2RlKCksIG1fZGF0YS0+dmlldygpLT5MaW5lTWl0ZXJMaW1pdCgpKTsK
IH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYg
ZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMzI2LDcgKzYwNiw3IEBACiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEt
Pm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxp
bWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5lTW9kZShtX2RhdGEtPnZpZXcoKS0+
TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT52aWV3KCktPkxpbmVNaXRlckxpbWl0KCkpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKQEAg
LTMzNCw3ICs2MTQsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+
TGluZUNhcE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBsaW1pdCk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldygpLT5MaW5lQ2FwTW9k
ZSgpLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCkBAIC0zNDIsNyArNjIyLDcg
QEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmdsb2JhbEFscGhh
ID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjBmKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTM2Myw3ICs2
NDMsNyBAQAogICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uOiBVbnN1cHBvcnRlZCBjb21wb3NpdGUgb3BlcmF0aW9uICVzXG4iLAogICAgICAgICAg
ICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQot
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXREcmF3aW5nTW9kZShtb2RlKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNzEsNyArNjUxLDcgQEAKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+Q29u
c3RyYWluQ2xpcHBpbmdSZWdpb24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0
aCYgcGF0aCkKQEAgLTM5NCwxNCArNjc0LDIyIEBACiAKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGlj
c0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBu
ZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4OworICAgIEJQb2ludCBvcmlnaW4gPSBtX2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7
CisgICAgbWF0cml4LnRyYW5zbGF0ZShvcmlnaW4ueCwgb3JpZ2luLnkpOworICAgIG1hdHJpeC5z
Y2FsZShtX2RhdGEtPnZpZXcoKS0+U2NhbGUoKSk7CisgICAgcmV0dXJuIG1hdHJpeDsKIH0KIAog
VHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7
CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRy
YW5zZm9ybT8KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgQlBvaW50IG9y
aWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKG9y
aWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNjYWxlKG1fZGF0YS0+dmlldygpLT5TY2Fs
ZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJh
bnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00MDksMTMgKzY5NywxOCBAQAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4ueCArPSB4
OworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luLnkgKz0geTsK
KyAgICBCUG9pbnQgb3JpZ2luKG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKSk7CisgICAgbV9kYXRh
LT52aWV3KCktPlNldE9yaWdpbihvcmlnaW4ueCArIHgsIG9yaWdpbi55ICsgeSk7CisKKyAgICAv
LyBUT0RPOiBjdXJyZW50UGF0aCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIGFsb25nLCBhY2NvcmRp
bmcgdG8gUXQgaW1wbGVtZW50YXRpb24KIH0KIAogSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0Ojpv
cmlnaW4oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFBvaW50KDAs
IDApOworICAgIEJQb2ludCBvcmlnaW4gPSBtX2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAg
cmV0dXJuIEludFBvaW50KG9yaWdpbi54LCBvcmlnaW4ueSk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKQEAgLTQzMSw3ICs3MjQsOCBAQAogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgLy8gTk9URTogTm9uLXVuaWZvcm0gc2NhbGluZyBub3Qgc3VwcG9ydGVkIG9u
IEhhaWt1LCB5ZXQuCisgICAgbV9kYXRhLT52aWV3KCktPlNldFNjYWxlKChzaXplLndpZHRoKCkg
KyBzaXplLmhlaWdodCgpKSAvIDIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNDM5LDcgKzczMyw5IEBACiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBCUmVnaW9uIHJlZ2lvbihtX2RhdGEtPnZpZXcoKS0+Qm91bmRzKCkpOworICAgIHJlZ2lv
bi5FeGNsdWRlKHJlY3QpOworICAgIG1fZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1Jl
Z2lvbigmcmVnaW9uKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNl
SW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00NTUsNiArNzUxLDkgQEAKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBOT1RFOiBVc2Vk
IGJ5IFJlbmRlckJveE1vZGVsT2JqZWN0IHRvIGNsaXAgb3V0IHRoZSBpbm5lciBwYXJ0IG9mIGFu
IGFyYyB3aGVuIHJlbmRpbmcgYm94IGNvcm5lcnMuLi4KKyAgICAvLyBUT0RPOiBVc2UgdGhpcyBt
ZXRob2QgdG8gZGV0ZWN0IGlmIHdlIGFyZSByZW5kZXJpbmcgYSByb3VuZC1jb3JuZXItYm94Li4u
CisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC00OTMsNyArNzkyLDcgQEAKIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBmb250KQogewot
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRGb250KGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1E
YXRhKCkuZm9udCgpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0Rm9udChmb250LnByaW1hcnlG
b250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBj
b2xvclNwYWNlKQpAQCAtNTAxLDcgKzgwMCw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihj
b2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHBh
dHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCkKQEAgLTUzNSw3ICs4
MzQsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRoaWNrbmVzcyk7CisgICAgbV9kYXRhLT52
aWV3KCktPlNldFBlblNpemUodGhpY2tuZXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQpAQCAtNTQzLDcgKzg0Miw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xv
cik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw2ICs1Nyw5IEBACiBj
bGFzcyBTa1NoYWRlcjsKIHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtR3JhZGllbnQ7
CiB0eXBlZGVmIGNsYXNzIFNrU2hhZGVyKiBQbGF0Zm9ybVBhdHRlcm47CisjZWxpZiBQTEFURk9S
TShIQUlLVSkKK2NsYXNzIEJHcmFkaWVudDsKK3R5cGVkZWYgQkdyYWRpZW50KiBQbGF0Zm9ybUdy
YWRpZW50OwogI2Vsc2UKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFkaWVudDsKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDgg
QEAKIGNsYXNzIFNrUGF0aDsKIHR5cGVkZWYgU2tQYXRoIFBsYXRmb3JtUGF0aDsKICNlbGlmIFBM
QVRGT1JNKEhBSUtVKQotY2xhc3MgQlJlZ2lvbjsKLXR5cGVkZWYgQlJlZ2lvbiBQbGF0Zm9ybVBh
dGg7CitjbGFzcyBCU2hhcGU7Cit0eXBlZGVmIEJTaGFwZSBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBP
UyhXSU5DRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQbGF0Zm9ybVBhdGg7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48033</attachid>
            <date>2010-02-03 08:11:52 -0800</date>
            <delta_ts>2010-02-03 08:39:31 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>35964</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAJ
KHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRo
SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgog
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMCwxNSArMzEsMjAgQEAKIAogI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlIDxSZWdpb24uaD4KKyNpbmNsdWRlICJTdHJv
a2VTdHlsZUFwcGxpZXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2lu
Y2x1ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPFNoYXBlLmg+CisjaW5jbHVkZSA8Vmlldy5oPgog
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGF0aDo6UGF0aCgpCi0gICAgOiBtX3BhdGgobmV3
IEJSZWdpb24oKSkKKyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCkpCiB7CiB9CiAKQEAgLTQ4LDcg
KzU0LDcgQEAKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6IG1fcGF0
aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorICAgIDogbV9wYXRoKG5ldyBC
U2hhcGUoKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKIHsKIH0KIApAQCAtNjcsMjggKzczLDEyNSBA
QAogCiBib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBXaW5kUnVs
ZSBydWxlKSBjb25zdAogewotICAgIHJldHVybiBtX3BhdGgtPkNvbnRhaW5zKHBvaW50KTsKKyAg
ICAvLyBUT0RPOiBUaGlzIGlzIHByb2JhYmx5IHRvbyBleHBlbnNpdmUuIFVzZSBvbmUgaW5zdGFu
Y2Ugb2YgYSBzY3JhdGNoCisgICAgLy8gaW1hZ2UuCisgICAgQkJpdG1hcCBiaXRtYXAoQlJlY3Qo
MCwgMCwgMCwgMCksCisgICAgICAgIEJfQklUTUFQX0NMRUFSX1RPX1dISVRFIHwgQl9CSVRNQVBf
QUNDRVBUU19WSUVXUywgQl9SR0IzMik7CisgICAgQlZpZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAw
KSwgIiIsIDAsIDApOworICAgIGJpdG1hcC5Mb2NrKCk7CisgICAgYml0bWFwLkFkZENoaWxkKCZ2
aWV3KTsKKyAgICAvLyBDdXJyZW50IHBlbiBsb2NhdGlvbiBpcyB1c2VkIGFzIG9yaWdpbiBmb3Ig
dGhlIHNoYXBlLgorICAgIHZpZXcuTW92ZVBlblRvKC1wb2ludC54KCksIC1wb2ludC55KCkpOwor
ICAgIC8vIFRPRE86IEhhbmRsZSBXaW5kUnVsZS4uLiAobmVlZHMgc3VwcG9ydCBpbiBCVmlldywg
dGhlIGJhY2tlbmQgYWxyZWFkeQorICAgIC8vIHN1cHBvcnQgaXQuKQorICAgIHZpZXcuRmlsbFNo
YXBlKG1fcGF0aCk7CisgICAgdmlldy5TeW5jKCk7CisKKyAgICB1aW50OCogYml0cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRtYXAuQml0cygpKTsKKyAgICBib29sIHJlc3VsdCA9IGJp
dHNbMF0gPCAxMjg7CisKKyAgICB2aWV3LlJlbW92ZVNlbGYoKTsKKyAgICBiaXRtYXAuVW5sb2Nr
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorYm9vbCBQYXRoOjpzdHJva2VDb250YWlucyhT
dHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25z
dAoreworICAgIEFTU0VSVChhcHBsaWVyKTsKKworICAgIC8vIFRPRE86IFRoaXMgaXMgcHJvYmFi
bHkgdG9vIGV4cGVuc2l2ZS4gVXNlIG9uZSBpbnN0YW5jZSBvZiBhIHNjcmF0Y2gKKyAgICAvLyBp
bWFnZSwgc2VlIGFib3ZlLgorICAgIC8vIFRPRE86IENvZGUgZHVwbGljYXRpb24gYWJvdmUuCisg
ICAgQkJpdG1hcCBiaXRtYXAoQlJlY3QoMCwgMCwgMCwgMCksCisgICAgICAgIEJfQklUTUFQX0NM
RUFSX1RPX1dISVRFIHwgQl9CSVRNQVBfQUNDRVBUU19WSUVXUywgQl9SR0IzMik7CisgICAgQlZp
ZXcgdmlldyhCUmVjdCgwLCAwLCAwLCAwKSwgIiIsIDAsIDApOworICAgIGJpdG1hcC5Mb2NrKCk7
CisgICAgYml0bWFwLkFkZENoaWxkKCZ2aWV3KTsKKyAgICAvLyBDdXJyZW50IHBlbiBsb2NhdGlv
biBpcyB1c2VkIGFzIG9yaWdpbiBmb3IgdGhlIHNoYXBlLgorICAgIHZpZXcuTW92ZVBlblRvKC1w
b2ludC54KCksIC1wb2ludC55KCkpOworICAgIC8vIFRPRE86IEhhbmRsZSBXaW5kUnVsZS4uLiAo
bmVlZHMgc3VwcG9ydCBpbiBCVmlldywgdGhlIGJhY2tlbmQgYWxyZWFkeQorICAgIC8vIHN1cHBv
cnQgaXQuKQorICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KCZ2aWV3KTsKKyAgICBhcHBsaWVy
LT5zdHJva2VTdHlsZSgmY29udGV4dCk7CisgICAgCisgICAgdmlldy5TdHJva2VTaGFwZShtX3Bh
dGgpOworICAgIHZpZXcuU3luYygpOworCisgICAgdWludDgqIGJpdHMgPSByZWludGVycHJldF9j
YXN0PHVpbnQ4Kj4oYml0bWFwLkJpdHMoKSk7CisgICAgYm9vbCByZXN1bHQgPSBiaXRzWzBdIDwg
MTI4OworCisgICAgdmlldy5SZW1vdmVTZWxmKCk7CisgICAgYml0bWFwLlVubG9jaygpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgUGF0aDo6dHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6
ZSYgc2l6ZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9y
IGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3Mg
VHJhbnNsYXRlSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNsYXRlSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgRmxvYXRTaXpl
JiBzaXplKQorICAgICAgICAgICAgOiBtX3NoYXBlKHNoYXBlKQorICAgICAgICAgICAgLCBtX3Np
emUoc2l6ZSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3Qg
SXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICBwb2lu
dC0+eCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAg
ICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTGluZVRvKGludDMyIGxpbmVD
b3VudCwgQlBvaW50KiBsaW5lUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobGlu
ZUNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBsaW5lUHRzLT54ICs9IG1fc2l6ZS53aWR0aCgp
OworICAgICAgICAgICAgICAgIGxpbmVQdHMtPnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAg
ICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBC
X09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVy
VG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0
c1swXS54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1swXS55
ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0ueCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0ueSArPSBtX3NpemUu
aGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzJdLnggKz0gbV9zaXplLndpZHRo
KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzJdLnkgKz0gbV9zaXplLmhlaWdodCgpOwor
ICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0
ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBCU2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNv
bnN0IEZsb2F0U2l6ZSYgbV9zaXplOworICAgIH0gdHJhbnNsYXRlSXRlcmF0b3IobV9wYXRoLCBz
aXplKTsKKworICAgIHRyYW5zbGF0ZUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxv
YXRSZWN0IFBhdGg6OmJvdW5kaW5nUmVjdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcGF0aC0+
RnJhbWUoKTsKKyAgICByZXR1cm4gbV9wYXRoLT5Cb3VuZHMoKTsKIH0KIAogdm9pZCBQYXRoOjpt
b3ZlVG8oY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpCiB7Ci0gICAgLy8gRklYTUU6IFVzZSBPZmZz
ZXRCeT8KLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJSZWN0IGJvdW5kcyA9IG1fcGF0aC0+
Qm91bmRzKCk7CisgICAgdHJhbnNsYXRlKEZsb2F0U2l6ZShwb2ludC54KCkgLSBib3VuZHMubGVm
dCwgcG9pbnQueSgpIC0gYm91bmRzLnRvcCkpOwogfQogCiB2b2lkIFBhdGg6OmFkZExpbmVUbyhj
b25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9wYXRo
LT5MaW5lVG8ocCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY3AsIGNvbnN0IEZsb2F0UG9pbnQmIHApCkBAIC05OCw3ICsyMDEsMTEgQEAKIAogdm9p
ZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwMSwgY29uc3QgRmxv
YXRQb2ludCYgY3AyLCBjb25zdCBGbG9hdFBvaW50JiBwKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgQlBvaW50IHBvaW50c1szXTsKKyAgICBwb2ludHNbMF0gPSBjcDE7CisgICAgcG9p
bnRzWzFdID0gY3AyOworICAgIHBvaW50c1syXSA9IHA7CisgICAgbV9wYXRoLT5CZXppZXJUbyhw
b2ludHMpOwogfQogCiB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBj
b25zdCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQpAQCAtMTA4LDcgKzIxNSw3IEBACiAK
IHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxvYXRQb2lu
dCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNsb2Nrd2lzZSkK
QEAgLTExOCw3ICsyMjUsMTIgQEAKIAogdm9pZCBQYXRoOjphZGRSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcikKIHsKLSAgICBtX3BhdGgtPkluY2x1ZGUocik7CisgICAgbV9wYXRoLT5DbG9zZSgpOwor
ICAgIG1fcGF0aC0+TW92ZVRvKEJQb2ludChyLngoKSwgci55KCkpKTsKKyAgICBtX3BhdGgtPkxp
bmVUbyhCUG9pbnQoci54KCkgKyByLndpZHRoKCksIHIueSgpKSk7CisgICAgbV9wYXRoLT5MaW5l
VG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCByLnkoKSArIHIuaGVpZ2h0KCkpKTsKKyAgICBt
X3BhdGgtPkxpbmVUbyhCUG9pbnQoci54KCksIHIueSgpICsgci5oZWlnaHQoKSkpOworICAgIG1f
cGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcikKQEAgLTEyOCwxMiArMjQwLDEyIEBACiAKIHZvaWQgUGF0aDo6Y2xlYXIoKQogewotICAg
IG1fcGF0aC0+TWFrZUVtcHR5KCk7CisgICAgbV9wYXRoLT5DbGVhcigpOwogfQogCiBib29sIFBh
dGg6OmlzRW1wdHkoKSBjb25zdAogewotICAgIHJldHVybiAhbV9wYXRoLT5GcmFtZSgpLklzVmFs
aWQoKTsKKyAgICByZXR1cm4gIW1fcGF0aC0+Qm91bmRzKCkuSXNWYWxpZCgpOwogfQogCiBTdHJp
bmcgUGF0aDo6ZGVidWdTdHJpbmcoKSBjb25zdApAQCAtMTQ5LDE4ICsyNjEsMTA2IEBACiAKIHZv
aWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRv
IG1vZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBjbGFzcyBUcmFuc2Zvcm1JdGVy
YXRvciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFu
c2Zvcm1JdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5z
Zm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFu
c2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBz
dGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICBy
ZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0
ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAg
ICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMg
PSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0
cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJD
b3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChi
ZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zv
cm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0g
PSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJl
emllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAg
ICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNs
b3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0
aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsK
IH0KIAogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9y
IGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3Mg
VHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2lu
dCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0
cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAg
ICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAg
ICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXpp
ZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVy
UHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemll
clB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJf
T0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsK
KyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1fdHJhbnNmb3JtOworICAgIH0g
dHJhbnNmb3JtSXRlcmF0b3IobV9wYXRoLCB0cmFuc2Zvcm0pOworCisgICAgdHJhbnNmb3JtSXRl
cmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3QgUGF0aDo6c3Ryb2tlQm91bmRp
bmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1cm4gbV9wYXRoLT5Cb3VuZHMo
KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA4IEtl
dmluIE9sbGl2aWVyIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAdGhl
b2xsaXZpZXJzLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywy
NiArMjgsNDUgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgog
Ci0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlIDxHcmFkaWVudExpbmVhci5oPgor
I2luY2x1ZGUgPEdyYWRpZW50UmFkaWFsLmg+CisjaW5jbHVkZSA8Vmlldy5oPgogCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogdm9pZCBHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0ZSBtX2dyYWRpZW50OwogfQogCiBQbGF0Zm9y
bUdyYWRpZW50IEdyYWRpZW50OjpwbGF0Zm9ybUdyYWRpZW50KCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOworICAgIGlmIChtX2dyYWRpZW50KQorICAgICAgICByZXR1
cm4gbV9ncmFkaWVudDsKKworICAgIGlmIChtX3JhZGlhbCkgeworICAgICAgICAvLyBUT0RPOiBT
dXBwb3J0IG1fcjA/CisgICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgQkdyYWRpZW50UmFkaWFsKG1f
cDAsIG1fcjEpOworICAgIH0gZWxzZQorICAgICAgICBtX2dyYWRpZW50ID0gbmV3IEJHcmFkaWVu
dExpbmVhcihtX3AwLCBtX3AxKTsKKyAgICBzaXplX3Qgc2l6ZSA9IG1fc3RvcHMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IENv
bG9yU3RvcCYgc3RvcCA9IG1fc3RvcHNbaV07CisgICAgICAgIHJnYl9jb2xvciBjb2xvcjsKKyAg
ICAgICAgY29sb3IucmVkID0gKHVpbnQ4KShzdG9wLnJlZCAqIDI1NS4wKTsKKyAgICAgICAgY29s
b3IuZ3JlZW4gPSAodWludDgpKHN0b3AuZ3JlZW4gKiAyNTUuMCk7CisgICAgICAgIGNvbG9yLmJs
dWUgPSAodWludDgpKHN0b3AuYmx1ZSAqIDI1NS4wKTsKKyAgICAgICAgY29sb3IuYWxwaGEgPSAo
dWludDgpKHN0b3AuYWxwaGEgKiAyNTUuMCk7CisgICAgICAgIG1fZ3JhZGllbnQtPkFkZENvbG9y
KGNvbG9yLCBzdG9wLnN0b3ApOworICAgIH0KKyAgICByZXR1cm4gbV9ncmFkaWVudDsKIH0KIAot
dm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKQor
dm9pZCBHcmFkaWVudDo6ZmlsbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5GaWxsUmVjdChyZWN0LCAqbV9ncmFkaWVudCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
cGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMywxMiArMzQsMTUgQEAKICNpbmNsdWRlICJDb2xvci5o
IgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQZW4uaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgPEJpdG1hcC5oPgogI2luY2x1ZGUgPEdyYXBoaWNzRGVmcy5o
PgogI2luY2x1ZGUgPFJlZ2lvbi5oPgorI2luY2x1ZGUgPFNoYXBlLmg+CiAjaW5jbHVkZSA8Vmll
dy5oPgogI2luY2x1ZGUgPFdpbmRvdy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC01MSwxNiAr
NTUsMTUxIEBACiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3
KTsKICAgICB+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAKLSAgICBCVmlldyog
bV92aWV3OworICAgIHN0cnVjdCBMYXllciB7CisgICAgcHVibGljOgorICAgICAgICBMYXllcihC
VmlldyogX3ZpZXcpCisgICAgICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAgICAgICAsIGJp
dG1hcCgwKQorICAgICAgICAgICAgLCBzdHJva2VDb2xvcigocmdiX2NvbG9yKXsgMCwgMCwgMCwg
MCB9KQorICAgICAgICAgICAgLCBmaWxsQ29sb3IoKHJnYl9jb2xvcil7IDAsIDAsIDAsIDI1NSB9
KQorICAgICAgICAgICAgLCBnbG9iYWxBbHBoYSgyNTUpCisgICAgICAgICAgICAsIGN1cnJlbnRT
aGFwZSgwKQorICAgICAgICAgICAgLCBsb2NhdGlvbkluUGFyZW50KEJfT1JJR0lOKQorICAgICAg
ICAgICAgLCBhY2N1bXVsYXRlZE9yaWdpbihCX09SSUdJTikKKyAgICAgICAgICAgICwgcHJldmlv
dXMoMCkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIExheWVyKExheWVyKiBwcmV2aW91
cykKKyAgICAgICAgICAgIDogdmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAg
ICAgICAgICwgc3Ryb2tlQ29sb3IoKHJnYl9jb2xvcil7IDAsIDAsIDAsIDAgfSkKKyAgICAgICAg
ICAgICwgZmlsbENvbG9yKChyZ2JfY29sb3IpeyAwLCAwLCAwLCAyNTUgfSkKKyAgICAgICAgICAg
ICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAg
ICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11
bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHByZXZpb3VzKQor
ICAgICAgICB7CisgICAgICAgICAgICBCUmVnaW9uIHBhcmVudENsaXBwaW5nOworICAgICAgICAg
ICAgcHJldmlvdXMtPnZpZXctPkdldENsaXBwaW5nUmVnaW9uKCZwYXJlbnRDbGlwcGluZyk7Cisg
ICAgICAgICAgICBCUmVjdCBmcmFtZUluUGFyZW50ID0gcGFyZW50Q2xpcHBpbmcuRnJhbWUoKTsK
KyAgICAgICAgICAgIGlmICghZnJhbWVJblBhcmVudC5Jc1ZhbGlkKCkpCisgICAgICAgICAgICAg
ICAgZnJhbWVJblBhcmVudCA9IHByZXZpb3VzLT52aWV3LT5Cb3VuZHMoKTsKKyAgICAgICAgICAg
IEJSZWN0IGJvdW5kcyA9IGZyYW1lSW5QYXJlbnQuT2Zmc2V0VG9Db3B5KEJfT1JJR0lOKTsKKyAg
ICAgICAgICAgIGxvY2F0aW9uSW5QYXJlbnQgKz0gZnJhbWVJblBhcmVudC5MZWZ0VG9wKCk7Cisg
ICAgICAgICAgICB2aWV3ID0gbmV3IEJWaWV3KGJvdW5kcywgIldlYkNvcmUgdHJhbnNwYXJlbmN5
IGxheWVyIiwgMCwgMCk7CisgICAgICAgICAgICBiaXRtYXAgPSBuZXcgQkJpdG1hcChib3VuZHMs
IEJfUkdCQTMyLCB0cnVlKTsKKyAgICAgICAgICAgIGJpdG1hcC0+TG9jaygpOworICAgICAgICAg
ICAgYml0bWFwLT5BZGRDaGlsZCh2aWV3KTsKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xv
cigwLCAwLCAwLCAwKTsKKyAgICAgICAgICAgIHZpZXctPkZpbGxSZWN0KHZpZXctPkJvdW5kcygp
KTsKKyAgICAgICAgICAgIHZpZXctPlNldEhpZ2hDb2xvcihwcmV2aW91cy0+dmlldy0+SGlnaENv
bG9yKCkpOworICAgICAgICAgICAgdmlldy0+U2V0RHJhd2luZ01vZGUocHJldmlvdXMtPnZpZXct
PkRyYXdpbmdNb2RlKCkpOworICAgICAgICAgICAgdmlldy0+U2V0QmxlbmRpbmdNb2RlKEJfUElY
RUxfQUxQSEEsIEJfQUxQSEFfQ09NUE9TSVRFKTsKKyAgICAgICAgICAgIC8vIFRPRE86IGxvY2F0
aW9uSW5QYXJlbnQgYW5kIGFjY3VtdWxhdGVkT3JpZ2luIGNhbgorICAgICAgICAgICAgLy8gcHJv
YmFibHkgc29tZWhvdyBiZSBtZXJnZWQuIEJ1dCBmb3Igbm93IGl0IHdvcmtzLgorICAgICAgICAg
ICAgYWNjdW11bGF0ZWRPcmlnaW4ueCA9IC1mcmFtZUluUGFyZW50LmxlZnQ7CisgICAgICAgICAg
ICBhY2N1bXVsYXRlZE9yaWdpbi55ID0gLWZyYW1lSW5QYXJlbnQudG9wOworICAgICAgICAgICAg
dmlldy0+U2V0T3JpZ2luKHByZXZpb3VzLT5hY2N1bXVsYXRlZE9yaWdpbiArIGFjY3VtdWxhdGVk
T3JpZ2luKTsKKyAgICAgICAgICAgIHZpZXctPlNldFNjYWxlKHByZXZpb3VzLT52aWV3LT5TY2Fs
ZSgpKTsKKyAgICAgICAgICAgIHZpZXctPlNldFBlblNpemUocHJldmlvdXMtPnZpZXctPlBlblNp
emUoKSk7CisgICAgICAgIH0KKyAgICAgICAgfkxheWVyKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGJpdG1hcCkgeworICAgICAgICAgICAgICAgIGJpdG1hcC0+VW5sb2NrKCk7CisgICAg
ICAgICAgICAgICAgLy8gRGVsZXRpbmcgdGhlIGJpdG1hcCB3aWxsIGFsc28gdGFrZSBjYXJlIG9m
IHRoZSB2aWV3LAorICAgICAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIG5vIGJpdG1hcCwgdGhl
IHZpZXcgZG9lcyBub3QgYmVsb25nIHRvIHVzIChpbml0aWFsIGxheWVyKS4KKyAgICAgICAgICAg
ICAgICBkZWxldGUgYml0bWFwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVsZXRlIGN1
cnJlbnRTaGFwZTsKKyAgICAgICAgfQorCisgICAgICAgIEJWaWV3KiB2aWV3OworICAgICAgICBC
Qml0bWFwKiBiaXRtYXA7CisgICAgICAgIHJnYl9jb2xvciBzdHJva2VDb2xvcjsKKyAgICAgICAg
cmdiX2NvbG9yIGZpbGxDb2xvcjsKKyAgICAgICAgdWludDggZ2xvYmFsQWxwaGE7CisgICAgICAg
IEJTaGFwZSogY3VycmVudFNoYXBlOworICAgICAgICBCUG9pbnQgbG9jYXRpb25JblBhcmVudDsK
KyAgICAgICAgQlBvaW50IGFjY3VtdWxhdGVkT3JpZ2luOworCisgICAgICAgIExheWVyKiBwcmV2
aW91czsKKyAgICB9OworCisgICAgQlZpZXcqIHZpZXcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudExheWVyLT52aWV3OworICAgIH0KKworICAgIHZvaWQgc2V0U2hhcGUo
QlNoYXBlKiBzaGFwZSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllci0+Y3Vy
cmVudFNoYXBlOworICAgICAgICBtX2N1cnJlbnRMYXllci0+Y3VycmVudFNoYXBlID0gc2hhcGU7
CisgICAgfQorCisgICAgQlNoYXBlKiBzaGFwZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IW1fY3VycmVudExheWVyLT5jdXJyZW50U2hhcGUpCisgICAgICAgICAgICBtX2N1cnJlbnRMYXll
ci0+Y3VycmVudFNoYXBlID0gbmV3IEJTaGFwZSgpOworICAgICAgICByZXR1cm4gbV9jdXJyZW50
TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2hMYXllcihmbG9hdCBv
cGFjaXR5KQorICAgIHsKKyAgICAgICAgbV9jdXJyZW50TGF5ZXIgPSBuZXcgTGF5ZXIobV9jdXJy
ZW50TGF5ZXIpOworICAgICAgICBtX2N1cnJlbnRMYXllci0+Z2xvYmFsQWxwaGEgPSAodWludDgp
KG9wYWNpdHkgKiAyNTUuMCk7CisgICAgfQorCisgICAgdm9pZCBwb3BMYXllcigpCisgICAgewor
ICAgICAgICBpZiAoIW1fY3VycmVudExheWVyLT5wcmV2aW91cykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgTGF5ZXIqIGxheWVyID0gbV9jdXJyZW50TGF5ZXI7CisgICAgICAgIG1fY3Vy
cmVudExheWVyID0gbGF5ZXItPnByZXZpb3VzOworICAgICAgICBpZiAobGF5ZXItPmdsb2JhbEFs
cGhhID4gMCkgeworICAgICAgICAgICAgLy8gUG9zdCBwcm9jZXNzIHRoZSBiaXRtYXAgaW4gb3Jk
ZXIgdG8gYXBwbHkgZ2xvYmFsIGFscGhhLi4uCisgICAgICAgICAgICBpZiAobGF5ZXItPmdsb2Jh
bEFscGhhIDwgMjU1KSB7CisgICAgICAgICAgICAgICAgdWludDgqIGJpdHMgPSByZWludGVycHJl
dF9jYXN0PHVpbnQ4Kj4obGF5ZXItPmJpdG1hcC0+Qml0cygpKTsKKyAgICAgICAgICAgICAgICB1
aW50MzIgd2lkdGggPSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VyV2lkdGgoKSArIDE7
CisgICAgICAgICAgICAgICAgdWludDMyIGhlaWdodCA9IGxheWVyLT5iaXRtYXAtPkJvdW5kcygp
LkludGVnZXJIZWlnaHQoKSArIDE7CisgICAgICAgICAgICAgICAgdWludDMyIGJwciA9IGxheWVy
LT5iaXRtYXAtPkJ5dGVzUGVyUm93KCk7CisgICAgICAgICAgICAgICAgdWludDggYWxwaGEgPSBs
YXllci0+Z2xvYmFsQWxwaGE7CisgICAgICAgICAgICAgICAgZm9yICh1aW50MzIgeSA9IDA7IHkg
PCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgICAgICAgICB1aW50OCogcCA9IGJpdHM7Cisg
ICAgICAgICAgICAgICAgICAgIGZvciAodWludDMyIHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhlcmUgaXMgYSBtZXRob2QgdG8gZG8g
c2hpZnRpbmcgd2l0aG91dCBiaXQgZXJyb3JzLgorICAgICAgICAgICAgICAgICAgICAgICAgcFsw
XSA9ICh1aW50OCkoKHVpbnQxNilwWzBdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBwWzFdID0gKHVpbnQ4KSgodWludDE2KXBbMV0gKiBhbHBoYSA+PiA4KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBbMl0gPSAodWludDgpKCh1aW50MTYpcFsyXSAqIGFscGhhID4+
IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFszXSA9ICh1aW50OCkoKHVpbnQxNilwWzNd
ICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwICs9IDQ7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYml0cyArPSBicHI7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgQlBvaW50IGJpdG1hcExvY2F0
aW9uKGxheWVyLT5sb2NhdGlvbkluUGFyZW50KTsKKyAgICAgICAgICAgIGJpdG1hcExvY2F0aW9u
IC09IG1fY3VycmVudExheWVyLT5hY2N1bXVsYXRlZE9yaWdpbjsKKyAgICAgICAgICAgIG1fY3Vy
cmVudExheWVyLT52aWV3LT5EcmF3Qml0bWFwKGxheWVyLT5iaXRtYXAsIGJpdG1hcExvY2F0aW9u
KTsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgbGF5ZXI7CisgICAgfQorCisgICAgTGF5ZXIq
IG1fY3VycmVudExheWVyOwogfTsKIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoQlZpZXcqIHZpZXcpCi0gICAgOiBtX3ZpZXco
dmlldykKKyAgICA6IG1fY3VycmVudExheWVyKG5ldyBMYXllcih2aWV3KSkKIHsKIH0KIAogR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlKCkKIHsKKyAgICB3aGlsZSAoTGF5ZXIqIHByZXZpb3VzID0gbV9jdXJyZW50TGF5ZXItPnBy
ZXZpb3VzKSB7CisgICAgICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKKyAgICAgICAgbV9jdXJy
ZW50TGF5ZXIgPSBwcmV2aW91czsKKyAgICB9CisgICAgZGVsZXRlIG1fY3VycmVudExheWVyOwog
fQogCiBHcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKQEAgLTc4LDE3ICsyMTcsMTggQEAKIAogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9kYXRhLT5tX3ZpZXc7CisgICAgcmV0dXJuIG1fZGF0YS0+dmlldygpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogewotICAgIG1fZGF0YS0+
bV92aWV3LT5QdXNoU3RhdGUoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UHVzaFN0YXRlKCk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiB7Ci0gICAg
bV9kYXRhLT5tX3ZpZXctPlBvcFN0YXRlKCk7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+
YWNjdW11bGF0ZWRPcmlnaW4gLT0gbV9kYXRhLT52aWV3KCktPk9yaWdpbigpOworICAgIG1fZGF0
YS0+dmlldygpLT5Qb3BTdGF0ZSgpOwogfQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUg
d2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtOTcsMjEgKzIzNywxOCBAQAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5G
aWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CiAgICAg
aWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3LT5T
dHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0YS0+
dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIC8v
IFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQy
KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSB8fCBzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlIHx8IHN0cm9rZVRoaWNrbmVzcygpIDw9
IDAuMGYgfHwgIXN0cm9rZUNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
ZGF0YS0+bV92aWV3LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBn
ZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQg
dG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KQEAgLTEyMCwyMiArMjU3
LDczIEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxFbGxpcHNlKHJlY3QpOworICAgIG1fZGF0YS0+dmlldygp
LT5GaWxsRWxsaXBzZShyZWN0KTsKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkK
LSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZUVsbGlwc2UocmVjdCwgZ2V0SGFpa3VTdHJv
a2VTdHlsZSgpKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9rZUVsbGlwc2UocmVjdCwg
Z2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZUFyYyhjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3BhbikK
IHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25lc3MoKSA8PSAw
LjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1f
ZGF0YS0+bV92aWV3LT5TdHJva2VBcmMocmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVTcGFuLCBnZXRI
YWlrdVN0cm9rZVN0eWxlKCkpOworICAgIC8vIFRPRE86IFRoZSBjb2RlIGJlbG93IHdpbGwgb25s
eSBtYWtlIHJvdW5kLWNvcm5lciBib3hlbiBsb29rIG5pY2UuIEZvciBhbiB1dHRlcmx5IHNob2Nr
aW5nCisgICAgLy8gaW1wbGVtZW50YXRpb24gb2Ygcm91bmQgY29ybmVyIGRyYXdpbmcsIHNlZSBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoKS4gSXQgdHJpZXMKKyAgICAvLyB0byB1
c2Ugb25lIChvciB0d28pIGFscGhhIG1hc2socykgcGVyIGJveCBjb3JuZXIgdG8gY3V0IG9mZiBh
IHRoaWNrZXIgc3Ryb2tlIGFuZCBkb3VibGVzCisgICAgLy8gdGhlIHN0cm9rZSB3aXRoLiBBbGwg
dGhpcyB0byBhbGlnbiB0aGUgYXJjIHdpdGggdGhlIGJveCBzaWRlcy4uLgorCisgICAgZmxvYXQg
cGVuU2l6ZSA9IHN0cm9rZVRoaWNrbmVzcygpIC8gMi4wZjsKKyAgICBtX2RhdGEtPnZpZXcoKS0+
U2V0UGVuU2l6ZShwZW5TaXplKTsKKyAgICBCUmVjdCBiUmVjdChyZWN0LngoKSwgcmVjdC55KCks
IHJlY3QucmlnaHQoKSwgcmVjdC5ib3R0b20oKSk7CisgICAgaWYgKHN0YXJ0QW5nbGUgPj0gMCAm
JiBzdGFydEFuZ2xlIDwgOTApIHsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZTsKKyAg
ICAgICAgYlJlY3QudG9wICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVjdC5ib3R0b20g
LT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgfSBlbHNlIGlmIChzdGFydEFuZ2xlID49IDkwICYmIHN0
YXJ0QW5nbGUgPCAxODApIHsKKyAgICAgICAgYlJlY3QubGVmdCArPSBwZW5TaXplIC8gMi4wZjsK
KyAgICAgICAgYlJlY3QudG9wICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVjdC5yaWdo
dCAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNpemUgLyAy
LjBmOworICAgIH0gZWxzZSBpZiAoc3RhcnRBbmdsZSA+PSAxODAgJiYgc3RhcnRBbmdsZSA8IDI3
MCkgeworICAgICAgICBiUmVjdC5sZWZ0ICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVj
dC5yaWdodCAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNp
emU7CisgICAgfSBlbHNlIGlmIChzdGFydEFuZ2xlID49IDI3MCAmJiBzdGFydEFuZ2xlIDwgMzYw
KSB7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBlblNpemU7CisgICAgICAgIGJSZWN0LmJvdHRv
bSAtPSBwZW5TaXplOworICAgIH0KKyAgICBiUmVjdC5PZmZzZXRUbyhmbG9vcmYoYlJlY3QubGVm
dCksIGZsb29yZihiUmVjdC50b3ApKTsKKyAgICB1aW50MzIgZmxhZ3MgPSBtX2RhdGEtPnZpZXco
KS0+RmxhZ3MoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RmxhZ3MoZmxhZ3MgfCBCX1NVQlBJ
WEVMX1BSRUNJU0UpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VBcmMoYlJlY3QsIHN0YXJ0
QW5nbGUsIGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0RmxhZ3MoZmxhZ3MpOworCisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUo
c3Ryb2tlVGhpY2tuZXNzKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0
aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fZGF0YS0+c2hhcGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisvLyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RmlsbFJ1bGUodG9IYWlrdUZpbGxS
dWxlKGZpbGxSdWxlKCkpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+TW92ZVBlblRvKEJfT1JJR0lO
KTsKKworICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlR3JhZGllbnQgfHwgc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKSB7CisgICAgICAg
IGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybikKKyAgICAgICAgICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgICAgIGVsc2UgaWYgKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVu
dCkgeworICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKy8vICAgICAgICAgICAgQkdyYWRp
ZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1H
cmFkaWVudCgpOworLy8gICAgICAgICAgICBncmFkaWVudC0+U2V0VHJhbnNmb3JtKG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisvLyAgICAg
ICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VTaGFwZShtX2RhdGEtPnNoYXBlKCksICpncmFk
aWVudCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9r
ZVNoYXBlKG1fZGF0YS0+c2hhcGUoKSk7CisgICAgfQorICAgIG1fZGF0YS0+c2V0U2hhcGUoMCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgcG9p
bnRzTGVuZ3RoLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFz
KQpAQCAtMTQ3LDEwICszMzUsMTAgQEAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBvaW50
c0xlbmd0aDsgaSsrKQogICAgICAgICBiUG9pbnRzW2ldID0gcG9pbnRzW2ldOwogCi0gICAgbV9k
YXRhLT5tX3ZpZXctPkZpbGxQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCk7CisgICAgbV9k
YXRhLT52aWV3KCktPkZpbGxQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCk7CiAgICAgaWYg
KHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCiAgICAgICAgIC8vIFN0cm9rZSB3aXRoIGxvdyBj
b2xvcgotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2lu
dHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0YS0+
dmlldygpLT5TdHJva2VQb2x5Z29uKGJQb2ludHMsIHBvaW50c0xlbmd0aCwgdHJ1ZSwgZ2V0SGFp
a3VTdHJva2VTdHlsZSgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCkBAIC0xNTgsMTYgKzM0NiwxOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+bV92
aWV3LT5IaWdoQ29sb3IoKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9y
KTsKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7Ci0gICAgbV9kYXRhLT5tX3Zp
ZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CisgICAgcmdiX2NvbG9yIG9sZENvbG9yID0gbV9k
YXRhLT52aWV3KCktPkhpZ2hDb2xvcigpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRIaWdoQ29s
b3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2Rh
dGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKG9sZENvbG9yKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEtPnZpZXcoKS0+Rmls
bFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6
ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJv
dHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKQEAg
LTE3NSwyNSArMzY1LDg4IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCAhY29sb3Iu
YWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAv
LyBGSVhNRTogQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gY291bGQganVzdCB1c2UgRmlsbFJvdW5k
UmVjdCBpZiBhbGwKLSAgICAvLyB0aGUgc2l6ZXMgYXJlIHRoZSBzYW1lLCBvciBldmVuIGlmIHRo
ZXkgYXJlIG5vdC4gT3RoZXJ3aXNlIHNldmVyYWwKLSAgICAvLyBGaWxsUmVjdCBhbmQgRmlsbEFy
YyBjYWxscyBhcmUgbmVlZGVkLgorICAgIEJQb2ludCBwb2ludHNbM107CisgICAgY29uc3QgZmxv
YXQga1JhZGl1c0JlemllclNjYWxlID0gMC41NmY7CisKKyAgICBCU2hhcGUgc2hhcGU7CisgICAg
c2hhcGUuTW92ZVRvKEJQb2ludChyZWN0LngoKSArIHRvcExlZnQud2lkdGgoKSwgcmVjdC55KCkp
KTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QucmlnaHQoKSAtIHRvcFJpZ2h0LndpZHRo
KCksIHJlY3QueSgpKSk7CisgICAgcG9pbnRzWzBdLnggPSByZWN0LnJpZ2h0KCkgLSBrUmFkaXVz
QmV6aWVyU2NhbGUgKiB0b3BSaWdodC53aWR0aCgpOworICAgIHBvaW50c1swXS55ID0gcmVjdC55
KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnkgPSBy
ZWN0LnkoKSArIGtSYWRpdXNCZXppZXJTY2FsZSAqIHRvcFJpZ2h0LmhlaWdodCgpOworICAgIHBv
aW50c1syXS54ID0gcmVjdC5yaWdodCgpOworICAgIHBvaW50c1syXS55ID0gcmVjdC55KCkgKyB0
b3BSaWdodC5oZWlnaHQoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNoYXBl
LkxpbmVUbyhCUG9pbnQocmVjdC5yaWdodCgpLCByZWN0LmJvdHRvbSgpIC0gYm90dG9tUmlnaHQu
aGVpZ2h0KCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QucmlnaHQoKTsKKyAgICBwb2ludHNb
MF0ueSA9IHJlY3QuYm90dG9tKCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdodC5o
ZWlnaHQoKTsKKyAgICBwb2ludHNbMV0ueCA9IHJlY3QucmlnaHQoKSAtIGtSYWRpdXNCZXppZXJT
Y2FsZSAqIGJvdHRvbVJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LmJvdHRv
bSgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC5yaWdodCgpIC0gYm90dG9tUmlnaHQud2lkdGgo
KTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3QuYm90dG9tKCk7CisgICAgc2hhcGUuQmV6aWVyVG8o
cG9pbnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QueCgpICsgYm90dG9tTGVmdC53
aWR0aCgpLCByZWN0LmJvdHRvbSgpKSk7CisgICAgcG9pbnRzWzBdLnggPSByZWN0LngoKSArIGtS
YWRpdXNCZXppZXJTY2FsZSAqIGJvdHRvbUxlZnQud2lkdGgoKTsKKyAgICBwb2ludHNbMF0ueSA9
IHJlY3QuYm90dG9tKCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0LngoKTsKKyAgICBwb2ludHNb
MV0ueSA9IHJlY3QuYm90dG9tKCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdodC5o
ZWlnaHQoKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3QueCgpOworICAgIHBvaW50c1syXS55ID0g
cmVjdC5ib3R0b20oKSAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpOworICAgIHNoYXBlLkJlemllclRv
KHBvaW50cyk7CisgICAgc2hhcGUuTGluZVRvKEJQb2ludChyZWN0LngoKSwgcmVjdC55KCkgKyB0
b3BMZWZ0LmhlaWdodCgpKSk7CisgICAgcG9pbnRzWzBdLnggPSByZWN0LngoKTsKKyAgICBwb2lu
dHNbMF0ueSA9IHJlY3QueSgpIC0ga1JhZGl1c0JlemllclNjYWxlICogdG9wTGVmdC5oZWlnaHQo
KTsKKyAgICBwb2ludHNbMV0ueCA9IHJlY3QueCgpICsga1JhZGl1c0JlemllclNjYWxlICogdG9w
TGVmdC53aWR0aCgpOworICAgIHBvaW50c1sxXS55ID0gcmVjdC55KCk7CisgICAgcG9pbnRzWzJd
LnggPSByZWN0LngoKSArIHRvcExlZnQud2lkdGgoKTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3Qu
eSgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuQ2xvc2UoKTsKKwor
ICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+dmlldygpLT5IaWdoQ29sb3IoKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBtX2RhdGEtPnZpZXco
KS0+TW92ZVBlblRvKEJfT1JJR0lOKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKCZz
aGFwZSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoIW1fZGF0YS0+c2hhcGUoKSkKKyAgICAgICAgcmV0dXJuOworCisvLyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0RmlsbFJ1bGUodG9IYWlrdUZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKKyAgICBtX2Rh
dGEtPnZpZXcoKS0+TW92ZVBlblRvKEJfT1JJR0lOKTsKKworICAgIGlmIChtX2NvbW1vbi0+c3Rh
dGUuZmlsbFBhdHRlcm4gfHwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCB8fCBmaWxsQ29s
b3IoKS5hbHBoYSgpKSB7CisvLyAgICAgICAgZHJhd0ZpbGxlZFNoYWRvd1BhdGgodGhpcywgcCwg
cGF0aCk7IFRPRE86IFdoYXQncyB0aGlzIHNoYWRvdyBidXNpbmVzcz8KKyAgICAgICAgaWYgKG1f
Y29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybikKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIGVsc2UgaWYgKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQpIHsKKyAgICAg
ICAgICAgIEJHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50
LT5wbGF0Zm9ybUdyYWRpZW50KCk7CisvLyAgICAgICAgICAgIGdyYWRpZW50LT5TZXRUcmFuc2Zv
cm0obV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgp
KTsKKyAgICAgICAgICAgIG1fZGF0YS0+dmlldygpLT5GaWxsU2hhcGUobV9kYXRhLT5zaGFwZSgp
LCAqZ3JhZGllbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZGF0YS0+dmlldygp
LT5GaWxsU2hhcGUobV9kYXRhLT5zaGFwZSgpKTsKKyAgICB9CisgICAgbV9kYXRhLT5zZXRTaGFw
ZSgwKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luUGF0aCgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnNldFNoYXBlKG5ldyBCU2hhcGUoKSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAoIW1fZGF0YS0+c2hhcGUoKSkKKyAgICAgICAgbV9k
YXRhLT5zZXRTaGFwZShuZXcgQlNoYXBlKCpwYXRoLnBsYXRmb3JtUGF0aCgpKSk7CisgICAgZWxz
ZQorICAgICAgICBtX2RhdGEtPnNoYXBlKCktPkFkZFNoYXBlKHBhdGgucGxhdGZvcm1QYXRoKCkp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3Qp
CkBAIC0yMDIsMTIgKzQ1NSwyMyBAQAogICAgICAgICByZXR1cm47CiAKICAgICBCUmVnaW9uIHJl
Z2lvbihyZWN0KTsKLSAgICBtX2RhdGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24o
JnJlZ2lvbik7CisgICAgbV9kYXRhLT52aWV3KCktPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZy
ZWdpb24pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoV2luZFJ1bGUgY2xp
cFJ1bGUpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdG
b2N1c1JpbmcoY29uc3QgVmVjdG9yPFBhdGg+JiBwYXRocywgaW50IHdpZHRoLCBpbnQgb2Zmc2V0
LCBjb25zdCBDb2xvciYgY29sb3IpCiB7Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudAorICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCAvKiB3aWR0aCAqLywgaW50IC8qIG9mZnNldCAqLywg
Y29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtMjIxLDExICs0ODUsMTEgQEAKIAogICAgIGlmIChyZWN0
cy5zaXplKCkgPiAxKSB7CiAgICAgICAgIEJSZWdpb24gICAgcmVnaW9uOwotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVjdENvdW50OyArK2kpCiAgICAgICAgICAgICByZWdpb24uSW5jbHVkZShCUmVj
dChyZWN0c1tpXSkpOwogCi0gICAgICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3IoY29s
b3IpOwotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWdpb24uRnJhbWUoKSwg
Ql9NSVhFRF9DT0xPUlMpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNv
bG9yKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCks
IEJfTUlYRURfQ09MT1JTKTsKICAgICB9CiB9CiAKQEAgLTI0OCw4ICs1MTIsMTIgQEAKIAogRmxv
YXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gcmVjdDsKKyAg
ICBGbG9hdFJlY3Qgcm91bmRlZChyZWN0KTsKKyAgICByb3VuZGVkLnNldFgocm91bmRmKHJlY3Qu
eCgpKSk7CisgICAgcm91bmRlZC5zZXRZKHJvdW5kZihyZWN0LnkoKSkpOworICAgIHJvdW5kZWQu
c2V0V2lkdGgocm91bmRmKHJlY3Qud2lkdGgoKSkpOworICAgIHJvdW5kZWQuc2V0SGVpZ2h0KHJv
dW5kZihyZWN0LmhlaWdodCgpKSk7CisgICAgcmV0dXJuIHJvdW5kZWQ7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCkBAIC0y
NTcsNyArNTI1LDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+cHVzaExheWVyKG9wYWNp
dHkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKQpA
QCAtMjY1LDcgKzUzMyw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnBvcExheWVyKCk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0KQpAQCAtMjczLDcgKzU0MSwxMSBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT52aWV3
KCktPlB1c2hTdGF0ZSgpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3IoMCwgMCwg
MCwgMCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldERyYXdpbmdNb2RlKEJfT1BfQ09QWSk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOworICAgIG1fZGF0YS0+dmlldygpLT5Q
b3BTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQpAQCAtMjgxLDEwICs1NTMsMTAgQEAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmbG9hdCBvbGRT
aXplID0gbV9kYXRhLT5tX3ZpZXctPlBlblNpemUoKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0
UGVuU2l6ZSh3aWR0aCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVJlY3QocmVjdCwgZ2V0
SGFpa3VTdHJva2VTdHlsZSgpKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0UGVuU2l6ZShvbGRT
aXplKTsKKyAgICBmbG9hdCBvbGRTaXplID0gbV9kYXRhLT52aWV3KCktPlBlblNpemUoKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0UGVuU2l6ZSh3aWR0aCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlN0cm9rZVJlY3QocmVjdCwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0UGVuU2l6ZShvbGRTaXplKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAtMzA1LDkgKzU3NywxNCBAQAogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobW9kZSwgbV9k
YXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGlt
aXQoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+dmll
dygpLT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT52aWV3KCktPkxpbmVNaXRlckxpbWl0KCkpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBk
YXNoZXMsIGZsb2F0IGRhc2hPZmZzZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQogewog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0zMjYsNyArNjAzLDcgQEAKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+
bV92aWV3LT5MaW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGlt
aXQoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldygpLT5M
aW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZU1pdGVyTGltaXQoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQpAQCAt
MzM0LDcgKzYxMSw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5M
aW5lQ2FwTW9kZSgpLCBtX2RhdGEtPm1fdmlldy0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0TGluZU1vZGUobV9kYXRhLT52aWV3KCktPkxpbmVDYXBNb2Rl
KCksIG1fZGF0YS0+dmlldygpLT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxvYXQgb3BhY2l0eSkKQEAgLTM0Miw3ICs2MTksNyBA
QAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+Z2xvYmFsQWxwaGEg
PSAodWludDgpKG9wYWNpdHkgKiAyNTUuMGYpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQpAQCAtMzYzLDcgKzY0
MCw3IEBACiAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCiAgICAgICAgICAg
ICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworICAgIG1fZGF0YS0+dmll
dygpLT5TZXREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM3MSw3ICs2NDgsNyBAQAogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5Db25z
dHJhaW5DbGlwcGluZ1JlZ2lvbihwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRo
JiBwYXRoKQpAQCAtMzk0LDE0ICs2NzEsMjIgQEAKIAogQWZmaW5lVHJhbnNmb3JtIEdyYXBoaWNz
Q29udGV4dDo6Z2V0QWZmaW5lQ1RNKCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKTsKKyAgICAvLyBUT0RPOiBNYXliZSB0aGlzIG5l
ZWRzIHRvIHVzZSB0aGUgYWNjdW11bGF0ZWQgdHJhbnNmb3JtPworICAgIEFmZmluZVRyYW5zZm9y
bSBtYXRyaXg7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsK
KyAgICBtYXRyaXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNj
YWxlKG1fZGF0YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gVHJhbnNmb3JtYXRpb25NYXRyaXgoKTsK
KyAgICAvLyBUT0RPOiBNYXliZSB0aGlzIG5lZWRzIHRvIHVzZSB0aGUgYWNjdW11bGF0ZWQgdHJh
bnNmb3JtPworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBCUG9pbnQgb3Jp
Z2luID0gbV9kYXRhLT52aWV3KCktPk9yaWdpbigpOworICAgIG1hdHJpeC50cmFuc2xhdGUob3Jp
Z2luLngsIG9yaWdpbi55KTsKKyAgICBtYXRyaXguc2NhbGUobV9kYXRhLT52aWV3KCktPlNjYWxl
KCkpOworICAgIHJldHVybiBtYXRyaXg7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkKQEAgLTQwOSwxMyArNjk0LDE4IEBACiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBtX2RhdGEtPm1fY3VycmVudExheWVyLT5hY2N1bXVsYXRlZE9yaWdpbi54ICs9IHg7
CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4ueSArPSB5Owor
ICAgIEJQb2ludCBvcmlnaW4obV9kYXRhLT52aWV3KCktPk9yaWdpbigpKTsKKyAgICBtX2RhdGEt
PnZpZXcoKS0+U2V0T3JpZ2luKG9yaWdpbi54ICsgeCwgb3JpZ2luLnkgKyB5KTsKKworICAgIC8v
IFRPRE86IGN1cnJlbnRQYXRoIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYWxvbmcsIGFjY29yZGlu
ZyB0byBRdCBpbXBsZW1lbnRhdGlvbgogfQogCiBJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9y
aWdpbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50UG9pbnQoMCwg
MCk7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsKKyAgICBy
ZXR1cm4gSW50UG9pbnQob3JpZ2luLngsIG9yaWdpbi55KTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQpAQCAtNDMxLDcgKzcyMSw4IEBACiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAvLyBOT1RFOiBOb24tdW5pZm9ybSBzY2FsaW5nIG5vdCBzdXBwb3J0ZWQgb24g
SGFpa3UsIHlldC4KKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0U2NhbGUoKHNpemUud2lkdGgoKSAr
IHNpemUuaGVpZ2h0KCkpIC8gMik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0
KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00MzksNyArNzMwLDkgQEAKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIEJSZWdpb24gcmVnaW9uKG1fZGF0YS0+dmlldygpLT5Cb3VuZHMoKSk7CisgICAgcmVnaW9u
LkV4Y2x1ZGUocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPkNvbnN0cmFpbkNsaXBwaW5nUmVn
aW9uKCZyZWdpb24pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dEVsbGlwc2VJ
blJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTQ1NSw2ICs3NDgsOSBAQAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIC8vIE5PVEU6IFVzZWQg
YnkgUmVuZGVyQm94TW9kZWxPYmplY3QgdG8gY2xpcCBvdXQgdGhlIGlubmVyIHBhcnQgb2YgYW4g
YXJjIHdoZW4gcmVuZGluZyBib3ggY29ybmVycy4uLgorICAgIC8vIFRPRE86IFVzZSB0aGlzIG1l
dGhvZCB0byBkZXRlY3QgaWYgd2UgYXJlIHJlbmRlcmluZyBhIHJvdW5kLWNvcm5lci1ib3guLi4K
KwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKQEAgLTQ5Myw3ICs3ODksNyBAQAogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldEZvbnQoZm9udC5wcmltYXJ5Rm9udCgpLT5wbGF0Zm9ybURh
dGEoKS5mb250KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRGb250KGZvbnQucHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNv
bG9yU3BhY2UpCkBAIC01MDEsNyArNzk3LDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNv
bG9yKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKIH0KIAogcGF0
dGVybiBHcmFwaGljc0NvbnRleHQ6OmdldEhhaWt1U3Ryb2tlU3R5bGUoKQpAQCAtNTM1LDcgKzgz
MSw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUodGhpY2tuZXNzKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9y
U3BhY2UpCkBAIC01NDMsNyArODM5LDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9y
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFkb3coKQpJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAKIGNs
YXNzIFNrU2hhZGVyOwogdHlwZWRlZiBjbGFzcyBTa1NoYWRlciogUGxhdGZvcm1HcmFkaWVudDsK
IHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtUGF0dGVybjsKKyNlbGlmIFBMQVRGT1JN
KEhBSUtVKQorY2xhc3MgQkdyYWRpZW50OwordHlwZWRlZiBCR3JhZGllbnQqIFBsYXRmb3JtR3Jh
ZGllbnQ7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOCArNDgsOCBA
QAogY2xhc3MgU2tQYXRoOwogdHlwZWRlZiBTa1BhdGggUGxhdGZvcm1QYXRoOwogI2VsaWYgUExB
VEZPUk0oSEFJS1UpCi1jbGFzcyBCUmVnaW9uOwotdHlwZWRlZiBCUmVnaW9uIFBsYXRmb3JtUGF0
aDsKK2NsYXNzIEJTaGFwZTsKK3R5cGVkZWYgQlNoYXBlIFBsYXRmb3JtUGF0aDsKICNlbGlmIE9T
KFdJTkNFKQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFBsYXRmb3JtUGF0aDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48036</attachid>
            <date>2010-02-03 08:19:57 -0800</date>
            <delta_ts>2010-02-03 08:35:04 -0800</delta_ts>
            <desc>Various fixes to mouse/wheel/keyboard event propagation on Haiku</desc>
            <filename>events.diff</filename>
            <type>text/plain</type>
            <size>6688</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAkocmV2aXNpb24g
NTQyNzUpCisrKyBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZl
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIApAQCAtNTYsNyArNTUsNyBAQAogICAg
ICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50CiAgICAg
ICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQog
ICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKLSAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDAwMDkiOworICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmllcigpID09
ICJVKzAwMDkiOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNUb0xp
bmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0yOSwyMSArMzAsMTcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAorI2luY2x1ZGUgPEludGVy
ZmFjZURlZnMuaD4KICNpbmNsdWRlIDxNZXNzYWdlLmg+Ci0jaW5jbHVkZSA8U3VwcG9ydERlZnMu
aD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZv
cm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQotICAgIDogbV90aW1lc3RhbXAo
bWVzc2FnZS0+RmluZEludDY0KCJ3aGVuIikpCi0gICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KG1l
c3NhZ2UtPkZpbmRQb2ludCgid2hlcmUiKSkpCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3Nh
Z2UtPkZpbmRQb2ludCgiZ2xvYmFsUG9zaXRpb24iKSkKLSAgICAsIG1fc2hpZnRLZXkoZmFsc2Up
Ci0gICAgLCBtX2N0cmxLZXkoZmFsc2UpCi0gICAgLCBtX2FsdEtleShmYWxzZSkKLSAgICAsIG1f
bWV0YUtleShmYWxzZSkKKyAgICA6IG1fcG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJiZTp2
aWV3X3doZXJlIikpCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgi
c2NyZWVuX3doZXJlIikpCiAgICAgLCBtX2NsaWNrQ291bnQobWVzc2FnZS0+RmluZEludDMyKCJj
bGlja3MiKSkKKyAgICAsIG1fdGltZXN0YW1wKG1lc3NhZ2UtPkZpbmRJbnQ2NCgid2hlbiIpIC8g
MTAwMDAwMC4wKQogewogICAgIGludDMyIGJ1dHRvbnMgPSBtZXNzYWdlLT5GaW5kSW50MzIoImJ1
dHRvbnMiKTsKICAgICBzd2l0Y2ggKGJ1dHRvbnMpIHsKQEAgLTc2LDYgKzczLDEyIEBACiAgICAg
ICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwogICAgICAgICBicmVhazsKICAgICB9
OworCisgICAgaW50MzIgbW9kaWZpZXJzID0gbWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMi
KTsKKyAgICBtX3NoaWZ0S2V5ID0gKG1vZGlmaWVycyAmIEJfU0hJRlRfS0VZKSAhPSAwOworICAg
IG1fY3RybEtleSA9IChtb2RpZmllcnMgJiBCX0NPTlRST0xfS0VZKSAhPSAwOworICAgIG1fYWx0
S2V5ID0gKG1vZGlmaWVycyAmIEJfQ09NTUFORF9LRVkpICE9IDA7CisgICAgbV9tZXRhS2V5ID0g
KG1vZGlmaWVycyAmIEJfT1BUSU9OX0tFWSkgIT0gMDsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVs
RXZlbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5t
YXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxz
dXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0z
MSw2ICszMiw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKIAorI2luY2x1ZGUgPEludGVy
ZmFjZURlZnMuaD4KICNpbmNsdWRlIDxNZXNzYWdlLmg+CiAjaW5jbHVkZSA8UG9pbnQuaD4KIApA
QCAtMzgsMjQgKzQwLDIzIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsYXRmb3JtV2hlZWxF
dmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEJNZXNzYWdlKiBtZXNzYWdlKQotICAgIDogbV9ncmFu
dWxhcml0eShTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCkKLSAgICAsIG1fc2hpZnRLZXkoZmFsc2Up
Ci0gICAgLCBtX2N0cmxLZXkoZmFsc2UpCi0gICAgLCBtX2FsdEtleShmYWxzZSkKLSAgICAsIG1f
bWV0YUtleShmYWxzZSkKKyAgICA6IG1fcG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJiZTp2
aWV3X3doZXJlIikpCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgi
c2NyZWVuX3doZXJlIikpCisgICAgLCBtX2RlbHRhWChtZXNzYWdlLT5GaW5kRmxvYXQoImJlOndo
ZWVsX2RlbHRhX3giKSkKKyAgICAsIG1fZGVsdGFZKG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hl
ZWxfZGVsdGFfeSIpKQorICAgICwgbV93aGVlbFRpY2tzWChtX2RlbHRhWCkKKyAgICAsIG1fd2hl
ZWxUaWNrc1kobV9kZWx0YVkpCisgICAgLCBtX2dyYW51bGFyaXR5KFNjcm9sbEJ5UGl4ZWxXaGVl
bEV2ZW50KQogICAgICwgbV9pc0FjY2VwdGVkKGZhbHNlKQogewotICAgIG1fcG9zaXRpb24gPSBJ
bnRQb2ludChtZXNzYWdlLT5GaW5kUG9pbnQoInBvc2l0aW9uIikpOwotICAgIG1fZ2xvYmFsUG9z
aXRpb24gPSBJbnRQb2ludChtZXNzYWdlLT5GaW5kUG9pbnQoImdsb2JhbF9wb3NpdGlvbiIpKTsK
LQotICAgIG1fZGVsdGFYID0gbWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVlbF9kZWx0YV94Iik7
Ci0gICAgbV9kZWx0YVkgPSBtZXNzYWdlLT5GaW5kRmxvYXQoImJlOndoZWVsX2RlbHRhX3kiKTsK
LQotICAgIG1fd2hlZWxUaWNrc1ggPSBtX2RlbHRhWDsKLSAgICBtX3doZWVsVGlja3NZID0gbV9k
ZWx0YVk7Ci0KICAgICBtX2RlbHRhWCAqPSAtY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwOwog
ICAgIG1fZGVsdGFZICo9IC1jU2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXA7CisKKyAgICBpbnQz
MiBtb2RpZmllcnMgPSBtZXNzYWdlLT5GaW5kSW50MzIoIm1vZGlmaWVycyIpOworICAgIG1fc2hp
ZnRLZXkgPSAobW9kaWZpZXJzICYgQl9TSElGVF9LRVkpICE9IDA7CisgICAgbV9jdHJsS2V5ID0g
KG1vZGlmaWVycyAmIEJfQ09OVFJPTF9LRVkpICE9IDA7CisgICAgbV9hbHRLZXkgPSAobW9kaWZp
ZXJzICYgQl9DT01NQU5EX0tFWSkgIT0gMDsKKyAgICBtX21ldGFLZXkgPSAobW9kaWZpZXJzICYg
Ql9PUFRJT05fS0VZKSAhPSAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhh
aWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRm
b3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56
YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjks
MTEgKzMwLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXli
b2FyZEV2ZW50LmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRD
b2Rlcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8SW50ZXJmYWNl
RGVmcy5oPgogI2luY2x1ZGUgPE1lc3NhZ2UuaD4KICNpbmNsdWRlIDxTdHJpbmcuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEwNSw3ICsxMDgsNyBA
QAogICAgICAgICByZXR1cm4gIlUrMDAwOSI7CiAgICAgfQogCi0gICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoa2V5Q29kZSkpOworICAgIHJldHVybiBTdHJp
bmc6OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKHNpbmdsZUJ5dGUpKTsKIH0KIAogc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGNoYXIgc2luZ2xlQnl0ZSkKQEAgLTE0
MSwzMiArMTQ0LDM0IEBACiAgICAgICAgIHJldHVybiBWS19JTlNFUlQ7IC8vICgyRCkgSU5TIGtl
eQogICAgIGNhc2UgQl9ERUxFVEU6CiAgICAgICAgIHJldHVybiBWS19ERUxFVEU7IC8vICgyRSkg
REVMIGtleQotICAgIGNhc2UgMHgyZToKKwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAw
OworICAgICAgICByZXR1cm4gc2luZ2xlQnl0ZTsKICAgICB9CiB9CiAKIFBsYXRmb3JtS2V5Ym9h
cmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEJNZXNzYWdlKiBtZXNzYWdlKQogICAgIDog
bV9hdXRvUmVwZWF0KGZhbHNlKQorICAgICwgbV9pc0tleXBhZChmYWxzZSkKKyAgICAsIG1fc2hp
ZnRLZXkoZmFsc2UpCiAgICAgLCBtX2N0cmxLZXkoZmFsc2UpCiAgICAgLCBtX2FsdEtleShmYWxz
ZSkKICAgICAsIG1fbWV0YUtleShmYWxzZSkKLSAgICAsIG1faXNLZXlwYWQoZmFsc2UpCi0gICAg
LCBtX3NoaWZ0S2V5KGZhbHNlKQogewogICAgIEJTdHJpbmcgYnl0ZXMgPSBtZXNzYWdlLT5GaW5k
U3RyaW5nKCJieXRlcyIpOwogCisgICAgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSA9IG1lc3NhZ2Ut
PkZpbmRJbnQzMigia2V5Iik7CisKICAgICBtX3RleHQgPSBTdHJpbmc6OmZyb21VVEY4KGJ5dGVz
LlN0cmluZygpLCBieXRlcy5MZW5ndGgoKSk7CiAgICAgbV91bm1vZGlmaWVkVGV4dCA9IFN0cmlu
ZyhieXRlcy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOwotICAgIG1fa2V5SWRlbnRpZmllciA9
IGtleUlkZW50aWZpZXJGb3JIYWlrdUtleUNvZGUoYnl0ZXMuQnl0ZUF0KDApLCBtZXNzYWdlLT5G
aW5kSW50MzIoImtleSIpKTsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9y
SGFpa3VLZXlDb2RlKGJ5dGVzLkJ5dGVBdCgwKSwgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSk7CiAK
KyAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQo
Ynl0ZXMuQnl0ZUF0KDApKTsKKwogICAgIGlmIChtZXNzYWdlLT53aGF0ID09IEJfS0VZX1VQKQog
ICAgICAgICBtX3R5cGUgPSBLZXlVcDsKICAgICBlbHNlIGlmIChtZXNzYWdlLT53aGF0ID09IEJf
S0VZX0RPV04pCiAgICAgICAgIG1fdHlwZSA9IEtleURvd247Ci0KLSAgICBtX3dpbmRvd3NWaXJ0
dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoYnl0ZXMuQnl0ZUF0KDApKTsK
IH0KIAogdm9pZCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OmRpc2FtYmlndWF0ZUtleURvd25FdmVu
dChUeXBlIHR5cGUsIGJvb2wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48037</attachid>
            <date>2010-02-03 08:31:38 -0800</date>
            <delta_ts>2010-02-04 01:59:52 -0800</delta_ts>
            <desc>HaikuLauncher minimal browser shell</desc>
            <filename>haikulauncher.diff</filename>
            <type>text/plain</type>
            <size>159851</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IGhhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBoYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHAJKHJldmlz
aW9uIDU0Mjc1KQorKysgaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBS
eWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWls
LmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFu
IEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMw
LDE4ICszMiwyOCBAQAogCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRS
ZXF1ZXN0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ckNsaWVudEhhaWt1LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSGl0VGVz
dFJlc3VsdC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJGcmFtZS5oIgorI2luY2x1ZGUgIldlYkZyYW1lUHJp
dmF0ZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3V2luZG93Lmgi
CisjaW5jbHVkZSAiV2luZG93RmVhdHVyZXMuaCIKIAogI2luY2x1ZGUgPEFsZXJ0Lmg+Ci0jaW5j
bHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8RmlsZVBhbmVsLmg+CisjaW5jbHVkZSA8UmVnaW9u
Lmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DaHJvbWVDbGllbnRIYWlrdTo6Q2hyb21l
Q2xpZW50SGFpa3UoKQorQ2hyb21lQ2xpZW50SGFpa3U6OkNocm9tZUNsaWVudEhhaWt1KFdlYlBy
b2Nlc3MqIHdlYlByb2Nlc3MsIFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlByb2Nlc3Mo
d2ViUHJvY2VzcykKKyAgICAsIG1fd2ViVmlldyh3ZWJWaWV3KQogewogfQogCkBAIC01MSw3MiAr
NjMsMTAyIEBACiAKIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmNocm9tZURlc3Ryb3llZCgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBDaHJv
bWVDbGllbnRIYWlrdTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKQordm9pZCBDaHJv
bWVDbGllbnRIYWlrdTo6c2V0V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dlYlByb2Nlc3MtPnNldFdpbmRvd0JvdW5kcyhC
UmVjdChyZWN0KSk7CiB9CiAKIEZsb2F0UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93UmVj
dCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KDAsIDAs
IDIwMCwgMjAwKTsKKyAgICByZXR1cm4gRmxvYXRSZWN0KG1fd2ViUHJvY2Vzcy0+d2luZG93Qm91
bmRzKCkpOwogfQogCiBGbG9hdFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OnBhZ2VSZWN0KCkKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgMjAwLCAy
MDApOworICAgIHJldHVybiBGbG9hdFJlY3QobV93ZWJQcm9jZXNzLT5jb250ZW50c1NpemUoKSk7
CiB9CiAKIGZsb2F0IENocm9tZUNsaWVudEhhaWt1OjpzY2FsZUZhY3RvcigpCiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMS4wOworICAgIHJldHVybiAxOwogfQogCiB2b2lk
IENocm9tZUNsaWVudEhhaWt1Ojpmb2N1cygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBpZiAobV93ZWJWaWV3LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAgICAgbV93ZWJWaWV3LT5NYWtl
Rm9jdXModHJ1ZSk7CisgICAgICAgIG1fd2ViVmlldy0+VW5sb2NrTG9vcGVyKCk7CisgICAgfQog
fQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1Ojp1bmZvY3VzKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmIChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgeworICAgICAgICBtX3dl
YlZpZXctPk1ha2VGb2N1cyhmYWxzZSk7CisgICAgICAgIG1fd2ViVmlldy0+VW5sb2NrTG9vcGVy
KCk7CisgICAgfQogfQogCiBib29sIENocm9tZUNsaWVudEhhaWt1OjpjYW5UYWtlRm9jdXMoRm9j
dXNEaXJlY3Rpb24pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6dGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CitwcmludGYoIkNocm9tZUNsaWVudEhhaWt1Ojp0YWtl
Rm9jdXMoKVxuIik7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmZvY3VzZWROb2RlQ2hh
bmdlZChOb2RlKikKIHsKK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OmZvY3VzZWROb2RlQ2hh
bmdlZCgpXG4iKTsKKyAgICBmb2N1cygpOwogfQogCi1QYWdlKiBDaHJvbWVDbGllbnRIYWlrdTo6
Y3JlYXRlV2luZG93KEZyYW1lKiwgY29uc3QgRnJhbWVMb2FkUmVxdWVzdCYsIGNvbnN0IFdlYkNv
cmU6OldpbmRvd0ZlYXR1cmVzJikKK1BhZ2UqIENocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVXaW5k
b3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBXZWJDb3Jl
OjpXaW5kb3dGZWF0dXJlcyYgZmVhdHVyZXMpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVdpbmRvdygp
XG4iKTsKKyAgICBCUmVjdCBmcmFtZTsKKyAgICBpZiAoZmVhdHVyZXMueFNldCAmJiBmZWF0dXJl
cy55U2V0ICYmIGZlYXR1cmVzLndpZHRoU2V0ICYmIGZlYXR1cmVzLmhlaWdodFNldCkgeworICAg
ICAgICBmcmFtZS5sZWZ0ID0gZmVhdHVyZXMueDsKKyAgICAgICAgZnJhbWUudG9wID0gZmVhdHVy
ZXMueTsKKyAgICAgICAgZnJhbWUucmlnaHQgPSBmZWF0dXJlcy54ICsgZmVhdHVyZXMud2lkdGgg
LSAxOworICAgICAgICBmcmFtZS5ib3R0b20gPSBmZWF0dXJlcy55ICsgZmVhdHVyZXMuaGVpZ2h0
IC0gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmFtZS5TZXQoNTAsIDUwLCA0NDksIDQ0OSk7
CisgICAgfQorICAgIHdpbmRvd19sb29rIGxvb2sgPSBCX1RJVExFRF9XSU5ET1dfTE9PSzsKKyAg
ICB3aW5kb3dfZmVlbCBmZWVsID0gQl9OT1JNQUxfV0lORE9XX0ZFRUw7CisgICAgaWYgKGZlYXR1
cmVzLmRpYWxvZykgeworICAgICAgICBsb29rID0gQl9NT0RBTF9XSU5ET1dfTE9PSzsKKyAgICAg
ICAgZmVlbCA9IEJfTU9EQUxfQVBQX1dJTkRPV19GRUVMOworICAgIH0KKyAgICB1aW50MzIgZmxh
Z3MgPSBCX0FTWU5DSFJPTk9VU19DT05UUk9MUyB8IEJfQVVUT19VUERBVEVfU0laRV9MSU1JVFM7
CisgICAgaWYgKCFmZWF0dXJlcy5yZXNpemFibGUpCisgICAgICAgIGZsYWdzIHw9IEJfTk9UX1pP
T01BQkxFIHwgQl9OT1RfUkVTSVpBQkxFOwogCi1QYWdlKiBDaHJvbWVDbGllbnRIYWlrdTo6Y3Jl
YXRlTW9kYWxEaWFsb2coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JikKLXsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOworICAgIFdlYlZpZXdXaW5kb3cqIHdpbmRv
dyA9IG5ldyBXZWJWaWV3V2luZG93KGZyYW1lLCAiV2ViVmlldyIsIGxvb2ssIGZlZWwsIGZsYWdz
KTsKKyAgICBXZWJWaWV3KiB2aWV3ID0gd2luZG93LT53ZWJWaWV3KCk7CisgICAgd2luZG93LT5B
ZGRDaGlsZCh2aWV3KTsKKyAgICB3aW5kb3ctPlNob3coKTsKKworICAgIHZpZXctPndlYlByb2Nl
c3MoKS0+bG9hZFVSTChCU3RyaW5nKHJlcXVlc3QucmVzb3VyY2VSZXF1ZXN0KCkudXJsKCkuc3Ry
aW5nKCkpKTsKKworICAgIHJldHVybiB2aWV3LT53ZWJQcm9jZXNzKCktPnBhZ2UoKTsKIH0KIAog
dm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2hvdygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
K3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OnNob3coKVxuIik7CisgICAgaWYgKG1fd2ViVmll
dy0+TG9ja0xvb3BlcigpKSB7CisgICAgICAgIGlmIChtX3dlYlZpZXctPldpbmRvdygpLT5Jc0hp
ZGRlbigpKQorICAgICAgICAgICAgbV93ZWJWaWV3LT5XaW5kb3coKS0+U2hvdygpOworICAgICAg
ICBtX3dlYlZpZXctPlVubG9ja0xvb3BlcigpOworICAgIH0KIH0KIAogYm9vbCBDaHJvbWVDbGll
bnRIYWlrdTo6Y2FuUnVuTW9kYWwoKQpAQCAtMTMwLDY3ICsxNzIsNTEgQEAKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRUb29sYmFyc1Zpc2li
bGUoYm9vbCkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFRvb2xiYXJzVmlzaWJsZShib29s
IHZpc2libGUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dlYlZpZXctPnNldFRv
b2xiYXJzVmlzaWJsZSh2aXNpYmxlKTsKIH0KIAogYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6dG9v
bGJhcnNWaXNpYmxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5hcmVUb29sYmFyc1Zpc2libGUoKTsKIH0KIAotdm9p
ZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0U3RhdHVzYmFyVmlzaWJsZShib29sKQordm9pZCBDaHJv
bWVDbGllbnRIYWlrdTo6c2V0U3RhdHVzYmFyVmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dlYlZpZXctPnNldFN0YXR1c2JhclZpc2libGUodmlz
aWJsZSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnN0YXR1c2JhclZpc2libGUoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBt
X3dlYlZpZXctPmlzU3RhdHVzYmFyVmlzaWJsZSgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhh
aWt1OjpzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKQordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6
c2V0U2Nyb2xsYmFyc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgbV93ZWJQcm9jZXNzLT5tYWluRnJhbWUoKS0+c2V0QWxsb3dzU2Nyb2xsaW5nKHZp
c2libGUpOwogfQogCiBib29sIENocm9tZUNsaWVudEhhaWt1OjpzY3JvbGxiYXJzVmlzaWJsZSgp
CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
bV93ZWJQcm9jZXNzLT5tYWluRnJhbWUoKS0+YWxsb3dzU2Nyb2xsaW5nKCk7CiB9CiAKLXZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OnNldE1lbnViYXJWaXNpYmxlKGJvb2wpCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRNZW51YmFyVmlzaWJsZShib29sIHZpc2libGUpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX3dlYlZpZXctPnNldE1lbnViYXJWaXNpYmxlKHZpc2libGUpOwog
fQogCiBib29sIENocm9tZUNsaWVudEhhaWt1OjptZW51YmFyVmlzaWJsZSgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+
aXNNZW51YmFyVmlzaWJsZSgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRSZXNp
emFibGUoYm9vbCkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFJlc2l6YWJsZShib29sIHJl
c2l6YWJsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fd2ViVmlldy0+c2V0UmVz
aXphYmxlKHJlc2l6YWJsZSk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1lc3Nh
Z2VUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJl
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBzb3VyY2VJRCkKLXsKLSAgICBwcmludGYoIk1FU1NBR0UgJXM6JWkgJXNcbiIsIEJTdHJp
bmcoc291cmNlSUQpLlN0cmluZygpLCBsaW5lTnVtYmVyLCBCU3RyaW5nKG1lc3NhZ2UpLlN0cmlu
ZygpKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6YWRkTWVzc2FnZVRvQ29uc29sZShN
ZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IFN0cmluZyYgc291cmNlSUQpCi17Ci0gICAgcHJpbnRmKCJNRVNTQUdFICVz
OiVpICVzXG4iLCBCU3RyaW5nKHNvdXJjZUlEKS5TdHJpbmcoKSwgbGluZU51bWJlciwgQlN0cmlu
ZyhtZXNzYWdlKS5TdHJpbmcoKSk7Ci19Ci0KIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1l
c3NhZ2VUb0NvbnNvbGUoTWVzc2FnZVNvdXJjZSwgTWVzc2FnZVR5cGUsIE1lc3NhZ2VMZXZlbCwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCkKIHsKQEAgLTE5OSwxOSArMjI1LDE4IEBACiAKIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OmNh
blJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgQ2hyb21lQ2xp
ZW50SGFpa3U6OnJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbChjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gcnVuSmF2YVNjcmlwdENvbmZpcm0oZnJhbWUsIG1lc3NhZ2UpOwog
fQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpjbG9zZVdpbmRvd1Nvb24oKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgbV93ZWJQcm9jZXNzLT5tYWluRnJhbWUoKS0+ZnJhbWUoKS0+
bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7CisgICAgbV93ZWJWaWV3LT5jbG9zZVdpbmRvdygp
OwogfQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUq
LCBjb25zdCBTdHJpbmcmIG1zZykKQEAgLTIzMiw5ICsyNTcsOSBAQAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBT
dHJpbmcmKQordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0U3RhdHVzYmFyVGV4dChjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dlYlZpZXct
PnNldFN0YXR1c1RleHQoQlN0cmluZyhtZXNzYWdlKSk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50
SGFpa3U6OnNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKQpAQCAtMjUzLDY5ICsyNzgsNjYgQEAK
ICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXBh
aW50KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwg
Ym9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXBhaW50
KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRl
LCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFRPRE86IFRoaXMgZGVhZGxvY2tzIHdoZW4gY2FsbGVkIGZyb20gdGhlIGFwcCB0aHJlYWQg
ZHVyaW5nIGluaXQgKGZvcnR1bmF0ZWx5IGltbWVkaWF0ZSBpcyBmYWxzdCB0aGVuKQorICAgIGlm
IChpbW1lZGlhdGUpCisgICAgICAgIG1fd2ViUHJvY2Vzcy0+cGFpbnQoQlJlY3QocmVjdCksIGNv
bnRlbnRDaGFuZ2VkLCBpbW1lZGlhdGUsIHJlcGFpbnRDb250ZW50T25seSk7CisgICAgZWxzZQor
ICAgICAgICBtX3dlYlByb2Nlc3MtPmRyYXcoQlJlY3QocmVjdCkpOwogfQogCiB2b2lkIENocm9t
ZUNsaWVudEhhaWt1OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IElu
dFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKy8vcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsKClcbiIp
OworLy9wcmludGYoIiAgc2Nyb2xsRGVsdGE6ICAlZCwgJWRcbiIsIHNjcm9sbERlbHRhLndpZHRo
KCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKKy8vcHJpbnRmKCIgIHJlY3RUb1Njcm9sbDogJWQs
ICVkLCAlZCwgJWRcbiIsIHJlY3RUb1Njcm9sbC54KCksIHJlY3RUb1Njcm9sbC55KCksIHJlY3RU
b1Njcm9sbC53aWR0aCgpLCByZWN0VG9TY3JvbGwuaGVpZ2h0KCkpOworLy9wcmludGYoIiAgY2xp
cFJlY3Q6ICVkLCAlZCwgJWQsICVkXG4iLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xp
cFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpOwogfQogCi1JbnRQb2ludCBDaHJvbWVD
bGllbnRIYWlrdTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdAorSW50UG9p
bnQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRQb2ludCgp
OworICAgIHJldHVybiBJbnRQb2ludChtX3dlYlZpZXctPkNvbnZlcnRGcm9tU2NyZWVuKEJQb2lu
dChwb2ludCkpKTsKIH0KIAotSW50UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93VG9TY3Jl
ZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0CitJbnRSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5k
b3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChtX3dlYlZp
ZXctPkNvbnZlcnRUb1NjcmVlbihCUmVjdChyZWN0KSkpOwogfQogCiBQbGF0Zm9ybVBhZ2VDbGll
bnQgQ2hyb21lQ2xpZW50SGFpa3U6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGxhdGZvcm1XaWRnZXQoKTsKKyAgICByZXR1
cm4gbV93ZWJWaWV3OwogfQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpjb250ZW50c1NpemVD
aGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKy8vcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6Y29udGVudHNTaXplQ2hhbmdlZCgp
XG4iKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KGNv
bnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIC8vIE5PVEU6IFVzZWQgZm9yIGV4YW1wbGUgdG8gbWFrZSB0aGUgdmlldyBz
Y3JvbGwgd2l0aCB0aGUgbW91c2Ugd2hlbiBzZWxlY3RpbmcuCisvL3ByaW50ZigiQ2hyb21lQ2xp
ZW50SGFpa3U6OnNjcm9sbFJlY3RJbnRvVmlldygpXG4iKTsKIH0KIAotdm9pZCBDaHJvbWVDbGll
bnRIYWlrdTo6YWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0JikKK3ZvaWQgQ2hyb21lQ2xp
ZW50SGFpa3U6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQmIHJl
c3VsdCwgdW5zaWduZWQgLyptb2RpZmllckZsYWdzKi8pCiB7CitwcmludGYoIkNocm9tZUNsaWVu
dEhhaWt1Ojptb3VzZURpZE1vdmVPdmVyRWxlbWVudCgpXG4iKTsKKyAgICBUZXh0RGlyZWN0aW9u
IGRpcjsKKyAgICBpZiAocmVzdWx0LmFic29sdXRlTGlua1VSTCgpICE9IGxhc3RIb3ZlclVSTAor
ICAgICAgICB8fCByZXN1bHQudGl0bGUoZGlyKSAhPSBsYXN0SG92ZXJUaXRsZQorICAgICAgICB8
fCByZXN1bHQudGV4dENvbnRlbnQoKSAhPSBsYXN0SG92ZXJDb250ZW50KSB7CisgICAgICAgIGxh
c3RIb3ZlclVSTCA9IHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKTsKKyAgICAgICAgbGFzdEhvdmVy
VGl0bGUgPSByZXN1bHQudGl0bGUoZGlyKTsKKyAgICAgICAgbGFzdEhvdmVyQ29udGVudCA9IHJl
c3VsdC50ZXh0Q29udGVudCgpOworICAgICAgICBtX3dlYlZpZXctPmxpbmtIb3ZlcmVkKGxhc3RI
b3ZlclVSTC5wcmV0dHlVUkwoKSwgbGFzdEhvdmVyVGl0bGUsIGxhc3RIb3ZlckNvbnRlbnQpOwor
ICAgIH0KIH0KIAotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsQmFja2luZ1N0b3JlKGlu
dCwgaW50LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpCi17Ci19Ci0KLXZvaWQgQ2hy
b21lQ2xpZW50SGFpa3U6OnVwZGF0ZUJhY2tpbmdTdG9yZSgpCi17Ci19Ci0KLXZvaWQgQ2hyb21l
Q2xpZW50SGFpa3U6Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KGNvbnN0IEhpdFRlc3RSZXN1bHQm
IGhpdCwgdW5zaWduZWQgLyptb2RpZmllckZsYWdzKi8pCi17Ci0gICAgLy8gU29tZSBleHRyYSBp
bmZvCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6
c2V0VG9vbFRpcChjb25zdCBTdHJpbmcmIHRpcCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
fQotCiB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdGlw
LCBUZXh0RGlyZWN0aW9uKQogeworcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2V0VG9vbFRp
cCgpXG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC0zMjQsMTAgKzM0NiwxMiBA
QAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKKyNpZiBFTkFCTEUoREFUQUJBU0UpCiB2b2lk
IENocm9tZUNsaWVudEhhaWt1OjpleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBT
dHJpbmcmIGRhdGFiYXNlTmFtZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQorI2VuZGlm
CiAKICNpZiBFTkFCTEUoT0ZGTElORV9XRUJfQVBQTElDQVRJT05TKQogdm9pZCBDaHJvbWVDbGll
bnRXeDo6cmVhY2hlZE1heEFwcENhY2hlU2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKQpAQCAtMzM2
LDM0ICszNjAsMjYgQEAKIH0KICNlbmRpZgogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXF1
ZXN0R2VvbG9jYXRpb25QZXJtaXNzaW9uRm9yRnJhbWUoRnJhbWUqLCBHZW9sb2NhdGlvbiopCit2
b2lkIENocm9tZUNsaWVudEhhaWt1OjpydW5PcGVuUGFuZWwoRnJhbWUqLCBQYXNzUmVmUHRyPEZp
bGVDaG9vc2VyPiBjaG9vc2VyKQogeworcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6cnVuT3Bl
blBhbmVsKClcbiIpOworICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgZG8gYW55dGhpbmcgZWxz
ZSB0aGFuIG9wZW5pbmcgYSBmaWxlIHBhbmVsLgorICAgIC8vIEJGaWxlUGFuZWwqIHBhbmVsID0g
bmV3IEJGaWxlUGFuZWwoQl9PUEVOX1BBTkVMLCAwLCAwLCAwLCBjaG9vc2VyLT5hbGxvd3NNdWx0
aXBsZUZpbGVzKCkpOworICAgIC8vIHBhbmVsLT5TaG93KCk7CiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFz
c1JlZlB0cjxGaWxlQ2hvb3Nlcj4pCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogYm9v
bCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0Q3Vyc29yKFBsYXRmb3JtQ3Vyc29ySGFuZGxlKQogewor
cHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2V0Q3Vyc29yKClcbiIpOwogICAgIG5vdEltcGxl
bWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi0vLyBOb3RpZmljYXRpb24gdGhhdCB0
aGUgZ2l2ZW4gZm9ybSBlbGVtZW50IGhhcyBjaGFuZ2VkLiBUaGlzIGZ1bmN0aW9uCi0vLyB3aWxs
IGJlIGNhbGxlZCBmcmVxdWVudGx5LCBzbyBoYW5kbGluZyBzaG91bGQgYmUgdmVyeSBmYXN0Lgot
dm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Zm9ybVN0YXRlRGlkQ2hhbmdlKGNvbnN0IE5vZGUqKQor
dm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZy
YW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LVBhc3NPd25QdHI8SFRNTFBhcnNlclF1aXJrcz4gQ2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZUhU
TUxQYXJzZXJRdWlya3MoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogaGFpa3UvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9XZWJDb3JlU3VwcG9y
dC9EcmFnQ2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIGhhaWt1L1dlYkNvcmVT
dXBwb3J0L0RyYWdDbGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEwICsyOCwx
NSBAQAogI2luY2x1ZGUgIkRyYWdDbGllbnRIYWlrdS5oIgogCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CitEcmFnQ2xpZW50SGFpa3U6OkRyYWdDbGllbnRIYWlrdShXZWJWaWV3KiB3ZWJWaWV3KQorICAg
IDogbV93ZWJWaWV3KHdlYlZpZXcpCit7fQorCiBEcmFnRGVzdGluYXRpb25BY3Rpb24gRHJhZ0Ns
aWVudEhhaWt1OjphY3Rpb25NYXNrRm9yRHJhZyhEcmFnRGF0YSopCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKQEAgLTQ1LDcgKzUwLDcgQEAKIAogdm9pZCBEcmFnQ2xpZW50SGFpa3U6OmRyYWdD
b250cm9sbGVyRGVzdHJveWVkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0
ZSB0aGlzOwogfQogCiBEcmFnU291cmNlQWN0aW9uIERyYWdDbGllbnRIYWlrdTo6ZHJhZ1NvdXJj
ZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYpCkluZGV4OiBoYWlrdS9XZWJDb3Jl
U3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvV2Vi
Q29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oCShyZXZpc2lvbiA1NDI3NSkKKysr
IGhhaWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDbGllbnQuaCIK
IAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQ29udGV4dE1lbnU7CiAKQEAgLTQx
LDExICs0MCwxMSBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0
ZWQoQ29udGV4dE1lbnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKTsKIAogICAgICAgICB2aXJ0
dWFsIHZvaWQgZG93bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHNlYXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IGxvb2tVcEluRGljdGlvbmFyeShGcmFtZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3BlYWso
Y29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwZWFraW5nKCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBzdG9wU3BlYWtpbmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNl
YXJjaFdpdGhHb29nbGUoY29uc3QgRnJhbWUqKTsKICAgICB9OwogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQogCkluZGV4OiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBoYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFt
ZUxvYWRlckNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFp
bC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhh
biBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00
MywxNDkgKzQ0LDE0MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiU2NyaXB0Q29udHJvbGxlci5oIgorI2luY2x1
ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgogI2luY2x1ZGUgIldlYlZp
ZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q29uc3RhbnRzLmgiCiAKICNpbmNsdWRlIDxNZXNzYWdl
Lmg+CiAjaW5jbHVkZSA8U3RyaW5nLmg+CiAKLSNpbmNsdWRlIDxhcHAvTWVzc2VuZ2VyLmg+CiAK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1GcmFtZUxvYWRlckNsaWVudEhhaWt1OjpGcmFtZUxv
YWRlckNsaWVudEhhaWt1KCkKLSAgICA6IG1fZnJhbWUoMCkKK0ZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoV2ViUHJvY2Vzcyogd2ViUHJvY2VzcywgV2ViRnJh
bWUqIHdlYkZyYW1lKQorICAgIDogbV93ZWJQcm9jZXNzKHdlYlByb2Nlc3MpCisgICAgLCBtX3dl
YkZyYW1lKHdlYkZyYW1lKQorICAgICwgbV9tZXNzZW5nZXIoKQogeworICAgIEFTU0VSVChtX3dl
YlByb2Nlc3MpOworICAgIEFTU0VSVChtX3dlYkZyYW1lKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpzZXRGcmFtZShGcmFtZSogZnJhbWUpCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNldERpc3BhdGNoVGFyZ2V0KEJIYW5kbGVyKiBoYW5kbGVyKQogewotICAgIG1f
ZnJhbWUgPSBmcmFtZTsKKyAgICBtX21lc3NlbmdlciA9IEJNZXNzZW5nZXIoaGFuZGxlcik7CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0V2ViVmlldyhXZWJWaWV3KiB3ZWJ2
aWV3KQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmcmFtZUxvYWRlckRlc3Ryb3llZCgp
CiB7Ci0gICAgbV93ZWJWaWV3ID0gd2VidmlldzsKLSAgICBtX21lc3NlbmdlciA9IG5ldyBCTWVz
c2VuZ2VyKG1fd2ViVmlldyk7Ci0gICAgQVNTRVJUKG1fbWVzc2VuZ2VyLT5Jc1ZhbGlkKCkpOwor
ICAgIG1fd2ViRnJhbWUgPSAwOworICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRldGFjaEZyYW1lTG9hZGVyKCkKLXsKLSAgICBtX2ZyYW1lID0gMDsK
LX0KLQogYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpoYXNXZWJWaWV3KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV93ZWJWaWV3OworICAgIHJldHVybiBtX3dlYlByb2Nlc3MtPndlYlZpZXco
KTsKIH0KIAotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpoYXNCYWNrRm9yd2FyZExpc3Qo
KSBjb25zdAordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjptYWtlUmVwcmVzZW50YXRpb24o
RG9jdW1lbnRMb2FkZXIqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVzZXRCYWNrRm9yd2FyZExp
c3QoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpmb3JjZUxheW91dCgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dlYkZyYW1lLT5mcmFtZSgpLT52aWV3KCktPmZvcmNl
TGF5b3V0KCk7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvdmlzaW9uYWxJ
dGVtSXNUYXJnZXQoKSBjb25zdAordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpmb3JjZUxh
eW91dEZvck5vbkhUTUwoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZh
bHNlOworICAgIG1fd2ViRnJhbWUtPmZyYW1lKCktPnZpZXcoKS0+Zm9yY2VMYXlvdXQoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjptYWtlUmVwcmVzZW50YXRpb24oRG9jdW1l
bnRMb2FkZXIqKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRDb3BpZXNPblNjcm9s
bCgpCiB7CitwcmludGYoIkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldENvcGllc09uU2Nyb2xs
KClcbiIpOworICAgIC8vIGFwcGFyZW50bHkgbWFjIHNwZWNpZmljCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpmb3JjZUxheW91dCgpCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDIoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9y
Y2VMYXlvdXRGb3JOb25IVE1MKCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGV0YWNo
ZWRGcm9tUGFyZW50MygpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKQorYm9vbCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNl
UmVzcG9uc2UmLCBpbnQpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlSGlzdG9yeUZvclJl
bG9hZCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkTG9hZFJlc291
cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKQog
ewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6dXBkYXRlSGlzdG9yeUZvclN0YW5kYXJkTG9hZCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRl
bnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQogewogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBk
YXRlSGlzdG9yeUZvckludGVybmFsTG9hZCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywg
UmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25z
ZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnVwZGF0ZUhpc3RvcnlBZnRlckNsaWVudFJlZGlyZWN0KCkKK2Jvb2wgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6c2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIq
LCB1bnNpZ25lZCBsb25nKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldENvcGllc09uU2Nyb2xs
KCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBB
dXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCiB7Ci0gICAgLy8gYXBwYXJlbnRseSBtYWMgc3BlY2lm
aWMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1Mb2FkRXJyb3JSZXNldFRva2VuKiBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1Ojp0b2tlbkZvckxvYWRFcnJvclJlc2V0KCkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5n
ZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiAwOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlc2V0QWZ0ZXJMb2FkRXJyb3IoTG9hZEVycm9y
UmVzZXRUb2tlbiopCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVj
ZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWQsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZG9Ob3RSZXNldEFmdGVyTG9hZEVy
cm9yKExvYWRFcnJvclJlc2V0VG9rZW4qKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVu
c2lnbmVkIGxvbmcgaWQsIGludCBsZW5ndGgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3aWxsQ2xvc2VEb2N1bWVudCgpCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExv
YWRlciogbG9hZGVyLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJNZXNzYWdlIG1lc3NhZ2UoTE9BRF9GQUlMRUQpOwor
ICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCBsb2FkZXItPnVybCgpLnN0cmluZygpKTsKKyAg
ICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGV0YWNoZWRGcm9tUGFyZW50MygpCi17Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEhhbmRs
ZU9ubG9hZEV2ZW50cygpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2Fn
ZSBtZXNzYWdlKExPQURfT05MT0FEX0hBTkRMRSk7Ci0gICAgICAgIG1lc3NhZ2UuQWRkU3RyaW5n
KCJ1cmwiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdl
KTsKLSAgICB9CisgICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX09OTE9BRF9IQU5ETEUpOworICAg
IG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCBtX3dlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+
ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVybCgpLnN0cmluZygpKTsKKyAgICBtX21lc3Nl
bmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQo
KQpAQCAtMjI4LDY1ICsyMjEsNjQgQEAKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUljb24oKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewot
ICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfTkVHT0NJQVRJTkcpOwotICAgICAgICBtZXNz
YWdlLkFkZFN0cmluZygidXJsIiwgbV9mcmFtZS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1l
bnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5n
ZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKLSAgICB9CisgICAgQk1lc3NhZ2UgbWVzc2FnZShM
T0FEX05FR09DSUFUSU5HKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV93ZWJGcmFt
ZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnByb3Zpc2lvbmFsRG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVz
dCgpLnVybCgpLnN0cmluZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2Fn
ZSk7CiB9CiAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZl
VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAg
ICAgIG1fd2ViVmlldy0+U2V0UGFnZVRpdGxlKHRpdGxlKTsKKyAgICBtX3dlYkZyYW1lLT5zZXRU
aXRsZSh0aXRsZSk7CiAKLSAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShUSVRMRV9DSEFOR0VEKTsK
LSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInRpdGxlIiwgdGl0bGUpOwotICAgICAgICBtX21l
c3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0KKyAgICBCTWVzc2FnZSBtZXNz
YWdlKFRJVExFX0NIQU5HRUQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ0aXRsZSIsIHRpdGxl
KTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAKIHZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKIHsKLSAgICBpZiAo
bV93ZWJWaWV3KSB7Ci0gICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoTE9BRF9UUkFOU0ZFUlJJTkcp
OwotICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV9mcmFtZS0+bG9hZGVyKCktPmRv
Y3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fbWVz
c2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7Ci0gICAgfQorICAgIEJNZXNzYWdlIG1lc3Nh
Z2UoTE9BRF9UUkFOU0ZFUlJJTkcpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCBtX3dl
YkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgpLnVy
bCgpLnN0cmluZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaW5pc2hEb2N1bWVu
dExvYWQoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxQcm92
aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykg
ewotICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfRE9DX0NPTVBMRVRFRCk7Ci0gICAgICAg
IG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5n
KCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0K
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZp
cnN0TGF5b3V0KCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaW5p
c2hEb2N1bWVudExvYWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgQk1lc3NhZ2Ug
bWVzc2FnZShMT0FEX0RPQ19DT01QTEVURUQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwi
LCBtX3dlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIG1f
bWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoTG9hZCgpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfRklOSVNIRUQpOwor
ICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCBtX3dlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIo
KS0+dXJsKCkuc3RyaW5nKCkpOworICAgIG1fbWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdl
KTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFNob3coKQordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZpcnN0TGF5b3V0KCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNh
bmNlbFBvbGljeUNoZWNrKCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hE
aWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CkBAIC0yOTQsOSArMjg2LDcgQEAKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQYXNzUmVm
UHRyPEZvcm1TdGF0ZT4pCiB7CiAgICAgLy8gRklYTUU6IFNlbmQgYW4gZXZlbnQgdG8gYWxsb3cg
Zm9yIGFsZXJ0cyBhbmQgY2FuY2VsbGF0aW9uLgotICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAg
cmV0dXJuOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rp
b24pKFBvbGljeVVzZSk7CisgICAgKG1fd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5wb2xp
Y3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRNYWluUmVzb3VyY2UoRG9jdW1lbnRMb2FkZXIq
KQpAQCAtMzA0LDE2MyArMjk0LDEzMCBAQAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3Vt
ZW50TG9hZGVyKikKK0ZyYW1lKiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaENyZWF0
ZVBhZ2UoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CitwcmludGYoIkZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRpc3BhdGNoQ3JlYXRlUGFnZSgpXG4iKTsKKy8vICAgIG1fd2ViRnJhbWUtPndl
YlZpZXcoKS0+Y3JlYXRlV2ViVmlldygpOworICAgIHJldHVybiAwOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRpb24oKQordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFNob3coKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFByb2dyZXNz
RXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1
bmN0aW9uLCBjb25zdCBTdHJpbmcmIG1pbWV0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYgcmVxdWVzdCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIChtX3dlYkZyYW1lLT5m
cmFtZSgpLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7
CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFByb2dyZXNzRmluaXNoZWRO
b3RpZmljYXRpb24oKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lk
ZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0TmFtZSkKIHsKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIEJNZXNzYWdl
IG1lc3NhZ2UoTE9BRF9ETF9DT01QTEVURUQpOwotICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygi
dXJsIiwgbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNz
ZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKKyAgICBCTWVzc2FnZSBtZXNzYWdlKE5FV19X
SU5ET1dfUkVRVUVTVEVEKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgcmVxdWVzdC51
cmwoKS5zdHJpbmcoKSk7CisgICAgaWYgKG1fbWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdl
KSkgeworICAgICAgICAobV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnBvbGljeUNoZWNr
ZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOworICAgICAgICByZXR1cm47CiAgICAgfQot
fQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByb2dyZXNzU3RhcnRlZCgpCi17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAobV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCkt
PnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCi0KLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvZ3Jlc3NDb21wbGV0ZWQoKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJh
bWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBQYXNzUmVmUHRy
PEZvcm1TdGF0ZT4pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAgICBCTWVzc2FnZSBt
ZXNzYWdlKE5BVklHQVRJT05fUkVRVUVTVEVEKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJs
IiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7CisgICAgbV9tZXNzZW5nZXIuU2VuZE1lc3NhZ2Uo
Jm1lc3NhZ2UpOwogCi0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0TWFpbkZyYW1l
RG9jdW1lbnRSZWFkeShib29sKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gdGhp
cyBpcyBvbmx5IGludGVyZXN0aW5nIG9uY2Ugd2UgcHJvdmlkZSBhbiBleHRlcm5hbCBBUEkgZm9y
IHRoZSBET00KKyAgICAobV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnBvbGljeUNoZWNr
ZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNhbmNlbFBvbGljeUNoZWNrKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZENoYW5nZVRpdGxlKERvY3Vt
ZW50TG9hZGVyKiBkb2NMb2FkZXIpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3Bh
dGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpCiB7Ci0gICAg
c2V0VGl0bGUoZG9jTG9hZGVyLT50aXRsZSgpLCBkb2NMb2FkZXItPnVybCgpKTsKLX0KLQotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIq
KQotewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Cit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVu
dExvYWRlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVS
TFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3QKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIq
LCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgp
OwotICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBj
b25zdAordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NTdGFydGVkTm90
aWZpY2F0aW9uKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmcmFtZUxvYWRDb21wbGV0ZWQo
KQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5n
ZWROb3RpZmljYXRpb24oKQogewotICAgIGlmIChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgewot
ICAgICAgICBtX3dlYlZpZXctPkRyYXcobV93ZWJWaWV3LT5Cb3VuZHMoKSk7Ci0gICAgICAgIG1f
d2ViVmlldy0+VW5sb2NrTG9vcGVyKCk7Ci0gICAgfQotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKQotewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVzdG9yZVZp
ZXdTdGF0ZSgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBvc3RQcm9ncmVzc0Zpbmlz
aGVkTm90aWZpY2F0aW9uKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJNZXNzYWdl
IG1lc3NhZ2UoTE9BRF9ETF9DT01QTEVURUQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwi
LCBtX3dlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgIG1f
bWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpyZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKQordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyB0aGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgb25j
ZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFsIEFQSSBmb3IgdGhlIERPTQogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKQordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpCiB7
CisgICAgcHJpbnRmKCJGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzdGFydERvd25sb2FkKClcbiIp
OwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6c2hvdWxkVHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0Cit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciop
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6YWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCgp
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9h
ZGVyKiBkb2NMb2FkZXIpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBzZXRUaXRsZShk
b2NMb2FkZXItPnRpdGxlKCksIGRvY0xvYWRlci0+dXJsKCkpOwogfQogCi12b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmRpZEZpbmlzaExvYWQoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KKyAg
ICBGcmFtZSogZnJhbWUgPSBtX3dlYkZyYW1lLT5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisg
ICAgICAgIHJldHVybjsKIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpwcmVwYXJlRm9y
RGF0YVNvdXJjZVJlcGxhY2VtZW50KCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQorICAg
IC8vIFNldCB0aGUgZW5jb2RpbmcuIFRoaXMgb25seSBuZWVkcyB0byBiZSBkb25lIG9uY2UsIGJ1
dCBpdCdzIGhhcm1sZXNzIHRvIGRvIGl0IGFnYWluIGxhdGVyLgorICAgIFN0cmluZyBlbmNvZGlu
ZyA9IGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygp
OworICAgIGJvb2wgdXNlckNob3NlbiA9ICFlbmNvZGluZy5pc051bGwoKTsKKyAgICBpZiAoIXVz
ZXJDaG9zZW4pCisgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5yZXNwb25zZSgpLnRleHRFbmNv
ZGluZ05hbWUoKTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPnNldEVuY29kaW5nKGVuY29kaW5nLCB1
c2VyQ2hvc2VuKTsKIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRUaXRsZShjb25z
dCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGlmIChkYXRhKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmFkZERhdGEoZGF0YSwgbGVu
Z3RoKTsKIH0KIAotU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVzZXJBZ2VudChjb25z
dCBLVVJMJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluaXNoZWRMb2FkaW5nKERv
Y3VtZW50TG9hZGVyKikKIHsKLSAgICByZXR1cm4gU3RyaW5nKCJNb3ppbGxhLzUuMCAoY29tcGF0
aWJsZTsgVTsgSW5maU5ldCAwLjE7IEhhaWt1KSBBcHBsZVdlYktpdC80MjArIChLSFRNTCwgbGlr
ZSBHZWNrbykiKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCkKLXsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKLXsKLSAgICBtX2ZyYW1l
ID0gMDsKLSAgICBtX21lc3NlbmdlciA9IDA7Ci0gICAgZGVsZXRlIHRoaXM7Ci19Ci0KLWJvb2wg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZVJlcXVlc3QmKSBjb25zdAotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cGFydENsZWFyZWRJ
bkJlZ2luKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OnVwZGF0ZUdsb2JhbEhpc3RvcnkoKQogewogICAgIG5vdEltcGxlbWVudGVk
KCk7CkBAIC00OTQsMjYgKzQ1MSwxNSBAQAogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLWJv
b2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuQ2FjaGVQYWdlKCkgY29uc3QKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlkRGlzcGxheUluc2VjdXJlQ29udGVudCgpCiB7Ci0gICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldE1haW5E
b2N1bWVudEVycm9yKFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyKiwgY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFJ1bkluc2VjdXJl
Q29udGVudChTZWN1cml0eU9yaWdpbiopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpjb21taXR0ZWRMb2FkKFdlYkNvcmU6OkRvY3Vt
ZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAg
aWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBGcmFtZUxvYWRlciogZnJhbWVM
b2FkZXIgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7Ci0gICAgZnJhbWVMb2FkZXItPnNldEVuY29k
aW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxzZSk7Ci0gICAgZnJhbWVMb2Fk
ZXItPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKLX0KLQogV2ViQ29yZTo6UmVzb3VyY2VFcnJvciBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxsZWRFcnJvcihjb25zdCBXZWJDb3JlOjpSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKQEAgLTU0OSwx
ODkgKzQ5NSwxNDMgQEAKICAgICByZXR1cm4gUmVzb3VyY2VFcnJvcihTdHJpbmcoKSwgV2ViS2l0
RXJyb3JDYW5ub3RTaG93VVJMLCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwog
fQogCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZEZhbGxCYWNrKGNvbnN0IFdl
YkNvcmU6OlJlc291cmNlRXJyb3ImIGVycm9yKQorUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9u
c2UmIHJlc3BvbnNlKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKFN0cmluZygpLCBXZWJLaXRFcnJvckNhbm5vdExv
YWRQbHVnSW4sIHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7CiB9CiAKLVdURjo6
UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRl
RG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdWJzdGl0dXRlRGF0YSYgc3Vic3RpdHV0ZURhdGEpCitib29sIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZEZhbGxCYWNrKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlRXJyb3ImIGVycm9yKQogewotICAgIHJldHVybiBEb2N1bWVudExvYWRlcjo6Y3JlYXRlKHJl
cXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKLX0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
Ojpkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYs
IGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQotewogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
cmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmFzc2lnbklk
ZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1l
bnRMb2FkZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorYm9vbCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVx
dWVzdCYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBGcmFtZSogZnJhbWUg
PSBtX3dlYkZyYW1lLT5mcmFtZSgpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZS0+cGFnZSgpOwor
CisgICAgcmV0dXJuIHBhZ2UgJiYgcGFnZS0+bWFpbkZyYW1lKCkgPT0gZnJhbWU7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU2VuZFJlcXVlc3QoRG9jdW1l
bnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQorYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpj
YW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3QKIHsKICAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZykKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVwcmVzZW50YXRpb25F
eGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0CiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2Uo
RG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBBdXRo
ZW50aWNhdGlvbkNoYWxsZW5nZSYpCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Z2Vu
ZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlv
bkNoYWxsZW5nZShEb2N1bWVudExvYWRlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZywg
Y29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpmcmFtZUxvYWRDb21wbGV0ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2Uo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYgcmVzcG9uc2UpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNhdmVWaWV3
U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
bV9yZXNwb25zZSA9IHJlc3BvbnNlOwotICAgIG1fZmlyc3REYXRhID0gdHJ1ZTsKIH0KIAotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3Ro
KERvY3VtZW50TG9hZGVyKiBsb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZCwgaW50IGxlbmd0
aCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVzdG9yZVZpZXdTdGF0ZSgpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpk
aXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKQor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwcm92aXNpb25hbExvYWRTdGFydGVkKCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
LCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlk
RmluaXNoTG9hZCgpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2FnZSBt
ZXNzYWdlKExPQURfRkFJTEVEKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIG1f
ZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5n
KCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0K
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYsIGludCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJlcGFy
ZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRMb2FkUmVzb3VyY2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNj
cmlwdFN0cmluZyYpCitXVEY6OlBhc3NSZWZQdHI8RG9jdW1lbnRMb2FkZXI+IEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OmNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYg
cmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIERvY3VtZW50TG9hZGVyOjpjcmVhdGUocmVxdWVz
dCwgc3Vic3RpdHV0ZURhdGEpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJikKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29u
c3QgS1VSTCYpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFt
ZShDYWNoZWRGcmFtZSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotRnJhbWUqIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoQ3JlYXRlUGFnZSgpCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNo
ZWRGcmFtZSopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQb2xpY3lGb3JN
SU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
bWltZXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGb3JOZXdQYWdlKCkKIHsK
LSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV93ZWJGcmFt
ZSk7CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9s
aWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci19CisgICAgRnJhbWUqIGZyYW1l
ID0gbV93ZWJGcmFtZS0+ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWUtPnBhZ2UoKTsK
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck5l
d1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4sIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0TmFtZSkKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVybjsKKyAg
ICBib29sIGlzTWFpbkZyYW1lID0gZnJhbWUgJiYgZnJhbWUgPT0gcGFnZS0+bWFpbkZyYW1lKCk7
CiAKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoTkVXX1dJ
TkRPV19SRVFVRVNURUQpOwotICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgcmVxdWVz
dC51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIGlmIChtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2Uo
Jm1lc3NhZ2UpKSB7Ci0gICAgICAgICAgICAobV9mcmFtZS0+bG9hZGVyKCktPnBvbGljeUNoZWNr
ZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lJZ25vcmUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQorICAgIEJSZWN0IGJvdW5kcyA9IG1fd2ViUHJvY2Vzcy0+dmlld0JvdW5k
cygpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUoYm91bmRzLkludGVnZXJXaWR0aCgpLGJv
dW5kcy5JbnRlZ2VySGVpZ2h0KCkpOwogCi0gICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3lD
aGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNlKTsKLX0KKyAgICBpZiAoaXNNYWluRnJhbWUg
JiYgZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFyZW50VmlzaWJs
ZShmYWxzZSk7CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4pCi17Ci0gICAgaWYgKCFtX2ZyYW1lIHx8ICFmdW5jdGlvbikKLSAgICAgICAgcmV0
dXJuOworICAgIGJvb2wgdHJhbnNwYXJlbnQgPSBtX3dlYkZyYW1lLT5pc1RyYW5zcGFyZW50KCk7
CisgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yID0gdHJhbnNwYXJlbnQgPyBXZWJDb3JlOjpDb2xv
cjo6dHJhbnNwYXJlbnQgOiBXZWJDb3JlOjpDb2xvcjo6d2hpdGU7CiAKLSAgICBpZiAobV93ZWJW
aWV3KSB7Ci0gICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoTkFWSUdBVElPTl9SRVFVRVNURUQpOwot
ICAgICAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgcmVxdWVzdC51cmwoKS5zdHJpbmcoKSk7
Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CisgICAgZnJhbWUt
PmNyZWF0ZVZpZXcoc2l6ZSwgYmFja2dyb3VuZENvbG9yLCB0cmFuc3BhcmVudCwgSW50U2l6ZSgp
LCBmYWxzZSk7CiAKLSAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCkt
PipmdW5jdGlvbikoUG9saWN5VXNlKTsKLSAgICB9CisgICAgaWYgKGlzTWFpbkZyYW1lKQorICAg
ICAgICBmcmFtZS0+dmlldygpLT5zZXRQYXJlbnRWaXNpYmxlKHRydWUpOwogfQogCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29u
c3QgUmVzb3VyY2VFcnJvciYpCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXNlckFn
ZW50KGNvbnN0IEtVUkwmKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0
cmluZygiTW96aWxsYS81LjAgKGNvbXBhdGlibGU7IFU7IEluZmlOZXQgMC4xOyBIYWlrdSkgQXBw
bGVXZWJLaXQvNDIwKyAoS0hUTUwsIGxpa2UgR2Vja28pIik7CiB9CiAKLXZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQorYm9v
bCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5DYWNoZVBhZ2UoKSBjb25zdAogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi1QYXNzUmVmUHRyPEZyYW1l
PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWFyZ2luV2lkdGgsIGlu
dCBtYXJnaW5IZWlnaHQpCitQYXNzUmVmUHRyPEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudEhhaWt1
OjpjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBib29s
IGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQogewog
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYXBwbHkgdGhlIHJpZ2h0IHByb3BlcnR5IHRvIHRoZSBm
cmFtZVZpZXcuIChzY3JvbGxiYXIsbWFyZ2lucykKKyAgICBBU1NFUlQobV93ZWJGcmFtZSk7CiAK
LSAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fZnJhbWUtPnBh
Z2UoKSwgb3duZXJFbGVtZW50LCB0aGlzKTsKLSAgICBzZXRGcmFtZShjaGlsZEZyYW1lLmdldCgp
KTsKKyAgICBSZWZQdHI8RnJhbWU+IGNoaWxkRnJhbWUgPSBGcmFtZTo6Y3JlYXRlKG1fd2ViRnJh
bWUtPmZyYW1lKCktPnBhZ2UoKSwgb3duZXJFbGVtZW50LCB0aGlzKTsKIAogICAgIFJlZlB0cjxG
cmFtZVZpZXc+IGZyYW1lVmlldyA9IEZyYW1lVmlldzo6Y3JlYXRlKGNoaWxkRnJhbWUuZ2V0KCkp
OwogCi0gICAgZnJhbWVWaWV3LT5zZXRBbGxvd3NTY3JvbGxpbmcoYWxsb3dzU2Nyb2xsaW5nKTsK
LSAgICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgLy8gZnJhbWVWaWV3LT5kZXJlZigpOwogICAg
IGNoaWxkRnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3LmdldCgpKTsKICAgICBjaGlsZEZyYW1lLT5p
bml0KCk7CiAKICAgICBjaGlsZEZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7Ci0gICAgbV9m
cmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKKyAgICBtX3dlYkZyYW1lLT5m
cmFtZSgpLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkRnJhbWUpOwogCiAgICAgY2hpbGRGcmFt
ZS0+bG9hZGVyKCktPmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjaGlsZEZy
YW1lLmdldCgpKTsKIApAQCAtNzQwLDkgKzY0MCw2IEBACiAgICAgICAgIHJldHVybiAwOwogCiAg
ICAgcmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsK
LSAgICByZXR1cm4gMDsKIH0KIAogT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQpAQCAtNzUxLDEwICs2NDgsOCBAQAogICAgIHJldHVybiBPYmplY3RDb250ZW50VHlw
ZSgpOwogfQogCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3Jl
YXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCosCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwm
LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3Ry
aW5nJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBsb2FkTWFudWFsbHkpCitQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6Y3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVu
dCosIGNvbnN0IEtVUkwmLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwgY29uc3QgU3RyaW5nJiwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgbm90SW1wbGVt
ZW50ZWQoKTsKICAgICByZXR1cm4gMDsKQEAgLTc2NiwxOCArNjYxLDEwIEBACiAgICAgcmV0dXJu
OwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnBsdWdpbldpbGxI
YW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCitQYXNzUmVm
UHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdl
dChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJM
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKFN0cmluZygpLCBXZWJLaXRFcnJvckNhbm5vdExvYWRQbHVnSW4s
IHJlc3BvbnNlLnVybCgpLnN0cmluZygpLCBTdHJpbmcoKSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2lk
Z2V0PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0
IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVudCosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgYmFzZVVSTCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1
ZXMpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNzky
LDkgKzY3OSw5IEBACiAgICAgaWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93ZWJWaWV3KSB7CisgICAgaWYgKG1fd2ViRnJh
bWUpIHsKICAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShKQVZBU0NSSVBUX1dJTkRPV19PQkpFQ1Rf
Q0xFQVJFRCk7Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7Cisg
ICAgICAgIG1fbWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKICAgICB9CiB9CiAKQEAg
LTgwMiw1NiArNjg5LDE1IEBACiB7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0Ci17Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKLX0KLQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZWdpc3RlckZvckljb25Ob3Rp
ZmljYXRpb24oYm9vbCBsaXN0ZW4pCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9p
ZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShD
YWNoZWRGcmFtZSopCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFBlcmZvcm1GaXJz
dE5hdmlnYXRpb24oKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZy
YW1lKENhY2hlZEZyYW1lKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZvck5ld1BhZ2UoKQot
ewotICAgIEFTU0VSVChtX2ZyYW1lKTsKLSAgICBBU1NFUlQobV93ZWJWaWV3KTsKLQotICAgIFBh
Z2UqIHBhZ2UgPSBtX2ZyYW1lLT5wYWdlKCk7Ci0gICAgQVNTRVJUKHBhZ2UpOwotCi0gICAgYm9v
bCBpc01haW5GcmFtZSA9IG1fZnJhbWUgPT0gcGFnZS0+bWFpbkZyYW1lKCk7Ci0KLSAgICBtX2Zy
YW1lLT5zZXRWaWV3KDApOwotCi0gICAgUmVmUHRyPEZyYW1lVmlldz4gZnJhbWVWaWV3OwotICAg
IGlmIChpc01haW5GcmFtZSkgewotICAgICAgICBpZiAobV93ZWJWaWV3LT5Mb2NrTG9vcGVyKCkp
IHsKLSAgICAgICAgICAgIC8vIFdlIGxvY2sgdGhlIGxvb3BlciBpbiBvcmRlciB0byBnZXQgdGhl
IGJvdW5kcyBvZiB0aGUgV2ViVmlldy4KLSAgICAgICAgICAgIGZyYW1lVmlldyA9IEZyYW1lVmll
dzo6Y3JlYXRlKG1fZnJhbWUsIEludFJlY3QobV93ZWJWaWV3LT5Cb3VuZHMoKSkuc2l6ZSgpKTsK
LSAgICAgICAgICAgIG1fd2ViVmlldy0+VW5sb2NrTG9vcGVyKCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UKLSAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUobV9mcmFtZSk7Ci0K
LSAgICBBU1NFUlQoZnJhbWVWaWV3KTsKLSAgICBtX2ZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7
Ci0KLSAgICBmcmFtZVZpZXctPnNldFBsYXRmb3JtV2lkZ2V0KG1fd2ViVmlldyk7Ci0KLSAgICBp
ZiAoSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lciA9IG1fZnJhbWUtPm93bmVyRWxlbWVudCgp
KQotICAgICAgICBtX2ZyYW1lLT52aWV3KCktPnNldFNjcm9sbGJhck1vZGVzKG93bmVyLT5zY3Jv
bGxpbmdNb2RlKCksIG93bmVyLT5zY3JvbGxpbmdNb2RlKCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IGhhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVudEhhaWt1
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3Uu
aAkocmV2aXNpb24gNTQyNzUpCisrKyBoYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRI
YWlrdS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcg
UnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFp
bC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzEs
MzEgKzMyLDMzIEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiUmVmQ291bnRlZC5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIK
KyNpbmNsdWRlICJLVVJMLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNsYXNzIEZs
b2F0UmVjdDsKICAgICBjbGFzcyBQYWdlOworICAgIGNsYXNzIFdpbmRvd0ZlYXR1cmVzOwogICAg
IHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OwogCiAgICAgY2xhc3MgQ2hyb21lQ2xpZW50SGFpa3Ug
OiBwdWJsaWMgQ2hyb21lQ2xpZW50IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIENocm9tZUNsaWVu
dEhhaWt1KCk7CisgICAgICAgIENocm9tZUNsaWVudEhhaWt1KFdlYlByb2Nlc3MqLCBXZWJWaWV3
Kik7CiAgICAgICAgIHZpcnR1YWwgfkNocm9tZUNsaWVudEhhaWt1KCk7Ci0gICAgICAgIHZvaWQg
Y2hyb21lRGVzdHJveWVkKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjaHJvbWVEZXN0cm95ZWQo
KTsKIAotICAgICAgICB2b2lkIHNldFdpbmRvd1JlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAg
ICAgIEZsb2F0UmVjdCB3aW5kb3dSZWN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRXaW5k
b3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOworICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB3aW5k
b3dSZWN0KCk7CiAKLSAgICAgICAgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7CisgICAgICAgIHZpcnR1
YWwgRmxvYXRSZWN0IHBhZ2VSZWN0KCk7CiAKLSAgICAgICAgZmxvYXQgc2NhbGVGYWN0b3IoKTsK
KyAgICAgICAgdmlydHVhbCBmbG9hdCBzY2FsZUZhY3RvcigpOwogCi0gICAgICAgIHZvaWQgZm9j
dXMoKTsKLSAgICAgICAgdm9pZCB1bmZvY3VzKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb2N1
cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgdW5mb2N1cygpOwogCi0gICAgICAgIGJvb2wgY2Fu
VGFrZUZvY3VzKEZvY3VzRGlyZWN0aW9uKTsKLSAgICAgICAgdm9pZCB0YWtlRm9jdXMoRm9jdXNE
aXJlY3Rpb24pOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuVGFrZUZvY3VzKEZvY3VzRGlyZWN0
aW9uKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbik7CiAK
ICAgICAgICAgdm9pZCBmb2N1c2VkTm9kZUNoYW5nZWQoTm9kZSopOwogCkBAIC02Myw1MiArNjYs
NDggQEAKICAgICAgICAgUGFnZSogY3JlYXRlTW9kYWxEaWFsb2coRnJhbWUqLCBjb25zdCBGcmFt
ZUxvYWRSZXF1ZXN0Jik7CiAgICAgICAgIHZvaWQgc2hvdygpOwogCi0gICAgICAgIGJvb2wgY2Fu
UnVuTW9kYWwoKTsKLSAgICAgICAgdm9pZCBydW5Nb2RhbCgpOworICAgICAgICB2aXJ0dWFsIGJv
b2wgY2FuUnVuTW9kYWwoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJ1bk1vZGFsKCk7CiAKLSAg
ICAgICAgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCk7Ci0gICAgICAgIGJvb2wgdG9vbGJh
cnNWaXNpYmxlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9v
bCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB0b29sYmFyc1Zpc2libGUoKTsKIAotICAgICAgICB2
b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCk7Ci0gICAgICAgIGJvb2wgc3RhdHVzYmFyVmlz
aWJsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJsZShib29sKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHN0YXR1c2JhclZpc2libGUoKTsKIAotICAgICAgICB2b2lk
IHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOwotICAgICAgICBib29sIHNjcm9sbGJhcnNWaXNp
YmxlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxiYXJzVmlzaWJsZShib29sKTsK
KyAgICAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCk7CiAKLSAgICAgICAgdm9p
ZCBzZXRNZW51YmFyVmlzaWJsZShib29sKTsKLSAgICAgICAgYm9vbCBtZW51YmFyVmlzaWJsZSgp
OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJhclZpc2libGUoYm9vbCk7CisgICAgICAg
IHZpcnR1YWwgYm9vbCBtZW51YmFyVmlzaWJsZSgpOwogCi0gICAgICAgIHZvaWQgc2V0UmVzaXph
YmxlKGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOwogCi0g
ICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVu
c2lnbmVkIGludCBsaW5lTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7Ci0gICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29s
ZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBj
b25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKLSAgICAgICAgdm9pZCBhZGRNZXNzYWdlVG9Db25zb2xl
KE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmLCB1bnNpZ25lZCBpbnQsIGNvbnN0IFN0
cmluZyYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdl
U291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVsLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBs
aW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKIAotICAgICAgICBib29sIGNhblJ1
bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVu
QmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5CZWZv
cmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBGcmFtZSogZnJhbWUp
OwogCi0gICAgICAgIGJvb2wgcnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKGNvbnN0IFN0cmlu
ZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNsb3NlV2lu
ZG93U29vbigpOwogCi0gICAgICAgIHZvaWQgY2xvc2VXaW5kb3dTb29uKCk7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRDb25maXJtKEZyYW1lKiwgY29uc3QgU3Ry
aW5nJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwg
Y29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5n
JiByZXN1bHQpOworICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkSW50ZXJydXB0SmF2YVNjcmlw
dCgpOwogCi0gICAgICAgIHZvaWQgcnVuSmF2YVNjcmlwdEFsZXJ0KEZyYW1lKiwgY29uc3QgU3Ry
aW5nJik7Ci0gICAgICAgIGJvb2wgcnVuSmF2YVNjcmlwdENvbmZpcm0oRnJhbWUqLCBjb25zdCBT
dHJpbmcmKTsKLSAgICAgICAgYm9vbCBydW5KYXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3Qg
U3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1
bHQpOwotICAgICAgICBib29sIHNob3VsZEludGVycnVwdEphdmFTY3JpcHQoKTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclRleHQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CiAK
LSAgICAgICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNvbnN0IFdlYkNvcmU6OlN0cmluZyYpOwot
ICAgICAgICBib29sIHRhYnNUb0xpbmtzKCkgY29uc3Q7Ci0gICAgICAgIEludFJlY3Qgd2luZG93
UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIHRhYnNUb0xpbmtzKCkg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0
OwogCi0gICAgICAgIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hh
bmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBm
YWxzZSk7Ci0gICAgICAgIHZvaWQgc2Nyb2xsKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhLCBj
b25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKLSAg
ICAgICAgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsKLSAg
ICAgICAgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAg
ICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBhZ2VDbGllbnQoKSBjb25zdDsKLSAgICAg
ICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0
OwotICAgICAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3Qg
U2Nyb2xsVmlldyopIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludChjb25zdCBJ
bnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9v
bCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzY3Jv
bGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IEludFJlY3QmIHJlY3RUb1Njcm9s
bCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAgICAgICB2aXJ0dWFsIEludFBvaW50IHNj
cmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50
UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JikgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0OworICAgICAg
ICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdlZChGcmFtZSosIGNvbnN0IEludFNpemUm
KSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNjcm9sbFJlY3RJbnRvVmlldyhjb25zdCBJ
bnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OwogCiAgICAgICAgIHZvaWQgYWRkVG9E
aXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0
b3JlKGludCwgaW50LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UmVjdCYpOwpAQCAtMTIxLDI3
ICsxMjAsMjkgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VG9vbFRpcChjb25zdCBTdHJp
bmcmLCBUZXh0RGlyZWN0aW9uKTsKIAotICAgICAgICB2b2lkIHByaW50KEZyYW1lKik7Ci0KLSAg
ICAgICAgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBjb25zdCBTdHJpbmcmIGRh
dGFiYXNlTmFtZSk7Ci0KKyAgICAgICAgdmlydHVhbCB2b2lkIHByaW50KEZyYW1lKik7CisjaWYg
RU5BQkxFKERBVEFCQVNFKQorICAgICAgICB2aXJ0dWFsIHZvaWQgZXhjZWVkZWREYXRhYmFzZVF1
b3RhKEZyYW1lKiwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUpOworI2VuZGlmCiAjaWYgRU5B
QkxFKE9GRkxJTkVfV0VCX0FQUExJQ0FUSU9OUykKICAgICAgICAgdmlydHVhbCB2b2lkIHJlYWNo
ZWRNYXhBcHBDYWNoZVNpemUoaW50NjRfdCBzcGFjZU5lZWRlZCk7CiAjZW5kaWYKKyAgICAgICAg
dmlydHVhbCB2b2lkIHJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNob29zZXI+
KTsKIAotICAgICAgICAvLyBUaGlzIGlzIGFuIGFzeW5jaHJvbm91cyBjYWxsLiBUaGUgQ2hyb21l
Q2xpZW50IGNhbiBkaXNwbGF5IFVJIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbgotICAg
ICAgICAvLyB0byB1c2UgR2VvbG9jb2NhdGlvbi4gVGhlIENocm9tZUNsaWVudCBtdXN0IGNhbGwg
R2VvbG9jYXRpb246OnNldFNob3VsZENsZWFyQ2FjaGUoKSBhcHByb3ByaWF0ZWx5LgotICAgICAg
ICB2b2lkIHJlcXVlc3RHZW9sb2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xv
Y2F0aW9uKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3Qg
Tm9kZSopIHsgfQogCi0gICAgICAgIHZvaWQgcnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0
cjxGaWxlQ2hvb3Nlcj4pOworICAgICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8SFRNTFBhcnNlclF1
aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpIHsgcmV0dXJuIDA7IH0KIAotICAgICAgICBi
b29sIHNldEN1cnNvcihQbGF0Zm9ybUN1cnNvckhhbmRsZSk7CisgICAgICAgIHZpcnR1YWwgYm9v
bCBzZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpOwogCi0gICAgICAgIC8vIE5vdGlmaWNh
dGlvbiB0aGF0IHRoZSBnaXZlbiBmb3JtIGVsZW1lbnQgaGFzIGNoYW5nZWQuIFRoaXMgZnVuY3Rp
b24KLSAgICAgICAgLy8gd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxpbmcgc2hv
dWxkIGJlIHZlcnkgZmFzdC4KLSAgICAgICAgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3Qg
Tm9kZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lv
bkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsKIAotICAgICAgICBQYXNzT3duUHRyPEhU
TUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQYXJzZXJRdWlya3MoKTsKKyAgICAgICAgV2ViUHJv
Y2VzcyogbV93ZWJQcm9jZXNzOworICAgICAgICBXZWJWaWV3KiBtX3dlYlZpZXc7CisKKyAgICAg
ICAgV2ViQ29yZTo6S1VSTCBsYXN0SG92ZXJVUkw7CisgICAgICAgIFdlYkNvcmU6OlN0cmluZyBs
YXN0SG92ZXJUaXRsZTsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGxhc3RIb3ZlckNvbnRlbnQ7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogaGFpa3UvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvV2ViQ29yZVN1cHBv
cnQvRHJhZ0NsaWVudEhhaWt1LmgJKHJldmlzaW9uIDU0Mjc1KQorKysgaGFpa3UvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNCBA
QAogCiAjaW5jbHVkZSAiRHJhZ0NsaWVudC5oIgogCitjbGFzcyBXZWJWaWV3OwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBEcmFnQ2xpZW50SGFpa3UgOiBwdWJsaWMgRHJhZ0Ns
aWVudCB7CiAgICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFn
RGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhZ0RhdGEqKTsKKyAgICAg
ICAgRHJhZ0NsaWVudEhhaWt1KFdlYlZpZXcqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQ
ZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0Rh
dGEqKTsKICAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0
aW9uTWFza0ZvckRyYWcoRHJhZ0RhdGEqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250
cm9sbGVyRGVzdHJveWVkKCk7CiAgICAgICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFn
U291cmNlQWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CkBAIC00MCw2ICs0MSw5
IEBACiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFn
ZSwgY29uc3QgSW50UG9pbnQmIGRyYWdJbWFnZU9yaWdpbiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBJbnRQb2ludCYgZXZlbnRQb3MsIENsaXBib2FyZCosIEZyYW1lKiwg
Ym9vbCBsaW5rRHJhZyA9IGZhbHNlKTsKICAgICAgICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3Jl
YXRlRHJhZ0ltYWdlRm9yTGluayhLVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgRnJhbWUqKTsK
KworICAgIHByaXZhdGU6CisgICAgICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBoYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0b3JD
bGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIGhhaWt1L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTIgKzM4LDExIEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCiAjaW5jbHVk
ZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogCi0jaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKIAotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEVkaXRvckNs
aWVudEhhaWt1OjpFZGl0b3JDbGllbnRIYWlrdSgpCkBAIC01OSw3ICs1OCw3IEBACiAKIHZvaWQg
RWRpdG9yQ2xpZW50SGFpa3U6OnBhZ2VEZXN0cm95ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgZGVsZXRlIHRoaXM7CiB9CiAKIGJvb2wgRWRpdG9yQ2xpZW50SGFpa3U6OnNob3Vs
ZERlbGV0ZVJhbmdlKFJhbmdlKikKQEAgLTI1Miw3ICsyNTEsNyBAQAogICAgICAgICByZXR1cm47
CiAKICAgICBpZiAoc3RhcnQtPmlzQ29udGVudEVkaXRhYmxlKCkpIHsKLSAgICAgICAgc3dpdGNo
KGtldmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKKyAgICAgICAgc3dpdGNoIChrZXZl
bnQtPndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpKSB7CiAgICAgICAgIGNhc2UgVktfQkFDSzoKICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+ZGVsZXRlV2l0aERpcmVjdGlvbihTZWxlY3Rpb25D
b250cm9sbGVyOjpCQUNLV0FSRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrZXZlbnQtPmN0cmxLZXkoKSA/IFdvcmRHcmFudWxhcml0eSA6IENoYXJh
Y3RlckdyYW51bGFyaXR5LApAQCAtMzM2LDcgKzMzNSw4IEBACiAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSByZXR1cm47CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBzd2l0Y2ggKGtl
dmVudC0+d2luZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKQEAgLTM2MiwxNyArMzYyLDE4IEBACiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChrZXZl
bnQtPmN0cmxLZXkoKSkgewotICAgICAgICAgICAgICAgIHN3aXRjaChrZXZlbnQtPndpbmRvd3NW
aXJ0dWFsS2V5Q29kZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgVktfQToKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiU2VsZWN0QWxsIik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBWS19DOiBjYXNlIFZLX1g6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmFtZS0+ZWRpdG9y
KCktPmNvbW1hbmQoIkNvcHkiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIHN3aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUo
KSkgeworICAgICAgICAgICAgICAgIGNhc2UgVktfQToKKyAgICAgICAgICAgICAgICAgICAgZnJh
bWUtPmVkaXRvcigpLT5jb21tYW5kKCJTZWxlY3RBbGwiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBWS19DOiBjYXNlIFZLX1g6CisgICAgICAgICAg
ICAgICAgICAgIGZyYW1lLT5lZGl0b3IoKS0+Y29tbWFuZCgiQ29weSIpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHJldHVy
bjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgIH0KICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKSW5kZXg6IGhhaWt1L1dl
YkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlr
dS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmgJKHJldmlzaW9uIDU0Mjc1
KQorKysgaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yLDYgKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVz
aW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExl
YXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211
cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDE1ICsz
NSwxNyBAQAogI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiS1VSTC5o
IgogI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpbmNsdWRlIDxNZXNzZW5nZXIuaD4K
IAotY2xhc3MgQk1lc3NlbmdlcjsKLWNsYXNzIFdlYlZpZXc7CitjbGFzcyBXZWJGcmFtZTsKK2Ns
YXNzIFdlYlByb2Nlc3M7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZTsKICAgICBjbGFzcyBEb2N1bWVudExvYWRlcjsKICAgICBjbGFzcyBF
bGVtZW50OwogICAgIGNsYXNzIEZvcm1TdGF0ZTsKKyAgICBjbGFzcyBIaXN0b3J5SXRlbTsKICAg
ICBjbGFzcyBOYXZpZ2F0aW9uQWN0aW9uOwogICAgIGNsYXNzIFJlc291cmNlTG9hZGVyOwogICAg
IGNsYXNzIFN0cmluZzsKQEAgLTUwLDQ3ICs1NCwzNiBAQAogCiAgICAgY2xhc3MgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdSA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgot
ICAgICAgICBGcmFtZUxvYWRlckNsaWVudEhhaWt1KCk7Ci0gICAgICAgIH5GcmFtZUxvYWRlckNs
aWVudEhhaWt1KCkgeyB9Ci0gICAgICAgIHZvaWQgc2V0RnJhbWUoRnJhbWUqKTsKLSAgICAgICAg
dm9pZCBzZXRXZWJWaWV3KFdlYlZpZXcqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaEZy
YW1lTG9hZGVyKCk7CisgICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoV2ViUHJvY2Vzcyos
IFdlYkZyYW1lKik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdDsK
KyAgICAgICAgdm9pZCBzZXREaXNwYXRjaFRhcmdldChCSGFuZGxlciogaGFuZGxlcik7CiAKLSAg
ICAgICAgdmlydHVhbCBib29sIGhhc0JhY2tGb3J3YXJkTGlzdCgpIGNvbnN0OwotICAgICAgICB2
aXJ0dWFsIHZvaWQgcmVzZXRCYWNrRm9yd2FyZExpc3QoKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZyYW1lTG9hZGVyRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdmlydHVhbCBib29sIHByb3Zpc2lv
bmFsSXRlbUlzVGFyZ2V0KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3
KCkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VSZXByZXNlbnRhdGlvbihEb2N1
bWVudExvYWRlciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXQoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpOwogCi0gICAgICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVIaXN0b3J5Rm9yQ29tbWl0KCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUhpc3RvcnlGb3JCYWNrRm9yd2FyZE5hdmlnYXRpb24oKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUhpc3RvcnlGb3JSZWxvYWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUhpc3RvcnlGb3JJbnRlcm5hbExvYWQoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRl
SGlzdG9yeUFmdGVyQ2xpZW50UmVkaXJlY3QoKTsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29waWVzT25TY3JvbGwoKTsKIAotICAgICAgICB2aXJ0dWFsIExvYWRFcnJvclJlc2V0VG9rZW4q
IHRva2VuRm9yTG9hZEVycm9yUmVzZXQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0QWZ0
ZXJMb2FkRXJyb3IoTG9hZEVycm9yUmVzZXRUb2tlbiopOwotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZG9Ob3RSZXNldEFmdGVyTG9hZEVycm9yKExvYWRFcnJvclJlc2V0VG9rZW4qKTsKLQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbENsb3NlRG9jdW1lbnQoKTsKLQogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGV0YWNoZWRGcm9tUGFyZW50MigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRG
cm9tUGFyZW50MygpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3ll
ZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxvYWQoUmVzb3VyY2VIYW5kbGUqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CiAKLSAgICAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29u
c3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25J
ZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3Vt
ZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAKKyAgICAgICAgdmlydHVhbCB2
b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZywgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlhbFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1
bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNlbEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdl
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50
aWNhdGlvbkNoYWxsZW5nZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNl
aXZlUmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250
ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KTsKKyAgICAgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGlu
ZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5kbGVPbmxvYWRFdmVudHMoKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNl
bENsaWVudFJlZGlyZWN0KCk7CkBAIC0xMDQsMTQ4ICs5NywxMTUgQEAKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VFcnJv
ciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaERvY3Vt
ZW50TG9hZCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0TGF5b3V0KCk7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgpOwog
CisgICAgICAgIHZpcnR1YWwgRnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFnZSgpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCk7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgU3Ry
aW5nJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NS
ZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlv
biwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBvbGlj
eUNoZWNrKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1l
bnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24sIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNv
dXJjZShEb2N1bWVudExvYWRlciopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcmV2ZXJ0VG9Qcm92
aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRN
YWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
KyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNh
Y2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3Vy
Y2VSZXNwb25zZSYsIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRS
ZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0U3RyaW5n
Jik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc1N0YXJ0ZWROb3RpZmljYXRp
b24oKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdlZE5v
dGlmaWNhdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFByb2dyZXNzRmluaXNoZWRO
b3RpZmljYXRpb24oKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvZ3Jlc3NTdGFydGVkKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzc0NvbXBsZXRlZCgpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKTsKKworICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKwogICAgICAg
ICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKik7CiAKLSAgICAgICAg
dmlydHVhbCBib29sIGNhblNob3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25z
dDsKLSAgICAgICAgdmlydHVhbCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1l
KGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdDsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcg
Z2VuZXJhdGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNv
bnN0OwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRDb21wbGV0ZWQoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlzdG9yeUl0ZW0qKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHJlc3RvcmVWaWV3U3RhdGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHJlc3RvcmVTY3JvbGxQb3NpdGlvbkFuZFZpZXdTdGF0ZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgcHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
VHJlYXRVUkxBc1NhbWVBc0N1cnJlbnQoY29uc3QgS1VSTCYpIGNvbnN0OwotICAgICAgICB2aXJ0
dWFsIHZvaWQgYWRkSGlzdG9yeUl0ZW1Gb3JGcmFnbWVudFNjcm9sbCgpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgZGlkRmluaXNoTG9hZCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZUZv
ckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUo
Y29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3QgS1VSTCYpOwotCi0gICAgICAgIHZpcnR1YWwgU3Ry
aW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJik7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVQ
bGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKFdlYkNvcmU6OkNhY2hlZEZyYW1lKik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2FjaGVkRnJhbWUoV2ViQ29y
ZTo6Q2FjaGVkRnJhbWUqKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1p
dHRlZEZvck5ld1BhZ2UoKTsKLQorICAgICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0dGVkTG9hZChE
b2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBpbnQpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVHbG9iYWxIaXN0b3J5KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxI
aXN0b3J5UmVkaXJlY3RMaW5rcygpOworCiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRHb1Rv
SGlzdG9yeUl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oSGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVtb3ZlQmFja0ZvcndhcmRJdGVtKEhpc3RvcnlJ
dGVtKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUJhY2tG
b3J3YXJkSW5kZXgoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNhdmVTY3JvbGxQb3Np
dGlvbkFuZFZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5SXRlbSopOworCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBjYW5DYWNoZVBhZ2UoKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFp
bkRvY3VtZW50RXJyb3IoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiwgY29uc3Qg
Y2hhciosIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250
ZW50KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRSdW5JbnNlY3VyZUNvbnRlbnQoV2ViQ29y
ZTo6U2VjdXJpdHlPcmlnaW4qKTsKKwogICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgY2Fu
Y2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgICAgIHZpcnR1YWwgUmVz
b3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgICAg
IHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CiAgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRGb3JQb2xp
Y3lDaGFuZ2VFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKwogICAgICAgICB2aXJ0dWFs
IFJlc291cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogICAgICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgZmlsZURvZXNOb3RFeGlzdEVy
cm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVy
cm9yIHBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwor
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9y
Jik7Ci0gICAgICAgIHZpcnR1YWwgV1RGOjpQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBjcmVh
dGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3Vic3RpdHV0ZURhdGEmKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFJlc291
cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2Um
KTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVl
c3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0Jik7CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIHVzZXJBZ2VudChjb25zdCBLVVJMJik7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgUmVzb3VyY2VSZXF1ZXN0JiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsK
LSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVy
KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRp
Y2F0aW9uQ2hhbGxlbmdlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENhbmNl
bEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBpZGVudGlmaWVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVzcG9uc2UoRG9jdW1lbnRM
b2FkZXIqLCB1bnNpZ25lZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVu
c2lnbmVkIGxvbmcsIGludCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlz
aExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKTsKLSAgICAgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBs
b25nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaERpZExvYWRSZXNv
dXJjZUZyb21NZW1vcnlDYWNoZShEb2N1bWVudExvYWRlciosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJl
cXVlc3QmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQg
bG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlUGxh
dGZvcm1EYXRhVG9DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOworICAgICAgICB2
aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKFdlYkNvcmU6
OkNhY2hlZEZyYW1lKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0
ZWRGb3JOZXdQYWdlKCk7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbFBy
b3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9yJik7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAgdmly
dHVhbCBGcmFtZSogZGlzcGF0Y2hDcmVhdGVQYWdlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5RnVuY3Rpb24sCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEZWNpZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJhbWVQb2xpY3lG
dW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBkaXNwYXRjaFVuYWJsZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3Im
KTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBNSU1FVHlwZSkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCByZXByZXNl
bnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7
CisgICAgICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Rh
cnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICAgICAgdmlydHVhbCB2b2lk
IGZyYW1lTG9hZENvbXBsZXRlZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0
ZVRvSXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVz
dG9yZVZpZXdTdGF0ZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgcHJvdmlzaW9uYWxMb2FkU3Rh
cnRlZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluaXNoTG9hZCgpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpOworICAgICAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6RG9jdW1lbnRMb2FkZXI+IGNyZWF0ZURvY3VtZW50
TG9hZGVyKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFdlYkNvcmU6OlN1
YnN0aXR1dGVEYXRhJik7CiAKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5
IG5vdCBiZSBoZXJlLCBidXQgaXQncyBuZWVkZWQgZm9yIHRoZSB0ZXN0cyBjdXJyZW50bHkuCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBwYXJ0Q2xlYXJlZEluQmVnaW4oKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmKTsKIAotICAg
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEhUTUxGcmFtZU93bmVyRWxlbWVudCosIGNvbnN0IFN0cmluZyYgcmVmZXJy
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBh
bGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7Ci0gICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXpl
JiwgSFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBLVVJMJiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBsb2FkTWFudWFsbHkpOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpOwotICAg
ICAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25z
dCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXZWJD
b3JlOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCosCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
V2ViQ29yZTo6U3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJn
aW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpXaWRnZXQ+IGNyZWF0ZVBsdWdpbihjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiwgY29uc3QgVmVj
dG9yPFdlYkNvcmU6OlN0cmluZz4mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mLCBj
b25zdCBXZWJDb3JlOjpTdHJpbmcmLCBib29sKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZGly
ZWN0RGF0YVRvUGx1Z2luKFdlYkNvcmU6OldpZGdldCogcGx1Z2luV2lkZ2V0KTsKIAotICAgICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0
IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVudCosCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29u
c3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBh
cmFtVmFsdWVzKTsKKyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4g
Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBXZWJDb3JlOjpJbnRTaXplJiwgV2ViQ29yZTo6
SFRNTEFwcGxldEVsZW1lbnQqLCBjb25zdCBXZWJDb3JlOjpLVVJMJiBiYXNlVVJMLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8V2ViQ29yZTo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMpOwogCi0gICAgICAgIHZpcnR1YWwgT2Jq
ZWN0Q29udGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5
cGUoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpPYmplY3RDb250ZW50VHlwZSBv
YmplY3RDb250ZW50VHlwZShjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdlYkNvcmU6
OlN0cmluZyYgbWltZVR5cGUpOworICAgICAgICB2aXJ0dWFsIFdlYkNvcmU6OlN0cmluZyBvdmVy
cmlkZU1lZGlhVHlwZSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZENsZWFyV2luZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIGRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpOwotCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkgY29uc3Q7CiAKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxpc3RlbiA9IHRydWUpOwor
ICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90aWZpY2F0aW9uKGJvb2wgbGlz
dGVuKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIEZyYW1lKiBtX2ZyYW1lOwotICAgICAgICBX
ZWJWaWV3KiBtX3dlYlZpZXc7Ci0gICAgICAgIEJNZXNzZW5nZXIqIG1fbWVzc2VuZ2VyOwotICAg
ICAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7Ci0gICAgICAgIGJvb2wgbV9maXJzdERh
dGE7CisgICAgICAgIFdlYlByb2Nlc3MqIG1fd2ViUHJvY2VzczsKKyAgICAgICAgV2ViRnJhbWUq
IG1fd2ViRnJhbWU7CisgICAgICAgIEJNZXNzZW5nZXIgbV9tZXNzZW5nZXI7CiAgICAgfTsKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRleDogaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0lu
c3BlY3RvckNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBoYWlrdS9XZWJDb3Jl
U3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2
ICszMCwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dEhhaWt1LmgiCiAKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCiAKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogCi0KIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCBJbnNwZWN0b3JDbGllbnRIYWlrdTo6aW5zcGVjdG9yRGVzdHJv
eWVkKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0ZSB0aGlzOwogfQogCiBQ
YWdlKiBJbnNwZWN0b3JDbGllbnRIYWlrdTo6Y3JlYXRlUGFnZSgpCkluZGV4OiBoYWlrdS9XZWJD
b3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlr
dS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24gNTQy
NzUpCisrKyBoYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51Lmgi
CiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLQogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIApAQCAtMzcsNyArMzYsNyBAQAogCiB2b2lkIENvbnRl
eHRNZW51Q2xpZW50SGFpa3U6OmNvbnRleHRNZW51RGVzdHJveWVkKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIGRlbGV0ZSB0aGlzOwogfQogCiBQbGF0Zm9ybU1lbnVEZXNjcmlwdGlv
biBDb250ZXh0TWVudUNsaWVudEhhaWt1OjpnZXRDdXN0b21NZW51RnJvbURlZmF1bHRJdGVtcyhD
b250ZXh0TWVudSogbWVudSkKSW5kZXg6IGhhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRDb21tYW5k
SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZEhh
aWt1LmgJKHJldmlzaW9uIDApCisrKyBoYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZEhh
aWt1LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggS2V2aW4gT2xsaXZpZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAg
TmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRURJVENPTU1BTkRIQUlLVV9I
CisjZGVmaW5lIEVESVRDT01NQU5ESEFJS1VfSAorCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIK
KworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
CitjbGFzcyBFZGl0Q29tbWFuZEhhaWt1IHsKK3B1YmxpYzoKKyAgICBFZGl0Q29tbWFuZEhhaWt1
KFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpFZGl0Q29tbWFuZD4gY29tbWFuZCkKKyAgICB7Cisg
ICAgICAgIG1fZWRpdENvbW1hbmQgPSBjb21tYW5kOworICAgIH0KKworICAgIEVkaXRDb21tYW5k
SGFpa3UoKSB7IH0KKyAgICBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+IGVk
aXRDb21tYW5kKCkgeyByZXR1cm4gbV9lZGl0Q29tbWFuZDsgfQorCitwcml2YXRlOgorICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OkVkaXRDb21tYW5kPiBtX2VkaXRDb21tYW5kOworfTsKKworI2Vu
ZGlmIC8vIEVESVRDT01NQU5ESEFJS1VfSApJbmRleDogaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRp
dG9yQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0
b3JDbGllbnRIYWlrdS5oCShyZXZpc2lvbiA1NDI3NSkKKysrIGhhaWt1L1dlYkNvcmVTdXBwb3J0
L0VkaXRvckNsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxNyBAQAog
I2RlZmluZSBFZGl0b3JDbGllbnRIYWlrdV9ICiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIK
LSNpbmNsdWRlICJSZWZDb3VudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJl
ZkNvdW50ZWQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgY2xhc3MgRWRpdG9yQ2xpZW50SGFpa3UgOiBwdWJsaWMgRWRpdG9yQ2xp
ZW50IHsKICAgICBwdWJsaWM6CiAgICAgICAgIEVkaXRvckNsaWVudEhhaWt1KCk7Ci0gICAgICAg
IHZvaWQgc2V0UGFnZSggUGFnZSogcGFnZSApOworICAgICAgICB2b2lkIHNldFBhZ2UoUGFnZSog
cGFnZSk7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKIApJbmRleDog
aGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBoYWlrdS9XZWJDb3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5oCShyZXZpc2lvbiA1
NDI3NSkKKysrIGhhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVu
dC5oIgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNz
IFBhZ2U7CkluZGV4OiBoYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5oCShyZXZpc2lvbiAw
KQorKysgaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29v
ZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNp
bW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBo
YW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIExhdW5jaGVyV2luZG93X2gKKyNkZWZpbmUgTGF1bmNoZXJXaW5k
b3dfaAorCisjaW5jbHVkZSAiV2ViVmlld1dpbmRvdy5oIgorI2luY2x1ZGUgPFN0cmluZy5oPgor
CitjbGFzcyBCU3RyaW5nVmlldzsKK2NsYXNzIEJUZXh0Q29udHJvbDsKK2NsYXNzIFdlYlZpZXc7
CisKK2VudW0gVG9vbGJhclBvbGljeSB7CisgICAgSGF2ZVRvb2xiYXIsCisgICAgRG9Ob3RIYXZl
VG9vbGJhcgorfTsKKworY2xhc3MgTGF1bmNoZXJXaW5kb3cgOiBwdWJsaWMgV2ViVmlld1dpbmRv
dyB7CitwdWJsaWM6CisgICAgTGF1bmNoZXJXaW5kb3coVG9vbGJhclBvbGljeSA9IEhhdmVUb29s
YmFyKTsKKyAgICB2aXJ0dWFsIH5MYXVuY2hlcldpbmRvdygpOworCisgICAgdmlydHVhbCB2b2lk
IE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSk7CisgICAgdmlydHVhbCBib29sIFF1
aXRSZXF1ZXN0ZWQoKTsKKworICAgIC8vIFdlYlZpZXdXaW5kb3cgbm90aWZpY2F0aW9uIEFQSSBp
bXBsZW1lbnRhdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlvblJlcXVlc3RlZChjb25z
dCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBuZXdXaW5kb3dSZXF1ZXN0ZWQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgbG9hZE5lZ29jaWF0aW5nKGNvbnN0IEJTdHJpbmcmIHVybCk7Cisg
ICAgdmlydHVhbCB2b2lkIGxvYWRUcmFuc2ZlcmluZyhjb25zdCBCU3RyaW5nJiB1cmwpOworICAg
IHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IEJTdHJpbmcmIHVybCk7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRGaW5pc2hlZChjb25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgICAg
dm9pZCBzdGF0dXNDaGFuZ2VkKGNvbnN0IEJTdHJpbmcmIHN0YXR1cyk7CisKK3ByaXZhdGU6Cisg
ICAgQlRleHRDb250cm9sKiBtX3VybDsKKyAgICBCU3RyaW5nVmlldyogbV9zdGF0dXNUZXh0Owor
ICAgIEJTdHJpbmcgbV9yZXF1ZXN0ZWRVUkw7Cit9OworCisjZW5kaWYgLy8gTGF1bmNoZXJXaW5k
b3dfaAorCkluZGV4OiBoYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyQXBwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBoYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyQXBwLmNwcAkocmV2aXNpb24gMCkK
KysrIGhhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJBcHAuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2Qg
PGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOf
bXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTGF1bmNoZXJBcHAuaCIKKworI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1
ZGUgIkxhdW5jaGVyV2luZG93LmgiCisjaW5jbHVkZSAiV2ViUHJvY2Vzcy5oIgorI2luY2x1ZGUg
IldlYlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q29uc3RhbnRzLmgiCisKKyNpbmNsdWRlIDxB
bGVydC5oPgorI2luY2x1ZGUgPE9TLmg+CisKKyNpZm5kZWYgTkRFQlVHCisjaW5jbHVkZSAiTGVh
a1RyYWNrZXIuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworZXh0ZXJuIGNvbnN0
IGNoYXIqIGtBcHBsaWNhdGlvblNpZ25hdHVyZSA9ICJhcHBsaWNhdGlvbi94LXZuZC5SSkwtSGFp
a3VMYXVuY2hlciI7Citjb25zdCBzdGF0aWMgdWludDMyIExPQURfQVRfU1RBUlRJTkcgPSAnbG9z
dCc7CisKKworTGF1bmNoZXJBcHA6OkxhdW5jaGVyQXBwKCkKKyAgICA6IEJBcHBsaWNhdGlvbihr
QXBwbGljYXRpb25TaWduYXR1cmUpCit7Cit9CisKK0xhdW5jaGVyQXBwOjp+TGF1bmNoZXJBcHAo
KQoreworfQorCit2b2lkIExhdW5jaGVyQXBwOjpBYm91dFJlcXVlc3RlZCgpCit7CisgICAgQkFs
ZXJ0KiBhbGVydCA9IG5ldyBCQWxlcnQoIkFib3V0IEhhaWt1TGF1bmNoZXIiLAorICAgICAgICAi
Rm9yIHRlc3RpbmcgV2ViS2l0Li4uXG5cbmJ5IFJ5YW4gTGVhdmVuZ29vZCIsICJTd2VldCEiKTsK
KyAgICBhbGVydC0+R28oKTsKK30KKwordm9pZCBMYXVuY2hlckFwcDo6QXJndlJlY2VpdmVkKGlu
dDMyIGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGlmIChhcmdjID4gMikgeworICAgICAgICBC
QWxlcnQqIGFsZXJ0ID0gbmV3IEJBbGVydCgiT3V0IG9mIHBpdHkhIiwgIlNvcnJ5LFxuSSBjYW5u
b3QgaGFuZGxlIG1vcmUgdGhhbiBvbmUgd2VicGFnZSBhdCBhIHRpbWUuXG4iLCAiRGFtbiBpdCEi
LCAiT25seSBvbmUgcGFnZSB0aGVuLiIsIE5VTEwsIEJfV0lEVEhfQVNfVVNVQUwsIEJfV0FSTklO
R19BTEVSVCk7CisgICAgICAgIGlmICghYWxlcnQtPkdvKCkpCisgICAgICAgICAgICBleGl0KDEp
OworICAgIH0KKworICAgIEJTdHJpbmcgdXJsKGFyZ3ZbMV0pOworICAgIEJNZXNzYWdlIG1lc3Nh
Z2UoTE9BRF9BVF9TVEFSVElORyk7CisgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIHVybCk7
CisgICAgUG9zdE1lc3NhZ2UoJm1lc3NhZ2UpOworCit9CisKK3ZvaWQgTGF1bmNoZXJBcHA6OlJl
YWR5VG9SdW4oKQoreworICAgIFdlYlByb2Nlc3M6OmluaXRpYWxpemVPbmNlKCk7CisKKyAgICBt
X3dpbmRvdyA9IG5ldyBMYXVuY2hlcldpbmRvdygpOworICAgIG1fd2luZG93LT5TaG93KCk7Cit9
CisKK3ZvaWQgTGF1bmNoZXJBcHA6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSkK
K3sKKyAgICBzd2l0Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAgICBjYXNlIExPQURfQVRfU1RBUlRJ
Tkc6IHsKKyAgICAgICAgQlN0cmluZyB1cmw7CisgICAgICAgIG1lc3NhZ2UtPkZpbmRTdHJpbmco
InVybCIsICZ1cmwpOworICAgICAgICBtX3dpbmRvdy0+d2ViVmlldygpLT5sb2FkUmVxdWVzdCh1
cmwuU3RyaW5nKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAg
ICAgICBCQXBwbGljYXRpb246Ok1lc3NhZ2VSZWNlaXZlZChtZXNzYWdlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorfQorCitib29sIExhdW5jaGVyQXBwOjpRdWl0UmVxdWVzdGVkKCkKK3sKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworaW50IG1haW4oaW50LCBjaGFyKiopCit7CisgICAgbmV3IExh
dW5jaGVyQXBwKCk7CisgICAgYmVfYXBwLT5SdW4oKTsKKyAgICBkZWxldGUgYmVfYXBwOworCisj
aWZuZGVmIE5ERUJVRworICAgIER1bXBVbmZyZWVkKCk7CisjZW5kaWYKKworICAgIHJldHVybiAw
OworfQorCkluZGV4OiBoYWlrdS9IYWlrdUxhdW5jaGVyL0NoZWNrZXJib2FyZFZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGhhaWt1L0hhaWt1TGF1bmNoZXIvQ2hlY2tlcmJvYXJkVmlldy5jcHAJKHJl
dmlzaW9uIDApCisrKyBoYWlrdS9IYWlrdUxhdW5jaGVyL0NoZWNrZXJib2FyZFZpZXcuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwOSBAQAorLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisvLwor
Ly8gQ29weXJpZ2h0IDIwMDYsIFJ5YW4gTGVhdmVuZ29vZCwgbGVhdmVuZ29vZEBnbWFpbC5jb20K
Ky8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy9+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaGVja2VyYm9hcmRWaWV3LmgiCisKKy8vI2lu
Y2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisvLyNpbmNsdWRlIDxGb250Lmg+CisvLyNpbmNsdWRlIDxH
cmFwaGljc0RlZnMuaD4KKy8vI2luY2x1ZGUgPE9TLmg+CisvLyNpbmNsdWRlIDxTY3JlZW4uaD4K
Ky8vI2luY2x1ZGUgPFN0cmluZy5oPgorI2luY2x1ZGUgPFNjcm9sbFZpZXcuaD4KKyNpbmNsdWRl
IDxTdXBwb3J0RGVmcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKy8vI2luY2x1ZGUgPHN0cmlu
Zy5oPgorCisKK0NoZWNrZXJib2FyZFZpZXc6OkNoZWNrZXJib2FyZFZpZXcoQlJlY3QgZnJhbWUs
IGNvbnN0IGNoYXIqIG5hbWUsIGludDMyIG51bVJvd3MsIGludDMyIG51bUNvbHMsIGludDMyIHNx
dWFyZVNpemUpCisgICAgOiBCVmlldyhmcmFtZSwgbmFtZSwgQl9GT0xMT1dfQUxMX1NJREVTLCBC
X1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTKS8vIHwgQl9GVUxMX1VQREFURV9PTl9SRVNJWkUp
CisgICAgLCBtX251bVJvd3MobnVtUm93cykKKyAgICAsIG1fbnVtQ29scyhudW1Db2xzKQorICAg
ICwgbV9zcXVhcmVTaXplKHNxdWFyZVNpemUpCisgICAgLCBtX3Njcm9sbFZpZXcoMCkKK3sKKyAg
ICAvLyBBIHNoYWRlIG9mIHJlZAorICAgIFNldFZpZXdDb2xvcigyMDAsIDAsIDApOworICAgIFNl
dEZvbnQoYmVfZml4ZWRfZm9udCk7Cit9CisKK0NoZWNrZXJib2FyZFZpZXc6On5DaGVja2VyYm9h
cmRWaWV3KCkKK3sKK30KKwordm9pZCBDaGVja2VyYm9hcmRWaWV3OjpBdHRhY2hlZFRvV2luZG93
KCkKK3sKKyAgICBBZGp1c3RTY3JvbGxCYXJzKCk7Cit9CisKK3ZvaWQgQ2hlY2tlcmJvYXJkVmll
dzo6RHJhdyhCUmVjdCB1cGRhdGVSZWN0KQoreworICAgIHJnYl9jb2xvciB3aGl0ZSA9IHsyNTUs
IDI1NSwgMjU1LCAyNTV9OworICAgIHJnYl9jb2xvciBibGFjayA9IHswLCAwLCAwLCAyNTV9Owor
CisgICAgY2hhciBzdHJbMTAwXTsKKyAgICBmb3IgKGludDMyIHkgPSAwOyB5IDwgbV9udW1Sb3dz
ICogbV9zcXVhcmVTaXplOyB5ICs9IG1fc3F1YXJlU2l6ZSkgeworICAgICAgICBpbnQzMiB5U2Nh
bGVkID0geSAvIG1fc3F1YXJlU2l6ZTsKKyAgICAgICAgZm9yIChpbnQzMiB4ID0gMDsgeCA8IG1f
bnVtQ29scyAqIG1fc3F1YXJlU2l6ZTsgeCArPSBtX3NxdWFyZVNpemUpIHsKKyAgICAgICAgICAg
IGJvb2wgd2lsbERyYXcgPSBmYWxzZTsKKyAgICAgICAgICAgIGludDMyIHhTY2FsZWQgPSB4IC8g
bV9zcXVhcmVTaXplOworICAgICAgICAgICAgaWYgKCEoeVNjYWxlZCAlIDIpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCEoeFNjYWxlZCAlIDIpKQorICAgICAgICAgICAgICAgICAgICB3aWxsRHJh
dyA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICh4U2Nh
bGVkICUgMikKKyAgICAgICAgICAgICAgICAgICAgd2lsbERyYXcgPSB0cnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKHdpbGxEcmF3KSB7CisgICAgICAgICAgICAgICAgU2V0SGln
aENvbG9yKGJsYWNrKTsKKyAgICAgICAgICAgICAgICBGaWxsUmVjdChCUmVjdCh4LCB5LCB4ICsg
bV9zcXVhcmVTaXplLCB5ICsgbV9zcXVhcmVTaXplKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBzcHJpbnRmKHN0ciwgIiVkLCVkIiwgeFNjYWxlZCwgeVNjYWxlZCk7CisgICAgICAgICAg
ICBCRm9udCBmb250OworICAgICAgICAgICAgR2V0Rm9udCgmZm9udCk7CisgICAgICAgICAgICBm
b250X2hlaWdodCBmb250SGVpZ2h0OworICAgICAgICAgICAgZm9udC5HZXRIZWlnaHQoJmZvbnRI
ZWlnaHQpOworICAgICAgICAgICAgZmxvYXQgbGluZUhlaWdodCA9IGZvbnRIZWlnaHQuYXNjZW50
ICsgZm9udEhlaWdodC5kZXNjZW50ICsgZm9udEhlaWdodC5sZWFkaW5nOworICAgICAgICAgICAg
ZmxvYXQgc3RyaW5nV2lkdGggPSBmb250LlN0cmluZ1dpZHRoKHN0cik7CisgICAgICAgICAgICBT
ZXRIaWdoQ29sb3Iod2hpdGUpOworICAgICAgICAgICAgRHJhd1N0cmluZyhzdHIsIEJQb2ludCh4
ICsgKG1fc3F1YXJlU2l6ZSAtIHN0cmluZ1dpZHRoKSAvIDIsIHkgKyAobV9zcXVhcmVTaXplIC0g
bGluZUhlaWdodCkpKTsKKyAgICAgICAgfQorICAgIH0KKworfQorCit2b2lkIENoZWNrZXJib2Fy
ZFZpZXc6Ok1vdXNlRG93bihCUG9pbnQgcG9pbnQpCit7CisgICAgaWYgKG1fc2Nyb2xsVmlldykg
eworICAgICAgICBCUG9pbnQgbGVmdFRvcCA9IExlZnRUb3AoKTsKKyAgICAgICAgcHJpbnRmKCJM
ZWZ0VG9wIGlzIGxlZnQgPSAlLjBmLCB0b3AgPSAlLjBmXG4iLCBsZWZ0VG9wLngsIGxlZnRUb3Au
eSk7CisgICAgfQorfQorCit2b2lkIENoZWNrZXJib2FyZFZpZXc6OkZyYW1lUmVzaXplZChmbG9h
dCBoZWlnaHQsIGZsb2F0IHdpZHRoKQoreworICAgIHByaW50ZigiRnJhbWUgcmVzaXplZCB0byBo
ZWlnaHQgJS4wZiwgd2lkdGggJS4wZlxuIiwgaGVpZ2h0LCB3aWR0aCk7CisgICAgQWRqdXN0U2Ny
b2xsQmFycygpOworfQorCit2b2lkIENoZWNrZXJib2FyZFZpZXc6OlRhcmdldGVkQnlTY3JvbGxW
aWV3KEJTY3JvbGxWaWV3KiB2aWV3KQoreworICAgIG1fc2Nyb2xsVmlldyA9IHZpZXc7Cit9CisK
K3ZvaWQgQ2hlY2tlcmJvYXJkVmlldzo6QWRqdXN0U2Nyb2xsQmFycygpCit7CisgICAgaWYgKG1f
c2Nyb2xsVmlldykgeworICAgICAgICBmbG9hdCByaWdodCA9IChmbG9hdCkgbV9udW1Db2xzICog
bV9zcXVhcmVTaXplIC0gRnJhbWUoKS5XaWR0aCgpOworICAgICAgICBmbG9hdCBib3R0b20gPSAo
ZmxvYXQpIG1fbnVtUm93cyAqIG1fc3F1YXJlU2l6ZSAtIEZyYW1lKCkuSGVpZ2h0KCk7CisgICAg
ICAgIG1fc2Nyb2xsVmlldy0+U2Nyb2xsQmFyKEJfSE9SSVpPTlRBTCktPlNldFJhbmdlKDAsIHJp
Z2h0KTsKKyAgICAgICAgbV9zY3JvbGxWaWV3LT5TY3JvbGxCYXIoQl9WRVJUSUNBTCktPlNldFJh
bmdlKDAsIGJvdHRvbSk7CisgICAgfQorfQorCkluZGV4OiBoYWlrdS9IYWlrdUxhdW5jaGVyL0xh
dW5jaGVyQXBwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlckFw
cC5oCShyZXZpc2lvbiAwKQorKysgaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworI2lmbmRlZiBMQVVOQ0hFUl9BUFBfSAorI2RlZmluZSBMQVVOQ0hFUl9B
UFBfSAorCisjaW5jbHVkZSA8QXBwbGljYXRpb24uaD4KKworY2xhc3MgTGF1bmNoZXJXaW5kb3c7
CisKK2NsYXNzIExhdW5jaGVyQXBwIDogcHVibGljIEJBcHBsaWNhdGlvbiB7CitwdWJsaWM6Cisg
ICAgTGF1bmNoZXJBcHAoKTsKKyAgICB+TGF1bmNoZXJBcHAoKTsKKworICAgIHZvaWQgQWJvdXRS
ZXF1ZXN0ZWQoKTsKKyAgICB2b2lkIEFyZ3ZSZWNlaXZlZChpbnQzMiwgY2hhcioqKTsKKyAgICB2
b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSopOworICAgIHZvaWQgUmVhZHlUb1J1bigpOwor
ICAgIGJvb2wgUXVpdFJlcXVlc3RlZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgaGFuZGxlUGFp
bnRFdmVudChCUmVjdCB1cGRhdGVSZWN0KTsKKworICAgIExhdW5jaGVyV2luZG93KiBtX3dpbmRv
dzsKK307CisKK2V4dGVybiBjb25zdCBjaGFyKiBrQXBwbGljYXRpb25TaWduYXR1cmU7CisKKyNk
ZWZpbmUgbXlfYXBwIGR5bmFtaWNfY2FzdDxMYXVuY2hlckFwcCo+KGJlX2FwcCkKKworI2VuZGlm
IC8vIExBVU5DSEVSX0FQUF9ICisKSW5kZXg6IGhhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJX
aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGhhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJXaW5k
b3cuY3BwCShyZXZpc2lvbiAwKQorKysgaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRv
dy5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgor
ICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiTGF1bmNoZXJXaW5kb3cuaCIKKworI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNp
bmNsdWRlICJXZWJWaWV3Q29uc3RhbnRzLmgiCisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgor
I2luY2x1ZGUgPEJ1dHRvbi5oPgorI2luY2x1ZGUgPEdyaWRMYXlvdXRCdWlsZGVyLmg+CisjaW5j
bHVkZSA8R3JvdXBMYXlvdXQuaD4KKyNpbmNsdWRlIDxHcm91cExheW91dEJ1aWxkZXIuaD4KKyNp
bmNsdWRlIDxTdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8VGV4dENvbnRyb2wuaD4KKworI2luY2x1
ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgR09fQkFDSyAnZ29iYScKKyNkZWZpbmUgR09fRk9SV0FS
RCAnZ29mbycKKyNkZWZpbmUgR09UT19VUkwgJ2dvdWwnCisjZGVmaW5lIExPQURfVVJMICdsb2Fk
JworCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitMYXVuY2hlcldpbmRvdzo6TGF1bmNo
ZXJXaW5kb3coVG9vbGJhclBvbGljeSB0b29sYmFyUG9saWN5KQorICAgIDogV2ViVmlld1dpbmRv
dyhCUmVjdCgxMDAsIDEwMCwgNzAwLCA3NTApLCAiSGFpa3VMYXVuY2hlciIsCisgICAgICAgIEJf
VElUTEVEX1dJTkRPV19MT09LLCBCX05PUk1BTF9XSU5ET1dfRkVFTCwKKyAgICAgICAgLypCX0FV
VE9fVVBEQVRFX1NJWkVfTElNSVRTIHwqLyBCX0FTWU5DSFJPTk9VU19DT05UUk9MUykKK3sKKyAg
ICBpZiAodG9vbGJhclBvbGljeSA9PSBIYXZlVG9vbGJhcikgeworICAgICAgICAvLyBCYWNrICYg
Rm9yd2FyZAorICAgICAgICBCQnV0dG9uKiBiYWNrID0gbmV3IEJCdXR0b24oIiIsICJCYWNrIiwg
bmV3IEJNZXNzYWdlKEdPX0JBQ0spKTsKKyAgICAgICAgQkJ1dHRvbiogZm9yd2FyZCA9IG5ldyBC
QnV0dG9uKCIiLCAiRm9yd2FyZCIsIG5ldyBCTWVzc2FnZShHT19GT1JXQVJEKSk7CisKKyAgICAg
ICAgLy8gVVJMCisgICAgICAgIG1fdXJsID0gbmV3IEJUZXh0Q29udHJvbCgidXJsIiwgInVybCIs
ICJodHRwOi8vaGFpa3Utb3Mub3JnL2xlZ2FjeS1kb2NzL2JlYm9vay8iLCBuZXcgQk1lc3NhZ2Uo
R09UT19VUkwpKTsKKyAgICAgICAgbV91cmwtPlNldERpdmlkZXIoNTAuMCk7CisKKyAgICAgICAg
Ly8gR28KKyAgICAgICAgQkJ1dHRvbiogYnV0dG9uID0gbmV3IEJCdXR0b24oIiIsICJHbyIsIG5l
dyBCTWVzc2FnZShMT0FEX1VSTCkpOworCisgICAgICAgIC8vIFN0YXR1cyBCYXIKKyAgICAgICAg
bV9zdGF0dXNUZXh0ID0gbmV3IEJTdHJpbmdWaWV3KCJzdGF0dXMiLCAiIik7CisKKyAgICAgICAg
Ly8gTGF5b3V0CisgICAgICAgIEFkZENoaWxkKEJHcm91cExheW91dEJ1aWxkZXIoQl9WRVJUSUNB
TCwgNykKKyAgICAgICAgICAgIC5BZGQoQkdyaWRMYXlvdXRCdWlsZGVyKDcsIDcpCisgICAgICAg
ICAgICAgICAgLkFkZChiYWNrLCAwLCAwKQorICAgICAgICAgICAgICAgIC5BZGQoZm9yd2FyZCwg
MSwgMCkKKyAgICAgICAgICAgICAgICAuQWRkKG1fdXJsLCAyLCAwKQorICAgICAgICAgICAgICAg
IC5BZGQoYnV0dG9uLCAzLCAwKQorICAgICAgICAgICAgICAgIC5TZXRJbnNldHMoNSwgNSwgNSwg
NSkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIC5BZGQod2ViVmlldygpKQorICAgICAgICAg
ICAgLkFkZChtX3N0YXR1c1RleHQpCisgICAgICAgICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV91cmwgPSAwOworCisgICAgICAgIEFkZENoaWxkKEJHcm91cExheW91dEJ1aWxkZXIoQl9WRVJU
SUNBTCwgNykKKyAgICAgICAgICAgIC5BZGQod2ViVmlldygpKQorICAgICAgICApOworICAgIH0K
K30KKworTGF1bmNoZXJXaW5kb3c6On5MYXVuY2hlcldpbmRvdygpCit7Cit9CisKK3ZvaWQgTGF1
bmNoZXJXaW5kb3c6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBp
ZiAobV91cmwpIHsKKyAgICAgICAgc3dpdGNoIChtZXNzYWdlLT53aGF0KSB7CisgICAgICAgIGNh
c2UgR09UT19VUkw6CisgICAgICAgICAgICB3ZWJWaWV3KCktPmxvYWRSZXF1ZXN0KG1fdXJsLT5U
ZXh0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTE9BRF9VUkw6CisgICAg
ICAgICAgICB3ZWJWaWV3KCktPmxvYWRSZXF1ZXN0KG1fdXJsLT5UZXh0KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgR09fQkFDSzoKKyAgICAgICAgICAgIHdlYlZpZXcoKS0+
Z29CYWNrKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHT19GT1JXQVJEOgor
ICAgICAgICAgICAgd2ViVmlldygpLT5nb0ZvcndhcmQoKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgV2ViVmlld1dpbmRvdzo6TWVzc2FnZVJlY2Vp
dmVkKG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBzd2l0Y2gobWVzc2FnZS0+d2hhdCkgeworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgV2ViVmlld1dpbmRvdzo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Jvb2wgTGF1bmNoZXJXaW5kb3c6
OlF1aXRSZXF1ZXN0ZWQoKQoreworICAgIGJlX2FwcC0+UG9zdE1lc3NhZ2UoQl9RVUlUX1JFUVVF
U1RFRCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vICNwcmFnbWEgbWFyayAtIE5vdGlmaWNh
dGlvbiBBUEkKKwordm9pZCBMYXVuY2hlcldpbmRvdzo6bmF2aWdhdGlvblJlcXVlc3RlZChjb25z
dCBCU3RyaW5nJiB1cmwpCit7CisgICAgaWYgKG1fdXJsKQorICAgICAgICBtX3VybC0+U2V0VGV4
dCh1cmwuU3RyaW5nKCkpOworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjpuZXdXaW5kb3dSZXF1
ZXN0ZWQoKQoreworfQorCit2b2lkIExhdW5jaGVyV2luZG93Ojpsb2FkTmVnb2NpYXRpbmcoY29u
c3QgQlN0cmluZyYgdXJsKQoreworICAgIGlmIChtX3VybCkgeworICAgICAgICBtX3VybC0+U2V0
VGV4dCh1cmwuU3RyaW5nKCkpOworICAgICAgICBtX3JlcXVlc3RlZFVSTCA9IHVybDsKKyAgICB9
Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OmxvYWRUcmFuc2ZlcmluZyhjb25zdCBCU3RyaW5n
JiB1cmwpCit7Cit9CisKK3ZvaWQgTGF1bmNoZXJXaW5kb3c6OmxvYWRGYWlsZWQoY29uc3QgQlN0
cmluZyYgdXJsKQoreworfQorCit2b2lkIExhdW5jaGVyV2luZG93Ojpsb2FkRmluaXNoZWQoY29u
c3QgQlN0cmluZyYgdXJsKQoreworfQorCit2b2lkIExhdW5jaGVyV2luZG93OjpzdGF0dXNDaGFu
Z2VkKGNvbnN0IEJTdHJpbmcmIHN0YXR1c1RleHQpCit7CisgICAgbV9zdGF0dXNUZXh0LT5TZXRU
ZXh0KHN0YXR1c1RleHQuU3RyaW5nKCkpOworfQorCisKKwpJbmRleDogaGFpa3UvSGFpa3VMYXVu
Y2hlci9DaGVja2VyYm9hcmRWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvSGFpa3VMYXVuY2hl
ci9DaGVja2VyYm9hcmRWaWV3LmgJKHJldmlzaW9uIDApCisrKyBoYWlrdS9IYWlrdUxhdW5jaGVy
L0NoZWNrZXJib2FyZFZpZXcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNSBAQAorLy9+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+CisvLworLy8gQ29weXJpZ2h0IDIwMDcsIFJ5YW4gTGVhdmVuZ29vZCwg
bGVhdmVuZ29vZEBnbWFpbC5jb20KKy8vIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy9+fn5+
fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
fn5+fn5+fn5+fn5+fn5+CisKKyNpZm5kZWYgQ0hFQ0tFUkJPQVJEX1ZJRVdfSAorI2RlZmluZSBD
SEVDS0VSQk9BUkRfVklFV19ICisKKyNpbmNsdWRlIDxSZWN0Lmg+CisjaW5jbHVkZSA8Vmlldy5o
PgorCitjbGFzcyBDaGVja2VyYm9hcmRWaWV3IDogcHVibGljIEJWaWV3IHsKKyAgICBwdWJsaWM6
CisgICAgICAgIENoZWNrZXJib2FyZFZpZXcoQlJlY3QgZnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUs
IGludDMyIG51bVJvd3MsIGludDMyIG51bUNvbHMsIGludDMyIHNxdWFyZVNpemUgPSA0MCk7Cisg
ICAgICAgIH5DaGVja2VyYm9hcmRWaWV3KCk7CisKKyAgICAgICAgdm9pZCBBdHRhY2hlZFRvV2lu
ZG93KCk7CisgICAgICAgIHZvaWQgRHJhdyhCUmVjdCB1cGRhdGVSZWN0KTsKKyAgICAgICAgdm9p
ZCBGcmFtZVJlc2l6ZWQoZmxvYXQgaGVpZ2h0LCBmbG9hdCB3aWR0aCk7CisgICAgICAgIHZvaWQg
TW91c2VEb3duKEJQb2ludCBwb2ludCk7CisgICAgICAgIHZvaWQgVGFyZ2V0ZWRCeVNjcm9sbFZp
ZXcoQlNjcm9sbFZpZXcqIHZpZXcpOworCisgIHByaXZhdGU6CisgICAgICAgIHZvaWQgQWRqdXN0
U2Nyb2xsQmFycygpOworCisgICAgICAgIGludDMyIG1fbnVtUm93czsKKyAgICAgICAgaW50MzIg
bV9udW1Db2xzOworICAgICAgICBpbnQzMiBtX3NxdWFyZVNpemU7CisgICAgICAgIEJTY3JvbGxW
aWV3KiBtX3Njcm9sbFZpZXc7Cit9OworCisjZW5kaWYgIC8vIENIRUNLRVJCT0FSRF9WSUVXX0gK
KwpJbmRleDogaGFpa3UvSGFpa3VMYXVuY2hlci9MZWFrVHJhY2tlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGhhaWt1L0hhaWt1TGF1bmNoZXIvTGVha1RyYWNrZXIuaAkocmV2aXNpb24gMCkKKysrIGhhaWt1
L0hhaWt1TGF1bmNoZXIvTGVha1RyYWNrZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjMg
QEAKKyNpZm5kZWYgX19MRUFLVFJBQ0tFUlRFU1RfSAorI2RlZmluZSBfX0xFQUtUUkFDS0VSVEVT
VF9ICisKKy8vIFRoaXMgY29kZSBpcyBmcm9tOgorLy8gaHR0cDovL3d3dy5mbGlwY29kZS5jb20v
YXJjaGl2ZXMvSG93X1RvX0ZpbmRfTWVtb3J5X0xlYWtzLnNodG1sCisvLyBJIGhhdmUgbW9kaWZp
ZWQgaXQgc29tZS4KKworI2lmbmRlZiBOREVCVUcKKworI2lmIF9fR05VQ19fID4gMgorICAgICNp
bmNsdWRlIDxzdHJpbmcuaD4KKyAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOworI2VuZGlmCisKKyNp
bmNsdWRlIDx2ZWN0b3I+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgICAgYWRkcmVzczsK
KyAgICBzaXplX3QgICAgc2l6ZTsKKyAgICBjaGFyICAgIGZpbGVbNjRdOworICAgIGludCAgICBs
aW5lOworfSBBTExPQ19JTkZPOworCit0eXBlZGVmIHZlY3RvcjxBTExPQ19JTkZPKj4gQWxsb2NM
aXN0OworCitBbGxvY0xpc3QgKmFsbG9jTGlzdDsKKwordm9pZCBBZGRUcmFjayhpbnQgYWRkciwg
c2l6ZV90IGFzaXplLCBjb25zdCBjaGFyICpmbmFtZSwgaW50IGxudW0pCit7CisgICAgQUxMT0Nf
SU5GTyAqaW5mbzsKKworICAgIGlmICghYWxsb2NMaXN0KSB7CisgICAgICAgIGFsbG9jTGlzdCA9
IG5ldyhBbGxvY0xpc3QpOworICAgIH0KKworICAgIGluZm8gPSBuZXcoQUxMT0NfSU5GTyk7Cisg
ICAgaW5mby0+YWRkcmVzcyA9IGFkZHI7CisgICAgc3RybmNweShpbmZvLT5maWxlLCBmbmFtZSwg
NjMpOworICAgIGluZm8tPmxpbmUgPSBsbnVtOworICAgIGluZm8tPnNpemUgPSBhc2l6ZTsKKyAg
ICBhbGxvY0xpc3QtPmluc2VydChhbGxvY0xpc3QtPmJlZ2luKCksIGluZm8pOworfTsKKwordm9p
ZCBSZW1vdmVUcmFjayhpbnQgYWRkcikKK3sKKyAgICBBbGxvY0xpc3Q6Oml0ZXJhdG9yIGk7CisK
KyAgICBpZiAoIWFsbG9jTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChpID0gYWxs
b2NMaXN0LT5iZWdpbigpOyBpIDwgYWxsb2NMaXN0LT5lbmQoKTsgaSsrKQorICAgIHsKKyAgICAg
ICAgaWYoKCppKS0+YWRkcmVzcyA9PSBhZGRyKQorICAgICAgICB7CisgICAgICAgICAgICBhbGxv
Y0xpc3QtPmVyYXNlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
OworCitpbnQgdW5mcmVlZENvdW50KCkKK3sKKyAgICByZXR1cm4gYWxsb2NMaXN0LT5zaXplKCk7
Cit9CisKK2Jvb2wgbm90aGluZ1VuZnJlZWQoKQoreworICAgIHJldHVybiBhbGxvY0xpc3QtPmVt
cHR5KCk7Cit9CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIE91dHB1dERlYnVnU3RyaW5n
KGNoYXIgKnN0cikKK3sKKyAgICBwcmludGYoc3RyKTsKK30KKwordm9pZCBEdW1wVW5mcmVlZCgp
Cit7CisgICAgQWxsb2NMaXN0OjppdGVyYXRvciBpOworICAgIGludCB0b3RhbFNpemUgPSAwOwor
ICAgIGNoYXIgYnVmWzEwMjRdOworCisgICAgaWYgKCFhbGxvY0xpc3QpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoaSA9IGFsbG9jTGlzdC0+YmVnaW4oKTsgaSA8IGFsbG9jTGlzdC0+ZW5k
KCk7IGkrKykgeworICAgICAgICBzcHJpbnRmKGJ1ZiwgIiUtNTBzOlx0XHRMSU5FICVkLFx0XHRB
RERSRVNTICVkXHQlZCB1bmZyZWVkXG4iLAorICAgICAgICAgICAgICAgICgqaSktPmZpbGUsICgq
aSktPmxpbmUsICgqaSktPmFkZHJlc3MsIChpbnQpKCppKS0+c2l6ZSk7CisgICAgICAgIE91dHB1
dERlYnVnU3RyaW5nKGJ1Zik7CisgICAgICAgIHRvdGFsU2l6ZSArPSAoKmkpLT5zaXplOworICAg
IH0KKyAgICBzcHJpbnRmKGJ1ZiwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKyAgICBPdXRwdXREZWJ1Z1N0cmluZyhidWYp
OworICAgIHNwcmludGYoYnVmLCAiVG90YWwgVW5mcmVlZDogJWQgYnl0ZXNcbiIsIHRvdGFsU2l6
ZSk7CisgICAgT3V0cHV0RGVidWdTdHJpbmcoYnVmKTsKK307CisKK2lubGluZSB2b2lkICpvcGVy
YXRvciBuZXcoc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lKQoreworICAg
IHZvaWQgKnB0ciA9ICh2b2lkICopbWFsbG9jKHNpemUpOworICAgIEFkZFRyYWNrKChpbnQpcHRy
LCBzaXplLCBmaWxlLCBsaW5lKTsKKyAgICByZXR1cm4ocHRyKTsKK307CisKK2lubGluZSB2b2lk
IG9wZXJhdG9yIGRlbGV0ZSh2b2lkICpwKSB0aHJvdygpCit7CisgICAgUmVtb3ZlVHJhY2soKGlu
dClwKTsKKyAgICBmcmVlKHApOworfTsKKworI2RlZmluZSBERUJVR19ORVcgbmV3KF9fRklMRV9f
LCBfX0xJTkVfXykKKworI2Vsc2UKKyNkZWZpbmUgREVCVUdfTkVXIG5ldworI2VuZGlmCisKKwor
I2RlZmluZSBuZXcgREVCVUdfTkVXCisKKworI2VuZGlmIC8vIF9fTEVBS1RSQUNLRVJURVNUX0gK
KwpJbmRleDogaGFpa3UvQVBJL1dlYlZpZXdXaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhhaWt1
L0FQSS9XZWJWaWV3V2luZG93LmNwcAkocmV2aXNpb24gMCkKKysrIGhhaWt1L0FQSS9XZWJWaWV3
V2luZG93LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFuemFuaUBnbWFpbC5jb20+CisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5j
b20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdt
eC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXZWJWaWV3V2luZG93LmgiCisKKyNpbmNsdWRlICJXZWJWaWV3Lmgi
CisjaW5jbHVkZSAiV2ViVmlld0NvbnN0YW50cy5oIgorCisjaW5jbHVkZSA8QXBwbGljYXRpb24u
aD4KKyNpbmNsdWRlIDxCdXR0b24uaD4KKyNpbmNsdWRlIDxHcmlkTGF5b3V0QnVpbGRlci5oPgor
I2luY2x1ZGUgPEdyb3VwTGF5b3V0Lmg+CisjaW5jbHVkZSA8R3JvdXBMYXlvdXRCdWlsZGVyLmg+
CisjaW5jbHVkZSA8U3RyaW5nVmlldy5oPgorI2luY2x1ZGUgPFRleHRDb250cm9sLmg+CisKKyNp
bmNsdWRlIDxzdGRpby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworV2ViVmlld1dp
bmRvdzo6V2ViVmlld1dpbmRvdyhCUmVjdCBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgd2luZG93
X2xvb2sgbG9vaywKKyAgICAgICAgd2luZG93X2ZlZWwgZmVlbCwgdWludDMyIGZsYWdzLCB1aW50
MzIgd29ya3NwYWNlKQorICAgIDogQldpbmRvdyhmcmFtZSwgbmFtZSwgbG9vaywgZmVlbCwgZmxh
Z3MsIHdvcmtzcGFjZSkKKyAgICAsIG1fd2ViVmlldyhuZXcgV2ViVmlldygid2ViX3ZpZXciKSkK
K3sKKyAgICBTZXRMYXlvdXQobmV3IEJHcm91cExheW91dChCX0hPUklaT05UQUwpKTsKK30KKwor
V2ViVmlld1dpbmRvdzo6fldlYlZpZXdXaW5kb3coKQoreworICAgIC8vIERvIHRoaXMgaGVyZSwg
c28gV2ViS2l0IHRlYXIgZG93biBoYXBwZW5zIGVhcmxpZXIuCisgICAgbV93ZWJWaWV3LT5SZW1v
dmVTZWxmKCk7CisgICAgZGVsZXRlIG1fd2ViVmlldzsKK30KKwordm9pZCBXZWJWaWV3V2luZG93
OjpNZXNzYWdlUmVjZWl2ZWQoQk1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChtZXNz
YWdlLT53aGF0KSB7CisgICAgICAgIGNhc2UgTE9BRF9PTkxPQURfSEFORExFOgorICAgICAgICAg
ICAgcHJpbnRmKCJMT0FEX09OTE9BRF9IQU5ETEVcbiIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTE9BRF9ETF9DT01QTEVURUQ6CisgICAgICAgICAgICBwcmludGYoIkxPQURf
RExfQ09NUExFVEVEXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExPQURf
RE9DX0NPTVBMRVRFRDoKKyAgICAgICAgICAgIHByaW50ZigiTE9BRF9ET0NfQ09NUExFVEVEXG4i
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEpBVkFTQ1JJUFRfV0lORE9XX09C
SkVDVF9DTEVBUkVEOgorICAgICAgICAgICAgcHJpbnRmKCJKQVZBU0NSSVBUX1dJTkRPV19PQkpF
Q1RfQ0xFQVJFRFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBOQVZJR0FU
SU9OX1JFUVVFU1RFRDogeworICAgICAgICAgICAgQlN0cmluZyB1cmw7CisgICAgICAgICAgICBp
ZiAobWVzc2FnZS0+RmluZFN0cmluZygidXJsIiwgJnVybCkgPT0gQl9PSykKKyAgICAgICAgICAg
ICAgICBuYXZpZ2F0aW9uUmVxdWVzdGVkKHVybCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIE5FV19XSU5ET1dfUkVRVUVTVEVEOgorICAgICAgICAgICAgcHJp
bnRmKCJORVdfV0lORE9XX1JFUVVFU1RFRFxuIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMT0FEX05FR09DSUFUSU5HOiB7CisgICAgICAgICAgICBCU3RyaW5nIHVybDsKKyAg
ICAgICAgICAgIGlmIChtZXNzYWdlLT5GaW5kU3RyaW5nKCJ1cmwiLCAmdXJsKSA9PSBCX09LKQor
ICAgICAgICAgICAgICAgIGxvYWROZWdvY2lhdGluZyh1cmwpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMT0FEX1RSQU5TRkVSUklORzogeworICAgICAgICAg
ICAgQlN0cmluZyB1cmw7CisgICAgICAgICAgICBpZiAobWVzc2FnZS0+RmluZFN0cmluZygidXJs
IiwgJnVybCkgPT0gQl9PSykKKyAgICAgICAgICAgICAgICBsb2FkVHJhbnNmZXJpbmcodXJsKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgTE9BRF9GQUlMRUQ6
IHsKKyAgICAgICAgICAgIEJTdHJpbmcgdXJsOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkZp
bmRTdHJpbmcoInVybCIsICZ1cmwpID09IEJfT0spCisgICAgICAgICAgICAgICAgbG9hZEZhaWxl
ZCh1cmwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMT0FE
X0ZJTklTSEVEOiB7CisgICAgICAgICAgICBCU3RyaW5nIHRpdGxlOworICAgICAgICAgICAgaWYg
KG1lc3NhZ2UtPkZpbmRTdHJpbmcoInVybCIsICZ0aXRsZSkgPT0gQl9PSykKKyAgICAgICAgICAg
ICAgICBsb2FkRmluaXNoZWQodGl0bGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBUSVRMRV9DSEFOR0VEOiB7CisgICAgICAgICAgICBCU3RyaW5nIHRpdGxl
OworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkZpbmRTdHJpbmcoInRpdGxlIiwgJnRpdGxlKSA9
PSBCX09LKQorICAgICAgICAgICAgICAgIHRpdGxlQ2hhbmdlZCh0aXRsZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFJFU0laSU5HX1JFUVVFU1RFRDogewor
ICAgICAgICAgICAgQlJlY3QgcmVjdDsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLT5GaW5kUmVj
dCgicmVjdCIsICZyZWN0KSA9PSBCX09LKQorICAgICAgICAgICAgICAgIHJlc2l6ZVJlcXVlc3Rl
ZChyZWN0LldpZHRoKCksIHJlY3QuSGVpZ2h0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgY2FzZSBTRVRfU1RBVFVTX1RFWFQ6IHsKKyAgICAgICAgICAgIEJTdHJp
bmcgdGV4dDsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLT5GaW5kU3RyaW5nKCJ0ZXh0IiwgJnRl
eHQpID09IEJfT0spCisgICAgICAgICAgICAgICAgc3RhdHVzQ2hhbmdlZCh0ZXh0KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBCX01PVVNFX1dIRUVMX0NI
QU5HRUQ6CisgICAgICAgICAgICBtX3dlYlZpZXctPk1lc3NhZ2VSZWNlaXZlZChtZXNzYWdlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQldpbmRv
dzo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCit2b2lkIFdlYlZpZXdXaW5kb3c6Om5hdmlnYXRpb25SZXF1ZXN0ZWQoY29uc3QgQlN0cmlu
ZyYgdXJsKQoreworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6Om5ld1dpbmRvd1JlcXVlc3RlZCgp
Cit7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6bG9hZE5lZ29jaWF0aW5nKGNvbnN0IEJTdHJp
bmcmIHVybCkKK3sKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojpsb2FkVHJhbnNmZXJpbmcoY29u
c3QgQlN0cmluZyYgdXJsKQoreworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmxvYWRGYWlsZWQo
Y29uc3QgQlN0cmluZyYgdXJsKQoreworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmxvYWRGaW5p
c2hlZChjb25zdCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6dGl0
bGVDaGFuZ2VkKGNvbnN0IEJTdHJpbmcmIHRpdGxlKQoreworICAgIFNldFRpdGxlKHRpdGxlLlN0
cmluZygpKTsKK30KKwordm9pZCBXZWJWaWV3V2luZG93OjpyZXNpemVSZXF1ZXN0ZWQoZmxvYXQg
d2lkdGgsIGZsb2F0IGhlaWdodCkKK3sKKyAgICBSZXNpemVUbyh3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBXZWJWaWV3V2luZG93OjpzdGF0dXNDaGFuZ2VkKGNvbnN0IEJTdHJpbmcmIHN0YXR1
c1RleHQpCit7Cit9CisKSW5kZXg6IGhhaWt1L0FQSS9XZWJQcm9jZXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gaGFpa3UvQVBJL1dlYlByb2Nlc3MuaAkocmV2aXNpb24gMCkKKysrIGhhaWt1L0FQSS9XZWJQ
cm9jZXNzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgV2ViUHJvY2Vzc19oCisjZGVmaW5l
IFdlYlByb2Nlc3NfaAorCisjaW5jbHVkZSA8SGFuZGxlci5oPgorI2luY2x1ZGUgPFJlY3QuaD4K
KyNpbmNsdWRlIDxTdHJpbmcuaD4KKworY2xhc3MgV2ViRnJhbWU7CitjbGFzcyBXZWJWaWV3Owor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgUGFnZTsKK307CisKK2NsYXNzIFdlYlBy
b2Nlc3MgOiBwdWJsaWMgQkhhbmRsZXIgeworLy8gICAgZnJpZW5kIGNsYXNzIFdlYkZyYW1lOwor
CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZU9uY2UoKTsKKworICAgIFdlYlBy
b2Nlc3MoV2ViVmlldyogd2ViVmlldyk7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHNo
dXRkb3duKCk7CisKKyAgICB2b2lkIHNldERpc3BhdGNoVGFyZ2V0KEJIYW5kbGVyKiBoYW5kbGVy
KTsKKworICAgIHZvaWQgbG9hZFVSTChjb25zdCBjaGFyKiB1cmxTdHJpbmcpOworICAgIHZvaWQg
Z29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQoKTsKKyAgICB2b2lkIGRyYXcoY29uc3QgQlJl
Y3QmIHVwZGF0ZVJlY3QpOworICAgIHZvaWQgZnJhbWVSZXNpemVkKGZsb2F0IHdpZHRoLCBmbG9h
dCBoZWlnaHQpOworICAgIHZvaWQgbW91c2VFdmVudChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSwg
Y29uc3QgQlBvaW50JiB3aGVyZSwKKyAgICAgICAgY29uc3QgQlBvaW50JiBzY3JlZW5XaGVyZSk7
CisgICAgdm9pZCBtb3VzZVdoZWVsQ2hhbmdlZChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSwKKyAg
ICAgICAgY29uc3QgQlBvaW50JiB3aGVyZSwgY29uc3QgQlBvaW50JiBzY3JlZW5XaGVyZSk7Cisg
ICAgdm9pZCBrZXlFdmVudChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSk7CisKKyAgICAvLyBUaGUg
Zm9sbG93aW5nIG1ldGhvZHMgYXJlIG9ubHkgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZQor
ICAgIC8vIENocm9tZUNsaWVudEhhaWt1IGFuZCBGcmFtZUxvYWRlckhhaWt1IGNvZGUhIE5vdCBm
cm9tIHdpdGhpbiB0aGUgd2luZG93CisgICAgLy8gdGhyZWFkIQorICAgIFdlYkZyYW1lKiBtYWlu
RnJhbWUoKSBjb25zdCB7IHJldHVybiBtX21haW5GcmFtZTsgfTsKKyAgICBXZWJDb3JlOjpQYWdl
KiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdlOyB9CisgICAgV2ViVmlldyogd2ViVmlldygp
IGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQorICAgICAgICAvLyBOT1RFOiBVc2luZyB0aGUg
V2ViVmlldyByZXF1aXJlcyBsb2NraW5nIGl0J3MgbG9vcGVyIQorCisgICAgQlJlY3QgY29udGVu
dHNTaXplKCk7CisgICAgQlJlY3Qgd2luZG93Qm91bmRzKCk7CisgICAgdm9pZCBzZXRXaW5kb3dC
b3VuZHMoY29uc3QgQlJlY3QmIGJvdW5kcyk7CisgICAgQlJlY3Qgdmlld0JvdW5kcygpOworICAg
IHZvaWQgc2V0Vmlld0JvdW5kcyhjb25zdCBCUmVjdCYgYm91bmRzKTsKKyAgICBCU3RyaW5nIG1h
aW5GcmFtZVRpdGxlKCk7CisgICAgQlN0cmluZyBtYWluRnJhbWVVUkwoKTsKKworICAgIHZvaWQg
cGFpbnQoY29uc3QgQlJlY3QmIHJlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRp
YXRlLAorICAgICAgICBib29sIHJlcGFpbnRDb250ZW50T25seSk7CisKK3ByaXZhdGU6CisgICAg
dmlydHVhbCB+V2ViUHJvY2VzcygpOworCisgICAgdmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZl
ZChCTWVzc2FnZSogbWVzc2FnZSk7CisKKyAgICB2b2lkIHNraXBUb0xhc3RNZXNzYWdlKEJNZXNz
YWdlKiYgbWVzc2FnZSk7CisKKyAgICB2b2lkIGhhbmRsZUxvYWRVUkwoY29uc3QgQk1lc3NhZ2Uq
IG1lc3NhZ2UpOworICAgIHZvaWQgaGFuZGxlR29CYWNrKGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdl
KTsKKyAgICB2b2lkIGhhbmRsZUdvRm9yd2FyZChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSk7Cisg
ICAgdm9pZCBoYW5kbGVEcmF3KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICB2b2lkIGhh
bmRsZUZyYW1lUmVzaXplZChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSk7CisgICAgdm9pZCBoYW5k
bGVNb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICB2b2lkIGhhbmRsZU1v
dXNlV2hlZWxDaGFuZ2VkKEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICB2b2lkIGhhbmRsZUtleUV2
ZW50KEJNZXNzYWdlKiBtZXNzYWdlKTsKKworcHJpdmF0ZToKKyAgICBib29sIG1faXNJbml0aWFs
aXplZDsKKyAgICBib29sIG1faXNMb2FkaW5nOworICAgIGJvb2wgbV9iZWluZ0Rlc3Ryb3llZDsK
KworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAgICBXZWJGcmFtZSogbV9tYWluRnJhbWU7Cisg
ICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOworfTsKKworI2VuZGlmIC8vIFdlYlByb2Nlc3NfaApJ
bmRleDogaGFpa3UvQVBJL1dlYlZpZXdXaW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9BUEkv
V2ViVmlld1dpbmRvdy5oCShyZXZpc2lvbiAwKQorKysgaGFpa3UvQVBJL1dlYlZpZXdXaW5kb3cu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld1dpbmRvd19oCisjZGVmaW5l
IFdlYlZpZXdXaW5kb3dfaAorCisjaW5jbHVkZSA8V2luZG93Lmg+CisKK2NsYXNzIFdlYlZpZXc7
CisKK2NsYXNzIFdlYlZpZXdXaW5kb3cgOiBwdWJsaWMgQldpbmRvdyB7CitwdWJsaWM6CisgICAg
V2ViVmlld1dpbmRvdyhCUmVjdCBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgd2luZG93X2xvb2sg
bG9vaywKKyAgICAgICAgd2luZG93X2ZlZWwgZmVlbCwgdWludDMyIGZsYWdzLAorICAgICAgICB1
aW50MzIgd29ya3NwYWNlID0gQl9DVVJSRU5UX1dPUktTUEFDRSk7CisgICAgdmlydHVhbCB+V2Vi
Vmlld1dpbmRvdygpOworCisgICAgdmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2Fn
ZSogbWVzc2FnZSk7CisKKyAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93
ZWJWaWV3OyB9CisKKyAgICAvLyBEZXJpdmVkIHdpbmRvd3Mgc2hvdWxkIGltcGxlbWVudCB0aGlz
IG5vdGlmaWNhdGlvbiBBUEkKKyAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlvblJlcXVlc3RlZChj
b25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBuZXdXaW5kb3dSZXF1ZXN0ZWQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZE5lZ29jaWF0aW5nKGNvbnN0IEJTdHJpbmcmIHVybCk7
CisgICAgdmlydHVhbCB2b2lkIGxvYWRUcmFuc2ZlcmluZyhjb25zdCBCU3RyaW5nJiB1cmwpOwor
ICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IEJTdHJpbmcmIHVybCk7CisgICAgdmly
dHVhbCB2b2lkIGxvYWRGaW5pc2hlZChjb25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwg
dm9pZCB0aXRsZUNoYW5nZWQoY29uc3QgQlN0cmluZyYgdGl0bGUpOworICAgIHZpcnR1YWwgdm9p
ZCByZXNpemVSZXF1ZXN0ZWQoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAgdmlydHVh
bCAgICB2b2lkIHN0YXR1c0NoYW5nZWQoY29uc3QgQlN0cmluZyYgc3RhdHVzKTsKKworcHJpdmF0
ZToKKyAgICBXZWJWaWV3KiBtX3dlYlZpZXc7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld1dpbmRv
d19oCisKSW5kZXg6IGhhaWt1L0FQSS9XZWJGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3Uv
QVBJL1dlYkZyYW1lLmNwcAkocmV2aXNpb24gMCkKKysrIGhhaWt1L0FQSS9XZWJGcmFtZS5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YkZyYW1lLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEhhaWt1LmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEhhaWt1Lmgi
CisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgorI2luY2x1ZGUgIldlYkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlBy
b2Nlc3MuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKworI2luY2x1ZGUgPEVudHJ5Lmg+CisKKy8v
IE1hdGNoIFNhZmFyaSdzIG1pbi9tYXggem9vbSBzaXplcyBieSBkZWZhdWx0CisjZGVmaW5lIE1p
bmltdW1UZXh0U2l6ZU11bHRpcGxpZXIgICAgICAgMC41ZgorI2RlZmluZSBNYXhpbXVtVGV4dFNp
emVNdWx0aXBsaWVyICAgICAgIDMuMGYKKyNkZWZpbmUgVGV4dFNpemVNdWx0aXBsaWVyUmF0aW8g
ICAgICAgICAxLjJmCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK1dlYkZyYW1lOjpX
ZWJGcmFtZShXZWJQcm9jZXNzKiB3ZWJQcm9jZXNzKQorICAgIDogbV90ZXh0TWFnbmlmaWVyKDEu
MCkKKyAgICAsIG1faXNFZGl0YWJsZShmYWxzZSkKKyAgICAsIG1fYmVpbmdEZXN0cm95ZWQoZmFs
c2UpCisgICAgLCBtX2ltcGwobmV3IFdlYkZyYW1lUHJpdmF0ZSgpKQorICAgICwgbV9sb2FkZXJD
bGllbnQobmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3Uod2ViUHJvY2VzcywgdGhp
cykpCisgICAgLCBtX3RpdGxlKDApCit7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVt
ZW50KiBwYXJlbnRGcmFtZSA9IDA7CisKKyAgICBtX2ltcGwtPmZyYW1lID0gV2ViQ29yZTo6RnJh
bWU6OmNyZWF0ZSh3ZWJQcm9jZXNzLT5wYWdlKCksIHBhcmVudEZyYW1lLCBtX2xvYWRlckNsaWVu
dCk7CisgICAgbV9pbXBsLT5mcmFtZS0+ZGVyZWYoKTsKKworICAgIG1faW1wbC0+ZnJhbWUtPmlu
aXQoKTsKK30KKworV2ViRnJhbWU6On5XZWJGcmFtZSgpCit7Cit9CisKK3ZvaWQgV2ViRnJhbWU6
OnNldERpc3BhdGNoVGFyZ2V0KEJIYW5kbGVyKiBoYW5kbGVyKQoreworICAgIG1fbG9hZGVyQ2xp
ZW50LT5zZXREaXNwYXRjaFRhcmdldChoYW5kbGVyKTsKK30KKworCitXZWJDb3JlOjpGcmFtZSog
V2ViRnJhbWU6OmZyYW1lKCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9p
bXBsLT5mcmFtZS5nZXQoKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkZyYW1lOjps
b2FkUmVxdWVzdChCU3RyaW5nIHVybCkKK3sKKyAgICBsb2FkUmVxdWVzdChLVVJMKEtVUkwoKSwg
dXJsLlN0cmluZygpKSk7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OmxvYWRSZXF1ZXN0KEtVUkwgdXJs
KQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpKSB7
CisgICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlm
IChCRW50cnkoQlN0cmluZyh1cmwuc3RyaW5nKCkpKS5FeGlzdHMoKSkgeworICAgICAgICAgICAg
ICAgIHVybC5zZXRQcm90b2NvbCgiZmlsZSIpOworICAgICAgICAgICAgICAgIHVybC5zZXRQYXRo
KCIvLyIgKyB1cmwucGF0aCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgdXJsLnNldFByb3RvY29sKCJodHRwIik7CisgICAgICAgICAgICAgICAgdXJsLnNldFBhdGgo
Ii8vIiArIHVybC5wYXRoKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
bV9pbXBsLT5mcmFtZS0+bG9hZGVyKCktPmxvYWQodXJsLCBmYWxzZSk7CisgICAgfQorfQorCit2
b2lkIFdlYkZyYW1lOjpzdG9wTG9hZGluZygpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYg
bV9pbXBsLT5mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigp
LT5zdG9wKCk7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OnJlbG9hZCgpCit7CisgICAgaWYgKG1faW1w
bC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIG1faW1wbC0+ZnJh
bWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuR29CYWNrKCkK
K3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9p
bXBsLT5mcmFtZS0+cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgcmV0dXJuIG1f
aW1wbC0+ZnJhbWUtPnBhZ2UoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuR29Gb3J3YXJkKCkKK3sKKyAgICBpZiAo
bV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9pbXBsLT5mcmFtZS0+
cGFnZSgpLT5iYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUt
PnBhZ2UoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKDEpOworCisgICAgcmV0dXJuIGZhbHNlOworfQor
Citib29sIFdlYkZyYW1lOjpnb0JhY2soKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1f
aW1wbC0+ZnJhbWUtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2Uo
KS0+Z29CYWNrKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViRnJhbWU6Omdv
Rm9yd2FyZCgpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+cGFn
ZSgpKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5nb0ZvcndhcmQoKTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KK2Jvb2wgV2ViRnJhbWU6OmNhbkNvcHkoKQoreworICAg
IGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0
dXJuIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5Db3B5KCkgfHwgbV9pbXBsLT5mcmFtZS0+
ZWRpdG9yKCktPmNhbkRIVE1MQ29weSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29s
IFdlYkZyYW1lOjpjYW5DdXQoKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+
ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5j
YW5DdXQoKSB8fCBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDdXQoKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuUGFzdGUoKQoreworICAgIGlm
IChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5QYXN0ZSgpIHx8IG1faW1wbC0+ZnJhbWUtPmVk
aXRvcigpLT5jYW5ESFRNTFBhc3RlKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
V2ViRnJhbWU6OmNvcHkoKQoreworICAgIGlmIChjYW5Db3B5KCkpCisgICAgICAgIG1faW1wbC0+
ZnJhbWUtPmVkaXRvcigpLT5jb3B5KCk7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OmN1dCgpCit7Cisg
ICAgaWYgKGNhbkN1dCgpKQorICAgICAgICBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y3V0KCk7
Cit9CisKK3ZvaWQgV2ViRnJhbWU6OnBhc3RlKCkKK3sKKyAgICBpZiAoY2FuUGFzdGUoKSkKKyAg
ICAgICAgbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPnBhc3RlKCk7Cit9CisKK2Jvb2wgV2ViRnJh
bWU6OmNhblVuZG8oKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUt
PmVkaXRvcigpKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmNhblVu
ZG8oKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuUmVkbygp
Cit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCkpCisg
ICAgICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuUmVkbygpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkZyYW1lOjp1bmRvKCkKK3sKKyAgICBpZiAobV9p
bXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKSAmJiBjYW5VbmRvKCkpCisgICAg
ICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+dW5kbygpOworfQorCit2b2lkIFdl
YkZyYW1lOjpyZWRvKCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1l
LT5lZGl0b3IoKSAmJiBjYW5SZWRvKCkpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT5l
ZGl0b3IoKS0+cmVkbygpOworfQorCitib29sIFdlYkZyYW1lOjphbGxvd3NTY3JvbGxpbmcoKQor
eworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAg
ICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+Y2FuSGF2ZVNjcm9sbGJhcnMoKTsKKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJGcmFtZTo6c2V0QWxsb3dzU2Nyb2xsaW5n
KGJvb2wgZmxhZykKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT52
aWV3KCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJh
cnMoZmxhZyk7Cit9CisKK2NvbnN0IGNoYXIqIFdlYkZyYW1lOjpnZXRQYWdlU291cmNlKCkKK3sK
KyAgICBpZiAobV9pbXBsLT5mcmFtZSkgeworICAgICAgICBpZiAobV9pbXBsLT5mcmFtZS0+dmll
dygpICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpKQorICAgICAgICAg
ICAgbV9pbXBsLT5mcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKworICAgICAgICBXZWJDb3JlOjpE
b2N1bWVudCogZG9jdW1lbnQgPSBtX2ltcGwtPmZyYW1lLT5kb2N1bWVudCgpOworCisgICAgICAg
IGlmIChkb2N1bWVudCkgeworICAgICAgICAgICAgQlN0cmluZyBzb3VyY2UgPSBjcmVhdGVNYXJr
dXAoZG9jdW1lbnQpOworICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5TdHJpbmcoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiAiIjsKK30KKwordm9pZCBXZWJGcmFtZTo6c2V0UGFn
ZVNvdXJjZShjb25zdCBjaGFyKiBzb3VyY2UpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYg
bV9pbXBsLT5mcmFtZS0+bG9hZGVyKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIq
IGxvYWRlciA9IG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpOworICAgICAgICBsb2FkZXItPmJlZ2lu
KCk7CisgICAgICAgIGxvYWRlci0+d3JpdGUoU3RyaW5nKHNvdXJjZSkpOworICAgICAgICBsb2Fk
ZXItPmVuZCgpOworICAgIH0KK30KKwordm9pZCBXZWJGcmFtZTo6c2V0VHJhbnNwYXJlbnQoYm9v
bCB0cmFuc3BhcmVudCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1l
LT52aWV3KCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQo
dHJhbnNwYXJlbnQpOworfQorCitib29sIFdlYkZyYW1lOjppc1RyYW5zcGFyZW50KCkgY29uc3QK
K3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCkpCisgICAg
ICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT52aWV3KCktPmlzVHJhbnNwYXJlbnQoKTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworQlN0cmluZyBXZWJGcmFtZTo6Z2V0SW5uZXJUZXh0KCkKK3sK
KyAgICBGcmFtZVZpZXcqIHZpZXcgPSBtX2ltcGwtPmZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAo
dmlldyAmJiB2aWV3LT5sYXlvdXRQZW5kaW5nKCkpCisgICAgICAgIHZpZXctPmxheW91dCgpOwor
CisgICAgV2ViQ29yZTo6RWxlbWVudCAqZG9jdW1lbnRFbGVtZW50ID0gbV9pbXBsLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVu
dC0+aW5uZXJUZXh0KCk7Cit9CisKK0JTdHJpbmcgV2ViRnJhbWU6OmdldEFzTWFya3VwKCkKK3sK
KyAgICBpZiAoIW1faW1wbC0+ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHJldHVybiBjcmVhdGVNYXJrdXAobV9pbXBsLT5mcmFtZS0+ZG9jdW1lbnQo
KSk7Cit9CisKK0JTdHJpbmcgV2ViRnJhbWU6OmdldEV4dGVybmFsUmVwcmVzZW50YXRpb24oKQor
eworICAgIEZyYW1lVmlldyogdmlldyA9IG1faW1wbC0+ZnJhbWUtPnZpZXcoKTsKKworICAgIGlm
ICh2aWV3ICYmIHZpZXctPmxheW91dFBlbmRpbmcoKSkKKyAgICAgICAgdmlldy0+bGF5b3V0KCk7
CisKKyAgICByZXR1cm4gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX2ltcGwtPmZyYW1lLmdldCgp
KTsKK30KKworYm9vbCBXZWJGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGJv
b2wgZm9yd2FyZCwgYm9vbCBjYXNlU2Vuc2l0aXZlLCBib29sIHdyYXBTZWxlY3Rpb24sIGJvb2wg
c3RhcnRJblNlbGVjdGlvbikKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSkKKyAgICAgICAgcmV0
dXJuIG1faW1wbC0+ZnJhbWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlU2Vuc2l0
aXZlLCB3cmFwU2VsZWN0aW9uLCBzdGFydEluU2VsZWN0aW9uKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuSW5jcmVhc2VUZXh0U2l6ZSgpIGNvbnN0Cit7Cisg
ICAgaWYgKG1faW1wbC0+ZnJhbWUpCisgICAgICAgIGlmIChtX3RleHRNYWduaWZpZXIgKiBUZXh0
U2l6ZU11bHRpcGxpZXJSYXRpbyA8PSBNYXhpbXVtVGV4dFNpemVNdWx0aXBsaWVyKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViRnJh
bWU6OmNhbkRlY3JlYXNlVGV4dFNpemUoKSBjb25zdAoreworICAgIGlmIChtX2ltcGwtPmZyYW1l
KQorICAgICAgICByZXR1cm4gbV90ZXh0TWFnbmlmaWVyIC8gVGV4dFNpemVNdWx0aXBsaWVyUmF0
aW8gPj0gTWluaW11bVRleHRTaXplTXVsdGlwbGllcjsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBXZWJGcmFtZTo6aW5jcmVhc2VUZXh0U2l6ZSgpCit7CisgICAgaWYgKGNhbkluY3Jl
YXNlVGV4dFNpemUoKSkgeworICAgICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZp
ZXIgKiBUZXh0U2l6ZU11bHRpcGxpZXJSYXRpbzsKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2V0
Wm9vbUZhY3RvcihtX3RleHRNYWduaWZpZXIsIHRydWUpOworICAgIH0KK30KKwordm9pZCBXZWJG
cmFtZTo6ZGVjcmVhc2VUZXh0U2l6ZSgpCit7CisgICAgaWYgKGNhbkRlY3JlYXNlVGV4dFNpemUo
KSkgeworICAgICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIgLyBUZXh0U2l6
ZU11bHRpcGxpZXJSYXRpbzsKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2V0Wm9vbUZhY3Rvciht
X3RleHRNYWduaWZpZXIsIHRydWUpOworICAgIH0KK30KKwordm9pZCBXZWJGcmFtZTo6cmVzZXRU
ZXh0U2l6ZSgpCit7CisgICAgbV90ZXh0TWFnbmlmaWVyID0gMS4wOworCisgICAgaWYgKG1faW1w
bC0+ZnJhbWUpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPnNldFpvb21GYWN0b3IobV90ZXh0TWFn
bmlmaWVyLCB0cnVlKTsKK30KSW5kZXg6IGhhaWt1L0FQSS9XZWJGcmFtZVByaXZhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBoYWlrdS9BUEkvV2ViRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDApCisrKyBo
YWlrdS9BUEkvV2ViRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21h
aWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
KyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdlYkZyYW1l
UHJpdmF0ZV9oCisjZGVmaW5lIFdlYkZyYW1lUHJpdmF0ZV9oCisKKyNpbmNsdWRlICJFZGl0Q29t
bWFuZEhhaWt1LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKworI2luY2x1ZGUgPHd0Zi9SZWZQdHIu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFdlYkZyYW1lUHJpdmF0ZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBXZWJGcmFtZVByaXZhdGUoKQorICAgICAgICAgICAgOiBmcmFt
ZSgwKQorICAgICAgICB7fQorCisgICAgICAgIFdURjo6VmVjdG9yPEVkaXRDb21tYW5kSGFpa3U+
IHVuZG9TdGFjazsKKyAgICAgICAgV1RGOjpWZWN0b3I8RWRpdENvbW1hbmRIYWlrdT4gcmVkb1N0
YWNrOworCisgICAgICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBmcmFtZTsKK307CisK
KyNlbmRpZiAvLyBXZWJGcmFtZVByaXZhdGVfaApJbmRleDogaGFpa3UvQVBJL1dlYlZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGhhaWt1L0FQSS9XZWJWaWV3LmNwcAkocmV2aXNpb24gMCkKKysrIGhh
aWt1L0FQSS9XZWJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXgu
ZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAiV2ViVmlld0NvbnN0YW50cy5o
IgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxB
bGVydC5oPgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8Qml0bWFwLmg+Cisj
aW5jbHVkZSA8UmVnaW9uLmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOworCitXZWJWaWV3OjpXZWJWaWV3KGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBC
VmlldyhuYW1lLCBCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRTIHwgQl9GVUxMX1VQREFURV9P
Tl9SRVNJWkUgfCBCX05BVklHQUJMRSkKKyAgICAsIG1fdGV4dE1hZ25pZmllcigxLjApCisgICAg
LCBtX29mZnNjcmVlbkJpdG1hcCgwKQorICAgICwgbV9vZmZzY3JlZW5WaWV3Q2xlYW4oZmFsc2Up
CisgICAgLCBtX21haW5UaHJlYWRIYW5kbGVyKG5ldyBXZWJQcm9jZXNzKHRoaXMpKQoreworICAg
IG1fbWFpblRocmVhZEhhbmRsZXItPmluaXQoKTsKKyAgICAvLyBUT0RPOiBTaG91bGQgYWRkIHRo
aXMgdG8gdGhlICJjdXJyZW50IiBsb29wZXIsIGJ1dCB0aGF0IGxvb3BlciBuZWVkcyB0bworICAg
IC8vIHN0YXkgYXJvdW5kIHJlZ2FyZGxlc3Mgb2Ygd2luZG93cyBvcGVuaW5nL2Nsb3NpbmcuIEFk
ZGluZyBpdCB0byB0aGUKKyAgICAvLyBhcHAgbG9vcGVyIGlzIHRoZSBzYWZlc3QgYmV0IGZvciBu
b3cuCisgICAgaWYgKGJlX2FwcC0+TG9jaygpKSB7CisgICAgICAgIGJlX2FwcC0+QWRkSGFuZGxl
cihtX21haW5UaHJlYWRIYW5kbGVyKTsKKyAgICAgICAgYmVfYXBwLT5VbmxvY2soKTsKKyAgICB9
CisKKyAgICBGcmFtZVJlc2l6ZWQoQm91bmRzKCkuV2lkdGgoKSwgQm91bmRzKCkuSGVpZ2h0KCkp
OworCisgICAgU2V0Vmlld0NvbG9yKEJfVFJBTlNQQVJFTlRfQ09MT1IpOworfQorCitXZWJWaWV3
Ojp+V2ViVmlldygpCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6QXR0YWNoZWRUb1dpbmRvdygpCit7
CisgICAgbV9tYWluVGhyZWFkSGFuZGxlci0+c2V0RGlzcGF0Y2hUYXJnZXQoV2luZG93KCkpOwor
fQorCit2b2lkIFdlYlZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygpCit7CisvLyBUT0RPOiBOZWVk
cyBsb2NraW5nLgorLy8gICAgbV9tYWluVGhyZWFkSGFuZGxlci0+c2V0RGlzcGF0Y2hUYXJnZXQo
MCk7CisgICAgbV9tYWluVGhyZWFkSGFuZGxlci0+c2h1dGRvd24oKTsKK30KKwordm9pZCBXZWJW
aWV3OjpEcmF3KEJSZWN0IHJlY3QpCit7CisgICAgaWYgKCFtX29mZnNjcmVlblZpZXdDbGVhbikg
eworICAgICAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5kcmF3KHJlY3QpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCFtX29mZnNjcmVlbkJpdG1hcC0+TG9jaygpKSB7CisgICAg
ICAgIFNldEhpZ2hDb2xvcigyNTUsIDAsIDApOworICAgICAgICBGaWxsUmVjdChyZWN0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb2Zmc2NyZWVuVmlldy0+U3luYygpOworICAg
IERyYXdCaXRtYXAobV9vZmZzY3JlZW5CaXRtYXAsIG1fb2Zmc2NyZWVuVmlldy0+Qm91bmRzKCks
CisgICAgICAgIG1fb2Zmc2NyZWVuVmlldy0+Qm91bmRzKCkpOworCisgICAgbV9vZmZzY3JlZW5C
aXRtYXAtPlVubG9jaygpOworfQorCit2b2lkIFdlYlZpZXc6OkZyYW1lUmVzaXplZChmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJlc2l6ZU9mZnNjcmVlblZpZXcod2lkdGggKyAx
LCBoZWlnaHQgKyAxKTsKKyAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5mcmFtZVJlc2l6ZWQod2lk
dGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdl
KiBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hhdCkgeworICAgIGNhc2UgQl9N
T1VTRV9XSEVFTF9DSEFOR0VEOiB7CisgICAgICAgIEJQb2ludCB3aGVyZTsKKyAgICAgICAgdWlu
dDMyIGJ1dHRvbnM7CisgICAgICAgIEdldE1vdXNlKCZ3aGVyZSwgJmJ1dHRvbnMpOworICAgICAg
ICBCUG9pbnQgc2NyZWVuV2hlcmUgPSBDb252ZXJ0VG9TY3JlZW4od2hlcmUpOworICAgICAgICBt
X21haW5UaHJlYWRIYW5kbGVyLT5tb3VzZVdoZWVsQ2hhbmdlZChtZXNzYWdlLCB3aGVyZSwgc2Ny
ZWVuV2hlcmUpOworICAgICAgICAvLyBOT1RFOiBUaGlzIHNvbHZlcyBhIGJ1ZyBpbiBXZWJLaXQg
aXRzZWxmLCBpdCBzaG91bGQgaXNzdWUgYSBtb3VzZQorICAgICAgICAvLyBldmVudCB3aGVuIHNj
cm9sbGluZyBieSB3aGVlbCBldmVudC4gVGhlIGVmZmVjdHMgb2YgdGhlIHRoaXMgYnVnCisgICAg
ICAgIC8vIGNhbiBiZSB3aXRuZXNzZWQgaW4gU2FmYXJpIGFzIHdlbGwuCisgICAgICAgIEJNZXNz
YWdlIG1vdXNlTWVzc2FnZShCX01PVVNFX01PVkVEKTsKKyAgICAgICAgbW91c2VNZXNzYWdlLkFk
ZFBvaW50KCJiZTp2aWV3X3doZXJlIiwgd2hlcmUpOworICAgICAgICBtb3VzZU1lc3NhZ2UuQWRk
UG9pbnQoInNjcmVlbl93aGVyZSIsIHNjcmVlbldoZXJlKTsKKyAgICAgICAgbW91c2VNZXNzYWdl
LkFkZEludDMyKCJidXR0b25zIiwgYnV0dG9ucyk7CisgICAgICAgIG1vdXNlTWVzc2FnZS5BZGRJ
bnQzMigibW9kaWZpZXJzIiwgbW9kaWZpZXJzKCkpOworICAgICAgICBtX21haW5UaHJlYWRIYW5k
bGVyLT5tb3VzZUV2ZW50KCZtb3VzZU1lc3NhZ2UsIHdoZXJlLCBzY3JlZW5XaGVyZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIEJWaWV3OjpNZXNzYWdl
UmVjZWl2ZWQobWVzc2FnZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJW
aWV3OjpNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWludDMyLCBjb25zdCBCTWVzc2FnZSopCit7
CisgICAgZGlzcGF0Y2hNb3VzZUV2ZW50KHdoZXJlLCBCX01PVVNFX01PVkVEKTsKK30KKwordm9p
ZCBXZWJWaWV3OjpNb3VzZURvd24oQlBvaW50IHdoZXJlKQoreworICAgIFNldE1vdXNlRXZlbnRN
YXNrKEJfUE9JTlRFUl9FVkVOVFMsIEJfTE9DS19XSU5ET1dfRk9DVVMpOworICAgIGRpc3BhdGNo
TW91c2VFdmVudCh3aGVyZSwgQl9NT1VTRV9ET1dOKTsKK30KKwordm9pZCBXZWJWaWV3OjpNb3Vz
ZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAgICBkaXNwYXRjaE1vdXNlRXZlbnQod2hlcmUsIEJfTU9V
U0VfVVApOworfQorCit2b2lkIFdlYlZpZXc6OktleURvd24oY29uc3QgY2hhciosIGludDMyKQor
eworICAgIGRpc3BhdGNoS2V5RXZlbnQoQl9LRVlfRE9XTik7Cit9CisKK3ZvaWQgV2ViVmlldzo6
S2V5VXAoY29uc3QgY2hhciosIGludDMyKQoreworICAgIGRpc3BhdGNoS2V5RXZlbnQoQl9LRVlf
VVApOworfQorCit2b2lkIFdlYlZpZXc6OnNldEJvdW5kcyhCUmVjdCByZWN0KQoreworICAgQk1l
c3NhZ2UgbWVzc2FnZShSRVNJWklOR19SRVFVRVNURUQpOworICAgbWVzc2FnZS5BZGRSZWN0KCJy
ZWN0IiwgcmVjdCk7CisgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZtZXNzYWdlKTsKK30KKworQlJl
Y3QgV2ViVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9tYWluVGhy
ZWFkSGFuZGxlci0+Y29udGVudHNTaXplKCk7Cit9CisKK0JTdHJpbmcgV2ViVmlldzo6bWFpbkZy
YW1lVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX21haW5UaHJlYWRIYW5kbGVyLT5tYWlu
RnJhbWVUaXRsZSgpOworfQorCitCU3RyaW5nIFdlYlZpZXc6Om1haW5GcmFtZVVSTCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fbWFpblRocmVhZEhhbmRsZXItPm1haW5GcmFtZVVSTCgpOworfQor
Cit2b2lkIFdlYlZpZXc6OmxvYWRSZXF1ZXN0KGNvbnN0IGNoYXIqIHVybFN0cmluZykKK3sKKyAg
ICBtX21haW5UaHJlYWRIYW5kbGVyLT5sb2FkVVJMKHVybFN0cmluZyk7Cit9CisKK3ZvaWQgV2Vi
Vmlldzo6Z29CYWNrKCkKK3sKKyAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5nb0JhY2soKTsKK30K
Kwordm9pZCBXZWJWaWV3Ojpnb0ZvcndhcmQoKQoreworICAgIG1fbWFpblRocmVhZEhhbmRsZXIt
PmdvRm9yd2FyZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFRvb2xiYXJzVmlzaWJsZShib29s
IGZsYWcpCit7CisgICAgbV90b29sYmFyc1Zpc2libGUgPSBmbGFnOworCisgICAgQk1lc3NhZ2Ug
bWVzc2FnZShUT09MQkFSU19WSVNJQklMSVRZKTsKKyAgICBtZXNzYWdlLkFkZEJvb2woImZsYWci
LCBmbGFnKTsKKyAgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZtZXNzYWdlKTsKK30KKwordm9pZCBX
ZWJWaWV3OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgZmxhZykKK3sKKyAgICBtX3N0YXR1c2Jh
clZpc2libGUgPSBmbGFnOworCisgICAgQk1lc3NhZ2UgbWVzc2FnZShTVEFUVVNCQVJfVklTSUJJ
TElUWSk7CisgICAgbWVzc2FnZS5BZGRCb29sKCJmbGFnIiwgZmxhZyk7CisgICAgYmVfYXBwLT5Q
b3N0TWVzc2FnZSgmbWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6c2V0TWVudWJhclZpc2li
bGUoYm9vbCBmbGFnKQoreworICAgIG1fbWVudWJhclZpc2libGUgPSBmbGFnOworCisgICAgQk1l
c3NhZ2UgbWVzc2FnZShNRU5VQkFSX1ZJU0lCSUxJVFkpOworICAgIG1lc3NhZ2UuQWRkQm9vbCgi
ZmxhZyIsIGZsYWcpOworICAgIGJlX2FwcC0+UG9zdE1lc3NhZ2UoJm1lc3NhZ2UpOworfQorCit2
b2lkIFdlYlZpZXc6OnNldFJlc2l6YWJsZShib29sIGZsYWcpCit7CisgICAgQk1lc3NhZ2UgbWVz
c2FnZShTRVRfUkVTSVpBQkxFKTsKKyAgICBtZXNzYWdlLkFkZEJvb2woImZsYWciLCBmbGFnKTsK
KyAgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZtZXNzYWdlKTsKK30KKwordm9pZCBXZWJWaWV3Ojpj
bG9zZVdpbmRvdygpCit7CisgICAgYmVfYXBwLT5Qb3N0TWVzc2FnZShCX1FVSVRfUkVRVUVTVEVE
KTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTdGF0dXNUZXh0KGNvbnN0IEJTdHJpbmcmIHRleHQp
Cit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShTRVRfU1RBVFVTX1RFWFQpOworICAgIG1lc3NhZ2Uu
QWRkU3RyaW5nKCJ0ZXh0IiwgdGV4dCk7CisgICAgYmVfYXBwLT5Qb3N0TWVzc2FnZSgmbWVzc2Fn
ZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6bGlua0hvdmVyZWQoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgY29udGVudCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldE9mZnNjcmVlblZpZXdDbGVhbihCUmVj
dCBjbGVhblJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlmIChMb2NrTG9vcGVyKCkpIHsK
KyAgICAgICAgbV9vZmZzY3JlZW5WaWV3Q2xlYW4gPSB0cnVlOworICAgICAgICBpZiAoaW1tZWRp
YXRlKQorICAgICAgICAgICAgRHJhdyhjbGVhblJlY3QpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBJbnZhbGlkYXRlKGNsZWFuUmVjdCk7CisgICAgICAgIFVubG9ja0xvb3BlcigpOworICAg
IH0KK30KKwordm9pZCBXZWJWaWV3OjppbnZhbGlkYXRlKCkKK3sKKyAgICBpZiAoTG9ja0xvb3Bl
cigpKSB7CisgICAgICAgIG1fb2Zmc2NyZWVuVmlld0NsZWFuID0gZmFsc2U7CisgICAgICAgIElu
dmFsaWRhdGUoKTsKKyAgICAgICAgVW5sb2NrTG9vcGVyKCk7CisgICAgfQorfQorCisvLyAjcHJh
Z21hIG1hcmsgLSBwcml2YXRlCisKK3ZvaWQgV2ViVmlldzo6cmVzaXplT2Zmc2NyZWVuVmlldyhp
bnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgQlJlY3QgYm91bmRzKDAsIDAsIHdpZHRoIC0g
MSwgaGVpZ2h0IC0gMSk7CisgICAgaWYgKG1fb2Zmc2NyZWVuQml0bWFwKSB7CisgICAgICAgIG1f
b2Zmc2NyZWVuQml0bWFwLT5Mb2NrKCk7CisgICAgICAgIGlmIChtX29mZnNjcmVlbkJpdG1hcC0+
Qm91bmRzKCkuQ29udGFpbnMoYm91bmRzKSkgeworICAgICAgICAgICAgLy8gSnVzdCByZXNpemUg
dGhlIHZpZXcgYW5kIGNsZWFyIHRoZSBleHBvc2VkIHBhcnRzLCBidXQgbmV2ZXIKKyAgICAgICAg
ICAgIC8vIHNocmluayB0aGUgYml0bWFwKS4KKyAgICAgICAgICAgIEJSZWN0IG9sZFZpZXdCb3Vu
ZHMobV9vZmZzY3JlZW5WaWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICBtX29mZnNjcmVlblZp
ZXctPlJlc2l6ZVRvKHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBCUmVnaW9u
IGV4cG9zZWQobV9vZmZzY3JlZW5WaWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICBleHBvc2Vk
LkV4Y2x1ZGUob2xkVmlld0JvdW5kcyk7CisgICAgICAgICAgICBtX29mZnNjcmVlblZpZXctPkZp
bGxSZWdpb24oJmV4cG9zZWQsIEJfU09MSURfTE9XKTsKKyAgICAgICAgICAgIG1fb2Zmc2NyZWVu
Qml0bWFwLT5VbmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0K
KyAgICBCQml0bWFwKiBvbGRCaXRtYXAgPSBtX29mZnNjcmVlbkJpdG1hcDsKKyAgICBCVmlldyog
b2xkVmlldyA9IG1fb2Zmc2NyZWVuVmlldzsKKworICAgIG1fb2Zmc2NyZWVuQml0bWFwID0gbmV3
IEJCaXRtYXAoYm91bmRzLCBCX1JHQjMyLCB0cnVlKTsKKyAgICBpZiAobV9vZmZzY3JlZW5CaXRt
YXAtPkluaXRDaGVjaygpICE9IEJfT0spIHsKKyAgICAgICAgQkFsZXJ0KiBhbGVydCA9IG5ldyBC
QWxlcnQoIkludGVybmFsIGVycm9yIiwgIlVuYWJsZSB0byBjcmVhdGUgb2ZmLXNjcmVlbiBiaXRt
YXAgZm9yIFdlYktpdCBjb250ZW50cy4iLCAiT0siKTsKKyAgICAgICAgYWxlcnQtPkdvKCk7Cisg
ICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIG1fb2Zmc2NyZWVuVmlldyA9IG5ldyBCVmlldyhi
b3VuZHMsICJXZWJLaXQgb2Zmc2NyZWVuIHZpZXciLCAwLCAwKTsKKyAgICBtX29mZnNjcmVlbkJp
dG1hcC0+TG9jaygpOworICAgIG1fb2Zmc2NyZWVuQml0bWFwLT5BZGRDaGlsZChtX29mZnNjcmVl
blZpZXcpOworCisgICAgaWYgKG9sZEJpdG1hcCkgeworICAgICAgICAvLyBUcmFuc2ZlciB0aGUg
b2xkIGJpdG1hcCBjb250ZW50cyAoanVzdCB0aGUgdmlzaWJsZSBwYXJ0KSBhbmQKKyAgICAgICAg
Ly8gY2xlYXIgdGhlIHJlc3QuCisgICAgICAgIEJSZWdpb24gcmVnaW9uKG1fb2Zmc2NyZWVuVmll
dy0+Qm91bmRzKCkpOworICAgICAgICBCUmVjdCBvbGRWaWV3Qm91bmRzID0gb2xkVmlldy0+Qm91
bmRzKCk7CisgICAgICAgIHJlZ2lvbi5FeGNsdWRlKG9sZFZpZXdCb3VuZHMpOworICAgICAgICBt
X29mZnNjcmVlblZpZXctPkRyYXdCaXRtYXAob2xkQml0bWFwLCBvbGRWaWV3Qm91bmRzLCBvbGRW
aWV3Qm91bmRzKTsKKyAgICAgICAgbV9vZmZzY3JlZW5WaWV3LT5GaWxsUmVnaW9uKCZyZWdpb24s
IEJfU09MSURfTE9XKTsKKyAgICAgICAgZGVsZXRlIG9sZEJpdG1hcDsKKyAgICAgICAgICAgIC8v
IFRha2VzIGNhcmUgb2Ygb2xkIG1fb2Zmc2NyZWVuVmlldyB0b28uCisgICAgfQorCisgICAgbV9v
ZmZzY3JlZW5CaXRtYXAtPlVubG9jaygpOworfQorCit2b2lkIFdlYlZpZXc6OmRpc3BhdGNoTW91
c2VFdmVudChjb25zdCBCUG9pbnQmIHdoZXJlLCB1aW50MzIgc2FuaXR5V2hhdCkKK3sKKyAgICBC
TWVzc2FnZSogbWVzc2FnZSA9IExvb3BlcigpLT5DdXJyZW50TWVzc2FnZSgpOworICAgIGlmICgh
bWVzc2FnZSB8fCBtZXNzYWdlLT53aGF0ICE9IHNhbml0eVdoYXQpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbWFpblRocmVhZEhhbmRsZXItPm1vdXNlRXZlbnQobWVzc2FnZSwgd2hlcmUsIENv
bnZlcnRUb1NjcmVlbih3aGVyZSkpOworfQorCit2b2lkIFdlYlZpZXc6OmRpc3BhdGNoS2V5RXZl
bnQodWludDMyIHNhbml0eVdoYXQpCit7CisgICAgQk1lc3NhZ2UqIG1lc3NhZ2UgPSBMb29wZXIo
KS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS0+d2hhdCAh
PSBzYW5pdHlXaGF0KQorICAgICAgICByZXR1cm47CisKKyAgICBtX21haW5UaHJlYWRIYW5kbGVy
LT5rZXlFdmVudChtZXNzYWdlKTsKK30KKwpJbmRleDogaGFpa3UvQVBJL1dlYlZpZXdQcml2YXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gaGFpa3UvQVBJL1dlYlZpZXdQcml2YXRlLmgJKHJldmlzaW9uIDAp
CisrKyBoYWlrdS9BUEkvV2ViVmlld1ByaXZhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGlt
ZUBnbWFpbC5jb20+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpZm5kZWYgV2Vi
Vmlld1ByaXZhdGVfaAorI2RlZmluZSBXZWJWaWV3UHJpdmF0ZV9oCisKKyNpbmNsdWRlICJQYWdl
LmgiCisKK2NsYXNzIFdlYlZpZXdQcml2YXRlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFdlYlZp
ZXdQcml2YXRlKCkKKyAgICAgICAgICAgIDogcGFnZSgwKQorICAgICAgICB7fQorCisgICAgICAg
IFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld1ByaXZhdGVfaApJ
bmRleDogaGFpa3UvQVBJL1dlYlZpZXdDb25zdGFudHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoYWlrdS9B
UEkvV2ViVmlld0NvbnN0YW50cy5oCShyZXZpc2lvbiAwKQorKysgaGFpa3UvQVBJL1dlYlZpZXdD
b25zdGFudHMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlZpZXdDb25zdGFudHNfaAor
I2RlZmluZSBXZWJWaWV3Q29uc3RhbnRzX2gKKworZW51bSB7CisgICAgTE9BRF9PTkxPQURfSEFO
RExFID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMCwKKyAgICBMT0FEX05FR09D
SUFUSU5HID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAxLAorICAgIFRJVExF
X0NIQU5HRUQgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDIsCisgICAg
TE9BRF9UUkFOU0ZFUlJJTkcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMywK
KyAgICBMT0FEX0RPQ19DT01QTEVURUQgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MzA0LAorICAgIExPQURfRExfQ09NUExFVEVEID0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzMDUsCisgICAgTE9BRF9GQUlMRUQgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMwNiwKKyAgICBMT0FEX0ZJTklTSEVEID0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMzA3LAorICAgIE5FV19XSU5ET1dfUkVRVUVTVEVEID0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzMDgsCisgICAgTkFWSUdBVElPTl9SRVFVRVNURUQgPSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMwOSwKKyAgICBKQVZBU0NSSVBUX1dJTkRPV19PQkpF
Q1RfQ0xFQVJFRCA9ICAgICAgICAgICAgICAgICAgMzEwCit9OworCitlbnVtIHsKKyAgICBXZWJL
aXRFcnJvckNhbm5vdFNob3dNSU1FVHlwZSA9ICAgICAgICAgICAgICAgICAgICAgMTAwLAorICAg
IFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAxMDEs
CisgICAgV2ViS2l0RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRlZEJ5UG9saWN5Q2hhbmdlID0gICAg
IDEwMiwKKyAgICBXZWJLaXRFcnJvckNhbm5vdFVzZVJlc3RyaWN0ZWRQb3J0ID0gICAgICAgICAg
ICAgICAgMTAzLAorICAgIFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbiA9ICAgICAgICAgICAg
ICAgICAgICAgICAyMDAsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RMb2FkUGx1Z0luID0gICAgICAg
ICAgICAgICAgICAgICAgIDIwMSwKKyAgICBXZWJLaXRFcnJvckphdmFVbmF2YWlsYWJsZSA9ICAg
ICAgICAgICAgICAgICAgICAgICAgMjAyCit9OworCitlbnVtIHsKKyAgICBUT09MQkFSU19WSVNJ
QklMSVRZID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAxLAorICAgIFNUQVRVU0JB
Ul9WSVNJQklMSVRZID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDIsCisgICAgTUVO
VUJBUl9WSVNJQklMSVRZID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwMywKKyAg
ICBTRVRfUkVTSVpBQkxFID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA1
LAorICAgIFNFVF9TVEFUVVNfVEVYVCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0MDYsCisgICAgUkVTSVpJTkdfUkVRVUVTVEVEID0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQwNworfTsKKworI2VuZGlmIC8vIFdlYlZpZXdDb25zdGFudHNfaApJbmRleDogaGFp
a3UvQVBJL1dlYlByb2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhhaWt1L0FQSS9XZWJQcm9jZXNz
LmNwcAkocmV2aXNpb24gMCkKKysrIGhhaWt1L0FQSS9XZWJQcm9jZXNzLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBB
w59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisK
KyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRIYWlrdS5o
IgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50SGFpa3UuaCIKKyNpbmNsdWRlICJET01UaW1l
ci5oIgorI2luY2x1ZGUgIkRyYWdDbGllbnRIYWlrdS5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVu
dEhhaWt1LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhy
ZWFkaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SGFpa3UuaCIKKyNpbmNsdWRlICJM
b2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1N
b3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHRF
bmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgor
I2luY2x1ZGUgIldlYlZpZXdDb25zdGFudHMuaCIKKworI2luY2x1ZGUgPEJpdG1hcC5oPgorI2lu
Y2x1ZGUgPEZvbnQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+CisjaW5jbHVkZSA8TWVzc2FnZVF1
ZXVlLmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworLyoKKyAgICAgVGhlIGJhc2ljIGlkZWEg
aGVyZSBpcyB0byBkaXNwYXRjaCBhbGwgcHVibGljIG1ldGhvZHMgdG8gdGhlIEJMb29wZXIKKyAg
ICAgdG8gd2hpY2ggdGhlIGhhbmRsZXIgaXMgYXR0YWNoZWQgKHNob3VsZCBiZSB0aGUgYmVfYXBw
KSwgc3VjaCB0aGF0CisgICAgIHRoZSBjYWxscyBpbnRvIFdlYkNvcmUgY29kZSBoYXBwZW4gZnJv
bSB3aXRoaW4gdGhhdCB0aHJlYWQgKm9ubHkqLgorICAgICBJbiBjdXJyZW50IFdlYkNvcmUgd2l0
aCBwdGhyZWFkIHRocmVhZGluZyBiYWNrZW5kLCB0aGlzIG11c3QgYmUgdGhlCisgICAgIHNhbWUg
dGhyZWFkIHRoYXQgY2FsbGVkIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpLCByZXNwZWN0aXZl
bHkgdGhlCisgICAgIGluaXRpYWxpemVPbmNlKCkgbWV0aG9kIG9mIHRoaXMgY2xhc3MuCisgKi8K
KworZW51bSB7CisgICAgSEFORExFX1NIVVRET1dOICAgICAgICAgICAgICAgICAgICAgICAgPSAn
c2R3bicsCisKKyAgICBIQU5ETEVfTE9BRF9VUkwgICAgICAgICAgICAgICAgICAgICAgICA9ICds
dXJsJywKKyAgICBIQU5ETEVfR09fQkFDSyAgICAgICAgICAgICAgICAgICAgICAgID0gJ2JhY2sn
LAorICAgIEhBTkRMRV9HT19GT1JXQVJEICAgICAgICAgICAgICAgICAgICA9ICdmd3JkJywKKwor
ICAgIEhBTkRMRV9EUkFXICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJ2RyYXcnLAorCisg
ICAgSEFORExFX0ZSQU1FX1JFU0laRUQgICAgICAgICAgICAgICAgPSAncnN6ZCcKK307CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvKnN0YXRpYyovIHZvaWQgV2ViUHJvY2Vzczo6aW5p
dGlhbGl6ZU9uY2UoKQoreworICAgIFdlYkNvcmU6OkluaXRpYWxpemVMb2dnaW5nQ2hhbm5lbHNJ
Zk5lY2Vzc2FyeSgpOworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdlYkNvcmU6OkF0b21pY1N0cmluZzo6aW5pdCgp
OworICAgIFdlYkNvcmU6OkRPTVRpbWVyOjpzZXRNaW5UaW1lckludGVydmFsKDAuMDA0KTsKKyAg
ICBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKTsKK30KKworV2ViUHJvY2Vzczo6V2ViUHJvY2VzcyhX
ZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogQkhhbmRsZXIoIldlYlZpZXcgcHJvY2VzcyIpCisgICAg
LCBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fbWFpbkZyYW1lKDApCisgICAgLCBtX3BhZ2Uo
MCkKK3sKKyAgICBXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdSogZWRpdG9yQ2xpZW50ID0gbmV3
IFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1KCk7CisKKyAgICBtX3BhZ2UgPSBuZXcgV2ViQ29y
ZTo6UGFnZShuZXcgV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3UodGhpcywgd2ViVmlldyksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdlYkNvcmU6OkNvbnRleHRNZW51Q2xp
ZW50SGFpa3UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0b3JDbGllbnQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdlYkNvcmU6OkRyYWdDbGllbnRI
YWlrdSh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgV2ViQ29y
ZTo6SW5zcGVjdG9yQ2xpZW50SGFpa3UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgZWRpdG9yQ2xp
ZW50LT5zZXRQYWdlKG1fcGFnZSk7CisKKyAgICAvLyBEZWZhdWx0IHNldHRpbmdzIC0gV2Ugc2hv
dWxkIGhhdmUgV2ViVmlld1NldHRpbmdzIGNsYXNzIGZvciB0aGlzLgorICAgIFdlYkNvcmU6OlNl
dHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFnZS0+c2V0dGluZ3MoKTsKKyAgICBzZXR0aW5ncy0+c2V0
TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIHNldHRpbmdzLT5zZXRNaW5pbXVt
Rm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7
CisgICAgc2V0dGluZ3MtPnNldFNob3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7CisgICAgc2V0
dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworCisgICAgc2V0dGluZ3MtPnNldERl
ZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXpl
KDE0KTsKKworICAgIC8vIFRPRE86IEluaXQgZnJvbSBzeXN0ZW0gZm9udHMgb3IgYXBwbGljYXRp
b24gc2V0dGluZ3MuCisgICAgc2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseSgiRGVqYVZ1IFNl
cmlmIik7CisgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoIkRlamFWdSBTYW5z
Iik7CisgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgiRGVqYVZ1IFNhbnMgTW9ubyIp
OworICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkRlamFWdSBTZXJpZiIpOwor
ICAgIHNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgiVVRGLTgiKTsKK30KKwor
V2ViUHJvY2Vzczo6fldlYlByb2Nlc3MoKQoreworcHJpbnRmKCJ+V2ViUHJvY2VzcygpXG4iKTsK
KyAgICBkZWxldGUgbV9tYWluRnJhbWU7CisgICAgZGVsZXRlIG1fcGFnZTsKK30KKworLy8gI3By
YWdtYSBtYXJrIC0gcHVibGljCisKK3ZvaWQgV2ViUHJvY2Vzczo6aW5pdCgpCit7CisgICAgbV9t
YWluRnJhbWUgPSBuZXcgV2ViRnJhbWUodGhpcyk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6c2h1
dGRvd24oKQoreworcHJpbnRmKCJXZWJQcm9jZXNzOjpzaHV0ZG93bigpXG4iKTsKKyAgICBCTWVz
c2FnZSBtZXNzYWdlKEhBTkRMRV9TSFVURE9XTik7CisgICAgTG9vcGVyKCktPlBvc3RNZXNzYWdl
KCZtZXNzYWdlLCB0aGlzKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpzZXREaXNwYXRjaFRhcmdl
dChCSGFuZGxlciogaGFuZGxlcikKK3sKKyAgICBtX21haW5GcmFtZS0+c2V0RGlzcGF0Y2hUYXJn
ZXQoaGFuZGxlcik7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6bG9hZFVSTChjb25zdCBjaGFyKiB1
cmxTdHJpbmcpCit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShIQU5ETEVfTE9BRF9VUkwpOworICAg
IG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCB1cmxTdHJpbmcpOworICAgIExvb3BlcigpLT5Qb3N0
TWVzc2FnZSgmbWVzc2FnZSwgdGhpcyk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6Z29CYWNrKCkK
K3sKKyAgICBCTWVzc2FnZSBtZXNzYWdlKEhBTkRMRV9HT19CQUNLKTsKKyAgICBMb29wZXIoKS0+
UG9zdE1lc3NhZ2UoJm1lc3NhZ2UsIHRoaXMpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmdvRm9y
d2FyZCgpCit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShIQU5ETEVfR09fRk9SV0FSRCk7CisgICAg
TG9vcGVyKCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlzKTsKK30KKwordm9pZCBXZWJQcm9j
ZXNzOjpkcmF3KGNvbnN0IEJSZWN0JiB1cGRhdGVSZWN0KQoreworICAgIEJNZXNzYWdlIG1lc3Nh
Z2UoSEFORExFX0RSQVcpOworICAgIG1lc3NhZ2UuQWRkUmVjdCgidXBkYXRlIHJlY3QiLCB1cGRh
dGVSZWN0KTsKKyAgICBMb29wZXIoKS0+UG9zdE1lc3NhZ2UoJm1lc3NhZ2UsIHRoaXMpOworfQor
Cit2b2lkIFdlYlByb2Nlc3M6OmZyYW1lUmVzaXplZChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KQoreworICAgIEJNZXNzYWdlIG1lc3NhZ2UoSEFORExFX0ZSQU1FX1JFU0laRUQpOworICAgIG1l
c3NhZ2UuQWRkRmxvYXQoIndpZHRoIiwgd2lkdGgpOworICAgIG1lc3NhZ2UuQWRkRmxvYXQoImhl
aWdodCIsIGhlaWdodCk7CisgICAgTG9vcGVyKCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlz
KTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjptb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBfbWVz
c2FnZSwKKyAgICBjb25zdCBCUG9pbnQmIHdoZXJlLCBjb25zdCBCUG9pbnQmIHNjcmVlbldoZXJl
KQoreworICAgIEJNZXNzYWdlIG1lc3NhZ2UoKl9tZXNzYWdlKTsKKyAgICBMb29wZXIoKS0+UG9z
dE1lc3NhZ2UoJm1lc3NhZ2UsIHRoaXMpOworfQorCit2b2lkIFdlYlByb2Nlc3M6Om1vdXNlV2hl
ZWxDaGFuZ2VkKGNvbnN0IEJNZXNzYWdlKiBfbWVzc2FnZSwKKyAgICBjb25zdCBCUG9pbnQmIHdo
ZXJlLCBjb25zdCBCUG9pbnQmIHNjcmVlbldoZXJlKQoreworICAgIEJNZXNzYWdlIG1lc3NhZ2Uo
Kl9tZXNzYWdlKTsKKyAgICBtZXNzYWdlLkFkZFBvaW50KCJiZTp2aWV3X3doZXJlIiwgd2hlcmUp
OworICAgIG1lc3NhZ2UuQWRkUG9pbnQoInNjcmVlbl93aGVyZSIsIHNjcmVlbldoZXJlKTsKKyAg
ICBtZXNzYWdlLkFkZEludDMyKCJtb2RpZmllcnMiLCBtb2RpZmllcnMoKSk7CisgICAgTG9vcGVy
KCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlzKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpr
ZXlFdmVudChjb25zdCBCTWVzc2FnZSogX21lc3NhZ2UpCit7CisgICAgQk1lc3NhZ2UgbWVzc2Fn
ZSgqX21lc3NhZ2UpOworICAgIExvb3BlcigpLT5Qb3N0TWVzc2FnZSgmbWVzc2FnZSwgdGhpcyk7
Cit9CisKKy8vICNwcmFnbWEgbWFyayAtIENocm9tZUNsaWVudE1ldGhvZHMKKworQlJlY3QgV2Vi
UHJvY2Vzczo6Y29udGVudHNTaXplKCkKK3sKKyAgICByZXR1cm4gQlJlY3QoQl9PUklHSU4sIG1f
bWFpbkZyYW1lLT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzU2l6ZSgpKTsKK30KKworQlJlY3Qg
V2ViUHJvY2Vzczo6d2luZG93Qm91bmRzKCkKK3sKKyAgICBCUmVjdCBib3VuZHM7CisgICAgaWYg
KG1fd2ViVmlldy0+TG9ja0xvb3BlcigpKSB7CisgICAgICAgIGJvdW5kcyA9IG1fd2ViVmlldy0+
V2luZG93KCktPkJvdW5kcygpOworICAgICAgICBtX3dlYlZpZXctPlVubG9ja0xvb3BlcigpOwor
ICAgIH0KKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFdlYlByb2Nlc3M6OnNldFdpbmRv
d0JvdW5kcyhjb25zdCBCUmVjdCYgYm91bmRzKQoreworICAgIGlmIChtX3dlYlZpZXctPkxvY2tM
b29wZXIoKSkgeworICAgICAgICBtX3dlYlZpZXctPldpbmRvdygpLT5Nb3ZlVG8oYm91bmRzLkxl
ZnRUb3AoKSk7CisgICAgICAgIG1fd2ViVmlldy0+V2luZG93KCktPlJlc2l6ZVRvKGJvdW5kcy5X
aWR0aCgpLCBib3VuZHMuSGVpZ2h0KCkpOworICAgICAgICBtX3dlYlZpZXctPlVubG9ja0xvb3Bl
cigpOworICAgIH0KK30KKworQlJlY3QgV2ViUHJvY2Vzczo6dmlld0JvdW5kcygpCit7CisgICAg
QlJlY3QgYm91bmRzOworICAgIGlmIChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgeworICAgICAg
ICBib3VuZHMgPSBtX3dlYlZpZXctPkJvdW5kcygpOworICAgICAgICBtX3dlYlZpZXctPlVubG9j
a0xvb3BlcigpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFdlYlByb2Nl
c3M6OnNldFZpZXdCb3VuZHMoY29uc3QgQlJlY3QmIGJvdW5kcykKK3sKKyAgICBpZiAobV93ZWJW
aWV3LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAgICAgLy8gVE9ETzogSW1wbGVtZW50IHRoaXMgd2l0
aCBsYXlvdXQgbWFuYWdlbWVudCwgaS5lLiBTZXRFeHBsaWNpdE1pblNpemUoKSBvciBzb21ldGhp
bmcuLi4KKyAgICAgICAgbV93ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsKKyAgICB9Cit9CisKK0JT
dHJpbmcgV2ViUHJvY2Vzczo6bWFpbkZyYW1lVGl0bGUoKQoreworICAgIHJldHVybiBtX21haW5G
cmFtZS0+dGl0bGUoKTsKK30KKworQlN0cmluZyBXZWJQcm9jZXNzOjptYWluRnJhbWVVUkwoKQor
eworICAgIHJldHVybiBtX21haW5GcmFtZS0+dXJsKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6
cGFpbnQoY29uc3QgQlJlY3QmIHJlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRp
YXRlLAorICAgIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQoreworICAgIC8vIE5PVEU6IG1fbWFp
bkZyYW1lIGNhbiBiZSAwIGJlY2F1c2UgaW5pdCgpIGV2ZW50dWFsbHkgZW5kcyB1cCBjYWxsaW5n
CisgICAgLy8gcGFpbnQoKSEgV2ViRnJhbWUgc2VlbXMgdG8gY2F1c2UgYW4gaW5pdGlhbCBwYWdl
IHRvIGJlIGxvYWRlZCwgbWF5YmUKKyAgICAvLyB0aGlzIG91Z2h0IHRvIGJlIGF2b2lkZWQgYWxz
byBmb3Igc3RhcnQtdXAgc3BlZWQgcmVhc29ucyEKKyAgICBpZiAoIW1fbWFpbkZyYW1lKQorICAg
ICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmZy
YW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKwor
ICAgIGlmICghdmlldyB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIW1fd2ViVmlldy0+TG9ja0xvb3BlcigpKQorICAgICAgICByZXR1cm47
CisgICAgQlZpZXcqIG9mZnNjcmVlblZpZXcgPSBtX3dlYlZpZXctPm9mZnNjcmVlblZpZXcoKTsK
KworICAgIC8vIExvY2sgdGhlIG9mZnNjcmVlbiBiaXRtYXAgd2hpbGUgd2Ugc3RpbGwgaGF2ZSB0
aGUKKyAgICAvLyB3aW5kb3cgbG9ja2VkLiBUaGlzIGNhbm5vdCBkZWFkbG9jayBhbmQgbWFrZXMg
c3VyZQorICAgIC8vIHRoZSB3aW5kb3cgaXMgbm90IGRlbGV0aW5nIHRoZSBvZmZzY3JlZW4gdmll
dyByaWdodAorICAgIC8vIGFmdGVyIHdlIHVubG9jayBpdCBhbmQgYmVmb3JlIGxvY2tpbmcgdGhl
IGJpdG1hcC4KKyAgICBvZmZzY3JlZW5WaWV3LT5Mb2NrTG9vcGVyKCk7CisgICAgbV93ZWJWaWV3
LT5VbmxvY2tMb29wZXIoKTsKKworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBjb250ZXh0
KG9mZnNjcmVlblZpZXcpOworCisgICAgLy9wcmludGYoInJlY3Q6XHRcdFx0Iik7CisgICAgLy9y
ZWN0LlByaW50VG9TdHJlYW0oKTsKKyAgICAvL3ByaW50ZigidmlzaWJsZUNvbnRlbnRSZWN0Olx0
Iik7CisgICAgLy9CUmVjdCh2aWV3LT52aXNpYmxlQ29udGVudFJlY3QoKSkuUHJpbnRUb1N0cmVh
bSgpOworCisgICAgdmlldy0+bGF5b3V0SWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICBvZmZzY3Jl
ZW5WaWV3LT5QdXNoU3RhdGUoKTsKKyAgICB2aWV3LT5wYWludCgmY29udGV4dCwgSW50UmVjdChy
ZWN0KSk7CisgICAgb2Zmc2NyZWVuVmlldy0+UG9wU3RhdGUoKTsKKyAgICBvZmZzY3JlZW5WaWV3
LT5VbmxvY2tMb29wZXIoKTsKKworICAgIC8vIE5vdGlmeSB0aGUgd2luZG93IHRoYXQgaXQgY2Fu
IG5vdyBwdWxsIHRoZSBiaXRtYXAgaW4gaXRzIG93biB0aHJlYWQKKyAgICBtX3dlYlZpZXctPnNl
dE9mZnNjcmVlblZpZXdDbGVhbihyZWN0LCBpbW1lZGlhdGUpOworfQorCisvLyAjcHJhZ21hIG1h
cmsgLSBwcml2YXRlCisKK3ZvaWQgV2ViUHJvY2Vzczo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdl
KiBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hhdCkgeworICAgICAgICBjYXNl
IEhBTkRMRV9TSFVURE9XTjoKK3ByaW50ZigiSEFORExFX1NIVVRET1dOXG4iKTsKKyAgICAgICAg
ICAgIExvb3BlcigpLT5SZW1vdmVIYW5kbGVyKHRoaXMpOworICAgICAgICAgICAgZGVsZXRlIHRo
aXM7CisgICAgICAgICAgICAvLyBUT0FTVCEKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Y2FzZSBIQU5ETEVfTE9BRF9VUkw6CisgICAgICAgICAgICBoYW5kbGVMb2FkVVJMKG1lc3NhZ2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSEFORExFX0dPX0JBQ0s6CisgICAg
ICAgICAgICBoYW5kbGVHb0JhY2sobWVzc2FnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBIQU5ETEVfR09fRk9SV0FSRDoKKyAgICAgICAgICAgIGhhbmRsZUdvRm9yd2FyZCht
ZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSEFORExFX0RSQVc6
IHsKKyAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAgICAgICAgICAgQk1lc3NhZ2VR
dWV1ZSogcXVldWUgPSBMb29wZXIoKS0+TWVzc2FnZVF1ZXVlKCk7CisgICAgICAgICAgICBCUmVj
dCB1cGRhdGVSZWN0OworICAgICAgICAgICAgbWVzc2FnZS0+RmluZFJlY3QoInVwZGF0ZSByZWN0
IiwgJnVwZGF0ZVJlY3QpOworICAgICAgICAgICAgd2hpbGUgKEJNZXNzYWdlKiBuZXh0TWVzc2Fn
ZSA9IHF1ZXVlLT5GaW5kTWVzc2FnZShtZXNzYWdlLT53aGF0KSkgeworICAgICAgICAgICAgICAg
IGlmICghZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1lc3NhZ2U7CisgICAg
ICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBuZXh0TWVzc2FnZTsKKyAgICAg
ICAgICAgICAgICBxdWV1ZS0+UmVtb3ZlTWVzc2FnZShtZXNzYWdlKTsKKworICAgICAgICAgICAg
ICAgIEJSZWN0IHJlY3Q7CisgICAgICAgICAgICAgICAgbWVzc2FnZS0+RmluZFJlY3QoInVwZGF0
ZSByZWN0IiwgJnJlY3QpOworICAgICAgICAgICAgICAgIHVwZGF0ZVJlY3QgPSB1cGRhdGVSZWN0
IHwgcmVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhaW50KHVwZGF0ZVJlY3QsIHRy
dWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgSEFORExFX0ZSQU1FX1JFU0laRUQ6CisgICAgICAgICAgICBza2lwVG9MYXN0TWVzc2Fn
ZShtZXNzYWdlKTsKKyAgICAgICAgICAgIGhhbmRsZUZyYW1lUmVzaXplZChtZXNzYWdlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQl9NT1VTRV9NT1ZFRDoKKyAgICAgICAg
ICAgIHNraXBUb0xhc3RNZXNzYWdlKG1lc3NhZ2UpOworICAgICAgICBjYXNlIEJfTU9VU0VfRE9X
TjoKKyAgICAgICAgY2FzZSBCX01PVVNFX1VQOgorICAgICAgICAgICAgaGFuZGxlTW91c2VFdmVu
dChtZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJfTU9VU0VfV0hF
RUxfQ0hBTkdFRDoKKyAgICAgICAgICAgIGhhbmRsZU1vdXNlV2hlZWxDaGFuZ2VkKG1lc3NhZ2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQl9LRVlfRE9XTjoKKyAgICAgICAg
Y2FzZSBCX0tFWV9VUDoKKyAgICAgICAgICAgIGhhbmRsZUtleUV2ZW50KG1lc3NhZ2UpOworICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEJIYW5kbGVy
OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgfQorfQorCit2b2lkIFdlYlByb2Nlc3M6
OnNraXBUb0xhc3RNZXNzYWdlKEJNZXNzYWdlKiYgbWVzc2FnZSkKK3sKKyAgICBib29sIGZpcnN0
ID0gdHJ1ZTsKKyAgICBCTWVzc2FnZVF1ZXVlKiBxdWV1ZSA9IExvb3BlcigpLT5NZXNzYWdlUXVl
dWUoKTsKKyAgICB3aGlsZSAoQk1lc3NhZ2UqIG5leHRNZXNzYWdlID0gcXVldWUtPkZpbmRNZXNz
YWdlKG1lc3NhZ2UtPndoYXQpKSB7CisgICAgICAgIGlmICghZmlyc3QpCisgICAgICAgICAgICBk
ZWxldGUgbWVzc2FnZTsKKyAgICAgICAgbWVzc2FnZSA9IG5leHRNZXNzYWdlOworICAgICAgICBx
dWV1ZS0+UmVtb3ZlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6aGFuZGxlTG9hZFVSTChjb25zdCBCTWVzc2FnZSog
bWVzc2FnZSkKK3sKKyAgICBjb25zdCBjaGFyKiB1cmxTdHJpbmc7CisgICAgaWYgKG1lc3NhZ2Ut
PkZpbmRTdHJpbmcoInVybCIsICZ1cmxTdHJpbmcpICE9IEJfT0spCisgICAgICAgIHJldHVybjsK
KworICAgIG1fbWFpbkZyYW1lLT5sb2FkUmVxdWVzdCh1cmxTdHJpbmcpOworfQorCit2b2lkIFdl
YlByb2Nlc3M6OmhhbmRsZUdvQmFjayhjb25zdCBCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBt
X21haW5GcmFtZS0+Z29CYWNrKCk7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6aGFuZGxlR29Gb3J3
YXJkKGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1fbWFpbkZyYW1lLT5nb0Zvcndh
cmQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVEcmF3KGNvbnN0IEJNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIEJSZWN0IHJlY3Q7CisgICAgbWVzc2FnZS0+RmluZFJlY3QoInVwZGF0
ZSByZWN0IiwgJnJlY3QpOworICAgIHBhaW50KHJlY3QsIHRydWUsIGZhbHNlLCB0cnVlKTsKK30K
Kwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVGcmFtZVJlc2l6ZWQoY29uc3QgQk1lc3NhZ2UqIG1l
c3NhZ2UpCit7CisgICAgZmxvYXQgd2lkdGg7CisgICAgZmxvYXQgaGVpZ2h0OworICAgIG1lc3Nh
Z2UtPkZpbmRGbG9hdCgid2lkdGgiLCAmd2lkdGgpOworICAgIG1lc3NhZ2UtPkZpbmRGbG9hdCgi
aGVpZ2h0IiwgJmhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX21haW5G
cmFtZS0+ZnJhbWUoKTsKKworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZSh3aWR0aCArIDEsIGhl
aWdodCArIDEpOworICAgIGZyYW1lLT52aWV3KCktPmZvcmNlTGF5b3V0KCk7CisgICAgZnJhbWUt
PnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKworICAgIG1fd2ViVmlldy0+aW52YWxpZGF0ZSgp
OworfQorCit2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZU1vdXNlRXZlbnQoY29uc3QgQk1lc3NhZ2Uq
IG1lc3NhZ2UpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gbV9tYWluRnJhbWUtPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZS0+dmlldygpIHx8ICFmcmFtZS0+ZG9jdW1lbnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KG1lc3NhZ2UpOwor
ICAgIHN3aXRjaCAobWVzc2FnZS0+d2hhdCkgeworICAgICAgICBjYXNlIEJfTU9VU0VfRE9XTjoK
KyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50
KGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJfTU9VU0VfVVA6Cisg
ICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50
KGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJfTU9VU0VfTU9WRUQ6
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhh
bmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVNb3VzZVdoZWVsQ2hhbmdlZChCTWVzc2FnZSogbWVz
c2FnZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+ZnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQobWVzc2FnZSk7CisgICAg
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKKworICAgIC8v
IFRPRE86IFdoeSBkb2VzIHRoaXMgbm90IHRyaWdnZXIgYSByZXBhaW50IGF1dG9tYXRpY2FsbHk/
CisvLyAgICBtX3dlYlZpZXctPmludmFsaWRhdGUoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpo
YW5kbGVLZXlFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBtX21haW5GcmFtZS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkgfHwg
IWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQgZXZlbnQobWVzc2FnZSk7CisgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChldmVudCk7CisKKyAgICAvLyBUT0RPOiBXaHkgZG9lcyB0aGlzIG5vdCB0cmlnZ2VyIGEg
cmVwYWludCBhdXRvbWF0aWNhbGx5PworLy8gICAgbV93ZWJWaWV3LT5pbnZhbGlkYXRlKCk7Cit9
CisKSW5kZXg6IGhhaWt1L0FQSS9XZWJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGhhaWt1L0FQSS9X
ZWJGcmFtZS5oCShyZXZpc2lvbiAwKQorKysgaGFpa3UvQVBJL1dlYkZyYW1lLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBT
aW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVw
aGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworCisjaWZuZGVmIFdlYkZyYW1lX2gKKyNkZWZpbmUgV2ViRnJhbWVfaAorCisj
aW5jbHVkZSAiV2ViRnJhbWVQcml2YXRlLmgiCisKKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworY2xh
c3MgQkhhbmRsZXI7CitjbGFzcyBXZWJGcmFtZURhdGE7CitjbGFzcyBXZWJQcm9jZXNzOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7CisgICAgY2xhc3MgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTsKKyAgICBjbGFzcyBLVVJMOworfQorCitjbGFzcyBXZWJGcmFtZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBXZWJGcmFtZShXZWJQcm9jZXNzKik7CisgICAgICAgIHZpcnR1
YWwgfldlYkZyYW1lKCk7CisKKyAgICAgICAgdm9pZCBzZXREaXNwYXRjaFRhcmdldChCSGFuZGxl
ciogaGFuZGxlcik7CisKKyAgICAgICAgdm9pZCBsb2FkUmVxdWVzdChCU3RyaW5nIHVybCk7Cisg
ICAgICAgIHZvaWQgbG9hZFJlcXVlc3QoV2ViQ29yZTo6S1VSTCk7CisKKyAgICAgICAgdm9pZCBz
dG9wTG9hZGluZygpOworICAgICAgICB2b2lkIHJlbG9hZCgpOworCisgICAgICAgIGJvb2wgY2Fu
R29CYWNrKCk7CisgICAgICAgIGJvb2wgY2FuR29Gb3J3YXJkKCk7CisKKyAgICAgICAgYm9vbCBn
b0JhY2soKTsKKyAgICAgICAgYm9vbCBnb0ZvcndhcmQoKTsKKworICAgICAgICBib29sIGNhbkNv
cHkoKTsKKyAgICAgICAgYm9vbCBjYW5DdXQoKTsKKyAgICAgICAgYm9vbCBjYW5QYXN0ZSgpOwor
CisgICAgICAgIHZvaWQgY29weSgpOworICAgICAgICB2b2lkIGN1dCgpOworICAgICAgICB2b2lk
IHBhc3RlKCk7CisKKyAgICAgICAgYm9vbCBjYW5VbmRvKCk7CisgICAgICAgIGJvb2wgY2FuUmVk
bygpOworCisgICAgICAgIHZvaWQgdW5kbygpOworICAgICAgICB2b2lkIHJlZG8oKTsKKworICAg
ICAgICBib29sIGFsbG93c1Njcm9sbGluZygpOworICAgICAgICB2b2lkIHNldEFsbG93c1Njcm9s
bGluZyhib29sKTsKKworICAgICAgICBjb25zdCBjaGFyKiBnZXRQYWdlU291cmNlKCk7CisgICAg
ICAgIHZvaWQgc2V0UGFnZVNvdXJjZShjb25zdCBjaGFyKiBzb3VyY2UpOworCisgICAgICAgIHZv
aWQgc2V0VHJhbnNwYXJlbnQoYm9vbCk7CisgICAgICAgIGJvb2wgaXNUcmFuc3BhcmVudCgpIGNv
bnN0OworCisgICAgICAgIEJTdHJpbmcgZ2V0SW5uZXJUZXh0KCk7CisgICAgICAgIEJTdHJpbmcg
Z2V0QXNNYXJrdXAoKTsKKyAgICAgICAgQlN0cmluZyBnZXRFeHRlcm5hbFJlcHJlc2VudGF0aW9u
KCk7CisKKyAgICAgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgYm9vbCBm
b3J3YXJkID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgY2FzZVNlbnNpdGl2
ZSA9IGZhbHNlLCBib29sIHdyYXBTZWxlY3Rpb24gPSB0cnVlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBzdGFydEluU2VsZWN0aW9uID0gdHJ1ZSk7CisKKyAgICAgICAgYm9vbCBjYW5J
bmNyZWFzZVRleHRTaXplKCkgY29uc3Q7CisgICAgICAgIGJvb2wgY2FuRGVjcmVhc2VUZXh0U2l6
ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgaW5jcmVhc2VUZXh0U2l6ZSgpOworICAgICAgICB2
b2lkIGRlY3JlYXNlVGV4dFNpemUoKTsKKworICAgICAgICB2b2lkIHJlc2V0VGV4dFNpemUoKTsK
KworICAgICAgICB2b2lkIG1ha2VFZGl0YWJsZShib29sIGVkaXRhYmxlKSB7IG1faXNFZGl0YWJs
ZSA9IGVkaXRhYmxlOyB9CisgICAgICAgIGJvb2wgaXNFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNFZGl0YWJsZTsgfQorCisgICAgICAgIEJTdHJpbmcgdGl0bGUoKSBjb25zdCB7IHJldHVy
biBtX3RpdGxlOyB9CisgICAgICAgIHZvaWQgc2V0VGl0bGUoQlN0cmluZyB0aXRsZSkgeyBtX3Rp
dGxlID0gdGl0bGU7IH0KKworICAgICAgICBCU3RyaW5nIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1wbC0+ZnJhbWUtPmxvYWRlcigpLT51cmwoKS5zdHJpbmcoKTsgfQorCisgICAgICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZmxvYXQgbV90ZXh0
TWFnbmlmaWVyOworICAgICAgICBib29sIG1faXNFZGl0YWJsZTsKKyAgICAgICAgYm9vbCBtX2Jl
aW5nRGVzdHJveWVkOworCisgICAgICAgIFdlYkZyYW1lUHJpdmF0ZSogbV9pbXBsOworICAgICAg
ICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KiBtX2xvYWRlckNsaWVudDsKKyAgICAg
ICAgQlN0cmluZyBtX3RpdGxlOworfTsKKworI2VuZGlmIC8vIFdlYkZyYW1lX2gKSW5kZXg6IGhh
aWt1L0FQSS9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaGFpa3UvQVBJL1dlYlZpZXcuaAkocmV2
aXNpb24gMCkKKysrIGhhaWt1L0FQSS9XZWJWaWV3LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTExIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4
aW1lQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3Vw
ZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIFdlYlZpZXdfaAorI2RlZmluZSBXZWJWaWV3X2gKKworI2luY2x1ZGUgPFN0cmluZy5o
PgorI2luY2x1ZGUgPFZpZXcuaD4KKworY2xhc3MgV2ViUHJvY2VzczsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIGNsYXNzIFN0cmluZzsKK307CisKK2NsYXNzIFdlYlZpZXcgOiBwdWJsaWMg
QlZpZXcgeworcHVibGljOgorICAgIFdlYlZpZXcoY29uc3QgY2hhciogbmFtZSk7CisgICAgfldl
YlZpZXcoKTsKKworICAgIHZpcnR1YWwgdm9pZCBBdHRhY2hlZFRvV2luZG93KCk7CisgICAgdmly
dHVhbCB2b2lkIERldGFjaGVkRnJvbVdpbmRvdygpOworCisgICAgdmlydHVhbCB2b2lkIERyYXco
QlJlY3QpOworICAgIHZpcnR1YWwgdm9pZCBGcmFtZVJlc2l6ZWQoZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCk7CisgICAgdmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSopOwor
CisgICAgdmlydHVhbCB2b2lkIE1vdXNlTW92ZWQoQlBvaW50LCB1aW50MzIsIGNvbnN0IEJNZXNz
YWdlKik7CisgICAgdmlydHVhbCB2b2lkIE1vdXNlRG93bihCUG9pbnQpOworICAgIHZpcnR1YWwg
dm9pZCBNb3VzZVVwKEJQb2ludCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgS2V5RG93bihjb25zdCBj
aGFyKiwgaW50MzIpOworICAgIHZpcnR1YWwgdm9pZCBLZXlVcChjb25zdCBjaGFyKiwgaW50MzIp
OworCisgICAgV2ViUHJvY2Vzcyogd2ViUHJvY2VzcygpIGNvbnN0IHsgcmV0dXJuIG1fbWFpblRo
cmVhZEhhbmRsZXI7IH0KKworICAgIHZvaWQgc2V0Qm91bmRzKEJSZWN0KTsKKyAgICBCUmVjdCBj
b250ZW50c1NpemUoKSBjb25zdDsKKworICAgIEJTdHJpbmcgbWFpbkZyYW1lVGl0bGUoKSBjb25z
dDsKKyAgICBCU3RyaW5nIG1haW5GcmFtZVVSTCgpIGNvbnN0OworCisgICAgdm9pZCBsb2FkUmVx
dWVzdChjb25zdCBjaGFyKiB1cmxTdHJpbmcpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9p
ZCBnb0ZvcndhcmQoKTsKKworICAgIHZvaWQgc2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpOworICAg
IGJvb2wgYXJlVG9vbGJhcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90b29sYmFyc1Zpc2li
bGU7IH0KKworICAgIHZvaWQgc2V0U3RhdHVzYmFyVmlzaWJsZShib29sKTsKKyAgICBib29sIGlz
U3RhdHVzYmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzYmFyVmlzaWJsZTsgfQor
CisgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sKTsKKyAgICBib29sIGlzTWVudWJhclZp
c2libGUoKSBjb25zdCB7IHJldHVybiBtX21lbnViYXJWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNl
dFJlc2l6YWJsZShib29sKTsKKyAgICB2b2lkIGNsb3NlV2luZG93KCk7CisgICAgdm9pZCBzZXRT
dGF0dXNUZXh0KGNvbnN0IEJTdHJpbmcmKTsKKyAgICB2b2lkIGxpbmtIb3ZlcmVkKGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYsIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYsCisgICAgICAgIGNvbnN0IFdl
YkNvcmU6OlN0cmluZyYpOworCisgICAgQlZpZXcqIG9mZnNjcmVlblZpZXcoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNjcmVlblZpZXc7IH0KKyAgICB2b2lkIHNldE9mZnNjcmVlblZpZXdDbGVhbihC
UmVjdCBjbGVhblJlY3QsIGJvb2wgaW1tZWRpYXRlKTsKKyAgICB2b2lkIGludmFsaWRhdGUoKTsK
KyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCByZXNpemVPZmZzY3JlZW5WaWV3KGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisgICAgdm9pZCBkaXNwYXRjaE1vdXNlRXZlbnQoY29uc3QgQlBvaW50JiB3
aGVyZSwgdWludDMyIHNhbml0eVdoYXQpOworICAgIHZvaWQgZGlzcGF0Y2hLZXlFdmVudCh1aW50
MzIgc2FuaXR5V2hhdCk7CisKK3ByaXZhdGU6CisgICAgZmxvYXQgbV90ZXh0TWFnbmlmaWVyOwor
CisgICAgYm9vbCBtX3Rvb2xiYXJzVmlzaWJsZTsKKyAgICBib29sIG1fc3RhdHVzYmFyVmlzaWJs
ZTsKKyAgICBib29sIG1fbWVudWJhclZpc2libGU7CisKKyAgICBCQml0bWFwKiBtX29mZnNjcmVl
bkJpdG1hcDsKKyAgICBCVmlldyogbV9vZmZzY3JlZW5WaWV3OworICAgIGJvb2wgbV9vZmZzY3Jl
ZW5WaWV3Q2xlYW47CisKKyAgICBXZWJQcm9jZXNzKiBtX21haW5UaHJlYWRIYW5kbGVyOworfTsK
KworI2VuZGlmIC8vIFdlYlZpZXdfaAo=
</data>
<flag name="review"
          id="30646"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48038</attachid>
            <date>2010-02-03 08:35:04 -0800</date>
            <delta_ts>2010-02-04 00:06:17 -0800</delta_ts>
            <desc>Various fixes to mouse/wheel/keyboard event propagation on Haiku</desc>
            <filename>events.diff</filename>
            <type>text/plain</type>
            <size>6632</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAkocmV2aXNpb24g
NTQyNzUpCisrKyBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0j
aW5jbHVkZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZl
bnQuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIApAQCAtNTYsNyArNTUsNyBAQAogICAg
ICAgICAmJiAoZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50CiAgICAg
ICAgICAgICB8fCBldmVudC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2ZW50KQog
ICAgICAgICAmJiBldmVudC0+YWx0S2V5KCkKLSAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZp
ZXIoKSA9PSAiVSswMDAwMDkiOworICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmllcigpID09
ICJVKzAwMDkiOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6aW52ZXJ0U2Vuc2VPZlRhYnNUb0xp
bmtzKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3
IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0yOSwyMSArMzAsMTcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAorI2luY2x1ZGUgPEludGVy
ZmFjZURlZnMuaD4KICNpbmNsdWRlIDxNZXNzYWdlLmg+Ci0jaW5jbHVkZSA8U3VwcG9ydERlZnMu
aD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZv
cm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQotICAgIDogbV90aW1lc3RhbXAo
bWVzc2FnZS0+RmluZEludDY0KCJ3aGVuIikpCi0gICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KG1l
c3NhZ2UtPkZpbmRQb2ludCgid2hlcmUiKSkpCi0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3Nh
Z2UtPkZpbmRQb2ludCgiZ2xvYmFsUG9zaXRpb24iKSkKLSAgICAsIG1fc2hpZnRLZXkoZmFsc2Up
Ci0gICAgLCBtX2N0cmxLZXkoZmFsc2UpCi0gICAgLCBtX2FsdEtleShmYWxzZSkKLSAgICAsIG1f
bWV0YUtleShmYWxzZSkKKyAgICA6IG1fcG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJiZTp2
aWV3X3doZXJlIikpCisgICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgi
c2NyZWVuX3doZXJlIikpCiAgICAgLCBtX2NsaWNrQ291bnQobWVzc2FnZS0+RmluZEludDMyKCJj
bGlja3MiKSkKKyAgICAsIG1fdGltZXN0YW1wKG1lc3NhZ2UtPkZpbmRJbnQ2NCgid2hlbiIpIC8g
MTAwMDAwMC4wKQogewogICAgIGludDMyIGJ1dHRvbnMgPSBtZXNzYWdlLT5GaW5kSW50MzIoImJ1
dHRvbnMiKTsKICAgICBzd2l0Y2ggKGJ1dHRvbnMpIHsKQEAgLTc2LDYgKzczLDEyIEBACiAgICAg
ICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwogICAgICAgICBicmVhazsKICAgICB9
OworCisgICAgaW50MzIgbW9kaWZpZXJzID0gbWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMi
KTsKKyAgICBtX3NoaWZ0S2V5ID0gbW9kaWZpZXJzICYgQl9TSElGVF9LRVk7CisgICAgbV9jdHJs
S2V5ID0gbW9kaWZpZXJzICYgQl9DT05UUk9MX0tFWTsKKyAgICBtX2FsdEtleSA9IG1vZGlmaWVy
cyAmIEJfQ09NTUFORF9LRVk7CisgICAgbV9tZXRhS2V5ID0gbW9kaWZpZXJzICYgQl9PUFRJT05f
S0VZOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcAkocmV2aXNpb24gNTQy
NzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAo
QykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMxLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIlNj
cm9sbGJhci5oIgogCisjaW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5oPgogI2luY2x1ZGUgPE1lc3Nh
Z2UuaD4KICNpbmNsdWRlIDxQb2ludC5oPgogCkBAIC0zOCwyNCArNDAsMjMgQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQoQk1l
c3NhZ2UqIG1lc3NhZ2UpCi0gICAgOiBtX2dyYW51bGFyaXR5KFNjcm9sbEJ5UGl4ZWxXaGVlbEV2
ZW50KQotICAgICwgbV9zaGlmdEtleShmYWxzZSkKLSAgICAsIG1fY3RybEtleShmYWxzZSkKLSAg
ICAsIG1fYWx0S2V5KGZhbHNlKQotICAgICwgbV9tZXRhS2V5KGZhbHNlKQorICAgIDogbV9wb3Np
dGlvbihtZXNzYWdlLT5GaW5kUG9pbnQoImJlOnZpZXdfd2hlcmUiKSkKKyAgICAsIG1fZ2xvYmFs
UG9zaXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJzY3JlZW5fd2hlcmUiKSkKKyAgICAsIG1fZGVs
dGFYKG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hlZWxfZGVsdGFfeCIpKQorICAgICwgbV9kZWx0
YVkobWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVlbF9kZWx0YV95IikpCisgICAgLCBtX3doZWVs
VGlja3NYKG1fZGVsdGFYKQorICAgICwgbV93aGVlbFRpY2tzWShtX2RlbHRhWSkKKyAgICAsIG1f
Z3JhbnVsYXJpdHkoU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQpCiAgICAgLCBtX2lzQWNjZXB0ZWQo
ZmFsc2UpCiB7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KG1lc3NhZ2UtPkZpbmRQb2ludCgi
cG9zaXRpb24iKSk7Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KG1lc3NhZ2UtPkZp
bmRQb2ludCgiZ2xvYmFsX3Bvc2l0aW9uIikpOwotCi0gICAgbV9kZWx0YVggPSBtZXNzYWdlLT5G
aW5kRmxvYXQoImJlOndoZWVsX2RlbHRhX3giKTsKLSAgICBtX2RlbHRhWSA9IG1lc3NhZ2UtPkZp
bmRGbG9hdCgiYmU6d2hlZWxfZGVsdGFfeSIpOwotCi0gICAgbV93aGVlbFRpY2tzWCA9IG1fZGVs
dGFYOwotICAgIG1fd2hlZWxUaWNrc1kgPSBtX2RlbHRhWTsKLQogICAgIG1fZGVsdGFYICo9IC1j
U2Nyb2xsYmFyUGl4ZWxzUGVyTGluZVN0ZXA7CiAgICAgbV9kZWx0YVkgKj0gLWNTY3JvbGxiYXJQ
aXhlbHNQZXJMaW5lU3RlcDsKKworICAgIGludDMyIG1vZGlmaWVycyA9IG1lc3NhZ2UtPkZpbmRJ
bnQzMigibW9kaWZpZXJzIik7CisgICAgbV9zaGlmdEtleSA9IG1vZGlmaWVycyAmIEJfU0hJRlRf
S0VZOworICAgIG1fY3RybEtleSA9IG1vZGlmaWVycyAmIEJfQ09OVFJPTF9LRVk7CisgICAgbV9h
bHRLZXkgPSBtb2RpZmllcnMgJiBCX0NPTU1BTkRfS0VZOworICAgIG1fbWV0YUtleSA9IG1vZGlm
aWVycyAmIEJfT1BUSU9OX0tFWTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRI
YWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0
Zm9ybUtleWJvYXJkRXZlbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBn
bWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQW5kcmVhIEFuemFuaSA8YW5kcmVhLmFu
emFuaUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1
cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI5
LDExICszMCwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5
Ym9hcmRFdmVudC5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIktleWJvYXJk
Q29kZXMuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgPEludGVyZmFj
ZURlZnMuaD4KICNpbmNsdWRlIDxNZXNzYWdlLmg+CiAjaW5jbHVkZSA8U3RyaW5nLmg+CisjaW5j
bHVkZSA8c3RkaW8uaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMDUsNyArMTA4LDcg
QEAKICAgICAgICAgcmV0dXJuICJVKzAwMDkiOwogICAgIH0KIAotICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiVSslMDRYIiwgdG9BU0NJSVVwcGVyKGtleUNvZGUpKTsKKyAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBlcihzaW5nbGVCeXRlKSk7CiB9CiAKIHN0
YXRpYyBpbnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChjaGFyIHNpbmdsZUJ5dGUpCkBAIC0x
NDEsMzIgKzE0NCwzNCBAQAogICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBr
ZXkKICAgICBjYXNlIEJfREVMRVRFOgogICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAoMkUp
IERFTCBrZXkKLSAgICBjYXNlIDB4MmU6CisKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgcmV0dXJuIHNpbmdsZUJ5dGU7CiAgICAgfQogfQogCiBQbGF0Zm9ybUtleWJv
YXJkRXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKICAgICA6
IG1fYXV0b1JlcGVhdChmYWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZmFsc2UpCisgICAgLCBtX3No
aWZ0S2V5KGZhbHNlKQogICAgICwgbV9jdHJsS2V5KGZhbHNlKQogICAgICwgbV9hbHRLZXkoZmFs
c2UpCiAgICAgLCBtX21ldGFLZXkoZmFsc2UpCi0gICAgLCBtX2lzS2V5cGFkKGZhbHNlKQotICAg
ICwgbV9zaGlmdEtleShmYWxzZSkKIHsKICAgICBCU3RyaW5nIGJ5dGVzID0gbWVzc2FnZS0+Rmlu
ZFN0cmluZygiYnl0ZXMiKTsKIAorICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgPSBtZXNzYWdl
LT5GaW5kSW50MzIoImtleSIpOworCiAgICAgbV90ZXh0ID0gU3RyaW5nOjpmcm9tVVRGOChieXRl
cy5TdHJpbmcoKSwgYnl0ZXMuTGVuZ3RoKCkpOwogICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJp
bmcoYnl0ZXMuU3RyaW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsKLSAgICBtX2tleUlkZW50aWZpZXIg
PSBrZXlJZGVudGlmaWVyRm9ySGFpa3VLZXlDb2RlKGJ5dGVzLkJ5dGVBdCgwKSwgbWVzc2FnZS0+
RmluZEludDMyKCJrZXkiKSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZv
ckhhaWt1S2V5Q29kZShieXRlcy5CeXRlQXQoMCksIG1fbmF0aXZlVmlydHVhbEtleUNvZGUpOwog
CisgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50
KGJ5dGVzLkJ5dGVBdCgwKSk7CisKICAgICBpZiAobWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9VUCkK
ICAgICAgICAgbV90eXBlID0gS2V5VXA7CiAgICAgZWxzZSBpZiAobWVzc2FnZS0+d2hhdCA9PSBC
X0tFWV9ET1dOKQogICAgICAgICBtX3R5cGUgPSBLZXlEb3duOwotCi0gICAgbV93aW5kb3dzVmly
dHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5dGVBdCgwKSk7
CiB9CiAKIHZvaWQgUGxhdGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZl
bnQoVHlwZSB0eXBlLCBib29sKQo=
</data>
<flag name="review"
          id="30647"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48039</attachid>
            <date>2010-02-03 08:39:31 -0800</date>
            <delta_ts>2010-02-03 08:45:38 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>36258</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4
IEBACiBjbGFzcyBTa1BhdGg7CiB0eXBlZGVmIFNrUGF0aCBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBQ
TEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWdpb247Ci10eXBlZGVmIEJSZWdpb24gUGxhdGZvcm1Q
YXRoOworY2xhc3MgQlNoYXBlOwordHlwZWRlZiBCU2hhcGUgUGxhdGZvcm1QYXRoOwogI2VsaWYg
T1MoV0lOQ0UpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGxhdGZvcm1QYXRoOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2aXNpb24gNTQyNzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDkgQEAKIGNsYXNzIFNrU2hhZGVyOwogdHlwZWRlZiBjbGFzcyBTa1NoYWRlciog
UGxhdGZvcm1HcmFkaWVudDsKIHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtUGF0dGVy
bjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQkdyYWRpZW50OwordHlwZWRlZiBCR3Jh
ZGllbnQqIFBsYXRmb3JtR3JhZGllbnQ7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdy
YWRpZW50OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Bh
dGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlw
cGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTUgKzMx
LDIwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+
CisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxTaGFwZS5oPgorI2lu
Y2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhdGg6OlBhdGgoKQot
ICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkpCisgICAgOiBtX3BhdGgobmV3IEJTaGFwZSgpKQog
ewogfQogCkBAIC00OCw3ICs1NCw3IEBACiB9CiAKIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3Ro
ZXIpCi0gICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKKyAg
ICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkpCiB7CiB9CiAKQEAg
LTY3LDI4ICs3MywxMjUgQEAKIAogYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRoLT5Db250
YWlucyhwb2ludCk7CisgICAgLy8gVE9ETzogVGhpcyBpcyBwcm9iYWJseSB0b28gZXhwZW5zaXZl
LiBVc2Ugb25lIGluc3RhbmNlIG9mIGEgc2NyYXRjaAorICAgIC8vIGltYWdlLgorICAgIEJCaXRt
YXAgYml0bWFwKEJSZWN0KDAsIDAsIDAsIDApLAorICAgICAgICBCX0JJVE1BUF9DTEVBUl9UT19X
SElURSB8IEJfQklUTUFQX0FDQ0VQVFNfVklFV1MsIEJfUkdCMzIpOworICAgIEJWaWV3IHZpZXco
QlJlY3QoMCwgMCwgMCwgMCksICIiLCAwLCAwKTsKKyAgICBiaXRtYXAuTG9jaygpOworICAgIGJp
dG1hcC5BZGRDaGlsZCgmdmlldyk7CisgICAgLy8gQ3VycmVudCBwZW4gbG9jYXRpb24gaXMgdXNl
ZCBhcyBvcmlnaW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgp
LCAtcG9pbnQueSgpKTsKKyAgICAvLyBUT0RPOiBIYW5kbGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1
cHBvcnQgaW4gQlZpZXcsIHRoZSBiYWNrZW5kIGFscmVhZHkKKyAgICAvLyBzdXBwb3J0IGl0LikK
KyAgICB2aWV3LkZpbGxTaGFwZShtX3BhdGgpOworICAgIHZpZXcuU3luYygpOworCisgICAgdWlu
dDgqIGJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYml0bWFwLkJpdHMoKSk7CisgICAg
Ym9vbCByZXN1bHQgPSBiaXRzWzBdIDwgMTI4OworCisgICAgdmlldy5SZW1vdmVTZWxmKCk7Cisg
ICAgYml0bWFwLlVubG9jaygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYXBwbGllcik7CisKKyAgICAvLyBUT0RP
OiBUaGlzIGlzIHByb2JhYmx5IHRvbyBleHBlbnNpdmUuIFVzZSBvbmUgaW5zdGFuY2Ugb2YgYSBz
Y3JhdGNoCisgICAgLy8gaW1hZ2UsIHNlZSBhYm92ZS4KKyAgICAvLyBUT0RPOiBDb2RlIGR1cGxp
Y2F0aW9uIGFib3ZlLgorICAgIEJCaXRtYXAgYml0bWFwKEJSZWN0KDAsIDAsIDAsIDApLAorICAg
ICAgICBCX0JJVE1BUF9DTEVBUl9UT19XSElURSB8IEJfQklUTUFQX0FDQ0VQVFNfVklFV1MsIEJf
UkdCMzIpOworICAgIEJWaWV3IHZpZXcoQlJlY3QoMCwgMCwgMCwgMCksICIiLCAwLCAwKTsKKyAg
ICBiaXRtYXAuTG9jaygpOworICAgIGJpdG1hcC5BZGRDaGlsZCgmdmlldyk7CisgICAgLy8gQ3Vy
cmVudCBwZW4gbG9jYXRpb24gaXMgdXNlZCBhcyBvcmlnaW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2
aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKKyAgICAvLyBUT0RPOiBIYW5k
bGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1cHBvcnQgaW4gQlZpZXcsIHRoZSBiYWNrZW5kIGFscmVh
ZHkKKyAgICAvLyBzdXBwb3J0IGl0LikKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmdmll
dyk7CisgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmNvbnRleHQpOworICAgIAorICAgIHZpZXcu
U3Ryb2tlU2hhcGUobV9wYXRoKTsKKyAgICB2aWV3LlN5bmMoKTsKKworICAgIHVpbnQ4KiBiaXRz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJpdG1hcC5CaXRzKCkpOworICAgIGJvb2wgcmVz
dWx0ID0gYml0c1swXSA8IDEyODsKKworICAgIHZpZXcuUmVtb3ZlU2VsZigpOworICAgIGJpdG1h
cC5VbmxvY2soKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFBhdGg6OnRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRhdGEgImluIHBs
YWNlIgorICAgIGNsYXNzIFRyYW5zbGF0ZUl0ZXJhdG9yIDogcHVibGljIEJTaGFwZUl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zbGF0ZUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUs
IGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2
aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVNb3ZlVG8oQlBvaW50KiBwb2ludCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcG9pbnQtPnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxp
bmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgbGluZVB0cy0+eCAr
PSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzLT55ICs9IG1fc2l6ZS5o
ZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzKys7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVz
X3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJlemllckNvdW50LCBCUG9pbnQqIGJlemllclB0cykK
KyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGJlemllckNvdW50LS0pIHsKKyAgICAgICAg
ICAgICAgICBiZXppZXJQdHNbMF0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAg
ICBiZXppZXJQdHNbMF0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYmV6
aWVyUHRzWzFdLnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRz
WzFdLnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXS54
ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXS55ICs9IG1f
c2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHMgKz0gMzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQlNoYXBlKiBtX3No
YXBlOworICAgICAgICBjb25zdCBGbG9hdFNpemUmIG1fc2l6ZTsKKyAgICB9IHRyYW5zbGF0ZUl0
ZXJhdG9yKG1fcGF0aCwgc2l6ZSk7CisKKyAgICB0cmFuc2xhdGVJdGVyYXRvci5JdGVyYXRlKG1f
cGF0aCk7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewotICAg
IHJldHVybiBtX3BhdGgtPkZyYW1lKCk7CisgICAgcmV0dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9
CiAKIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIC8v
IEZJWE1FOiBVc2UgT2Zmc2V0Qnk/Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVjdCBi
b3VuZHMgPSBtX3BhdGgtPkJvdW5kcygpOworICAgIHRyYW5zbGF0ZShGbG9hdFNpemUocG9pbnQu
eCgpIC0gYm91bmRzLmxlZnQsIHBvaW50LnkoKSAtIGJvdW5kcy50b3ApKTsKIH0KIAogdm9pZCBQ
YXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIG1fcGF0aC0+TGluZVRvKHApOwogfQogCiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQpAQCAtOTgsNyAr
MjAxLDExIEBACiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50
JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBwb2ludHNbM107CisgICAgcG9pbnRzWzBd
ID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNwMjsKKyAgICBwb2ludHNbMl0gPSBwOworICAgIG1f
cGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBG
bG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKQEAgLTEw
OCw3ICsyMTUsNyBAQAogCiB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJj
KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29s
IGFudGljbG9ja3dpc2UpCkBAIC0xMTgsNyArMjI1LDEyIEBACiAKIHZvaWQgUGF0aDo6YWRkUmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgbV9wYXRoLT5JbmNsdWRlKHIpOworICAgIG1f
cGF0aC0+Q2xvc2UoKTsKKyAgICBtX3BhdGgtPk1vdmVUbyhCUG9pbnQoci54KCksIHIueSgpKSk7
CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCByLnkoKSkpOwor
ICAgIG1fcGF0aC0+TGluZVRvKEJQb2ludChyLngoKSArIHIud2lkdGgoKSwgci55KCkgKyByLmhl
aWdodCgpKSk7CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgpLCByLnkoKSArIHIuaGVp
Z2h0KCkpKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHIpCkBAIC0xMjgsMTIgKzI0MCwxMiBAQAogCiB2b2lkIFBhdGg6
OmNsZWFyKCkKIHsKLSAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworICAgIG1fcGF0aC0+Q2xlYXIo
KTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGF0
aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7CisgICAgcmV0dXJuICFtX3BhdGgtPkJvdW5kcygpLklzVmFs
aWQoKTsKIH0KIAogU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKQEAgLTE0OSwxOCAr
MjYxLDEwNiBAQAogCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJh
dG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xh
c3MgVHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgICAgICA6IG1fc2hhcGUoc2hhcGUpCisgICAg
ICAgICAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBvaW50KQorICAg
ICAgICB7CisgICAgICAgICAgICAqcG9pbnQgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqcG9pbnQp
OworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50LCBCUG9pbnQqIGxpbmVQdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291bnQtLSkgeworICAgICAgICAg
ICAgICAgICpsaW5lUHRzID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoKmxpbmVQdHMpOworICAgICAg
ICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBC
X09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVy
VG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0
c1swXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1swXSk7CisgICAgICAgICAgICAg
ICAgYmV6aWVyUHRzWzFdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzFdKTsKKyAg
ICAgICAgICAgICAgICBiZXppZXJQdHNbMl0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQ
dHNbMl0pOworICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAzOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0
YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCX09L
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBCU2hhcGUqIG1fc2hhcGU7Cisg
ICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbV90cmFuc2Zvcm07CisgICAgfSB0cmFuc2Zv
cm1JdGVyYXRvcihtX3BhdGgsIHRyYW5zZm9ybSk7CisKKyAgICB0cmFuc2Zvcm1JdGVyYXRvci5J
dGVyYXRlKG1fcGF0aCk7CiB9CiAKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRhdGEgImluIHBs
YWNlIgorICAgIGNsYXNzIFRyYW5zZm9ybUl0ZXJhdG9yIDogcHVibGljIEJTaGFwZUl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zZm9ybUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCisgICAgICAgICAgICA6IG1f
c2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhC
UG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICAqcG9pbnQgPSBtX3RyYW5zZm9y
bS5tYXBQb2ludCgqcG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50
LCBCUG9pbnQqIGxpbmVQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291
bnQtLSkgeworICAgICAgICAgICAgICAgICpsaW5lUHRzID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQo
KmxpbmVQdHMpOworICAgICAgICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0
dXNfdCBJdGVyYXRlQmV6aWVyVG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRz
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAg
ICAgICAgICAgIGJlemllclB0c1swXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1sw
XSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQo
YmV6aWVyUHRzWzFdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMl0gPSBtX3RyYW5zZm9y
bS5tYXBQb2ludChiZXppZXJQdHNbMl0pOworICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBC
U2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtX3Ry
YW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJhbnNmb3JtKTsKKwor
ICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJu
IG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAko
cmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRp
ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8
c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3Rl
cGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDQ1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8R3Jh
ZGllbnRMaW5lYXIuaD4KKyNpbmNsdWRlIDxHcmFkaWVudFJhZGlhbC5oPgorI2luY2x1ZGUgPFZp
ZXcuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3Jt
RGVzdHJveSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBkZWxldGUgbV9ncmFkaWVu
dDsKIH0KIAogUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAobV9ncmFkaWVu
dCkKKyAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisKKyAgICBpZiAobV9yYWRpYWwpIHsKKyAg
ICAgICAgLy8gVE9ETzogU3VwcG9ydCBtX3IwPworICAgICAgICBtX2dyYWRpZW50ID0gbmV3IEJH
cmFkaWVudFJhZGlhbChtX3AwLCBtX3IxKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9ncmFkaWVu
dCA9IG5ldyBCR3JhZGllbnRMaW5lYXIobV9wMCwgbV9wMSk7CisgICAgc2l6ZV90IHNpemUgPSBt
X3N0b3BzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICBjb25zdCBDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICByZ2Jf
Y29sb3IgY29sb3I7CisgICAgICAgIGNvbG9yLnJlZCA9ICh1aW50OCkoc3RvcC5yZWQgKiAyNTUu
MCk7CisgICAgICAgIGNvbG9yLmdyZWVuID0gKHVpbnQ4KShzdG9wLmdyZWVuICogMjU1LjApOwor
ICAgICAgICBjb2xvci5ibHVlID0gKHVpbnQ4KShzdG9wLmJsdWUgKiAyNTUuMCk7CisgICAgICAg
IGNvbG9yLmFscGhhID0gKHVpbnQ4KShzdG9wLmFscGhhICogMjU1LjApOworICAgICAgICBtX2dy
YWRpZW50LT5BZGRDb2xvcihjb2xvciwgc3RvcC5zdG9wKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
Z3JhZGllbnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RmlsbFJlY3QocmVjdCwgKm1fZ3JhZGllbnQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2
aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNz
Q29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRl
PgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzMsMTIgKzM0LDE1IEBACiAj
aW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERhdGEu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KICNpbmNsdWRl
IDxHcmFwaGljc0RlZnMuaD4KICNpbmNsdWRlIDxSZWdpb24uaD4KKyNpbmNsdWRlIDxTaGFwZS5o
PgogI2luY2x1ZGUgPFZpZXcuaD4KICNpbmNsdWRlIDxXaW5kb3cuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtNTEsMTYgKzU1LDE2NiBAQAogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShCVmlldyogdmlldyk7CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgp
OwogCi0gICAgQlZpZXcqIG1fdmlldzsKKyAgICBzdHJ1Y3QgTGF5ZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgTGF5ZXIoQlZpZXcqIF92aWV3KQorICAgICAgICAgICAgOiB2aWV3KF92aWV3KQor
ICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMjU1KQor
ICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9jYXRpb25JblBh
cmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4oQl9PUklHSU4p
CisgICAgICAgICAgICAsIHByZXZpb3VzKDApCisgICAgICAgIHsKKyAgICAgICAgCXN0cm9rZUNv
bG9yLnJlZCA9IDA7CisgICAgICAgIAlzdHJva2VDb2xvci5ncmVlbiA9IDA7CisgICAgICAgIAlz
dHJva2VDb2xvci5ibHVlID0gMDsKKyAgICAgICAgCXN0cm9rZUNvbG9yLmFscGhhID0gMDsKKwor
ICAgICAgICAJZmlsbENvbG9yLnJlZCA9IDA7CisgICAgICAgIAlmaWxsQ29sb3IuZ3JlZW4gPSAw
OworICAgICAgICAJZmlsbENvbG9yLmJsdWUgPSAwOworICAgICAgICAJZmlsbENvbG9yLmFscGhh
ID0gMjU1OworICAgICAgICB9CisgICAgICAgIExheWVyKExheWVyKiBwcmV2aW91cykKKyAgICAg
ICAgICAgIDogdmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwg
Z2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAg
ICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0
ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHByZXZpb3VzKQorICAg
ICAgICB7CisgICAgICAgIAlzdHJva2VDb2xvci5yZWQgPSAwOworICAgICAgICAJc3Ryb2tlQ29s
b3IuZ3JlZW4gPSAwOworICAgICAgICAJc3Ryb2tlQ29sb3IuYmx1ZSA9IDA7CisgICAgICAgIAlz
dHJva2VDb2xvci5hbHBoYSA9IDA7CisKKyAgICAgICAgCWZpbGxDb2xvci5yZWQgPSAwOworICAg
ICAgICAJZmlsbENvbG9yLmdyZWVuID0gMDsKKyAgICAgICAgCWZpbGxDb2xvci5ibHVlID0gMDsK
KyAgICAgICAgCWZpbGxDb2xvci5hbHBoYSA9IDI1NTsKKworICAgICAgICAgICAgQlJlZ2lvbiBw
YXJlbnRDbGlwcGluZzsKKyAgICAgICAgICAgIHByZXZpb3VzLT52aWV3LT5HZXRDbGlwcGluZ1Jl
Z2lvbigmcGFyZW50Q2xpcHBpbmcpOworICAgICAgICAgICAgQlJlY3QgZnJhbWVJblBhcmVudCA9
IHBhcmVudENsaXBwaW5nLkZyYW1lKCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSW5QYXJlbnQu
SXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyYW1lSW5QYXJlbnQgPSBwcmV2aW91cy0+dmll
dy0+Qm91bmRzKCk7CisgICAgICAgICAgICBCUmVjdCBib3VuZHMgPSBmcmFtZUluUGFyZW50Lk9m
ZnNldFRvQ29weShCX09SSUdJTik7CisgICAgICAgICAgICBsb2NhdGlvbkluUGFyZW50ICs9IGZy
YW1lSW5QYXJlbnQuTGVmdFRvcCgpOworICAgICAgICAgICAgdmlldyA9IG5ldyBCVmlldyhib3Vu
ZHMsICJXZWJDb3JlIHRyYW5zcGFyZW5jeSBsYXllciIsIDAsIDApOworICAgICAgICAgICAgYml0
bWFwID0gbmV3IEJCaXRtYXAoYm91bmRzLCBCX1JHQkEzMiwgdHJ1ZSk7CisgICAgICAgICAgICBi
aXRtYXAtPkxvY2soKTsKKyAgICAgICAgICAgIGJpdG1hcC0+QWRkQ2hpbGQodmlldyk7CisgICAg
ICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgICAgICB2aWV3
LT5GaWxsUmVjdCh2aWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29s
b3IocHJldmlvdXMtPnZpZXctPkhpZ2hDb2xvcigpKTsKKyAgICAgICAgICAgIHZpZXctPlNldERy
YXdpbmdNb2RlKHByZXZpb3VzLT52aWV3LT5EcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgICAgIHZp
ZXctPlNldEJsZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhBX0NPTVBPU0lURSk7Cisg
ICAgICAgICAgICAvLyBUT0RPOiBsb2NhdGlvbkluUGFyZW50IGFuZCBhY2N1bXVsYXRlZE9yaWdp
biBjYW4KKyAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWVob3cgYmUgbWVyZ2VkLiBCdXQgZm9y
IG5vdyBpdCB3b3Jrcy4KKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT3JpZ2luLnggPSAtZnJhbWVJ
blBhcmVudC5sZWZ0OworICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmlnaW4ueSA9IC1mcmFtZUlu
UGFyZW50LnRvcDsKKyAgICAgICAgICAgIHZpZXctPlNldE9yaWdpbihwcmV2aW91cy0+YWNjdW11
bGF0ZWRPcmlnaW4gKyBhY2N1bXVsYXRlZE9yaWdpbik7CisgICAgICAgICAgICB2aWV3LT5TZXRT
Y2FsZShwcmV2aW91cy0+dmlldy0+U2NhbGUoKSk7CisgICAgICAgICAgICB2aWV3LT5TZXRQZW5T
aXplKHByZXZpb3VzLT52aWV3LT5QZW5TaXplKCkpOworICAgICAgICB9CisgICAgICAgIH5MYXll
cigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAg
ICBiaXRtYXAtPlVubG9jaygpOworICAgICAgICAgICAgICAgIC8vIERlbGV0aW5nIHRoZSBiaXRt
YXAgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiB0aGUgdmlldywKKyAgICAgICAgICAgICAgICAvLyBp
ZiB0aGVyZSBpcyBubyBiaXRtYXAsIHRoZSB2aWV3IGRvZXMgbm90IGJlbG9uZyB0byB1cyAoaW5p
dGlhbCBsYXllcikuCisgICAgICAgICAgICAgICAgZGVsZXRlIGJpdG1hcDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50U2hhcGU7CisgICAgICAgIH0KKworICAgICAg
ICBCVmlldyogdmlldzsKKyAgICAgICAgQkJpdG1hcCogYml0bWFwOworICAgICAgICByZ2JfY29s
b3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIHJnYl9jb2xvciBmaWxsQ29sb3I7CisgICAgICAgIHVp
bnQ4IGdsb2JhbEFscGhhOworICAgICAgICBCU2hhcGUqIGN1cnJlbnRTaGFwZTsKKyAgICAgICAg
QlBvaW50IGxvY2F0aW9uSW5QYXJlbnQ7CisgICAgICAgIEJQb2ludCBhY2N1bXVsYXRlZE9yaWdp
bjsKKworICAgICAgICBMYXllciogcHJldmlvdXM7CisgICAgfTsKKworICAgIEJWaWV3KiB2aWV3
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRMYXllci0+dmlldzsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFNoYXBlKEJTaGFwZSogc2hhcGUpCisgICAgeworICAgICAgICBk
ZWxldGUgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICAgICAgbV9jdXJyZW50TGF5
ZXItPmN1cnJlbnRTaGFwZSA9IHNoYXBlOworICAgIH0KKworICAgIEJTaGFwZSogc2hhcGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+Y3VycmVudFNoYXBlKQor
ICAgICAgICAgICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9IG5ldyBCU2hhcGUoKTsK
KyAgICAgICAgcmV0dXJuIG1fY3VycmVudExheWVyLT5jdXJyZW50U2hhcGU7CisgICAgfQorCisg
ICAgdm9pZCBwdXNoTGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICB7CisgICAgICAgIG1fY3VycmVu
dExheWVyID0gbmV3IExheWVyKG1fY3VycmVudExheWVyKTsKKyAgICAgICAgbV9jdXJyZW50TGF5
ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjApOworICAgIH0KKworICAg
IHZvaWQgcG9wTGF5ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+cHJl
dmlvdXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIExheWVyKiBsYXllciA9IG1fY3Vy
cmVudExheWVyOworICAgICAgICBtX2N1cnJlbnRMYXllciA9IGxheWVyLT5wcmV2aW91czsKKyAg
ICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA+IDApIHsKKyAgICAgICAgICAgIC8vIFBvc3Qg
cHJvY2VzcyB0aGUgYml0bWFwIGluIG9yZGVyIHRvIGFwcGx5IGdsb2JhbCBhbHBoYS4uLgorICAg
ICAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAg
IHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGxheWVyLT5iaXRtYXAtPkJp
dHMoKSk7CisgICAgICAgICAgICAgICAgdWludDMyIHdpZHRoID0gbGF5ZXItPmJpdG1hcC0+Qm91
bmRzKCkuSW50ZWdlcldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAgIHVpbnQzMiBoZWlnaHQg
PSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VySGVpZ2h0KCkgKyAxOworICAgICAgICAg
ICAgICAgIHVpbnQzMiBicHIgPSBsYXllci0+Yml0bWFwLT5CeXRlc1BlclJvdygpOworICAgICAg
ICAgICAgICAgIHVpbnQ4IGFscGhhID0gbGF5ZXItPmdsb2JhbEFscGhhOworICAgICAgICAgICAg
ICAgIGZvciAodWludDMyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAg
ICAgICAgdWludDgqIHAgPSBiaXRzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMiB4
ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86
IFRoZXJlIGlzIGEgbWV0aG9kIHRvIGRvIHNoaWZ0aW5nIHdpdGhvdXQgYml0IGVycm9ycy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBbMF0gPSAodWludDgpKCh1aW50MTYpcFswXSAqIGFscGhh
ID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSA9ICh1aW50OCkoKHVpbnQxNilw
WzFdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwWzJdID0gKHVpbnQ4
KSgodWludDE2KXBbMl0gKiBhbHBoYSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBb
M10gPSAodWludDgpKCh1aW50MTYpcFszXSAqIGFscGhhID4+IDgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgcCArPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIGJpdHMgKz0gYnByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIEJQb2ludCBiaXRtYXBMb2NhdGlvbihsYXllci0+bG9jYXRpb25JblBhcmVudCk7Cisg
ICAgICAgICAgICBiaXRtYXBMb2NhdGlvbiAtPSBtX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRP
cmlnaW47CisgICAgICAgICAgICBtX2N1cnJlbnRMYXllci0+dmlldy0+RHJhd0JpdG1hcChsYXll
ci0+Yml0bWFwLCBiaXRtYXBMb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGxh
eWVyOworICAgIH0KKworICAgIExheWVyKiBtX2N1cnJlbnRMYXllcjsKIH07CiAKIEdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJW
aWV3KiB2aWV3KQotICAgIDogbV92aWV3KHZpZXcpCisgICAgOiBtX2N1cnJlbnRMYXllcihuZXcg
TGF5ZXIodmlldykpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CisgICAgd2hpbGUgKExheWVyKiBwcmV2
aW91cyA9IG1fY3VycmVudExheWVyLT5wcmV2aW91cykgeworICAgICAgICBkZWxldGUgbV9jdXJy
ZW50TGF5ZXI7CisgICAgICAgIG1fY3VycmVudExheWVyID0gcHJldmlvdXM7CisgICAgfQorICAg
IGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0Nv
bnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBAIC03OCwxNyArMjMyLDE4
IEBACiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3Jt
Q29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV92aWV3OworICAgIHJldHVy
biBtX2RhdGEtPnZpZXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9y
bVN0YXRlKCkKIHsKLSAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRh
LT52aWV3KCktPlB1c2hTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUoKQogewotICAgIG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworICAg
IG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luIC09IG1fZGF0YS0+dmll
dygpLT5PcmlnaW4oKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogLy8g
RHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTk3LDIx
ICsyNTIsMTggQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3
KCktPkZpbGxSZWN0KHJlY3QpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQot
ICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlr
dVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRl
cnMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50
MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9r
ZSB8fCBzdHJva2VUaGlja25lc3MoKSA8PSAwLjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlTGluZShwb2ludDEs
IHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U3Ry
b2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAogLy8g
VGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQg
aW4gbGlzdHMuCkBAIC0xMjAsMjIgKzI3Miw3MyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsRWxsaXBzZShy
ZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbEVsbGlwc2UocmVjdCk7CiAgICAgaWYgKHN0
cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VF
bGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0YS0+dmll
dygpLT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0
YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2Ug
fHwgc3Ryb2tlVGhpY2tuZXNzKCkgPD0gMC4wZiB8fCAhc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0
YXJ0QW5nbGUsIGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICAvLyBUT0RP
OiBUaGUgY29kZSBiZWxvdyB3aWxsIG9ubHkgbWFrZSByb3VuZC1jb3JuZXIgYm94ZW4gbG9vayBu
aWNlLiBGb3IgYW4gdXR0ZXJseSBzaG9ja2luZworICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHJv
dW5kIGNvcm5lciBkcmF3aW5nLCBzZWUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVy
KCkuIEl0IHRyaWVzCisgICAgLy8gdG8gdXNlIG9uZSAob3IgdHdvKSBhbHBoYSBtYXNrKHMpIHBl
ciBib3ggY29ybmVyIHRvIGN1dCBvZmYgYSB0aGlja2VyIHN0cm9rZSBhbmQgZG91YmxlcworICAg
IC8vIHRoZSBzdHJva2Ugd2l0aC4gQWxsIHRoaXMgdG8gYWxpZ24gdGhlIGFyYyB3aXRoIHRoZSBi
b3ggc2lkZXMuLi4KKworICAgIGZsb2F0IHBlblNpemUgPSBzdHJva2VUaGlja25lc3MoKSAvIDIu
MGY7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUocGVuU2l6ZSk7CisgICAgQlJlY3Qg
YlJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkpOwor
ICAgIGlmIChzdGFydEFuZ2xlID49IDAgJiYgc3RhcnRBbmdsZSA8IDkwKSB7CisgICAgICAgIGJS
ZWN0LnJpZ2h0IC09IHBlblNpemU7CisgICAgICAgIGJSZWN0LnRvcCArPSBwZW5TaXplIC8gMi4w
ZjsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNpemUgLyAyLjBmOworICAgIH0gZWxzZSBp
ZiAoc3RhcnRBbmdsZSA+PSA5MCAmJiBzdGFydEFuZ2xlIDwgMTgwKSB7CisgICAgICAgIGJSZWN0
LmxlZnQgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnRvcCArPSBwZW5TaXplIC8g
Mi4wZjsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJS
ZWN0LmJvdHRvbSAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0QW5nbGUg
Pj0gMTgwICYmIHN0YXJ0QW5nbGUgPCAyNzApIHsKKyAgICAgICAgYlJlY3QubGVmdCArPSBwZW5T
aXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAg
ICAgIGJSZWN0LmJvdHRvbSAtPSBwZW5TaXplOworICAgIH0gZWxzZSBpZiAoc3RhcnRBbmdsZSA+
PSAyNzAgJiYgc3RhcnRBbmdsZSA8IDM2MCkgeworICAgICAgICBiUmVjdC5yaWdodCAtPSBwZW5T
aXplOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZTsKKyAgICB9CisgICAgYlJlY3Qu
T2Zmc2V0VG8oZmxvb3JmKGJSZWN0LmxlZnQpLCBmbG9vcmYoYlJlY3QudG9wKSk7CisgICAgdWlu
dDMyIGZsYWdzID0gbV9kYXRhLT52aWV3KCktPkZsYWdzKCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlNldEZsYWdzKGZsYWdzIHwgQl9TVUJQSVhFTF9QUkVDSVNFKTsKKyAgICBtX2RhdGEtPnZpZXco
KS0+U3Ryb2tlQXJjKGJSZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tl
U3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZsYWdzKGZsYWdzKTsKKworICAgIG1f
ZGF0YS0+dmlldygpLT5TZXRQZW5TaXplKHN0cm9rZVRoaWNrbmVzcygpKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFt
X2RhdGEtPnNoYXBlKCkpCisgICAgICAgIHJldHVybjsKKworLy8gICAgbV9kYXRhLT52aWV3KCkt
PlNldEZpbGxSdWxlKHRvSGFpa3VGaWxsUnVsZShmaWxsUnVsZSgpKSk7CisgICAgbV9kYXRhLT52
aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0
cm9rZVBhdHRlcm4gfHwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50IHx8IHN0cm9rZUNv
bG9yKCkuYWxwaGEoKSkgeworICAgICAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRl
cm4pCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBlbHNlIGlmIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisvLyAgICAgICAgICAgIEJHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKy8vICAgICAgICAgICAgZ3JhZGll
bnQtPlNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtKCkpOworLy8gICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlU2hh
cGUobV9kYXRhLT5zaGFwZSgpLCAqZ3JhZGllbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VTaGFwZShtX2RhdGEtPnNoYXBlKCkpOworICAgIH0K
KyAgICBtX2RhdGEtPnNldFNoYXBlKDApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oc2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9p
bnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKQEAgLTE0NywxMCArMzUwLDEwIEBACiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50c1tp
XSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQogICAg
ICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0
cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBw
b2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2ICszNjEsMTggQEAKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZ2JfY29s
b3Igb2xkQ29sb3IgPSBtX2RhdGEtPm1fdmlldy0+SGlnaENvbG9yKCk7Ci0gICAgbV9kYXRhLT5t
X3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxSZWN0
KHJlY3QpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29sb3IpOworICAg
IHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+dmlldygpLT5IaWdoQ29sb3IoKTsKKyAgICBt
X2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+
RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihvbGRDb2xv
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwor
CisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0
b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC0xNzUsMjUgKzM4MCw4OCBAQAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9u
IGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsCi0gICAgLy8gdGhlIHNpemVzIGFy
ZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFsCi0g
ICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxBcmMgY2FsbHMgYXJlIG5lZWRlZC4KKyAgICBCUG9pbnQg
cG9pbnRzWzNdOworICAgIGNvbnN0IGZsb2F0IGtSYWRpdXNCZXppZXJTY2FsZSA9IDAuNTZmOwor
CisgICAgQlNoYXBlIHNoYXBlOworICAgIHNoYXBlLk1vdmVUbyhCUG9pbnQocmVjdC54KCkgKyB0
b3BMZWZ0LndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgc2hhcGUuTGluZVRvKEJQb2ludChyZWN0
LnJpZ2h0KCkgLSB0b3BSaWdodC53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIHBvaW50c1swXS54
ID0gcmVjdC5yaWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxlICogdG9wUmlnaHQud2lkdGgoKTsK
KyAgICBwb2ludHNbMF0ueSA9IHJlY3QueSgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC5yaWdo
dCgpOworICAgIHBvaW50c1sxXS55ID0gcmVjdC55KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0
b3BSaWdodC5oZWlnaHQoKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3QucmlnaHQoKTsKKyAgICBw
b2ludHNbMl0ueSA9IHJlY3QueSgpICsgdG9wUmlnaHQuaGVpZ2h0KCk7CisgICAgc2hhcGUuQmV6
aWVyVG8ocG9pbnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QucmlnaHQoKSwgcmVj
dC5ib3R0b20oKSAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSk7CisgICAgcG9pbnRzWzBdLnggPSBy
ZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1c0Jl
emllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0
LnJpZ2h0KCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdodC53aWR0aCgpOworICAg
IHBvaW50c1sxXS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3Qucmln
aHQoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LmJvdHRv
bSgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuTGluZVRvKEJQb2lu
dChyZWN0LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwgcmVjdC5ib3R0b20oKSkpOworICAgIHBv
aW50c1swXS54ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21MZWZ0Lndp
ZHRoKCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpOworICAgIHBvaW50c1sxXS54
ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1c0Jl
emllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzJdLnggPSByZWN0
LngoKTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWln
aHQoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNoYXBlLkxpbmVUbyhCUG9p
bnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdC5oZWlnaHQoKSkpOworICAgIHBvaW50c1sw
XS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LnkoKSAtIGtSYWRpdXNCZXpp
ZXJTY2FsZSAqIHRvcExlZnQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0LngoKSAr
IGtSYWRpdXNCZXppZXJTY2FsZSAqIHRvcExlZnQud2lkdGgoKTsKKyAgICBwb2ludHNbMV0ueSA9
IHJlY3QueSgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCkgKyB0b3BMZWZ0LndpZHRoKCk7
CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LnkoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMp
OworICAgIHNoYXBlLkNsb3NlKCk7CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEt
PnZpZXcoKS0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihj
b2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisgICAgbV9k
YXRhLT52aWV3KCktPkZpbGxTaGFwZSgmc2hhcGUpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRI
aWdoQ29sb3Iob2xkQ29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgo
KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGEtPnNoYXBlKCkpCisgICAgICAgIHJl
dHVybjsKKworLy8gICAgbV9kYXRhLT52aWV3KCktPlNldEZpbGxSdWxlKHRvSGFpa3VGaWxsUnVs
ZShmaWxsUnVsZSgpKSk7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7
CisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQgfHwgZmlsbENvbG9yKCkuYWxwaGEoKSkgeworLy8gICAgICAgIGRyYXdG
aWxsZWRTaGFkb3dQYXRoKHRoaXMsIHAsIHBhdGgpOyBUT0RPOiBXaGF0J3MgdGhpcyBzaGFkb3cg
YnVzaW5lc3M/CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pCisgICAg
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBlbHNlIGlmIChtX2NvbW1vbi0+c3Rh
dGUuZmlsbEdyYWRpZW50KSB7CisgICAgICAgICAgICBCR3JhZGllbnQqIGdyYWRpZW50ID0gbV9j
b21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOworLy8gICAgICAg
ICAgICBncmFkaWVudC0+U2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQt
PmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+
RmlsbFNoYXBlKG1fZGF0YS0+c2hhcGUoKSwgKmdyYWRpZW50KTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKG1fZGF0YS0+c2hhcGUoKSk7Cisg
ICAgfQorICAgIG1fZGF0YS0+c2V0U2hhcGUoMCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpiZWdpblBhdGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5zZXRT
aGFwZShuZXcgQlNoYXBlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChj
b25zdCBQYXRoJiBwYXRoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFtX2Rh
dGEtPnNoYXBlKCkpCisgICAgICAgIG1fZGF0YS0+c2V0U2hhcGUobmV3IEJTaGFwZSgqcGF0aC5w
bGF0Zm9ybVBhdGgoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhLT5zaGFwZSgpLT5BZGRT
aGFwZShwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjAyLDEyICs0NzAsMjMgQEAKICAgICAgICAg
cmV0dXJuOwogCiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXct
PkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAgIG1fZGF0YS0+dmlldygpLT5D
b25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxQYXRoPiYgcGF0
aHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIC8v
IEZJWE1FOiBpbXBsZW1lbnQKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgLyogd2lk
dGggKi8sIGludCAvKiBvZmZzZXQgKi8sIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTIyMSwxMSAr
NTAwLDExIEBACiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMSkgewogICAgICAgICBCUmVnaW9u
ICAgIHJlZ2lvbjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQogICAgICAg
ICAgICAgcmVnaW9uLkluY2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKIAotICAgICAgICBtX2RhdGEt
Pm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0
cm9rZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsKKyAgICAgICAgbV9kYXRh
LT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgICAgIG1fZGF0YS0+dmlldygpLT5T
dHJva2VSZWN0KHJlZ2lvbi5GcmFtZSgpLCBCX01JWEVEX0NPTE9SUyk7CiAgICAgfQogfQogCkBA
IC0yNDgsOCArNTI3LDEyIEBACiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9E
ZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgRmxvYXRSZWN0IHJvdW5kZWQocmVjdCk7CisgICAg
cm91bmRlZC5zZXRYKHJvdW5kZihyZWN0LngoKSkpOworICAgIHJvdW5kZWQuc2V0WShyb3VuZGYo
cmVjdC55KCkpKTsKKyAgICByb3VuZGVkLnNldFdpZHRoKHJvdW5kZihyZWN0LndpZHRoKCkpKTsK
KyAgICByb3VuZGVkLnNldEhlaWdodChyb3VuZGYocmVjdC5oZWlnaHQoKSkpOworICAgIHJldHVy
biByb3VuZGVkOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lM
YXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjU3LDcgKzU0MCw3IEBACiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBtX2RhdGEtPnB1c2hMYXllcihvcGFjaXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKQEAgLTI2NSw3ICs1NDgsNyBAQAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV9kYXRhLT5wb3BMYXllcigpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xl
YXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3Myw3ICs1NTYsMTEgQEAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIG1fZGF0YS0+dmlldygpLT5QdXNoU3RhdGUoKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0SGlnaENvbG9yKDAsIDAsIDAsIDApOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRE
cmF3aW5nTW9kZShCX09QX0NPUFkpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKQEAg
LTI4MSwxMCArNTY4LDEwIEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92
aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRh
LT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0
YS0+dmlldygpLT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUod2lk
dGgpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tl
U3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUob2xkU2l6ZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTMw
NSw5ICs1OTIsMTQgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbV9kYXRhLT5tX3Zp
ZXctPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9k
YXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRM
aW5lTW9kZShtb2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2RlKCksIG1fZGF0YS0+dmll
dygpLT5MaW5lTWl0ZXJMaW1pdCgpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9p
bihMaW5lSm9pbiBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAt
MzI2LDcgKzYxOCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9k
YXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRM
aW5lTW9kZShtX2RhdGEtPnZpZXcoKS0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT52aWV3
KCktPkxpbmVNaXRlckxpbWl0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0
ZXJMaW1pdChmbG9hdCBsaW1pdCkKQEAgLTMzNCw3ICs2MjYsNyBAQAogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRM
aW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxp
bmVKb2luTW9kZSgpLCBsaW1pdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1f
ZGF0YS0+dmlldygpLT5MaW5lQ2FwTW9kZSgpLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2Rl
KCksIGxpbWl0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9w
YWNpdHkpCkBAIC0zNDIsNyArNjM0LDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+bV9j
dXJyZW50TGF5ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjBmKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVP
cGVyYXRvciBvcCkKQEAgLTM2Myw3ICs2NTUsNyBAQAogICAgICAgICBwcmludGYoIkdyYXBoaWNz
Q29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBvcnRlZCBjb21wb3NpdGUgb3Bl
cmF0aW9uICVzXG4iLAogICAgICAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCku
dXRmOCgpLmRhdGEoKSk7CiAgICAgfQotICAgIG1fZGF0YS0+bV92aWV3LT5TZXREcmF3aW5nTW9k
ZShtb2RlKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNzEsNyAr
NjYzLDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBtX2RhdGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24ocGF0aC5wbGF0Zm9y
bVBhdGgoKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5NCwxNCArNjg2LDIyIEBACiAK
IEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Cisg
ICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5z
Zm9ybT8KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgIEJQb2ludCBvcmlnaW4gPSBt
X2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShvcmlnaW4ueCwg
b3JpZ2luLnkpOworICAgIG1hdHJpeC5zY2FsZShtX2RhdGEtPnZpZXcoKS0+U2NhbGUoKSk7Cisg
ICAgcmV0dXJuIG1hdHJpeDsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0
byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsK
KyAgICBtYXRyaXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNj
YWxlKG1fZGF0YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00MDks
MTMgKzcwOSwxOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+
YWNjdW11bGF0ZWRPcmlnaW4ueCArPSB4OworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmFj
Y3VtdWxhdGVkT3JpZ2luLnkgKz0geTsKKyAgICBCUG9pbnQgb3JpZ2luKG1fZGF0YS0+dmlldygp
LT5PcmlnaW4oKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldE9yaWdpbihvcmlnaW4ueCArIHgs
IG9yaWdpbi55ICsgeSk7CisKKyAgICAvLyBUT0RPOiBjdXJyZW50UGF0aCBuZWVkcyB0byBiZSB0
cmFuc2xhdGVkIGFsb25nLCBhY2NvcmRpbmcgdG8gUXQgaW1wbGVtZW50YXRpb24KIH0KIAogSW50
UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIEludFBvaW50KDAsIDApOworICAgIEJQb2ludCBvcmlnaW4gPSBtX2RhdGEt
PnZpZXcoKS0+T3JpZ2luKCk7CisgICAgcmV0dXJuIEludFBvaW50KG9yaWdpbi54LCBvcmlnaW4u
eSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKQEAg
LTQzMSw3ICs3MzYsOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gTk9URTogTm9uLXVuaWZvcm0g
c2NhbGluZyBub3Qgc3VwcG9ydGVkIG9uIEhhaWt1LCB5ZXQuCisgICAgbV9kYXRhLT52aWV3KCkt
PlNldFNjYWxlKChzaXplLndpZHRoKCkgKyBzaXplLmhlaWdodCgpKSAvIDIpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNDM5LDcg
Kzc0NSw5IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVnaW9uIHJlZ2lvbihtX2RhdGEtPnZpZXco
KS0+Qm91bmRzKCkpOworICAgIHJlZ2lvbi5FeGNsdWRlKHJlY3QpOworICAgIG1fZGF0YS0+dmll
dygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAogdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00
NTUsNiArNzYzLDkgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICAvLyBOT1RFOiBVc2VkIGJ5IFJlbmRlckJveE1vZGVsT2JqZWN0IHRvIGNsaXAg
b3V0IHRoZSBpbm5lciBwYXJ0IG9mIGFuIGFyYyB3aGVuIHJlbmRpbmcgYm94IGNvcm5lcnMuLi4K
KyAgICAvLyBUT0RPOiBVc2UgdGhpcyBtZXRob2QgdG8gZGV0ZWN0IGlmIHdlIGFyZSByZW5kZXJp
bmcgYSByb3VuZC1jb3JuZXItYm94Li4uCisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBA
IC00OTMsNyArODA0LDcgQEAKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9u
dChjb25zdCBGb250JiBmb250KQogewotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRGb250KGZvbnQu
cHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKKyAgICBtX2RhdGEtPnZpZXco
KS0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTAxLDcgKzgxMiw3IEBACiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRh
LT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhp
Z2hDb2xvcihjb2xvcik7CiB9CiAKIHBhdHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0
cm9rZVN0eWxlKCkKQEAgLTUzNSw3ICs4NDYsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRo
aWNrbmVzcyk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUodGhpY2tuZXNzKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTQzLDcgKzg1NCw3IEBACiAgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5t
X3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hD
b2xvcihjb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hh
ZG93KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48040</attachid>
            <date>2010-02-03 08:45:38 -0800</date>
            <delta_ts>2010-02-03 23:56:46 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>36306</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4
IEBACiBjbGFzcyBTa1BhdGg7CiB0eXBlZGVmIFNrUGF0aCBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBQ
TEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWdpb247Ci10eXBlZGVmIEJSZWdpb24gUGxhdGZvcm1Q
YXRoOworY2xhc3MgQlNoYXBlOwordHlwZWRlZiBCU2hhcGUgUGxhdGZvcm1QYXRoOwogI2VsaWYg
T1MoV0lOQ0UpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGxhdGZvcm1QYXRoOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkocmV2aXNpb24gNTQyNzUpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDYgKzU3LDkgQEAKIGNsYXNzIFNrU2hhZGVyOwogdHlwZWRlZiBjbGFzcyBTa1NoYWRlciog
UGxhdGZvcm1HcmFkaWVudDsKIHR5cGVkZWYgY2xhc3MgU2tTaGFkZXIqIFBsYXRmb3JtUGF0dGVy
bjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3MgQkdyYWRpZW50OwordHlwZWRlZiBCR3Jh
ZGllbnQqIFBsYXRmb3JtR3JhZGllbnQ7CiAjZWxzZQogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdy
YWRpZW50OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1Bh
dGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlr
dS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdt
YWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlw
cGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTUgKzMx
LDIwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+
CisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KKyNpbmNsdWRlIDxTaGFwZS5oPgorI2lu
Y2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhdGg6OlBhdGgoKQot
ICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkpCisgICAgOiBtX3BhdGgobmV3IEJTaGFwZSgpKQog
ewogfQogCkBAIC00OCw3ICs1NCw3IEBACiB9CiAKIFBhdGg6OlBhdGgoY29uc3QgUGF0aCYgb3Ro
ZXIpCi0gICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKKyAg
ICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0Zm9ybVBhdGgoKSkpCiB7CiB9CiAKQEAg
LTY3LDI4ICs3MywxMjUgQEAKIAogYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRoLT5Db250
YWlucyhwb2ludCk7CisgICAgLy8gVE9ETzogVGhpcyBpcyBwcm9iYWJseSB0b28gZXhwZW5zaXZl
LiBVc2Ugb25lIGluc3RhbmNlIG9mIGEgc2NyYXRjaAorICAgIC8vIGltYWdlLgorICAgIEJCaXRt
YXAgYml0bWFwKEJSZWN0KDAsIDAsIDAsIDApLAorICAgICAgICBCX0JJVE1BUF9DTEVBUl9UT19X
SElURSB8IEJfQklUTUFQX0FDQ0VQVFNfVklFV1MsIEJfUkdCMzIpOworICAgIEJWaWV3IHZpZXco
QlJlY3QoMCwgMCwgMCwgMCksICIiLCAwLCAwKTsKKyAgICBiaXRtYXAuTG9jaygpOworICAgIGJp
dG1hcC5BZGRDaGlsZCgmdmlldyk7CisgICAgLy8gQ3VycmVudCBwZW4gbG9jYXRpb24gaXMgdXNl
ZCBhcyBvcmlnaW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgp
LCAtcG9pbnQueSgpKTsKKyAgICAvLyBUT0RPOiBIYW5kbGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1
cHBvcnQgaW4gQlZpZXcsIHRoZSBiYWNrZW5kIGFscmVhZHkKKyAgICAvLyBzdXBwb3J0IGl0LikK
KyAgICB2aWV3LkZpbGxTaGFwZShtX3BhdGgpOworICAgIHZpZXcuU3luYygpOworCisgICAgdWlu
dDgqIGJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4oYml0bWFwLkJpdHMoKSk7CisgICAg
Ym9vbCByZXN1bHQgPSBiaXRzWzBdIDwgMTI4OworCisgICAgdmlldy5SZW1vdmVTZWxmKCk7Cisg
ICAgYml0bWFwLlVubG9jaygpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK2Jvb2wgUGF0aDo6
c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVyKiBhcHBsaWVyLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlQoYXBwbGllcik7CisKKyAgICAvLyBUT0RP
OiBUaGlzIGlzIHByb2JhYmx5IHRvbyBleHBlbnNpdmUuIFVzZSBvbmUgaW5zdGFuY2Ugb2YgYSBz
Y3JhdGNoCisgICAgLy8gaW1hZ2UsIHNlZSBhYm92ZS4KKyAgICAvLyBUT0RPOiBDb2RlIGR1cGxp
Y2F0aW9uIGFib3ZlLgorICAgIEJCaXRtYXAgYml0bWFwKEJSZWN0KDAsIDAsIDAsIDApLAorICAg
ICAgICBCX0JJVE1BUF9DTEVBUl9UT19XSElURSB8IEJfQklUTUFQX0FDQ0VQVFNfVklFV1MsIEJf
UkdCMzIpOworICAgIEJWaWV3IHZpZXcoQlJlY3QoMCwgMCwgMCwgMCksICIiLCAwLCAwKTsKKyAg
ICBiaXRtYXAuTG9jaygpOworICAgIGJpdG1hcC5BZGRDaGlsZCgmdmlldyk7CisgICAgLy8gQ3Vy
cmVudCBwZW4gbG9jYXRpb24gaXMgdXNlZCBhcyBvcmlnaW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2
aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKKyAgICAvLyBUT0RPOiBIYW5k
bGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1cHBvcnQgaW4gQlZpZXcsIHRoZSBiYWNrZW5kIGFscmVh
ZHkKKyAgICAvLyBzdXBwb3J0IGl0LikKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4dCgmdmll
dyk7CisgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmNvbnRleHQpOworICAgIAorICAgIHZpZXcu
U3Ryb2tlU2hhcGUobV9wYXRoKTsKKyAgICB2aWV3LlN5bmMoKTsKKworICAgIHVpbnQ4KiBiaXRz
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJpdG1hcC5CaXRzKCkpOworICAgIGJvb2wgcmVz
dWx0ID0gYml0c1swXSA8IDEyODsKKworICAgIHZpZXcuUmVtb3ZlU2VsZigpOworICAgIGJpdG1h
cC5VbmxvY2soKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFBhdGg6OnRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRhdGEgImluIHBs
YWNlIgorICAgIGNsYXNzIFRyYW5zbGF0ZUl0ZXJhdG9yIDogcHVibGljIEJTaGFwZUl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zbGF0ZUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUs
IGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICB2
aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVNb3ZlVG8oQlBvaW50KiBwb2ludCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcG9pbnQtPnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxp
bmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgbGluZVB0cy0+eCAr
PSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzLT55ICs9IG1fc2l6ZS5o
ZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRzKys7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVz
X3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJlemllckNvdW50LCBCUG9pbnQqIGJlemllclB0cykK
KyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGJlemllckNvdW50LS0pIHsKKyAgICAgICAg
ICAgICAgICBiZXppZXJQdHNbMF0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAg
ICBiZXppZXJQdHNbMF0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYmV6
aWVyUHRzWzFdLnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRz
WzFdLnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXS54
ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXS55ICs9IG1f
c2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHMgKz0gMzsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQlNoYXBlKiBtX3No
YXBlOworICAgICAgICBjb25zdCBGbG9hdFNpemUmIG1fc2l6ZTsKKyAgICB9IHRyYW5zbGF0ZUl0
ZXJhdG9yKG1fcGF0aCwgc2l6ZSk7CisKKyAgICB0cmFuc2xhdGVJdGVyYXRvci5JdGVyYXRlKG1f
cGF0aCk7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3VuZGluZ1JlY3QoKSBjb25zdAogewotICAg
IHJldHVybiBtX3BhdGgtPkZyYW1lKCk7CisgICAgcmV0dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9
CiAKIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KQogewotICAgIC8v
IEZJWE1FOiBVc2UgT2Zmc2V0Qnk/Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVjdCBi
b3VuZHMgPSBtX3BhdGgtPkJvdW5kcygpOworICAgIHRyYW5zbGF0ZShGbG9hdFNpemUocG9pbnQu
eCgpIC0gYm91bmRzLmxlZnQsIHBvaW50LnkoKSAtIGJvdW5kcy50b3ApKTsKIH0KIAogdm9pZCBQ
YXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIG1fcGF0aC0+TGluZVRvKHApOwogfQogCiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBGbG9hdFBvaW50JiBwKQpAQCAtOTgsNyAr
MjAxLDExIEBACiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50
JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBwb2ludHNbM107CisgICAgcG9pbnRzWzBd
ID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNwMjsKKyAgICBwb2ludHNbMl0gPSBwOworICAgIG1f
cGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmNUbyhjb25zdCBG
bG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1cykKQEAgLTEw
OCw3ICsyMTUsNyBAQAogCiB2b2lkIFBhdGg6OmNsb3NlU3VicGF0aCgpCiB7Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJj
KGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZsb2F0IHNhciwgZmxvYXQgZWFyLCBib29s
IGFudGljbG9ja3dpc2UpCkBAIC0xMTgsNyArMjI1LDEyIEBACiAKIHZvaWQgUGF0aDo6YWRkUmVj
dChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgbV9wYXRoLT5JbmNsdWRlKHIpOworICAgIG1f
cGF0aC0+Q2xvc2UoKTsKKyAgICBtX3BhdGgtPk1vdmVUbyhCUG9pbnQoci54KCksIHIueSgpKSk7
CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgpICsgci53aWR0aCgpLCByLnkoKSkpOwor
ICAgIG1fcGF0aC0+TGluZVRvKEJQb2ludChyLngoKSArIHIud2lkdGgoKSwgci55KCkgKyByLmhl
aWdodCgpKSk7CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgpLCByLnkoKSArIHIuaGVp
Z2h0KCkpKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkRWxsaXBz
ZShjb25zdCBGbG9hdFJlY3QmIHIpCkBAIC0xMjgsMTIgKzI0MCwxMiBAQAogCiB2b2lkIFBhdGg6
OmNsZWFyKCkKIHsKLSAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOworICAgIG1fcGF0aC0+Q2xlYXIo
KTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gIW1fcGF0
aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7CisgICAgcmV0dXJuICFtX3BhdGgtPkJvdW5kcygpLklzVmFs
aWQoKTsKIH0KIAogU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkgY29uc3QKQEAgLTE0OSwxOCAr
MjYxLDEwNiBAQAogCiB2b2lkIFBhdGg6OnRyYW5zZm9ybShjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIEJTaGFwZUl0ZXJh
dG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4gcGxhY2UiCisgICAgY2xh
c3MgVHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFwZSwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgICAgICA6IG1fc2hhcGUoc2hhcGUpCisgICAg
ICAgICAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKKyAgICAgICAgeworICAgICAgICB9Cisg
ICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBvaW50KQorICAg
ICAgICB7CisgICAgICAgICAgICAqcG9pbnQgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqcG9pbnQp
OworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFs
IHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50LCBCUG9pbnQqIGxpbmVQdHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291bnQtLSkgeworICAgICAgICAg
ICAgICAgICpsaW5lUHRzID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoKmxpbmVQdHMpOworICAgICAg
ICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBC
X09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVy
VG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0
c1swXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1swXSk7CisgICAgICAgICAgICAg
ICAgYmV6aWVyUHRzWzFdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzFdKTsKKyAg
ICAgICAgICAgICAgICBiZXppZXJQdHNbMl0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQ
dHNbMl0pOworICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAzOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0
YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCX09L
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBCU2hhcGUqIG1fc2hhcGU7Cisg
ICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbV90cmFuc2Zvcm07CisgICAgfSB0cmFuc2Zv
cm1JdGVyYXRvcihtX3BhdGgsIHRyYW5zZm9ybSk7CisKKyAgICB0cmFuc2Zvcm1JdGVyYXRvci5J
dGVyYXRlKG1fcGF0aCk7CiB9CiAKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAv
LyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9kaWZ5IHRoZSBwYXRoIGRhdGEgImluIHBs
YWNlIgorICAgIGNsYXNzIFRyYW5zZm9ybUl0ZXJhdG9yIDogcHVibGljIEJTaGFwZUl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zZm9ybUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCisgICAgICAgICAgICA6IG1f
c2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkKKyAgICAg
ICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhC
UG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICAqcG9pbnQgPSBtX3RyYW5zZm9y
bS5tYXBQb2ludCgqcG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50
LCBCUG9pbnQqIGxpbmVQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291
bnQtLSkgeworICAgICAgICAgICAgICAgICpsaW5lUHRzID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQo
KmxpbmVQdHMpOworICAgICAgICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0
dXNfdCBJdGVyYXRlQmV6aWVyVG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6aWVyUHRz
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgeworICAgICAg
ICAgICAgICAgIGJlemllclB0c1swXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemllclB0c1sw
XSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQo
YmV6aWVyUHRzWzFdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMl0gPSBtX3RyYW5zZm9y
bS5tYXBQb2ludChiZXppZXJQdHNbMl0pOworICAgICAgICAgICAgICAgIGJlemllclB0cyArPSAz
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBC
U2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtX3Ry
YW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJhbnNmb3JtKTsKKwor
ICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogRmxvYXRSZWN0IFBh
dGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisgICAgcmV0dXJu
IG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAko
cmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRp
ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+ICBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8
c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3Rl
cGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDQ1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiR3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSA8R3Jh
ZGllbnRMaW5lYXIuaD4KKyNpbmNsdWRlIDxHcmFkaWVudFJhZGlhbC5oPgorI2luY2x1ZGUgPFZp
ZXcuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgR3JhZGllbnQ6OnBsYXRmb3Jt
RGVzdHJveSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBkZWxldGUgbV9ncmFkaWVu
dDsKIH0KIAogUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVudDo6cGxhdGZvcm1HcmFkaWVudCgpCiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKKyAgICBpZiAobV9ncmFkaWVu
dCkKKyAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisKKyAgICBpZiAobV9yYWRpYWwpIHsKKyAg
ICAgICAgLy8gVE9ETzogU3VwcG9ydCBtX3IwPworICAgICAgICBtX2dyYWRpZW50ID0gbmV3IEJH
cmFkaWVudFJhZGlhbChtX3AwLCBtX3IxKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9ncmFkaWVu
dCA9IG5ldyBCR3JhZGllbnRMaW5lYXIobV9wMCwgbV9wMSk7CisgICAgc2l6ZV90IHNpemUgPSBt
X3N0b3BzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICBjb25zdCBDb2xvclN0b3AmIHN0b3AgPSBtX3N0b3BzW2ldOworICAgICAgICByZ2Jf
Y29sb3IgY29sb3I7CisgICAgICAgIGNvbG9yLnJlZCA9ICh1aW50OCkoc3RvcC5yZWQgKiAyNTUu
MCk7CisgICAgICAgIGNvbG9yLmdyZWVuID0gKHVpbnQ4KShzdG9wLmdyZWVuICogMjU1LjApOwor
ICAgICAgICBjb2xvci5ibHVlID0gKHVpbnQ4KShzdG9wLmJsdWUgKiAyNTUuMCk7CisgICAgICAg
IGNvbG9yLmFscGhhID0gKHVpbnQ4KShzdG9wLmFscGhhICogMjU1LjApOworICAgICAgICBtX2dy
YWRpZW50LT5BZGRDb2xvcihjb2xvciwgc3RvcC5zdG9wKTsKKyAgICB9CisgICAgcmV0dXJuIG1f
Z3JhZGllbnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhZGllbnQ6OmZpbGwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RmlsbFJlY3QocmVjdCwgKm1fZ3JhZGllbnQp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkocmV2
aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNz
Q29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4K
KyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRl
PgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzMsMTIgKzM0LDE1IEBACiAj
aW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udERhdGEu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVk
ZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4KICNpbmNsdWRl
IDxHcmFwaGljc0RlZnMuaD4KICNpbmNsdWRlIDxSZWdpb24uaD4KKyNpbmNsdWRlIDxTaGFwZS5o
PgogI2luY2x1ZGUgPFZpZXcuaD4KICNpbmNsdWRlIDxXaW5kb3cuaD4KICNpbmNsdWRlIDxzdGRp
by5oPgpAQCAtNTEsMTYgKzU1LDE2NiBAQAogICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZShCVmlldyogdmlldyk7CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgp
OwogCi0gICAgQlZpZXcqIG1fdmlldzsKKyAgICBzdHJ1Y3QgTGF5ZXIgeworICAgIHB1YmxpYzoK
KyAgICAgICAgTGF5ZXIoQlZpZXcqIF92aWV3KQorICAgICAgICAgICAgOiB2aWV3KF92aWV3KQor
ICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMjU1KQor
ICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9jYXRpb25JblBh
cmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4oQl9PUklHSU4p
CisgICAgICAgICAgICAsIHByZXZpb3VzKDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cm9r
ZUNvbG9yLnJlZCA9IDA7CisgICAgICAgICAgICBzdHJva2VDb2xvci5ncmVlbiA9IDA7CisgICAg
ICAgICAgICBzdHJva2VDb2xvci5ibHVlID0gMDsKKyAgICAgICAgICAgIHN0cm9rZUNvbG9yLmFs
cGhhID0gMDsKKworICAgICAgICAgICAgZmlsbENvbG9yLnJlZCA9IDA7CisgICAgICAgICAgICBm
aWxsQ29sb3IuZ3JlZW4gPSAwOworICAgICAgICAgICAgZmlsbENvbG9yLmJsdWUgPSAwOworICAg
ICAgICAgICAgZmlsbENvbG9yLmFscGhhID0gMjU1OworICAgICAgICB9CisgICAgICAgIExheWVy
KExheWVyKiBwcmV2aW91cykKKyAgICAgICAgICAgIDogdmlldygwKQorICAgICAgICAgICAgLCBi
aXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBj
dXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikK
KyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAs
IHByZXZpb3VzKHByZXZpb3VzKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJva2VDb2xvci5y
ZWQgPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3IuZ3JlZW4gPSAwOworICAgICAgICAgICAg
c3Ryb2tlQ29sb3IuYmx1ZSA9IDA7CisgICAgICAgICAgICBzdHJva2VDb2xvci5hbHBoYSA9IDA7
CisKKyAgICAgICAgICAgIGZpbGxDb2xvci5yZWQgPSAwOworICAgICAgICAgICAgZmlsbENvbG9y
LmdyZWVuID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xvci5ibHVlID0gMDsKKyAgICAgICAgICAg
IGZpbGxDb2xvci5hbHBoYSA9IDI1NTsKKworICAgICAgICAgICAgQlJlZ2lvbiBwYXJlbnRDbGlw
cGluZzsKKyAgICAgICAgICAgIHByZXZpb3VzLT52aWV3LT5HZXRDbGlwcGluZ1JlZ2lvbigmcGFy
ZW50Q2xpcHBpbmcpOworICAgICAgICAgICAgQlJlY3QgZnJhbWVJblBhcmVudCA9IHBhcmVudENs
aXBwaW5nLkZyYW1lKCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSW5QYXJlbnQuSXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgIGZyYW1lSW5QYXJlbnQgPSBwcmV2aW91cy0+dmlldy0+Qm91bmRz
KCk7CisgICAgICAgICAgICBCUmVjdCBib3VuZHMgPSBmcmFtZUluUGFyZW50Lk9mZnNldFRvQ29w
eShCX09SSUdJTik7CisgICAgICAgICAgICBsb2NhdGlvbkluUGFyZW50ICs9IGZyYW1lSW5QYXJl
bnQuTGVmdFRvcCgpOworICAgICAgICAgICAgdmlldyA9IG5ldyBCVmlldyhib3VuZHMsICJXZWJD
b3JlIHRyYW5zcGFyZW5jeSBsYXllciIsIDAsIDApOworICAgICAgICAgICAgYml0bWFwID0gbmV3
IEJCaXRtYXAoYm91bmRzLCBCX1JHQkEzMiwgdHJ1ZSk7CisgICAgICAgICAgICBiaXRtYXAtPkxv
Y2soKTsKKyAgICAgICAgICAgIGJpdG1hcC0+QWRkQ2hpbGQodmlldyk7CisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgICAgICB2aWV3LT5GaWxsUmVj
dCh2aWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IocHJldmlv
dXMtPnZpZXctPkhpZ2hDb2xvcigpKTsKKyAgICAgICAgICAgIHZpZXctPlNldERyYXdpbmdNb2Rl
KHByZXZpb3VzLT52aWV3LT5EcmF3aW5nTW9kZSgpKTsKKyAgICAgICAgICAgIHZpZXctPlNldEJs
ZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhBX0NPTVBPU0lURSk7CisgICAgICAgICAg
ICAvLyBUT0RPOiBsb2NhdGlvbkluUGFyZW50IGFuZCBhY2N1bXVsYXRlZE9yaWdpbiBjYW4KKyAg
ICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWVob3cgYmUgbWVyZ2VkLiBCdXQgZm9yIG5vdyBpdCB3
b3Jrcy4KKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT3JpZ2luLnggPSAtZnJhbWVJblBhcmVudC5s
ZWZ0OworICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmlnaW4ueSA9IC1mcmFtZUluUGFyZW50LnRv
cDsKKyAgICAgICAgICAgIHZpZXctPlNldE9yaWdpbihwcmV2aW91cy0+YWNjdW11bGF0ZWRPcmln
aW4gKyBhY2N1bXVsYXRlZE9yaWdpbik7CisgICAgICAgICAgICB2aWV3LT5TZXRTY2FsZShwcmV2
aW91cy0+dmlldy0+U2NhbGUoKSk7CisgICAgICAgICAgICB2aWV3LT5TZXRQZW5TaXplKHByZXZp
b3VzLT52aWV3LT5QZW5TaXplKCkpOworICAgICAgICB9CisgICAgICAgIH5MYXllcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsKKyAgICAgICAgICAgICAgICBiaXRtYXAt
PlVubG9jaygpOworICAgICAgICAgICAgICAgIC8vIERlbGV0aW5nIHRoZSBiaXRtYXAgd2lsbCBh
bHNvIHRha2UgY2FyZSBvZiB0aGUgdmlldywKKyAgICAgICAgICAgICAgICAvLyBpZiB0aGVyZSBp
cyBubyBiaXRtYXAsIHRoZSB2aWV3IGRvZXMgbm90IGJlbG9uZyB0byB1cyAoaW5pdGlhbCBsYXll
cikuCisgICAgICAgICAgICAgICAgZGVsZXRlIGJpdG1hcDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGRlbGV0ZSBjdXJyZW50U2hhcGU7CisgICAgICAgIH0KKworICAgICAgICBCVmlldyog
dmlldzsKKyAgICAgICAgQkJpdG1hcCogYml0bWFwOworICAgICAgICByZ2JfY29sb3Igc3Ryb2tl
Q29sb3I7CisgICAgICAgIHJnYl9jb2xvciBmaWxsQ29sb3I7CisgICAgICAgIHVpbnQ4IGdsb2Jh
bEFscGhhOworICAgICAgICBCU2hhcGUqIGN1cnJlbnRTaGFwZTsKKyAgICAgICAgQlBvaW50IGxv
Y2F0aW9uSW5QYXJlbnQ7CisgICAgICAgIEJQb2ludCBhY2N1bXVsYXRlZE9yaWdpbjsKKworICAg
ICAgICBMYXllciogcHJldmlvdXM7CisgICAgfTsKKworICAgIEJWaWV3KiB2aWV3KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRMYXllci0+dmlldzsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFNoYXBlKEJTaGFwZSogc2hhcGUpCisgICAgeworICAgICAgICBkZWxldGUgbV9j
dXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICAgICAgbV9jdXJyZW50TGF5ZXItPmN1cnJl
bnRTaGFwZSA9IHNoYXBlOworICAgIH0KKworICAgIEJTaGFwZSogc2hhcGUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+Y3VycmVudFNoYXBlKQorICAgICAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9IG5ldyBCU2hhcGUoKTsKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudExheWVyLT5jdXJyZW50U2hhcGU7CisgICAgfQorCisgICAgdm9pZCBw
dXNoTGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICB7CisgICAgICAgIG1fY3VycmVudExheWVyID0g
bmV3IExheWVyKG1fY3VycmVudExheWVyKTsKKyAgICAgICAgbV9jdXJyZW50TGF5ZXItPmdsb2Jh
bEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjApOworICAgIH0KKworICAgIHZvaWQgcG9w
TGF5ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+cHJldmlvdXMpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIExheWVyKiBsYXllciA9IG1fY3VycmVudExheWVy
OworICAgICAgICBtX2N1cnJlbnRMYXllciA9IGxheWVyLT5wcmV2aW91czsKKyAgICAgICAgaWYg
KGxheWVyLT5nbG9iYWxBbHBoYSA+IDApIHsKKyAgICAgICAgICAgIC8vIFBvc3QgcHJvY2VzcyB0
aGUgYml0bWFwIGluIG9yZGVyIHRvIGFwcGx5IGdsb2JhbCBhbHBoYS4uLgorICAgICAgICAgICAg
aWYgKGxheWVyLT5nbG9iYWxBbHBoYSA8IDI1NSkgeworICAgICAgICAgICAgICAgIHVpbnQ4KiBi
aXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGxheWVyLT5iaXRtYXAtPkJpdHMoKSk7Cisg
ICAgICAgICAgICAgICAgdWludDMyIHdpZHRoID0gbGF5ZXItPmJpdG1hcC0+Qm91bmRzKCkuSW50
ZWdlcldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAgIHVpbnQzMiBoZWlnaHQgPSBsYXllci0+
Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VySGVpZ2h0KCkgKyAxOworICAgICAgICAgICAgICAgIHVp
bnQzMiBicHIgPSBsYXllci0+Yml0bWFwLT5CeXRlc1BlclJvdygpOworICAgICAgICAgICAgICAg
IHVpbnQ4IGFscGhhID0gbGF5ZXItPmdsb2JhbEFscGhhOworICAgICAgICAgICAgICAgIGZvciAo
dWludDMyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdWlu
dDgqIHAgPSBiaXRzOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVpbnQzMiB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoZXJlIGlz
IGEgbWV0aG9kIHRvIGRvIHNoaWZ0aW5nIHdpdGhvdXQgYml0IGVycm9ycy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBbMF0gPSAodWludDgpKCh1aW50MTYpcFswXSAqIGFscGhhID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSA9ICh1aW50OCkoKHVpbnQxNilwWzFdICogYWxw
aGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwWzJdID0gKHVpbnQ4KSgodWludDE2
KXBbMl0gKiBhbHBoYSA+PiA4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBbM10gPSAodWlu
dDgpKCh1aW50MTYpcFszXSAqIGFscGhhID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAg
cCArPSA0OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGJpdHMg
Kz0gYnByOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEJQ
b2ludCBiaXRtYXBMb2NhdGlvbihsYXllci0+bG9jYXRpb25JblBhcmVudCk7CisgICAgICAgICAg
ICBiaXRtYXBMb2NhdGlvbiAtPSBtX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW47Cisg
ICAgICAgICAgICBtX2N1cnJlbnRMYXllci0+dmlldy0+RHJhd0JpdG1hcChsYXllci0+Yml0bWFw
LCBiaXRtYXBMb2NhdGlvbik7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRlIGxheWVyOworICAg
IH0KKworICAgIExheWVyKiBtX2N1cnJlbnRMYXllcjsKIH07CiAKIEdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3
KQotICAgIDogbV92aWV3KHZpZXcpCisgICAgOiBtX2N1cnJlbnRMYXllcihuZXcgTGF5ZXIodmll
dykpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CisgICAgd2hpbGUgKExheWVyKiBwcmV2aW91cyA9IG1f
Y3VycmVudExheWVyLT5wcmV2aW91cykgeworICAgICAgICBkZWxldGUgbV9jdXJyZW50TGF5ZXI7
CisgICAgICAgIG1fY3VycmVudExheWVyID0gcHJldmlvdXM7CisgICAgfQorICAgIGRlbGV0ZSBt
X2N1cnJlbnRMYXllcjsKIH0KIAogR3JhcGhpY3NDb250ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBAIC03OCwxNyArMjMyLDE4IEBACiAKIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV92aWV3OworICAgIHJldHVybiBtX2RhdGEt
PnZpZXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkK
IHsKLSAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlB1c2hTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQogewotICAgIG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworICAgIG1fZGF0YS0+
bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luIC09IG1fZGF0YS0+dmlldygpLT5Pcmln
aW4oKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogLy8gRHJhd3MgYSBm
aWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTk3LDIxICsyNTIsMTgg
QEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxS
ZWN0KHJlY3QpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQotICAgICAgICBt
X2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwor
ICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUmVjdChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0
eWxlKCkpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29uc3Qg
SW50UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJv
a2VUaGlja25lc3MoKSA8PSAwLjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50Miwg
Z2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlTGluZShw
b2ludDEsIHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKIH0KIAogLy8gVGhpcyBtZXRo
b2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMu
CkBAIC0xMjAsMjIgKzI3Miw3MyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+RmlsbEVsbGlwc2UocmVjdCk7CiAgICAgaWYgKHN0cm9rZVN0eWxl
KCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VFbGxpcHNlKHJl
Y3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJv
a2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUs
IGludCBhbmdsZVNwYW4pCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UgfHwgc3Ryb2tl
VGhpY2tuZXNzKCkgPD0gMC4wZiB8fCAhc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUs
IGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICAvLyBUT0RPOiBUaGUgY29k
ZSBiZWxvdyB3aWxsIG9ubHkgbWFrZSByb3VuZC1jb3JuZXIgYm94ZW4gbG9vayBuaWNlLiBGb3Ig
YW4gdXR0ZXJseSBzaG9ja2luZworICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIHJvdW5kIGNvcm5l
ciBkcmF3aW5nLCBzZWUgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKCkuIEl0IHRy
aWVzCisgICAgLy8gdG8gdXNlIG9uZSAob3IgdHdvKSBhbHBoYSBtYXNrKHMpIHBlciBib3ggY29y
bmVyIHRvIGN1dCBvZmYgYSB0aGlja2VyIHN0cm9rZSBhbmQgZG91YmxlcworICAgIC8vIHRoZSBz
dHJva2Ugd2l0aC4gQWxsIHRoaXMgdG8gYWxpZ24gdGhlIGFyYyB3aXRoIHRoZSBib3ggc2lkZXMu
Li4KKworICAgIGZsb2F0IHBlblNpemUgPSBzdHJva2VUaGlja25lc3MoKSAvIDIuMGY7CisgICAg
bV9kYXRhLT52aWV3KCktPlNldFBlblNpemUocGVuU2l6ZSk7CisgICAgQlJlY3QgYlJlY3QocmVj
dC54KCksIHJlY3QueSgpLCByZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkpOworICAgIGlmIChz
dGFydEFuZ2xlID49IDAgJiYgc3RhcnRBbmdsZSA8IDkwKSB7CisgICAgICAgIGJSZWN0LnJpZ2h0
IC09IHBlblNpemU7CisgICAgICAgIGJSZWN0LnRvcCArPSBwZW5TaXplIC8gMi4wZjsKKyAgICAg
ICAgYlJlY3QuYm90dG9tIC09IHBlblNpemUgLyAyLjBmOworICAgIH0gZWxzZSBpZiAoc3RhcnRB
bmdsZSA+PSA5MCAmJiBzdGFydEFuZ2xlIDwgMTgwKSB7CisgICAgICAgIGJSZWN0LmxlZnQgKz0g
cGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnRvcCArPSBwZW5TaXplIC8gMi4wZjsKKyAg
ICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LmJvdHRv
bSAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0QW5nbGUgPj0gMTgwICYm
IHN0YXJ0QW5nbGUgPCAyNzApIHsKKyAgICAgICAgYlJlY3QubGVmdCArPSBwZW5TaXplIC8gMi4w
ZjsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0
LmJvdHRvbSAtPSBwZW5TaXplOworICAgIH0gZWxzZSBpZiAoc3RhcnRBbmdsZSA+PSAyNzAgJiYg
c3RhcnRBbmdsZSA8IDM2MCkgeworICAgICAgICBiUmVjdC5yaWdodCAtPSBwZW5TaXplOworICAg
ICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZTsKKyAgICB9CisgICAgYlJlY3QuT2Zmc2V0VG8o
Zmxvb3JmKGJSZWN0LmxlZnQpLCBmbG9vcmYoYlJlY3QudG9wKSk7CisgICAgdWludDMyIGZsYWdz
ID0gbV9kYXRhLT52aWV3KCktPkZsYWdzKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZsYWdz
KGZsYWdzIHwgQl9TVUJQSVhFTF9QUkVDSVNFKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tl
QXJjKGJSZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZsYWdzKGZsYWdzKTsKKworICAgIG1fZGF0YS0+dmll
dygpLT5TZXRQZW5TaXplKHN0cm9rZVRoaWNrbmVzcygpKTsKIH0KIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGEtPnNo
YXBlKCkpCisgICAgICAgIHJldHVybjsKKworLy8gICAgbV9kYXRhLT52aWV3KCktPlNldEZpbGxS
dWxlKHRvSGFpa3VGaWxsUnVsZShmaWxsUnVsZSgpKSk7CisgICAgbV9kYXRhLT52aWV3KCktPk1v
dmVQZW5UbyhCX09SSUdJTik7CisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRl
cm4gfHwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50IHx8IHN0cm9rZUNvbG9yKCkuYWxw
aGEoKSkgeworICAgICAgICBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4pCisgICAg
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBlbHNlIGlmIChtX2NvbW1vbi0+c3Rh
dGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisvLyAg
ICAgICAgICAgIEJHcmFkaWVudCogZ3JhZGllbnQgPSBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKy8vICAgICAgICAgICAgZ3JhZGllbnQtPlNldFRy
YW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNm
b3JtKCkpOworLy8gICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlU2hhcGUobV9kYXRh
LT5zaGFwZSgpLCAqZ3JhZGllbnQpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fZGF0
YS0+dmlldygpLT5TdHJva2VTaGFwZShtX2RhdGEtPnNoYXBlKCkpOworICAgIH0KKyAgICBtX2Rh
dGEtPnNldFNoYXBlKDApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24oc2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29s
IHNob3VsZEFudGlhbGlhcykKQEAgLTE0NywxMCArMzUwLDEwIEBACiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50c1tpXSA9IHBvaW50
c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9pbnRzLCBwb2ludHNM
ZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUG9seWdvbihiUG9pbnRzLCBwb2ludHNM
ZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQogICAgICAgICAvLyBT
dHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVBvbHln
b24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwor
ICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5n
dGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2ICszNjEsMTggQEAKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICByZ2JfY29sb3Igb2xkQ29s
b3IgPSBtX2RhdGEtPm1fdmlldy0+SGlnaENvbG9yKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNl
dEhpZ2hDb2xvcihjb2xvcik7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPkZpbGxSZWN0KHJlY3QpOwot
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Iob2xkQ29sb3IpOworICAgIHJnYl9jb2xv
ciBvbGRDb2xvciA9IG1fZGF0YS0+dmlldygpLT5IaWdoQ29sb3IoKTsKKyAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3Qo
cmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOworCisgICAgbV9k
YXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExl
ZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBj
b25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCkBAIC0xNzUsMjUgKzM4MCw4OCBAQAogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIGNvdWxkIGp1
c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsCi0gICAgLy8gdGhlIHNpemVzIGFyZSB0aGUgc2Ft
ZSwgb3IgZXZlbiBpZiB0aGV5IGFyZSBub3QuIE90aGVyd2lzZSBzZXZlcmFsCi0gICAgLy8gRmls
bFJlY3QgYW5kIEZpbGxBcmMgY2FsbHMgYXJlIG5lZWRlZC4KKyAgICBCUG9pbnQgcG9pbnRzWzNd
OworICAgIGNvbnN0IGZsb2F0IGtSYWRpdXNCZXppZXJTY2FsZSA9IDAuNTZmOworCisgICAgQlNo
YXBlIHNoYXBlOworICAgIHNoYXBlLk1vdmVUbyhCUG9pbnQocmVjdC54KCkgKyB0b3BMZWZ0Lndp
ZHRoKCksIHJlY3QueSgpKSk7CisgICAgc2hhcGUuTGluZVRvKEJQb2ludChyZWN0LnJpZ2h0KCkg
LSB0b3BSaWdodC53aWR0aCgpLCByZWN0LnkoKSkpOworICAgIHBvaW50c1swXS54ID0gcmVjdC5y
aWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxlICogdG9wUmlnaHQud2lkdGgoKTsKKyAgICBwb2lu
dHNbMF0ueSA9IHJlY3QueSgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC5yaWdodCgpOworICAg
IHBvaW50c1sxXS55ID0gcmVjdC55KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0b3BSaWdodC5o
ZWlnaHQoKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3QucmlnaHQoKTsKKyAgICBwb2ludHNbMl0u
eSA9IHJlY3QueSgpICsgdG9wUmlnaHQuaGVpZ2h0KCk7CisgICAgc2hhcGUuQmV6aWVyVG8ocG9p
bnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QucmlnaHQoKSwgcmVjdC5ib3R0b20o
KSAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSk7CisgICAgcG9pbnRzWzBdLnggPSByZWN0LnJpZ2h0
KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1c0JlemllclNjYWxl
ICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0LnJpZ2h0KCkg
LSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdodC53aWR0aCgpOworICAgIHBvaW50c1sx
XS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3QucmlnaHQoKSAtIGJv
dHRvbVJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LmJvdHRvbSgpOworICAg
IHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuTGluZVRvKEJQb2ludChyZWN0Lngo
KSArIGJvdHRvbUxlZnQud2lkdGgoKSwgcmVjdC5ib3R0b20oKSkpOworICAgIHBvaW50c1swXS54
ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21MZWZ0LndpZHRoKCk7Cisg
ICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC54
KCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LmJvdHRvbSgpIC0ga1JhZGl1c0JlemllclNjYWxl
ICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzJdLnggPSByZWN0LngoKTsKKyAg
ICBwb2ludHNbMl0ueSA9IHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWlnaHQoKTsKKyAg
ICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNoYXBlLkxpbmVUbyhCUG9pbnQocmVjdC54
KCksIHJlY3QueSgpICsgdG9wTGVmdC5oZWlnaHQoKSkpOworICAgIHBvaW50c1swXS54ID0gcmVj
dC54KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LnkoKSAtIGtSYWRpdXNCZXppZXJTY2FsZSAq
IHRvcExlZnQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFdLnggPSByZWN0LngoKSArIGtSYWRpdXNC
ZXppZXJTY2FsZSAqIHRvcExlZnQud2lkdGgoKTsKKyAgICBwb2ludHNbMV0ueSA9IHJlY3QueSgp
OworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCkgKyB0b3BMZWZ0LndpZHRoKCk7CisgICAgcG9p
bnRzWzJdLnkgPSByZWN0LnkoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNo
YXBlLkNsb3NlKCk7CisKKyAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPnZpZXcoKS0+
SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7Cisg
ICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisgICAgbV9kYXRhLT52aWV3
KCktPkZpbGxTaGFwZSgmc2hhcGUpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3Io
b2xkQ29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFtX2RhdGEtPnNoYXBlKCkpCisgICAgICAgIHJldHVybjsKKwor
Ly8gICAgbV9kYXRhLT52aWV3KCktPlNldEZpbGxSdWxlKHRvSGFpa3VGaWxsUnVsZShmaWxsUnVs
ZSgpKSk7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisKKyAgICBp
ZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0ZS5maWxsR3Jh
ZGllbnQgfHwgZmlsbENvbG9yKCkuYWxwaGEoKSkgeworLy8gICAgICAgIGRyYXdGaWxsZWRTaGFk
b3dQYXRoKHRoaXMsIHAsIHBhdGgpOyBUT0RPOiBXaGF0J3MgdGhpcyBzaGFkb3cgYnVzaW5lc3M/
CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4pCisgICAgICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgICAgICBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbEdy
YWRpZW50KSB7CisgICAgICAgICAgICBCR3JhZGllbnQqIGdyYWRpZW50ID0gbV9jb21tb24tPnN0
YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpOworLy8gICAgICAgICAgICBncmFk
aWVudC0+U2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50
U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBl
KG1fZGF0YS0+c2hhcGUoKSwgKmdyYWRpZW50KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKG1fZGF0YS0+c2hhcGUoKSk7CisgICAgfQorICAg
IG1fZGF0YS0+c2V0U2hhcGUoMCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBh
dGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5zZXRTaGFwZShuZXcg
QlNoYXBlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKCFtX2RhdGEtPnNoYXBl
KCkpCisgICAgICAgIG1fZGF0YS0+c2V0U2hhcGUobmV3IEJTaGFwZSgqcGF0aC5wbGF0Zm9ybVBh
dGgoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhLT5zaGFwZSgpLT5BZGRTaGFwZShwYXRo
LnBsYXRmb3JtUGF0aCgpKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3Qg
RmxvYXRSZWN0JiByZWN0KQpAQCAtMjAyLDEyICs0NzAsMjMgQEAKICAgICAgICAgcmV0dXJuOwog
CiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFp
bkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAgIG1fZGF0YS0+dmlldygpLT5Db25zdHJhaW5D
bGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3RvcjxQYXRoPiYgcGF0aHMsIGludCB3
aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9yKQogewotICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0Zv
Y3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgLyogd2lkdGggKi8sIGlu
dCAvKiBvZmZzZXQgKi8sIGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTIyMSwxMSArNTAwLDExIEBA
CiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMSkgewogICAgICAgICBCUmVnaW9uICAgIHJlZ2lv
bjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0Q291bnQ7ICsraSkKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQogICAgICAgICAgICAgcmVn
aW9uLkluY2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKIAotICAgICAgICBtX2RhdGEtPm1fdmlldy0+
U2V0SGlnaENvbG9yKGNvbG9yKTsKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXctPlN0cm9rZVJlY3Qo
cmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCkt
PlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0
KHJlZ2lvbi5GcmFtZSgpLCBCX01JWEVEX0NPTE9SUyk7CiAgICAgfQogfQogCkBAIC0yNDgsOCAr
NTI3LDEyIEBACiAKIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhl
bHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIHJlY3Q7CisgICAgRmxvYXRSZWN0IHJvdW5kZWQocmVjdCk7CisgICAgcm91bmRlZC5z
ZXRYKHJvdW5kZihyZWN0LngoKSkpOworICAgIHJvdW5kZWQuc2V0WShyb3VuZGYocmVjdC55KCkp
KTsKKyAgICByb3VuZGVkLnNldFdpZHRoKHJvdW5kZihyZWN0LndpZHRoKCkpKTsKKyAgICByb3Vu
ZGVkLnNldEhlaWdodChyb3VuZGYocmVjdC5oZWlnaHQoKSkpOworICAgIHJldHVybiByb3VuZGVk
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9h
dCBvcGFjaXR5KQpAQCAtMjU3LDcgKzU0MCw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEt
PnB1c2hMYXllcihvcGFjaXR5KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKQEAgLTI2NSw3ICs1NDgsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9k
YXRhLT5wb3BMYXllcigpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3Myw3ICs1NTYsMTEgQEAKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5QdXNoU3RhdGUoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0
SGlnaENvbG9yKDAsIDAsIDAsIDApOworICAgIG1fZGF0YS0+dmlldygpLT5TZXREcmF3aW5nTW9k
ZShCX09QX0NPUFkpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0KTsKKyAgICBt
X2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKQEAgLTI4MSwxMCAr
NTY4LDEwIEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9k
YXRhLT5tX3ZpZXctPlNldFBlblNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJv
a2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXct
PlNldFBlblNpemUob2xkU2l6ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldygp
LT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUod2lkdGgpOworICAg
IG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUob2xkU2l6ZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTMwNSw5ICs1OTIs
MTQgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExp
bmVNb2RlKG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5lSm9pbk1vZGUoKSwgbV9kYXRhLT5tX3Zp
ZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5lTW9kZSht
b2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2RlKCksIG1fZGF0YS0+dmlldygpLT5MaW5l
TWl0ZXJMaW1pdCgpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKGNv
bnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNoT2Zmc2V0KQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9p
biBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMzI2LDcgKzYx
OCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRM
aW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT5tX3Zp
ZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5lTW9kZSht
X2RhdGEtPnZpZXcoKS0+TGluZUNhcE1vZGUoKSwgbW9kZSwgbV9kYXRhLT52aWV3KCktPkxpbmVN
aXRlckxpbWl0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChm
bG9hdCBsaW1pdCkKQEAgLTMzNCw3ICs2MjYsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZSht
X2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVKb2luTW9k
ZSgpLCBsaW1pdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1fZGF0YS0+dmll
dygpLT5MaW5lQ2FwTW9kZSgpLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2RlKCksIGxpbWl0
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0IG9wYWNpdHkpCkBA
IC0zNDIsNyArNjM0LDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5
ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjBmKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBv
cCkKQEAgLTM2Myw3ICs2NTUsNyBAQAogICAgICAgICBwcmludGYoIkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBvcnRlZCBjb21wb3NpdGUgb3BlcmF0aW9uICVz
XG4iLAogICAgICAgICAgICAgICAgIGNvbXBvc2l0ZU9wZXJhdG9yTmFtZShvcCkudXRmOCgpLmRh
dGEoKSk7CiAgICAgfQotICAgIG1fZGF0YS0+bV92aWV3LT5TZXREcmF3aW5nTW9kZShtb2RlKTsK
KyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RHJhd2luZ01vZGUobW9kZSk7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zNzEsNyArNjYzLDcgQEAK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2Rh
dGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdpb24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZh
c0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5NCwxNCArNjg2LDIyIEBACiAKIEFmZmluZVRy
YW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7CisgICAgLy8gVE9E
TzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAg
ICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgIEJQb2ludCBvcmlnaW4gPSBtX2RhdGEtPnZp
ZXcoKS0+T3JpZ2luKCk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShvcmlnaW4ueCwgb3JpZ2luLnkp
OworICAgIG1hdHJpeC5zY2FsZShtX2RhdGEtPnZpZXcoKS0+U2NhbGUoKSk7CisgICAgcmV0dXJu
IG1hdHJpeDsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250ZXh0OjpnZXRD
VE0oKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIFRyYW5zZm9y
bWF0aW9uTWF0cml4KCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhl
IGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7
CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsKKyAgICBtYXRy
aXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNjYWxlKG1fZGF0
YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00MDksMTMgKzcwOSwx
OCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+YWNjdW11bGF0
ZWRPcmlnaW4ueCArPSB4OworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVk
T3JpZ2luLnkgKz0geTsKKyAgICBCUG9pbnQgb3JpZ2luKG1fZGF0YS0+dmlldygpLT5PcmlnaW4o
KSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldE9yaWdpbihvcmlnaW4ueCArIHgsIG9yaWdpbi55
ICsgeSk7CisKKyAgICAvLyBUT0RPOiBjdXJyZW50UGF0aCBuZWVkcyB0byBiZSB0cmFuc2xhdGVk
IGFsb25nLCBhY2NvcmRpbmcgdG8gUXQgaW1wbGVtZW50YXRpb24KIH0KIAogSW50UG9pbnQgR3Jh
cGhpY3NDb250ZXh0OjpvcmlnaW4oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIEludFBvaW50KDAsIDApOworICAgIEJQb2ludCBvcmlnaW4gPSBtX2RhdGEtPnZpZXcoKS0+
T3JpZ2luKCk7CisgICAgcmV0dXJuIEludFBvaW50KG9yaWdpbi54LCBvcmlnaW4ueSk7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgcmFkaWFucykKQEAgLTQzMSw3ICs3
MzYsOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gTk9URTogTm9uLXVuaWZvcm0gc2NhbGluZyBu
b3Qgc3VwcG9ydGVkIG9uIEhhaWt1LCB5ZXQuCisgICAgbV9kYXRhLT52aWV3KCktPlNldFNjYWxl
KChzaXplLndpZHRoKCkgKyBzaXplLmhlaWdodCgpKSAvIDIpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtNDM5LDcgKzc0NSw5IEBA
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVnaW9uIHJlZ2lvbihtX2RhdGEtPnZpZXcoKS0+Qm91bmRz
KCkpOworICAgIHJlZ2lvbi5FeGNsdWRlKHJlY3QpOworICAgIG1fZGF0YS0+dmlldygpLT5Db25z
dHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC00NTUsNiArNzYz
LDkgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAg
ICAvLyBOT1RFOiBVc2VkIGJ5IFJlbmRlckJveE1vZGVsT2JqZWN0IHRvIGNsaXAgb3V0IHRoZSBp
bm5lciBwYXJ0IG9mIGFuIGFyYyB3aGVuIHJlbmRpbmcgYm94IGNvcm5lcnMuLi4KKyAgICAvLyBU
T0RPOiBVc2UgdGhpcyBtZXRob2QgdG8gZGV0ZWN0IGlmIHdlIGFyZSByZW5kZXJpbmcgYSByb3Vu
ZC1jb3JuZXItYm94Li4uCisKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC00OTMsNyAr
ODA0LDcgQEAKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udChjb25zdCBG
b250JiBmb250KQogewotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRGb250KGZvbnQucHJpbWFyeUZv
bnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0Rm9u
dChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0YSgpLmZvbnQoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTAxLDcgKzgxMiw3IEBACiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXct
PlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihj
b2xvcik7CiB9CiAKIHBhdHRlcm4gR3JhcGhpY3NDb250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxl
KCkKQEAgLTUzNSw3ICs4NDYsNyBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRQZW5TaXplKHRoaWNrbmVzcyk7
CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUodGhpY2tuZXNzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwg
Q29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTQzLDcgKzg1NCw3IEBACiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNl
dEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xv
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkK
</data>
<flag name="review"
          id="30649"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48105</attachid>
            <date>2010-02-03 23:56:46 -0800</date>
            <delta_ts>2010-02-04 00:53:15 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>41061</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM4IEBACisyMDEwLTAyLTAzICBTdGVwaGFuIEHDn211cyAgPHN1cGVyc3RpcHBp
QGdteC5kZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBJbXBsZW1lbnRpbmcgUGF0aEhhaWt1IGFuZCBHcmFkaWVudEhhaWt1LCBmbGVzaGluZyBvdXQg
R3JhcGhpY3NDb250ZXh0SGFpa3UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM0NTI3CisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50Lmg6IEFkZGVkIEhhaWt1IGRl
ZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOiBBZGRlZCBIYWlr
dSBkZWZpbml0aW9uLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50
SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSk6
IERlbGV0ZSBCR3JhZGllbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYWRpZW50OjpwbGF0Zm9ybUdy
YWRpZW50KTogQ3JlYXRlIGFuZCBjYWNoZSBCR3JhZGllbnQKKyAgICAgICAgKFdlYkNvcmU6Okdy
YWRpZW50OjpmaWxsKTogRmlsbCB3aXRoIEJHcmFkaWVudAorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6TGF5ZXI6OkxheWVyKTogU3VwcG9ydCBm
b3IgdHJhbnNwYXJlbmN5IGxheWVycworICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpMYXllcjo6fkxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6dmlldyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OnNldFNoYXBlKTogU3VwcG9ydCBmb3IgbWFpbnRh
aW5pbmcgYSBjdXJyZW50IHBhdGgKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6c2hhcGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlOjpwdXNoTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlOjpwb3BMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5H
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBCVmlldyBo
YXMgYmVlbiBjaGFuZ2VkIHRvIHVzZSBhbiBhY2Nlc3NvciBtZXRob2QgYW5kIHJldHVybnMgdGhl
IGN1cnJlbnQgbGF5ZXIncyB2aWV3LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzYXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKTogQ2hhbmdlZCBpbXBs
ZW1lbnRhdGlvbiB0byBsb29rIGdvb2Qgb24gYm94IGVsZW1lbnRzIHdpdGhvdXQgaW1wbGVtZW50
aW5nIGNsaXBwaW5nIHBhdGhzLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
dHJva2VQYXRoKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QpOiBJbXBsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgpOiBJbXBsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YmVnaW5QYXRoKTogSW1wbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmFkZFBhdGgpOiBJbXBsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQ
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyk6
IEFkZGVkIHRvIGZpeCBidWlsZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpy
b3VuZFRvRGV2aWNlUGl4ZWxzKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXllcik6IEltcGxlbWVudGVkCisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKTogSW1wbGVt
ZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KTogSW1w
bGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXApOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lRGFzaCk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVKb2luKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Z2V0QWZmaW5lQ1RNKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Z2V0Q1RNKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6dHJhbnNsYXRlKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6b3JpZ2luKTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2NhbGUpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpjbGlwT3V0KTogSW1wbGVtZW50ZWQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXApOiBBZGRlZCBjb21tZW50CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVz
cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENv
bG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwOiBJ
bXBsZW1lbnRlZCB2aWEgQlNoYXBlCisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OnRyYW5zbGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjpib3VuZGluZ1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6bW92ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZExpbmVUbyk6CisgICAg
ICAgIChXZWJDb3JlOjpQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhdGg6OmNsb3NlU3VicGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjphZGRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6
OmlzRW1wdHkpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNmb3JtKToKKyAgICAgICAg
KFdlYkNvcmU6OlBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdCk6IEltcGxlbWVudGVkIGluY29tcGxl
dGUgKGRvZXMgbm90IHRha2Ugc3Ryb2tlIHdpZHRoIGludG8gYWNjb3VudCkKKwogMjAxMC0wMi0w
MyAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRv
d3MgRGVidWdfQWxsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShy
ZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBACiBjbGFzcyBTa1BhdGg7CiB0eXBlZGVmIFNrUGF0
aCBQbGF0Zm9ybVBhdGg7CiAjZWxpZiBQTEFURk9STShIQUlLVSkKLWNsYXNzIEJSZWdpb247Ci10
eXBlZGVmIEJSZWdpb24gUGxhdGZvcm1QYXRoOworY2xhc3MgQlNoYXBlOwordHlwZWRlZiBCU2hh
cGUgUGxhdGZvcm1QYXRoOwogI2VsaWYgT1MoV0lOQ0UpCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgUGxhdGZvcm1QYXRoOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAKIGNsYXNzIFNrU2hhZGVyOwog
dHlwZWRlZiBjbGFzcyBTa1NoYWRlciogUGxhdGZvcm1HcmFkaWVudDsKIHR5cGVkZWYgY2xhc3Mg
U2tTaGFkZXIqIFBsYXRmb3JtUGF0dGVybjsKKyNlbGlmIFBMQVRGT1JNKEhBSUtVKQorY2xhc3Mg
QkdyYWRpZW50OwordHlwZWRlZiBCR3JhZGllbnQqIFBsYXRmb3JtR3JhZGllbnQ7CiAjZWxzZQog
dHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYWRpZW50OwogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBM
ZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBT
dGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtMzAsMTUgKzMxLDIwIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+CisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVBcHBsaWVyLmgi
CisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxCaXRtYXAuaD4K
KyNpbmNsdWRlIDxTaGFwZS5oPgorI2luY2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFBhdGg6OlBhdGgoKQotICAgIDogbV9wYXRoKG5ldyBCUmVnaW9uKCkpCisgICAg
OiBtX3BhdGgobmV3IEJTaGFwZSgpKQogewogfQogCkBAIC00OCw3ICs1NCw3IEBACiB9CiAKIFBh
dGg6OlBhdGgoY29uc3QgUGF0aCYgb3RoZXIpCi0gICAgOiBtX3BhdGgobmV3IEJSZWdpb24oKm90
aGVyLnBsYXRmb3JtUGF0aCgpKSkKKyAgICA6IG1fcGF0aChuZXcgQlNoYXBlKCpvdGhlci5wbGF0
Zm9ybVBhdGgoKSkpCiB7CiB9CiAKQEAgLTY3LDI4ICs3MywxMjUgQEAKIAogYm9vbCBQYXRoOjpj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9wYXRoLT5Db250YWlucyhwb2ludCk7CisgICAgLy8gVE9ETzogVGhpcyBp
cyBwcm9iYWJseSB0b28gZXhwZW5zaXZlLiBVc2Ugb25lIGluc3RhbmNlIG9mIGEgc2NyYXRjaAor
ICAgIC8vIGltYWdlLgorICAgIEJCaXRtYXAgYml0bWFwKEJSZWN0KDAsIDAsIDAsIDApLAorICAg
ICAgICBCX0JJVE1BUF9DTEVBUl9UT19XSElURSB8IEJfQklUTUFQX0FDQ0VQVFNfVklFV1MsIEJf
UkdCMzIpOworICAgIEJWaWV3IHZpZXcoQlJlY3QoMCwgMCwgMCwgMCksICIiLCAwLCAwKTsKKyAg
ICBiaXRtYXAuTG9jaygpOworICAgIGJpdG1hcC5BZGRDaGlsZCgmdmlldyk7CisgICAgLy8gQ3Vy
cmVudCBwZW4gbG9jYXRpb24gaXMgdXNlZCBhcyBvcmlnaW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2
aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsKKyAgICAvLyBUT0RPOiBIYW5k
bGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1cHBvcnQgaW4gQlZpZXcsIHRoZSBiYWNrZW5kIGFscmVh
ZHkKKyAgICAvLyBzdXBwb3J0IGl0LikKKyAgICB2aWV3LkZpbGxTaGFwZShtX3BhdGgpOworICAg
IHZpZXcuU3luYygpOworCisgICAgdWludDgqIGJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnQ4
Kj4oYml0bWFwLkJpdHMoKSk7CisgICAgYm9vbCByZXN1bHQgPSBiaXRzWzBdIDwgMTI4OworCisg
ICAgdmlldy5SZW1vdmVTZWxmKCk7CisgICAgYml0bWFwLlVubG9jaygpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKK2Jvb2wgUGF0aDo6c3Ryb2tlQ29udGFpbnMoU3Ryb2tlU3R5bGVBcHBsaWVy
KiBhcHBsaWVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlQo
YXBwbGllcik7CisKKyAgICAvLyBUT0RPOiBUaGlzIGlzIHByb2JhYmx5IHRvbyBleHBlbnNpdmUu
IFVzZSBvbmUgaW5zdGFuY2Ugb2YgYSBzY3JhdGNoCisgICAgLy8gaW1hZ2UsIHNlZSBhYm92ZS4K
KyAgICAvLyBUT0RPOiBDb2RlIGR1cGxpY2F0aW9uIGFib3ZlLgorICAgIEJCaXRtYXAgYml0bWFw
KEJSZWN0KDAsIDAsIDAsIDApLAorICAgICAgICBCX0JJVE1BUF9DTEVBUl9UT19XSElURSB8IEJf
QklUTUFQX0FDQ0VQVFNfVklFV1MsIEJfUkdCMzIpOworICAgIEJWaWV3IHZpZXcoQlJlY3QoMCwg
MCwgMCwgMCksICIiLCAwLCAwKTsKKyAgICBiaXRtYXAuTG9jaygpOworICAgIGJpdG1hcC5BZGRD
aGlsZCgmdmlldyk7CisgICAgLy8gQ3VycmVudCBwZW4gbG9jYXRpb24gaXMgdXNlZCBhcyBvcmln
aW4gZm9yIHRoZSBzaGFwZS4KKyAgICB2aWV3Lk1vdmVQZW5UbygtcG9pbnQueCgpLCAtcG9pbnQu
eSgpKTsKKyAgICAvLyBUT0RPOiBIYW5kbGUgV2luZFJ1bGUuLi4gKG5lZWRzIHN1cHBvcnQgaW4g
QlZpZXcsIHRoZSBiYWNrZW5kIGFscmVhZHkKKyAgICAvLyBzdXBwb3J0IGl0LikKKyAgICBHcmFw
aGljc0NvbnRleHQgY29udGV4dCgmdmlldyk7CisgICAgYXBwbGllci0+c3Ryb2tlU3R5bGUoJmNv
bnRleHQpOworICAgIAorICAgIHZpZXcuU3Ryb2tlU2hhcGUobV9wYXRoKTsKKyAgICB2aWV3LlN5
bmMoKTsKKworICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGJpdG1h
cC5CaXRzKCkpOworICAgIGJvb2wgcmVzdWx0ID0gYml0c1swXSA8IDEyODsKKworICAgIHZpZXcu
UmVtb3ZlU2VsZigpOworICAgIGJpdG1hcC5VbmxvY2soKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUpCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9k
aWZ5IHRoZSBwYXRoIGRhdGEgImluIHBsYWNlIgorICAgIGNsYXNzIFRyYW5zbGF0ZUl0ZXJhdG9y
IDogcHVibGljIEJTaGFwZUl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zbGF0
ZUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUsIGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSkKKyAgICAgICAg
ICAgIDogbV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV9zaXplKHNpemUpCisgICAgICAg
IHsKKyAgICAgICAgfQorICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVNb3ZlVG8oQlBv
aW50KiBwb2ludCkKKyAgICAgICAgeworICAgICAgICAgICAgcG9pbnQtPnggKz0gbV9zaXplLndp
ZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZp
cnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGlu
ZVB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAg
ICAgICAgICAgICAgbGluZVB0cy0+eCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAgICAg
ICBsaW5lUHRzLT55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBsaW5lUHRz
Kys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUJlemllclRvKGludDMyIGJlemllckNv
dW50LCBCUG9pbnQqIGJlemllclB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGJl
emllckNvdW50LS0pIHsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMF0ueCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMF0ueSArPSBtX3NpemUuaGVpZ2h0
KCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdLnggKz0gbV9zaXplLndpZHRoKCk7Cisg
ICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdLnkgKz0gbV9zaXplLmhlaWdodCgpOworICAgICAg
ICAgICAgICAgIGJlemllclB0c1syXS54ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAg
ICAgIGJlemllclB0c1syXS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICBi
ZXppZXJQdHMgKz0gMzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOwor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQ2xvc2UoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQlNoYXBlKiBtX3NoYXBlOworICAgICAgICBjb25zdCBGbG9hdFNpemUmIG1f
c2l6ZTsKKyAgICB9IHRyYW5zbGF0ZUl0ZXJhdG9yKG1fcGF0aCwgc2l6ZSk7CisKKyAgICB0cmFu
c2xhdGVJdGVyYXRvci5JdGVyYXRlKG1fcGF0aCk7CiB9CiAKIEZsb2F0UmVjdCBQYXRoOjpib3Vu
ZGluZ1JlY3QoKSBjb25zdAogewotICAgIHJldHVybiBtX3BhdGgtPkZyYW1lKCk7CisgICAgcmV0
dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKIHZvaWQgUGF0aDo6bW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KQogewotICAgIC8vIEZJWE1FOiBVc2UgT2Zmc2V0Qnk/Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBCUmVjdCBib3VuZHMgPSBtX3BhdGgtPkJvdW5kcygpOworICAgIHRy
YW5zbGF0ZShGbG9hdFNpemUocG9pbnQueCgpIC0gYm91bmRzLmxlZnQsIHBvaW50LnkoKSAtIGJv
dW5kcy50b3ApKTsKIH0KIAogdm9pZCBQYXRoOjphZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fcGF0aC0+TGluZVRvKHApOwogfQog
CiB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNwLCBjb25zdCBG
bG9hdFBvaW50JiBwKQpAQCAtOTgsNyArMjAxLDExIEBACiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVy
Q3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29u
c3QgRmxvYXRQb2ludCYgcCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBw
b2ludHNbM107CisgICAgcG9pbnRzWzBdID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNwMjsKKyAg
ICBwb2ludHNbMl0gPSBwOworICAgIG1fcGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0KIAogdm9p
ZCBQYXRoOjphZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYg
cDIsIGZsb2F0IHJhZGl1cykKQEAgLTEwOCw3ICsyMTUsNyBAQAogCiB2b2lkIFBhdGg6OmNsb3Nl
U3VicGF0aCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7
CiB9CiAKIHZvaWQgUGF0aDo6YWRkQXJjKGNvbnN0IEZsb2F0UG9pbnQmIHAsIGZsb2F0IHIsIGZs
b2F0IHNhciwgZmxvYXQgZWFyLCBib29sIGFudGljbG9ja3dpc2UpCkBAIC0xMTgsNyArMjI1LDEy
IEBACiAKIHZvaWQgUGF0aDo6YWRkUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7Ci0gICAgbV9w
YXRoLT5JbmNsdWRlKHIpOworICAgIG1fcGF0aC0+Q2xvc2UoKTsKKyAgICBtX3BhdGgtPk1vdmVU
byhCUG9pbnQoci54KCksIHIueSgpKSk7CisgICAgbV9wYXRoLT5MaW5lVG8oQlBvaW50KHIueCgp
ICsgci53aWR0aCgpLCByLnkoKSkpOworICAgIG1fcGF0aC0+TGluZVRvKEJQb2ludChyLngoKSAr
IHIud2lkdGgoKSwgci55KCkgKyByLmhlaWdodCgpKSk7CisgICAgbV9wYXRoLT5MaW5lVG8oQlBv
aW50KHIueCgpLCByLnkoKSArIHIuaGVpZ2h0KCkpKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CiB9
CiAKIHZvaWQgUGF0aDo6YWRkRWxsaXBzZShjb25zdCBGbG9hdFJlY3QmIHIpCkBAIC0xMjgsMTIg
KzI0MCwxMiBAQAogCiB2b2lkIFBhdGg6OmNsZWFyKCkKIHsKLSAgICBtX3BhdGgtPk1ha2VFbXB0
eSgpOworICAgIG1fcGF0aC0+Q2xlYXIoKTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7CisgICAgcmV0dXJu
ICFtX3BhdGgtPkJvdW5kcygpLklzVmFsaWQoKTsKIH0KIAogU3RyaW5nIFBhdGg6OmRlYnVnU3Ry
aW5nKCkgY29uc3QKQEAgLTE0OSwxOCArMjYxLDEwNiBAQAogCiB2b2lkIFBhdGg6OnRyYW5zZm9y
bShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIC8vIEJTaGFwZUl0ZXJhdG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGgg
ZGF0YSAiaW4gcGxhY2UiCisgICAgY2xhc3MgVHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNo
YXBlSXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNo
YXBlKiBzaGFwZSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0pCisgICAgICAgICAg
ICA6IG1fc2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fdHJhbnNmb3JtKHRyYW5zZm9ybSkK
KyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZU1v
dmVUbyhCUG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAgICAgICAqcG9pbnQgPSBtX3Ry
YW5zZm9ybS5tYXBQb2ludCgqcG9pbnQpOworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGlu
ZUNvdW50LCBCUG9pbnQqIGxpbmVQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChs
aW5lQ291bnQtLSkgeworICAgICAgICAgICAgICAgICpsaW5lUHRzID0gbV90cmFuc2Zvcm0ubWFw
UG9pbnQoKmxpbmVQdHMpOworICAgICAgICAgICAgICAgIGxpbmVQdHMrKzsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVh
bCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVyVG8oaW50MzIgYmV6aWVyQ291bnQsIEJQb2ludCogYmV6
aWVyUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoYmV6aWVyQ291bnQtLSkgewor
ICAgICAgICAgICAgICAgIGJlemllclB0c1swXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemll
clB0c1swXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFdID0gbV90cmFuc2Zvcm0ubWFw
UG9pbnQoYmV6aWVyUHRzWzFdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMl0gPSBtX3Ry
YW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMl0pOworICAgICAgICAgICAgICAgIGJlemllclB0
cyArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAg
IH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVDbG9zZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBCU2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgbV90
cmFuc2Zvcm07CisgICAgfSB0cmFuc2Zvcm1JdGVyYXRvcihtX3BhdGgsIHRyYW5zZm9ybSk7CisK
KyAgICB0cmFuc2Zvcm1JdGVyYXRvci5JdGVyYXRlKG1fcGF0aCk7CiB9CiAKIHZvaWQgUGF0aDo6
dHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICAvLyBCU2hhcGVJdGVyYXRvciBhbGxvd3MgdXMgdG8gbW9k
aWZ5IHRoZSBwYXRoIGRhdGEgImluIHBsYWNlIgorICAgIGNsYXNzIFRyYW5zZm9ybUl0ZXJhdG9y
IDogcHVibGljIEJTaGFwZUl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFRyYW5zZm9y
bUl0ZXJhdG9yKEJTaGFwZSogc2hhcGUsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0pCisgICAgICAgICAgICA6IG1fc2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fdHJh
bnNmb3JtKHRyYW5zZm9ybSkKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZU1vdmVUbyhCUG9pbnQqIHBvaW50KQorICAgICAgICB7CisgICAgICAg
ICAgICAqcG9pbnQgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqcG9pbnQpOworICAgICAgICAgICAg
cmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJh
dGVMaW5lVG8oaW50MzIgbGluZUNvdW50LCBCUG9pbnQqIGxpbmVQdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHdoaWxlIChsaW5lQ291bnQtLSkgeworICAgICAgICAgICAgICAgICpsaW5lUHRz
ID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoKmxpbmVQdHMpOworICAgICAgICAgICAgICAgIGxpbmVQ
dHMrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9
CisKKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlQmV6aWVyVG8oaW50MzIgYmV6aWVy
Q291bnQsIEJQb2ludCogYmV6aWVyUHRzKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAo
YmV6aWVyQ291bnQtLSkgeworICAgICAgICAgICAgICAgIGJlemllclB0c1swXSA9IG1fdHJhbnNm
b3JtLm1hcFBvaW50KGJlemllclB0c1swXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzFd
ID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzFdKTsKKyAgICAgICAgICAgICAgICBi
ZXppZXJQdHNbMl0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMl0pOworICAgICAg
ICAgICAgICAgIGJlemllclB0cyArPSAzOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVD
bG9zZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBCX09LOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBCU2hhcGUqIG1fc2hhcGU7CisgICAgICAgIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5zZm9ybUl0ZXJhdG9y
KG1fcGF0aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9yLkl0ZXJhdGUobV9w
YXRoKTsKIH0KIAogRmxvYXRSZWN0IFBhdGg6OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHls
ZUFwcGxpZXIqIGFwcGxpZXIpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4g
RmxvYXRSZWN0KCk7CisgICAgcmV0dXJuIG1fcGF0aC0+Qm91bmRzKCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YWlrdS9HcmFkaWVudEhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBLZXZpbiBPbGxpdmllciA8a2V2
aW5vQHRoZW9sbGl2aWVycy5jb20+ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQHRoZW9sbGl2aWVycy5jb20+Cisg
KiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjcsMjYgKzI4LDQ1IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhZGllbnQuaCIKIAotI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCisjaW5jbHVkZSA8R3JhZGllbnRMaW5lYXIuaD4KKyNpbmNsdWRlIDxHcmFkaWVu
dFJhZGlhbC5oPgorI2luY2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHZvaWQgR3JhZGllbnQ6OnBsYXRmb3JtRGVzdHJveSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICBkZWxldGUgbV9ncmFkaWVudDsKIH0KIAogUGxhdGZvcm1HcmFkaWVudCBHcmFkaWVu
dDo6cGxhdGZvcm1HcmFkaWVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1
cm4gMDsKKyAgICBpZiAobV9ncmFkaWVudCkKKyAgICAgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CisK
KyAgICBpZiAobV9yYWRpYWwpIHsKKyAgICAgICAgLy8gVE9ETzogU3VwcG9ydCBtX3IwPworICAg
ICAgICBtX2dyYWRpZW50ID0gbmV3IEJHcmFkaWVudFJhZGlhbChtX3AwLCBtX3IxKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9ncmFkaWVudCA9IG5ldyBCR3JhZGllbnRMaW5lYXIobV9wMCwgbV9w
MSk7CisgICAgc2l6ZV90IHNpemUgPSBtX3N0b3BzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBDb2xvclN0b3AmIHN0b3AgPSBt
X3N0b3BzW2ldOworICAgICAgICByZ2JfY29sb3IgY29sb3I7CisgICAgICAgIGNvbG9yLnJlZCA9
ICh1aW50OCkoc3RvcC5yZWQgKiAyNTUuMCk7CisgICAgICAgIGNvbG9yLmdyZWVuID0gKHVpbnQ4
KShzdG9wLmdyZWVuICogMjU1LjApOworICAgICAgICBjb2xvci5ibHVlID0gKHVpbnQ4KShzdG9w
LmJsdWUgKiAyNTUuMCk7CisgICAgICAgIGNvbG9yLmFscGhhID0gKHVpbnQ4KShzdG9wLmFscGhh
ICogMjU1LjApOworICAgICAgICBtX2dyYWRpZW50LT5BZGRDb2xvcihjb2xvciwgc3RvcC5zdG9w
KTsKKyAgICB9CisgICAgcmV0dXJuIG1fZ3JhZGllbnQ7CiB9CiAKLXZvaWQgR3JhZGllbnQ6OmZp
bGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JikKK3ZvaWQgR3JhZGllbnQ6OmZp
bGwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Rmls
bFJlY3QocmVjdCwgKm1fZ3JhZGllbnQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYXBo
aWNzQ29udGV4dEhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhaWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHD
n211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgpAQCAtMzMsMTIgKzM0LDE1IEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2
YXRlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAj
aW5jbHVkZSAiUGVuLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNs
dWRlIDxCaXRtYXAuaD4KICNpbmNsdWRlIDxHcmFwaGljc0RlZnMuaD4KICNpbmNsdWRlIDxSZWdp
b24uaD4KKyNpbmNsdWRlIDxTaGFwZS5oPgogI2luY2x1ZGUgPFZpZXcuaD4KICNpbmNsdWRlIDxX
aW5kb3cuaD4KICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtNTEsMTYgKzU1LDE2NiBAQAogICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShCVmlldyogdmlldyk7CiAgICAgfkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCi0gICAgQlZpZXcqIG1fdmlldzsKKyAgICBzdHJ1
Y3QgTGF5ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5ZXIoQlZpZXcqIF92aWV3KQorICAg
ICAgICAgICAgOiB2aWV3KF92aWV3KQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAg
ICAgICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAg
ICAgICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNj
dW11bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN0cm9rZUNvbG9yLnJlZCA9IDA7CisgICAgICAgICAgICBzdHJv
a2VDb2xvci5ncmVlbiA9IDA7CisgICAgICAgICAgICBzdHJva2VDb2xvci5ibHVlID0gMDsKKyAg
ICAgICAgICAgIHN0cm9rZUNvbG9yLmFscGhhID0gMDsKKworICAgICAgICAgICAgZmlsbENvbG9y
LnJlZCA9IDA7CisgICAgICAgICAgICBmaWxsQ29sb3IuZ3JlZW4gPSAwOworICAgICAgICAgICAg
ZmlsbENvbG9yLmJsdWUgPSAwOworICAgICAgICAgICAgZmlsbENvbG9yLmFscGhhID0gMjU1Owor
ICAgICAgICB9CisgICAgICAgIExheWVyKExheWVyKiBwcmV2aW91cykKKyAgICAgICAgICAgIDog
dmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxw
aGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9j
YXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4o
Ql9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHByZXZpb3VzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzdHJva2VDb2xvci5yZWQgPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3Iu
Z3JlZW4gPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3IuYmx1ZSA9IDA7CisgICAgICAgICAg
ICBzdHJva2VDb2xvci5hbHBoYSA9IDA7CisKKyAgICAgICAgICAgIGZpbGxDb2xvci5yZWQgPSAw
OworICAgICAgICAgICAgZmlsbENvbG9yLmdyZWVuID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xv
ci5ibHVlID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xvci5hbHBoYSA9IDI1NTsKKworICAgICAg
ICAgICAgQlJlZ2lvbiBwYXJlbnRDbGlwcGluZzsKKyAgICAgICAgICAgIHByZXZpb3VzLT52aWV3
LT5HZXRDbGlwcGluZ1JlZ2lvbigmcGFyZW50Q2xpcHBpbmcpOworICAgICAgICAgICAgQlJlY3Qg
ZnJhbWVJblBhcmVudCA9IHBhcmVudENsaXBwaW5nLkZyYW1lKCk7CisgICAgICAgICAgICBpZiAo
IWZyYW1lSW5QYXJlbnQuSXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyYW1lSW5QYXJlbnQg
PSBwcmV2aW91cy0+dmlldy0+Qm91bmRzKCk7CisgICAgICAgICAgICBCUmVjdCBib3VuZHMgPSBm
cmFtZUluUGFyZW50Lk9mZnNldFRvQ29weShCX09SSUdJTik7CisgICAgICAgICAgICBsb2NhdGlv
bkluUGFyZW50ICs9IGZyYW1lSW5QYXJlbnQuTGVmdFRvcCgpOworICAgICAgICAgICAgdmlldyA9
IG5ldyBCVmlldyhib3VuZHMsICJXZWJDb3JlIHRyYW5zcGFyZW5jeSBsYXllciIsIDAsIDApOwor
ICAgICAgICAgICAgYml0bWFwID0gbmV3IEJCaXRtYXAoYm91bmRzLCBCX1JHQkEzMiwgdHJ1ZSk7
CisgICAgICAgICAgICBiaXRtYXAtPkxvY2soKTsKKyAgICAgICAgICAgIGJpdG1hcC0+QWRkQ2hp
bGQodmlldyk7CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgICAgICAgICB2aWV3LT5GaWxsUmVjdCh2aWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IocHJldmlvdXMtPnZpZXctPkhpZ2hDb2xvcigpKTsKKyAgICAgICAg
ICAgIHZpZXctPlNldERyYXdpbmdNb2RlKHByZXZpb3VzLT52aWV3LT5EcmF3aW5nTW9kZSgpKTsK
KyAgICAgICAgICAgIHZpZXctPlNldEJsZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhB
X0NPTVBPU0lURSk7CisgICAgICAgICAgICAvLyBUT0RPOiBsb2NhdGlvbkluUGFyZW50IGFuZCBh
Y2N1bXVsYXRlZE9yaWdpbiBjYW4KKyAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWVob3cgYmUg
bWVyZ2VkLiBCdXQgZm9yIG5vdyBpdCB3b3Jrcy4KKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT3Jp
Z2luLnggPSAtZnJhbWVJblBhcmVudC5sZWZ0OworICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmln
aW4ueSA9IC1mcmFtZUluUGFyZW50LnRvcDsKKyAgICAgICAgICAgIHZpZXctPlNldE9yaWdpbihw
cmV2aW91cy0+YWNjdW11bGF0ZWRPcmlnaW4gKyBhY2N1bXVsYXRlZE9yaWdpbik7CisgICAgICAg
ICAgICB2aWV3LT5TZXRTY2FsZShwcmV2aW91cy0+dmlldy0+U2NhbGUoKSk7CisgICAgICAgICAg
ICB2aWV3LT5TZXRQZW5TaXplKHByZXZpb3VzLT52aWV3LT5QZW5TaXplKCkpOworICAgICAgICB9
CisgICAgICAgIH5MYXllcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsK
KyAgICAgICAgICAgICAgICBiaXRtYXAtPlVubG9jaygpOworICAgICAgICAgICAgICAgIC8vIERl
bGV0aW5nIHRoZSBiaXRtYXAgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiB0aGUgdmlldywKKyAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBiaXRtYXAsIHRoZSB2aWV3IGRvZXMgbm90IGJl
bG9uZyB0byB1cyAoaW5pdGlhbCBsYXllcikuCisgICAgICAgICAgICAgICAgZGVsZXRlIGJpdG1h
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50U2hhcGU7CisgICAg
ICAgIH0KKworICAgICAgICBCVmlldyogdmlldzsKKyAgICAgICAgQkJpdG1hcCogYml0bWFwOwor
ICAgICAgICByZ2JfY29sb3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIHJnYl9jb2xvciBmaWxsQ29s
b3I7CisgICAgICAgIHVpbnQ4IGdsb2JhbEFscGhhOworICAgICAgICBCU2hhcGUqIGN1cnJlbnRT
aGFwZTsKKyAgICAgICAgQlBvaW50IGxvY2F0aW9uSW5QYXJlbnQ7CisgICAgICAgIEJQb2ludCBh
Y2N1bXVsYXRlZE9yaWdpbjsKKworICAgICAgICBMYXllciogcHJldmlvdXM7CisgICAgfTsKKwor
ICAgIEJWaWV3KiB2aWV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRM
YXllci0+dmlldzsKKyAgICB9CisKKyAgICB2b2lkIHNldFNoYXBlKEJTaGFwZSogc2hhcGUpCisg
ICAgeworICAgICAgICBkZWxldGUgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9IHNoYXBlOworICAgIH0KKworICAgIEJT
aGFwZSogc2hhcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+
Y3VycmVudFNoYXBlKQorICAgICAgICAgICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9
IG5ldyBCU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudExheWVyLT5jdXJyZW50U2hh
cGU7CisgICAgfQorCisgICAgdm9pZCBwdXNoTGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudExheWVyID0gbmV3IExheWVyKG1fY3VycmVudExheWVyKTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjAp
OworICAgIH0KKworICAgIHZvaWQgcG9wTGF5ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRMYXllci0+cHJldmlvdXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIExheWVy
KiBsYXllciA9IG1fY3VycmVudExheWVyOworICAgICAgICBtX2N1cnJlbnRMYXllciA9IGxheWVy
LT5wcmV2aW91czsKKyAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA+IDApIHsKKyAgICAg
ICAgICAgIC8vIFBvc3QgcHJvY2VzcyB0aGUgYml0bWFwIGluIG9yZGVyIHRvIGFwcGx5IGdsb2Jh
bCBhbHBoYS4uLgorICAgICAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA8IDI1NSkgewor
ICAgICAgICAgICAgICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGxh
eWVyLT5iaXRtYXAtPkJpdHMoKSk7CisgICAgICAgICAgICAgICAgdWludDMyIHdpZHRoID0gbGF5
ZXItPmJpdG1hcC0+Qm91bmRzKCkuSW50ZWdlcldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAg
IHVpbnQzMiBoZWlnaHQgPSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VySGVpZ2h0KCkg
KyAxOworICAgICAgICAgICAgICAgIHVpbnQzMiBicHIgPSBsYXllci0+Yml0bWFwLT5CeXRlc1Bl
clJvdygpOworICAgICAgICAgICAgICAgIHVpbnQ4IGFscGhhID0gbGF5ZXItPmdsb2JhbEFscGhh
OworICAgICAgICAgICAgICAgIGZvciAodWludDMyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdWludDgqIHAgPSBiaXRzOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQzMiB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRPRE86IFRoZXJlIGlzIGEgbWV0aG9kIHRvIGRvIHNoaWZ0aW5nIHdpdGhvdXQg
Yml0IGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gPSAodWludDgpKCh1aW50
MTYpcFswXSAqIGFscGhhID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSA9ICh1
aW50OCkoKHVpbnQxNilwWzFdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwWzJdID0gKHVpbnQ4KSgodWludDE2KXBbMl0gKiBhbHBoYSA+PiA4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBbM10gPSAodWludDgpKCh1aW50MTYpcFszXSAqIGFscGhhID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA0OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gYnByOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEJQb2ludCBiaXRtYXBMb2NhdGlvbihsYXllci0+bG9jYXRp
b25JblBhcmVudCk7CisgICAgICAgICAgICBiaXRtYXBMb2NhdGlvbiAtPSBtX2N1cnJlbnRMYXll
ci0+YWNjdW11bGF0ZWRPcmlnaW47CisgICAgICAgICAgICBtX2N1cnJlbnRMYXllci0+dmlldy0+
RHJhd0JpdG1hcChsYXllci0+Yml0bWFwLCBiaXRtYXBMb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZGVsZXRlIGxheWVyOworICAgIH0KKworICAgIExheWVyKiBtX2N1cnJlbnRMYXllcjsK
IH07CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KQotICAgIDogbV92aWV3KHZpZXcpCisgICAgOiBtX2N1
cnJlbnRMYXllcihuZXcgTGF5ZXIodmlldykpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CisgICAgd2hp
bGUgKExheWVyKiBwcmV2aW91cyA9IG1fY3VycmVudExheWVyLT5wcmV2aW91cykgeworICAgICAg
ICBkZWxldGUgbV9jdXJyZW50TGF5ZXI7CisgICAgICAgIG1fY3VycmVudExheWVyID0gcHJldmlv
dXM7CisgICAgfQorICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBA
IC03OCwxNyArMjMyLDE4IEBACiAKIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0Nv
bnRleHQ6OnBsYXRmb3JtQ29udGV4dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV92
aWV3OworICAgIHJldHVybiBtX2RhdGEtPnZpZXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKIHsKLSAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRl
KCk7CisgICAgbV9kYXRhLT52aWV3KCktPlB1c2hTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogewotICAgIG1fZGF0YS0+bV92aWV3LT5Q
b3BTdGF0ZSgpOworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2lu
IC09IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3Rh
dGUoKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJv
cmRlci4KQEAgLTk3LDIxICsyNTIsMTggQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOwogICAgIGlmIChzdHJva2VTdHlsZSgp
ICE9IE5vU3Ryb2tlKQotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUmVjdChyZWN0LCBn
ZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUmVj
dChyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIGlzIG9ubHkgdXNl
ZCB0byBkcmF3IGJvcmRlcnMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3Qg
SW50UG9pbnQmIHBvaW50MSwgY29uc3QgSW50UG9pbnQmIHBvaW50MikKIHsKLSAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5
bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25lc3MoKSA8PSAwLjBmIHx8ICFzdHJva2VD
b2xvcigpLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChzdHJva2VTdHlsZSgp
ID09IE5vU3Ryb2tlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ry
b2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgpKTsKKyAgICBtX2Rh
dGEtPnZpZXcoKS0+U3Ryb2tlTGluZShwb2ludDEsIHBvaW50MiwgZ2V0SGFpa3VTdHJva2VTdHls
ZSgpKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRs
ZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC0xMjAsMjIgKzI3Miw3MyBAQAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3
LT5GaWxsRWxsaXBzZShyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbEVsbGlwc2UocmVj
dCk7CiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+
bV92aWV3LT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAg
ICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VFbGxpcHNlKHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5
bGUoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW50UmVj
dCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pCiB7Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8IHN0cm9rZVN0eWxl
KCkgPT0gTm9TdHJva2UgfHwgc3Ryb2tlVGhpY2tuZXNzKCkgPD0gMC4wZiB8fCAhc3Ryb2tlQ29s
b3IoKS5hbHBoYSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+U3Ry
b2tlQXJjKHJlY3QsIHN0YXJ0QW5nbGUsIGFuZ2xlU3BhbiwgZ2V0SGFpa3VTdHJva2VTdHlsZSgp
KTsKKyAgICAvLyBUT0RPOiBUaGUgY29kZSBiZWxvdyB3aWxsIG9ubHkgbWFrZSByb3VuZC1jb3Ju
ZXIgYm94ZW4gbG9vayBuaWNlLiBGb3IgYW4gdXR0ZXJseSBzaG9ja2luZworICAgIC8vIGltcGxl
bWVudGF0aW9uIG9mIHJvdW5kIGNvcm5lciBkcmF3aW5nLCBzZWUgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OnBhaW50Qm9yZGVyKCkuIEl0IHRyaWVzCisgICAgLy8gdG8gdXNlIG9uZSAob3IgdHdvKSBh
bHBoYSBtYXNrKHMpIHBlciBib3ggY29ybmVyIHRvIGN1dCBvZmYgYSB0aGlja2VyIHN0cm9rZSBh
bmQgZG91YmxlcworICAgIC8vIHRoZSBzdHJva2Ugd2l0aC4gQWxsIHRoaXMgdG8gYWxpZ24gdGhl
IGFyYyB3aXRoIHRoZSBib3ggc2lkZXMuLi4KKworICAgIGZsb2F0IHBlblNpemUgPSBzdHJva2VU
aGlja25lc3MoKSAvIDIuMGY7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUocGVuU2l6
ZSk7CisgICAgQlJlY3QgYlJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LnJpZ2h0KCksIHJl
Y3QuYm90dG9tKCkpOworICAgIGlmIChzdGFydEFuZ2xlID49IDAgJiYgc3RhcnRBbmdsZSA8IDkw
KSB7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBlblNpemU7CisgICAgICAgIGJSZWN0LnRvcCAr
PSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNpemUgLyAyLjBm
OworICAgIH0gZWxzZSBpZiAoc3RhcnRBbmdsZSA+PSA5MCAmJiBzdGFydEFuZ2xlIDwgMTgwKSB7
CisgICAgICAgIGJSZWN0LmxlZnQgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnRv
cCArPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6ZSAvIDIu
MGY7CisgICAgICAgIGJSZWN0LmJvdHRvbSAtPSBwZW5TaXplIC8gMi4wZjsKKyAgICB9IGVsc2Ug
aWYgKHN0YXJ0QW5nbGUgPj0gMTgwICYmIHN0YXJ0QW5nbGUgPCAyNzApIHsKKyAgICAgICAgYlJl
Y3QubGVmdCArPSBwZW5TaXplIC8gMi4wZjsKKyAgICAgICAgYlJlY3QucmlnaHQgLT0gcGVuU2l6
ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LmJvdHRvbSAtPSBwZW5TaXplOworICAgIH0gZWxzZSBp
ZiAoc3RhcnRBbmdsZSA+PSAyNzAgJiYgc3RhcnRBbmdsZSA8IDM2MCkgeworICAgICAgICBiUmVj
dC5yaWdodCAtPSBwZW5TaXplOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZTsKKyAg
ICB9CisgICAgYlJlY3QuT2Zmc2V0VG8oZmxvb3JmKGJSZWN0LmxlZnQpLCBmbG9vcmYoYlJlY3Qu
dG9wKSk7CisgICAgdWludDMyIGZsYWdzID0gbV9kYXRhLT52aWV3KCktPkZsYWdzKCk7CisgICAg
bV9kYXRhLT52aWV3KCktPlNldEZsYWdzKGZsYWdzIHwgQl9TVUJQSVhFTF9QUkVDSVNFKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlQXJjKGJSZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4s
IGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZsYWdzKGZs
YWdzKTsKKworICAgIG1fZGF0YS0+dmlldygpLT5TZXRQZW5TaXplKHN0cm9rZVRoaWNrbmVzcygp
KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKCFtX2RhdGEtPnNoYXBlKCkpCisgICAgICAgIHJldHVybjsKKworLy8gICAg
bV9kYXRhLT52aWV3KCktPlNldEZpbGxSdWxlKHRvSGFpa3VGaWxsUnVsZShmaWxsUnVsZSgpKSk7
CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09SSUdJTik7CisKKyAgICBpZiAobV9j
b21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRp
ZW50IHx8IHN0cm9rZUNvbG9yKCkuYWxwaGEoKSkgeworICAgICAgICBpZiAobV9jb21tb24tPnN0
YXRlLnN0cm9rZVBhdHRlcm4pCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAg
ICBlbHNlIGlmIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQpIHsKKyAgICAgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisvLyAgICAgICAgICAgIEJHcmFkaWVudCogZ3JhZGllbnQgPSBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKTsKKy8vICAg
ICAgICAgICAgZ3JhZGllbnQtPlNldFRyYW5zZm9ybShtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRp
ZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOworLy8gICAgICAgICAgICBtX2RhdGEtPnZp
ZXcoKS0+U3Ryb2tlU2hhcGUobV9kYXRhLT5zaGFwZSgpLCAqZ3JhZGllbnQpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VTaGFwZShtX2RhdGEtPnNo
YXBlKCkpOworICAgIH0KKyAgICBtX2RhdGEtPnNldFNoYXBlKDApOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IHBvaW50c0xlbmd0aCwgY29uc3Qg
RmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKQEAgLTE0NywxMCArMzUw
LDEwIEBACiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAg
ICAgICAgYlBvaW50c1tpXSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxs
UG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxs
UG9seWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9
IE5vU3Ryb2tlKQogICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9k
YXRhLT5tX3ZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBn
ZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9s
eWdvbihiUG9pbnRzLCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2
ICszNjEsMTggQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICByZ2JfY29sb3Igb2xkQ29sb3IgPSBtX2RhdGEtPm1fdmlldy0+SGlnaENvbG9yKCk7
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7Ci0gICAgbV9kYXRhLT5t
X3ZpZXctPkZpbGxSZWN0KHJlY3QpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdoQ29sb3Io
b2xkQ29sb3IpOworICAgIHJnYl9jb2xvciBvbGRDb2xvciA9IG1fZGF0YS0+dmlldygpLT5IaWdo
Q29sb3IoKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICBt
X2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhp
Z2hDb2xvcihvbGRDb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOworCisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxSZWN0KHJlY3QpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25z
dCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC0xNzUsMjUgKzM4MCw4OCBA
QAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIWNvbG9yLmFscGhhKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgLy8gRklYTUU6IEEgc2ltcGxl
IGltcGxlbWVudGF0aW9uIGNvdWxkIGp1c3QgdXNlIEZpbGxSb3VuZFJlY3QgaWYgYWxsCi0gICAg
Ly8gdGhlIHNpemVzIGFyZSB0aGUgc2FtZSwgb3IgZXZlbiBpZiB0aGV5IGFyZSBub3QuIE90aGVy
d2lzZSBzZXZlcmFsCi0gICAgLy8gRmlsbFJlY3QgYW5kIEZpbGxBcmMgY2FsbHMgYXJlIG5lZWRl
ZC4KKyAgICBCUG9pbnQgcG9pbnRzWzNdOworICAgIGNvbnN0IGZsb2F0IGtSYWRpdXNCZXppZXJT
Y2FsZSA9IDAuNTZmOworCisgICAgQlNoYXBlIHNoYXBlOworICAgIHNoYXBlLk1vdmVUbyhCUG9p
bnQocmVjdC54KCkgKyB0b3BMZWZ0LndpZHRoKCksIHJlY3QueSgpKSk7CisgICAgc2hhcGUuTGlu
ZVRvKEJQb2ludChyZWN0LnJpZ2h0KCkgLSB0b3BSaWdodC53aWR0aCgpLCByZWN0LnkoKSkpOwor
ICAgIHBvaW50c1swXS54ID0gcmVjdC5yaWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxlICogdG9w
UmlnaHQud2lkdGgoKTsKKyAgICBwb2ludHNbMF0ueSA9IHJlY3QueSgpOworICAgIHBvaW50c1sx
XS54ID0gcmVjdC5yaWdodCgpOworICAgIHBvaW50c1sxXS55ID0gcmVjdC55KCkgKyBrUmFkaXVz
QmV6aWVyU2NhbGUgKiB0b3BSaWdodC5oZWlnaHQoKTsKKyAgICBwb2ludHNbMl0ueCA9IHJlY3Qu
cmlnaHQoKTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3QueSgpICsgdG9wUmlnaHQuaGVpZ2h0KCk7
CisgICAgc2hhcGUuQmV6aWVyVG8ocG9pbnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJl
Y3QucmlnaHQoKSwgcmVjdC5ib3R0b20oKSAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSk7CisgICAg
cG9pbnRzWzBdLnggPSByZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRv
bSgpIC0ga1JhZGl1c0JlemllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9p
bnRzWzFdLnggPSByZWN0LnJpZ2h0KCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiBib3R0b21SaWdo
dC53aWR0aCgpOworICAgIHBvaW50c1sxXS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBwb2ludHNb
Ml0ueCA9IHJlY3QucmlnaHQoKSAtIGJvdHRvbVJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzJd
LnkgPSByZWN0LmJvdHRvbSgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hh
cGUuTGluZVRvKEJQb2ludChyZWN0LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwgcmVjdC5ib3R0
b20oKSkpOworICAgIHBvaW50c1swXS54ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUg
KiBib3R0b21MZWZ0LndpZHRoKCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LmJvdHRvbSgpOwor
ICAgIHBvaW50c1sxXS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LmJvdHRv
bSgpIC0ga1JhZGl1c0JlemllclNjYWxlICogYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9p
bnRzWzJdLnggPSByZWN0LngoKTsKKyAgICBwb2ludHNbMl0ueSA9IHJlY3QuYm90dG9tKCkgLSBi
b3R0b21SaWdodC5oZWlnaHQoKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2ludHMpOworICAgIHNo
YXBlLkxpbmVUbyhCUG9pbnQocmVjdC54KCksIHJlY3QueSgpICsgdG9wTGVmdC5oZWlnaHQoKSkp
OworICAgIHBvaW50c1swXS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0Lnko
KSAtIGtSYWRpdXNCZXppZXJTY2FsZSAqIHRvcExlZnQuaGVpZ2h0KCk7CisgICAgcG9pbnRzWzFd
LnggPSByZWN0LngoKSArIGtSYWRpdXNCZXppZXJTY2FsZSAqIHRvcExlZnQud2lkdGgoKTsKKyAg
ICBwb2ludHNbMV0ueSA9IHJlY3QueSgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCkgKyB0
b3BMZWZ0LndpZHRoKCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LnkoKTsKKyAgICBzaGFwZS5C
ZXppZXJUbyhwb2ludHMpOworICAgIHNoYXBlLkNsb3NlKCk7CisKKyAgICByZ2JfY29sb3Igb2xk
Q29sb3IgPSBtX2RhdGEtPnZpZXcoKS0+SGlnaENvbG9yKCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQZW5UbyhCX09S
SUdJTik7CisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxTaGFwZSgmc2hhcGUpOworICAgIG1fZGF0
YS0+dmlldygpLT5TZXRIaWdoQ29sb3Iob2xkQ29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFtX2RhdGEtPnNoYXBl
KCkpCisgICAgICAgIHJldHVybjsKKworLy8gICAgbV9kYXRhLT52aWV3KCktPlNldEZpbGxSdWxl
KHRvSGFpa3VGaWxsUnVsZShmaWxsUnVsZSgpKSk7CisgICAgbV9kYXRhLT52aWV3KCktPk1vdmVQ
ZW5UbyhCX09SSUdJTik7CisKKyAgICBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuIHx8
IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQgfHwgZmlsbENvbG9yKCkuYWxwaGEoKSkgewor
Ly8gICAgICAgIGRyYXdGaWxsZWRTaGFkb3dQYXRoKHRoaXMsIHAsIHBhdGgpOyBUT0RPOiBXaGF0
J3MgdGhpcyBzaGFkb3cgYnVzaW5lc3M/CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmls
bFBhdHRlcm4pCisgICAgICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBlbHNlIGlm
IChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50KSB7CisgICAgICAgICAgICBCR3JhZGllbnQq
IGdyYWRpZW50ID0gbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVu
dCgpOworLy8gICAgICAgICAgICBncmFkaWVudC0+U2V0VHJhbnNmb3JtKG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CisgICAgICAgICAgICBt
X2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKG1fZGF0YS0+c2hhcGUoKSwgKmdyYWRpZW50KTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFNoYXBlKG1fZGF0
YS0+c2hhcGUoKSk7CisgICAgfQorICAgIG1fZGF0YS0+c2V0U2hhcGUoMCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgbV9kYXRhLT5zZXRTaGFwZShuZXcgQlNoYXBlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YWRkUGF0aChjb25zdCBQYXRoJiBwYXRoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgaWYgKCFtX2RhdGEtPnNoYXBlKCkpCisgICAgICAgIG1fZGF0YS0+c2V0U2hhcGUobmV3
IEJTaGFwZSgqcGF0aC5wbGF0Zm9ybVBhdGgoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRh
LT5zaGFwZSgpLT5BZGRTaGFwZShwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjAyLDEyICs0NzAs
MjMgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0gICAg
bV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAgIG1f
ZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZl
Y3RvcjxQYXRoPiYgcGF0aHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNv
bG9yKQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgLyogd2lkdGggKi8sIGludCAvKiBvZmZzZXQgKi8sIGNvbnN0IENvbG9yJiBjb2xv
cikKQEAgLTIyMSwxMSArNTAwLDExIEBACiAKICAgICBpZiAocmVjdHMuc2l6ZSgpID4gMSkgewog
ICAgICAgICBCUmVnaW9uICAgIHJlZ2lvbjsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZWN0Q291bnQ7ICsraSkKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3Vu
dDsgKytpKQogICAgICAgICAgICAgcmVnaW9uLkluY2x1ZGUoQlJlY3QocmVjdHNbaV0pKTsKIAot
ICAgICAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGlnaENvbG9yKGNvbG9yKTsKLSAgICAgICAgbV9k
YXRhLT5tX3ZpZXctPlN0cm9rZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsK
KyAgICAgICAgbV9kYXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgICAgIG1f
ZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlZ2lvbi5GcmFtZSgpLCBCX01JWEVEX0NPTE9SUyk7
CiAgICAgfQogfQogCkBAIC0yNDgsOCArNTI3LDEyIEBACiAKIEZsb2F0UmVjdCBHcmFwaGljc0Nv
bnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIHJlY3Q7CisgICAgRmxvYXRSZWN0IHJvdW5k
ZWQocmVjdCk7CisgICAgcm91bmRlZC5zZXRYKHJvdW5kZihyZWN0LngoKSkpOworICAgIHJvdW5k
ZWQuc2V0WShyb3VuZGYocmVjdC55KCkpKTsKKyAgICByb3VuZGVkLnNldFdpZHRoKHJvdW5kZihy
ZWN0LndpZHRoKCkpKTsKKyAgICByb3VuZGVkLnNldEhlaWdodChyb3VuZGYocmVjdC5oZWlnaHQo
KSkpOworICAgIHJldHVybiByb3VuZGVkOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KQpAQCAtMjU3LDcgKzU0MCw3IEBACiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnB1c2hMYXllcihvcGFjaXR5KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKQEAgLTI2NSw3ICs1NDgsNyBA
QAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5wb3BMYXllcigpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAgLTI3Myw3ICs1
NTYsMTEgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+dmlldygpLT5QdXNoU3RhdGUoKTsK
KyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKDAsIDAsIDAsIDApOworICAgIG1fZGF0
YS0+dmlldygpLT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOworICAgIG1fZGF0YS0+dmlldygp
LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBm
bG9hdCB3aWR0aCkKQEAgLTI4MSwxMCArNTY4LDEwIEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+bV92
aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUod2lkdGgpOwot
ICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUo
KSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6ZSk7CisgICAgZmxvYXQg
b2xkU2l6ZSA9IG1fZGF0YS0+dmlldygpLT5QZW5TaXplKCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlNldFBlblNpemUod2lkdGgpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3Qs
IGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUo
b2xkU2l6ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGluZUNhcCkKQEAgLTMwNSw5ICs1OTIsMTQgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+bV92aWV3LT5MaW5l
Sm9pbk1vZGUoKSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0
YS0+dmlldygpLT5TZXRMaW5lTW9kZShtb2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZUpvaW5Nb2Rl
KCksIG1fZGF0YS0+dmlldygpLT5MaW5lTWl0ZXJMaW1pdCgpKTsKIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVEYXNoKGNvbnN0IERhc2hBcnJheSYgZGFzaGVzLCBmbG9hdCBkYXNo
T2Zmc2V0KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBsaW5lSm9pbikKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtMzI2LDcgKzYxOCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIAot
ICAgIG1fZGF0YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1v
ZGUoKSwgbW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVNaXRlckxpbWl0KCkpOworICAgIG1fZGF0
YS0+dmlldygpLT5TZXRMaW5lTW9kZShtX2RhdGEtPnZpZXcoKS0+TGluZUNhcE1vZGUoKSwgbW9k
ZSwgbV9kYXRhLT52aWV3KCktPkxpbmVNaXRlckxpbWl0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKQEAgLTMzNCw3ICs2MjYsNyBAQAog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0
YS0+bV92aWV3LT5TZXRMaW5lTW9kZShtX2RhdGEtPm1fdmlldy0+TGluZUNhcE1vZGUoKSwgbV9k
YXRhLT5tX3ZpZXctPkxpbmVKb2luTW9kZSgpLCBsaW1pdCk7CisgICAgbV9kYXRhLT52aWV3KCkt
PlNldExpbmVNb2RlKG1fZGF0YS0+dmlldygpLT5MaW5lQ2FwTW9kZSgpLCBtX2RhdGEtPnZpZXco
KS0+TGluZUpvaW5Nb2RlKCksIGxpbWl0KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEFscGhhKGZsb2F0IG9wYWNpdHkpCkBAIC0zNDIsNyArNjM0LDcgQEAKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5
ICogMjU1LjBmKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKQEAgLTM2Myw3ICs2NTUsNyBAQAogICAgICAgICBw
cmludGYoIkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRlT3BlcmF0aW9uOiBVbnN1cHBvcnRl
ZCBjb21wb3NpdGUgb3BlcmF0aW9uICVzXG4iLAogICAgICAgICAgICAgICAgIGNvbXBvc2l0ZU9w
ZXJhdG9yTmFtZShvcCkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQotICAgIG1fZGF0YS0+bV92aWV3
LT5TZXREcmF3aW5nTW9kZShtb2RlKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RHJhd2luZ01v
ZGUobW9kZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBh
dGgpCkBAIC0zNzEsNyArNjYzLDcgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmlldy0+Q29uc3RyYWluQ2xpcHBpbmdSZWdp
b24ocGF0aC5wbGF0Zm9ybVBhdGgoKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM5NCwx
NCArNjg2LDIyIEBACiAKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmlu
ZUNUTSgpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFj
Y3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgIEJQ
b2ludCBvcmlnaW4gPSBtX2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAgbWF0cml4LnRyYW5z
bGF0ZShvcmlnaW4ueCwgb3JpZ2luLnkpOworICAgIG1hdHJpeC5zY2FsZShtX2RhdGEtPnZpZXco
KS0+U2NhbGUoKSk7CisgICAgcmV0dXJuIG1hdHJpeDsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRy
aXggR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci0gICAgcmV0dXJuIFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgLy8gVE9ETzogTWF5
YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmll
dygpLT5PcmlnaW4oKTsKKyAgICBtYXRyaXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7
CisgICAgbWF0cml4LnNjYWxlKG1fZGF0YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4g
bWF0cml4OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHkpCkBAIC00MDksMTMgKzcwOSwxOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9kYXRhLT5t
X2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4ueCArPSB4OworICAgIG1fZGF0YS0+bV9j
dXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luLnkgKz0geTsKKyAgICBCUG9pbnQgb3JpZ2lu
KG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldE9yaWdp
bihvcmlnaW4ueCArIHgsIG9yaWdpbi55ICsgeSk7CisKKyAgICAvLyBUT0RPOiBjdXJyZW50UGF0
aCBuZWVkcyB0byBiZSB0cmFuc2xhdGVkIGFsb25nLCBhY2NvcmRpbmcgdG8gUXQgaW1wbGVtZW50
YXRpb24KIH0KIAogSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEludFBvaW50KDAsIDApOworICAgIEJQb2ludCBv
cmlnaW4gPSBtX2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAgcmV0dXJuIEludFBvaW50KG9y
aWdpbi54LCBvcmlnaW4ueSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxv
YXQgcmFkaWFucykKQEAgLTQzMSw3ICs3MzYsOCBAQAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gTk9U
RTogTm9uLXVuaWZvcm0gc2NhbGluZyBub3Qgc3VwcG9ydGVkIG9uIEhhaWt1LCB5ZXQuCisgICAg
bV9kYXRhLT52aWV3KCktPlNldFNjYWxlKChzaXplLndpZHRoKCkgKyBzaXplLmhlaWdodCgpKSAv
IDIpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBJbnRSZWN0JiBy
ZWN0KQpAQCAtNDM5LDcgKzc0NSw5IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVnaW9uIHJlZ2lv
bihtX2RhdGEtPnZpZXcoKS0+Qm91bmRzKCkpOworICAgIHJlZ2lvbi5FeGNsdWRlKHJlY3QpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCkBAIC00NTUsNiArNzYzLDkgQEAKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBOT1RFOiBVc2VkIGJ5IFJlbmRlckJveE1vZGVs
T2JqZWN0IHRvIGNsaXAgb3V0IHRoZSBpbm5lciBwYXJ0IG9mIGFuIGFyYyB3aGVuIHJlbmRpbmcg
Ym94IGNvcm5lcnMuLi4KKyAgICAvLyBUT0RPOiBVc2UgdGhpcyBtZXRob2QgdG8gZGV0ZWN0IGlm
IHdlIGFyZSByZW5kZXJpbmcgYSByb3VuZC1jb3JuZXItYm94Li4uCisKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCkBAIC00OTMsNyArODA0LDcgQEAKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBmb250KQogewotICAgIG1fZGF0YS0+bV92aWV3
LT5TZXRGb250KGZvbnQucHJpbWFyeUZvbnQoKS0+cGxhdGZvcm1EYXRhKCkuZm9udCgpKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3JtRGF0
YSgpLmZvbnQoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTAx
LDcgKzgxMiw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRh
LT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHBhdHRlcm4gR3JhcGhpY3NDb250
ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCkKQEAgLTUzNSw3ICs4NDYsNyBAQAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3
LT5TZXRQZW5TaXplKHRoaWNrbmVzcyk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldFBlblNpemUo
dGhpY2tuZXNzKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENv
bG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtNTQzLDcg
Kzg1NCw3IEBACiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9kYXRhLT52
aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGVhclBsYXRmb3JtU2hhZG93KCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48108</attachid>
            <date>2010-02-04 00:06:17 -0800</date>
            <delta_ts>2010-02-04 01:05:55 -0800</delta_ts>
            <desc>Various fixes to mouse/wheel/keyboard event propagation on Haiku</desc>
            <filename>events.diff</filename>
            <type>text/plain</type>
            <size>7995</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTM4IEBACisyMDEwLTAyLTAzICBTdGVwaGFuIEHDn211cyAgPHN1cGVyc3RpcHBp
QGdteC5kZT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBWYXJpb3VzIGZpeGVzIHRvIG1vdXNlL3doZWVsL2tleWJvYXJkIGV2ZW50IHByb3BhZ2F0aW9u
IG9uIEhhaWt1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0zNDUyNworCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiBwYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcDogRml4IHRoZSBidWlsZCBieSBub3Qg
aW5jbHVkaW5nIFBsYXRmb3JtU2Nyb2xsQmFyLmgKKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5Ym9h
cmRPcHRpb25UYWIpOiBVc2UgY29ycmVjdCBjb2RlIGZvciBUYWIvQmFja3NwYWNlIGtleQorICAg
ICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcDogSW1w
cm92ZWQgdGhlIGNvbXBhdGliaWxpdHkuCisgICAgICAgIChXZWJDb3JlOjprZXlJZGVudGlmaWVy
Rm9ySGFpa3VLZXlDb2RlKTogCisgICAgICAgIChXZWJDb3JlOjp3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNl
RXZlbnRIYWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBs
YXRmb3JtTW91c2VFdmVudCk6IEV4dHJhY3QgY29ycmVjdCBjb29yZGluYXRlcywgZmlsbCB0aGUg
bW9kaWZpZXIgZmxhZ3MsIGdlbmVyYXRlIGEgY29ycmVjdCB0aW1lc3RhbXAsIGZpeCB3YXJuaW5n
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3JtV2hlZWxFdmVu
dCk6IEZpbGwgdGhlIG1vZGlmaWVyIGZsYWdzLCBnZW5lcmF0ZSBhIGNvcnJlY3QgdGltZXN0YW1w
LCBmaXggd2FybmluZ3MuCisKIDIwMTAtMDItMDMgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2Vu
QGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIERlYnVnX0FsbCBidWlsZCBmaXguCkluZGV4
OiBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1
KQorKysgV2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU2Nyb2xsQmFyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyV2lkZ2V0LmgiCiAKQEAgLTU2LDcgKzU1LDcgQEAKICAgICAgICAg
JiYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleWRvd25FdmVudAogICAgICAgICAg
ICAgfHwgZXZlbnQtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5cHJlc3NFdmVudCkKICAgICAg
ICAgJiYgZXZlbnQtPmFsdEtleSgpCi0gICAgICAgICYmIGV2ZW50LT5rZXlJZGVudGlmaWVyKCkg
PT0gIlUrMDAwMDA5IjsKKyAgICAgICAgJiYgZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSsw
MDA5IjsKIH0KIAogYm9vbCBFdmVudEhhbmRsZXI6OmludmVydFNlbnNlT2ZUYWJzVG9MaW5rcyhL
ZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3Uv
UGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1Nb3VzZUV2ZW50SGFpa3UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5
IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykg
MjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjksMjEgKzMwLDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAKKyNpbmNsdWRlIDxJbnRlcmZhY2VE
ZWZzLmg+CiAjaW5jbHVkZSA8TWVzc2FnZS5oPgotI2luY2x1ZGUgPFN1cHBvcnREZWZzLmg+CiAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbGF0Zm9ybU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91
c2VFdmVudChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSkKLSAgICA6IG1fdGltZXN0YW1wKG1lc3Nh
Z2UtPkZpbmRJbnQ2NCgid2hlbiIpKQotICAgICwgbV9wb3NpdGlvbihJbnRQb2ludChtZXNzYWdl
LT5GaW5kUG9pbnQoIndoZXJlIikpKQotICAgICwgbV9nbG9iYWxQb3NpdGlvbihtZXNzYWdlLT5G
aW5kUG9pbnQoImdsb2JhbFBvc2l0aW9uIikpCi0gICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQotICAg
ICwgbV9jdHJsS2V5KGZhbHNlKQotICAgICwgbV9hbHRLZXkoZmFsc2UpCi0gICAgLCBtX21ldGFL
ZXkoZmFsc2UpCisgICAgOiBtX3Bvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgiYmU6dmlld193
aGVyZSIpKQorICAgICwgbV9nbG9iYWxQb3NpdGlvbihtZXNzYWdlLT5GaW5kUG9pbnQoInNjcmVl
bl93aGVyZSIpKQogICAgICwgbV9jbGlja0NvdW50KG1lc3NhZ2UtPkZpbmRJbnQzMigiY2xpY2tz
IikpCisgICAgLCBtX3RpbWVzdGFtcChtZXNzYWdlLT5GaW5kSW50NjQoIndoZW4iKSAvIDEwMDAw
MDAuMCkKIHsKICAgICBpbnQzMiBidXR0b25zID0gbWVzc2FnZS0+RmluZEludDMyKCJidXR0b25z
Iik7CiAgICAgc3dpdGNoIChidXR0b25zKSB7CkBAIC03Niw2ICs3MywxMiBAQAogICAgICAgICBt
X2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRNb3ZlZDsKICAgICAgICAgYnJlYWs7CiAgICAgfTsKKwor
ICAgIGludDMyIG1vZGlmaWVycyA9IG1lc3NhZ2UtPkZpbmRJbnQzMigibW9kaWZpZXJzIik7Cisg
ICAgbV9zaGlmdEtleSA9IG1vZGlmaWVycyAmIEJfU0hJRlRfS0VZOworICAgIG1fY3RybEtleSA9
IG1vZGlmaWVycyAmIEJfQ09OVFJPTF9LRVk7CisgICAgbV9hbHRLZXkgPSBtb2RpZmllcnMgJiBC
X0NPTU1BTkRfS0VZOworICAgIG1fbWV0YUtleSA9IG1vZGlmaWVycyAmIEJfT1BUSU9OX0tFWTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybVdoZWVsRXZlbnRIYWlrdS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5
YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMSw2ICszMiw3IEBACiAKICNpbmNsdWRlICJTY3JvbGxi
YXIuaCIKIAorI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KICNpbmNsdWRlIDxNZXNzYWdlLmg+
CiAjaW5jbHVkZSA8UG9pbnQuaD4KIApAQCAtMzgsMjQgKzQwLDIzIEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIFBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEJNZXNzYWdl
KiBtZXNzYWdlKQotICAgIDogbV9ncmFudWxhcml0eShTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCkK
LSAgICAsIG1fc2hpZnRLZXkoZmFsc2UpCi0gICAgLCBtX2N0cmxLZXkoZmFsc2UpCi0gICAgLCBt
X2FsdEtleShmYWxzZSkKLSAgICAsIG1fbWV0YUtleShmYWxzZSkKKyAgICA6IG1fcG9zaXRpb24o
bWVzc2FnZS0+RmluZFBvaW50KCJiZTp2aWV3X3doZXJlIikpCisgICAgLCBtX2dsb2JhbFBvc2l0
aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgic2NyZWVuX3doZXJlIikpCisgICAgLCBtX2RlbHRhWCht
ZXNzYWdlLT5GaW5kRmxvYXQoImJlOndoZWVsX2RlbHRhX3giKSkKKyAgICAsIG1fZGVsdGFZKG1l
c3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hlZWxfZGVsdGFfeSIpKQorICAgICwgbV93aGVlbFRpY2tz
WChtX2RlbHRhWCkKKyAgICAsIG1fd2hlZWxUaWNrc1kobV9kZWx0YVkpCisgICAgLCBtX2dyYW51
bGFyaXR5KFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50KQogICAgICwgbV9pc0FjY2VwdGVkKGZhbHNl
KQogewotICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludChtZXNzYWdlLT5GaW5kUG9pbnQoInBvc2l0
aW9uIikpOwotICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChtZXNzYWdlLT5GaW5kUG9p
bnQoImdsb2JhbF9wb3NpdGlvbiIpKTsKLQotICAgIG1fZGVsdGFYID0gbWVzc2FnZS0+RmluZEZs
b2F0KCJiZTp3aGVlbF9kZWx0YV94Iik7Ci0gICAgbV9kZWx0YVkgPSBtZXNzYWdlLT5GaW5kRmxv
YXQoImJlOndoZWVsX2RlbHRhX3kiKTsKLQotICAgIG1fd2hlZWxUaWNrc1ggPSBtX2RlbHRhWDsK
LSAgICBtX3doZWVsVGlja3NZID0gbV9kZWx0YVk7Ci0KICAgICBtX2RlbHRhWCAqPSAtY1Njcm9s
bGJhclBpeGVsc1BlckxpbmVTdGVwOwogICAgIG1fZGVsdGFZICo9IC1jU2Nyb2xsYmFyUGl4ZWxz
UGVyTGluZVN0ZXA7CisKKyAgICBpbnQzMiBtb2RpZmllcnMgPSBtZXNzYWdlLT5GaW5kSW50MzIo
Im1vZGlmaWVycyIpOworICAgIG1fc2hpZnRLZXkgPSBtb2RpZmllcnMgJiBCX1NISUZUX0tFWTsK
KyAgICBtX2N0cmxLZXkgPSBtb2RpZmllcnMgJiBCX0NPTlRST0xfS0VZOworICAgIG1fYWx0S2V5
ID0gbW9kaWZpZXJzICYgQl9DT01NQU5EX0tFWTsKKyAgICBtX21ldGFLZXkgPSBtb2RpZmllcnMg
JiBCX09QVElPTl9LRVk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3Uu
Y3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1L
ZXlib2FyZEV2ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwu
Y29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlA
Z21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0
aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0yOSwxMSAr
MzAsMTMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJk
RXZlbnQuaCIKIAorI2luY2x1ZGUgIkNTdHJpbmcuaCIKICNpbmNsdWRlICJLZXlib2FyZENvZGVz
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlIDxJbnRlcmZhY2VEZWZz
Lmg+CiAjaW5jbHVkZSA8TWVzc2FnZS5oPgogI2luY2x1ZGUgPFN0cmluZy5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTA1LDcgKzEwOCw3IEBACiAg
ICAgICAgIHJldHVybiAiVSswMDA5IjsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5nOjpmb3Jt
YXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBlcihrZXlDb2RlKSk7CisgICAgcmV0dXJuIFN0cmluZzo6
Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoc2luZ2xlQnl0ZSkpOwogfQogCiBzdGF0aWMg
aW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoY2hhciBzaW5nbGVCeXRlKQpAQCAtMTQxLDMy
ICsxNDQsMzQgQEAKICAgICAgICAgcmV0dXJuIFZLX0lOU0VSVDsgLy8gKDJEKSBJTlMga2V5CiAg
ICAgY2FzZSBCX0RFTEVURToKICAgICAgICAgcmV0dXJuIFZLX0RFTEVURTsgLy8gKDJFKSBERUwg
a2V5Ci0gICAgY2FzZSAweDJlOgorCiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBzaW5nbGVCeXRlOwogICAgIH0KIH0KIAogUGxhdGZvcm1LZXlib2FyZEV2
ZW50OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQoQk1lc3NhZ2UqIG1lc3NhZ2UpCiAgICAgOiBtX2F1
dG9SZXBlYXQoZmFsc2UpCisgICAgLCBtX2lzS2V5cGFkKGZhbHNlKQorICAgICwgbV9zaGlmdEtl
eShmYWxzZSkKICAgICAsIG1fY3RybEtleShmYWxzZSkKICAgICAsIG1fYWx0S2V5KGZhbHNlKQog
ICAgICwgbV9tZXRhS2V5KGZhbHNlKQotICAgICwgbV9pc0tleXBhZChmYWxzZSkKLSAgICAsIG1f
c2hpZnRLZXkoZmFsc2UpCiB7CiAgICAgQlN0cmluZyBieXRlcyA9IG1lc3NhZ2UtPkZpbmRTdHJp
bmcoImJ5dGVzIik7CiAKKyAgICBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gbWVzc2FnZS0+Rmlu
ZEludDMyKCJrZXkiKTsKKwogICAgIG1fdGV4dCA9IFN0cmluZzo6ZnJvbVVURjgoYnl0ZXMuU3Ry
aW5nKCksIGJ5dGVzLkxlbmd0aCgpKTsKICAgICBtX3VubW9kaWZpZWRUZXh0ID0gU3RyaW5nKGJ5
dGVzLlN0cmluZygpLCBieXRlcy5MZW5ndGgoKSk7Ci0gICAgbV9rZXlJZGVudGlmaWVyID0ga2V5
SWRlbnRpZmllckZvckhhaWt1S2V5Q29kZShieXRlcy5CeXRlQXQoMCksIG1lc3NhZ2UtPkZpbmRJ
bnQzMigia2V5IikpOworICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JIYWlr
dUtleUNvZGUoYnl0ZXMuQnl0ZUF0KDApLCBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlKTsKIAorICAg
IG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChieXRl
cy5CeXRlQXQoMCkpOworCiAgICAgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlfVVApCiAgICAg
ICAgIG1fdHlwZSA9IEtleVVwOwogICAgIGVsc2UgaWYgKG1lc3NhZ2UtPndoYXQgPT0gQl9LRVlf
RE9XTikKICAgICAgICAgbV90eXBlID0gS2V5RG93bjsKLQotICAgIG1fd2luZG93c1ZpcnR1YWxL
ZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChieXRlcy5CeXRlQXQoMCkpOwogfQog
CiB2b2lkIFBsYXRmb3JtS2V5Ym9hcmRFdmVudDo6ZGlzYW1iaWd1YXRlS2V5RG93bkV2ZW50KFR5
cGUgdHlwZSwgYm9vbCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48111</attachid>
            <date>2010-02-04 00:53:15 -0800</date>
            <delta_ts>2010-02-08 10:59:50 -0800</delta_ts>
            <desc>Implementing PathHaiku and GradientHaiku, fleshing out GraphicsContextHaiku</desc>
            <filename>graphics.diff</filename>
            <type>text/plain</type>
            <size>42515</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODMgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudGluZyBQYXRoSGFpa3UgYW5kIEdyYWRpZW50SGFpa3UsIGZsZXNoaW5nIG91dCBH
cmFwaGljc0NvbnRleHRIYWlrdQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ1MjcKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaDogQWRkZWQgSGFpa3UgZGVm
aW5pdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmg6IEFkZGVkIEhhaWt1
IGRlZmluaXRpb24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhZGllbnRI
YWlrdS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVudDo6cGxhdGZvcm1EZXN0cm95KTog
RGVsZXRlIEJHcmFkaWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhZGllbnQ6OnBsYXRmb3JtR3Jh
ZGllbnQpOiBDcmVhdGUgYW5kIGNhY2hlIEJHcmFkaWVudAorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmZpbGwpOiBGaWxsIHdpdGggQkdyYWRpZW50CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpMYXllcjo6TGF5ZXIpOiBTdXBwb3J0IGZv
ciB0cmFuc3BhcmVuY3kgbGF5ZXJzCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OkxheWVyOjp+TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp2aWV3KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6c2V0U2hhcGUpOiBTdXBwb3J0IGZvciBtYWludGFp
bmluZyBhIGN1cnJlbnQgcGF0aAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlOjpzaGFwZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OnB1c2hMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6OnBvcExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4dCk6IERpcmVjdCBhY2Nlc3MgdG8gdGhlIEJWaWV3IGhh
cyBiZWVuIGNoYW5nZWQgdG8gdXNlIGFuIGFjY2Vzc29yIG1ldGhvZCBhbmQgcmV0dXJucyB0aGUg
Y3VycmVudCBsYXllcidzIHZpZXcuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnNhdmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOiBDaGFuZ2VkIGltcGxl
bWVudGF0aW9uIHRvIGxvb2sgZ29vZCBvbiBib3ggZWxlbWVudHMgd2l0aG91dCBpbXBsZW1lbnRp
bmcgY2xpcHBpbmcgcGF0aHMuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KTogSW1wbGVtZW50CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpiZWdpblBhdGgpOiBJbXBsZW1lbnQKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YWRkUGF0aCk6IEltcGxlbWVudAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKTog
QWRkZWQgdG8gZml4IGJ1aWxkCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJv
dW5kVG9EZXZpY2VQaXhlbHMpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKTogSW1wbGVtZW50ZWQKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOiBJbXBsZW1l
bnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOiBJbXBs
ZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldExpbmVEYXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRDb21wb3NpdGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpnZXRBZmZpbmVDVE0pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpnZXRDVE0pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0Ojp0cmFuc2xhdGUpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpvcmlnaW4pOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzY2FsZSk6IEltcGxlbWVudGVkCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBPdXQpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6IEFkZGVkIGNvbW1lbnQKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHA6IElt
cGxlbWVudGVkIHZpYSBCU2hhcGUKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OlBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
c3Ryb2tlQ29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6dHJhbnNsYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhdGg6OmJvdW5kaW5nUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXRoOjptb3ZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6YWRkTGluZVRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBhdGg6OmFkZEJlemllckN1cnZlVG8pOgorICAgICAgICAoV2ViQ29yZTo6
UGF0aDo6Y2xvc2VTdWJwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmFkZFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6UGF0aDo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjp0cmFuc2Zvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KTogSW1wbGVtZW50ZWQgaW5jb21wbGV0
ZSAoZG9lcyBub3QgdGFrZSBzdHJva2Ugd2lkdGggaW50byBhY2NvdW50KQorCiAyMDEwLTAyLTAz
ICBTdGV2ZSBGYWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93
cyBEZWJ1Z19BbGwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGll
bnQuaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDYgKzU3LDkgQEAgdHlwZWRlZiBjYWlyb19wYXR0
ZXJuX3QqIFBsYXRmb3JtR3JhZGllbgogY2xhc3MgU2tTaGFkZXI7CiB0eXBlZGVmIGNsYXNzIFNr
U2hhZGVyKiBQbGF0Zm9ybUdyYWRpZW50OwogdHlwZWRlZiBjbGFzcyBTa1NoYWRlciogUGxhdGZv
cm1QYXR0ZXJuOworI2VsaWYgUExBVEZPUk0oSEFJS1UpCitjbGFzcyBCR3JhZGllbnQ7Cit0eXBl
ZGVmIEJHcmFkaWVudCogUGxhdGZvcm1HcmFkaWVudDsKICNlbHNlCiB0eXBlZGVmIHZvaWQqIFBs
YXRmb3JtR3JhZGllbnQ7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShy
ZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCw4ICs0OCw4IEBAIHR5cGVkZWYgV2ViQ29yZTo6Q2Fpcm9QYXRoIFBs
YXRmb3JtUGF0aDsKIGNsYXNzIFNrUGF0aDsKIHR5cGVkZWYgU2tQYXRoIFBsYXRmb3JtUGF0aDsK
ICNlbGlmIFBMQVRGT1JNKEhBSUtVKQotY2xhc3MgQlJlZ2lvbjsKLXR5cGVkZWYgQlJlZ2lvbiBQ
bGF0Zm9ybVBhdGg7CitjbGFzcyBCU2hhcGU7Cit0eXBlZGVmIEJTaGFwZSBQbGF0Zm9ybVBhdGg7
CiAjZWxpZiBPUyhXSU5DRSkKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQbGF0Zm9y
bVBhdGg7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0dyYWRpZW50SGFp
a3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3Jh
ZGllbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYWlrdS9HcmFkaWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIgPGtldmlub0B0aGVv
bGxpdmllcnMuY29tPiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
OSBNYXhpbWUgU2ltb24gPHNpbW9uLm1heGltZUB0aGVvbGxpdmllcnMuY29tPgorICogQ29weXJp
Z2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3LDI2ICsyOCw0NSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAKLSNpbmNsdWRlICJDU1NQYXJzZXIuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgPEdyYWRpZW50TGluZWFyLmg+CisjaW5jbHVkZSA8R3JhZGllbnRSYWRpYWwu
aD4KKyNpbmNsdWRlIDxWaWV3Lmg+CiAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIEdy
YWRpZW50OjpwbGF0Zm9ybURlc3Ryb3koKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
ZGVsZXRlIG1fZ3JhZGllbnQ7CiB9CiAKIFBsYXRmb3JtR3JhZGllbnQgR3JhZGllbnQ6OnBsYXRm
b3JtR3JhZGllbnQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Cisg
ICAgaWYgKG1fZ3JhZGllbnQpCisgICAgICAgIHJldHVybiBtX2dyYWRpZW50OworCisgICAgaWYg
KG1fcmFkaWFsKSB7CisgICAgICAgIC8vIFRPRE86IFN1cHBvcnQgbV9yMD8KKyAgICAgICAgbV9n
cmFkaWVudCA9IG5ldyBCR3JhZGllbnRSYWRpYWwobV9wMCwgbV9yMSk7CisgICAgfSBlbHNlCisg
ICAgICAgIG1fZ3JhZGllbnQgPSBuZXcgQkdyYWRpZW50TGluZWFyKG1fcDAsIG1fcDEpOworICAg
IHNpemVfdCBzaXplID0gbV9zdG9wcy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgQ29sb3JTdG9wJiBzdG9wID0gbV9zdG9wc1tp
XTsKKyAgICAgICAgcmdiX2NvbG9yIGNvbG9yOworICAgICAgICBjb2xvci5yZWQgPSAodWludDgp
KHN0b3AucmVkICogMjU1LjApOworICAgICAgICBjb2xvci5ncmVlbiA9ICh1aW50OCkoc3RvcC5n
cmVlbiAqIDI1NS4wKTsKKyAgICAgICAgY29sb3IuYmx1ZSA9ICh1aW50OCkoc3RvcC5ibHVlICog
MjU1LjApOworICAgICAgICBjb2xvci5hbHBoYSA9ICh1aW50OCkoc3RvcC5hbHBoYSAqIDI1NS4w
KTsKKyAgICAgICAgbV9ncmFkaWVudC0+QWRkQ29sb3IoY29sb3IsIHN0b3Auc3RvcCk7CisgICAg
fQorICAgIHJldHVybiBtX2dyYWRpZW50OwogfQogCi12b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIEdyYWRpZW50OjpmaWxsKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPkZpbGxSZWN0KHJl
Y3QsICptX2dyYWRpZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRl
eHRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVu
Z29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1
cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTMz
LDEyICszNCwxNSBAQAogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2lu
Y2x1ZGUgIkZvbnREYXRhLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUg
IlBlbi5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSA8Qml0
bWFwLmg+CiAjaW5jbHVkZSA8R3JhcGhpY3NEZWZzLmg+CiAjaW5jbHVkZSA8UmVnaW9uLmg+Cisj
aW5jbHVkZSA8U2hhcGUuaD4KICNpbmNsdWRlIDxWaWV3Lmg+CiAjaW5jbHVkZSA8V2luZG93Lmg+
CiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTUxLDE2ICs1NSwxNjYgQEAgcHVibGljOgogICAgIEdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShCVmlldyogdmlldyk7CiAgICAgfkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCi0gICAgQlZpZXcqIG1fdmlldzsKKyAgICBzdHJ1
Y3QgTGF5ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgTGF5ZXIoQlZpZXcqIF92aWV3KQorICAg
ICAgICAgICAgOiB2aWV3KF92aWV3KQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAg
ICAgICwgZ2xvYmFsQWxwaGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAg
ICAgICAgICAgICwgbG9jYXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNj
dW11bGF0ZWRPcmlnaW4oQl9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKDApCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN0cm9rZUNvbG9yLnJlZCA9IDA7CisgICAgICAgICAgICBzdHJv
a2VDb2xvci5ncmVlbiA9IDA7CisgICAgICAgICAgICBzdHJva2VDb2xvci5ibHVlID0gMDsKKyAg
ICAgICAgICAgIHN0cm9rZUNvbG9yLmFscGhhID0gMDsKKworICAgICAgICAgICAgZmlsbENvbG9y
LnJlZCA9IDA7CisgICAgICAgICAgICBmaWxsQ29sb3IuZ3JlZW4gPSAwOworICAgICAgICAgICAg
ZmlsbENvbG9yLmJsdWUgPSAwOworICAgICAgICAgICAgZmlsbENvbG9yLmFscGhhID0gMjU1Owor
ICAgICAgICB9CisgICAgICAgIExheWVyKExheWVyKiBwcmV2aW91cykKKyAgICAgICAgICAgIDog
dmlldygwKQorICAgICAgICAgICAgLCBiaXRtYXAoMCkKKyAgICAgICAgICAgICwgZ2xvYmFsQWxw
aGEoMjU1KQorICAgICAgICAgICAgLCBjdXJyZW50U2hhcGUoMCkKKyAgICAgICAgICAgICwgbG9j
YXRpb25JblBhcmVudChCX09SSUdJTikKKyAgICAgICAgICAgICwgYWNjdW11bGF0ZWRPcmlnaW4o
Ql9PUklHSU4pCisgICAgICAgICAgICAsIHByZXZpb3VzKHByZXZpb3VzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzdHJva2VDb2xvci5yZWQgPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3Iu
Z3JlZW4gPSAwOworICAgICAgICAgICAgc3Ryb2tlQ29sb3IuYmx1ZSA9IDA7CisgICAgICAgICAg
ICBzdHJva2VDb2xvci5hbHBoYSA9IDA7CisKKyAgICAgICAgICAgIGZpbGxDb2xvci5yZWQgPSAw
OworICAgICAgICAgICAgZmlsbENvbG9yLmdyZWVuID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xv
ci5ibHVlID0gMDsKKyAgICAgICAgICAgIGZpbGxDb2xvci5hbHBoYSA9IDI1NTsKKworICAgICAg
ICAgICAgQlJlZ2lvbiBwYXJlbnRDbGlwcGluZzsKKyAgICAgICAgICAgIHByZXZpb3VzLT52aWV3
LT5HZXRDbGlwcGluZ1JlZ2lvbigmcGFyZW50Q2xpcHBpbmcpOworICAgICAgICAgICAgQlJlY3Qg
ZnJhbWVJblBhcmVudCA9IHBhcmVudENsaXBwaW5nLkZyYW1lKCk7CisgICAgICAgICAgICBpZiAo
IWZyYW1lSW5QYXJlbnQuSXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyYW1lSW5QYXJlbnQg
PSBwcmV2aW91cy0+dmlldy0+Qm91bmRzKCk7CisgICAgICAgICAgICBCUmVjdCBib3VuZHMgPSBm
cmFtZUluUGFyZW50Lk9mZnNldFRvQ29weShCX09SSUdJTik7CisgICAgICAgICAgICBsb2NhdGlv
bkluUGFyZW50ICs9IGZyYW1lSW5QYXJlbnQuTGVmdFRvcCgpOworICAgICAgICAgICAgdmlldyA9
IG5ldyBCVmlldyhib3VuZHMsICJXZWJDb3JlIHRyYW5zcGFyZW5jeSBsYXllciIsIDAsIDApOwor
ICAgICAgICAgICAgYml0bWFwID0gbmV3IEJCaXRtYXAoYm91bmRzLCBCX1JHQkEzMiwgdHJ1ZSk7
CisgICAgICAgICAgICBiaXRtYXAtPkxvY2soKTsKKyAgICAgICAgICAgIGJpdG1hcC0+QWRkQ2hp
bGQodmlldyk7CisgICAgICAgICAgICB2aWV3LT5TZXRIaWdoQ29sb3IoMCwgMCwgMCwgMCk7Cisg
ICAgICAgICAgICB2aWV3LT5GaWxsUmVjdCh2aWV3LT5Cb3VuZHMoKSk7CisgICAgICAgICAgICB2
aWV3LT5TZXRIaWdoQ29sb3IocHJldmlvdXMtPnZpZXctPkhpZ2hDb2xvcigpKTsKKyAgICAgICAg
ICAgIHZpZXctPlNldERyYXdpbmdNb2RlKHByZXZpb3VzLT52aWV3LT5EcmF3aW5nTW9kZSgpKTsK
KyAgICAgICAgICAgIHZpZXctPlNldEJsZW5kaW5nTW9kZShCX1BJWEVMX0FMUEhBLCBCX0FMUEhB
X0NPTVBPU0lURSk7CisgICAgICAgICAgICAvLyBUT0RPOiBsb2NhdGlvbkluUGFyZW50IGFuZCBh
Y2N1bXVsYXRlZE9yaWdpbiBjYW4KKyAgICAgICAgICAgIC8vIHByb2JhYmx5IHNvbWVob3cgYmUg
bWVyZ2VkLiBCdXQgZm9yIG5vdyBpdCB3b3Jrcy4KKyAgICAgICAgICAgIGFjY3VtdWxhdGVkT3Jp
Z2luLnggPSAtZnJhbWVJblBhcmVudC5sZWZ0OworICAgICAgICAgICAgYWNjdW11bGF0ZWRPcmln
aW4ueSA9IC1mcmFtZUluUGFyZW50LnRvcDsKKyAgICAgICAgICAgIHZpZXctPlNldE9yaWdpbihw
cmV2aW91cy0+YWNjdW11bGF0ZWRPcmlnaW4gKyBhY2N1bXVsYXRlZE9yaWdpbik7CisgICAgICAg
ICAgICB2aWV3LT5TZXRTY2FsZShwcmV2aW91cy0+dmlldy0+U2NhbGUoKSk7CisgICAgICAgICAg
ICB2aWV3LT5TZXRQZW5TaXplKHByZXZpb3VzLT52aWV3LT5QZW5TaXplKCkpOworICAgICAgICB9
CisgICAgICAgIH5MYXllcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChiaXRtYXApIHsK
KyAgICAgICAgICAgICAgICBiaXRtYXAtPlVubG9jaygpOworICAgICAgICAgICAgICAgIC8vIERl
bGV0aW5nIHRoZSBiaXRtYXAgd2lsbCBhbHNvIHRha2UgY2FyZSBvZiB0aGUgdmlldywKKyAgICAg
ICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBiaXRtYXAsIHRoZSB2aWV3IGRvZXMgbm90IGJl
bG9uZyB0byB1cyAoaW5pdGlhbCBsYXllcikuCisgICAgICAgICAgICAgICAgZGVsZXRlIGJpdG1h
cDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbGV0ZSBjdXJyZW50U2hhcGU7CisgICAg
ICAgIH0KKworICAgICAgICBCVmlldyogdmlldzsKKyAgICAgICAgQkJpdG1hcCogYml0bWFwOwor
ICAgICAgICByZ2JfY29sb3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIHJnYl9jb2xvciBmaWxsQ29s
b3I7CisgICAgICAgIHVpbnQ4IGdsb2JhbEFscGhhOworICAgICAgICBCU2hhcGUqIGN1cnJlbnRT
aGFwZTsKKyAgICAgICAgQlBvaW50IGxvY2F0aW9uSW5QYXJlbnQ7CisgICAgICAgIEJQb2ludCBh
Y2N1bXVsYXRlZE9yaWdpbjsKKworICAgICAgICBMYXllciogcHJldmlvdXM7CisgICAgfTsKKwor
ICAgIEJWaWV3KiB2aWV3KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRM
YXllci0+dmlldzsKKyAgICB9CisKKyAgICB2b2lkIHNldFNoYXBlKEJTaGFwZSogc2hhcGUpCisg
ICAgeworICAgICAgICBkZWxldGUgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9IHNoYXBlOworICAgIH0KKworICAgIEJT
aGFwZSogc2hhcGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnRMYXllci0+
Y3VycmVudFNoYXBlKQorICAgICAgICAgICAgbV9jdXJyZW50TGF5ZXItPmN1cnJlbnRTaGFwZSA9
IG5ldyBCU2hhcGUoKTsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudExheWVyLT5jdXJyZW50U2hh
cGU7CisgICAgfQorCisgICAgdm9pZCBwdXNoTGF5ZXIoZmxvYXQgb3BhY2l0eSkKKyAgICB7Cisg
ICAgICAgIG1fY3VycmVudExheWVyID0gbmV3IExheWVyKG1fY3VycmVudExheWVyKTsKKyAgICAg
ICAgbV9jdXJyZW50TGF5ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjAp
OworICAgIH0KKworICAgIHZvaWQgcG9wTGF5ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2N1
cnJlbnRMYXllci0+cHJldmlvdXMpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIExheWVy
KiBsYXllciA9IG1fY3VycmVudExheWVyOworICAgICAgICBtX2N1cnJlbnRMYXllciA9IGxheWVy
LT5wcmV2aW91czsKKyAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA+IDApIHsKKyAgICAg
ICAgICAgIC8vIFBvc3QgcHJvY2VzcyB0aGUgYml0bWFwIGluIG9yZGVyIHRvIGFwcGx5IGdsb2Jh
bCBhbHBoYS4uLgorICAgICAgICAgICAgaWYgKGxheWVyLT5nbG9iYWxBbHBoYSA8IDI1NSkgewor
ICAgICAgICAgICAgICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OCo+KGxh
eWVyLT5iaXRtYXAtPkJpdHMoKSk7CisgICAgICAgICAgICAgICAgdWludDMyIHdpZHRoID0gbGF5
ZXItPmJpdG1hcC0+Qm91bmRzKCkuSW50ZWdlcldpZHRoKCkgKyAxOworICAgICAgICAgICAgICAg
IHVpbnQzMiBoZWlnaHQgPSBsYXllci0+Yml0bWFwLT5Cb3VuZHMoKS5JbnRlZ2VySGVpZ2h0KCkg
KyAxOworICAgICAgICAgICAgICAgIHVpbnQzMiBicHIgPSBsYXllci0+Yml0bWFwLT5CeXRlc1Bl
clJvdygpOworICAgICAgICAgICAgICAgIHVpbnQ4IGFscGhhID0gbGF5ZXItPmdsb2JhbEFscGhh
OworICAgICAgICAgICAgICAgIGZvciAodWludDMyIHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsK
KyAgICAgICAgICAgICAgICAgICAgdWludDgqIHAgPSBiaXRzOworICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVpbnQzMiB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFRPRE86IFRoZXJlIGlzIGEgbWV0aG9kIHRvIGRvIHNoaWZ0aW5nIHdpdGhvdXQg
Yml0IGVycm9ycy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gPSAodWludDgpKCh1aW50
MTYpcFswXSAqIGFscGhhID4+IDgpOworICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSA9ICh1
aW50OCkoKHVpbnQxNilwWzFdICogYWxwaGEgPj4gOCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwWzJdID0gKHVpbnQ4KSgodWludDE2KXBbMl0gKiBhbHBoYSA+PiA4KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBbM10gPSAodWludDgpKCh1aW50MTYpcFszXSAqIGFscGhhID4+IDgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcCArPSA0OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGJpdHMgKz0gYnByOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIEJQb2ludCBiaXRtYXBMb2NhdGlvbihsYXllci0+bG9jYXRp
b25JblBhcmVudCk7CisgICAgICAgICAgICBiaXRtYXBMb2NhdGlvbiAtPSBtX2N1cnJlbnRMYXll
ci0+YWNjdW11bGF0ZWRPcmlnaW47CisgICAgICAgICAgICBtX2N1cnJlbnRMYXllci0+dmlldy0+
RHJhd0JpdG1hcChsYXllci0+Yml0bWFwLCBiaXRtYXBMb2NhdGlvbik7CisgICAgICAgIH0KKyAg
ICAgICAgZGVsZXRlIGxheWVyOworICAgIH0KKworICAgIExheWVyKiBtX2N1cnJlbnRMYXllcjsK
IH07CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKEJWaWV3KiB2aWV3KQotICAgIDogbV92aWV3KHZpZXcpCisgICAgOiBtX2N1
cnJlbnRMYXllcihuZXcgTGF5ZXIodmlldykpCiB7CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCiB7CisgICAgd2hp
bGUgKExheWVyKiBwcmV2aW91cyA9IG1fY3VycmVudExheWVyLT5wcmV2aW91cykgeworICAgICAg
ICBkZWxldGUgbV9jdXJyZW50TGF5ZXI7CisgICAgICAgIG1fY3VycmVudExheWVyID0gcHJldmlv
dXM7CisgICAgfQorICAgIGRlbGV0ZSBtX2N1cnJlbnRMYXllcjsKIH0KIAogR3JhcGhpY3NDb250
ZXh0OjpHcmFwaGljc0NvbnRleHQoUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCkBA
IC03OCwxNyArMjMyLDE4IEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAK
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBHcmFwaGljc0NvbnRleHQ6OnBsYXRmb3JtQ29udGV4
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+bV92aWV3OworICAgIHJldHVybiBtX2Rh
dGEtPnZpZXcoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRl
KCkKIHsKLSAgICBtX2RhdGEtPm1fdmlldy0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRhLT52aWV3
KCktPlB1c2hTdGF0ZSgpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRm
b3JtU3RhdGUoKQogewotICAgIG1fZGF0YS0+bV92aWV3LT5Qb3BTdGF0ZSgpOworICAgIG1fZGF0
YS0+bV9jdXJyZW50TGF5ZXItPmFjY3VtdWxhdGVkT3JpZ2luIC09IG1fZGF0YS0+dmlldygpLT5P
cmlnaW4oKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+UG9wU3RhdGUoKTsKIH0KIAogLy8gRHJhd3Mg
YSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTk3LDIxICsyNTIs
MTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludAogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3
LT5GaWxsUmVjdChyZWN0KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CiAg
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAgIG1fZGF0YS0+bV92aWV3
LT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgICAgIG1fZGF0
YS0+dmlldygpLT5TdHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAK
IC8vIFRoaXMgaXMgb25seSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQyKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChzdHJva2VTdHlsZSgpID09IE5vU3Ryb2tlKQorICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkgfHwgc3Ryb2tlU3R5bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25lc3MoKSA8
PSAwLjBmIHx8ICFzdHJva2VDb2xvcigpLmFscGhhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fZGF0YS0+bV92aWV3LT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQyLCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TdHJva2VMaW5lKHBvaW50MSwgcG9pbnQy
LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVz
ZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0cy4KQEAgLTEyMCwyMiAr
MjcyLDczIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1f
dmlldy0+RmlsbEVsbGlwc2UocmVjdCk7CisgICAgbV9kYXRhLT52aWV3KCktPkZpbGxFbGxpcHNl
KHJlY3QpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQotICAgICAgICBtX2Rh
dGEtPm1fdmlldy0+U3Ryb2tlRWxsaXBzZShyZWN0LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwor
ICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlRWxsaXBzZShyZWN0LCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IElu
dFJlY3QmIHJlY3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKQogewotICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VT
dHlsZSgpID09IE5vU3Ryb2tlIHx8IHN0cm9rZVRoaWNrbmVzcygpIDw9IDAuMGYgfHwgIXN0cm9r
ZUNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZUFyYyhyZWN0LCBzdGFydEFuZ2xlLCBhbmdsZVNwYW4sIGdldEhhaWt1U3Ryb2tlU3R5
bGUoKSk7CisgICAgLy8gVE9ETzogVGhlIGNvZGUgYmVsb3cgd2lsbCBvbmx5IG1ha2Ugcm91bmQt
Y29ybmVyIGJveGVuIGxvb2sgbmljZS4gRm9yIGFuIHV0dGVybHkgc2hvY2tpbmcKKyAgICAvLyBp
bXBsZW1lbnRhdGlvbiBvZiByb3VuZCBjb3JuZXIgZHJhd2luZywgc2VlIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcigpLiBJdCB0cmllcworICAgIC8vIHRvIHVzZSBvbmUgKG9yIHR3
bykgYWxwaGEgbWFzayhzKSBwZXIgYm94IGNvcm5lciB0byBjdXQgb2ZmIGEgdGhpY2tlciBzdHJv
a2UgYW5kIGRvdWJsZXMKKyAgICAvLyB0aGUgc3Ryb2tlIHdpdGguIEFsbCB0aGlzIHRvIGFsaWdu
IHRoZSBhcmMgd2l0aCB0aGUgYm94IHNpZGVzLi4uCisKKyAgICBmbG9hdCBwZW5TaXplID0gc3Ry
b2tlVGhpY2tuZXNzKCkgLyAyLjBmOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRQZW5TaXplKHBl
blNpemUpOworICAgIEJSZWN0IGJSZWN0KHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC5yaWdodCgp
LCByZWN0LmJvdHRvbSgpKTsKKyAgICBpZiAoc3RhcnRBbmdsZSA+PSAwICYmIHN0YXJ0QW5nbGUg
PCA5MCkgeworICAgICAgICBiUmVjdC5yaWdodCAtPSBwZW5TaXplOworICAgICAgICBiUmVjdC50
b3AgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LmJvdHRvbSAtPSBwZW5TaXplIC8g
Mi4wZjsKKyAgICB9IGVsc2UgaWYgKHN0YXJ0QW5nbGUgPj0gOTAgJiYgc3RhcnRBbmdsZSA8IDE4
MCkgeworICAgICAgICBiUmVjdC5sZWZ0ICs9IHBlblNpemUgLyAyLjBmOworICAgICAgICBiUmVj
dC50b3AgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBlblNpemUg
LyAyLjBmOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZSAvIDIuMGY7CisgICAgfSBl
bHNlIGlmIChzdGFydEFuZ2xlID49IDE4MCAmJiBzdGFydEFuZ2xlIDwgMjcwKSB7CisgICAgICAg
IGJSZWN0LmxlZnQgKz0gcGVuU2l6ZSAvIDIuMGY7CisgICAgICAgIGJSZWN0LnJpZ2h0IC09IHBl
blNpemUgLyAyLjBmOworICAgICAgICBiUmVjdC5ib3R0b20gLT0gcGVuU2l6ZTsKKyAgICB9IGVs
c2UgaWYgKHN0YXJ0QW5nbGUgPj0gMjcwICYmIHN0YXJ0QW5nbGUgPCAzNjApIHsKKyAgICAgICAg
YlJlY3QucmlnaHQgLT0gcGVuU2l6ZTsKKyAgICAgICAgYlJlY3QuYm90dG9tIC09IHBlblNpemU7
CisgICAgfQorICAgIGJSZWN0Lk9mZnNldFRvKGZsb29yZihiUmVjdC5sZWZ0KSwgZmxvb3JmKGJS
ZWN0LnRvcCkpOworICAgIHVpbnQzMiBmbGFncyA9IG1fZGF0YS0+dmlldygpLT5GbGFncygpOwor
ICAgIG1fZGF0YS0+dmlldygpLT5TZXRGbGFncyhmbGFncyB8IEJfU1VCUElYRUxfUFJFQ0lTRSk7
CisgICAgbV9kYXRhLT52aWV3KCktPlN0cm9rZUFyYyhiUmVjdCwgc3RhcnRBbmdsZSwgYW5nbGVT
cGFuLCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRGbGFn
cyhmbGFncyk7CisKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0UGVuU2l6ZShzdHJva2VUaGlja25l
c3MoKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghbV9kYXRhLT5zaGFwZSgpKQorICAgICAgICByZXR1cm47CisKKy8v
ICAgIG1fZGF0YS0+dmlldygpLT5TZXRGaWxsUnVsZSh0b0hhaWt1RmlsbFJ1bGUoZmlsbFJ1bGUo
KSkpOworICAgIG1fZGF0YS0+dmlldygpLT5Nb3ZlUGVuVG8oQl9PUklHSU4pOworCisgICAgaWYg
KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VH
cmFkaWVudCB8fCBzdHJva2VDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgaWYgKG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VQYXR0ZXJuKQorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50KSB7CisgICAgICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworLy8gICAgICAgICAgICBCR3JhZGllbnQqIGdyYWRpZW50
ID0gbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCk7Cisv
LyAgICAgICAgICAgIGdyYWRpZW50LT5TZXRUcmFuc2Zvcm0obV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKKy8vICAgICAgICAgICAgbV9kYXRh
LT52aWV3KCktPlN0cm9rZVNoYXBlKG1fZGF0YS0+c2hhcGUoKSwgKmdyYWRpZW50KTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlU2hhcGUobV9kYXRh
LT5zaGFwZSgpKTsKKyAgICB9CisgICAgbV9kYXRhLT5zZXRTaGFwZSgwKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBwb2ludHNMZW5ndGgsIGNv
bnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCkBAIC0xNDcsMTAg
KzM1MCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb2ludHNMZW5ndGg7IGkrKykKICAgICAgICAgYlBvaW50
c1tpXSA9IHBvaW50c1tpXTsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUG9seWdvbihiUG9p
bnRzLCBwb2ludHNMZW5ndGgpOwogICAgIGlmIChzdHJva2VTdHlsZSgpICE9IE5vU3Ryb2tlKQog
ICAgICAgICAvLyBTdHJva2Ugd2l0aCBsb3cgY29sb3IKLSAgICAgICAgbV9kYXRhLT5tX3ZpZXct
PlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVlLCBnZXRIYWlrdVN0cm9r
ZVN0eWxlKCkpOworICAgICAgICBtX2RhdGEtPnZpZXcoKS0+U3Ryb2tlUG9seWdvbihiUG9pbnRz
LCBwb2ludHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQpAQCAtMTU4LDE2ICszNjEsMTggQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHJnYl9jb2xvciBvbGRDb2xvciA9
IG1fZGF0YS0+bV92aWV3LT5IaWdoQ29sb3IoKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+U2V0SGln
aENvbG9yKGNvbG9yKTsKLSAgICBtX2RhdGEtPm1fdmlldy0+RmlsbFJlY3QocmVjdCk7Ci0gICAg
bV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihvbGRDb2xvcik7CisgICAgcmdiX2NvbG9yIG9s
ZENvbG9yID0gbV9kYXRhLT52aWV3KCktPkhpZ2hDb2xvcigpOworICAgIG1fZGF0YS0+dmlldygp
LT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsUmVjdChyZWN0
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKG9sZENvbG9yKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CisKKyAgICBtX2RhdGEt
PnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwg
Y29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0
IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSkKQEAgLTE3NSwyNSArMzgwLDg4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
Um91bmRlZFJlY3QoY28KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5hbHBo
YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIC8vIEZJ
WE1FOiBBIHNpbXBsZSBpbXBsZW1lbnRhdGlvbiBjb3VsZCBqdXN0IHVzZSBGaWxsUm91bmRSZWN0
IGlmIGFsbAotICAgIC8vIHRoZSBzaXplcyBhcmUgdGhlIHNhbWUsIG9yIGV2ZW4gaWYgdGhleSBh
cmUgbm90LiBPdGhlcndpc2Ugc2V2ZXJhbAotICAgIC8vIEZpbGxSZWN0IGFuZCBGaWxsQXJjIGNh
bGxzIGFyZSBuZWVkZWQuCisgICAgQlBvaW50IHBvaW50c1szXTsKKyAgICBjb25zdCBmbG9hdCBr
UmFkaXVzQmV6aWVyU2NhbGUgPSAwLjU2ZjsKKworICAgIEJTaGFwZSBzaGFwZTsKKyAgICBzaGFw
ZS5Nb3ZlVG8oQlBvaW50KHJlY3QueCgpICsgdG9wTGVmdC53aWR0aCgpLCByZWN0LnkoKSkpOwor
ICAgIHNoYXBlLkxpbmVUbyhCUG9pbnQocmVjdC5yaWdodCgpIC0gdG9wUmlnaHQud2lkdGgoKSwg
cmVjdC55KCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QucmlnaHQoKSAtIGtSYWRpdXNCZXpp
ZXJTY2FsZSAqIHRvcFJpZ2h0LndpZHRoKCk7CisgICAgcG9pbnRzWzBdLnkgPSByZWN0LnkoKTsK
KyAgICBwb2ludHNbMV0ueCA9IHJlY3QucmlnaHQoKTsKKyAgICBwb2ludHNbMV0ueSA9IHJlY3Qu
eSgpICsga1JhZGl1c0JlemllclNjYWxlICogdG9wUmlnaHQuaGVpZ2h0KCk7CisgICAgcG9pbnRz
WzJdLnggPSByZWN0LnJpZ2h0KCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0LnkoKSArIHRvcFJp
Z2h0LmhlaWdodCgpOworICAgIHNoYXBlLkJlemllclRvKHBvaW50cyk7CisgICAgc2hhcGUuTGlu
ZVRvKEJQb2ludChyZWN0LnJpZ2h0KCksIHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWln
aHQoKSkpOworICAgIHBvaW50c1swXS54ID0gcmVjdC5yaWdodCgpOworICAgIHBvaW50c1swXS55
ID0gcmVjdC5ib3R0b20oKSAtIGtSYWRpdXNCZXppZXJTY2FsZSAqIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpOworICAgIHBvaW50c1sxXS54ID0gcmVjdC5yaWdodCgpIC0ga1JhZGl1c0JlemllclNjYWxl
ICogYm90dG9tUmlnaHQud2lkdGgoKTsKKyAgICBwb2ludHNbMV0ueSA9IHJlY3QuYm90dG9tKCk7
CisgICAgcG9pbnRzWzJdLnggPSByZWN0LnJpZ2h0KCkgLSBib3R0b21SaWdodC53aWR0aCgpOwor
ICAgIHBvaW50c1syXS55ID0gcmVjdC5ib3R0b20oKTsKKyAgICBzaGFwZS5CZXppZXJUbyhwb2lu
dHMpOworICAgIHNoYXBlLkxpbmVUbyhCUG9pbnQocmVjdC54KCkgKyBib3R0b21MZWZ0LndpZHRo
KCksIHJlY3QuYm90dG9tKCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QueCgpICsga1JhZGl1
c0JlemllclNjYWxlICogYm90dG9tTGVmdC53aWR0aCgpOworICAgIHBvaW50c1swXS55ID0gcmVj
dC5ib3R0b20oKTsKKyAgICBwb2ludHNbMV0ueCA9IHJlY3QueCgpOworICAgIHBvaW50c1sxXS55
ID0gcmVjdC5ib3R0b20oKSAtIGtSYWRpdXNCZXppZXJTY2FsZSAqIGJvdHRvbVJpZ2h0LmhlaWdo
dCgpOworICAgIHBvaW50c1syXS54ID0gcmVjdC54KCk7CisgICAgcG9pbnRzWzJdLnkgPSByZWN0
LmJvdHRvbSgpIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCk7CisgICAgc2hhcGUuQmV6aWVyVG8ocG9p
bnRzKTsKKyAgICBzaGFwZS5MaW5lVG8oQlBvaW50KHJlY3QueCgpLCByZWN0LnkoKSArIHRvcExl
ZnQuaGVpZ2h0KCkpKTsKKyAgICBwb2ludHNbMF0ueCA9IHJlY3QueCgpOworICAgIHBvaW50c1sw
XS55ID0gcmVjdC55KCkgLSBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0b3BMZWZ0LmhlaWdodCgpOwor
ICAgIHBvaW50c1sxXS54ID0gcmVjdC54KCkgKyBrUmFkaXVzQmV6aWVyU2NhbGUgKiB0b3BMZWZ0
LndpZHRoKCk7CisgICAgcG9pbnRzWzFdLnkgPSByZWN0LnkoKTsKKyAgICBwb2ludHNbMl0ueCA9
IHJlY3QueCgpICsgdG9wTGVmdC53aWR0aCgpOworICAgIHBvaW50c1syXS55ID0gcmVjdC55KCk7
CisgICAgc2hhcGUuQmV6aWVyVG8ocG9pbnRzKTsKKyAgICBzaGFwZS5DbG9zZSgpOworCisgICAg
cmdiX2NvbG9yIG9sZENvbG9yID0gbV9kYXRhLT52aWV3KCktPkhpZ2hDb2xvcigpOworICAgIG1f
ZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5N
b3ZlUGVuVG8oQl9PUklHSU4pOworICAgIG1fZGF0YS0+dmlldygpLT5GaWxsU2hhcGUoJnNoYXBl
KTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0SGlnaENvbG9yKG9sZENvbG9yKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICgh
bV9kYXRhLT5zaGFwZSgpKQorICAgICAgICByZXR1cm47CisKKy8vICAgIG1fZGF0YS0+dmlldygp
LT5TZXRGaWxsUnVsZSh0b0hhaWt1RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOworICAgIG1fZGF0YS0+
dmlldygpLT5Nb3ZlUGVuVG8oQl9PUklHSU4pOworCisgICAgaWYgKG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybiB8fCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50IHx8IGZpbGxDb2xvcigp
LmFscGhhKCkpIHsKKy8vICAgICAgICBkcmF3RmlsbGVkU2hhZG93UGF0aCh0aGlzLCBwLCBwYXRo
KTsgVE9ETzogV2hhdCdzIHRoaXMgc2hhZG93IGJ1c2luZXNzPworICAgICAgICBpZiAobV9jb21t
b24tPnN0YXRlLmZpbGxQYXR0ZXJuKQorICAgICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudCkgeworICAgICAgICAg
ICAgQkdyYWRpZW50KiBncmFkaWVudCA9IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBs
YXRmb3JtR3JhZGllbnQoKTsKKy8vICAgICAgICAgICAgZ3JhZGllbnQtPlNldFRyYW5zZm9ybSht
X2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwor
ICAgICAgICAgICAgbV9kYXRhLT52aWV3KCktPkZpbGxTaGFwZShtX2RhdGEtPnNoYXBlKCksICpn
cmFkaWVudCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9kYXRhLT52aWV3KCktPkZp
bGxTaGFwZShtX2RhdGEtPnNoYXBlKCkpOworICAgIH0KKyAgICBtX2RhdGEtPnNldFNoYXBlKDAp
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5QYXRoKCkKIHsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIG1fZGF0YS0+c2V0U2hhcGUobmV3IEJTaGFwZSgpKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIGlmICghbV9kYXRhLT5zaGFwZSgpKQorICAgICAgICBtX2RhdGEt
PnNldFNoYXBlKG5ldyBCU2hhcGUoKnBhdGgucGxhdGZvcm1QYXRoKCkpKTsKKyAgICBlbHNlCisg
ICAgICAgIG1fZGF0YS0+c2hhcGUoKS0+QWRkU2hhcGUocGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiB9
CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKQEAg
LTIwMiwxMiArNDcwLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmUKICAgICAgICAgcmV0dXJuOwogCiAgICAgQlJlZ2lvbiByZWdpb24ocmVjdCk7Ci0gICAgbV9k
YXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVnaW9uKCZyZWdpb24pOworICAgIG1fZGF0
YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKFdpbmRSdWxlIGNsaXBSdWxlKQoreworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IFZlY3Rv
cjxQYXRoPiYgcGF0aHMsIGludCB3aWR0aCwgaW50IG9mZnNldCwgY29uc3QgQ29sb3ImIGNvbG9y
KQogewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBpbnQgLyogd2lkdGggKi8sIGludCAvKiBvZmZzZXQgKi8sIGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTIyMSwxMSArNTAwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5n
KGNvbnMKIAogICAgIGlmIChyZWN0cy5zaXplKCkgPiAxKSB7CiAgICAgICAgIEJSZWdpb24gICAg
cmVnaW9uOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3RDb3VudDsgKytpKQorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyArK2kpCiAgICAgICAgICAg
ICByZWdpb24uSW5jbHVkZShCUmVjdChyZWN0c1tpXSkpOwogCi0gICAgICAgIG1fZGF0YS0+bV92
aWV3LT5TZXRIaWdoQ29sb3IoY29sb3IpOwotICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tl
UmVjdChyZWdpb24uRnJhbWUoKSwgQl9NSVhFRF9DT0xPUlMpOworICAgICAgICBtX2RhdGEtPnZp
ZXcoKS0+U2V0SGlnaENvbG9yKGNvbG9yKTsKKyAgICAgICAgbV9kYXRhLT52aWV3KCktPlN0cm9r
ZVJlY3QocmVnaW9uLkZyYW1lKCksIEJfTUlYRURfQ09MT1JTKTsKICAgICB9CiB9CiAKQEAgLTI0
OCw4ICs1MjcsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAog
CiBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiByZWN0
OworICAgIEZsb2F0UmVjdCByb3VuZGVkKHJlY3QpOworICAgIHJvdW5kZWQuc2V0WChyb3VuZGYo
cmVjdC54KCkpKTsKKyAgICByb3VuZGVkLnNldFkocm91bmRmKHJlY3QueSgpKSk7CisgICAgcm91
bmRlZC5zZXRXaWR0aChyb3VuZGYocmVjdC53aWR0aCgpKSk7CisgICAgcm91bmRlZC5zZXRIZWln
aHQocm91bmRmKHJlY3QuaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gcm91bmRlZDsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmJlZ2luVHJhbnNwYXJlbmN5TGF5ZXIoZmxvYXQgb3BhY2l0eSkK
QEAgLTI1Nyw3ICs1NDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVu
Y3lMCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPnB1c2hMYXllcihvcGFjaXR5KTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxheWVyKCkKQEAgLTI2NSw3ICs1
NDgsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBtX2RhdGEtPnBvcExheWVyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQpAQCAtMjczLDcgKzU1NiwxMSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+UHVzaFN0YXRlKCk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEhp
Z2hDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0RHJhd2luZ01vZGUo
Ql9PUF9DT1BZKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+RmlsbFJlY3QocmVjdCk7CisgICAgbV9k
YXRhLT52aWV3KCktPlBvcFN0YXRlKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgd2lkdGgpCkBAIC0yODEsMTAgKzU2
OCwxMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZmxvYXQgb2xkU2l6
ZSA9IG1fZGF0YS0+bV92aWV3LT5QZW5TaXplKCk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBl
blNpemUod2lkdGgpOwotICAgIG1fZGF0YS0+bV92aWV3LT5TdHJva2VSZWN0KHJlY3QsIGdldEhh
aWt1U3Ryb2tlU3R5bGUoKSk7Ci0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUob2xkU2l6
ZSk7CisgICAgZmxvYXQgb2xkU2l6ZSA9IG1fZGF0YS0+dmlldygpLT5QZW5TaXplKCk7CisgICAg
bV9kYXRhLT52aWV3KCktPlNldFBlblNpemUod2lkdGgpOworICAgIG1fZGF0YS0+dmlldygpLT5T
dHJva2VSZWN0KHJlY3QsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CisgICAgbV9kYXRhLT52aWV3
KCktPlNldFBlblNpemUob2xkU2l6ZSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAgbGluZUNhcCkKQEAgLTMwNSw3ICs1OTIsMTIgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAg
ICBtX2RhdGEtPm1fdmlldy0+U2V0TGluZU1vZGUobW9kZSwgbV9kYXRhLT5tX3ZpZXctPkxpbmVK
b2luTW9kZSgpLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7CisgICAgbV9kYXRh
LT52aWV3KCktPlNldExpbmVNb2RlKG1vZGUsIG1fZGF0YS0+dmlldygpLT5MaW5lSm9pbk1vZGUo
KSwgbV9kYXRhLT52aWV3KCktPkxpbmVNaXRlckxpbWl0KCkpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoZXMsIGZsb2F0IGRhc2hP
ZmZzZXQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldExpbmVKb2luKExpbmVKb2luIGxpbmVKb2luKQpAQCAtMzI2LDcgKzYxOCw3IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm8KICAgICAgICAgYnJlYWs7CiAg
ICAgfQogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldExpbmVNb2RlKG1fZGF0YS0+bV92aWV3LT5M
aW5lQ2FwTW9kZSgpLCBtb2RlLCBtX2RhdGEtPm1fdmlldy0+TGluZU1pdGVyTGltaXQoKSk7Cisg
ICAgbV9kYXRhLT52aWV3KCktPlNldExpbmVNb2RlKG1fZGF0YS0+dmlldygpLT5MaW5lQ2FwTW9k
ZSgpLCBtb2RlLCBtX2RhdGEtPnZpZXcoKS0+TGluZU1pdGVyTGltaXQoKSk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQpAQCAtMzM0LDcgKzYy
Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRNaXRlckxpbWl0KGZsb2EKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPm1fdmll
dy0+U2V0TGluZU1vZGUobV9kYXRhLT5tX3ZpZXctPkxpbmVDYXBNb2RlKCksIG1fZGF0YS0+bV92
aWV3LT5MaW5lSm9pbk1vZGUoKSwgbGltaXQpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRMaW5l
TW9kZShtX2RhdGEtPnZpZXcoKS0+TGluZUNhcE1vZGUoKSwgbV9kYXRhLT52aWV3KCktPkxpbmVK
b2luTW9kZSgpLCBsaW1pdCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShm
bG9hdCBvcGFjaXR5KQpAQCAtMzQyLDcgKzYzNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRBbHBoYShmbG9hdCBvcGEKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fZGF0YS0+bV9jdXJyZW50TGF5
ZXItPmdsb2JhbEFscGhhID0gKHVpbnQ4KShvcGFjaXR5ICogMjU1LjBmKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBv
cCkKQEAgLTM2Myw3ICs2NTUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9zaXRl
T3BlcmF0CiAgICAgICAgIHByaW50ZigiR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVy
YXRpb246IFVuc3VwcG9ydGVkIGNvbXBvc2l0ZSBvcGVyYXRpb24gJXNcbiIsCiAgICAgICAgICAg
ICAgICAgY29tcG9zaXRlT3BlcmF0b3JOYW1lKG9wKS51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0g
ICAgbV9kYXRhLT5tX3ZpZXctPlNldERyYXdpbmdNb2RlKG1vZGUpOworICAgIG1fZGF0YS0+dmll
dygpLT5TZXREcmF3aW5nTW9kZShtb2RlKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXAoY29uc3QgUGF0aCYgcGF0aCkKQEAgLTM3MSw3ICs2NjMsNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcChjb25zdCBQYXRoJiBwCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPkNvbnN0cmFpbkNsaXBwaW5nUmVn
aW9uKHBhdGgucGxhdGZvcm1QYXRoKCkpOworICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFBhdGgmIHBhdGgpCkBAIC0zOTQs
MTQgKzY4NiwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoCiAK
IEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldEFmZmluZUNUTSgpIGNvbnN0CiB7
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCk7Cisg
ICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5z
Zm9ybT8KKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgIEJQb2ludCBvcmlnaW4gPSBt
X2RhdGEtPnZpZXcoKS0+T3JpZ2luKCk7CisgICAgbWF0cml4LnRyYW5zbGF0ZShvcmlnaW4ueCwg
b3JpZ2luLnkpOworICAgIG1hdHJpeC5zY2FsZShtX2RhdGEtPnZpZXcoKS0+U2NhbGUoKSk7Cisg
ICAgcmV0dXJuIG1hdHJpeDsKIH0KIAogVHJhbnNmb3JtYXRpb25NYXRyaXggR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgLy8gVE9ETzogTWF5YmUgdGhpcyBuZWVkcyB0
byB1c2UgdGhlIGFjY3VtdWxhdGVkIHRyYW5zZm9ybT8KKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtYXRyaXg7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4oKTsK
KyAgICBtYXRyaXgudHJhbnNsYXRlKG9yaWdpbi54LCBvcmlnaW4ueSk7CisgICAgbWF0cml4LnNj
YWxlKG1fZGF0YS0+dmlldygpLT5TY2FsZSgpKTsKKyAgICByZXR1cm4gbWF0cml4OwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCkBAIC00MDks
MTMgKzcwOSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKGZsb2F0IHgsCiAg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICBtX2RhdGEtPm1fY3VycmVudExheWVyLT5hY2N1bXVsYXRlZE9yaWdp
bi54ICs9IHg7CisgICAgbV9kYXRhLT5tX2N1cnJlbnRMYXllci0+YWNjdW11bGF0ZWRPcmlnaW4u
eSArPSB5OworICAgIEJQb2ludCBvcmlnaW4obV9kYXRhLT52aWV3KCktPk9yaWdpbigpKTsKKyAg
ICBtX2RhdGEtPnZpZXcoKS0+U2V0T3JpZ2luKG9yaWdpbi54ICsgeCwgb3JpZ2luLnkgKyB5KTsK
KworICAgIC8vIFRPRE86IGN1cnJlbnRQYXRoIG5lZWRzIHRvIGJlIHRyYW5zbGF0ZWQgYWxvbmcs
IGFjY29yZGluZyB0byBRdCBpbXBsZW1lbnRhdGlvbgogfQogCiBJbnRQb2ludCBHcmFwaGljc0Nv
bnRleHQ6Om9yaWdpbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gSW50
UG9pbnQoMCwgMCk7CisgICAgQlBvaW50IG9yaWdpbiA9IG1fZGF0YS0+dmlldygpLT5PcmlnaW4o
KTsKKyAgICByZXR1cm4gSW50UG9pbnQob3JpZ2luLngsIG9yaWdpbi55KTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCByYWRpYW5zKQpAQCAtNDMxLDcgKzczNiw4IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBGbG9hdFMKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIC8vIE5PVEU6IE5vbi11bmlmb3JtIHNjYWxpbmcgbm90IHN1cHBvcnRlZCBvbiBIYWlrdSwg
eWV0LgorICAgIG1fZGF0YS0+dmlldygpLT5TZXRTY2FsZSgoc2l6ZS53aWR0aCgpICsgc2l6ZS5o
ZWlnaHQoKSkgLyAyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3Qg
SW50UmVjdCYgcmVjdCkKQEAgLTQzOSw3ICs3NDUsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcE91dChjb25zdCBJbnRSCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCUmVnaW9uIHJlZ2lvbihtX2Rh
dGEtPnZpZXcoKS0+Qm91bmRzKCkpOworICAgIHJlZ2lvbi5FeGNsdWRlKHJlY3QpOworICAgIG1f
ZGF0YS0+dmlldygpLT5Db25zdHJhaW5DbGlwcGluZ1JlZ2lvbigmcmVnaW9uKTsKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCkBAIC00NTUsNiArNzYzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91
bmRlZFJlYwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIC8vIE5PVEU6IFVzZWQgYnkgUmVuZGVyQm94TW9kZWxPYmplY3QgdG8gY2xpcCBvdXQgdGhl
IGlubmVyIHBhcnQgb2YgYW4gYXJjIHdoZW4gcmVuZGluZyBib3ggY29ybmVycy4uLgorICAgIC8v
IFRPRE86IFVzZSB0aGlzIG1ldGhvZCB0byBkZXRlY3QgaWYgd2UgYXJlIHJlbmRlcmluZyBhIHJv
dW5kLWNvcm5lci1ib3guLi4KKwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKQEAgLTQ5Myw3
ICs4MDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VVJMRm9yUmVjdChjb25zCiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCkKIHsK
LSAgICBtX2RhdGEtPm1fdmlldy0+U2V0Rm9udChmb250LnByaW1hcnlGb250KCktPnBsYXRmb3Jt
RGF0YSgpLmZvbnQoKSk7CisgICAgbV9kYXRhLT52aWV3KCktPlNldEZvbnQoZm9udC5wcmltYXJ5
Rm9udCgpLT5wbGF0Zm9ybURhdGEoKS5mb250KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2Ug
Y29sb3JTcGFjZSkKQEAgLTUwMSw3ICs4MTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TdHJva2VDCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldEhpZ2hDb2xvcihjb2xvcik7CisgICAgbV9k
YXRhLT52aWV3KCktPlNldEhpZ2hDb2xvcihjb2xvcik7CiB9CiAKIHBhdHRlcm4gR3JhcGhpY3ND
b250ZXh0OjpnZXRIYWlrdVN0cm9rZVN0eWxlKCkKQEAgLTUzNSw3ICs4NDYsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUCiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9kYXRhLT5tX3ZpZXctPlNldFBlblNpemUo
dGhpY2tuZXNzKTsKKyAgICBtX2RhdGEtPnZpZXcoKS0+U2V0UGVuU2l6ZSh0aGlja25lc3MpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCkBAIC01NDMsNyArODU0LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbAogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+bV92aWV3LT5TZXRIaWdo
Q29sb3IoY29sb3IpOworICAgIG1fZGF0YS0+dmlldygpLT5TZXRIaWdoQ29sb3IoY29sb3IpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdygpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1BhdGhIYWlrdS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9QYXRoSGFpa3UuY3BwCShyZXZpc2lv
biA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvUGF0aEhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAo
QykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzAsMTUgKzMxLDIwIEBACiAKICNpbmNsdWRlICJBZmZp
bmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCi0jaW5jbHVkZSA8UmVnaW9uLmg+CisjaW5jbHVkZSAiU3Ryb2tlU3R5bGVB
cHBsaWVyLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlIDxC
aXRtYXAuaD4KKyNpbmNsdWRlIDxTaGFwZS5oPgorI2luY2x1ZGUgPFZpZXcuaD4KIAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFBhdGg6OlBhdGgoKQotICAgIDogbV9wYXRoKG5ldyBCUmVnaW9u
KCkpCisgICAgOiBtX3BhdGgobmV3IEJTaGFwZSgpKQogewogfQogCkBAIC00OCw3ICs1NCw3IEBA
IFBhdGg6On5QYXRoKCkKIH0KIAogUGF0aDo6UGF0aChjb25zdCBQYXRoJiBvdGhlcikKLSAgICA6
IG1fcGF0aChuZXcgQlJlZ2lvbigqb3RoZXIucGxhdGZvcm1QYXRoKCkpKQorICAgIDogbV9wYXRo
KG5ldyBCU2hhcGUoKm90aGVyLnBsYXRmb3JtUGF0aCgpKSkKIHsKIH0KIApAQCAtNjcsMjggKzcz
LDEyNSBAQCBib29sIFBhdGg6Omhhc0N1cnJlbnRQb2ludCgpIGNvbnN0CiAKIGJvb2wgUGF0aDo6
Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1fcGF0aC0+Q29udGFpbnMocG9pbnQpOworICAgIC8vIFRPRE86IFRoaXMg
aXMgcHJvYmFibHkgdG9vIGV4cGVuc2l2ZS4gVXNlIG9uZSBpbnN0YW5jZSBvZiBhIHNjcmF0Y2gK
KyAgICAvLyBpbWFnZS4KKyAgICBCQml0bWFwIGJpdG1hcChCUmVjdCgwLCAwLCAwLCAwKSwKKyAg
ICAgICAgQl9CSVRNQVBfQ0xFQVJfVE9fV0hJVEUgfCBCX0JJVE1BUF9BQ0NFUFRTX1ZJRVdTLCBC
X1JHQjMyKTsKKyAgICBCVmlldyB2aWV3KEJSZWN0KDAsIDAsIDAsIDApLCAiIiwgMCwgMCk7Cisg
ICAgYml0bWFwLkxvY2soKTsKKyAgICBiaXRtYXAuQWRkQ2hpbGQoJnZpZXcpOworICAgIC8vIEN1
cnJlbnQgcGVuIGxvY2F0aW9uIGlzIHVzZWQgYXMgb3JpZ2luIGZvciB0aGUgc2hhcGUuCisgICAg
dmlldy5Nb3ZlUGVuVG8oLXBvaW50LngoKSwgLXBvaW50LnkoKSk7CisgICAgLy8gVE9ETzogSGFu
ZGxlIFdpbmRSdWxlLi4uIChuZWVkcyBzdXBwb3J0IGluIEJWaWV3LCB0aGUgYmFja2VuZCBhbHJl
YWR5CisgICAgLy8gc3VwcG9ydCBpdC4pCisgICAgdmlldy5GaWxsU2hhcGUobV9wYXRoKTsKKyAg
ICB2aWV3LlN5bmMoKTsKKworICAgIHVpbnQ4KiBiaXRzID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OCo+KGJpdG1hcC5CaXRzKCkpOworICAgIGJvb2wgcmVzdWx0ID0gYml0c1swXSA8IDEyODsKKwor
ICAgIHZpZXcuUmVtb3ZlU2VsZigpOworICAgIGJpdG1hcC5VbmxvY2soKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitib29sIFBhdGg6OnN0cm9rZUNvbnRhaW5zKFN0cm9rZVN0eWxlQXBwbGll
ciogYXBwbGllciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAgQVNTRVJU
KGFwcGxpZXIpOworCisgICAgLy8gVE9ETzogVGhpcyBpcyBwcm9iYWJseSB0b28gZXhwZW5zaXZl
LiBVc2Ugb25lIGluc3RhbmNlIG9mIGEgc2NyYXRjaAorICAgIC8vIGltYWdlLCBzZWUgYWJvdmUu
CisgICAgLy8gVE9ETzogQ29kZSBkdXBsaWNhdGlvbiBhYm92ZS4KKyAgICBCQml0bWFwIGJpdG1h
cChCUmVjdCgwLCAwLCAwLCAwKSwKKyAgICAgICAgQl9CSVRNQVBfQ0xFQVJfVE9fV0hJVEUgfCBC
X0JJVE1BUF9BQ0NFUFRTX1ZJRVdTLCBCX1JHQjMyKTsKKyAgICBCVmlldyB2aWV3KEJSZWN0KDAs
IDAsIDAsIDApLCAiIiwgMCwgMCk7CisgICAgYml0bWFwLkxvY2soKTsKKyAgICBiaXRtYXAuQWRk
Q2hpbGQoJnZpZXcpOworICAgIC8vIEN1cnJlbnQgcGVuIGxvY2F0aW9uIGlzIHVzZWQgYXMgb3Jp
Z2luIGZvciB0aGUgc2hhcGUuCisgICAgdmlldy5Nb3ZlUGVuVG8oLXBvaW50LngoKSwgLXBvaW50
LnkoKSk7CisgICAgLy8gVE9ETzogSGFuZGxlIFdpbmRSdWxlLi4uIChuZWVkcyBzdXBwb3J0IGlu
IEJWaWV3LCB0aGUgYmFja2VuZCBhbHJlYWR5CisgICAgLy8gc3VwcG9ydCBpdC4pCisgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoJnZpZXcpOworICAgIGFwcGxpZXItPnN0cm9rZVN0eWxlKCZj
b250ZXh0KTsKKyAgICAKKyAgICB2aWV3LlN0cm9rZVNoYXBlKG1fcGF0aCk7CisgICAgdmlldy5T
eW5jKCk7CisKKyAgICB1aW50OCogYml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihiaXRt
YXAuQml0cygpKTsKKyAgICBib29sIHJlc3VsdCA9IGJpdHNbMF0gPCAxMjg7CisKKyAgICB2aWV3
LlJlbW92ZVNlbGYoKTsKKyAgICBiaXRtYXAuVW5sb2NrKCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAogdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRlcmF0b3IgYWxsb3dzIHVzIHRvIG1v
ZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBjbGFzcyBUcmFuc2xhdGVJdGVyYXRv
ciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBUcmFuc2xh
dGVJdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBGbG9hdFNpemUmIHNpemUpCisgICAgICAg
ICAgICA6IG1fc2hhcGUoc2hhcGUpCisgICAgICAgICAgICAsIG1fc2l6ZShzaXplKQorICAgICAg
ICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQ
b2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHBvaW50LT54ICs9IG1fc2l6ZS53
aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2
aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVMaW5lVG8oaW50MzIgbGluZUNvdW50LCBCUG9pbnQqIGxp
bmVQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChsaW5lQ291bnQtLSkgeworICAg
ICAgICAgICAgICAgIGxpbmVQdHMtPnggKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICAg
ICAgbGluZVB0cy0+eSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgbGluZVB0
cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0K
KworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJD
b3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChi
ZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdLnggKz0gbV9zaXpl
LndpZHRoKCk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzWzBdLnkgKz0gbV9zaXplLmhlaWdo
dCgpOworICAgICAgICAgICAgICAgIGJlemllclB0c1sxXS54ICs9IG1fc2l6ZS53aWR0aCgpOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1sxXS55ICs9IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAg
ICAgICAgICAgICBiZXppZXJQdHNbMl0ueCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMl0ueSArPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAg
YmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgRmxvYXRTaXplJiBt
X3NpemU7CisgICAgfSB0cmFuc2xhdGVJdGVyYXRvcihtX3BhdGgsIHNpemUpOworCisgICAgdHJh
bnNsYXRlSXRlcmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3QgUGF0aDo6Ym91
bmRpbmdSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9wYXRoLT5GcmFtZSgpOworICAgIHJl
dHVybiBtX3BhdGgtPkJvdW5kcygpOwogfQogCiB2b2lkIFBhdGg6Om1vdmVUbyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCkKIHsKLSAgICAvLyBGSVhNRTogVXNlIE9mZnNldEJ5PwotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgQlJlY3QgYm91bmRzID0gbV9wYXRoLT5Cb3VuZHMoKTsKKyAgICB0
cmFuc2xhdGUoRmxvYXRTaXplKHBvaW50LngoKSAtIGJvdW5kcy5sZWZ0LCBwb2ludC55KCkgLSBi
b3VuZHMudG9wKSk7CiB9CiAKIHZvaWQgUGF0aDo6YWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQm
IHApCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhwKTsKIH0K
IAogdm9pZCBQYXRoOjphZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjcCwgY29uc3Qg
RmxvYXRQb2ludCYgcCkKQEAgLTk4LDcgKzIwMSwxMSBAQCB2b2lkIFBhdGg6OmFkZFF1YWRDdXJ2
ZVRvKGNvbnN0IEZsb2F0UG9pCiAKIHZvaWQgUGF0aDo6YWRkQmV6aWVyQ3VydmVUbyhjb25zdCBG
bG9hdFBvaW50JiBjcDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNwMiwgY29uc3QgRmxvYXRQb2ludCYg
cCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJQb2ludCBwb2ludHNbM107CisgICAg
cG9pbnRzWzBdID0gY3AxOworICAgIHBvaW50c1sxXSA9IGNwMjsKKyAgICBwb2ludHNbMl0gPSBw
OworICAgIG1fcGF0aC0+QmV6aWVyVG8ocG9pbnRzKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmNU
byhjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGZsb2F0IHJhZGl1
cykKQEAgLTEwOCw3ICsyMTUsNyBAQCB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9p
bnQmIHAxCiAKIHZvaWQgUGF0aDo6Y2xvc2VTdWJwYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIG1fcGF0aC0+Q2xvc2UoKTsKIH0KIAogdm9pZCBQYXRoOjphZGRBcmMoY29uc3Qg
RmxvYXRQb2ludCYgcCwgZmxvYXQgciwgZmxvYXQgc2FyLCBmbG9hdCBlYXIsIGJvb2wgYW50aWNs
b2Nrd2lzZSkKQEAgLTExOCw3ICsyMjUsMTIgQEAgdm9pZCBQYXRoOjphZGRBcmMoY29uc3QgRmxv
YXRQb2ludCYgcCwgZgogCiB2b2lkIFBhdGg6OmFkZFJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQog
ewotICAgIG1fcGF0aC0+SW5jbHVkZShyKTsKKyAgICBtX3BhdGgtPkNsb3NlKCk7CisgICAgbV9w
YXRoLT5Nb3ZlVG8oQlBvaW50KHIueCgpLCByLnkoKSkpOworICAgIG1fcGF0aC0+TGluZVRvKEJQ
b2ludChyLngoKSArIHIud2lkdGgoKSwgci55KCkpKTsKKyAgICBtX3BhdGgtPkxpbmVUbyhCUG9p
bnQoci54KCkgKyByLndpZHRoKCksIHIueSgpICsgci5oZWlnaHQoKSkpOworICAgIG1fcGF0aC0+
TGluZVRvKEJQb2ludChyLngoKSwgci55KCkgKyByLmhlaWdodCgpKSk7CisgICAgbV9wYXRoLT5D
bG9zZSgpOwogfQogCiB2b2lkIFBhdGg6OmFkZEVsbGlwc2UoY29uc3QgRmxvYXRSZWN0JiByKQpA
QCAtMTI4LDEyICsyNDAsMTIgQEAgdm9pZCBQYXRoOjphZGRFbGxpcHNlKGNvbnN0IEZsb2F0UmVj
dCYgcgogCiB2b2lkIFBhdGg6OmNsZWFyKCkKIHsKLSAgICBtX3BhdGgtPk1ha2VFbXB0eSgpOwor
ICAgIG1fcGF0aC0+Q2xlYXIoKTsKIH0KIAogYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gIW1fcGF0aC0+RnJhbWUoKS5Jc1ZhbGlkKCk7CisgICAgcmV0dXJuICFtX3Bh
dGgtPkJvdW5kcygpLklzVmFsaWQoKTsKIH0KIAogU3RyaW5nIFBhdGg6OmRlYnVnU3RyaW5nKCkg
Y29uc3QKQEAgLTE0OSwxOCArMjYxLDEwNiBAQCB2b2lkIFBhdGg6OmFwcGx5KHZvaWQqIGluZm8s
IFBhdGhBcHBsaWVyCiAKIHZvaWQgUGF0aDo6dHJhbnNmb3JtKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gQlNoYXBlSXRl
cmF0b3IgYWxsb3dzIHVzIHRvIG1vZGlmeSB0aGUgcGF0aCBkYXRhICJpbiBwbGFjZSIKKyAgICBj
bGFzcyBUcmFuc2Zvcm1JdGVyYXRvciA6IHB1YmxpYyBCU2hhcGVJdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBUcmFuc2Zvcm1JdGVyYXRvcihCU2hhcGUqIHNoYXBlLCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDogbV9zaGFwZShzaGFwZSkKKyAg
ICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAgICAgICB7CisgICAgICAgIH0K
KyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRvKEJQb2ludCogcG9pbnQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KCpwb2lu
dCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1
YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291bnQsIEJQb2ludCogbGluZVB0
cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVDb3VudC0tKSB7CisgICAgICAg
ICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2ludCgqbGluZVB0cyk7CisgICAg
ICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0YXR1c190IEl0ZXJhdGVCZXpp
ZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQdHMpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAgICAgICAgICAgICAgYmV6aWVy
UHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRzWzBdKTsKKyAgICAgICAgICAg
ICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2ludChiZXppZXJQdHNbMV0pOwor
ICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNmb3JtLm1hcFBvaW50KGJlemll
clB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9IDM7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwg
c3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEJf
T0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEJTaGFwZSogbV9zaGFwZTsK
KyAgICAgICAgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBtX3RyYW5zZm9ybTsKKyAgICB9IHRyYW5z
Zm9ybUl0ZXJhdG9yKG1fcGF0aCwgdHJhbnNmb3JtKTsKKworICAgIHRyYW5zZm9ybUl0ZXJhdG9y
Lkl0ZXJhdGUobV9wYXRoKTsKIH0KIAogdm9pZCBQYXRoOjp0cmFuc2Zvcm0oY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIEJTaGFwZUl0ZXJhdG9yIGFsbG93cyB1cyB0byBtb2RpZnkgdGhlIHBhdGggZGF0YSAiaW4g
cGxhY2UiCisgICAgY2xhc3MgVHJhbnNmb3JtSXRlcmF0b3IgOiBwdWJsaWMgQlNoYXBlSXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgVHJhbnNmb3JtSXRlcmF0b3IoQlNoYXBlKiBzaGFw
ZSwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKKyAgICAgICAgICAgIDog
bV9zaGFwZShzaGFwZSkKKyAgICAgICAgICAgICwgbV90cmFuc2Zvcm0odHJhbnNmb3JtKQorICAg
ICAgICB7CisgICAgICAgIH0KKyAgICAgICAgdmlydHVhbCBzdGF0dXNfdCBJdGVyYXRlTW92ZVRv
KEJQb2ludCogcG9pbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpwb2ludCA9IG1fdHJhbnNm
b3JtLm1hcFBvaW50KCpwb2ludCk7CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAg
fQorCisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUxpbmVUbyhpbnQzMiBsaW5lQ291
bnQsIEJQb2ludCogbGluZVB0cykKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGxpbmVD
b3VudC0tKSB7CisgICAgICAgICAgICAgICAgKmxpbmVQdHMgPSBtX3RyYW5zZm9ybS5tYXBQb2lu
dCgqbGluZVB0cyk7CisgICAgICAgICAgICAgICAgbGluZVB0cysrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHN0
YXR1c190IEl0ZXJhdGVCZXppZXJUbyhpbnQzMiBiZXppZXJDb3VudCwgQlBvaW50KiBiZXppZXJQ
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChiZXppZXJDb3VudC0tKSB7CisgICAg
ICAgICAgICAgICAgYmV6aWVyUHRzWzBdID0gbV90cmFuc2Zvcm0ubWFwUG9pbnQoYmV6aWVyUHRz
WzBdKTsKKyAgICAgICAgICAgICAgICBiZXppZXJQdHNbMV0gPSBtX3RyYW5zZm9ybS5tYXBQb2lu
dChiZXppZXJQdHNbMV0pOworICAgICAgICAgICAgICAgIGJlemllclB0c1syXSA9IG1fdHJhbnNm
b3JtLm1hcFBvaW50KGJlemllclB0c1syXSk7CisgICAgICAgICAgICAgICAgYmV6aWVyUHRzICs9
IDM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gQl9PSzsKKyAgICAgICAgfQor
CisgICAgICAgIHZpcnR1YWwgc3RhdHVzX3QgSXRlcmF0ZUNsb3NlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEJfT0s7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IEJTaGFwZSogbV9zaGFwZTsKKyAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1f
dHJhbnNmb3JtOworICAgIH0gdHJhbnNmb3JtSXRlcmF0b3IobV9wYXRoLCB0cmFuc2Zvcm0pOwor
CisgICAgdHJhbnNmb3JtSXRlcmF0b3IuSXRlcmF0ZShtX3BhdGgpOwogfQogCiBGbG9hdFJlY3Qg
UGF0aDo6c3Ryb2tlQm91bmRpbmdSZWN0KFN0cm9rZVN0eWxlQXBwbGllciogYXBwbGllcikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKyAgICByZXR1
cm4gbV9wYXRoLT5Cb3VuZHMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48114</attachid>
            <date>2010-02-04 01:05:55 -0800</date>
            <delta_ts>2010-02-08 11:00:59 -0800</delta_ts>
            <desc> Various fixes to mouse/wheel/keyboard event propagation on Haiku</desc>
            <filename>events.diff</filename>
            <type>text/plain</type>
            <size>8158</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjMgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFZhcmlvdXMgZml4ZXMgdG8gbW91c2Uvd2hlZWwva2V5Ym9hcmQgZXZlbnQgcHJvcGFnYXRpb24g
b24gSGFpa3UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM0NTI3CisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IHBhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwOiBGaXggdGhlIGJ1aWxkIGJ5IG5vdCBp
bmNsdWRpbmcgUGxhdGZvcm1TY3JvbGxCYXIuaAorICAgICAgICAoV2ViQ29yZTo6aXNLZXlib2Fy
ZE9wdGlvblRhYik6IFVzZSBjb3JyZWN0IGNvZGUgZm9yIFRhYi9CYWNrc3BhY2Uga2V5CisgICAg
ICAgICogcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1LZXlib2FyZEV2ZW50SGFpa3UuY3BwOiBJbXBy
b3ZlZCB0aGUgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgKFdlYkNvcmU6OmtleUlkZW50aWZpZXJG
b3JIYWlrdUtleUNvZGUpOiAKKyAgICAgICAgKFdlYkNvcmU6OndpbmRvd3NLZXlDb2RlRm9yS2V5
RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50OjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtTW91c2VF
dmVudEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudDo6UGxh
dGZvcm1Nb3VzZUV2ZW50KTogRXh0cmFjdCBjb3JyZWN0IGNvb3JkaW5hdGVzLCBmaWxsIHRoZSBt
b2RpZmllciBmbGFncywgZ2VuZXJhdGUgYSBjb3JyZWN0IHRpbWVzdGFtcCwgZml4IHdhcm5pbmdz
LgorICAgICAgICAqIHBsYXRmb3JtL2hhaWt1L1BsYXRmb3JtV2hlZWxFdmVudEhhaWt1LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50
KTogRmlsbCB0aGUgbW9kaWZpZXIgZmxhZ3MsIGdlbmVyYXRlIGEgY29ycmVjdCB0aW1lc3RhbXAs
IGZpeCB3YXJuaW5ncy4KKwogMjAxMC0wMi0wMyAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5A
YXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgRGVidWdfQWxsIGJ1aWxkIGZpeC4KSW5kZXg6
IFdlYkNvcmUvcGFnZS9oYWlrdS9FdmVudEhhbmRsZXJIYWlrdS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wYWdlL2hhaWt1L0V2ZW50SGFuZGxlckhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUp
CisrKyBXZWJDb3JlL3BhZ2UvaGFpa3UvRXZlbnRIYW5kbGVySGFpa3UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TY3JvbGxCYXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIK
ICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKIApAQCAtNTYsNyArNTUsNyBAQCBzdGF0aWMgYm9v
bCBpc0tleWJvYXJkT3B0aW9uVGFiKEtleWJvYXJkCiAgICAgICAgICYmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5rZXlkb3duRXZlbnQKICAgICAgICAgICAgIHx8IGV2ZW50LT50eXBl
KCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpCiAgICAgICAgICYmIGV2ZW50LT5hbHRL
ZXkoKQotICAgICAgICAmJiBldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMDAwOSI7Cisg
ICAgICAgICYmIGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSI7CiB9CiAKIGJvb2wg
RXZlbnRIYW5kbGVyOjppbnZlcnRTZW5zZU9mVGFic1RvTGlua3MoS2V5Ym9hcmRFdmVudCogZXZl
bnQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRF
dmVudEhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L1BsYXRm
b3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2hhaWt1L1BsYXRmb3JtS2V5Ym9hcmRFdmVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5n
b29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwOCBBbmRyZWEg
QW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBT
dGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgpAQCAtMjksMTEgKzMwLDEzIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAj
aW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSA8SW50ZXJmYWNlRGVmcy5oPgogI2luY2x1ZGUgPE1lc3NhZ2UuaD4KICNpbmNsdWRl
IDxTdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTEwNSw3ICsxMDgsNyBAQCBzdGF0aWMgU3RyaW5nIGtleUlkZW50aWZpZXJGb3JIYWlrdUtl
eUNvCiAgICAgICAgIHJldHVybiAiVSswMDA5IjsKICAgICB9CiAKLSAgICByZXR1cm4gU3RyaW5n
Ojpmb3JtYXQoIlUrJTA0WCIsIHRvQVNDSUlVcHBlcihrZXlDb2RlKSk7CisgICAgcmV0dXJuIFN0
cmluZzo6Zm9ybWF0KCJVKyUwNFgiLCB0b0FTQ0lJVXBwZXIoc2luZ2xlQnl0ZSkpOwogfQogCiBz
dGF0aWMgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoY2hhciBzaW5nbGVCeXRlKQpAQCAt
MTQxLDMyICsxNDQsMzQgQEAgc3RhdGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGNo
YQogICAgICAgICByZXR1cm4gVktfSU5TRVJUOyAvLyAoMkQpIElOUyBrZXkKICAgICBjYXNlIEJf
REVMRVRFOgogICAgICAgICByZXR1cm4gVktfREVMRVRFOyAvLyAoMkUpIERFTCBrZXkKLSAgICBj
YXNlIDB4MmU6CisKICAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIHNpbmdsZUJ5dGU7CiAgICAgfQogfQogCiBQbGF0Zm9ybUtleWJvYXJkRXZlbnQ6OlBsYXRm
b3JtS2V5Ym9hcmRFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKICAgICA6IG1fYXV0b1JlcGVhdChm
YWxzZSkKKyAgICAsIG1faXNLZXlwYWQoZmFsc2UpCisgICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQog
ICAgICwgbV9jdHJsS2V5KGZhbHNlKQogICAgICwgbV9hbHRLZXkoZmFsc2UpCiAgICAgLCBtX21l
dGFLZXkoZmFsc2UpCi0gICAgLCBtX2lzS2V5cGFkKGZhbHNlKQotICAgICwgbV9zaGlmdEtleShm
YWxzZSkKIHsKICAgICBCU3RyaW5nIGJ5dGVzID0gbWVzc2FnZS0+RmluZFN0cmluZygiYnl0ZXMi
KTsKIAorICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgPSBtZXNzYWdlLT5GaW5kSW50MzIoImtl
eSIpOworCiAgICAgbV90ZXh0ID0gU3RyaW5nOjpmcm9tVVRGOChieXRlcy5TdHJpbmcoKSwgYnl0
ZXMuTGVuZ3RoKCkpOwogICAgIG1fdW5tb2RpZmllZFRleHQgPSBTdHJpbmcoYnl0ZXMuU3RyaW5n
KCksIGJ5dGVzLkxlbmd0aCgpKTsKLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVy
Rm9ySGFpa3VLZXlDb2RlKGJ5dGVzLkJ5dGVBdCgwKSwgbWVzc2FnZS0+RmluZEludDMyKCJrZXki
KSk7CisgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvckhhaWt1S2V5Q29kZShi
eXRlcy5CeXRlQXQoMCksIG1fbmF0aXZlVmlydHVhbEtleUNvZGUpOworCisgICAgbV93aW5kb3dz
VmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5dGVBdCgw
KSk7CiAKICAgICBpZiAobWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9VUCkKICAgICAgICAgbV90eXBl
ID0gS2V5VXA7CiAgICAgZWxzZSBpZiAobWVzc2FnZS0+d2hhdCA9PSBCX0tFWV9ET1dOKQogICAg
ICAgICBtX3R5cGUgPSBLZXlEb3duOwotCi0gICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3
aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGJ5dGVzLkJ5dGVBdCgwKSk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1LZXlib2FyZEV2ZW50OjpkaXNhbWJpZ3VhdGVLZXlEb3duRXZlbnQoVHlwZSB0eXBlLCBi
b29sKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9QbGF0Zm9ybU1vdXNl
RXZlbnRIYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlr
dS9QbGF0Zm9ybU1vdXNlRXZlbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29v
ZEBnbWFpbC5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5t
YXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxz
dXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0y
OSwyMSArMzAsMTcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1v
dXNlRXZlbnQuaCIKIAorI2luY2x1ZGUgPEludGVyZmFjZURlZnMuaD4KICNpbmNsdWRlIDxNZXNz
YWdlLmg+Ci0jaW5jbHVkZSA8U3VwcG9ydERlZnMuaD4KIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIFBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdl
KiBtZXNzYWdlKQotICAgIDogbV90aW1lc3RhbXAobWVzc2FnZS0+RmluZEludDY0KCJ3aGVuIikp
Ci0gICAgLCBtX3Bvc2l0aW9uKEludFBvaW50KG1lc3NhZ2UtPkZpbmRQb2ludCgid2hlcmUiKSkp
Ci0gICAgLCBtX2dsb2JhbFBvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgiZ2xvYmFsUG9zaXRp
b24iKSkKLSAgICAsIG1fc2hpZnRLZXkoZmFsc2UpCi0gICAgLCBtX2N0cmxLZXkoZmFsc2UpCi0g
ICAgLCBtX2FsdEtleShmYWxzZSkKLSAgICAsIG1fbWV0YUtleShmYWxzZSkKKyAgICA6IG1fcG9z
aXRpb24obWVzc2FnZS0+RmluZFBvaW50KCJiZTp2aWV3X3doZXJlIikpCisgICAgLCBtX2dsb2Jh
bFBvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgic2NyZWVuX3doZXJlIikpCiAgICAgLCBtX2Ns
aWNrQ291bnQobWVzc2FnZS0+RmluZEludDMyKCJjbGlja3MiKSkKKyAgICAsIG1fdGltZXN0YW1w
KG1lc3NhZ2UtPkZpbmRJbnQ2NCgid2hlbiIpIC8gMTAwMDAwMC4wKQogewogICAgIGludDMyIGJ1
dHRvbnMgPSBtZXNzYWdlLT5GaW5kSW50MzIoImJ1dHRvbnMiKTsKICAgICBzd2l0Y2ggKGJ1dHRv
bnMpIHsKQEAgLTc2LDYgKzczLDEyIEBAIFBsYXRmb3JtTW91c2VFdmVudDo6UGxhdGZvcm1Nb3Vz
ZUV2ZW50KGMKICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7CiAgICAgICAg
IGJyZWFrOwogICAgIH07CisKKyAgICBpbnQzMiBtb2RpZmllcnMgPSBtZXNzYWdlLT5GaW5kSW50
MzIoIm1vZGlmaWVycyIpOworICAgIG1fc2hpZnRLZXkgPSBtb2RpZmllcnMgJiBCX1NISUZUX0tF
WTsKKyAgICBtX2N0cmxLZXkgPSBtb2RpZmllcnMgJiBCX0NPTlRST0xfS0VZOworICAgIG1fYWx0
S2V5ID0gbW9kaWZpZXJzICYgQl9DT01NQU5EX0tFWTsKKyAgICBtX21ldGFLZXkgPSBtb2RpZmll
cnMgJiBCX09QVElPTl9LRVk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVlbEV2ZW50SGFpa3UuY3Bw
CShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvUGxhdGZvcm1XaGVl
bEV2ZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgog
ICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214
LmRlPgogICoKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMzEsNiArMzIsNyBAQAog
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKKyNpbmNsdWRlIDxJbnRlcmZhY2VEZWZzLmg+CiAj
aW5jbHVkZSA8TWVzc2FnZS5oPgogI2luY2x1ZGUgPFBvaW50Lmg+CiAKQEAgLTM4LDI0ICs0MCwy
MyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQbGF0Zm9ybVdoZWVsRXZlbnQ6OlBsYXRmb3Jt
V2hlZWxFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKLSAgICA6IG1fZ3JhbnVsYXJpdHkoU2Nyb2xs
QnlQaXhlbFdoZWVsRXZlbnQpCi0gICAgLCBtX3NoaWZ0S2V5KGZhbHNlKQotICAgICwgbV9jdHJs
S2V5KGZhbHNlKQotICAgICwgbV9hbHRLZXkoZmFsc2UpCi0gICAgLCBtX21ldGFLZXkoZmFsc2Up
CisgICAgOiBtX3Bvc2l0aW9uKG1lc3NhZ2UtPkZpbmRQb2ludCgiYmU6dmlld193aGVyZSIpKQor
ICAgICwgbV9nbG9iYWxQb3NpdGlvbihtZXNzYWdlLT5GaW5kUG9pbnQoInNjcmVlbl93aGVyZSIp
KQorICAgICwgbV9kZWx0YVgobWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVlbF9kZWx0YV94Iikp
CisgICAgLCBtX2RlbHRhWShtZXNzYWdlLT5GaW5kRmxvYXQoImJlOndoZWVsX2RlbHRhX3kiKSkK
KyAgICAsIG1fd2hlZWxUaWNrc1gobV9kZWx0YVgpCisgICAgLCBtX3doZWVsVGlja3NZKG1fZGVs
dGFZKQorICAgICwgbV9ncmFudWxhcml0eShTY3JvbGxCeVBpeGVsV2hlZWxFdmVudCkKICAgICAs
IG1faXNBY2NlcHRlZChmYWxzZSkKIHsKLSAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQobWVzc2Fn
ZS0+RmluZFBvaW50KCJwb3NpdGlvbiIpKTsKLSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9p
bnQobWVzc2FnZS0+RmluZFBvaW50KCJnbG9iYWxfcG9zaXRpb24iKSk7Ci0KLSAgICBtX2RlbHRh
WCA9IG1lc3NhZ2UtPkZpbmRGbG9hdCgiYmU6d2hlZWxfZGVsdGFfeCIpOwotICAgIG1fZGVsdGFZ
ID0gbWVzc2FnZS0+RmluZEZsb2F0KCJiZTp3aGVlbF9kZWx0YV95Iik7Ci0KLSAgICBtX3doZWVs
VGlja3NYID0gbV9kZWx0YVg7Ci0gICAgbV93aGVlbFRpY2tzWSA9IG1fZGVsdGFZOwotCiAgICAg
bV9kZWx0YVggKj0gLWNTY3JvbGxiYXJQaXhlbHNQZXJMaW5lU3RlcDsKICAgICBtX2RlbHRhWSAq
PSAtY1Njcm9sbGJhclBpeGVsc1BlckxpbmVTdGVwOworCisgICAgaW50MzIgbW9kaWZpZXJzID0g
bWVzc2FnZS0+RmluZEludDMyKCJtb2RpZmllcnMiKTsKKyAgICBtX3NoaWZ0S2V5ID0gbW9kaWZp
ZXJzICYgQl9TSElGVF9LRVk7CisgICAgbV9jdHJsS2V5ID0gbW9kaWZpZXJzICYgQl9DT05UUk9M
X0tFWTsKKyAgICBtX2FsdEtleSA9IG1vZGlmaWVycyAmIEJfQ09NTUFORF9LRVk7CisgICAgbV9t
ZXRhS2V5ID0gbW9kaWZpZXJzICYgQl9PUFRJT05fS0VZOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48116</attachid>
            <date>2010-02-04 01:19:30 -0800</date>
            <delta_ts>2010-02-08 11:01:07 -0800</delta_ts>
            <desc>Fixes to rect conversion and image rendering on Haiku</desc>
            <filename>rects.diff</filename>
            <type>text/plain</type>
            <size>8751</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzUgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeGVzIHRvIHJlY3QgY29udmVyc2lvbiBhbmQgaW1hZ2UgcmVuZGVyaW5nIG9uIEhhaWt1Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDUyNworCisg
ICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgVGhlIGNoYW5nZXMg
dG8gdGhlIHJlY3QgY29udmVyc2lvbnMgYXJlIGluZGVlZCBjb3JyZWN0LiBJbiBIYWlrdSAodG8g
c3RheQorICAgICAgICBjb21wYXRpYmx5IHdpdGggQmVPUyksIGEgQlJlY3Qgc3BlY2lmaWVzIHRo
ZSBsZWZ0L3RvcCBhbmQgYm90dG9tL3JpZ2h0IHBpeGVsCisgICAgICAgICppbmRpY2VzKiwgZXZl
biB0aG91Z2ggdGhlIHZhbHVlcyBhcmUgZmxvYXRpbmcgcG9pbnQuIFNvIGEgcmVjdGFuZ2xlIGNv
dmVyaW5nCisgICAgICAgIGp1c3Qgb25lIHBpeGVsIHdvdWxkIGJlIHNwZWNpZmllZCBhcyBCUmVj
dCgwLCAwLCAwLCAwKS4gSW4gV2ViQ29yZSBhbmQgb3RoZXIKKyAgICAgICAgZnJhbWUgd29ya3Ms
IHN1Y2ggcmVjdGFuZ2xlcyB3b3VsZCBiZSBleHByZXNzZWQgYXMgMCwgMCwgMSwgMS4gSW4gV2Vi
Q29yZSwgdGhlCisgICAgICAgIHdpZHRoIGFuZCBoZWlnaHQgb2YgcmVjdGFuZ2xlcyByZWZlciB0
byB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwaXhlbHMsIHdoaWxlIG9uCisgICAgICAgIEhhaWt1LCBh
IG9uZSBwaXhlbCByZWN0IGhhcyBpbmRlZWQgYSB3aWR0aCBhbmQgaGVpZ2h0IG9mIDAsIGFzIGNv
bmZ1c2luZyBhcworICAgICAgICB0aGF0IG1heSBiZS4KKworICAgICAgICBUaGUgcGFydCBvZiB0
aGUgcGF0Y2ggdGhhdCBhZmZlY3RzCisgICAgICAgIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFpa3UvSW1hZ2VIYWlrdS5jcHAgYWxzbyBpbXBsZW1lbnRzIHRoZSBkcmF3aW5nCisgICAgICAg
IG1ldGhvZHMgbW9yZSBjb3JyZWN0bHkuIEltYWdlIG9ic2VydmVycyBhcmUgbm90aWZpZWQsIGFu
ZCBwYXR0ZXJuIGRyYXdpbmcgdGFrZXMKKyAgICAgICAgdGhlICJwaGFzZSIgaW50byBhY2NvdW50
IHdoaWNoIG1ha2VzIHNjcm9sbGVkIGJhY2tncm91bmRzIHJlbmRlciBjb3JyZWN0bHkuCisgICAg
ICAgIFRyYW5zZm9ybWF0aW9ucyBhcmUgc3RpbGwgbm90IHN1cHBvcnRlZCwgc2luY2UgdGhlIEhh
aWt1IGRyYXdpbmcgYmFja2VuZCBpdHNlbGYKKyAgICAgICAgZG9lcyBub3QgeWV0IHN1cHBvcnQg
dGhlbS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0Zsb2F0UmVjdEhhaWt1
LmNwcDogRml4ZWQgY29udmVyc2lvbgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1
L0ltYWdlSGFpa3UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOiBG
aXhlZCBwbGFjZW1lbnQsIG5vdGlmeSBvYnNlcnZlcnMKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpkcmF3UGF0dGVybik6IEltcGxlbWVudGVkIHVzaW5nICJwaGFzZSIgdG8gZml4IHNjcm9sbGlu
Zywgbm90aWZ5IG9ic2VydmVycworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0lu
dFJlY3RIYWlrdS5jcHA6IEZpeGVkIGNvbnZlcnNpb24KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9oYWlrdS9JbWFnZURlY29kZXJIYWlrdS5jcHA6IEZpeGVkIGNvbnZlcnNpb24K
KwogMjAxMC0wMi0wMyAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdpbmRvd3MgRGVidWdfQWxsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3UuY3BwCShyZXZpc2lvbiA1
NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvRmxvYXRSZWN0SGFpa3Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0
IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNSwxMyArMzYsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBGbG9hdFJlY3Q6OkZsb2F0UmVjdChjb25zdCBCUmVjdCYgcmVjdCkKICAgICA6IG1f
bG9jYXRpb24ocmVjdC5MZWZ0VG9wKCkpCi0gICAgLCBtX3NpemUocmVjdC5XaWR0aCgpLCByZWN0
LkhlaWdodCgpKQorICAgICwgbV9zaXplKHJlY3QuV2lkdGgoKSArIDEsIHJlY3QuSGVpZ2h0KCkg
KyAxKQogewogfQogCiBGbG9hdFJlY3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsK
KyAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSAtIDEsIGhl
aWdodCgpIC0gMSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ltYWdlSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW1hZ2VIYWlrdS5jcHAJKHJldmlzaW9uIDU0
Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbWFnZUhhaWt1LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBTaW1v
biBIYXVzbWFubiA8aGF1c21hbm5Aa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFu
IExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4
IEFuZHJlYSBBbnphbmkgPGFuZHJlYS5hbnphbmlAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChD
KSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAgKgogICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCkBAIC0zNSw4ICszNiwxMCBAQAogI2luY2x1ZGUgIkJpdG1hcElt
YWdlLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCisjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8Qml0bWFwLmg+
CiAjaW5jbHVkZSA8Vmlldy5oPgpAQCAtMTA1LDM1ICsxMDgsNTkgQEAgdm9pZCBCaXRtYXBJbWFn
ZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogICAgIC8vIFRlc3QgdXNpbmcgZXhhbXBsZSBzaXRl
IGF0CiAgICAgLy8gaHR0cDovL3d3dy5tZXllcndlYi5jb20vZXJpYy9jc3MvZWRnZS9jb21wbGV4
c3BpcmFsL2RlbW8uaHRtbAogICAgIGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5n
TW9kZShCX09QX0FMUEhBKTsKLSAgICBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1h
cChpbWFnZSwgc3JjUmVjdCAmIGltYWdlLT5Cb3VuZHMoKSwgZHN0UmVjdCk7CisgICAgY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCktPkRyYXdCaXRtYXAoaW1hZ2UsIHNyY1JlY3QsIGRzdFJlY3QpOwog
ICAgIGN0eHQtPnJlc3RvcmUoKTsKKworICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAg
IGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1Bh
dHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGF0dGVyblRyYW5zZm9ybSwgY29uc3QgRmxv
YXRQb2ludCYgc3JjUG9pbnQsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QpCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9w
LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QpCiB7Ci0gICAgLy8gRklYTUU6IGZpbmlzaCB0aGlz
IHRvIHN1cHBvcnQgYWxzbyBwaGFzZWQgcG9zaXRpb24gKHNyY1BvaW50KQogICAgIHN0YXJ0QW5p
bWF0aW9uKCk7CiAKICAgICBCQml0bWFwKiBpbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7CiAgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPklzVmFsaWQoKSkgLy8gSWYgdGhlIGlt
YWdlIGhhc24ndCBmdWxseSBsb2FkZWQuCiAgICAgICAgIHJldHVybjsKIAotICAgIGZsb2F0IGN1
cnJlbnRXID0gMDsKLSAgICBmbG9hdCBjdXJyZW50SCA9IDA7CisgICAgLy8gRmlndXJlIG91dCBp
ZiB0aGUgaW1hZ2UgaGFzIGFueSBhbHBoYSB0cmFuc3BhcmVuY3ksIHdlIGNhbiB1c2UgZmFzdGVy
IGRyYXdpbmcgaWYgbm90CisgICAgYm9vbCBoYXNBbHBoYSA9IHRydWU7CisKKyAgICB1aW50OCog
Yml0cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDgqPihpbWFnZS0+Qml0cygpKTsKKyAgICB1aW50
MzIgd2lkdGggPSBpbWFnZS0+Qm91bmRzKCkuSW50ZWdlcldpZHRoKCkgKyAxOworICAgIHVpbnQz
MiBoZWlnaHQgPSBpbWFnZS0+Qm91bmRzKCkuSW50ZWdlckhlaWdodCgpICsgMTsKKyAgICB1aW50
MzIgYnByID0gaW1hZ2UtPkJ5dGVzUGVyUm93KCk7CisgICAgZm9yICh1aW50MzIgeSA9IDA7IHkg
PCBoZWlnaHQgJiYgIWhhc0FscGhhOyB5KyspIHsKKyAgICAgICAgdWludDgqIHAgPSBiaXRzOwor
ICAgICAgICBmb3IgKHVpbnQzMiB4ID0gMDsgeCA8IHdpZHRoICYmICFoYXNBbHBoYTsgeCsrKSB7
CisgICAgICAgICAgICBoYXNBbHBoYSA9IHBbM10gPCAyNTU7CisgICAgICAgICAgICBwICs9IDQ7
CisgICAgICAgIH0KKyAgICAgICAgYml0cyArPSBicHI7CisgICAgfQogCiAgICAgY29udGV4dC0+
c2F2ZSgpOwotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShC
X09QX0FMUEhBKTsKKyAgICBpZiAoaGFzQWxwaGEpCisgICAgICAgIGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0FMUEhBKTsKKyAgICBlbHNlCisgICAgICAg
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5TZXREcmF3aW5nTW9kZShCX09QX0NPUFkpOwog
ICAgIGNvbnRleHQtPmNsaXAoZW5jbG9zaW5nSW50UmVjdChkc3RSZWN0KSk7Ci0KLSAgICB3aGls
ZSAoY3VycmVudFcgPCBkc3RSZWN0LndpZHRoKCkpIHsKLSAgICAgICAgd2hpbGUgKGN1cnJlbnRI
IDwgZHN0UmVjdC5oZWlnaHQoKSkgewotICAgICAgICAgICAgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPkRyYXdCaXRtYXAoaW1hZ2UsIEJQb2ludChkc3RSZWN0LngoKSArIGN1cnJlbnRXLCBk
c3RSZWN0LnkoKSArIGN1cnJlbnRIKSk7Ci0gICAgICAgICAgICBjdXJyZW50SCArPSB0aWxlUmVj
dC5oZWlnaHQoKTsKKyAgICBmbG9hdCBjdXJyZW50VyA9IHBoYXNlLngoKTsKKyAgICBCUmVjdCBi
VGlsZVJlY3QodGlsZVJlY3QpOworICAgIHdoaWxlIChjdXJyZW50VyA8IGRzdFJlY3QueCgpICsg
ZHN0UmVjdC53aWR0aCgpKSB7CisgICAgICAgIGZsb2F0IGN1cnJlbnRIID0gcGhhc2UueSgpOwor
ICAgICAgICB3aGlsZSAoY3VycmVudEggPCBkc3RSZWN0LnkoKSArIGRzdFJlY3QuaGVpZ2h0KCkp
IHsKKyAgICAgICAgICAgIEJSZWN0IGJEc3RSZWN0KGN1cnJlbnRXLCBjdXJyZW50SCwgY3VycmVu
dFcgKyB3aWR0aCAtIDEsIGN1cnJlbnRIICsgaGVpZ2h0IC0gMSk7CisgICAgICAgICAgICBjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+RHJhd0JpdG1hcChpbWFnZSwgYlRpbGVSZWN0LCBiRHN0
UmVjdCk7CisgICAgICAgICAgICBjdXJyZW50SCArPSBoZWlnaHQ7CiAgICAgICAgIH0KLSAgICAg
ICAgY3VycmVudFcgKz0gdGlsZVJlY3Qud2lkdGgoKTsKLSAgICAgICAgY3VycmVudEggPSAwOwor
ICAgICAgICBjdXJyZW50VyArPSB3aWR0aDsKICAgICB9CiAgICAgY29udGV4dC0+cmVzdG9yZSgp
OworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5k
aWREcmF3KHRoaXMpOwogfQogCiB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3Io
KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9JbnRSZWN0SGFpa3UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvSW50UmVjdEhh
aWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0ludFJlY3RIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIEludFJlY3Q6OkludFJlY3QoY29uc3QgQlJlY3QmIHJlY3Qp
CiAgICAgOiBtX2xvY2F0aW9uKHJlY3QuTGVmdFRvcCgpKQotICAgICwgbV9zaXplKHJlY3QuSW50
ZWdlcldpZHRoKCksIHJlY3QuSW50ZWdlckhlaWdodCgpKQorICAgICwgbV9zaXplKHJlY3QuSW50
ZWdlcldpZHRoKCkgKyAxLCByZWN0LkludGVnZXJIZWlnaHQoKSArIDEpCiB7CiB9CiAKIEludFJl
Y3Q6Om9wZXJhdG9yIEJSZWN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gQlJlY3QoQlBvaW50KHgo
KSwgeSgpKSwgQlNpemUod2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICByZXR1cm4gQlJlY3QoQlBv
aW50KHgoKSwgeSgpKSwgQlNpemUod2lkdGgoKSAtIDEsIGhlaWdodCgpIC0gMSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdlRGVjb2RlckhhaWt1LmNwcAkocmV2aXNp
b24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2hhaWt1L0ltYWdl
RGVjb2RlckhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhhbiBBw59tdXMsIDxzdXBlcnN0aXBwaUBn
bXguZGU+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMzLDE5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTmF0aXZlSW1hZ2VQdHIgUkdCQTMyQnVmZmVyOjphc05l
d05hdGl2ZUltYWdlKCkgY29uc3QKIHsKLSAgICBCQml0bWFwKiBibXAgPSBuZXcgQkJpdG1hcChC
UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSksIEJfUkdCMzIpOwotICAgIGJtcC0+U2V0Qml0
cyhtX2J5dGVzLmRhdGEoKSwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCksIDAsIEJf
UkdCMzIpOworICAgIGludCBieXRlc1BlclJvdyA9IHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRh
KTsKKyAgICBCQml0bWFwKiBibXAgPSBuZXcgQkJpdG1hcChCUmVjdCgwLCAwLCB3aWR0aCgpIC0g
MSwgaGVpZ2h0KCkgLSAxKSwgMCwKKyAgICAgICAgQl9SR0JBMzIsIGJ5dGVzUGVyUm93KTsKKwor
ICAgIGNvbnN0IHVpbnQ4KiBzcmMgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4Kj4obV9i
eXRlcy5kYXRhKCkpOworICAgIHVpbnQ4KiBkc3QgPSByZWludGVycHJldF9jYXN0PHVpbnQ4Kj4o
Ym1wLT5CaXRzKCkpOworICAgIGludCBoID0gaGVpZ2h0KCk7CisgICAgZm9yIChpbnQgeSA9IDA7
IHkgPCBoOyB5KyspIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCBieXRlc1BlclJvdyk7Cisg
ICAgICAgIGRzdCArPSBieXRlc1BlclJvdzsKKyAgICAgICAgc3JjICs9IGJ5dGVzUGVyUm93Owor
ICAgIH0KKwogICAgIHJldHVybiBibXA7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48117</attachid>
            <date>2010-02-04 01:26:43 -0800</date>
            <delta_ts>2010-02-08 11:01:16 -0800</delta_ts>
            <desc>Implements homeDirectoryPath() and listDirectory() on the Haiku platform.</desc>
            <filename>filesystem.diff</filename>
            <type>text/plain</type>
            <size>2122</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEltcGxlbWVudGVkIGhvbWVEaXJlY3RvcnlQYXRoKCkgYW5kIGxpc3REaXJlY3RvcnkoKSBvbiB0
aGUgSGFpa3UgcGxhdGZvcm0uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zNDUyNworCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisK
KyAgICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aG9tZURpcmVjdG9yeVBhdGgpOiBJbXBsZW1lbnRlZAorICAgICAgICAoV2ViQ29y
ZTo6bGlzdERpcmVjdG9yeSk6IEltcGxlbWVudGVkCisKIDIwMTAtMDItMDMgIFN0ZXZlIEZhbGtl
bmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5kb3dzIERlYnVnX0FsbCBi
dWlsZCBmaXguCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVTeXN0ZW1IYWlrdS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlU3lzdGVtSGFpa3Uu
Y3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZVN5c3Rl
bUhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoK
ICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjksOSArMzAsMTQgQEAKICNpbmNsdWRl
ICJGaWxlU3lzdGVtLmgiCiAKICNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDxEaXJlY3RvcnkuaD4KKyNpbmNsdWRlIDxFbnRyeS5o
PgorI2luY2x1ZGUgPEZpbGUuaD4KKyNpbmNsdWRlIDxGaW5kRGlyZWN0b3J5Lmg+CisjaW5jbHVk
ZSA8UGF0aC5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQzLDggKzQ5LDExIEBAIENT
dHJpbmcgZmlsZVN5c3RlbVJlcHJlc2VudGF0aW9uKGNvbnN0IFMKIAogU3RyaW5nIGhvbWVEaXJl
Y3RvcnlQYXRoKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBCUGF0aCBwYXRoOworICAgIGlmIChmaW5kX2RpcmVjdG9yeShCX1VTRVJfRElSRUNU
T1JZLCAmcGF0aCkgIT0gQl9PSykKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgcmV0
dXJuIFN0cmluZyhwYXRoLlBhdGgoKSk7CiB9CiAKIENTdHJpbmcgb3BlblRlbXBvcmFyeUZpbGUo
Y29uc3QgY2hhciogcHJlZml4LCBQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKQEAgLTc0LDcg
KzgzLDEwIEBAIGJvb2wgdW5sb2FkTW9kdWxlKFBsYXRmb3JtTW9kdWxlKQogVmVjdG9yPFN0cmlu
Zz4gbGlzdERpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgZmlsdGVy
KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGVudHJpZXM7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBCRGlyZWN0b3J5IGRpcmVjdG9yeShwYXRoLnV0ZjgoKS5kYXRhKCkpOworICAgIGVudHJ5
X3JlZiByZWY7CisgICAgd2hpbGUgKGRpcmVjdG9yeS5HZXROZXh0UmVmKCZyZWYpID09IEJfT0sp
CisgICAgICAgIGVudHJpZXMuYXBwZW5kKHJlZi5uYW1lKTsgICAgICAgIAogICAgIHJldHVybiBl
bnRyaWVzOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48119</attachid>
            <date>2010-02-04 01:31:54 -0800</date>
            <delta_ts>2010-02-04 16:19:50 -0800</delta_ts>
            <desc>Separate patch to fix small coding style violations.</desc>
            <filename>codingstyle.diff</filename>
            <type>text/plain</type>
            <size>2861</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1pc2MgY29kaW5nIHN0eWxlIGZpeGVzIGluIEhhaWt1IHBvcnQgY29kZS4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NTI3CisKKyAgICAgICAgTm8g
dGVzdHMgbmVlZGVkLgorCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvQ29udGV4dE1lbnVJdGVt
SGFpa3UuY3BwOiBUcmFpbGluZyB3aGl0ZSBzcGFjZSwgTlVMTCAtPiAwCisgICAgICAgICogcGxh
dGZvcm0vaGFpa3UvRHJhZ0ltYWdlSGFpa3UuY3BwOiBUcmFpbGluZyB3aGl0ZSBzcGFjZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcDogU29ydGVkIGhlYWRl
cnMuCisgICAgICAgICogcGxhdGZvcm0vaGFpa3UvTG9jYWxpemVkU3RyaW5nc0hhaWt1LmNwcDog
TmVlZGVkIHRvIGluY2x1ZGUgTm90SW1wbGVtZW50ZWQuaAorCiAyMDEwLTAyLTAzICBTdGV2ZSBG
YWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBEZWJ1Z19B
bGwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0TWVudUl0
ZW1IYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Db250ZXh0
TWVudUl0ZW1IYWlrdS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9o
YWlrdS9Db250ZXh0TWVudUl0ZW1IYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDcgKzcw
LDcgQEAgQ29udGV4dE1lbnVJdGVtOjp+Q29udGV4dE1lbnVJdGVtKCkKIFBsYXRmb3JtTWVudUl0
ZW1EZXNjcmlwdGlvbiBDb250ZXh0TWVudUl0ZW06OnJlbGVhc2VQbGF0Zm9ybURlc2NyaXB0aW9u
KCkKIHsKICAgICBCTWVudUl0ZW0qIGl0ZW0gPSBtX3BsYXRmb3JtRGVzY3JpcHRpb247Ci0gICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0gTlVMTDsKKyAgICBtX3BsYXRmb3JtRGVzY3JpcHRpb24g
PSAwOwogICAgIHJldHVybiBpdGVtOwogfQogCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBDb250
ZXh0TWVudUl0ZW06OnNldEFjdGlvbihDb250ZXh0TQogICAgICAgICBtX3BsYXRmb3JtRGVzY3Jp
cHRpb24tPk1lc3NhZ2UoKS0+d2hhdCA9IGFjdGlvbjsKIH0KIAotU3RyaW5nIENvbnRleHRNZW51
SXRlbTo6dGl0bGUoKSBjb25zdCAKK1N0cmluZyBDb250ZXh0TWVudUl0ZW06OnRpdGxlKCkgY29u
c3QKIHsKICAgICBpZiAobV9wbGF0Zm9ybURlc2NyaXB0aW9uKQogICAgICAgICByZXR1cm4gIiI7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAkocmV2aXNp
b24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0RyYWdJbWFnZUhhaWt1LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRnJvbUltYWdlKEltCiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hl
ZEltYWdlKENhY2hlZEltYWdlKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biAwOyAgICAgCisgICAgcmV0dXJuIDA7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvRmlsZUNob29zZXJIYWlrdS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9GaWxlQ2hvb3NlckhhaWt1LmNwcAkocmV2aXNp
b24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L0ZpbGVDaG9vc2VySGFpa3UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRmlsZUNob29zZXIuaCIKIAotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiSWNvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9Mb2NhbGl6ZWRTdHJp
bmdzSGFpa3UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTG9jYWxp
emVkU3RyaW5nc0hhaWt1LmNwcAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2hhaWt1L0xvY2FsaXplZFN0cmluZ3NIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMb2NhbGl6ZWRTdHJpbmdz
LmgiCiAKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCiAKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48120</attachid>
            <date>2010-02-04 01:38:15 -0800</date>
            <delta_ts>2010-02-08 11:01:46 -0800</delta_ts>
            <desc>This patch changes the MIMETypeRegistryHaiku implementation to fall back to the Haiku MIME database for unknown file extensions.</desc>
            <filename>mimetype.diff</filename>
            <type>text/plain</type>
            <size>3220</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVzICA8c3VwZXJzdGlwcGlA
Z214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFVzZSB0aGUgSGFpa3UgTUlNRSB0eXBlIGRhdGEgYmFzZSBhcyBhIGZhbGwgYmFjayBmb3IgdW5r
bm93biBmaWxlIGV4dGVuc2lvbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDUyNworCisgICAgICAgIENvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMu
CisKKyAgICAgICAgKiBwbGF0Zm9ybS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlwZVJlZ2lzdHJ5SGFp
a3UuY3BwOiBTb3J0IGhhcmQtY29kZWQgTUlNRSB0eXBlcyB0byByZXNvbHZlIG1vcmUgZnJlcXVl
bmx5CisgICAgICAgICAgdXNlZCBleHRlbnNpb25zIHF1aWNrZXIsIHVzZSB0aGUgc3lzdGVtIGRh
dGEgYmFzZSBhcyBmYWxsYmFjay4KKwogMjAxMC0wMi0wMyAgU3RldmUgRmFsa2VuYnVyZyAgPHNm
YWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3MgRGVidWdfQWxsIGJ1aWxkIGZpeC4K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vaGFpa3UvTUlNRVR5cGVSZWdpc3RyeUhhaWt1LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2hhaWt1L01JTUVUeXBlUmVnaXN0cnlIYWlr
dS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9oYWlrdS9NSU1FVHlw
ZVJlZ2lzdHJ5SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAogICogQ29w
eXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHlyaWdodCAo
QykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3Rl
cGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMjgsOCArMjksMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAorI2luY2x1ZGUgPE1pbWVUeXBlLmg+CisKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogc3RydWN0IEV4dGVuc2lvbk1hcCB7CkBAIC0zNywyMCArNDEsMjAgQEAgc3Ry
dWN0IEV4dGVuc2lvbk1hcCB7CiAgICAgY29uc3QgY2hhciogbWltZVR5cGU7CiB9OwogCi1zdGF0
aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbXSA9IHsKLSAgICB7ICJibXAiLCAi
aW1hZ2UvYm1wIiB9LAorc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1hcCBleHRlbnNpb25NYXBbXSA9
IHsKKyAgICB7ICJwbmciLCAiaW1hZ2UvcG5nIiB9LAorICAgIHsgImpwZyIsICJpbWFnZS9qcGVn
IiB9LAogICAgIHsgImdpZiIsICJpbWFnZS9naWYiIH0sCiAgICAgeyAiaHRtbCIsICJ0ZXh0L2h0
bWwiIH0sCi0gICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwgICAKLSAgICB7ICJqcGVnIiwg
ImltYWdlL2pwZWciIH0sCi0gICAgeyAianBnIiwgImltYWdlL2pwZWciIH0sCi0gICAgeyAianMi
LCAiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0IiB9LAotICAgIHsgInBkZiIsICJhcHBsaWNhdGlv
bi9wZGYiIH0sCi0gICAgeyAicG5nIiwgImltYWdlL3BuZyIgfSwKLSAgICB7ICJyc3MiLCAiYXBw
bGljYXRpb24vcnNzK3htbCIgfSwKICAgICB7ICJzdmciLCAiaW1hZ2Uvc3ZnK3htbCIgfSwKKyAg
ICB7ICJqcyIsICJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiIH0sCiAgICAgeyAidGV4dCIsICJ0
ZXh0L3BsYWluIiB9LAogICAgIHsgInR4dCIsICJ0ZXh0L3BsYWluIiB9LAorICAgIHsgImJtcCIs
ICJpbWFnZS9ibXAiIH0sCisgICAgeyAiaWNvIiwgImltYWdlL3gtaWNvbiIgfSwKKyAgICB7ICJq
cGVnIiwgImltYWdlL2pwZWciIH0sCisgICAgeyAicGRmIiwgImFwcGxpY2F0aW9uL3BkZiIgfSwK
KyAgICB7ICJyc3MiLCAiYXBwbGljYXRpb24vcnNzK3htbCIgfSwKICAgICB7ICJ4Ym0iLCAiaW1h
Z2UveC14Yml0bWFwIiB9LAogICAgIHsgInhtbCIsICJ0ZXh0L3htbCIgfSwKICAgICB7ICJ4c2wi
LCAidGV4dC94c2wiIH0sCkBAIC02MiwxMiArNjYsMjMgQEAgc3RhdGljIGNvbnN0IEV4dGVuc2lv
bk1hcCBleHRlbnNpb25NYXAgWwogU3RyaW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBl
Rm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyAmZXh0KQogewogICAgIFN0cmluZyBzdHIgPSBleHQu
bG93ZXIoKTsKKworICAgIC8vIFRyeSBzeXN0ZW0gYnVpbHQtaW4gdHlwZXMKICAgICBjb25zdCBF
eHRlbnNpb25NYXAgKmV4dE1hcCA9IGV4dGVuc2lvbk1hcDsKICAgICB3aGlsZSAoZXh0TWFwLT5l
eHRlbnNpb24pIHsKICAgICAgICAgaWYgKHN0ciA9PSBleHRNYXAtPmV4dGVuc2lvbikKICAgICAg
ICAgICAgIHJldHVybiBleHRNYXAtPm1pbWVUeXBlOwogICAgICAgICArK2V4dE1hcDsKICAgICB9
CisKKyAgICAvLyBUcnkgc3lzdGVtIG1pbWUgZGF0YWJhc2UKKyAgICBTdHJpbmcgZmFrZUZpbGVO
YW1lKCJmaWxlbmFtZS4iKTsKKyAgICBmYWtlRmlsZU5hbWUuYXBwZW5kKHN0cik7CisKKyAgICBC
TWltZVR5cGUgdHlwZTsKKyAgICBpZiAoQk1pbWVUeXBlOjpHdWVzc01pbWVUeXBlKGZha2VGaWxl
TmFtZS51dGY4KCkuZGF0YSgpLCAmdHlwZSkgPT0gQl9PSykKKyAgICAgICAgcmV0dXJuIHR5cGUu
VHlwZSgpOworCiAgICAgLy8gdW5rbm93biwgbGV0J3MganVzdCBhc3N1bWUgcGxhaW4gdGV4dAog
ICAgIHJldHVybiAidGV4dC9wbGFpbiI7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48122</attachid>
            <date>2010-02-04 01:59:52 -0800</date>
            <delta_ts>2010-02-04 02:49:58 -0800</delta_ts>
            <desc>HaikuLauncher minimal browser shell</desc>
            <filename>launcher.diff</filename>
            <type>text/plain</type>
            <size>161701</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9oYWlrdS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1
L0NoYW5nZUxvZwkocmV2aXNpb24gNTQzMjUpCisrKyBXZWJLaXQvaGFpa3UvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjcgQEAKKzIwMTAtMDItMDMgIFN0ZXBoYW4gQcOfbXVz
ICA8c3VwZXJzdGlwcGlAZ214LmRlPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEltcGxlbWVudGF0aW9uIG9mIGEgYnJvd3NlciBzaGVsbCBmb3IgdGhl
IEhhaWt1IHBsYXRmb3JtLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQ1MjcKKworICAgICAgICAqIEFQSTogQWRkZWQuCisgICAgICAgICAgICAtIENv
bnRhaW5zIGNsYXNzZXMgdGhhdCB3aWxsIGV2ZW50dWFsbHkgYmUgZXhwb3J0ZWQgYnkgV2ViS2l0
CisgICAgICAgICAgICAgIGFzIHRoZSBtYWluIEFQSSBpbnRvIFdlYktpdC4KKyAgICAgICAgKiBB
UEkvV2ViRnJhbWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvV2ViRnJhbWUuaDogQWRkZWQu
CisgICAgICAgICogQVBJL1dlYkZyYW1lUHJpdmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgICAgIC0g
V3JhcHMgYSBXZWJDb3JlOjpGcmFtZSBhbmQgUGFnZS4KKyAgICAgICAgKiBBUEkvV2ViUHJvY2Vz
cy5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9XZWJQcm9jZXNzLmg6IEFkZGVkLgorICAgICAg
ICAgICAgLSBTZXJ2ZXMgYXMgZW50cnkgaW50byBXZWJDb3JlIEFQSS4gRGlzcGF0Y2hlcyBldmVu
dHMgaW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAgIHRocmVhZCBhbmQgdGhlcmVieSBz
b2x2ZXMgdGhlIHJlcXVpcmVtZW50IG9mIHRoZSBwdGhyZWFkIGJhY2tlbmQgdG8gbWFrZQorICAg
ICAgICAgICAgICBzZXZlcmFsIEFQSSBjYWxscyBpbiB0aGUgbWFpbiB0aHJlYWQgb25seS4KKyAg
ICAgICAgKiBBUEkvV2ViVmlldy5jcHA6IEFkZGVkLgorICAgICAgICAqIEFQSS9XZWJWaWV3Lmg6
IEFkZGVkLgorICAgICAgICAgICAgLSBNYWludGFpbnMgYW4gb2Zmc2NyZWVuIGJpdG1hcCBzcGFu
bmluZyB0aGUgZW50aXJlIHZpZXcgZm9yIFdlYktpdCB0bworICAgICAgICAgICAgICBkcmF3IGlu
CisgICAgICAgICAgICAtIERpc3BhdGNoZXMgbW91c2UsIHdoZWVsLCBrZXlib2FyZCwgcmVkcmF3
IGFuZCBmcmFtZSByZXNpemUgZXZlbnRzIHRvCisgICAgICAgICAgICAgIFdlYlByb2Nlc3MgaGFu
ZGxlcgorICAgICAgICAqIEFQSS9XZWJWaWV3Q29uc3RhbnRzLmg6IEFkZGVkLgorICAgICAgICAg
ICAgLSBEZWZpbmVzIHZhcmlvdXMgbWVzc2FnZSBjb25zdGFudHMKKyAgICAgICAgKiBBUEkvV2Vi
Vmlld1ByaXZhdGUuaDogQWRkZWQuCisgICAgICAgICAgICAtIFdpbGwgYmUgdXNlZCBsYXRlciB0
byBoaWRlIFdlYkNvcmUgaW50ZXJuYWxzIGZyb20gbWFpbiBBUEkuCisgICAgICAgICogQVBJL1dl
YlZpZXdXaW5kb3cuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBBUEkvV2ViVmlld1dpbmRvdy5oOiBB
ZGRlZC4KKyAgICAgICAgICAgIC0gSW1wbGVtZW50cyBhIGRlZmF1bHQgd2luZG93IGZvciBlbWJl
ZGRpbmcgYSBXZWJWaWV3LgorICAgICAgICAgICAgLSBIYW5kbGVzIGV2ZW50cyBmb3J3YXJkZWQg
ZnJvbSB3aXRoaW4gV2ViQ29yZSBhbmQgY2FsbHMgaG9vayBtZXRob2RzCisgICAgICAgICAgICAg
IHRvIGhhdmUgdGhlbSBhY3RlZCBvbi4KKyAgICAgICAgKiBIYWlrdUxhdW5jaGVyOiBBZGRlZC4K
KyAgICAgICAgICAgLSBDb250YWlucyB0aGUgYnJvd3NlciBzaGVsbCBhcHBsaWNhdGlvbiBjbGFz
c2VzCisgICAgICAgICogSGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5jcHA6IEFkZGVkLgorICAg
ICAgICAqIEhhaWt1TGF1bmNoZXIvTGF1bmNoZXJBcHAuaDogQWRkZWQuCisgICAgICAgICAgIC0g
QkFwcGxpY2F0aW9uIGltcGxlbWVudGF0aW9uIGFuZCBtYWluKCkKKyAgICAgICAgICAgLSBzcGF3
bnMgZmlyc3QgTGF1bmNoZXJXaW5kb3cgYW5kIGxvYWRzIFVSTCBmcm9tIGNvbW1hbmQgbGluZSwg
aWYgYW55CisgICAgICAgICogSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5jcHA6IEFkZGVk
LgorICAgICAgICAqIEhhaWt1TGF1bmNoZXIvTGF1bmNoZXJXaW5kb3cuaDogQWRkZWQuCisgICAg
ICAgICAgIC0gQ29udGFpbnMgYSBXZWJWaWV3LCBVUkwgdGV4dCBmaWVsZCBhbmQgZm9yd2FyZC9i
YWNrIGJ1dHRvbnMKKyAgICAgICAgICAgLSBpbXBsZW1lbnRzIHNvbWUgaG9vayBtZXRob2RzIGZy
b20gV2ViVmlld1dpbmRvdyB0byB1cGRhdGUgdGhlIFVSTCB0ZXh0IGZpZWxkCisgICAgICAgICog
SGFpa3VMYXVuY2hlci9MZWFrVHJhY2tlci5oOiBBZGRlZC4KKyAgICAgICAgICAgLSBQZXJmb3Jt
cyBvcHRpb25hbCBsZWFrIGNoZWNraW5nCisKKyAgICAgICAgQ2hhbmdlcyBpbiB0aGUgZm9sbG93
aW5nIGZpbGVzIGFyZSBtb3N0bHkgdG8gdXBkYXRlIHRoZSBIYWlrdSBwb3J0IHRvCisgICAgICAg
IGNoYW5nZWQgQVBJcyBpbiBXZWJDb3JlOgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ2hy
b21lQ2xpZW50SGFpa3UuY3BwOgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0Nocm9tZUNsaWVu
dEhhaWt1Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlr
dS5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5o
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5jcHA6CisgICAgICAg
ICogV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1Lmg6CisgICAgICAgICogV2ViQ29yZVN1
cHBvcnQvRWRpdENvbW1hbmRIYWlrdS5oOiBBZGRlZC4KKyAgICAgICAgKiBXZWJDb3JlU3VwcG9y
dC9FZGl0b3JDbGllbnRIYWlrdS5jcHA6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9y
Q2xpZW50SGFpa3UuaDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVu
dEhhaWt1LmNwcDoKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhh
aWt1Lmg6CisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFpa3UuY3Bw
OgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1Lmg6CisKIDIw
MDktMTItMDYgIE1heGltZSBTaW1vbiAgPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IFdlYktpdC9oYWlrdS9BUEkvV2ViRnJh
bWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9BUEkvV2ViRnJhbWUuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViS2l0L2hhaWt1L0FQSS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8
c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHD
n211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkVkaXRvckNsaWVudEhhaWt1LmgiCisjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEhhaWt1LmgiCisjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCisjaW5jbHVkZSAiSFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgorI2lu
Y2x1ZGUgIldlYkZyYW1lUHJpdmF0ZS5oIgorI2luY2x1ZGUgIldlYlByb2Nlc3MuaCIKKyNpbmNs
dWRlICJtYXJrdXAuaCIKKworI2luY2x1ZGUgPEVudHJ5Lmg+CisKKy8vIE1hdGNoIFNhZmFyaSdz
IG1pbi9tYXggem9vbSBzaXplcyBieSBkZWZhdWx0CisjZGVmaW5lIE1pbmltdW1UZXh0U2l6ZU11
bHRpcGxpZXIgICAgICAgMC41ZgorI2RlZmluZSBNYXhpbXVtVGV4dFNpemVNdWx0aXBsaWVyICAg
ICAgIDMuMGYKKyNkZWZpbmUgVGV4dFNpemVNdWx0aXBsaWVyUmF0aW8gICAgICAgICAxLjJmCisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisKK1dlYkZyYW1lOjpXZWJGcmFtZShXZWJQcm9j
ZXNzKiB3ZWJQcm9jZXNzKQorICAgIDogbV90ZXh0TWFnbmlmaWVyKDEuMCkKKyAgICAsIG1faXNF
ZGl0YWJsZShmYWxzZSkKKyAgICAsIG1fYmVpbmdEZXN0cm95ZWQoZmFsc2UpCisgICAgLCBtX2lt
cGwobmV3IFdlYkZyYW1lUHJpdmF0ZSgpKQorICAgICwgbV9sb2FkZXJDbGllbnQobmV3IFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3Uod2ViUHJvY2VzcywgdGhpcykpCisgICAgLCBtX3Rp
dGxlKDApCit7CisgICAgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBwYXJlbnRGcmFt
ZSA9IDA7CisKKyAgICBtX2ltcGwtPmZyYW1lID0gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZSh3ZWJQ
cm9jZXNzLT5wYWdlKCksIHBhcmVudEZyYW1lLCBtX2xvYWRlckNsaWVudCk7CisgICAgbV9pbXBs
LT5mcmFtZS0+ZGVyZWYoKTsKKworICAgIG1faW1wbC0+ZnJhbWUtPmluaXQoKTsKK30KKworV2Vi
RnJhbWU6On5XZWJGcmFtZSgpCit7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OnNldERpc3BhdGNoVGFy
Z2V0KEJIYW5kbGVyKiBoYW5kbGVyKQoreworICAgIG1fbG9hZGVyQ2xpZW50LT5zZXREaXNwYXRj
aFRhcmdldChoYW5kbGVyKTsKK30KKworCitXZWJDb3JlOjpGcmFtZSogV2ViRnJhbWU6OmZyYW1l
KCkKK3sKKyAgICBpZiAobV9pbXBsKQorICAgICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS5nZXQo
KTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkZyYW1lOjpsb2FkUmVxdWVzdChCU3Ry
aW5nIHVybCkKK3sKKyAgICBsb2FkUmVxdWVzdChLVVJMKEtVUkwoKSwgdXJsLlN0cmluZygpKSk7
Cit9CisKK3ZvaWQgV2ViRnJhbWU6OmxvYWRSZXF1ZXN0KEtVUkwgdXJsKQoreworICAgIGlmICht
X2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpKSB7CisgICAgICAgIGlmICh1
cmwucHJvdG9jb2woKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlmIChCRW50cnkoQlN0cmlu
Zyh1cmwuc3RyaW5nKCkpKS5FeGlzdHMoKSkgeworICAgICAgICAgICAgICAgIHVybC5zZXRQcm90
b2NvbCgiZmlsZSIpOworICAgICAgICAgICAgICAgIHVybC5zZXRQYXRoKCIvLyIgKyB1cmwucGF0
aCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXJsLnNldFByb3Rv
Y29sKCJodHRwIik7CisgICAgICAgICAgICAgICAgdXJsLnNldFBhdGgoIi8vIiArIHVybC5wYXRo
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+
bG9hZGVyKCktPmxvYWQodXJsLCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFdlYkZyYW1lOjpz
dG9wTG9hZGluZygpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+
bG9hZGVyKCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9wKCk7Cit9CisK
K3ZvaWQgV2ViRnJhbWU6OnJlbG9hZCgpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9p
bXBsLT5mcmFtZS0+bG9hZGVyKCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT5y
ZWxvYWQoKTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuR29CYWNrKCkKK3sKKyAgICBpZiAobV9p
bXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9pbXBsLT5mcmFtZS0+cGFn
ZSgpLT5iYWNrRm9yd2FyZExpc3QoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBh
Z2UoKS0+Y2FuR29CYWNrT3JGb3J3YXJkKC0xKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBXZWJGcmFtZTo6Y2FuR29Gb3J3YXJkKCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAm
JiBtX2ltcGwtPmZyYW1lLT5wYWdlKCkgJiYgbV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5iYWNrRm9y
d2FyZExpc3QoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+Y2FuR29C
YWNrT3JGb3J3YXJkKDEpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkZyYW1l
Ojpnb0JhY2soKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnBh
Z2UoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPnBhZ2UoKS0+Z29CYWNrKCk7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViRnJhbWU6OmdvRm9yd2FyZCgpCit7Cisg
ICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+cGFnZSgpKQorICAgICAgICBy
ZXR1cm4gbV9pbXBsLT5mcmFtZS0+cGFnZSgpLT5nb0ZvcndhcmQoKTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KK2Jvb2wgV2ViRnJhbWU6OmNhbkNvcHkoKQoreworICAgIGlmIChtX2ltcGwtPmZy
YW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJh
bWUtPmVkaXRvcigpLT5jYW5Db3B5KCkgfHwgbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmNhbkRI
VE1MQ29weSgpOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkZyYW1lOjpjYW5D
dXQoKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkK
KyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5DdXQoKSB8fCBtX2lt
cGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuREhUTUxDdXQoKTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworYm9vbCBXZWJGcmFtZTo6Y2FuUGFzdGUoKQoreworICAgIGlmIChtX2ltcGwtPmZyYW1l
ICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJhbWUt
PmVkaXRvcigpLT5jYW5QYXN0ZSgpIHx8IG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpLT5jYW5ESFRN
TFBhc3RlKCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OmNvcHko
KQoreworICAgIGlmIChjYW5Db3B5KCkpCisgICAgICAgIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigp
LT5jb3B5KCk7Cit9CisKK3ZvaWQgV2ViRnJhbWU6OmN1dCgpCit7CisgICAgaWYgKGNhbkN1dCgp
KQorICAgICAgICBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y3V0KCk7Cit9CisKK3ZvaWQgV2Vi
RnJhbWU6OnBhc3RlKCkKK3sKKyAgICBpZiAoY2FuUGFzdGUoKSkKKyAgICAgICAgbV9pbXBsLT5m
cmFtZS0+ZWRpdG9yKCktPnBhc3RlKCk7Cit9CisKK2Jvb2wgV2ViRnJhbWU6OmNhblVuZG8oKQor
eworICAgIGlmIChtX2ltcGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPmVkaXRvcigpKQorICAg
ICAgICByZXR1cm4gbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCktPmNhblVuZG8oKTsKKworICAgIHJl
dHVybiBmYWxzZTsKK30KKworYm9vbCBXZWJGcmFtZTo6Y2FuUmVkbygpCit7CisgICAgaWYgKG1f
aW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+ZWRpdG9yKCkpCisgICAgICAgIHJldHVybiBt
X2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+Y2FuUmVkbygpOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFdlYkZyYW1lOjp1bmRvKCkKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBt
X2ltcGwtPmZyYW1lLT5lZGl0b3IoKSAmJiBjYW5VbmRvKCkpCisgICAgICAgIHJldHVybiBtX2lt
cGwtPmZyYW1lLT5lZGl0b3IoKS0+dW5kbygpOworfQorCit2b2lkIFdlYkZyYW1lOjpyZWRvKCkK
K3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKSAmJiBj
YW5SZWRvKCkpCisgICAgICAgIHJldHVybiBtX2ltcGwtPmZyYW1lLT5lZGl0b3IoKS0+cmVkbygp
OworfQorCitib29sIFdlYkZyYW1lOjphbGxvd3NTY3JvbGxpbmcoKQoreworICAgIGlmIChtX2lt
cGwtPmZyYW1lICYmIG1faW1wbC0+ZnJhbWUtPnZpZXcoKSkKKyAgICAgICAgcmV0dXJuIG1faW1w
bC0+ZnJhbWUtPnZpZXcoKS0+Y2FuSGF2ZVNjcm9sbGJhcnMoKTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBXZWJGcmFtZTo6c2V0QWxsb3dzU2Nyb2xsaW5nKGJvb2wgZmxhZykKK3sK
KyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCkpCisgICAgICAg
IG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+c2V0Q2FuSGF2ZVNjcm9sbGJhcnMoZmxhZyk7Cit9CisK
K2NvbnN0IGNoYXIqIFdlYkZyYW1lOjpnZXRQYWdlU291cmNlKCkKK3sKKyAgICBpZiAobV9pbXBs
LT5mcmFtZSkgeworICAgICAgICBpZiAobV9pbXBsLT5mcmFtZS0+dmlldygpICYmIG1faW1wbC0+
ZnJhbWUtPnZpZXcoKS0+bGF5b3V0UGVuZGluZygpKQorICAgICAgICAgICAgbV9pbXBsLT5mcmFt
ZS0+dmlldygpLT5sYXlvdXQoKTsKKworICAgICAgICBXZWJDb3JlOjpEb2N1bWVudCogZG9jdW1l
bnQgPSBtX2ltcGwtPmZyYW1lLT5kb2N1bWVudCgpOworCisgICAgICAgIGlmIChkb2N1bWVudCkg
eworICAgICAgICAgICAgQlN0cmluZyBzb3VyY2UgPSBjcmVhdGVNYXJrdXAoZG9jdW1lbnQpOwor
ICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5TdHJpbmcoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiAiIjsKK30KKwordm9pZCBXZWJGcmFtZTo6c2V0UGFnZVNvdXJjZShjb25zdCBj
aGFyKiBzb3VyY2UpCit7CisgICAgaWYgKG1faW1wbC0+ZnJhbWUgJiYgbV9pbXBsLT5mcmFtZS0+
bG9hZGVyKCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIGxvYWRlciA9IG1faW1w
bC0+ZnJhbWUtPmxvYWRlcigpOworICAgICAgICBsb2FkZXItPmJlZ2luKCk7CisgICAgICAgIGxv
YWRlci0+d3JpdGUoU3RyaW5nKHNvdXJjZSkpOworICAgICAgICBsb2FkZXItPmVuZCgpOworICAg
IH0KK30KKwordm9pZCBXZWJGcmFtZTo6c2V0VHJhbnNwYXJlbnQoYm9vbCB0cmFuc3BhcmVudCkK
K3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCkpCisgICAg
ICAgIG1faW1wbC0+ZnJhbWUtPnZpZXcoKS0+c2V0VHJhbnNwYXJlbnQodHJhbnNwYXJlbnQpOwor
fQorCitib29sIFdlYkZyYW1lOjppc1RyYW5zcGFyZW50KCkgY29uc3QKK3sKKyAgICBpZiAobV9p
bXBsLT5mcmFtZSAmJiBtX2ltcGwtPmZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVybiBtX2lt
cGwtPmZyYW1lLT52aWV3KCktPmlzVHJhbnNwYXJlbnQoKTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKworQlN0cmluZyBXZWJGcmFtZTo6Z2V0SW5uZXJUZXh0KCkKK3sKKyAgICBGcmFtZVZpZXcq
IHZpZXcgPSBtX2ltcGwtPmZyYW1lLT52aWV3KCk7CisKKyAgICBpZiAodmlldyAmJiB2aWV3LT5s
YXlvdXRQZW5kaW5nKCkpCisgICAgICAgIHZpZXctPmxheW91dCgpOworCisgICAgV2ViQ29yZTo6
RWxlbWVudCAqZG9jdW1lbnRFbGVtZW50ID0gbV9pbXBsLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudC0+aW5uZXJUZXh0KCk7
Cit9CisKK0JTdHJpbmcgV2ViRnJhbWU6OmdldEFzTWFya3VwKCkKK3sKKyAgICBpZiAoIW1faW1w
bC0+ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKworICAgIHJl
dHVybiBjcmVhdGVNYXJrdXAobV9pbXBsLT5mcmFtZS0+ZG9jdW1lbnQoKSk7Cit9CisKK0JTdHJp
bmcgV2ViRnJhbWU6OmdldEV4dGVybmFsUmVwcmVzZW50YXRpb24oKQoreworICAgIEZyYW1lVmll
dyogdmlldyA9IG1faW1wbC0+ZnJhbWUtPnZpZXcoKTsKKworICAgIGlmICh2aWV3ICYmIHZpZXct
PmxheW91dFBlbmRpbmcoKSkKKyAgICAgICAgdmlldy0+bGF5b3V0KCk7CisKKyAgICByZXR1cm4g
ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihtX2ltcGwtPmZyYW1lLmdldCgpKTsKK30KKworYm9vbCBX
ZWJGcmFtZTo6ZmluZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIGJvb2wgZm9yd2FyZCwgYm9v
bCBjYXNlU2Vuc2l0aXZlLCBib29sIHdyYXBTZWxlY3Rpb24sIGJvb2wgc3RhcnRJblNlbGVjdGlv
bikKK3sKKyAgICBpZiAobV9pbXBsLT5mcmFtZSkKKyAgICAgICAgcmV0dXJuIG1faW1wbC0+ZnJh
bWUtPmZpbmRTdHJpbmcoc3RyaW5nLCBmb3J3YXJkLCBjYXNlU2Vuc2l0aXZlLCB3cmFwU2VsZWN0
aW9uLCBzdGFydEluU2VsZWN0aW9uKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
ZWJGcmFtZTo6Y2FuSW5jcmVhc2VUZXh0U2l6ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1faW1wbC0+
ZnJhbWUpCisgICAgICAgIGlmIChtX3RleHRNYWduaWZpZXIgKiBUZXh0U2l6ZU11bHRpcGxpZXJS
YXRpbyA8PSBNYXhpbXVtVGV4dFNpemVNdWx0aXBsaWVyKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgV2ViRnJhbWU6OmNhbkRlY3JlYXNl
VGV4dFNpemUoKSBjb25zdAoreworICAgIGlmIChtX2ltcGwtPmZyYW1lKQorICAgICAgICByZXR1
cm4gbV90ZXh0TWFnbmlmaWVyIC8gVGV4dFNpemVNdWx0aXBsaWVyUmF0aW8gPj0gTWluaW11bVRl
eHRTaXplTXVsdGlwbGllcjsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJGcmFt
ZTo6aW5jcmVhc2VUZXh0U2l6ZSgpCit7CisgICAgaWYgKGNhbkluY3JlYXNlVGV4dFNpemUoKSkg
eworICAgICAgICBtX3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIgKiBUZXh0U2l6ZU11
bHRpcGxpZXJSYXRpbzsKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2V0Wm9vbUZhY3RvcihtX3Rl
eHRNYWduaWZpZXIsIHRydWUpOworICAgIH0KK30KKwordm9pZCBXZWJGcmFtZTo6ZGVjcmVhc2VU
ZXh0U2l6ZSgpCit7CisgICAgaWYgKGNhbkRlY3JlYXNlVGV4dFNpemUoKSkgeworICAgICAgICBt
X3RleHRNYWduaWZpZXIgPSBtX3RleHRNYWduaWZpZXIgLyBUZXh0U2l6ZU11bHRpcGxpZXJSYXRp
bzsKKyAgICAgICAgbV9pbXBsLT5mcmFtZS0+c2V0Wm9vbUZhY3RvcihtX3RleHRNYWduaWZpZXIs
IHRydWUpOworICAgIH0KK30KKwordm9pZCBXZWJGcmFtZTo6cmVzZXRUZXh0U2l6ZSgpCit7Cisg
ICAgbV90ZXh0TWFnbmlmaWVyID0gMS4wOworCisgICAgaWYgKG1faW1wbC0+ZnJhbWUpCisgICAg
ICAgIG1faW1wbC0+ZnJhbWUtPnNldFpvb21GYWN0b3IobV90ZXh0TWFnbmlmaWVyLCB0cnVlKTsK
K30KSW5kZXg6IFdlYktpdC9oYWlrdS9BUEkvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJL
aXQvaGFpa3UvQVBJL1dlYkZyYW1lLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvQVBJ
L1dlYkZyYW1lLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqIENv
cHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgorICoK
KyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIFdlYkZyYW1lX2gKKyNk
ZWZpbmUgV2ViRnJhbWVfaAorCisjaW5jbHVkZSAiV2ViRnJhbWVQcml2YXRlLmgiCisKKyNpbmNs
dWRlIDxTdHJpbmcuaD4KKworY2xhc3MgQkhhbmRsZXI7CitjbGFzcyBXZWJGcmFtZURhdGE7Citj
bGFzcyBXZWJQcm9jZXNzOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRnJhbWU7
CisgICAgY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTsKKyAgICBjbGFzcyBLVVJMOworfQor
CitjbGFzcyBXZWJGcmFtZSB7CisgICAgcHVibGljOgorICAgICAgICBXZWJGcmFtZShXZWJQcm9j
ZXNzKik7CisgICAgICAgIHZpcnR1YWwgfldlYkZyYW1lKCk7CisKKyAgICAgICAgdm9pZCBzZXRE
aXNwYXRjaFRhcmdldChCSGFuZGxlciogaGFuZGxlcik7CisKKyAgICAgICAgdm9pZCBsb2FkUmVx
dWVzdChCU3RyaW5nIHVybCk7CisgICAgICAgIHZvaWQgbG9hZFJlcXVlc3QoV2ViQ29yZTo6S1VS
TCk7CisKKyAgICAgICAgdm9pZCBzdG9wTG9hZGluZygpOworICAgICAgICB2b2lkIHJlbG9hZCgp
OworCisgICAgICAgIGJvb2wgY2FuR29CYWNrKCk7CisgICAgICAgIGJvb2wgY2FuR29Gb3J3YXJk
KCk7CisKKyAgICAgICAgYm9vbCBnb0JhY2soKTsKKyAgICAgICAgYm9vbCBnb0ZvcndhcmQoKTsK
KworICAgICAgICBib29sIGNhbkNvcHkoKTsKKyAgICAgICAgYm9vbCBjYW5DdXQoKTsKKyAgICAg
ICAgYm9vbCBjYW5QYXN0ZSgpOworCisgICAgICAgIHZvaWQgY29weSgpOworICAgICAgICB2b2lk
IGN1dCgpOworICAgICAgICB2b2lkIHBhc3RlKCk7CisKKyAgICAgICAgYm9vbCBjYW5VbmRvKCk7
CisgICAgICAgIGJvb2wgY2FuUmVkbygpOworCisgICAgICAgIHZvaWQgdW5kbygpOworICAgICAg
ICB2b2lkIHJlZG8oKTsKKworICAgICAgICBib29sIGFsbG93c1Njcm9sbGluZygpOworICAgICAg
ICB2b2lkIHNldEFsbG93c1Njcm9sbGluZyhib29sKTsKKworICAgICAgICBjb25zdCBjaGFyKiBn
ZXRQYWdlU291cmNlKCk7CisgICAgICAgIHZvaWQgc2V0UGFnZVNvdXJjZShjb25zdCBjaGFyKiBz
b3VyY2UpOworCisgICAgICAgIHZvaWQgc2V0VHJhbnNwYXJlbnQoYm9vbCk7CisgICAgICAgIGJv
b2wgaXNUcmFuc3BhcmVudCgpIGNvbnN0OworCisgICAgICAgIEJTdHJpbmcgZ2V0SW5uZXJUZXh0
KCk7CisgICAgICAgIEJTdHJpbmcgZ2V0QXNNYXJrdXAoKTsKKyAgICAgICAgQlN0cmluZyBnZXRF
eHRlcm5hbFJlcHJlc2VudGF0aW9uKCk7CisKKyAgICAgICAgYm9vbCBmaW5kU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZywgYm9vbCBmb3J3YXJkID0gdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlLCBib29sIHdyYXBTZWxlY3Rpb24gPSB0cnVl
LAorICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydEluU2VsZWN0aW9uID0gdHJ1ZSk7
CisKKyAgICAgICAgYm9vbCBjYW5JbmNyZWFzZVRleHRTaXplKCkgY29uc3Q7CisgICAgICAgIGJv
b2wgY2FuRGVjcmVhc2VUZXh0U2l6ZSgpIGNvbnN0OworCisgICAgICAgIHZvaWQgaW5jcmVhc2VU
ZXh0U2l6ZSgpOworICAgICAgICB2b2lkIGRlY3JlYXNlVGV4dFNpemUoKTsKKworICAgICAgICB2
b2lkIHJlc2V0VGV4dFNpemUoKTsKKworICAgICAgICB2b2lkIG1ha2VFZGl0YWJsZShib29sIGVk
aXRhYmxlKSB7IG1faXNFZGl0YWJsZSA9IGVkaXRhYmxlOyB9CisgICAgICAgIGJvb2wgaXNFZGl0
YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFZGl0YWJsZTsgfQorCisgICAgICAgIEJTdHJpbmcg
dGl0bGUoKSBjb25zdCB7IHJldHVybiBtX3RpdGxlOyB9CisgICAgICAgIHZvaWQgc2V0VGl0bGUo
QlN0cmluZyB0aXRsZSkgeyBtX3RpdGxlID0gdGl0bGU7IH0KKworICAgICAgICBCU3RyaW5nIHVy
bCgpIGNvbnN0IHsgcmV0dXJuIG1faW1wbC0+ZnJhbWUtPmxvYWRlcigpLT51cmwoKS5zdHJpbmco
KTsgfQorCisgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSgpOworCisgICAgcHJpdmF0ZToK
KyAgICAgICAgZmxvYXQgbV90ZXh0TWFnbmlmaWVyOworICAgICAgICBib29sIG1faXNFZGl0YWJs
ZTsKKyAgICAgICAgYm9vbCBtX2JlaW5nRGVzdHJveWVkOworCisgICAgICAgIFdlYkZyYW1lUHJp
dmF0ZSogbV9pbXBsOworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEhhaWt1KiBt
X2xvYWRlckNsaWVudDsKKyAgICAgICAgQlN0cmluZyBtX3RpdGxlOworfTsKKworI2VuZGlmIC8v
IFdlYkZyYW1lX2gKSW5kZXg6IFdlYktpdC9oYWlrdS9BUEkvV2ViRnJhbWVQcml2YXRlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L0FQSS9XZWJGcmFtZVByaXZhdGUuaAkocmV2aXNpb24g
MCkKKysrIFdlYktpdC9oYWlrdS9BUEkvV2ViRnJhbWVQcml2YXRlLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxz
aW1vbi5tYXhpbWVAZ21haWwuY29tPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisj
aWZuZGVmIFdlYkZyYW1lUHJpdmF0ZV9oCisjZGVmaW5lIFdlYkZyYW1lUHJpdmF0ZV9oCisKKyNp
bmNsdWRlICJFZGl0Q29tbWFuZEhhaWt1LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKworI2luY2x1
ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK2NsYXNzIFdlYkZy
YW1lUHJpdmF0ZSB7CisgICAgcHVibGljOgorICAgICAgICBXZWJGcmFtZVByaXZhdGUoKQorICAg
ICAgICAgICAgOiBmcmFtZSgwKQorICAgICAgICB7fQorCisgICAgICAgIFdURjo6VmVjdG9yPEVk
aXRDb21tYW5kSGFpa3U+IHVuZG9TdGFjazsKKyAgICAgICAgV1RGOjpWZWN0b3I8RWRpdENvbW1h
bmRIYWlrdT4gcmVkb1N0YWNrOworCisgICAgICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1l
PiBmcmFtZTsKK307CisKKyNlbmRpZiAvLyBXZWJGcmFtZVByaXZhdGVfaApJbmRleDogV2ViS2l0
L2hhaWt1L0FQSS9XZWJQcm9jZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvaGFpa3UvQVBJ
L1dlYlByb2Nlc3MuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2hhaWt1L0FQSS9XZWJQcm9j
ZXNzLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0ODMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXZWJQcm9jZXNzLmgiCisKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJD
aHJvbWVDbGllbnRIYWlrdS5oIgorI2luY2x1ZGUgIkNvbnRleHRNZW51Q2xpZW50SGFpa3UuaCIK
KyNpbmNsdWRlICJET01UaW1lci5oIgorI2luY2x1ZGUgIkRyYWdDbGllbnRIYWlrdS5oIgorI2lu
Y2x1ZGUgIkVkaXRvckNsaWVudEhhaWt1LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNs
dWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ2xpZW50SGFp
a3UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5o
IgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgorI2luY2x1ZGUgIldlYkZyYW1lLmgiCisjaW5j
bHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdDb25zdGFudHMuaCIKKworI2luY2x1
ZGUgPEJpdG1hcC5oPgorI2luY2x1ZGUgPEZvbnQuaD4KKyNpbmNsdWRlIDxNZXNzYWdlLmg+Cisj
aW5jbHVkZSA8TWVzc2FnZVF1ZXVlLmg+CisjaW5jbHVkZSA8V2luZG93Lmg+CisKKyNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KKworLyoKKyAg
ICAgVGhlIGJhc2ljIGlkZWEgaGVyZSBpcyB0byBkaXNwYXRjaCBhbGwgcHVibGljIG1ldGhvZHMg
dG8gdGhlIEJMb29wZXIKKyAgICAgdG8gd2hpY2ggdGhlIGhhbmRsZXIgaXMgYXR0YWNoZWQgKHNo
b3VsZCBiZSB0aGUgYmVfYXBwKSwgc3VjaCB0aGF0CisgICAgIHRoZSBjYWxscyBpbnRvIFdlYkNv
cmUgY29kZSBoYXBwZW4gZnJvbSB3aXRoaW4gdGhhdCB0aHJlYWQgKm9ubHkqLgorICAgICBJbiBj
dXJyZW50IFdlYkNvcmUgd2l0aCBwdGhyZWFkIHRocmVhZGluZyBiYWNrZW5kLCB0aGlzIG11c3Qg
YmUgdGhlCisgICAgIHNhbWUgdGhyZWFkIHRoYXQgY2FsbGVkIFdURjo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpLCByZXNwZWN0aXZlbHkgdGhlCisgICAgIGluaXRpYWxpemVPbmNlKCkgbWV0aG9kIG9m
IHRoaXMgY2xhc3MuCisgKi8KKworZW51bSB7CisgICAgSEFORExFX1NIVVRET1dOICAgICAgICAg
ICAgICAgICAgICAgICAgPSAnc2R3bicsCisKKyAgICBIQU5ETEVfTE9BRF9VUkwgICAgICAgICAg
ICAgICAgICAgICAgICA9ICdsdXJsJywKKyAgICBIQU5ETEVfR09fQkFDSyAgICAgICAgICAgICAg
ICAgICAgICAgID0gJ2JhY2snLAorICAgIEhBTkRMRV9HT19GT1JXQVJEICAgICAgICAgICAgICAg
ICAgICA9ICdmd3JkJywKKworICAgIEhBTkRMRV9EUkFXICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gJ2RyYXcnLAorCisgICAgSEFORExFX0ZSQU1FX1JFU0laRUQgICAgICAgICAgICAgICAg
PSAncnN6ZCcKK307CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCisvKnN0YXRpYyovIHZv
aWQgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZU9uY2UoKQoreworICAgIFdlYkNvcmU6OkluaXRpYWxp
emVMb2dnaW5nQ2hhbm5lbHNJZk5lY2Vzc2FyeSgpOworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVh
ZGluZygpOworICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIFdlYkNvcmU6OkF0
b21pY1N0cmluZzo6aW5pdCgpOworICAgIFdlYkNvcmU6OkRPTVRpbWVyOjpzZXRNaW5UaW1lcklu
dGVydmFsKDAuMDA0KTsKKyAgICBXZWJDb3JlOjpVVEY4RW5jb2RpbmcoKTsKK30KKworV2ViUHJv
Y2Vzczo6V2ViUHJvY2VzcyhXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDogQkhhbmRsZXIoIldlYlZp
ZXcgcHJvY2VzcyIpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKKyAgICAsIG1fbWFpbkZyYW1l
KDApCisgICAgLCBtX3BhZ2UoMCkKK3sKKyAgICBXZWJDb3JlOjpFZGl0b3JDbGllbnRIYWlrdSog
ZWRpdG9yQ2xpZW50ID0gbmV3IFdlYkNvcmU6OkVkaXRvckNsaWVudEhhaWt1KCk7CisKKyAgICBt
X3BhZ2UgPSBuZXcgV2ViQ29yZTo6UGFnZShuZXcgV2ViQ29yZTo6Q2hyb21lQ2xpZW50SGFpa3Uo
dGhpcywgd2ViVmlldyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdlYkNv
cmU6OkNvbnRleHRNZW51Q2xpZW50SGFpa3UoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlZGl0b3JDbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFdl
YkNvcmU6OkRyYWdDbGllbnRIYWlrdSh3ZWJWaWV3KSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXcgV2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50SGFpa3UoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAp
OworCisgICAgZWRpdG9yQ2xpZW50LT5zZXRQYWdlKG1fcGFnZSk7CisKKyAgICAvLyBEZWZhdWx0
IHNldHRpbmdzIC0gV2Ugc2hvdWxkIGhhdmUgV2ViVmlld1NldHRpbmdzIGNsYXNzIGZvciB0aGlz
LgorICAgIFdlYkNvcmU6OlNldHRpbmdzKiBzZXR0aW5ncyA9IG1fcGFnZS0+c2V0dGluZ3MoKTsK
KyAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIHNl
dHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldE1pbmltdW1M
b2dpY2FsRm9udFNpemUoNSk7CisgICAgc2V0dGluZ3MtPnNldFNob3VsZFByaW50QmFja2dyb3Vu
ZHModHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworCisg
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKworICAgIC8vIFRPRE86IEluaXQgZnJvbSBzeXN0ZW0g
Zm9udHMgb3IgYXBwbGljYXRpb24gc2V0dGluZ3MuCisgICAgc2V0dGluZ3MtPnNldFNlcmlmRm9u
dEZhbWlseSgiRGVqYVZ1IFNlcmlmIik7CisgICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoIkRlamFWdSBTYW5zIik7CisgICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgi
RGVqYVZ1IFNhbnMgTW9ubyIpOworICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHko
IkRlamFWdSBTZXJpZiIpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFt
ZSgiVVRGLTgiKTsKK30KKworV2ViUHJvY2Vzczo6fldlYlByb2Nlc3MoKQoreworcHJpbnRmKCJ+
V2ViUHJvY2VzcygpXG4iKTsKKyAgICBkZWxldGUgbV9tYWluRnJhbWU7CisgICAgZGVsZXRlIG1f
cGFnZTsKK30KKworLy8gI3ByYWdtYSBtYXJrIC0gcHVibGljCisKK3ZvaWQgV2ViUHJvY2Vzczo6
aW5pdCgpCit7CisgICAgbV9tYWluRnJhbWUgPSBuZXcgV2ViRnJhbWUodGhpcyk7Cit9CisKK3Zv
aWQgV2ViUHJvY2Vzczo6c2h1dGRvd24oKQoreworcHJpbnRmKCJXZWJQcm9jZXNzOjpzaHV0ZG93
bigpXG4iKTsKKyAgICBCTWVzc2FnZSBtZXNzYWdlKEhBTkRMRV9TSFVURE9XTik7CisgICAgTG9v
cGVyKCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlzKTsKK30KKwordm9pZCBXZWJQcm9jZXNz
OjpzZXREaXNwYXRjaFRhcmdldChCSGFuZGxlciogaGFuZGxlcikKK3sKKyAgICBtX21haW5GcmFt
ZS0+c2V0RGlzcGF0Y2hUYXJnZXQoaGFuZGxlcik7Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6bG9h
ZFVSTChjb25zdCBjaGFyKiB1cmxTdHJpbmcpCit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShIQU5E
TEVfTE9BRF9VUkwpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwiLCB1cmxTdHJpbmcpOwor
ICAgIExvb3BlcigpLT5Qb3N0TWVzc2FnZSgmbWVzc2FnZSwgdGhpcyk7Cit9CisKK3ZvaWQgV2Vi
UHJvY2Vzczo6Z29CYWNrKCkKK3sKKyAgICBCTWVzc2FnZSBtZXNzYWdlKEhBTkRMRV9HT19CQUNL
KTsKKyAgICBMb29wZXIoKS0+UG9zdE1lc3NhZ2UoJm1lc3NhZ2UsIHRoaXMpOworfQorCit2b2lk
IFdlYlByb2Nlc3M6OmdvRm9yd2FyZCgpCit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShIQU5ETEVf
R09fRk9SV0FSRCk7CisgICAgTG9vcGVyKCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlzKTsK
K30KKwordm9pZCBXZWJQcm9jZXNzOjpkcmF3KGNvbnN0IEJSZWN0JiB1cGRhdGVSZWN0KQorewor
ICAgIEJNZXNzYWdlIG1lc3NhZ2UoSEFORExFX0RSQVcpOworICAgIG1lc3NhZ2UuQWRkUmVjdCgi
dXBkYXRlIHJlY3QiLCB1cGRhdGVSZWN0KTsKKyAgICBMb29wZXIoKS0+UG9zdE1lc3NhZ2UoJm1l
c3NhZ2UsIHRoaXMpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmZyYW1lUmVzaXplZChmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIEJNZXNzYWdlIG1lc3NhZ2UoSEFORExFX0ZSQU1F
X1JFU0laRUQpOworICAgIG1lc3NhZ2UuQWRkRmxvYXQoIndpZHRoIiwgd2lkdGgpOworICAgIG1l
c3NhZ2UuQWRkRmxvYXQoImhlaWdodCIsIGhlaWdodCk7CisgICAgTG9vcGVyKCktPlBvc3RNZXNz
YWdlKCZtZXNzYWdlLCB0aGlzKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjptb3VzZUV2ZW50KGNv
bnN0IEJNZXNzYWdlKiBfbWVzc2FnZSwKKyAgICBjb25zdCBCUG9pbnQmIHdoZXJlLCBjb25zdCBC
UG9pbnQmIHNjcmVlbldoZXJlKQoreworICAgIEJNZXNzYWdlIG1lc3NhZ2UoKl9tZXNzYWdlKTsK
KyAgICBMb29wZXIoKS0+UG9zdE1lc3NhZ2UoJm1lc3NhZ2UsIHRoaXMpOworfQorCit2b2lkIFdl
YlByb2Nlc3M6Om1vdXNlV2hlZWxDaGFuZ2VkKGNvbnN0IEJNZXNzYWdlKiBfbWVzc2FnZSwKKyAg
ICBjb25zdCBCUG9pbnQmIHdoZXJlLCBjb25zdCBCUG9pbnQmIHNjcmVlbldoZXJlKQoreworICAg
IEJNZXNzYWdlIG1lc3NhZ2UoKl9tZXNzYWdlKTsKKyAgICBtZXNzYWdlLkFkZFBvaW50KCJiZTp2
aWV3X3doZXJlIiwgd2hlcmUpOworICAgIG1lc3NhZ2UuQWRkUG9pbnQoInNjcmVlbl93aGVyZSIs
IHNjcmVlbldoZXJlKTsKKyAgICBtZXNzYWdlLkFkZEludDMyKCJtb2RpZmllcnMiLCBtb2RpZmll
cnMoKSk7CisgICAgTG9vcGVyKCktPlBvc3RNZXNzYWdlKCZtZXNzYWdlLCB0aGlzKTsKK30KKwor
dm9pZCBXZWJQcm9jZXNzOjprZXlFdmVudChjb25zdCBCTWVzc2FnZSogX21lc3NhZ2UpCit7Cisg
ICAgQk1lc3NhZ2UgbWVzc2FnZSgqX21lc3NhZ2UpOworICAgIExvb3BlcigpLT5Qb3N0TWVzc2Fn
ZSgmbWVzc2FnZSwgdGhpcyk7Cit9CisKKy8vICNwcmFnbWEgbWFyayAtIENocm9tZUNsaWVudE1l
dGhvZHMKKworQlJlY3QgV2ViUHJvY2Vzczo6Y29udGVudHNTaXplKCkKK3sKKyAgICByZXR1cm4g
QlJlY3QoQl9PUklHSU4sIG1fbWFpbkZyYW1lLT5mcmFtZSgpLT52aWV3KCktPmNvbnRlbnRzU2l6
ZSgpKTsKK30KKworQlJlY3QgV2ViUHJvY2Vzczo6d2luZG93Qm91bmRzKCkKK3sKKyAgICBCUmVj
dCBib3VuZHM7CisgICAgaWYgKG1fd2ViVmlldy0+TG9ja0xvb3BlcigpKSB7CisgICAgICAgIGJv
dW5kcyA9IG1fd2ViVmlldy0+V2luZG93KCktPkJvdW5kcygpOworICAgICAgICBtX3dlYlZpZXct
PlVubG9ja0xvb3BlcigpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRzOworfQorCit2b2lkIFdl
YlByb2Nlc3M6OnNldFdpbmRvd0JvdW5kcyhjb25zdCBCUmVjdCYgYm91bmRzKQoreworICAgIGlm
IChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgeworICAgICAgICBtX3dlYlZpZXctPldpbmRvdygp
LT5Nb3ZlVG8oYm91bmRzLkxlZnRUb3AoKSk7CisgICAgICAgIG1fd2ViVmlldy0+V2luZG93KCkt
PlJlc2l6ZVRvKGJvdW5kcy5XaWR0aCgpLCBib3VuZHMuSGVpZ2h0KCkpOworICAgICAgICBtX3dl
YlZpZXctPlVubG9ja0xvb3BlcigpOworICAgIH0KK30KKworQlJlY3QgV2ViUHJvY2Vzczo6dmll
d0JvdW5kcygpCit7CisgICAgQlJlY3QgYm91bmRzOworICAgIGlmIChtX3dlYlZpZXctPkxvY2tM
b29wZXIoKSkgeworICAgICAgICBib3VuZHMgPSBtX3dlYlZpZXctPkJvdW5kcygpOworICAgICAg
ICBtX3dlYlZpZXctPlVubG9ja0xvb3BlcigpOworICAgIH0KKyAgICByZXR1cm4gYm91bmRzOwor
fQorCit2b2lkIFdlYlByb2Nlc3M6OnNldFZpZXdCb3VuZHMoY29uc3QgQlJlY3QmIGJvdW5kcykK
K3sKKyAgICBpZiAobV93ZWJWaWV3LT5Mb2NrTG9vcGVyKCkpIHsKKyAgICAgICAgLy8gVE9ETzog
SW1wbGVtZW50IHRoaXMgd2l0aCBsYXlvdXQgbWFuYWdlbWVudCwgaS5lLiBTZXRFeHBsaWNpdE1p
blNpemUoKSBvciBzb21ldGhpbmcuLi4KKyAgICAgICAgbV93ZWJWaWV3LT5VbmxvY2tMb29wZXIo
KTsKKyAgICB9Cit9CisKK0JTdHJpbmcgV2ViUHJvY2Vzczo6bWFpbkZyYW1lVGl0bGUoKQorewor
ICAgIHJldHVybiBtX21haW5GcmFtZS0+dGl0bGUoKTsKK30KKworQlN0cmluZyBXZWJQcm9jZXNz
OjptYWluRnJhbWVVUkwoKQoreworICAgIHJldHVybiBtX21haW5GcmFtZS0+dXJsKCk7Cit9CisK
K3ZvaWQgV2ViUHJvY2Vzczo6cGFpbnQoY29uc3QgQlJlY3QmIHJlY3QsIGJvb2wgY29udGVudENo
YW5nZWQsIGJvb2wgaW1tZWRpYXRlLAorICAgIGJvb2wgcmVwYWludENvbnRlbnRPbmx5KQorewor
ICAgIC8vIE5PVEU6IG1fbWFpbkZyYW1lIGNhbiBiZSAwIGJlY2F1c2UgaW5pdCgpIGV2ZW50dWFs
bHkgZW5kcyB1cCBjYWxsaW5nCisgICAgLy8gcGFpbnQoKSEgV2ViRnJhbWUgc2VlbXMgdG8gY2F1
c2UgYW4gaW5pdGlhbCBwYWdlIHRvIGJlIGxvYWRlZCwgbWF5YmUKKyAgICAvLyB0aGlzIG91Z2h0
IHRvIGJlIGF2b2lkZWQgYWxzbyBmb3Igc3RhcnQtdXAgc3BlZWQgcmVhc29ucyEKKyAgICBpZiAo
IW1fbWFpbkZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
ID0gbV9tYWluRnJhbWUtPmZyYW1lKCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWUtPnZpZXcoKTsKKworICAgIGlmICghdmlldyB8fCAhZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIW1fd2ViVmlldy0+TG9ja0xvb3Blcigp
KQorICAgICAgICByZXR1cm47CisgICAgQlZpZXcqIG9mZnNjcmVlblZpZXcgPSBtX3dlYlZpZXct
Pm9mZnNjcmVlblZpZXcoKTsKKworICAgIC8vIExvY2sgdGhlIG9mZnNjcmVlbiBiaXRtYXAgd2hp
bGUgd2Ugc3RpbGwgaGF2ZSB0aGUKKyAgICAvLyB3aW5kb3cgbG9ja2VkLiBUaGlzIGNhbm5vdCBk
ZWFkbG9jayBhbmQgbWFrZXMgc3VyZQorICAgIC8vIHRoZSB3aW5kb3cgaXMgbm90IGRlbGV0aW5n
IHRoZSBvZmZzY3JlZW4gdmlldyByaWdodAorICAgIC8vIGFmdGVyIHdlIHVubG9jayBpdCBhbmQg
YmVmb3JlIGxvY2tpbmcgdGhlIGJpdG1hcC4KKyAgICBvZmZzY3JlZW5WaWV3LT5Mb2NrTG9vcGVy
KCk7CisgICAgbV93ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsKKworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCBjb250ZXh0KG9mZnNjcmVlblZpZXcpOworCisgICAgLy9wcmludGYoInJlY3Q6
XHRcdFx0Iik7CisgICAgLy9yZWN0LlByaW50VG9TdHJlYW0oKTsKKyAgICAvL3ByaW50Zigidmlz
aWJsZUNvbnRlbnRSZWN0Olx0Iik7CisgICAgLy9CUmVjdCh2aWV3LT52aXNpYmxlQ29udGVudFJl
Y3QoKSkuUHJpbnRUb1N0cmVhbSgpOworCisgICAgdmlldy0+bGF5b3V0SWZOZWVkZWRSZWN1cnNp
dmUoKTsKKyAgICBvZmZzY3JlZW5WaWV3LT5QdXNoU3RhdGUoKTsKKyAgICB2aWV3LT5wYWludCgm
Y29udGV4dCwgSW50UmVjdChyZWN0KSk7CisgICAgb2Zmc2NyZWVuVmlldy0+UG9wU3RhdGUoKTsK
KyAgICBvZmZzY3JlZW5WaWV3LT5VbmxvY2tMb29wZXIoKTsKKworICAgIC8vIE5vdGlmeSB0aGUg
d2luZG93IHRoYXQgaXQgY2FuIG5vdyBwdWxsIHRoZSBiaXRtYXAgaW4gaXRzIG93biB0aHJlYWQK
KyAgICBtX3dlYlZpZXctPnNldE9mZnNjcmVlblZpZXdDbGVhbihyZWN0LCBpbW1lZGlhdGUpOwor
fQorCisvLyAjcHJhZ21hIG1hcmsgLSBwcml2YXRlCisKK3ZvaWQgV2ViUHJvY2Vzczo6TWVzc2Fn
ZVJlY2VpdmVkKEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hh
dCkgeworICAgICAgICBjYXNlIEhBTkRMRV9TSFVURE9XTjoKK3ByaW50ZigiSEFORExFX1NIVVRE
T1dOXG4iKTsKKyAgICAgICAgICAgIExvb3BlcigpLT5SZW1vdmVIYW5kbGVyKHRoaXMpOworICAg
ICAgICAgICAgZGVsZXRlIHRoaXM7CisgICAgICAgICAgICAvLyBUT0FTVCEKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgY2FzZSBIQU5ETEVfTE9BRF9VUkw6CisgICAgICAgICAgICBoYW5k
bGVMb2FkVVJMKG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSEFO
RExFX0dPX0JBQ0s6CisgICAgICAgICAgICBoYW5kbGVHb0JhY2sobWVzc2FnZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBIQU5ETEVfR09fRk9SV0FSRDoKKyAgICAgICAgICAg
IGhhbmRsZUdvRm9yd2FyZChtZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgSEFORExFX0RSQVc6IHsKKyAgICAgICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOworICAg
ICAgICAgICAgQk1lc3NhZ2VRdWV1ZSogcXVldWUgPSBMb29wZXIoKS0+TWVzc2FnZVF1ZXVlKCk7
CisgICAgICAgICAgICBCUmVjdCB1cGRhdGVSZWN0OworICAgICAgICAgICAgbWVzc2FnZS0+Rmlu
ZFJlY3QoInVwZGF0ZSByZWN0IiwgJnVwZGF0ZVJlY3QpOworICAgICAgICAgICAgd2hpbGUgKEJN
ZXNzYWdlKiBuZXh0TWVzc2FnZSA9IHF1ZXVlLT5GaW5kTWVzc2FnZShtZXNzYWdlLT53aGF0KSkg
eworICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIG1lc3NhZ2U7CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBu
ZXh0TWVzc2FnZTsKKyAgICAgICAgICAgICAgICBxdWV1ZS0+UmVtb3ZlTWVzc2FnZShtZXNzYWdl
KTsKKworICAgICAgICAgICAgICAgIEJSZWN0IHJlY3Q7CisgICAgICAgICAgICAgICAgbWVzc2Fn
ZS0+RmluZFJlY3QoInVwZGF0ZSByZWN0IiwgJnJlY3QpOworICAgICAgICAgICAgICAgIHVwZGF0
ZVJlY3QgPSB1cGRhdGVSZWN0IHwgcmVjdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBh
aW50KHVwZGF0ZVJlY3QsIHRydWUsIGZhbHNlLCB0cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgSEFORExFX0ZSQU1FX1JFU0laRUQ6CisgICAgICAgICAg
ICBza2lwVG9MYXN0TWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAgICAgIGhhbmRsZUZyYW1lUmVz
aXplZChtZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQl9NT1VT
RV9NT1ZFRDoKKyAgICAgICAgICAgIHNraXBUb0xhc3RNZXNzYWdlKG1lc3NhZ2UpOworICAgICAg
ICBjYXNlIEJfTU9VU0VfRE9XTjoKKyAgICAgICAgY2FzZSBCX01PVVNFX1VQOgorICAgICAgICAg
ICAgaGFuZGxlTW91c2VFdmVudChtZXNzYWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEJfTU9VU0VfV0hFRUxfQ0hBTkdFRDoKKyAgICAgICAgICAgIGhhbmRsZU1vdXNlV2hl
ZWxDaGFuZ2VkKG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQl9L
RVlfRE9XTjoKKyAgICAgICAgY2FzZSBCX0tFWV9VUDoKKyAgICAgICAgICAgIGhhbmRsZUtleUV2
ZW50KG1lc3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEJIYW5kbGVyOjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgfQorfQor
Cit2b2lkIFdlYlByb2Nlc3M6OnNraXBUb0xhc3RNZXNzYWdlKEJNZXNzYWdlKiYgbWVzc2FnZSkK
K3sKKyAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICBCTWVzc2FnZVF1ZXVlKiBxdWV1ZSA9IExv
b3BlcigpLT5NZXNzYWdlUXVldWUoKTsKKyAgICB3aGlsZSAoQk1lc3NhZ2UqIG5leHRNZXNzYWdl
ID0gcXVldWUtPkZpbmRNZXNzYWdlKG1lc3NhZ2UtPndoYXQpKSB7CisgICAgICAgIGlmICghZmly
c3QpCisgICAgICAgICAgICBkZWxldGUgbWVzc2FnZTsKKyAgICAgICAgbWVzc2FnZSA9IG5leHRN
ZXNzYWdlOworICAgICAgICBxdWV1ZS0+UmVtb3ZlTWVzc2FnZShtZXNzYWdlKTsKKyAgICAgICAg
Zmlyc3QgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViUHJvY2Vzczo6aGFuZGxlTG9hZFVS
TChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBjb25zdCBjaGFyKiB1cmxTdHJpbmc7
CisgICAgaWYgKG1lc3NhZ2UtPkZpbmRTdHJpbmcoInVybCIsICZ1cmxTdHJpbmcpICE9IEJfT0sp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbWFpbkZyYW1lLT5sb2FkUmVxdWVzdCh1cmxTdHJp
bmcpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZUdvQmFjayhjb25zdCBCTWVzc2FnZSog
bWVzc2FnZSkKK3sKKyAgICBtX21haW5GcmFtZS0+Z29CYWNrKCk7Cit9CisKK3ZvaWQgV2ViUHJv
Y2Vzczo6aGFuZGxlR29Gb3J3YXJkKGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1f
bWFpbkZyYW1lLT5nb0ZvcndhcmQoKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVEcmF3
KGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIEJSZWN0IHJlY3Q7CisgICAgbWVzc2Fn
ZS0+RmluZFJlY3QoInVwZGF0ZSByZWN0IiwgJnJlY3QpOworICAgIHBhaW50KHJlY3QsIHRydWUs
IGZhbHNlLCB0cnVlKTsKK30KKwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVGcmFtZVJlc2l6ZWQo
Y29uc3QgQk1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgZmxvYXQgd2lkdGg7CisgICAgZmxvYXQg
aGVpZ2h0OworICAgIG1lc3NhZ2UtPkZpbmRGbG9hdCgid2lkdGgiLCAmd2lkdGgpOworICAgIG1l
c3NhZ2UtPkZpbmRGbG9hdCgiaGVpZ2h0IiwgJmhlaWdodCk7CisKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBtX21haW5GcmFtZS0+ZnJhbWUoKTsKKworICAgIGZyYW1lLT52aWV3KCktPnJl
c2l6ZSh3aWR0aCArIDEsIGhlaWdodCArIDEpOworICAgIGZyYW1lLT52aWV3KCktPmZvcmNlTGF5
b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKworICAgIG1fd2Vi
Vmlldy0+aW52YWxpZGF0ZSgpOworfQorCit2b2lkIFdlYlByb2Nlc3M6OmhhbmRsZU1vdXNlRXZl
bnQoY29uc3QgQk1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1l
ID0gbV9tYWluRnJhbWUtPmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZS0+dmlldygpIHx8ICFmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50
IGV2ZW50KG1lc3NhZ2UpOworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hhdCkgeworICAgICAgICBj
YXNlIEJfTU9VU0VfRE9XTjoKKyAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJfTU9VU0VfVVA6CisgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRs
ZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEJfTU9VU0VfTU9WRUQ6CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBmcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlTW92ZUV2ZW50KGV2ZW50KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVNb3VzZVdoZWVsQ2hh
bmdlZChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBt
X21haW5GcmFtZS0+ZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5k
b2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQbGF0Zm9ybVdoZWVsRXZlbnQgZXZl
bnQobWVzc2FnZSk7CisgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50
KGV2ZW50KTsKKworICAgIC8vIFRPRE86IFdoeSBkb2VzIHRoaXMgbm90IHRyaWdnZXIgYSByZXBh
aW50IGF1dG9tYXRpY2FsbHk/CisvLyAgICBtX3dlYlZpZXctPmludmFsaWRhdGUoKTsKK30KKwor
dm9pZCBXZWJQcm9jZXNzOjpoYW5kbGVLZXlFdmVudChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBtX21haW5GcmFtZS0+ZnJhbWUoKTsKKyAgICBpZiAo
IWZyYW1lLT52aWV3KCkgfHwgIWZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQobWVzc2FnZSk7CisgICAgZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7CisKKyAgICAvLyBUT0RPOiBXaHkgZG9lcyB0
aGlzIG5vdCB0cmlnZ2VyIGEgcmVwYWludCBhdXRvbWF0aWNhbGx5PworLy8gICAgbV93ZWJWaWV3
LT5pbnZhbGlkYXRlKCk7Cit9CisKSW5kZXg6IFdlYktpdC9oYWlrdS9BUEkvV2ViUHJvY2Vzcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9BUEkvV2ViUHJvY2Vzcy5oCShyZXZpc2lvbiAw
KQorKysgV2ViS2l0L2hhaWt1L0FQSS9XZWJQcm9jZXNzLmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBl
cnN0aXBwaUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNp
Zm5kZWYgV2ViUHJvY2Vzc19oCisjZGVmaW5lIFdlYlByb2Nlc3NfaAorCisjaW5jbHVkZSA8SGFu
ZGxlci5oPgorI2luY2x1ZGUgPFJlY3QuaD4KKyNpbmNsdWRlIDxTdHJpbmcuaD4KKworY2xhc3Mg
V2ViRnJhbWU7CitjbGFzcyBXZWJWaWV3OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgUGFnZTsKK307CisKK2NsYXNzIFdlYlByb2Nlc3MgOiBwdWJsaWMgQkhhbmRsZXIgeworLy8g
ICAgZnJpZW5kIGNsYXNzIFdlYkZyYW1lOworCitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZU9uY2UoKTsKKworICAgIFdlYlByb2Nlc3MoV2ViVmlldyogd2ViVmlldyk7CisKKyAg
ICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHNodXRkb3duKCk7CisKKyAgICB2b2lkIHNldERpc3Bh
dGNoVGFyZ2V0KEJIYW5kbGVyKiBoYW5kbGVyKTsKKworICAgIHZvaWQgbG9hZFVSTChjb25zdCBj
aGFyKiB1cmxTdHJpbmcpOworICAgIHZvaWQgZ29CYWNrKCk7CisgICAgdm9pZCBnb0ZvcndhcmQo
KTsKKyAgICB2b2lkIGRyYXcoY29uc3QgQlJlY3QmIHVwZGF0ZVJlY3QpOworICAgIHZvaWQgZnJh
bWVSZXNpemVkKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOworICAgIHZvaWQgbW91c2VFdmVu
dChjb25zdCBCTWVzc2FnZSogbWVzc2FnZSwgY29uc3QgQlBvaW50JiB3aGVyZSwKKyAgICAgICAg
Y29uc3QgQlBvaW50JiBzY3JlZW5XaGVyZSk7CisgICAgdm9pZCBtb3VzZVdoZWVsQ2hhbmdlZChj
b25zdCBCTWVzc2FnZSogbWVzc2FnZSwKKyAgICAgICAgY29uc3QgQlBvaW50JiB3aGVyZSwgY29u
c3QgQlBvaW50JiBzY3JlZW5XaGVyZSk7CisgICAgdm9pZCBrZXlFdmVudChjb25zdCBCTWVzc2Fn
ZSogbWVzc2FnZSk7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIG9ubHkgc3Vw
cG9zZWQgdG8gYmUgY2FsbGVkIGJ5IHRoZQorICAgIC8vIENocm9tZUNsaWVudEhhaWt1IGFuZCBG
cmFtZUxvYWRlckhhaWt1IGNvZGUhIE5vdCBmcm9tIHdpdGhpbiB0aGUgd2luZG93CisgICAgLy8g
dGhyZWFkIQorICAgIFdlYkZyYW1lKiBtYWluRnJhbWUoKSBjb25zdCB7IHJldHVybiBtX21haW5G
cmFtZTsgfTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlKCkgY29uc3QgeyByZXR1cm4gbV9wYWdl
OyB9CisgICAgV2ViVmlldyogd2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fd2ViVmlldzsgfQor
ICAgICAgICAvLyBOT1RFOiBVc2luZyB0aGUgV2ViVmlldyByZXF1aXJlcyBsb2NraW5nIGl0J3Mg
bG9vcGVyIQorCisgICAgQlJlY3QgY29udGVudHNTaXplKCk7CisgICAgQlJlY3Qgd2luZG93Qm91
bmRzKCk7CisgICAgdm9pZCBzZXRXaW5kb3dCb3VuZHMoY29uc3QgQlJlY3QmIGJvdW5kcyk7Cisg
ICAgQlJlY3Qgdmlld0JvdW5kcygpOworICAgIHZvaWQgc2V0Vmlld0JvdW5kcyhjb25zdCBCUmVj
dCYgYm91bmRzKTsKKyAgICBCU3RyaW5nIG1haW5GcmFtZVRpdGxlKCk7CisgICAgQlN0cmluZyBt
YWluRnJhbWVVUkwoKTsKKworICAgIHZvaWQgcGFpbnQoY29uc3QgQlJlY3QmIHJlY3QsIGJvb2wg
Y29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRlLAorICAgICAgICBib29sIHJlcGFpbnRDb250
ZW50T25seSk7CisKK3ByaXZhdGU6CisgICAgdmlydHVhbCB+V2ViUHJvY2VzcygpOworCisgICAg
dmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSk7CisKKyAgICB2
b2lkIHNraXBUb0xhc3RNZXNzYWdlKEJNZXNzYWdlKiYgbWVzc2FnZSk7CisKKyAgICB2b2lkIGhh
bmRsZUxvYWRVUkwoY29uc3QgQk1lc3NhZ2UqIG1lc3NhZ2UpOworICAgIHZvaWQgaGFuZGxlR29C
YWNrKGNvbnN0IEJNZXNzYWdlKiBtZXNzYWdlKTsKKyAgICB2b2lkIGhhbmRsZUdvRm9yd2FyZChj
b25zdCBCTWVzc2FnZSogbWVzc2FnZSk7CisgICAgdm9pZCBoYW5kbGVEcmF3KGNvbnN0IEJNZXNz
YWdlKiBtZXNzYWdlKTsKKyAgICB2b2lkIGhhbmRsZUZyYW1lUmVzaXplZChjb25zdCBCTWVzc2Fn
ZSogbWVzc2FnZSk7CisgICAgdm9pZCBoYW5kbGVNb3VzZUV2ZW50KGNvbnN0IEJNZXNzYWdlKiBt
ZXNzYWdlKTsKKyAgICB2b2lkIGhhbmRsZU1vdXNlV2hlZWxDaGFuZ2VkKEJNZXNzYWdlKiBtZXNz
YWdlKTsKKyAgICB2b2lkIGhhbmRsZUtleUV2ZW50KEJNZXNzYWdlKiBtZXNzYWdlKTsKKworcHJp
dmF0ZToKKyAgICBib29sIG1faXNJbml0aWFsaXplZDsKKyAgICBib29sIG1faXNMb2FkaW5nOwor
ICAgIGJvb2wgbV9iZWluZ0Rlc3Ryb3llZDsKKworICAgIFdlYlZpZXcqIG1fd2ViVmlldzsKKyAg
ICBXZWJGcmFtZSogbV9tYWluRnJhbWU7CisgICAgV2ViQ29yZTo6UGFnZSogbV9wYWdlOworfTsK
KworI2VuZGlmIC8vIFdlYlByb2Nlc3NfaApJbmRleDogV2ViS2l0L2hhaWt1L0FQSS9XZWJWaWV3
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvaGFpa3UvQVBJL1dlYlZpZXcuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViS2l0L2hhaWt1L0FQSS9XZWJWaWV3LmNwcAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwzMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1v
bi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVz
IDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViVmlldy5oIgorCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisjaW5jbHVkZSAi
V2ViVmlld0NvbnN0YW50cy5oIgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxBbGVydC5oPgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5j
bHVkZSA8Qml0bWFwLmg+CisjaW5jbHVkZSA8UmVnaW9uLmg+CisjaW5jbHVkZSA8V2luZG93Lmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitXZWJWaWV3OjpXZWJWaWV3KGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBCVmlldyhuYW1lLCBCX1dJTExfRFJBVyB8IEJfRlJBTUVfRVZFTlRT
IHwgQl9GVUxMX1VQREFURV9PTl9SRVNJWkUgfCBCX05BVklHQUJMRSkKKyAgICAsIG1fdGV4dE1h
Z25pZmllcigxLjApCisgICAgLCBtX29mZnNjcmVlbkJpdG1hcCgwKQorICAgICwgbV9vZmZzY3Jl
ZW5WaWV3Q2xlYW4oZmFsc2UpCisgICAgLCBtX21haW5UaHJlYWRIYW5kbGVyKG5ldyBXZWJQcm9j
ZXNzKHRoaXMpKQoreworICAgIG1fbWFpblRocmVhZEhhbmRsZXItPmluaXQoKTsKKyAgICAvLyBU
T0RPOiBTaG91bGQgYWRkIHRoaXMgdG8gdGhlICJjdXJyZW50IiBsb29wZXIsIGJ1dCB0aGF0IGxv
b3BlciBuZWVkcyB0bworICAgIC8vIHN0YXkgYXJvdW5kIHJlZ2FyZGxlc3Mgb2Ygd2luZG93cyBv
cGVuaW5nL2Nsb3NpbmcuIEFkZGluZyBpdCB0byB0aGUKKyAgICAvLyBhcHAgbG9vcGVyIGlzIHRo
ZSBzYWZlc3QgYmV0IGZvciBub3cuCisgICAgaWYgKGJlX2FwcC0+TG9jaygpKSB7CisgICAgICAg
IGJlX2FwcC0+QWRkSGFuZGxlcihtX21haW5UaHJlYWRIYW5kbGVyKTsKKyAgICAgICAgYmVfYXBw
LT5VbmxvY2soKTsKKyAgICB9CisKKyAgICBGcmFtZVJlc2l6ZWQoQm91bmRzKCkuV2lkdGgoKSwg
Qm91bmRzKCkuSGVpZ2h0KCkpOworCisgICAgU2V0Vmlld0NvbG9yKEJfVFJBTlNQQVJFTlRfQ09M
T1IpOworfQorCitXZWJWaWV3Ojp+V2ViVmlldygpCit7Cit9CisKK3ZvaWQgV2ViVmlldzo6QXR0
YWNoZWRUb1dpbmRvdygpCit7CisgICAgbV9tYWluVGhyZWFkSGFuZGxlci0+c2V0RGlzcGF0Y2hU
YXJnZXQoV2luZG93KCkpOworfQorCit2b2lkIFdlYlZpZXc6OkRldGFjaGVkRnJvbVdpbmRvdygp
Cit7CisvLyBUT0RPOiBOZWVkcyBsb2NraW5nLgorLy8gICAgbV9tYWluVGhyZWFkSGFuZGxlci0+
c2V0RGlzcGF0Y2hUYXJnZXQoMCk7CisgICAgbV9tYWluVGhyZWFkSGFuZGxlci0+c2h1dGRvd24o
KTsKK30KKwordm9pZCBXZWJWaWV3OjpEcmF3KEJSZWN0IHJlY3QpCit7CisgICAgaWYgKCFtX29m
ZnNjcmVlblZpZXdDbGVhbikgeworICAgICAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5kcmF3KHJl
Y3QpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX29mZnNjcmVlbkJpdG1h
cC0+TG9jaygpKSB7CisgICAgICAgIFNldEhpZ2hDb2xvcigyNTUsIDAsIDApOworICAgICAgICBG
aWxsUmVjdChyZWN0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fb2Zmc2NyZWVu
Vmlldy0+U3luYygpOworICAgIERyYXdCaXRtYXAobV9vZmZzY3JlZW5CaXRtYXAsIG1fb2Zmc2Ny
ZWVuVmlldy0+Qm91bmRzKCksCisgICAgICAgIG1fb2Zmc2NyZWVuVmlldy0+Qm91bmRzKCkpOwor
CisgICAgbV9vZmZzY3JlZW5CaXRtYXAtPlVubG9jaygpOworfQorCit2b2lkIFdlYlZpZXc6OkZy
YW1lUmVzaXplZChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIHJlc2l6ZU9mZnNj
cmVlblZpZXcod2lkdGggKyAxLCBoZWlnaHQgKyAxKTsKKyAgICBtX21haW5UaHJlYWRIYW5kbGVy
LT5mcmFtZVJlc2l6ZWQod2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViVmlldzo6TWVzc2Fn
ZVJlY2VpdmVkKEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hh
dCkgeworICAgIGNhc2UgQl9NT1VTRV9XSEVFTF9DSEFOR0VEOiB7CisgICAgICAgIEJQb2ludCB3
aGVyZTsKKyAgICAgICAgdWludDMyIGJ1dHRvbnM7CisgICAgICAgIEdldE1vdXNlKCZ3aGVyZSwg
JmJ1dHRvbnMpOworICAgICAgICBCUG9pbnQgc2NyZWVuV2hlcmUgPSBDb252ZXJ0VG9TY3JlZW4o
d2hlcmUpOworICAgICAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5tb3VzZVdoZWVsQ2hhbmdlZCht
ZXNzYWdlLCB3aGVyZSwgc2NyZWVuV2hlcmUpOworICAgICAgICAvLyBOT1RFOiBUaGlzIHNvbHZl
cyBhIGJ1ZyBpbiBXZWJLaXQgaXRzZWxmLCBpdCBzaG91bGQgaXNzdWUgYSBtb3VzZQorICAgICAg
ICAvLyBldmVudCB3aGVuIHNjcm9sbGluZyBieSB3aGVlbCBldmVudC4gVGhlIGVmZmVjdHMgb2Yg
dGhlIHRoaXMgYnVnCisgICAgICAgIC8vIGNhbiBiZSB3aXRuZXNzZWQgaW4gU2FmYXJpIGFzIHdl
bGwuCisgICAgICAgIEJNZXNzYWdlIG1vdXNlTWVzc2FnZShCX01PVVNFX01PVkVEKTsKKyAgICAg
ICAgbW91c2VNZXNzYWdlLkFkZFBvaW50KCJiZTp2aWV3X3doZXJlIiwgd2hlcmUpOworICAgICAg
ICBtb3VzZU1lc3NhZ2UuQWRkUG9pbnQoInNjcmVlbl93aGVyZSIsIHNjcmVlbldoZXJlKTsKKyAg
ICAgICAgbW91c2VNZXNzYWdlLkFkZEludDMyKCJidXR0b25zIiwgYnV0dG9ucyk7CisgICAgICAg
IG1vdXNlTWVzc2FnZS5BZGRJbnQzMigibW9kaWZpZXJzIiwgbW9kaWZpZXJzKCkpOworICAgICAg
ICBtX21haW5UaHJlYWRIYW5kbGVyLT5tb3VzZUV2ZW50KCZtb3VzZU1lc3NhZ2UsIHdoZXJlLCBz
Y3JlZW5XaGVyZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEJWaWV3OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKwordm9pZCBXZWJWaWV3OjpNb3VzZU1vdmVkKEJQb2ludCB3aGVyZSwgdWludDMyLCBj
b25zdCBCTWVzc2FnZSopCit7CisgICAgZGlzcGF0Y2hNb3VzZUV2ZW50KHdoZXJlLCBCX01PVVNF
X01PVkVEKTsKK30KKwordm9pZCBXZWJWaWV3OjpNb3VzZURvd24oQlBvaW50IHdoZXJlKQorewor
ICAgIFNldE1vdXNlRXZlbnRNYXNrKEJfUE9JTlRFUl9FVkVOVFMsIEJfTE9DS19XSU5ET1dfRk9D
VVMpOworICAgIGRpc3BhdGNoTW91c2VFdmVudCh3aGVyZSwgQl9NT1VTRV9ET1dOKTsKK30KKwor
dm9pZCBXZWJWaWV3OjpNb3VzZVVwKEJQb2ludCB3aGVyZSkKK3sKKyAgICBkaXNwYXRjaE1vdXNl
RXZlbnQod2hlcmUsIEJfTU9VU0VfVVApOworfQorCit2b2lkIFdlYlZpZXc6OktleURvd24oY29u
c3QgY2hhciosIGludDMyKQoreworICAgIGRpc3BhdGNoS2V5RXZlbnQoQl9LRVlfRE9XTik7Cit9
CisKK3ZvaWQgV2ViVmlldzo6S2V5VXAoY29uc3QgY2hhciosIGludDMyKQoreworICAgIGRpc3Bh
dGNoS2V5RXZlbnQoQl9LRVlfVVApOworfQorCit2b2lkIFdlYlZpZXc6OnNldEJvdW5kcyhCUmVj
dCByZWN0KQoreworICAgQk1lc3NhZ2UgbWVzc2FnZShSRVNJWklOR19SRVFVRVNURUQpOworICAg
bWVzc2FnZS5BZGRSZWN0KCJyZWN0IiwgcmVjdCk7CisgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZt
ZXNzYWdlKTsKK30KKworQlJlY3QgV2ViVmlldzo6Y29udGVudHNTaXplKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9tYWluVGhyZWFkSGFuZGxlci0+Y29udGVudHNTaXplKCk7Cit9CisKK0JTdHJp
bmcgV2ViVmlldzo6bWFpbkZyYW1lVGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX21haW5U
aHJlYWRIYW5kbGVyLT5tYWluRnJhbWVUaXRsZSgpOworfQorCitCU3RyaW5nIFdlYlZpZXc6Om1h
aW5GcmFtZVVSTCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbWFpblRocmVhZEhhbmRsZXItPm1h
aW5GcmFtZVVSTCgpOworfQorCit2b2lkIFdlYlZpZXc6OmxvYWRSZXF1ZXN0KGNvbnN0IGNoYXIq
IHVybFN0cmluZykKK3sKKyAgICBtX21haW5UaHJlYWRIYW5kbGVyLT5sb2FkVVJMKHVybFN0cmlu
Zyk7Cit9CisKK3ZvaWQgV2ViVmlldzo6Z29CYWNrKCkKK3sKKyAgICBtX21haW5UaHJlYWRIYW5k
bGVyLT5nb0JhY2soKTsKK30KKwordm9pZCBXZWJWaWV3Ojpnb0ZvcndhcmQoKQoreworICAgIG1f
bWFpblRocmVhZEhhbmRsZXItPmdvRm9yd2FyZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFRv
b2xiYXJzVmlzaWJsZShib29sIGZsYWcpCit7CisgICAgbV90b29sYmFyc1Zpc2libGUgPSBmbGFn
OworCisgICAgQk1lc3NhZ2UgbWVzc2FnZShUT09MQkFSU19WSVNJQklMSVRZKTsKKyAgICBtZXNz
YWdlLkFkZEJvb2woImZsYWciLCBmbGFnKTsKKyAgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZtZXNz
YWdlKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTdGF0dXNiYXJWaXNpYmxlKGJvb2wgZmxhZykK
K3sKKyAgICBtX3N0YXR1c2JhclZpc2libGUgPSBmbGFnOworCisgICAgQk1lc3NhZ2UgbWVzc2Fn
ZShTVEFUVVNCQVJfVklTSUJJTElUWSk7CisgICAgbWVzc2FnZS5BZGRCb29sKCJmbGFnIiwgZmxh
Zyk7CisgICAgYmVfYXBwLT5Qb3N0TWVzc2FnZSgmbWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViVmll
dzo6c2V0TWVudWJhclZpc2libGUoYm9vbCBmbGFnKQoreworICAgIG1fbWVudWJhclZpc2libGUg
PSBmbGFnOworCisgICAgQk1lc3NhZ2UgbWVzc2FnZShNRU5VQkFSX1ZJU0lCSUxJVFkpOworICAg
IG1lc3NhZ2UuQWRkQm9vbCgiZmxhZyIsIGZsYWcpOworICAgIGJlX2FwcC0+UG9zdE1lc3NhZ2Uo
Jm1lc3NhZ2UpOworfQorCit2b2lkIFdlYlZpZXc6OnNldFJlc2l6YWJsZShib29sIGZsYWcpCit7
CisgICAgQk1lc3NhZ2UgbWVzc2FnZShTRVRfUkVTSVpBQkxFKTsKKyAgICBtZXNzYWdlLkFkZEJv
b2woImZsYWciLCBmbGFnKTsKKyAgICBiZV9hcHAtPlBvc3RNZXNzYWdlKCZtZXNzYWdlKTsKK30K
Kwordm9pZCBXZWJWaWV3OjpjbG9zZVdpbmRvdygpCit7CisgICAgYmVfYXBwLT5Qb3N0TWVzc2Fn
ZShCX1FVSVRfUkVRVUVTVEVEKTsKK30KKwordm9pZCBXZWJWaWV3OjpzZXRTdGF0dXNUZXh0KGNv
bnN0IEJTdHJpbmcmIHRleHQpCit7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShTRVRfU1RBVFVTX1RF
WFQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ0ZXh0IiwgdGV4dCk7CisgICAgYmVfYXBwLT5Q
b3N0TWVzc2FnZSgmbWVzc2FnZSk7Cit9CisKK3ZvaWQgV2ViVmlldzo6bGlua0hvdmVyZWQoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IFN0cmluZyYgY29udGVu
dCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIFdlYlZpZXc6OnNldE9mZnNj
cmVlblZpZXdDbGVhbihCUmVjdCBjbGVhblJlY3QsIGJvb2wgaW1tZWRpYXRlKQoreworICAgIGlm
IChMb2NrTG9vcGVyKCkpIHsKKyAgICAgICAgbV9vZmZzY3JlZW5WaWV3Q2xlYW4gPSB0cnVlOwor
ICAgICAgICBpZiAoaW1tZWRpYXRlKQorICAgICAgICAgICAgRHJhdyhjbGVhblJlY3QpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBJbnZhbGlkYXRlKGNsZWFuUmVjdCk7CisgICAgICAgIFVu
bG9ja0xvb3BlcigpOworICAgIH0KK30KKwordm9pZCBXZWJWaWV3OjppbnZhbGlkYXRlKCkKK3sK
KyAgICBpZiAoTG9ja0xvb3BlcigpKSB7CisgICAgICAgIG1fb2Zmc2NyZWVuVmlld0NsZWFuID0g
ZmFsc2U7CisgICAgICAgIEludmFsaWRhdGUoKTsKKyAgICAgICAgVW5sb2NrTG9vcGVyKCk7Cisg
ICAgfQorfQorCisvLyAjcHJhZ21hIG1hcmsgLSBwcml2YXRlCisKK3ZvaWQgV2ViVmlldzo6cmVz
aXplT2Zmc2NyZWVuVmlldyhpbnQgd2lkdGgsIGludCBoZWlnaHQpCit7CisgICAgQlJlY3QgYm91
bmRzKDAsIDAsIHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSk7CisgICAgaWYgKG1fb2Zmc2NyZWVuQml0
bWFwKSB7CisgICAgICAgIG1fb2Zmc2NyZWVuQml0bWFwLT5Mb2NrKCk7CisgICAgICAgIGlmICht
X29mZnNjcmVlbkJpdG1hcC0+Qm91bmRzKCkuQ29udGFpbnMoYm91bmRzKSkgeworICAgICAgICAg
ICAgLy8gSnVzdCByZXNpemUgdGhlIHZpZXcgYW5kIGNsZWFyIHRoZSBleHBvc2VkIHBhcnRzLCBi
dXQgbmV2ZXIKKyAgICAgICAgICAgIC8vIHNocmluayB0aGUgYml0bWFwKS4KKyAgICAgICAgICAg
IEJSZWN0IG9sZFZpZXdCb3VuZHMobV9vZmZzY3JlZW5WaWV3LT5Cb3VuZHMoKSk7CisgICAgICAg
ICAgICBtX29mZnNjcmVlblZpZXctPlJlc2l6ZVRvKHdpZHRoIC0gMSwgaGVpZ2h0IC0gMSk7Cisg
ICAgICAgICAgICBCUmVnaW9uIGV4cG9zZWQobV9vZmZzY3JlZW5WaWV3LT5Cb3VuZHMoKSk7Cisg
ICAgICAgICAgICBleHBvc2VkLkV4Y2x1ZGUob2xkVmlld0JvdW5kcyk7CisgICAgICAgICAgICBt
X29mZnNjcmVlblZpZXctPkZpbGxSZWdpb24oJmV4cG9zZWQsIEJfU09MSURfTE9XKTsKKyAgICAg
ICAgICAgIG1fb2Zmc2NyZWVuQml0bWFwLT5VbmxvY2soKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICBCQml0bWFwKiBvbGRCaXRtYXAgPSBtX29mZnNjcmVlbkJp
dG1hcDsKKyAgICBCVmlldyogb2xkVmlldyA9IG1fb2Zmc2NyZWVuVmlldzsKKworICAgIG1fb2Zm
c2NyZWVuQml0bWFwID0gbmV3IEJCaXRtYXAoYm91bmRzLCBCX1JHQjMyLCB0cnVlKTsKKyAgICBp
ZiAobV9vZmZzY3JlZW5CaXRtYXAtPkluaXRDaGVjaygpICE9IEJfT0spIHsKKyAgICAgICAgQkFs
ZXJ0KiBhbGVydCA9IG5ldyBCQWxlcnQoIkludGVybmFsIGVycm9yIiwgIlVuYWJsZSB0byBjcmVh
dGUgb2ZmLXNjcmVlbiBiaXRtYXAgZm9yIFdlYktpdCBjb250ZW50cy4iLCAiT0siKTsKKyAgICAg
ICAgYWxlcnQtPkdvKCk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIG1fb2Zmc2NyZWVu
VmlldyA9IG5ldyBCVmlldyhib3VuZHMsICJXZWJLaXQgb2Zmc2NyZWVuIHZpZXciLCAwLCAwKTsK
KyAgICBtX29mZnNjcmVlbkJpdG1hcC0+TG9jaygpOworICAgIG1fb2Zmc2NyZWVuQml0bWFwLT5B
ZGRDaGlsZChtX29mZnNjcmVlblZpZXcpOworCisgICAgaWYgKG9sZEJpdG1hcCkgeworICAgICAg
ICAvLyBUcmFuc2ZlciB0aGUgb2xkIGJpdG1hcCBjb250ZW50cyAoanVzdCB0aGUgdmlzaWJsZSBw
YXJ0KSBhbmQKKyAgICAgICAgLy8gY2xlYXIgdGhlIHJlc3QuCisgICAgICAgIEJSZWdpb24gcmVn
aW9uKG1fb2Zmc2NyZWVuVmlldy0+Qm91bmRzKCkpOworICAgICAgICBCUmVjdCBvbGRWaWV3Qm91
bmRzID0gb2xkVmlldy0+Qm91bmRzKCk7CisgICAgICAgIHJlZ2lvbi5FeGNsdWRlKG9sZFZpZXdC
b3VuZHMpOworICAgICAgICBtX29mZnNjcmVlblZpZXctPkRyYXdCaXRtYXAob2xkQml0bWFwLCBv
bGRWaWV3Qm91bmRzLCBvbGRWaWV3Qm91bmRzKTsKKyAgICAgICAgbV9vZmZzY3JlZW5WaWV3LT5G
aWxsUmVnaW9uKCZyZWdpb24sIEJfU09MSURfTE9XKTsKKyAgICAgICAgZGVsZXRlIG9sZEJpdG1h
cDsKKyAgICAgICAgICAgIC8vIFRha2VzIGNhcmUgb2Ygb2xkIG1fb2Zmc2NyZWVuVmlldyB0b28u
CisgICAgfQorCisgICAgbV9vZmZzY3JlZW5CaXRtYXAtPlVubG9jaygpOworfQorCit2b2lkIFdl
YlZpZXc6OmRpc3BhdGNoTW91c2VFdmVudChjb25zdCBCUG9pbnQmIHdoZXJlLCB1aW50MzIgc2Fu
aXR5V2hhdCkKK3sKKyAgICBCTWVzc2FnZSogbWVzc2FnZSA9IExvb3BlcigpLT5DdXJyZW50TWVz
c2FnZSgpOworICAgIGlmICghbWVzc2FnZSB8fCBtZXNzYWdlLT53aGF0ICE9IHNhbml0eVdoYXQp
CisgICAgICAgIHJldHVybjsKKworICAgIG1fbWFpblRocmVhZEhhbmRsZXItPm1vdXNlRXZlbnQo
bWVzc2FnZSwgd2hlcmUsIENvbnZlcnRUb1NjcmVlbih3aGVyZSkpOworfQorCit2b2lkIFdlYlZp
ZXc6OmRpc3BhdGNoS2V5RXZlbnQodWludDMyIHNhbml0eVdoYXQpCit7CisgICAgQk1lc3NhZ2Uq
IG1lc3NhZ2UgPSBMb29wZXIoKS0+Q3VycmVudE1lc3NhZ2UoKTsKKyAgICBpZiAoIW1lc3NhZ2Ug
fHwgbWVzc2FnZS0+d2hhdCAhPSBzYW5pdHlXaGF0KQorICAgICAgICByZXR1cm47CisKKyAgICBt
X21haW5UaHJlYWRIYW5kbGVyLT5rZXlFdmVudChtZXNzYWdlKTsKK30KKwpJbmRleDogV2ViS2l0
L2hhaWt1L0FQSS9XZWJWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L0FQSS9XZWJW
aWV3LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvQVBJL1dlYlZpZXcuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1l
IFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIFN0
ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisKKyNpZm5kZWYgV2ViVmlld19oCisjZGVmaW5lIFdlYlZpZXdfaAorCisj
aW5jbHVkZSA8U3RyaW5nLmg+CisjaW5jbHVkZSA8Vmlldy5oPgorCitjbGFzcyBXZWJQcm9jZXNz
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgU3RyaW5nOworfTsKKworY2xhc3Mg
V2ViVmlldyA6IHB1YmxpYyBCVmlldyB7CitwdWJsaWM6CisgICAgV2ViVmlldyhjb25zdCBjaGFy
KiBuYW1lKTsKKyAgICB+V2ViVmlldygpOworCisgICAgdmlydHVhbCB2b2lkIEF0dGFjaGVkVG9X
aW5kb3coKTsKKyAgICB2aXJ0dWFsIHZvaWQgRGV0YWNoZWRGcm9tV2luZG93KCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgRHJhdyhCUmVjdCk7CisgICAgdmlydHVhbCB2b2lkIEZyYW1lUmVzaXplZChm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKKyAgICB2aXJ0dWFsIHZvaWQgTWVzc2FnZVJlY2Vp
dmVkKEJNZXNzYWdlKik7CisKKyAgICB2aXJ0dWFsIHZvaWQgTW91c2VNb3ZlZChCUG9pbnQsIHVp
bnQzMiwgY29uc3QgQk1lc3NhZ2UqKTsKKyAgICB2aXJ0dWFsIHZvaWQgTW91c2VEb3duKEJQb2lu
dCk7CisgICAgdmlydHVhbCB2b2lkIE1vdXNlVXAoQlBvaW50KTsKKworICAgIHZpcnR1YWwgdm9p
ZCBLZXlEb3duKGNvbnN0IGNoYXIqLCBpbnQzMik7CisgICAgdmlydHVhbCB2b2lkIEtleVVwKGNv
bnN0IGNoYXIqLCBpbnQzMik7CisKKyAgICBXZWJQcm9jZXNzKiB3ZWJQcm9jZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9tYWluVGhyZWFkSGFuZGxlcjsgfQorCisgICAgdm9pZCBzZXRCb3VuZHMoQlJl
Y3QpOworICAgIEJSZWN0IGNvbnRlbnRzU2l6ZSgpIGNvbnN0OworCisgICAgQlN0cmluZyBtYWlu
RnJhbWVUaXRsZSgpIGNvbnN0OworICAgIEJTdHJpbmcgbWFpbkZyYW1lVVJMKCkgY29uc3Q7CisK
KyAgICB2b2lkIGxvYWRSZXF1ZXN0KGNvbnN0IGNoYXIqIHVybFN0cmluZyk7CisgICAgdm9pZCBn
b0JhY2soKTsKKyAgICB2b2lkIGdvRm9yd2FyZCgpOworCisgICAgdm9pZCBzZXRUb29sYmFyc1Zp
c2libGUoYm9vbCk7CisgICAgYm9vbCBhcmVUb29sYmFyc1Zpc2libGUoKSBjb25zdCB7IHJldHVy
biBtX3Rvb2xiYXJzVmlzaWJsZTsgfQorCisgICAgdm9pZCBzZXRTdGF0dXNiYXJWaXNpYmxlKGJv
b2wpOworICAgIGJvb2wgaXNTdGF0dXNiYXJWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
dXNiYXJWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldE1lbnViYXJWaXNpYmxlKGJvb2wpOworICAg
IGJvb2wgaXNNZW51YmFyVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVudWJhclZpc2libGU7
IH0KKworICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOworICAgIHZvaWQgY2xvc2VXaW5kb3co
KTsKKyAgICB2b2lkIHNldFN0YXR1c1RleHQoY29uc3QgQlN0cmluZyYpOworICAgIHZvaWQgbGlu
a0hvdmVyZWQoY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwK
KyAgICAgICAgY29uc3QgV2ViQ29yZTo6U3RyaW5nJik7CisKKyAgICBCVmlldyogb2Zmc2NyZWVu
VmlldygpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2NyZWVuVmlldzsgfQorICAgIHZvaWQgc2V0T2Zm
c2NyZWVuVmlld0NsZWFuKEJSZWN0IGNsZWFuUmVjdCwgYm9vbCBpbW1lZGlhdGUpOworICAgIHZv
aWQgaW52YWxpZGF0ZSgpOworICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIHJlc2l6ZU9mZnNjcmVl
blZpZXcoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKyAgICB2b2lkIGRpc3BhdGNoTW91c2VFdmVu
dChjb25zdCBCUG9pbnQmIHdoZXJlLCB1aW50MzIgc2FuaXR5V2hhdCk7CisgICAgdm9pZCBkaXNw
YXRjaEtleUV2ZW50KHVpbnQzMiBzYW5pdHlXaGF0KTsKKworcHJpdmF0ZToKKyAgICBmbG9hdCBt
X3RleHRNYWduaWZpZXI7CisKKyAgICBib29sIG1fdG9vbGJhcnNWaXNpYmxlOworICAgIGJvb2wg
bV9zdGF0dXNiYXJWaXNpYmxlOworICAgIGJvb2wgbV9tZW51YmFyVmlzaWJsZTsKKworICAgIEJC
aXRtYXAqIG1fb2Zmc2NyZWVuQml0bWFwOworICAgIEJWaWV3KiBtX29mZnNjcmVlblZpZXc7Cisg
ICAgYm9vbCBtX29mZnNjcmVlblZpZXdDbGVhbjsKKworICAgIFdlYlByb2Nlc3MqIG1fbWFpblRo
cmVhZEhhbmRsZXI7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld19oCkluZGV4OiBXZWJLaXQvaGFp
a3UvQVBJL1dlYlZpZXdDb25zdGFudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvaGFpa3UvQVBJ
L1dlYlZpZXdDb25zdGFudHMuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9oYWlrdS9BUEkvV2Vi
Vmlld0NvbnN0YW50cy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld0NvbnN0YW50
c19oCisjZGVmaW5lIFdlYlZpZXdDb25zdGFudHNfaAorCitlbnVtIHsKKyAgICBMT0FEX09OTE9B
RF9IQU5ETEUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzAwLAorICAgIExPQURf
TkVHT0NJQVRJTkcgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDEsCisgICAg
VElUTEVfQ0hBTkdFRCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMwMiwK
KyAgICBMT0FEX1RSQU5TRkVSUklORyA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MzAzLAorICAgIExPQURfRE9DX0NPTVBMRVRFRCA9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAzMDQsCisgICAgTE9BRF9ETF9DT01QTEVURUQgPSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMwNSwKKyAgICBMT0FEX0ZBSUxFRCA9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMzA2LAorICAgIExPQURfRklOSVNIRUQgPSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAzMDcsCisgICAgTkVXX1dJTkRPV19SRVFVRVNURUQgPSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDMwOCwKKyAgICBOQVZJR0FUSU9OX1JFUVVFU1RFRCA9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzA5LAorICAgIEpBVkFTQ1JJUFRfV0lORE9X
X09CSkVDVF9DTEVBUkVEID0gICAgICAgICAgICAgICAgICAzMTAKK307CisKK2VudW0geworICAg
IFdlYktpdEVycm9yQ2Fubm90U2hvd01JTUVUeXBlID0gICAgICAgICAgICAgICAgICAgICAxMDAs
CisgICAgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMID0gICAgICAgICAgICAgICAgICAgICAgICAg
IDEwMSwKKyAgICBXZWJLaXRFcnJvckZyYW1lTG9hZEludGVycnVwdGVkQnlQb2xpY3lDaGFuZ2Ug
PSAgICAgMTAyLAorICAgIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQgPSAgICAg
ICAgICAgICAgICAxMDMsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luID0gICAgICAg
ICAgICAgICAgICAgICAgIDIwMCwKKyAgICBXZWJLaXRFcnJvckNhbm5vdExvYWRQbHVnSW4gPSAg
ICAgICAgICAgICAgICAgICAgICAgMjAxLAorICAgIFdlYktpdEVycm9ySmF2YVVuYXZhaWxhYmxl
ID0gICAgICAgICAgICAgICAgICAgICAgICAyMDIKK307CisKK2VudW0geworICAgIFRPT0xCQVJT
X1ZJU0lCSUxJVFkgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0MDEsCisgICAgU1RB
VFVTQkFSX1ZJU0lCSUxJVFkgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwMiwKKyAg
ICBNRU5VQkFSX1ZJU0lCSUxJVFkgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDAz
LAorICAgIFNFVF9SRVNJWkFCTEUgPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA0MDUsCisgICAgU0VUX1NUQVRVU19URVhUID0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDQwNiwKKyAgICBSRVNJWklOR19SRVFVRVNURUQgPSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgNDA3Cit9OworCisjZW5kaWYgLy8gV2ViVmlld0NvbnN0YW50c19oCkluZGV4
OiBXZWJLaXQvaGFpa3UvQVBJL1dlYlZpZXdQcml2YXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2hhaWt1L0FQSS9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L2hhaWt1
L0FQSS9XZWJWaWV3UHJpdmF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNv
bT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAz
LiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBXZWJWaWV3UHJpdmF0
ZV9oCisjZGVmaW5lIFdlYlZpZXdQcml2YXRlX2gKKworI2luY2x1ZGUgIlBhZ2UuaCIKKworY2xh
c3MgV2ViVmlld1ByaXZhdGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2ViVmlld1ByaXZhdGUo
KQorICAgICAgICAgICAgOiBwYWdlKDApCisgICAgICAgIHt9CisKKyAgICAgICAgV2ViQ29yZTo6
UGFnZSogcGFnZTsKK307CisKKyNlbmRpZiAvLyBXZWJWaWV3UHJpdmF0ZV9oCkluZGV4OiBXZWJL
aXQvaGFpa3UvQVBJL1dlYlZpZXdXaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlr
dS9BUEkvV2ViVmlld1dpbmRvdy5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvQVBJ
L1dlYlZpZXdXaW5kb3cuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBBbmRyZWEgQW56YW5pIDxhbmRyZWEuYW56YW5pQGdtYWlsLmNv
bT4KKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21h
aWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1l
QGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVwaGFuIEHDn211cyA8c3VwZXJz
dGlwcGlAZ214LmRlPgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYlZpZXdXaW5kb3cuaCIKKworI2luY2x1ZGUgIldl
YlZpZXcuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q29uc3RhbnRzLmgiCisKKyNpbmNsdWRlIDxBcHBs
aWNhdGlvbi5oPgorI2luY2x1ZGUgPEJ1dHRvbi5oPgorI2luY2x1ZGUgPEdyaWRMYXlvdXRCdWls
ZGVyLmg+CisjaW5jbHVkZSA8R3JvdXBMYXlvdXQuaD4KKyNpbmNsdWRlIDxHcm91cExheW91dEJ1
aWxkZXIuaD4KKyNpbmNsdWRlIDxTdHJpbmdWaWV3Lmg+CisjaW5jbHVkZSA8VGV4dENvbnRyb2wu
aD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitX
ZWJWaWV3V2luZG93OjpXZWJWaWV3V2luZG93KEJSZWN0IGZyYW1lLCBjb25zdCBjaGFyKiBuYW1l
LCB3aW5kb3dfbG9vayBsb29rLAorICAgICAgICB3aW5kb3dfZmVlbCBmZWVsLCB1aW50MzIgZmxh
Z3MsIHVpbnQzMiB3b3Jrc3BhY2UpCisgICAgOiBCV2luZG93KGZyYW1lLCBuYW1lLCBsb29rLCBm
ZWVsLCBmbGFncywgd29ya3NwYWNlKQorICAgICwgbV93ZWJWaWV3KG5ldyBXZWJWaWV3KCJ3ZWJf
dmlldyIpKQoreworICAgIFNldExheW91dChuZXcgQkdyb3VwTGF5b3V0KEJfSE9SSVpPTlRBTCkp
OworfQorCitXZWJWaWV3V2luZG93Ojp+V2ViVmlld1dpbmRvdygpCit7CisgICAgLy8gRG8gdGhp
cyBoZXJlLCBzbyBXZWJLaXQgdGVhciBkb3duIGhhcHBlbnMgZWFybGllci4KKyAgICBtX3dlYlZp
ZXctPlJlbW92ZVNlbGYoKTsKKyAgICBkZWxldGUgbV93ZWJWaWV3OworfQorCit2b2lkIFdlYlZp
ZXdXaW5kb3c6Ok1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBzd2l0
Y2ggKG1lc3NhZ2UtPndoYXQpIHsKKyAgICAgICAgY2FzZSBMT0FEX09OTE9BRF9IQU5ETEU6Cisg
ICAgICAgICAgICBwcmludGYoIkxPQURfT05MT0FEX0hBTkRMRVxuIik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBMT0FEX0RMX0NPTVBMRVRFRDoKKyAgICAgICAgICAgIHByaW50
ZigiTE9BRF9ETF9DT01QTEVURURcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgTE9BRF9ET0NfQ09NUExFVEVEOgorICAgICAgICAgICAgcHJpbnRmKCJMT0FEX0RPQ19DT01Q
TEVURURcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSkFWQVNDUklQVF9X
SU5ET1dfT0JKRUNUX0NMRUFSRUQ6CisgICAgICAgICAgICBwcmludGYoIkpBVkFTQ1JJUFRfV0lO
RE9XX09CSkVDVF9DTEVBUkVEXG4iKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE5BVklHQVRJT05fUkVRVUVTVEVEOiB7CisgICAgICAgICAgICBCU3RyaW5nIHVybDsKKyAgICAg
ICAgICAgIGlmIChtZXNzYWdlLT5GaW5kU3RyaW5nKCJ1cmwiLCAmdXJsKSA9PSBCX09LKQorICAg
ICAgICAgICAgICAgIG5hdmlnYXRpb25SZXF1ZXN0ZWQodXJsKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgTkVXX1dJTkRPV19SRVFVRVNURUQ6CisgICAgICAg
ICAgICBwcmludGYoIk5FV19XSU5ET1dfUkVRVUVTVEVEXG4iKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIExPQURfTkVHT0NJQVRJTkc6IHsKKyAgICAgICAgICAgIEJTdHJpbmcg
dXJsOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkZpbmRTdHJpbmcoInVybCIsICZ1cmwpID09
IEJfT0spCisgICAgICAgICAgICAgICAgbG9hZE5lZ29jaWF0aW5nKHVybCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIExPQURfVFJBTlNGRVJSSU5HOiB7Cisg
ICAgICAgICAgICBCU3RyaW5nIHVybDsKKyAgICAgICAgICAgIGlmIChtZXNzYWdlLT5GaW5kU3Ry
aW5nKCJ1cmwiLCAmdXJsKSA9PSBCX09LKQorICAgICAgICAgICAgICAgIGxvYWRUcmFuc2Zlcmlu
Zyh1cmwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBMT0FE
X0ZBSUxFRDogeworICAgICAgICAgICAgQlN0cmluZyB1cmw7CisgICAgICAgICAgICBpZiAobWVz
c2FnZS0+RmluZFN0cmluZygidXJsIiwgJnVybCkgPT0gQl9PSykKKyAgICAgICAgICAgICAgICBs
b2FkRmFpbGVkKHVybCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIExPQURfRklOSVNIRUQ6IHsKKyAgICAgICAgICAgIEJTdHJpbmcgdGl0bGU7CisgICAgICAg
ICAgICBpZiAobWVzc2FnZS0+RmluZFN0cmluZygidXJsIiwgJnRpdGxlKSA9PSBCX09LKQorICAg
ICAgICAgICAgICAgIGxvYWRGaW5pc2hlZCh0aXRsZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIFRJVExFX0NIQU5HRUQ6IHsKKyAgICAgICAgICAgIEJTdHJp
bmcgdGl0bGU7CisgICAgICAgICAgICBpZiAobWVzc2FnZS0+RmluZFN0cmluZygidGl0bGUiLCAm
dGl0bGUpID09IEJfT0spCisgICAgICAgICAgICAgICAgdGl0bGVDaGFuZ2VkKHRpdGxlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNhc2UgUkVTSVpJTkdfUkVRVUVT
VEVEOiB7CisgICAgICAgICAgICBCUmVjdCByZWN0OworICAgICAgICAgICAgaWYgKG1lc3NhZ2Ut
PkZpbmRSZWN0KCJyZWN0IiwgJnJlY3QpID09IEJfT0spCisgICAgICAgICAgICAgICAgcmVzaXpl
UmVxdWVzdGVkKHJlY3QuV2lkdGgoKSwgcmVjdC5IZWlnaHQoKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBjYXNlIFNFVF9TVEFUVVNfVEVYVDogeworICAgICAgICAg
ICAgQlN0cmluZyB0ZXh0OworICAgICAgICAgICAgaWYgKG1lc3NhZ2UtPkZpbmRTdHJpbmcoInRl
eHQiLCAmdGV4dCkgPT0gQl9PSykKKyAgICAgICAgICAgICAgICBzdGF0dXNDaGFuZ2VkKHRleHQp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEJfTU9VU0Vf
V0hFRUxfQ0hBTkdFRDoKKyAgICAgICAgICAgIG1fd2ViVmlldy0+TWVzc2FnZVJlY2VpdmVkKG1l
c3NhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBCV2luZG93OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6bmF2aWdhdGlvblJlcXVlc3RlZChjb25z
dCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6bmV3V2luZG93UmVx
dWVzdGVkKCkKK3sKK30KKwordm9pZCBXZWJWaWV3V2luZG93Ojpsb2FkTmVnb2NpYXRpbmcoY29u
c3QgQlN0cmluZyYgdXJsKQoreworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OmxvYWRUcmFuc2Zl
cmluZyhjb25zdCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6bG9h
ZEZhaWxlZChjb25zdCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3ZvaWQgV2ViVmlld1dpbmRvdzo6
bG9hZEZpbmlzaGVkKGNvbnN0IEJTdHJpbmcmIHVybCkKK3sKK30KKwordm9pZCBXZWJWaWV3V2lu
ZG93Ojp0aXRsZUNoYW5nZWQoY29uc3QgQlN0cmluZyYgdGl0bGUpCit7CisgICAgU2V0VGl0bGUo
dGl0bGUuU3RyaW5nKCkpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnJlc2l6ZVJlcXVlc3Rl
ZChmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQoreworICAgIFJlc2l6ZVRvKHdpZHRoLCBoZWln
aHQpOworfQorCit2b2lkIFdlYlZpZXdXaW5kb3c6OnN0YXR1c0NoYW5nZWQoY29uc3QgQlN0cmlu
ZyYgc3RhdHVzVGV4dCkKK3sKK30KKwpJbmRleDogV2ViS2l0L2hhaWt1L0FQSS9XZWJWaWV3V2lu
ZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L0FQSS9XZWJWaWV3V2luZG93LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvQVBJL1dlYlZpZXdXaW5kb3cuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBSeWFuIExlYXZl
bmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGlt
ZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViVmlld1dpbmRvd19oCisjZGVmaW5lIFdlYlZpZXdXaW5k
b3dfaAorCisjaW5jbHVkZSA8V2luZG93Lmg+CisKK2NsYXNzIFdlYlZpZXc7CisKK2NsYXNzIFdl
YlZpZXdXaW5kb3cgOiBwdWJsaWMgQldpbmRvdyB7CitwdWJsaWM6CisgICAgV2ViVmlld1dpbmRv
dyhCUmVjdCBmcmFtZSwgY29uc3QgY2hhciogbmFtZSwgd2luZG93X2xvb2sgbG9vaywKKyAgICAg
ICAgd2luZG93X2ZlZWwgZmVlbCwgdWludDMyIGZsYWdzLAorICAgICAgICB1aW50MzIgd29ya3Nw
YWNlID0gQl9DVVJSRU5UX1dPUktTUEFDRSk7CisgICAgdmlydHVhbCB+V2ViVmlld1dpbmRvdygp
OworCisgICAgdmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSk7
CisKKyAgICBXZWJWaWV3KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV93ZWJWaWV3OyB9CisK
KyAgICAvLyBEZXJpdmVkIHdpbmRvd3Mgc2hvdWxkIGltcGxlbWVudCB0aGlzIG5vdGlmaWNhdGlv
biBBUEkKKyAgICB2aXJ0dWFsIHZvaWQgbmF2aWdhdGlvblJlcXVlc3RlZChjb25zdCBCU3RyaW5n
JiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBuZXdXaW5kb3dSZXF1ZXN0ZWQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgbG9hZE5lZ29jaWF0aW5nKGNvbnN0IEJTdHJpbmcmIHVybCk7CisgICAgdmlydHVh
bCB2b2lkIGxvYWRUcmFuc2ZlcmluZyhjb25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwg
dm9pZCBsb2FkRmFpbGVkKGNvbnN0IEJTdHJpbmcmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIGxv
YWRGaW5pc2hlZChjb25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCB0aXRsZUNo
YW5nZWQoY29uc3QgQlN0cmluZyYgdGl0bGUpOworICAgIHZpcnR1YWwgdm9pZCByZXNpemVSZXF1
ZXN0ZWQoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCk7CisgICAgdmlydHVhbCAgICB2b2lkIHN0
YXR1c0NoYW5nZWQoY29uc3QgQlN0cmluZyYgc3RhdHVzKTsKKworcHJpdmF0ZToKKyAgICBXZWJW
aWV3KiBtX3dlYlZpZXc7Cit9OworCisjZW5kaWYgLy8gV2ViVmlld1dpbmRvd19oCisKSW5kZXg6
IFdlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyQXBwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlckFwcC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVh
dmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3Rl
cGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXVuY2hlckFwcC5o
IgorCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
CisjaW5jbHVkZSAiTGF1bmNoZXJXaW5kb3cuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCisj
aW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdDb25zdGFudHMuaCIKKworI2lu
Y2x1ZGUgPEFsZXJ0Lmg+CisjaW5jbHVkZSA8T1MuaD4KKworI2lmbmRlZiBOREVCVUcKKyNpbmNs
dWRlICJMZWFrVHJhY2tlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitleHRl
cm4gY29uc3QgY2hhcioga0FwcGxpY2F0aW9uU2lnbmF0dXJlID0gImFwcGxpY2F0aW9uL3gtdm5k
LlJKTC1IYWlrdUxhdW5jaGVyIjsKK2NvbnN0IHN0YXRpYyB1aW50MzIgTE9BRF9BVF9TVEFSVElO
RyA9ICdsb3N0JzsKKworCitMYXVuY2hlckFwcDo6TGF1bmNoZXJBcHAoKQorICAgIDogQkFwcGxp
Y2F0aW9uKGtBcHBsaWNhdGlvblNpZ25hdHVyZSkKK3sKK30KKworTGF1bmNoZXJBcHA6On5MYXVu
Y2hlckFwcCgpCit7Cit9CisKK3ZvaWQgTGF1bmNoZXJBcHA6OkFib3V0UmVxdWVzdGVkKCkKK3sK
KyAgICBCQWxlcnQqIGFsZXJ0ID0gbmV3IEJBbGVydCgiQWJvdXQgSGFpa3VMYXVuY2hlciIsCisg
ICAgICAgICJGb3IgdGVzdGluZyBXZWJLaXQuLi5cblxuYnkgUnlhbiBMZWF2ZW5nb29kIiwgIlN3
ZWV0ISIpOworICAgIGFsZXJ0LT5HbygpOworfQorCit2b2lkIExhdW5jaGVyQXBwOjpBcmd2UmVj
ZWl2ZWQoaW50MzIgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgaWYgKGFyZ2MgPiAyKSB7Cisg
ICAgICAgIEJBbGVydCogYWxlcnQgPSBuZXcgQkFsZXJ0KCJPdXQgb2YgcGl0eSEiLCAiU29ycnks
XG5JIGNhbm5vdCBoYW5kbGUgbW9yZSB0aGFuIG9uZSB3ZWJwYWdlIGF0IGEgdGltZS5cbiIsICJE
YW1uIGl0ISIsICJPbmx5IG9uZSBwYWdlIHRoZW4uIiwgTlVMTCwgQl9XSURUSF9BU19VU1VBTCwg
Ql9XQVJOSU5HX0FMRVJUKTsKKyAgICAgICAgaWYgKCFhbGVydC0+R28oKSkKKyAgICAgICAgICAg
IGV4aXQoMSk7CisgICAgfQorCisgICAgQlN0cmluZyB1cmwoYXJndlsxXSk7CisgICAgQk1lc3Nh
Z2UgbWVzc2FnZShMT0FEX0FUX1NUQVJUSU5HKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJs
IiwgdXJsKTsKKyAgICBQb3N0TWVzc2FnZSgmbWVzc2FnZSk7CisKK30KKwordm9pZCBMYXVuY2hl
ckFwcDo6UmVhZHlUb1J1bigpCit7CisgICAgV2ViUHJvY2Vzczo6aW5pdGlhbGl6ZU9uY2UoKTsK
KworICAgIG1fd2luZG93ID0gbmV3IExhdW5jaGVyV2luZG93KCk7CisgICAgbV93aW5kb3ctPlNo
b3coKTsKK30KKwordm9pZCBMYXVuY2hlckFwcDo6TWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIHN3aXRjaCAobWVzc2FnZS0+d2hhdCkgeworICAgIGNhc2UgTE9BRF9B
VF9TVEFSVElORzogeworICAgICAgICBCU3RyaW5nIHVybDsKKyAgICAgICAgbWVzc2FnZS0+Rmlu
ZFN0cmluZygidXJsIiwgJnVybCk7CisgICAgICAgIG1fd2luZG93LT53ZWJWaWV3KCktPmxvYWRS
ZXF1ZXN0KHVybC5TdHJpbmcoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGRlZmF1
bHQ6CisgICAgICAgIEJBcHBsaWNhdGlvbjo6TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2UpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK2Jvb2wgTGF1bmNoZXJBcHA6OlF1aXRSZXF1ZXN0ZWQo
KQoreworICAgIHJldHVybiB0cnVlOworfQorCitpbnQgbWFpbihpbnQsIGNoYXIqKikKK3sKKyAg
ICBuZXcgTGF1bmNoZXJBcHAoKTsKKyAgICBiZV9hcHAtPlJ1bigpOworICAgIGRlbGV0ZSBiZV9h
cHA7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgRHVtcFVuZnJlZWQoKTsKKyNlbmRpZgorCisgICAg
cmV0dXJuIDA7Cit9CisKSW5kZXg6IFdlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVy
QXBwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L0hhaWt1TGF1bmNoZXIvTGF1bmNoZXJB
cHAuaAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVy
QXBwLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIExBVU5DSEVSX0FQUF9ICisjZGVmaW5lIExB
VU5DSEVSX0FQUF9ICisKKyNpbmNsdWRlIDxBcHBsaWNhdGlvbi5oPgorCitjbGFzcyBMYXVuY2hl
cldpbmRvdzsKKworY2xhc3MgTGF1bmNoZXJBcHAgOiBwdWJsaWMgQkFwcGxpY2F0aW9uIHsKK3B1
YmxpYzoKKyAgICBMYXVuY2hlckFwcCgpOworICAgIH5MYXVuY2hlckFwcCgpOworCisgICAgdm9p
ZCBBYm91dFJlcXVlc3RlZCgpOworICAgIHZvaWQgQXJndlJlY2VpdmVkKGludDMyLCBjaGFyKiop
OworICAgIHZvaWQgTWVzc2FnZVJlY2VpdmVkKEJNZXNzYWdlKik7CisgICAgdm9pZCBSZWFkeVRv
UnVuKCk7CisgICAgYm9vbCBRdWl0UmVxdWVzdGVkKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBo
YW5kbGVQYWludEV2ZW50KEJSZWN0IHVwZGF0ZVJlY3QpOworCisgICAgTGF1bmNoZXJXaW5kb3cq
IG1fd2luZG93OworfTsKKworZXh0ZXJuIGNvbnN0IGNoYXIqIGtBcHBsaWNhdGlvblNpZ25hdHVy
ZTsKKworI2RlZmluZSBteV9hcHAgZHluYW1pY19jYXN0PExhdW5jaGVyQXBwKj4oYmVfYXBwKQor
CisjZW5kaWYgLy8gTEFVTkNIRVJfQVBQX0gKKwpJbmRleDogV2ViS2l0L2hhaWt1L0hhaWt1TGF1
bmNoZXIvTGF1bmNoZXJXaW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9IYWlr
dUxhdW5jaGVyL0xhdW5jaGVyV2luZG93LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYktpdC9oYWlr
dS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQW5kcmVhIEFuemFuaSA8YW5kcmVh
LmFuemFuaUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29k
IDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2lt
b24gPHNpbW9uLm1heGltZUBnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgU3RlcGhh
biBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJMYXVuY2hlcldpbmRvdy5o
IgorCisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdDb25zdGFudHMuaCIK
KworI2luY2x1ZGUgPEFwcGxpY2F0aW9uLmg+CisjaW5jbHVkZSA8QnV0dG9uLmg+CisjaW5jbHVk
ZSA8R3JpZExheW91dEJ1aWxkZXIuaD4KKyNpbmNsdWRlIDxHcm91cExheW91dC5oPgorI2luY2x1
ZGUgPEdyb3VwTGF5b3V0QnVpbGRlci5oPgorI2luY2x1ZGUgPFN0cmluZ1ZpZXcuaD4KKyNpbmNs
dWRlIDxUZXh0Q29udHJvbC5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2RlZmluZSBHT19C
QUNLICdnb2JhJworI2RlZmluZSBHT19GT1JXQVJEICdnb2ZvJworI2RlZmluZSBHT1RPX1VSTCAn
Z291bCcKKyNkZWZpbmUgTE9BRF9VUkwgJ2xvYWQnCisKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CisKK0xhdW5jaGVyV2luZG93OjpMYXVuY2hlcldpbmRvdyhUb29sYmFyUG9saWN5IHRvb2xi
YXJQb2xpY3kpCisgICAgOiBXZWJWaWV3V2luZG93KEJSZWN0KDEwMCwgMTAwLCA3MDAsIDc1MCks
ICJIYWlrdUxhdW5jaGVyIiwKKyAgICAgICAgQl9USVRMRURfV0lORE9XX0xPT0ssIEJfTk9STUFM
X1dJTkRPV19GRUVMLAorICAgICAgICAvKkJfQVVUT19VUERBVEVfU0laRV9MSU1JVFMgfCovIEJf
QVNZTkNIUk9OT1VTX0NPTlRST0xTKQoreworICAgIGlmICh0b29sYmFyUG9saWN5ID09IEhhdmVU
b29sYmFyKSB7CisgICAgICAgIC8vIEJhY2sgJiBGb3J3YXJkCisgICAgICAgIEJCdXR0b24qIGJh
Y2sgPSBuZXcgQkJ1dHRvbigiIiwgIkJhY2siLCBuZXcgQk1lc3NhZ2UoR09fQkFDSykpOworICAg
ICAgICBCQnV0dG9uKiBmb3J3YXJkID0gbmV3IEJCdXR0b24oIiIsICJGb3J3YXJkIiwgbmV3IEJN
ZXNzYWdlKEdPX0ZPUldBUkQpKTsKKworICAgICAgICAvLyBVUkwKKyAgICAgICAgbV91cmwgPSBu
ZXcgQlRleHRDb250cm9sKCJ1cmwiLCAidXJsIiwgImh0dHA6Ly9oYWlrdS1vcy5vcmcvbGVnYWN5
LWRvY3MvYmVib29rLyIsIG5ldyBCTWVzc2FnZShHT1RPX1VSTCkpOworICAgICAgICBtX3VybC0+
U2V0RGl2aWRlcig1MC4wKTsKKworICAgICAgICAvLyBHbworICAgICAgICBCQnV0dG9uKiBidXR0
b24gPSBuZXcgQkJ1dHRvbigiIiwgIkdvIiwgbmV3IEJNZXNzYWdlKExPQURfVVJMKSk7CisKKyAg
ICAgICAgLy8gU3RhdHVzIEJhcgorICAgICAgICBtX3N0YXR1c1RleHQgPSBuZXcgQlN0cmluZ1Zp
ZXcoInN0YXR1cyIsICIiKTsKKworICAgICAgICAvLyBMYXlvdXQKKyAgICAgICAgQWRkQ2hpbGQo
Qkdyb3VwTGF5b3V0QnVpbGRlcihCX1ZFUlRJQ0FMLCA3KQorICAgICAgICAgICAgLkFkZChCR3Jp
ZExheW91dEJ1aWxkZXIoNywgNykKKyAgICAgICAgICAgICAgICAuQWRkKGJhY2ssIDAsIDApCisg
ICAgICAgICAgICAgICAgLkFkZChmb3J3YXJkLCAxLCAwKQorICAgICAgICAgICAgICAgIC5BZGQo
bV91cmwsIDIsIDApCisgICAgICAgICAgICAgICAgLkFkZChidXR0b24sIDMsIDApCisgICAgICAg
ICAgICAgICAgLlNldEluc2V0cyg1LCA1LCA1LCA1KQorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgLkFkZCh3ZWJWaWV3KCkpCisgICAgICAgICAgICAuQWRkKG1fc3RhdHVzVGV4dCkKKyAgICAg
ICAgKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3VybCA9IDA7CisKKyAgICAgICAgQWRkQ2hp
bGQoQkdyb3VwTGF5b3V0QnVpbGRlcihCX1ZFUlRJQ0FMLCA3KQorICAgICAgICAgICAgLkFkZCh3
ZWJWaWV3KCkpCisgICAgICAgICk7CisgICAgfQorfQorCitMYXVuY2hlcldpbmRvdzo6fkxhdW5j
aGVyV2luZG93KCkKK3sKK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6TWVzc2FnZVJlY2VpdmVk
KEJNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIGlmIChtX3VybCkgeworICAgICAgICBzd2l0Y2gg
KG1lc3NhZ2UtPndoYXQpIHsKKyAgICAgICAgY2FzZSBHT1RPX1VSTDoKKyAgICAgICAgICAgIHdl
YlZpZXcoKS0+bG9hZFJlcXVlc3QobV91cmwtPlRleHQoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBMT0FEX1VSTDoKKyAgICAgICAgICAgIHdlYlZpZXcoKS0+bG9hZFJlcXVl
c3QobV91cmwtPlRleHQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHT19C
QUNLOgorICAgICAgICAgICAgd2ViVmlldygpLT5nb0JhY2soKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEdPX0ZPUldBUkQ6CisgICAgICAgICAgICB3ZWJWaWV3KCktPmdvRm9y
d2FyZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBXZWJWaWV3V2luZG93OjpNZXNzYWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaChtZXNzYWdlLT53
aGF0KSB7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBXZWJWaWV3V2luZG93OjpNZXNz
YWdlUmVjZWl2ZWQobWVzc2FnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KK30KKworYm9vbCBMYXVuY2hlcldpbmRvdzo6UXVpdFJlcXVlc3RlZCgpCit7CisgICAgYmVf
YXBwLT5Qb3N0TWVzc2FnZShCX1FVSVRfUkVRVUVTVEVEKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworLy8gI3ByYWdtYSBtYXJrIC0gTm90aWZpY2F0aW9uIEFQSQorCit2b2lkIExhdW5jaGVyV2lu
ZG93OjpuYXZpZ2F0aW9uUmVxdWVzdGVkKGNvbnN0IEJTdHJpbmcmIHVybCkKK3sKKyAgICBpZiAo
bV91cmwpCisgICAgICAgIG1fdXJsLT5TZXRUZXh0KHVybC5TdHJpbmcoKSk7Cit9CisKK3ZvaWQg
TGF1bmNoZXJXaW5kb3c6Om5ld1dpbmRvd1JlcXVlc3RlZCgpCit7Cit9CisKK3ZvaWQgTGF1bmNo
ZXJXaW5kb3c6OmxvYWROZWdvY2lhdGluZyhjb25zdCBCU3RyaW5nJiB1cmwpCit7CisgICAgaWYg
KG1fdXJsKSB7CisgICAgICAgIG1fdXJsLT5TZXRUZXh0KHVybC5TdHJpbmcoKSk7CisgICAgICAg
IG1fcmVxdWVzdGVkVVJMID0gdXJsOworICAgIH0KK30KKwordm9pZCBMYXVuY2hlcldpbmRvdzo6
bG9hZFRyYW5zZmVyaW5nKGNvbnN0IEJTdHJpbmcmIHVybCkKK3sKK30KKwordm9pZCBMYXVuY2hl
cldpbmRvdzo6bG9hZEZhaWxlZChjb25zdCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3ZvaWQgTGF1
bmNoZXJXaW5kb3c6OmxvYWRGaW5pc2hlZChjb25zdCBCU3RyaW5nJiB1cmwpCit7Cit9CisKK3Zv
aWQgTGF1bmNoZXJXaW5kb3c6OnN0YXR1c0NoYW5nZWQoY29uc3QgQlN0cmluZyYgc3RhdHVzVGV4
dCkKK3sKKyAgICBtX3N0YXR1c1RleHQtPlNldFRleHQoc3RhdHVzVGV4dC5TdHJpbmcoKSk7Cit9
CisKKworCkluZGV4OiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldpbmRvdy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9IYWlrdUxhdW5jaGVyL0xhdW5jaGVyV2luZG93
LmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvSGFpa3VMYXVuY2hlci9MYXVuY2hlcldp
bmRvdy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+CisgKiBDb3B5cmln
aHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CisgKgor
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIExhdW5jaGVyV2luZG93X2gK
KyNkZWZpbmUgTGF1bmNoZXJXaW5kb3dfaAorCisjaW5jbHVkZSAiV2ViVmlld1dpbmRvdy5oIgor
I2luY2x1ZGUgPFN0cmluZy5oPgorCitjbGFzcyBCU3RyaW5nVmlldzsKK2NsYXNzIEJUZXh0Q29u
dHJvbDsKK2NsYXNzIFdlYlZpZXc7CisKK2VudW0gVG9vbGJhclBvbGljeSB7CisgICAgSGF2ZVRv
b2xiYXIsCisgICAgRG9Ob3RIYXZlVG9vbGJhcgorfTsKKworY2xhc3MgTGF1bmNoZXJXaW5kb3cg
OiBwdWJsaWMgV2ViVmlld1dpbmRvdyB7CitwdWJsaWM6CisgICAgTGF1bmNoZXJXaW5kb3coVG9v
bGJhclBvbGljeSA9IEhhdmVUb29sYmFyKTsKKyAgICB2aXJ0dWFsIH5MYXVuY2hlcldpbmRvdygp
OworCisgICAgdmlydHVhbCB2b2lkIE1lc3NhZ2VSZWNlaXZlZChCTWVzc2FnZSogbWVzc2FnZSk7
CisgICAgdmlydHVhbCBib29sIFF1aXRSZXF1ZXN0ZWQoKTsKKworICAgIC8vIFdlYlZpZXdXaW5k
b3cgbm90aWZpY2F0aW9uIEFQSSBpbXBsZW1lbnRhdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgbmF2
aWdhdGlvblJlcXVlc3RlZChjb25zdCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBu
ZXdXaW5kb3dSZXF1ZXN0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgbG9hZE5lZ29jaWF0aW5nKGNv
bnN0IEJTdHJpbmcmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRUcmFuc2ZlcmluZyhjb25z
dCBCU3RyaW5nJiB1cmwpOworICAgIHZpcnR1YWwgdm9pZCBsb2FkRmFpbGVkKGNvbnN0IEJTdHJp
bmcmIHVybCk7CisgICAgdmlydHVhbCB2b2lkIGxvYWRGaW5pc2hlZChjb25zdCBCU3RyaW5nJiB1
cmwpOworICAgIHZpcnR1YWwgICAgdm9pZCBzdGF0dXNDaGFuZ2VkKGNvbnN0IEJTdHJpbmcmIHN0
YXR1cyk7CisKK3ByaXZhdGU6CisgICAgQlRleHRDb250cm9sKiBtX3VybDsKKyAgICBCU3RyaW5n
VmlldyogbV9zdGF0dXNUZXh0OworICAgIEJTdHJpbmcgbV9yZXF1ZXN0ZWRVUkw7Cit9OworCisj
ZW5kaWYgLy8gTGF1bmNoZXJXaW5kb3dfaAorCkluZGV4OiBXZWJLaXQvaGFpa3UvSGFpa3VMYXVu
Y2hlci9MZWFrVHJhY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9IYWlrdUxhdW5j
aGVyL0xlYWtUcmFja2VyLmgJKHJldmlzaW9uIDApCisrKyBXZWJLaXQvaGFpa3UvSGFpa3VMYXVu
Y2hlci9MZWFrVHJhY2tlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMyBAQAorI2lmbmRl
ZiBfX0xFQUtUUkFDS0VSVEVTVF9ICisjZGVmaW5lIF9fTEVBS1RSQUNLRVJURVNUX0gKKworLy8g
VGhpcyBjb2RlIGlzIGZyb206CisvLyBodHRwOi8vd3d3LmZsaXBjb2RlLmNvbS9hcmNoaXZlcy9I
b3dfVG9fRmluZF9NZW1vcnlfTGVha3Muc2h0bWwKKy8vIEkgaGF2ZSBtb2RpZmllZCBpdCBzb21l
LgorCisjaWZuZGVmIE5ERUJVRworCisjaWYgX19HTlVDX18gPiAyCisgICAgI2luY2x1ZGUgPHN0
cmluZy5oPgorICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CisjZW5kaWYKKworI2luY2x1ZGUgPHZl
Y3Rvcj4KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICBhZGRyZXNzOworICAgIHNpemVf
dCAgICBzaXplOworICAgIGNoYXIgICAgZmlsZVs2NF07CisgICAgaW50ICAgIGxpbmU7Cit9IEFM
TE9DX0lORk87CisKK3R5cGVkZWYgdmVjdG9yPEFMTE9DX0lORk8qPiBBbGxvY0xpc3Q7CisKK0Fs
bG9jTGlzdCAqYWxsb2NMaXN0OworCit2b2lkIEFkZFRyYWNrKGludCBhZGRyLCBzaXplX3QgYXNp
emUsIGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbG51bSkKK3sKKyAgICBBTExPQ19JTkZPICppbmZv
OworCisgICAgaWYgKCFhbGxvY0xpc3QpIHsKKyAgICAgICAgYWxsb2NMaXN0ID0gbmV3KEFsbG9j
TGlzdCk7CisgICAgfQorCisgICAgaW5mbyA9IG5ldyhBTExPQ19JTkZPKTsKKyAgICBpbmZvLT5h
ZGRyZXNzID0gYWRkcjsKKyAgICBzdHJuY3B5KGluZm8tPmZpbGUsIGZuYW1lLCA2Myk7CisgICAg
aW5mby0+bGluZSA9IGxudW07CisgICAgaW5mby0+c2l6ZSA9IGFzaXplOworICAgIGFsbG9jTGlz
dC0+aW5zZXJ0KGFsbG9jTGlzdC0+YmVnaW4oKSwgaW5mbyk7Cit9OworCit2b2lkIFJlbW92ZVRy
YWNrKGludCBhZGRyKQoreworICAgIEFsbG9jTGlzdDo6aXRlcmF0b3IgaTsKKworICAgIGlmICgh
YWxsb2NMaXN0KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKGkgPSBhbGxvY0xpc3QtPmJl
Z2luKCk7IGkgPCBhbGxvY0xpc3QtPmVuZCgpOyBpKyspCisgICAgeworICAgICAgICBpZigoKmkp
LT5hZGRyZXNzID09IGFkZHIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFsbG9jTGlzdC0+ZXJh
c2UoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK307CisKK2ludCB1
bmZyZWVkQ291bnQoKQoreworICAgIHJldHVybiBhbGxvY0xpc3QtPnNpemUoKTsKK30KKworYm9v
bCBub3RoaW5nVW5mcmVlZCgpCit7CisgICAgcmV0dXJuIGFsbG9jTGlzdC0+ZW1wdHkoKTsKK30K
KworI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQgT3V0cHV0RGVidWdTdHJpbmcoY2hhciAqc3Ry
KQoreworICAgIHByaW50ZihzdHIpOworfQorCit2b2lkIER1bXBVbmZyZWVkKCkKK3sKKyAgICBB
bGxvY0xpc3Q6Oml0ZXJhdG9yIGk7CisgICAgaW50IHRvdGFsU2l6ZSA9IDA7CisgICAgY2hhciBi
dWZbMTAyNF07CisKKyAgICBpZiAoIWFsbG9jTGlzdCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChpID0gYWxsb2NMaXN0LT5iZWdpbigpOyBpIDwgYWxsb2NMaXN0LT5lbmQoKTsgaSsrKSB7
CisgICAgICAgIHNwcmludGYoYnVmLCAiJS01MHM6XHRcdExJTkUgJWQsXHRcdEFERFJFU1MgJWRc
dCVkIHVuZnJlZWRcbiIsCisgICAgICAgICAgICAgICAgKCppKS0+ZmlsZSwgKCppKS0+bGluZSwg
KCppKS0+YWRkcmVzcywgKGludCkoKmkpLT5zaXplKTsKKyAgICAgICAgT3V0cHV0RGVidWdTdHJp
bmcoYnVmKTsKKyAgICAgICAgdG90YWxTaXplICs9ICgqaSktPnNpemU7CisgICAgfQorICAgIHNw
cmludGYoYnVmLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS1cbiIpOworICAgIE91dHB1dERlYnVnU3RyaW5nKGJ1Zik7CisgICAgc3By
aW50ZihidWYsICJUb3RhbCBVbmZyZWVkOiAlZCBieXRlc1xuIiwgdG90YWxTaXplKTsKKyAgICBP
dXRwdXREZWJ1Z1N0cmluZyhidWYpOworfTsKKworaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ldyhz
aXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUpCit7CisgICAgdm9pZCAqcHRy
ID0gKHZvaWQgKiltYWxsb2Moc2l6ZSk7CisgICAgQWRkVHJhY2soKGludClwdHIsIHNpemUsIGZp
bGUsIGxpbmUpOworICAgIHJldHVybihwdHIpOworfTsKKworaW5saW5lIHZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQgKnApIHRocm93KCkKK3sKKyAgICBSZW1vdmVUcmFjaygoaW50KXApOworICAg
IGZyZWUocCk7Cit9OworCisjZGVmaW5lIERFQlVHX05FVyBuZXcoX19GSUxFX18sIF9fTElORV9f
KQorCisjZWxzZQorI2RlZmluZSBERUJVR19ORVcgbmV3CisjZW5kaWYKKworCisjZGVmaW5lIG5l
dyBERUJVR19ORVcKKworCisjZW5kaWYgLy8gX19MRUFLVFJBQ0tFUlRFU1RfSAorCkluZGV4OiBX
ZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9DaHJvbWVDbGllbnRIYWlrdS5jcHAJ
KHJldmlzaW9uIDU0Mjc1KQorKysgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Nocm9tZUNs
aWVudEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUnlhbiBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24gPHNpbW9u
Lm1heGltZUBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTAgU3RlcGhhbiBBw59tdXMgPHN1cGVyc3RpcHBpQGdteC5kZT4KICAqCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkBAIC0zMCwxOCArMzIsMjggQEAKIAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXJDbGllbnRIYWlrdS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRl
ICJXZWJGcmFtZVByaXZhdGUuaCIKKyNpbmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAiV2Vi
Vmlld1dpbmRvdy5oIgorI2luY2x1ZGUgIldpbmRvd0ZlYXR1cmVzLmgiCiAKICNpbmNsdWRlIDxB
bGVydC5oPgotI2luY2x1ZGUgPFN0cmluZy5oPgorI2luY2x1ZGUgPEZpbGVQYW5lbC5oPgorI2lu
Y2x1ZGUgPFJlZ2lvbi5oPgogCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ2hyb21lQ2xpZW50
SGFpa3U6OkNocm9tZUNsaWVudEhhaWt1KCkKK0Nocm9tZUNsaWVudEhhaWt1OjpDaHJvbWVDbGll
bnRIYWlrdShXZWJQcm9jZXNzKiB3ZWJQcm9jZXNzLCBXZWJWaWV3KiB3ZWJWaWV3KQorICAgIDog
bV93ZWJQcm9jZXNzKHdlYlByb2Nlc3MpCisgICAgLCBtX3dlYlZpZXcod2ViVmlldykKIHsKIH0K
IApAQCAtNTEsNzIgKzYzLDEwMiBAQCBDaHJvbWVDbGllbnRIYWlrdTo6fkNocm9tZUNsaWVudEhh
aWt1KCkKIAogdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Y2hyb21lRGVzdHJveWVkKCkKIHsKLSAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIG1fd2ViUHJvY2Vzcy0+c2V0V2luZG93Qm91bmRzKEJSZWN0
KHJlY3QpKTsKIH0KIAogRmxvYXRSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5kb3dSZWN0KCkK
IHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBGbG9hdFJlY3QoMCwgMCwgMjAw
LCAyMDApOworICAgIHJldHVybiBGbG9hdFJlY3QobV93ZWJQcm9jZXNzLT53aW5kb3dCb3VuZHMo
KSk7CiB9CiAKIEZsb2F0UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6cGFnZVJlY3QoKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIEZsb2F0UmVjdCgwLCAwLCAyMDAsIDIwMCk7
CisgICAgcmV0dXJuIEZsb2F0UmVjdChtX3dlYlByb2Nlc3MtPmNvbnRlbnRzU2l6ZSgpKTsKIH0K
IAogZmxvYXQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjYWxlRmFjdG9yKCkKIHsKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIHJldHVybiAxLjA7CisgICAgcmV0dXJuIDE7CiB9CiAKIHZvaWQgQ2hy
b21lQ2xpZW50SGFpa3U6OmZvY3VzKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlm
IChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgeworICAgICAgICBtX3dlYlZpZXctPk1ha2VGb2N1
cyh0cnVlKTsKKyAgICAgICAgbV93ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsKKyAgICB9CiB9CiAK
IHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnVuZm9jdXMoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgaWYgKG1fd2ViVmlldy0+TG9ja0xvb3BlcigpKSB7CisgICAgICAgIG1fd2ViVmll
dy0+TWFrZUZvY3VzKGZhbHNlKTsKKyAgICAgICAgbV93ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsK
KyAgICB9CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OmNhblRha2VGb2N1cyhGb2N1c0Rp
cmVjdGlvbikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiB0cnVlOwogfQog
CiB2b2lkIENocm9tZUNsaWVudEhhaWt1Ojp0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24pCiB7Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OnRha2VGb2N1
cygpXG4iKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6Zm9jdXNlZE5vZGVDaGFuZ2Vk
KE5vZGUqKQogeworcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6Zm9jdXNlZE5vZGVDaGFuZ2Vk
KClcbiIpOworICAgIGZvY3VzKCk7CiB9CiAKLVBhZ2UqIENocm9tZUNsaWVudEhhaWt1OjpjcmVh
dGVXaW5kb3coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0JiwgY29uc3QgV2ViQ29yZTo6
V2luZG93RmVhdHVyZXMmKQorUGFnZSogQ2hyb21lQ2xpZW50SGFpa3U6OmNyZWF0ZVdpbmRvdyhG
cmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFdlYkNvcmU6Oldp
bmRvd0ZlYXR1cmVzJiBmZWF0dXJlcykKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJl
dHVybiAwOwotfQorcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6Y3JlYXRlV2luZG93KClcbiIp
OworICAgIEJSZWN0IGZyYW1lOworICAgIGlmIChmZWF0dXJlcy54U2V0ICYmIGZlYXR1cmVzLnlT
ZXQgJiYgZmVhdHVyZXMud2lkdGhTZXQgJiYgZmVhdHVyZXMuaGVpZ2h0U2V0KSB7CisgICAgICAg
IGZyYW1lLmxlZnQgPSBmZWF0dXJlcy54OworICAgICAgICBmcmFtZS50b3AgPSBmZWF0dXJlcy55
OworICAgICAgICBmcmFtZS5yaWdodCA9IGZlYXR1cmVzLnggKyBmZWF0dXJlcy53aWR0aCAtIDE7
CisgICAgICAgIGZyYW1lLmJvdHRvbSA9IGZlYXR1cmVzLnkgKyBmZWF0dXJlcy5oZWlnaHQgLSAx
OworICAgIH0gZWxzZSB7CisgICAgICAgIGZyYW1lLlNldCg1MCwgNTAsIDQ0OSwgNDQ5KTsKKyAg
ICB9CisgICAgd2luZG93X2xvb2sgbG9vayA9IEJfVElUTEVEX1dJTkRPV19MT09LOworICAgIHdp
bmRvd19mZWVsIGZlZWwgPSBCX05PUk1BTF9XSU5ET1dfRkVFTDsKKyAgICBpZiAoZmVhdHVyZXMu
ZGlhbG9nKSB7CisgICAgICAgIGxvb2sgPSBCX01PREFMX1dJTkRPV19MT09LOworICAgICAgICBm
ZWVsID0gQl9NT0RBTF9BUFBfV0lORE9XX0ZFRUw7CisgICAgfQorICAgIHVpbnQzMiBmbGFncyA9
IEJfQVNZTkNIUk9OT1VTX0NPTlRST0xTIHwgQl9BVVRPX1VQREFURV9TSVpFX0xJTUlUUzsKKyAg
ICBpZiAoIWZlYXR1cmVzLnJlc2l6YWJsZSkKKyAgICAgICAgZmxhZ3MgfD0gQl9OT1RfWk9PTUFC
TEUgfCBCX05PVF9SRVNJWkFCTEU7CisKKyAgICBXZWJWaWV3V2luZG93KiB3aW5kb3cgPSBuZXcg
V2ViVmlld1dpbmRvdyhmcmFtZSwgIldlYlZpZXciLCBsb29rLCBmZWVsLCBmbGFncyk7CisgICAg
V2ViVmlldyogdmlldyA9IHdpbmRvdy0+d2ViVmlldygpOworICAgIHdpbmRvdy0+QWRkQ2hpbGQo
dmlldyk7CisgICAgd2luZG93LT5TaG93KCk7CiAKLVBhZ2UqIENocm9tZUNsaWVudEhhaWt1Ojpj
cmVhdGVNb2RhbERpYWxvZyhGcmFtZSosIGNvbnN0IEZyYW1lTG9hZFJlcXVlc3QmKQotewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CisgICAgdmlldy0+d2ViUHJvY2Vzcygp
LT5sb2FkVVJMKEJTdHJpbmcocmVxdWVzdC5yZXNvdXJjZVJlcXVlc3QoKS51cmwoKS5zdHJpbmco
KSkpOworCisgICAgcmV0dXJuIHZpZXctPndlYlByb2Nlc3MoKS0+cGFnZSgpOwogfQogCiB2b2lk
IENocm9tZUNsaWVudEhhaWt1OjpzaG93KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworcHJp
bnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2hvdygpXG4iKTsKKyAgICBpZiAobV93ZWJWaWV3LT5M
b2NrTG9vcGVyKCkpIHsKKyAgICAgICAgaWYgKG1fd2ViVmlldy0+V2luZG93KCktPklzSGlkZGVu
KCkpCisgICAgICAgICAgICBtX3dlYlZpZXctPldpbmRvdygpLT5TaG93KCk7CisgICAgICAgIG1f
d2ViVmlldy0+VW5sb2NrTG9vcGVyKCk7CisgICAgfQogfQogCiBib29sIENocm9tZUNsaWVudEhh
aWt1OjpjYW5SdW5Nb2RhbCgpCkBAIC0xMzAsNjUgKzE3Miw0OSBAQCB2b2lkIENocm9tZUNsaWVu
dEhhaWt1OjpydW5Nb2RhbCgpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBDaHJv
bWVDbGllbnRIYWlrdTo6c2V0VG9vbGJhcnNWaXNpYmxlKGJvb2wpCit2b2lkIENocm9tZUNsaWVu
dEhhaWt1OjpzZXRUb29sYmFyc1Zpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgbV93ZWJWaWV3LT5zZXRUb29sYmFyc1Zpc2libGUodmlzaWJsZSk7CiB9
CiAKIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnRvb2xiYXJzVmlzaWJsZSgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fd2ViVmlldy0+
YXJlVG9vbGJhcnNWaXNpYmxlKCk7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFN0
YXR1c2JhclZpc2libGUoYm9vbCkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFN0YXR1c2Jh
clZpc2libGUoYm9vbCB2aXNpYmxlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV93
ZWJWaWV3LT5zZXRTdGF0dXNiYXJWaXNpYmxlKHZpc2libGUpOwogfQogCiBib29sIENocm9tZUNs
aWVudEhhaWt1OjpzdGF0dXNiYXJWaXNpYmxlKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV93ZWJWaWV3LT5pc1N0YXR1c2JhclZpc2li
bGUoKTsKIH0KIAotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0U2Nyb2xsYmFyc1Zpc2libGUo
Ym9vbCkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wg
dmlzaWJsZSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fd2ViUHJvY2Vzcy0+bWFp
bkZyYW1lKCktPnNldEFsbG93c1Njcm9sbGluZyh2aXNpYmxlKTsKIH0KIAogYm9vbCBDaHJvbWVD
bGllbnRIYWlrdTo6c2Nyb2xsYmFyc1Zpc2libGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG1fd2ViUHJvY2Vzcy0+bWFpbkZyYW1lKCkt
PmFsbG93c1Njcm9sbGluZygpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRNZW51
YmFyVmlzaWJsZShib29sKQordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0TWVudWJhclZpc2li
bGUoYm9vbCB2aXNpYmxlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV93ZWJWaWV3
LT5zZXRNZW51YmFyVmlzaWJsZSh2aXNpYmxlKTsKIH0KIAogYm9vbCBDaHJvbWVDbGllbnRIYWlr
dTo6bWVudWJhclZpc2libGUoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBtX3dlYlZpZXctPmlzTWVudWJhclZpc2libGUoKTsKIH0KIAot
dm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2V0UmVzaXphYmxlKGJvb2wpCit2b2lkIENocm9tZUNs
aWVudEhhaWt1OjpzZXRSZXNpemFibGUoYm9vbCByZXNpemFibGUpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKLX0KLQotdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6YWRkTWVzc2FnZVRvQ29uc29s
ZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHNvdXJj
ZUlEKQotewotICAgIHByaW50ZigiTUVTU0FHRSAlczolaSAlc1xuIiwgQlN0cmluZyhzb3VyY2VJ
RCkuU3RyaW5nKCksIGxpbmVOdW1iZXIsIEJTdHJpbmcobWVzc2FnZSkuU3RyaW5nKCkpOwotfQot
Ci12b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VMZXZlbCwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCkKLXsKLSAgICBwcmludGYoIk1FU1NBR0UgJXM6JWkgJXNcbiIs
IEJTdHJpbmcoc291cmNlSUQpLlN0cmluZygpLCBsaW5lTnVtYmVyLCBCU3RyaW5nKG1lc3NhZ2Up
LlN0cmluZygpKTsKKyAgICBtX3dlYlZpZXctPnNldFJlc2l6YWJsZShyZXNpemFibGUpOwogfQog
CiB2b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3Vy
Y2UsIE1lc3NhZ2VUeXBlLCBNZXNzYWdlTGV2ZWwsIGNvbnN0IFN0cmluZyYgbWVzc2FnZSwKQEAg
LTE5OSwxOSArMjI1LDE4IEBAIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmFkZE1lc3NhZ2VUb0Nv
bnMKIAogYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6Y2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBh
bmVsKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKQogewotICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBydW5KYXZh
U2NyaXB0Q29uZmlybShmcmFtZSwgbWVzc2FnZSk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50SGFp
a3U6OmNsb3NlV2luZG93U29vbigpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBtX3dl
YlByb2Nlc3MtPm1haW5GcmFtZSgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMo
KTsKKyAgICBtX3dlYlZpZXctPmNsb3NlV2luZG93KCk7CiB9CiAKIHZvaWQgQ2hyb21lQ2xpZW50
SGFpa3U6OnJ1bkphdmFTY3JpcHRBbGVydChGcmFtZSosIGNvbnN0IFN0cmluZyYgbXNnKQpAQCAt
MjMyLDkgKzI1Nyw5IEBAIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnJ1bkphdmFTY3JpcHRQcm8K
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJikKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFN0YXR1
c2JhclRleHQoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgbV93ZWJWaWV3LT5zZXRTdGF0dXNUZXh0KEJTdHJpbmcobWVzc2FnZSkpOwogfQogCiBi
b29sIENocm9tZUNsaWVudEhhaWt1OjpzaG91bGRJbnRlcnJ1cHRKYXZhU2NyaXB0KCkKQEAgLTI1
Myw2OSArMjc4LDY2IEBAIEludFJlY3QgQ2hyb21lQ2xpZW50SGFpa3U6OndpbmRvd1Jlc2l6ZXIK
ICAgICByZXR1cm4gSW50UmVjdCgpOwogfQogCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXBh
aW50KGNvbnN0IEludFJlY3QmLCBib29sIGNvbnRlbnRDaGFuZ2VkLCBib29sIGltbWVkaWF0ZSwg
Ym9vbCByZXBhaW50Q29udGVudE9ubHkpCit2b2lkIENocm9tZUNsaWVudEhhaWt1OjpyZXBhaW50
KGNvbnN0IEludFJlY3QmIHJlY3QsIGJvb2wgY29udGVudENoYW5nZWQsIGJvb2wgaW1tZWRpYXRl
LCBib29sIHJlcGFpbnRDb250ZW50T25seSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IC8vIFRPRE86IFRoaXMgZGVhZGxvY2tzIHdoZW4gY2FsbGVkIGZyb20gdGhlIGFwcCB0aHJlYWQg
ZHVyaW5nIGluaXQgKGZvcnR1bmF0ZWx5IGltbWVkaWF0ZSBpcyBmYWxzdCB0aGVuKQorICAgIGlm
IChpbW1lZGlhdGUpCisgICAgICAgIG1fd2ViUHJvY2Vzcy0+cGFpbnQoQlJlY3QocmVjdCksIGNv
bnRlbnRDaGFuZ2VkLCBpbW1lZGlhdGUsIHJlcGFpbnRDb250ZW50T25seSk7CisgICAgZWxzZQor
ICAgICAgICBtX3dlYlByb2Nlc3MtPmRyYXcoQlJlY3QocmVjdCkpOwogfQogCiB2b2lkIENocm9t
ZUNsaWVudEhhaWt1OjpzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNvbnN0IElu
dFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKy8vcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsKClcbiIp
OworLy9wcmludGYoIiAgc2Nyb2xsRGVsdGE6ICAlZCwgJWRcbiIsIHNjcm9sbERlbHRhLndpZHRo
KCksIHNjcm9sbERlbHRhLmhlaWdodCgpKTsKKy8vcHJpbnRmKCIgIHJlY3RUb1Njcm9sbDogJWQs
ICVkLCAlZCwgJWRcbiIsIHJlY3RUb1Njcm9sbC54KCksIHJlY3RUb1Njcm9sbC55KCksIHJlY3RU
b1Njcm9sbC53aWR0aCgpLCByZWN0VG9TY3JvbGwuaGVpZ2h0KCkpOworLy9wcmludGYoIiAgY2xp
cFJlY3Q6ICVkLCAlZCwgJWQsICVkXG4iLCBjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xp
cFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpOwogfQogCi1JbnRQb2ludCBDaHJvbWVD
bGllbnRIYWlrdTo6c2NyZWVuVG9XaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdAorSW50UG9p
bnQgQ2hyb21lQ2xpZW50SGFpa3U6OnNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiBJbnRQb2ludCgp
OworICAgIHJldHVybiBJbnRQb2ludChtX3dlYlZpZXctPkNvbnZlcnRGcm9tU2NyZWVuKEJQb2lu
dChwb2ludCkpKTsKIH0KIAotSW50UmVjdCBDaHJvbWVDbGllbnRIYWlrdTo6d2luZG93VG9TY3Jl
ZW4oY29uc3QgSW50UmVjdCYpIGNvbnN0CitJbnRSZWN0IENocm9tZUNsaWVudEhhaWt1Ojp3aW5k
b3dUb1NjcmVlbihjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci0gICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gSW50UmVjdChtX3dlYlZp
ZXctPkNvbnZlcnRUb1NjcmVlbihCUmVjdChyZWN0KSkpOwogfQogCiBQbGF0Zm9ybVBhZ2VDbGll
bnQgQ2hyb21lQ2xpZW50SGFpa3U6OnBsYXRmb3JtUGFnZUNsaWVudCgpIGNvbnN0CiB7Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUGxhdGZvcm1XaWRnZXQoKTsKKyAgICByZXR1
cm4gbV93ZWJWaWV3OwogfQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1Ojpjb250ZW50c1NpemVD
aGFuZ2VkKEZyYW1lKiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0CiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKy8vcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6Y29udGVudHNTaXplQ2hhbmdlZCgp
XG4iKTsKIH0KIAogdm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6c2Nyb2xsUmVjdEludG9WaWV3KGNv
bnN0IEludFJlY3QmLCBjb25zdCBTY3JvbGxWaWV3KikgY29uc3QKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjphZGRUb0RpcnR5UmVnaW9uKGNv
bnN0IEludFJlY3QmKQotewotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1OjpzY3JvbGxCYWNr
aW5nU3RvcmUoaW50LCBpbnQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JikKLXsKKyAg
ICAvLyBOT1RFOiBVc2VkIGZvciBleGFtcGxlIHRvIG1ha2UgdGhlIHZpZXcgc2Nyb2xsIHdpdGgg
dGhlIG1vdXNlIHdoZW4gc2VsZWN0aW5nLgorLy9wcmludGYoIkNocm9tZUNsaWVudEhhaWt1Ojpz
Y3JvbGxSZWN0SW50b1ZpZXcoKVxuIik7CiB9CiAKLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpCit2b2lkIENocm9tZUNsaWVudEhhaWt1Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIHVuc2lnbmVkIC8qbW9kaWZp
ZXJGbGFncyovKQogewotfQotCi12b2lkIENocm9tZUNsaWVudEhhaWt1Ojptb3VzZURpZE1vdmVP
dmVyRWxlbWVudChjb25zdCBIaXRUZXN0UmVzdWx0JiBoaXQsIHVuc2lnbmVkIC8qbW9kaWZpZXJG
bGFncyovKQotewotICAgIC8vIFNvbWUgZXh0cmEgaW5mbwotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnNldFRvb2xUaXAoY29uc3QgU3RyaW5nJiB0
aXApCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6
Om1vdXNlRGlkTW92ZU92ZXJFbGVtZW50KClcbiIpOworICAgIFRleHREaXJlY3Rpb24gZGlyOwor
ICAgIGlmIChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkgIT0gbGFzdEhvdmVyVVJMCisgICAgICAg
IHx8IHJlc3VsdC50aXRsZShkaXIpICE9IGxhc3RIb3ZlclRpdGxlCisgICAgICAgIHx8IHJlc3Vs
dC50ZXh0Q29udGVudCgpICE9IGxhc3RIb3ZlckNvbnRlbnQpIHsKKyAgICAgICAgbGFzdEhvdmVy
VVJMID0gcmVzdWx0LmFic29sdXRlTGlua1VSTCgpOworICAgICAgICBsYXN0SG92ZXJUaXRsZSA9
IHJlc3VsdC50aXRsZShkaXIpOworICAgICAgICBsYXN0SG92ZXJDb250ZW50ID0gcmVzdWx0LnRl
eHRDb250ZW50KCk7CisgICAgICAgIG1fd2ViVmlldy0+bGlua0hvdmVyZWQobGFzdEhvdmVyVVJM
LnByZXR0eVVSTCgpLCBsYXN0SG92ZXJUaXRsZSwgbGFzdEhvdmVyQ29udGVudCk7CisgICAgfQog
fQogCiB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYgdGlw
LCBUZXh0RGlyZWN0aW9uKQogeworcHJpbnRmKCJDaHJvbWVDbGllbnRIYWlrdTo6c2V0VG9vbFRp
cCgpXG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCkBAIC0zMjQsMTAgKzM0NiwxMiBA
QCB2b2lkIENocm9tZUNsaWVudEhhaWt1OjpwcmludChGcmFtZSopCiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAorI2lmIEVOQUJMRShEQVRBQkFTRSkKIHZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6
OmV4Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CisjZW5kaWYKIAogI2lmIEVOQUJMRShPRkZM
SU5FX1dFQl9BUFBMSUNBVElPTlMpCiB2b2lkIENocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBw
Q2FjaGVTaXplKGludDY0X3Qgc3BhY2VOZWVkZWQpCkBAIC0zMzYsMzMgKzM2MCwyNSBAQCB2b2lk
IENocm9tZUNsaWVudFd4OjpyZWFjaGVkTWF4QXBwQ2FjaGVTCiB9CiAjZW5kaWYKIAotdm9pZCBD
aHJvbWVDbGllbnRIYWlrdTo6cmVxdWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZy
YW1lKiwgR2VvbG9jYXRpb24qKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
Q2hyb21lQ2xpZW50SGFpa3U6OnJ1bk9wZW5QYW5lbChGcmFtZSosIFBhc3NSZWZQdHI8RmlsZUNo
b29zZXI+KQordm9pZCBDaHJvbWVDbGllbnRIYWlrdTo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFz
c1JlZlB0cjxGaWxlQ2hvb3Nlcj4gY2hvb3NlcikKIHsKK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFp
a3U6OnJ1bk9wZW5QYW5lbCgpXG4iKTsKKyAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IGRvIGFu
eXRoaW5nIGVsc2UgdGhhbiBvcGVuaW5nIGEgZmlsZSBwYW5lbC4KKyAgICAvLyBCRmlsZVBhbmVs
KiBwYW5lbCA9IG5ldyBCRmlsZVBhbmVsKEJfT1BFTl9QQU5FTCwgMCwgMCwgMCwgY2hvb3Nlci0+
YWxsb3dzTXVsdGlwbGVGaWxlcygpKTsKKyAgICAvLyBwYW5lbC0+U2hvdygpOwogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKIGJvb2wgQ2hyb21lQ2xpZW50SGFpa3U6OnNldEN1cnNvcihQbGF0
Zm9ybUN1cnNvckhhbmRsZSkKIHsKK3ByaW50ZigiQ2hyb21lQ2xpZW50SGFpa3U6OnNldEN1cnNv
cigpXG4iKTsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ly8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdlZC4g
VGhpcyBmdW5jdGlvbgotLy8gd2lsbCBiZSBjYWxsZWQgZnJlcXVlbnRseSwgc28gaGFuZGxpbmcg
c2hvdWxkIGJlIHZlcnkgZmFzdC4KLXZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OmZvcm1TdGF0ZURp
ZENoYW5nZShjb25zdCBOb2RlKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi1QYXNz
T3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IENocm9tZUNsaWVudEhhaWt1OjpjcmVhdGVIVE1MUGFy
c2VyUXVpcmtzKCkKK3ZvaWQgQ2hyb21lQ2xpZW50SGFpa3U6OnJlcXVlc3RHZW9sb2NhdGlvblBl
cm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIHJldHVybiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xpZW50SGFpa3UuaAko
cmV2aXNpb24gNTQyNzUpCisrKyBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ2hyb21lQ2xp
ZW50SGFpa3UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29weXJpZ2h0IChDKSAy
MDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFpbC5jb20+IEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1lIFNpbW9uIDxzaW1vbi5tYXhpbWVA
Z21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTMxLDMxICszMiwzMyBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgogI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNz
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFz
cyBGbG9hdFJlY3Q7CiAgICAgY2xhc3MgUGFnZTsKKyAgICBjbGFzcyBXaW5kb3dGZWF0dXJlczsK
ICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKIAogICAgIGNsYXNzIENocm9tZUNsaWVudEhh
aWt1IDogcHVibGljIENocm9tZUNsaWVudCB7CiAgICAgcHVibGljOgotICAgICAgICBDaHJvbWVD
bGllbnRIYWlrdSgpOworICAgICAgICBDaHJvbWVDbGllbnRIYWlrdShXZWJQcm9jZXNzKiwgV2Vi
VmlldyopOwogICAgICAgICB2aXJ0dWFsIH5DaHJvbWVDbGllbnRIYWlrdSgpOwotICAgICAgICB2
b2lkIGNocm9tZURlc3Ryb3llZCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgY2hyb21lRGVzdHJv
eWVkKCk7CiAKLSAgICAgICAgdm9pZCBzZXRXaW5kb3dSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwot
ICAgICAgICBGbG9hdFJlY3Qgd2luZG93UmVjdCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
V2luZG93UmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
d2luZG93UmVjdCgpOwogCi0gICAgICAgIEZsb2F0UmVjdCBwYWdlUmVjdCgpOworICAgICAgICB2
aXJ0dWFsIEZsb2F0UmVjdCBwYWdlUmVjdCgpOwogCi0gICAgICAgIGZsb2F0IHNjYWxlRmFjdG9y
KCk7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgc2NhbGVGYWN0b3IoKTsKIAotICAgICAgICB2b2lk
IGZvY3VzKCk7Ci0gICAgICAgIHZvaWQgdW5mb2N1cygpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
Zm9jdXMoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHVuZm9jdXMoKTsKIAotICAgICAgICBib29s
IGNhblRha2VGb2N1cyhGb2N1c0RpcmVjdGlvbik7Ci0gICAgICAgIHZvaWQgdGFrZUZvY3VzKEZv
Y3VzRGlyZWN0aW9uKTsKKyAgICAgICAgdmlydHVhbCBib29sIGNhblRha2VGb2N1cyhGb2N1c0Rp
cmVjdGlvbik7CisgICAgICAgIHZpcnR1YWwgdm9pZCB0YWtlRm9jdXMoRm9jdXNEaXJlY3Rpb24p
OwogCiAgICAgICAgIHZvaWQgZm9jdXNlZE5vZGVDaGFuZ2VkKE5vZGUqKTsKIApAQCAtNjMsNTIg
KzY2LDQ4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZSogY3JlYXRlTW9kYWxE
aWFsb2coRnJhbWUqLCBjb25zdCBGcmFtZUxvYWRSZXF1ZXN0Jik7CiAgICAgICAgIHZvaWQgc2hv
dygpOwogCi0gICAgICAgIGJvb2wgY2FuUnVuTW9kYWwoKTsKLSAgICAgICAgdm9pZCBydW5Nb2Rh
bCgpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuTW9kYWwoKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJ1bk1vZGFsKCk7CiAKLSAgICAgICAgdm9pZCBzZXRUb29sYmFyc1Zpc2libGUoYm9v
bCk7Ci0gICAgICAgIGJvb2wgdG9vbGJhcnNWaXNpYmxlKCk7CisgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRUb29sYmFyc1Zpc2libGUoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCB0b29sYmFy
c1Zpc2libGUoKTsKIAotICAgICAgICB2b2lkIHNldFN0YXR1c2JhclZpc2libGUoYm9vbCk7Ci0g
ICAgICAgIGJvb2wgc3RhdHVzYmFyVmlzaWJsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0
U3RhdHVzYmFyVmlzaWJsZShib29sKTsKKyAgICAgICAgdmlydHVhbCBib29sIHN0YXR1c2JhclZp
c2libGUoKTsKIAotICAgICAgICB2b2lkIHNldFNjcm9sbGJhcnNWaXNpYmxlKGJvb2wpOwotICAg
ICAgICBib29sIHNjcm9sbGJhcnNWaXNpYmxlKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRT
Y3JvbGxiYXJzVmlzaWJsZShib29sKTsKKyAgICAgICAgdmlydHVhbCBib29sIHNjcm9sbGJhcnNW
aXNpYmxlKCk7CiAKLSAgICAgICAgdm9pZCBzZXRNZW51YmFyVmlzaWJsZShib29sKTsKLSAgICAg
ICAgYm9vbCBtZW51YmFyVmlzaWJsZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TWVudWJh
clZpc2libGUoYm9vbCk7CisgICAgICAgIHZpcnR1YWwgYm9vbCBtZW51YmFyVmlzaWJsZSgpOwog
Ci0gICAgICAgIHZvaWQgc2V0UmVzaXphYmxlKGJvb2wpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
c2V0UmVzaXphYmxlKGJvb2wpOwogCi0gICAgICAgIHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShj
b25zdCBTdHJpbmcmIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCk7Ci0gICAgICAg
IHZvaWQgYWRkTWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlTGV2ZWwsIGNv
bnN0IFN0cmluZyYgbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlEKTsKLSAgICAgICAg
dm9pZCBhZGRNZXNzYWdlVG9Db25zb2xlKE1lc3NhZ2VTb3VyY2UsIE1lc3NhZ2VUeXBlLCBNZXNz
YWdlTGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
LCB1bnNpZ25lZCBpbnQsIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgYWRk
TWVzc2FnZVRvQ29uc29sZShNZXNzYWdlU291cmNlLCBNZXNzYWdlVHlwZSwgTWVzc2FnZUxldmVs
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBTdHJpbmcmIHNvdXJjZUlE
KTsKIAotICAgICAgICBib29sIGNhblJ1bkJlZm9yZVVubG9hZENvbmZpcm1QYW5lbCgpOworICAg
ICAgICB2aXJ0dWFsIGJvb2wgY2FuUnVuQmVmb3JlVW5sb2FkQ29uZmlybVBhbmVsKCk7CisgICAg
ICAgIHZpcnR1YWwgYm9vbCBydW5CZWZvcmVVbmxvYWRDb25maXJtUGFuZWwoY29uc3QgU3RyaW5n
JiBtZXNzYWdlLCBGcmFtZSogZnJhbWUpOwogCi0gICAgICAgIGJvb2wgcnVuQmVmb3JlVW5sb2Fk
Q29uZmlybVBhbmVsKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRnJhbWUqIGZyYW1lKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIGNsb3NlV2luZG93U29vbigpOwogCi0gICAgICAgIHZvaWQgY2xvc2VX
aW5kb3dTb29uKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBydW5KYXZhU2NyaXB0QWxlcnQoRnJh
bWUqLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgdmlydHVhbCBib29sIHJ1bkphdmFTY3JpcHRD
b25maXJtKEZyYW1lKiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBydW5K
YXZhU2NyaXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpOworICAgICAgICB2aXJ0dWFsIGJvb2wg
c2hvdWxkSW50ZXJydXB0SmF2YVNjcmlwdCgpOwogCi0gICAgICAgIHZvaWQgcnVuSmF2YVNjcmlw
dEFsZXJ0KEZyYW1lKiwgY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIGJvb2wgcnVuSmF2YVNjcmlw
dENvbmZpcm0oRnJhbWUqLCBjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgYm9vbCBydW5KYXZhU2Ny
aXB0UHJvbXB0KEZyYW1lKiwgY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBjb25zdCBTdHJpbmcmIGRl
ZmF1bHRWYWx1ZSwgU3RyaW5nJiByZXN1bHQpOwotICAgICAgICBib29sIHNob3VsZEludGVycnVw
dEphdmFTY3JpcHQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldFN0YXR1c2JhclRleHQoY29u
c3QgV2ViQ29yZTo6U3RyaW5nJik7CiAKLSAgICAgICAgdm9pZCBzZXRTdGF0dXNiYXJUZXh0KGNv
bnN0IFdlYkNvcmU6OlN0cmluZyYpOwotICAgICAgICBib29sIHRhYnNUb0xpbmtzKCkgY29uc3Q7
Ci0gICAgICAgIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKSBjb25zdDsKKyAgICAgICAgdmly
dHVhbCBib29sIHRhYnNUb0xpbmtzKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3
aW5kb3dSZXNpemVyUmVjdCgpIGNvbnN0OwogCi0gICAgICAgIHZvaWQgcmVwYWludChjb25zdCBJ
bnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9vbCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9v
bCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7Ci0gICAgICAgIHZvaWQgc2Nyb2xsKGNvbnN0
IEludFNpemUmIHNjcm9sbERlbHRhLCBjb25zdCBJbnRSZWN0JiByZWN0VG9TY3JvbGwsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KTsKLSAgICAgICAgSW50UG9pbnQgc2NyZWVuVG9XaW5kb3coY29u
c3QgSW50UG9pbnQmKSBjb25zdDsKLSAgICAgICAgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25z
dCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgICAgIFBsYXRmb3JtUGFnZUNsaWVudCBwbGF0Zm9ybVBh
Z2VDbGllbnQoKSBjb25zdDsKLSAgICAgICAgdm9pZCBjb250ZW50c1NpemVDaGFuZ2VkKEZyYW1l
KiwgY29uc3QgSW50U2l6ZSYpIGNvbnN0OwotICAgICAgICB2b2lkIHNjcm9sbFJlY3RJbnRvVmll
dyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIHZvaWQgcmVwYWludChjb25zdCBJbnRSZWN0JiwgYm9vbCBjb250ZW50Q2hhbmdlZCwgYm9v
bCBpbW1lZGlhdGUgPSBmYWxzZSwgYm9vbCByZXBhaW50Q29udGVudE9ubHkgPSBmYWxzZSk7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzY3JvbGwoY29uc3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEsIGNv
bnN0IEludFJlY3QmIHJlY3RUb1Njcm9sbCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpOworICAg
ICAgICB2aXJ0dWFsIEludFBvaW50IHNjcmVlblRvV2luZG93KGNvbnN0IEludFBvaW50JikgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dUb1NjcmVlbihjb25zdCBJbnRSZWN0
JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGxhdGZvcm1QYWdlQ2xpZW50IHBsYXRmb3JtUGFn
ZUNsaWVudCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGVudHNTaXplQ2hhbmdl
ZChGcmFtZSosIGNvbnN0IEludFNpemUmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNj
cm9sbFJlY3RJbnRvVmlldyhjb25zdCBJbnRSZWN0JiwgY29uc3QgU2Nyb2xsVmlldyopIGNvbnN0
OwogCiAgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25zdCBJbnRSZWN0Jik7CiAgICAg
ICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCwgaW50LCBjb25zdCBJbnRSZWN0JiwgY29u
c3QgSW50UmVjdCYpOwpAQCAtMTIxLDI3ICsxMjAsMjkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRUb29sVGlwKGNvbnN0IFN0cmluZyYsIFRleHREaXJl
Y3Rpb24pOwogCi0gICAgICAgIHZvaWQgcHJpbnQoRnJhbWUqKTsKLQotICAgICAgICB2b2lkIGV4
Y2VlZGVkRGF0YWJhc2VRdW90YShGcmFtZSosIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lKTsK
LQorICAgICAgICB2aXJ0dWFsIHZvaWQgcHJpbnQoRnJhbWUqKTsKKyNpZiBFTkFCTEUoREFUQUJB
U0UpCisgICAgICAgIHZpcnR1YWwgdm9pZCBleGNlZWRlZERhdGFiYXNlUXVvdGEoRnJhbWUqLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSk7CisjZW5kaWYKICNpZiBFTkFCTEUoT0ZGTElORV9X
RUJfQVBQTElDQVRJT05TKQogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhY2hlZE1heEFwcENhY2hl
U2l6ZShpbnQ2NF90IHNwYWNlTmVlZGVkKTsKICNlbmRpZgorICAgICAgICB2aXJ0dWFsIHZvaWQg
cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4pOworCisgICAgICAg
IHZpcnR1YWwgdm9pZCBmb3JtU3RhdGVEaWRDaGFuZ2UoY29uc3QgTm9kZSopIHsgfQogCi0gICAg
ICAgIC8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGNhbGwuIFRoZSBDaHJvbWVDbGllbnQgY2Fu
IGRpc3BsYXkgVUkgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uCi0gICAgICAgIC8vIHRv
IHVzZSBHZW9sb2NvY2F0aW9uLiBUaGUgQ2hyb21lQ2xpZW50IG11c3QgY2FsbCBHZW9sb2NhdGlv
bjo6c2V0U2hvdWxkQ2xlYXJDYWNoZSgpIGFwcHJvcHJpYXRlbHkuCi0gICAgICAgIHZvaWQgcmVx
dWVzdEdlb2xvY2F0aW9uUGVybWlzc2lvbkZvckZyYW1lKEZyYW1lKiwgR2VvbG9jYXRpb24qKTsK
KyAgICAgICAgdmlydHVhbCBQYXNzT3duUHRyPEhUTUxQYXJzZXJRdWlya3M+IGNyZWF0ZUhUTUxQ
YXJzZXJRdWlya3MoKSB7IHJldHVybiAwOyB9CiAKLSAgICAgICAgdm9pZCBydW5PcGVuUGFuZWwo
RnJhbWUqLCBQYXNzUmVmUHRyPEZpbGVDaG9vc2VyPik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBz
ZXRDdXJzb3IoUGxhdGZvcm1DdXJzb3JIYW5kbGUpOwogCi0gICAgICAgIGJvb2wgc2V0Q3Vyc29y
KFBsYXRmb3JtQ3Vyc29ySGFuZGxlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlcXVlc3RHZW9s
b2NhdGlvblBlcm1pc3Npb25Gb3JGcmFtZShGcmFtZSosIEdlb2xvY2F0aW9uKik7CiAKLSAgICAg
ICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgdGhlIGdpdmVuIGZvcm0gZWxlbWVudCBoYXMgY2hhbmdl
ZC4gVGhpcyBmdW5jdGlvbgotICAgICAgICAvLyB3aWxsIGJlIGNhbGxlZCBmcmVxdWVudGx5LCBz
byBoYW5kbGluZyBzaG91bGQgYmUgdmVyeSBmYXN0LgotICAgICAgICB2b2lkIGZvcm1TdGF0ZURp
ZENoYW5nZShjb25zdCBOb2RlKik7CisgICAgICAgIFdlYlByb2Nlc3MqIG1fd2ViUHJvY2VzczsK
KyAgICAgICAgV2ViVmlldyogbV93ZWJWaWV3OwogCi0gICAgICAgIFBhc3NPd25QdHI8SFRNTFBh
cnNlclF1aXJrcz4gY3JlYXRlSFRNTFBhcnNlclF1aXJrcygpOworICAgICAgICBXZWJDb3JlOjpL
VVJMIGxhc3RIb3ZlclVSTDsKKyAgICAgICAgV2ViQ29yZTo6U3RyaW5nIGxhc3RIb3ZlclRpdGxl
OworICAgICAgICBXZWJDb3JlOjpTdHJpbmcgbGFzdEhvdmVyQ29udGVudDsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQv
Q29udGV4dE1lbnVDbGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L1dl
YkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkK
KysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVudUNsaWVudEhhaWt1LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkNvbnRleHRNZW51
LmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIktVUkwuaCIKLQogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIApAQCAtMzcsNyArMzYsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHZvaWQgQ29udGV4dE1lbnVDbGllbnRIYWlrdTo6Y29udGV4dE1lbnVEZXN0
cm95ZWQoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgZGVsZXRlIHRoaXM7CiB9CiAK
IFBsYXRmb3JtTWVudURlc2NyaXB0aW9uIENvbnRleHRNZW51Q2xpZW50SGFpa3U6OmdldEN1c3Rv
bU1lbnVGcm9tRGVmYXVsdEl0ZW1zKENvbnRleHRNZW51KiBtZW51KQpJbmRleDogV2ViS2l0L2hh
aWt1L1dlYkNvcmVTdXBwb3J0L0NvbnRleHRNZW51Q2xpZW50SGFpa3UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvQ29udGV4dE1lbnVDbGllbnRIYWlrdS5oCShy
ZXZpc2lvbiA1NDI3NSkKKysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9Db250ZXh0TWVu
dUNsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogI2luY2x1
ZGUgIkNvbnRleHRNZW51Q2xpZW50LmgiCiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIENvbnRleHRNZW51OwogCkBAIC00MSwxMSArNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHZvaWQgY29udGV4dE1lbnVJdGVtU2VsZWN0ZWQoQ29udGV4dE1l
bnVJdGVtKiwgY29uc3QgQ29udGV4dE1lbnUqKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZG93
bmxvYWRVUkwoY29uc3QgS1VSTCYgdXJsKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNlYXJjaFdp
dGhHb29nbGUoY29uc3QgRnJhbWUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxvb2tVcEluRGlj
dGlvbmFyeShGcmFtZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3BlYWsoY29uc3QgU3RyaW5n
Jik7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NwZWFraW5nKCk7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBzdG9wU3BlYWtpbmcoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNlYXJjaFdpdGhHb29n
bGUoY29uc3QgRnJhbWUqKTsKICAgICB9OwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4
OiBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEhhaWt1LmNwcAko
cmV2aXNpb24gNTQyNzUpCisrKyBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVu
dEhhaWt1LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTAgKzI4LDE1IEBACiAjaW5jbHVkZSAi
RHJhZ0NsaWVudEhhaWt1LmgiCiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIldlYlZpZXcuaCIKIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK0RyYWdDbGllbnRIYWlr
dTo6RHJhZ0NsaWVudEhhaWt1KFdlYlZpZXcqIHdlYlZpZXcpCisgICAgOiBtX3dlYlZpZXcod2Vi
VmlldykKK3t9CisKIERyYWdEZXN0aW5hdGlvbkFjdGlvbiBEcmFnQ2xpZW50SGFpa3U6OmFjdGlv
bk1hc2tGb3JEcmFnKERyYWdEYXRhKikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDUs
NyArNTAsNyBAQCB2b2lkIERyYWdDbGllbnRIYWlrdTo6d2lsbFBlcmZvcm1EcmFnRGVzCiAKIHZv
aWQgRHJhZ0NsaWVudEhhaWt1OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpCiB7Ci0gICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICBkZWxldGUgdGhpczsKIH0KIAogRHJhZ1NvdXJjZUFjdGlvbiBE
cmFnQ2xpZW50SGFpa3U6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmKQpJbmRleDogV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRIYWlrdS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50SGFp
a3UuaAkocmV2aXNpb24gNTQyNzUpCisrKyBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRHJh
Z0NsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDEzICsyNiwxNCBAQAogCiAjaW5j
bHVkZSAiRHJhZ0NsaWVudC5oIgogCitjbGFzcyBXZWJWaWV3OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKICAgICBjbGFzcyBEcmFnQ2xpZW50SGFpa3UgOiBwdWJsaWMgRHJhZ0NsaWVudCB7CiAg
ICAgcHVibGljOgotICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbFBlcmZvcm1EcmFnRGVzdGluYXRp
b25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhZ0RhdGEqKTsKKyAgICAgICAgRHJhZ0Ns
aWVudEhhaWt1KFdlYlZpZXcqKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxQZXJmb3JtRHJh
Z0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKTsKICAg
ICAgICAgdmlydHVhbCBXZWJDb3JlOjpEcmFnRGVzdGluYXRpb25BY3Rpb24gYWN0aW9uTWFza0Zv
ckRyYWcoRHJhZ0RhdGEqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVz
dHJveWVkKCk7CiAgICAgICAgIHZpcnR1YWwgRHJhZ1NvdXJjZUFjdGlvbiBkcmFnU291cmNlQWN0
aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50Jik7CkBAIC00MCw2ICs0MSw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhEcmFnSW1hZ2VS
ZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgZHJhZ0ltYWdlT3JpZ2luLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEludFBvaW50JiBldmVudFBvcywgQ2xpcGJvYXJk
KiwgRnJhbWUqLCBib29sIGxpbmtEcmFnID0gZmFsc2UpOwogICAgICAgICB2aXJ0dWFsIERyYWdJ
bWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JMaW5rKEtVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVs
LCBGcmFtZSopOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2ViVmlldyogbV93ZWJWaWV3Owog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktpdC9oYWlrdS9XZWJD
b3JlU3VwcG9ydC9FZGl0Q29tbWFuZEhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1
L1dlYkNvcmVTdXBwb3J0L0VkaXRDb21tYW5kSGFpa3UuaAkocmV2aXNpb24gMCkKKysrIFdlYktp
dC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9FZGl0Q29tbWFuZEhhaWt1LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2V2aW4gT2xsaXZpZXIK
KyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXhpbWUgU2ltb24KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgRURJVENPTU1BTkRIQUlLVV9ICisjZGVmaW5lIEVESVRDT01NQU5E
SEFJS1VfSAorCisjaW5jbHVkZSAiRWRpdENvbW1hbmQuaCIKKworI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitjbGFzcyBFZGl0Q29tbWFuZEhh
aWt1IHsKK3B1YmxpYzoKKyAgICBFZGl0Q29tbWFuZEhhaWt1KFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpFZGl0Q29tbWFuZD4gY29tbWFuZCkKKyAgICB7CisgICAgICAgIG1fZWRpdENvbW1hbmQg
PSBjb21tYW5kOworICAgIH0KKworICAgIEVkaXRDb21tYW5kSGFpa3UoKSB7IH0KKyAgICBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6RWRpdENvbW1hbmQ+IGVkaXRDb21tYW5kKCkgeyByZXR1cm4g
bV9lZGl0Q29tbWFuZDsgfQorCitwcml2YXRlOgorICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkVk
aXRDb21tYW5kPiBtX2VkaXRDb21tYW5kOworfTsKKworI2VuZGlmIC8vIEVESVRDT01NQU5ESEFJ
S1VfSApJbmRleDogV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xp
ZW50SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwx
MCBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiS2V5Ym9hcmRDb2Rlcy5oIgogI2lu
Y2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKIAotI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01
OSw3ICs1OCw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OnNldFBhZ2UoUGFnZSogcGEKIAog
dm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6cGFnZURlc3Ryb3llZCgpCiB7Ci0gICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICBkZWxldGUgdGhpczsKIH0KIAogYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6
c2hvdWxkRGVsZXRlUmFuZ2UoUmFuZ2UqKQpAQCAtMTE2LDggKzExNSw4IEBAIGludCBFZGl0b3JD
bGllbnRIYWlrdTo6c3BlbGxDaGVja2VyRG9jdW0KIAogYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6
aXNFZGl0YWJsZSgpCiB7Ci0gICAgLy8gRklYTUU6IHNob3VsZCBiZSBjb250cm9sbGFibGUKLSAg
ICByZXR1cm4gZmFsc2U7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KIAogYm9vbCBFZGl0b3JDbGllbnRIYWlrdTo6c2hvdWxkQmVnaW5FZGl0aW5nKFdlYkNvcmU6
OlJhbmdlKikKQEAgLTE4Miw3ICsxODEsNiBAQCB2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpyZXNw
b25kVG9DaGFuZ2VkCiAKIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmRpZEVuZEVkaXRpbmcoKQog
ewotICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgbV9lZGl0aW5nID0gZmFsc2U7CiB9CiAKQEAg
LTIzOSw2ICsyMzcsNyBAQCB2b2lkIEVkaXRvckNsaWVudEhhaWt1OjpyZWRvKCkKIAogdm9pZCBF
ZGl0b3JDbGllbnRIYWlrdTo6aGFuZGxlS2V5Ym9hcmRFdmVudChLZXlib2FyZEV2ZW50KiBldmVu
dCkKIHsKK3ByaW50ZigiRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJvYXJkRXZlbnQoKVxu
Iik7CiAgICAgRnJhbWUqIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPmRvY3VtZW50KCktPmZv
Y3VzZWROb2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTI1Miw3ICsyNTEsNyBAQCB2b2lkIEVk
aXRvckNsaWVudEhhaWt1OjpoYW5kbGVLZXlib2FyZEV2CiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChzdGFydC0+aXNDb250ZW50RWRpdGFibGUoKSkgewotICAgICAgICBzd2l0Y2goa2V2ZW50
LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgeworICAgICAgICBzd2l0Y2ggKGtldmVudC0+d2lu
ZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKICAgICAgICAgY2FzZSBWS19CQUNLOgogICAgICAgICAg
ICAgZnJhbWUtPmVkaXRvcigpLT5kZWxldGVXaXRoRGlyZWN0aW9uKFNlbGVjdGlvbkNvbnRyb2xs
ZXI6OkJBQ0tXQVJELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGtldmVudC0+Y3RybEtleSgpID8gV29yZEdyYW51bGFyaXR5IDogQ2hhcmFjdGVyR3Jh
bnVsYXJpdHksCkBAIC0yOTksNiArMjk4LDcgQEAgdm9pZCBFZGl0b3JDbGllbnRIYWlrdTo6aGFu
ZGxlS2V5Ym9hcmRFdgogICAgICAgICBjYXNlIFZLX1RBQjoKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZGVmYXVsdDoKK3ByaW50ZigiZGVmYXVsdFxuIik7CiAgICAgICAgICAgICBpZiAo
IWtldmVudC0+Y3RybEtleSgpICYmICFrZXZlbnQtPmFsdEtleSgpICYmICFrZXZlbnQtPnRleHQo
KS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBpZiAoa2V2ZW50LT50ZXh0KCkubGVuZ3Ro
KCkgPT0gMSkgewogICAgICAgICAgICAgICAgICAgICBVQ2hhciBjaCA9IGtldmVudC0+dGV4dCgp
WzBdOwpAQCAtMzA2LDYgKzMwNiw3IEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtl
eWJvYXJkRXYKICAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDwgJyAnKQogICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQorcHJpbnRmKCJpbnNlcnRpbmcg
dGV4dFxuIik7CiAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5pbnNlcnRUZXh0KGtl
dmVudC0+dGV4dCgpLCBldmVudCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtldmVudC0+Y3Ry
bEtleSgpKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFs
S2V5Q29kZSgpKSB7CkBAIC0zMzYsOSArMzM3LDExIEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6
OmhhbmRsZUtleWJvYXJkRXYKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHJl
dHVybjsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CitwcmludGYoIm5vdCBlZGl0YWJsZVxuIik7CiAgICAgICAgIHN3
aXRjaCAoa2V2ZW50LT53aW5kb3dzVmlydHVhbEtleUNvZGUoKSkgewogICAgICAgICBjYXNlIFZL
X1VQOgogICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJNb3ZlVXAiKTsKQEAg
LTM2MiwxNyArMzY1LDE4IEBAIHZvaWQgRWRpdG9yQ2xpZW50SGFpa3U6OmhhbmRsZUtleWJvYXJk
RXYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYg
KGtldmVudC0+Y3RybEtleSgpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoKGtldmVudC0+d2lu
ZG93c1ZpcnR1YWxLZXlDb2RlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBWS19BOgot
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJTZWxlY3RB
bGwiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg
ICBjYXNlIFZLX0M6IGNhc2UgVktfWDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lLT5l
ZGl0b3IoKS0+Y29tbWFuZCgiQ29weSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgc3dpdGNoIChrZXZlbnQtPndpbmRvd3NWaXJ0dWFsS2V5
Q29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBWS19BOgorICAgICAgICAgICAgICAgICAg
ICBmcmFtZS0+ZWRpdG9yKCktPmNvbW1hbmQoIlNlbGVjdEFsbCIpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFZLX0M6IGNhc2UgVktfWDoKKyAgICAg
ICAgICAgICAgICAgICAgZnJhbWUtPmVkaXRvcigpLT5jb21tYW5kKCJDb3B5Iik7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2Ug
cmV0dXJuOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgfQogICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOwpJbmRleDogV2Vi
S2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhhaWt1LmgJKHJldmlz
aW9uIDU0Mjc1KQorKysgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEhh
aWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDE4ICszMiwxNyBAQAogI2RlZmluZSBFZGl0b3JD
bGllbnRIYWlrdV9ICiAKICNpbmNsdWRlICJFZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJSZWZD
b3VudGVkLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlZkNvdW50ZWQuaCIKIAog
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgRWRpdG9yQ2xpZW50SGFpa3UgOiBwdWJsaWMgRWRpdG9yQ2xpZW50IHsKICAgICBwdWJs
aWM6CiAgICAgICAgIEVkaXRvckNsaWVudEhhaWt1KCk7Ci0gICAgICAgIHZvaWQgc2V0UGFnZSgg
UGFnZSogcGFnZSApOworICAgICAgICB2b2lkIHNldFBhZ2UoUGFnZSogcGFnZSk7CiAKICAgICAg
ICAgdmlydHVhbCB2b2lkIHBhZ2VEZXN0cm95ZWQoKTsKIApAQCAtMTE2LDYgKzExNSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGFnZSogbV9wYWdlOwogICAgICAgICBib29sIG1f
ZWRpdGluZzsKICAgICAgICAgYm9vbCBtX2luVW5kb1JlZG87IC8vIG91ciB1bmRvIHN0YWNrIHdv
cmtzIGRpZmZlcmVudGx5IC0gZG9uJ3QgcmUtZW50ZXIhCisgICAgICAgIGJvb2wgbV9jcmFzaElu
SXNFZGl0aW5nOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYktp
dC9oYWlrdS9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRIYWlr
dS5jcHAJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0Zy
YW1lTG9hZGVyQ2xpZW50SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqIENvcHlyaWdodCAoQykgMjAw
NyBSeWFuIExlYXZlbmdvb2QgPGxlYXZlbmdvb2RAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdt
YWlsLmNvbT4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBTdGVw
aGFuIEHDn211cyA8c3VwZXJzdGlwcGlAZ214LmRlPgogICoKICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAg
LTQzLDE0OSArNDQsMTQxIEBACiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTY3JpcHRDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiV2ViRnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQcm9jZXNzLmgiCiAjaW5jbHVkZSAiV2Vi
Vmlldy5oIgorI2luY2x1ZGUgIldlYlZpZXdDb25zdGFudHMuaCIKIAogI2luY2x1ZGUgPE1lc3Nh
Z2UuaD4KICNpbmNsdWRlIDxTdHJpbmcuaD4KIAotI2luY2x1ZGUgPGFwcC9NZXNzZW5nZXIuaD4K
LQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OkZyYW1l
TG9hZGVyQ2xpZW50SGFpa3UoKQotICAgIDogbV9mcmFtZSgwKQotewotfQotCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnNldEZyYW1lKEZyYW1lKiBmcmFtZSkKK0ZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OkZyYW1lTG9hZGVyQ2xpZW50SGFpa3UoV2ViUHJvY2Vzcyogd2ViUHJvY2Vzcywg
V2ViRnJhbWUqIHdlYkZyYW1lKQorICAgIDogbV93ZWJQcm9jZXNzKHdlYlByb2Nlc3MpCisgICAg
LCBtX3dlYkZyYW1lKHdlYkZyYW1lKQorICAgICwgbV9tZXNzZW5nZXIoKQogewotICAgIG1fZnJh
bWUgPSBmcmFtZTsKKyAgICBBU1NFUlQobV93ZWJQcm9jZXNzKTsKKyAgICBBU1NFUlQobV93ZWJG
cmFtZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0V2ViVmlldyhXZWJW
aWV3KiB3ZWJ2aWV3KQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXREaXNwYXRjaFRh
cmdldChCSGFuZGxlciogaGFuZGxlcikKIHsKLSAgICBtX3dlYlZpZXcgPSB3ZWJ2aWV3OwotICAg
IG1fbWVzc2VuZ2VyID0gbmV3IEJNZXNzZW5nZXIobV93ZWJWaWV3KTsKLSAgICBBU1NFUlQobV9t
ZXNzZW5nZXItPklzVmFsaWQoKSk7CisgICAgbV9tZXNzZW5nZXIgPSBCTWVzc2VuZ2VyKGhhbmRs
ZXIpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRldGFjaEZyYW1lTG9hZGVy
KCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZnJhbWVMb2FkZXJEZXN0cm95ZWQoKQog
ewotICAgIG1fZnJhbWUgPSAwOworICAgIG1fd2ViRnJhbWUgPSAwOworICAgIGRlbGV0ZSB0aGlz
OwogfQogCiBib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Omhhc1dlYlZpZXcoKSBjb25zdAog
ewotICAgIHJldHVybiBtX3dlYlZpZXc7Ci19Ci0KLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6aGFzQmFja0ZvcndhcmRMaXN0KCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBtX3dlYlByb2Nlc3MtPndlYlZpZXcoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZXNldEJhY2tGb3J3YXJkTGlzdCgpCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6Om1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExv
YWRlciopCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1Ojpwcm92aXNpb25hbEl0ZW1Jc1RhcmdldCgpIGNvbnN0Cit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmZvcmNlTGF5b3V0KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBtX3dlYkZyYW1lLT5mcmFtZSgpLT52aWV3KCktPmZvcmNl
TGF5b3V0KCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6bWFrZVJlcHJlc2Vu
dGF0aW9uKERvY3VtZW50TG9hZGVyKikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Zm9y
Y2VMYXlvdXRGb3JOb25IVE1MKCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIG1fd2Vi
RnJhbWUtPmZyYW1lKCktPnZpZXcoKS0+Zm9yY2VMYXlvdXQoKTsKIH0KIAotdm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1Ojpmb3JjZUxheW91dCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OnNldENvcGllc09uU2Nyb2xsKCkKIHsKK3ByaW50ZigiRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6c2V0Q29waWVzT25TY3JvbGwoKVxuIik7CisgICAgLy8gYXBwYXJlbnRseSBtYWMgc3BlY2lm
aWMKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFp
a3U6OmZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRldGFjaGVkRnJvbVBhcmVudDIoKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRldGFjaGVkRnJvbVBhcmVudDMoKQogewotICAgIG5v
dEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dXBkYXRl
SGlzdG9yeUZvckJhY2tGb3J3YXJkTmF2aWdhdGlvbigpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jiwg
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCiB7CiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp1cGRh
dGVIaXN0b3J5Rm9yUmVsb2FkKCkKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0
Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50KQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVy
Q2xpZW50SGFpa3U6OnVwZGF0ZUhpc3RvcnlGb3JTdGFuZGFyZExvYWQoKQordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3Qo
dW5zaWduZWQgbG9uZywgY29uc3QgU2NyaXB0U3RyaW5nJikKIHsKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUhpc3RvcnlGb3JJ
bnRlcm5hbExvYWQoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojphc3NpZ25JZGVudGlm
aWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIERvY3VtZW50TG9h
ZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnVwZGF0ZUhpc3RvcnlBZnRlckNsaWVu
dFJlZGlyZWN0KCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU2Vu
ZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3Qm
IHJlcXVlc3QsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQogewogICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0Q29waWVz
T25TY3JvbGwoKQorYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzaG91bGRVc2VDcmVkZW50
aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCiB7Ci0gICAgLy8gYXBw
YXJlbnRseSBtYWMgc3BlY2lmaWMKICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBm
YWxzZTsKIH0KIAotTG9hZEVycm9yUmVzZXRUb2tlbiogRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
dG9rZW5Gb3JMb2FkRXJyb3JSZXNldCgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwg
dW5zaWduZWQgbG9uZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQogewogICAgIG5v
dEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6cmVzZXRBZnRlckxvYWRFcnJvcihMb2FkRXJyb3JSZXNldFRva2VuKikKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNo
YWxsZW5nZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRvTm90UmVzZXRBZnRlckxvYWRFcnJvcihMb2FkRXJyb3JSZXNl
dFRva2VuKikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZl
UmVzcG9uc2UoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZCwgY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp3aWxsQ2xvc2VEb2N1bWVudCgpCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUNvbnRlbnRMZW5ndGgo
RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZCwgaW50IGxlbmd0aCkKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRldGFjaGVkRnJvbVBhcmVudDIoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNw
YXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nKQogewog
ICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6
ZGV0YWNoZWRGcm9tUGFyZW50MygpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3Bh
dGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZywg
Y29uc3QgUmVzb3VyY2VFcnJvciYpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBCTWVz
c2FnZSBtZXNzYWdlKExPQURfRkFJTEVEKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwg
bG9hZGVyLT51cmwoKS5zdHJpbmcoKSk7CisgICAgbV9tZXNzZW5nZXIuU2VuZE1lc3NhZ2UoJm1l
c3NhZ2UpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkSGFu
ZGxlT25sb2FkRXZlbnRzKCkKIHsKLSAgICBpZiAobV93ZWJWaWV3KSB7Ci0gICAgICAgIEJNZXNz
YWdlIG1lc3NhZ2UoTE9BRF9PTkxPQURfSEFORExFKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJp
bmcoInVybCIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCku
dXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3Nh
Z2UpOwotICAgIH0KKyAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfT05MT0FEX0hBTkRMRSk7Cisg
ICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIG1fd2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigp
LT5kb2N1bWVudExvYWRlcigpLT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkpOworICAgIG1fbWVz
c2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVu
dEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zpc2lvbmFsTG9h
ZCgpCkBAIC0yMjgsNjUgKzIyMSw2NCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoV2lsCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkU3RhcnRQ
cm92aXNpb25hbExvYWQoKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAgICAgQk1lc3Nh
Z2UgbWVzc2FnZShMT0FEX05FR09DSUFUSU5HKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmco
InVybCIsIG1fZnJhbWUtPmxvYWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnJl
cXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2Fn
ZSgmbWVzc2FnZSk7Ci0gICAgfQorICAgIEJNZXNzYWdlIG1lc3NhZ2UoTE9BRF9ORUdPQ0lBVElO
Ryk7CisgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIG1fd2ViRnJhbWUtPmZyYW1lKCktPmxv
YWRlcigpLT5wcm92aXNpb25hbERvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKS5zdHJp
bmcoKSk7CisgICAgbV9tZXNzZW5nZXIuU2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwogfQogCiB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0
cmluZyYgdGl0bGUpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBtX3dlYlZpZXct
PlNldFBhZ2VUaXRsZSh0aXRsZSk7CisgICAgbV93ZWJGcmFtZS0+c2V0VGl0bGUodGl0bGUpOwog
Ci0gICAgICAgIEJNZXNzYWdlIG1lc3NhZ2UoVElUTEVfQ0hBTkdFRCk7Ci0gICAgICAgIG1lc3Nh
Z2UuQWRkU3RyaW5nKCJ0aXRsZSIsIHRpdGxlKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRN
ZXNzYWdlKCZtZXNzYWdlKTsKLSAgICB9CisgICAgQk1lc3NhZ2UgbWVzc2FnZShUSVRMRV9DSEFO
R0VEKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidGl0bGUiLCB0aXRsZSk7CisgICAgbV9tZXNz
ZW5nZXIuU2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwogfQogCiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCiB7Ci0gICAgaWYgKG1fd2ViVmlldykgewot
ICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfVFJBTlNGRVJSSU5HKTsKLSAgICAgICAgbWVz
c2FnZS5BZGRTdHJpbmcoInVybCIsIG1fZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigp
LT5yZXF1ZXN0KCkudXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1l
c3NhZ2UoJm1lc3NhZ2UpOwotICAgIH0KKyAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfVFJBTlNG
RVJSSU5HKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV93ZWJGcmFtZS0+ZnJhbWUo
KS0+bG9hZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPnJlcXVlc3QoKS51cmwoKS5zdHJpbmcoKSk7
CisgICAgbV9tZXNzZW5nZXIuU2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOwogfQogCi12b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNv
bnN0IFJlc291cmNlRXJyb3ImKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAgICAgQk1l
c3NhZ2UgbWVzc2FnZShMT0FEX0RPQ19DT01QTEVURUQpOwotICAgICAgICBtZXNzYWdlLkFkZFN0
cmluZygidXJsIiwgbV9mcmFtZS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKLSAgICAgICAg
bV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKLSAgICB9CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZp
bmlzaExvYWQoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxM
b2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2Fk
KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEJNZXNzYWdlIG1lc3NhZ2UoTE9BRF9E
T0NfQ09NUExFVEVEKTsKKyAgICBtZXNzYWdlLkFkZFN0cmluZygidXJsIiwgbV93ZWJGcmFtZS0+
ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpLnN0cmluZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5k
TWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlz
cGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKQordm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpkaXNwYXRjaERpZEZpbmlzaExvYWQoKQogewotICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX0ZJTklTSEVEKTsKKyAgICBtZXNzYWdlLkFk
ZFN0cmluZygidXJsIiwgbV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgpLnN0cmlu
ZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAKLXZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hTaG93KCkKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjYW5jZWxQb2xpY3lDaGVj
aygpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkRmlyc3RWaXN1YWxs
eU5vbkVtcHR5TGF5b3V0KCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtMjk0LDkg
KzI4Niw3IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuY2VsUG9saWMKIHZvaWQg
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGlj
eUZ1bmN0aW9uIGZ1bmN0aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCiB7CiAgICAgLy8gRklY
TUU6IFNlbmQgYW4gZXZlbnQgdG8gYWxsb3cgZm9yIGFsZXJ0cyBhbmQgY2FuY2VsbGF0aW9uLgot
ICAgIGlmICghbV9mcmFtZSkKLSAgICAgICAgcmV0dXJuOwotICAgIChtX2ZyYW1lLT5sb2FkZXIo
KS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7CisgICAgKG1fd2ViRnJh
bWUtPmZyYW1lKCktPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5
VXNlKTsKIH0KIAogdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRN
YWluUmVzb3VyY2UoRG9jdW1lbnRMb2FkZXIqKQpAQCAtMzA0LDE1OSArMjk0LDEyNiBAQCB2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpyZXZlcnRUb1Byb3Zpc2lvbmFs
U3RhdGUoRG9jdW1lbnRMb2FkZXIqKQorRnJhbWUqIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoQ3JlYXRlUGFnZSgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKK3ByaW50ZigiRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hDcmVhdGVQYWdlKClcbiIpOworLy8gICAgbV93
ZWJGcmFtZS0+d2ViVmlldygpLT5jcmVhdGVXZWJWaWV3KCk7CisgICAgcmV0dXJuIDA7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cG9zdFByb2dyZXNzU3RhcnRlZE5vdGlmaWNh
dGlvbigpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoU2hvdygpCiB7CiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpw
b3N0UHJvZ3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVUeXBlKEZyYW1lUG9saWN5
RnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IFN0cmluZyYgbWltZXR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgKG1f
d2ViRnJhbWUtPmZyYW1lKCktPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbiko
UG9saWN5VXNlKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jl
c3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmV3V2luZG93QWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24g
ZnVuY3Rpb24sIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24mLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXROYW1lKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAg
ICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX0RMX0NPTVBMRVRFRCk7Ci0gICAgICAgIG1lc3NhZ2Uu
QWRkU3RyaW5nKCJ1cmwiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+dXJsKCkuc3RyaW5nKCkpOwotICAg
ICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2UpOworICAgIEJNZXNzYWdlIG1l
c3NhZ2UoTkVXX1dJTkRPV19SRVFVRVNURUQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1cmwi
LCByZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKKyAgICBpZiAobV9tZXNzZW5nZXIuU2VuZE1lc3Nh
Z2UoJm1lc3NhZ2UpKSB7CisgICAgICAgIChtX3dlYkZyYW1lLT5mcmFtZSgpLT5sb2FkZXIoKS0+
cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeUlnbm9yZSk7CisgICAgICAgIHJldHVy
bjsKICAgICB9Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvZ3Jlc3NTdGFy
dGVkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi0KLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6cHJvZ3Jlc3NDb21wbGV0ZWQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7
Ci19Ci0KLQotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzZXRNYWluRnJhbWVEb2N1bWVu
dFJlYWR5KGJvb2wpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAvLyB0aGlzIGlzIG9u
bHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBwcm92aWRlIGFuIGV4dGVybmFsIEFQSSBmb3IgdGhlIERP
TQotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OndpbGxDaGFuZ2VUaXRsZShEb2N1
bWVudExvYWRlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogZG9jTG9hZGVy
KQotewotICAgIHNldFRpdGxlKGRvY0xvYWRlci0+dGl0bGUoKSwgZG9jTG9hZGVyLT51cmwoKSk7
Ci19CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZmluaXNoZWRMb2FkaW5nKERvY3Vt
ZW50TG9hZGVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIChtX3dlYkZyYW1lLT5m
cmFtZSgpLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7
CiB9CiAKLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0
IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9u
IGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPikKIHsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVybiB0cnVlOwotfQorICAgIEJNZXNzYWdl
IG1lc3NhZ2UoTkFWSUdBVElPTl9SRVFVRVNURUQpOworICAgIG1lc3NhZ2UuQWRkU3RyaW5nKCJ1
cmwiLCByZXF1ZXN0LnVybCgpLnN0cmluZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2Fn
ZSgmbWVzc2FnZSk7CiAKLWJvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cmVwcmVzZW50YXRp
b25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0Ci17Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgKG1fd2ViRnJhbWUt
PmZyYW1lKCktPmxvYWRlcigpLT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5VXNl
KTsKIH0KIAotU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmdlbmVyYXRlZE1JTUVUeXBl
Rm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBjb25zdAordm9pZCBGcmFtZUxv
YWRlckNsaWVudEhhaWt1OjpjYW5jZWxQb2xpY3lDaGVjaygpCiB7CiAgICAgbm90SW1wbGVtZW50
ZWQoKTsKLSAgICByZXR1cm4gU3RyaW5nKCk7Ci19Ci0KLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6ZnJhbWVMb2FkQ29tcGxldGVkKCkKLXsKLSAgICBpZiAobV93ZWJWaWV3LT5Mb2NrTG9v
cGVyKCkpIHsKLSAgICAgICAgbV93ZWJWaWV3LT5EcmF3KG1fd2ViVmlldy0+Qm91bmRzKCkpOwot
ICAgICAgICBtX3dlYlZpZXctPlVubG9ja0xvb3BlcigpOwotICAgIH0KIH0KIAotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGlj
eShjb25zdCBSZXNvdXJjZUVycm9yJikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlc3RvcmVWaWV3U3RhdGUoKQordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1lbnRMb2Fk
ZXIqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6cmVzdG9yZVNjcm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlKCkKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1lbnRM
b2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnByb3Zpc2lvbmFsTG9h
ZFN0YXJ0ZWQoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NTdGFy
dGVkTm90aWZpY2F0aW9uKCkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNob3VsZFRyZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0
IEtVUkwmKSBjb25zdAordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpwb3N0UHJvZ3Jlc3NF
c3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmFkZEhp
c3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1
Ojpwb3N0UHJvZ3Jlc3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBCTWVzc2FnZSBtZXNzYWdlKExPQURfRExfQ09NUExFVEVEKTsKKyAgICBtZXNz
YWdlLkFkZFN0cmluZygidXJsIiwgbV93ZWJGcmFtZS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVybCgp
LnN0cmluZygpKTsKKyAgICBtX21lc3Nlbmdlci5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7CiB9CiAK
LXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlkRmluaXNoTG9hZCgpCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50SGFpa3U6OnNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIC8vIHRoaXMgaXMgb25seSBpbnRlcmVzdGluZyBvbmNl
IHdlIHByb3ZpZGUgYW4gZXh0ZXJuYWwgQVBJIGZvciB0aGUgRE9NCiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6cHJlcGFyZUZvckRhdGFTb3VyY2VSZXBsYWNlbWVudCgpCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1
ZXN0JikKIHsKKyAgICBwcmludGYoIkZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnN0YXJ0RG93bmxv
YWQoKVxuIik7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJikKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6d2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVy
KikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1TdHJpbmcgRnJhbWVMb2FkZXJDbGll
bnRIYWlrdTo6dXNlckFnZW50KGNvbnN0IEtVUkwmKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpkaWRDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciogZG9jTG9hZGVyKQogewotICAgIHJl
dHVybiBTdHJpbmcoIk1vemlsbGEvNS4wIChjb21wYXRpYmxlOyBVOyBJbmZpTmV0IDAuMTsgSGFp
a3UpIEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdlY2tvKSIpOworICAgIHNldFRpdGxl
KGRvY0xvYWRlci0+dGl0bGUoKSwgZG9jTG9hZGVyLT51cmwoKSk7CiB9CiAKLXZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50SGFpa3U6OmNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxv
YWRlciwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOwotfQorICAgIEZyYW1lKiBmcmFtZSA9IG1fd2ViRnJhbWUtPmZyYW1lKCk7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmZyYW1lTG9hZGVyRGVzdHJveWVkKCkKLXsKLSAgICBtX2ZyYW1lID0gMDsKLSAgICBtX21lc3Nl
bmdlciA9IDA7Ci0gICAgZGVsZXRlIHRoaXM7Ci19CisgICAgLy8gU2V0IHRoZSBlbmNvZGluZy4g
VGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgb25jZSwgYnV0IGl0J3MgaGFybWxlc3MgdG8gZG8g
aXQgYWdhaW4gbGF0ZXIuCisgICAgU3RyaW5nIGVuY29kaW5nID0gZnJhbWUtPmxvYWRlcigpLT5k
b2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5nKCk7CisgICAgYm9vbCB1c2VyQ2hvc2Vu
ID0gIWVuY29kaW5nLmlzTnVsbCgpOworICAgIGlmICghdXNlckNob3NlbikKKyAgICAgICAgZW5j
b2RpbmcgPSBsb2FkZXItPnJlc3BvbnNlKCkudGV4dEVuY29kaW5nTmFtZSgpOworICAgIGZyYW1l
LT5sb2FkZXIoKS0+c2V0RW5jb2RpbmcoZW5jb2RpbmcsIHVzZXJDaG9zZW4pOwogCi1ib29sIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0JikgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIHJldHVy
biB0cnVlOworICAgIGlmIChkYXRhKQorICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmFkZERhdGEo
ZGF0YSwgbGVuZ3RoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpwYXJ0Q2xl
YXJlZEluQmVnaW4oKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpmaW5pc2hlZExvYWRp
bmcoRG9jdW1lbnRMb2FkZXIqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC00OTQs
MjYgKzQ1MSwxNSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNhdmVTY3JvbGxQCiAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpj
YW5DYWNoZVBhZ2UoKSBjb25zdAordm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaWREaXNw
bGF5SW5zZWN1cmVDb250ZW50KCkKIHsKLSAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRnJh
bWVMb2FkZXJDbGllbnRIYWlrdTo6c2V0TWFpbkRvY3VtZW50RXJyb3IoV2ViQ29yZTo6RG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6ZGlkUnVuSW5zZWN1cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKikKIHsK
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmNvbW1pdHRlZExvYWQoV2ViQ29yZTo6RG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hh
ciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICBpZiAoIW1fZnJhbWUpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEZyYW1lTG9hZGVyKiBmcmFtZUxvYWRlciA9IGxvYWRlci0+ZnJhbWVMb2FkZXIo
KTsKLSAgICBmcmFtZUxvYWRlci0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdO
YW1lKCksIGZhbHNlKTsKLSAgICBmcmFtZUxvYWRlci0+YWRkRGF0YShkYXRhLCBsZW5ndGgpOwot
fQotCiBXZWJDb3JlOjpSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNhbmNl
bGxlZEVycm9yKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNTQ5LDE4OSArNDk1LDE0MyBAQCBXZWJDb3JlOjpSZXNv
dXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50CiAgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3Ry
aW5nKCksIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCks
IFN0cmluZygpKTsKIH0KIAotYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzaG91bGRGYWxs
QmFjayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKK1Jlc291cmNlRXJyb3Ig
RnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBS
ZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAg
IHJldHVybiBmYWxzZTsKLX0KLQotV1RGOjpQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBGcmFt
ZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJl
cXVlc3QmIHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN1YnN0aXR1dGVEYXRh
JiBzdWJzdGl0dXRlRGF0YSkKLXsKLSAgICByZXR1cm4gRG9jdW1lbnRMb2FkZXI6OmNyZWF0ZShy
ZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoU3RyaW5n
KCksIFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbiwgcmVzcG9uc2UudXJsKCkuc3RyaW5nKCks
IFN0cmluZygpKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojpkb3dubG9hZChS
ZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291
cmNlUmVzcG9uc2UmKQorYm9vbCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpzaG91bGRGYWxsQmFj
ayhjb25zdCBXZWJDb3JlOjpSZXNvdXJjZUVycm9yJiBlcnJvcikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1Ojphc3NpZ25JZGVudGlmaWVyVG9Jbml0aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50
aWZpZXIsIERvY3VtZW50TG9hZGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK2Jv
b2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuSGFuZGxlUmVxdWVzdChjb25zdCBXZWJDb3Jl
OjpSZXNvdXJjZVJlcXVlc3QmKSBjb25zdAogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAg
RnJhbWUqIGZyYW1lID0gbV93ZWJGcmFtZS0+ZnJhbWUoKTsKKyAgICBQYWdlKiBwYWdlID0gZnJh
bWUtPnBhZ2UoKTsKKworICAgIHJldHVybiBwYWdlICYmIHBhZ2UtPm1haW5GcmFtZSgpID09IGZy
YW1lOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoV2lsbFNlbmRS
ZXF1ZXN0KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgUmVzb3VyY2VSZXF1ZXN0JiBy
ZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiByZXNwb25zZSkKK2Jvb2wgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlNRVR5cGUpIGNvbnN0
CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBG
cmFtZUxvYWRlckNsaWVudEhhaWt1OjpzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcpCitib29sIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJl
cHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2NoZW1lKSBj
b25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZywgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQorU3RyaW5nIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJM
U2NoZW1lKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkQ2FuY2Vs
QXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGxvbmcsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJikKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6ZnJhbWVMb2FkQ29tcGxldGVkKCkKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGlkUmVj
ZWl2ZVJlc3BvbnNlKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcgaWQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQordm9pZCBGcmFtZUxvYWRlckNsaWVudEhh
aWt1OjpzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKikKIHsKICAgICBub3RJbXBsZW1l
bnRlZCgpOwotICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKLSAgICBtX2ZpcnN0RGF0YSA9IHRy
dWU7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRSZWNlaXZl
Q29udGVudExlbmd0aChEb2N1bWVudExvYWRlciogbG9hZGVyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
aWQsIGludCBsZW5ndGgpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlc3RvcmVWaWV3
U3RhdGUoKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJD
bGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5nKERvY3VtZW50TG9hZGVyKiwgdW5z
aWduZWQgbG9uZykKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6cHJvdmlzaW9uYWxMb2Fk
U3RhcnRlZCgpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2Fk
ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VFcnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OmRpZEZpbmlzaExvYWQoKQogewotICAgIGlmIChtX3dlYlZpZXcpIHsKLSAgICAg
ICAgQk1lc3NhZ2UgbWVzc2FnZShMT0FEX0ZBSUxFRCk7Ci0gICAgICAgIG1lc3NhZ2UuQWRkU3Ry
aW5nKCJ1cmwiLCBtX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVxdWVzdCgp
LnVybCgpLnN0cmluZygpKTsKLSAgICAgICAgbV9tZXNzZW5nZXItPlNlbmRNZXNzYWdlKCZtZXNz
YWdlKTsKLSAgICB9CisgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAotYm9vbCBGcmFtZUxvYWRl
ckNsaWVudEhhaWt1OjpkaXNwYXRjaERpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNoZShEb2N1
bWVudExvYWRlciosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmLCBpbnQpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKQogewogICAgIG5vdEltcGxl
bWVudGVkKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBs
b25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKQorV1RGOjpQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVy
PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVEb2N1bWVudExvYWRlcihjb25zdCBSZXNv
dXJjZVJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFN1YnN0aXR1dGVEYXRhJiBzdWJzdGl0dXRlRGF0
YSkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBEb2N1bWVudExvYWRlcjo6
Y3JlYXRlKHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhKTsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNs
aWVudEhhaWt1OjpkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVzb3VyY2VF
cnJvciYpCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnNldFRpdGxlKGNvbnN0IFN0cmlu
ZyYgdGl0bGUsIGNvbnN0IEtVUkwmKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZv
aWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEaWRGYWlsTG9hZChjb25zdCBSZXNv
dXJjZUVycm9yJikKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6c2F2ZVBsYXRmb3JtRGF0
YVRvQ2FjaGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9
CiAKLUZyYW1lKiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaENyZWF0ZVBhZ2UoKQor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1Ojp0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2Fj
aGVkRnJhbWUoQ2FjaGVkRnJhbWUqKQogewogICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0
dXJuIGZhbHNlOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpc3BhdGNoRGVj
aWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIG1pbWV0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVz
dCkKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9y
TmV3UGFnZSgpCiB7Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKG1fd2ViRnJhbWUpOwogCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAobV9mcmFtZS0+
bG9hZGVyKCktPnBvbGljeUNoZWNrZXIoKS0+KmZ1bmN0aW9uKShQb2xpY3lVc2UpOwotfQorICAg
IEZyYW1lKiBmcmFtZSA9IG1fd2ViRnJhbWUtPmZyYW1lKCk7CisgICAgUGFnZSogcGFnZSA9IGZy
YW1lLT5wYWdlKCk7CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYgcmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
LCBjb25zdCBTdHJpbmcmIHRhcmdldE5hbWUpCi17Ci0gICAgaWYgKCFtX2ZyYW1lKQotICAgICAg
ICByZXR1cm47CisgICAgYm9vbCBpc01haW5GcmFtZSA9IGZyYW1lICYmIGZyYW1lID09IHBhZ2Ut
Pm1haW5GcmFtZSgpOwogCi0gICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2FnZSBt
ZXNzYWdlKE5FV19XSU5ET1dfUkVRVUVTVEVEKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmco
InVybCIsIHJlcXVlc3QudXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBpZiAobV9tZXNzZW5nZXIt
PlNlbmRNZXNzYWdlKCZtZXNzYWdlKSkgewotICAgICAgICAgICAgKG1fZnJhbWUtPmxvYWRlcigp
LT5wb2xpY3lDaGVja2VyKCktPipmdW5jdGlvbikoUG9saWN5SWdub3JlKTsKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgfQotICAgIH0KKyAgICBCUmVjdCBib3VuZHMgPSBtX3dlYlByb2Nl
c3MtPnZpZXdCb3VuZHMoKTsKKyAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKGJvdW5kcy5JbnRl
Z2VyV2lkdGgoKSxib3VuZHMuSW50ZWdlckhlaWdodCgpKTsKIAotICAgIChtX2ZyYW1lLT5sb2Fk
ZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci19CisgICAgaWYg
KGlzTWFpbkZyYW1lICYmIGZyYW1lLT52aWV3KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNl
dFBhcmVudFZpc2libGUoZmFsc2UpOwogCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRp
c3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9u
IGZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYgYWN0aW9uLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
UGFzc1JlZlB0cjxGb3JtU3RhdGU+KQotewotICAgIGlmICghbV9mcmFtZSB8fCAhZnVuY3Rpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICBib29sIHRyYW5zcGFyZW50ID0gbV93ZWJGcmFtZS0+aXNU
cmFuc3BhcmVudCgpOworICAgIENvbG9yIGJhY2tncm91bmRDb2xvciA9IHRyYW5zcGFyZW50ID8g
V2ViQ29yZTo6Q29sb3I6OnRyYW5zcGFyZW50IDogV2ViQ29yZTo6Q29sb3I6OndoaXRlOwogCi0g
ICAgaWYgKG1fd2ViVmlldykgewotICAgICAgICBCTWVzc2FnZSBtZXNzYWdlKE5BVklHQVRJT05f
UkVRVUVTVEVEKTsKLSAgICAgICAgbWVzc2FnZS5BZGRTdHJpbmcoInVybCIsIHJlcXVlc3QudXJs
KCkuc3RyaW5nKCkpOwotICAgICAgICBtX21lc3Nlbmdlci0+U2VuZE1lc3NhZ2UoJm1lc3NhZ2Up
OworICAgIGZyYW1lLT5jcmVhdGVWaWV3KHNpemUsIGJhY2tncm91bmRDb2xvciwgdHJhbnNwYXJl
bnQsIEludFNpemUoKSwgZmFsc2UpOwogCi0gICAgICAgIChtX2ZyYW1lLT5sb2FkZXIoKS0+cG9s
aWN5Q2hlY2tlcigpLT4qZnVuY3Rpb24pKFBvbGljeVVzZSk7Ci0gICAgfQorICAgIGlmIChpc01h
aW5GcmFtZSkKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+c2V0UGFyZW50VmlzaWJsZSh0cnVlKTsK
IH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaXNwYXRjaFVuYWJsZVRvSW1wbGVt
ZW50UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKQorU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50
SGFpa3U6OnVzZXJBZ2VudChjb25zdCBLVVJMJikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBTdHJpbmcoIk1vemlsbGEvNS4wIChjb21wYXRpYmxlOyBVOyBJbmZpTmV0IDAu
MTsgSGFpa3UpIEFwcGxlV2ViS2l0LzQyMCsgKEtIVE1MLCBsaWtlIEdlY2tvKSIpOwogfQogCi12
b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y2FuQ2FjaGVQYWdlKCkgY29u
c3QKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKIH0KIAotUGFz
c1JlZlB0cjxGcmFtZT4gRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlRnJhbWUoY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
RWxlbWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1h
cmdpbldpZHRoLCBpbnQgbWFyZ2luSGVpZ2h0KQorUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVMb2Fk
ZXJDbGllbnRIYWlrdTo6Y3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IG5hbWUsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBy
ZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1hcmdp
bkhlaWdodCkKIHsKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFwcGx5IHRoZSByaWdodCBwcm9w
ZXJ0eSB0byB0aGUgZnJhbWVWaWV3LiAoc2Nyb2xsYmFyLG1hcmdpbnMpCisgICAgQVNTRVJUKG1f
d2ViRnJhbWUpOwogCi0gICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNyZWF0
ZShtX2ZyYW1lLT5wYWdlKCksIG93bmVyRWxlbWVudCwgdGhpcyk7Ci0gICAgc2V0RnJhbWUoY2hp
bGRGcmFtZS5nZXQoKSk7CisgICAgUmVmUHRyPEZyYW1lPiBjaGlsZEZyYW1lID0gRnJhbWU6OmNy
ZWF0ZShtX3dlYkZyYW1lLT5mcmFtZSgpLT5wYWdlKCksIG93bmVyRWxlbWVudCwgdGhpcyk7CiAK
ICAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShjaGls
ZEZyYW1lLmdldCgpKTsKIAotICAgIGZyYW1lVmlldy0+c2V0QWxsb3dzU2Nyb2xsaW5nKGFsbG93
c1Njcm9sbGluZyk7Ci0gICAgZnJhbWVWaWV3LT5kZXJlZigpOworICAgIC8vIGZyYW1lVmlldy0+
ZGVyZWYoKTsKICAgICBjaGlsZEZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldy5nZXQoKSk7CiAgICAg
Y2hpbGRGcmFtZS0+aW5pdCgpOwogCiAgICAgY2hpbGRGcmFtZS0+dHJlZSgpLT5zZXROYW1lKG5h
bWUpOwotICAgIG1fZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hpbGRGcmFtZSk7CisgICAg
bV93ZWJGcmFtZS0+ZnJhbWUoKS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZEZyYW1lKTsKIAog
ICAgIGNoaWxkRnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZl
cnJlciwgY2hpbGRGcmFtZS5nZXQoKSk7CiAKQEAgLTc0MCw5ICs2NDAsNiBAQCBQYXNzUmVmUHRy
PEZyYW1lPiBGcmFtZUxvYWRlckNsaWVudEhhaWt1CiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
cmV0dXJuIGNoaWxkRnJhbWUucmVsZWFzZSgpOwotCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAg
ICByZXR1cm4gMDsKIH0KIAogT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRIYWlr
dTo6b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQpAQCAtNzUxLDEwICs2NDgsOCBAQCBPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNs
aWVudEhhaWt1CiAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRUeXBlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQbHVnaW4oY29uc3QgSW50
U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYsIGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGxvYWRNYW51
YWxseSkKK1Bhc3NSZWZQdHI8V2lkZ2V0PiBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpjcmVhdGVQ
bHVnaW4oY29uc3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgS1VSTCYsIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcm
LCBib29sIGxvYWRNYW51YWxseSkKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biAwOwpAQCAtNzY2LDE2ICs2NjEsOCBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJl
ZGlyZWN0RGF0CiAgICAgcmV0dXJuOwogfQogCi1SZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnBsdWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25z
ZSYgcmVzcG9uc2UpCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gUmVzb3Vy
Y2VFcnJvcihTdHJpbmcoKSwgV2ViS2l0RXJyb3JDYW5ub3RMb2FkUGx1Z0luLCByZXNwb25zZS51
cmwoKS5zdHJpbmcoKSwgU3RyaW5nKCkpOwotfQotCi1QYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVM
b2FkZXJDbGllbnRIYWlrdTo6Y3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwg
SFRNTEFwcGxldEVsZW1lbnQqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIHBhcmFtTmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtVmFsdWVzKQorUGFzc1Jl
ZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmNyZWF0ZUphdmFBcHBsZXRXaWRn
ZXQoY29uc3QgSW50U2l6ZSYsIEhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBWZWN0
b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKICAgICBy
ZXR1cm4gMDsKQEAgLTc5Miw5ICs2NzksOSBAQCB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OmRpc3BhdGNoRGlkCiAgICAgaWYgKHdvcmxkICE9IG1haW5UaHJlYWROb3JtYWxXb3JsZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV93ZWJWaWV3KSB7CisgICAgaWYgKG1fd2ViRnJh
bWUpIHsKICAgICAgICAgQk1lc3NhZ2UgbWVzc2FnZShKQVZBU0NSSVBUX1dJTkRPV19PQkpFQ1Rf
Q0xFQVJFRCk7Ci0gICAgICAgIG1fbWVzc2VuZ2VyLT5TZW5kTWVzc2FnZSgmbWVzc2FnZSk7Cisg
ICAgICAgIG1fbWVzc2VuZ2VyLlNlbmRNZXNzYWdlKCZtZXNzYWdlKTsKICAgICB9CiB9CiAKQEAg
LTgwMiw1NiArNjg5LDE1IEBAIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRIYWlrdTo6ZG9jdW1lbnRF
bGUKIHsKIH0KIAotdm9pZCBGcmFtZUxvYWRlckNsaWVudEhhaWt1OjpkaWRQZXJmb3JtRmlyc3RO
YXZpZ2F0aW9uKCkgY29uc3QKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCiB2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50SGFpa3U6OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sIGxp
c3RlbikKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3U6OnNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1lKikKLXsK
LSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6
OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNoZWRGcmFtZSopCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50SGFpa3U6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25z
dAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgRnJhbWVMb2FkZXJDbGllbnRI
YWlrdTo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpCi17Ci0gICAgQVNTRVJUKG1f
ZnJhbWUpOwotICAgIEFTU0VSVChtX3dlYlZpZXcpOwotCi0gICAgUGFnZSogcGFnZSA9IG1fZnJh
bWUtPnBhZ2UoKTsKLSAgICBBU1NFUlQocGFnZSk7Ci0KLSAgICBib29sIGlzTWFpbkZyYW1lID0g
bV9mcmFtZSA9PSBwYWdlLT5tYWluRnJhbWUoKTsKLQotICAgIG1fZnJhbWUtPnNldFZpZXcoMCk7
Ci0KLSAgICBSZWZQdHI8RnJhbWVWaWV3PiBmcmFtZVZpZXc7Ci0gICAgaWYgKGlzTWFpbkZyYW1l
KSB7Ci0gICAgICAgIGlmIChtX3dlYlZpZXctPkxvY2tMb29wZXIoKSkgewotICAgICAgICAgICAg
Ly8gV2UgbG9jayB0aGUgbG9vcGVyIGluIG9yZGVyIHRvIGdldCB0aGUgYm91bmRzIG9mIHRoZSBX
ZWJWaWV3LgotICAgICAgICAgICAgZnJhbWVWaWV3ID0gRnJhbWVWaWV3OjpjcmVhdGUobV9mcmFt
ZSwgSW50UmVjdChtX3dlYlZpZXctPkJvdW5kcygpKS5zaXplKCkpOwotICAgICAgICAgICAgbV93
ZWJWaWV3LT5VbmxvY2tMb29wZXIoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBm
cmFtZVZpZXcgPSBGcmFtZVZpZXc6OmNyZWF0ZShtX2ZyYW1lKTsKLQotICAgIEFTU0VSVChmcmFt
ZVZpZXcpOwotICAgIG1fZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKLQotICAgIGZyYW1lVmll
dy0+c2V0UGxhdGZvcm1XaWRnZXQobV93ZWJWaWV3KTsKLQotICAgIGlmIChIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyID0gbV9mcmFtZS0+b3duZXJFbGVtZW50KCkpCi0gICAgICAgIG1fZnJh
bWUtPnZpZXcoKS0+c2V0U2Nyb2xsYmFyTW9kZXMob3duZXItPnNjcm9sbGluZ01vZGUoKSwgb3du
ZXItPnNjcm9sbGluZ01vZGUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApJbmRl
eDogV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50SGFpa3UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGll
bnRIYWlrdS5oCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYktpdC9oYWlrdS9XZWJDb3JlU3VwcG9y
dC9GcmFtZUxvYWRlckNsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA3IFJ5YW4gTGVhdmVuZ29vZCA8bGVhdmVuZ29vZEBnbWFp
bC5jb20+IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWF4aW1l
IFNpbW9uIDxzaW1vbi5tYXhpbWVAZ21haWwuY29tPiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDEwIFN0ZXBoYW4gQcOfbXVzIDxzdXBlcnN0aXBwaUBnbXguZGU+CiAg
KgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzMsMTUgKzM1LDE3IEBACiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2luY2x1ZGUgPE1lc3Nlbmdlci5oPgogCi1jbGFzcyBCTWVzc2VuZ2VyOwotY2xh
c3MgV2ViVmlldzsKK2NsYXNzIFdlYkZyYW1lOworY2xhc3MgV2ViUHJvY2VzczsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlOwogICAgIGNs
YXNzIERvY3VtZW50TG9hZGVyOwogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRm9ybVN0
YXRlOworICAgIGNsYXNzIEhpc3RvcnlJdGVtOwogICAgIGNsYXNzIE5hdmlnYXRpb25BY3Rpb247
CiAgICAgY2xhc3MgUmVzb3VyY2VMb2FkZXI7CiAgICAgY2xhc3MgU3RyaW5nOwpAQCAtNTAsNDYg
KzU0LDM1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50SGFpa3UgOiBwdWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgewogICAgIHB1YmxpYzoKLSAgICAg
ICAgRnJhbWVMb2FkZXJDbGllbnRIYWlrdSgpOwotICAgICAgICB+RnJhbWVMb2FkZXJDbGllbnRI
YWlrdSgpIHsgfQotICAgICAgICB2b2lkIHNldEZyYW1lKEZyYW1lKik7Ci0gICAgICAgIHZvaWQg
c2V0V2ViVmlldyhXZWJWaWV3Kik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkZXRhY2hGcmFtZUxv
YWRlcigpOworICAgICAgICBGcmFtZUxvYWRlckNsaWVudEhhaWt1KFdlYlByb2Nlc3MqLCBXZWJG
cmFtZSopOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBoYXNXZWJWaWV3KCkgY29uc3Q7CisgICAg
ICAgIHZvaWQgc2V0RGlzcGF0Y2hUYXJnZXQoQkhhbmRsZXIqIGhhbmRsZXIpOwogCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBoYXNCYWNrRm9yd2FyZExpc3QoKSBjb25zdDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlc2V0QmFja0ZvcndhcmRMaXN0KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBmcmFt
ZUxvYWRlckRlc3Ryb3llZCgpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBwcm92aXNpb25hbEl0
ZW1Jc1RhcmdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzV2ViVmlldygpIGNv
bnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRM
b2FkZXIqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGZvcmNlTGF5b3V0KCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgdXBkYXRlSGlzdG9yeUZvckNvbW1pdCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVIaXN0b3J5Rm9yQmFja0ZvcndhcmROYXZpZ2F0aW9uKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVIaXN0b3J5Rm9yUmVsb2FkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVI
aXN0b3J5Rm9yU3RhbmRhcmRMb2FkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVIaXN0
b3J5Rm9ySW50ZXJuYWxMb2FkKCk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpc3Rv
cnlBZnRlckNsaWVudFJlZGlyZWN0KCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHNldENvcGll
c09uU2Nyb2xsKCk7CiAKLSAgICAgICAgdmlydHVhbCBMb2FkRXJyb3JSZXNldFRva2VuKiB0b2tl
bkZvckxvYWRFcnJvclJlc2V0KCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXNldEFmdGVyTG9h
ZEVycm9yKExvYWRFcnJvclJlc2V0VG9rZW4qKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRvTm90
UmVzZXRBZnRlckxvYWRFcnJvcihMb2FkRXJyb3JSZXNldFRva2VuKik7Ci0KLSAgICAgICAgdmly
dHVhbCB2b2lkIHdpbGxDbG9zZURvY3VtZW50KCk7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIGRl
dGFjaGVkRnJvbVBhcmVudDIoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGRldGFjaGVkRnJvbVBh
cmVudDMoKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOwogCi0gICAgICAgIHZpcnR1YWwgYm9vbCBjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJl
c291cmNlUmVxdWVzdCYpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRp
ZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExv
YWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaFdpbGxTZW5kUmVxdWVzdChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKyAgICAgICAgdmlydHVh
bCBib29sIHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVj
ZWl2ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworICAgICAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1
bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgY29uc3QgQXV0aGVudGljYXRp
b25DaGFsbGVuZ2UmKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJl
c3BvbnNlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgY29uc3QgUmVzb3VyY2VSZXNw
b25zZSYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExl
bmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGludCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CiAKICAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkSGFuZGxlT25sb2FkRXZlbnRzKCk7CiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRpcmVjdEZvclByb3Zp
c2lvbmFsTG9hZCgpOwpAQCAtMTA0LDE0OCArOTcsMTE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDb21taXRMb2FkKCk7
CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29u
c3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWls
TG9hZChjb25zdCBSZXNvdXJjZUVycm9yJik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aERpZEZpbmlzaERvY3VtZW50TG9hZCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hE
aWRGaW5pc2hMb2FkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0TGF5
b3V0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25F
bXB0eUxheW91dCgpOwogCisgICAgICAgIHZpcnR1YWwgRnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFn
ZSgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTaG93KCk7CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5j
dGlvbiwgY29uc3QgU3RyaW5nJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFtZVBv
bGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlc291cmNl
UmVxdWVzdCYsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJik7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5hdmlnYXRpb25BY3Rpb24oRnJh
bWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXF1ZXN0JiwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+KTsKICAgICAgICAgdmlydHVhbCB2
b2lkIGNhbmNlbFBvbGljeUNoZWNrKCk7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
VW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29uc3QgUmVzb3VyY2VFcnJvciYpOworCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTdWJtaXRGb3JtKEZyYW1lUG9saWN5RnVuY3Rpb24s
IFBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
RGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopOwogICAgICAgICB2aXJ0dWFsIHZv
aWQgcmV2ZXJ0VG9Qcm92aXNpb25hbFN0YXRlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJl
c291cmNlRXJyb3ImKTsKKyAgICAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRGlkTG9hZFJlc291
cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0
JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBk
aXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0cFJlcXVlc3QodW5zaWduZWQgbG9uZywgY29u
c3QgU2NyaXB0U3RyaW5nJik7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc1N0
YXJ0ZWROb3RpZmljYXRpb24oKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0Vz
dGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9zdFBy
b2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgcHJv
Z3Jlc3NTdGFydGVkKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBwcm9ncmVzc0NvbXBsZXRlZCgp
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbkZyYW1lRG9jdW1lbnRSZWFkeShib29sKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIHdpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopOwot
ICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopOwotCi0g
ICAgICAgIHZpcnR1YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlw
ZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVS
TFNjaGVtZShjb25zdCBTdHJpbmcmIFVSTFNjaGVtZSkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwg
U3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJMU2No
ZW1lKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkQ29tcGxldGVkKCk7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVmlld1N0YXRlKCk7Ci0gICAgICAgIHZpcnR1
YWwgdm9pZCByZXN0b3JlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGUoKTsKLSAgICAgICAgdmly
dHVhbCB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKLSAgICAgICAgdmlydHVhbCBib29s
IHNob3VsZFRyZWF0VVJMQXNTYW1lQXNDdXJyZW50KGNvbnN0IEtVUkwmKSBjb25zdDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGFkZEhpc3RvcnlJdGVtRm9yRnJhZ21lbnRTY3JvbGwoKTsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHBy
ZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNl
dFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUsIGNvbnN0IEtVUkwmKTsKIAotICAgICAgICB2aXJ0
dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpOworICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgc2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUq
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRG
cmFtZShXZWJDb3JlOjpDYWNoZWRGcmFtZSopOwotICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNp
dGlvblRvQ29tbWl0dGVkRm9yTmV3UGFnZSgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgd2lsbENo
YW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VUaXRsZShEb2N1bWVudExvYWRlciopOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb21taXR0
ZWRMb2FkKERvY3VtZW50TG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CisKICAgICAgICAgdmlydHVhbCBib29sIHNo
b3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OworCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZEFkZEJhY2tGb3J3YXJkSXRlbShIaXN0b3J5SXRlbSopIGNvbnN0
OwogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0o
SGlzdG9yeUl0ZW0qKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2hh
bmdlQmFja0ZvcndhcmRJbmRleCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKik7CisKICAgICAgICAg
dmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNvbnN0OwogCi0gICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlRXJy
b3ImKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGNvbW1pdHRlZExvYWQoRG9jdW1lbnRMb2FkZXIq
LCBjb25zdCBjaGFyKiwgaW50KTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZERpc3BsYXlJbnNl
Y3VyZUNvbnRlbnQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZFJ1bkluc2VjdXJlQ29udGVu
dChXZWJDb3JlOjpTZWN1cml0eU9yaWdpbiopOworCiAgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VF
cnJvciBjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKICAgICAgICAgdmly
dHVhbCBSZXNvdXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsK
ICAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKICAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGludGVycnVw
dEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworCiAgICAgICAg
IHZpcnR1YWwgUmVzb3VyY2VFcnJvciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNv
dXJjZVJlc3BvbnNlJik7CiAgICAgICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBmaWxlRG9lc05v
dEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIFJl
c291cmNlRXJyb3IgcGx1Z2luV2lsbEhhbmRsZUxvYWRFcnJvcihjb25zdCBSZXNvdXJjZVJlc3Bv
bnNlJik7CisKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEZhbGxCYWNrKGNvbnN0IFJlc291
cmNlRXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCBXVEY6OlBhc3NSZWZQdHI8RG9jdW1lbnRMb2Fk
ZXI+IGNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTdWJzdGl0dXRlRGF0YSYpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgZG93bmxv
YWQoUmVzb3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBhc3NpZ25JZGVudGlmaWVyVG9Jbml0
aWFsUmVxdWVzdCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb2N1bWVudExvYWRlciosCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmKTsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU2Vu
ZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJlcXVlc3Qm
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkVXNlQ3JlZGVudGlh
bFN0b3JhZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIpOwotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVudGljYXRpb25DaGFsbGVu
Z2UoRG9jdW1lbnRMb2FkZXIqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIq
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF1dGhlbnRpY2F0
aW9uQ2hhbGxlbmdlJik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVS
ZXNwb25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZywgaW50KTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoRGlkRmluaXNoTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKLSAgICAgICAgdmlydHVhbCBib29sIGRp
c3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVyKiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRw
UmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3JpcHRTdHJpbmcmKTsKKyAgICAgICAgdmly
dHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwmKTsKIAotICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
LSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VF
cnJvciYpOwotICAgICAgICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoKTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTUlNRVR5cGUoRnJhbWVQ
b2xpY3lGdW5jdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck5ld1dpbmRvd0FjdGlvbihGcmFt
ZVBvbGljeUZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTmF2aWdhdGlvbkFjdGlvbiYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBjb25zdCBTdHJpbmcm
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlv
bkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5hdmlnYXRpb25BY3Rpb24m
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFzc1JlZlB0cjxGb3JtU3RhdGU+
KTsKLSAgICAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3ko
Y29uc3QgUmVzb3VyY2VFcnJvciYpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2F2ZVBsYXRmb3Jt
RGF0YVRvQ2FjaGVkRnJhbWUoV2ViQ29yZTo6Q2FjaGVkRnJhbWUqKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShXZWJDb3JlOjpDYWNo
ZWRGcmFtZSopOworICAgICAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29tbWl0dGVkRm9y
TmV3UGFnZSgpOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdGFydERvd25sb2FkKGNvbnN0IFJl
c291cmNlUmVxdWVzdCYpOworICAgICAgICB2aXJ0dWFsIGJvb2wgY2FuSGFuZGxlUmVxdWVzdChj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBib29sIGNhblNo
b3dNSU1FVHlwZShjb25zdCBTdHJpbmcmIE1JTUVUeXBlKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYgVVJM
U2NoZW1lKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBTdHJpbmcgZ2VuZXJhdGVkTUlNRVR5cGVG
b3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJiBVUkxTY2hlbWUpIGNvbnN0OworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBmcmFtZUxvYWRDb21wbGV0ZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNh
dmVWaWV3U3RhdGVUb0l0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKTsKKyAgICAgICAgdmlydHVh
bCB2b2lkIHJlc3RvcmVWaWV3U3RhdGUoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHByb3Zpc2lv
bmFsTG9hZFN0YXJ0ZWQoKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmlzaExvYWQoKTsK
KyAgICAgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKTsK
KyAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkRvY3VtZW50TG9hZGVyPiBjcmVh
dGVEb2N1bWVudExvYWRlcihjb25zdCBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBX
ZWJDb3JlOjpTdWJzdGl0dXRlRGF0YSYpOwogCi0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3Vs
ZCBwcm9iYWJseSBub3QgYmUgaGVyZSwgYnV0IGl0J3MgbmVlZGVkIGZvciB0aGUgdGVzdHMgY3Vy
cmVudGx5LgotICAgICAgICB2aXJ0dWFsIHZvaWQgcGFydENsZWFyZWRJbkJlZ2luKCk7CisgICAg
ICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJM
Jik7CiAKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1lPiBjcmVhdGVGcmFtZShjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQqLCBjb25zdCBTdHJp
bmcmIHJlZmVycmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgYWxsb3dzU2Nyb2xsaW5nLCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWln
aHQpOwotICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29u
c3QgSW50U2l6ZSYsIEhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgS1VSTCYsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U3RyaW5n
PiYsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgU3RyaW5nJiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbG9hZE1hbnVhbGx5KTsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHJlZGlyZWN0RGF0YVRvUGx1Z2luKFdpZGdldCogcGx1Z2luV2lk
Z2V0KTsKLSAgICAgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVMb2Fk
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworICAgICAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RnJhbWU+IGNyZWF0ZUZyYW1lKGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwg
Y29uc3QgV2ViQ29yZTo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1l
bnQqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IFdlYkNvcmU6OlN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5n
LCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpOworICAgICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBjcmVhdGVQbHVnaW4oY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYs
IGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpTdHJpbmc+JiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxXZWJDb3JlOjpT
dHJpbmc+JiwgY29uc3QgV2ViQ29yZTo6U3RyaW5nJiwgYm9vbCk7CisgICAgICAgIHZpcnR1YWwg
dm9pZCByZWRpcmVjdERhdGFUb1BsdWdpbihXZWJDb3JlOjpXaWRnZXQqIHBsdWdpbldpZGdldCk7
CiAKLSAgICAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdpZGdldD4gY3JlYXRlSmF2YUFwcGxldFdp
ZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFwcGxldEVsZW1lbnQqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIGJh
c2VVUkwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBwYXJhbVZhbHVlcyk7CisgICAgICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYs
IFdlYkNvcmU6OkhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgV2ViQ29yZTo6S1VSTCYgYmFzZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBWZWN0b3I8V2ViQ29yZTo6U3RyaW5nPiYgcGFyYW1OYW1lcywg
Y29uc3QgVmVjdG9yPFdlYkNvcmU6OlN0cmluZz4mIHBhcmFtVmFsdWVzKTsKIAotICAgICAgICB2
aXJ0dWFsIE9iamVjdENvbnRlbnRUeXBlIG9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJy
aWRlTWVkaWFUeXBlKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgV2ViQ29yZTo6T2JqZWN0Q29u
dGVudFR5cGUgb2JqZWN0Q29udGVudFR5cGUoY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25z
dCBXZWJDb3JlOjpTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICAgICAgdmlydHVhbCBXZWJDb3JlOjpT
dHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRDbGVhcldpbmRvd09iamVjdEluV29ybGQoRE9NV3JhcHBlcldvcmxkKik7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKLQogICAgICAg
ICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9ybUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0OwogCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCBsaXN0ZW4g
PSB0cnVlKTsKKyAgICAgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlv
bihib29sIGxpc3Rlbik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBGcmFtZSogbV9mcmFtZTsK
LSAgICAgICAgV2ViVmlldyogbV93ZWJWaWV3OwotICAgICAgICBCTWVzc2VuZ2VyKiBtX21lc3Nl
bmdlcjsKLSAgICAgICAgUmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOwotICAgICAgICBib29s
IG1fZmlyc3REYXRhOworICAgICAgICBXZWJQcm9jZXNzKiBtX3dlYlByb2Nlc3M7CisgICAgICAg
IFdlYkZyYW1lKiBtX3dlYkZyYW1lOworICAgICAgICBCTWVzc2VuZ2VyIG1fbWVzc2VuZ2VyOwog
ICAgIH07CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYktpdC9oYWlrdS9XZWJD
b3JlU3VwcG9ydC9JbnNwZWN0b3JDbGllbnRIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0
L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmNwcAkocmV2aXNpb24g
NTQyNzUpCisrKyBXZWJLaXQvaGFpa3UvV2ViQ29yZVN1cHBvcnQvSW5zcGVjdG9yQ2xpZW50SGFp
a3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTUgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDbGllbnRIYWlrdS5oIgogCi0jaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKLQogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgSW5zcGVj
dG9yQ2xpZW50SGFpa3U6Omluc3BlY3RvckRlc3Ryb3llZCgpCiB7Ci0gICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICBkZWxldGUgdGhpczsKIH0KIAogUGFnZSogSW5zcGVjdG9yQ2xpZW50SGFpa3U6
OmNyZWF0ZVBhZ2UoKQpJbmRleDogV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0L0luc3BlY3Rv
ckNsaWVudEhhaWt1LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2hhaWt1L1dlYkNvcmVTdXBwb3J0
L0luc3BlY3RvckNsaWVudEhhaWt1LmgJKHJldmlzaW9uIDU0Mjc1KQorKysgV2ViS2l0L2hhaWt1
L1dlYkNvcmVTdXBwb3J0L0luc3BlY3RvckNsaWVudEhhaWt1LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDYgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvckNsaWVudC5oIgogCi0KIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFBhZ2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48123</attachid>
            <date>2010-02-04 02:13:24 -0800</date>
            <delta_ts>2010-02-08 11:01:23 -0800</delta_ts>
            <desc>Implementation of FontPlatformData for Haiku port.</desc>
            <filename>maxim.diff</filename>
            <type>text/plain</type>
            <size>5362</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMDMgIE1heGltZSBTaW1vbmUgIDxzaW1vbi5tYXhpbWVA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudGF0aW9uIG9mIEZvbnRQbGF0Zm9ybURhdGEgZm9yIEhhaWt1LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1MjcKKworICAgICAg
ICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFpa3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcDogQWRkZWQKKwogMjAxMC0wMi0wMyAg
U3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3Mg
RGVidWdfQWxsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvRm9udFBsYXRmb3JtRGF0YUhhaWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlrdS5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L0ZvbnRQbGF0Zm9ybURhdGFIYWlr
dS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5IE1heGltZSBTaW1vbiA8c2ltb24ubWF4aW1lQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udFBsYXRm
b3JtRGF0YS5oIgorCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitzdGF0aWMgdm9pZCBmaW5kTWF0Y2hpbmdGb250RmFtaWx5KGNvbnN0IEF0b21p
Y1N0cmluZyYgZmFtaWx5TmFtZSwgZm9udF9mYW1pbHkqIGZvbnRGYW1pbHkpCit7CisgICAgaWYg
KEJGb250KCkuU2V0RmFtaWx5QW5kU3R5bGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4o
ZmFtaWx5TmFtZS5jaGFyYWN0ZXJzKCkpLCAwKSA9PSBCX09LKQorICAgICAgICBzdHJuY3B5KCpm
b250RmFtaWx5LCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihmYW1pbHlOYW1lLmNoYXJh
Y3RlcnMoKSksIEJfRk9OVF9GQU1JTFlfTEVOR1RIICsgMSk7CisgICAgZWxzZSB7CisgICAgICAg
IC8vIElmIG5vIGZvbnQgZmFtaWx5IGlzIGZvdW5kIGZvciB0aGUgZ2l2ZW4gbmFtZSwgd2UgdXNl
IGEgZ2VuZXJpYyBmb250LgorICAgICAgICBpZiAoZmFtaWx5TmFtZS5jb250YWlucygiU2FucyIs
IGZhbHNlKSAhPSBCX0VSUk9SKQorICAgICAgICAgICAgc3RybmNweSgqZm9udEZhbWlseSwgIkRl
amFWdSBTYW5zIiwgQl9GT05UX0ZBTUlMWV9MRU5HVEggKyAxKTsKKyAgICAgICAgZWxzZSBpZiAo
ZmFtaWx5TmFtZS5jb250YWlucygiU2VyaWYiLCBmYWxzZSkgIT0gQl9FUlJPUikKKyAgICAgICAg
ICAgIHN0cm5jcHkoKmZvbnRGYW1pbHksICJEZWphVnUgU2VyaWYiLCBCX0ZPTlRfRkFNSUxZX0xF
TkdUSCArIDEpOworICAgICAgICBlbHNlIGlmIChmYW1pbHlOYW1lLmNvbnRhaW5zKCJNb25vIiwg
ZmFsc2UpICE9IEJfRVJST1IpCisgICAgICAgICAgICBzdHJuY3B5KCpmb250RmFtaWx5LCAiRGVq
YVZ1IE1vbm8iLCBCX0ZPTlRfRkFNSUxZX0xFTkdUSCArIDEpOworICAgICAgICBlbHNlIC8vIFRo
aXMgaXMgdGhlIGZhbGxiYWNrIGZvbnQuCisgICAgICAgICAgICBzdHJuY3B5KCpmb250RmFtaWx5
LCAiRGVqYVZ1IFNlcmlmIiwgQl9GT05UX0ZBTUlMWV9MRU5HVEggKyAxKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGZpbmRNYXRjaGluZ0ZvbnRTdHlsZShmb250X2ZhbWlseSogZm9udEZhbWls
eSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUsIGZvbnRfc3R5bGUqIGZvbnRTdHlsZSkKK3sKKyAg
ICBpbnQzMiBudW1TdHlsZXMgPSBjb3VudF9mb250X3N0eWxlcygqZm9udEZhbWlseSk7CisKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bVN0eWxlczsgaSsrKSB7CisgICAgICAgIGlmIChnZXRf
Zm9udF9zdHlsZSgqZm9udEZhbWlseSwgaSwgZm9udFN0eWxlKSA9PSBCX09LKSB7CisgICAgICAg
ICAgICBTdHJpbmcgc3R5bGVOYW1lKCpmb250U3R5bGUpOworICAgICAgICAgICAgaWYgKChvYmxp
cXVlICYmIGJvbGQpICYmIChzdHlsZU5hbWUgPT0gIkJvbGRJdGFsaWMiIHx8IHN0eWxlTmFtZSA9
PSAiQm9sZCBPYmxpcXVlIikpCisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
aWYgKChvYmxpcXVlICYmICFib2xkKSAmJiAoc3R5bGVOYW1lID09ICJJdGFsaWMiIHx8IHN0eWxl
TmFtZSA9PSAiT2JsaXF1ZSIpKQorICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGlmICgoIW9ibGlxdWUgJiYgYm9sZCkgJiYgc3R5bGVOYW1lID09ICJCb2xkIikKKyAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoKCFvYmxpcXVlICYmICFib2xkKSAmJiAo
c3R5bGVOYW1lID09ICJSb21hIiB8fCBzdHlsZU5hbWUgPT0gIkJvb2siCisgICAgICAgICAgICAg
ICAgfHwgc3R5bGVOYW1lID09ICJDb25kZW5zZWQiIHx8IHN0eWxlTmFtZSA9PSAiUmVndWxhciIg
fHwgc3R5bGVOYW1lID09ICJNZWRpdW0iKSkKKyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYg
ZmFtaWx5TmFtZSkKKyAgICA6IG1fZm9udChuZXcgQkZvbnQoKSkKKyAgICAsIG1fc2l6ZShmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpCisgICAgLCBtX2JvbGQoZm9udERlc2NyaXB0aW9u
LndlaWdodCgpID09IEZvbnRXZWlnaHRCb2xkKQorICAgICwgbV9vYmxpcXVlKGZvbnREZXNjcmlw
dGlvbi5pdGFsaWMoKSkKK3sKKyAgICBtX2ZvbnQtPlNldFNpemUobV9zaXplKTsKKworICAgIGZv
bnRfZmFtaWx5IGZvbnRGYW1pbHk7CisgICAgZmluZE1hdGNoaW5nRm9udEZhbWlseShmYW1pbHlO
YW1lLCAmZm9udEZhbWlseSk7CisKKyAgICBmb250X3N0eWxlIGZvbnRTdHlsZTsKKyAgICBmaW5k
TWF0Y2hpbmdGb250U3R5bGUoJmZvbnRGYW1pbHksIG1fYm9sZCwgbV9vYmxpcXVlLCAmZm9udFN0
eWxlKTsKKyAgICBtX2ZvbnQtPlNldEZhbWlseUFuZFN0eWxlKGZvbnRGYW1pbHksIGZvbnRTdHls
ZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwg
Ym9vbCBib2xkLCBib29sIG9ibGlxdWUpCisgICAgOiBtX2ZvbnQoMCkKKyAgICAsIG1fc2l6ZShz
aXplKQorICAgICwgbV9ib2xkKGJvbGQpCisgICAgLCBtX29ibGlxdWUob2JsaXF1ZSkKK3sKK30K
KworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBvdGhlcikKK3sKKyAgICAqdGhpcyA9IG90aGVyOworfQorCitGb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgaWYgKG1fZm9udCAmJiBtX2ZvbnQgIT0gaGFz
aFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpKQorICAgICAgICBtX2ZvbnQgPSAwOworfQorCitib29s
IEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCit7CisgICAgcmV0dXJuIG1fZm9udCAm
JiBtX2ZvbnQtPlNwYWNpbmcoKSA9PSBCX0ZJWEVEX1NQQUNJTkc7Cit9CisKK3Vuc2lnbmVkIEZv
bnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAoreworICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNb
MV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX2ZvbnQpIH07CisgICAgcmV0dXJu
IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29k
ZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOworfQorCitib29sIEZvbnRQ
bGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZm9udCA9PSBvdGhlci5tX2ZvbnQ7Cit9CisKK2Jvb2wgRm9u
dFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAoreworICAgIHJl
dHVybiBtX2ZvbnQgPT0gaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpOworfQorCisjaWZuZGVm
IE5ERUJVRworU3RyaW5nIEZvbnRQbGF0Zm9ybURhdGE6OmRlc2NyaXB0aW9uKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48124</attachid>
            <date>2010-02-04 02:16:50 -0800</date>
            <delta_ts>2010-02-05 11:08:12 -0800</delta_ts>
            <desc>More robust conversion from BString to String.</desc>
            <filename>maxim2.diff</filename>
            <type>text/plain</type>
            <size>1536</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMDMgIE1heGltZSBTaW1vbmUgIDxzaW1vbi5tYXhpbWVA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vcmUgcm9idXN0IGNvbnZlcnNpb24gZnJvbSBCU3RyaW5nIHRvIFN0cmluZyBmb3IgSGFp
a3UgcG9ydC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM0NTI3CisKKyAgICAgICAgQ292ZXJlZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAq
IHBsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5nSGFpa3UuY3BwOiBGaXhlZCBpbmNsdWRlIG9yZGVy
LCBJbXByb3ZlZCBjb3ZlcnNpb24gZnJvbSBCU3RyaW5nLgorCiAyMDEwLTAyLTAzICBTdGV2ZSBG
YWxrZW5idXJnICA8c2ZhbGtlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBEZWJ1Z19B
bGwgYnVpbGQgZml4LgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L2hhaWt1L1N0cmluZ0hh
aWt1LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3RleHQvaGFpa3UvU3RyaW5n
SGFpa3UuY3BwCShyZXZpc2lvbiA1NDI3NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vdGV4dC9oYWlr
dS9TdHJpbmdIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDE5ICsyNCwyNiBAQAogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0KICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogCisjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgPFN0
cmluZy5oPgogCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gU3RyaW5nIGNvbnZlcnNpb25z
Ci1TdHJpbmc6OlN0cmluZyhjb25zdCBCU3RyaW5nJiBzdHIpCitTdHJpbmc6OlN0cmluZyhjb25z
dCBCU3RyaW5nJiBic3RyaW5nKQogewotICAgIG1faW1wbCA9IFN0cmluZzo6ZnJvbVVURjgoc3Ry
LlN0cmluZygpLCBzdHIuTGVuZ3RoKCkpLmltcGwoKTsKKyAgICBjb25zdCBVQ2hhciogc3RyID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KGJzdHJpbmcuU3RyaW5nKCkpOworICAgIGNv
bnN0IHNpemVfdCBzaXplID0gYnN0cmluZy5MZW5ndGgoKTsKKworICAgIGlmICghc3RyKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXNpemUpCisgICAgICAgIG1faW1wbCA9IFN0cmluZ0lt
cGw6OmVtcHR5KCk7CisgICAgZWxzZQorICAgICAgICBtX2ltcGwgPSBTdHJpbmdJbXBsOjpjcmVh
dGUoc3RyLCBzaXplKTsKIH0KIAogU3RyaW5nOjpvcGVyYXRvciBCU3RyaW5nKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48125</attachid>
            <date>2010-02-04 02:25:12 -0800</date>
            <delta_ts>2010-02-05 13:37:35 -0800</delta_ts>
            <desc>Implementation of GlyphPage::fill() for Haiku port.</desc>
            <filename>ryan.diff</filename>
            <type>text/plain</type>
            <size>3469</size>
            <attacher name="Stephan Aßmus">superstippi</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDMyNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQgQEAKKzIwMTAtMDItMDMgIFJ5YW4gTGVhdmVuZ29vZCAgPGxlYXZlbmdvb2RA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudGF0aW9uIG9mIEdseXBoUGFnZTo6ZmlsbCgpIGZvciBIYWlrdSBwb3J0Lgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ1MjcKKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKKwogMjAxMC0wMi0wMyAg
U3RldmUgRmFsa2VuYnVyZyAgPHNmYWxrZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFdpbmRvd3Mg
RGVidWdfQWxsIGJ1aWxkIGZpeC4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR2x5cGhQYWdlVHJlZU5vZGVIYWlrdS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYWlrdS9HbHlwaFBhZ2VUcmVlTm9kZUhhaWt1LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR2x5cGhQYWdlVHJlZU5vZGVI
YWlrdS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgR2VvcmdlIFN0YWlrb3MgPHN0YWlrb3NAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAwNiBEaXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAoQykg
MjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUnlh
biBMZWF2ZW5nb29kIDxsZWF2ZW5nb29kQGdtYWlsLmNvbT4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHbHlwaFBhZ2VU
cmVlTm9kZS5oIgorCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJM
ZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBib29sIGlzVXRm
MTYgPSBidWZmZXJMZW5ndGggIT0gR2x5cGhQYWdlOjpzaXplOworICAgIGJvb2wgaGF2ZUdseXBo
cyA9IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6
ZTsgaSsrKSB7CisgICAgICAgIFVDaGFyMzIgY2hhcmFjdGVyOworCisgICAgICAgIGlmIChpc1V0
ZjE2KSB7CisgICAgICAgICAgICBVQ2hhciBsZWFkID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyXTsK
KyAgICAgICAgICAgIFVDaGFyIHRyYWlsID0gY2hhcmFjdGVyQnVmZmVyW2kgKiAyICsgMV07Cisg
ICAgICAgICAgICBjaGFyYWN0ZXIgPSBVMTZfR0VUX1NVUFBMRU1FTlRBUlkobGVhZCwgdHJhaWwp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGNoYXJhY3RlciA9IGNoYXJhY3RlckJ1ZmZl
cltpXTsKKworICAgICAgICBpZiAoIWNoYXJhY3RlcikKKyAgICAgICAgICAgIHNldEdseXBoRGF0
YUZvckluZGV4KG9mZnNldCArIGksIDAsIDApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IGhhdmVHbHlwaHMgPSB0cnVlOworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zm
c2V0ICsgaSwgY2hhcmFjdGVyLCBmb250RGF0YSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gaGF2ZUdseXBoczsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>