<?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>9197</bug_id>
          
          <creation_ts>2006-05-31 14:33:21 -0700</creation_ts>
          <short_desc>CSS3: Borders with border-radius and double, groove, or ridge styles should look better</short_desc>
          <delta_ts>2012-05-30 23:49:10 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.w3.org/TR/2005/WD-css3-background-20050216/#the-border-radius</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>87931</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Beth Dakin">bdakin</reporter>
          <assigned_to name="Alex Taylor">darwin</assigned_to>
          <cc>abarth</cc>
    
    <cc>andri</cc>
    
    <cc>bdakin</cc>
    
    <cc>darwin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>ian</cc>
    
    <cc>joost</cc>
    
    <cc>Justin</cc>
    
    <cc>mitz</cc>
    
    <cc>mjs</cc>
    
    <cc>ojan</cc>
    
    <cc>rik</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vikingjs</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.org</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>44169</commentid>
    <comment_count>0</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-05-31 14:33:21 -0700</bug_when>
    <thetext>The border arcs for double, groove, and ridge styles should be implemented differently. We should pretend like we&apos;re drawing two solid borders, so do the outer/inner clip for each line separately. These styles will probably look much nicer if they are implemented this way, particularly with smaller border widths. There are existing layout tests covering these styles in fast/borders.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44173</commentid>
    <comment_count>1</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2006-05-31 14:40:37 -0700</bug_when>
    <thetext>This is a followup bug for http://bugzilla.opendarwin.org/show_bug.cgi?id=6755</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44198</commentid>
    <comment_count>2</comment_count>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-05-31 22:26:40 -0700</bug_when>
    <thetext>I&apos;ll create an uber testcase for all variants of border-radius.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>44202</commentid>
    <comment_count>3</comment_count>
      <attachid>8633</attachid>
    <who name="Joost de Valk (AlthA)">joost</who>
    <bug_when>2006-06-01 00:48:28 -0700</bug_when>
    <thetext>Created attachment 8633
Testcase

This should help in fixing it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23534</commentid>
    <comment_count>4</comment_count>
    <who name="Alexander Kempgen">alex</who>
    <bug_when>2007-02-13 09:35:33 -0800</bug_when>
    <thetext>additionally the border arcs for dotted and dashed of thin borders look very different than the straight borders. 1px dotted even looks like a solid border...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9477</commentid>
    <comment_count>5</comment_count>
      <attachid>14645</attachid>
    <who name="">mitz</who>
    <bug_when>2007-05-21 16:23:44 -0700</bug_when>
    <thetext>Created attachment 14645
Rounded border rendering improvements

I came across several pathological cases in the existing code while testing this patch, which currently adds at least one more pathology.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9512</commentid>
    <comment_count>6</comment_count>
      <attachid>14651</attachid>
    <who name="">mitz</who>
    <bug_when>2007-05-22 03:27:29 -0700</bug_when>
    <thetext>Created attachment 14651
Non-uniform stroke thickness improvements

This version varies the stroke thickness along arcs joining borders of different widths.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9513</commentid>
    <comment_count>7</comment_count>
      <attachid>14652</attachid>
    <who name="">mitz</who>
    <bug_when>2007-05-22 03:29:28 -0700</bug_when>
    <thetext>Created attachment 14652
Non-uniform stroke thickness example (after and before)

Rendering of arcs between borders with different widths, with attachment 14651 (left) and with the current code (right).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>9220</commentid>
    <comment_count>8</comment_count>
    <who name="">mitz</who>
    <bug_when>2007-05-24 09:52:22 -0700</bug_when>
    <thetext>Those last two patches are actually wrong for all but the uniform stroke and equal radii case, since in other cases the outside of the curve is not exactly an ellipse. I think those cases will have to be done using a clipping path (which I tried to avoid in the patches).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>57484</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-09-30 12:24:52 -0700</bug_when>
    <thetext>Looks like this was another casualty to leopard stabilization. ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71386</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-02-21 07:08:25 -0800</bug_when>
    <thetext>See also bug 17468.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83938</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2008-06-19 17:19:03 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Those last two patches are actually wrong for all but the uniform stroke and
&gt; equal radii case, since in other cases the outside of the curve is not exactly
&gt; an ellipse. I think those cases will have to be done using a clipping path
&gt; (which I tried to avoid in the patches).
&gt; 

That statement is a little ambiguous to me, are you saying that using this patch, the outside of the curve does not draw as an ellipse (and it should). Or are you saying that with this patch, the outside of the curve follows an ellipse (and it shouldn&apos;t).

I have a patch which is very close to this but instead I kept the Inner Clipping Rectangle in there, is that what you&apos;re hinting should be done or is there another equation for the corners that probably should be followed instead of clipping to rounded rectangles?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83941</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2008-06-19 17:54:30 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; That statement is a little ambiguous to me, are you saying that using this
&gt; patch, the outside of the curve does not draw as an ellipse (and it should). Or
&gt; are you saying that with this patch, the outside of the curve follows an
&gt; ellipse (and it shouldn&apos;t).

Sorry about the ambiguity. I meant the former.

&gt; I have a patch which is very close to this but instead I kept the Inner
&gt; Clipping Rectangle in there, is that what you&apos;re hinting should be done or is
&gt; there another equation for the corners that probably should be followed instead
&gt; of clipping to rounded rectangles?

It has been a while since I worked on this bug, but I think that with Core Graphics at least, one would have to clip to a rounded rectangle (that is, the correct shape cannot be achieved by just stroking a path in the non-uniform case).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83953</commentid>
    <comment_count>13</comment_count>
      <attachid>21853</attachid>
    <who name="">mitz</who>
    <bug_when>2008-06-20 00:47:38 -0700</bug_when>
    <thetext>Created attachment 21853
An interactive test case

A test file I used when I worked on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>83954</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2008-06-20 01:08:43 -0700</bug_when>
    <thetext>Oh wow, awesome test case you had there. Shows some massive problems with border-radius.

When drawing rounded borders, an outer rounded clipping region is applied always.
Also currently, in cases where it needs to, an inner rounded clipping region is also applied.

You last patch removes the inner clipping region in all cases explicitly but you&apos;re saying it is required? 
Those clipping regions perform elliptically at the corners so are they what you&apos;re saying is required? 
If so, what was the reasoning for removing them in the patch? 

I&apos;m interested in getting this all fixed up so any pointers would be appreciated.

(The double border case would probably need additional clipping regions than what is currently there to cater for the gap between the border strokes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>84017</commentid>
    <comment_count>15</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2008-06-20 16:47:48 -0700</bug_when>
    <thetext>As a correction, I can see why you removed the clipping regions. They only clip circles, not other ellipses. I got confused as the patch I had done added elliptical support on those clipping regions. 

Sorry about that.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>105643</commentid>
    <comment_count>16</comment_count>
    <who name="Henri Sivonen">hsivonen</who>
    <bug_when>2009-01-14 00:13:44 -0800</bug_when>
    <thetext>Has the patch on this bug fallen through the cracks? The latest nightly still doesn&apos;t anti-alias double and dotted curves properly and rounds the width of the gap in double border badly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121625</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-15 23:27:08 -0700</bug_when>
    <thetext>Would be nice to get these patches in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121627</commentid>
    <comment_count>18</comment_count>
    <who name="">mitz</who>
    <bug_when>2009-05-15 23:49:02 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Would be nice to get these patches in.

Would be nice to fix this bug. The patches have issues, though (comment #8).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121695</commentid>
    <comment_count>19</comment_count>
      <attachid>30423</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2009-05-17 11:20:25 -0700</bug_when>
    <thetext>Created attachment 30423
Image explaining the strategy for radius drawing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121706</commentid>
    <comment_count>20</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2009-05-17 13:06:24 -0700</bug_when>
    <thetext>I modified the interactive test case and had a play with it in Firefox 3 yesterday. Their rendering seems to match the strategy image that Simon uploaded.

Unless one of the recent commenters is keen to fix this themselves, I&apos;ll take another look at a this bug over the next few days. By the looks, I think our code is a little too convoluted and results in far too many broken edge cases currently.

I won&apos;t assign it to me until tomorrow in case someone else has more of a chance to create a patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128735</commentid>
    <comment_count>21</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2009-06-28 05:09:06 -0700</bug_when>
    <thetext>Taking bug for another spin, have a patch almost done using clipping paths instead of stroking arcs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128804</commentid>
    <comment_count>22</comment_count>
      <attachid>32006</attachid>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2009-06-29 05:06:10 -0700</bug_when>
    <thetext>Created attachment 32006
Re-written border code using clipping patches

This patch changes all the border rendering code to use elliptical clipping masks when there is a border radius defined instead of approximating the curve by stroking an arc on the corners. The clipping masks are anti-aliased. 

This patch isn&apos;t finished at all, I need to do a few more bits and pieces and clean up the code.

Mitz or Hyatt, can I please get one of you to do some performance testing on this code (using PLT?) to see how much optimisation work is required.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129844</commentid>
    <comment_count>23</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-07-05 04:12:46 -0700</bug_when>
    <thetext>I would expect minimal performance impact in normal browser benchmarks, since border-radius is rarely used, let alone non-uniformly. If you want to check performance, I would suggest making some artificial test cases, but you may need to pile a lot of boxes with rounded corners onto the screen to get something that takes measurable time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137237</commentid>
    <comment_count>24</comment_count>
      <attachid>32006</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-04 19:33:56 -0700</bug_when>
    <thetext>Comment on attachment 32006
Re-written border code using clipping patches

Wow.  We can come up with some way to abstract some of this math.  This is way too much copy/paste.

Huge sections of:
topLeftInnerRadius.setWidth(max(0, topLeftInnerRadius.width() - style-&gt;borderLeftWidth()));
 825         topLeftInnerRadius.setHeight(max(0, topLeftInnerRadius.height() - style-&gt;borderTopWidth()));


This huge section of checks is repeated at least twice too:
             &amp;&amp; (bottomLeft.width() == 0 || bottomLeft.width() &gt;= style-&gt;borderLeftWidth())
 895             &amp;&amp; (bottomLeft.height() == 0 || bottomLeft.height() &gt;= style-&gt;borderBottomWidth())
 8

Style:
 736             int innerBorderTopWidth = style-&gt;borderTopWidth()*2/3;
 737             int innerBorderRightWidth = style-&gt;borderRightWidth()*2/3;
 738             int innerBorderBottomWidth = style-&gt;borderBottomWidth()*2/3;
 739             int innerBorderLeftWidth = style-&gt;borderLeftWidth()*2/3;
 740 
Can&apos;t we use IntRects here?

Bah!  copy/paste galore:
53             if (style-&gt;borderTopWidth() % 3 == 1)
 754                 innerBorderTopWidth += 1;
 755             if (style-&gt;borderRightWidth() % 3 == 1)
 756                 innerBorderRightWidth += 1;
 757             if (style-&gt;borderBottomWidth() % 3 == 1)
 758                 innerBorderBottomWidth += 1;
 759             if (style-&gt;borderLeftWidth() % 3 == 1)
 760                 innerBorderLeftWidth += 1;

I like this change... but It needs to be about half this size.  Using some nice abstractions. :)  Way too much copy paste here to land this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137556</commentid>
    <comment_count>25</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2009-08-06 03:24:27 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 32006 [details])
&gt; Wow.  We can come up with some way to abstract some of this math.  This is way
&gt; too much copy/paste.

Thanks for setting review- on this, I hadn&apos;t realised Maciej didn&apos;t with his comment. 
Definitely needs some refactoring and abstraction, I had submitted this and marked review? to get some performance testing but I haven&apos;t had a chance to do this myself yet.

&gt; 
&gt; Huge sections of:
&gt; topLeftInnerRadius.setWidth(max(0, topLeftInnerRadius.width() -
&gt; style-&gt;borderLeftWidth()));
&gt;  825         topLeftInnerRadius.setHeight(max(0, topLeftInnerRadius.height() -
&gt; style-&gt;borderTopWidth()));
&gt; 
&gt; 
&gt; This huge section of checks is repeated at least twice too:
&gt;              &amp;&amp; (bottomLeft.width() == 0 || bottomLeft.width() &gt;=
&gt; style-&gt;borderLeftWidth())
&gt;  895             &amp;&amp; (bottomLeft.height() == 0 || bottomLeft.height() &gt;=
&gt; style-&gt;borderBottomWidth())
&gt;  8
&gt; 
&gt; Style:
&gt;  736             int innerBorderTopWidth = style-&gt;borderTopWidth()*2/3;
&gt;  737             int innerBorderRightWidth = style-&gt;borderRightWidth()*2/3;
&gt;  738             int innerBorderBottomWidth = style-&gt;borderBottomWidth()*2/3;
&gt;  739             int innerBorderLeftWidth = style-&gt;borderLeftWidth()*2/3;
&gt;  740 
&gt; Can&apos;t we use IntRects here?
&gt; 
&gt; Bah!  copy/paste galore:
&gt; 53             if (style-&gt;borderTopWidth() % 3 == 1)
&gt;  754                 innerBorderTopWidth += 1;
&gt;  755             if (style-&gt;borderRightWidth() % 3 == 1)
&gt;  756                 innerBorderRightWidth += 1;
&gt;  757             if (style-&gt;borderBottomWidth() % 3 == 1)
&gt;  758                 innerBorderBottomWidth += 1;
&gt;  759             if (style-&gt;borderLeftWidth() % 3 == 1)
&gt;  760                 innerBorderLeftWidth += 1;
&gt; 
&gt; I like this change... but It needs to be about half this size.  Using some nice
&gt; abstractions. :)  Way too much copy paste here to land this.

I&apos;m sure most of the copy/paste can be reduced with some functions for shrinking an IntRect and rounding the sizes of an IntRect etc, I really just needed to confirm that my maths was actually working correctly before making some generic functions.

Thanks for the comments, I really need to get some more work done on this patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>232877</commentid>
    <comment_count>26</comment_count>
    <who name="Jerry Seeger">vikingjs</who>
    <bug_when>2010-06-01 11:44:45 -0700</bug_when>
    <thetext>I know I&apos;m chiming in late on this, and I&apos;m really glad someone is tackling this problem, but I think there might be a better way to tackle this.

It seems to me that once you&apos;re calculating inner and outer paths, using fills would be a lot simpler than stroke/clip. (Except for dashes. Dashes almost justify stroke/clip, but not quite, in my mind.) You can also control bezels and the like more precisely.

Fills are also a lot more flexible as far as applying gradient colors and other effects (as far as I understand things). If I were to tackle this problem, I&apos;d start by checking the SVG library - it&apos;s much easier to build paths with elliptical segments using SVG than with NSPath. Hopefully somewhere in there is a bridge.

Just my two cents; I don&apos;t want to diminish or discourage your efforts in any way, but ultimately I think using fills gives the code the best long-term viability.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241328</commentid>
    <comment_count>27</comment_count>
      <attachid>59390</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-22 10:41:20 -0700</bug_when>
    <thetext>Created attachment 59390
Updated, re-factored version of Alex&apos;s patch

Here is an updated, re-factored, and ever-so-slightly behaviorally different version of Alex&apos;s patch. This is probably best reviewed in person where I can show all of the improvements and the trade-offs, but I will try to summarize here in case anyone who is not right HERE wants to review:

-Solid, inset/outset, groove/ridge border are WAY better. I am tempted to say this patch fixes all of the bugs with these styles based on Dan&apos;s interactive test case, but there might be some edge cases.
-Double border are way better too. There are a few edge-case bugs that can be found with the interactive test case, but I think these could be fine-tuned and fixed in a follow-up patch.
-Dotted and Dashed borders are not better, but I am tempted to say they are not worse either. They are just…different. This is the area that would need the most follow-up work if we decide to go with this patch. These layout tests are probably worse with this patch:

fast/borders/borderRadiusDashed01.html
fast/borders/borderRadiusDashed02.html
fast/borders/borderRadiusDashed03.html

But these ones are better:

fast/borders/borderRadiusDotted01.html
fast/borders/borderRadiusDotted02.html
fast/borders/borderRadiusDotted03.html

This one is a good example of &quot;just different.&quot; I don&apos;t think the new rendering is better than the old or vice versa.

fast/borders/borderRadiusAllStylesAllCorners.html

Playing with the interactive test case with and without the patch make me feel like it&apos;s just trading one set of bugs for another. 

Other obvious problems with this patch are that I need to implement clipConvexPolygon() for non-CG platforms, and need to add many news tests. I will work on that while all of you reviewers out there consider taking a look ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241329</commentid>
    <comment_count>28</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 10:42:47 -0700</bug_when>
    <thetext>Attachment 59390 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
Last 3072 characters of output:
underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1000:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1000:  ignore_right is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1019:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1019:  ignore_left is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1022:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1022:  ignore_right is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1042:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1042:  ignore_top is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1045:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1045:  ignore_bottom is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1061:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1061:  ignore_top is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1062:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1065:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1065:  ignore_bottom is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/rendering/RenderBoxModelObject.cpp:1066:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 22 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241333</commentid>
    <comment_count>29</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-22 10:50:37 -0700</bug_when>
    <thetext>Attachment 59390 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3299588</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241382</commentid>
    <comment_count>30</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 12:13:17 -0700</bug_when>
    <thetext>Attachment 59390 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3269600</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241383</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 12:14:07 -0700</bug_when>
    <thetext>Attachment 59390 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3316576</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241409</commentid>
    <comment_count>32</comment_count>
      <attachid>59390</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-22 13:13:44 -0700</bug_when>
    <thetext>Comment on attachment 59390
Updated, re-factored version of Alex&apos;s patch

Taking the review flag off this for now. I fixed the style errors. The compilation errors are probably just that I haven&apos;t implemented that GraphicsContext function on non-CG platforms, and I will get to that.

Simon and I looked at this a little in person, and he convinced me to put a little more effort into getting dashed and dotted styles right. I am looking at that now, but if anyone wants to look at the patch and comment on it in any way, I still encourage that!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241647</commentid>
    <comment_count>33</comment_count>
      <attachid>59473</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-22 21:43:28 -0700</bug_when>
    <thetext>Created attachment 59473
New version of the patch

Here&apos;s a new version of the patch. Dashed and dotted border looks WAY better now. I also fleshed out stubs in all of the different ports of GraphicsContext. I should really fill these in because border-radius implementations on other platforms will break without this function, but it is a little scary to right them without configurations to compile and test. Hmm…any advice anyone? 

Other know problems:
-Double borders need a little tweaking. This will be easy to fix in a follow-up patch. I added a FIXME to borderWillArcInnerEdge in RenderBoxModelObject.
-Dashed and dotted borders could be even better if we tried centering the dash pattern. Added a FIXME for this too.
-The angle of border sides is a little off sometimes. Should be fix-able in a follow-up patch.
-Need to add more tests. Dan&apos;t interactive test case has been invaluable in working on this, and we need more representation in the layout tests. I would like to do this in a follow-up patch as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241650</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 21:45:54 -0700</bug_when>
    <thetext>Attachment 59473 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/rendering/RenderBoxModelObject.cpp:916:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderBoxModelObject.cpp:917:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderBoxModelObject.cpp:918:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderBoxModelObject.cpp:919:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderObject.cpp:923:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/rendering/RenderObject.cpp:924:  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: 6 in 24 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241655</commentid>
    <comment_count>35</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-22 21:53:06 -0700</bug_when>
    <thetext>Attachment 59473 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3329672</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241658</commentid>
    <comment_count>36</comment_count>
      <attachid>59473</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-06-22 22:00:39 -0700</bug_when>
    <thetext>Comment on attachment 59473
New version of the patch

Some brief comments:
WebCore/platform/graphics/GraphicsContext.h:242
 +          void clipConvexPolygon(size_t numPoints, const FloatPoint*);
It&apos;s a bit odd to see size_t there, rather than the normal int or unsigned.

WebCore/platform/graphics/cg/GraphicsContextCG.cpp:443
 +  static void addConvexPolygonToContext(CGContextRef context, size_t npoints, const FloatPoint* points)
Use numPoints, rather than npoints.

WebCore/rendering/RenderBoxModelObject.cpp:913
 +  static bool borderWillArcInnerEdge(IntSize firstRadius, IntSize secondRadius, int firstBorderWidth, int secondBorderWidth, int middleBorderWidth)
Use const IntSize&amp; for params.

WebCore/rendering/RenderBoxModelObject.cpp:954
 +      IntRect borderRect = IntRect(tx, ty, w, h);
IntRect borderRect(tx, ty, w, h)

WebCore/rendering/RenderBoxModelObject.cpp:1085
 +      FloatPoint quad[4];
We have FloatQuad for this.

WebCore/rendering/RenderBoxModelObject.h:118
 +      void clipBorderSidePolygon(GraphicsContext*, IntRect, IntSize topLeft, IntSize topRight, IntSize bottomLeft, IntSize bottomRight, const BoxSide side, const RenderStyle* style);
Use const reference parameters.

WebCore/rendering/RenderObject.cpp:881
 +  IntRect RenderObject::borderInnerRect(const IntRect&amp; borderRect, unsigned short topWidth, unsigned short bottomWidth, unsigned short leftWidth, unsigned short rightWidth) const
I don&apos;t know why those are unsigned shorts.

WebCore/rendering/style/RenderStyle.h:790
 +      void getInnerBorderRadiiForRectWithBorderWidths(const IntRect&amp;, unsigned short topWidth, 
Ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241670</commentid>
    <comment_count>37</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 22:23:50 -0700</bug_when>
    <thetext>Attachment 59473 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3302626</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241671</commentid>
    <comment_count>38</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-22 22:26:16 -0700</bug_when>
    <thetext>Attachment 59473 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/3293650</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241824</commentid>
    <comment_count>39</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 06:42:11 -0700</bug_when>
    <thetext>Attachment 59473 did not build on win:
Build output: http://webkit-commit-queue.appspot.com/results/3315676</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241911</commentid>
    <comment_count>40</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-23 10:14:23 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; (From update of attachment 59473 [details])
&gt; Some brief comments:
&gt; WebCore/platform/graphics/GraphicsContext.h:242
&gt;  +          void clipConvexPolygon(size_t numPoints, const FloatPoint*);
&gt; It&apos;s a bit odd to see size_t there, rather than the normal int or unsigned.
&gt; 

I made it a size_t to match drawConvexPolygon()&apos;s parameters. Not sure there is much value in that though. I didn&apos;t change this for now since I have a justification for it, however weak. I will happily change it if you think I should after reading the explanation. 

&gt; WebCore/platform/graphics/cg/GraphicsContextCG.cpp:443
&gt;  +  static void addConvexPolygonToContext(CGContextRef context, size_t npoints, const FloatPoint* points)
&gt; Use numPoints, rather than npoints.
&gt; 

Fixed.

&gt; WebCore/rendering/RenderBoxModelObject.cpp:913
&gt;  +  static bool borderWillArcInnerEdge(IntSize firstRadius, IntSize secondRadius, int firstBorderWidth, int secondBorderWidth, int middleBorderWidth)
&gt; Use const IntSize&amp; for params.
&gt; 

Fixed.

&gt; WebCore/rendering/RenderBoxModelObject.cpp:954
&gt;  +      IntRect borderRect = IntRect(tx, ty, w, h);
&gt; IntRect borderRect(tx, ty, w, h)
&gt; 

Fixed.

&gt; WebCore/rendering/RenderBoxModelObject.cpp:1085
&gt;  +      FloatPoint quad[4];
&gt; We have FloatQuad for this.
&gt; 

I started changing this, and then I changed it back. The point of constructing this FloatPoint array is to send it to GraphicsContext::clipConvexPolygon(), which takes a FloatPoint array as a parameter and not a FloatQuad. Of course, GraphicsContext::clipConvexPolygon() is a brand new function called only from new code, so we can make it take a FloatQuad, but then it will be clipFloatQuad() instead of clipConvexPolygon() which seems less flexible for potential future use in other code. 

Anyway, I am open to changing this, but I also think there is a good justification for keeping this the way it is. What do you think?

&gt; WebCore/rendering/RenderBoxModelObject.h:118
&gt;  +      void clipBorderSidePolygon(GraphicsContext*, IntRect, IntSize topLeft, IntSize topRight, IntSize bottomLeft, IntSize bottomRight, const BoxSide side, const RenderStyle* style);
&gt; Use const reference parameters.
&gt; 

Fixed.

&gt; WebCore/rendering/RenderObject.cpp:881
&gt;  +  IntRect RenderObject::borderInnerRect(const IntRect&amp; borderRect, unsigned short topWidth, unsigned short bottomWidth, unsigned short leftWidth, unsigned short rightWidth) const
&gt; I don&apos;t know why those are unsigned shorts.
&gt; 
&gt; WebCore/rendering/style/RenderStyle.h:790
&gt;  +      void getInnerBorderRadiiForRectWithBorderWidths(const IntRect&amp;, unsigned short topWidth, 
&gt; Ditto

They are unsigned shorts since RenderStyle stores and returns border widths as unsigned shorts. I didn&apos;t see any value in changing the type. I guess there is some value in just having a shorter type name, so I will change these to just unsigned if you want. I didn&apos;t change this for now, but I would be fine with changing it. What do you think?

I will attach a new patch with the above changes momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>241924</commentid>
    <comment_count>41</comment_count>
      <attachid>59529</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-23 10:32:49 -0700</bug_when>
    <thetext>Created attachment 59529
Patch addresses some comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242025</commentid>
    <comment_count>42</comment_count>
      <attachid>59552</attachid>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-23 12:42:45 -0700</bug_when>
    <thetext>Created attachment 59552
Patch the won&apos;t break other platforms

After talking with Darin and Sam, I decided to keep around the old version of RenderBoxModelObject::paintBorder() and RenderObject::drawArcForBoxSide() for non-CG platforms. After I get an r+, I will file bugs for the other platforms to implement GraphicsContext::clipConvexPolygon() and email WebKit dev about it. But in the meantime, non-CG platforms will just have our same old border-radius support, and they can switch to the new hotness once they implement that one function.

Just realized I should update the Changlog to reflect this. Will do that now, but I won&apos;t bother posting a new patch for it unless someone really wants me to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243426</commentid>
    <comment_count>43</comment_count>
    <who name="Alex Taylor">darwin</who>
    <bug_when>2010-06-26 19:13:54 -0700</bug_when>
    <thetext>Awesome, cheers for picking this up Beth. 

There are still a few little ugly edge cases around extreme non-uniform borders but they probably need to be in a separate bug.

The only thing I can see with the outcome of this patch is a nasty 1px anti-aliasing regression on the diagonals at the corners. You can see it on the top-left corner in the interactive test case when there is an inner clipping radius on the corners. (I think it is the border-radius &gt; border-width case?)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243808</commentid>
    <comment_count>44</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-28 12:08:19 -0700</bug_when>
    <thetext>(In reply to comment #43)
&gt; Awesome, cheers for picking this up Beth. 
&gt; 
&gt; There are still a few little ugly edge cases around extreme non-uniform borders but they probably need to be in a separate bug.
&gt; 
&gt; The only thing I can see with the outcome of this patch is a nasty 1px anti-aliasing regression on the diagonals at the corners. You can see it on the top-left corner in the interactive test case when there is an inner clipping radius on the corners. (I think it is the border-radius &gt; border-width case?)

Hey Alex! Thanks for your patches! My patch is basically a modernized version of yours. 

I have a list of a few known bugs that remain from this patch, and I know how to fix most of them, but I am holding out to do the work in follow-up patches. I am not sure I *totally* understand the bug you mention above…it might be one of the bugs I have found, but it might be something I didn&apos;t find. It&apos;s easy to make a stand-alone test case from the interactive one by finding out the values of the various change-able parameters in the web inspector. If you could make one or just tell me what the values are in the web inspector when you see the bug you describe, that would be very helpful.

Thanks again!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243881</commentid>
    <comment_count>45</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-28 13:54:45 -0700</bug_when>
    <thetext>Thanks Sam!! Fixed with r62035. I will be filing follow-up bugs momentarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243896</commentid>
    <comment_count>46</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-28 14:20:10 -0700</bug_when>
    <thetext>Filed:
https://bugs.webkit.org/show_bug.cgi?id=41301
https://bugs.webkit.org/show_bug.cgi?id=41302
https://bugs.webkit.org/show_bug.cgi?id=41303
https://bugs.webkit.org/show_bug.cgi?id=41304

I still need to file bugs for other ports to implement GraphicsContext::clipConvexPolygon().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243938</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-28 15:09:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/62035 might have broken GTK Linux 32-bit Debug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243939</commentid>
    <comment_count>48</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-28 15:11:47 -0700</bug_when>
    <thetext>And here are the bugs for other graphics platforms to implement GraphicsContext::clipConvexPolygon():

https://bugs.webkit.org/show_bug.cgi?id=41308
https://bugs.webkit.org/show_bug.cgi?id=41309
https://bugs.webkit.org/show_bug.cgi?id=41310
https://bugs.webkit.org/show_bug.cgi?id=41311
https://bugs.webkit.org/show_bug.cgi?id=41312
https://bugs.webkit.org/show_bug.cgi?id=41313</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>243940</commentid>
    <comment_count>49</comment_count>
    <who name="Beth Dakin">bdakin</who>
    <bug_when>2010-06-28 15:13:06 -0700</bug_when>
    <thetext>(In reply to comment #47)
&gt; http://trac.webkit.org/changeset/62035 might have broken GTK Linux 32-bit Debug

Looking at the logs, I don&apos;t think so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>382397</commentid>
    <comment_count>50</comment_count>
      <attachid>88844</attachid>
    <who name="Kim">t3kgh0zt</who>
    <bug_when>2011-04-08 11:14:58 -0700</bug_when>
    <thetext>Created attachment 88844
On the left is border-radius (plus a few other things) in Firefox 4, the right shows border-radius not quite rendering right in Webkit 534.28

It would be nice to see the curve between two borders with different widths look smooth -- I really don&apos;t want to use two elements here to have the same effect &lt;.&lt;;

This bug has some better examples linked:
https://bugs.webkit.org/show_bug.cgi?id=38787</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>8633</attachid>
            <date>2006-06-01 00:48:28 -0700</date>
            <delta_ts>2006-06-01 00:48:28 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>border-radius.html</filename>
            <type>text/html</type>
            <size>3665</size>
            <attacher name="Joost de Valk (AlthA)">joost</attacher>
            
              <data encoding="base64">PGh0bWw+DQoNCjxoZWFkPg0KCTxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoJCWRpdiB7DQoJCQlt
YXJnaW46IDEwcHg7DQoJCQlmbG9hdDogbGVmdDsNCgkJCWNsZWFyOiBib3RoOw0KCQl9DQoJCXNw
YW4gew0KCQkJZGlzcGxheTogYmxvY2s7DQoJCQl3aWR0aDogNTBweDsNCgkJCWhlaWdodDogNTBw
eDsNCgkJCWZsb2F0OiBsZWZ0Ow0KCQkJbWFyZ2luLXJpZ2h0OiAyMHB4Ow0KCQkJYmFja2dyb3Vu
ZC1jb2xvcjogI2ZmZjsNCgkJCWJvcmRlci13aWR0aDogMTBweDsNCgkJCWJvcmRlci1jb2xvcjog
I2YwMDsNCgkJfQ0KCQkvKiB0aGUgZGlmZmVyZW50IGJvcmRlci1yYWRpaSBzdHlsZXMgZGVmaW5l
ZCBpbiBDU1MzICovDQoJCSNyYWRpdXMgewkNCgkJCS13ZWJraXQtYm9yZGVyLXJhZGl1czogMjBw
eDsNCgkJCS1tb3otYm9yZGVyLXJhZGl1czogMjBweDsNCgkJfQ0KCQkjdG9wbGVmdCB7DQoJCQkt
d2Via2l0LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogMjBweDsgDQoJCQktbW96LWJvcmRlci1yYWRp
dXMtdG9wbGVmdDogMjBweDsNCgkJfQ0KCQkjdG9wcmlnaHQgew0KCQkJLXdlYmtpdC1ib3JkZXIt
cmFkaXVzLXRvcHJpZ2h0OiAyMHB4OyANCgkJCS1tb3otYm9yZGVyLXJhZGl1cy10b3ByaWdodDog
MjBweDsNCgkJfQ0KCQkjYm90dG9tcmlnaHQgew0KCQkJLXdlYmtpdC1ib3JkZXItcmFkaXVzLWJv
dHRvbXJpZ2h0OiAyMHB4OyANCgkJCS1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogMjBw
eDsNCgkJfQ0KCQkjYm90dG9tbGVmdCB7DQoJCQktd2Via2l0LWJvcmRlci1yYWRpdXMtYm90dG9t
bGVmdDogMjBweDsgDQoJCQktbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogMjBweDsNCgkJ
fQ0KCQkNCgkJLyogdGhlIGRpZmZlcmVudCBib3JkZXIgc3R5bGVzIGRlZmluZWQgaW4gQ1NTMyAq
Lw0KCQkjZG90dGVkIHNwYW4geyANCgkJCWJvcmRlci1zdHlsZTogZG90dGVkOw0KCQl9DQoJCSNk
YXNoZWQgc3BhbiB7DQoJCQlib3JkZXItc3R5bGU6IGRhc2hlZDsNCgkJfQ0KCQkjc29saWQgc3Bh
biB7DQoJCQlib3JkZXItc3R5bGU6IHNvbGlkOw0KCQl9DQoJCSNkb3VibGUgc3BhbiB7DQoJCQli
b3JkZXItc3R5bGU6IGRvdWJsZTsNCgkJfQ0KCQkjZG90LWRhc2ggc3BhbiB7DQoJCQlib3JkZXIt
c3R5bGU6IGRvdC1kYXNoOw0KCQl9DQoJCSNkb3QtZG90LWRhc2ggc3BhbiB7DQoJCQlib3JkZXIt
c3R5bGU6IGRvdC1kb3QtZGFzaDsNCgkJfQ0KCQkjd2F2ZSBzcGFuIHsNCgkJCWJvcmRlci1zdHls
ZTogd2F2ZTsNCgkJfQ0KCQkjZ3Jvb3ZlIHNwYW4gew0KCQkJYm9yZGVyLXN0eWxlOiBncm9vdmU7
DQoJCX0NCgkJI3JpZGdlIHNwYW4gew0KCQkJYm9yZGVyLXN0eWxlOiByaWRnZTsNCgkJfQ0KCQkj
aW5zZXQgc3BhbiB7DQoJCQlib3JkZXItc3R5bGU6IGluc2V0Ow0KCQl9DQoJCSNvdXRzZXQgc3Bh
biB7DQoJCQlib3JkZXItc3R5bGU6IG91dHNldDsNCgkJfQ0KCQkNCgkJDQoJPC9zdHlsZT4NCgk8
dGl0bGU+Q1NTMyBib3JkZXItcmFkaXVzIHViZXIgdGVzdGNhc2U8L3RpdGxlPg0KPC9oZWFkPg0K
DQo8Ym9keT4NCg0KPGRpdiBpZD0iZG90dGVkIj4NCgk8c3BhbiBpZD0icmFkaXVzIj48L3NwYW4+
DQoJPHNwYW4gaWQ9InRvcGxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0idG9wcmlnaHQiPjwvc3Bh
bj4NCgk8c3BhbiBpZD0iYm90dG9tbGVmdCI+PC9zcGFuPg0KCTxzcGFuIGlkPSJib3R0b21yaWdo
dCI+PC9zcGFuPg0KCWRvdHRlZA0KPC9kaXY+DQoNCjxkaXYgaWQ9ImRhc2hlZCI+DQoJPHNwYW4g
aWQ9InJhZGl1cyI+PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3BsZWZ0Ij48L3NwYW4+DQoJPHNwYW4g
aWQ9InRvcHJpZ2h0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbWxlZnQiPjwvc3Bhbj4NCgk8
c3BhbiBpZD0iYm90dG9tcmlnaHQiPjwvc3Bhbj4NCglkYXNoZWQNCjwvZGl2Pg0KDQo8ZGl2IGlk
PSJzb2xpZCI+DQoJPHNwYW4gaWQ9InJhZGl1cyI+PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3BsZWZ0
Ij48L3NwYW4+DQoJPHNwYW4gaWQ9InRvcHJpZ2h0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRv
bWxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0iYm90dG9tcmlnaHQiPjwvc3Bhbj4NCglzb2xpZA0K
PC9kaXY+DQoNCjxkaXYgaWQ9ImRvdWJsZSI+DQoJPHNwYW4gaWQ9InJhZGl1cyI+PC9zcGFuPg0K
CTxzcGFuIGlkPSJ0b3BsZWZ0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9InRvcHJpZ2h0Ij48L3NwYW4+
DQoJPHNwYW4gaWQ9ImJvdHRvbWxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0iYm90dG9tcmlnaHQi
Pjwvc3Bhbj4NCglkb3VibGUNCjwvZGl2Pg0KDQo8ZGl2IGlkPSJkb3QtZGFzaCI+DQoJPHNwYW4g
aWQ9InJhZGl1cyI+PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3BsZWZ0Ij48L3NwYW4+DQoJPHNwYW4g
aWQ9InRvcHJpZ2h0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbWxlZnQiPjwvc3Bhbj4NCgk8
c3BhbiBpZD0iYm90dG9tcmlnaHQiPjwvc3Bhbj4NCglkb3QtZGFzaA0KPC9kaXY+DQoNCjxkaXYg
aWQ9ImRvdC1kb3QtZGFzaCI+DQoJPHNwYW4gaWQ9InJhZGl1cyI+PC9zcGFuPg0KCTxzcGFuIGlk
PSJ0b3BsZWZ0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9InRvcHJpZ2h0Ij48L3NwYW4+DQoJPHNwYW4g
aWQ9ImJvdHRvbWxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0iYm90dG9tcmlnaHQiPjwvc3Bhbj4N
Cglkb3QtZG90LWRhc2gNCjwvZGl2Pg0KDQo8ZGl2IGlkPSJ3YXZlIj4NCgk8c3BhbiBpZD0icmFk
aXVzIj48L3NwYW4+DQoJPHNwYW4gaWQ9InRvcGxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0idG9w
cmlnaHQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0iYm90dG9tbGVmdCI+PC9zcGFuPg0KCTxzcGFuIGlk
PSJib3R0b21yaWdodCI+PC9zcGFuPg0KCXdhdmUNCjwvZGl2Pg0KDQo8ZGl2IGlkPSJncm9vdmUi
Pg0KCTxzcGFuIGlkPSJyYWRpdXMiPjwvc3Bhbj4NCgk8c3BhbiBpZD0idG9wbGVmdCI+PC9zcGFu
Pg0KCTxzcGFuIGlkPSJ0b3ByaWdodCI+PC9zcGFuPg0KCTxzcGFuIGlkPSJib3R0b21sZWZ0Ij48
L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbXJpZ2h0Ij48L3NwYW4+DQoJZ3Jvb3ZlDQo8L2Rpdj4N
Cg0KPGRpdiBpZD0icmlkZ2UiPg0KCTxzcGFuIGlkPSJyYWRpdXMiPjwvc3Bhbj4NCgk8c3BhbiBp
ZD0idG9wbGVmdCI+PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3ByaWdodCI+PC9zcGFuPg0KCTxzcGFu
IGlkPSJib3R0b21sZWZ0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbXJpZ2h0Ij48L3NwYW4+
DQoJcmlkZ2UNCjwvZGl2Pg0KDQo8ZGl2IGlkPSJpbnNldCI+DQoJPHNwYW4gaWQ9InJhZGl1cyI+
PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3BsZWZ0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9InRvcHJpZ2h0
Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbWxlZnQiPjwvc3Bhbj4NCgk8c3BhbiBpZD0iYm90
dG9tcmlnaHQiPjwvc3Bhbj4NCglpbnNldA0KPC9kaXY+DQoNCjxkaXYgaWQ9Im91dHNldCI+DQoJ
PHNwYW4gaWQ9InJhZGl1cyI+PC9zcGFuPg0KCTxzcGFuIGlkPSJ0b3BsZWZ0Ij48L3NwYW4+DQoJ
PHNwYW4gaWQ9InRvcHJpZ2h0Ij48L3NwYW4+DQoJPHNwYW4gaWQ9ImJvdHRvbWxlZnQiPjwvc3Bh
bj4NCgk8c3BhbiBpZD0iYm90dG9tcmlnaHQiPjwvc3Bhbj4NCglvdXRzZXQNCjwvZGl2Pg0KDQo8
L2JvZHk+DQoNCjwvaHRtbD4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14645</attachid>
            <date>2007-05-21 16:23:44 -0700</date>
            <delta_ts>2009-06-29 05:06:10 -0700</delta_ts>
            <desc>Rounded border rendering improvements</desc>
            <filename>9197_r0.patch</filename>
            <type>text/plain</type>
            <size>20913</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250
ZXh0Q0cuY3BwCShyZXZpc2lvbiAyMTYxNykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODMsMTIgKzI4Mywx
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEluCiAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKICAgICBDR0NvbnRleHRTYXZlR1N0
YXRlKGNvbnRleHQpOwogICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0Nv
bnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgZmFsc2UpOwogICAgIAotICAgIGludCB4
ID0gcmVjdC54KCk7Ci0gICAgaW50IHkgPSByZWN0LnkoKTsKLSAgICBmbG9hdCB3ID0gKGZsb2F0
KXJlY3Qud2lkdGgoKTsKLSAgICBmbG9hdCBoID0gKGZsb2F0KXJlY3QuaGVpZ2h0KCk7CisgICAg
ZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKKworICAgIGlmICh3aWR0aCA+PSByZWN0
LndpZHRoKCkgfHwgd2lkdGggPj0gcmVjdC5oZWlnaHQoKSkKKyAgICAgICAgd2lkdGggPSAwOwor
CisgICAgZmxvYXQgeCA9IHJlY3QueCgpICsgd2lkdGggLyAyOworICAgIGZsb2F0IHkgPSByZWN0
LnkoKSArIHdpZHRoIC8gMjsKKyAgICBmbG9hdCB3ID0gcmVjdC53aWR0aCgpIC0gd2lkdGg7Cisg
ICAgZmxvYXQgaCA9IHJlY3QuaGVpZ2h0KCkgLSB3aWR0aDsKICAgICBmbG9hdCBzY2FsZUZhY3Rv
ciA9IGggLyB3OwogICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3RvciA9IHcgLyBoOwogICAgIApA
QCAtMjk3LDc0ICszMDEsNjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25z
dCBJbgogICAgIAogICAgIGZsb2F0IGhSYWRpdXMgPSB3IC8gMjsKICAgICBmbG9hdCB2UmFkaXVz
ID0gaCAvIDI7CisKKyAgICBpZiAod2lkdGggPD0gMCkKKyAgICAgICAgQ0dDb250ZXh0TW92ZVRv
UG9pbnQoY29udGV4dCwgeCArIGhSYWRpdXMsIHkgKyB2UmFkaXVzKTsKKwogICAgIGZsb2F0IGZh
ID0gc3RhcnRBbmdsZTsKICAgICBmbG9hdCBmYWxlbiA9ICBmYSArIGFuZ2xlU3BhbjsKICAgICBm
bG9hdCBzdGFydCA9IC1mYSAqIE1fUEkvMTgwOwogICAgIGZsb2F0IGVuZCA9IC1mYWxlbiAqIE1f
UEkvMTgwOworCiAgICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRleHQsIHggKyBoUmFkaXVzLCAoeSAr
IHZSYWRpdXMpICogcmV2ZXJzZVNjYWxlRmFjdG9yLCBoUmFkaXVzLCBzdGFydCwgZW5kLCB0cnVl
KTsKIAogICAgIGlmICh3ICE9IGgpCiAgICAgICAgIHNjYWxlKEZsb2F0U2l6ZSgxLCByZXZlcnNl
U2NhbGVGYWN0b3IpKTsKKworICAgIGlmICh3aWR0aCA8PSAwKSB7CisgICAgICAgIENHQ29udGV4
dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHggKyBoUmFkaXVzLCB5ICsgdlJhZGl1cyk7CisgICAg
ICAgIGlmIChmaWxsQ29sb3IoKSAhPSBzdHJva2VDb2xvcigpKQorICAgICAgICAgICAgc2V0Q0dG
aWxsQ29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgIENHQ29udGV4dEZpbGxQ
YXRoKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQogICAgIAotICAgIAotICAgIGZsb2F0IHdpZHRoID0gc3Ry
b2tlVGhpY2tuZXNzKCk7Ci0gICAgaW50IHBhdFdpZHRoID0gMDsKKyAgICBmbG9hdCBwYXRXaWR0
aCA9IDA7CiAgICAgCiAgICAgc3dpdGNoIChzdHJva2VTdHlsZSgpKSB7CiAgICAgICAgIGNhc2Ug
RG90dGVkU3Ryb2tlOgotICAgICAgICAgICAgcGF0V2lkdGggPSAoaW50KSh3aWR0aCAvIDIpOwor
ICAgICAgICAgICAgcGF0V2lkdGggPSB3aWR0aCAqIHNxcnRmKHcgKiB3ICsgaCAqIGgpIC8gc3Fy
dGYoKHcgKyB3aWR0aCkgKiAodyArIHdpZHRoKSArIChoICsgd2lkdGgpICogKGggKyB3aWR0aCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRGFzaGVkU3Ryb2tlOgotICAgICAg
ICAgICAgcGF0V2lkdGggPSAzICogKGludCkod2lkdGggLyAyKTsKKyAgICAgICAgICAgIHBhdFdp
ZHRoID0gMy4wZiAqIHdpZHRoICogc3FydGYodyAqIHcgKyBoICogaCkgLyBzcXJ0ZigodyArIHdp
ZHRoKSAqICh3ICsgd2lkdGgpICsgKGggKyB3aWR0aCkgKiAoaCArIHdpZHRoKSk7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0K
LQotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAgICAgCi0gICAgaWYgKHBhdFdp
ZHRoKSB7CisgICAgaWYgKHBhdFdpZHRoID4gMCkgewogICAgICAgICAvLyBFeGFtcGxlOiA4MCBw
aXhlbHMgd2l0aCBhIHdpZHRoIG9mIDMwIHBpeGVscy4KICAgICAgICAgLy8gUmVtYWluZGVyIGlz
IDIwLiAgVGhlIG1heGltdW0gcGl4ZWxzIG9mIGxpbmUgd2UgY291bGQgcGFpbnQKICAgICAgICAg
Ly8gd2lsbCBiZSA1MCBwaXhlbHMuCi0gICAgICAgIGludCBkaXN0YW5jZTsKKyAgICAgICAgZmxv
YXQgZGlzdGFuY2U7CiAgICAgICAgIGlmIChoUmFkaXVzID09IHZSYWRpdXMpCi0gICAgICAgICAg
ICBkaXN0YW5jZSA9IChpbnQpKE1fUEkgKiBoUmFkaXVzKSAvIDI7CisgICAgICAgICAgICBkaXN0
YW5jZSA9IE1fUEkgKiBoUmFkaXVzIC8gMi4wZjsKICAgICAgICAgZWxzZSAvLyBXZSBhcmUgZWxs
aXB0aWNhbCBhbmQgd2lsbCBoYXZlIHRvIGVzdGltYXRlIHRoZSBkaXN0YW5jZQotICAgICAgICAg
ICAgZGlzdGFuY2UgPSAoaW50KShNX1BJICogc3FydCgoaFJhZGl1cyAqIGhSYWRpdXMgKyB2UmFk
aXVzICogdlJhZGl1cykgLyAyKSkgLyAyOworICAgICAgICAgICAgZGlzdGFuY2UgPSBNX1BJICog
c3FydGYoKGhSYWRpdXMgKiBoUmFkaXVzICsgdlJhZGl1cyAqIHZSYWRpdXMpIC8gMi4wZikgLyAy
LjBmOwogICAgICAgICAKLSAgICAgICAgaW50IHJlbWFpbmRlciA9IGRpc3RhbmNlICUgcGF0V2lk
dGg7Ci0gICAgICAgIGludCBjb3ZlcmFnZSA9IGRpc3RhbmNlIC0gcmVtYWluZGVyOwotICAgICAg
ICBpbnQgbnVtU2VnbWVudHMgPSBjb3ZlcmFnZSAvIHBhdFdpZHRoOwotCi0gICAgICAgIGZsb2F0
IHBhdHRlcm5PZmZzZXQgPSAwOwotICAgICAgICAvLyBTcGVjaWFsIGNhc2UgMXB4IGRvdHRlZCBi
b3JkZXJzIGZvciBzcGVlZC4KLSAgICAgICAgaWYgKHBhdFdpZHRoID09IDEpCi0gICAgICAgICAg
ICBwYXR0ZXJuT2Zmc2V0ID0gMS4wOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wg
ZXZlbk51bWJlck9mU2VnbWVudHMgPSBudW1TZWdtZW50cyAlIDIgPT0gMDsKLSAgICAgICAgICAg
IGlmIChyZW1haW5kZXIpCi0gICAgICAgICAgICAgICAgZXZlbk51bWJlck9mU2VnbWVudHMgPSAh
ZXZlbk51bWJlck9mU2VnbWVudHM7Ci0gICAgICAgICAgICBpZiAoZXZlbk51bWJlck9mU2VnbWVu
dHMpIHsKLSAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0V2lkdGggLSByZW1haW5kZXI7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyIC8gMjsKLSAgICAgICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IHBhdFdpZHRoIC8gMjsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikKLSAg
ICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IChwYXRXaWR0aCAtIHJlbWFpbmRlcikg
LyAyOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgCisgICAgICAgIGZsb2F0IHBhdHRl
cm5PZmZzZXQgPSAocGF0V2lkdGggLSByZW1haW5kZXJmKGRpc3RhbmNlLCBwYXRXaWR0aCAqIDIu
MGYpKSAvIDIuMGY7CisKICAgICAgICAgY29uc3QgQ0dGbG9hdCBkb3R0ZWRMaW5lWzJdID0geyBw
YXRXaWR0aCwgcGF0V2lkdGggfTsKICAgICAgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4
dCwgcGF0dGVybk9mZnNldCwgZG90dGVkTGluZSwgMik7CiAgICAgfQogCiAgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OwotICAgIAotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3Qg
RmxvYXRQb2ludCogcG9pbnRzLCBib29sIHNob3VsZEFudGlhbGlhcykKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjE2MTcpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MzQsNyArODM0LDcgQEAgdm9p
ZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXJBcmMoR3JhcGhpYwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGFuZ2xlU3RhcnQsIGludCBhbmdsZVNwYW4sIEJvcmRlclNpZGUg
cywgQ29sb3IgYywgY29uc3QgQ29sb3ImIHRleHRDb2xvciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEVCb3JkZXJTdHlsZSBzdHlsZSwgYm9vbCBmaXJzdENvcm5lcikKIHsKLSAg
ICBpZiAoKHN0eWxlID09IERPVUJMRSAmJiB0aGlja25lc3MgLyAyIDwgMykgfHwgKChzdHlsZSA9
PSBSSURHRSB8fCBzdHlsZSA9PSBHUk9PVkUpICYmIHRoaWNrbmVzcyAvIDIgPCAyKSkKKyAgICBp
ZiAoKHN0eWxlID09IERPVUJMRSAmJiB0aGlja25lc3MgPD0gMikgfHwgKChzdHlsZSA9PSBSSURH
RSB8fCBzdHlsZSA9PSBHUk9PVkUpICYmIHRoaWNrbmVzcyAvIDIgPCAyKSkKICAgICAgICAgc3R5
bGUgPSBTT0xJRDsKIAogICAgIGlmICghYy5pc1ZhbGlkKCkpIHsKQEAgLTg1NiwyNyArODU2LDE1
IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyQXJjKEdyYXBoaWMKICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndpZHRoKCkg
KiAyLCByYWRpdXMuaGVpZ2h0KCkgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERPVUJMRTogewotICAgICAgICAgICAgZmxvYXQg
dGhpcmQgPSB0aGlja25lc3MgLyAzLjBmOwotICAgICAgICAgICAgZmxvYXQgaW5uZXJUaGlyZCA9
ICh0aGlja25lc3MgKyAxLjBmKSAvIDYuMGY7Ci0gICAgICAgICAgICBpbnQgc2hpZnRGb3JJbm5l
ciA9IHN0YXRpY19jYXN0PGludD4oaW5uZXJUaGlyZCAqIDIuNWYpOwotCi0gICAgICAgICAgICBp
bnQgb3V0ZXJZID0geTsKLSAgICAgICAgICAgIGludCBvdXRlckhlaWdodCA9IHJhZGl1cy5oZWln
aHQoKSAqIDI7Ci0gICAgICAgICAgICBpbnQgaW5uZXJYID0geCArIHNoaWZ0Rm9ySW5uZXI7Ci0g
ICAgICAgICAgICBpbnQgaW5uZXJZID0geSArIHNoaWZ0Rm9ySW5uZXI7Ci0gICAgICAgICAgICBp
bnQgaW5uZXJXaWR0aCA9IChyYWRpdXMud2lkdGgoKSAtIHNoaWZ0Rm9ySW5uZXIpICogMjsKLSAg
ICAgICAgICAgIGludCBpbm5lckhlaWdodCA9IChyYWRpdXMuaGVpZ2h0KCkgLSBzaGlmdEZvcklu
bmVyKSAqIDI7Ci0gICAgICAgICAgICBpZiAoaW5uZXJUaGlyZCA+IDEgJiYgKHMgPT0gQlNUb3Ag
fHwgKGZpcnN0Q29ybmVyICYmIChzID09IEJTTGVmdCB8fCBzID09IEJTUmlnaHQpKSkpIHsKLSAg
ICAgICAgICAgICAgICBvdXRlckhlaWdodCArPSAyOwotICAgICAgICAgICAgICAgIGlubmVySGVp
Z2h0ICs9IDI7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpbnQgdGhpcmQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHRoaWNrbmVzcyArIDEpIC8gMzsKKyAgICAgICAgICAgIGludCBpbnNldCA9IHN0
YXRpY19jYXN0PGludD4odGhpY2tuZXNzKSAtIHRoaXJkOwogCiAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYyk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIG91dGVyWSwgcmFkaXVzLndpZHRoKCkgKiAyLCBvdXRl
ckhlaWdodCksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhpbm5lclRoaXJkID4gMiA/IGlubmVyVGhpcmQgLSAx
IDogaW5uZXJUaGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJ
bnRSZWN0KGlubmVyWCwgaW5uZXJZLCBpbm5lcldpZHRoLCBpbm5lckhlaWdodCksIGFuZ2xlU3Rh
cnQsIGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJ
bnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFu
Z2xlU3RhcnQsIGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBpZiAocmFkaXVzLndpZHRoKCkgPiBp
bnNldCAmJiByYWRpdXMuaGVpZ2h0KCkgPiBpbnNldCkKKyAgICAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHggKyBpbnNldCAsIHkgKyBpbnNldCwgKHJhZGl1
cy53aWR0aCgpIC0gaW5zZXQpICogMiAsIChyYWRpdXMuaGVpZ2h0KCkgLSBpbnNldCkgKiAyKSwg
YW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAg
ICAgICAgIGNhc2UgR1JPT1ZFOgpAQCAtODk1LDEwICs4ODMsMTAgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OmRyYXdCb3JkZXJBcmMoR3JhcGhpYwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndpZHRoKCkgKiAyLCByYWRpdXMuaGVp
Z2h0KCkgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKIAotICAgICAgICAgICAgZmxvYXQg
aGFsZlRoaWNrbmVzcyA9ICh0aGlja25lc3MgKyAxLjBmKSAvIDQuMGY7Ci0gICAgICAgICAgICBp
bnQgc2hpZnRGb3JJbm5lciA9IHN0YXRpY19jYXN0PGludD4oaGFsZlRoaWNrbmVzcyAqIDEuNWYp
OworICAgICAgICAgICAgaW50IGhhbGZUaGlja25lc3MgPSBzdGF0aWNfY2FzdDxpbnQ+KHRoaWNr
bmVzcyArIDEpIC8gMjsKKyAgICAgICAgICAgIGludCBzaGlmdEZvcklubmVyID0gc3RhdGljX2Nh
c3Q8aW50Pih0aGlja25lc3MpIC0gaGFsZlRoaWNrbmVzczsKICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYzIpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VUaGlja25lc3MoaGFsZlRoaWNrbmVzcyA+IDIgPyBoYWxmVGhpY2tuZXNzIC0g
MSA6IGhhbGZUaGlja25lc3MpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJv
a2VUaGlja25lc3MoaGFsZlRoaWNrbmVzcyk7CiAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnN0cm9rZUFyYyhJbnRSZWN0KHggKyBzaGlmdEZvcklubmVyLCB5ICsgc2hpZnRGb3JJbm5lciwg
KHJhZGl1cy53aWR0aCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHJhZGl1cy5oZWlnaHQoKSAtIHNoaWZ0Rm9ySW5uZXIpICog
MiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTk2OSwx
MiArOTU3LDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXIoR3JhcGhpY3NDbwogICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgx
LCB5MiAtIHRoaXJkLCB4MiAtIHgxLCB0aGlyZCkpOwogICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQlNMZWZ0OgotICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5MSArIDEsIHRo
aXJkLCB5MiAtIHkxIC0gMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgyIC0gdGhpcmQsIHkxICsgMSwgdGhpcmQsIHkyIC0geTEg
LSAxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBCU1JpZ2h0OgotICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5kcmF3UmVjdChJbnRSZWN0KHgxLCB5MSArIDEsIHRoaXJkLCB5MiAtIHkxIC0gMSkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgy
IC0gdGhpcmQsIHkxICsgMSwgdGhpcmQsIHkyIC0geTEgLSAxKSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KEludFJlY3QoeDEsIHkxLCB0aGlyZCwg
eTIgLSB5MSkpOworICAgICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3
UmVjdChJbnRSZWN0KHgyIC0gdGhpcmQsIHkxLCB0aGlyZCwgeTIgLSB5MSkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBl
bHNlIHsKQEAgLTEyNjksMTIgKzEyNTQsNiBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3Jk
ZXIoR3JhcGhpY3NDCiAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihoKSA+PSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4odG9wUmlnaHQuaGVpZ2h0KCkpICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGJvdHRvbVJpZ2h0LmhlaWdodCgpKSkKICAgICAgICAgcmVuZGVyUmFkaWkgPSB0cnVlOwogCi0g
ICAgLy8gQ2xpcCB0byB0aGUgcm91bmRlZCByZWN0YW5nbGUuCi0gICAgaWYgKHJlbmRlclJhZGlp
KSB7Ci0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHR4LCB0eSwgdywgaCksIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7Ci0gICAgfQotCiAgICAgaW50IGZp
cnN0QW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTdGFydCwgZmlyc3RBbmdsZVNwYW4sIHNlY29uZEFu
Z2xlU3BhbjsKICAgICBmbG9hdCB0aGlja25lc3M7CiAgICAgYm9vbCB1cHBlckxlZnRCb3JkZXJT
dHlsZXNNYXRjaCA9IHJlbmRlckxlZnQgJiYgKHRzID09IGxzKSAmJiAodGMgPT0gbGMpOwpAQCAt
MTMwNyw0MCArMTI4NiwyMCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhp
Y3NDCiAgICAgICAgICAgICAvLyBXZSBtYWtlIHRoZSBhcmMgZG91YmxlIHRoaWNrIGFuZCBsZXQg
dGhlIGNsaXAgcmVjdCB0YWtlIGNhcmUgb2YgY2xpcHBpbmcgdGhlIGV4dHJhIG9mZi4KICAgICAg
ICAgICAgIC8vIFdlJ3JlIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0gcG9zc2li
bGUgdG8gbWF0Y2ggdGhlIGN1cnZlIG9mIHRoZSBjbGlwIGV4YWN0bHkKICAgICAgICAgICAgIC8v
IHdpdGggdGhlIGFyYy1kcmF3aW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgdGhpY2tuZXNzID0g
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgKiAyOworICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5
bGUtPmJvcmRlclRvcFdpZHRoKCk7CiAKICAgICAgICAgICAgIGlmICh0b3BMZWZ0LndpZHRoKCkp
IHsKICAgICAgICAgICAgICAgICBpbnQgbGVmdFggPSB0eDsKLSAgICAgICAgICAgICAgICAvLyBU
aGUgaW5uZXIgY2xpcCBjbGlwcyBpbnNpZGUgdGhlIGFyYy4gVGhpcyBpcyBlc3BlY2lhbGx5IGlt
cG9ydGFudCBmb3IgMXB4IGJvcmRlcnMuCi0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUxlZnRJ
bm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53aWR0aCgpKQot
ICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCB0b3BMZWZ0
LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAodHMgIT0gRE9VQkxFIHx8IHN0eWxl
LT5ib3JkZXJUb3BXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElu
bmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsK
LSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcChJbnRSZWN0KGxlZnRYLCBsZWZ0WSwgdG9wTGVmdC53aWR0aCgpICogMiwgdG9wTGVmdC5o
ZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgICAg
ICAgICB9Ci0KICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSA5MDsKICAgICAgICAg
ICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IHVwcGVyTGVmdEJvcmRlclN0eWxlc01hdGNoID8gOTAg
OiA0NTsKIAogICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgbGVmdCBhcmMKICAgICAgICAg
ICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4dCwgbGVmdFgsIGxlZnRZLCB0aGlj
a25lc3MsIHRvcExlZnQsIGZpcnN0QW5nbGVTdGFydCwgZmlyc3RBbmdsZVNwYW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBCU1RvcCwgdGMsIHN0eWxlLT5jb2xvcigpLCB0cywgdHJ1
ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAKICAg
ICAgICAgICAgIGlmICh0b3BSaWdodC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IHJp
Z2h0WCA9IHR4ICsgdyAtIHRvcFJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGJv
b2wgYXBwbHlSaWdodElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgdG9w
UmlnaHQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpIDwgdG9wUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmICh0cyAh
PSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAg
ICBpZiAoYXBwbHlSaWdodElubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5h
ZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHJpZ2h0WCwgbGVmdFksIHRvcFJpZ2h0Lndp
ZHRoKCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAodXBwZXJS
aWdodEJvcmRlclN0eWxlc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xl
U3RhcnQgPSAwOwpAQCAtMTM1Myw4ICsxMzEyLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50
Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgcmlnaHQgYXJj
CiAgICAgICAgICAgICAgICAgZHJhd0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHJpZ2h0WCwg
bGVmdFksIHRoaWNrbmVzcywgdG9wUmlnaHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xl
U3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTVG9wLCB0Yywgc3R5bGUtPmNv
bG9yKCksIHRzLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNs
aXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTM3OSwxOSArMTMzNiwxMSBAQCB2b2lk
IFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDCiAgICAgICAgICAgICAgICAgICAg
aWdub3JlX2xlZnQgPyAwIDogc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBpZ25vcmVfcmlnaHQg
PyAwIDogc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7CiAKICAgICAgICAgaWYgKHJlbmRlclJh
ZGlpKSB7Ci0gICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSAqIDI7CisgICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KTsKIAogICAgICAgICAgICAgaWYgKGJvdHRvbUxlZnQud2lkdGgoKSkgewogICAgICAgICAgICAg
ICAgIGludCBsZWZ0WCA9IHR4OwogICAgICAgICAgICAgICAgIGludCBsZWZ0WSA9IHR5ICsgaCAt
IGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0
SW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IGJvdHRvbUxlZnQud2lkdGgo
KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIDwg
Ym90dG9tTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGJzICE9IERPVUJM
RSB8fCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlm
IChhcHBseUxlZnRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChsZWZ0WCwgbGVmdFksIGJvdHRvbUxlZnQud2lkdGgo
KSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGxvd2Vy
TGVmdEJvcmRlclN0eWxlc01hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVT
dGFydCA9IDE4MDsKQEAgLTE0MDQsMjEgKzEzNTMsMTEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBh
aW50Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICAgICAgICAgIC8vIERyYXcgbG93ZXIgbGVmdCBh
cmMKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4dCwgbGVmdFgs
IGxlZnRZLCB0aGlja25lc3MsIGJvdHRvbUxlZnQsIGZpcnN0QW5nbGVTdGFydCwgZmlyc3RBbmds
ZVNwYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0JvdHRvbSwgYmMsIHN0eWxl
LT5jb2xvcigpLCBicywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVy
Q2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChib3R0b21SaWdodC53aWR0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgaW50IHJpZ2h0WSA9IHR5ICsgaCAtIGJvdHRvbVJpZ2h0LmhlaWdodCgp
ICogMjsKICAgICAgICAgICAgICAgICBpbnQgcmlnaHRYID0gdHggKyB3IC0gYm90dG9tUmlnaHQu
d2lkdGgoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseVJpZ2h0SW5uZXJDbGlwID0g
KHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgPCBib3R0b21SaWdodC53aWR0aCgpKQotICAgICAg
ICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21SaWdo
dC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGJzICE9IERPVUJMRSB8fCBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVJp
Z2h0SW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2
ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZElubmVyUm91bmRl
ZFJlY3RDbGlwKEludFJlY3QocmlnaHRYLCByaWdodFksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAy
LCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0
aCgpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0
YXJ0ID0gMjcwOwogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3BhbiA9IGxvd2VyUmlnaHRC
b3JkZXJTdHlsZXNNYXRjaCA/IDkwIDogNDU7CkBAIC0xNDI2LDggKzEzNjUsNiBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDCiAgICAgICAgICAgICAgICAgLy8gRHJh
dyBsb3dlciByaWdodCBhcmMKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNz
Q29udGV4dCwgcmlnaHRYLCByaWdodFksIHRoaWNrbmVzcywgYm90dG9tUmlnaHQsIHNlY29uZEFu
Z2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJTQm90dG9tLCBiYywgc3R5bGUtPmNvbG9yKCksIGJzLCBmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAt
MTQ1MywxOCArMTM5MCwxMCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhp
Y3NDCiAKICAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVz
TWF0Y2ggfHwgIWxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNoKSkgewogICAgICAgICAgICAgaW50
IHRvcFggPSB0eDsKLSAgICAgICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSAqIDI7CisgICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRo
KCk7CiAKICAgICAgICAgICAgIGlmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgdG9w
TGVmdC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IHRvcFkgPSB0eTsKLSAgICAgICAg
ICAgICAgICBib29sIGFwcGx5VG9wSW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSA8IHRvcExlZnQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3Jk
ZXJUb3BXaWR0aCgpIDwgdG9wTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYg
KGxzICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgPiA2KTsKLSAgICAgICAg
ICAgICAgICBpZiAoYXBwbHlUb3BJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdCh0b3BYLCB0b3BZLCB0b3BMZWZ0Lndp
ZHRoKCkgKiAyLCB0b3BMZWZ0LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xl
U3RhcnQgPSAxMzU7CiAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSA0NTsKQEAgLTE0
NzIsMjAgKzE0MDEsMTAgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNz
QwogICAgICAgICAgICAgICAgIC8vIERyYXcgdG9wIGxlZnQgYXJjCiAgICAgICAgICAgICAgICAg
ZHJhd0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHRvcFgsIHRvcFksIHRoaWNrbmVzcywgdG9w
TGVmdCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3BhbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJTTGVmdCwgbGMsIHN0eWxlLT5jb2xvcigpLCBscywgdHJ1ZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKCFsb3dlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCAmJiBib3R0b21MZWZ0LndpZHRoKCkpIHsK
ICAgICAgICAgICAgICAgICBpbnQgYm90dG9tWSA9IHR5ICsgaCAtIGJvdHRvbUxlZnQuaGVpZ2h0
KCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgYm90dG9tTGVmdC53aWR0aCgpKQotICAgICAgICAgICAg
ICAgICAgICAmJiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21MZWZ0LmhlaWdo
dCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAobHMgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVy
Q2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAg
ICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xp
cChJbnRSZWN0KHRvcFgsIGJvdHRvbVksIGJvdHRvbUxlZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxl
ZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAxODA7CiAg
ICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7CkBAIC0xNDkzLDggKzE0MTIsNiBA
QCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDCiAgICAgICAgICAgICAg
ICAgLy8gRHJhdyBib3R0b20gbGVmdCBhcmMKICAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJj
KGdyYXBoaWNzQ29udGV4dCwgdG9wWCwgYm90dG9tWSwgdGhpY2tuZXNzLCBib3R0b21MZWZ0LCBz
ZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCU0xlZnQsIGxjLCBzdHlsZS0+Y29sb3IoKSwgbHMsIGZhbHNlKTsKLSAgICAgICAg
ICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQpAQCAtMTUyMSwxOSArMTQzOCwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIo
R3JhcGhpY3NDCiAgICAgICAgICAgICAgICAgICAgaWdub3JlX3RvcCA/IDAgOiBzdHlsZS0+Ym9y
ZGVyVG9wV2lkdGgoKSwgaWdub3JlX2JvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSk7CiAKICAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmICghdXBwZXJSaWdodEJvcmRlclN0
eWxlc01hdGNoIHx8ICFsb3dlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2gpKSB7Ci0gICAgICAgICAg
ICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpICogMjsKKyAgICAgICAgICAg
IHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCk7CiAKICAgICAgICAgICAgIGlm
ICghdXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoICYmIHRvcFJpZ2h0LndpZHRoKCkpIHsKICAg
ICAgICAgICAgICAgICBpbnQgdG9wWCA9IHR4ICsgdyAtIHRvcFJpZ2h0LndpZHRoKCkgKiAyOwog
ICAgICAgICAgICAgICAgIGludCB0b3BZID0gdHk7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBs
eVRvcElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgdG9wUmlnaHQud2lk
dGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwg
dG9wUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChycyAhPSBET1VCTEUg
fHwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChh
cHBseVRvcElubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJv
dW5kZWRSZWN0Q2xpcChJbnRSZWN0KHRvcFgsIHRvcFksIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0
b3BSaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwot
ICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDA7
CiAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSA0NTsKQEAgLTE1NDEsMjEgKzE0NTAs
MTEgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICAg
ICAgICAgIC8vIERyYXcgdG9wIHJpZ2h0IGFyYwogICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJB
cmMoZ3JhcGhpY3NDb250ZXh0LCB0b3BYLCB0b3BZLCB0aGlja25lc3MsIHRvcFJpZ2h0LCBmaXJz
dEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQlNSaWdodCwgcmMsIHN0eWxlLT5jb2xvcigpLCBycywgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCFsb3dl
clJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgYm90dG9tUmlnaHQud2lkdGgoKSkgewogICAgICAg
ICAgICAgICAgIGludCBib3R0b21YID0gdHggKyB3IC0gYm90dG9tUmlnaHQud2lkdGgoKSAqIDI7
CiAgICAgICAgICAgICAgICAgaW50IGJvdHRvbVkgPSB0eSArIGggLSBib3R0b21SaWdodC5oZWln
aHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUJvdHRvbUlubmVyQ2xpcCA9IChz
dHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgYm90dG9tUmlnaHQud2lkdGgoKSkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIDwgYm90dG9tUmlnaHQu
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChycyAhPSBET1VCTEUgfHwgc3R5bGUt
PmJvcmRlclJpZ2h0V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRv
bUlubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUo
KTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRS
ZWN0Q2xpcChJbnRSZWN0KGJvdHRvbVgsIGJvdHRvbVksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAy
LCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRo
KCkpOwotICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3Rh
cnQgPSAzMTU7CiAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7CkBAIC0xNTYz
LDE0ICsxNDYyLDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQwog
ICAgICAgICAgICAgICAgIC8vIERyYXcgYm90dG9tIHJpZ2h0IGFyYwogICAgICAgICAgICAgICAg
IGRyYXdCb3JkZXJBcmMoZ3JhcGhpY3NDb250ZXh0LCBib3R0b21YLCBib3R0b21ZLCB0aGlja25l
c3MsIGJvdHRvbVJpZ2h0LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBCU1JpZ2h0LCByYywgc3R5bGUtPmNvbG9yKCksIHJz
LCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKQotICAg
ICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KLQotICAgIGlmIChyZW5kZXJSYWRpaSkKLSAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEJv
eFNoYWRvdyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywg
aW50IGgsIGNvbnN0IFJlbmRlclN0eWxlKiBzLCBib29sIGJlZ2luLCBib29sIGVuZCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14651</attachid>
            <date>2007-05-22 03:27:29 -0700</date>
            <delta_ts>2009-06-29 05:06:10 -0700</delta_ts>
            <desc>Non-uniform stroke thickness improvements</desc>
            <filename>9197_r0.1.patch</filename>
            <type>text/plain</type>
            <size>26361</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gMjE2MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0
IEZsb2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZhbHNlKTsKIAogICAgICAgICAv
LyBBcmMgZHJhd2luZyAodXNlZCBieSBib3JkZXItcmFkaXVzIGluIENTUykganVzdCBzdXBwb3J0
cyBzdHJva2luZyBhdCB0aGUgbW9tZW50LgotICAgICAgICB2b2lkIHN0cm9rZUFyYyhjb25zdCBJ
bnRSZWN0JiwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pOworICAgICAgICB2b2lkIHN0
cm9rZUFyYyhjb25zdCBJbnRSZWN0JiwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4sIGlu
dCBzdHJva2VXaWR0aCwgaW50IHN0cm9rZUhlaWdodCk7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gMjE2MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc1LDk2ICsyNzUsOTAgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IAogfQogCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgcmVjdCwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmds
ZVNwYW4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHJl
Y3QsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuLCBpbnQgc3Ryb2tlV2lkdGgsIGludCBz
dHJva2VIZWlnaHQpCiB7IAotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgc3Ryb2tlU3R5
bGUoKSA9PSBOb1N0cm9rZSB8fCBzdHJva2VUaGlja25lc3MoKSA8PSAwLjBmIHx8ICFzdHJva2VD
b2xvcigpLmFscGhhKCkpCisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSB8fCBzdHJva2VTdHls
ZSgpID09IE5vU3Ryb2tlIHx8IHN0cm9rZVdpZHRoIDw9IDAgfHwgc3Ryb2tlSGVpZ2h0IDw9IDAg
fHwgIXN0cm9rZUNvbG9yKCkuYWxwaGEoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIENH
Q29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CiAgICAgQ0dDb250ZXh0U2F2
ZUdTdGF0ZShjb250ZXh0KTsKICAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7Ci0gICAg
Q0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIGZhbHNlKTsKICAgICAKLSAgICBp
bnQgeCA9IHJlY3QueCgpOwotICAgIGludCB5ID0gcmVjdC55KCk7Ci0gICAgZmxvYXQgdyA9IChm
bG9hdClyZWN0LndpZHRoKCk7Ci0gICAgZmxvYXQgaCA9IChmbG9hdClyZWN0LmhlaWdodCgpOwot
ICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gaCAvIHc7Ci0gICAgZmxvYXQgcmV2ZXJzZVNjYWxlRmFj
dG9yID0gdyAvIGg7CisgICAgZmxvYXQgd2lkdGggPSBzdHJva2VXaWR0aDsKKyAgICBDR0NvbnRl
eHRTZXRMaW5lV2lkdGgoY29udGV4dCwgd2lkdGgpOworCisgICAgaWYgKHdpZHRoID49IHJlY3Qu
d2lkdGgoKSB8fCB3aWR0aCA+PSByZWN0LmhlaWdodCgpKQorICAgICAgICB3aWR0aCA9IDA7CisK
KyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcmVjdC54KCkgKyByZWN0LndpZHRo
KCkgLyAyLjBmLCByZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyLjBmKTsKKworICAgIGZsb2F0
IHcgPSByZWN0LndpZHRoKCkgLSBzdHJva2VXaWR0aDsKKyAgICBmbG9hdCBoID0gcmVjdC5oZWln
aHQoKSAtIHN0cm9rZUhlaWdodDsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGggLyB3ICogc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHN0cm9rZVdpZHRoKSAvIHN0YXRpY19jYXN0PGZsb2F0PihzdHJva2VI
ZWlnaHQpOworICAgIGZsb2F0IHJldmVyc2VTY2FsZUZhY3RvciA9IHcgLyBoICogc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHN0cm9rZUhlaWdodCkgLyBzdGF0aWNfY2FzdDxmbG9hdD4oc3Ryb2tlV2lkdGgp
OwogICAgIAogICAgIGlmICh3ICE9IGgpCiAgICAgICAgIHNjYWxlKEZsb2F0U2l6ZSgxLCBzY2Fs
ZUZhY3RvcikpOwogICAgIAogICAgIGZsb2F0IGhSYWRpdXMgPSB3IC8gMjsKICAgICBmbG9hdCB2
UmFkaXVzID0gaCAvIDI7CisKKyAgICBpZiAod2lkdGggPD0gMCkKKyAgICAgICAgQ0dDb250ZXh0
TW92ZVRvUG9pbnQoY29udGV4dCwgMCwgMCk7CisKICAgICBmbG9hdCBmYSA9IHN0YXJ0QW5nbGU7
CiAgICAgZmxvYXQgZmFsZW4gPSAgZmEgKyBhbmdsZVNwYW47CiAgICAgZmxvYXQgc3RhcnQgPSAt
ZmEgKiBNX1BJLzE4MDsKICAgICBmbG9hdCBlbmQgPSAtZmFsZW4gKiBNX1BJLzE4MDsKLSAgICBD
R0NvbnRleHRBZGRBcmMoY29udGV4dCwgeCArIGhSYWRpdXMsICh5ICsgdlJhZGl1cykgKiByZXZl
cnNlU2NhbGVGYWN0b3IsIGhSYWRpdXMsIHN0YXJ0LCBlbmQsIHRydWUpOworCisgICAgaWYgKHN0
cm9rZUhlaWdodCAhPSBzdHJva2VXaWR0aCkKKyAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29u
dGV4dCwgMS4wZiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN0cm9rZUhlaWdodCkgLyBzdGF0aWNfY2Fz
dDxmbG9hdD4oc3Ryb2tlV2lkdGgpKTsKKworICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCAw
LCAwLCBoUmFkaXVzLCBzdGFydCwgZW5kLCB0cnVlKTsKIAogICAgIGlmICh3ICE9IGgpCiAgICAg
ICAgIHNjYWxlKEZsb2F0U2l6ZSgxLCByZXZlcnNlU2NhbGVGYWN0b3IpKTsKKworICAgIGlmICh3
aWR0aCA8PSAwKSB7CisgICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIDAs
IDApOworICAgICAgICBpZiAoZmlsbENvbG9yKCkgIT0gc3Ryb2tlQ29sb3IoKSkKKyAgICAgICAg
ICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9yKCkpOworICAgICAgICBDR0Nv
bnRleHRGaWxsUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShj
b250ZXh0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKLSAgICAKLSAgICBmbG9hdCB3
aWR0aCA9IHN0cm9rZVRoaWNrbmVzcygpOwotICAgIGludCBwYXRXaWR0aCA9IDA7CisgICAgZmxv
YXQgcGF0V2lkdGggPSAwOwogICAgIAogICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUoKSkgewogICAg
ICAgICBjYXNlIERvdHRlZFN0cm9rZToKLSAgICAgICAgICAgIHBhdFdpZHRoID0gKGludCkod2lk
dGggLyAyKTsKKyAgICAgICAgICAgIHBhdFdpZHRoID0gd2lkdGggKiBzcXJ0Zih3ICogdyArIGgg
KiBoKSAvIHNxcnRmKCh3ICsgd2lkdGgpICogKHcgKyB3aWR0aCkgKyAoaCArIHdpZHRoKSAqICho
ICsgd2lkdGgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIERhc2hlZFN0cm9r
ZToKLSAgICAgICAgICAgIHBhdFdpZHRoID0gMyAqIChpbnQpKHdpZHRoIC8gMik7CisgICAgICAg
ICAgICBwYXRXaWR0aCA9IDMuMGYgKiB3aWR0aCAqIHNxcnRmKHcgKiB3ICsgaCAqIGgpIC8gc3Fy
dGYoKHcgKyB3aWR0aCkgKiAodyArIHdpZHRoKSArIChoICsgd2lkdGgpICogKGggKyB3aWR0aCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBicmVh
azsKICAgICB9Ci0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgIAotICAg
IGlmIChwYXRXaWR0aCkgeworICAgIGlmIChwYXRXaWR0aCA+IDApIHsKICAgICAgICAgLy8gRXhh
bXBsZTogODAgcGl4ZWxzIHdpdGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCiAgICAgICAgIC8vIFJl
bWFpbmRlciBpcyAyMC4gIFRoZSBtYXhpbXVtIHBpeGVscyBvZiBsaW5lIHdlIGNvdWxkIHBhaW50
CiAgICAgICAgIC8vIHdpbGwgYmUgNTAgcGl4ZWxzLgotICAgICAgICBpbnQgZGlzdGFuY2U7Cisg
ICAgICAgIGZsb2F0IGRpc3RhbmNlOwogICAgICAgICBpZiAoaFJhZGl1cyA9PSB2UmFkaXVzKQot
ICAgICAgICAgICAgZGlzdGFuY2UgPSAoaW50KShNX1BJICogaFJhZGl1cykgLyAyOworICAgICAg
ICAgICAgZGlzdGFuY2UgPSBNX1BJICogaFJhZGl1cyAvIDIuMGY7CiAgICAgICAgIGVsc2UgLy8g
V2UgYXJlIGVsbGlwdGljYWwgYW5kIHdpbGwgaGF2ZSB0byBlc3RpbWF0ZSB0aGUgZGlzdGFuY2UK
LSAgICAgICAgICAgIGRpc3RhbmNlID0gKGludCkoTV9QSSAqIHNxcnQoKGhSYWRpdXMgKiBoUmFk
aXVzICsgdlJhZGl1cyAqIHZSYWRpdXMpIC8gMikpIC8gMjsKKyAgICAgICAgICAgIGRpc3RhbmNl
ID0gTV9QSSAqIHNxcnRmKChoUmFkaXVzICogaFJhZGl1cyArIHZSYWRpdXMgKiB2UmFkaXVzKSAv
IDIuMGYpIC8gMi4wZjsKICAgICAgICAgCi0gICAgICAgIGludCByZW1haW5kZXIgPSBkaXN0YW5j
ZSAlIHBhdFdpZHRoOwotICAgICAgICBpbnQgY292ZXJhZ2UgPSBkaXN0YW5jZSAtIHJlbWFpbmRl
cjsKLSAgICAgICAgaW50IG51bVNlZ21lbnRzID0gY292ZXJhZ2UgLyBwYXRXaWR0aDsKLQotICAg
ICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIDFw
eCBkb3R0ZWQgYm9yZGVycyBmb3Igc3BlZWQuCi0gICAgICAgIGlmIChwYXRXaWR0aCA9PSAxKQot
ICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IDEuMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBib29sIGV2ZW5OdW1iZXJPZlNlZ21lbnRzID0gbnVtU2VnbWVudHMgJSAyID09IDA7Ci0g
ICAgICAgICAgICBpZiAocmVtYWluZGVyKQotICAgICAgICAgICAgICAgIGV2ZW5OdW1iZXJPZlNl
Z21lbnRzID0gIWV2ZW5OdW1iZXJPZlNlZ21lbnRzOwotICAgICAgICAgICAgaWYgKGV2ZW5OdW1i
ZXJPZlNlZ21lbnRzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikgewotICAgICAg
ICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdFdpZHRoIC0gcmVtYWluZGVyOwotICAg
ICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHJlbWFpbmRlciAvIDI7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgPSBwYXRX
aWR0aCAvIDI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChyZW1h
aW5kZXIpCi0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgPSAocGF0V2lkdGggLSBy
ZW1haW5kZXIpIC8gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIAorICAgICAgICBm
bG9hdCBwYXR0ZXJuT2Zmc2V0ID0gKHBhdFdpZHRoIC0gcmVtYWluZGVyZihkaXN0YW5jZSwgcGF0
V2lkdGggKiAyLjBmKSkgLyAyLjBmOworCiAgICAgICAgIGNvbnN0IENHRmxvYXQgZG90dGVkTGlu
ZVsyXSA9IHsgcGF0V2lkdGgsIHBhdFdpZHRoIH07CiAgICAgICAgIENHQ29udGV4dFNldExpbmVE
YXNoKGNvbnRleHQsIHBhdHRlcm5PZmZzZXQsIGRvdHRlZExpbmUsIDIpOwogICAgIH0KIAogICAg
IENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKLSAgICAKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwog
fQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBzaG91bGRBbnRpYWxpYXMpCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIxNjM4KQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMwLDExICs4
MzAsMTEgQEAgYm9vbCBSZW5kZXJPYmplY3Q6Om11c3RSZXBhaW50QmFja2dyb3VuZAogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3JkZXJBcmMoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB4LCBpbnQgeSwgZmxvYXQgdGhpY2tuZXNz
LCBJbnRTaXplIHJhZGl1cywKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyQXJjKEdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBpbnQgeCwgaW50IHksIGludCBzdHJva2VXaWR0
aCwgaW50IHN0cm9rZUhlaWdodCwgSW50U2l6ZSByYWRpdXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgYW5nbGVTdGFydCwgaW50IGFuZ2xlU3BhbiwgQm9yZGVyU2lkZSBz
LCBDb2xvciBjLCBjb25zdCBDb2xvciYgdGV4dENvbG9yLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRUJvcmRlclN0eWxlIHN0eWxlLCBib29sIGZpcnN0Q29ybmVyKQogewotICAg
IGlmICgoc3R5bGUgPT0gRE9VQkxFICYmIHRoaWNrbmVzcyAvIDIgPCAzKSB8fCAoKHN0eWxlID09
IFJJREdFIHx8IHN0eWxlID09IEdST09WRSkgJiYgdGhpY2tuZXNzIC8gMiA8IDIpKQorICAgIGlm
ICgoc3R5bGUgPT0gRE9VQkxFICYmIHN0cm9rZVdpZHRoIDw9IDIgJiYgc3Ryb2tlSGVpZ2h0IDw9
IDIpIHx8ICgoc3R5bGUgPT0gUklER0UgfHwgc3R5bGUgPT0gR1JPT1ZFKSAmJiBzdHJva2VXaWR0
aCA8IDQgJiYgc3Ryb2tlSGVpZ2h0IDwgNCkpCiAgICAgICAgIHN0eWxlID0gU09MSUQ7CiAKICAg
ICBpZiAoIWMuaXNWYWxpZCgpKSB7CkBAIC04NTIsMzEgKzg1MiwxNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6ZHJhd0JvcmRlckFyYyhHcmFwaGljCiAgICAgICAgIGNhc2UgREFTSEVEOgogICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoc3R5bGUgPT0gRE9UVEVEID8gRG90dGVkU3Ry
b2tlIDogRGFzaGVkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ry
b2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0
cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgp
ICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhl
aWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbiwgc3Ryb2tlV2lkdGgsIHN0cm9rZUhl
aWdodCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBET1VCTEU6IHsKLSAgICAg
ICAgICAgIGZsb2F0IHRoaXJkID0gdGhpY2tuZXNzIC8gMy4wZjsKLSAgICAgICAgICAgIGZsb2F0
IGlubmVyVGhpcmQgPSAodGhpY2tuZXNzICsgMS4wZikgLyA2LjBmOwotICAgICAgICAgICAgaW50
IHNoaWZ0Rm9ySW5uZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGlubmVyVGhpcmQgKiAyLjVmKTsKLQot
ICAgICAgICAgICAgaW50IG91dGVyWSA9IHk7Ci0gICAgICAgICAgICBpbnQgb3V0ZXJIZWlnaHQg
PSByYWRpdXMuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAgaW50IGlubmVyWCA9IHggKyBzaGlm
dEZvcklubmVyOwotICAgICAgICAgICAgaW50IGlubmVyWSA9IHkgKyBzaGlmdEZvcklubmVyOwot
ICAgICAgICAgICAgaW50IGlubmVyV2lkdGggPSAocmFkaXVzLndpZHRoKCkgLSBzaGlmdEZvcklu
bmVyKSAqIDI7Ci0gICAgICAgICAgICBpbnQgaW5uZXJIZWlnaHQgPSAocmFkaXVzLmhlaWdodCgp
IC0gc2hpZnRGb3JJbm5lcikgKiAyOwotICAgICAgICAgICAgaWYgKGlubmVyVGhpcmQgPiAxICYm
IChzID09IEJTVG9wIHx8IChmaXJzdENvcm5lciAmJiAocyA9PSBCU0xlZnQgfHwgcyA9PSBCU1Jp
Z2h0KSkpKSB7Ci0gICAgICAgICAgICAgICAgb3V0ZXJIZWlnaHQgKz0gMjsKLSAgICAgICAgICAg
ICAgICBpbm5lckhlaWdodCArPSAyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IHdp
ZHRoVGhpcmQgPSAoc3Ryb2tlV2lkdGggKyAxKSAvIDM7CisgICAgICAgICAgICBpbnQgaGVpZ2h0
VGhpcmQgPSAoc3Ryb2tlSGVpZ2h0ICsgMSkgLyAzOwogCiAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldFN0cm9rZVRoaWNrbmVzcyh0aGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnN0cm9rZUFyYyhJbnRSZWN0KHgsIG91dGVyWSwgcmFkaXVzLndpZHRoKCkgKiAyLCBvdXRlckhl
aWdodCksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyhpbm5lclRoaXJkID4gMiA/IGlubmVyVGhpcmQgLSAxIDog
aW5uZXJUaGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRS
ZWN0KGlubmVyWCwgaW5uZXJZLCBpbm5lcldpZHRoLCBpbm5lckhlaWdodCksIGFuZ2xlU3RhcnQs
IGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRS
ZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xl
U3RhcnQsIGFuZ2xlU3Bhbiwgd2lkdGhUaGlyZCwgaGVpZ2h0VGhpcmQpOworICAgICAgICAgICAg
aWYgKHJhZGl1cy53aWR0aCgpID4gc3Ryb2tlV2lkdGggLSB3aWR0aFRoaXJkICYmIHJhZGl1cy5o
ZWlnaHQoKSA+IHN0cm9rZUhlaWdodCAtIGhlaWdodFRoaXJkKQorICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCArIHN0cm9rZVdpZHRoIC0gd2lkdGhU
aGlyZCAsIHkgKyBzdHJva2VIZWlnaHQgLSBoZWlnaHRUaGlyZCwgKHJhZGl1cy53aWR0aCgpIC0g
c3Ryb2tlV2lkdGggKyB3aWR0aFRoaXJkKSAqIDIgLCAocmFkaXVzLmhlaWdodCgpIC0gc3Ryb2tl
SGVpZ2h0ICsgaGVpZ2h0VGhpcmQpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbiwgd2lkdGhU
aGlyZCwgaGVpZ2h0VGhpcmQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBHUk9PVkU6CkBAIC04OTIsMTUgKzg3OCwxMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6
ZHJhd0JvcmRlckFyYyhHcmFwaGljCiAKICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihjKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9r
ZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICog
MiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdo
dCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3BhbiwgKHN0cm9rZVdpZHRoICsgMSkgLyAyLCAo
c3Ryb2tlSGVpZ2h0ICsgMSkgLyAyKTsKIAotICAgICAgICAgICAgZmxvYXQgaGFsZlRoaWNrbmVz
cyA9ICh0aGlja25lc3MgKyAxLjBmKSAvIDQuMGY7Ci0gICAgICAgICAgICBpbnQgc2hpZnRGb3JJ
bm5lciA9IHN0YXRpY19jYXN0PGludD4oaGFsZlRoaWNrbmVzcyAqIDEuNWYpOwogICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjMik7Ci0gICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhoYWxmVGhpY2tuZXNzID4gMiA/IGhhbGZU
aGlja25lc3MgLSAxIDogaGFsZlRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZUFyYyhJbnRSZWN0KHggKyBzaGlmdEZvcklubmVyLCB5ICsgc2hpZnRGb3JJbm5l
ciwgKHJhZGl1cy53aWR0aCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHJhZGl1cy5oZWlnaHQoKSAtIHNoaWZ0Rm9ySW5uZXIp
ICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnN0cm9rZUFyYyhJbnRSZWN0KHggKyBzdHJva2VXaWR0aCAvIDIsIHkgKyBzdHJva2VIZWln
aHQgLyAyLCAocmFkaXVzLndpZHRoKCkgLSBzdHJva2VXaWR0aCAvIDIpICogMiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYWRpdXMuaGVpZ2h0KCkgLSBzdHJva2VI
ZWlnaHQgLyAyKSAqIDIpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4sIChzdHJva2VXaWR0aCArIDEp
IC8gMiwgKHN0cm9rZUhlaWdodCArIDEpIC8gMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIElOU0VUOgpAQCAtOTEyLDggKzg5NCw3IEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpkcmF3Qm9yZGVyQXJjKEdyYXBoaWMKICAgICAgICAgY2FzZSBTT0xJRDoKICAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwogICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjKTsKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0
aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Cisg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1
cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bh
biwgc3Ryb2tlV2lkdGgsIHN0cm9rZUhlaWdodCk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiB9CkBAIC05NjksMTIgKzk1MCw5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm9yZGVyKEdy
YXBoaWNzQ28KICAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1Jl
Y3QoSW50UmVjdCh4MSwgeTIgLSB0aGlyZCwgeDIgLSB4MSwgdGhpcmQpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEJTTGVmdDoKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1JlY3QoSW50UmVjdCh4
MSwgeTEgKyAxLCB0aGlyZCwgeTIgLSB5MSAtIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd1JlY3QoSW50UmVjdCh4MiAtIHRoaXJkLCB5MSArIDEsIHRo
aXJkLCB5MiAtIHkxIC0gMSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQlNSaWdodDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+ZHJhd1JlY3QoSW50UmVjdCh4MSwgeTEgKyAxLCB0aGlyZCwgeTIgLSB5
MSAtIDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1Jl
Y3QoSW50UmVjdCh4MiAtIHRoaXJkLCB5MSArIDEsIHRoaXJkLCB5MiAtIHkxIC0gMSkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5kcmF3UmVjdChJbnRSZWN0KHgx
LCB5MSwgdGhpcmQsIHkyIC0geTEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+ZHJhd1JlY3QoSW50UmVjdCh4MiAtIHRoaXJkLCB5MSwgdGhpcmQsIHkyIC0geTEp
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0gZWxzZSB7CkBAIC0xMjY5LDE0ICsxMjQ3LDcgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aCkgPj0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvcFJpZ2h0LmhlaWdodCgpKSArIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihib3R0b21SaWdodC5oZWlnaHQoKSkpCiAgICAgICAgIHJlbmRlclJhZGlp
ID0gdHJ1ZTsKIAotICAgIC8vIENsaXAgdG8gdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLgotICAgIGlm
IChyZW5kZXJSYWRpaSkgewotICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoSW50UmVjdCh0eCwgdHksIHcs
IGgpLCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwotICAgIH0K
LQogICAgIGludCBmaXJzdEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVT
cGFuLCBzZWNvbmRBbmdsZVNwYW47Ci0gICAgZmxvYXQgdGhpY2tuZXNzOwogICAgIGJvb2wgdXBw
ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggPSByZW5kZXJMZWZ0ICYmICh0cyA9PSBscykgJiYgKHRj
ID09IGxjKTsKICAgICBib29sIHVwcGVyUmlnaHRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlclJp
Z2h0ICYmICh0cyA9PSBycykgJiYgKHRjID09IHJjKSAmJiAodHMgIT0gT1VUU0VUKSAmJiAodHMg
IT0gUklER0UpICYmICh0cyAhPSBJTlNFVCkgJiYgKHRzICE9IEdST09WRSk7CiAgICAgYm9vbCBs
b3dlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlckxlZnQgJiYgKGJzID09IGxzKSAmJiAo
YmMgPT0gbGMpICYmIChicyAhPSBPVVRTRVQpICYmIChicyAhPSBSSURHRSkgJiYgKGJzICE9IElO
U0VUKSAmJiAoYnMgIT0gR1JPT1ZFKTsKQEAgLTEzMDQsNDMgKzEyNzUsMTggQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQwogICAgICAgICBpZiAocmVuZGVyUmFkaWkp
IHsKICAgICAgICAgICAgIGludCBsZWZ0WSA9IHR5OwogCi0gICAgICAgICAgICAvLyBXZSBtYWtl
IHRoZSBhcmMgZG91YmxlIHRoaWNrIGFuZCBsZXQgdGhlIGNsaXAgcmVjdCB0YWtlIGNhcmUgb2Yg
Y2xpcHBpbmcgdGhlIGV4dHJhIG9mZi4KLSAgICAgICAgICAgIC8vIFdlJ3JlIGRvaW5nIHRoaXMg
YmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0gcG9zc2libGUgdG8gbWF0Y2ggdGhlIGN1cnZlIG9mIHRo
ZSBjbGlwIGV4YWN0bHkKLSAgICAgICAgICAgIC8vIHdpdGggdGhlIGFyYy1kcmF3aW5nIGZ1bmN0
aW9uLgotICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgKiAy
OwotCiAgICAgICAgICAgICBpZiAodG9wTGVmdC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAg
aW50IGxlZnRYID0gdHg7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGlubmVyIGNsaXAgY2xpcHMg
aW5zaWRlIHRoZSBhcmMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIDFweCBib3Jk
ZXJzLgotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5uZXJDbGlwID0gKHN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSA8IHRvcExlZnQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAg
JiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9wTGVmdC5oZWlnaHQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgJiYgKHRzICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA+
IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApIHsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChsZWZ0WCwg
bGVmdFksIHRvcExlZnQud2lkdGgoKSAqIDIsIHRvcExlZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAg
ICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gOTA7CiAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVNw
YW4gPSB1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA/IDkwIDogNDU7CiAKICAgICAgICAgICAg
ICAgICAvLyBEcmF3IHVwcGVyIGxlZnQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0JvcmRlckFy
YyhncmFwaGljc0NvbnRleHQsIGxlZnRYLCBsZWZ0WSwgdGhpY2tuZXNzLCB0b3BMZWZ0LCBmaXJz
dEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAorICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJB
cmMoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0WCwgbGVmdFksIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHRvcExlZnQsIGZpcnN0QW5nbGVTdGFydCwgZmly
c3RBbmdsZVNwYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1RvcCwgdGMsIHN0
eWxlLT5jb2xvcigpLCB0cywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElu
bmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh0b3BSaWdodC53aWR0aCgpKSB7CiAg
ICAgICAgICAgICAgICAgaW50IHJpZ2h0WCA9IHR4ICsgdyAtIHRvcFJpZ2h0LndpZHRoKCkgKiAy
OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlSaWdodElubmVyQ2xpcCA9IChzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpIDwgdG9wUmlnaHQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAg
JiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9wUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAg
ICAgICAgICAgICAgICYmICh0cyAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkg
PiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xpcCkgewotICAgICAg
ICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHJpZ2h0
WCwgbGVmdFksIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAqIDIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgICAgICBpZiAodXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAwOwpAQCAtMTM1MSwxMCArMTI5Nyw4IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0MKICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICAvLyBEcmF3IHVwcGVyIHJpZ2h0IGFyYwotICAgICAgICAgICAg
ICAgIGRyYXdCb3JkZXJBcmMoZ3JhcGhpY3NDb250ZXh0LCByaWdodFgsIGxlZnRZLCB0aGlja25l
c3MsIHRvcFJpZ2h0LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCisgICAgICAg
ICAgICAgICAgZHJhd0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHJpZ2h0WCwgbGVmdFksIHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCB0b3BSaWdo
dCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQlNUb3AsIHRjLCBzdHlsZS0+Y29sb3IoKSwgdHMsIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICB9CkBAIC0xMzc5LDE5ICsxMzIzLDkgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Qm9yZGVy
KEdyYXBoaWNzQwogICAgICAgICAgICAgICAgICAgIGlnbm9yZV9sZWZ0ID8gMCA6IHN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSwgaWdub3JlX3JpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCkpOwogCiAgICAgICAgIGlmIChyZW5kZXJSYWRpaSkgewotICAgICAgICAgICAgdGhpY2tu
ZXNzID0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgKiAyOwotCiAgICAgICAgICAgICBpZiAo
Ym90dG9tTGVmdC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgaW50IGxlZnRYID0gdHg7CiAg
ICAgICAgICAgICAgICAgaW50IGxlZnRZID0gdHkgKyBoIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAq
IDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUxlZnRJbm5lckNsaXAgPSAoc3R5bGUtPmJv
cmRlckxlZnRXaWR0aCgpIDwgYm90dG9tTGVmdC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAg
ICAmJiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21MZWZ0LmhlaWdodCgpKQot
ICAgICAgICAgICAgICAgICAgICAmJiAoYnMgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJCb3R0
b21XaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkg
ewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRS
ZWN0KGxlZnRYLCBsZWZ0WSwgYm90dG9tTGVmdC53aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWln
aHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLSAgICAgICAgICAg
ICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAobG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2gp
IHsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gMTgwOwpAQCAtMTQwMiwz
MiArMTMzNiwyMCBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRCb3JkZXIoR3JhcGhpY3NDCiAg
ICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgLy8gRHJhdyBsb3dlciBsZWZ0IGFy
YwotICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJBcmMoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0WCwg
bGVmdFksIHRoaWNrbmVzcywgYm90dG9tTGVmdCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xl
U3BhbiwKKyAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4dCwgbGVm
dFgsIGxlZnRZLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21X
aWR0aCgpLCBib3R0b21MZWZ0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIGJjLCBzdHlsZS0+Y29sb3IoKSwg
YnMsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApCi0gICAg
ICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoYm90dG9tUmlnaHQud2lkdGgoKSkgewogICAgICAgICAgICAg
ICAgIGludCByaWdodFkgPSB0eSArIGggLSBib3R0b21SaWdodC5oZWlnaHQoKSAqIDI7CiAgICAg
ICAgICAgICAgICAgaW50IHJpZ2h0WCA9IHR4ICsgdyAtIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAy
OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlSaWdodElubmVyQ2xpcCA9IChzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpIDwgYm90dG9tUmlnaHQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIDwgYm90dG9tUmlnaHQuaGVpZ2h0KCkp
Ci0gICAgICAgICAgICAgICAgICAgICYmIChicyAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xp
cCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAg
ICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJ
bnRSZWN0KHJpZ2h0WCwgcmlnaHRZLCBib3R0b21SaWdodC53aWR0aCgpICogMiwgYm90dG9tUmln
aHQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAg
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTdGFydCA9IDI3MDsK
ICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSBsb3dlclJpZ2h0Qm9yZGVyU3R5bGVz
TWF0Y2ggPyA5MCA6IDQ1OwogCiAgICAgICAgICAgICAgICAgLy8gRHJhdyBsb3dlciByaWdodCBh
cmMKLSAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4dCwgcmlnaHRY
LCByaWdodFksIHRoaWNrbmVzcywgYm90dG9tUmlnaHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29u
ZEFuZ2xlU3BhbiwKKyAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4
dCwgcmlnaHRYLCByaWdodFksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpLCBib3R0b21SaWdodCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5n
bGVTcGFuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIGJjLCBzdHls
ZS0+Y29sb3IoKSwgYnMsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElu
bmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNDUzLDQ4ICsxMzc1LDI2IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEJvcmRlcihHcmFwaGljc0MKIAogICAgICAgICBpZiAo
cmVuZGVyUmFkaWkgJiYgKCF1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCB8fCAhbG93ZXJMZWZ0
Qm9yZGVyU3R5bGVzTWF0Y2gpKSB7CiAgICAgICAgICAgICBpbnQgdG9wWCA9IHR4OwotICAgICAg
ICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpICogMjsKLQogICAgICAg
ICAgICAgaWYgKCF1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCAmJiB0b3BMZWZ0LndpZHRoKCkp
IHsKICAgICAgICAgICAgICAgICBpbnQgdG9wWSA9IHR5OwotICAgICAgICAgICAgICAgIGJvb2wg
YXBwbHlUb3BJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53
aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkg
PCB0b3BMZWZ0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAobHMgIT0gRE9VQkxF
IHx8IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChh
cHBseVRvcElubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJv
dW5kZWRSZWN0Q2xpcChJbnRSZWN0KHRvcFgsIHRvcFksIHRvcExlZnQud2lkdGgoKSAqIDIsIHRv
cExlZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAg
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDEzNTsK
ICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IDQ1OwogCiAgICAgICAgICAgICAgICAg
Ly8gRHJhdyB0b3AgbGVmdCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3Qm9yZGVyQXJjKGdyYXBo
aWNzQ29udGV4dCwgdG9wWCwgdG9wWSwgdGhpY2tuZXNzLCB0b3BMZWZ0LCBmaXJzdEFuZ2xlU3Rh
cnQsIGZpcnN0QW5nbGVTcGFuLAorICAgICAgICAgICAgICAgIGRyYXdCb3JkZXJBcmMoZ3JhcGhp
Y3NDb250ZXh0LCB0b3BYLCB0b3BZLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpLCB0b3BMZWZ0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFu
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNMZWZ0LCBsYywgc3R5bGUtPmNvbG9y
KCksIGxzLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlUb3BJbm5lckNsaXApCi0g
ICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICBpZiAoIWxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNoICYmIGJv
dHRvbUxlZnQud2lkdGgoKSkgewogICAgICAgICAgICAgICAgIGludCBib3R0b21ZID0gdHkgKyBo
IC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUJv
dHRvbUlubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgPCBib3R0b21MZWZ0Lndp
ZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSA8IGJvdHRvbUxlZnQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChscyAhPSBE
T1VCTEUgfHwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAg
aWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgYm90dG9tWSwgYm90dG9tTGVmdC53
aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgc2Vjb25k
QW5nbGVTdGFydCA9IDE4MDsKICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSA0NTsK
IAogICAgICAgICAgICAgICAgIC8vIERyYXcgYm90dG9tIGxlZnQgYXJjCi0gICAgICAgICAgICAg
ICAgZHJhd0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHRvcFgsIGJvdHRvbVksIHRoaWNrbmVz
cywgYm90dG9tTGVmdCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAorICAgICAg
ICAgICAgICAgIGRyYXdCb3JkZXJBcmMoZ3JhcGhpY3NDb250ZXh0LCB0b3BYLCBib3R0b21ZLCBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBib3R0
b21MZWZ0LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBCU0xlZnQsIGxjLCBzdHlsZS0+Y29sb3IoKSwgbHMsIGZhbHNlKTsK
LSAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCi0gICAgICAgICAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQpAQCAtMTUyMSw1NiArMTQyMSwzMSBAQCB2b2lkIFJlbmRlck9iamVjdDo6cGFp
bnRCb3JkZXIoR3JhcGhpY3NDCiAgICAgICAgICAgICAgICAgICAgaWdub3JlX3RvcCA/IDAgOiBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgaWdub3JlX2JvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVy
Qm90dG9tV2lkdGgoKSk7CiAKICAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmICghdXBwZXJSaWdo
dEJvcmRlclN0eWxlc01hdGNoIHx8ICFsb3dlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2gpKSB7Ci0g
ICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpICogMjsKLQog
ICAgICAgICAgICAgaWYgKCF1cHBlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgdG9wUmlnaHQu
d2lkdGgoKSkgewogICAgICAgICAgICAgICAgIGludCB0b3BYID0gdHggKyB3IC0gdG9wUmlnaHQu
d2lkdGgoKSAqIDI7CiAgICAgICAgICAgICAgICAgaW50IHRvcFkgPSB0eTsKLSAgICAgICAgICAg
ICAgICBib29sIGFwcGx5VG9wSW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkg
PCB0b3BSaWdodC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRl
clRvcFdpZHRoKCkgPCB0b3BSaWdodC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYg
KHJzICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpID4gNik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgdG9wWSwgdG9wUmlnaHQu
d2lkdGgoKSAqIDIsIHRvcFJpZ2h0LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgZmlyc3RB
bmdsZVN0YXJ0ID0gMDsKICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IDQ1OwogCiAg
ICAgICAgICAgICAgICAgLy8gRHJhdyB0b3AgcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAgZHJh
d0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHRvcFgsIHRvcFksIHRoaWNrbmVzcywgdG9wUmln
aHQsIGZpcnN0QW5nbGVTdGFydCwgZmlyc3RBbmdsZVNwYW4sCisgICAgICAgICAgICAgICAgZHJh
d0JvcmRlckFyYyhncmFwaGljc0NvbnRleHQsIHRvcFgsIHRvcFksIHN0eWxlLT5ib3JkZXJSaWdo
dFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCB0b3BSaWdodCwgZmlyc3RBbmdsZVN0
YXJ0LCBmaXJzdEFuZ2xlU3BhbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmln
aHQsIHJjLCBzdHlsZS0+Y29sb3IoKSwgcnMsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChh
cHBseVRvcElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZXN0b3JlKCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICghbG93ZXJSaWdodEJv
cmRlclN0eWxlc01hdGNoICYmIGJvdHRvbVJpZ2h0LndpZHRoKCkpIHsKICAgICAgICAgICAgICAg
ICBpbnQgYm90dG9tWCA9IHR4ICsgdyAtIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyOwogICAgICAg
ICAgICAgICAgIGludCBib3R0b21ZID0gdHkgKyBoIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAy
OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKSA8IGJvdHRvbVJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAg
ICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvdHRvbVJpZ2h0LmhlaWdodCgp
KQotICAgICAgICAgICAgICAgICAgICAmJiAocnMgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJS
aWdodFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNs
aXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAo
SW50UmVjdChib3R0b21YLCBib3R0b21ZLCBib3R0b21SaWdodC53aWR0aCgpICogMiwgYm90dG9t
UmlnaHQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0YXJ0ID0gMzE1
OwogICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3BhbiA9IDQ1OwogCiAgICAgICAgICAgICAg
ICAgLy8gRHJhdyBib3R0b20gcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0JvcmRlckFy
YyhncmFwaGljc0NvbnRleHQsIGJvdHRvbVgsIGJvdHRvbVksIHRoaWNrbmVzcywgYm90dG9tUmln
aHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKKyAgICAgICAgICAgICAgICBk
cmF3Qm9yZGVyQXJjKGdyYXBoaWNzQ29udGV4dCwgYm90dG9tWCwgYm90dG9tWSwgc3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIGJvdHRvbVJpZ2h0
LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBCU1JpZ2h0LCByYywgc3R5bGUtPmNvbG9yKCksIHJzLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0KLQotICAgIGlmIChyZW5kZXJSYWRpaSkKLSAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZXN0b3JlKCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEJveFNoYWRvdyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIGNvbnN0IFJl
bmRlclN0eWxlKiBzLCBib29sIGJlZ2luLCBib29sIGVuZCkKSW5kZXg6IFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5oCShyZXZpc2lvbiAyMTYzOCkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NzIsNyArNjcyLDcgQEAgcHVibGljOgogICAgICAg
ICBCU1JpZ2h0CiAgICAgfTsKIAotICAgIHZvaWQgZHJhd0JvcmRlckFyYyhHcmFwaGljc0NvbnRl
eHQqLCBpbnQgeCwgaW50IHksIGZsb2F0IHRoaWNrbmVzcywgSW50U2l6ZSByYWRpdXMsIGludCBh
bmdsZVN0YXJ0LAorICAgIHZvaWQgZHJhd0JvcmRlckFyYyhHcmFwaGljc0NvbnRleHQqLCBpbnQg
eCwgaW50IHksIGludCBzdGFydFRoaWNrbmVzcywgaW50IGVuZFRoaWNrbmVzcywgSW50U2l6ZSBy
YWRpdXMsIGludCBhbmdsZVN0YXJ0LAogICAgICAgICAgICAgICAgICAgICAgICBpbnQgYW5nbGVT
cGFuLCBCb3JkZXJTaWRlLCBDb2xvciwgY29uc3QgQ29sb3ImIHRleHRjb2xvciwgRUJvcmRlclN0
eWxlLCBib29sIGZpcnN0Q29ybmVyKTsKICAgICB2b2lkIGRyYXdCb3JkZXIoR3JhcGhpY3NDb250
ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBCb3JkZXJTaWRlLAogICAgICAg
ICAgICAgICAgICAgICBDb2xvciwgY29uc3QgQ29sb3ImIHRleHRjb2xvciwgRUJvcmRlclN0eWxl
LCBpbnQgYWRqYncxLCBpbnQgYWRqYncyKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>14652</attachid>
            <date>2007-05-22 03:29:28 -0700</date>
            <delta_ts>2007-05-22 03:29:28 -0700</delta_ts>
            <desc>Non-uniform stroke thickness example (after and before)</desc>
            <filename>double, non-uniform, elliptic.png</filename>
            <type>image/png</type>
            <size>16929</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">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
Hoe5QMZYulS9eqm01Nw6fboOOWTn69mzNWiQeX3IBg301Vfab7+ER5HBa4ds2aKWLWP/t9iuBd93
ny67LEUDA5Bi990Xdb5M9lKQk6ONG9WsmV/f7Me5wMsuM0dASeefHzWXveOxjzFjiIBAJunSRZde
am2t+mMfMEB/+pO5W1mZayfZ7fzzrREwxsknEwGBbHb55dY1MmLKQmWla4qV+NX6XOAHH2j4cHNT
y5b6/nu1arXz7fvvG+6A2aFZM/3wg3VlAgDpadMm7bOPNm82t779dmR2gw0btO++1tlh3n/fWkZq
kqnnAufPV+/esRuNR/977625c3089AeQjrZsUb9++vHHyBbb6UBJ8+fX5hJKVbU7FxgORxYMqO66
6yIRUNJtt1l7XnUVERDIPC1a6KqrrK1Vf/KtWrmWDPnLX3y/5TmthcM65RTDxh2qVvxQSE89RQQE
sl+zZnrqqdif/w7Vy+PJJ/tVM2uXAidM0Ny55qa99tJFF0XefvKJdXaYZs00ZkythgGgrowZo+bN
zU2ffaaPPoq8vegidepk7vnVV5owwfehpa9339WiRVFbbAV9zBgdemgKRgSg7h16qDUOxZSIRYv0
7ru+fGctUmBFhev5vltuUcOGkbd33WXtefHF1sekAaS5Jk108cXW1jvvjLxu2NA1a8zYsaqo8HNg
aWvHtPk2Vc8EdO6s229PwYgApIu//12dO0feOp4XHjXK/MhdnGqRAl98UYsXm5t69NBZZ0XeLl5s
XTY0Ly+494YD2WHMGOvU0O+/r++/j7w96yz16GHuuXixXnzR/7GloYkTY++PtN3988AD1v+xALJS
fr4eeCBqi+268MaNmjix9l+YaAqsrHTd53fddVELyT/4oPV6x5lnMk00kNl2311nnmluCof14IOR
tzk5rrsDb7vNl0PbdFZeUu71+b7jjmOlYCCIvP/2zz8/smJnohJMgd+99cOURid80+2Uta17VYbq
RbV17aozzoi8LSzUU09Zd8QdgUAWcCwK/PTTKiyMvD3jDHXtau65YIFeesnngaWZiVfMCBUVhlTl
qNh4IrBBA917b0pHBiB93HuvGjSIvLWdDiwq0qRJtfyqBFPgH27tetSc2/sufqnd+nm5obL2u5cf
sG/R0QN+OWfIkgU3T46aBXvSJOtiIUOHqm/fxAYAII307auhQ81N27ZFXbaoV09//at1P/fc4/PA
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
AABAEJECAQAAgogUCAAAEESkQAAAgCAiBX7Oi4gAACAASURBVAIAAAQRKRAAACCISIEAAABBRAoE
AAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIg
AABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJEC
AQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogU
CAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESk
QAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAi
BQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQR
KRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCI
SIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABB
RAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAI
IlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABA
EJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAA
gogUCAAAEESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAA
EESkQAAAgCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAA
gCAiBQIAAAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIA
AAQRKRAAACCISIEAAABBRAoEAAAIIlIgAABAEJECAQAAgogUCAAAEESkQAAAgCAiBQIAAAQRKRAA
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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>21853</attachid>
            <date>2008-06-20 00:47:38 -0700</date>
            <delta_ts>2008-06-20 00:47:38 -0700</delta_ts>
            <desc>An interactive test case</desc>
            <filename>border-radius.html</filename>
            <type>text/html</type>
            <size>1613</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PHN0eWxlPgogICAgZGl2I3QgewogICAgICAgIHdpZHRoOiA0MDBweDsKICAgICAgICBoZWlnaHQ6
IDQwMHB4OwogICAgICAgIGJvcmRlcjogMTBweCBzb2xpZCByZ2JhKDI1NSwwLDAsMSk7CiAgICAg
ICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0MHB4OwogICAgICAgIGJvcmRlci1sZWZ0LWNvbG9y
OiByZ2JhKDAsMCwyNTUsMSk7CiAgICAgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94
OwogICAgICAgIG1hcmdpbjogMjBweDsKICAgIH0KPC9zdHlsZT4KPGRpdiBpZD0idCI+PC9kaXY+
CjxkaXY+CiAgICA8aW5wdXQgaWQ9IndpZHRoU2xpZGVyIiB0eXBlPSJyYW5nZSIgbWluPSIwIiBt
YXg9IjEwMCIgdmFsdWU9IjEwIiBvbmlucHV0PSJ1cGRhdGUoKSI+CjwvZGl2Pgo8ZGl2IGlkPSJx
Ij4KICAgIDxpbnB1dCBpZD0icmFkaXVzU2xpZGVyIiB0eXBlPSJyYW5nZSIgbWluPSIwIiBtYXg9
IjEwMCIgdmFsdWU9IjQwIiBvbmlucHV0PSJ1cGRhdGUoKSI+CjwvZGl2Pgo8ZGl2PgogICAgPGlu
cHV0IGlkPSJ3aWR0aFNjYWxlIiBwcmVjaXNpb249ImZsb2F0IiB0eXBlPSJyYW5nZSIgbWluPSIw
IiBtYXg9IjIiIHZhbHVlPSIxIiBvbmlucHV0PSJ1cGRhdGUoKSI+CjwvZGl2Pgo8ZGl2IGlkPSJw
Ij4KICAgIDxpbnB1dCBpZD0icmFkaXVzU2NhbGUiIHByZWNpc2lvbj0iZmxvYXQiIHR5cGU9InJh
bmdlIiBtaW49IjAiIG1heD0iMiIgdmFsdWU9IjEiIG9uaW5wdXQ9InVwZGF0ZSgpIj4KPC9kaXY+
Cgo8aW5wdXQgdHlwZT0iYnV0dG9uIiB2YWx1ZT0iU29saWQiIG9uY2xpY2s9InQuc3R5bGUuYm9y
ZGVyU3R5bGU9J3NvbGlkJyI+CjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJEb3VibGUiIG9u
Y2xpY2s9InQuc3R5bGUuYm9yZGVyU3R5bGU9J2RvdWJsZSciPgo8aW5wdXQgdHlwZT0iYnV0dG9u
IiB2YWx1ZT0iRG90dGVkIiBvbmNsaWNrPSJ0LnN0eWxlLmJvcmRlclN0eWxlPSdkb3R0ZWQnIj4K
PGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9IkRhc2hlZCIgb25jbGljaz0idC5zdHlsZS5ib3Jk
ZXJTdHlsZT0nZGFzaGVkJyI+CjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJSaWRnZSIgb25j
bGljaz0idC5zdHlsZS5ib3JkZXJTdHlsZT0ncmlkZ2UnIj4KPGlucHV0IHR5cGU9ImJ1dHRvbiIg
dmFsdWU9Ikdyb292ZSIgb25jbGljaz0idC5zdHlsZS5ib3JkZXJTdHlsZT0nZ3Jvb3ZlJyI+Cjxp
bnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJJbnNldCIgb25jbGljaz0idC5zdHlsZS5ib3JkZXJT
dHlsZT0naW5zZXQnIj4KPGlucHV0IHR5cGU9ImJ1dHRvbiIgdmFsdWU9Ik91dHNldCIgb25jbGlj
az0idC5zdHlsZS5ib3JkZXJTdHlsZT0nb3V0c2V0JyI+Cgo8c2NyaXB0PgogICAgZnVuY3Rpb24g
dXBkYXRlKCkKICAgIHsKICAgICAgICB0LnN0eWxlLmJvcmRlcldpZHRoID0gd2lkdGhTbGlkZXIu
dmFsdWUgKyAncHggJyArIHdpZHRoU2NhbGUudmFsdWUgKiB3aWR0aFNsaWRlci52YWx1ZSArICdw
eCcKICAgICAgICB0LnN0eWxlLndlYmtpdEJvcmRlclJhZGl1cyA9IHJhZGl1c1NjYWxlLnZhbHVl
ICogcmFkaXVzU2xpZGVyLnZhbHVlICsgJ3B4ICcgKyByYWRpdXNTbGlkZXIudmFsdWUgKyAncHgn
CiAgICB9Cjwvc2NyaXB0Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30423</attachid>
            <date>2009-05-17 11:20:25 -0700</date>
            <delta_ts>2009-05-17 11:20:25 -0700</delta_ts>
            <desc>Image explaining the strategy for radius drawing</desc>
            <filename>Radius drawing.png</filename>
            <type>image/png</type>
            <size>50211</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">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
s6MmBCAAgbQlMHDgwLTtOx2HAARiQoBx0JhgxAkEIAABCCSIAOOgCQJNMxCIMwHGQeMMGPcQgAAE
8gjofmpIQAACaUJAFzLddttt8e6sDlfSUaA7duzQmVAtWrSYNGlSvFuMrX80aGx54g0CEIBAYAK5
ubmBC8iFAATiSUB3XeoTzxYC+NZ1o5MnTw5QENOsPXv2rF27VkpUh33OyvvE1H3cnRWJews0AAEI
QAACEIAABJJHQCOFCW5cN8InstHChQvv3btXp+4nuJtRNsc4aJQAqQ4BCEAAAgklkJmZmdD2aCz+
BDRqqM+KFSs0YKn1vprI1uTyI488orQuENIAnzMElSpfn/vuu0+3ItkiDQp27txZ9nIyZswYky+b
r776as2aNZoZ12ChNVZiyZIl+i2plslUQo+6kcgUqXXVatmypRzq2+Q7q5u0LjqSZ9noo9bzMxs5
cqSxUWzqpqmrhKmib3VHBgrJNqFStat8RbJhwwZ9+8RvLU3igQce0F3wSgd3G5CSj6vEPapLfCAA
AQhAIN4E7A3O8W4I/xDwHAHdwG50j/5n4hRA9tFe+G4uT1e+vWzd3Cy/efNmU1H5xsbcge68bP23
335zkhkyZIiqLF++3GSas8b0rUdTpFI1dP311xvPP/30k7O60mraFOmKdhuPufZdPVJdY28ujlck
9qr68ePHO1uRE0vAtGLvc7duZeMTvzxoIl75WudjtPigQYOCuw1IyQSZlG/GQc3vh28IQAACEAiD
wIABA8KwxhQCIRAYPXq0JKA0nLGV7tSjPnocNWqUvjWaqFvRjdn06dM//vhjZf7973/Xd506dfQt
Aad8DUZK9s2YMWPjxo1KWznoc5O77klXFTt/XbRoUT2ajymS/lPrato0dNNNN/1R/vt/N23apJT0
4oQJE9SuEY4K22mmUckPP/xQQlaRDBs2zPTuiiuukI1pReFp0PfLL7+UMFXmuHHj9K0NRvreuXOn
3Fogysnv47wIPojbgJQ0yJqf23jno0HjTRj/EIAABFKQQE5OTgr2ii4llUDHjh3VfsmSJfUtZVa1
alUlqlevboN69NFHldYRE5pQ1qd58+Z6fO+996ThpE1VpUyZMsrfv39/v379VGSUq60ebkLa0VS5
6KKLNKj59ddf+3hQbJKJTZs21Yy8Ju7feOMNGVhRa4yNpnz++efNY6lSpUzaztqPHTvWKMh27drJ
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
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32006</attachid>
            <date>2009-06-29 05:06:10 -0700</date>
            <delta_ts>2010-06-22 10:41:20 -0700</delta_ts>
            <desc>Re-written border code using clipping patches</desc>
            <filename>BorderFix.diff</filename>
            <type>text/plain</type>
            <size>47845</size>
            <attacher name="Alex Taylor">darwin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gNDQ5ODUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMzQsNyArMjM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3Qg
SW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUm
IGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgdm9pZCBj
bGlwUGF0aChXaW5kUnVsZSk7CiAgICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKTsKLQorICAgICAgICB2b2lkIGNsaXBDb252
ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNob3Vs
ZEFudGlhbGlhcyA9IGZhbHNlKTsKKyAgICAgICAgCiAgICAgICAgIGludCB0ZXh0RHJhd2luZ01v
ZGUoKTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50KTsKIApJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJ
KHJldmlzaW9uIDQ0OTg1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4OCw2ICszODgsMzEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgICAgICBDR0NvbnRleHRTZXRT
aG91bGRBbnRpYWxpYXMoY29udGV4dCwgc2hvdWxkQW50aWFsaWFzKCkpOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnBvaW50cyA8PSAxKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygpKQorICAgICAg
ICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFsaWFzZWQpOworICAg
IAorICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRNb3ZlVG9Q
b2ludChjb250ZXh0LCBwb2ludHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMTsgaSA8IG5wb2ludHM7IGkrKykKKyAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRv
UG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7CisgICAgQ0dDb250
ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOworCisgICAgY2xpcFBhdGgoUlVMRV9OT05aRVJPKTsKKyAg
ICAKKyAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkpCisgICAgICAgIENH
Q29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzaG91bGRBbnRpYWxpYXMoKSk7Cit9
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewogICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDQ0OTg1KQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw4IEBACiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiUGF0aC5o
IgorI2luY2x1ZGUgIkRhc2hBcnJheS5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC03
NzcsNiArNzc5LDkgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoRwog
ICAgIGlmIChwYWludE5pbmVQaWVjZUltYWdlKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5LCB3LCBo
LCBzdHlsZSwgc3R5bGUtPmJvcmRlckltYWdlKCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBp
ZiAoZ3JhcGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKICAgICBjb25zdCBDb2xvciYgdG9wQ29sb3IgPSBzdHlsZS0+Ym9yZGVyVG9wQ29sb3Io
KTsKICAgICBjb25zdCBDb2xvciYgYm90dG9tQ29sb3IgPSBzdHlsZS0+Ym9yZGVyQm90dG9tQ29s
b3IoKTsKICAgICBjb25zdCBDb2xvciYgbGVmdENvbG9yID0gc3R5bGUtPmJvcmRlckxlZnRDb2xv
cigpOwpAQCAtNzk4LDE0ICs4MDMsMzcgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3JkZXIoRwogICAgIGJvb2wgcmVuZGVyQm90dG9tID0gYm90dG9tU3R5bGUgPiBCSElEREVO
ICYmICFib3R0b21UcmFuc3BhcmVudDsKIAogICAgIGJvb2wgcmVuZGVyUmFkaWkgPSBmYWxzZTsK
KyAgICBQYXRoIHJvdW5kZWRQYXRoOwogICAgIEludFNpemUgdG9wTGVmdCwgdG9wUmlnaHQsIGJv
dHRvbUxlZnQsIGJvdHRvbVJpZ2h0OworICAgIEludFJlY3QgYm9yZGVyUmVjdCA9IEludFJlY3Qo
dHgsIHR5LCB3LCBoKTsKIAogICAgIGlmIChzdHlsZS0+aGFzQm9yZGVyUmFkaXVzKCkpIHsKLSAg
ICAgICAgSW50UmVjdCBib3JkZXJSZWN0ID0gSW50UmVjdCh0eCwgdHksIHcsIGgpOworICAgICAg
ICBJbnRSZWN0IGlubmVyQm9yZGVyUmVjdCA9IEludFJlY3QoCisgICAgICAgICAgICB0eCArIHN0
eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgCisgICAgICAgICAgICB0eSArIHN0eWxlLT5ib3JkZXJU
b3BXaWR0aCgpLCAKKyAgICAgICAgICAgIHcgLSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLSBz
dHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCAKKyAgICAgICAgICAgIGggLSBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKIAogICAgICAgICBJbnRT
aXplIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0
b21SaWdodFJhZGl1czsKICAgICAgICAgc3R5bGUtPmdldEJvcmRlclJhZGlpRm9yUmVjdChib3Jk
ZXJSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywg
Ym90dG9tUmlnaHRSYWRpdXMpOwogCisgICAgICAgIEludFNpemUgdG9wTGVmdElubmVyUmFkaXVz
LCB0b3BSaWdodElubmVyUmFkaXVzLCBib3R0b21MZWZ0SW5uZXJSYWRpdXMsIGJvdHRvbVJpZ2h0
SW5uZXJSYWRpdXM7CisgICAgICAgIHN0eWxlLT5nZXRCb3JkZXJSYWRpaUZvclJlY3QoaW5uZXJC
b3JkZXJSZWN0LCB0b3BMZWZ0SW5uZXJSYWRpdXMsIHRvcFJpZ2h0SW5uZXJSYWRpdXMsIGJvdHRv
bUxlZnRJbm5lclJhZGl1cywgYm90dG9tUmlnaHRJbm5lclJhZGl1cyk7CisKKyAgICAgICAgLy8g
Q29ycmVjdCB0aGUgaW5uZXIgcmFkaWkKKyAgICAgICAgdG9wTGVmdElubmVyUmFkaXVzLnNldFdp
ZHRoKG1heCgwLCB0b3BMZWZ0SW5uZXJSYWRpdXMud2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKSkpOworICAgICAgICB0b3BMZWZ0SW5uZXJSYWRpdXMuc2V0SGVpZ2h0KG1heCgwLCB0
b3BMZWZ0SW5uZXJSYWRpdXMuaGVpZ2h0KCkgLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSkpOwor
CisgICAgICAgIHRvcFJpZ2h0SW5uZXJSYWRpdXMuc2V0V2lkdGgobWF4KDAsIHRvcFJpZ2h0SW5u
ZXJSYWRpdXMud2lkdGgoKSAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpKTsKKyAgICAgICAg
dG9wUmlnaHRJbm5lclJhZGl1cy5zZXRIZWlnaHQobWF4KDAsIHRvcFJpZ2h0SW5uZXJSYWRpdXMu
aGVpZ2h0KCkgLSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSkpOworCisgICAgICAgIGJvdHRvbUxl
ZnRJbm5lclJhZGl1cy5zZXRXaWR0aChtYXgoMCwgYm90dG9tTGVmdElubmVyUmFkaXVzLndpZHRo
KCkgLSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpKTsKKyAgICAgICAgYm90dG9tTGVmdElubmVy
UmFkaXVzLnNldEhlaWdodChtYXgoMCwgYm90dG9tTGVmdElubmVyUmFkaXVzLmhlaWdodCgpIC0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKTsKKworICAgICAgICBib3R0b21SaWdodElubmVy
UmFkaXVzLnNldFdpZHRoKG1heCgwLCBib3R0b21SaWdodElubmVyUmFkaXVzLndpZHRoKCkgLSBz
dHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSk7CisgICAgICAgIGJvdHRvbVJpZ2h0SW5uZXJSYWRp
dXMuc2V0SGVpZ2h0KG1heCgwLCBib3R0b21SaWdodElubmVyUmFkaXVzLmhlaWdodCgpIC0gc3R5
bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgCisgICAgICAgIAogICAgICAgICBp
ZiAoYmVnaW4pIHsKICAgICAgICAgICAgIHRvcExlZnQgPSB0b3BMZWZ0UmFkaXVzOwogICAgICAg
ICAgICAgYm90dG9tTGVmdCA9IGJvdHRvbUxlZnRSYWRpdXM7CkBAIC04MjAsMzA0ICs4NDgsMTk0
IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEcKICAgICAgICAgLy8g
Q2xpcCB0byB0aGUgcm91bmRlZCByZWN0YW5nbGUuCiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2F2ZSgpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3Jk
ZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwotICAg
IH0KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3QoaW5uZXJCb3Jk
ZXJSZWN0LCB0b3BMZWZ0SW5uZXJSYWRpdXMsIHRvcFJpZ2h0SW5uZXJSYWRpdXMsIGJvdHRvbUxl
ZnRJbm5lclJhZGl1cywgYm90dG9tUmlnaHRJbm5lclJhZGl1cyk7CisgICAgICAgIAorICAgICAg
ICByb3VuZGVkUGF0aCA9IFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoYm9yZGVyUmVjdCwg
dG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQYXRoKTsKIAotICAgIGludCBmaXJzdEFuZ2xl
U3RhcnQsIHNlY29uZEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLCBzZWNvbmRBbmdsZVNwYW47
Ci0gICAgZmxvYXQgdGhpY2tuZXNzOwotICAgIGJvb2wgdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0
Y2ggPSByZW5kZXJMZWZ0ICYmICh0b3BTdHlsZSA9PSBsZWZ0U3R5bGUpICYmICh0b3BDb2xvciA9
PSBsZWZ0Q29sb3IpOwotICAgIGJvb2wgdXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoID0gcmVu
ZGVyUmlnaHQgJiYgKHRvcFN0eWxlID09IHJpZ2h0U3R5bGUpICYmICh0b3BDb2xvciA9PSByaWdo
dENvbG9yKSAmJiAodG9wU3R5bGUgIT0gT1VUU0VUKSAmJiAodG9wU3R5bGUgIT0gUklER0UpICYm
ICh0b3BTdHlsZSAhPSBJTlNFVCkgJiYgKHRvcFN0eWxlICE9IEdST09WRSk7Ci0gICAgYm9vbCBs
b3dlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlckxlZnQgJiYgKGJvdHRvbVN0eWxlID09
IGxlZnRTdHlsZSkgJiYgKGJvdHRvbUNvbG9yID09IGxlZnRDb2xvcikgJiYgKGJvdHRvbVN0eWxl
ICE9IE9VVFNFVCkgJiYgKGJvdHRvbVN0eWxlICE9IFJJREdFKSAmJiAoYm90dG9tU3R5bGUgIT0g
SU5TRVQpICYmIChib3R0b21TdHlsZSAhPSBHUk9PVkUpOwotICAgIGJvb2wgbG93ZXJSaWdodEJv
cmRlclN0eWxlc01hdGNoID0gcmVuZGVyUmlnaHQgJiYgKGJvdHRvbVN0eWxlID09IHJpZ2h0U3R5
bGUpICYmIChib3R0b21Db2xvciA9PSByaWdodENvbG9yKTsKKyAgICB9CiAKICAgICBpZiAocmVu
ZGVyVG9wKSB7Ci0gICAgICAgIGJvb2wgaWdub3JlX2xlZnQgPSAocmVuZGVyUmFkaWkgJiYgdG9w
TGVmdC53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgICAgICh0b3BDb2xvciA9PSBsZWZ0Q29sb3Ig
JiYgdG9wVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYmIHRvcFN0eWxlID49IE9VVFNF
VCAmJgotICAgICAgICAgICAgIChsZWZ0U3R5bGUgPT0gRE9UVEVEIHx8IGxlZnRTdHlsZSA9PSBE
QVNIRUQgfHwgbGVmdFN0eWxlID09IFNPTElEIHx8IGxlZnRTdHlsZSA9PSBPVVRTRVQpKTsKLQot
ICAgICAgICBib29sIGlnbm9yZV9yaWdodCA9IChyZW5kZXJSYWRpaSAmJiB0b3BSaWdodC53aWR0
aCgpID4gMCkgfHwKLSAgICAgICAgICAgICh0b3BDb2xvciA9PSByaWdodENvbG9yICYmIHRvcFRy
YW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQgJiYgdG9wU3R5bGUgPj0gT1VUU0VUICYmCi0g
ICAgICAgICAgICAgKHJpZ2h0U3R5bGUgPT0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gREFTSEVE
IHx8IHJpZ2h0U3R5bGUgPT0gU09MSUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkpOwotCiAgICAg
ICAgIGludCB4ID0gdHg7CiAgICAgICAgIGludCB4MiA9IHR4ICsgdzsKLSAgICAgICAgaWYgKHJl
bmRlclJhZGlpKSB7Ci0gICAgICAgICAgICB4ICs9IHRvcExlZnQud2lkdGgoKTsKLSAgICAgICAg
ICAgIHgyIC09IHRvcFJpZ2h0LndpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3TGlu
ZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB4LCB0eSwgeDIsIHR5ICsgc3R5bGUtPmJvcmRl
clRvcFdpZHRoKCksIEJTVG9wLCB0b3BDb2xvciwgc3R5bGUtPmNvbG9yKCksIHRvcFN0eWxlLAot
ICAgICAgICAgICAgICAgICAgIGlnbm9yZV9sZWZ0ID8gMCA6IHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSwgaWdub3JlX3JpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotCi0g
ICAgICAgIGlmIChyZW5kZXJSYWRpaSkgewotICAgICAgICAgICAgaW50IGxlZnRZID0gdHk7Ci0K
LSAgICAgICAgICAgIC8vIFdlIG1ha2UgdGhlIGFyYyBkb3VibGUgdGhpY2sgYW5kIGxldCB0aGUg
Y2xpcCByZWN0IHRha2UgY2FyZSBvZiBjbGlwcGluZyB0aGUgZXh0cmEgb2ZmLgotICAgICAgICAg
ICAgLy8gV2UncmUgZG9pbmcgdGhpcyBiZWNhdXNlIGl0IGRvZXNuJ3Qgc2VlbSBwb3NzaWJsZSB0
byBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIGNsaXAgZXhhY3RseQotICAgICAgICAgICAgLy8gd2l0
aCB0aGUgYXJjLWRyYXdpbmcgZnVuY3Rpb24uCi0gICAgICAgICAgICB0aGlja25lc3MgPSBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSAqIDI7Ci0KLSAgICAgICAgICAgIGlmICh0b3BMZWZ0LndpZHRo
KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVmdFggPSB0eDsKLSAgICAgICAgICAgICAgICAv
LyBUaGUgaW5uZXIgY2xpcCBjbGlwcyBpbnNpZGUgdGhlIGFyYy4gVGhpcyBpcyBlc3BlY2lhbGx5
IGltcG9ydGFudCBmb3IgMXB4IGJvcmRlcnMuCi0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUxl
ZnRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53aWR0aCgp
KQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCB0b3BM
ZWZ0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAodG9wU3R5bGUgIT0gRE9VQkxF
IHx8IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFw
cGx5TGVmdElubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJv
dW5kZWRSZWN0Q2xpcChJbnRSZWN0KGxlZnRYLCBsZWZ0WSwgdG9wTGVmdC53aWR0aCgpICogMiwg
dG9wTGVmdC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSA5MDsK
LSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IHVwcGVyTGVmdEJvcmRlclN0eWxlc01h
dGNoID8gOTAgOiA0NTsKLQotICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgbGVmdCBhcmMK
LSAgICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIGxlZnRY
LCBsZWZ0WSwgdGhpY2tuZXNzLCB0b3BMZWZ0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVT
cGFuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNUb3AsIHRvcENvbG9yLCBzdHls
ZS0+Y29sb3IoKSwgdG9wU3R5bGUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxl
ZnRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9y
ZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAodG9wUmlnaHQud2lkdGgoKSkg
ewotICAgICAgICAgICAgICAgIGludCByaWdodFggPSB0eCArIHcgLSB0b3BSaWdodC53aWR0aCgp
ICogMjsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5UmlnaHRJbm5lckNsaXAgPSAoc3R5bGUt
PmJvcmRlclJpZ2h0V2lkdGgoKSA8IHRvcFJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAg
ICAgICYmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA8IHRvcFJpZ2h0LmhlaWdodCgpKQotICAg
ICAgICAgICAgICAgICAgICAmJiAodG9wU3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJU
b3BXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXAp
IHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50
UmVjdChyaWdodFgsIGxlZnRZLCB0b3BSaWdodC53aWR0aCgpICogMiwgdG9wUmlnaHQuaGVpZ2h0
KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgaWYgKHJlbmRlclJhZGlpIAorICAgICAgICAgICAgJiYgKHRv
cExlZnQud2lkdGgoKSA9PSAwIHx8IHRvcExlZnQud2lkdGgoKSA+PSBzdHlsZS0+Ym9yZGVyTGVm
dFdpZHRoKCkpCisgICAgICAgICAgICAmJiAodG9wTGVmdC5oZWlnaHQoKSA9PSAwIHx8IHRvcExl
ZnQuaGVpZ2h0KCkgPj0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpCisgICAgICAgICAgICAmJiAo
dG9wUmlnaHQud2lkdGgoKSA9PSAwIHx8IHRvcFJpZ2h0LndpZHRoKCkgPj0gc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSkKKyAgICAgICAgICAgICYmICh0b3BSaWdodC5oZWlnaHQoKSA9PSAwIHx8
IHRvcFJpZ2h0LmhlaWdodCgpID49IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSkKKyAgICAgICAg
eworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisKKyAgICAgICAgICAgIGNs
aXBCb3JkZXJTaWRlUG9seWdvbihncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCwgQlNUb3AsIHN0eWxlKTsKKyAgICAg
ICAgICAgIGZsb2F0IHRoaWNrbmVzcyA9IG1heChtYXgoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCks
IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwor
ICAgICAgICAgICAgZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJl
Y3QsIHJvdW5kZWRQYXRoLCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgdGhpY2tuZXNzLCBCU1Rv
cCwgc3R5bGUsIHRvcENvbG9yLCBzdHlsZS0+Y29sb3IoKSwgdG9wU3R5bGUpOworCisgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl
CisgICAgICAgIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlX2xlZnQgPSAodG9wQ29sb3IgPT0g
bGVmdENvbG9yICYmIHRvcFRyYW5zcGFyZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiB0b3BTdHls
ZSA+PSBPVVRTRVQgJiYKKyAgICAgICAgICAgICAgICAgKGxlZnRTdHlsZSA9PSBET1RURUQgfHwg
bGVmdFN0eWxlID09IERBU0hFRCB8fCBsZWZ0U3R5bGUgPT0gU09MSUQgfHwgbGVmdFN0eWxlID09
IE9VVFNFVCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyUmlnaHRCb3JkZXJTdHlsZXNN
YXRjaCkgewotICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0YXJ0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gOTA7Ci0gICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTdGFydCA9IDQ1OwotICAgICAg
ICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSA0NTsKLSAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBib29sIGlnbm9yZV9yaWdodCA9ICh0b3BDb2xvciA9PSByaWdodENvbG9yICYm
IHRvcFRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQgJiYgdG9wU3R5bGUgPj0gT1VUU0VU
ICYmCisgICAgICAgICAgICAgICAgIChyaWdodFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxl
ID09IERBU0hFRCB8fCByaWdodFN0eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQp
KTsKIAotICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgcmlnaHQgYXJjCi0gICAgICAgICAg
ICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCByaWdodFgsIGxlZnRZLCB0
aGlja25lc3MsIHRvcFJpZ2h0LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1RvcCwgdG9wQ29sb3IsIHN0eWxlLT5jb2xv
cigpLCB0b3BTdHlsZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVJpZ2h0SW5u
ZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0Nv
bnRleHQsIHgsIHR5LCB4MiwgdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgQlNUb3AsIHRv
cENvbG9yLCBzdHlsZS0+Y29sb3IoKSwgdG9wU3R5bGUsCisgICAgICAgICAgICAgICAgICAgaWdu
b3JlX2xlZnQgPyAwIDogc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBpZ25vcmVfcmlnaHQgPyAw
IDogc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAocmVuZGVyQm90dG9tKSB7Ci0gICAgICAgIGJvb2wgaWdub3JlX2xlZnQgPSAocmVuZGVyUmFk
aWkgJiYgYm90dG9tTGVmdC53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgICAgIChib3R0b21Db2xv
ciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYm
IGJvdHRvbVN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAgIChsZWZ0U3R5bGUgPT0gRE9U
VEVEIHx8IGxlZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVmdFN0eWxlID09IFNPTElEIHx8IGxlZnRT
dHlsZSA9PSBPVVRTRVQpKTsKLQotICAgICAgICBib29sIGlnbm9yZV9yaWdodCA9IChyZW5kZXJS
YWRpaSAmJiBib3R0b21SaWdodC53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgICAgIChib3R0b21D
b2xvciA9PSByaWdodENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJl
bnQgJiYgYm90dG9tU3R5bGUgPj0gT1VUU0VUICYmCi0gICAgICAgICAgICAgKHJpZ2h0U3R5bGUg
PT0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gREFTSEVEIHx8IHJpZ2h0U3R5bGUgPT0gU09MSUQg
fHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkpOwotCiAgICAgICAgIGludCB4ID0gdHg7CiAgICAgICAg
IGludCB4MiA9IHR4ICsgdzsKLSAgICAgICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAg
ICB4ICs9IGJvdHRvbUxlZnQud2lkdGgoKTsKLSAgICAgICAgICAgIHgyIC09IGJvdHRvbVJpZ2h0
LndpZHRoKCk7Ci0gICAgICAgIH0KIAotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhp
Y3NDb250ZXh0LCB4LCB0eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgeDIsIHR5
ICsgaCwgQlNCb3R0b20sIGJvdHRvbUNvbG9yLCBzdHlsZS0+Y29sb3IoKSwgYm90dG9tU3R5bGUs
Ci0gICAgICAgICAgICAgICAgICAgaWdub3JlX2xlZnQgPyAwIDogc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpLCBpZ25vcmVfcmlnaHQgPyAwIDogc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7Ci0K
LSAgICAgICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAgICB0aGlja25lc3MgPSBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAqIDI7CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAKKyAg
ICAgICAgICAgICYmIChib3R0b21MZWZ0LndpZHRoKCkgPT0gMCB8fCBib3R0b21MZWZ0LndpZHRo
KCkgPj0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKQorICAgICAgICAgICAgJiYgKGJvdHRvbUxl
ZnQuaGVpZ2h0KCkgPT0gMCB8fCBib3R0b21MZWZ0LmhlaWdodCgpID49IHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpKQorICAgICAgICAgICAgJiYgKGJvdHRvbVJpZ2h0LndpZHRoKCkgPT0gMCB8
fCBib3R0b21SaWdodC53aWR0aCgpID49IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpCisgICAg
ICAgICAgICAmJiAoYm90dG9tUmlnaHQuaGVpZ2h0KCkgPT0gMCB8fCBib3R0b21SaWdodC5oZWln
aHQoKSA+PSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworCisgICAgICAgICAgICBjbGlwQm9yZGVyU2lk
ZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwg
Ym90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTQm90dG9tLCBzdHlsZSk7CisgICAgICAgICAgICBm
bG9hdCB0aGlja25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAg
ICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCBy
b3VuZGVkUGF0aCwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHRoaWNrbmVzcywgQlNCb3R0
b20sIHN0eWxlLCBib3R0b21Db2xvciwgc3R5bGUtPmNvbG9yKCksIGJvdHRvbVN0eWxlKTsKKwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlnbm9yZV9sZWZ0ID0gKGJvdHRv
bUNvbG9yID09IGxlZnRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJl
bnQgJiYgYm90dG9tU3R5bGUgPj0gT1VUU0VUICYmCisgICAgICAgICAgICAgICAgIChsZWZ0U3R5
bGUgPT0gRE9UVEVEIHx8IGxlZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVmdFN0eWxlID09IFNPTElE
IHx8IGxlZnRTdHlsZSA9PSBPVVRTRVQpKTsKIAotICAgICAgICAgICAgaWYgKGJvdHRvbUxlZnQu
d2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGludCBsZWZ0WCA9IHR4OwotICAgICAgICAgICAg
ICAgIGludCBsZWZ0WSA9IHR5ICsgaCAtIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyOwotICAgICAg
ICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSA8IGJvdHRvbUxlZnQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxl
LT5ib3JkZXJCb3R0b21XaWR0aCgpIDwgYm90dG9tTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgKGJvdHRvbVN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApIHsK
LSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVj
dChsZWZ0WCwgbGVmdFksIGJvdHRvbUxlZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0
KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNoKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDE4MDsKLSAgICAgICAgICAg
ICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSA5MDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSAyMjU7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0QW5nbGVTcGFuID0gNDU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgLy8gRHJhdyBsb3dlciBsZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNG
b3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgbGVmdFgsIGxlZnRZLCB0aGlja25lc3MsIGJvdHRv
bUxlZnQsIGZpcnN0QW5nbGVTdGFydCwgZmlyc3RBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBCU0JvdHRvbSwgYm90dG9tQ29sb3IsIHN0eWxlLT5jb2xvcigpLCBib3R0
b21TdHlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkK
LSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChib3R0b21SaWdodC53aWR0aCgpKSB7Ci0gICAgICAg
ICAgICAgICAgaW50IHJpZ2h0WSA9IHR5ICsgaCAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpICogMjsK
LSAgICAgICAgICAgICAgICBpbnQgcmlnaHRYID0gdHggKyB3IC0gYm90dG9tUmlnaHQud2lkdGgo
KSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseVJpZ2h0SW5uZXJDbGlwID0gKHN0eWxl
LT5ib3JkZXJSaWdodFdpZHRoKCkgPCBib3R0b21SaWdodC53aWR0aCgpKQotICAgICAgICAgICAg
ICAgICAgICAmJiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21SaWdodC5oZWln
aHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGJvdHRvbVN0eWxlICE9IERPVUJMRSB8fCBz
dHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBs
eVJpZ2h0SW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZElubmVyUm91
bmRlZFJlY3RDbGlwKEludFJlY3QocmlnaHRYLCByaWdodFksIGJvdHRvbVJpZ2h0LndpZHRoKCkg
KiAyLCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJCb3R0b21X
aWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sIGlnbm9yZV9yaWdo
dCA9IChib3R0b21Db2xvciA9PSByaWdodENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IHJp
Z2h0VHJhbnNwYXJlbnQgJiYgYm90dG9tU3R5bGUgPj0gT1VUU0VUICYmCisgICAgICAgICAgICAg
ICAgIChyaWdodFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCByaWdo
dFN0eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpKTsKIAotICAgICAgICAgICAg
ICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAyNzA7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVT
cGFuID0gbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoID8gOTAgOiA0NTsKLQotICAgICAgICAg
ICAgICAgIC8vIERyYXcgbG93ZXIgcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0Zv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCByaWdodFgsIHJpZ2h0WSwgdGhpY2tuZXNzLCBib3R0
b21SaWdodCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIGJvdHRvbUNvbG9yLCBzdHlsZS0+Y29sb3IoKSwg
Ym90dG9tU3R5bGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVy
Q2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250
ZXh0LCB4LCB0eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgeDIsIHR5ICsgaCwg
QlNCb3R0b20sIGJvdHRvbUNvbG9yLCBzdHlsZS0+Y29sb3IoKSwgYm90dG9tU3R5bGUsCisgICAg
ICAgICAgICAgICAgICAgICAgIGlnbm9yZV9sZWZ0ID8gMCA6IHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSwgaWdub3JlX3JpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwogICAg
ICAgICB9CiAgICAgfQotCisgICAgCiAgICAgaWYgKHJlbmRlckxlZnQpIHsKLSAgICAgICAgYm9v
bCBpZ25vcmVfdG9wID0gKHJlbmRlclJhZGlpICYmIHRvcExlZnQuaGVpZ2h0KCkgPiAwKSB8fAot
ICAgICAgICAgICAgKHRvcENvbG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBs
ZWZ0VHJhbnNwYXJlbnQgJiYgbGVmdFN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAgICh0
b3BTdHlsZSA9PSBET1RURUQgfHwgdG9wU3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNP
TElEIHx8IHRvcFN0eWxlID09IE9VVFNFVCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX2JvdHRv
bSA9IChyZW5kZXJSYWRpaSAmJiBib3R0b21MZWZ0LmhlaWdodCgpID4gMCkgfHwKLSAgICAgICAg
ICAgIChib3R0b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVm
dFRyYW5zcGFyZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAgICAgICAgICAoYm90
dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBib3R0b21TdHls
ZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOwotCiAgICAgICAgIGludCB5ID0g
dHk7CiAgICAgICAgIGludCB5MiA9IHR5ICsgaDsKLSAgICAgICAgaWYgKHJlbmRlclJhZGlpKSB7
Ci0gICAgICAgICAgICB5ICs9IHRvcExlZnQuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB5MiAtPSBi
b3R0b21MZWZ0LmhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JCb3hT
aWRlKGdyYXBoaWNzQ29udGV4dCwgdHgsIHksIHR4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgp
LCB5MiwgQlNMZWZ0LCBsZWZ0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCBsZWZ0U3R5bGUsCi0gICAg
ICAgICAgICAgICAgICAgaWdub3JlX3RvcCA/IDAgOiBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwg
aWdub3JlX2JvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0KLSAgICAg
ICAgaWYgKHJlbmRlclJhZGlpICYmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggfHwgIWxv
d2VyTGVmdEJvcmRlclN0eWxlc01hdGNoKSkgewotICAgICAgICAgICAgaW50IHRvcFggPSB0eDsK
LSAgICAgICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAqIDI7Ci0K
LSAgICAgICAgICAgIGlmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgdG9wTGVmdC53
aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHRvcFkgPSB0eTsKLSAgICAgICAgICAgICAg
ICBib29sIGFwcGx5VG9wSW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IHRv
cExlZnQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpIDwgdG9wTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGxlZnRT
dHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpID4gNik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgdG9wWSwgdG9wTGVmdC53
aWR0aCgpICogMiwgdG9wTGVmdC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3RBbmds
ZVN0YXJ0ID0gMTM1OwotICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTcGFuID0gNDU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBEcmF3IHRvcCBsZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdB
cmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgdG9wWCwgdG9wWSwgdGhpY2tuZXNzLCB0b3BM
ZWZ0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQlNMZWZ0LCBsZWZ0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCBsZWZ0U3R5bGUs
IHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xpcCkKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGlmICghbG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgYm90dG9tTGVm
dC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGJvdHRvbVkgPSB0eSArIGggLSBib3R0
b21MZWZ0LmhlaWdodCgpICogMjsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5Qm90dG9tSW5u
ZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IGJvdHRvbUxlZnQud2lkdGgoKSkK
LSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIDwgYm90
dG9tTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGxlZnRTdHlsZSAhPSBE
T1VCTEUgfHwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAg
aWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgYm90dG9tWSwgYm90dG9tTGVmdC53
aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHJl
bmRlclJhZGlpIAorICAgICAgICAgICAgJiYgKGJvdHRvbUxlZnQud2lkdGgoKSA9PSAwIHx8IGJv
dHRvbUxlZnQud2lkdGgoKSA+PSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpCisgICAgICAgICAg
ICAmJiAoYm90dG9tTGVmdC5oZWlnaHQoKSA9PSAwIHx8IGJvdHRvbUxlZnQuaGVpZ2h0KCkgPj0g
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpIAorICAgICAgICAgICAgJiYgKHRvcExlZnQuaGVp
Z2h0KCkgPT0gMCB8fCB0b3BMZWZ0LmhlaWdodCgpID49IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
KQorICAgICAgICAgICAgJiYgKHRvcExlZnQud2lkdGgoKSA9PSAwIHx8IHRvcExlZnQud2lkdGgo
KSA+PSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpKQorICAgICAgICB7CisgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKworICAgICAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5
Z29uKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0LCBCU0xlZnQsIHN0eWxlKTsKKyAgICAgICAgICAgIGZsb2F0IHRo
aWNrbmVzcyA9IG1heChtYXgoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAgICAgICAgIGRy
YXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCByb3VuZGVkUGF0
aCwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCB0aGlja25lc3MsIEJTTGVmdCwgc3R5bGUsIGxl
ZnRDb2xvciwgc3R5bGUtPmNvbG9yKCksIGxlZnRTdHlsZSk7CisKKyAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg
eworICAgICAgICAgICAgYm9vbCBpZ25vcmVfdG9wID0gKHRvcENvbG9yID09IGxlZnRDb2xvciAm
JiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQgJiYgbGVmdFN0eWxlID49IE9VVFNF
VCAmJgorICAgICAgICAgICAgICAgICAodG9wU3R5bGUgPT0gRE9UVEVEIHx8IHRvcFN0eWxlID09
IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJRCB8fCB0b3BTdHlsZSA9PSBPVVRTRVQpKTsKIAot
ICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAxODA7Ci0gICAgICAgICAgICAgICAg
c2Vjb25kQW5nbGVTcGFuID0gNDU7CisgICAgICAgICAgICBib29sIGlnbm9yZV9ib3R0b20gPSAo
Ym90dG9tQ29sb3IgPT0gbGVmdENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IGxlZnRUcmFu
c3BhcmVudCAmJiBsZWZ0U3R5bGUgPj0gT1VUU0VUICYmCisgICAgICAgICAgICAgICAgIChib3R0
b21TdHlsZSA9PSBET1RURUQgfHwgYm90dG9tU3R5bGUgPT0gREFTSEVEIHx8IGJvdHRvbVN0eWxl
ID09IFNPTElEIHx8IGJvdHRvbVN0eWxlID09IElOU0VUKSk7CiAKLSAgICAgICAgICAgICAgICAv
LyBEcmF3IGJvdHRvbSBsZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwgdG9wWCwgYm90dG9tWSwgdGhpY2tuZXNzLCBib3R0b21MZWZ0LCBz
ZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCU0xlZnQsIGxlZnRDb2xvciwgc3R5bGUtPmNvbG9yKCksIGxlZnRTdHlsZSwgZmFs
c2UpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCwgeSwgdHgg
KyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHkyLCBCU0xlZnQsIGxlZnRDb2xvciwgc3R5bGUt
PmNvbG9yKCksIGxlZnRTdHlsZSwKKyAgICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wID8gMCA6
IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyZW5kZXJSaWdo
dCkgewotICAgICAgICBib29sIGlnbm9yZV90b3AgPSAocmVuZGVyUmFkaWkgJiYgdG9wUmlnaHQu
aGVpZ2h0KCkgPiAwKSB8fAotICAgICAgICAgICAgKCh0b3BDb2xvciA9PSByaWdodENvbG9yKSAm
JiAodG9wVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCkgJiYKLSAgICAgICAgICAgIChy
aWdodFN0eWxlID49IERPVFRFRCB8fCByaWdodFN0eWxlID09IElOU0VUKSAmJgotICAgICAgICAg
ICAgKHRvcFN0eWxlID09IERPVFRFRCB8fCB0b3BTdHlsZSA9PSBEQVNIRUQgfHwgdG9wU3R5bGUg
PT0gU09MSUQgfHwgdG9wU3R5bGUgPT0gT1VUU0VUKSk7Ci0KLSAgICAgICAgYm9vbCBpZ25vcmVf
Ym90dG9tID0gKHJlbmRlclJhZGlpICYmIGJvdHRvbVJpZ2h0LmhlaWdodCgpID4gMCkgfHwKLSAg
ICAgICAgICAgICgoYm90dG9tQ29sb3IgPT0gcmlnaHRDb2xvcikgJiYgKGJvdHRvbVRyYW5zcGFy
ZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQpICYmCi0gICAgICAgICAgICAocmlnaHRTdHlsZSA+PSBE
T1RURUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkgJiYKLSAgICAgICAgICAgIChib3R0b21TdHls
ZSA9PSBET1RURUQgfHwgYm90dG9tU3R5bGUgPT0gREFTSEVEIHx8IGJvdHRvbVN0eWxlID09IFNP
TElEIHx8IGJvdHRvbVN0eWxlID09IElOU0VUKSk7Ci0KLSAgICAgICAgaW50IHkgPSB0eTsKLSAg
ICAgICAgaW50IHkyID0gdHkgKyBoOwotICAgICAgICBpZiAocmVuZGVyUmFkaWkpIHsKLSAgICAg
ICAgICAgIHkgKz0gdG9wUmlnaHQuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB5MiAtPSBib3R0b21S
aWdodC5oZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsIHR4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHksIHR4
ICsgdywgeTIsIEJTUmlnaHQsIHJpZ2h0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCByaWdodFN0eWxl
LAotICAgICAgICAgICAgICAgICAgIGlnbm9yZV90b3AgPyAwIDogc3R5bGUtPmJvcmRlclRvcFdp
ZHRoKCksIGlnbm9yZV9ib3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOwot
Ci0gICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiAoIXVwcGVyUmlnaHRCb3JkZXJTdHlsZXNNYXRj
aCB8fCAhbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoKSkgewotICAgICAgICAgICAgdGhpY2tu
ZXNzID0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAqIDI7Ci0KLSAgICAgICAgICAgIGlmICgh
dXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoICYmIHRvcFJpZ2h0LndpZHRoKCkpIHsKLSAgICAg
ICAgICAgICAgICBpbnQgdG9wWCA9IHR4ICsgdyAtIHRvcFJpZ2h0LndpZHRoKCkgKiAyOwotICAg
ICAgICAgICAgICAgIGludCB0b3BZID0gdHk7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseVRv
cElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgdG9wUmlnaHQud2lkdGgo
KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9w
UmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChyaWdodFN0eWxlICE9IERP
VUJMRSB8fCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAg
aWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZElu
bmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgdG9wWSwgdG9wUmlnaHQud2lkdGgoKSAq
IDIsIHRvcFJpZ2h0LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgo
KSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0
ID0gMDsKLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IDQ1OwotCi0gICAgICAgICAg
ICAgICAgLy8gRHJhdyB0b3AgcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJv
eFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0b3BYLCB0b3BZLCB0aGlja25lc3MsIHRvcFJpZ2h0LCBm
aXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQlNSaWdodCwgcmlnaHRDb2xvciwgc3R5bGUtPmNvbG9yKCksIHJpZ2h0U3R5bGUsIHRy
dWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xpcCkKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmICghbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoICYmIGJvdHRvbVJpZ2h0
LndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYm90dG9tWCA9IHR4ICsgdyAtIGJvdHRv
bVJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGludCBib3R0b21ZID0gdHkgKyBo
IC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlC
b3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8IGJvdHRvbVJpZ2h0
LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSA8IGJvdHRvbVJpZ2h0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAocmln
aHRTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA+IDYpOwotICAg
ICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkgewotICAgICAgICAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KGJvdHRvbVgsIGJvdHRv
bVksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAzMTU7Ci0gICAgICAgICAgICAgICAgc2Vj
b25kQW5nbGVTcGFuID0gNDU7Ci0KLSAgICAgICAgICAgICAgICAvLyBEcmF3IGJvdHRvbSByaWdo
dCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQs
IGJvdHRvbVgsIGJvdHRvbVksIHRoaWNrbmVzcywgYm90dG9tUmlnaHQsIHNlY29uZEFuZ2xlU3Rh
cnQsIHNlY29uZEFuZ2xlU3BhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmln
aHQsIHJpZ2h0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCByaWdodFN0eWxlLCBmYWxzZSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlbmRlclJhZGlpIAorICAgICAgICAgICAgJiYgKGJvdHRvbVJpZ2h0LndpZHRoKCkgPT0gMCB8
fCBib3R0b21SaWdodC53aWR0aCgpID49IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpCisgICAg
ICAgICAgICAmJiAoYm90dG9tUmlnaHQuaGVpZ2h0KCkgPT0gMCB8fGJvdHRvbVJpZ2h0LmhlaWdo
dCgpID49IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSAKKyAgICAgICAgICAgICYmICh0b3BS
aWdodC5oZWlnaHQoKSA9PSAwIHx8dG9wUmlnaHQuaGVpZ2h0KCkgPj0gc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCkpCisgICAgICAgICAgICAmJiAodG9wUmlnaHQud2lkdGgoKSAgPT0gMCB8fHRvcFJp
Z2h0LndpZHRoKCkgPj0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSkpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworCisgICAgICAgICAgICBjbGlwQm9y
ZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTUmlnaHQsIHN0eWxlKTsKKyAgICAgICAg
ICAgIGZsb2F0IHRoaWNrbmVzcyA9IG1heChtYXgoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwg
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Cisg
ICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVj
dCwgcm91bmRlZFBhdGgsIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHRoaWNrbmVzcywgQlNS
aWdodCwgc3R5bGUsIHJpZ2h0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCByaWdodFN0eWxlKTsKKwor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBib29sIGlnbm9yZV90b3AgPSAoKHRvcENv
bG9yID09IHJpZ2h0Q29sb3IpICYmICh0b3BUcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50
KSAmJgorICAgICAgICAgICAgICAgIChyaWdodFN0eWxlID49IERPVFRFRCB8fCByaWdodFN0eWxl
ID09IElOU0VUKSAmJgorICAgICAgICAgICAgICAgICh0b3BTdHlsZSA9PSBET1RURUQgfHwgdG9w
U3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0eWxlID09IE9VVFNF
VCkpOworCisgICAgICAgICAgICBib29sIGlnbm9yZV9ib3R0b20gPSAoKGJvdHRvbUNvbG9yID09
IHJpZ2h0Q29sb3IpICYmIChib3R0b21UcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50KSAm
JgorICAgICAgICAgICAgICAgIChyaWdodFN0eWxlID49IERPVFRFRCB8fCByaWdodFN0eWxlID09
IElOU0VUKSAmJgorICAgICAgICAgICAgICAgIChib3R0b21TdHlsZSA9PSBET1RURUQgfHwgYm90
dG9tU3R5bGUgPT0gREFTSEVEIHx8IGJvdHRvbVN0eWxlID09IFNPTElEIHx8IGJvdHRvbVN0eWxl
ID09IElOU0VUKSk7CisKKyAgICAgICAgICAgIGludCB5ID0gdHk7CisgICAgICAgICAgICBpbnQg
eTIgPSB0eSArIGg7CisKKyAgICAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0Nv
bnRleHQsIHR4ICsgdyAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHksIHR4ICsgdywgeTIs
IEJTUmlnaHQsIHJpZ2h0Q29sb3IsIHN0eWxlLT5jb2xvcigpLCByaWdodFN0eWxlLAorICAgICAg
ICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LCBpZ25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKK30KKwordm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNzQ29udGV4
dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0IGJveCwgSW50U2l6ZSB0b3BMZWZ0LCBJbnRTaXpl
IHRvcFJpZ2h0LCBJbnRTaXplIGJvdHRvbUxlZnQsIEludFNpemUgYm90dG9tUmlnaHQsIGNvbnN0
IEJveFNpZGUgc2lkZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQoreworICAgICAgICBGbG9h
dFBvaW50IHF1YWRbNF07CisgICAgICAgIGludCB0eCA9IGJveC54KCk7CisgICAgICAgIGludCB0
eSA9IGJveC55KCk7CisgICAgICAgIGludCB3ID0gYm94LndpZHRoKCk7CisgICAgICAgIGludCBo
ID0gYm94LmhlaWdodCgpOworCisgICAgICAgIHN3aXRjaCAoc2lkZSkgeworICAgICAgICAgICAg
Y2FzZSBCU1RvcDoKKyAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxvYXRQb2ludCh0eCwgdHkp
OworICAgICAgICAgICAgICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAgICAg
ICAgICB0eCArIG1heCh0b3BMZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSksIAorICAgICAgICAgICAgICAgICAgICB0eSArIG1heCh0b3BMZWZ0LmhlaWdodCgpLCAo
aW50KSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHF1YWRbMl0g
PSBGbG9hdFBvaW50KAorICAgICAgICAgICAgICAgICAgICB0eCArIHcgLSBtYXgodG9wUmlnaHQu
d2lkdGgoKSwgKGludCkgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSksIAorICAgICAgICAgICAg
ICAgICAgICB0eSArIG1heCh0b3BSaWdodC5oZWlnaHQoKSwgKGludClzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywg
dHkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCU0xlZnQ6Cisg
ICAgICAgICAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5KTsKKyAgICAgICAgICAg
ICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgICAgICAgICAgdHggKyBtYXgo
dG9wTGVmdC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAg
ICAgICAgICAgICAgICAgdHkgKyBtYXgodG9wTGVmdC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCkpKTsKKyAgICAgICAgICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCgK
KyAgICAgICAgICAgICAgICAgICAgdHggKyBtYXgoYm90dG9tTGVmdC53aWR0aCgpLCAoaW50KSBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAgICAgICAgICAgICAgICAgdHkgKyBoIC0g
bWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkp
KTsKKyAgICAgICAgICAgICAgICBxdWFkWzNdID0gRmxvYXRQb2ludCh0eCwgdHkgKyBoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQlNCb3R0b206CisgICAgICAg
ICAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5ICsgaCk7CisgICAgICAgICAgICAg
ICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICAgICAgICAgIHR4ICsgbWF4KGJv
dHRvbUxlZnQud2lkdGgoKSwgKGludCkgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKSwgCisgICAg
ICAgICAgICAgICAgICAgIHR5ICsgaCAtIG1heChib3R0b21MZWZ0LmhlaWdodCgpLCAoaW50KXN0
eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSk7CisgICAgICAgICAgICAgICAgcXVhZFsyXSA9IEZs
b2F0UG9pbnQoCisgICAgICAgICAgICAgICAgICAgIHR4ICsgdyAtIG1heChib3R0b21SaWdodC53
aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAgICAg
ICAgICAgIHR5ICsgaCAtIG1heChib3R0b21SaWdodC5oZWlnaHQoKSwgKGludClzdHlsZS0+Ym9y
ZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50
KHR4ICsgdywgdHkgKyBoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQlNSaWdodDoKKyAgICAgICAgICAgICAgICBxdWFkWzBdID0gRmxvYXRQb2ludCh0eCArIHcs
IHR5KTsKKyAgICAgICAgICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAg
ICAgICAgICAgdHggKyB3IC0gbWF4KHRvcFJpZ2h0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3Jk
ZXJSaWdodFdpZHRoKCkpLCAKKyAgICAgICAgICAgICAgICAgICAgdHkgKyBtYXgodG9wUmlnaHQu
aGVpZ2h0KCksIChpbnQpIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7CisgICAgICAgICAgICAg
ICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICAgICAgICAgIHR4ICsgdyAtIG1h
eChib3R0b21SaWdodC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSwg
CisgICAgICAgICAgICAgICAgICAgIHR5ICsgaCAtIG1heChib3R0b21SaWdodC5oZWlnaHQoKSwg
KGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICAgICAgICAgIHF1YWRb
M10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkgKyBoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAocmVuZGVyUmFkaWkpCi0gICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
cmVzdG9yZSgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBDb252ZXhQb2x5Z29uKDQs
IHF1YWQpOwogfQogCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgsIGNv
bnN0IFJlbmRlclN0eWxlKiBzLCBib29sIGJlZ2luLCBib29sIGVuZCkKSW5kZXg6IFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gNDQ5ODUpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Myw2ICs5Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRGaWxsTGF5ZXJFeHRl
bmRlZChjb25zdCBQYWludEluZm8mLCBjb25zdCBDb2xvciYsIGNvbnN0IEZpbGxMYXllciosIGlu
dCBjbGlwWSwgaW50IGNsaXBIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgSW5saW5lRmxv
d0JveCogPSAwLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogCisg
ICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIEludFJlY3QgYm94LCBJbnRTaXplIHRvcExlZnQsIEludFNpemUgdG9wUmlnaHQsIElu
dFNpemUgYm90dG9tTGVmdCwgSW50U2l6ZSBib3R0b21SaWdodCwgY29uc3QgQm94U2lkZSBzaWRl
LCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpOworCiAgICAgLy8gVGhlIGRpZmZlcmVuY2UgYmV0
d2VlbiB0aGlzIGlubGluZSdzIGJhc2VsaW5lIHBvc2l0aW9uIGFuZCB0aGUgbGluZSdzIGJhc2Vs
aW5lIHBvc2l0aW9uLgogICAgIGludCB2ZXJ0aWNhbFBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lKSBj
b25zdDsKIApJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA0NDk4
NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4NCw2ICs2ODQsMjAyIEBAIGJvb2wgUmVuZGVyT2JqZWN0OjptdXN0UmVwYWludEJhY2tn
cm91bmQKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm94
U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0IGJv
cmRlclJlY3QsIFBhdGggYm9yZGVyUGF0aCwgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhp
Y2tuZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCb3hTaWRlIHMs
IGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgQ29sb3IgYywgY29uc3QgQ29sb3ImIHRleHRjb2xv
ciwgRUJvcmRlclN0eWxlIGJvcmRlclN0eWxlKQoreworICAgIGlmICh0aGlja25lc3MgPD0gMCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGJvcmRlclN0eWxlID09IERPVUJMRSAmJiB0aGlj
a25lc3MgPCAzKQorICAgICAgICBib3JkZXJTdHlsZSA9IFNPTElEOworCisgICAgaWYgKCFjLmlz
VmFsaWQoKSkgeworICAgICAgICBpZiAoYm9yZGVyU3R5bGUgPT0gSU5TRVQgfHwgYm9yZGVyU3R5
bGUgPT0gT1VUU0VUIHx8IGJvcmRlclN0eWxlID09IFJJREdFIHx8IGJvcmRlclN0eWxlID09IEdS
T09WRSkKKyAgICAgICAgICAgIGMuc2V0UkdCKDIzOCwgMjM4LCAyMzgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBjID0gdGV4dGNvbG9yOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGJv
cmRlclN0eWxlKSB7CisgICAgICAgIGNhc2UgQk5PTkU6CisgICAgICAgIGNhc2UgQkhJRERFTjoK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2FzZSBET1RURUQ6CisgICAgICAgIGNhc2Ug
REFTSEVEOiB7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMp
OworCisgICAgICAgICAgICAvLyBUaGUgc3Ryb2tlIGlzIGRvdWJsZWQgaGVyZSBiZWNhdXNlIHRo
ZSBwcm92aWRlZCBwYXRoIGlzIHRoZSAKKyAgICAgICAgICAgIC8vIG91dHNpZGUgZWRnZSBvZiB0
aGUgYm9yZGVyIHNvIGhhbGYgdGhlIHN0cm9rZSBpcyBjbGlwcGVkIG9mZi4gCisgICAgICAgICAg
ICAvLyBUaGUgZXh0cmEgbXVsdGlwbGllciBpcyBzbyB0aGF0IHRoZSBjbGlwcGluZyBtYXNrIGNh
biBhbnRpYWxpYXMKKyAgICAgICAgICAgIC8vIHRoZSBlZGdlcyB0byBwcmV2ZW50IGphZ2dpZXMu
CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhkcmF3VGhp
Y2tuZXNzICogMiAqIDEuMWYpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJv
a2VTdHlsZShib3JkZXJTdHlsZSA9PSBEQVNIRUQgPyBEYXNoZWRTdHJva2UgOiBEb3R0ZWRTdHJv
a2UpOworCisgICAgICAgICAgICBmbG9hdCBwYXRXaWR0aCA9IHRoaWNrbmVzcyAqICgoYm9yZGVy
U3R5bGUgPT0gREFTSEVEKSA/IDMuMGYgOiAxLjBmKTsKKworICAgICAgICAgICAgLy8gVE9ETzog
UmVpbXBsZW1lbnQgcGF0dGVybk9mZnNldCBtYW5pcHVsYXRpb24KKworICAgICAgICAgICAgRGFz
aEFycmF5KiBsaW5lRGFzaCA9IG5ldyBEYXNoQXJyYXkoKTsKKyAgICAgICAgICAgIGxpbmVEYXNo
LT5hcHBlbmQocGF0V2lkdGgpOworICAgICAgICAgICAgbGluZURhc2gtPmFwcGVuZChwYXRXaWR0
aCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldExpbmVEYXNoKCpsaW5lRGFzaCwg
cGF0V2lkdGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKGJvcmRlclBh
dGgpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBET1VCTEU6IHsKKyAgICAgICAg
ICAgIGludCBvdXRlckJvcmRlclRvcFdpZHRoID0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkvMzsK
KyAgICAgICAgICAgIGludCBvdXRlckJvcmRlclJpZ2h0V2lkdGggPSBzdHlsZS0+Ym9yZGVyUmln
aHRXaWR0aCgpLzM7CisgICAgICAgICAgICBpbnQgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCA9IHN0
eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLzM7CisgICAgICAgICAgICBpbnQgb3V0ZXJCb3JkZXJM
ZWZ0V2lkdGggPSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkvMzsKKworICAgICAgICAgICAgaW50
IGlubmVyQm9yZGVyVG9wV2lkdGggPSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSoyLzM7CisgICAg
ICAgICAgICBpbnQgaW5uZXJCb3JkZXJSaWdodFdpZHRoID0gc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSoyLzM7CisgICAgICAgICAgICBpbnQgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCA9IHN0eWxl
LT5ib3JkZXJCb3R0b21XaWR0aCgpKjIvMzsKKyAgICAgICAgICAgIGludCBpbm5lckJvcmRlckxl
ZnRXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSoyLzM7CisKKyAgICAgICAgICAgIHBy
aW50ZigiJWQsICVkLCAlZCwgJWRcbiIsIGlubmVyQm9yZGVyVG9wV2lkdGgsIGlubmVyQm9yZGVy
UmlnaHRXaWR0aCwgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCwgaW5uZXJCb3JkZXJMZWZ0V2lkdGgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBuZWVkIGNlcnRhaW4gaW50ZWdlciBy
b3VuZGluZyByZXN1bHRzCisgICAgICAgICAgICBpZiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkg
JSAzID09IDIpCisgICAgICAgICAgICAgICAgb3V0ZXJCb3JkZXJUb3BXaWR0aCArPSAxOworICAg
ICAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgJSAzID09IDIpCisgICAgICAg
ICAgICAgICAgb3V0ZXJCb3JkZXJSaWdodFdpZHRoICs9IDE7CisgICAgICAgICAgICBpZiAoc3R5
bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgJSAzID09IDIpCisgICAgICAgICAgICAgICAgb3V0ZXJC
b3JkZXJCb3R0b21XaWR0aCArPSAxOworICAgICAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKSAlIDMgPT0gMikKKyAgICAgICAgICAgICAgICBvdXRlckJvcmRlckxlZnRXaWR0aCAr
PSAxOworICAgICAgICAKKyAgICAgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAl
IDMgPT0gMSkKKyAgICAgICAgICAgICAgICBpbm5lckJvcmRlclRvcFdpZHRoICs9IDE7CisgICAg
ICAgICAgICBpZiAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAlIDMgPT0gMSkKKyAgICAgICAg
ICAgICAgICBpbm5lckJvcmRlclJpZ2h0V2lkdGggKz0gMTsKKyAgICAgICAgICAgIGlmIChzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAlIDMgPT0gMSkKKyAgICAgICAgICAgICAgICBpbm5lckJv
cmRlckJvdHRvbVdpZHRoICs9IDE7CisgICAgICAgICAgICBpZiAoc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpICUgMyA9PSAxKQorICAgICAgICAgICAgICAgIGlubmVyQm9yZGVyTGVmdFdpZHRoICs9
IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIEludFJlY3Qgb3V0ZXJU
aGlyZEJvcmRlclJlY3QgPSBJbnRSZWN0KAorICAgICAgICAgICAgICAgIGJvcmRlclJlY3QueCgp
ICsgb3V0ZXJCb3JkZXJMZWZ0V2lkdGgsCisgICAgICAgICAgICAgICAgYm9yZGVyUmVjdC55KCkg
KyBvdXRlckJvcmRlclRvcFdpZHRoLAorICAgICAgICAgICAgICAgIGJvcmRlclJlY3Qud2lkdGgo
KSAtIG91dGVyQm9yZGVyTGVmdFdpZHRoIC0gb3V0ZXJCb3JkZXJSaWdodFdpZHRoLCAKKyAgICAg
ICAgICAgICAgICBib3JkZXJSZWN0LmhlaWdodCgpIC0gb3V0ZXJCb3JkZXJUb3BXaWR0aCAtIG91
dGVyQm9yZGVyQm90dG9tV2lkdGgpOworCisgICAgICAgICAgICBJbnRSZWN0IGlubmVyVGhpcmRC
b3JkZXJSZWN0ID0gSW50UmVjdCgKKyAgICAgICAgICAgICAgICBib3JkZXJSZWN0LngoKSArIGlu
bmVyQm9yZGVyTGVmdFdpZHRoLAorICAgICAgICAgICAgICAgIGJvcmRlclJlY3QueSgpICsgaW5u
ZXJCb3JkZXJUb3BXaWR0aCwgCisgICAgICAgICAgICAgICAgYm9yZGVyUmVjdC53aWR0aCgpIC0g
aW5uZXJCb3JkZXJMZWZ0V2lkdGggLSBpbm5lckJvcmRlclJpZ2h0V2lkdGgsIAorICAgICAgICAg
ICAgICAgIGJvcmRlclJlY3QuaGVpZ2h0KCkgLSBpbm5lckJvcmRlclRvcFdpZHRoIC0gaW5uZXJC
b3JkZXJCb3R0b21XaWR0aCk7CisKKyAgICAgICAgICAgIEludFNpemUgdG9wTGVmdFRoaXJkUmFk
aXVzMSwgdG9wUmlnaHRUaGlyZFJhZGl1czEsIGJvdHRvbUxlZnRUaGlyZFJhZGl1czEsIGJvdHRv
bVJpZ2h0VGhpcmRSYWRpdXMxOworICAgICAgICAgICAgSW50U2l6ZSB0b3BMZWZ0VGhpcmRSYWRp
dXMyLCB0b3BSaWdodFRoaXJkUmFkaXVzMiwgYm90dG9tTGVmdFRoaXJkUmFkaXVzMiwgYm90dG9t
UmlnaHRUaGlyZFJhZGl1czI7CisgICAgICAgICAgICBzdHlsZS0+Z2V0Qm9yZGVyUmFkaWlGb3JS
ZWN0KG91dGVyVGhpcmRCb3JkZXJSZWN0LCB0b3BMZWZ0VGhpcmRSYWRpdXMxLCB0b3BSaWdodFRo
aXJkUmFkaXVzMSwgYm90dG9tTGVmdFRoaXJkUmFkaXVzMSwgYm90dG9tUmlnaHRUaGlyZFJhZGl1
czEpOworICAgICAgICAgICAgc3R5bGUtPmdldEJvcmRlclJhZGlpRm9yUmVjdChpbm5lclRoaXJk
Qm9yZGVyUmVjdCwgdG9wTGVmdFRoaXJkUmFkaXVzMiwgdG9wUmlnaHRUaGlyZFJhZGl1czIsIGJv
dHRvbUxlZnRUaGlyZFJhZGl1czIsIGJvdHRvbVJpZ2h0VGhpcmRSYWRpdXMyKTsKKworICAgICAg
ICAgICAgLy9BZGp1c3QgcmFkaWkgZm9yIG91dGVyIHRoaXJkCisgICAgICAgICAgICB0b3BMZWZ0
VGhpcmRSYWRpdXMxLnNldFdpZHRoKG1heCgwLCB0b3BMZWZ0VGhpcmRSYWRpdXMxLndpZHRoKCkg
LSBvdXRlckJvcmRlckxlZnRXaWR0aCkpOworICAgICAgICAgICAgdG9wTGVmdFRoaXJkUmFkaXVz
MS5zZXRIZWlnaHQobWF4KDAsIHRvcExlZnRUaGlyZFJhZGl1czEuaGVpZ2h0KCkgLSBvdXRlckJv
cmRlckxlZnRXaWR0aCkpOworCisgICAgICAgICAgICB0b3BSaWdodFRoaXJkUmFkaXVzMS5zZXRX
aWR0aChtYXgoMCwgdG9wUmlnaHRUaGlyZFJhZGl1czEud2lkdGgoKSAtIG91dGVyQm9yZGVyUmln
aHRXaWR0aCkpOworICAgICAgICAgICAgdG9wUmlnaHRUaGlyZFJhZGl1czEuc2V0SGVpZ2h0KG1h
eCgwLCB0b3BSaWdodFRoaXJkUmFkaXVzMS5oZWlnaHQoKSAtIG91dGVyQm9yZGVyVG9wV2lkdGgp
KTsKKworICAgICAgICAgICAgYm90dG9tTGVmdFRoaXJkUmFkaXVzMS5zZXRXaWR0aChtYXgoMCwg
Ym90dG9tTGVmdFRoaXJkUmFkaXVzMS53aWR0aCgpIC0gb3V0ZXJCb3JkZXJMZWZ0V2lkdGgpKTsK
KyAgICAgICAgICAgIGJvdHRvbUxlZnRUaGlyZFJhZGl1czEuc2V0SGVpZ2h0KG1heCgwLCBib3R0
b21MZWZ0VGhpcmRSYWRpdXMxLmhlaWdodCgpIC0gb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCkpOwor
CisgICAgICAgICAgICBib3R0b21SaWdodFRoaXJkUmFkaXVzMS5zZXRXaWR0aChtYXgoMCwgYm90
dG9tUmlnaHRUaGlyZFJhZGl1czEud2lkdGgoKSAtIG91dGVyQm9yZGVyUmlnaHRXaWR0aCkpOwor
ICAgICAgICAgICAgYm90dG9tUmlnaHRUaGlyZFJhZGl1czEuc2V0SGVpZ2h0KG1heCgwLCBib3R0
b21SaWdodFRoaXJkUmFkaXVzMS5oZWlnaHQoKSAtIG91dGVyQm9yZGVyQm90dG9tV2lkdGgpKTsK
KworICAgICAgICAgICAgLy9BZGp1c3QgcmFkaWkgZm9yIGlubmVyIHRoaXJkCisgICAgICAgICAg
ICB0b3BMZWZ0VGhpcmRSYWRpdXMyLnNldFdpZHRoKG1heCgwLCB0b3BMZWZ0VGhpcmRSYWRpdXMy
LndpZHRoKCkgLSBpbm5lckJvcmRlckxlZnRXaWR0aCkpOworICAgICAgICAgICAgdG9wTGVmdFRo
aXJkUmFkaXVzMi5zZXRIZWlnaHQobWF4KDAsIHRvcExlZnRUaGlyZFJhZGl1czIuaGVpZ2h0KCkg
LSBpbm5lckJvcmRlclRvcFdpZHRoKSk7CisKKyAgICAgICAgICAgIHRvcFJpZ2h0VGhpcmRSYWRp
dXMyLnNldFdpZHRoKG1heCgwLCB0b3BSaWdodFRoaXJkUmFkaXVzMi53aWR0aCgpIC0gaW5uZXJC
b3JkZXJSaWdodFdpZHRoKSk7CisgICAgICAgICAgICB0b3BSaWdodFRoaXJkUmFkaXVzMi5zZXRI
ZWlnaHQobWF4KDAsIHRvcFJpZ2h0VGhpcmRSYWRpdXMyLmhlaWdodCgpIC0gaW5uZXJCb3JkZXJU
b3BXaWR0aCkpOworCisgICAgICAgICAgICBib3R0b21MZWZ0VGhpcmRSYWRpdXMyLnNldFdpZHRo
KG1heCgwLCBib3R0b21MZWZ0VGhpcmRSYWRpdXMyLndpZHRoKCkgLSBpbm5lckJvcmRlckxlZnRX
aWR0aCkpOworICAgICAgICAgICAgYm90dG9tTGVmdFRoaXJkUmFkaXVzMi5zZXRIZWlnaHQobWF4
KDAsIGJvdHRvbUxlZnRUaGlyZFJhZGl1czIuaGVpZ2h0KCkgLSBpbm5lckJvcmRlckJvdHRvbVdp
ZHRoKSk7CisKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0VGhpcmRSYWRpdXMyLnNldFdpZHRoKG1h
eCgwLCBib3R0b21SaWdodFRoaXJkUmFkaXVzMi53aWR0aCgpIC0gaW5uZXJCb3JkZXJSaWdodFdp
ZHRoKSk7CisgICAgICAgICAgICBib3R0b21SaWdodFRoaXJkUmFkaXVzMi5zZXRIZWlnaHQobWF4
KDAsIGJvdHRvbVJpZ2h0VGhpcmRSYWRpdXMyLmhlaWdodCgpIC0gaW5uZXJCb3JkZXJCb3R0b21X
aWR0aCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBEcmF3IGlubmVyIHRoaXJkCisg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGlubmVyVGhpcmRCb3JkZXJSZWN0LCB0b3BMZWZ0
VGhpcmRSYWRpdXMyLCB0b3BSaWdodFRoaXJkUmFkaXVzMiwgYm90dG9tTGVmdFRoaXJkUmFkaXVz
MiwgYm90dG9tUmlnaHRUaGlyZFJhZGl1czIpOworICAgICAgICAgICAgZHJhd0JveFNpZGVGcm9t
UGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywg
ZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIHRleHRjb2xvciwgU09MSUQpOworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIERyYXcgb3V0ZXIgdGhpcmQKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgp
OworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3Qob3V0ZXJU
aGlyZEJvcmRlclJlY3QsIHRvcExlZnRUaGlyZFJhZGl1czEsIHRvcFJpZ2h0VGhpcmRSYWRpdXMx
LCBib3R0b21MZWZ0VGhpcmRSYWRpdXMxLCBib3R0b21SaWdodFRoaXJkUmFkaXVzMSk7CisgICAg
ICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwg
Ym9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBzdHlsZSwgYywgdGV4dGNv
bG9yLCBTT0xJRCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
UklER0U6CisgICAgICAgIGNhc2UgR1JPT1ZFOgorICAgICAgICB7CisgICAgICAgICAgICBFQm9y
ZGVyU3R5bGUgczE7CisgICAgICAgICAgICBFQm9yZGVyU3R5bGUgczI7CisgICAgICAgICAgICBp
ZiAoYm9yZGVyU3R5bGUgPT0gR1JPT1ZFKSB7CisgICAgICAgICAgICAgICAgczEgPSBJTlNFVDsK
KyAgICAgICAgICAgICAgICBzMiA9IE9VVFNFVDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgczEgPSBPVVRTRVQ7CisgICAgICAgICAgICAgICAgczIgPSBJTlNFVDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSW50UmVjdCBoYWxmQm9yZGVyUmVjdCA9IEludFJl
Y3QoCisgICAgICAgICAgICAgICAgYm9yZGVyUmVjdC54KCkgKyBzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCkvMiwgCisgICAgICAgICAgICAgICAgYm9yZGVyUmVjdC55KCkgKyBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKS8yLCAKKyAgICAgICAgICAgICAgICBib3JkZXJSZWN0LndpZHRoKCkgLSBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCkvMiAtIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkvMiwgCisg
ICAgICAgICAgICAgICAgYm9yZGVyUmVjdC5oZWlnaHQoKSAtIHN0eWxlLT5ib3JkZXJUb3BXaWR0
aCgpLzIgLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKS8yKTsKKworICAgICAgICAgICAgSW50
U2l6ZSB0b3BMZWZ0SGFsZlJhZGl1cywgdG9wUmlnaHRIYWxmUmFkaXVzLCBib3R0b21MZWZ0SGFs
ZlJhZGl1cywgYm90dG9tUmlnaHRIYWxmUmFkaXVzOworICAgICAgICAgICAgc3R5bGUtPmdldEJv
cmRlclJhZGlpRm9yUmVjdChoYWxmQm9yZGVyUmVjdCwgdG9wTGVmdEhhbGZSYWRpdXMsIHRvcFJp
Z2h0SGFsZlJhZGl1cywgYm90dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0SGFsZlJhZGl1
cyk7CisKKyAgICAgICAgICAgIC8vQWRqdXN0IHJhZGlpIGZvciBoYWxmCisgICAgICAgICAgICB0
b3BMZWZ0SGFsZlJhZGl1cy5zZXRXaWR0aChtYXgoMCwgdG9wTGVmdEhhbGZSYWRpdXMud2lkdGgo
KSAtIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKS8yKSk7CisgICAgICAgICAgICB0b3BMZWZ0SGFs
ZlJhZGl1cy5zZXRIZWlnaHQobWF4KDAsIHRvcExlZnRIYWxmUmFkaXVzLmhlaWdodCgpIC0gc3R5
bGUtPmJvcmRlclRvcFdpZHRoKCkvMikpOworCisgICAgICAgICAgICB0b3BSaWdodEhhbGZSYWRp
dXMuc2V0V2lkdGgobWF4KDAsIHRvcFJpZ2h0SGFsZlJhZGl1cy53aWR0aCgpIC0gc3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKS8yKSk7CisgICAgICAgICAgICB0b3BSaWdodEhhbGZSYWRpdXMuc2V0
SGVpZ2h0KG1heCgwLCB0b3BSaWdodEhhbGZSYWRpdXMuaGVpZ2h0KCkgLSBzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKS8yKSk7CisKKyAgICAgICAgICAgIGJvdHRvbUxlZnRIYWxmUmFkaXVzLnNldFdp
ZHRoKG1heCgwLCBib3R0b21MZWZ0SGFsZlJhZGl1cy53aWR0aCgpIC0gc3R5bGUtPmJvcmRlckxl
ZnRXaWR0aCgpLzIpKTsKKyAgICAgICAgICAgIGJvdHRvbUxlZnRIYWxmUmFkaXVzLnNldEhlaWdo
dChtYXgoMCwgYm90dG9tTGVmdEhhbGZSYWRpdXMuaGVpZ2h0KCkgLSBzdHlsZS0+Ym9yZGVyQm90
dG9tV2lkdGgoKS8yKSk7CisKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0SGFsZlJhZGl1cy5zZXRX
aWR0aChtYXgoMCwgYm90dG9tUmlnaHRIYWxmUmFkaXVzLndpZHRoKCkgLSBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLzIpKTsKKyAgICAgICAgICAgIGJvdHRvbVJpZ2h0SGFsZlJhZGl1cy5zZXRI
ZWlnaHQobWF4KDAsIGJvdHRvbVJpZ2h0SGFsZlJhZGl1cy5oZWlnaHQoKSAtIHN0eWxlLT5ib3Jk
ZXJCb3R0b21XaWR0aCgpLzIpKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgZnVsbCBib3JkZXIK
KyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJS
ZWN0LCBib3JkZXJQYXRoLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHMsIHN0eWxlLCBjLCB0
ZXh0Y29sb3IsIHMxKTsKKworICAgICAgICAgICAgLy8gUGFpbnQgaW5uZXIgb25seQorICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChoYWxmQm9yZGVyUmVjdCwgdG9wTGVmdEhhbGZSYWRpdXMs
IHRvcFJpZ2h0SGFsZlJhZGl1cywgYm90dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0SGFs
ZlJhZGl1cyk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4
dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBz
dHlsZSwgYywgdGV4dGNvbG9yLCBzMik7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJl
c3RvcmUoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgSU5TRVQ6CisgICAgICAgICAgICBpZiAocyA9PSBCU1RvcCB8fCBzID09IEJT
TGVmdCkKKyAgICAgICAgICAgICAgICBjID0gYy5kYXJrKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBPVVRTRVQ6CisgICAgICAgICAgICBpZiAocyA9PSBCU0JvdHRvbSB8fCBz
ID09IEJTUmlnaHQpCisgICAgICAgICAgICAgICAgYyA9IGMuZGFyaygpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9r
ZSk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENvbG9yKGMpOworCisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+ZHJhd1JlY3QoYm9yZGVyUmVjdCk7Cit9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAKKwogdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdMaW5lRm9y
Qm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHgxLCBpbnQgeTEs
IGludCB4MiwgaW50IHkyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
b3hTaWRlIHMsIENvbG9yIGMsIGNvbnN0IENvbG9yJiB0ZXh0Y29sb3IsIEVCb3JkZXJTdHlsZSBz
dHlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFkamJ3MSwg
aW50IGFkamJ3MikKQEAgLTg4MCw5NCArMTA3Niw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3
TGluZUZvckJveFNpZGUoR3IKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3QXJj
Rm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHgsIGludCB5
LCBmbG9hdCB0aGlja25lc3MsIEludFNpemUgcmFkaXVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBhbmdsZVN0YXJ0LCBpbnQgYW5nbGVTcGFuLCBCb3hTaWRlIHMs
IENvbG9yIGMsIGNvbnN0IENvbG9yJiB0ZXh0Q29sb3IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUJvcmRlclN0eWxlIHN0eWxlLCBib29sIGZpcnN0Q29ybmVyKQotewot
ICAgIGlmICgoc3R5bGUgPT0gRE9VQkxFICYmIHRoaWNrbmVzcyAvIDIgPCAzKSB8fCAoKHN0eWxl
ID09IFJJREdFIHx8IHN0eWxlID09IEdST09WRSkgJiYgdGhpY2tuZXNzIC8gMiA8IDIpKQotICAg
ICAgICBzdHlsZSA9IFNPTElEOwotCi0gICAgaWYgKCFjLmlzVmFsaWQoKSkgewotICAgICAgICBp
ZiAoc3R5bGUgPT0gSU5TRVQgfHwgc3R5bGUgPT0gT1VUU0VUIHx8IHN0eWxlID09IFJJREdFIHx8
IHN0eWxlID09IEdST09WRSkKLSAgICAgICAgICAgIGMuc2V0UkdCKDIzOCwgMjM4LCAyMzgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjID0gdGV4dENvbG9yOwotICAgIH0KLQotICAgIHN3
aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBCTk9ORToKLSAgICAgICAgY2FzZSBCSElEREVO
OgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIERPVFRFRDoKLSAgICAgICAgY2Fz
ZSBEQVNIRUQ6Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMp
OwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHlsZShzdHlsZSA9PSBE
T1RURUQgPyBEb3R0ZWRTdHJva2UgOiBEYXNoZWRTdHJva2UpOwotICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLSAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndpZHRoKCkgKiAy
LCByYWRpdXMuaGVpZ2h0KCkgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIERPVUJMRTogewotICAgICAgICAgICAgZmxvYXQgdGhp
cmQgPSB0aGlja25lc3MgLyAzLjBmOwotICAgICAgICAgICAgZmxvYXQgaW5uZXJUaGlyZCA9ICh0
aGlja25lc3MgKyAxLjBmKSAvIDYuMGY7Ci0gICAgICAgICAgICBpbnQgc2hpZnRGb3JJbm5lciA9
IHN0YXRpY19jYXN0PGludD4oaW5uZXJUaGlyZCAqIDIuNWYpOwotCi0gICAgICAgICAgICBpbnQg
b3V0ZXJZID0geTsKLSAgICAgICAgICAgIGludCBvdXRlckhlaWdodCA9IHJhZGl1cy5oZWlnaHQo
KSAqIDI7Ci0gICAgICAgICAgICBpbnQgaW5uZXJYID0geCArIHNoaWZ0Rm9ySW5uZXI7Ci0gICAg
ICAgICAgICBpbnQgaW5uZXJZID0geSArIHNoaWZ0Rm9ySW5uZXI7Ci0gICAgICAgICAgICBpbnQg
aW5uZXJXaWR0aCA9IChyYWRpdXMud2lkdGgoKSAtIHNoaWZ0Rm9ySW5uZXIpICogMjsKLSAgICAg
ICAgICAgIGludCBpbm5lckhlaWdodCA9IChyYWRpdXMuaGVpZ2h0KCkgLSBzaGlmdEZvcklubmVy
KSAqIDI7Ci0gICAgICAgICAgICBpZiAoaW5uZXJUaGlyZCA+IDEgJiYgKHMgPT0gQlNUb3AgfHwg
KGZpcnN0Q29ybmVyICYmIChzID09IEJTTGVmdCB8fCBzID09IEJTUmlnaHQpKSkpIHsKLSAgICAg
ICAgICAgICAgICBvdXRlckhlaWdodCArPSAyOwotICAgICAgICAgICAgICAgIGlubmVySGVpZ2h0
ICs9IDI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihjKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKHRoaXJkKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJj
KEludFJlY3QoeCwgb3V0ZXJZLCByYWRpdXMud2lkdGgoKSAqIDIsIG91dGVySGVpZ2h0KSwgYW5n
bGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ry
b2tlVGhpY2tuZXNzKGlubmVyVGhpcmQgPiAyID8gaW5uZXJUaGlyZCAtIDEgOiBpbm5lclRoaXJk
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoaW5uZXJY
LCBpbm5lclksIGlubmVyV2lkdGgsIGlubmVySGVpZ2h0KSwgYW5nbGVTdGFydCwgYW5nbGVTcGFu
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR1JPT1ZFOgot
ICAgICAgICBjYXNlIFJJREdFOiB7Ci0gICAgICAgICAgICBDb2xvciBjMjsKLSAgICAgICAgICAg
IGlmICgoc3R5bGUgPT0gUklER0UgJiYgKHMgPT0gQlNUb3AgfHwgcyA9PSBCU0xlZnQpKSB8fAot
ICAgICAgICAgICAgICAgICAgICAoc3R5bGUgPT0gR1JPT1ZFICYmIChzID09IEJTQm90dG9tIHx8
IHMgPT0gQlNSaWdodCkpKQotICAgICAgICAgICAgICAgIGMyID0gYy5kYXJrKCk7Ci0gICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjMiA9IGM7Ci0gICAgICAgICAgICAgICAgYyA9
IGMuZGFyaygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0U3Ryb2tlQ29sb3IoYyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0
cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
dHJva2VBcmMoSW50UmVjdCh4LCB5LCByYWRpdXMud2lkdGgoKSAqIDIsIHJhZGl1cy5oZWlnaHQo
KSAqIDIpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwotCi0gICAgICAgICAgICBmbG9hdCBoYWxm
VGhpY2tuZXNzID0gKHRoaWNrbmVzcyArIDEuMGYpIC8gNC4wZjsKLSAgICAgICAgICAgIGludCBz
aGlmdEZvcklubmVyID0gc3RhdGljX2Nhc3Q8aW50PihoYWxmVGhpY2tuZXNzICogMS41Zik7Ci0g
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMyKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGhhbGZUaGlja25lc3MgPiAy
ID8gaGFsZlRoaWNrbmVzcyAtIDEgOiBoYWxmVGhpY2tuZXNzKTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCArIHNoaWZ0Rm9ySW5uZXIsIHkgKyBzaGlm
dEZvcklubmVyLCAocmFkaXVzLndpZHRoKCkgLSBzaGlmdEZvcklubmVyKSAqIDIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmFkaXVzLmhlaWdodCgpIC0gc2hpZnRG
b3JJbm5lcikgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgSU5TRVQ6Ci0gICAgICAgICAgICBpZiAocyA9PSBC
U1RvcCB8fCBzID09IEJTTGVmdCkKLSAgICAgICAgICAgICAgICBjID0gYy5kYXJrKCk7Ci0gICAg
ICAgIGNhc2UgT1VUU0VUOgotICAgICAgICAgICAgaWYgKHN0eWxlID09IE9VVFNFVCAmJiAocyA9
PSBCU0JvdHRvbSB8fCBzID09IEJTUmlnaHQpKQotICAgICAgICAgICAgICAgIGMgPSBjLmRhcmso
KTsKLSAgICAgICAgY2FzZSBTT0xJRDoKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0
U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTdHJva2VDb2xvcihjKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tl
VGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9r
ZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICog
MiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19
Ci0KIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNDQ5ODUpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzc1LDggKzM3NSw5
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4
dCosIGludCB4MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgQm94U2lkZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBDb2xvciwgY29uc3QgQ29sb3ImIHRleHRjb2xvciwgRUJvcmRlclN0
eWxlLCBpbnQgYWRqYncxLCBpbnQgYWRqYncyKTsKLSAgICB2b2lkIGRyYXdBcmNGb3JCb3hTaWRl
KEdyYXBoaWNzQ29udGV4dCosIGludCB4LCBpbnQgeSwgZmxvYXQgdGhpY2tuZXNzLCBJbnRTaXpl
IHJhZGl1cywgaW50IGFuZ2xlU3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
YW5nbGVTcGFuLCBCb3hTaWRlLCBDb2xvciwgY29uc3QgQ29sb3ImIHRleHRjb2xvciwgRUJvcmRl
clN0eWxlLCBib29sIGZpcnN0Q29ybmVyKTsKKworICAgIHZvaWQgZHJhd0JveFNpZGVGcm9tUGF0
aChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgSW50UmVjdCBib3JkZXJSZWN0LCBQ
YXRoIGJvcmRlclBhdGgsIGZsb2F0IHRoaWNrbmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQm94U2lkZSBzLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIENvbG9yIGMsIGNvbnN0IENvbG9yJiB0ZXh0Y29sb3IsIEVCb3JkZXJTdHlsZSBzdHls
ZSk7CiAKIHB1YmxpYzoKICAgICAvLyBUaGUgcHNldWRvIGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNh
Y2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUgY2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNldWRvIGVs
ZW1lbnQgZG9lc24ndCByZXNwZWN0Cg==
</data>
<flag name="review"
          id="16538"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59390</attachid>
            <date>2010-06-22 10:41:20 -0700</date>
            <delta_ts>2010-06-22 21:43:28 -0700</delta_ts>
            <desc>Updated, re-factored version of Alex&apos;s patch</desc>
            <filename>forReview.txt</filename>
            <type>text/plain</type>
            <size>56993</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTYxOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjggQEAKKzIwMTAtMDYtMjIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTcgQ1NTMzogQm9y
ZGVycyAKKyAgICAgICAgd2l0aCBib3JkZXItcmFkaXVzIGFuZCBkb3VibGUsIGdyb292ZSwgb3Ig
cmlkZ2Ugc3R5bGVzIHNob3VsZCBsb29rIAorICAgICAgICBiZXR0ZXIKKworICAgICAgICBUaGlz
IHBhdGNoIHJlLXdvcmtzIGJvcmRlciByYWRpdXMgcGFpbnRpbmcgdG8gc3Ryb2tlIHBhdGhzIGlu
c3RlYWQgCisgICAgICAgIG9mIGFyY3MuIAorCisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbiBj
bGlwQ29udmV4UG9seWdvbigpLiBBZGRlZCBzdGF0aWMgCisgICAgICAgIGFkZENvbnZleFBvbHln
b25Ub0NvbnRleHQgc28gdGhhdCBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAg
ZHJhd0NvbnZleFBvbHlnb24oKSBhbmQgY2xpcENvbnZleFBvbHlnb24oKS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRD
b252ZXhQb2x5Z29uVG9Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpjbGlwQ29udmV4UG9seWdvbik6CisKKyAgICAgICAgVGhpcyBuZXcgaGVscGVyIGZ1bmN0aW9u
IGRldGVybWluZXMgaWYgdGhlIGlubmVyIGNvcm5lcnMgb2YgdGhlIAorICAgICAgICBib3JkZXIg
d2lsbCBhcmNoIGluIG9yIG1lZXQgYXQgYSByaWdodCBhbmdsZS4gICAgICAgCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlcldpbGxBcmNJbm5lckVkZ2UpOgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmUtd3Jp
dHRlbiBzbyB0aGF0LCBmb3IgZWFjaCBzaWRlIG9mIHRoZSBib3JkZXIsIAorICAgICAgICBpZiBi
b3JkZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgdHJ1ZSwgd2UgZ28gZG93biBhIGJyYW5kIG5ldyBj
b2RlIAorICAgICAgICBwYXRoIG9mIGNsaXBwaW5nIHRvIGEgY29udmV4IHBvbHlnb24gZm9yIHRo
ZSBib3JkZXIgc2lkZSBhbmQgdGhlbiAKKyAgICAgICAgd2UgcGFpbnQgdGhlIHNpZGUgdXNpbmcg
dGhlIG5ldyBmdW5jdGlvbiBkcmF3Qm94U2lkZUZyb21QYXRoKCkuIElmIAorICAgICAgICBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgZmFsc2UsIHRoZW4gd2UgY2FsbCBpbnRvIHRoZSBvbGQg
CisgICAgICAgIGZhbWlsaWFyIGRyYXdMaW5lRm9yQm94U2lkZSgpIHdoaWNoIHJlbGllcyBvbiB0
aGUgcm91bmRlciBjbGlwIAorICAgICAgICByZWN0cyB3ZSBoYXZlIHNldCB1cCB0byBhcmNoIHRo
ZSBvdXRlciBlZGdlIG9mIHRoZSBib3JkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIGRv
ZXMgdGhlIG1hdGggdG8gZmlndXJlIG91dCB0aGF3IGNvbnZleCBwb2x5Z29uIAorICAgICAgICB0
byBjbGlwIHRvIGluIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gYXJjaCB0aGUgaW5uZXIgZWRn
ZSBvZiB0aGUgCisgICAgICAgIGJvcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorCisgICAgICAgIGJvcmRlcklubmVyUmVjdCBpcyBhIG5l
dyBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSAKKyAgICAgICAgUmVuZGVyT2JqZWN0
IGFuZCBSZW5kZXJCb3hNb2RlbE9iamVjdCB0byBkZXRlcm1pbmUgdGhlIHJlY3Qgb2YgdGhlIAor
ICAgICAgICBpbnNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpib3JkZXJJ
bm5lclJlY3QpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIHJlLXdvcmtzIGRyYXdBcmNG
b3JCb3hTaWRlIHRvIGRyYXcgZnJvbSBQYXRocyAKKyAgICAgICAgd2hlbiBhcHByb3ByaWF0ZSBp
bnN0ZWFkIG9mIHN0cm9raW5nIGFyY3MuIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisKKyAgICAgICAgTmV3IGZ1bmN0aW9uIAorICAgICAgICBSZW5kZXJTdHlsZTo6Z2V0SW5u
ZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKCkgZ2V0cyB0aGUgCisgICAgICAg
IGlubmVyIHJhZGl1cyB2YWx1ZXMgZm9yIGEgcmVjdC4gSXQgdGFrZXMgYm9yZGVyIHdpZHRocyBh
IHBhcmFtZXRlcnMgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBzdHlsZSdzIGJvcmRl
ciB3aWR0aHMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCAKKyAgICAgICAgaW4gaW5uZXIgcmFkaXVz
IGNhbGN1bGF0aW9ucyBmb3IgZG91YmxlIGFuZCBncm9vdmUvcmlkZ2UgCisgICAgICAgIGNhbGN1
bGF0aW9ucy4gVGhlIFczQyBjb3JuZXIgY29uc3RyYWluaW5nIHJ1bGVzIHdlcmUgbW92ZWQgdG8g
YSAKKyAgICAgICAgc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGJvdGgg
Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0CisgICAgICAgICgpIGFuZCBnZXRJbm5lckJvcmRlclJhZGlp
Rm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RyYWluQ29ybmVyUmFkaWlGb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRCb3JkZXJSYWRpaUZvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldElubmVyQm9yZGVyUmFkaWlG
b3JSZWN0V2l0aEJvcmRlcldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisKIDIwMTAtMDYtMDQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gNjE1NDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksNiArMjM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIGNsaXBPdXRSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9w
TGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQs
IGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKICAgICAgICAgdm9pZCBjbGlwUGF0aChXaW5k
UnVsZSk7CiAgICAgICAgIHZvaWQgY2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgSW1hZ2VCdWZmZXIqKTsKKyAgICAgICAgdm9pZCBjbGlwQ29udmV4UG9seWdvbihzaXpl
X3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50Kik7CiAKICAgICAgICAgaW50IHRleHREcmF3
aW5nTW9kZSgpOwogICAgICAgICB2b2lkIHNldFRleHREcmF3aW5nTW9kZShpbnQpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFw
aGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MCw2ICs0NDAsMTUgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbgogICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKK3N0YXRpYyB2b2lkIGFkZENvbnZleFBvbHlnb25Ub0Nv
bnRleHQoQ0dDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBv
aW50KiBwb2ludHMpCit7CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENH
Q29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1swXS54KCksIHBvaW50c1swXS55KCkp
OworICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgaSsrKQorICAgICAgICBDR0Nv
bnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgp
KTsKKyAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2lu
dCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCkBAIC00NTMsMTggKzQ2MiwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZl
eFBvbHlnb24oCiAgICAgaWYgKGFudGlhbGlhc2VkICE9IHNob3VsZEFudGlhbGlhcygpKQogICAg
ICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgYW50aWFsaWFzZWQpOwog
Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgIENHQ29udGV4dE1vdmVUb1Bv
aW50KGNvbnRleHQsIHBvaW50c1swXS54KCksIHBvaW50c1swXS55KCkpOwotICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgaSsrKQotICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Q
b2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgpKTsKLSAgICBDR0NvbnRl
eHRDbG9zZVBhdGgoY29udGV4dCk7Ci0KKyAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNv
bnRleHQsIG5wb2ludHMsIHBvaW50cyk7CiAgICAgZHJhd1BhdGgoKTsKIAogICAgIGlmIChhbnRp
YWxpYXNlZCAhPSBzaG91bGRBbnRpYWxpYXMoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxk
QW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlhbGlhcygpKTsKIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBv
aW50KiBwb2ludHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKG5wb2ludHMgPD0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGFkZENvbnZleFBvbHlnb25Ub0NvbnRleHQocGxhdGZvcm1Db250ZXh0KCksIG5wb2ludHMsIHBv
aW50cyk7CisgICAgY2xpcFBhdGgoUlVMRV9OT05aRVJPKTsKK30KKwogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybigpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAK
ICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKQEAgLTkwOSwxMiArOTEwLDIzIEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
TmluZVBpZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgYm9yZGVyV2lsbEFy
Y0lubmVyRWRnZShJbnRTaXplIGZpcnN0UmFkaXVzLCBJbnRTaXplIHNlY29uZFJhZGl1cywgaW50
IGZpcnN0Qm9yZGVyV2lkdGgsIGludCBzZWNvbmRCb3JkZXJXaWR0aCwgaW50IG1pZGRsZUJvcmRl
cldpZHRoKQoreworICAgIHJldHVybiAoZmlyc3RSYWRpdXMud2lkdGgoKSA9PSAwIHx8IGZpcnN0
UmFkaXVzLndpZHRoKCkgPj0gZmlyc3RCb3JkZXJXaWR0aCkKKyAgICAgICAgICAgICYmIChmaXJz
dFJhZGl1cy5oZWlnaHQoKSA9PSAwIHx8IGZpcnN0UmFkaXVzLmhlaWdodCgpID49IG1pZGRsZUJv
cmRlcldpZHRoKQorICAgICAgICAgICAgJiYgKHNlY29uZFJhZGl1cy53aWR0aCgpID09IDAgfHwg
c2Vjb25kUmFkaXVzLndpZHRoKCkgPj0gc2Vjb25kQm9yZGVyV2lkdGgpCisgICAgICAgICAgICAm
JiAoc2Vjb25kUmFkaXVzLmhlaWdodCgpID09IDAgfHwgc2Vjb25kUmFkaXVzLmhlaWdodCgpID49
IG1pZGRsZUJvcmRlcldpZHRoKTsKK30KKwogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3JkZXIoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB0eCwgaW50IHR5
LCBpbnQgdywgaW50IGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUsIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQogewogICAgIGlm
IChwYWludE5pbmVQaWVjZUltYWdlKGdyYXBoaWNzQ29udGV4dCwgdHgsIHR5LCB3LCBoLCBzdHls
ZSwgc3R5bGUtPmJvcmRlckltYWdlKCkpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoZ3Jh
cGhpY3NDb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAg
IGNvbnN0IENvbG9yJiB0b3BDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJUb3BDb2xvcik7CiAgICAgY29uc3QgQ29sb3ImIGJvdHRvbUNvbG9yID0g
c3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9y
KTsKICAgICBjb25zdCBDb2xvciYgbGVmdENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRD
b2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcik7CkBAIC05MzYsMTQgKzk0OCwyMiBAQCB2
b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHCiAgICAgYm9vbCByZW5kZXJC
b3R0b20gPSBib3R0b21TdHlsZSA+IEJISURERU4gJiYgIWJvdHRvbVRyYW5zcGFyZW50OwogCiAg
ICAgYm9vbCByZW5kZXJSYWRpaSA9IGZhbHNlOworICAgIFBhdGggcm91bmRlZFBhdGg7CiAgICAg
SW50U2l6ZSB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQ7CisgICAg
SW50UmVjdCBib3JkZXJSZWN0ID0gSW50UmVjdCh0eCwgdHksIHcsIGgpOwogCiAgICAgaWYgKHN0
eWxlLT5oYXNCb3JkZXJSYWRpdXMoKSkgewotICAgICAgICBJbnRSZWN0IGJvcmRlclJlY3QgPSBJ
bnRSZWN0KHR4LCB0eSwgdywgaCk7Ci0KICAgICAgICAgSW50U2l6ZSB0b3BMZWZ0UmFkaXVzLCB0
b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXM7CiAgICAg
ICAgIHN0eWxlLT5nZXRCb3JkZXJSYWRpaUZvclJlY3QoYm9yZGVyUmVjdCwgdG9wTGVmdFJhZGl1
cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJpZ2h0UmFkaXVzKTsK
IAorICAgICAgICBJbnRSZWN0IGlubmVyQm9yZGVyUmVjdCA9IGJvcmRlcklubmVyUmVjdChib3Jk
ZXJSZWN0LCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRo
KCksIAorICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpKTsKKworICAgICAgICBJbnRTaXplIGlubmVyVG9wTGVmdFJhZGl1cywgaW5u
ZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBpbm5lckJvdHRvbVJpZ2h0
UmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9y
ZGVyV2lkdGhzKGlubmVyQm9yZGVyUmVjdCwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHN0eWxl
LT5ib3JkZXJCb3R0b21XaWR0aCgpLCAKKyAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgaW5uZXJUb3BMZWZ0UmFkaXVzLCBpbm5l
clRvcFJpZ2h0UmFkaXVzLCAKKyAgICAgICAgICAgIGlubmVyQm90dG9tTGVmdFJhZGl1cywgaW5u
ZXJCb3R0b21SaWdodFJhZGl1cyk7CisKICAgICAgICAgaWYgKGJlZ2luKSB7CiAgICAgICAgICAg
ICB0b3BMZWZ0ID0gdG9wTGVmdFJhZGl1czsKICAgICAgICAgICAgIGJvdHRvbUxlZnQgPSBib3R0
b21MZWZ0UmFkaXVzOwpAQCAtOTU1LDMwMiArOTc1LDEwMyBAQCB2b2lkIFJlbmRlckJveE1vZGVs
T2JqZWN0OjpwYWludEJvcmRlcihHCiAKICAgICAgICAgcmVuZGVyUmFkaWkgPSB0cnVlOwogCi0g
ICAgICAgIC8vIENsaXAgdG8gdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLgorICAgICAgICAvLyBDbGlw
IHRvIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaWkgcmVjdHMuCiAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2F2ZSgpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xp
cChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQp
OwotICAgIH0KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3QoaW5u
ZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnRSYWRpdXMsIGlubmVyVG9wUmlnaHRSYWRpdXMsIGlu
bmVyQm90dG9tTGVmdFJhZGl1cywgaW5uZXJCb3R0b21SaWdodFJhZGl1cyk7CiAKLSAgICBpbnQg
Zmlyc3RBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3Bhbiwgc2Vjb25k
QW5nbGVTcGFuOwotICAgIGZsb2F0IHRoaWNrbmVzczsKLSAgICBib29sIHVwcGVyTGVmdEJvcmRl
clN0eWxlc01hdGNoID0gcmVuZGVyTGVmdCAmJiAodG9wU3R5bGUgPT0gbGVmdFN0eWxlKSAmJiAo
dG9wQ29sb3IgPT0gbGVmdENvbG9yKTsKLSAgICBib29sIHVwcGVyUmlnaHRCb3JkZXJTdHlsZXNN
YXRjaCA9IHJlbmRlclJpZ2h0ICYmICh0b3BTdHlsZSA9PSByaWdodFN0eWxlKSAmJiAodG9wQ29s
b3IgPT0gcmlnaHRDb2xvcikgJiYgKHRvcFN0eWxlICE9IE9VVFNFVCkgJiYgKHRvcFN0eWxlICE9
IFJJREdFKSAmJiAodG9wU3R5bGUgIT0gSU5TRVQpICYmICh0b3BTdHlsZSAhPSBHUk9PVkUpOwot
ICAgIGJvb2wgbG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggPSByZW5kZXJMZWZ0ICYmIChib3R0
b21TdHlsZSA9PSBsZWZ0U3R5bGUpICYmIChib3R0b21Db2xvciA9PSBsZWZ0Q29sb3IpICYmIChi
b3R0b21TdHlsZSAhPSBPVVRTRVQpICYmIChib3R0b21TdHlsZSAhPSBSSURHRSkgJiYgKGJvdHRv
bVN0eWxlICE9IElOU0VUKSAmJiAoYm90dG9tU3R5bGUgIT0gR1JPT1ZFKTsKLSAgICBib29sIGxv
d2VyUmlnaHRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlclJpZ2h0ICYmIChib3R0b21TdHlsZSA9
PSByaWdodFN0eWxlKSAmJiAoYm90dG9tQ29sb3IgPT0gcmlnaHRDb2xvcik7CisgICAgICAgIHJv
dW5kZWRQYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShib3JkZXJSZWN0LCB0b3BM
ZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgICAgICBncmFwaGlj
c0NvbnRleHQtPmFkZFBhdGgocm91bmRlZFBhdGgpOworICAgIH0KIAogICAgIGlmIChyZW5kZXJU
b3ApIHsKLSAgICAgICAgYm9vbCBpZ25vcmVfbGVmdCA9IChyZW5kZXJSYWRpaSAmJiB0b3BMZWZ0
LndpZHRoKCkgPiAwKSB8fAotICAgICAgICAgICAgKHRvcENvbG9yID09IGxlZnRDb2xvciAmJiB0
b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQgJiYgdG9wU3R5bGUgPj0gT1VUU0VUICYm
Ci0gICAgICAgICAgICAgKGxlZnRTdHlsZSA9PSBET1RURUQgfHwgbGVmdFN0eWxlID09IERBU0hF
RCB8fCBsZWZ0U3R5bGUgPT0gU09MSUQgfHwgbGVmdFN0eWxlID09IE9VVFNFVCkpOwotCi0gICAg
ICAgIGJvb2wgaWdub3JlX3JpZ2h0ID0gKHJlbmRlclJhZGlpICYmIHRvcFJpZ2h0LndpZHRoKCkg
PiAwKSB8fAotICAgICAgICAgICAgKHRvcENvbG9yID09IHJpZ2h0Q29sb3IgJiYgdG9wVHJhbnNw
YXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCAmJiB0b3BTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAg
ICAgICAgICAocmlnaHRTdHlsZSA9PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBEQVNIRUQgfHwg
cmlnaHRTdHlsZSA9PSBTT0xJRCB8fCByaWdodFN0eWxlID09IElOU0VUKSk7Ci0KICAgICAgICAg
aW50IHggPSB0eDsKICAgICAgICAgaW50IHgyID0gdHggKyB3OwotICAgICAgICBpZiAocmVuZGVy
UmFkaWkpIHsKLSAgICAgICAgICAgIHggKz0gdG9wTGVmdC53aWR0aCgpOwotICAgICAgICAgICAg
eDIgLT0gdG9wUmlnaHQud2lkdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdMaW5lRm9y
Qm94U2lkZShncmFwaGljc0NvbnRleHQsIHgsIHR5LCB4MiwgdHkgKyBzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSwgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwKLSAgICAgICAgICAgICAgICAgICBp
Z25vcmVfbGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIGlnbm9yZV9yaWdodCA/
IDAgOiBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVyUmFk
aWkpIHsKLSAgICAgICAgICAgIGludCBsZWZ0WSA9IHR5OwotCi0gICAgICAgICAgICAvLyBXZSBt
YWtlIHRoZSBhcmMgZG91YmxlIHRoaWNrIGFuZCBsZXQgdGhlIGNsaXAgcmVjdCB0YWtlIGNhcmUg
b2YgY2xpcHBpbmcgdGhlIGV4dHJhIG9mZi4KLSAgICAgICAgICAgIC8vIFdlJ3JlIGRvaW5nIHRo
aXMgYmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0gcG9zc2libGUgdG8gbWF0Y2ggdGhlIGN1cnZlIG9m
IHRoZSBjbGlwIGV4YWN0bHkKLSAgICAgICAgICAgIC8vIHdpdGggdGhlIGFyYy1kcmF3aW5nIGZ1
bmN0aW9uLgotICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkg
KiAyOwotCi0gICAgICAgICAgICBpZiAodG9wTGVmdC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAg
ICAgaW50IGxlZnRYID0gdHg7Ci0gICAgICAgICAgICAgICAgLy8gVGhlIGlubmVyIGNsaXAgY2xp
cHMgaW5zaWRlIHRoZSBhcmMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIDFweCBi
b3JkZXJzLgotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5uZXJDbGlwID0gKHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSA8IHRvcExlZnQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAg
ICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9wTGVmdC5oZWlnaHQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgJiYgKHRvcFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApIHsK
LSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVj
dChsZWZ0WCwgbGVmdFksIHRvcExlZnQud2lkdGgoKSAqIDIsIHRvcExlZnQuaGVpZ2h0KCkgKiAy
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gOTA7Ci0gICAgICAgICAgICAgICAgZmly
c3RBbmdsZVNwYW4gPSB1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA/IDkwIDogNDU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBEcmF3IHVwcGVyIGxlZnQgYXJjCi0gICAgICAgICAgICAgICAgZHJh
d0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0WCwgbGVmdFksIHRoaWNrbmVzcywg
dG9wTGVmdCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3BhbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEJTVG9wLCB0b3BDb2xvciwgdG9wU3R5bGUsIHRydWUpOwotICAgICAg
ICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
ZiAodG9wUmlnaHQud2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGludCByaWdodFggPSB0eCAr
IHcgLSB0b3BSaWdodC53aWR0aCgpICogMjsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5Umln
aHRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8IHRvcFJpZ2h0LndpZHRo
KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA8IHRv
cFJpZ2h0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAodG9wU3R5bGUgIT0gRE9V
QkxFIHx8IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAgICAgaWYg
KGFwcGx5UmlnaHRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChyaWdodFgsIGxlZnRZLCB0b3BSaWdodC53aWR0aCgp
ICogMiwgdG9wUmlnaHQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgo
KSk7Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKHVwcGVyUmlnaHRC
b3JkZXJTdHlsZXNNYXRjaCkgewotICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0YXJ0
ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gOTA7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTdGFydCA9
IDQ1OwotICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSA0NTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBib3JkZXJXaWxsQXJjSW5uZXJF
ZGdlKHRvcExlZnQsIHRvcFJpZ2h0LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSkgeworICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBjbGlwQm9yZGVyU2lkZVBv
bHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90
dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTVG9wLCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0
aGlja25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgICAgIGRy
YXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCByb3VuZGVkUGF0
aCwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHRoaWNrbmVzcywgQlNUb3AsIHN0eWxlLCB0b3BD
b2xvciwgdG9wU3R5bGUpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlnbm9yZV9sZWZ0ID0gKHRvcENv
bG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQgJiYg
dG9wU3R5bGUgPj0gT1VUU0VUICYmCisgICAgICAgICAgICAgICAgKGxlZnRTdHlsZSA9PSBET1RU
RUQgfHwgbGVmdFN0eWxlID09IERBU0hFRCB8fCBsZWZ0U3R5bGUgPT0gU09MSUQgfHwgbGVmdFN0
eWxlID09IE9VVFNFVCkpOworICAgICAgICAgICAgYm9vbCBpZ25vcmVfcmlnaHQgPSAodG9wQ29s
b3IgPT0gcmlnaHRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50ICYm
IHRvcFN0eWxlID49IE9VVFNFVCAmJgorICAgICAgICAgICAgICAgIChyaWdodFN0eWxlID09IERP
VFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCByaWdodFN0eWxlID09IFNPTElEIHx8IHJp
Z2h0U3R5bGUgPT0gSU5TRVQpKTsKIAotICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgcmln
aHQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LCByaWdodFgsIGxlZnRZLCB0aGlja25lc3MsIHRvcFJpZ2h0LCBzZWNvbmRBbmdsZVN0YXJ0LCBz
ZWNvbmRBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1RvcCwgdG9w
Q29sb3IsIHRvcFN0eWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJ
bm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgp
OwotICAgICAgICAgICAgfQorICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNz
Q29udGV4dCwgeCwgdHksIHgyLCB0eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBCU1RvcCwg
dG9wQ29sb3IsIHRvcFN0eWxlLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmVfbGVmdCA/IDAg
OiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIGlnbm9yZV9yaWdodCA/IDAgOiBzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpKTsgICAgICAgICAgICAgICAKICAgICAgICAgfQogICAgIH0KIAogICAg
IGlmIChyZW5kZXJCb3R0b20pIHsKLSAgICAgICAgYm9vbCBpZ25vcmVfbGVmdCA9IChyZW5kZXJS
YWRpaSAmJiBib3R0b21MZWZ0LndpZHRoKCkgPiAwKSB8fAotICAgICAgICAgICAgKGJvdHRvbUNv
bG9yID09IGxlZnRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQg
JiYgYm90dG9tU3R5bGUgPj0gT1VUU0VUICYmCi0gICAgICAgICAgICAgKGxlZnRTdHlsZSA9PSBE
T1RURUQgfHwgbGVmdFN0eWxlID09IERBU0hFRCB8fCBsZWZ0U3R5bGUgPT0gU09MSUQgfHwgbGVm
dFN0eWxlID09IE9VVFNFVCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX3JpZ2h0ID0gKHJlbmRl
clJhZGlpICYmIGJvdHRvbVJpZ2h0LndpZHRoKCkgPiAwKSB8fAotICAgICAgICAgICAgKGJvdHRv
bUNvbG9yID09IHJpZ2h0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3Bh
cmVudCAmJiBib3R0b21TdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAgICAgICAgICAocmlnaHRTdHls
ZSA9PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBEQVNIRUQgfHwgcmlnaHRTdHlsZSA9PSBTT0xJ
RCB8fCByaWdodFN0eWxlID09IElOU0VUKSk7Ci0KICAgICAgICAgaW50IHggPSB0eDsKICAgICAg
ICAgaW50IHgyID0gdHggKyB3OwotICAgICAgICBpZiAocmVuZGVyUmFkaWkpIHsKLSAgICAgICAg
ICAgIHggKz0gYm90dG9tTGVmdC53aWR0aCgpOwotICAgICAgICAgICAgeDIgLT0gYm90dG9tUmln
aHQud2lkdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFw
aGljc0NvbnRleHQsIHgsIHR5ICsgaCAtIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCB4Miwg
dHkgKyBoLCBCU0JvdHRvbSwgYm90dG9tQ29sb3IsIGJvdHRvbVN0eWxlLAotICAgICAgICAgICAg
ICAgICAgIGlnbm9yZV9sZWZ0ID8gMCA6IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgaWdub3Jl
X3JpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotCi0gICAgICAgIGlmIChy
ZW5kZXJSYWRpaSkgewotICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCkgKiAyOwotCi0gICAgICAgICAgICBpZiAoYm90dG9tTGVmdC53aWR0aCgpKSB7Ci0g
ICAgICAgICAgICAgICAgaW50IGxlZnRYID0gdHg7Ci0gICAgICAgICAgICAgICAgaW50IGxlZnRZ
ID0gdHkgKyBoIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9v
bCBhcHBseUxlZnRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgYm90dG9t
TGVmdC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCkgPCBib3R0b21MZWZ0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAo
Ym90dG9tU3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpID4gNik7
Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkgewotICAgICAgICAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KGxlZnRYLCBsZWZ0
WSwgYm90dG9tTGVmdC53aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICBpZiAobG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2gpIHsKLSAgICAgICAgICAg
ICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gMTgwOwotICAgICAgICAgICAgICAgICAgICBmaXJz
dEFuZ2xlU3BhbiA9IDkwOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDIyNTsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RB
bmdsZVNwYW4gPSA0NTsKLSAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBE
cmF3IGxvd2VyIGxlZnQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3Jh
cGhpY3NDb250ZXh0LCBsZWZ0WCwgbGVmdFksIHRoaWNrbmVzcywgYm90dG9tTGVmdCwgZmlyc3RB
bmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3BhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEJTQm90dG9tLCBib3R0b21Db2xvciwgYm90dG9tU3R5bGUsIHRydWUpOwotICAgICAgICAgICAg
ICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoYm90
dG9tUmlnaHQud2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGludCByaWdodFkgPSB0eSArIGgg
LSBib3R0b21SaWdodC5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgaW50IHJpZ2h0WCA9
IHR4ICsgdyAtIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wg
YXBwbHlSaWdodElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgYm90dG9t
UmlnaHQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0
b21XaWR0aCgpIDwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYm
IChib3R0b21TdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPiA2
KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xpcCkgewotICAgICAgICAg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHJpZ2h0WCwg
cmlnaHRZLCBib3R0b21SaWdodC53aWR0aCgpICogMiwgYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAy
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICBpZiAocmVuZGVyUmFkaWkgJiYgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShib3R0b21M
ZWZ0LCBib3R0b21SaWdodCwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVy
UmlnaHRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpIHsKKyAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5
Z29uKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0LCBCU0JvdHRvbSwgc3R5bGUpOworICAgICAgICAgICAgZmxvYXQg
dGhpY2tuZXNzID0gbWF4KG1heChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgc3R5bGUtPmJv
cmRlckxlZnRXaWR0aCgpKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7CisgICAgICAgICAg
ICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgcm91bmRl
ZFBhdGgsIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCB0aGlja25lc3MsIEJTQm90dG9tLCBz
dHlsZSwgYm90dG9tQ29sb3IsIGJvdHRvbVN0eWxlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+cmVzdG9yZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBpZ25v
cmVfbGVmdCA9IChib3R0b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQg
PT0gbGVmdFRyYW5zcGFyZW50ICYmIGJvdHRvbVN0eWxlID49IE9VVFNFVCAmJgorICAgICAgICAg
ICAgICAgIChsZWZ0U3R5bGUgPT0gRE9UVEVEIHx8IGxlZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVm
dFN0eWxlID09IFNPTElEIHx8IGxlZnRTdHlsZSA9PSBPVVRTRVQpKTsKIAotICAgICAgICAgICAg
ICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAyNzA7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVT
cGFuID0gbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoID8gOTAgOiA0NTsKKyAgICAgICAgICAg
IGJvb2wgaWdub3JlX3JpZ2h0ID0gKGJvdHRvbUNvbG9yID09IHJpZ2h0Q29sb3IgJiYgYm90dG9t
VHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCAmJiBib3R0b21TdHlsZSA+PSBPVVRTRVQg
JiYKKyAgICAgICAgICAgICAgICAocmlnaHRTdHlsZSA9PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9
PSBEQVNIRUQgfHwgcmlnaHRTdHlsZSA9PSBTT0xJRCB8fCByaWdodFN0eWxlID09IElOU0VUKSk7
CiAKLSAgICAgICAgICAgICAgICAvLyBEcmF3IGxvd2VyIHJpZ2h0IGFyYwotICAgICAgICAgICAg
ICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgcmlnaHRYLCByaWdodFksIHRo
aWNrbmVzcywgYm90dG9tUmlnaHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTQm90dG9tLCBib3R0b21Db2xvciwgYm90
dG9tU3R5bGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdodElubmVyQ2xp
cCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAg
ICAgICAgICB9CisgICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LCB4LCB0eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgeDIsIHR5ICsgaCwgQlNC
b3R0b20sIGJvdHRvbUNvbG9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRvbVN0eWxl
LCBpZ25vcmVfbGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgaWdub3JlX3JpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRo
KCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJlbmRlckxlZnQpIHsKLSAgICAgICAg
Ym9vbCBpZ25vcmVfdG9wID0gKHJlbmRlclJhZGlpICYmIHRvcExlZnQuaGVpZ2h0KCkgPiAwKSB8
fAotICAgICAgICAgICAgKHRvcENvbG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9
PSBsZWZ0VHJhbnNwYXJlbnQgJiYgbGVmdFN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAg
ICh0b3BTdHlsZSA9PSBET1RURUQgfHwgdG9wU3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09
IFNPTElEIHx8IHRvcFN0eWxlID09IE9VVFNFVCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX2Jv
dHRvbSA9IChyZW5kZXJSYWRpaSAmJiBib3R0b21MZWZ0LmhlaWdodCgpID4gMCkgfHwKLSAgICAg
ICAgICAgIChib3R0b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0g
bGVmdFRyYW5zcGFyZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAgICAgICAgICAo
Ym90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBib3R0b21T
dHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOwotCiAgICAgICAgIGludCB5
ID0gdHk7CiAgICAgICAgIGludCB5MiA9IHR5ICsgaDsKLSAgICAgICAgaWYgKHJlbmRlclJhZGlp
KSB7Ci0gICAgICAgICAgICB5ICs9IHRvcExlZnQuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB5MiAt
PSBib3R0b21MZWZ0LmhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgdHgsIHksIHR4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0
aCgpLCB5MiwgQlNMZWZ0LCBsZWZ0Q29sb3IsIGxlZnRTdHlsZSwKLSAgICAgICAgICAgICAgICAg
ICBpZ25vcmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9t
ID8gMCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVy
UmFkaWkgJiYgKCF1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCB8fCAhbG93ZXJMZWZ0Qm9yZGVy
U3R5bGVzTWF0Y2gpKSB7Ci0gICAgICAgICAgICBpbnQgdG9wWCA9IHR4OwotICAgICAgICAgICAg
dGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpICogMjsKLQotICAgICAgICAgICAg
aWYgKCF1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCAmJiB0b3BMZWZ0LndpZHRoKCkpIHsKLSAg
ICAgICAgICAgICAgICBpbnQgdG9wWSA9IHR5OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlU
b3BJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53aWR0aCgp
KQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCB0b3BM
ZWZ0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlICE9IERPVUJM
RSB8fCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAo
YXBwbHlUb3BJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJS
b3VuZGVkUmVjdENsaXAoSW50UmVjdCh0b3BYLCB0b3BZLCB0b3BMZWZ0LndpZHRoKCkgKiAyLCB0
b3BMZWZ0LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSAxMzU7
Ci0gICAgICAgICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSA0NTsKIAotICAgICAgICAgICAgICAg
IC8vIERyYXcgdG9wIGxlZnQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUo
Z3JhcGhpY3NDb250ZXh0LCB0b3BYLCB0b3BZLCB0aGlja25lc3MsIHRvcExlZnQsIGZpcnN0QW5n
bGVTdGFydCwgZmlyc3RBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBC
U0xlZnQsIGxlZnRDb2xvciwgbGVmdFN0eWxlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAo
YXBwbHlUb3BJbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
cmVzdG9yZSgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxvd2VyTGVmdEJv
cmRlclN0eWxlc01hdGNoICYmIGJvdHRvbUxlZnQud2lkdGgoKSkgewotICAgICAgICAgICAgICAg
IGludCBib3R0b21ZID0gdHkgKyBoIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDI7Ci0gICAgICAg
ICAgICAgICAgYm9vbCBhcHBseUJvdHRvbUlubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCkgPCBib3R0b21MZWZ0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvdHRvbUxlZnQuaGVpZ2h0KCkpCi0gICAgICAgICAg
ICAgICAgICAgICYmIChsZWZ0U3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkgewot
ICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0
KHRvcFgsIGJvdHRvbVksIGJvdHRvbUxlZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0
KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoYm90
dG9tTGVmdCwgdG9wTGVmdCwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3Jk
ZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpKSB7CisgICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGNsaXBCb3JkZXJTaWRlUG9seWdv
bihncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21M
ZWZ0LCBib3R0b21SaWdodCwgQlNMZWZ0LCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0aGlj
a25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgICAgICBkcmF3
Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgcm91bmRlZFBhdGgs
IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgdGhpY2tuZXNzLCBCU0xlZnQsIHN0eWxlLCBsZWZ0
Q29sb3IsIGxlZnRTdHlsZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUo
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlX3RvcCA9ICh0b3BD
b2xvciA9PSBsZWZ0Q29sb3IgJiYgdG9wVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYm
IGxlZnRTdHlsZSA+PSBPVVRTRVQgJiYKKyAgICAgICAgICAgICAgICAodG9wU3R5bGUgPT0gRE9U
VEVEIHx8IHRvcFN0eWxlID09IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJRCB8fCB0b3BTdHls
ZSA9PSBPVVRTRVQpKTsKIAotICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAxODA7
Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7CisgICAgICAgICAgICBib29s
IGlnbm9yZV9ib3R0b20gPSAoYm90dG9tQ29sb3IgPT0gbGVmdENvbG9yICYmIGJvdHRvbVRyYW5z
cGFyZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiBsZWZ0U3R5bGUgPj0gT1VUU0VUICYmCisgICAg
ICAgICAgICAgICAgKGJvdHRvbVN0eWxlID09IERPVFRFRCB8fCBib3R0b21TdHlsZSA9PSBEQVNI
RUQgfHwgYm90dG9tU3R5bGUgPT0gU09MSUQgfHwgYm90dG9tU3R5bGUgPT0gSU5TRVQpKTsKIAot
ICAgICAgICAgICAgICAgIC8vIERyYXcgYm90dG9tIGxlZnQgYXJjCi0gICAgICAgICAgICAgICAg
ZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0b3BYLCBib3R0b21ZLCB0aGlja25l
c3MsIGJvdHRvbUxlZnQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJTTGVmdCwgbGVmdENvbG9yLCBsZWZ0U3R5bGUsIGZh
bHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCi0gICAgICAg
ICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgdHgsIHksIHR4
ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCB5MiwgQlNMZWZ0LCBsZWZ0Q29sb3IsCisgICAg
ICAgICAgICAgICAgICAgICAgICBsZWZ0U3R5bGUsIGlnbm9yZV90b3AgPyAwIDogc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCksIGlnbm9yZV9ib3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJlbmRlclJpZ2h0KSB7Ci0gICAg
ICAgIGJvb2wgaWdub3JlX3RvcCA9IChyZW5kZXJSYWRpaSAmJiB0b3BSaWdodC5oZWlnaHQoKSA+
IDApIHx8Ci0gICAgICAgICAgICAoKHRvcENvbG9yID09IHJpZ2h0Q29sb3IpICYmICh0b3BUcmFu
c3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50KSAmJgotICAgICAgICAgICAgKHJpZ2h0U3R5bGUg
Pj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpICYmCi0gICAgICAgICAgICAodG9wU3R5
bGUgPT0gRE9UVEVEIHx8IHRvcFN0eWxlID09IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJRCB8
fCB0b3BTdHlsZSA9PSBPVVRTRVQpKTsKLQotICAgICAgICBib29sIGlnbm9yZV9ib3R0b20gPSAo
cmVuZGVyUmFkaWkgJiYgYm90dG9tUmlnaHQuaGVpZ2h0KCkgPiAwKSB8fAotICAgICAgICAgICAg
KChib3R0b21Db2xvciA9PSByaWdodENvbG9yKSAmJiAoYm90dG9tVHJhbnNwYXJlbnQgPT0gcmln
aHRUcmFuc3BhcmVudCkgJiYKLSAgICAgICAgICAgIChyaWdodFN0eWxlID49IERPVFRFRCB8fCBy
aWdodFN0eWxlID09IElOU0VUKSAmJgotICAgICAgICAgICAgKGJvdHRvbVN0eWxlID09IERPVFRF
RCB8fCBib3R0b21TdHlsZSA9PSBEQVNIRUQgfHwgYm90dG9tU3R5bGUgPT0gU09MSUQgfHwgYm90
dG9tU3R5bGUgPT0gSU5TRVQpKTsKLQotICAgICAgICBpbnQgeSA9IHR5OwotICAgICAgICBpbnQg
eTIgPSB0eSArIGg7Ci0gICAgICAgIGlmIChyZW5kZXJSYWRpaSkgewotICAgICAgICAgICAgeSAr
PSB0b3BSaWdodC5oZWlnaHQoKTsKLSAgICAgICAgICAgIHkyIC09IGJvdHRvbVJpZ2h0LmhlaWdo
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29u
dGV4dCwgdHggKyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgeSwgdHggKyB3LCB5Miwg
QlNSaWdodCwgcmlnaHRDb2xvciwgcmlnaHRTdHlsZSwKLSAgICAgICAgICAgICAgICAgICBpZ25v
cmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9tID8gMCA6
IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVyUmFkaWkg
JiYgKCF1cHBlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2ggfHwgIWxvd2VyUmlnaHRCb3JkZXJTdHls
ZXNNYXRjaCkpIHsKLSAgICAgICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCkgKiAyOwotCi0gICAgICAgICAgICBpZiAoIXVwcGVyUmlnaHRCb3JkZXJTdHlsZXNNYXRj
aCAmJiB0b3BSaWdodC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHRvcFggPSB0eCAr
IHcgLSB0b3BSaWdodC53aWR0aCgpICogMjsKLSAgICAgICAgICAgICAgICBpbnQgdG9wWSA9IHR5
OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlUb3BJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSA8IHRvcFJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYm
IChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA8IHRvcFJpZ2h0LmhlaWdodCgpKQotICAgICAgICAg
ICAgICAgICAgICAmJiAocmlnaHRTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclJpZ2h0
V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xpcCkgewot
ICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0
KHRvcFgsIHRvcFksIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAqIDIp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAgZmly
c3RBbmdsZVNwYW4gPSA0NTsKLQotICAgICAgICAgICAgICAgIC8vIERyYXcgdG9wIHJpZ2h0IGFy
YwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgdG9w
WCwgdG9wWSwgdGhpY2tuZXNzLCB0b3BSaWdodCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xl
U3BhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29sb3Is
IHJpZ2h0U3R5bGUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xp
cCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNo
ICYmIGJvdHRvbVJpZ2h0LndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYm90dG9tWCA9
IHR4ICsgdyAtIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGludCBi
b3R0b21ZID0gdHkgKyBoIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAg
ICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgo
KSA8IGJvdHRvbVJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvdHRvbVJpZ2h0LmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICAmJiAocmlnaHRTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkgewot
ICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0
KGJvdHRvbVgsIGJvdHRvbVksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0b21SaWdodC5o
ZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotICAgICAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAzMTU7Ci0gICAg
ICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7Ci0KLSAgICAgICAgICAgICAgICAvLyBE
cmF3IGJvdHRvbSByaWdodCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lkZShn
cmFwaGljc0NvbnRleHQsIGJvdHRvbVgsIGJvdHRvbVksIHRoaWNrbmVzcywgYm90dG9tUmlnaHQs
IHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29sb3IsIHJpZ2h0U3R5bGUsIGZhbHNlKTsKLSAgICAg
ICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCi0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAo
cmVuZGVyUmFkaWkgJiYgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShib3R0b21SaWdodCwgdG9wUmln
aHQsIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwg
c3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSkpIHsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2F2ZSgpOworICAgICAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKGdyYXBoaWNzQ29u
dGV4dCwgYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJp
Z2h0LCBCU1JpZ2h0LCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBtYXgo
bWF4KHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSwg
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgICAgICAgICAgZHJhd0JveFNpZGVGcm9t
UGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHJvdW5kZWRQYXRoLCBzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpLCB0aGlja25lc3MsIEJTUmlnaHQsIHN0eWxlLCByaWdodENvbG9yLCBy
aWdodFN0eWxlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBpZ25vcmVfdG9wID0gKCh0b3BDb2xvciA9
PSByaWdodENvbG9yKSAmJiAodG9wVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCkgJiYK
KyAgICAgICAgICAgICAgICAocmlnaHRTdHlsZSA+PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBJ
TlNFVCkgJiYKKyAgICAgICAgICAgICAgICAodG9wU3R5bGUgPT0gRE9UVEVEIHx8IHRvcFN0eWxl
ID09IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJRCB8fCB0b3BTdHlsZSA9PSBPVVRTRVQpKTsK
KworICAgICAgICAgICAgYm9vbCBpZ25vcmVfYm90dG9tID0gKChib3R0b21Db2xvciA9PSByaWdo
dENvbG9yKSAmJiAoYm90dG9tVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCkgJiYKKyAg
ICAgICAgICAgICAgICAocmlnaHRTdHlsZSA+PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNF
VCkgJiYKKyAgICAgICAgICAgICAgICAoYm90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0
eWxlID09IERBU0hFRCB8fCBib3R0b21TdHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJ
TlNFVCkpOworCisgICAgICAgICAgICBpbnQgeSA9IHR5OworICAgICAgICAgICAgaW50IHkyID0g
dHkgKyBoOworCisgICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LCB0eCArIHcgLSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCB5LCB0eCArIHcsIHkyLCBCU1Jp
Z2h0LCByaWdodENvbG9yLCAKKyAgICAgICAgICAgICAgICByaWdodFN0eWxlLCBpZ25vcmVfdG9w
ID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCAKKyAgICAgICAgICAgICAgICBpZ25vcmVf
Ym90dG9tID8gMCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtMTI1OCw2ICsxMDc5LDY0IEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBh
aW50Qm9yZGVyKEcKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKK3Zv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OmNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0Nv
bnRleHQqIGdyYXBoaWNzQ29udGV4dCwgSW50UmVjdCBib3gsIEludFNpemUgdG9wTGVmdCwgSW50
U2l6ZSB0b3BSaWdodCwgSW50U2l6ZSBib3R0b21MZWZ0LCBJbnRTaXplIGJvdHRvbVJpZ2h0LCBj
b25zdCBCb3hTaWRlIHNpZGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICBGbG9h
dFBvaW50IHF1YWRbNF07CisgICAgaW50IHR4ID0gYm94LngoKTsKKyAgICBpbnQgdHkgPSBib3gu
eSgpOworICAgIGludCB3ID0gYm94LndpZHRoKCk7CisgICAgaW50IGggPSBib3guaGVpZ2h0KCk7
CisKKyAgICAvLyBGb3IgZWFjaCBzaWRlLCBjcmVhdGUgYW4gYXJyYXkgb2YgRmxvYXRQb2ludHMg
d2hlcmUgZWFjaCBwb2ludCBpcyBiYXNlZCBvbiB3aGljaGV2ZXIgdmFsdWUgaW4gZWFjaCBjb3Ju
ZXIKKyAgICAvLyBpcyBsYXJnZXIgLS0gdGhlIHJhZGl1cyB3aWR0aC9oZWlnaHQgb3IgdGhlIGJv
cmRlciB3aWR0aC9oZWlnaHQgLS0gYXMgYXBwcm9wcmlhdGUuCisgICAgc3dpdGNoIChzaWRlKSB7
CisgICAgY2FzZSBCU1RvcDoKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5KTsK
KyAgICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIG1heCh0b3BM
ZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIAorICAgICAgICAg
ICAgdHkgKyBtYXgodG9wTGVmdC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRo
KCkpKTsKKyAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIHcg
LSBtYXgodG9wUmlnaHQud2lkdGgoKSwgKGludCkgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSks
IAorICAgICAgICAgICAgdHkgKyBtYXgodG9wUmlnaHQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQodHggKyB3LCB0
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQlNMZWZ0OgorICAgICAgICBxdWFkWzBdID0g
RmxvYXRQb2ludCh0eCwgdHkpOworICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCgKKyAgICAg
ICAgICAgIHR4ICsgbWF4KHRvcExlZnQud2lkdGgoKSwgKGludCkgc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIG1heCh0b3BMZWZ0LmhlaWdodCgpLCAoaW50KSBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSkpOworICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCgK
KyAgICAgICAgICAgIHR4ICsgbWF4KGJvdHRvbUxlZnQud2lkdGgoKSwgKGludCkgc3R5bGUtPmJv
cmRlckxlZnRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIGggLSBtYXgoYm90dG9tTGVmdC5o
ZWlnaHQoKSwgKGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBxdWFk
WzNdID0gRmxvYXRQb2ludCh0eCwgdHkgKyBoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBC
U0JvdHRvbToKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5ICsgaCk7CisgICAg
ICAgIHF1YWRbMV0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyBtYXgoYm90dG9tTGVm
dC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAgICAgICAg
IHR5ICsgaCAtIG1heChib3R0b21MZWZ0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJCb3R0
b21XaWR0aCgpKSk7CisgICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAg
dHggKyB3IC0gbWF4KGJvdHRvbVJpZ2h0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJSaWdo
dFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsgaCAtIG1heChib3R0b21SaWdodC5oZWlnaHQo
KSwgKGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBxdWFkWzNdID0g
RmxvYXRQb2ludCh0eCArIHcsIHR5ICsgaCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQlNS
aWdodDoKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHggKyB3LCB0eSk7CisgICAgICAg
IHF1YWRbMV0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyB3IC0gbWF4KHRvcFJpZ2h0
LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpLCAKKyAgICAgICAgICAg
IHR5ICsgbWF4KHRvcFJpZ2h0LmhlaWdodCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgo
KSkpOworICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgdyAt
IG1heChib3R0b21SaWdodC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgp
KSwgCisgICAgICAgICAgICB0eSArIGggLSBtYXgoYm90dG9tUmlnaHQuaGVpZ2h0KCksIChpbnQp
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9p
bnQodHggKyB3LCB0eSArIGgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisKKyAgICBncmFwaGljc0NvbnRleHQtPmNsaXBDb252ZXhQb2x5Z29u
KDQsIHF1YWQpOworfQorCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJveFNoYWRv
dyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBpbnQgdywgaW50IGgs
IGNvbnN0IFJlbmRlclN0eWxlKiBzLCBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSwgYm9vbCBiZWdp
biwgYm9vbCBlbmQpCiB7CiAgICAgLy8gRklYTUU6IERlYWwgd2l0aCBib3JkZXItaW1hZ2UuICBX
b3VsZCBiZSBncmVhdCB0byB1c2UgYm9yZGVyLWltYWdlIGFzIGEgbWFzay4KSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAkocmV2aXNpb24gNjE1NDUpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTUsNiArMTE1LDggQEAgcHJpdmF0ZToKIAogICAgIEludFNpemUgY2FsY3VsYXRlRmlsbFRp
bGVTaXplKGNvbnN0IEZpbGxMYXllciosIEludFNpemUgc2NhbGVkU2l6ZSkgY29uc3Q7CiAKKyAg
ICB2b2lkIGNsaXBCb3JkZXJTaWRlUG9seWdvbihHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0LCBJ
bnRTaXplIHRvcExlZnQsIEludFNpemUgdG9wUmlnaHQsIEludFNpemUgYm90dG9tTGVmdCwgSW50
U2l6ZSBib3R0b21SaWdodCwgY29uc3QgQm94U2lkZSBzaWRlLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUpOworCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclZpZXc7CiAKICAgICBSZW5kZXJMYXll
ciogbV9sYXllcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24g
NjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1
ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJE
YXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtODc3LDg1ICs4NzgsMTYzIEBAIHZvaWQgUmVuZGVy
T2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3IKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2Jq
ZWN0OjpkcmF3QXJjRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwg
aW50IHgsIGludCB5LCBmbG9hdCB0aGlja25lc3MsIEludFNpemUgcmFkaXVzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbmdsZVN0YXJ0LCBpbnQgYW5nbGVTcGFu
LCBCb3hTaWRlIHMsIENvbG9yIGMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgRUJvcmRlclN0eWxlIHN0eWxlLCBib29sIGZpcnN0Q29ybmVyKQorSW50UmVjdCBSZW5kZXJP
YmplY3Q6OmJvcmRlcklubmVyUmVjdChjb25zdCBJbnRSZWN0JiBib3JkZXJSZWN0LCB1bnNpZ25l
ZCBzaG9ydCB0b3BXaWR0aCwgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgsIHVuc2lnbmVkIHNo
b3J0IGxlZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCkgY29uc3QKIHsKLSAgICBp
ZiAoKHN0eWxlID09IERPVUJMRSAmJiB0aGlja25lc3MgLyAyIDwgMykgfHwgKChzdHlsZSA9PSBS
SURHRSB8fCBzdHlsZSA9PSBHUk9PVkUpICYmIHRoaWNrbmVzcyAvIDIgPCAyKSkKLSAgICAgICAg
c3R5bGUgPSBTT0xJRDsKKyAgICByZXR1cm4gSW50UmVjdCgKKyAgICAgICAgICAgIGJvcmRlclJl
Y3QueCgpICsgbGVmdFdpZHRoLCAKKyAgICAgICAgICAgIGJvcmRlclJlY3QueSgpICsgdG9wV2lk
dGgsIAorICAgICAgICAgICAgYm9yZGVyUmVjdC53aWR0aCgpIC0gbGVmdFdpZHRoIC0gcmlnaHRX
aWR0aCwgCisgICAgICAgICAgICBib3JkZXJSZWN0LmhlaWdodCgpIC0gdG9wV2lkdGggLSBib3R0
b21XaWR0aCk7Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm94U2lkZUZyb21QYXRoKEdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0IGJvcmRlclJlY3QsIFBhdGgg
Ym9yZGVyUGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0
aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3MsIEJveFNpZGUgcywgY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yIGMs
IEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKK3sKKyAgICBpZiAodGhpY2tuZXNzIDw9IDApCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChib3JkZXJTdHlsZSA9PSBET1VCTEUgJiYgdGhpY2tu
ZXNzIDwgMykKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBTT0xJRDsKKworICAgIHN3aXRjaCAoYm9y
ZGVyU3R5bGUpIHsKKyAgICBjYXNlIEJOT05FOgorICAgIGNhc2UgQkhJRERFTjoKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRE9UVEVEOgorICAgIGNhc2UgREFTSEVEOiB7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisK
KyAgICAgICAgLy8gVGhlIHN0cm9rZSBpcyBkb3VibGVkIGhlcmUgYmVjYXVzZSB0aGUgcHJvdmlk
ZWQgcGF0aCBpcyB0aGUgCisgICAgICAgIC8vIG91dHNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyIHNv
IGhhbGYgdGhlIHN0cm9rZSBpcyBjbGlwcGVkIG9mZi4gCisgICAgICAgIC8vIFRoZSBleHRyYSBt
dWx0aXBsaWVyIGlzIHNvIHRoYXQgdGhlIGNsaXBwaW5nIG1hc2sgY2FuIGFudGlhbGlhcworICAg
ICAgICAvLyB0aGUgZWRnZXMgdG8gcHJldmVudCBqYWdnaWVzLgorICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhkcmF3VGhpY2tuZXNzICogMiAqIDEuMWYpOworICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKGJvcmRlclN0eWxlID09IERBU0hF
RCA/IERhc2hlZFN0cm9rZSA6IERvdHRlZFN0cm9rZSk7CisKKyAgICAgICAgZmxvYXQgcGF0V2lk
dGggPSB0aGlja25lc3MgKiAoKGJvcmRlclN0eWxlID09IERBU0hFRCkgPyAzLjBmIDogMS4wZik7
CisgICAgICAgIERhc2hBcnJheSogbGluZURhc2ggPSBuZXcgRGFzaEFycmF5KCk7CisgICAgICAg
IGxpbmVEYXNoLT5hcHBlbmQocGF0V2lkdGgpOworICAgICAgICBsaW5lRGFzaC0+YXBwZW5kKHBh
dFdpZHRoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRMaW5lRGFzaCgqbGluZURhc2gs
IHBhdFdpZHRoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKGJvcmRlclBhdGgp
OworICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZVBhdGgoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBjYXNlIERPVUJMRTogeworICAgICAgICBpbnQgb3V0ZXJCb3JkZXJUb3BX
aWR0aCA9IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIC8gMzsKKyAgICAgICAgaW50IG91dGVyQm9y
ZGVyUmlnaHRXaWR0aCA9IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgLyAzOworICAgICAgICBp
bnQgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCA9IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIC8g
MzsKKyAgICAgICAgaW50IG91dGVyQm9yZGVyTGVmdFdpZHRoID0gc3R5bGUtPmJvcmRlckxlZnRX
aWR0aCgpIC8gMzsKKworICAgICAgICBpbnQgaW5uZXJCb3JkZXJUb3BXaWR0aCA9IHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpICogMiAvIDM7CisgICAgICAgIGludCBpbm5lckJvcmRlclJpZ2h0V2lk
dGggPSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpICogMiAvIDM7CisgICAgICAgIGludCBpbm5l
ckJvcmRlckJvdHRvbVdpZHRoID0gc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgKiAyIC8gMzsK
KyAgICAgICAgaW50IGlubmVyQm9yZGVyTGVmdFdpZHRoID0gc3R5bGUtPmJvcmRlckxlZnRXaWR0
aCgpICogMiAvIDM7CisKKyAgICAgICAgLy8gV2UgbmVlZCBjZXJ0YWluIGludGVnZXIgcm91bmRp
bmcgcmVzdWx0cworICAgICAgICBpZiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgJSAzID09IDIp
CisgICAgICAgICAgICBvdXRlckJvcmRlclRvcFdpZHRoICs9IDE7CisgICAgICAgIGlmIChzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpICUgMyA9PSAyKQorICAgICAgICAgICAgb3V0ZXJCb3JkZXJS
aWdodFdpZHRoICs9IDE7CisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAl
IDMgPT0gMikKKyAgICAgICAgICAgIG91dGVyQm9yZGVyQm90dG9tV2lkdGggKz0gMTsKKyAgICAg
ICAgaWYgKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAlIDMgPT0gMikKKyAgICAgICAgICAgIG91
dGVyQm9yZGVyTGVmdFdpZHRoICs9IDE7CisKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpICUgMyA9PSAxKQorICAgICAgICAgICAgaW5uZXJCb3JkZXJUb3BXaWR0aCArPSAxOwor
ICAgICAgICBpZiAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAlIDMgPT0gMSkKKyAgICAgICAg
ICAgIGlubmVyQm9yZGVyUmlnaHRXaWR0aCArPSAxOworICAgICAgICBpZiAoc3R5bGUtPmJvcmRl
ckJvdHRvbVdpZHRoKCkgJSAzID09IDEpCisgICAgICAgICAgICBpbm5lckJvcmRlckJvdHRvbVdp
ZHRoICs9IDE7CisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgJSAzID09IDEp
CisgICAgICAgICAgICBpbm5lckJvcmRlckxlZnRXaWR0aCArPSAxOworCisgICAgICAgIC8vIEdl
dCB0aGUgaW5uZXIgYm9yZGVyIHJlY3RzIGZvciBib3RoIHRoZSBvdXRlciBib3JkZXIgbGluZSBh
bmQgdGhlIGlubmVyIGJvcmRlciBsaW5lCisgICAgICAgIEludFJlY3Qgb3V0ZXJCb3JkZXJJbm5l
clJlY3QgPSBib3JkZXJJbm5lclJlY3QoYm9yZGVyUmVjdCwgb3V0ZXJCb3JkZXJUb3BXaWR0aCwg
b3V0ZXJCb3JkZXJCb3R0b21XaWR0aCwgCisgICAgICAgICAgICBvdXRlckJvcmRlckxlZnRXaWR0
aCwgb3V0ZXJCb3JkZXJSaWdodFdpZHRoKTsKKyAgICAgICAgSW50UmVjdCBpbm5lckJvcmRlcklu
bmVyUmVjdCA9IGJvcmRlcklubmVyUmVjdChib3JkZXJSZWN0LCBpbm5lckJvcmRlclRvcFdpZHRo
LCBpbm5lckJvcmRlckJvdHRvbVdpZHRoLCAKKyAgICAgICAgICAgIGlubmVyQm9yZGVyTGVmdFdp
ZHRoLCBpbm5lckJvcmRlclJpZ2h0V2lkdGgpOworCisgICAgICAgIC8vIEdldCB0aGUgaW5uZXIg
cmFkaWkgZm9yIHRoZSBvdXRlciBib3JkZXIgbGluZQorICAgICAgICBJbnRTaXplIG91dGVyQm9y
ZGVyVG9wTGVmdElubmVyUmFkaXVzLCBvdXRlckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIG91
dGVyQm9yZGVyQm90dG9tTGVmdElubmVyUmFkaXVzLCAKKyAgICAgICAgICAgIG91dGVyQm9yZGVy
Qm90dG9tUmlnaHRJbm5lclJhZGl1czsKKyAgICAgICAgc3R5bGUtPmdldElubmVyQm9yZGVyUmFk
aWlGb3JSZWN0V2l0aEJvcmRlcldpZHRocyhvdXRlckJvcmRlcklubmVyUmVjdCwgb3V0ZXJCb3Jk
ZXJUb3BXaWR0aCwgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCwgCisgICAgICAgICAgICBvdXRlckJv
cmRlckxlZnRXaWR0aCwgb3V0ZXJCb3JkZXJSaWdodFdpZHRoLCBvdXRlckJvcmRlclRvcExlZnRJ
bm5lclJhZGl1cywgb3V0ZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCAKKyAgICAgICAgICAg
IG91dGVyQm9yZGVyQm90dG9tTGVmdElubmVyUmFkaXVzLCBvdXRlckJvcmRlckJvdHRvbVJpZ2h0
SW5uZXJSYWRpdXMpOworCisgICAgICAgIC8vIEdldCB0aGUgaW5uZXIgcmFkaWkgZm9yIHRoZSBp
bm5lciBib3JkZXIgbGluZQorICAgICAgICBJbnRTaXplIGlubmVyQm9yZGVyVG9wTGVmdElubmVy
UmFkaXVzLCBpbm5lckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyQm90dG9t
TGVmdElubmVyUmFkaXVzLCAKKyAgICAgICAgICAgIGlubmVyQm9yZGVyQm90dG9tUmlnaHRJbm5l
clJhZGl1czsKKyAgICAgICAgc3R5bGUtPmdldElubmVyQm9yZGVyUmFkaWlGb3JSZWN0V2l0aEJv
cmRlcldpZHRocyhpbm5lckJvcmRlcklubmVyUmVjdCwgaW5uZXJCb3JkZXJUb3BXaWR0aCwgaW5u
ZXJCb3JkZXJCb3R0b21XaWR0aCwgCisgICAgICAgICAgICBpbm5lckJvcmRlckxlZnRXaWR0aCwg
aW5uZXJCb3JkZXJSaWdodFdpZHRoLCBpbm5lckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywgaW5u
ZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCAKKyAgICAgICAgICAgIGlubmVyQm9yZGVyQm90
dG9tTGVmdElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXMpOwor
CisgICAgICAgIC8vIERyYXcgaW5uZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zYXZlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlw
KGlubmVyQm9yZGVySW5uZXJSZWN0LCBpbm5lckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywgCisg
ICAgICAgICAgICBpbm5lckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyQm90
dG9tTGVmdElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXMpOwor
ICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwg
Ym9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBzdHlsZSwgYywgU09MSUQp
OworICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKworICAgICAgICAvLyBEcmF3
IG91dGVyIGJvcmRlciBsaW5lCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAg
ICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChvdXRlckJvcmRlcklubmVy
UmVjdCwgb3V0ZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIAorICAgICAgICAgICAgb3V0ZXJC
b3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCBvdXRlckJvcmRlckJvdHRvbUxlZnRJbm5lclJhZGl1
cywgb3V0ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKyAgICAgICAgZHJhd0JveFNp
ZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNr
bmVzcywgZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIFNPTElEKTsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNl
IFJJREdFOgorICAgIGNhc2UgR1JPT1ZFOgorICAgIHsKKyAgICAgICAgRUJvcmRlclN0eWxlIHMx
OworICAgICAgICBFQm9yZGVyU3R5bGUgczI7CisgICAgICAgIGlmIChib3JkZXJTdHlsZSA9PSBH
Uk9PVkUpIHsKKyAgICAgICAgICAgIHMxID0gSU5TRVQ7CisgICAgICAgICAgICBzMiA9IE9VVFNF
VDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHMxID0gT1VUU0VUOworICAgICAgICAg
ICAgczIgPSBJTlNFVDsKKyAgICAgICAgfQogCi0gICAgc3dpdGNoIChzdHlsZSkgewotICAgICAg
ICBjYXNlIEJOT05FOgotICAgICAgICBjYXNlIEJISURERU46Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIGNhc2UgRE9UVEVEOgotICAgICAgICBjYXNlIERBU0hFRDoKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgp
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoc3R5bGUgPT0g
RE9UVEVEID8gRG90dGVkU3Ryb2tlIDogRGFzaGVkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBn
cmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICog
MiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBET1VCTEU6IHsKLSAgICAgICAgICAgIGZsb2F0IHRo
aXJkID0gdGhpY2tuZXNzIC8gMy4wZjsKLSAgICAgICAgICAgIGZsb2F0IGlubmVyVGhpcmQgPSAo
dGhpY2tuZXNzICsgMS4wZikgLyA2LjBmOwotICAgICAgICAgICAgaW50IHNoaWZ0Rm9ySW5uZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KGlubmVyVGhpcmQgKiAyLjVmKTsKLQotICAgICAgICAgICAgaW50
IG91dGVyWSA9IHk7Ci0gICAgICAgICAgICBpbnQgb3V0ZXJIZWlnaHQgPSByYWRpdXMuaGVpZ2h0
KCkgKiAyOwotICAgICAgICAgICAgaW50IGlubmVyWCA9IHggKyBzaGlmdEZvcklubmVyOwotICAg
ICAgICAgICAgaW50IGlubmVyWSA9IHkgKyBzaGlmdEZvcklubmVyOwotICAgICAgICAgICAgaW50
IGlubmVyV2lkdGggPSAocmFkaXVzLndpZHRoKCkgLSBzaGlmdEZvcklubmVyKSAqIDI7Ci0gICAg
ICAgICAgICBpbnQgaW5uZXJIZWlnaHQgPSAocmFkaXVzLmhlaWdodCgpIC0gc2hpZnRGb3JJbm5l
cikgKiAyOwotICAgICAgICAgICAgaWYgKGlubmVyVGhpcmQgPiAxICYmIChzID09IEJTVG9wIHx8
IChmaXJzdENvcm5lciAmJiAocyA9PSBCU0xlZnQgfHwgcyA9PSBCU1JpZ2h0KSkpKSB7Ci0gICAg
ICAgICAgICAgICAgb3V0ZXJIZWlnaHQgKz0gMjsKLSAgICAgICAgICAgICAgICBpbm5lckhlaWdo
dCArPSAyOwotICAgICAgICAgICAgfQorICAgICAgICBJbnRSZWN0IGhhbGZCb3JkZXJSZWN0ID0g
Ym9yZGVySW5uZXJSZWN0KGJvcmRlclJlY3QsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAvIDIs
IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIC8gMiwgCisgICAgICAgICAgICBzdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCkgLyAyLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIC8gMik7CiAKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwot
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLCBtX3N0eWxlLT5j
b2xvclNwYWNlKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3ModGhpcmQpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50
UmVjdCh4LCBvdXRlclksIHJhZGl1cy53aWR0aCgpICogMiwgb3V0ZXJIZWlnaHQpLCBhbmdsZVN0
YXJ0LCBhbmdsZVNwYW4pOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VU
aGlja25lc3MoaW5uZXJUaGlyZCA+IDIgPyBpbm5lclRoaXJkIC0gMSA6IGlubmVyVGhpcmQpOwot
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdChpbm5lclgsIGlu
bmVyWSwgaW5uZXJXaWR0aCwgaW5uZXJIZWlnaHQpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHUk9PVkU6Ci0gICAg
ICAgIGNhc2UgUklER0U6IHsKLSAgICAgICAgICAgIENvbG9yIGMyOwotICAgICAgICAgICAgaWYg
KChzdHlsZSA9PSBSSURHRSAmJiAocyA9PSBCU1RvcCB8fCBzID09IEJTTGVmdCkpIHx8Ci0gICAg
ICAgICAgICAgICAgICAgIChzdHlsZSA9PSBHUk9PVkUgJiYgKHMgPT0gQlNCb3R0b20gfHwgcyA9
PSBCU1JpZ2h0KSkpCi0gICAgICAgICAgICAgICAgYzIgPSBjLmRhcmsoKTsKLSAgICAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgICAgIGMyID0gYzsKLSAgICAgICAgICAgICAgICBjID0gYy5k
YXJrKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIEludFNpemUgdG9wTGVmdEhhbGZSYWRpdXMs
IHRvcFJpZ2h0SGFsZlJhZGl1cywgYm90dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0SGFs
ZlJhZGl1czsKKyAgICAgICAgc3R5bGUtPmdldElubmVyQm9yZGVyUmFkaWlGb3JSZWN0V2l0aEJv
cmRlcldpZHRocyhoYWxmQm9yZGVyUmVjdCwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC8gMiwg
CisgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAvIDIsIHN0eWxlLT5ib3Jk
ZXJMZWZ0V2lkdGgoKSAvIDIsIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgLyAyLCAKKyAgICAg
ICAgICAgIHRvcExlZnRIYWxmUmFkaXVzLCB0b3BSaWdodEhhbGZSYWRpdXMsIGJvdHRvbUxlZnRI
YWxmUmFkaXVzLCBib3R0b21SaWdodEhhbGZSYWRpdXMpOwogCi0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaWNrbmVzcyk7
Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KHgsIHksIHJh
ZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFuZ2xlU3RhcnQsIGFuZ2xl
U3Bhbik7CisgICAgICAgIC8vIFBhaW50IGZ1bGwgYm9yZGVyCisgICAgICAgIGRyYXdCb3hTaWRl
RnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25l
c3MsIGRyYXdUaGlja25lc3MsIHMsIHN0eWxlLCBjLCBzMSk7CiAKLSAgICAgICAgICAgIGZsb2F0
IGhhbGZUaGlja25lc3MgPSAodGhpY2tuZXNzICsgMS4wZikgLyA0LjBmOwotICAgICAgICAgICAg
aW50IHNoaWZ0Rm9ySW5uZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KGhhbGZUaGlja25lc3MgKiAxLjVm
KTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYzIsIG1fc3R5
bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9r
ZVRoaWNrbmVzcyhoYWxmVGhpY2tuZXNzID4gMiA/IGhhbGZUaGlja25lc3MgLSAxIDogaGFsZlRo
aWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0
KHggKyBzaGlmdEZvcklubmVyLCB5ICsgc2hpZnRGb3JJbm5lciwgKHJhZGl1cy53aWR0aCgpIC0g
c2hpZnRGb3JJbm5lcikgKiAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHJhZGl1cy5oZWlnaHQoKSAtIHNoaWZ0Rm9ySW5uZXIpICogMiksIGFuZ2xlU3RhcnQsIGFu
Z2xlU3Bhbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIElO
U0VUOgotICAgICAgICAgICAgaWYgKHMgPT0gQlNUb3AgfHwgcyA9PSBCU0xlZnQpCi0gICAgICAg
ICAgICAgICAgYyA9IGMuZGFyaygpOwotICAgICAgICBjYXNlIE9VVFNFVDoKLSAgICAgICAgICAg
IGlmIChzdHlsZSA9PSBPVVRTRVQgJiYgKHMgPT0gQlNCb3R0b20gfHwgcyA9PSBCU1JpZ2h0KSkK
LSAgICAgICAgICAgICAgICBjID0gYy5kYXJrKCk7Ci0gICAgICAgIGNhc2UgU09MSUQ6Ci0gICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAg
ICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29s
b3JTcGFjZSgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tu
ZXNzKHRoaWNrbmVzcyk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJ
bnRSZWN0KHgsIHksIHJhZGl1cy53aWR0aCgpICogMiwgcmFkaXVzLmhlaWdodCgpICogMiksIGFu
Z2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgLy8gUGFp
bnQgaW5uZXIgb25seQorICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVkUmVjdENsaXAoaGFsZkJvcmRlclJlY3QsIHRvcExl
ZnRIYWxmUmFkaXVzLCB0b3BSaWdodEhhbGZSYWRpdXMsCisgICAgICAgICAgICBib3R0b21MZWZ0
SGFsZlJhZGl1cywgYm90dG9tUmlnaHRIYWxmUmFkaXVzKTsKKyAgICAgICAgZHJhd0JveFNpZGVG
cm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVz
cywgZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIHMyKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBjYXNlIElOU0VU
OgorICAgICAgICBpZiAocyA9PSBCU1RvcCB8fCBzID09IEJTTGVmdCkKKyAgICAgICAgICAgIGMg
PSBjLmRhcmsoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPVVRTRVQ6CisgICAgICAgIGlm
IChzID09IEJTQm90dG9tIHx8IHMgPT0gQlNSaWdodCkKKyAgICAgICAgICAgIGMgPSBjLmRhcmso
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHlsZShOb1N0cm9rZSk7CisgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zZXRGaWxsQ29sb3IoYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7CisgICAg
Z3JhcGhpY3NDb250ZXh0LT5kcmF3UmVjdChib3JkZXJSZWN0KTsKIH0KIAogdm9pZCBSZW5kZXJP
YmplY3Q6OmFkZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDYxNTQ1
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQzNSw4ICs0MzUsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3TGluZUZvckJveFNpZGUo
R3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50IHkyLCBCb3hTaWRl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLCBFQm9yZGVyU3R5bGUsIGludCBh
ZGpidzEsIGludCBhZGpidzIpOwotICAgIHZvaWQgZHJhd0FyY0ZvckJveFNpZGUoR3JhcGhpY3ND
b250ZXh0KiwgaW50IHgsIGludCB5LCBmbG9hdCB0aGlja25lc3MsIEludFNpemUgcmFkaXVzLCBp
bnQgYW5nbGVTdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbmdsZVNwYW4s
IEJveFNpZGUsIENvbG9yLCBFQm9yZGVyU3R5bGUsIGJvb2wgZmlyc3RDb3JuZXIpOworICAgIHZv
aWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0LCBQYXRoLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRyYXdU
aGlja25lc3MsIEJveFNpZGUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ29sb3IgYywgRUJvcmRlclN0eWxlIHN0eWxlKTsKKworICAgIElu
dFJlY3QgYm9yZGVySW5uZXJSZWN0KGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCBzaG9ydCB0b3BX
aWR0aCwgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgc2hvcnQgbGVmdFdpZHRoLCB1bnNpZ25lZCBzaG9ydCByaWdodFdpZHRo
KSBjb25zdDsKIAogICAgIC8vIFRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZSBjYW4gYmUgY2FjaGVk
IG9yIHVuY2FjaGVkLiAgVXNlIHRoZSBjYWNoZWQgbWV0aG9kIGlmIHRoZSBwc2V1ZG8gZWxlbWVu
dCBkb2Vzbid0IHJlc3BlY3QKICAgICAvLyBhbnkgcHNldWRvIGNsYXNzZXMgKGFuZCB0aGVyZWZv
cmUgaGFzIG5vIGNvbmNlcHQgb2YgY2hhbmdpbmcgc3RhdGUpLgpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNywxNCAr
NzM3LDggQEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KFNoYWRvd0RhdAogICAgIHJh
cmVEYXRhLT5tX2JveFNoYWRvdy5zZXQoc2hhZG93RGF0YSk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5
bGU6OmdldEJvcmRlclJhZGlpRm9yUmVjdChjb25zdCBJbnRSZWN0JiByLCBJbnRTaXplJiB0b3BM
ZWZ0LCBJbnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90
dG9tUmlnaHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb25zdHJhaW5Db3JuZXJSYWRpaUZvclJlY3Qo
Y29uc3QgSW50UmVjdCYgciwgSW50U2l6ZSYgdG9wTGVmdCwgSW50U2l6ZSYgdG9wUmlnaHQsIElu
dFNpemUmIGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0KQogewotICAgIHRvcExlZnQg
PSBzdXJyb3VuZC0+Ym9yZGVyLnRvcExlZnQoKTsKLSAgICB0b3BSaWdodCA9IHN1cnJvdW5kLT5i
b3JkZXIudG9wUmlnaHQoKTsKLSAgICAKLSAgICBib3R0b21MZWZ0ID0gc3Vycm91bmQtPmJvcmRl
ci5ib3R0b21MZWZ0KCk7Ci0gICAgYm90dG9tUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRv
bVJpZ2h0KCk7Ci0KICAgICAvLyBDb25zdHJhaW4gY29ybmVyIHJhZGlpIHVzaW5nIENTUzMgcnVs
ZXM6CiAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYm9y
ZGVyLXJhZGl1cwogICAgIApAQCAtNzg5LDYgKzc4MywzOSBAQCB2b2lkIFJlbmRlclN0eWxlOjpn
ZXRCb3JkZXJSYWRpaUZvclJlY3QoCiAgICAgfQogfQogCit2b2lkIFJlbmRlclN0eWxlOjpnZXRC
b3JkZXJSYWRpaUZvclJlY3QoY29uc3QgSW50UmVjdCYgciwgSW50U2l6ZSYgdG9wTGVmdCwgSW50
U2l6ZSYgdG9wUmlnaHQsIEludFNpemUmIGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0
KSBjb25zdAoreworICAgIHRvcExlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRvcExlZnQoKTsKKyAg
ICB0b3BSaWdodCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wUmlnaHQoKTsKKyAgICAKKyAgICBib3R0
b21MZWZ0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0b21MZWZ0KCk7CisgICAgYm90dG9tUmlnaHQg
PSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0KCk7CisKKyAgICBjb25zdHJhaW5Db3JuZXJS
YWRpaUZvclJlY3QociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0
KTsKK30KKwordm9pZCBSZW5kZXJTdHlsZTo6Z2V0SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRo
Qm9yZGVyV2lkdGhzKGNvbnN0IEludFJlY3QmIGlubmVyUmVjdCwgdW5zaWduZWQgc2hvcnQgdG9w
V2lkdGgsIHVuc2lnbmVkIHNob3J0IGJvdHRvbVdpZHRoLCB1bnNpZ25lZCBzaG9ydCBsZWZ0V2lk
dGgsIHVuc2lnbmVkIHNob3J0IHJpZ2h0V2lkdGgsIEludFNpemUmIGlubmVyVG9wTGVmdCwgSW50
U2l6ZSYgaW5uZXJUb3BSaWdodCwgSW50U2l6ZSYgaW5uZXJCb3R0b21MZWZ0LCBJbnRTaXplJiBp
bm5lckJvdHRvbVJpZ2h0KSBjb25zdAoreworICAgIGlubmVyVG9wTGVmdCA9IHN1cnJvdW5kLT5i
b3JkZXIudG9wTGVmdCgpOworICAgIGlubmVyVG9wUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRv
cFJpZ2h0KCk7CisgICAgaW5uZXJCb3R0b21MZWZ0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0b21M
ZWZ0KCk7CisgICAgaW5uZXJCb3R0b21SaWdodCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tUmln
aHQoKTsKKworICAgIGlubmVyVG9wTGVmdC5zZXRXaWR0aChtYXgoMCwgaW5uZXJUb3BMZWZ0Lndp
ZHRoKCkgLSBsZWZ0V2lkdGgpKTsKKyAgICBpbm5lclRvcExlZnQuc2V0SGVpZ2h0KG1heCgwLCBp
bm5lclRvcExlZnQuaGVpZ2h0KCkgLSB0b3BXaWR0aCkpOworCisgICAgaW5uZXJUb3BSaWdodC5z
ZXRXaWR0aChtYXgoMCwgaW5uZXJUb3BSaWdodC53aWR0aCgpIC0gcmlnaHRXaWR0aCkpOworICAg
IGlubmVyVG9wUmlnaHQuc2V0SGVpZ2h0KG1heCgwLCBpbm5lclRvcFJpZ2h0LmhlaWdodCgpIC0g
dG9wV2lkdGgpKTsKKworICAgIGlubmVyQm90dG9tTGVmdC5zZXRXaWR0aChtYXgoMCwgaW5uZXJC
b3R0b21MZWZ0LndpZHRoKCkgLSBsZWZ0V2lkdGgpKTsKKyAgICBpbm5lckJvdHRvbUxlZnQuc2V0
SGVpZ2h0KG1heCgwLCBpbm5lckJvdHRvbUxlZnQuaGVpZ2h0KCkgLSBib3R0b21XaWR0aCkpOwor
CisgICAgaW5uZXJCb3R0b21SaWdodC5zZXRXaWR0aChtYXgoMCwgaW5uZXJCb3R0b21SaWdodC53
aWR0aCgpIC0gcmlnaHRXaWR0aCkpOworICAgIGlubmVyQm90dG9tUmlnaHQuc2V0SGVpZ2h0KG1h
eCgwLCBpbm5lckJvdHRvbVJpZ2h0LmhlaWdodCgpIC0gYm90dG9tV2lkdGgpKTsKKworICAgIGNv
bnN0cmFpbkNvcm5lclJhZGlpRm9yUmVjdChpbm5lclJlY3QsIGlubmVyVG9wTGVmdCwgaW5uZXJU
b3BSaWdodCwgaW5uZXJCb3R0b21MZWZ0LCBpbm5lckJvdHRvbVJpZ2h0KTsKK30KKwogY29uc3Qg
Q291bnRlckRpcmVjdGl2ZU1hcCogUmVuZGVyU3R5bGU6OmNvdW50ZXJEaXJlY3RpdmVzKCkgY29u
c3QKIHsKICAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVjdGl2
ZXMuZ2V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlz
aW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtNzg3LDYgKzc4NywxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAg
IHZvaWQgZ2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGNvbnN0IEludFJlY3QmLCBJbnRTaXplJiB0b3BM
ZWZ0LCBJbnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90
dG9tUmlnaHQpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRo
Qm9yZGVyV2lkdGhzKGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCBzaG9ydCB0b3BXaWR0aCwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgsIHVu
c2lnbmVkIHNob3J0IGxlZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSYgaW5uZXJUb3BMZWZ0LCBJbnRTaXplJiBp
bm5lclRvcFJpZ2h0LCBJbnRTaXplJiBpbm5lckJvdHRvbUxlZnQsIAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFNpemUmIGlubmVyQm90dG9tUmlnaHQpIGNvbnN0OwogCiAgICAgdm9p
ZCBzZXRCb3JkZXJMZWZ0V2lkdGgodW5zaWduZWQgc2hvcnQgdikgeyBTRVRfVkFSKHN1cnJvdW5k
LCBib3JkZXIubV9sZWZ0Lm1fd2lkdGgsIHYpIH0KICAgICB2b2lkIHNldEJvcmRlckxlZnRTdHls
ZShFQm9yZGVyU3R5bGUgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9sZWZ0Lm1fc3R5
bGUsIHYpIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxNjE4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDYtMjIgIEJldGggRGFr
aW4gIDxiZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRlc3RzIHdpdGggbmV3IHJlc3VsdHMgYWZ0ZXIgCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTk3IENTUzM6IEJvcmRlcnMg
CisgICAgICAgIHdpdGggYm9yZGVyLXJhZGl1cyBhbmQgZG91YmxlLCBncm9vdmUsIG9yIHJpZGdl
IHN0eWxlcyBzaG91bGQgbG9vayAKKyAgICAgICAgYmV0dGVyCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5lcnMtZXhwZWN0
ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJS
YWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9y
bS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLmNoZWNrc3Vt
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVk
MDEtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9y
ZGVyUmFkaXVzRGFzaGVkMDItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3RlZC5wbmc6CisgICAg
ICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMy1leHBl
Y3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRl
clJhZGl1c0Rhc2hlZDAzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFz
dC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAg
ICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDEtZXhwZWN0
ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVz
RG90dGVkMDItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3Qv
Ym9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxh
dGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5jaGVj
a3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rv
dHRlZDAzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJz
L2JvcmRlclJhZGl1c0RvdWJsZTAxLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRm
b3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQucG5nOgor
CiAyMDEwLTA2LTIyICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5lcnMtZXhw
ZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zh
c3QvYm9yZGVycy9ib3JkZXJSYWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLmNoZWNr
c3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2Jv
cmRlcnMvYm9yZGVyUmFkaXVzQWxsU3R5bGVzQWxsQ29ybmVycy1leHBlY3RlZC5jaGVja3N1bQko
d29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNTE3ZjMzMjRjMDc2NGZiODI3MTZhNTQxMzU5NTYz
MDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCithNTllZTAyMmE2ZTQ2YmQxMzllY2Q4ZjYz
ZDFmYTExNQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDEtZXhwZWN0ZWQuY2hl
Y2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVy
cy9ib3JkZXJSYWRpdXNEYXNoZWQwMS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUp
CisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rh
c2hlZDAxLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi00N2Vk
MmUzM2UwM2Q2MTgwNTY2NWFhNGU1YWE4ODZjZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
KzU5YjFjZjg1MDgyMzlhYjZhODcwODE4YjNhMWYzNDE0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJS
YWRpdXNEYXNoZWQwMi1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAyLWV4cGVjdGVk
LmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDItZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtp
bmcgY29weSkKQEAgLTEgKzEgQEAKLWE1Y2ZhM2UyOTBlNWNhZTA0NjNhN2M0MjU4ZTZlOThlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMWRhNzI3NWYzM2Q2NTBlYjJlNzYwMmI2N2E5Yjdj
ZDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAzLWV4cGVjdGVkLmNoZWNrc3Vt
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9y
ZGVyUmFkaXVzRGFzaGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1KQorKysg
TGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQw
My1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNDgwY2EwM2Yy
ODQyZjQ2M2NkMjFjN2I1ODMyYWMyOGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitlYzc2
MTYxNjE0MDIyMGFiYmZhZmNiMzA3M2JkZDE0ZApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVz
RG90dGVkMDEtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMS1leHBlY3RlZC5jaGVj
a3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9i
b3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNv
cHkpCkBAIC0xICsxIEBACi0xNmY0NjVmNzFmZjBkN2E2NDRjYmM4ZmE3ODdhYWEyYQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKKzQxZGVlODhmOWI2MzBkMzgzY2IxNDE1YjZiNzc0ZDk3Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5jaGVja3N1bQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJh
ZGl1c0RvdHRlZDAyLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDItZXhw
ZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTM5MWU1MzIxMDM2ZTE0
ZTQ5MmUwYjk5MTMwYWQzNTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZTU3MjExZjdk
NDMzMWY2NWMyZTM0NjMwOTQ4NWNmNjAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRl
ZDAzLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW0J
KHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVy
cy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpA
QCAtMSArMSBAQAotYzEwODA4OTczMmM2YjU3NjdhNTgxNmU3YTkzMTUzODMKXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCis4NTViMTgwOTdmNjg1NWQ0NGM4NzViY2ZlM2NjMmEyZApcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNE
b3VibGUwMS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdWJsZTAxLWV4cGVjdGVk
LmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi02YTg5Y2RlNmZiZWI4ZTVjY2M1
MzYzNDE2ZjZmNDQ5MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2ViZTk5ZDY5MGU1ZmJh
YjYyNWY5OWE3N2YyZGFkZTZiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNBbGxTdHlsZXNB
bGxDb3JuZXJzLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1h
cmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59473</attachid>
            <date>2010-06-22 21:43:28 -0700</date>
            <delta_ts>2010-06-23 10:32:49 -0700</delta_ts>
            <desc>New version of the patch</desc>
            <filename>forReview2.txt</filename>
            <type>text/plain</type>
            <size>62881</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDYtMjIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTcgQ1NTMzogQm9y
ZGVycyAKKyAgICAgICAgd2l0aCBib3JkZXItcmFkaXVzIGFuZCBkb3VibGUsIGdyb292ZSwgb3Ig
cmlkZ2Ugc3R5bGVzIHNob3VsZCBsb29rIAorICAgICAgICBiZXR0ZXIKKworICAgICAgICBUaGlz
IHBhdGNoIHJlLXdvcmtzIGJvcmRlciByYWRpdXMgcGFpbnRpbmcgdG8gc3Ryb2tlIHBhdGhzIGlu
c3RlYWQgCisgICAgICAgIG9mIGFyY3MuIAorCisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbiBj
bGlwQ29udmV4UG9seWdvbigpLiBBZGRlZCBzdGF0aWMgCisgICAgICAgIGFkZENvbnZleFBvbHln
b25Ub0NvbnRleHQgc28gdGhhdCBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAg
ZHJhd0NvbnZleFBvbHlnb24oKSBhbmQgY2xpcENvbnZleFBvbHlnb24oKS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRD
b252ZXhQb2x5Z29uVG9Db250ZXh0KToKKworICAgICAgICBTaGVsbHMgb2YgaW1wbGVtZW50YXRp
b25zIG9uIG5vbi1DRyBwbGF0Zm9ybXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwQ29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKworICAgICAgICBUaGlzIG5ldyBoZWxwZXIgZnVu
Y3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgaW5uZXIgY29ybmVycyBvZiB0aGUgCisgICAgICAgIGJv
cmRlciB3aWxsIGFyY2ggaW4gb3IgbWVldCBhdCBhIHJpZ2h0IGFuZ2xlLiAgCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlcldpbGxBcmNJbm5lckVkZ2UpOgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmUtd3Jp
dHRlbiBzbyB0aGF0LCBmb3IgZWFjaCBzaWRlIG9mIHRoZSBib3JkZXIsIAorICAgICAgICBpZiBi
b3JkZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgdHJ1ZSwgd2UgZ28gZG93biBhIGJyYW5kIG5ldyBj
b2RlIAorICAgICAgICBwYXRoIG9mIGNsaXBwaW5nIHRvIGEgY29udmV4IHBvbHlnb24gZm9yIHRo
ZSBib3JkZXIgc2lkZSBhbmQgdGhlbiAKKyAgICAgICAgd2UgcGFpbnQgdGhlIHNpZGUgdXNpbmcg
dGhlIG5ldyBmdW5jdGlvbiBkcmF3Qm94U2lkZUZyb21QYXRoKCkuIElmIAorICAgICAgICBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgZmFsc2UsIHRoZW4gd2UgY2FsbCBpbnRvIHRoZSBvbGQg
CisgICAgICAgIGZhbWlsaWFyIGRyYXdMaW5lRm9yQm94U2lkZSgpIHdoaWNoIHJlbGllcyBvbiB0
aGUgcm91bmRlciBjbGlwIAorICAgICAgICByZWN0cyB3ZSBoYXZlIHNldCB1cCB0byBhcmNoIHRo
ZSBvdXRlciBlZGdlIG9mIHRoZSBib3JkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIGRv
ZXMgdGhlIG1hdGggdG8gZmlndXJlIG91dCB0aGF3IGNvbnZleCBwb2x5Z29uIAorICAgICAgICB0
byBjbGlwIHRvIGluIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gYXJjaCB0aGUgaW5uZXIgZWRn
ZSBvZiB0aGUgCisgICAgICAgIGJvcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorCisgICAgICAgIGJvcmRlcklubmVyUmVjdCBpcyBhIG5l
dyBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSAKKyAgICAgICAgUmVuZGVyT2JqZWN0
IGFuZCBSZW5kZXJCb3hNb2RlbE9iamVjdCB0byBkZXRlcm1pbmUgdGhlIHJlY3Qgb2YgdGhlIAor
ICAgICAgICBpbnNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpib3JkZXJJ
bm5lclJlY3QpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIHJlLXdvcmtzIGRyYXdBcmNG
b3JCb3hTaWRlIHRvIGRyYXcgZnJvbSBQYXRocyAKKyAgICAgICAgd2hlbiBhcHByb3ByaWF0ZSBp
bnN0ZWFkIG9mIHN0cm9raW5nIGFyY3MuIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisKKyAgICAgICAgTmV3IGZ1bmN0aW9uIAorICAgICAgICBSZW5kZXJTdHlsZTo6Z2V0SW5u
ZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKCkgZ2V0cyB0aGUgCisgICAgICAg
IGlubmVyIHJhZGl1cyB2YWx1ZXMgZm9yIGEgcmVjdC4gSXQgdGFrZXMgYm9yZGVyIHdpZHRocyBh
IHBhcmFtZXRlcnMgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBzdHlsZSdzIGJvcmRl
ciB3aWR0aHMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCAKKyAgICAgICAgaW4gaW5uZXIgcmFkaXVz
IGNhbGN1bGF0aW9ucyBmb3IgZG91YmxlIGFuZCBncm9vdmUvcmlkZ2UgCisgICAgICAgIGNhbGN1
bGF0aW9ucy4gVGhlIFczQyBjb3JuZXIgY29uc3RyYWluaW5nIHJ1bGVzIHdlcmUgbW92ZWQgdG8g
YSAKKyAgICAgICAgc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGJvdGgg
Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0CisgICAgICAgICgpIGFuZCBnZXRJbm5lckJvcmRlclJhZGlp
Rm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RyYWluQ29ybmVyUmFkaWlGb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRCb3JkZXJSYWRpaUZvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldElubmVyQm9yZGVyUmFkaWlG
b3JSZWN0V2l0aEJvcmRlcldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisKIDIwMTAtMDYtMjIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDYxNTQ1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDYgKzIzOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlw
T3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCk7CiAgICAgICAgIHZvaWQgY2xpcFBhdGgoV2luZFJ1bGUpOwog
ICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlQnVmZmVyKik7CisgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCopOwogCiAgICAgICAgIGludCB0ZXh0RHJhd2luZ01vZGUo
KTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50KTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0
LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG5wb2ludHMg
PD0gMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhCit9
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
R3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
NDAsNiArNDQwLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMoY29uc3QgSW4K
ICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCitzdGF0aWMgdm9pZCBh
ZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KENHQ29udGV4dFJlZiBjb250ZXh0LCBzaXplX3QgbnBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIENHQ29udGV4dEJlZ2luUGF0
aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2ludHNbMF0u
eCgpLCBwb2ludHNbMF0ueSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG5wb2ludHM7
IGkrKykKKyAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ld
LngoKSwgcG9pbnRzW2ldLnkoKSk7CisgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2lu
dHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cywgYm9vbCBhbnRpYWxpYXNlZCkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNDUzLDE4ICs0NjIsMjUgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGlmIChhbnRpYWxpYXNlZCAhPSBzaG91
bGRBbnRpYWxpYXMoKSkKICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRl
eHQsIGFudGlhbGlhc2VkKTsKIAotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAg
ICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2ludHNbMF0ueCgpLCBwb2ludHNbMF0u
eSgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG5wb2ludHM7IGkrKykKLSAgICAgICAg
Q0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ld
LnkoKSk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwotCisgICAgYWRkQ29udmV4
UG9seWdvblRvQ29udGV4dChjb250ZXh0LCBucG9pbnRzLCBwb2ludHMpOwogICAgIGRyYXdQYXRo
KCk7CiAKICAgICBpZiAoYW50aWFsaWFzZWQgIT0gc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAg
IENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBzaG91bGRBbnRpYWxpYXMoKSk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChucG9pbnRzIDw9IDEpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KHBsYXRmb3JtQ29u
dGV4dCgpLCBucG9pbnRzLCBwb2ludHMpOworICAgIGNsaXBQYXRoKFJVTEVfTk9OWkVSTyk7Cit9
CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oKQogewogICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFpa3UvR3JhcGhpY3NDb250ZXh0SGFp
a3UuY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFp
a3UvR3JhcGhpY3NDb250ZXh0SGFpa3UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNiArMTUy
LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICAgICAg
bV9kYXRhLT5tX3ZpZXctPlN0cm9rZVBvbHlnb24oYlBvaW50cywgcG9pbnRzTGVuZ3RoLCB0cnVl
LCBnZXRIYWlrdVN0cm9rZVN0eWxlKCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cENvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobnBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IElN
UExFTUVOVCEhCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAkocmV2aXNpb24gNjE1NDUp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTI4LDYgKzUyOCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgcC0+cmVzdG9yZSgpOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobnBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gRklYTUU6IElNUExFTUVOVCEhCit9CisKIFFQZW4gR3JhcGhpY3NDb250ZXh0OjpwZW4oKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lv
biA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDc4LDYgKzQ3OCwxNyBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgfQogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9p
bnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAobnBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
Ly8gRklYTUU6IElNUExFTUVOVCEhCit9CisKIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgdXNlZCB0
byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGVsaXBzZVJlY3QpCiB7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0dyYXBoaWNzQ29u
dGV4dFdpbmNlLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbmNlL0dyYXBoaWNzQ29udGV4dFdpbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQ4
LDYgKzk0OCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAg
ICAgfQogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90
IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnBvaW50cyA8PSAxKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IElNUExFTUVOVCEhCit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENv
bG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFjaXR5KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDYxNTQ1
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsyNTYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGRlbGV0ZSBbXSBwb2x5Z29uOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZs
b2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAobnBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBGSVhNRTogSU1QTEVNRU5UISEKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAJKHJldmlzaW9uIDYxNTQ1KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBhdGgu
aCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgog
I2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCkBAIC05MDksMTIgKzkxMCwyNCBAQCBib29sIFJlbmRl
ckJveE1vZGVsT2JqZWN0OjpwYWludE5pbmVQaWVjCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK3N0
YXRpYyBib29sIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoSW50U2l6ZSBmaXJzdFJhZGl1cywgSW50
U2l6ZSBzZWNvbmRSYWRpdXMsIGludCBmaXJzdEJvcmRlcldpZHRoLCBpbnQgc2Vjb25kQm9yZGVy
V2lkdGgsIGludCBtaWRkbGVCb3JkZXJXaWR0aCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB0ZXN0
IGlzIGluc3VmZmljaWVudC4gV2UgbmVlZCB0byB0YWtlIGJvcmRlciBzdHlsZSBpbnRvIGFjY291
bnQuCisgICAgcmV0dXJuIChmaXJzdFJhZGl1cy53aWR0aCgpID09IDAgfHwgZmlyc3RSYWRpdXMu
d2lkdGgoKSA+PSBmaXJzdEJvcmRlcldpZHRoKQorICAgICAgICAgICAgJiYgKGZpcnN0UmFkaXVz
LmhlaWdodCgpID09IDAgfHwgZmlyc3RSYWRpdXMuaGVpZ2h0KCkgPj0gbWlkZGxlQm9yZGVyV2lk
dGgpCisgICAgICAgICAgICAmJiAoc2Vjb25kUmFkaXVzLndpZHRoKCkgPT0gMCB8fCBzZWNvbmRS
YWRpdXMud2lkdGgoKSA+PSBzZWNvbmRCb3JkZXJXaWR0aCkKKyAgICAgICAgICAgICYmIChzZWNv
bmRSYWRpdXMuaGVpZ2h0KCkgPT0gMCB8fCBzZWNvbmRSYWRpdXMuaGVpZ2h0KCkgPj0gbWlkZGxl
Qm9yZGVyV2lkdGgpOworfQorCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRl
cihHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHksIGludCB3
LCBpbnQgaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBzdHlsZSwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpCiB7CiAgICAgaWYgKHBhaW50
TmluZVBpZWNlSW1hZ2UoZ3JhcGhpY3NDb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlLCBzdHls
ZS0+Ym9yZGVySW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChncmFwaGljc0Nv
bnRleHQtPnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgY29uc3Qg
Q29sb3ImIHRvcENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yKTsKICAgICBjb25zdCBDb2xvciYgYm90dG9tQ29sb3IgPSBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpOwogICAg
IGNvbnN0IENvbG9yJiBsZWZ0Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKTsKQEAgLTkzNiwxNCArOTQ5LDIyIEBAIHZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEcKICAgICBib29sIHJlbmRlckJvdHRvbSA9
IGJvdHRvbVN0eWxlID4gQkhJRERFTiAmJiAhYm90dG9tVHJhbnNwYXJlbnQ7CiAKICAgICBib29s
IHJlbmRlclJhZGlpID0gZmFsc2U7CisgICAgUGF0aCByb3VuZGVkUGF0aDsKICAgICBJbnRTaXpl
IHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodDsKKyAgICBJbnRSZWN0
IGJvcmRlclJlY3QgPSBJbnRSZWN0KHR4LCB0eSwgdywgaCk7CiAKICAgICBpZiAoc3R5bGUtPmhh
c0JvcmRlclJhZGl1cygpKSB7Ci0gICAgICAgIEludFJlY3QgYm9yZGVyUmVjdCA9IEludFJlY3Qo
dHgsIHR5LCB3LCBoKTsKLQogICAgICAgICBJbnRTaXplIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0
UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0b21SaWdodFJhZGl1czsKICAgICAgICAgc3R5
bGUtPmdldEJvcmRlclJhZGlpRm9yUmVjdChib3JkZXJSZWN0LCB0b3BMZWZ0UmFkaXVzLCB0b3BS
aWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmlnaHRSYWRpdXMpOwogCisgICAg
ICAgIEludFJlY3QgaW5uZXJCb3JkZXJSZWN0ID0gYm9yZGVySW5uZXJSZWN0KGJvcmRlclJlY3Qs
IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgCisg
ICAgICAgICAgICBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdp
ZHRoKCkpOworCisgICAgICAgIEludFNpemUgaW5uZXJUb3BMZWZ0UmFkaXVzLCBpbm5lclRvcFJp
Z2h0UmFkaXVzLCBpbm5lckJvdHRvbUxlZnRSYWRpdXMsIGlubmVyQm90dG9tUmlnaHRSYWRpdXM7
CisgICAgICAgIHN0eWxlLT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0
aHMoaW5uZXJCb3JkZXJSZWN0LCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRl
ckJvdHRvbVdpZHRoKCksIAorICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBz
dHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBpbm5lclRvcExlZnRSYWRpdXMsIGlubmVyVG9wUmln
aHRSYWRpdXMsIAorICAgICAgICAgICAgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBpbm5lckJvdHRv
bVJpZ2h0UmFkaXVzKTsKKwogICAgICAgICBpZiAoYmVnaW4pIHsKICAgICAgICAgICAgIHRvcExl
ZnQgPSB0b3BMZWZ0UmFkaXVzOwogICAgICAgICAgICAgYm90dG9tTGVmdCA9IGJvdHRvbUxlZnRS
YWRpdXM7CkBAIC05NTUsMzAyICs5NzYsMTAzIEBAIHZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6
OnBhaW50Qm9yZGVyKEcKIAogICAgICAgICByZW5kZXJSYWRpaSA9IHRydWU7CiAKLSAgICAgICAg
Ly8gQ2xpcCB0byB0aGUgcm91bmRlZCByZWN0YW5nbGUuCisgICAgICAgIC8vIENsaXAgdG8gdGhl
IGlubmVyIGFuZCBvdXRlciByYWRpaSByZWN0cy4KICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
YXZlKCk7CiAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUm91bmRlZFJlY3RDbGlwKGJvcmRl
clJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7Ci0gICAg
fQorICAgICAgICBncmFwaGljc0NvbnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChpbm5lckJvcmRl
clJlY3QsIGlubmVyVG9wTGVmdFJhZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0
b21MZWZ0UmFkaXVzLCBpbm5lckJvdHRvbVJpZ2h0UmFkaXVzKTsKIAotICAgIGludCBmaXJzdEFu
Z2xlU3RhcnQsIHNlY29uZEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLCBzZWNvbmRBbmdsZVNw
YW47Ci0gICAgZmxvYXQgdGhpY2tuZXNzOwotICAgIGJvb2wgdXBwZXJMZWZ0Qm9yZGVyU3R5bGVz
TWF0Y2ggPSByZW5kZXJMZWZ0ICYmICh0b3BTdHlsZSA9PSBsZWZ0U3R5bGUpICYmICh0b3BDb2xv
ciA9PSBsZWZ0Q29sb3IpOwotICAgIGJvb2wgdXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoID0g
cmVuZGVyUmlnaHQgJiYgKHRvcFN0eWxlID09IHJpZ2h0U3R5bGUpICYmICh0b3BDb2xvciA9PSBy
aWdodENvbG9yKSAmJiAodG9wU3R5bGUgIT0gT1VUU0VUKSAmJiAodG9wU3R5bGUgIT0gUklER0Up
ICYmICh0b3BTdHlsZSAhPSBJTlNFVCkgJiYgKHRvcFN0eWxlICE9IEdST09WRSk7Ci0gICAgYm9v
bCBsb3dlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlckxlZnQgJiYgKGJvdHRvbVN0eWxl
ID09IGxlZnRTdHlsZSkgJiYgKGJvdHRvbUNvbG9yID09IGxlZnRDb2xvcikgJiYgKGJvdHRvbVN0
eWxlICE9IE9VVFNFVCkgJiYgKGJvdHRvbVN0eWxlICE9IFJJREdFKSAmJiAoYm90dG9tU3R5bGUg
IT0gSU5TRVQpICYmIChib3R0b21TdHlsZSAhPSBHUk9PVkUpOwotICAgIGJvb2wgbG93ZXJSaWdo
dEJvcmRlclN0eWxlc01hdGNoID0gcmVuZGVyUmlnaHQgJiYgKGJvdHRvbVN0eWxlID09IHJpZ2h0
U3R5bGUpICYmIChib3R0b21Db2xvciA9PSByaWdodENvbG9yKTsKKyAgICAgICAgcm91bmRlZFBh
dGggPSBQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGJvcmRlclJlY3QsIHRvcExlZnQsIHRv
cFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+YWRkUGF0aChyb3VuZGVkUGF0aCk7CisgICAgfQogCiAgICAgaWYgKHJlbmRlclRvcCkgewot
ICAgICAgICBib29sIGlnbm9yZV9sZWZ0ID0gKHJlbmRlclJhZGlpICYmIHRvcExlZnQud2lkdGgo
KSA+IDApIHx8Ci0gICAgICAgICAgICAodG9wQ29sb3IgPT0gbGVmdENvbG9yICYmIHRvcFRyYW5z
cGFyZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiB0b3BTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAg
ICAgICAgICAobGVmdFN0eWxlID09IERPVFRFRCB8fCBsZWZ0U3R5bGUgPT0gREFTSEVEIHx8IGxl
ZnRTdHlsZSA9PSBTT0xJRCB8fCBsZWZ0U3R5bGUgPT0gT1VUU0VUKSk7Ci0KLSAgICAgICAgYm9v
bCBpZ25vcmVfcmlnaHQgPSAocmVuZGVyUmFkaWkgJiYgdG9wUmlnaHQud2lkdGgoKSA+IDApIHx8
Ci0gICAgICAgICAgICAodG9wQ29sb3IgPT0gcmlnaHRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9
PSByaWdodFRyYW5zcGFyZW50ICYmIHRvcFN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAg
IChyaWdodFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCByaWdodFN0
eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpKTsKLQogICAgICAgICBpbnQgeCA9
IHR4OwogICAgICAgICBpbnQgeDIgPSB0eCArIHc7Ci0gICAgICAgIGlmIChyZW5kZXJSYWRpaSkg
ewotICAgICAgICAgICAgeCArPSB0b3BMZWZ0LndpZHRoKCk7Ci0gICAgICAgICAgICB4MiAtPSB0
b3BSaWdodC53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwgeCwgdHksIHgyLCB0eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LCBCU1RvcCwgdG9wQ29sb3IsIHRvcFN0eWxlLAotICAgICAgICAgICAgICAgICAgIGlnbm9yZV9s
ZWZ0ID8gMCA6IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgaWdub3JlX3JpZ2h0ID8gMCA6IHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotCi0gICAgICAgIGlmIChyZW5kZXJSYWRpaSkgewot
ICAgICAgICAgICAgaW50IGxlZnRZID0gdHk7Ci0KLSAgICAgICAgICAgIC8vIFdlIG1ha2UgdGhl
IGFyYyBkb3VibGUgdGhpY2sgYW5kIGxldCB0aGUgY2xpcCByZWN0IHRha2UgY2FyZSBvZiBjbGlw
cGluZyB0aGUgZXh0cmEgb2ZmLgotICAgICAgICAgICAgLy8gV2UncmUgZG9pbmcgdGhpcyBiZWNh
dXNlIGl0IGRvZXNuJ3Qgc2VlbSBwb3NzaWJsZSB0byBtYXRjaCB0aGUgY3VydmUgb2YgdGhlIGNs
aXAgZXhhY3RseQotICAgICAgICAgICAgLy8gd2l0aCB0aGUgYXJjLWRyYXdpbmcgZnVuY3Rpb24u
Ci0gICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAqIDI7Ci0K
LSAgICAgICAgICAgIGlmICh0b3BMZWZ0LndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQg
bGVmdFggPSB0eDsKLSAgICAgICAgICAgICAgICAvLyBUaGUgaW5uZXIgY2xpcCBjbGlwcyBpbnNp
ZGUgdGhlIGFyYy4gVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IgMXB4IGJvcmRlcnMu
Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUxlZnRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRl
ckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAo
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCB0b3BMZWZ0LmhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICAmJiAodG9wU3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
ID4gNik7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkgewotICAgICAg
ICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KGxlZnRY
LCBsZWZ0WSwgdG9wTGVmdC53aWR0aCgpICogMiwgdG9wTGVmdC5oZWlnaHQoKSAqIDIpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSA5MDsKLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xl
U3BhbiA9IHVwcGVyTGVmdEJvcmRlclN0eWxlc01hdGNoID8gOTAgOiA0NTsKLQotICAgICAgICAg
ICAgICAgIC8vIERyYXcgdXBwZXIgbGVmdCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3QXJjRm9y
Qm94U2lkZShncmFwaGljc0NvbnRleHQsIGxlZnRYLCBsZWZ0WSwgdGhpY2tuZXNzLCB0b3BMZWZ0
LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICh0b3BS
aWdodC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJpZ2h0WCA9IHR4ICsgdyAtIHRv
cFJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlSaWdodElubmVy
Q2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgdG9wUmlnaHQud2lkdGgoKSkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9wUmlnaHQu
aGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmICh0b3BTdHlsZSAhPSBET1VCTEUgfHwg
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlS
aWdodElubmVyQ2xpcCkgewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNh
dmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5k
ZWRSZWN0Q2xpcChJbnRSZWN0KHJpZ2h0WCwgbGVmdFksIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0
b3BSaWdodC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKTsKLSAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAodXBwZXJSaWdodEJvcmRlclN0
eWxlc01hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAwOwot
ICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4gPSA5MDsKLSAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0YXJ0ID0gNDU7Ci0g
ICAgICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3BhbiA9IDQ1OwotICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UodG9w
TGVmdCwgdG9wUmlnaHQsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpKSB7CisgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGNsaXBCb3JkZXJTaWRlUG9seWdvbihn
cmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCwgQlNUb3AsIHN0eWxlKTsKKyAgICAgICAgICAgIGZsb2F0IHRoaWNrbmVz
cyA9IG1heChtYXgoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICAgICAgZHJhd0JveFNp
ZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHJvdW5kZWRQYXRoLCBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSwgdGhpY2tuZXNzLCBCU1RvcCwgc3R5bGUsIHRvcENvbG9yLCB0
b3BTdHlsZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlTGVmdCA9ICh0b3BDb2xvciA9PSBs
ZWZ0Q29sb3IgJiYgdG9wVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYmIHRvcFN0eWxl
ID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmIChsZWZ0U3R5bGUgPT0gRE9UVEVEIHx8IGxl
ZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVmdFN0eWxlID09IFNPTElEIHx8IGxlZnRTdHlsZSA9PSBP
VVRTRVQpKTsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlUmlnaHQgPSAodG9wQ29sb3IgPT0gcmln
aHRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50ICYmIHRvcFN0eWxl
ID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmIChyaWdodFN0eWxlID09IERPVFRFRCB8fCBy
aWdodFN0eWxlID09IERBU0hFRCB8fCByaWdodFN0eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUg
PT0gSU5TRVQpKTsKIAotICAgICAgICAgICAgICAgIC8vIERyYXcgdXBwZXIgcmlnaHQgYXJjCi0g
ICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCByaWdodFgs
IGxlZnRZLCB0aGlja25lc3MsIHRvcFJpZ2h0LCBzZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmds
ZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU1RvcCwgdG9wQ29sb3IsIHRv
cFN0eWxlLCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXAp
Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwg
eCwgdHksIHgyLCB0eSArIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBCU1RvcCwgdG9wQ29sb3Is
IHRvcFN0eWxlLAorICAgICAgICAgICAgICAgICAgICBpZ25vcmVMZWZ0ID8gMCA6IHN0eWxlLT5i
b3JkZXJMZWZ0V2lkdGgoKSwgaWdub3JlUmlnaHQgPyAwIDogc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSk7ICAgICAgICAgICAgICAgCiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAocmVuZGVy
Qm90dG9tKSB7Ci0gICAgICAgIGJvb2wgaWdub3JlX2xlZnQgPSAocmVuZGVyUmFkaWkgJiYgYm90
dG9tTGVmdC53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgICAgIChib3R0b21Db2xvciA9PSBsZWZ0
Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYmIGJvdHRvbVN0
eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAgIChsZWZ0U3R5bGUgPT0gRE9UVEVEIHx8IGxl
ZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVmdFN0eWxlID09IFNPTElEIHx8IGxlZnRTdHlsZSA9PSBP
VVRTRVQpKTsKLQotICAgICAgICBib29sIGlnbm9yZV9yaWdodCA9IChyZW5kZXJSYWRpaSAmJiBi
b3R0b21SaWdodC53aWR0aCgpID4gMCkgfHwKLSAgICAgICAgICAgIChib3R0b21Db2xvciA9PSBy
aWdodENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQgJiYgYm90
dG9tU3R5bGUgPj0gT1VUU0VUICYmCi0gICAgICAgICAgICAgKHJpZ2h0U3R5bGUgPT0gRE9UVEVE
IHx8IHJpZ2h0U3R5bGUgPT0gREFTSEVEIHx8IHJpZ2h0U3R5bGUgPT0gU09MSUQgfHwgcmlnaHRT
dHlsZSA9PSBJTlNFVCkpOwotCiAgICAgICAgIGludCB4ID0gdHg7CiAgICAgICAgIGludCB4MiA9
IHR4ICsgdzsKLSAgICAgICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAgICB4ICs9IGJv
dHRvbUxlZnQud2lkdGgoKTsKLSAgICAgICAgICAgIHgyIC09IGJvdHRvbVJpZ2h0LndpZHRoKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LCB4LCB0eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgeDIsIHR5ICsgaCwgQlNC
b3R0b20sIGJvdHRvbUNvbG9yLCBib3R0b21TdHlsZSwKLSAgICAgICAgICAgICAgICAgICBpZ25v
cmVfbGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIGlnbm9yZV9yaWdodCA/IDAg
OiBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVyUmFkaWkp
IHsKLSAgICAgICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpICog
MjsKLQotICAgICAgICAgICAgaWYgKGJvdHRvbUxlZnQud2lkdGgoKSkgewotICAgICAgICAgICAg
ICAgIGludCBsZWZ0WCA9IHR4OwotICAgICAgICAgICAgICAgIGludCBsZWZ0WSA9IHR5ICsgaCAt
IGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0
SW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IGJvdHRvbUxlZnQud2lkdGgo
KSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIDwg
Ym90dG9tTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGJvdHRvbVN0eWxl
ICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA+IDYpOwotICAgICAgICAg
ICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChsZWZ0WCwgbGVmdFksIGJvdHRvbUxl
ZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9y
ZGVyQm90dG9tV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKGxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZp
cnN0QW5nbGVTdGFydCA9IDE4MDsKLSAgICAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVNwYW4g
PSA5MDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBmaXJz
dEFuZ2xlU3RhcnQgPSAyMjU7Ci0gICAgICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTcGFuID0g
NDU7Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gRHJhdyBsb3dlciBs
ZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4
dCwgbGVmdFgsIGxlZnRZLCB0aGlja25lc3MsIGJvdHRvbUxlZnQsIGZpcnN0QW5nbGVTdGFydCwg
Zmlyc3RBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0JvdHRvbSwg
Ym90dG9tQ29sb3IsIGJvdHRvbVN0eWxlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBw
bHlMZWZ0SW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJl
c3RvcmUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGJvdHRvbVJpZ2h0Lndp
ZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgcmlnaHRZID0gdHkgKyBoIC0gYm90dG9tUmln
aHQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAgICAgICAgIGludCByaWdodFggPSB0eCArIHcgLSBi
b3R0b21SaWdodC53aWR0aCgpICogMjsKLSAgICAgICAgICAgICAgICBib29sIGFwcGx5UmlnaHRJ
bm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8IGJvdHRvbVJpZ2h0LndpZHRo
KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA8
IGJvdHRvbVJpZ2h0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAoYm90dG9tU3R5
bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpID4gNik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChyaWdodFgsIHJpZ2h0WSwgYm90
dG9tUmlnaHQud2lkdGgoKSAqIDIsIGJvdHRvbVJpZ2h0LmhlaWdodCgpICogMiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5
bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlbmRlclJhZGlpICYmIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoYm90dG9tTGVmdCwgYm90dG9t
UmlnaHQsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgo
KSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKSB7CisgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGNsaXBCb3JkZXJTaWRlUG9seWdvbihncmFwaGlj
c0NvbnRleHQsIGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0
b21SaWdodCwgQlNCb3R0b20sIHN0eWxlKTsKKyAgICAgICAgICAgIGZsb2F0IHRoaWNrbmVzcyA9
IG1heChtYXgoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJMZWZ0V2lk
dGgoKSksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOworICAgICAgICAgICAgZHJhd0JveFNp
ZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHJvdW5kZWRQYXRoLCBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgdGhpY2tuZXNzLCBCU0JvdHRvbSwgc3R5bGUsIGJvdHRv
bUNvbG9yLCBib3R0b21TdHlsZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlTGVmdCA9IChi
b3R0b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5z
cGFyZW50ICYmIGJvdHRvbVN0eWxlID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmIChsZWZ0
U3R5bGUgPT0gRE9UVEVEIHx8IGxlZnRTdHlsZSA9PSBEQVNIRUQgfHwgbGVmdFN0eWxlID09IFNP
TElEIHx8IGxlZnRTdHlsZSA9PSBPVVRTRVQpKTsKIAotICAgICAgICAgICAgICAgIHNlY29uZEFu
Z2xlU3RhcnQgPSAyNzA7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gbG93ZXJS
aWdodEJvcmRlclN0eWxlc01hdGNoID8gOTAgOiA0NTsKKyAgICAgICAgICAgIGJvb2wgaWdub3Jl
UmlnaHQgPSAoYm90dG9tQ29sb3IgPT0gcmlnaHRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9
PSByaWdodFRyYW5zcGFyZW50ICYmIGJvdHRvbVN0eWxlID49IE9VVFNFVAorICAgICAgICAgICAg
ICAgICYmIChyaWdodFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCBy
aWdodFN0eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpKTsKIAotICAgICAgICAg
ICAgICAgIC8vIERyYXcgbG93ZXIgcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0Zv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCByaWdodFgsIHJpZ2h0WSwgdGhpY2tuZXNzLCBib3R0
b21SaWdodCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQlNCb3R0b20sIGJvdHRvbUNvbG9yLCBib3R0b21TdHlsZSwgZmFs
c2UpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVJpZ2h0SW5uZXJDbGlwKQotICAgICAgICAg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHgsIHR5ICsgaCAt
IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCB4MiwgdHkgKyBoLCBCU0JvdHRvbSwgYm90dG9t
Q29sb3IsIAorICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9tU3R5bGUsIGlnbm9yZUxlZnQg
PyAwIDogc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlnbm9yZVJpZ2h0ID8gMCA6IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwogICAgICAgICB9
CiAgICAgfQogCiAgICAgaWYgKHJlbmRlckxlZnQpIHsKLSAgICAgICAgYm9vbCBpZ25vcmVfdG9w
ID0gKHJlbmRlclJhZGlpICYmIHRvcExlZnQuaGVpZ2h0KCkgPiAwKSB8fAotICAgICAgICAgICAg
KHRvcENvbG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJl
bnQgJiYgbGVmdFN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAgICh0b3BTdHlsZSA9PSBE
T1RURUQgfHwgdG9wU3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0
eWxlID09IE9VVFNFVCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX2JvdHRvbSA9IChyZW5kZXJS
YWRpaSAmJiBib3R0b21MZWZ0LmhlaWdodCgpID4gMCkgfHwKLSAgICAgICAgICAgIChib3R0b21D
b2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50
ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAgICAgICAgICAoYm90dG9tU3R5bGUgPT0g
RE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBib3R0b21TdHlsZSA9PSBTT0xJRCB8
fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOwotCiAgICAgICAgIGludCB5ID0gdHk7CiAgICAgICAg
IGludCB5MiA9IHR5ICsgaDsKLSAgICAgICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAg
ICB5ICs9IHRvcExlZnQuaGVpZ2h0KCk7Ci0gICAgICAgICAgICB5MiAtPSBib3R0b21MZWZ0Lmhl
aWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNz
Q29udGV4dCwgdHgsIHksIHR4ICsgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCB5MiwgQlNMZWZ0
LCBsZWZ0Q29sb3IsIGxlZnRTdHlsZSwKLSAgICAgICAgICAgICAgICAgICBpZ25vcmVfdG9wID8g
MCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9tID8gMCA6IHN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVyUmFkaWkgJiYgKCF1cHBl
ckxlZnRCb3JkZXJTdHlsZXNNYXRjaCB8fCAhbG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2gpKSB7
Ci0gICAgICAgICAgICBpbnQgdG9wWCA9IHR4OwotICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpICogMjsKLQotICAgICAgICAgICAgaWYgKCF1cHBlckxlZnRC
b3JkZXJTdHlsZXNNYXRjaCAmJiB0b3BMZWZ0LndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBp
bnQgdG9wWSA9IHR5OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlUb3BJbm5lckNsaXAgPSAo
c3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIDwgdG9wTGVmdC53aWR0aCgpKQotICAgICAgICAgICAg
ICAgICAgICAmJiAoc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgPCB0b3BMZWZ0LmhlaWdodCgpKQot
ICAgICAgICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlUb3BJbm5lckNs
aXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAo
SW50UmVjdCh0b3BYLCB0b3BZLCB0b3BMZWZ0LndpZHRoKCkgKiAyLCB0b3BMZWZ0LmhlaWdodCgp
ICogMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSAxMzU7Ci0gICAgICAgICAgICAg
ICAgZmlyc3RBbmdsZVNwYW4gPSA0NTsKIAotICAgICAgICAgICAgICAgIC8vIERyYXcgdG9wIGxl
ZnQgYXJjCi0gICAgICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0
LCB0b3BYLCB0b3BZLCB0aGlja25lc3MsIHRvcExlZnQsIGZpcnN0QW5nbGVTdGFydCwgZmlyc3RB
bmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCU0xlZnQsIGxlZnRDb2xv
ciwgbGVmdFN0eWxlLCB0cnVlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlUb3BJbm5lckNs
aXApCi0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWxvd2VyTGVmdEJvcmRlclN0eWxlc01hdGNo
ICYmIGJvdHRvbUxlZnQud2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGludCBib3R0b21ZID0g
dHkgKyBoIC0gYm90dG9tTGVmdC5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBh
cHBseUJvdHRvbUlubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgPCBib3R0b21M
ZWZ0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSA8IGJvdHRvbUxlZnQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChs
ZWZ0U3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA+IDYpOwotICAg
ICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkgewotICAgICAgICAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRSZWN0KHRvcFgsIGJvdHRvbVks
IGJvdHRvbUxlZnQud2lkdGgoKSAqIDIsIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgaWYg
KHJlbmRlclJhZGlpICYmIGJvcmRlcldpbGxBcmNJbm5lckVkZ2UoYm90dG9tTGVmdCwgdG9wTGVm
dCwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpKSB7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQt
PnNhdmUoKTsKKyAgICAgICAgICAgIGNsaXBCb3JkZXJTaWRlUG9seWdvbihncmFwaGljc0NvbnRl
eHQsIGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCwgQlNMZWZ0LCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBtYXgobWF4
KHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLCBzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRo
KGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgcm91bmRlZFBhdGgsIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSwgdGhpY2tuZXNzLCBCU0xlZnQsIHN0eWxlLCBsZWZ0Q29sb3IsIGxlZnRTdHls
ZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlVG9wID0gKHRvcENvbG9yID09IGxlZnRDb2xv
ciAmJiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQgJiYgbGVmdFN0eWxlID49IE9V
VFNFVAorICAgICAgICAgICAgICAgICYmICh0b3BTdHlsZSA9PSBET1RURUQgfHwgdG9wU3R5bGUg
PT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0eWxlID09IE9VVFNFVCkpOwog
Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTdGFydCA9IDE4MDsKLSAgICAgICAgICAgICAg
ICBzZWNvbmRBbmdsZVNwYW4gPSA0NTsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlQm90dG9tID0g
KGJvdHRvbUNvbG9yID09IGxlZnRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9PSBsZWZ0VHJh
bnNwYXJlbnQgJiYgbGVmdFN0eWxlID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmIChib3R0
b21TdHlsZSA9PSBET1RURUQgfHwgYm90dG9tU3R5bGUgPT0gREFTSEVEIHx8IGJvdHRvbVN0eWxl
ID09IFNPTElEIHx8IGJvdHRvbVN0eWxlID09IElOU0VUKSk7CiAKLSAgICAgICAgICAgICAgICAv
LyBEcmF3IGJvdHRvbSBsZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRl
KGdyYXBoaWNzQ29udGV4dCwgdG9wWCwgYm90dG9tWSwgdGhpY2tuZXNzLCBib3R0b21MZWZ0LCBz
ZWNvbmRBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVNwYW4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBCU0xlZnQsIGxlZnRDb2xvciwgbGVmdFN0eWxlLCBmYWxzZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFw
aGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHR4LCB5LCB0eCArIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSwgeTIsIEJTTGVmdCwgbGVmdENvbG9yLAorICAgICAgICAgICAgICAgICAgICAg
ICAgbGVmdFN0eWxlLCBpZ25vcmVUb3AgPyAwIDogc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIGln
bm9yZUJvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAocmVuZGVyUmlnaHQpIHsKLSAgICAgICAgYm9vbCBpZ25vcmVfdG9w
ID0gKHJlbmRlclJhZGlpICYmIHRvcFJpZ2h0LmhlaWdodCgpID4gMCkgfHwKLSAgICAgICAgICAg
ICgodG9wQ29sb3IgPT0gcmlnaHRDb2xvcikgJiYgKHRvcFRyYW5zcGFyZW50ID09IHJpZ2h0VHJh
bnNwYXJlbnQpICYmCi0gICAgICAgICAgICAocmlnaHRTdHlsZSA+PSBET1RURUQgfHwgcmlnaHRT
dHlsZSA9PSBJTlNFVCkgJiYKLSAgICAgICAgICAgICh0b3BTdHlsZSA9PSBET1RURUQgfHwgdG9w
U3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0eWxlID09IE9VVFNF
VCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX2JvdHRvbSA9IChyZW5kZXJSYWRpaSAmJiBib3R0
b21SaWdodC5oZWlnaHQoKSA+IDApIHx8Ci0gICAgICAgICAgICAoKGJvdHRvbUNvbG9yID09IHJp
Z2h0Q29sb3IpICYmIChib3R0b21UcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50KSAmJgot
ICAgICAgICAgICAgKHJpZ2h0U3R5bGUgPj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQp
ICYmCi0gICAgICAgICAgICAoYm90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09
IERBU0hFRCB8fCBib3R0b21TdHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkp
OwotCi0gICAgICAgIGludCB5ID0gdHk7Ci0gICAgICAgIGludCB5MiA9IHR5ICsgaDsKLSAgICAg
ICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAgICB5ICs9IHRvcFJpZ2h0LmhlaWdodCgp
OwotICAgICAgICAgICAgeTIgLT0gYm90dG9tUmlnaHQuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCArIHcgLSBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCB5LCB0eCArIHcsIHkyLCBCU1JpZ2h0LCByaWdodENvbG9y
LCByaWdodFN0eWxlLAotICAgICAgICAgICAgICAgICAgIGlnbm9yZV90b3AgPyAwIDogc3R5bGUt
PmJvcmRlclRvcFdpZHRoKCksIGlnbm9yZV9ib3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCkpOwotCi0gICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiAoIXVwcGVyUmlnaHRCb3Jk
ZXJTdHlsZXNNYXRjaCB8fCAhbG93ZXJSaWdodEJvcmRlclN0eWxlc01hdGNoKSkgewotICAgICAg
ICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAqIDI7Ci0KLSAgICAg
ICAgICAgIGlmICghdXBwZXJSaWdodEJvcmRlclN0eWxlc01hdGNoICYmIHRvcFJpZ2h0LndpZHRo
KCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgdG9wWCA9IHR4ICsgdyAtIHRvcFJpZ2h0LndpZHRo
KCkgKiAyOwotICAgICAgICAgICAgICAgIGludCB0b3BZID0gdHk7Ci0gICAgICAgICAgICAgICAg
Ym9vbCBhcHBseVRvcElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgdG9w
UmlnaHQud2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpIDwgdG9wUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChyaWdo
dFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpID4gNik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgdG9wWSwgdG9wUmln
aHQud2lkdGgoKSAqIDIsIHRvcFJpZ2h0LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmly
c3RBbmdsZVN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3BhbiA9IDQ1Owot
Ci0gICAgICAgICAgICAgICAgLy8gRHJhdyB0b3AgcmlnaHQgYXJjCi0gICAgICAgICAgICAgICAg
ZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0b3BYLCB0b3BZLCB0aGlja25lc3Ms
IHRvcFJpZ2h0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQlNSaWdodCwgcmlnaHRDb2xvciwgcmlnaHRTdHlsZSwgdHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKQotICAgICAgICAgICAgICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKCFsb3dlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgYm90dG9tUmlnaHQud2lk
dGgoKSkgewotICAgICAgICAgICAgICAgIGludCBib3R0b21YID0gdHggKyB3IC0gYm90dG9tUmln
aHQud2lkdGgoKSAqIDI7Ci0gICAgICAgICAgICAgICAgaW50IGJvdHRvbVkgPSB0eSArIGggLSBi
b3R0b21SaWdodC5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICAgICAgYm9vbCBhcHBseUJvdHRv
bUlubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIDwgYm90dG9tUmlnaHQud2lk
dGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgp
IDwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChyaWdodFN0
eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpID4gNik7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFwcGx5Qm90dG9tSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QoYm90dG9tWCwgYm90dG9tWSwg
Ym90dG9tUmlnaHQud2lkdGgoKSAqIDIsIGJvdHRvbVJpZ2h0LmhlaWdodCgpICogMiksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgc2Vjb25kQW5nbGVTdGFydCA9IDMxNTsKLSAgICAgICAgICAgICAgICBzZWNvbmRB
bmdsZVNwYW4gPSA0NTsKLQotICAgICAgICAgICAgICAgIC8vIERyYXcgYm90dG9tIHJpZ2h0IGFy
YwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgYm90
dG9tWCwgYm90dG9tWSwgdGhpY2tuZXNzLCBib3R0b21SaWdodCwgc2Vjb25kQW5nbGVTdGFydCwg
c2Vjb25kQW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNSaWdodCwg
cmlnaHRDb2xvciwgcmlnaHRTdHlsZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChhcHBs
eUJvdHRvbUlubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZXN0b3JlKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKGJvdHRvbVJpZ2h0LCB0b3BSaWdodCwgc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRX
aWR0aCgpKSkgeworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAg
ICAgICBjbGlwQm9yZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTUmlnaHQsIHN0eWxl
KTsKKyAgICAgICAgICAgIGZsb2F0IHRoaWNrbmVzcyA9IG1heChtYXgoc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4
dCwgYm9yZGVyUmVjdCwgcm91bmRlZFBhdGgsIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHRo
aWNrbmVzcywgQlNSaWdodCwgc3R5bGUsIHJpZ2h0Q29sb3IsIHJpZ2h0U3R5bGUpOworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBib29sIGlnbm9yZVRvcCA9ICgodG9wQ29sb3IgPT0gcmlnaHRDb2xvcikgJiYgKHRv
cFRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgJiYgKHJp
Z2h0U3R5bGUgPj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpCisgICAgICAgICAgICAg
ICAgJiYgKHRvcFN0eWxlID09IERPVFRFRCB8fCB0b3BTdHlsZSA9PSBEQVNIRUQgfHwgdG9wU3R5
bGUgPT0gU09MSUQgfHwgdG9wU3R5bGUgPT0gT1VUU0VUKSk7CisKKyAgICAgICAgICAgIGJvb2wg
aWdub3JlQm90dG9tID0gKChib3R0b21Db2xvciA9PSByaWdodENvbG9yKSAmJiAoYm90dG9tVHJh
bnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICAmJiAocmlnaHRT
dHlsZSA+PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkKKyAgICAgICAgICAgICAgICAm
JiAoYm90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBib3R0
b21TdHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOworCisgICAgICAgICAg
ICBpbnQgeSA9IHR5OworICAgICAgICAgICAgaW50IHkyID0gdHkgKyBoOworCisgICAgICAgICAg
ICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCArIHcgLSBzdHlsZS0+Ym9y
ZGVyUmlnaHRXaWR0aCgpLCB5LCB0eCArIHcsIHkyLCBCU1JpZ2h0LCByaWdodENvbG9yLCAKKyAg
ICAgICAgICAgICAgICByaWdodFN0eWxlLCBpZ25vcmVUb3AgPyAwIDogc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCksIAorICAgICAgICAgICAgICAgIGlnbm9yZUJvdHRvbSA/IDAgOiBzdHlsZS0+Ym9y
ZGVyQm90dG9tV2lkdGgoKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEyNTgsNiArMTA4MCw2
NCBAQCB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHCiAgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwogfQogCit2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0
OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24oR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IEludFJlY3QgYm94LCBJbnRTaXplIHRvcExlZnQsIEludFNpemUgdG9wUmlnaHQsIEludFNpemUg
Ym90dG9tTGVmdCwgSW50U2l6ZSBib3R0b21SaWdodCwgY29uc3QgQm94U2lkZSBzaWRlLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgRmxvYXRQb2ludCBxdWFkWzRdOworICAgIGlu
dCB0eCA9IGJveC54KCk7CisgICAgaW50IHR5ID0gYm94LnkoKTsKKyAgICBpbnQgdyA9IGJveC53
aWR0aCgpOworICAgIGludCBoID0gYm94LmhlaWdodCgpOworCisgICAgLy8gRm9yIGVhY2ggc2lk
ZSwgY3JlYXRlIGFuIGFycmF5IG9mIEZsb2F0UG9pbnRzIHdoZXJlIGVhY2ggcG9pbnQgaXMgYmFz
ZWQgb24gd2hpY2hldmVyIHZhbHVlIGluIGVhY2ggY29ybmVyCisgICAgLy8gaXMgbGFyZ2VyIC0t
IHRoZSByYWRpdXMgd2lkdGgvaGVpZ2h0IG9yIHRoZSBib3JkZXIgd2lkdGgvaGVpZ2h0IC0tIGFz
IGFwcHJvcHJpYXRlLgorICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNhc2UgQlNUb3A6CisgICAg
ICAgIHF1YWRbMF0gPSBGbG9hdFBvaW50KHR4LCB0eSk7CisgICAgICAgIHF1YWRbMV0gPSBGbG9h
dFBvaW50KAorICAgICAgICAgICAgdHggKyBtYXgodG9wTGVmdC53aWR0aCgpLCAoaW50KSBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsgbWF4KHRvcExlZnQuaGVp
Z2h0KCksIChpbnQpIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7CisgICAgICAgIHF1YWRbMl0g
PSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyB3IC0gbWF4KHRvcFJpZ2h0LndpZHRoKCks
IChpbnQpIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsgbWF4
KHRvcFJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7CisgICAg
ICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJTTGVmdDoKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5KTsKKyAg
ICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIG1heCh0b3BMZWZ0
LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIAorICAgICAgICAgICAg
dHkgKyBtYXgodG9wTGVmdC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkp
KTsKKyAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIG1heChi
b3R0b21MZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIAorICAg
ICAgICAgICAgdHkgKyBoIC0gbWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQodHgsIHR5
ICsgaCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQlNCb3R0b206CisgICAgICAgIHF1YWRb
MF0gPSBGbG9hdFBvaW50KHR4LCB0eSArIGgpOworICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2lu
dCgKKyAgICAgICAgICAgIHR4ICsgbWF4KGJvdHRvbUxlZnQud2lkdGgoKSwgKGludCkgc3R5bGUt
PmJvcmRlckxlZnRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIGggLSBtYXgoYm90dG9tTGVm
dC5oZWlnaHQoKSwgKGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBx
dWFkWzJdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgdyAtIG1heChib3R0b21SaWdo
dC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAg
ICB0eSArIGggLSBtYXgoYm90dG9tUmlnaHQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQodHggKyB3LCB0eSAr
IGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJTUmlnaHQ6CisgICAgICAgIHF1YWRbMF0g
PSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCgK
KyAgICAgICAgICAgIHR4ICsgdyAtIG1heCh0b3BSaWdodC53aWR0aCgpLCAoaW50KSBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIG1heCh0b3BSaWdodC5oZWln
aHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFsyXSA9
IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIHcgLSBtYXgoYm90dG9tUmlnaHQud2lkdGgo
KSwgKGludCkgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSksIAorICAgICAgICAgICAgdHkgKyBo
IC0gbWF4KGJvdHRvbVJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJCb3R0b21XaWR0
aCgpKSk7CisgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkgKyBoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Z3JhcGhpY3NDb250ZXh0LT5jbGlwQ29udmV4UG9seWdvbig0LCBxdWFkKTsKK30KKwogdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogcywg
U2hhZG93U3R5bGUgc2hhZG93U3R5bGUsIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQogewogICAgIC8v
IEZJWE1FOiBEZWFsIHdpdGggYm9yZGVyLWltYWdlLiAgV291bGQgYmUgZ3JlYXQgdG8gdXNlIGJv
cmRlci1pbWFnZSBhcyBhIG1hc2suCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw4IEBAIHByaXZh
dGU6CiAKICAgICBJbnRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIq
LCBJbnRTaXplIHNjYWxlZFNpemUpIGNvbnN0OwogCisgICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBv
bHlnb24oR3JhcGhpY3NDb250ZXh0KiwgSW50UmVjdCwgSW50U2l6ZSB0b3BMZWZ0LCBJbnRTaXpl
IHRvcFJpZ2h0LCBJbnRTaXplIGJvdHRvbUxlZnQsIEludFNpemUgYm90dG9tUmlnaHQsIGNvbnN0
IEJveFNpZGUgc2lkZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKTsKKwogICAgIGZyaWVuZCBj
bGFzcyBSZW5kZXJWaWV3OwogCiAgICAgUmVuZGVyTGF5ZXIqIG1fbGF5ZXI7CkluZGV4OiBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiRGFzaEFycmF5LmgiCiAjaW5jbHVkZSAi
RmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
QEAgLTg3Nyw4NSArODc4LDE3NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0xpbmVGb3JCb3hT
aWRlKEdyCiAgICAgfQogfQogCi12b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0ZvckJveFNpZGUo
R3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIGludCB4LCBpbnQgeSwgZmxvYXQgdGhp
Y2tuZXNzLCBJbnRTaXplIHJhZGl1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgYW5nbGVTdGFydCwgaW50IGFuZ2xlU3BhbiwgQm94U2lkZSBzLCBDb2xvciBjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVCb3JkZXJTdHlsZSBzdHlsZSwg
Ym9vbCBmaXJzdENvcm5lcikKK0ludFJlY3QgUmVuZGVyT2JqZWN0Ojpib3JkZXJJbm5lclJlY3Qo
Y29uc3QgSW50UmVjdCYgYm9yZGVyUmVjdCwgdW5zaWduZWQgc2hvcnQgdG9wV2lkdGgsIHVuc2ln
bmVkIHNob3J0IGJvdHRvbVdpZHRoLCB1bnNpZ25lZCBzaG9ydCBsZWZ0V2lkdGgsIHVuc2lnbmVk
IHNob3J0IHJpZ2h0V2lkdGgpIGNvbnN0CiB7Ci0gICAgaWYgKChzdHlsZSA9PSBET1VCTEUgJiYg
dGhpY2tuZXNzIC8gMiA8IDMpIHx8ICgoc3R5bGUgPT0gUklER0UgfHwgc3R5bGUgPT0gR1JPT1ZF
KSAmJiB0aGlja25lc3MgLyAyIDwgMikpCi0gICAgICAgIHN0eWxlID0gU09MSUQ7CisgICAgcmV0
dXJuIEludFJlY3QoCisgICAgICAgICAgICBib3JkZXJSZWN0LngoKSArIGxlZnRXaWR0aCwgCisg
ICAgICAgICAgICBib3JkZXJSZWN0LnkoKSArIHRvcFdpZHRoLCAKKyAgICAgICAgICAgIGJvcmRl
clJlY3Qud2lkdGgoKSAtIGxlZnRXaWR0aCAtIHJpZ2h0V2lkdGgsIAorICAgICAgICAgICAgYm9y
ZGVyUmVjdC5oZWlnaHQoKSAtIHRvcFdpZHRoIC0gYm90dG9tV2lkdGgpOworfQorCit2b2lkIFJl
bmRlck9iamVjdDo6ZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNz
Q29udGV4dCwgSW50UmVjdCBib3JkZXJSZWN0LCBQYXRoIGJvcmRlclBhdGgsIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhp
Y2tuZXNzLCBCb3hTaWRlIHMsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xvciBjLCBFQm9yZGVyU3R5bGUgYm9yZGVyU3R5
bGUpCit7CisgICAgaWYgKHRoaWNrbmVzcyA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAoYm9yZGVyU3R5bGUgPT0gRE9VQkxFICYmIHRoaWNrbmVzcyA8IDMpCisgICAgICAgIGJvcmRl
clN0eWxlID0gU09MSUQ7CisKKyAgICBzd2l0Y2ggKGJvcmRlclN0eWxlKSB7CisgICAgY2FzZSBC
Tk9ORToKKyAgICBjYXNlIEJISURERU46CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERPVFRF
RDoKKyAgICBjYXNlIERBU0hFRDogeworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9r
ZUNvbG9yKGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOworCisgICAgICAgIC8vIFRoZSBzdHJva2Ug
aXMgZG91YmxlZCBoZXJlIGJlY2F1c2UgdGhlIHByb3ZpZGVkIHBhdGggaXMgdGhlIAorICAgICAg
ICAvLyBvdXRzaWRlIGVkZ2Ugb2YgdGhlIGJvcmRlciBzbyBoYWxmIHRoZSBzdHJva2UgaXMgY2xp
cHBlZCBvZmYuIAorICAgICAgICAvLyBUaGUgZXh0cmEgbXVsdGlwbGllciBpcyBzbyB0aGF0IHRo
ZSBjbGlwcGluZyBtYXNrIGNhbiBhbnRpYWxpYXMKKyAgICAgICAgLy8gdGhlIGVkZ2VzIHRvIHBy
ZXZlbnQgamFnZ2llcy4KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25l
c3MoZHJhd1RoaWNrbmVzcyAqIDIgKiAxLjFmKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5z
ZXRTdHJva2VTdHlsZShib3JkZXJTdHlsZSA9PSBEQVNIRUQgPyBEYXNoZWRTdHJva2UgOiBEb3R0
ZWRTdHJva2UpOworCisgICAgICAgIC8vIElmIHRoZSBudW1iZXIgb2YgZGFzaGVzIHRoYXQgZml0
IGluIHRoZSBwYXRoIGlzIG9kZCBhbmQgbm9uLWludGVncmFsIHRoZW4gd2UKKyAgICAgICAgLy8g
d2lsbCBoYXZlIGFuIGF3a3dhcmRseS1zaXplZCBkYXNoIGF0IHRoZSBlbmQgb2YgdGhlIHBhdGgu
IFRvIHRyeSB0byBhdm9pZCB0aGF0CisgICAgICAgIC8vIGhlcmUsIHdlIHNpbXBseSBtYWtlIHRo
ZSB3aGl0ZXNwYWNlIGRhc2hlcyBldmVyIHNvIHNsaWdodGx5IGJpZ2dlci4KKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgY291bGQgYmUgZXZlbiBiZXR0ZXIgaWYgd2UgdHJpZWQgdG8gbWFuaXB1bGF0
ZSB0aGUgZGFzaCBvZmZzZXQKKyAgICAgICAgLy8gYW5kIHBvc3NpYmx5IHRoZSB3aGl0ZVNwYWNl
V2lkdGggdG8gZ2V0IHRoZSBjb3JuZXJzIGRhc2gtc3ltbWV0cmljYWwuCisgICAgICAgIGZsb2F0
IHBhdFdpZHRoID0gdGhpY2tuZXNzICogKChib3JkZXJTdHlsZSA9PSBEQVNIRUQpID8gMy4wZiA6
IDEuMGYpOworICAgICAgICBmbG9hdCB3aGl0ZVNwYWNlV2lkdGggPSBwYXRXaWR0aDsKKyAgICAg
ICAgZmxvYXQgbnVtYmVyT2ZEYXNoZXMgPSBib3JkZXJQYXRoLmxlbmd0aCgpIC8gcGF0V2lkdGg7
CisgICAgICAgIGJvb2wgZXZlbk51bWJlck9mRnVsbERhc2hlcyA9IChpbnQpbnVtYmVyT2ZEYXNo
ZXMgJSAyID09IDA7CisgICAgICAgIGJvb2wgaW50ZWdyYWxOdW1iZXJPZkRhc2hlcyA9IG51bWJl
ck9mRGFzaGVzIC0gKGludCludW1iZXJPZkRhc2hlcyA9PSAwOworICAgICAgICBpZiAoIWV2ZW5O
dW1iZXJPZkZ1bGxEYXNoZXMgJiYgIWludGVncmFsTnVtYmVyT2ZEYXNoZXMpIHsKKyAgICAgICAg
ICAgIGZsb2F0IG51bWJlck9mV2hpdGVzcGFjZURhc2hlcyA9IG51bWJlck9mRGFzaGVzIC8gMjsK
KyAgICAgICAgICAgIHdoaXRlU3BhY2VXaWR0aCArPSAocGF0V2lkdGggIC8gbnVtYmVyT2ZXaGl0
ZXNwYWNlRGFzaGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIERhc2hBcnJheSogbGluZURhc2gg
PSBuZXcgRGFzaEFycmF5KCk7CisgICAgICAgIGxpbmVEYXNoLT5hcHBlbmQocGF0V2lkdGgpOwor
ICAgICAgICBsaW5lRGFzaC0+YXBwZW5kKHdoaXRlU3BhY2VXaWR0aCk7CisgICAgICAgIGdyYXBo
aWNzQ29udGV4dC0+c2V0TGluZURhc2goKmxpbmVEYXNoLCBwYXRXaWR0aCk7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC0+YWRkUGF0aChib3JkZXJQYXRoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBET1VC
TEU6IHsKKyAgICAgICAgaW50IG91dGVyQm9yZGVyVG9wV2lkdGggPSBzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSAvIDM7CisgICAgICAgIGludCBvdXRlckJvcmRlclJpZ2h0V2lkdGggPSBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpIC8gMzsKKyAgICAgICAgaW50IG91dGVyQm9yZGVyQm90dG9tV2lk
dGggPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAvIDM7CisgICAgICAgIGludCBvdXRlckJv
cmRlckxlZnRXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAvIDM7CisKKyAgICAgICAg
aW50IGlubmVyQm9yZGVyVG9wV2lkdGggPSBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAqIDIgLyAz
OworICAgICAgICBpbnQgaW5uZXJCb3JkZXJSaWdodFdpZHRoID0gc3R5bGUtPmJvcmRlclJpZ2h0
V2lkdGgoKSAqIDIgLyAzOworICAgICAgICBpbnQgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCA9IHN0
eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpICogMiAvIDM7CisgICAgICAgIGludCBpbm5lckJvcmRl
ckxlZnRXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAqIDIgLyAzOworCisgICAgICAg
IC8vIFdlIG5lZWQgY2VydGFpbiBpbnRlZ2VyIHJvdW5kaW5nIHJlc3VsdHMKKyAgICAgICAgaWYg
KHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpICUgMyA9PSAyKQorICAgICAgICAgICAgb3V0ZXJCb3Jk
ZXJUb3BXaWR0aCArPSAxOworICAgICAgICBpZiAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAl
IDMgPT0gMikKKyAgICAgICAgICAgIG91dGVyQm9yZGVyUmlnaHRXaWR0aCArPSAxOworICAgICAg
ICBpZiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgJSAzID09IDIpCisgICAgICAgICAgICBv
dXRlckJvcmRlckJvdHRvbVdpZHRoICs9IDE7CisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyTGVm
dFdpZHRoKCkgJSAzID09IDIpCisgICAgICAgICAgICBvdXRlckJvcmRlckxlZnRXaWR0aCArPSAx
OworCisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAlIDMgPT0gMSkKKyAgICAg
ICAgICAgIGlubmVyQm9yZGVyVG9wV2lkdGggKz0gMTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3Jk
ZXJSaWdodFdpZHRoKCkgJSAzID09IDEpCisgICAgICAgICAgICBpbm5lckJvcmRlclJpZ2h0V2lk
dGggKz0gMTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpICUgMyA9PSAx
KQorICAgICAgICAgICAgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCArPSAxOworICAgICAgICBpZiAo
c3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpICUgMyA9PSAxKQorICAgICAgICAgICAgaW5uZXJCb3Jk
ZXJMZWZ0V2lkdGggKz0gMTsKKworICAgICAgICAvLyBHZXQgdGhlIGlubmVyIGJvcmRlciByZWN0
cyBmb3IgYm90aCB0aGUgb3V0ZXIgYm9yZGVyIGxpbmUgYW5kIHRoZSBpbm5lciBib3JkZXIgbGlu
ZQorICAgICAgICBJbnRSZWN0IG91dGVyQm9yZGVySW5uZXJSZWN0ID0gYm9yZGVySW5uZXJSZWN0
KGJvcmRlclJlY3QsIG91dGVyQm9yZGVyVG9wV2lkdGgsIG91dGVyQm9yZGVyQm90dG9tV2lkdGgs
IAorICAgICAgICAgICAgb3V0ZXJCb3JkZXJMZWZ0V2lkdGgsIG91dGVyQm9yZGVyUmlnaHRXaWR0
aCk7CisgICAgICAgIEludFJlY3QgaW5uZXJCb3JkZXJJbm5lclJlY3QgPSBib3JkZXJJbm5lclJl
Y3QoYm9yZGVyUmVjdCwgaW5uZXJCb3JkZXJUb3BXaWR0aCwgaW5uZXJCb3JkZXJCb3R0b21XaWR0
aCwgCisgICAgICAgICAgICBpbm5lckJvcmRlckxlZnRXaWR0aCwgaW5uZXJCb3JkZXJSaWdodFdp
ZHRoKTsKKworICAgICAgICAvLyBHZXQgdGhlIGlubmVyIHJhZGlpIGZvciB0aGUgb3V0ZXIgYm9y
ZGVyIGxpbmUKKyAgICAgICAgSW50U2l6ZSBvdXRlckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywg
b3V0ZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCBvdXRlckJvcmRlckJvdHRvbUxlZnRJbm5l
clJhZGl1cywgCisgICAgICAgICAgICBvdXRlckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXM7
CisgICAgICAgIHN0eWxlLT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0
aHMob3V0ZXJCb3JkZXJJbm5lclJlY3QsIG91dGVyQm9yZGVyVG9wV2lkdGgsIG91dGVyQm9yZGVy
Qm90dG9tV2lkdGgsIAorICAgICAgICAgICAgb3V0ZXJCb3JkZXJMZWZ0V2lkdGgsIG91dGVyQm9y
ZGVyUmlnaHRXaWR0aCwgb3V0ZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIG91dGVyQm9yZGVy
VG9wUmlnaHRJbm5lclJhZGl1cywgCisgICAgICAgICAgICBvdXRlckJvcmRlckJvdHRvbUxlZnRJ
bm5lclJhZGl1cywgb3V0ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKworICAgICAg
ICAvLyBHZXQgdGhlIGlubmVyIHJhZGlpIGZvciB0aGUgaW5uZXIgYm9yZGVyIGxpbmUKKyAgICAg
ICAgSW50U2l6ZSBpbm5lckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywgaW5uZXJCb3JkZXJUb3BS
aWdodElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbUxlZnRJbm5lclJhZGl1cywgCisgICAg
ICAgICAgICBpbm5lckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXM7CisgICAgICAgIHN0eWxl
LT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoaW5uZXJCb3JkZXJJ
bm5lclJlY3QsIGlubmVyQm9yZGVyVG9wV2lkdGgsIGlubmVyQm9yZGVyQm90dG9tV2lkdGgsIAor
ICAgICAgICAgICAgaW5uZXJCb3JkZXJMZWZ0V2lkdGgsIGlubmVyQm9yZGVyUmlnaHRXaWR0aCwg
aW5uZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyVG9wUmlnaHRJbm5lclJh
ZGl1cywgCisgICAgICAgICAgICBpbm5lckJvcmRlckJvdHRvbUxlZnRJbm5lclJhZGl1cywgaW5u
ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKworICAgICAgICAvLyBEcmF3IGlubmVy
IGJvcmRlciBsaW5lCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChpbm5lckJvcmRlcklubmVyUmVjdCwg
aW5uZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIAorICAgICAgICAgICAgaW5uZXJCb3JkZXJU
b3BSaWdodElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbUxlZnRJbm5lclJhZGl1cywgaW5u
ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKyAgICAgICAgZHJhd0JveFNpZGVGcm9t
UGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNrbmVzcywg
ZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIFNPTElEKTsKKyAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciBib3JkZXIgbGluZQorICAg
ICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5j
bGlwT3V0Um91bmRlZFJlY3Qob3V0ZXJCb3JkZXJJbm5lclJlY3QsIG91dGVyQm9yZGVyVG9wTGVm
dElubmVyUmFkaXVzLCAKKyAgICAgICAgICAgIG91dGVyQm9yZGVyVG9wUmlnaHRJbm5lclJhZGl1
cywgb3V0ZXJCb3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIG91dGVyQm9yZGVyQm90dG9tUmln
aHRJbm5lclJhZGl1cyk7CisgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250
ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHMs
IHN0eWxlLCBjLCBTT0xJRCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwor
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBSSURHRToKKyAgICBjYXNlIEdST09W
RToKKyAgICB7CisgICAgICAgIEVCb3JkZXJTdHlsZSBzMTsKKyAgICAgICAgRUJvcmRlclN0eWxl
IHMyOworICAgICAgICBpZiAoYm9yZGVyU3R5bGUgPT0gR1JPT1ZFKSB7CisgICAgICAgICAgICBz
MSA9IElOU0VUOworICAgICAgICAgICAgczIgPSBPVVRTRVQ7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBzMSA9IE9VVFNFVDsKKyAgICAgICAgICAgIHMyID0gSU5TRVQ7CisgICAgICAg
IH0KIAotICAgIHN3aXRjaCAoc3R5bGUpIHsKLSAgICAgICAgY2FzZSBCTk9ORToKLSAgICAgICAg
Y2FzZSBCSElEREVOOgotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBjYXNlIERPVFRFRDoK
LSAgICAgICAgY2FzZSBEQVNIRUQ6Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0
cm9rZUNvbG9yKGMsIG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKHN0eWxlID09IERPVFRFRCA/IERvdHRlZFN0cm9rZSA6
IERhc2hlZFN0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRo
aWNrbmVzcyh0aGlja25lc3MpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VB
cmMoSW50UmVjdCh4LCB5LCByYWRpdXMud2lkdGgoKSAqIDIsIHJhZGl1cy5oZWlnaHQoKSAqIDIp
LCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRE9VQkxFOiB7Ci0gICAgICAgICAgICBmbG9hdCB0aGlyZCA9IHRoaWNrbmVzcyAvIDMuMGY7
Ci0gICAgICAgICAgICBmbG9hdCBpbm5lclRoaXJkID0gKHRoaWNrbmVzcyArIDEuMGYpIC8gNi4w
ZjsKLSAgICAgICAgICAgIGludCBzaGlmdEZvcklubmVyID0gc3RhdGljX2Nhc3Q8aW50Pihpbm5l
clRoaXJkICogMi41Zik7Ci0KLSAgICAgICAgICAgIGludCBvdXRlclkgPSB5OwotICAgICAgICAg
ICAgaW50IG91dGVySGVpZ2h0ID0gcmFkaXVzLmhlaWdodCgpICogMjsKLSAgICAgICAgICAgIGlu
dCBpbm5lclggPSB4ICsgc2hpZnRGb3JJbm5lcjsKLSAgICAgICAgICAgIGludCBpbm5lclkgPSB5
ICsgc2hpZnRGb3JJbm5lcjsKLSAgICAgICAgICAgIGludCBpbm5lcldpZHRoID0gKHJhZGl1cy53
aWR0aCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyOwotICAgICAgICAgICAgaW50IGlubmVySGVpZ2h0
ID0gKHJhZGl1cy5oZWlnaHQoKSAtIHNoaWZ0Rm9ySW5uZXIpICogMjsKLSAgICAgICAgICAgIGlm
IChpbm5lclRoaXJkID4gMSAmJiAocyA9PSBCU1RvcCB8fCAoZmlyc3RDb3JuZXIgJiYgKHMgPT0g
QlNMZWZ0IHx8IHMgPT0gQlNSaWdodCkpKSkgewotICAgICAgICAgICAgICAgIG91dGVySGVpZ2h0
ICs9IDI7Ci0gICAgICAgICAgICAgICAgaW5uZXJIZWlnaHQgKz0gMjsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgSW50UmVjdCBoYWxmQm9yZGVyUmVjdCA9IGJvcmRlcklubmVyUmVjdChib3JkZXJS
ZWN0LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLyAyLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lk
dGgoKSAvIDIsIAorICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC8gMiwgc3R5
bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAvIDIpOwogCi0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKHRoaXJkKTsKLSAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgb3V0ZXJZLCByYWRpdXMu
d2lkdGgoKSAqIDIsIG91dGVySGVpZ2h0KSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGlubmVyVGhpcmQgPiAy
ID8gaW5uZXJUaGlyZCAtIDEgOiBpbm5lclRoaXJkKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoaW5uZXJYLCBpbm5lclksIGlubmVyV2lkdGgsIGlubmVy
SGVpZ2h0KSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgR1JPT1ZFOgotICAgICAgICBjYXNlIFJJREdFOiB7Ci0gICAg
ICAgICAgICBDb2xvciBjMjsKLSAgICAgICAgICAgIGlmICgoc3R5bGUgPT0gUklER0UgJiYgKHMg
PT0gQlNUb3AgfHwgcyA9PSBCU0xlZnQpKSB8fAotICAgICAgICAgICAgICAgICAgICAoc3R5bGUg
PT0gR1JPT1ZFICYmIChzID09IEJTQm90dG9tIHx8IHMgPT0gQlNSaWdodCkpKQotICAgICAgICAg
ICAgICAgIGMyID0gYy5kYXJrKCk7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBjMiA9IGM7Ci0gICAgICAgICAgICAgICAgYyA9IGMuZGFyaygpOwotICAgICAgICAgICAgfQor
ICAgICAgICBJbnRTaXplIHRvcExlZnRIYWxmUmFkaXVzLCB0b3BSaWdodEhhbGZSYWRpdXMsIGJv
dHRvbUxlZnRIYWxmUmFkaXVzLCBib3R0b21SaWdodEhhbGZSYWRpdXM7CisgICAgICAgIHN0eWxl
LT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoaGFsZkJvcmRlclJl
Y3QsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAvIDIsIAorICAgICAgICAgICAgc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCkgLyAyLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLyAyLCBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIC8gMiwgCisgICAgICAgICAgICB0b3BMZWZ0SGFsZlJhZGl1
cywgdG9wUmlnaHRIYWxmUmFkaXVzLCBib3R0b21MZWZ0SGFsZlJhZGl1cywgYm90dG9tUmlnaHRI
YWxmUmFkaXVzKTsKIAotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHls
ZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNv
bG9yKGMsIG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4LCB5LCByYWRpdXMud2lkdGgoKSAqIDIsIHJhZGl1
cy5oZWlnaHQoKSAqIDIpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOworICAgICAgICAvLyBQYWlu
dCBmdWxsIGJvcmRlcgorICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4
dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBz
dHlsZSwgYywgczEpOwogCi0gICAgICAgICAgICBmbG9hdCBoYWxmVGhpY2tuZXNzID0gKHRoaWNr
bmVzcyArIDEuMGYpIC8gNC4wZjsKLSAgICAgICAgICAgIGludCBzaGlmdEZvcklubmVyID0gc3Rh
dGljX2Nhc3Q8aW50PihoYWxmVGhpY2tuZXNzICogMS41Zik7Ci0gICAgICAgICAgICBncmFwaGlj
c0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMyLCBtX3N0eWxlLT5jb2xvclNwYWNlKCkpOwotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoaGFsZlRoaWNrbmVz
cyA+IDIgPyBoYWxmVGhpY2tuZXNzIC0gMSA6IGhhbGZUaGlja25lc3MpOwotICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4ICsgc2hpZnRGb3JJbm5lciwgeSAr
IHNoaWZ0Rm9ySW5uZXIsIChyYWRpdXMud2lkdGgoKSAtIHNoaWZ0Rm9ySW5uZXIpICogMiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyYWRpdXMuaGVpZ2h0KCkgLSBz
aGlmdEZvcklubmVyKSAqIDIpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBJTlNFVDoKLSAgICAgICAgICAgIGlmIChz
ID09IEJTVG9wIHx8IHMgPT0gQlNMZWZ0KQotICAgICAgICAgICAgICAgIGMgPSBjLmRhcmsoKTsK
LSAgICAgICAgY2FzZSBPVVRTRVQ6Ci0gICAgICAgICAgICBpZiAoc3R5bGUgPT0gT1VUU0VUICYm
IChzID09IEJTQm90dG9tIHx8IHMgPT0gQlNSaWdodCkpCi0gICAgICAgICAgICAgICAgYyA9IGMu
ZGFyaygpOwotICAgICAgICBjYXNlIFNPTElEOgotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0
LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnNldFN0cm9rZUNvbG9yKGMsIG1fc3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyh0aGlja25lc3MpOwotICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VBcmMoSW50UmVjdCh4LCB5LCByYWRpdXMud2lk
dGgoKSAqIDIsIHJhZGl1cy5oZWlnaHQoKSAqIDIpLCBhbmdsZVN0YXJ0LCBhbmdsZVNwYW4pOwot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8vIFBhaW50IGlubmVyIG9ubHkKKyAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUm91
bmRlZFJlY3RDbGlwKGhhbGZCb3JkZXJSZWN0LCB0b3BMZWZ0SGFsZlJhZGl1cywgdG9wUmlnaHRI
YWxmUmFkaXVzLAorICAgICAgICAgICAgYm90dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0
SGFsZlJhZGl1cyk7CisgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0
LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHMsIHN0
eWxlLCBjLCBzMik7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworCisgICAg
ICAgIHJldHVybjsKICAgICB9CisgICAgY2FzZSBJTlNFVDoKKyAgICAgICAgaWYgKHMgPT0gQlNU
b3AgfHwgcyA9PSBCU0xlZnQpCisgICAgICAgICAgICBjID0gYy5kYXJrKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgT1VUU0VUOgorICAgICAgICBpZiAocyA9PSBCU0JvdHRvbSB8fCBzID09
IEJTUmlnaHQpCisgICAgICAgICAgICBjID0gYy5kYXJrKCk7CisgICAgICAgIGJyZWFrOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0U3Ryb2tlU3R5bGUoTm9TdHJva2UpOworICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0RmlsbENv
bG9yKGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1Jl
Y3QoYm9yZGVyUmVjdCk7CiB9CiAKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRQREZVUkxSZWN0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsOCArNDM1LDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgZHJhd0xpbmVGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGludCB4
MSwgaW50IHkxLCBpbnQgeDIsIGludCB5MiwgQm94U2lkZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxlLCBpbnQgYWRqYncxLCBpbnQgYWRqYncyKTsKLSAg
ICB2b2lkIGRyYXdBcmNGb3JCb3hTaWRlKEdyYXBoaWNzQ29udGV4dCosIGludCB4LCBpbnQgeSwg
ZmxvYXQgdGhpY2tuZXNzLCBJbnRTaXplIHJhZGl1cywgaW50IGFuZ2xlU3RhcnQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgYW5nbGVTcGFuLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRl
clN0eWxlLCBib29sIGZpcnN0Q29ybmVyKTsKKyAgICB2b2lkIGRyYXdCb3hTaWRlRnJvbVBhdGgo
R3JhcGhpY3NDb250ZXh0KiwgSW50UmVjdCwgUGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmxvYXQgdGhpY2tuZXNzLCBmbG9hdCBkcmF3VGhpY2tuZXNzLCBCb3hTaWRlLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9y
IGMsIEVCb3JkZXJTdHlsZSBzdHlsZSk7CisKKyAgICBJbnRSZWN0IGJvcmRlcklubmVyUmVjdChj
b25zdCBJbnRSZWN0JiwgdW5zaWduZWQgc2hvcnQgdG9wV2lkdGgsIHVuc2lnbmVkIHNob3J0IGJv
dHRvbVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGxl
ZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCkgY29uc3Q7CiAKICAgICAvLyBUaGUg
cHNldWRvIGVsZW1lbnQgc3R5bGUgY2FuIGJlIGNhY2hlZCBvciB1bmNhY2hlZC4gIFVzZSB0aGUg
Y2FjaGVkIG1ldGhvZCBpZiB0aGUgcHNldWRvIGVsZW1lbnQgZG9lc24ndCByZXNwZWN0CiAgICAg
Ly8gYW55IHBzZXVkbyBjbGFzc2VzIChhbmQgdGhlcmVmb3JlIGhhcyBubyBjb25jZXB0IG9mIGNo
YW5naW5nIHN0YXRlKS4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5j
cHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MzcsMTQgKzczNyw4IEBAIHZvaWQgUmVuZGVyU3R5
bGU6OnNldEJveFNoYWRvdyhTaGFkb3dEYXQKICAgICByYXJlRGF0YS0+bV9ib3hTaGFkb3cuc2V0
KHNoYWRvd0RhdGEpOwogfQogCi12b2lkIFJlbmRlclN0eWxlOjpnZXRCb3JkZXJSYWRpaUZvclJl
Y3QoY29uc3QgSW50UmVjdCYgciwgSW50U2l6ZSYgdG9wTGVmdCwgSW50U2l6ZSYgdG9wUmlnaHQs
IEludFNpemUmIGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0KSBjb25zdAorc3RhdGlj
IHZvaWQgY29uc3RyYWluQ29ybmVyUmFkaWlGb3JSZWN0KGNvbnN0IEludFJlY3QmIHIsIEludFNp
emUmIHRvcExlZnQsIEludFNpemUmIHRvcFJpZ2h0LCBJbnRTaXplJiBib3R0b21MZWZ0LCBJbnRT
aXplJiBib3R0b21SaWdodCkKIHsKLSAgICB0b3BMZWZ0ID0gc3Vycm91bmQtPmJvcmRlci50b3BM
ZWZ0KCk7Ci0gICAgdG9wUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRvcFJpZ2h0KCk7Ci0gICAg
Ci0gICAgYm90dG9tTGVmdCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tTGVmdCgpOwotICAgIGJv
dHRvbVJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0b21SaWdodCgpOwotCiAgICAgLy8gQ29u
c3RyYWluIGNvcm5lciByYWRpaSB1c2luZyBDU1MzIHJ1bGVzOgogICAgIC8vIGh0dHA6Ly93d3cu
dzMub3JnL1RSL2NzczMtYmFja2dyb3VuZC8jdGhlLWJvcmRlci1yYWRpdXMKICAgICAKQEAgLTc4
OSw2ICs3ODMsMzkgQEAgdm9pZCBSZW5kZXJTdHlsZTo6Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0KAog
ICAgIH0KIH0KIAordm9pZCBSZW5kZXJTdHlsZTo6Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGNvbnN0
IEludFJlY3QmIHIsIEludFNpemUmIHRvcExlZnQsIEludFNpemUmIHRvcFJpZ2h0LCBJbnRTaXpl
JiBib3R0b21MZWZ0LCBJbnRTaXplJiBib3R0b21SaWdodCkgY29uc3QKK3sKKyAgICB0b3BMZWZ0
ID0gc3Vycm91bmQtPmJvcmRlci50b3BMZWZ0KCk7CisgICAgdG9wUmlnaHQgPSBzdXJyb3VuZC0+
Ym9yZGVyLnRvcFJpZ2h0KCk7CisgICAgCisgICAgYm90dG9tTGVmdCA9IHN1cnJvdW5kLT5ib3Jk
ZXIuYm90dG9tTGVmdCgpOworICAgIGJvdHRvbVJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0
b21SaWdodCgpOworCisgICAgY29uc3RyYWluQ29ybmVyUmFkaWlGb3JSZWN0KHIsIHRvcExlZnQs
IHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7Cit9CisKK3ZvaWQgUmVuZGVyU3R5
bGU6OmdldElubmVyQm9yZGVyUmFkaWlGb3JSZWN0V2l0aEJvcmRlcldpZHRocyhjb25zdCBJbnRS
ZWN0JiBpbm5lclJlY3QsIHVuc2lnbmVkIHNob3J0IHRvcFdpZHRoLCB1bnNpZ25lZCBzaG9ydCBi
b3R0b21XaWR0aCwgdW5zaWduZWQgc2hvcnQgbGVmdFdpZHRoLCB1bnNpZ25lZCBzaG9ydCByaWdo
dFdpZHRoLCBJbnRTaXplJiBpbm5lclRvcExlZnQsIEludFNpemUmIGlubmVyVG9wUmlnaHQsIElu
dFNpemUmIGlubmVyQm90dG9tTGVmdCwgSW50U2l6ZSYgaW5uZXJCb3R0b21SaWdodCkgY29uc3QK
K3sKKyAgICBpbm5lclRvcExlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRvcExlZnQoKTsKKyAgICBp
bm5lclRvcFJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci50b3BSaWdodCgpOworICAgIGlubmVyQm90
dG9tTGVmdCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tTGVmdCgpOworICAgIGlubmVyQm90dG9t
UmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0KCk7CisKKyAgICBpbm5lclRvcExl
ZnQuc2V0V2lkdGgobWF4KDAsIGlubmVyVG9wTGVmdC53aWR0aCgpIC0gbGVmdFdpZHRoKSk7Cisg
ICAgaW5uZXJUb3BMZWZ0LnNldEhlaWdodChtYXgoMCwgaW5uZXJUb3BMZWZ0LmhlaWdodCgpIC0g
dG9wV2lkdGgpKTsKKworICAgIGlubmVyVG9wUmlnaHQuc2V0V2lkdGgobWF4KDAsIGlubmVyVG9w
UmlnaHQud2lkdGgoKSAtIHJpZ2h0V2lkdGgpKTsKKyAgICBpbm5lclRvcFJpZ2h0LnNldEhlaWdo
dChtYXgoMCwgaW5uZXJUb3BSaWdodC5oZWlnaHQoKSAtIHRvcFdpZHRoKSk7CisKKyAgICBpbm5l
ckJvdHRvbUxlZnQuc2V0V2lkdGgobWF4KDAsIGlubmVyQm90dG9tTGVmdC53aWR0aCgpIC0gbGVm
dFdpZHRoKSk7CisgICAgaW5uZXJCb3R0b21MZWZ0LnNldEhlaWdodChtYXgoMCwgaW5uZXJCb3R0
b21MZWZ0LmhlaWdodCgpIC0gYm90dG9tV2lkdGgpKTsKKworICAgIGlubmVyQm90dG9tUmlnaHQu
c2V0V2lkdGgobWF4KDAsIGlubmVyQm90dG9tUmlnaHQud2lkdGgoKSAtIHJpZ2h0V2lkdGgpKTsK
KyAgICBpbm5lckJvdHRvbVJpZ2h0LnNldEhlaWdodChtYXgoMCwgaW5uZXJCb3R0b21SaWdodC5o
ZWlnaHQoKSAtIGJvdHRvbVdpZHRoKSk7CisKKyAgICBjb25zdHJhaW5Db3JuZXJSYWRpaUZvclJl
Y3QoaW5uZXJSZWN0LCBpbm5lclRvcExlZnQsIGlubmVyVG9wUmlnaHQsIGlubmVyQm90dG9tTGVm
dCwgaW5uZXJCb3R0b21SaWdodCk7Cit9CisKIGNvbnN0IENvdW50ZXJEaXJlY3RpdmVNYXAqIFJl
bmRlclN0eWxlOjpjb3VudGVyRGlyZWN0aXZlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX2NvdW50ZXJEaXJlY3RpdmVzLmdldCgpOwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc4Nyw2ICs3
ODcsMTAgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIGdldEJvcmRlclJhZGlpRm9y
UmVjdChjb25zdCBJbnRSZWN0JiwgSW50U2l6ZSYgdG9wTGVmdCwgSW50U2l6ZSYgdG9wUmlnaHQs
IEludFNpemUmIGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0KSBjb25zdDsKKyAgICB2
b2lkIGdldElubmVyQm9yZGVyUmFkaWlGb3JSZWN0V2l0aEJvcmRlcldpZHRocyhjb25zdCBJbnRS
ZWN0JiwgdW5zaWduZWQgc2hvcnQgdG9wV2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIHNob3J0IGJvdHRvbVdpZHRoLCB1bnNpZ25lZCBzaG9ydCBsZWZ0V2lkdGgs
IHVuc2lnbmVkIHNob3J0IHJpZ2h0V2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEludFNpemUmIGlubmVyVG9wTGVmdCwgSW50U2l6ZSYgaW5uZXJUb3BSaWdodCwgSW50U2l6ZSYg
aW5uZXJCb3R0b21MZWZ0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplJiBp
bm5lckJvdHRvbVJpZ2h0KSBjb25zdDsKIAogICAgIHZvaWQgc2V0Qm9yZGVyTGVmdFdpZHRoKHVu
c2lnbmVkIHNob3J0IHYpIHsgU0VUX1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fbGVmdC5tX3dpZHRo
LCB2KSB9CiAgICAgdm9pZCBzZXRCb3JkZXJMZWZ0U3R5bGUoRUJvcmRlclN0eWxlIHYpIHsgU0VU
X1ZBUihzdXJyb3VuZCwgYm9yZGVyLm1fbGVmdC5tX3N0eWxlLCB2KSB9CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MTY1MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDI5IEBACisyMDEwLTA2LTIyICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0cyB3
aXRoIG5ldyByZXN1bHRzIGFmdGVyIAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9OTE5NyBDU1MzOiBCb3JkZXJzIAorICAgICAgICB3aXRoIGJvcmRlci1y
YWRpdXMgYW5kIGRvdWJsZSwgZ3Jvb3ZlLCBvciByaWRnZSBzdHlsZXMgc2hvdWxkIGxvb2sgCisg
ICAgICAgIGJldHRlcgorCisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3Jk
ZXJSYWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAq
IHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzQWxsU3R5bGVzQWxsQ29ybmVy
cy1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3Jk
ZXJSYWRpdXNEYXNoZWQwMS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLnBuZzoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAyLWV4cGVj
dGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVy
UmFkaXVzRGFzaGVkMDItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAg
ICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMy1leHBlY3Rl
ZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNE
b3R0ZWQwMS1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9i
b3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAyLWV4cGVjdGVkLmNoZWNr
c3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90
dGVkMDItZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMv
Ym9yZGVyUmFkaXVzRG90dGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5wbmc6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3VibGUwMS1l
eHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2Jv
cmRlclJhZGl1c0RvdWJsZTAxLWV4cGVjdGVkLnBuZzoKKwogMjAxMC0wNi0yMiAgS2ludWtvIFlh
c3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZC4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzQWxsU3R5
bGVzQWxsQ29ybmVycy1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5l
cnMtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxh
dGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4
cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi01MTdmMzMyNGMwNzY0
ZmI4MjcxNmE1NDEzNTk1NjMwOQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzdhOGIxNTI0
MDdkZmQwYjU5Nzk1Y2JjMGI5YjY0NTM0ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNo
ZWQwMS1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLmNoZWNrc3Vt
CShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRl
cnMvYm9yZGVyUmFkaXVzRGFzaGVkMDEtZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkK
QEAgLTEgKzEgQEAKLTQ3ZWQyZTMzZTAzZDYxODA1NjY1YWE0ZTVhYTg4NmNmClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQorZDJkNTgwYTJkOWU0ZTY1ZmQ5YzFjYWU0NWZiNzdhMDgKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAyLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVz
RGFzaGVkMDItZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3Rl
ZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotYTVjZmEzZTI5MGU1Y2FlMDQ2
M2E3YzQyNThlNmU5OGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisxZGE3Mjc1ZjMzZDY1
MGViMmU3NjAyYjY3YTliN2NkMgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDMt
ZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFj
L2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMy1leHBlY3RlZC5jaGVja3N1bQkocmV2
aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2Jv
cmRlclJhZGl1c0Rhc2hlZDAzLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0x
ICsxIEBACi00ODBjYTAzZjI4NDJmNDYzY2QyMWM3YjU4MzJhYzI4ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKK2Y0NDE0MmQ2OWQyYzIyNTYxYmNkMTE2MTA5YmRiZWRiClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9y
ZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMS1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRl
ZDAxLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDEtZXhwZWN0ZWQuY2hl
Y2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTE2ZjQ2NWY3MWZmMGQ3YTY0NGNiYzhm
YTc4N2FhYTJhClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorNDFkZWU4OGY5YjYzMGQzODNj
YjE0MTViNmI3NzRkOTcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAyLWV4cGVj
dGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0
L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDItZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9u
IDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJS
YWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBA
QAotMzkxZTUzMjEwMzZlMTRlNDkyZTBiOTkxMzBhZDM1MzgKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCis2NjRjYmFkOGQ5MDJjODRmZWJmNWFmMWMzMjcxYjJiMgpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMv
Ym9yZGVyUmFkaXVzRG90dGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1l
eHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAzLWV4cGVjdGVkLmNoZWNrc3Vt
CSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi1jMTA4MDg5NzMyYzZiNTc2N2E1ODE2ZTdhOTMx
NTM4MwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzdhYWFhZjg4ZDBjZjJjNjE0NWNlOTFl
ODk3MWE0OTE4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3VibGUwMS1leHBlY3RlZC5j
aGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3Jk
ZXJzL2JvcmRlclJhZGl1c0RvdWJsZTAxLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0
NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVz
RG91YmxlMDEtZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTZh
ODljZGU2ZmJlYjhlNWNjYzUzNjM0MTZmNmY0NDkxClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQorZWJlOTlkNjkwZTVmYmFiNjI1Zjk5YTc3ZjJkYWRlNmIKXCBObyBuZXdsaW5lIGF0IGVuZCBv
ZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRl
clJhZGl1c0FsbFN0eWxlc0FsbENvcm5lcnMtZXhwZWN0ZWQucG5nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90
IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBp
bWFnZS9wbmcKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59529</attachid>
            <date>2010-06-23 10:32:49 -0700</date>
            <delta_ts>2010-06-23 12:42:45 -0700</delta_ts>
            <desc>Patch addresses some comments</desc>
            <filename>forReview3.txt</filename>
            <type>text/plain</type>
            <size>62955</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDYtMjIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTcgQ1NTMzogQm9y
ZGVycyAKKyAgICAgICAgd2l0aCBib3JkZXItcmFkaXVzIGFuZCBkb3VibGUsIGdyb292ZSwgb3Ig
cmlkZ2Ugc3R5bGVzIHNob3VsZCBsb29rIAorICAgICAgICBiZXR0ZXIKKworICAgICAgICBUaGlz
IHBhdGNoIHJlLXdvcmtzIGJvcmRlciByYWRpdXMgcGFpbnRpbmcgdG8gc3Ryb2tlIHBhdGhzIGlu
c3RlYWQgCisgICAgICAgIG9mIGFyY3MuIAorCisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbiBj
bGlwQ29udmV4UG9seWdvbigpLiBBZGRlZCBzdGF0aWMgCisgICAgICAgIGFkZENvbnZleFBvbHln
b25Ub0NvbnRleHQgc28gdGhhdCBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAg
ZHJhd0NvbnZleFBvbHlnb24oKSBhbmQgY2xpcENvbnZleFBvbHlnb24oKS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRD
b252ZXhQb2x5Z29uVG9Db250ZXh0KToKKworICAgICAgICBTaGVsbHMgb2YgaW1wbGVtZW50YXRp
b25zIG9uIG5vbi1DRyBwbGF0Zm9ybXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwQ29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKworICAgICAgICBUaGlzIG5ldyBoZWxwZXIgZnVu
Y3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgaW5uZXIgY29ybmVycyBvZiB0aGUgCisgICAgICAgIGJv
cmRlciB3aWxsIGFyY2ggaW4gb3IgbWVldCBhdCBhIHJpZ2h0IGFuZ2xlLiAgCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlcldpbGxBcmNJbm5lckVkZ2UpOgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmUtd3Jp
dHRlbiBzbyB0aGF0LCBmb3IgZWFjaCBzaWRlIG9mIHRoZSBib3JkZXIsIAorICAgICAgICBpZiBi
b3JkZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgdHJ1ZSwgd2UgZ28gZG93biBhIGJyYW5kIG5ldyBj
b2RlIAorICAgICAgICBwYXRoIG9mIGNsaXBwaW5nIHRvIGEgY29udmV4IHBvbHlnb24gZm9yIHRo
ZSBib3JkZXIgc2lkZSBhbmQgdGhlbiAKKyAgICAgICAgd2UgcGFpbnQgdGhlIHNpZGUgdXNpbmcg
dGhlIG5ldyBmdW5jdGlvbiBkcmF3Qm94U2lkZUZyb21QYXRoKCkuIElmIAorICAgICAgICBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgZmFsc2UsIHRoZW4gd2UgY2FsbCBpbnRvIHRoZSBvbGQg
CisgICAgICAgIGZhbWlsaWFyIGRyYXdMaW5lRm9yQm94U2lkZSgpIHdoaWNoIHJlbGllcyBvbiB0
aGUgcm91bmRlciBjbGlwIAorICAgICAgICByZWN0cyB3ZSBoYXZlIHNldCB1cCB0byBhcmNoIHRo
ZSBvdXRlciBlZGdlIG9mIHRoZSBib3JkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIGRv
ZXMgdGhlIG1hdGggdG8gZmlndXJlIG91dCB0aGF3IGNvbnZleCBwb2x5Z29uIAorICAgICAgICB0
byBjbGlwIHRvIGluIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gYXJjaCB0aGUgaW5uZXIgZWRn
ZSBvZiB0aGUgCisgICAgICAgIGJvcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorCisgICAgICAgIGJvcmRlcklubmVyUmVjdCBpcyBhIG5l
dyBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSAKKyAgICAgICAgUmVuZGVyT2JqZWN0
IGFuZCBSZW5kZXJCb3hNb2RlbE9iamVjdCB0byBkZXRlcm1pbmUgdGhlIHJlY3Qgb2YgdGhlIAor
ICAgICAgICBpbnNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpib3JkZXJJ
bm5lclJlY3QpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIHJlLXdvcmtzIGRyYXdBcmNG
b3JCb3hTaWRlIHRvIGRyYXcgZnJvbSBQYXRocyAKKyAgICAgICAgd2hlbiBhcHByb3ByaWF0ZSBp
bnN0ZWFkIG9mIHN0cm9raW5nIGFyY3MuIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisKKyAgICAgICAgTmV3IGZ1bmN0aW9uIAorICAgICAgICBSZW5kZXJTdHlsZTo6Z2V0SW5u
ZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKCkgZ2V0cyB0aGUgCisgICAgICAg
IGlubmVyIHJhZGl1cyB2YWx1ZXMgZm9yIGEgcmVjdC4gSXQgdGFrZXMgYm9yZGVyIHdpZHRocyBh
IHBhcmFtZXRlcnMgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBzdHlsZSdzIGJvcmRl
ciB3aWR0aHMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCAKKyAgICAgICAgaW4gaW5uZXIgcmFkaXVz
IGNhbGN1bGF0aW9ucyBmb3IgZG91YmxlIGFuZCBncm9vdmUvcmlkZ2UgCisgICAgICAgIGNhbGN1
bGF0aW9ucy4gVGhlIFczQyBjb3JuZXIgY29uc3RyYWluaW5nIHJ1bGVzIHdlcmUgbW92ZWQgdG8g
YSAKKyAgICAgICAgc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGJvdGgg
Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0CisgICAgICAgICgpIGFuZCBnZXRJbm5lckJvcmRlclJhZGlp
Rm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RyYWluQ29ybmVyUmFkaWlGb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRCb3JkZXJSYWRpaUZvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldElubmVyQm9yZGVyUmFkaWlG
b3JSZWN0V2l0aEJvcmRlcldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisKIDIwMTAtMDYtMjIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDYxNTQ1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDYgKzIzOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlw
T3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCk7CiAgICAgICAgIHZvaWQgY2xpcFBhdGgoV2luZFJ1bGUpOwog
ICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlQnVmZmVyKik7CisgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCopOwogCiAgICAgICAgIGludCB0ZXh0RHJhd2luZ01vZGUo
KTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50KTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0
LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9p
bnRzIDw9IDEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogSU1QTEVNRU5U
IQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQwLDYgKzQ0MCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0
IEluCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAorc3RhdGljIHZv
aWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90
IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIENHQ29udGV4dEJl
Z2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2lu
dHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG51
bVBvaW50czsgaSsrKQorICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBw
b2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgpKTsKKyAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29u
dGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXpl
X3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC00NTMsMTggKzQ2MiwyNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgaWYgKGFudGlhbGlhc2Vk
ICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXMoY29udGV4dCwgYW50aWFsaWFzZWQpOwogCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOwotICAgIENHQ29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1swXS54KCksIHBv
aW50c1swXS55KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgaSsrKQot
ICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBw
b2ludHNbaV0ueSgpKTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7Ci0KKyAgICBh
ZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNvbnRleHQsIG5wb2ludHMsIHBvaW50cyk7CiAgICAg
ZHJhd1BhdGgoKTsKIAogICAgIGlmIChhbnRpYWxpYXNlZCAhPSBzaG91bGRBbnRpYWxpYXMoKSkK
ICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlh
bGlhcygpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9pbnRzIDw9
IDEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0
KHBsYXRmb3JtQ29udGV4dCgpLCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY2xpcFBhdGgoUlVM
RV9OT05aRVJPKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw2ICsxNTIsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2lu
dHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG51bVBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gRklYTUU6IElNUExFTUVOVCEhCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI4LDYgKzUyOCwxNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgcC0+cmVzdG9yZSgpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChudW1Qb2ludHMgPD0gMSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhIQorfQorCiBRUGVuIEdy
YXBoaWNzQ29udGV4dDo6cGVuKCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2
ICs0NzgsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAg
IH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9pbnRzIDw9IDEpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogSU1QTEVNRU5UISEKK30KKwogLy8g
VGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQg
aW4gbGlzdHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVj
dCYgZWxpcHNlUmVjdCkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
R3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCShyZXZpc2lvbiA2MTU0NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDgsNiArOTQ4LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBw
b2ludHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG51bVBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
RklYTUU6IElNUExFTUVOVCEhCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFj
aXR5KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGlj
c0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsy
NTYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGRl
bGV0ZSBbXSBwb2x5Z29uOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBv
bHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChudW1Q
b2ludHMgPD0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IElNUExFTUVOVCEh
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgpAQCAtOTA5LDEyICs5MTAsMjQgQEAgYm9vbCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRO
aW5lUGllYwogICAgIHJldHVybiB0cnVlOwogfQogCitzdGF0aWMgYm9vbCBib3JkZXJXaWxsQXJj
SW5uZXJFZGdlKGNvbnN0IEludFNpemUmIGZpcnN0UmFkaXVzLCBjb25zdCBJbnRTaXplJiBzZWNv
bmRSYWRpdXMsIGludCBmaXJzdEJvcmRlcldpZHRoLCBpbnQgc2Vjb25kQm9yZGVyV2lkdGgsIGlu
dCBtaWRkbGVCb3JkZXJXaWR0aCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IGlzIGluc3Vm
ZmljaWVudC4gV2UgbmVlZCB0byB0YWtlIGJvcmRlciBzdHlsZSBpbnRvIGFjY291bnQuCisgICAg
cmV0dXJuICghZmlyc3RSYWRpdXMud2lkdGgoKSB8fCBmaXJzdFJhZGl1cy53aWR0aCgpID49IGZp
cnN0Qm9yZGVyV2lkdGgpCisgICAgICAgICAgICAmJiAoIWZpcnN0UmFkaXVzLmhlaWdodCgpIHx8
IGZpcnN0UmFkaXVzLmhlaWdodCgpID49IG1pZGRsZUJvcmRlcldpZHRoKQorICAgICAgICAgICAg
JiYgKCFzZWNvbmRSYWRpdXMud2lkdGgoKSB8fCBzZWNvbmRSYWRpdXMud2lkdGgoKSA+PSBzZWNv
bmRCb3JkZXJXaWR0aCkKKyAgICAgICAgICAgICYmICghc2Vjb25kUmFkaXVzLmhlaWdodCgpIHx8
IHNlY29uZFJhZGl1cy5oZWlnaHQoKSA+PSBtaWRkbGVCb3JkZXJXaWR0aCk7Cit9CisKIHZvaWQg
UmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhp
Y3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29sIGJl
Z2luLCBib29sIGVuZCkKIHsKICAgICBpZiAocGFpbnROaW5lUGllY2VJbWFnZShncmFwaGljc0Nv
bnRleHQsIHR4LCB0eSwgdywgaCwgc3R5bGUsIHN0eWxlLT5ib3JkZXJJbWFnZSgpKSkKICAgICAg
ICAgcmV0dXJuOwogCisgICAgaWYgKGdyYXBoaWNzQ29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKICAgICBjb25zdCBDb2xvciYgdG9wQ29sb3IgPSBzdHlsZS0+
dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpOwogICAgIGNv
bnN0IENvbG9yJiBib3R0b21Db2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21Db2xvcik7CiAgICAgY29uc3QgQ29sb3ImIGxlZnRDb2xvciA9
IHN0eWxlLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3Ip
OwpAQCAtOTM2LDE0ICs5NDksMjIgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRC
b3JkZXIoRwogICAgIGJvb2wgcmVuZGVyQm90dG9tID0gYm90dG9tU3R5bGUgPiBCSElEREVOICYm
ICFib3R0b21UcmFuc3BhcmVudDsKIAogICAgIGJvb2wgcmVuZGVyUmFkaWkgPSBmYWxzZTsKKyAg
ICBQYXRoIHJvdW5kZWRQYXRoOwogICAgIEludFNpemUgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRv
bUxlZnQsIGJvdHRvbVJpZ2h0OworICAgIEludFJlY3QgYm9yZGVyUmVjdCh0eCwgdHksIHcsIGgp
OwogCiAgICAgaWYgKHN0eWxlLT5oYXNCb3JkZXJSYWRpdXMoKSkgewotICAgICAgICBJbnRSZWN0
IGJvcmRlclJlY3QgPSBJbnRSZWN0KHR4LCB0eSwgdywgaCk7Ci0KICAgICAgICAgSW50U2l6ZSB0
b3BMZWZ0UmFkaXVzLCB0b3BSaWdodFJhZGl1cywgYm90dG9tTGVmdFJhZGl1cywgYm90dG9tUmln
aHRSYWRpdXM7CiAgICAgICAgIHN0eWxlLT5nZXRCb3JkZXJSYWRpaUZvclJlY3QoYm9yZGVyUmVj
dCwgdG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRv
bVJpZ2h0UmFkaXVzKTsKIAorICAgICAgICBJbnRSZWN0IGlubmVyQm9yZGVyUmVjdCA9IGJvcmRl
cklubmVyUmVjdChib3JkZXJSZWN0LCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCksIAorICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgp
LCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKworICAgICAgICBJbnRTaXplIGlubmVyVG9w
TGVmdFJhZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBp
bm5lckJvdHRvbVJpZ2h0UmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0SW5uZXJCb3JkZXJSYWRp
aUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKGlubmVyQm9yZGVyUmVjdCwgc3R5bGUtPmJvcmRlclRv
cFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCAKKyAgICAgICAgICAgIHN0eWxl
LT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgaW5uZXJUb3BM
ZWZ0UmFkaXVzLCBpbm5lclRvcFJpZ2h0UmFkaXVzLCAKKyAgICAgICAgICAgIGlubmVyQm90dG9t
TGVmdFJhZGl1cywgaW5uZXJCb3R0b21SaWdodFJhZGl1cyk7CisKICAgICAgICAgaWYgKGJlZ2lu
KSB7CiAgICAgICAgICAgICB0b3BMZWZ0ID0gdG9wTGVmdFJhZGl1czsKICAgICAgICAgICAgIGJv
dHRvbUxlZnQgPSBib3R0b21MZWZ0UmFkaXVzOwpAQCAtOTU1LDMwMiArOTc2LDEwMyBAQCB2b2lk
IFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHCiAKICAgICAgICAgcmVuZGVyUmFk
aWkgPSB0cnVlOwogCi0gICAgICAgIC8vIENsaXAgdG8gdGhlIHJvdW5kZWQgcmVjdGFuZ2xlLgor
ICAgICAgICAvLyBDbGlwIHRvIHRoZSBpbm5lciBhbmQgb3V0ZXIgcmFkaWkgcmVjdHMuCiAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwogICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZFJvdW5kZWRSZWN0Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVm
dCwgYm90dG9tUmlnaHQpOwotICAgIH0KKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwT3V0
Um91bmRlZFJlY3QoaW5uZXJCb3JkZXJSZWN0LCBpbm5lclRvcExlZnRSYWRpdXMsIGlubmVyVG9w
UmlnaHRSYWRpdXMsIGlubmVyQm90dG9tTGVmdFJhZGl1cywgaW5uZXJCb3R0b21SaWdodFJhZGl1
cyk7CiAKLSAgICBpbnQgZmlyc3RBbmdsZVN0YXJ0LCBzZWNvbmRBbmdsZVN0YXJ0LCBmaXJzdEFu
Z2xlU3Bhbiwgc2Vjb25kQW5nbGVTcGFuOwotICAgIGZsb2F0IHRoaWNrbmVzczsKLSAgICBib29s
IHVwcGVyTGVmdEJvcmRlclN0eWxlc01hdGNoID0gcmVuZGVyTGVmdCAmJiAodG9wU3R5bGUgPT0g
bGVmdFN0eWxlKSAmJiAodG9wQ29sb3IgPT0gbGVmdENvbG9yKTsKLSAgICBib29sIHVwcGVyUmln
aHRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlclJpZ2h0ICYmICh0b3BTdHlsZSA9PSByaWdodFN0
eWxlKSAmJiAodG9wQ29sb3IgPT0gcmlnaHRDb2xvcikgJiYgKHRvcFN0eWxlICE9IE9VVFNFVCkg
JiYgKHRvcFN0eWxlICE9IFJJREdFKSAmJiAodG9wU3R5bGUgIT0gSU5TRVQpICYmICh0b3BTdHls
ZSAhPSBHUk9PVkUpOwotICAgIGJvb2wgbG93ZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggPSByZW5k
ZXJMZWZ0ICYmIChib3R0b21TdHlsZSA9PSBsZWZ0U3R5bGUpICYmIChib3R0b21Db2xvciA9PSBs
ZWZ0Q29sb3IpICYmIChib3R0b21TdHlsZSAhPSBPVVRTRVQpICYmIChib3R0b21TdHlsZSAhPSBS
SURHRSkgJiYgKGJvdHRvbVN0eWxlICE9IElOU0VUKSAmJiAoYm90dG9tU3R5bGUgIT0gR1JPT1ZF
KTsKLSAgICBib29sIGxvd2VyUmlnaHRCb3JkZXJTdHlsZXNNYXRjaCA9IHJlbmRlclJpZ2h0ICYm
IChib3R0b21TdHlsZSA9PSByaWdodFN0eWxlKSAmJiAoYm90dG9tQ29sb3IgPT0gcmlnaHRDb2xv
cik7CisgICAgICAgIHJvdW5kZWRQYXRoID0gUGF0aDo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShi
b3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwor
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFBhdGgocm91bmRlZFBhdGgpOworICAgIH0KIAog
ICAgIGlmIChyZW5kZXJUb3ApIHsKLSAgICAgICAgYm9vbCBpZ25vcmVfbGVmdCA9IChyZW5kZXJS
YWRpaSAmJiB0b3BMZWZ0LndpZHRoKCkgPiAwKSB8fAotICAgICAgICAgICAgKHRvcENvbG9yID09
IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQgJiYgdG9wU3R5
bGUgPj0gT1VUU0VUICYmCi0gICAgICAgICAgICAgKGxlZnRTdHlsZSA9PSBET1RURUQgfHwgbGVm
dFN0eWxlID09IERBU0hFRCB8fCBsZWZ0U3R5bGUgPT0gU09MSUQgfHwgbGVmdFN0eWxlID09IE9V
VFNFVCkpOwotCi0gICAgICAgIGJvb2wgaWdub3JlX3JpZ2h0ID0gKHJlbmRlclJhZGlpICYmIHRv
cFJpZ2h0LndpZHRoKCkgPiAwKSB8fAotICAgICAgICAgICAgKHRvcENvbG9yID09IHJpZ2h0Q29s
b3IgJiYgdG9wVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCAmJiB0b3BTdHlsZSA+PSBP
VVRTRVQgJiYKLSAgICAgICAgICAgICAocmlnaHRTdHlsZSA9PSBET1RURUQgfHwgcmlnaHRTdHls
ZSA9PSBEQVNIRUQgfHwgcmlnaHRTdHlsZSA9PSBTT0xJRCB8fCByaWdodFN0eWxlID09IElOU0VU
KSk7Ci0KICAgICAgICAgaW50IHggPSB0eDsKICAgICAgICAgaW50IHgyID0gdHggKyB3OwotICAg
ICAgICBpZiAocmVuZGVyUmFkaWkpIHsKLSAgICAgICAgICAgIHggKz0gdG9wTGVmdC53aWR0aCgp
OwotICAgICAgICAgICAgeDIgLT0gdG9wUmlnaHQud2lkdGgoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRyYXdMaW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHgsIHR5LCB4MiwgdHkgKyBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwKLSAgICAg
ICAgICAgICAgICAgICBpZ25vcmVfbGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCks
IGlnbm9yZV9yaWdodCA/IDAgOiBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKLQotICAgICAg
ICBpZiAocmVuZGVyUmFkaWkpIHsKLSAgICAgICAgICAgIGludCBsZWZ0WSA9IHR5OwotCi0gICAg
ICAgICAgICAvLyBXZSBtYWtlIHRoZSBhcmMgZG91YmxlIHRoaWNrIGFuZCBsZXQgdGhlIGNsaXAg
cmVjdCB0YWtlIGNhcmUgb2YgY2xpcHBpbmcgdGhlIGV4dHJhIG9mZi4KLSAgICAgICAgICAgIC8v
IFdlJ3JlIGRvaW5nIHRoaXMgYmVjYXVzZSBpdCBkb2Vzbid0IHNlZW0gcG9zc2libGUgdG8gbWF0
Y2ggdGhlIGN1cnZlIG9mIHRoZSBjbGlwIGV4YWN0bHkKLSAgICAgICAgICAgIC8vIHdpdGggdGhl
IGFyYy1kcmF3aW5nIGZ1bmN0aW9uLgotICAgICAgICAgICAgdGhpY2tuZXNzID0gc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCkgKiAyOwotCi0gICAgICAgICAgICBpZiAodG9wTGVmdC53aWR0aCgpKSB7
Ci0gICAgICAgICAgICAgICAgaW50IGxlZnRYID0gdHg7Ci0gICAgICAgICAgICAgICAgLy8gVGhl
IGlubmVyIGNsaXAgY2xpcHMgaW5zaWRlIHRoZSBhcmMuIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBv
cnRhbnQgZm9yIDFweCBib3JkZXJzLgotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlMZWZ0SW5u
ZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IHRvcExlZnQud2lkdGgoKSkKLSAg
ICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpIDwgdG9wTGVmdC5o
ZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHRvcFN0eWxlICE9IERPVUJMRSB8fCBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxl
ZnRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZl
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVk
UmVjdENsaXAoSW50UmVjdChsZWZ0WCwgbGVmdFksIHRvcExlZnQud2lkdGgoKSAqIDIsIHRvcExl
ZnQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSk7Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gOTA7Ci0gICAg
ICAgICAgICAgICAgZmlyc3RBbmdsZVNwYW4gPSB1cHBlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCA/
IDkwIDogNDU7Ci0KLSAgICAgICAgICAgICAgICAvLyBEcmF3IHVwcGVyIGxlZnQgYXJjCi0gICAg
ICAgICAgICAgICAgZHJhd0FyY0ZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCBsZWZ0WCwgbGVm
dFksIHRoaWNrbmVzcywgdG9wTGVmdCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFuZ2xlU3BhbiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTVG9wLCB0b3BDb2xvciwgdG9wU3R5bGUs
IHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUxlZnRJbm5lckNsaXApCi0gICAgICAg
ICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpZiAodG9wUmlnaHQud2lkdGgoKSkgewotICAgICAgICAgICAgICAgIGlu
dCByaWdodFggPSB0eCArIHcgLSB0b3BSaWdodC53aWR0aCgpICogMjsKLSAgICAgICAgICAgICAg
ICBib29sIGFwcGx5UmlnaHRJbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSA8
IHRvcFJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+Ym9yZGVy
VG9wV2lkdGgoKSA8IHRvcFJpZ2h0LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAo
dG9wU3R5bGUgIT0gRE9VQkxFIHx8IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpID4gNik7Ci0gICAg
ICAgICAgICAgICAgaWYgKGFwcGx5UmlnaHRJbm5lckNsaXApIHsKLSAgICAgICAgICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoSW50UmVjdChyaWdodFgsIGxlZnRZLCB0
b3BSaWdodC53aWR0aCgpICogMiwgdG9wUmlnaHQuaGVpZ2h0KCkgKiAyKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZS0+
Ym9yZGVyVG9wV2lkdGgoKSk7Ci0gICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAg
aWYgKHVwcGVyUmlnaHRCb3JkZXJTdHlsZXNNYXRjaCkgewotICAgICAgICAgICAgICAgICAgICBz
ZWNvbmRBbmdsZVN0YXJ0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFu
ID0gOTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2Vj
b25kQW5nbGVTdGFydCA9IDQ1OwotICAgICAgICAgICAgICAgICAgICBzZWNvbmRBbmdsZVNwYW4g
PSA0NTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKHRvcExlZnQsIHRvcFJpZ2h0LCBzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
KSkgeworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBj
bGlwQm9yZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTVG9wLCBzdHlsZSk7CisgICAg
ICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsK
KyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJS
ZWN0LCByb3VuZGVkUGF0aCwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHRoaWNrbmVzcywgQlNU
b3AsIHN0eWxlLCB0b3BDb2xvciwgdG9wU3R5bGUpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250
ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlnbm9y
ZUxlZnQgPSAodG9wQ29sb3IgPT0gbGVmdENvbG9yICYmIHRvcFRyYW5zcGFyZW50ID09IGxlZnRU
cmFuc3BhcmVudCAmJiB0b3BTdHlsZSA+PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAobGVm
dFN0eWxlID09IERPVFRFRCB8fCBsZWZ0U3R5bGUgPT0gREFTSEVEIHx8IGxlZnRTdHlsZSA9PSBT
T0xJRCB8fCBsZWZ0U3R5bGUgPT0gT1VUU0VUKSk7CisgICAgICAgICAgICBib29sIGlnbm9yZVJp
Z2h0ID0gKHRvcENvbG9yID09IHJpZ2h0Q29sb3IgJiYgdG9wVHJhbnNwYXJlbnQgPT0gcmlnaHRU
cmFuc3BhcmVudCAmJiB0b3BTdHlsZSA+PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAocmln
aHRTdHlsZSA9PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBEQVNIRUQgfHwgcmlnaHRTdHlsZSA9
PSBTT0xJRCB8fCByaWdodFN0eWxlID09IElOU0VUKSk7CiAKLSAgICAgICAgICAgICAgICAvLyBE
cmF3IHVwcGVyIHJpZ2h0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdy
YXBoaWNzQ29udGV4dCwgcmlnaHRYLCBsZWZ0WSwgdGhpY2tuZXNzLCB0b3BSaWdodCwgc2Vjb25k
QW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlm
IChhcHBseVJpZ2h0SW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRyYXdMaW5lRm9yQm94
U2lkZShncmFwaGljc0NvbnRleHQsIHgsIHR5LCB4MiwgdHkgKyBzdHlsZS0+Ym9yZGVyVG9wV2lk
dGgoKSwgQlNUb3AsIHRvcENvbG9yLCB0b3BTdHlsZSwKKyAgICAgICAgICAgICAgICAgICAgaWdu
b3JlTGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIGlnbm9yZVJpZ2h0ID8gMCA6
IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOyAgICAgICAgICAgICAgIAogICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKHJlbmRlckJvdHRvbSkgewotICAgICAgICBib29sIGlnbm9yZV9sZWZ0
ID0gKHJlbmRlclJhZGlpICYmIGJvdHRvbUxlZnQud2lkdGgoKSA+IDApIHx8Ci0gICAgICAgICAg
ICAoYm90dG9tQ29sb3IgPT0gbGVmdENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IGxlZnRU
cmFuc3BhcmVudCAmJiBib3R0b21TdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAgICAgICAgICAobGVm
dFN0eWxlID09IERPVFRFRCB8fCBsZWZ0U3R5bGUgPT0gREFTSEVEIHx8IGxlZnRTdHlsZSA9PSBT
T0xJRCB8fCBsZWZ0U3R5bGUgPT0gT1VUU0VUKSk7Ci0KLSAgICAgICAgYm9vbCBpZ25vcmVfcmln
aHQgPSAocmVuZGVyUmFkaWkgJiYgYm90dG9tUmlnaHQud2lkdGgoKSA+IDApIHx8Ci0gICAgICAg
ICAgICAoYm90dG9tQ29sb3IgPT0gcmlnaHRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9PSBy
aWdodFRyYW5zcGFyZW50ICYmIGJvdHRvbVN0eWxlID49IE9VVFNFVCAmJgotICAgICAgICAgICAg
IChyaWdodFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCByaWdodFN0
eWxlID09IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpKTsKLQogICAgICAgICBpbnQgeCA9
IHR4OwogICAgICAgICBpbnQgeDIgPSB0eCArIHc7Ci0gICAgICAgIGlmIChyZW5kZXJSYWRpaSkg
ewotICAgICAgICAgICAgeCArPSBib3R0b21MZWZ0LndpZHRoKCk7Ci0gICAgICAgICAgICB4MiAt
PSBib3R0b21SaWdodC53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgeCwgdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCksIHgyLCB0eSArIGgsIEJTQm90dG9tLCBib3R0b21Db2xvciwgYm90dG9tU3R5bGUsCi0g
ICAgICAgICAgICAgICAgICAgaWdub3JlX2xlZnQgPyAwIDogc3R5bGUtPmJvcmRlckxlZnRXaWR0
aCgpLCBpZ25vcmVfcmlnaHQgPyAwIDogc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7Ci0KLSAg
ICAgICAgaWYgKHJlbmRlclJhZGlpKSB7Ci0gICAgICAgICAgICB0aGlja25lc3MgPSBzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSAqIDI7Ci0KLSAgICAgICAgICAgIGlmIChib3R0b21MZWZ0Lndp
ZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVmdFggPSB0eDsKLSAgICAgICAgICAgICAg
ICBpbnQgbGVmdFkgPSB0eSArIGggLSBib3R0b21MZWZ0LmhlaWdodCgpICogMjsKLSAgICAgICAg
ICAgICAgICBib29sIGFwcGx5TGVmdElubmVyQ2xpcCA9IChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRo
KCkgPCBib3R0b21MZWZ0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvdHRvbUxlZnQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAg
ICAgICAgICYmIChib3R0b21TdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlMZWZ0SW5uZXJDbGlwKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3Qo
bGVmdFgsIGxlZnRZLCBib3R0b21MZWZ0LndpZHRoKCkgKiAyLCBib3R0b21MZWZ0LmhlaWdodCgp
ICogMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIGlmIChsb3dlckxlZnRCb3JkZXJTdHlsZXNNYXRjaCkgewot
ICAgICAgICAgICAgICAgICAgICBmaXJzdEFuZ2xlU3RhcnQgPSAxODA7Ci0gICAgICAgICAgICAg
ICAgICAgIGZpcnN0QW5nbGVTcGFuID0gOTA7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0ID0gMjI1OwotICAgICAgICAgICAgICAg
ICAgICBmaXJzdEFuZ2xlU3BhbiA9IDQ1OwotICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIC8vIERyYXcgbG93ZXIgbGVmdCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3QXJjRm9y
Qm94U2lkZShncmFwaGljc0NvbnRleHQsIGxlZnRYLCBsZWZ0WSwgdGhpY2tuZXNzLCBib3R0b21M
ZWZ0LCBmaXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQlNCb3R0b20sIGJvdHRvbUNvbG9yLCBib3R0b21TdHlsZSwgdHJ1ZSk7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFwcGx5TGVmdElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChib3R0b21SaWdodC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHJpZ2h0
WSA9IHR5ICsgaCAtIGJvdHRvbVJpZ2h0LmhlaWdodCgpICogMjsKLSAgICAgICAgICAgICAgICBp
bnQgcmlnaHRYID0gdHggKyB3IC0gYm90dG9tUmlnaHQud2lkdGgoKSAqIDI7Ci0gICAgICAgICAg
ICAgICAgYm9vbCBhcHBseVJpZ2h0SW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRo
KCkgPCBib3R0b21SaWdodC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAmJiAoc3R5bGUt
PmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21SaWdodC5oZWlnaHQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgJiYgKGJvdHRvbVN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVyQm90dG9t
V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVJpZ2h0SW5uZXJDbGlwKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwotICAgICAgICAg
ICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJl
Y3QocmlnaHRYLCByaWdodFksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0b21SaWdodC5o
ZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBib3JkZXJXaWxsQXJjSW5uZXJF
ZGdlKGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0
eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKSkgewor
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBjbGlwQm9y
ZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTQm90dG9tLCBzdHlsZSk7CisgICAgICAg
ICAgICBmbG9hdCB0aGlja25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgp
LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsK
KyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJS
ZWN0LCByb3VuZGVkUGF0aCwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHRoaWNrbmVzcywg
QlNCb3R0b20sIHN0eWxlLCBib3R0b21Db2xvciwgYm90dG9tU3R5bGUpOworICAgICAgICAgICAg
Z3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBib29sIGlnbm9yZUxlZnQgPSAoYm90dG9tQ29sb3IgPT0gbGVmdENvbG9yICYmIGJvdHRvbVRy
YW5zcGFyZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiBib3R0b21TdHlsZSA+PSBPVVRTRVQKKyAg
ICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlID09IERPVFRFRCB8fCBsZWZ0U3R5bGUgPT0gREFT
SEVEIHx8IGxlZnRTdHlsZSA9PSBTT0xJRCB8fCBsZWZ0U3R5bGUgPT0gT1VUU0VUKSk7CiAKLSAg
ICAgICAgICAgICAgICBzZWNvbmRBbmdsZVN0YXJ0ID0gMjcwOwotICAgICAgICAgICAgICAgIHNl
Y29uZEFuZ2xlU3BhbiA9IGxvd2VyUmlnaHRCb3JkZXJTdHlsZXNNYXRjaCA/IDkwIDogNDU7Cisg
ICAgICAgICAgICBib29sIGlnbm9yZVJpZ2h0ID0gKGJvdHRvbUNvbG9yID09IHJpZ2h0Q29sb3Ig
JiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCAmJiBib3R0b21TdHlsZSA+
PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAocmlnaHRTdHlsZSA9PSBET1RURUQgfHwgcmln
aHRTdHlsZSA9PSBEQVNIRUQgfHwgcmlnaHRTdHlsZSA9PSBTT0xJRCB8fCByaWdodFN0eWxlID09
IElOU0VUKSk7CiAKLSAgICAgICAgICAgICAgICAvLyBEcmF3IGxvd2VyIHJpZ2h0IGFyYwotICAg
ICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgcmlnaHRYLCBy
aWdodFksIHRoaWNrbmVzcywgYm90dG9tUmlnaHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFu
Z2xlU3BhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTQm90dG9tLCBib3R0b21D
b2xvciwgYm90dG9tU3R5bGUsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlSaWdo
dElubmVyQ2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3Jl
KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhp
Y3NDb250ZXh0LCB4LCB0eSArIGggLSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgeDIsIHR5
ICsgaCwgQlNCb3R0b20sIGJvdHRvbUNvbG9yLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJv
dHRvbVN0eWxlLCBpZ25vcmVMZWZ0ID8gMCA6IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVSaWdodCA/IDAgOiBzdHlsZS0+Ym9yZGVyUmln
aHRXaWR0aCgpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChyZW5kZXJMZWZ0KSB7Ci0g
ICAgICAgIGJvb2wgaWdub3JlX3RvcCA9IChyZW5kZXJSYWRpaSAmJiB0b3BMZWZ0LmhlaWdodCgp
ID4gMCkgfHwKLSAgICAgICAgICAgICh0b3BDb2xvciA9PSBsZWZ0Q29sb3IgJiYgdG9wVHJhbnNw
YXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQgJiYKLSAgICAg
ICAgICAgICAodG9wU3R5bGUgPT0gRE9UVEVEIHx8IHRvcFN0eWxlID09IERBU0hFRCB8fCB0b3BT
dHlsZSA9PSBTT0xJRCB8fCB0b3BTdHlsZSA9PSBPVVRTRVQpKTsKLQotICAgICAgICBib29sIGln
bm9yZV9ib3R0b20gPSAocmVuZGVyUmFkaWkgJiYgYm90dG9tTGVmdC5oZWlnaHQoKSA+IDApIHx8
Ci0gICAgICAgICAgICAoYm90dG9tQ29sb3IgPT0gbGVmdENvbG9yICYmIGJvdHRvbVRyYW5zcGFy
ZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiBsZWZ0U3R5bGUgPj0gT1VUU0VUICYmCi0gICAgICAg
ICAgICAgKGJvdHRvbVN0eWxlID09IERPVFRFRCB8fCBib3R0b21TdHlsZSA9PSBEQVNIRUQgfHwg
Ym90dG9tU3R5bGUgPT0gU09MSUQgfHwgYm90dG9tU3R5bGUgPT0gSU5TRVQpKTsKLQogICAgICAg
ICBpbnQgeSA9IHR5OwogICAgICAgICBpbnQgeTIgPSB0eSArIGg7Ci0gICAgICAgIGlmIChyZW5k
ZXJSYWRpaSkgewotICAgICAgICAgICAgeSArPSB0b3BMZWZ0LmhlaWdodCgpOwotICAgICAgICAg
ICAgeTIgLT0gYm90dG9tTGVmdC5oZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRyYXdM
aW5lRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHR4LCB5LCB0eCArIHN0eWxlLT5ib3JkZXJM
ZWZ0V2lkdGgoKSwgeTIsIEJTTGVmdCwgbGVmdENvbG9yLCBsZWZ0U3R5bGUsCi0gICAgICAgICAg
ICAgICAgICAgaWdub3JlX3RvcCA/IDAgOiBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSwgaWdub3Jl
X2JvdHRvbSA/IDAgOiBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7Ci0KLSAgICAgICAgaWYg
KHJlbmRlclJhZGlpICYmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggfHwgIWxvd2VyTGVm
dEJvcmRlclN0eWxlc01hdGNoKSkgewotICAgICAgICAgICAgaW50IHRvcFggPSB0eDsKLSAgICAg
ICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAqIDI7Ci0KLSAgICAg
ICAgICAgIGlmICghdXBwZXJMZWZ0Qm9yZGVyU3R5bGVzTWF0Y2ggJiYgdG9wTGVmdC53aWR0aCgp
KSB7Ci0gICAgICAgICAgICAgICAgaW50IHRvcFkgPSB0eTsKLSAgICAgICAgICAgICAgICBib29s
IGFwcGx5VG9wSW5uZXJDbGlwID0gKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSA8IHRvcExlZnQu
d2lkdGgoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
IDwgdG9wTGVmdC5oZWlnaHQoKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgKGxlZnRTdHlsZSAh
PSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpID4gNik7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPmFk
ZElubmVyUm91bmRlZFJlY3RDbGlwKEludFJlY3QodG9wWCwgdG9wWSwgdG9wTGVmdC53aWR0aCgp
ICogMiwgdG9wTGVmdC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgZmlyc3RBbmdsZVN0YXJ0
ID0gMTM1OwotICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTcGFuID0gNDU7CiAKLSAgICAgICAg
ICAgICAgICAvLyBEcmF3IHRvcCBsZWZ0IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JC
b3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgdG9wWCwgdG9wWSwgdGhpY2tuZXNzLCB0b3BMZWZ0LCBm
aXJzdEFuZ2xlU3RhcnQsIGZpcnN0QW5nbGVTcGFuLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQlNMZWZ0LCBsZWZ0Q29sb3IsIGxlZnRTdHlsZSwgdHJ1ZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFwcGx5VG9wSW5uZXJDbGlwKQotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0Nv
bnRleHQtPnJlc3RvcmUoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFsb3dl
ckxlZnRCb3JkZXJTdHlsZXNNYXRjaCAmJiBib3R0b21MZWZ0LndpZHRoKCkpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgYm90dG9tWSA9IHR5ICsgaCAtIGJvdHRvbUxlZnQuaGVpZ2h0KCkgKiAyOwot
ICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRl
ckxlZnRXaWR0aCgpIDwgYm90dG9tTGVmdC53aWR0aCgpKQotICAgICAgICAgICAgICAgICAgICAm
JiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgPCBib3R0b21MZWZ0LmhlaWdodCgpKQotICAg
ICAgICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlICE9IERPVUJMRSB8fCBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkgPiA2KTsKLSAgICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNs
aXApIHsKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAo
SW50UmVjdCh0b3BYLCBib3R0b21ZLCBib3R0b21MZWZ0LndpZHRoKCkgKiAyLCBib3R0b21MZWZ0
LmhlaWdodCgpICogMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKTsKLSAgICAgICAg
ICAgICAgICB9CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBib3JkZXJXaWxsQXJjSW5uZXJF
ZGdlKGJvdHRvbUxlZnQsIHRvcExlZnQsIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHls
ZS0+Ym9yZGVyVG9wV2lkdGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKSkgeworICAgICAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBjbGlwQm9yZGVyU2lk
ZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwg
Ym90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTTGVmdCwgc3R5bGUpOworICAgICAgICAgICAgZmxv
YXQgdGhpY2tuZXNzID0gbWF4KG1heChzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpKSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgICAgICAg
ICAgZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHJvdW5k
ZWRQYXRoLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHRoaWNrbmVzcywgQlNMZWZ0LCBzdHls
ZSwgbGVmdENvbG9yLCBsZWZ0U3R5bGUpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5y
ZXN0b3JlKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlnbm9yZVRvcCA9
ICh0b3BDb2xvciA9PSBsZWZ0Q29sb3IgJiYgdG9wVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFy
ZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAodG9wU3R5bGUg
PT0gRE9UVEVEIHx8IHRvcFN0eWxlID09IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJRCB8fCB0
b3BTdHlsZSA9PSBPVVRTRVQpKTsKIAotICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQg
PSAxODA7Ci0gICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7CisgICAgICAgICAg
ICBib29sIGlnbm9yZUJvdHRvbSA9IChib3R0b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9t
VHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFyZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQKKyAg
ICAgICAgICAgICAgICAmJiAoYm90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09
IERBU0hFRCB8fCBib3R0b21TdHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkp
OwogCi0gICAgICAgICAgICAgICAgLy8gRHJhdyBib3R0b20gbGVmdCBhcmMKLSAgICAgICAgICAg
ICAgICBkcmF3QXJjRm9yQm94U2lkZShncmFwaGljc0NvbnRleHQsIHRvcFgsIGJvdHRvbVksIHRo
aWNrbmVzcywgYm90dG9tTGVmdCwgc2Vjb25kQW5nbGVTdGFydCwgc2Vjb25kQW5nbGVTcGFuLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQlNMZWZ0LCBsZWZ0Q29sb3IsIGxlZnRTdHls
ZSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkKLSAg
ICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCwg
eSwgdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHkyLCBCU0xlZnQsIGxlZnRDb2xvciwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRTdHlsZSwgaWdub3JlVG9wID8gMCA6IHN0eWxl
LT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVCb3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJlbmRlclJpZ2h0KSB7Ci0g
ICAgICAgIGJvb2wgaWdub3JlX3RvcCA9IChyZW5kZXJSYWRpaSAmJiB0b3BSaWdodC5oZWlnaHQo
KSA+IDApIHx8Ci0gICAgICAgICAgICAoKHRvcENvbG9yID09IHJpZ2h0Q29sb3IpICYmICh0b3BU
cmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50KSAmJgotICAgICAgICAgICAgKHJpZ2h0U3R5
bGUgPj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpICYmCi0gICAgICAgICAgICAodG9w
U3R5bGUgPT0gRE9UVEVEIHx8IHRvcFN0eWxlID09IERBU0hFRCB8fCB0b3BTdHlsZSA9PSBTT0xJ
RCB8fCB0b3BTdHlsZSA9PSBPVVRTRVQpKTsKLQotICAgICAgICBib29sIGlnbm9yZV9ib3R0b20g
PSAocmVuZGVyUmFkaWkgJiYgYm90dG9tUmlnaHQuaGVpZ2h0KCkgPiAwKSB8fAotICAgICAgICAg
ICAgKChib3R0b21Db2xvciA9PSByaWdodENvbG9yKSAmJiAoYm90dG9tVHJhbnNwYXJlbnQgPT0g
cmlnaHRUcmFuc3BhcmVudCkgJiYKLSAgICAgICAgICAgIChyaWdodFN0eWxlID49IERPVFRFRCB8
fCByaWdodFN0eWxlID09IElOU0VUKSAmJgotICAgICAgICAgICAgKGJvdHRvbVN0eWxlID09IERP
VFRFRCB8fCBib3R0b21TdHlsZSA9PSBEQVNIRUQgfHwgYm90dG9tU3R5bGUgPT0gU09MSUQgfHwg
Ym90dG9tU3R5bGUgPT0gSU5TRVQpKTsKLQotICAgICAgICBpbnQgeSA9IHR5OwotICAgICAgICBp
bnQgeTIgPSB0eSArIGg7Ci0gICAgICAgIGlmIChyZW5kZXJSYWRpaSkgewotICAgICAgICAgICAg
eSArPSB0b3BSaWdodC5oZWlnaHQoKTsKLSAgICAgICAgICAgIHkyIC09IGJvdHRvbVJpZ2h0Lmhl
aWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNz
Q29udGV4dCwgdHggKyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgeSwgdHggKyB3LCB5
MiwgQlNSaWdodCwgcmlnaHRDb2xvciwgcmlnaHRTdHlsZSwKLSAgICAgICAgICAgICAgICAgICBp
Z25vcmVfdG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVfYm90dG9tID8g
MCA6IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpKTsKLQotICAgICAgICBpZiAocmVuZGVyUmFk
aWkgJiYgKCF1cHBlclJpZ2h0Qm9yZGVyU3R5bGVzTWF0Y2ggfHwgIWxvd2VyUmlnaHRCb3JkZXJT
dHlsZXNNYXRjaCkpIHsKLSAgICAgICAgICAgIHRoaWNrbmVzcyA9IHN0eWxlLT5ib3JkZXJSaWdo
dFdpZHRoKCkgKiAyOwotCi0gICAgICAgICAgICBpZiAoIXVwcGVyUmlnaHRCb3JkZXJTdHlsZXNN
YXRjaCAmJiB0b3BSaWdodC53aWR0aCgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IHRvcFggPSB0
eCArIHcgLSB0b3BSaWdodC53aWR0aCgpICogMjsKLSAgICAgICAgICAgICAgICBpbnQgdG9wWSA9
IHR5OwotICAgICAgICAgICAgICAgIGJvb2wgYXBwbHlUb3BJbm5lckNsaXAgPSAoc3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKSA8IHRvcFJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAg
ICYmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSA8IHRvcFJpZ2h0LmhlaWdodCgpKQotICAgICAg
ICAgICAgICAgICAgICAmJiAocmlnaHRTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclJp
Z2h0V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVyQ2xpcCkg
ewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRS
ZWN0KHRvcFgsIHRvcFksIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5oZWlnaHQoKSAq
IDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIGZpcnN0QW5nbGVTdGFydCA9IDA7Ci0gICAgICAgICAgICAgICAg
Zmlyc3RBbmdsZVNwYW4gPSA0NTsKLQotICAgICAgICAgICAgICAgIC8vIERyYXcgdG9wIHJpZ2h0
IGFyYwotICAgICAgICAgICAgICAgIGRyYXdBcmNGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwg
dG9wWCwgdG9wWSwgdGhpY2tuZXNzLCB0b3BSaWdodCwgZmlyc3RBbmdsZVN0YXJ0LCBmaXJzdEFu
Z2xlU3BhbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29s
b3IsIHJpZ2h0U3R5bGUsIHRydWUpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseVRvcElubmVy
Q2xpcCkKLSAgICAgICAgICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghbG93ZXJSaWdodEJvcmRlclN0eWxlc01h
dGNoICYmIGJvdHRvbVJpZ2h0LndpZHRoKCkpIHsKLSAgICAgICAgICAgICAgICBpbnQgYm90dG9t
WCA9IHR4ICsgdyAtIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyOwotICAgICAgICAgICAgICAgIGlu
dCBib3R0b21ZID0gdHkgKyBoIC0gYm90dG9tUmlnaHQuaGVpZ2h0KCkgKiAyOwotICAgICAgICAg
ICAgICAgIGJvb2wgYXBwbHlCb3R0b21Jbm5lckNsaXAgPSAoc3R5bGUtPmJvcmRlclJpZ2h0V2lk
dGgoKSA8IGJvdHRvbVJpZ2h0LndpZHRoKCkpCi0gICAgICAgICAgICAgICAgICAgICYmIChzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSA8IGJvdHRvbVJpZ2h0LmhlaWdodCgpKQotICAgICAgICAg
ICAgICAgICAgICAmJiAocmlnaHRTdHlsZSAhPSBET1VCTEUgfHwgc3R5bGUtPmJvcmRlclJpZ2h0
V2lkdGgoKSA+IDYpOwotICAgICAgICAgICAgICAgIGlmIChhcHBseUJvdHRvbUlubmVyQ2xpcCkg
ewotICAgICAgICAgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChJbnRS
ZWN0KGJvdHRvbVgsIGJvdHRvbVksIGJvdHRvbVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0b21SaWdo
dC5oZWlnaHQoKSAqIDIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHNlY29uZEFuZ2xlU3RhcnQgPSAzMTU7Ci0g
ICAgICAgICAgICAgICAgc2Vjb25kQW5nbGVTcGFuID0gNDU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBEcmF3IGJvdHRvbSByaWdodCBhcmMKLSAgICAgICAgICAgICAgICBkcmF3QXJjRm9yQm94U2lk
ZShncmFwaGljc0NvbnRleHQsIGJvdHRvbVgsIGJvdHRvbVksIHRoaWNrbmVzcywgYm90dG9tUmln
aHQsIHNlY29uZEFuZ2xlU3RhcnQsIHNlY29uZEFuZ2xlU3BhbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEJTUmlnaHQsIHJpZ2h0Q29sb3IsIHJpZ2h0U3R5bGUsIGZhbHNlKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYXBwbHlCb3R0b21Jbm5lckNsaXApCi0gICAgICAgICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgICAgICAgICAgfQorICAgICAgICBp
ZiAocmVuZGVyUmFkaWkgJiYgYm9yZGVyV2lsbEFyY0lubmVyRWRnZShib3R0b21SaWdodCwgdG9w
UmlnaHQsIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVyVG9wV2lkdGgo
KSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSkpIHsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29u
dGV4dC0+c2F2ZSgpOworICAgICAgICAgICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKGdyYXBoaWNz
Q29udGV4dCwgYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRv
bVJpZ2h0LCBCU1JpZ2h0LCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBt
YXgobWF4KHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgp
KSwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgICAgICAgICAgZHJhd0JveFNpZGVG
cm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHJvdW5kZWRQYXRoLCBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpLCB0aGlja25lc3MsIEJTUmlnaHQsIHN0eWxlLCByaWdodENvbG9y
LCByaWdodFN0eWxlKTsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBpZ25vcmVUb3AgPSAoKHRvcENvbG9y
ID09IHJpZ2h0Q29sb3IpICYmICh0b3BUcmFuc3BhcmVudCA9PSByaWdodFRyYW5zcGFyZW50KQor
ICAgICAgICAgICAgICAgICYmIChyaWdodFN0eWxlID49IERPVFRFRCB8fCByaWdodFN0eWxlID09
IElOU0VUKQorICAgICAgICAgICAgICAgICYmICh0b3BTdHlsZSA9PSBET1RURUQgfHwgdG9wU3R5
bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0eWxlID09IE9VVFNFVCkp
OworCisgICAgICAgICAgICBib29sIGlnbm9yZUJvdHRvbSA9ICgoYm90dG9tQ29sb3IgPT0gcmln
aHRDb2xvcikgJiYgKGJvdHRvbVRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQpCisgICAg
ICAgICAgICAgICAgJiYgKHJpZ2h0U3R5bGUgPj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5T
RVQpCisgICAgICAgICAgICAgICAgJiYgKGJvdHRvbVN0eWxlID09IERPVFRFRCB8fCBib3R0b21T
dHlsZSA9PSBEQVNIRUQgfHwgYm90dG9tU3R5bGUgPT0gU09MSUQgfHwgYm90dG9tU3R5bGUgPT0g
SU5TRVQpKTsKKworICAgICAgICAgICAgaW50IHkgPSB0eTsKKyAgICAgICAgICAgIGludCB5MiA9
IHR5ICsgaDsKKworICAgICAgICAgICAgZHJhd0xpbmVGb3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4
dCwgdHggKyB3IC0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSwgeSwgdHggKyB3LCB5MiwgQlNS
aWdodCwgcmlnaHRDb2xvciwgCisgICAgICAgICAgICAgICAgcmlnaHRTdHlsZSwgaWdub3JlVG9w
ID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCAKKyAgICAgICAgICAgICAgICBpZ25vcmVC
b3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMjU4LDYgKzEwODAsNjQgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFp
bnRCb3JkZXIoRwogICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKIH0KIAordm9p
ZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBib3gsIGNvbnN0IEludFNpemUm
IHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21M
ZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQm94U2lkZSBzaWRlLCBjb25z
dCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgRmxvYXRQb2ludCBxdWFkWzRdOworICAgIGlu
dCB0eCA9IGJveC54KCk7CisgICAgaW50IHR5ID0gYm94LnkoKTsKKyAgICBpbnQgdyA9IGJveC53
aWR0aCgpOworICAgIGludCBoID0gYm94LmhlaWdodCgpOworCisgICAgLy8gRm9yIGVhY2ggc2lk
ZSwgY3JlYXRlIGFuIGFycmF5IG9mIEZsb2F0UG9pbnRzIHdoZXJlIGVhY2ggcG9pbnQgaXMgYmFz
ZWQgb24gd2hpY2hldmVyIHZhbHVlIGluIGVhY2ggY29ybmVyCisgICAgLy8gaXMgbGFyZ2VyIC0t
IHRoZSByYWRpdXMgd2lkdGgvaGVpZ2h0IG9yIHRoZSBib3JkZXIgd2lkdGgvaGVpZ2h0IC0tIGFz
IGFwcHJvcHJpYXRlLgorICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNhc2UgQlNUb3A6CisgICAg
ICAgIHF1YWRbMF0gPSBGbG9hdFBvaW50KHR4LCB0eSk7CisgICAgICAgIHF1YWRbMV0gPSBGbG9h
dFBvaW50KAorICAgICAgICAgICAgdHggKyBtYXgodG9wTGVmdC53aWR0aCgpLCAoaW50KSBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsgbWF4KHRvcExlZnQuaGVp
Z2h0KCksIChpbnQpIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7CisgICAgICAgIHF1YWRbMl0g
PSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyB3IC0gbWF4KHRvcFJpZ2h0LndpZHRoKCks
IChpbnQpIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsgbWF4
KHRvcFJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7CisgICAg
ICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEJTTGVmdDoKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9pbnQodHgsIHR5KTsKKyAg
ICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIG1heCh0b3BMZWZ0
LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIAorICAgICAgICAgICAg
dHkgKyBtYXgodG9wTGVmdC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkp
KTsKKyAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIG1heChi
b3R0b21MZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSksIAorICAg
ICAgICAgICAgdHkgKyBoIC0gbWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJv
cmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQodHgsIHR5
ICsgaCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQlNCb3R0b206CisgICAgICAgIHF1YWRb
MF0gPSBGbG9hdFBvaW50KHR4LCB0eSArIGgpOworICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2lu
dCgKKyAgICAgICAgICAgIHR4ICsgbWF4KGJvdHRvbUxlZnQud2lkdGgoKSwgKGludCkgc3R5bGUt
PmJvcmRlckxlZnRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIGggLSBtYXgoYm90dG9tTGVm
dC5oZWlnaHQoKSwgKGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSkpOworICAgICAgICBx
dWFkWzJdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgdyAtIG1heChib3R0b21SaWdo
dC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAg
ICB0eSArIGggLSBtYXgoYm90dG9tUmlnaHQuaGVpZ2h0KCksIChpbnQpc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9pbnQodHggKyB3LCB0eSAr
IGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJTUmlnaHQ6CisgICAgICAgIHF1YWRbMF0g
PSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAgICAgICBxdWFkWzFdID0gRmxvYXRQb2ludCgK
KyAgICAgICAgICAgIHR4ICsgdyAtIG1heCh0b3BSaWdodC53aWR0aCgpLCAoaW50KSBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIG1heCh0b3BSaWdodC5oZWln
aHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFsyXSA9
IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIHcgLSBtYXgoYm90dG9tUmlnaHQud2lkdGgo
KSwgKGludCkgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSksIAorICAgICAgICAgICAgdHkgKyBo
IC0gbWF4KGJvdHRvbVJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJCb3R0b21XaWR0
aCgpKSk7CisgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkgKyBoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Z3JhcGhpY3NDb250ZXh0LT5jbGlwQ29udmV4UG9seWdvbig0LCBxdWFkKTsKK30KKwogdm9pZCBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBSZW5kZXJTdHlsZSogcywg
U2hhZG93U3R5bGUgc2hhZG93U3R5bGUsIGJvb2wgYmVnaW4sIGJvb2wgZW5kKQogewogICAgIC8v
IEZJWE1FOiBEZWFsIHdpdGggYm9yZGVyLWltYWdlLiAgV291bGQgYmUgZ3JlYXQgdG8gdXNlIGJv
cmRlci1pbWFnZSBhcyBhIG1hc2suCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1v
ZGVsT2JqZWN0LmgJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw4IEBAIHByaXZh
dGU6CiAKICAgICBJbnRTaXplIGNhbGN1bGF0ZUZpbGxUaWxlU2l6ZShjb25zdCBGaWxsTGF5ZXIq
LCBJbnRTaXplIHNjYWxlZFNpemUpIGNvbnN0OwogCisgICAgdm9pZCBjbGlwQm9yZGVyU2lkZVBv
bHlnb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRv
cExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0
LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQm94U2lkZSBzaWRlLCBjb25zdCBS
ZW5kZXJTdHlsZSogc3R5bGUpOworCiAgICAgZnJpZW5kIGNsYXNzIFJlbmRlclZpZXc7CiAKICAg
ICBSZW5kZXJMYXllciogbV9sYXllcjsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNw
cAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIK
KyNpbmNsdWRlICJEYXNoQXJyYXkuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtODc3LDg1ICs4NzgsMTc3IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3TGluZUZvckJveFNpZGUoR3IKICAgICB9CiB9CiAKLXZv
aWQgUmVuZGVyT2JqZWN0OjpkcmF3QXJjRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNzQ29udGV4dCwgaW50IHgsIGludCB5LCBmbG9hdCB0aGlja25lc3MsIEludFNpemUgcmFkaXVz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbmdsZVN0YXJ0LCBp
bnQgYW5nbGVTcGFuLCBCb3hTaWRlIHMsIENvbG9yIGMsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRUJvcmRlclN0eWxlIHN0eWxlLCBib29sIGZpcnN0Q29ybmVyKQorSW50
UmVjdCBSZW5kZXJPYmplY3Q6OmJvcmRlcklubmVyUmVjdChjb25zdCBJbnRSZWN0JiBib3JkZXJS
ZWN0LCB1bnNpZ25lZCBzaG9ydCB0b3BXaWR0aCwgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgs
IHVuc2lnbmVkIHNob3J0IGxlZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCkgY29u
c3QKIHsKLSAgICBpZiAoKHN0eWxlID09IERPVUJMRSAmJiB0aGlja25lc3MgLyAyIDwgMykgfHwg
KChzdHlsZSA9PSBSSURHRSB8fCBzdHlsZSA9PSBHUk9PVkUpICYmIHRoaWNrbmVzcyAvIDIgPCAy
KSkKLSAgICAgICAgc3R5bGUgPSBTT0xJRDsKKyAgICByZXR1cm4gSW50UmVjdCgKKyAgICAgICAg
ICAgIGJvcmRlclJlY3QueCgpICsgbGVmdFdpZHRoLCAKKyAgICAgICAgICAgIGJvcmRlclJlY3Qu
eSgpICsgdG9wV2lkdGgsIAorICAgICAgICAgICAgYm9yZGVyUmVjdC53aWR0aCgpIC0gbGVmdFdp
ZHRoIC0gcmlnaHRXaWR0aCwgCisgICAgICAgICAgICBib3JkZXJSZWN0LmhlaWdodCgpIC0gdG9w
V2lkdGggLSBib3R0b21XaWR0aCk7Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3Qm94U2lk
ZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBJbnRSZWN0IGJvcmRl
clJlY3QsIFBhdGggYm9yZGVyUGF0aCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRyYXdUaGlja25lc3MsIEJveFNpZGUgcywgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbG9yIGMsIEVCb3JkZXJTdHlsZSBib3JkZXJTdHlsZSkKK3sKKyAgICBpZiAodGhpY2tu
ZXNzIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChib3JkZXJTdHlsZSA9PSBET1VC
TEUgJiYgdGhpY2tuZXNzIDwgMykKKyAgICAgICAgYm9yZGVyU3R5bGUgPSBTT0xJRDsKKworICAg
IHN3aXRjaCAoYm9yZGVyU3R5bGUpIHsKKyAgICBjYXNlIEJOT05FOgorICAgIGNhc2UgQkhJRERF
TjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRE9UVEVEOgorICAgIGNhc2UgREFTSEVEOiB7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYywgc3R5bGUtPmNvbG9y
U3BhY2UoKSk7CisKKyAgICAgICAgLy8gVGhlIHN0cm9rZSBpcyBkb3VibGVkIGhlcmUgYmVjYXVz
ZSB0aGUgcHJvdmlkZWQgcGF0aCBpcyB0aGUgCisgICAgICAgIC8vIG91dHNpZGUgZWRnZSBvZiB0
aGUgYm9yZGVyIHNvIGhhbGYgdGhlIHN0cm9rZSBpcyBjbGlwcGVkIG9mZi4gCisgICAgICAgIC8v
IFRoZSBleHRyYSBtdWx0aXBsaWVyIGlzIHNvIHRoYXQgdGhlIGNsaXBwaW5nIG1hc2sgY2FuIGFu
dGlhbGlhcworICAgICAgICAvLyB0aGUgZWRnZXMgdG8gcHJldmVudCBqYWdnaWVzLgorICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhkcmF3VGhpY2tuZXNzICogMiAq
IDEuMWYpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKGJvcmRlclN0
eWxlID09IERBU0hFRCA/IERhc2hlZFN0cm9rZSA6IERvdHRlZFN0cm9rZSk7CisKKyAgICAgICAg
Ly8gSWYgdGhlIG51bWJlciBvZiBkYXNoZXMgdGhhdCBmaXQgaW4gdGhlIHBhdGggaXMgb2RkIGFu
ZCBub24taW50ZWdyYWwgdGhlbiB3ZQorICAgICAgICAvLyB3aWxsIGhhdmUgYW4gYXdrd2FyZGx5
LXNpemVkIGRhc2ggYXQgdGhlIGVuZCBvZiB0aGUgcGF0aC4gVG8gdHJ5IHRvIGF2b2lkIHRoYXQK
KyAgICAgICAgLy8gaGVyZSwgd2Ugc2ltcGx5IG1ha2UgdGhlIHdoaXRlc3BhY2UgZGFzaGVzIGV2
ZXIgc28gc2xpZ2h0bHkgYmlnZ2VyLgorICAgICAgICAvLyBGSVhNRTogVGhpcyBjb3VsZCBiZSBl
dmVuIGJldHRlciBpZiB3ZSB0cmllZCB0byBtYW5pcHVsYXRlIHRoZSBkYXNoIG9mZnNldAorICAg
ICAgICAvLyBhbmQgcG9zc2libHkgdGhlIHdoaXRlU3BhY2VXaWR0aCB0byBnZXQgdGhlIGNvcm5l
cnMgZGFzaC1zeW1tZXRyaWNhbC4KKyAgICAgICAgZmxvYXQgcGF0V2lkdGggPSB0aGlja25lc3Mg
KiAoKGJvcmRlclN0eWxlID09IERBU0hFRCkgPyAzLjBmIDogMS4wZik7CisgICAgICAgIGZsb2F0
IHdoaXRlU3BhY2VXaWR0aCA9IHBhdFdpZHRoOworICAgICAgICBmbG9hdCBudW1iZXJPZkRhc2hl
cyA9IGJvcmRlclBhdGgubGVuZ3RoKCkgLyBwYXRXaWR0aDsKKyAgICAgICAgYm9vbCBldmVuTnVt
YmVyT2ZGdWxsRGFzaGVzID0gISgoaW50KW51bWJlck9mRGFzaGVzICUgMik7CisgICAgICAgIGJv
b2wgaW50ZWdyYWxOdW1iZXJPZkRhc2hlcyA9ICEobnVtYmVyT2ZEYXNoZXMgLSAoaW50KW51bWJl
ck9mRGFzaGVzKTsKKyAgICAgICAgaWYgKCFldmVuTnVtYmVyT2ZGdWxsRGFzaGVzICYmICFpbnRl
Z3JhbE51bWJlck9mRGFzaGVzKSB7CisgICAgICAgICAgICBmbG9hdCBudW1iZXJPZldoaXRlc3Bh
Y2VEYXNoZXMgPSBudW1iZXJPZkRhc2hlcyAvIDI7CisgICAgICAgICAgICB3aGl0ZVNwYWNlV2lk
dGggKz0gKHBhdFdpZHRoICAvIG51bWJlck9mV2hpdGVzcGFjZURhc2hlcyk7CisgICAgICAgIH0K
KworICAgICAgICBEYXNoQXJyYXkqIGxpbmVEYXNoID0gbmV3IERhc2hBcnJheSgpOworICAgICAg
ICBsaW5lRGFzaC0+YXBwZW5kKHBhdFdpZHRoKTsKKyAgICAgICAgbGluZURhc2gtPmFwcGVuZCh3
aGl0ZVNwYWNlV2lkdGgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldExpbmVEYXNoKCps
aW5lRGFzaCwgcGF0V2lkdGgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFBhdGgoYm9y
ZGVyUGF0aCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlUGF0aCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGNhc2UgRE9VQkxFOiB7CisgICAgICAgIGludCBvdXRlckJv
cmRlclRvcFdpZHRoID0gc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgLyAzOworICAgICAgICBpbnQg
b3V0ZXJCb3JkZXJSaWdodFdpZHRoID0gc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAvIDM7Cisg
ICAgICAgIGludCBvdXRlckJvcmRlckJvdHRvbVdpZHRoID0gc3R5bGUtPmJvcmRlckJvdHRvbVdp
ZHRoKCkgLyAzOworICAgICAgICBpbnQgb3V0ZXJCb3JkZXJMZWZ0V2lkdGggPSBzdHlsZS0+Ym9y
ZGVyTGVmdFdpZHRoKCkgLyAzOworCisgICAgICAgIGludCBpbm5lckJvcmRlclRvcFdpZHRoID0g
c3R5bGUtPmJvcmRlclRvcFdpZHRoKCkgKiAyIC8gMzsKKyAgICAgICAgaW50IGlubmVyQm9yZGVy
UmlnaHRXaWR0aCA9IHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgKiAyIC8gMzsKKyAgICAgICAg
aW50IGlubmVyQm9yZGVyQm90dG9tV2lkdGggPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAq
IDIgLyAzOworICAgICAgICBpbnQgaW5uZXJCb3JkZXJMZWZ0V2lkdGggPSBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkgKiAyIC8gMzsKKworICAgICAgICAvLyBXZSBuZWVkIGNlcnRhaW4gaW50ZWdl
ciByb3VuZGluZyByZXN1bHRzCisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAl
IDMgPT0gMikKKyAgICAgICAgICAgIG91dGVyQm9yZGVyVG9wV2lkdGggKz0gMTsKKyAgICAgICAg
aWYgKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgJSAzID09IDIpCisgICAgICAgICAgICBvdXRl
ckJvcmRlclJpZ2h0V2lkdGggKz0gMTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJCb3R0b21X
aWR0aCgpICUgMyA9PSAyKQorICAgICAgICAgICAgb3V0ZXJCb3JkZXJCb3R0b21XaWR0aCArPSAx
OworICAgICAgICBpZiAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpICUgMyA9PSAyKQorICAgICAg
ICAgICAgb3V0ZXJCb3JkZXJMZWZ0V2lkdGggKz0gMTsKKworICAgICAgICBpZiAoc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCkgJSAzID09IDEpCisgICAgICAgICAgICBpbm5lckJvcmRlclRvcFdpZHRo
ICs9IDE7CisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpICUgMyA9PSAxKQor
ICAgICAgICAgICAgaW5uZXJCb3JkZXJSaWdodFdpZHRoICs9IDE7CisgICAgICAgIGlmIChzdHls
ZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAlIDMgPT0gMSkKKyAgICAgICAgICAgIGlubmVyQm9yZGVy
Qm90dG9tV2lkdGggKz0gMTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAl
IDMgPT0gMSkKKyAgICAgICAgICAgIGlubmVyQm9yZGVyTGVmdFdpZHRoICs9IDE7CisKKyAgICAg
ICAgLy8gR2V0IHRoZSBpbm5lciBib3JkZXIgcmVjdHMgZm9yIGJvdGggdGhlIG91dGVyIGJvcmRl
ciBsaW5lIGFuZCB0aGUgaW5uZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgSW50UmVjdCBvdXRlckJv
cmRlcklubmVyUmVjdCA9IGJvcmRlcklubmVyUmVjdChib3JkZXJSZWN0LCBvdXRlckJvcmRlclRv
cFdpZHRoLCBvdXRlckJvcmRlckJvdHRvbVdpZHRoLCAKKyAgICAgICAgICAgIG91dGVyQm9yZGVy
TGVmdFdpZHRoLCBvdXRlckJvcmRlclJpZ2h0V2lkdGgpOworICAgICAgICBJbnRSZWN0IGlubmVy
Qm9yZGVySW5uZXJSZWN0ID0gYm9yZGVySW5uZXJSZWN0KGJvcmRlclJlY3QsIGlubmVyQm9yZGVy
VG9wV2lkdGgsIGlubmVyQm9yZGVyQm90dG9tV2lkdGgsIAorICAgICAgICAgICAgaW5uZXJCb3Jk
ZXJMZWZ0V2lkdGgsIGlubmVyQm9yZGVyUmlnaHRXaWR0aCk7CisKKyAgICAgICAgLy8gR2V0IHRo
ZSBpbm5lciByYWRpaSBmb3IgdGhlIG91dGVyIGJvcmRlciBsaW5lCisgICAgICAgIEludFNpemUg
b3V0ZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIG91dGVyQm9yZGVyVG9wUmlnaHRJbm5lclJh
ZGl1cywgb3V0ZXJCb3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIAorICAgICAgICAgICAgb3V0
ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0SW5uZXJC
b3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKG91dGVyQm9yZGVySW5uZXJSZWN0LCBv
dXRlckJvcmRlclRvcFdpZHRoLCBvdXRlckJvcmRlckJvdHRvbVdpZHRoLCAKKyAgICAgICAgICAg
IG91dGVyQm9yZGVyTGVmdFdpZHRoLCBvdXRlckJvcmRlclJpZ2h0V2lkdGgsIG91dGVyQm9yZGVy
VG9wTGVmdElubmVyUmFkaXVzLCBvdXRlckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIAorICAg
ICAgICAgICAgb3V0ZXJCb3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIG91dGVyQm9yZGVyQm90
dG9tUmlnaHRJbm5lclJhZGl1cyk7CisKKyAgICAgICAgLy8gR2V0IHRoZSBpbm5lciByYWRpaSBm
b3IgdGhlIGlubmVyIGJvcmRlciBsaW5lCisgICAgICAgIEludFNpemUgaW5uZXJCb3JkZXJUb3BM
ZWZ0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyVG9wUmlnaHRJbm5lclJhZGl1cywgaW5uZXJCb3Jk
ZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIAorICAgICAgICAgICAgaW5uZXJCb3JkZXJCb3R0b21S
aWdodElubmVyUmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0SW5uZXJCb3JkZXJSYWRpaUZvclJl
Y3RXaXRoQm9yZGVyV2lkdGhzKGlubmVyQm9yZGVySW5uZXJSZWN0LCBpbm5lckJvcmRlclRvcFdp
ZHRoLCBpbm5lckJvcmRlckJvdHRvbVdpZHRoLCAKKyAgICAgICAgICAgIGlubmVyQm9yZGVyTGVm
dFdpZHRoLCBpbm5lckJvcmRlclJpZ2h0V2lkdGgsIGlubmVyQm9yZGVyVG9wTGVmdElubmVyUmFk
aXVzLCBpbm5lckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIAorICAgICAgICAgICAgaW5uZXJC
b3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyQm90dG9tUmlnaHRJbm5lclJh
ZGl1cyk7CisKKyAgICAgICAgLy8gRHJhdyBpbm5lciBib3JkZXIgbGluZQorICAgICAgICBncmFw
aGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRSb3VuZGVk
UmVjdENsaXAoaW5uZXJCb3JkZXJJbm5lclJlY3QsIGlubmVyQm9yZGVyVG9wTGVmdElubmVyUmFk
aXVzLCAKKyAgICAgICAgICAgIGlubmVyQm9yZGVyVG9wUmlnaHRJbm5lclJhZGl1cywgaW5uZXJC
b3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVyQm90dG9tUmlnaHRJbm5lclJh
ZGl1cyk7CisgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgoZ3JhcGhpY3NDb250ZXh0LCBib3Jk
ZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25lc3MsIGRyYXdUaGlja25lc3MsIHMsIHN0eWxlLCBj
LCBTT0xJRCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworCisgICAgICAg
IC8vIERyYXcgb3V0ZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZl
KCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+Y2xpcE91dFJvdW5kZWRSZWN0KG91dGVyQm9y
ZGVySW5uZXJSZWN0LCBvdXRlckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywgCisgICAgICAgICAg
ICBvdXRlckJvcmRlclRvcFJpZ2h0SW5uZXJSYWRpdXMsIG91dGVyQm9yZGVyQm90dG9tTGVmdElu
bmVyUmFkaXVzLCBvdXRlckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXMpOworICAgICAgICBk
cmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0
aCwgdGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBzdHlsZSwgYywgU09MSUQpOworICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNhc2UgUklER0U6CisgICAgY2FzZSBHUk9PVkU6CisgICAgeworICAgICAgICBFQm9yZGVy
U3R5bGUgczE7CisgICAgICAgIEVCb3JkZXJTdHlsZSBzMjsKKyAgICAgICAgaWYgKGJvcmRlclN0
eWxlID09IEdST09WRSkgeworICAgICAgICAgICAgczEgPSBJTlNFVDsKKyAgICAgICAgICAgIHMy
ID0gT1VUU0VUOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgczEgPSBPVVRTRVQ7Cisg
ICAgICAgICAgICBzMiA9IElOU0VUOworICAgICAgICB9CiAKLSAgICBzd2l0Y2ggKHN0eWxlKSB7
Ci0gICAgICAgIGNhc2UgQk5PTkU6Ci0gICAgICAgIGNhc2UgQkhJRERFTjoKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgY2FzZSBET1RURUQ6Ci0gICAgICAgIGNhc2UgREFTSEVEOgotICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLCBtX3N0eWxlLT5jb2xv
clNwYWNlKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHlsZShz
dHlsZSA9PSBET1RURUQgPyBEb3R0ZWRTdHJva2UgOiBEYXNoZWRTdHJva2UpOwotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3ModGhpY2tuZXNzKTsKLSAgICAg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndp
ZHRoKCkgKiAyLCByYWRpdXMuaGVpZ2h0KCkgKiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIERPVUJMRTogewotICAgICAgICAgICAg
ZmxvYXQgdGhpcmQgPSB0aGlja25lc3MgLyAzLjBmOwotICAgICAgICAgICAgZmxvYXQgaW5uZXJU
aGlyZCA9ICh0aGlja25lc3MgKyAxLjBmKSAvIDYuMGY7Ci0gICAgICAgICAgICBpbnQgc2hpZnRG
b3JJbm5lciA9IHN0YXRpY19jYXN0PGludD4oaW5uZXJUaGlyZCAqIDIuNWYpOwotCi0gICAgICAg
ICAgICBpbnQgb3V0ZXJZID0geTsKLSAgICAgICAgICAgIGludCBvdXRlckhlaWdodCA9IHJhZGl1
cy5oZWlnaHQoKSAqIDI7Ci0gICAgICAgICAgICBpbnQgaW5uZXJYID0geCArIHNoaWZ0Rm9ySW5u
ZXI7Ci0gICAgICAgICAgICBpbnQgaW5uZXJZID0geSArIHNoaWZ0Rm9ySW5uZXI7Ci0gICAgICAg
ICAgICBpbnQgaW5uZXJXaWR0aCA9IChyYWRpdXMud2lkdGgoKSAtIHNoaWZ0Rm9ySW5uZXIpICog
MjsKLSAgICAgICAgICAgIGludCBpbm5lckhlaWdodCA9IChyYWRpdXMuaGVpZ2h0KCkgLSBzaGlm
dEZvcklubmVyKSAqIDI7Ci0gICAgICAgICAgICBpZiAoaW5uZXJUaGlyZCA+IDEgJiYgKHMgPT0g
QlNUb3AgfHwgKGZpcnN0Q29ybmVyICYmIChzID09IEJTTGVmdCB8fCBzID09IEJTUmlnaHQpKSkp
IHsKLSAgICAgICAgICAgICAgICBvdXRlckhlaWdodCArPSAyOwotICAgICAgICAgICAgICAgIGlu
bmVySGVpZ2h0ICs9IDI7Ci0gICAgICAgICAgICB9CisgICAgICAgIEludFJlY3QgaGFsZkJvcmRl
clJlY3QgPSBib3JkZXJJbm5lclJlY3QoYm9yZGVyUmVjdCwgc3R5bGUtPmJvcmRlckxlZnRXaWR0
aCgpIC8gMiwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgLyAyLCAKKyAgICAgICAgICAgIHN0
eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAvIDIsIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgLyAy
KTsKIAotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VTdHlsZShTb2xpZFN0
cm9rZSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZUNvbG9yKGMsIG1f
c3R5bGUtPmNvbG9yU3BhY2UoKSk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNldFN0
cm9rZVRoaWNrbmVzcyh0aGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9r
ZUFyYyhJbnRSZWN0KHgsIG91dGVyWSwgcmFkaXVzLndpZHRoKCkgKiAyLCBvdXRlckhlaWdodCks
IGFuZ2xlU3RhcnQsIGFuZ2xlU3Bhbik7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnNl
dFN0cm9rZVRoaWNrbmVzcyhpbm5lclRoaXJkID4gMiA/IGlubmVyVGhpcmQgLSAxIDogaW5uZXJU
aGlyZCk7Ci0gICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnN0cm9rZUFyYyhJbnRSZWN0KGlu
bmVyWCwgaW5uZXJZLCBpbm5lcldpZHRoLCBpbm5lckhlaWdodCksIGFuZ2xlU3RhcnQsIGFuZ2xl
U3Bhbik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdST09W
RToKLSAgICAgICAgY2FzZSBSSURHRTogewotICAgICAgICAgICAgQ29sb3IgYzI7Ci0gICAgICAg
ICAgICBpZiAoKHN0eWxlID09IFJJREdFICYmIChzID09IEJTVG9wIHx8IHMgPT0gQlNMZWZ0KSkg
fHwKLSAgICAgICAgICAgICAgICAgICAgKHN0eWxlID09IEdST09WRSAmJiAocyA9PSBCU0JvdHRv
bSB8fCBzID09IEJTUmlnaHQpKSkKLSAgICAgICAgICAgICAgICBjMiA9IGMuZGFyaygpOwotICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgYzIgPSBjOwotICAgICAgICAgICAgICAg
IGMgPSBjLmRhcmsoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgSW50U2l6ZSB0b3BMZWZ0SGFs
ZlJhZGl1cywgdG9wUmlnaHRIYWxmUmFkaXVzLCBib3R0b21MZWZ0SGFsZlJhZGl1cywgYm90dG9t
UmlnaHRIYWxmUmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0SW5uZXJCb3JkZXJSYWRpaUZvclJl
Y3RXaXRoQm9yZGVyV2lkdGhzKGhhbGZCb3JkZXJSZWN0LCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRo
KCkgLyAyLCAKKyAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIC8gMiwgc3R5
bGUtPmJvcmRlckxlZnRXaWR0aCgpIC8gMiwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAvIDIs
IAorICAgICAgICAgICAgdG9wTGVmdEhhbGZSYWRpdXMsIHRvcFJpZ2h0SGFsZlJhZGl1cywgYm90
dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0SGFsZlJhZGl1cyk7CiAKLSAgICAgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJva2UpOwotICAgICAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLCBtX3N0eWxlLT5jb2xvclNwYWNl
KCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3ModGhp
Y2tuZXNzKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJjKEludFJlY3Qo
eCwgeSwgcmFkaXVzLndpZHRoKCkgKiAyLCByYWRpdXMuaGVpZ2h0KCkgKiAyKSwgYW5nbGVTdGFy
dCwgYW5nbGVTcGFuKTsKKyAgICAgICAgLy8gUGFpbnQgZnVsbCBib3JkZXIKKyAgICAgICAgZHJh
d0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgs
IHRoaWNrbmVzcywgZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIHMxKTsKIAotICAgICAgICAg
ICAgZmxvYXQgaGFsZlRoaWNrbmVzcyA9ICh0aGlja25lc3MgKyAxLjBmKSAvIDQuMGY7Ci0gICAg
ICAgICAgICBpbnQgc2hpZnRGb3JJbm5lciA9IHN0YXRpY19jYXN0PGludD4oaGFsZlRoaWNrbmVz
cyAqIDEuNWYpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihj
MiwgbV9zdHlsZS0+Y29sb3JTcGFjZSgpKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+
c2V0U3Ryb2tlVGhpY2tuZXNzKGhhbGZUaGlja25lc3MgPiAyID8gaGFsZlRoaWNrbmVzcyAtIDEg
OiBoYWxmVGhpY2tuZXNzKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ryb2tlQXJj
KEludFJlY3QoeCArIHNoaWZ0Rm9ySW5uZXIsIHkgKyBzaGlmdEZvcklubmVyLCAocmFkaXVzLndp
ZHRoKCkgLSBzaGlmdEZvcklubmVyKSAqIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocmFkaXVzLmhlaWdodCgpIC0gc2hpZnRGb3JJbm5lcikgKiAyKSwgYW5nbGVT
dGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNhc2UgSU5TRVQ6Ci0gICAgICAgICAgICBpZiAocyA9PSBCU1RvcCB8fCBzID09IEJTTGVmdCkK
LSAgICAgICAgICAgICAgICBjID0gYy5kYXJrKCk7Ci0gICAgICAgIGNhc2UgT1VUU0VUOgotICAg
ICAgICAgICAgaWYgKHN0eWxlID09IE9VVFNFVCAmJiAocyA9PSBCU0JvdHRvbSB8fCBzID09IEJT
UmlnaHQpKQotICAgICAgICAgICAgICAgIGMgPSBjLmRhcmsoKTsKLSAgICAgICAgY2FzZSBTT0xJ
RDoKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoU29saWRTdHJv
a2UpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLCBtX3N0
eWxlLT5jb2xvclNwYWNlKCkpOwotICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zZXRTdHJv
a2VUaGlja25lc3ModGhpY2tuZXNzKTsKLSAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c3Ry
b2tlQXJjKEludFJlY3QoeCwgeSwgcmFkaXVzLndpZHRoKCkgKiAyLCByYWRpdXMuaGVpZ2h0KCkg
KiAyKSwgYW5nbGVTdGFydCwgYW5nbGVTcGFuKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAvLyBQYWludCBpbm5lciBvbmx5CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOwor
ICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChoYWxmQm9yZGVyUmVj
dCwgdG9wTGVmdEhhbGZSYWRpdXMsIHRvcFJpZ2h0SGFsZlJhZGl1cywKKyAgICAgICAgICAgIGJv
dHRvbUxlZnRIYWxmUmFkaXVzLCBib3R0b21SaWdodEhhbGZSYWRpdXMpOworICAgICAgICBkcmF3
Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwg
dGhpY2tuZXNzLCBkcmF3VGhpY2tuZXNzLCBzLCBzdHlsZSwgYywgczIpOworICAgICAgICBncmFw
aGljc0NvbnRleHQtPnJlc3RvcmUoKTsKKworICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGNh
c2UgSU5TRVQ6CisgICAgICAgIGlmIChzID09IEJTVG9wIHx8IHMgPT0gQlNMZWZ0KQorICAgICAg
ICAgICAgYyA9IGMuZGFyaygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9VVFNFVDoKKyAg
ICAgICAgaWYgKHMgPT0gQlNCb3R0b20gfHwgcyA9PSBCU1JpZ2h0KQorICAgICAgICAgICAgYyA9
IGMuZGFyaygpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsK
KyAgICBncmFwaGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihjLCBzdHlsZS0+Y29sb3JTcGFjZSgp
KTsKKyAgICBncmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KGJvcmRlclJlY3QpOwogfQogCiB2b2lk
IFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEludFJlY3QmIHJlY3QpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNp
b24gNjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBj
b3B5KQpAQCAtNDM1LDggKzQzNSwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGRyYXdMaW5lRm9y
Qm94U2lkZShHcmFwaGljc0NvbnRleHQqLCBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIs
IEJveFNpZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IsIEVCb3JkZXJTdHls
ZSwgaW50IGFkamJ3MSwgaW50IGFkamJ3Mik7Ci0gICAgdm9pZCBkcmF3QXJjRm9yQm94U2lkZShH
cmFwaGljc0NvbnRleHQqLCBpbnQgeCwgaW50IHksIGZsb2F0IHRoaWNrbmVzcywgSW50U2l6ZSBy
YWRpdXMsIGludCBhbmdsZVN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFu
Z2xlU3BhbiwgQm94U2lkZSwgQ29sb3IsIEVCb3JkZXJTdHlsZSwgYm9vbCBmaXJzdENvcm5lcik7
CisgICAgdm9pZCBkcmF3Qm94U2lkZUZyb21QYXRoKEdyYXBoaWNzQ29udGV4dCosIEludFJlY3Qs
IFBhdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRoaWNrbmVzcywgZmxv
YXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSwgY29uc3QgUmVuZGVyU3R5bGUqLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDb2xvciwgRUJvcmRlclN0eWxlKTsKKworICAgIEludFJlY3Qg
Ym9yZGVySW5uZXJSZWN0KGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCBzaG9ydCB0b3BXaWR0aCwg
dW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgbGVmdFdpZHRoLCB1bnNpZ25lZCBzaG9ydCByaWdodFdpZHRoKSBjb25z
dDsKIAogICAgIC8vIFRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZSBjYW4gYmUgY2FjaGVkIG9yIHVu
Y2FjaGVkLiAgVXNlIHRoZSBjYWNoZWQgbWV0aG9kIGlmIHRoZSBwc2V1ZG8gZWxlbWVudCBkb2Vz
bid0IHJlc3BlY3QKICAgICAvLyBhbnkgcHNldWRvIGNsYXNzZXMgKGFuZCB0aGVyZWZvcmUgaGFz
IG5vIGNvbmNlcHQgb2YgY2hhbmdpbmcgc3RhdGUpLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvUmVuZGVyU3R5bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0
eWxlL1JlbmRlclN0eWxlLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczNywxNCArNzM3LDgg
QEAgdm9pZCBSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KFNoYWRvd0RhdAogICAgIHJhcmVEYXRh
LT5tX2JveFNoYWRvdy5zZXQoc2hhZG93RGF0YSk7CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6Omdl
dEJvcmRlclJhZGlpRm9yUmVjdChjb25zdCBJbnRSZWN0JiByLCBJbnRTaXplJiB0b3BMZWZ0LCBJ
bnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90dG9tUmln
aHQpIGNvbnN0CitzdGF0aWMgdm9pZCBjb25zdHJhaW5Db3JuZXJSYWRpaUZvclJlY3QoY29uc3Qg
SW50UmVjdCYgciwgSW50U2l6ZSYgdG9wTGVmdCwgSW50U2l6ZSYgdG9wUmlnaHQsIEludFNpemUm
IGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0KQogewotICAgIHRvcExlZnQgPSBzdXJy
b3VuZC0+Ym9yZGVyLnRvcExlZnQoKTsKLSAgICB0b3BSaWdodCA9IHN1cnJvdW5kLT5ib3JkZXIu
dG9wUmlnaHQoKTsKLSAgICAKLSAgICBib3R0b21MZWZ0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0
b21MZWZ0KCk7Ci0gICAgYm90dG9tUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0
KCk7Ci0KICAgICAvLyBDb25zdHJhaW4gY29ybmVyIHJhZGlpIHVzaW5nIENTUzMgcnVsZXM6CiAg
ICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1iYWNrZ3JvdW5kLyN0aGUtYm9yZGVyLXJh
ZGl1cwogICAgIApAQCAtNzg5LDYgKzc4MywzOSBAQCB2b2lkIFJlbmRlclN0eWxlOjpnZXRCb3Jk
ZXJSYWRpaUZvclJlY3QoCiAgICAgfQogfQogCit2b2lkIFJlbmRlclN0eWxlOjpnZXRCb3JkZXJS
YWRpaUZvclJlY3QoY29uc3QgSW50UmVjdCYgciwgSW50U2l6ZSYgdG9wTGVmdCwgSW50U2l6ZSYg
dG9wUmlnaHQsIEludFNpemUmIGJvdHRvbUxlZnQsIEludFNpemUmIGJvdHRvbVJpZ2h0KSBjb25z
dAoreworICAgIHRvcExlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRvcExlZnQoKTsKKyAgICB0b3BS
aWdodCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wUmlnaHQoKTsKKyAgICAKKyAgICBib3R0b21MZWZ0
ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0b21MZWZ0KCk7CisgICAgYm90dG9tUmlnaHQgPSBzdXJy
b3VuZC0+Ym9yZGVyLmJvdHRvbVJpZ2h0KCk7CisKKyAgICBjb25zdHJhaW5Db3JuZXJSYWRpaUZv
clJlY3QociwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKK30K
Kwordm9pZCBSZW5kZXJTdHlsZTo6Z2V0SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVy
V2lkdGhzKGNvbnN0IEludFJlY3QmIGlubmVyUmVjdCwgdW5zaWduZWQgc2hvcnQgdG9wV2lkdGgs
IHVuc2lnbmVkIHNob3J0IGJvdHRvbVdpZHRoLCB1bnNpZ25lZCBzaG9ydCBsZWZ0V2lkdGgsIHVu
c2lnbmVkIHNob3J0IHJpZ2h0V2lkdGgsIEludFNpemUmIGlubmVyVG9wTGVmdCwgSW50U2l6ZSYg
aW5uZXJUb3BSaWdodCwgSW50U2l6ZSYgaW5uZXJCb3R0b21MZWZ0LCBJbnRTaXplJiBpbm5lckJv
dHRvbVJpZ2h0KSBjb25zdAoreworICAgIGlubmVyVG9wTGVmdCA9IHN1cnJvdW5kLT5ib3JkZXIu
dG9wTGVmdCgpOworICAgIGlubmVyVG9wUmlnaHQgPSBzdXJyb3VuZC0+Ym9yZGVyLnRvcFJpZ2h0
KCk7CisgICAgaW5uZXJCb3R0b21MZWZ0ID0gc3Vycm91bmQtPmJvcmRlci5ib3R0b21MZWZ0KCk7
CisgICAgaW5uZXJCb3R0b21SaWdodCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tUmlnaHQoKTsK
KworICAgIGlubmVyVG9wTGVmdC5zZXRXaWR0aChtYXgoMCwgaW5uZXJUb3BMZWZ0LndpZHRoKCkg
LSBsZWZ0V2lkdGgpKTsKKyAgICBpbm5lclRvcExlZnQuc2V0SGVpZ2h0KG1heCgwLCBpbm5lclRv
cExlZnQuaGVpZ2h0KCkgLSB0b3BXaWR0aCkpOworCisgICAgaW5uZXJUb3BSaWdodC5zZXRXaWR0
aChtYXgoMCwgaW5uZXJUb3BSaWdodC53aWR0aCgpIC0gcmlnaHRXaWR0aCkpOworICAgIGlubmVy
VG9wUmlnaHQuc2V0SGVpZ2h0KG1heCgwLCBpbm5lclRvcFJpZ2h0LmhlaWdodCgpIC0gdG9wV2lk
dGgpKTsKKworICAgIGlubmVyQm90dG9tTGVmdC5zZXRXaWR0aChtYXgoMCwgaW5uZXJCb3R0b21M
ZWZ0LndpZHRoKCkgLSBsZWZ0V2lkdGgpKTsKKyAgICBpbm5lckJvdHRvbUxlZnQuc2V0SGVpZ2h0
KG1heCgwLCBpbm5lckJvdHRvbUxlZnQuaGVpZ2h0KCkgLSBib3R0b21XaWR0aCkpOworCisgICAg
aW5uZXJCb3R0b21SaWdodC5zZXRXaWR0aChtYXgoMCwgaW5uZXJCb3R0b21SaWdodC53aWR0aCgp
IC0gcmlnaHRXaWR0aCkpOworICAgIGlubmVyQm90dG9tUmlnaHQuc2V0SGVpZ2h0KG1heCgwLCBp
bm5lckJvdHRvbVJpZ2h0LmhlaWdodCgpIC0gYm90dG9tV2lkdGgpKTsKKworICAgIGNvbnN0cmFp
bkNvcm5lclJhZGlpRm9yUmVjdChpbm5lclJlY3QsIGlubmVyVG9wTGVmdCwgaW5uZXJUb3BSaWdo
dCwgaW5uZXJCb3R0b21MZWZ0LCBpbm5lckJvdHRvbVJpZ2h0KTsKK30KKwogY29uc3QgQ291bnRl
ckRpcmVjdGl2ZU1hcCogUmVuZGVyU3R5bGU6OmNvdW50ZXJEaXJlY3RpdmVzKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fY291bnRlckRpcmVjdGl2ZXMuZ2V0
KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDYx
NTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzg3LDYgKzc4NywxMCBAQCBwdWJsaWM6CiAgICAgfQogICAgIAogICAgIHZvaWQg
Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGNvbnN0IEludFJlY3QmLCBJbnRTaXplJiB0b3BMZWZ0LCBJ
bnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90dG9tUmln
aHQpIGNvbnN0OworICAgIHZvaWQgZ2V0SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVy
V2lkdGhzKGNvbnN0IEludFJlY3QmLCB1bnNpZ25lZCBzaG9ydCB0b3BXaWR0aCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgsIHVuc2lnbmVk
IHNob3J0IGxlZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgSW50U2l6ZSYgaW5uZXJUb3BMZWZ0LCBJbnRTaXplJiBpbm5lclRv
cFJpZ2h0LCBJbnRTaXplJiBpbm5lckJvdHRvbUxlZnQsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEludFNpemUmIGlubmVyQm90dG9tUmlnaHQpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRC
b3JkZXJMZWZ0V2lkdGgodW5zaWduZWQgc2hvcnQgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3Jk
ZXIubV9sZWZ0Lm1fd2lkdGgsIHYpIH0KICAgICB2b2lkIHNldEJvcmRlckxlZnRTdHlsZShFQm9y
ZGVyU3R5bGUgdikgeyBTRVRfVkFSKHN1cnJvdW5kLCBib3JkZXIubV9sZWZ0Lm1fc3R5bGUsIHYp
IH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYxNjUzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTAtMDYtMjIgIEJldGggRGFraW4gIDxi
ZGFraW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFRlc3RzIHdpdGggbmV3IHJlc3VsdHMgYWZ0ZXIgCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTk3IENTUzM6IEJvcmRlcnMgCisgICAg
ICAgIHdpdGggYm9yZGVyLXJhZGl1cyBhbmQgZG91YmxlLCBncm9vdmUsIG9yIHJpZGdlIHN0eWxl
cyBzaG91bGQgbG9vayAKKyAgICAgICAgYmV0dGVyCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5lcnMtZXhwZWN0ZWQuY2hl
Y2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNB
bGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMv
ZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLmNoZWNrc3VtOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDEtZXhw
ZWN0ZWQucG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFk
aXVzRGFzaGVkMDItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3RlZC5wbmc6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMy1leHBlY3RlZC5j
aGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1
c0Rhc2hlZDAzLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3Jk
ZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDEtZXhwZWN0ZWQucG5n
OgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVk
MDItZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVy
cy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5jaGVja3N1bToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAz
LWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRl
clJhZGl1c0RvdWJsZTAxLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQucG5nOgorCiAyMDEw
LTA2LTIyICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBV
bnJldmlld2VkLgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9i
b3JkZXJSYWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVz
QWxsU3R5bGVzQWxsQ29ybmVycy1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisr
KyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0
eWxlc0FsbENvcm5lcnMtZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEg
QEAKLTUxN2YzMzI0YzA3NjRmYjgyNzE2YTU0MTM1OTU2MzA5ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQorN2E4YjE1MjQwN2RmZDBiNTk3OTVjYmMwYjliNjQ1MzQKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJz
L2JvcmRlclJhZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDEt
ZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMS1leHBlY3RlZC5jaGVja3N1
bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNDdlZDJlMzNlMDNkNjE4MDU2NjVhYTRlNWFh
ODg2Y2YKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitkMmQ1ODBhMmQ5ZTRlNjVmZDljMWNh
ZTQ1ZmI3N2EwOApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3Rz
L3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDItZXhwZWN0ZWQu
Y2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9y
ZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1
NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1
c0Rhc2hlZDAyLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi1h
NWNmYTNlMjkwZTVjYWUwNDYzYTdjNDI1OGU2ZTk4ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKKzFkYTcyNzVmMzNkNjUwZWIyZTc2MDJiNjdhOWI3Y2QyClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3Jk
ZXJSYWRpdXNEYXNoZWQwMy1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAzLWV4cGVj
dGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW0JKHdv
cmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTQ4MGNhMDNmMjg0MmY0NjNjZDIxYzdiNTgzMmFjMjhl
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorZjQ0MTQyZDY5ZDJjMjI1NjFiY2QxMTYxMDli
ZGJlZGIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLmNoZWNr
c3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMv
Ym9yZGVyUmFkaXVzRG90dGVkMDEtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1KQor
KysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0
ZWQwMS1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotMTZmNDY1
ZjcxZmYwZDdhNjQ0Y2JjOGZhNzg3YWFhMmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis0
MWRlZTg4ZjliNjMwZDM4M2NiMTQxNWI2Yjc3NGQ5NwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFk
aXVzRG90dGVkMDItZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5j
aGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFz
dC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAyLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5n
IGNvcHkpCkBAIC0xICsxIEBACi0zOTFlNTMyMTAzNmUxNGU0OTJlMGI5OTEzMGFkMzUzOApcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzY2NGNiYWQ4ZDkwMmM4NGZlYmY1YWYxYzMyNzFiMmIy
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5jaGVja3N1bQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRl
clJhZGl1c0RvdHRlZDAzLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExh
eW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDMt
ZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLWMxMDgwODk3MzJj
NmI1NzY3YTU4MTZlN2E5MzE1MzgzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorN2FhYWFm
ODhkMGNmMmM2MTQ1Y2U5MWU4OTcxYTQ5MTgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rv
dWJsZTAxLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRm
b3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQuY2hlY2tz
dW0JKHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9y
ZGVycy9ib3JkZXJSYWRpdXNEb3VibGUwMS1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5
KQpAQCAtMSArMSBAQAotNmE4OWNkZTZmYmViOGU1Y2NjNTM2MzQxNmY2ZjQ0OTEKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCitlYmU5OWQ2OTBlNWZiYWI2MjVmOTlhNzdmMmRhZGU2YgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzQWxsU3R5bGVzQWxsQ29ybmVycy1leHBlY3RlZC5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4K
c3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59552</attachid>
            <date>2010-06-23 12:42:45 -0700</date>
            <delta_ts>2010-06-28 13:21:33 -0700</delta_ts>
            <desc>Patch the won&apos;t break other platforms</desc>
            <filename>forReview4.txt</filename>
            <type>text/plain</type>
            <size>46568</size>
            <attacher name="Beth Dakin">bdakin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MTY1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODIgQEAKKzIwMTAtMDYtMjIgIEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeCBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTcgQ1NTMzogQm9y
ZGVycyAKKyAgICAgICAgd2l0aCBib3JkZXItcmFkaXVzIGFuZCBkb3VibGUsIGdyb292ZSwgb3Ig
cmlkZ2Ugc3R5bGVzIHNob3VsZCBsb29rIAorICAgICAgICBiZXR0ZXIKKworICAgICAgICBUaGlz
IHBhdGNoIHJlLXdvcmtzIGJvcmRlciByYWRpdXMgcGFpbnRpbmcgdG8gc3Ryb2tlIHBhdGhzIGlu
c3RlYWQgCisgICAgICAgIG9mIGFyY3MuIAorCisgICAgICAgIEFkZGVkIG5ldyBmdW5jdGlvbiBj
bGlwQ29udmV4UG9seWdvbigpLiBBZGRlZCBzdGF0aWMgCisgICAgICAgIGFkZENvbnZleFBvbHln
b25Ub0NvbnRleHQgc28gdGhhdCBjb2RlIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiAKKyAgICAgICAg
ZHJhd0NvbnZleFBvbHlnb24oKSBhbmQgY2xpcENvbnZleFBvbHlnb24oKS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRD
b252ZXhQb2x5Z29uVG9Db250ZXh0KToKKworICAgICAgICBTaGVsbHMgb2YgaW1wbGVtZW50YXRp
b25zIG9uIG5vbi1DRyBwbGF0Zm9ybXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGlwQ29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hh
aWt1L0dyYXBoaWNzQ29udGV4dEhhaWt1LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6Y2xpcENvbnZleFBvbHlnb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW5jZS9HcmFwaGljc0NvbnRleHRXaW5jZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKToKKworICAgICAgICBUaGlzIG5ldyBoZWxwZXIgZnVu
Y3Rpb24gZGV0ZXJtaW5lcyBpZiB0aGUgaW5uZXIgY29ybmVycyBvZiB0aGUgCisgICAgICAgIGJv
cmRlciB3aWxsIGFyY2ggaW4gb3IgbWVldCBhdCBhIHJpZ2h0IGFuZ2xlLiAgCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJv
cmRlcldpbGxBcmNJbm5lckVkZ2UpOgorCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgcmUtd3Jp
dHRlbiBzbyB0aGF0LCBmb3IgZWFjaCBzaWRlIG9mIHRoZSBib3JkZXIsIAorICAgICAgICBpZiBi
b3JkZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgdHJ1ZSwgd2UgZ28gZG93biBhIGJyYW5kIG5ldyBj
b2RlIAorICAgICAgICBwYXRoIG9mIGNsaXBwaW5nIHRvIGEgY29udmV4IHBvbHlnb24gZm9yIHRo
ZSBib3JkZXIgc2lkZSBhbmQgdGhlbiAKKyAgICAgICAgd2UgcGFpbnQgdGhlIHNpZGUgdXNpbmcg
dGhlIG5ldyBmdW5jdGlvbiBkcmF3Qm94U2lkZUZyb21QYXRoKCkuIElmIAorICAgICAgICBib3Jk
ZXJXaWxsQXJjSW5uZXJFZGdlKCkgaXMgZmFsc2UsIHRoZW4gd2UgY2FsbCBpbnRvIHRoZSBvbGQg
CisgICAgICAgIGZhbWlsaWFyIGRyYXdMaW5lRm9yQm94U2lkZSgpIHdoaWNoIHJlbGllcyBvbiB0
aGUgcm91bmRlciBjbGlwIAorICAgICAgICByZWN0cyB3ZSBoYXZlIHNldCB1cCB0byBhcmNoIHRo
ZSBvdXRlciBlZGdlIG9mIHRoZSBib3JkZXIuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3hN
b2RlbE9iamVjdDo6cGFpbnRCb3JkZXIpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIGRv
ZXMgdGhlIG1hdGggdG8gZmlndXJlIG91dCB0aGF3IGNvbnZleCBwb2x5Z29uIAorICAgICAgICB0
byBjbGlwIHRvIGluIHRoZSBjYXNlIHdoZXJlIHdlIG5lZWQgdG8gYXJjaCB0aGUgaW5uZXIgZWRn
ZSBvZiB0aGUgCisgICAgICAgIGJvcmRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1v
ZGVsT2JqZWN0OjpjbGlwQm9yZGVyU2lkZVBvbHlnb24pOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorCisgICAgICAgIGJvcmRlcklubmVyUmVjdCBpcyBhIG5l
dyBjb252ZW5pZW5jZSBmdW5jdGlvbiBjYWxsZWQgZnJvbSAKKyAgICAgICAgUmVuZGVyT2JqZWN0
IGFuZCBSZW5kZXJCb3hNb2RlbE9iamVjdCB0byBkZXRlcm1pbmUgdGhlIHJlY3Qgb2YgdGhlIAor
ICAgICAgICBpbnNpZGUgZWRnZSBvZiB0aGUgYm9yZGVyLgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpib3JkZXJJ
bm5lclJlY3QpOgorCisgICAgICAgIFRoaXMgbmV3IGZ1bmN0aW9uIHJlLXdvcmtzIGRyYXdBcmNG
b3JCb3hTaWRlIHRvIGRyYXcgZnJvbSBQYXRocyAKKyAgICAgICAgd2hlbiBhcHByb3ByaWF0ZSBp
bnN0ZWFkIG9mIHN0cm9raW5nIGFyY3MuIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpkcmF3Qm94U2lkZUZyb21QYXRoKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisKKyAgICAgICAgTmV3IGZ1bmN0aW9uIAorICAgICAgICBSZW5kZXJTdHlsZTo6Z2V0SW5u
ZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKCkgZ2V0cyB0aGUgCisgICAgICAg
IGlubmVyIHJhZGl1cyB2YWx1ZXMgZm9yIGEgcmVjdC4gSXQgdGFrZXMgYm9yZGVyIHdpZHRocyBh
IHBhcmFtZXRlcnMgCisgICAgICAgIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBzdHlsZSdzIGJvcmRl
ciB3aWR0aHMgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCAKKyAgICAgICAgaW4gaW5uZXIgcmFkaXVz
IGNhbGN1bGF0aW9ucyBmb3IgZG91YmxlIGFuZCBncm9vdmUvcmlkZ2UgCisgICAgICAgIGNhbGN1
bGF0aW9ucy4gVGhlIFczQyBjb3JuZXIgY29uc3RyYWluaW5nIHJ1bGVzIHdlcmUgbW92ZWQgdG8g
YSAKKyAgICAgICAgc3RhdGljIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGNhbGxlZCBmcm9tIGJvdGgg
Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0CisgICAgICAgICgpIGFuZCBnZXRJbm5lckJvcmRlclJhZGlp
Rm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoKS4KKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvUmVu
ZGVyU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RyYWluQ29ybmVyUmFkaWlGb3JS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclN0eWxlOjpnZXRCb3JkZXJSYWRpaUZvclJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU3R5bGU6OmdldElubmVyQm9yZGVyUmFkaWlG
b3JSZWN0V2l0aEJvcmRlcldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1JlbmRl
clN0eWxlLmg6CisKIDIwMTAtMDYtMjIgIEtlbnQgVGFtdXJhICA8dGtlbnRAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgJKHJldmlzaW9uIDYxNTQ1KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjM5LDYgKzIzOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGlw
T3V0Um91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNv
bnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21SaWdodCk7CiAgICAgICAgIHZvaWQgY2xpcFBhdGgoV2luZFJ1bGUpOwog
ICAgICAgICB2b2lkIGNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlQnVmZmVyKik7CisgICAgICAgIHZvaWQgY2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCopOwogCiAgICAgICAgIGludCB0ZXh0RHJhd2luZ01vZGUo
KTsKICAgICAgICAgdm9pZCBzZXRUZXh0RHJhd2luZ01vZGUoaW50KTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDQsNiArNTA0
LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5
Z29uKHNpemVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9p
bnRzIDw9IDEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogSU1QTEVNRU5U
IQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogewogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQwLDYgKzQ0MCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNvbnN0
IEluCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAorc3RhdGljIHZv
aWQgYWRkQ29udmV4UG9seWdvblRvQ29udGV4dChDR0NvbnRleHRSZWYgY29udGV4dCwgc2l6ZV90
IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIENHQ29udGV4dEJl
Z2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRNb3ZlVG9Qb2ludChjb250ZXh0LCBwb2lu
dHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG51
bVBvaW50czsgaSsrKQorICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBw
b2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgpKTsKKyAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29u
dGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXpl
X3QgbnBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzLCBib29sIGFudGlhbGlhc2VkKQog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC00NTMsMTggKzQ2MiwyNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgaWYgKGFudGlhbGlhc2Vk
ICE9IHNob3VsZEFudGlhbGlhcygpKQogICAgICAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxp
YXMoY29udGV4dCwgYW50aWFsaWFzZWQpOwogCi0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRl
eHQpOwotICAgIENHQ29udGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHBvaW50c1swXS54KCksIHBv
aW50c1swXS55KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbnBvaW50czsgaSsrKQot
ICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBw
b2ludHNbaV0ueSgpKTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7Ci0KKyAgICBh
ZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0KGNvbnRleHQsIG5wb2ludHMsIHBvaW50cyk7CiAgICAg
ZHJhd1BhdGgoKTsKIAogICAgIGlmIChhbnRpYWxpYXNlZCAhPSBzaG91bGRBbnRpYWxpYXMoKSkK
ICAgICAgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRleHQsIHNob3VsZEFudGlh
bGlhcygpKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNp
emVfdCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9pbnRzIDw9
IDEpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhZGRDb252ZXhQb2x5Z29uVG9Db250ZXh0
KHBsYXRmb3JtQ29udGV4dCgpLCBudW1Qb2ludHMsIHBvaW50cyk7CisgICAgY2xpcFBhdGgoUlVM
RV9OT05aRVJPKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVy
bigpCiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlr
dS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9HcmFw
aGljc0NvbnRleHRIYWlrdS5jcHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYWlrdS9HcmFwaGljc0NvbnRleHRIYWlrdS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE1Miw2ICsxNTIsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgICAgICBtX2RhdGEtPm1fdmlldy0+U3Ryb2tlUG9seWdvbihiUG9pbnRzLCBwb2lu
dHNMZW5ndGgsIHRydWUsIGdldEhhaWt1U3Ryb2tlU3R5bGUoKSk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9h
dFBvaW50KiBwb2ludHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKG51bVBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgLy8gRklYTUU6IElNUExFTUVOVCEhCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNw
cAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTI4LDYgKzUyOCwxNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oCiAgICAgcC0+cmVzdG9yZSgpOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBvbHlnb24oc2l6ZV90IG51bVBv
aW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChudW1Qb2ludHMgPD0gMSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIEZJWE1FOiBJTVBMRU1FTlQhIQorfQorCiBRUGVuIEdy
YXBoaWNzQ29udGV4dDo6cGVuKCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0Nv
bnRleHRTa2lhLmNwcAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3OCw2
ICs0NzgsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAg
IH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKHNpemVfdCBu
dW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cykKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobnVtUG9pbnRzIDw9IDEpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogSU1QTEVNRU5UISEKK30KKwogLy8g
VGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQg
aW4gbGlzdHMuCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVj
dCYgZWxpcHNlUmVjdCkKIHsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
R3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2UuY3BwCShyZXZpc2lvbiA2MTU0NSkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvR3JhcGhpY3NDb250ZXh0V2luY2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NDgsNiArOTQ4LDE3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICB9CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwQ29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBw
b2ludHMpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKG51bVBvaW50cyA8PSAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
RklYTUU6IElNUExFTUVOVCEhCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkgfHwgIW1fZGF0YS0+bV9vcGFj
aXR5KQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRX
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGlj
c0NvbnRleHRXeC5jcHAJKHJldmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Niw2ICsy
NTYsMTcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGRl
bGV0ZSBbXSBwb2x5Z29uOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcENvbnZleFBv
bHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCogcG9pbnRzKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChudW1Q
b2ludHMgPD0gMSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IElNUExFTUVOVCEh
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuY3BwCShyZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxv
Y2suaCIKICNpbmNsdWRlICJSZW5kZXJJbmxpbmUuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgpAQCAtOTA5LDEyICs5MTAsMTg1IEBAIGJvb2wgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50
TmluZVBpZWMKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGJvb2wgYm9yZGVyV2lsbEFy
Y0lubmVyRWRnZShjb25zdCBJbnRTaXplJiBmaXJzdFJhZGl1cywgY29uc3QgSW50U2l6ZSYgc2Vj
b25kUmFkaXVzLCBpbnQgZmlyc3RCb3JkZXJXaWR0aCwgaW50IHNlY29uZEJvcmRlcldpZHRoLCBp
bnQgbWlkZGxlQm9yZGVyV2lkdGgpCit7CisgICAgLy8gRklYTUU6IFRoaXMgdGVzdCBpcyBpbnN1
ZmZpY2llbnQuIFdlIG5lZWQgdG8gdGFrZSBib3JkZXIgc3R5bGUgaW50byBhY2NvdW50LgorICAg
IHJldHVybiAoIWZpcnN0UmFkaXVzLndpZHRoKCkgfHwgZmlyc3RSYWRpdXMud2lkdGgoKSA+PSBm
aXJzdEJvcmRlcldpZHRoKQorICAgICAgICAgICAgJiYgKCFmaXJzdFJhZGl1cy5oZWlnaHQoKSB8
fCBmaXJzdFJhZGl1cy5oZWlnaHQoKSA+PSBtaWRkbGVCb3JkZXJXaWR0aCkKKyAgICAgICAgICAg
ICYmICghc2Vjb25kUmFkaXVzLndpZHRoKCkgfHwgc2Vjb25kUmFkaXVzLndpZHRoKCkgPj0gc2Vj
b25kQm9yZGVyV2lkdGgpCisgICAgICAgICAgICAmJiAoIXNlY29uZFJhZGl1cy5oZWlnaHQoKSB8
fCBzZWNvbmRSYWRpdXMuaGVpZ2h0KCkgPj0gbWlkZGxlQm9yZGVyV2lkdGgpOworfQorCisjaWYg
UExBVEZPUk0oQ0cpCiB2b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpwYWludEJvcmRlcihHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgaW50IHR4LCBpbnQgdHksIGludCB3LCBpbnQg
aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBzdHlsZSwgYm9vbCBiZWdpbiwgYm9vbCBlbmQpCiB7CiAgICAgaWYgKHBhaW50TmluZVBp
ZWNlSW1hZ2UoZ3JhcGhpY3NDb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlLCBzdHlsZS0+Ym9y
ZGVySW1hZ2UoKSkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChncmFwaGljc0NvbnRleHQt
PnBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29uc3QgQ29sb3Im
IHRvcENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
clRvcENvbG9yKTsKKyAgICBjb25zdCBDb2xvciYgYm90dG9tQ29sb3IgPSBzdHlsZS0+dmlzaXRl
ZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpOworICAgIGNvbnN0
IENvbG9yJiBsZWZ0Q29sb3IgPSBzdHlsZS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yKTsKKyAgICBjb25zdCBDb2xvciYgcmlnaHRDb2xvciA9IHN0eWxl
LT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yKTsKKwor
ICAgIGJvb2wgdG9wVHJhbnNwYXJlbnQgPSBzdHlsZS0+Ym9yZGVyVG9wSXNUcmFuc3BhcmVudCgp
OworICAgIGJvb2wgYm90dG9tVHJhbnNwYXJlbnQgPSBzdHlsZS0+Ym9yZGVyQm90dG9tSXNUcmFu
c3BhcmVudCgpOworICAgIGJvb2wgcmlnaHRUcmFuc3BhcmVudCA9IHN0eWxlLT5ib3JkZXJSaWdo
dElzVHJhbnNwYXJlbnQoKTsKKyAgICBib29sIGxlZnRUcmFuc3BhcmVudCA9IHN0eWxlLT5ib3Jk
ZXJMZWZ0SXNUcmFuc3BhcmVudCgpOworCisgICAgRUJvcmRlclN0eWxlIHRvcFN0eWxlID0gc3R5
bGUtPmJvcmRlclRvcFN0eWxlKCk7CisgICAgRUJvcmRlclN0eWxlIGJvdHRvbVN0eWxlID0gc3R5
bGUtPmJvcmRlckJvdHRvbVN0eWxlKCk7CisgICAgRUJvcmRlclN0eWxlIGxlZnRTdHlsZSA9IHN0
eWxlLT5ib3JkZXJMZWZ0U3R5bGUoKTsKKyAgICBFQm9yZGVyU3R5bGUgcmlnaHRTdHlsZSA9IHN0
eWxlLT5ib3JkZXJSaWdodFN0eWxlKCk7CisKKyAgICBib29sIHJlbmRlclRvcCA9IHRvcFN0eWxl
ID4gQkhJRERFTiAmJiAhdG9wVHJhbnNwYXJlbnQ7CisgICAgYm9vbCByZW5kZXJMZWZ0ID0gbGVm
dFN0eWxlID4gQkhJRERFTiAmJiBiZWdpbiAmJiAhbGVmdFRyYW5zcGFyZW50OworICAgIGJvb2wg
cmVuZGVyUmlnaHQgPSByaWdodFN0eWxlID4gQkhJRERFTiAmJiBlbmQgJiYgIXJpZ2h0VHJhbnNw
YXJlbnQ7CisgICAgYm9vbCByZW5kZXJCb3R0b20gPSBib3R0b21TdHlsZSA+IEJISURERU4gJiYg
IWJvdHRvbVRyYW5zcGFyZW50OworCisgICAgYm9vbCByZW5kZXJSYWRpaSA9IGZhbHNlOworICAg
IFBhdGggcm91bmRlZFBhdGg7CisgICAgSW50U2l6ZSB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9t
TGVmdCwgYm90dG9tUmlnaHQ7CisgICAgSW50UmVjdCBib3JkZXJSZWN0KHR4LCB0eSwgdywgaCk7
CisKKyAgICBpZiAoc3R5bGUtPmhhc0JvcmRlclJhZGl1cygpKSB7CisgICAgICAgIEludFNpemUg
dG9wTGVmdFJhZGl1cywgdG9wUmlnaHRSYWRpdXMsIGJvdHRvbUxlZnRSYWRpdXMsIGJvdHRvbVJp
Z2h0UmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGJvcmRlclJl
Y3QsIHRvcExlZnRSYWRpdXMsIHRvcFJpZ2h0UmFkaXVzLCBib3R0b21MZWZ0UmFkaXVzLCBib3R0
b21SaWdodFJhZGl1cyk7CisKKyAgICAgICAgSW50UmVjdCBpbm5lckJvcmRlclJlY3QgPSBib3Jk
ZXJJbm5lclJlY3QoYm9yZGVyUmVjdCwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpLCAKKyAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgo
KSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7CisKKyAgICAgICAgSW50U2l6ZSBpbm5lclRv
cExlZnRSYWRpdXMsIGlubmVyVG9wUmlnaHRSYWRpdXMsIGlubmVyQm90dG9tTGVmdFJhZGl1cywg
aW5uZXJCb3R0b21SaWdodFJhZGl1czsKKyAgICAgICAgc3R5bGUtPmdldElubmVyQm9yZGVyUmFk
aWlGb3JSZWN0V2l0aEJvcmRlcldpZHRocyhpbm5lckJvcmRlclJlY3QsIHN0eWxlLT5ib3JkZXJU
b3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSwgCisgICAgICAgICAgICBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIGlubmVyVG9w
TGVmdFJhZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgCisgICAgICAgICAgICBpbm5lckJvdHRv
bUxlZnRSYWRpdXMsIGlubmVyQm90dG9tUmlnaHRSYWRpdXMpOworCisgICAgICAgIGlmIChiZWdp
bikgeworICAgICAgICAgICAgdG9wTGVmdCA9IHRvcExlZnRSYWRpdXM7CisgICAgICAgICAgICBi
b3R0b21MZWZ0ID0gYm90dG9tTGVmdFJhZGl1czsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5k
KSB7CisgICAgICAgICAgICB0b3BSaWdodCA9IHRvcFJpZ2h0UmFkaXVzOworICAgICAgICAgICAg
Ym90dG9tUmlnaHQgPSBib3R0b21SaWdodFJhZGl1czsKKyAgICAgICAgfQorCisgICAgICAgIHJl
bmRlclJhZGlpID0gdHJ1ZTsKKworICAgICAgICAvLyBDbGlwIHRvIHRoZSBpbm5lciBhbmQgb3V0
ZXIgcmFkaWkgcmVjdHMuCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAg
ICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChib3JkZXJSZWN0LCB0b3BMZWZ0
LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworICAgICAgICBncmFwaGljc0Nv
bnRleHQtPmNsaXBPdXRSb3VuZGVkUmVjdChpbm5lckJvcmRlclJlY3QsIGlubmVyVG9wTGVmdFJh
ZGl1cywgaW5uZXJUb3BSaWdodFJhZGl1cywgaW5uZXJCb3R0b21MZWZ0UmFkaXVzLCBpbm5lckJv
dHRvbVJpZ2h0UmFkaXVzKTsKKworICAgICAgICByb3VuZGVkUGF0aCA9IFBhdGg6OmNyZWF0ZVJv
dW5kZWRSZWN0YW5nbGUoYm9yZGVyUmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQs
IGJvdHRvbVJpZ2h0KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5hZGRQYXRoKHJvdW5kZWRQ
YXRoKTsKKyAgICB9CisKKyAgICBpZiAocmVuZGVyVG9wKSB7CisgICAgICAgIGludCB4ID0gdHg7
CisgICAgICAgIGludCB4MiA9IHR4ICsgdzsKKworICAgICAgICBpZiAocmVuZGVyUmFkaWkgJiYg
Ym9yZGVyV2lsbEFyY0lubmVyRWRnZSh0b3BMZWZ0LCB0b3BSaWdodCwgc3R5bGUtPmJvcmRlckxl
ZnRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyVG9wV2lk
dGgoKSkpIHsKKyAgICAgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICAg
ICAgY2xpcEJvcmRlclNpZGVQb2x5Z29uKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgdG9w
TGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBCU1RvcCwgc3R5bGUpOwor
ICAgICAgICAgICAgZmxvYXQgdGhpY2tuZXNzID0gbWF4KG1heChzdHlsZS0+Ym9yZGVyVG9wV2lk
dGgoKSwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKSwgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgo
KSk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9y
ZGVyUmVjdCwgcm91bmRlZFBhdGgsIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCB0aGlja25lc3Ms
IEJTVG9wLCBzdHlsZSwgdG9wQ29sb3IsIHRvcFN0eWxlKTsKKyAgICAgICAgICAgIGdyYXBoaWNz
Q29udGV4dC0+cmVzdG9yZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYm9vbCBp
Z25vcmVMZWZ0ID0gKHRvcENvbG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBs
ZWZ0VHJhbnNwYXJlbnQgJiYgdG9wU3R5bGUgPj0gT1VUU0VUCisgICAgICAgICAgICAgICAgJiYg
KGxlZnRTdHlsZSA9PSBET1RURUQgfHwgbGVmdFN0eWxlID09IERBU0hFRCB8fCBsZWZ0U3R5bGUg
PT0gU09MSUQgfHwgbGVmdFN0eWxlID09IE9VVFNFVCkpOworICAgICAgICAgICAgYm9vbCBpZ25v
cmVSaWdodCA9ICh0b3BDb2xvciA9PSByaWdodENvbG9yICYmIHRvcFRyYW5zcGFyZW50ID09IHJp
Z2h0VHJhbnNwYXJlbnQgJiYgdG9wU3R5bGUgPj0gT1VUU0VUCisgICAgICAgICAgICAgICAgJiYg
KHJpZ2h0U3R5bGUgPT0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gREFTSEVEIHx8IHJpZ2h0U3R5
bGUgPT0gU09MSUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkpOworCisgICAgICAgICAgICBkcmF3
TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB4LCB0eSwgeDIsIHR5ICsgc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCksIEJTVG9wLCB0b3BDb2xvciwgdG9wU3R5bGUsCisgICAgICAgICAgICAg
ICAgICAgIGlnbm9yZUxlZnQgPyAwIDogc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpLCBpZ25vcmVS
aWdodCA/IDAgOiBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsgICAgICAgICAgICAgICAKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChyZW5kZXJCb3R0b20pIHsKKyAgICAgICAgaW50IHgg
PSB0eDsKKyAgICAgICAgaW50IHgyID0gdHggKyB3OworCisgICAgICAgIGlmIChyZW5kZXJSYWRp
aSAmJiBib3JkZXJXaWxsQXJjSW5uZXJFZGdlKGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0LCBzdHls
ZS0+Ym9yZGVyTGVmdFdpZHRoKCksIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCksIHN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpKSkgeworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZl
KCk7CisgICAgICAgICAgICBjbGlwQm9yZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBi
b3JkZXJSZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJT
Qm90dG9tLCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MgPSBtYXgobWF4KHN0
eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCBzdHls
ZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKTsKKyAgICAgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBhdGgo
Z3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCByb3VuZGVkUGF0aCwgc3R5bGUtPmJvcmRlckJv
dHRvbVdpZHRoKCksIHRoaWNrbmVzcywgQlNCb3R0b20sIHN0eWxlLCBib3R0b21Db2xvciwgYm90
dG9tU3R5bGUpOworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBib29sIGlnbm9yZUxlZnQgPSAoYm90dG9tQ29sb3Ig
PT0gbGVmdENvbG9yICYmIGJvdHRvbVRyYW5zcGFyZW50ID09IGxlZnRUcmFuc3BhcmVudCAmJiBi
b3R0b21TdHlsZSA+PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAobGVmdFN0eWxlID09IERP
VFRFRCB8fCBsZWZ0U3R5bGUgPT0gREFTSEVEIHx8IGxlZnRTdHlsZSA9PSBTT0xJRCB8fCBsZWZ0
U3R5bGUgPT0gT1VUU0VUKSk7CisKKyAgICAgICAgICAgIGJvb2wgaWdub3JlUmlnaHQgPSAoYm90
dG9tQ29sb3IgPT0gcmlnaHRDb2xvciAmJiBib3R0b21UcmFuc3BhcmVudCA9PSByaWdodFRyYW5z
cGFyZW50ICYmIGJvdHRvbVN0eWxlID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmIChyaWdo
dFN0eWxlID09IERPVFRFRCB8fCByaWdodFN0eWxlID09IERBU0hFRCB8fCByaWdodFN0eWxlID09
IFNPTElEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpKTsKKworICAgICAgICAgICAgZHJhd0xpbmVG
b3JCb3hTaWRlKGdyYXBoaWNzQ29udGV4dCwgeCwgdHkgKyBoIC0gc3R5bGUtPmJvcmRlckJvdHRv
bVdpZHRoKCksIHgyLCB0eSArIGgsIEJTQm90dG9tLCBib3R0b21Db2xvciwgCisgICAgICAgICAg
ICAgICAgICAgICAgICBib3R0b21TdHlsZSwgaWdub3JlTGVmdCA/IDAgOiBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlUmlnaHQgPyAwIDog
c3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
cmVuZGVyTGVmdCkgeworICAgICAgICBpbnQgeSA9IHR5OworICAgICAgICBpbnQgeTIgPSB0eSAr
IGg7CisKKyAgICAgICAgaWYgKHJlbmRlclJhZGlpICYmIGJvcmRlcldpbGxBcmNJbm5lckVkZ2Uo
Ym90dG9tTGVmdCwgdG9wTGVmdCwgc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCksIHN0eWxlLT5i
b3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpKSB7CisgICAgICAgICAg
ICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgICAgIGNsaXBCb3JkZXJTaWRlUG9s
eWdvbihncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0
b21MZWZ0LCBib3R0b21SaWdodCwgQlNMZWZ0LCBzdHlsZSk7CisgICAgICAgICAgICBmbG9hdCB0
aGlja25lc3MgPSBtYXgobWF4KHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgc3R5bGUtPmJvcmRl
clRvcFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgICAgICBk
cmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgcm91bmRlZFBh
dGgsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSwgdGhpY2tuZXNzLCBCU0xlZnQsIHN0eWxlLCBs
ZWZ0Q29sb3IsIGxlZnRTdHlsZSk7CisgICAgICAgICAgICBncmFwaGljc0NvbnRleHQtPnJlc3Rv
cmUoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgaWdub3JlVG9wID0gKHRv
cENvbG9yID09IGxlZnRDb2xvciAmJiB0b3BUcmFuc3BhcmVudCA9PSBsZWZ0VHJhbnNwYXJlbnQg
JiYgbGVmdFN0eWxlID49IE9VVFNFVAorICAgICAgICAgICAgICAgICYmICh0b3BTdHlsZSA9PSBE
T1RURUQgfHwgdG9wU3R5bGUgPT0gREFTSEVEIHx8IHRvcFN0eWxlID09IFNPTElEIHx8IHRvcFN0
eWxlID09IE9VVFNFVCkpOworCisgICAgICAgICAgICBib29sIGlnbm9yZUJvdHRvbSA9IChib3R0
b21Db2xvciA9PSBsZWZ0Q29sb3IgJiYgYm90dG9tVHJhbnNwYXJlbnQgPT0gbGVmdFRyYW5zcGFy
ZW50ICYmIGxlZnRTdHlsZSA+PSBPVVRTRVQKKyAgICAgICAgICAgICAgICAmJiAoYm90dG9tU3R5
bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBib3R0b21TdHlsZSA9PSBT
T0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOworCisgICAgICAgICAgICBkcmF3TGluZUZv
ckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCwgeSwgdHggKyBzdHlsZS0+Ym9yZGVyTGVmdFdp
ZHRoKCksIHkyLCBCU0xlZnQsIGxlZnRDb2xvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxl
ZnRTdHlsZSwgaWdub3JlVG9wID8gMCA6IHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBpZ25vcmVC
b3R0b20gPyAwIDogc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgaWYgKHJlbmRlclJpZ2h0KSB7CisgICAgICAgIGlmIChyZW5kZXJSYWRpaSAmJiBi
b3JkZXJXaWxsQXJjSW5uZXJFZGdlKGJvdHRvbVJpZ2h0LCB0b3BSaWdodCwgc3R5bGUtPmJvcmRl
ckJvdHRvbVdpZHRoKCksIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpLCBzdHlsZS0+Ym9yZGVyUmln
aHRXaWR0aCgpKSkgeworICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5zYXZlKCk7CisgICAg
ICAgICAgICBjbGlwQm9yZGVyU2lkZVBvbHlnb24oZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0
LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQsIEJTUmlnaHQsIHN0
eWxlKTsKKyAgICAgICAgICAgIGZsb2F0IHRoaWNrbmVzcyA9IG1heChtYXgoc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSwgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpLCBzdHlsZS0+Ym9yZGVyQm90
dG9tV2lkdGgoKSk7CisgICAgICAgICAgICBkcmF3Qm94U2lkZUZyb21QYXRoKGdyYXBoaWNzQ29u
dGV4dCwgYm9yZGVyUmVjdCwgcm91bmRlZFBhdGgsIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCks
IHRoaWNrbmVzcywgQlNSaWdodCwgc3R5bGUsIHJpZ2h0Q29sb3IsIHJpZ2h0U3R5bGUpOworICAg
ICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBib29sIGlnbm9yZVRvcCA9ICgodG9wQ29sb3IgPT0gcmlnaHRDb2xvcikgJiYg
KHRvcFRyYW5zcGFyZW50ID09IHJpZ2h0VHJhbnNwYXJlbnQpCisgICAgICAgICAgICAgICAgJiYg
KHJpZ2h0U3R5bGUgPj0gRE9UVEVEIHx8IHJpZ2h0U3R5bGUgPT0gSU5TRVQpCisgICAgICAgICAg
ICAgICAgJiYgKHRvcFN0eWxlID09IERPVFRFRCB8fCB0b3BTdHlsZSA9PSBEQVNIRUQgfHwgdG9w
U3R5bGUgPT0gU09MSUQgfHwgdG9wU3R5bGUgPT0gT1VUU0VUKSk7CisKKyAgICAgICAgICAgIGJv
b2wgaWdub3JlQm90dG9tID0gKChib3R0b21Db2xvciA9PSByaWdodENvbG9yKSAmJiAoYm90dG9t
VHJhbnNwYXJlbnQgPT0gcmlnaHRUcmFuc3BhcmVudCkKKyAgICAgICAgICAgICAgICAmJiAocmln
aHRTdHlsZSA+PSBET1RURUQgfHwgcmlnaHRTdHlsZSA9PSBJTlNFVCkKKyAgICAgICAgICAgICAg
ICAmJiAoYm90dG9tU3R5bGUgPT0gRE9UVEVEIHx8IGJvdHRvbVN0eWxlID09IERBU0hFRCB8fCBi
b3R0b21TdHlsZSA9PSBTT0xJRCB8fCBib3R0b21TdHlsZSA9PSBJTlNFVCkpOworCisgICAgICAg
ICAgICBpbnQgeSA9IHR5OworICAgICAgICAgICAgaW50IHkyID0gdHkgKyBoOworCisgICAgICAg
ICAgICBkcmF3TGluZUZvckJveFNpZGUoZ3JhcGhpY3NDb250ZXh0LCB0eCArIHcgLSBzdHlsZS0+
Ym9yZGVyUmlnaHRXaWR0aCgpLCB5LCB0eCArIHcsIHkyLCBCU1JpZ2h0LCByaWdodENvbG9yLCAK
KyAgICAgICAgICAgICAgICByaWdodFN0eWxlLCBpZ25vcmVUb3AgPyAwIDogc3R5bGUtPmJvcmRl
clRvcFdpZHRoKCksIAorICAgICAgICAgICAgICAgIGlnbm9yZUJvdHRvbSA/IDAgOiBzdHlsZS0+
Ym9yZGVyQm90dG9tV2lkdGgoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAocmVuZGVy
UmFkaWkpCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOworfQorI2Vsc2UKK3Zv
aWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnBhaW50Qm9yZGVyKEdyYXBoaWNzQ29udGV4dCogZ3Jh
cGhpY3NDb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlLCBib29s
IGJlZ2luLCBib29sIGVuZCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBvbGQgdmVyc2lvbiBvZiBw
YWludEJvcmRlciBzaG91bGQgYmUgcmVtb3ZlZCB3aGVuIGFsbCBwb3J0cyBpbXBsZW1lbnQgCisg
ICAgLy8gR3JhcGhpY3NDb250ZXh0OjpjbGlwQ29udmV4UG9seWdvbigpISEgVGhpcyBzaG91bGQg
aGFwcGVuIHNvb24uCisgICAgaWYgKHBhaW50TmluZVBpZWNlSW1hZ2UoZ3JhcGhpY3NDb250ZXh0
LCB0eCwgdHksIHcsIGgsIHN0eWxlLCBzdHlsZS0+Ym9yZGVySW1hZ2UoKSkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIGNvbnN0IENvbG9yJiB0b3BDb2xvciA9IHN0eWxlLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvcik7CiAgICAgY29uc3QgQ29sb3ImIGJv
dHRvbUNvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbUNvbG9yKTsKICAgICBjb25zdCBDb2xvciYgbGVmdENvbG9yID0gc3R5bGUtPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvcik7CkBAIC0xMjU3LDYg
KzE0MzEsNjUgQEAgdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3JkZXIoRwogICAg
IGlmIChyZW5kZXJSYWRpaSkKICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CiB9
CisjZW5kaWYKKwordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6Y2xpcEJvcmRlclNpZGVQb2x5
Z29uKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBJbnRSZWN0JiBib3gs
IGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJ
bnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQm94
U2lkZSBzaWRlLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgRmxvYXRQb2ludCBx
dWFkWzRdOworICAgIGludCB0eCA9IGJveC54KCk7CisgICAgaW50IHR5ID0gYm94LnkoKTsKKyAg
ICBpbnQgdyA9IGJveC53aWR0aCgpOworICAgIGludCBoID0gYm94LmhlaWdodCgpOworCisgICAg
Ly8gRm9yIGVhY2ggc2lkZSwgY3JlYXRlIGFuIGFycmF5IG9mIEZsb2F0UG9pbnRzIHdoZXJlIGVh
Y2ggcG9pbnQgaXMgYmFzZWQgb24gd2hpY2hldmVyIHZhbHVlIGluIGVhY2ggY29ybmVyCisgICAg
Ly8gaXMgbGFyZ2VyIC0tIHRoZSByYWRpdXMgd2lkdGgvaGVpZ2h0IG9yIHRoZSBib3JkZXIgd2lk
dGgvaGVpZ2h0IC0tIGFzIGFwcHJvcHJpYXRlLgorICAgIHN3aXRjaCAoc2lkZSkgeworICAgIGNh
c2UgQlNUb3A6CisgICAgICAgIHF1YWRbMF0gPSBGbG9hdFBvaW50KHR4LCB0eSk7CisgICAgICAg
IHF1YWRbMV0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyBtYXgodG9wTGVmdC53aWR0
aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkpLCAKKyAgICAgICAgICAgIHR5ICsg
bWF4KHRvcExlZnQuaGVpZ2h0KCksIChpbnQpIHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpKSk7Cisg
ICAgICAgIHF1YWRbMl0gPSBGbG9hdFBvaW50KAorICAgICAgICAgICAgdHggKyB3IC0gbWF4KHRv
cFJpZ2h0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkpLCAKKyAgICAg
ICAgICAgIHR5ICsgbWF4KHRvcFJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5ib3JkZXJUb3BX
aWR0aCgpKSk7CisgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEJTTGVmdDoKKyAgICAgICAgcXVhZFswXSA9IEZsb2F0UG9p
bnQodHgsIHR5KTsKKyAgICAgICAgcXVhZFsxXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0
eCArIG1heCh0b3BMZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSks
IAorICAgICAgICAgICAgdHkgKyBtYXgodG9wTGVmdC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJv
cmRlclRvcFdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAg
ICAgICB0eCArIG1heChib3R0b21MZWZ0LndpZHRoKCksIChpbnQpIHN0eWxlLT5ib3JkZXJMZWZ0
V2lkdGgoKSksIAorICAgICAgICAgICAgdHkgKyBoIC0gbWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCks
IChpbnQpc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZs
b2F0UG9pbnQodHgsIHR5ICsgaCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQlNCb3R0b206
CisgICAgICAgIHF1YWRbMF0gPSBGbG9hdFBvaW50KHR4LCB0eSArIGgpOworICAgICAgICBxdWFk
WzFdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgbWF4KGJvdHRvbUxlZnQud2lkdGgo
KSwgKGludCkgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIGgg
LSBtYXgoYm90dG9tTGVmdC5oZWlnaHQoKSwgKGludClzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgo
KSkpOworICAgICAgICBxdWFkWzJdID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgdyAt
IG1heChib3R0b21SaWdodC53aWR0aCgpLCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgp
KSwgCisgICAgICAgICAgICB0eSArIGggLSBtYXgoYm90dG9tUmlnaHQuaGVpZ2h0KCksIChpbnQp
c3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkpKTsKKyAgICAgICAgcXVhZFszXSA9IEZsb2F0UG9p
bnQodHggKyB3LCB0eSArIGgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJTUmlnaHQ6Cisg
ICAgICAgIHF1YWRbMF0gPSBGbG9hdFBvaW50KHR4ICsgdywgdHkpOworICAgICAgICBxdWFkWzFd
ID0gRmxvYXRQb2ludCgKKyAgICAgICAgICAgIHR4ICsgdyAtIG1heCh0b3BSaWdodC53aWR0aCgp
LCAoaW50KSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpKSwgCisgICAgICAgICAgICB0eSArIG1h
eCh0b3BSaWdodC5oZWlnaHQoKSwgKGludCkgc3R5bGUtPmJvcmRlclRvcFdpZHRoKCkpKTsKKyAg
ICAgICAgcXVhZFsyXSA9IEZsb2F0UG9pbnQoCisgICAgICAgICAgICB0eCArIHcgLSBtYXgoYm90
dG9tUmlnaHQud2lkdGgoKSwgKGludCkgc3R5bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSksIAorICAg
ICAgICAgICAgdHkgKyBoIC0gbWF4KGJvdHRvbVJpZ2h0LmhlaWdodCgpLCAoaW50KXN0eWxlLT5i
b3JkZXJCb3R0b21XaWR0aCgpKSk7CisgICAgICAgIHF1YWRbM10gPSBGbG9hdFBvaW50KHR4ICsg
dywgdHkgKyBoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgZ3JhcGhpY3NDb250ZXh0LT5jbGlwQ29udmV4UG9seWdvbig0LCBxdWFk
KTsKK30KIAogdm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6cGFpbnRCb3hTaGFkb3coR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwgaW50IHcsIGludCBoLCBjb25zdCBS
ZW5kZXJTdHlsZSogcywgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUsIGJvb2wgYmVnaW4sIGJvb2wg
ZW5kKQogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCShy
ZXZpc2lvbiA2MTU0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOCBAQCBwcml2YXRlOgogCiAgICAgSW50
U2l6ZSBjYWxjdWxhdGVGaWxsVGlsZVNpemUoY29uc3QgRmlsbExheWVyKiwgSW50U2l6ZSBzY2Fs
ZWRTaXplKSBjb25zdDsKIAorICAgIHZvaWQgY2xpcEJvcmRlclNpZGVQb2x5Z29uKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJ
bnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6
ZSYgYm90dG9tUmlnaHQsIGNvbnN0IEJveFNpZGUgc2lkZSwgY29uc3QgUmVuZGVyU3R5bGUqIHN0
eWxlKTsKKwogICAgIGZyaWVuZCBjbGFzcyBSZW5kZXJWaWV3OwogCiAgICAgUmVuZGVyTGF5ZXIq
IG1fbGF5ZXI7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDYx
NTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiRGFz
aEFycmF5LmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTg3NywxMCArODc4LDE4NiBAQCB2b2lkIFJlbmRlck9i
amVjdDo6ZHJhd0xpbmVGb3JCb3hTaWRlKEdyCiAgICAgfQogfQogCitJbnRSZWN0IFJlbmRlck9i
amVjdDo6Ym9yZGVySW5uZXJSZWN0KGNvbnN0IEludFJlY3QmIGJvcmRlclJlY3QsIHVuc2lnbmVk
IHNob3J0IHRvcFdpZHRoLCB1bnNpZ25lZCBzaG9ydCBib3R0b21XaWR0aCwgdW5zaWduZWQgc2hv
cnQgbGVmdFdpZHRoLCB1bnNpZ25lZCBzaG9ydCByaWdodFdpZHRoKSBjb25zdAoreworICAgIHJl
dHVybiBJbnRSZWN0KAorICAgICAgICAgICAgYm9yZGVyUmVjdC54KCkgKyBsZWZ0V2lkdGgsIAor
ICAgICAgICAgICAgYm9yZGVyUmVjdC55KCkgKyB0b3BXaWR0aCwgCisgICAgICAgICAgICBib3Jk
ZXJSZWN0LndpZHRoKCkgLSBsZWZ0V2lkdGggLSByaWdodFdpZHRoLCAKKyAgICAgICAgICAgIGJv
cmRlclJlY3QuaGVpZ2h0KCkgLSB0b3BXaWR0aCAtIGJvdHRvbVdpZHRoKTsKK30KKworI2lmIFBM
QVRGT1JNKENHKQordm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoR3JhcGhp
Y3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsIEludFJlY3QgYm9yZGVyUmVjdCwgUGF0aCBib3Jk
ZXJQYXRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IHRoaWNr
bmVzcywgZmxvYXQgZHJhd1RoaWNrbmVzcywgQm94U2lkZSBzLCBjb25zdCBSZW5kZXJTdHlsZSog
c3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sb3IgYywgRUJv
cmRlclN0eWxlIGJvcmRlclN0eWxlKQoreworICAgIGlmICh0aGlja25lc3MgPD0gMCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGJvcmRlclN0eWxlID09IERPVUJMRSAmJiB0aGlja25lc3Mg
PCAzKQorICAgICAgICBib3JkZXJTdHlsZSA9IFNPTElEOworCisgICAgc3dpdGNoIChib3JkZXJT
dHlsZSkgeworICAgIGNhc2UgQk5PTkU6CisgICAgY2FzZSBCSElEREVOOgorICAgICAgICByZXR1
cm47CisgICAgY2FzZSBET1RURUQ6CisgICAgY2FzZSBEQVNIRUQ6IHsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LT5zZXRTdHJva2VDb2xvcihjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKworICAg
ICAgICAvLyBUaGUgc3Ryb2tlIGlzIGRvdWJsZWQgaGVyZSBiZWNhdXNlIHRoZSBwcm92aWRlZCBw
YXRoIGlzIHRoZSAKKyAgICAgICAgLy8gb3V0c2lkZSBlZGdlIG9mIHRoZSBib3JkZXIgc28gaGFs
ZiB0aGUgc3Ryb2tlIGlzIGNsaXBwZWQgb2ZmLiAKKyAgICAgICAgLy8gVGhlIGV4dHJhIG11bHRp
cGxpZXIgaXMgc28gdGhhdCB0aGUgY2xpcHBpbmcgbWFzayBjYW4gYW50aWFsaWFzCisgICAgICAg
IC8vIHRoZSBlZGdlcyB0byBwcmV2ZW50IGphZ2dpZXMuCisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGRyYXdUaGlja25lc3MgKiAyICogMS4xZik7CisgICAgICAg
IGdyYXBoaWNzQ29udGV4dC0+c2V0U3Ryb2tlU3R5bGUoYm9yZGVyU3R5bGUgPT0gREFTSEVEID8g
RGFzaGVkU3Ryb2tlIDogRG90dGVkU3Ryb2tlKTsKKworICAgICAgICAvLyBJZiB0aGUgbnVtYmVy
IG9mIGRhc2hlcyB0aGF0IGZpdCBpbiB0aGUgcGF0aCBpcyBvZGQgYW5kIG5vbi1pbnRlZ3JhbCB0
aGVuIHdlCisgICAgICAgIC8vIHdpbGwgaGF2ZSBhbiBhd2t3YXJkbHktc2l6ZWQgZGFzaCBhdCB0
aGUgZW5kIG9mIHRoZSBwYXRoLiBUbyB0cnkgdG8gYXZvaWQgdGhhdAorICAgICAgICAvLyBoZXJl
LCB3ZSBzaW1wbHkgbWFrZSB0aGUgd2hpdGVzcGFjZSBkYXNoZXMgZXZlciBzbyBzbGlnaHRseSBi
aWdnZXIuCisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGV2ZW4gYmV0dGVyIGlmIHdl
IHRyaWVkIHRvIG1hbmlwdWxhdGUgdGhlIGRhc2ggb2Zmc2V0CisgICAgICAgIC8vIGFuZCBwb3Nz
aWJseSB0aGUgd2hpdGVTcGFjZVdpZHRoIHRvIGdldCB0aGUgY29ybmVycyBkYXNoLXN5bW1ldHJp
Y2FsLgorICAgICAgICBmbG9hdCBwYXRXaWR0aCA9IHRoaWNrbmVzcyAqICgoYm9yZGVyU3R5bGUg
PT0gREFTSEVEKSA/IDMuMGYgOiAxLjBmKTsKKyAgICAgICAgZmxvYXQgd2hpdGVTcGFjZVdpZHRo
ID0gcGF0V2lkdGg7CisgICAgICAgIGZsb2F0IG51bWJlck9mRGFzaGVzID0gYm9yZGVyUGF0aC5s
ZW5ndGgoKSAvIHBhdFdpZHRoOworICAgICAgICBib29sIGV2ZW5OdW1iZXJPZkZ1bGxEYXNoZXMg
PSAhKChpbnQpbnVtYmVyT2ZEYXNoZXMgJSAyKTsKKyAgICAgICAgYm9vbCBpbnRlZ3JhbE51bWJl
ck9mRGFzaGVzID0gIShudW1iZXJPZkRhc2hlcyAtIChpbnQpbnVtYmVyT2ZEYXNoZXMpOworICAg
ICAgICBpZiAoIWV2ZW5OdW1iZXJPZkZ1bGxEYXNoZXMgJiYgIWludGVncmFsTnVtYmVyT2ZEYXNo
ZXMpIHsKKyAgICAgICAgICAgIGZsb2F0IG51bWJlck9mV2hpdGVzcGFjZURhc2hlcyA9IG51bWJl
ck9mRGFzaGVzIC8gMjsKKyAgICAgICAgICAgIHdoaXRlU3BhY2VXaWR0aCArPSAocGF0V2lkdGgg
IC8gbnVtYmVyT2ZXaGl0ZXNwYWNlRGFzaGVzKTsKKyAgICAgICAgfQorCisgICAgICAgIERhc2hB
cnJheSogbGluZURhc2ggPSBuZXcgRGFzaEFycmF5KCk7CisgICAgICAgIGxpbmVEYXNoLT5hcHBl
bmQocGF0V2lkdGgpOworICAgICAgICBsaW5lRGFzaC0+YXBwZW5kKHdoaXRlU3BhY2VXaWR0aCk7
CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2V0TGluZURhc2goKmxpbmVEYXNoLCBwYXRXaWR0
aCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+YWRkUGF0aChib3JkZXJQYXRoKTsKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5zdHJva2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgY2FzZSBET1VCTEU6IHsKKyAgICAgICAgaW50IG91dGVyQm9yZGVyVG9wV2lkdGggPSBz
dHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAvIDM7CisgICAgICAgIGludCBvdXRlckJvcmRlclJpZ2h0
V2lkdGggPSBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIC8gMzsKKyAgICAgICAgaW50IG91dGVy
Qm9yZGVyQm90dG9tV2lkdGggPSBzdHlsZS0+Ym9yZGVyQm90dG9tV2lkdGgoKSAvIDM7CisgICAg
ICAgIGludCBvdXRlckJvcmRlckxlZnRXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAv
IDM7CisKKyAgICAgICAgaW50IGlubmVyQm9yZGVyVG9wV2lkdGggPSBzdHlsZS0+Ym9yZGVyVG9w
V2lkdGgoKSAqIDIgLyAzOworICAgICAgICBpbnQgaW5uZXJCb3JkZXJSaWdodFdpZHRoID0gc3R5
bGUtPmJvcmRlclJpZ2h0V2lkdGgoKSAqIDIgLyAzOworICAgICAgICBpbnQgaW5uZXJCb3JkZXJC
b3R0b21XaWR0aCA9IHN0eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpICogMiAvIDM7CisgICAgICAg
IGludCBpbm5lckJvcmRlckxlZnRXaWR0aCA9IHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAqIDIg
LyAzOworCisgICAgICAgIC8vIFdlIG5lZWQgY2VydGFpbiBpbnRlZ2VyIHJvdW5kaW5nIHJlc3Vs
dHMKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJUb3BXaWR0aCgpICUgMyA9PSAyKQorICAgICAg
ICAgICAgb3V0ZXJCb3JkZXJUb3BXaWR0aCArPSAxOworICAgICAgICBpZiAoc3R5bGUtPmJvcmRl
clJpZ2h0V2lkdGgoKSAlIDMgPT0gMikKKyAgICAgICAgICAgIG91dGVyQm9yZGVyUmlnaHRXaWR0
aCArPSAxOworICAgICAgICBpZiAoc3R5bGUtPmJvcmRlckJvdHRvbVdpZHRoKCkgJSAzID09IDIp
CisgICAgICAgICAgICBvdXRlckJvcmRlckJvdHRvbVdpZHRoICs9IDE7CisgICAgICAgIGlmIChz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgJSAzID09IDIpCisgICAgICAgICAgICBvdXRlckJvcmRl
ckxlZnRXaWR0aCArPSAxOworCisgICAgICAgIGlmIChzdHlsZS0+Ym9yZGVyVG9wV2lkdGgoKSAl
IDMgPT0gMSkKKyAgICAgICAgICAgIGlubmVyQm9yZGVyVG9wV2lkdGggKz0gMTsKKyAgICAgICAg
aWYgKHN0eWxlLT5ib3JkZXJSaWdodFdpZHRoKCkgJSAzID09IDEpCisgICAgICAgICAgICBpbm5l
ckJvcmRlclJpZ2h0V2lkdGggKz0gMTsKKyAgICAgICAgaWYgKHN0eWxlLT5ib3JkZXJCb3R0b21X
aWR0aCgpICUgMyA9PSAxKQorICAgICAgICAgICAgaW5uZXJCb3JkZXJCb3R0b21XaWR0aCArPSAx
OworICAgICAgICBpZiAoc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpICUgMyA9PSAxKQorICAgICAg
ICAgICAgaW5uZXJCb3JkZXJMZWZ0V2lkdGggKz0gMTsKKworICAgICAgICAvLyBHZXQgdGhlIGlu
bmVyIGJvcmRlciByZWN0cyBmb3IgYm90aCB0aGUgb3V0ZXIgYm9yZGVyIGxpbmUgYW5kIHRoZSBp
bm5lciBib3JkZXIgbGluZQorICAgICAgICBJbnRSZWN0IG91dGVyQm9yZGVySW5uZXJSZWN0ID0g
Ym9yZGVySW5uZXJSZWN0KGJvcmRlclJlY3QsIG91dGVyQm9yZGVyVG9wV2lkdGgsIG91dGVyQm9y
ZGVyQm90dG9tV2lkdGgsIAorICAgICAgICAgICAgb3V0ZXJCb3JkZXJMZWZ0V2lkdGgsIG91dGVy
Qm9yZGVyUmlnaHRXaWR0aCk7CisgICAgICAgIEludFJlY3QgaW5uZXJCb3JkZXJJbm5lclJlY3Qg
PSBib3JkZXJJbm5lclJlY3QoYm9yZGVyUmVjdCwgaW5uZXJCb3JkZXJUb3BXaWR0aCwgaW5uZXJC
b3JkZXJCb3R0b21XaWR0aCwgCisgICAgICAgICAgICBpbm5lckJvcmRlckxlZnRXaWR0aCwgaW5u
ZXJCb3JkZXJSaWdodFdpZHRoKTsKKworICAgICAgICAvLyBHZXQgdGhlIGlubmVyIHJhZGlpIGZv
ciB0aGUgb3V0ZXIgYm9yZGVyIGxpbmUKKyAgICAgICAgSW50U2l6ZSBvdXRlckJvcmRlclRvcExl
ZnRJbm5lclJhZGl1cywgb3V0ZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCBvdXRlckJvcmRl
ckJvdHRvbUxlZnRJbm5lclJhZGl1cywgCisgICAgICAgICAgICBvdXRlckJvcmRlckJvdHRvbVJp
Z2h0SW5uZXJSYWRpdXM7CisgICAgICAgIHN0eWxlLT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVj
dFdpdGhCb3JkZXJXaWR0aHMob3V0ZXJCb3JkZXJJbm5lclJlY3QsIG91dGVyQm9yZGVyVG9wV2lk
dGgsIG91dGVyQm9yZGVyQm90dG9tV2lkdGgsIAorICAgICAgICAgICAgb3V0ZXJCb3JkZXJMZWZ0
V2lkdGgsIG91dGVyQm9yZGVyUmlnaHRXaWR0aCwgb3V0ZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRp
dXMsIG91dGVyQm9yZGVyVG9wUmlnaHRJbm5lclJhZGl1cywgCisgICAgICAgICAgICBvdXRlckJv
cmRlckJvdHRvbUxlZnRJbm5lclJhZGl1cywgb3V0ZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFk
aXVzKTsKKworICAgICAgICAvLyBHZXQgdGhlIGlubmVyIHJhZGlpIGZvciB0aGUgaW5uZXIgYm9y
ZGVyIGxpbmUKKyAgICAgICAgSW50U2l6ZSBpbm5lckJvcmRlclRvcExlZnRJbm5lclJhZGl1cywg
aW5uZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbUxlZnRJbm5l
clJhZGl1cywgCisgICAgICAgICAgICBpbm5lckJvcmRlckJvdHRvbVJpZ2h0SW5uZXJSYWRpdXM7
CisgICAgICAgIHN0eWxlLT5nZXRJbm5lckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0
aHMoaW5uZXJCb3JkZXJJbm5lclJlY3QsIGlubmVyQm9yZGVyVG9wV2lkdGgsIGlubmVyQm9yZGVy
Qm90dG9tV2lkdGgsIAorICAgICAgICAgICAgaW5uZXJCb3JkZXJMZWZ0V2lkdGgsIGlubmVyQm9y
ZGVyUmlnaHRXaWR0aCwgaW5uZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIGlubmVyQm9yZGVy
VG9wUmlnaHRJbm5lclJhZGl1cywgCisgICAgICAgICAgICBpbm5lckJvcmRlckJvdHRvbUxlZnRJ
bm5lclJhZGl1cywgaW5uZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKworICAgICAg
ICAvLyBEcmF3IGlubmVyIGJvcmRlciBsaW5lCisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2
ZSgpOworICAgICAgICBncmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChpbm5lckJv
cmRlcklubmVyUmVjdCwgaW5uZXJCb3JkZXJUb3BMZWZ0SW5uZXJSYWRpdXMsIAorICAgICAgICAg
ICAgaW5uZXJCb3JkZXJUb3BSaWdodElubmVyUmFkaXVzLCBpbm5lckJvcmRlckJvdHRvbUxlZnRJ
bm5lclJhZGl1cywgaW5uZXJCb3JkZXJCb3R0b21SaWdodElubmVyUmFkaXVzKTsKKyAgICAgICAg
ZHJhd0JveFNpZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBh
dGgsIHRoaWNrbmVzcywgZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIFNPTElEKTsKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAgICAgLy8gRHJhdyBvdXRlciBi
b3JkZXIgbGluZQorICAgICAgICBncmFwaGljc0NvbnRleHQtPnNhdmUoKTsKKyAgICAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5jbGlwT3V0Um91bmRlZFJlY3Qob3V0ZXJCb3JkZXJJbm5lclJlY3QsIG91
dGVyQm9yZGVyVG9wTGVmdElubmVyUmFkaXVzLCAKKyAgICAgICAgICAgIG91dGVyQm9yZGVyVG9w
UmlnaHRJbm5lclJhZGl1cywgb3V0ZXJCb3JkZXJCb3R0b21MZWZ0SW5uZXJSYWRpdXMsIG91dGVy
Qm9yZGVyQm90dG9tUmlnaHRJbm5lclJhZGl1cyk7CisgICAgICAgIGRyYXdCb3hTaWRlRnJvbVBh
dGgoZ3JhcGhpY3NDb250ZXh0LCBib3JkZXJSZWN0LCBib3JkZXJQYXRoLCB0aGlja25lc3MsIGRy
YXdUaGlja25lc3MsIHMsIHN0eWxlLCBjLCBTT0xJRCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC0+cmVzdG9yZSgpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FzZSBSSURHRToK
KyAgICBjYXNlIEdST09WRToKKyAgICB7CisgICAgICAgIEVCb3JkZXJTdHlsZSBzMTsKKyAgICAg
ICAgRUJvcmRlclN0eWxlIHMyOworICAgICAgICBpZiAoYm9yZGVyU3R5bGUgPT0gR1JPT1ZFKSB7
CisgICAgICAgICAgICBzMSA9IElOU0VUOworICAgICAgICAgICAgczIgPSBPVVRTRVQ7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzMSA9IE9VVFNFVDsKKyAgICAgICAgICAgIHMyID0g
SU5TRVQ7CisgICAgICAgIH0KKworICAgICAgICBJbnRSZWN0IGhhbGZCb3JkZXJSZWN0ID0gYm9y
ZGVySW5uZXJSZWN0KGJvcmRlclJlY3QsIHN0eWxlLT5ib3JkZXJMZWZ0V2lkdGgoKSAvIDIsIHN0
eWxlLT5ib3JkZXJCb3R0b21XaWR0aCgpIC8gMiwgCisgICAgICAgICAgICBzdHlsZS0+Ym9yZGVy
TGVmdFdpZHRoKCkgLyAyLCBzdHlsZS0+Ym9yZGVyUmlnaHRXaWR0aCgpIC8gMik7CisKKyAgICAg
ICAgSW50U2l6ZSB0b3BMZWZ0SGFsZlJhZGl1cywgdG9wUmlnaHRIYWxmUmFkaXVzLCBib3R0b21M
ZWZ0SGFsZlJhZGl1cywgYm90dG9tUmlnaHRIYWxmUmFkaXVzOworICAgICAgICBzdHlsZS0+Z2V0
SW5uZXJCb3JkZXJSYWRpaUZvclJlY3RXaXRoQm9yZGVyV2lkdGhzKGhhbGZCb3JkZXJSZWN0LCBz
dHlsZS0+Ym9yZGVyTGVmdFdpZHRoKCkgLyAyLCAKKyAgICAgICAgICAgIHN0eWxlLT5ib3JkZXJC
b3R0b21XaWR0aCgpIC8gMiwgc3R5bGUtPmJvcmRlckxlZnRXaWR0aCgpIC8gMiwgc3R5bGUtPmJv
cmRlclJpZ2h0V2lkdGgoKSAvIDIsIAorICAgICAgICAgICAgdG9wTGVmdEhhbGZSYWRpdXMsIHRv
cFJpZ2h0SGFsZlJhZGl1cywgYm90dG9tTGVmdEhhbGZSYWRpdXMsIGJvdHRvbVJpZ2h0SGFsZlJh
ZGl1cyk7CisKKyAgICAgICAgLy8gUGFpbnQgZnVsbCBib3JkZXIKKyAgICAgICAgZHJhd0JveFNp
ZGVGcm9tUGF0aChncmFwaGljc0NvbnRleHQsIGJvcmRlclJlY3QsIGJvcmRlclBhdGgsIHRoaWNr
bmVzcywgZHJhd1RoaWNrbmVzcywgcywgc3R5bGUsIGMsIHMxKTsKKworICAgICAgICAvLyBQYWlu
dCBpbm5lciBvbmx5CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC0+c2F2ZSgpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQtPmFkZFJvdW5kZWRSZWN0Q2xpcChoYWxmQm9yZGVyUmVjdCwgdG9wTGVm
dEhhbGZSYWRpdXMsIHRvcFJpZ2h0SGFsZlJhZGl1cywKKyAgICAgICAgICAgIGJvdHRvbUxlZnRI
YWxmUmFkaXVzLCBib3R0b21SaWdodEhhbGZSYWRpdXMpOworICAgICAgICBkcmF3Qm94U2lkZUZy
b21QYXRoKGdyYXBoaWNzQ29udGV4dCwgYm9yZGVyUmVjdCwgYm9yZGVyUGF0aCwgdGhpY2tuZXNz
LCBkcmF3VGhpY2tuZXNzLCBzLCBzdHlsZSwgYywgczIpOworICAgICAgICBncmFwaGljc0NvbnRl
eHQtPnJlc3RvcmUoKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNhc2UgSU5TRVQ6
CisgICAgICAgIGlmIChzID09IEJTVG9wIHx8IHMgPT0gQlNMZWZ0KQorICAgICAgICAgICAgYyA9
IGMuZGFyaygpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9VVFNFVDoKKyAgICAgICAgaWYg
KHMgPT0gQlNCb3R0b20gfHwgcyA9PSBCU1JpZ2h0KQorICAgICAgICAgICAgYyA9IGMuZGFyaygp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBncmFwaGljc0NvbnRleHQtPnNldFN0cm9rZVN0eWxlKE5vU3Ryb2tlKTsKKyAgICBncmFw
aGljc0NvbnRleHQtPnNldEZpbGxDb2xvcihjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICBn
cmFwaGljc0NvbnRleHQtPmRyYXdSZWN0KGJvcmRlclJlY3QpOworfQorI2Vsc2UKIHZvaWQgUmVu
ZGVyT2JqZWN0OjpkcmF3QXJjRm9yQm94U2lkZShHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgaW50IHgsIGludCB5LCBmbG9hdCB0aGlja25lc3MsIEludFNpemUgcmFkaXVzLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbmdsZVN0YXJ0LCBpbnQgYW5n
bGVTcGFuLCBCb3hTaWRlIHMsIENvbG9yIGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgRUJvcmRlclN0eWxlIHN0eWxlLCBib29sIGZpcnN0Q29ybmVyKQogeworICAgIC8v
IEZJWE1FOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gYWxsIHBvcnRzIGlt
cGxlbWVudCBHcmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKCkhIQorICAgIC8vIEF0
IHRoYXQgdGltZSwgZXZlcnlvbmUgY2FuIHVzZSBSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJv
bVBhdGgoKSBpbnN0ZWFkLiBUaGlzIHNob3VsZCBoYXBwZW4gc29vbi4KICAgICBpZiAoKHN0eWxl
ID09IERPVUJMRSAmJiB0aGlja25lc3MgLyAyIDwgMykgfHwgKChzdHlsZSA9PSBSSURHRSB8fCBz
dHlsZSA9PSBHUk9PVkUpICYmIHRoaWNrbmVzcyAvIDIgPCAyKSkKICAgICAgICAgc3R5bGUgPSBT
T0xJRDsKIApAQCAtOTU3LDYgKzExMzQsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0Zv
ckJveFNpZGUoR3JhCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiB9CisjZW5kaWYKIAogdm9p
ZCBSZW5kZXJPYmplY3Q6OmFkZFBERlVSTFJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBJbnRSZWN0JiByZWN0KQogewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJl
dmlzaW9uIDYxNTQ1KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQzNSw4ICs0MzUsMTkgQEAgcHVibGljOgogCiAgICAgdm9pZCBkcmF3TGlu
ZUZvckJveFNpZGUoR3JhcGhpY3NDb250ZXh0KiwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwgaW50
IHkyLCBCb3hTaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbG9yLCBFQm9yZGVy
U3R5bGUsIGludCBhZGpidzEsIGludCBhZGpidzIpOworI2lmIFBMQVRGT1JNKENHKQorICAgIHZv
aWQgZHJhd0JveFNpZGVGcm9tUGF0aChHcmFwaGljc0NvbnRleHQqLCBJbnRSZWN0LCBQYXRoLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB0aGlja25lc3MsIGZsb2F0IGRyYXdU
aGlja25lc3MsIEJveFNpZGUsIGNvbnN0IFJlbmRlclN0eWxlKiwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQ29sb3IsIEVCb3JkZXJTdHlsZSk7CisjZWxzZQorICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSByZW1vdmVkIHdoZW4gYWxsIHBvcnRzIGltcGxlbWVudCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBDb252ZXhQb2x5Z29uKCkhIQorICAgIC8vIEF0IHRoYXQgdGlt
ZSwgZXZlcnlvbmUgY2FuIHVzZSBSZW5kZXJPYmplY3Q6OmRyYXdCb3hTaWRlRnJvbVBhdGgoKSBp
bnN0ZWFkLiBUaGlzIHNob3VsZCBoYXBwZW4gc29vbi4KICAgICB2b2lkIGRyYXdBcmNGb3JCb3hT
aWRlKEdyYXBoaWNzQ29udGV4dCosIGludCB4LCBpbnQgeSwgZmxvYXQgdGhpY2tuZXNzLCBJbnRT
aXplIHJhZGl1cywgaW50IGFuZ2xlU3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgYW5nbGVTcGFuLCBCb3hTaWRlLCBDb2xvciwgRUJvcmRlclN0eWxlLCBib29sIGZpcnN0Q29y
bmVyKTsKKyNlbmRpZgorCisgICAgSW50UmVjdCBib3JkZXJJbm5lclJlY3QoY29uc3QgSW50UmVj
dCYsIHVuc2lnbmVkIHNob3J0IHRvcFdpZHRoLCB1bnNpZ25lZCBzaG9ydCBib3R0b21XaWR0aCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZWZ0V2lkdGgsIHVu
c2lnbmVkIHNob3J0IHJpZ2h0V2lkdGgpIGNvbnN0OwogCiAgICAgLy8gVGhlIHBzZXVkbyBlbGVt
ZW50IHN0eWxlIGNhbiBiZSBjYWNoZWQgb3IgdW5jYWNoZWQuICBVc2UgdGhlIGNhY2hlZCBtZXRo
b2QgaWYgdGhlIHBzZXVkbyBlbGVtZW50IGRvZXNuJ3QgcmVzcGVjdAogICAgIC8vIGFueSBwc2V1
ZG8gY2xhc3NlcyAoYW5kIHRoZXJlZm9yZSBoYXMgbm8gY29uY2VwdCBvZiBjaGFuZ2luZyBzdGF0
ZSkuCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9SZW5kZXJTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lv
biA2MTU0NSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzM3LDE0ICs3MzcsOCBAQCB2b2lkIFJlbmRlclN0eWxlOjpzZXRCb3hT
aGFkb3coU2hhZG93RGF0CiAgICAgcmFyZURhdGEtPm1fYm94U2hhZG93LnNldChzaGFkb3dEYXRh
KTsKIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6Z2V0Qm9yZGVyUmFkaWlGb3JSZWN0KGNvbnN0IElu
dFJlY3QmIHIsIEludFNpemUmIHRvcExlZnQsIEludFNpemUmIHRvcFJpZ2h0LCBJbnRTaXplJiBi
b3R0b21MZWZ0LCBJbnRTaXplJiBib3R0b21SaWdodCkgY29uc3QKK3N0YXRpYyB2b2lkIGNvbnN0
cmFpbkNvcm5lclJhZGlpRm9yUmVjdChjb25zdCBJbnRSZWN0JiByLCBJbnRTaXplJiB0b3BMZWZ0
LCBJbnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVmdCwgSW50U2l6ZSYgYm90dG9t
UmlnaHQpCiB7Ci0gICAgdG9wTGVmdCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wTGVmdCgpOwotICAg
IHRvcFJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci50b3BSaWdodCgpOwotICAgIAotICAgIGJvdHRv
bUxlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbUxlZnQoKTsKLSAgICBib3R0b21SaWdodCA9
IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tUmlnaHQoKTsKLQogICAgIC8vIENvbnN0cmFpbiBjb3Ju
ZXIgcmFkaWkgdXNpbmcgQ1NTMyBydWxlczoKICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9j
c3MzLWJhY2tncm91bmQvI3RoZS1ib3JkZXItcmFkaXVzCiAgICAgCkBAIC03ODksNiArNzgzLDM5
IEBAIHZvaWQgUmVuZGVyU3R5bGU6OmdldEJvcmRlclJhZGlpRm9yUmVjdCgKICAgICB9CiB9CiAK
K3ZvaWQgUmVuZGVyU3R5bGU6OmdldEJvcmRlclJhZGlpRm9yUmVjdChjb25zdCBJbnRSZWN0JiBy
LCBJbnRTaXplJiB0b3BMZWZ0LCBJbnRTaXplJiB0b3BSaWdodCwgSW50U2l6ZSYgYm90dG9tTGVm
dCwgSW50U2l6ZSYgYm90dG9tUmlnaHQpIGNvbnN0Cit7CisgICAgdG9wTGVmdCA9IHN1cnJvdW5k
LT5ib3JkZXIudG9wTGVmdCgpOworICAgIHRvcFJpZ2h0ID0gc3Vycm91bmQtPmJvcmRlci50b3BS
aWdodCgpOworICAgIAorICAgIGJvdHRvbUxlZnQgPSBzdXJyb3VuZC0+Ym9yZGVyLmJvdHRvbUxl
ZnQoKTsKKyAgICBib3R0b21SaWdodCA9IHN1cnJvdW5kLT5ib3JkZXIuYm90dG9tUmlnaHQoKTsK
KworICAgIGNvbnN0cmFpbkNvcm5lclJhZGlpRm9yUmVjdChyLCB0b3BMZWZ0LCB0b3BSaWdodCwg
Ym90dG9tTGVmdCwgYm90dG9tUmlnaHQpOworfQorCit2b2lkIFJlbmRlclN0eWxlOjpnZXRJbm5l
ckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoY29uc3QgSW50UmVjdCYgaW5uZXJS
ZWN0LCB1bnNpZ25lZCBzaG9ydCB0b3BXaWR0aCwgdW5zaWduZWQgc2hvcnQgYm90dG9tV2lkdGgs
IHVuc2lnbmVkIHNob3J0IGxlZnRXaWR0aCwgdW5zaWduZWQgc2hvcnQgcmlnaHRXaWR0aCwgSW50
U2l6ZSYgaW5uZXJUb3BMZWZ0LCBJbnRTaXplJiBpbm5lclRvcFJpZ2h0LCBJbnRTaXplJiBpbm5l
ckJvdHRvbUxlZnQsIEludFNpemUmIGlubmVyQm90dG9tUmlnaHQpIGNvbnN0Cit7CisgICAgaW5u
ZXJUb3BMZWZ0ID0gc3Vycm91bmQtPmJvcmRlci50b3BMZWZ0KCk7CisgICAgaW5uZXJUb3BSaWdo
dCA9IHN1cnJvdW5kLT5ib3JkZXIudG9wUmlnaHQoKTsKKyAgICBpbm5lckJvdHRvbUxlZnQgPSBz
dXJyb3VuZC0+Ym9yZGVyLmJvdHRvbUxlZnQoKTsKKyAgICBpbm5lckJvdHRvbVJpZ2h0ID0gc3Vy
cm91bmQtPmJvcmRlci5ib3R0b21SaWdodCgpOworCisgICAgaW5uZXJUb3BMZWZ0LnNldFdpZHRo
KG1heCgwLCBpbm5lclRvcExlZnQud2lkdGgoKSAtIGxlZnRXaWR0aCkpOworICAgIGlubmVyVG9w
TGVmdC5zZXRIZWlnaHQobWF4KDAsIGlubmVyVG9wTGVmdC5oZWlnaHQoKSAtIHRvcFdpZHRoKSk7
CisKKyAgICBpbm5lclRvcFJpZ2h0LnNldFdpZHRoKG1heCgwLCBpbm5lclRvcFJpZ2h0LndpZHRo
KCkgLSByaWdodFdpZHRoKSk7CisgICAgaW5uZXJUb3BSaWdodC5zZXRIZWlnaHQobWF4KDAsIGlu
bmVyVG9wUmlnaHQuaGVpZ2h0KCkgLSB0b3BXaWR0aCkpOworCisgICAgaW5uZXJCb3R0b21MZWZ0
LnNldFdpZHRoKG1heCgwLCBpbm5lckJvdHRvbUxlZnQud2lkdGgoKSAtIGxlZnRXaWR0aCkpOwor
ICAgIGlubmVyQm90dG9tTGVmdC5zZXRIZWlnaHQobWF4KDAsIGlubmVyQm90dG9tTGVmdC5oZWln
aHQoKSAtIGJvdHRvbVdpZHRoKSk7CisKKyAgICBpbm5lckJvdHRvbVJpZ2h0LnNldFdpZHRoKG1h
eCgwLCBpbm5lckJvdHRvbVJpZ2h0LndpZHRoKCkgLSByaWdodFdpZHRoKSk7CisgICAgaW5uZXJC
b3R0b21SaWdodC5zZXRIZWlnaHQobWF4KDAsIGlubmVyQm90dG9tUmlnaHQuaGVpZ2h0KCkgLSBi
b3R0b21XaWR0aCkpOworCisgICAgY29uc3RyYWluQ29ybmVyUmFkaWlGb3JSZWN0KGlubmVyUmVj
dCwgaW5uZXJUb3BMZWZ0LCBpbm5lclRvcFJpZ2h0LCBpbm5lckJvdHRvbUxlZnQsIGlubmVyQm90
dG9tUmlnaHQpOworfQorCiBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBSZW5kZXJTdHlsZTo6
Y291bnRlckRpcmVjdGl2ZXMoKSBjb25zdAogewogICAgIHJldHVybiByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9jb3VudGVyRGlyZWN0aXZlcy5nZXQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L3N0eWxlL1JlbmRlclN0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gNjE1NDUpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9SZW5kZXJTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03ODcsNiArNzg3LDEwIEBAIHB1
YmxpYzoKICAgICB9CiAgICAgCiAgICAgdm9pZCBnZXRCb3JkZXJSYWRpaUZvclJlY3QoY29uc3Qg
SW50UmVjdCYsIEludFNpemUmIHRvcExlZnQsIEludFNpemUmIHRvcFJpZ2h0LCBJbnRTaXplJiBi
b3R0b21MZWZ0LCBJbnRTaXplJiBib3R0b21SaWdodCkgY29uc3Q7CisgICAgdm9pZCBnZXRJbm5l
ckJvcmRlclJhZGlpRm9yUmVjdFdpdGhCb3JkZXJXaWR0aHMoY29uc3QgSW50UmVjdCYsIHVuc2ln
bmVkIHNob3J0IHRvcFdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBzaG9ydCBib3R0b21XaWR0aCwgdW5zaWduZWQgc2hvcnQgbGVmdFdpZHRoLCB1bnNpZ25lZCBz
aG9ydCByaWdodFdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRTaXplJiBp
bm5lclRvcExlZnQsIEludFNpemUmIGlubmVyVG9wUmlnaHQsIEludFNpemUmIGlubmVyQm90dG9t
TGVmdCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSYgaW5uZXJCb3R0b21S
aWdodCkgY29uc3Q7CiAKICAgICB2b2lkIHNldEJvcmRlckxlZnRXaWR0aCh1bnNpZ25lZCBzaG9y
dCB2KSB7IFNFVF9WQVIoc3Vycm91bmQsIGJvcmRlci5tX2xlZnQubV93aWR0aCwgdikgfQogICAg
IHZvaWQgc2V0Qm9yZGVyTGVmdFN0eWxlKEVCb3JkZXJTdHlsZSB2KSB7IFNFVF9WQVIoc3Vycm91
bmQsIGJvcmRlci5tX2xlZnQubV9zdHlsZSwgdikgfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjE2NTMp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBA
QAorMjAxMC0wNi0yMiAgQmV0aCBEYWtpbiAgPGJkYWtpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMgd2l0aCBuZXcgcmVz
dWx0cyBhZnRlciAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTkxOTcgQ1NTMzogQm9yZGVycyAKKyAgICAgICAgd2l0aCBib3JkZXItcmFkaXVzIGFuZCBk
b3VibGUsIGdyb292ZSwgb3IgcmlkZ2Ugc3R5bGVzIHNob3VsZCBsb29rIAorICAgICAgICBiZXR0
ZXIKKworICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzQWxs
U3R5bGVzQWxsQ29ybmVycy1leHBlY3RlZC5jaGVja3N1bToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5lcnMtZXhwZWN0ZWQu
cG5nOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFz
aGVkMDEtZXhwZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9y
ZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZv
cm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3RlZC5jaGVja3N1
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hl
ZDAyLWV4cGVjdGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2Jv
cmRlclJhZGl1c0Rhc2hlZDAzLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3Jt
L21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDMtZXhwZWN0ZWQucG5nOgorICAg
ICAgICAqIHBsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDEtZXhw
ZWN0ZWQuY2hlY2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3Jk
ZXJSYWRpdXNEb3R0ZWQwMS1leHBlY3RlZC5wbmc6CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zh
c3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5jaGVja3N1bToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAyLWV4cGVj
dGVkLnBuZzoKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1
c0RvdHRlZDAzLWV4cGVjdGVkLmNoZWNrc3VtOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9mYXN0
L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDMtZXhwZWN0ZWQucG5nOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQuY2hl
Y2tzdW06CisgICAgICAgICogcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNE
b3VibGUwMS1leHBlY3RlZC5wbmc6CisKIDIwMTAtMDYtMjIgIEtpbnVrbyBZYXN1ZGEgIDxraW51
a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuCkluZGV4OiBMYXlvdXRUZXN0
cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0FsbFN0eWxlc0FsbENvcm5l
cnMtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0v
bWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNBbGxTdHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVk
LmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9m
YXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzQWxsU3R5bGVzQWxsQ29ybmVycy1leHBlY3RlZC5jaGVj
a3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNTE3ZjMzMjRjMDc2NGZiODI3MTZhNTQx
MzU5NTYzMDkKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis3YThiMTUyNDA3ZGZkMGI1OTc5
NWNiYzBiOWI2NDUzNApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDEtZXhwZWN0
ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
Ym9yZGVycy9ib3JkZXJSYWRpdXNEYXNoZWQwMS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24g
NjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJh
ZGl1c0Rhc2hlZDAxLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBA
Ci00N2VkMmUzM2UwM2Q2MTgwNTY2NWFhNGU1YWE4ODZjZgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKK2QyZDU4MGEyZDllNGU2NWZkOWMxY2FlNDVmYjc3YTA4ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9i
b3JkZXJSYWRpdXNEYXNoZWQwMi1leHBlY3RlZC5jaGVja3N1bQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAyLWV4
cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysrIExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRGFzaGVkMDItZXhwZWN0ZWQuY2hlY2tzdW0J
KHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLWE1Y2ZhM2UyOTBlNWNhZTA0NjNhN2M0MjU4ZTZl
OThlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorMWRhNzI3NWYzM2Q2NTBlYjJlNzYwMmI2
N2E5YjdjZDIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9w
bGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0Rhc2hlZDAzLWV4cGVjdGVkLmNo
ZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRl
cnMvYm9yZGVyUmFkaXVzRGFzaGVkMDMtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDYxNTQ1
KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNE
YXNoZWQwMy1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBjb3B5KQpAQCAtMSArMSBAQAotNDgw
Y2EwM2YyODQyZjQ2M2NkMjFjN2I1ODMyYWMyOGUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CitmNDQxNDJkNjlkMmMyMjU2MWJjZDExNjEwOWJkYmVkYgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVy
UmFkaXVzRG90dGVkMDEtZXhwZWN0ZWQuY2hlY2tzdW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMS1leHBlY3Rl
ZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMv
ZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdHRlZDAxLWV4cGVjdGVkLmNoZWNrc3VtCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xICsxIEBACi0xNmY0NjVmNzFmZjBkN2E2NDRjYmM4ZmE3ODdhYWEyYQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzQxZGVlODhmOWI2MzBkMzgzY2IxNDE1YjZiNzc0
ZDk3ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZv
cm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMi1leHBlY3RlZC5jaGVja3N1
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2Jv
cmRlclJhZGl1c0RvdHRlZDAyLWV4cGVjdGVkLmNoZWNrc3VtCShyZXZpc2lvbiA2MTU0NSkKKysr
IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVk
MDItZXhwZWN0ZWQuY2hlY2tzdW0JKHdvcmtpbmcgY29weSkKQEAgLTEgKzEgQEAKLTM5MWU1MzIx
MDM2ZTE0ZTQ5MmUwYjk5MTMwYWQzNTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorNjY0
Y2JhZDhkOTAyYzg0ZmViZjVhZjFjMzI3MWIyYjIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1
c0RvdHRlZDAzLWV4cGVjdGVkLmNoZWNrc3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3Bs
YXRmb3JtL21hYy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG90dGVkMDMtZXhwZWN0ZWQuY2hl
Y2tzdW0JKHJldmlzaW9uIDYxNTQ1KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3Qv
Ym9yZGVycy9ib3JkZXJSYWRpdXNEb3R0ZWQwMy1leHBlY3RlZC5jaGVja3N1bQkod29ya2luZyBj
b3B5KQpAQCAtMSArMSBAQAotYzEwODA4OTczMmM2YjU3NjdhNTgxNmU3YTkzMTUzODMKXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCis3YWFhYWY4OGQwY2YyYzYxNDVjZTkxZTg5NzFhNDkxOApc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21h
Yy9mYXN0L2JvcmRlcnMvYm9yZGVyUmFkaXVzRG91YmxlMDEtZXhwZWN0ZWQuY2hlY2tzdW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJS
YWRpdXNEb3VibGUwMS1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gNjE1NDUpCisrKyBMYXlv
dXRUZXN0cy9wbGF0Zm9ybS9tYWMvZmFzdC9ib3JkZXJzL2JvcmRlclJhZGl1c0RvdWJsZTAxLWV4
cGVjdGVkLmNoZWNrc3VtCSh3b3JraW5nIGNvcHkpCkBAIC0xICsxIEBACi02YTg5Y2RlNmZiZWI4
ZTVjY2M1MzYzNDE2ZjZmNDQ5MQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK2ViZTk5ZDY5
MGU1ZmJhYjYyNWY5OWE3N2YyZGFkZTZiClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl
eDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjL2Zhc3QvYm9yZGVycy9ib3JkZXJSYWRpdXNBbGxT
dHlsZXNBbGxDb3JuZXJzLWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBm
aWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgo=
</data>
<flag name="review"
          id="46476"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>88844</attachid>
            <date>2011-04-08 11:14:58 -0700</date>
            <delta_ts>2011-04-08 11:17:52 -0700</delta_ts>
            <desc>On the left is border-radius (plus a few other things) in Firefox 4, the right shows border-radius not quite rendering right in Webkit 534.28</desc>
            <filename>url.txt</filename>
            <type>text/plain</type>
            <size>52</size>
            <attacher name="Kim">t3kgh0zt</attacher>
            
              <data encoding="base64">aHR0cDovL21lZGlhLnR1bWJsci5jb20vdHVtYmxyX2xqYnNzY2tTU00xcWh3ejhxLnBuZw==
</data>

          </attachment>
      

    </bug>

</bugzilla>