<?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>88972</bug_id>
          
          <creation_ts>2012-06-13 00:32:26 -0700</creation_ts>
          <short_desc>[chromium] Implement hit-testing for impl-side input handling in accelerated compositor</short_desc>
          <delta_ts>2012-06-13 17:06:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73350</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>danakj</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>skyostil</cc>
    
    <cc>vangelis</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>647772</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 00:32:26 -0700</bug_when>
    <thetext>To handle scrolling of any scrollable composited layer on the impl thread, we have to first recognize which scrollable layer was hit by the scrolling action.  The major part of that work is done in Sami&apos;s patch in https://bugs.webkit.org/show_bug.cgi?id=73350.

This patch takes a chunk of that patch that actually implemented hit-testing, and here we create a generic helper function that performs the hit testing.  This patch cleans up performance and correctness issues, and adds several unit tests.  I also manually tested it with a quick hack, and it seemed to work very nicely, even on poster circle, and 2011.beercamp.com.

Hit testing turns out to be beautifully simple with the already ordered renderSurfaceLayerList, and Dana&apos;s awesome iterator.

Originally I was concerned with a perspective w &lt; 0 error.   In the original code, which inverse-projected the point to layer&apos;s local space, this was still an issue.  It turns out that by converting the layer&apos;s visibleLayerRect to screenSpace, issues with this are reduced, because the visibleLayerRect was already computed with correct clipping.   NOTE however, that the visibleLayerRect, in some pathological cases, might actually be larger than the actual visible portion itself, because of the clipping issue.  In those cases, we may successfully hit a layer even though the hit point was slightly outside the layer.   To fix this, we will have to change a lot of axis-aligned rects in the code to quads, and worse, to generalized polygons.  So unfortunately I don&apos;t think that is a fix we&apos;ll be making any time soon.

I tested this code manually, and it seems to work as desired.  Unit tests cover a few interesting edge cases, such as contentBounds != bounds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647777</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 00:43:18 -0700</bug_when>
    <thetext>vollick@:  I&apos;m pretty sure that device scaling will need to be accounted for here.  We can discuss that when the time comes...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647778</commentid>
    <comment_count>2</comment_count>
      <attachid>147254</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 00:43:59 -0700</bug_when>
    <thetext>Created attachment 147254
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>647790</commentid>
    <comment_count>3</comment_count>
      <attachid>147256</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 01:05:37 -0700</bug_when>
    <thetext>Created attachment 147256
restructured to expose additional helper function

The inner portion of the hit testing could actually be used in other parts of Sami&apos;s patch in 73305, to reduce redundant code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648038</commentid>
    <comment_count>4</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-13 08:15:16 -0700</bug_when>
    <thetext>&gt; It turns out that by converting the layer&apos;s visibleLayerRect to screenSpace, issues with this are reduced, because the visibleLayerRect was already computed with correct clipping.   NOTE however, that the visibleLayerRect, in some pathological cases, might actually be larger than the actual visible portion itself, because of the clipping issue.  In those cases, we may successfully hit a layer even though the hit point was slightly outside the layer.   To fix this, we will have to change a lot of axis-aligned rects in the code to quads, and worse, to generalized polygons.

What about non-axis aligned visibleLayerRects (45 degree rotation as a pathological case). Does that make much larger hit-area for the layer than its visible region? What about using quads to handle that situation? (no general polys)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648177</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 10:02:01 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; It turns out that by converting the layer&apos;s visibleLayerRect to screenSpace, issues with this are reduced, because the visibleLayerRect was already computed with correct clipping.   NOTE however, that the visibleLayerRect, in some pathological cases, might actually be larger than the actual visible portion itself, because of the clipping issue.  In those cases, we may successfully hit a layer even though the hit point was slightly outside the layer.   To fix this, we will have to change a lot of axis-aligned rects in the code to quads, and worse, to generalized polygons.
&gt; 
&gt; What about non-axis aligned visibleLayerRects (45 degree rotation as a pathological case). Does that make much larger hit-area for the layer than its visible region? What about using quads to handle that situation? (no general polys)

the hit testing is transforming from quads to quads (converting the visibleLayerRect to a quad first).   So the problem is inherently that visibleLayerRect is a rect.  until now, it was OK that visibleLayerRect represented only the enclosing rect of the visibleLayerQuad.

support for visibleLayerQuad will totally require general polys because of clipping by w &lt; 0.

So yeah, I think this is the best we can do, and the improvements would need to happen outside of hit testing code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648179</commentid>
    <comment_count>6</comment_count>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-13 10:04:09 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; &gt; It turns out that by converting the layer&apos;s visibleLayerRect to screenSpace, issues with this are reduced, because the visibleLayerRect was already computed with correct clipping.   NOTE however, that the visibleLayerRect, in some pathological cases, might actually be larger than the actual visible portion itself, because of the clipping issue.  In those cases, we may successfully hit a layer even though the hit point was slightly outside the layer.   To fix this, we will have to change a lot of axis-aligned rects in the code to quads, and worse, to generalized polygons.
&gt; &gt; 
&gt; &gt; What about non-axis aligned visibleLayerRects (45 degree rotation as a pathological case). Does that make much larger hit-area for the layer than its visible region? What about using quads to handle that situation? (no general polys)
&gt; 
&gt; the hit testing is transforming from quads to quads (converting the visibleLayerRect to a quad first).   So the problem is inherently that visibleLayerRect is a rect.  until now, it was OK that visibleLayerRect represented only the enclosing rect of the visibleLayerQuad.
&gt; 
&gt; support for visibleLayerQuad will totally require general polys because of clipping by w &lt; 0.
&gt; 
&gt; So yeah, I think this is the best we can do, and the improvements would need to happen outside of hit testing code.

Ah okay we&apos;re using quads, thanks. That sounds good then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648192</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 10:12:14 -0700</bug_when>
    <thetext>Whoa there.  visibleLayerRect is a *conservative* projection of visibility into content space.  visibleLayerRect is only going to be exact if the layer&apos;s screen space transformation results in the layer being axis-aligned with an integer scale.  That&apos;s not pathological, that&apos;s just a common transform case, and one that I think we need to support.

I think this can be way simpler than using quads.  You just need one extra step to test the scissor.  Scissoring is always done in surface space, so you can transform the point into the target surface of that layer and test against the surface&apos;s scissor directly.  That&apos;s it.

Once you&apos;ve done the scissor test, you could do something similar to what you&apos;re doing now to see if it hits the layer itself.  Optionally, you could use the layer&apos;s full bounds instead of the visibleLayerRect and skip the content space conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648201</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 10:19:12 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; I think this can be way simpler than using quads.  You just need one extra step to test the scissor.  Scissoring is always done in surface space, so you can transform the point into the target surface of that layer and test against the surface&apos;s scissor directly.  That&apos;s it.

Actually, you&apos;d probably need to do this test for every parent surface up to the root that has a scissor, and not just the immediate target surface.  However, you could just maintain a stack of surfaces that you&apos;ve gone through that have a clip as you iterated and test against all of those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648249</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 10:55:33 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; 
&gt; &gt; I think this can be way simpler than using quads.  You just need one extra step to test the scissor.  Scissoring is always done in surface space, so you can transform the point into the target surface of that layer and test against the surface&apos;s scissor directly.  That&apos;s it.
&gt; 
&gt; Actually, you&apos;d probably need to do this test for every parent surface up to the root that has a scissor, and not just the immediate target surface.  However, you could just maintain a stack of surfaces that you&apos;ve gone through that have a clip as you iterated and test against all of those.

Yeah, pathological was the wrong word =)

I&apos;m a little unclear on your proposed algorithm -  wouldnt the scissor be potentially a LOT smaller than where we want to hit-test, because of damage tracking and partial swap?  Also, transforming the point by itself should be avoided if possible - because when we do reach the w &lt; 0 case, there is no way &quot;clip&quot; a single point.   By transforming quads, we can interpolate betweeen the vertices and clip away the w &lt; 0 portions, and still perform the hit testing.  If the entire quad is clipped away, we know it wouldnt succesfully be hit by any point anyway.  But if the point is clipped when inverse-projecting, I&apos;m not convinced that w &lt; 0 means that it shouldn&apos;t hit that quad.

Whatever algorithm we employ to do this correctly will probably imply that we computed the correct visibleLayerQuad.  Just an interesting observation =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648256</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-13 11:01:50 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; vollick@:  I&apos;m pretty sure that device scaling will need to be accounted for here.  We can discuss that when the time comes...

I believe that this hit testing and all layer geometry information should be in logical pixels, not device pixels (https://trac.webkit.org/wiki/ScalesAndZooms).  Thus, if we make sure the point we are trying to hit is in logical pixels we&apos;re done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648260</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 11:06:49 -0700</bug_when>
    <thetext>Update:  I spoke with Enne offline.   Now I understood what Enne meant, I see its simple and brilliant =)  So I&apos;ll submit a new patch soon and 1-2 more unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648511</commentid>
    <comment_count>12</comment_count>
      <attachid>147425</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 15:29:32 -0700</bug_when>
    <thetext>Created attachment 147425
Avoids visibleLayerRect problems and quad limitations

This version avoids using visibleLayerRect, and instead correctly hit tests arbitrary geometry by making sure no ancestors clipped away the hit test point. Added another test that checks that multiple clipping ancestors works as desired. Also needed to update CCMathUtil to provide a projectPoint() function. Thanks to Enne for the insightful idea of how the hit testing should work, I think its pretty clean and friendly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648574</commentid>
    <comment_count>13</comment_count>
      <attachid>147425</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-06-13 16:31:19 -0700</bug_when>
    <thetext>Comment on attachment 147425
Avoids visibleLayerRect problems and quad limitations

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

R=me.  So many tests! :)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:884
&gt; +    // Note: its possible to compute the hit test in two equivalent ways:
&gt; +    //    inverse-project the point into local space
&gt; +    //    forward-transform the rect to screen space
&gt; +    //
&gt; +    // Its not obvious which one would perform better, or which one would be more robust
&gt; +    // to w &lt; 0 homogeneous clipping issues. For now, we simply opt for the inverse-project
&gt; +    // approach.
&gt; +    //

s/its/it&apos;s/g

Also, I don&apos;t know if you need this big block comment here.  There&apos;s different ways to implement nearly everything, but there&apos;s no need to necessarily document that.  If you want to explain your reasoning, it might make more sense as a commit message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648585</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 16:45:48 -0700</bug_when>
    <thetext>
Thanks for the review!

(In reply to comment #13)
&gt; 
&gt; s/its/it&apos;s/g
&gt; 

Apparently I need a personal style checker for this bad habit =)

&gt; Also, I don&apos;t know if you need this big block comment here.  There&apos;s different ways to implement nearly everything, but there&apos;s no need to necessarily document that.  If you want to explain your reasoning, it might make more sense as a commit message.

OK will make it a commit message and remove it from the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648601</commentid>
    <comment_count>15</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 17:05:27 -0700</bug_when>
    <thetext>Committed r120261: &lt;http://trac.webkit.org/changeset/120261&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648602</commentid>
    <comment_count>16</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 17:06:30 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>648603</commentid>
    <comment_count>17</comment_count>
      <attachid>147446</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-13 17:06:33 -0700</bug_when>
    <thetext>Created attachment 147446
Patch that landed</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147254</attachid>
            <date>2012-06-13 00:43:59 -0700</date>
            <delta_ts>2012-06-13 01:05:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-88972-20120613004358.patch</filename>
            <type>text/plain</type>
            <size>35006</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg1NTkxZDc1OTM1ZTY1
YjFmNDE2MDUyMjdiNzZhZmE1ZTE4ZjUxNi4uNGJmNTk1N2VlYWIxZGIyOTZkZmZjNjFiMzgzZWRj
MjkwMmY1NTIzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTA2LTEzICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGhpdC10ZXN0aW5nIGZvciBpbXBsLXNpZGUgaW5wdXQgaGFuZGxpbmcgaW4gYWNj
ZWxlcmF0ZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgb3JpZ2luYWwgaGl0IHRlc3RpbmcgY29kZSBieSBTYW1pIEt5b3N0aWxh
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIHNpbXBsZSBpbXBsLXNpZGUgaGl0
LXRlc3RpbmcgaGVscGVyCisgICAgICAgIGZ1bmN0aW9uLiBBdCB0aGlzIHRpbWUsIHRoZSBtYWlu
IG1vdGl2YXRpb24gZm9yIHRoaXMgaXMgc28gdGhhdAorICAgICAgICBjb21wb3NpdGVkIHNjcm9s
bGFibGUgbGF5ZXJzIGNhbiBiZSBzY3JvbGxlZCBieSB0aGUgaW1wbCB0aHJlYWQgLS0KKyAgICAg
ICAgYW5kIGEgcHJlcmVxdWlzaXRlIGZvciB0aGF0IGlzIHRoZSBhYmlsaXR5IHRvIGhpdC10ZXN0
IG9uIHRoZSBpbXBsCisgICAgICAgIHRocmVhZCwgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzY3Jv
bGxpbmcgYWN0aW9uIHNob3VsZCBiZSBhcHBsaWVkLgorCisgICAgICAgIDkgdW5pdCB0ZXN0cyBh
ZGRlZDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRlc3Rp
bmdGb3JFbXB0eUxheWVyTGlzdAorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
dmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUG9zaXRpb25lZExheWVyCisgICAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xl
Um90YXRlZExheWVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlI
aXRUZXN0aW5nRm9yU2luZ2xlUGVyc3BlY3RpdmVMYXllcgorICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyV2l0aFNjYWxlZENv
bnRlbnRzCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0
aW5nRm9yQ2xpcHBlZE92ZXJmbG93TGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVycworICAgICAgICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0
cworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaDoK
KyAgICAgICAgKENDTGF5ZXJUcmVlSG9zdENvbW1vbik6CisKIDIwMTItMDYtMTIgIE1PUklUQSBI
YWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgU2hhZG93IFBzZXVkbyBJRCBz
aG91bGQgYmUgYWJsZSB0byBuZXN0IHRvIHBvaW50IG5lc3RlZCBzaGFkb3cgRE9NLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwppbmRleCA3NmI3ZjIzZmEzNzNhZWE2NWQ5MDE3Y2RiMWJjZTVkOTY1
YzBlNTIzLi5hMzc0NzZiNzgwMjQxMmJmYjE5NDU4YWFmNzQxMmE5M2JkNTk1MzVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyIEBACisyMDEyLTA2LTEzICBTaGF3biBT
aW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gSW1w
bGVtZW50IGhpdC10ZXN0aW5nIGZvciBpbXBsLXNpZGUgaW5wdXQgaGFuZGxpbmcgaW4gYWNjZWxl
cmF0ZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODg5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwOgorCiAyMDEyLTA2
LTEyICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2No
cm9taXVtXSBQb3J0IENhbnZhczJETGF5ZXJCcmlkZ2Ugb3ZlciB0byBXZWJFeHRlcm5hbFRleHR1
cmVMYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5kZXgg
YmIyODYxNDlmMTU2YzI2ZWIwMjFmNDNkYmU2ZDAxYmZmMzc5N2VmYS4uMzg0NmI5NGJjZjMzMGY3
OTBkZmQzZTRjNmE3Y2UzNzA4NjQxNjZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uY3BwCkBAIC04NzIsNCArODcyLDM5IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xheWVySW1w
bCo+CiAgICAgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0c0ludGVybmFsPENDTGF5ZXJJ
bXBsLCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlPihyZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCByb290U2Npc3NvclJlY3QpOwogfQogCitDQ0xheWVySW1wbCogQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KGNvbnN0IEludFBvaW50JiB2
aWV3cG9ydFBvaW50LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCkKK3sKKyAgICBDQ0xheWVySW1wbCogZm91bmRMYXllciA9IDA7CisKKyAgICB0eXBlZGVmIEND
TGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVy
U3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVy
YXRvclR5cGU7CisgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBlbmQgPSBDQ0xheWVySXRlcmF0b3JU
eXBlOjplbmQoJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOworCisgICAgZm9yIChDQ0xheWVySXRl
cmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VM
YXllckxpc3QpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBjb25zaWRlciByZW5kZXJTdXJmYWNlcyBmb3IgaGl0IHRlc3RpbmcuCisgICAgICAgIGlmICgh
aXQucmVwcmVzZW50c0l0c2VsZigpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Q0NMYXllckltcGwqIGN1cnJlbnRMYXllciA9ICgqaXQpOworCisgICAgICAgIC8vIFRoZSBzY3Jl
ZW5TcGFjZVRyYW5zZm9ybSBhbG9uZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2FsaW5nIGJldHdl
ZW4gY29udGVudEJvdW5kcyBhbmQgYm91bmRzLgorICAgICAgICAvLyBCdXQsIHNpbmNlIHdlIHdh
bnQgdG8gdHJhbnNmb3JtIHRoZSB2aXNpYmxlTGF5ZXJSZWN0LCB3aGljaCBpcyBkZWZpbmVkIGlu
IGNvbnRlbnQgc3BhY2UsIHdlCisgICAgICAgIC8vIGhhdmUgdG8gaW5jbHVkZSB0aGF0IHNjYWxp
bmcgaGVyZS4KKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJDb250ZW50U3Bh
Y2VUb1NjcmVlblNwYWNlID0gY3VycmVudExheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwor
ICAgICAgICBsYXllckNvbnRlbnRTcGFjZVRvU2NyZWVuU3BhY2Uuc2NhbGVOb25Vbmlmb3JtKGN1
cnJlbnRMYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY3VycmVu
dExheWVyLT5jb250ZW50Qm91bmRzKCkud2lkdGgoKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudExheWVyLT5ib3VuZHMoKS5o
ZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY3VycmVudExheWVyLT5jb250ZW50Qm91bmRz
KCkuaGVpZ2h0KCkpKTsKKworICAgICAgICBib29sIGNsaXBwZWQgPSBmYWxzZTsKKyAgICAgICAg
RmxvYXRRdWFkIHNjcmVlblNwYWNlVmlzaWJsZVF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGxh
eWVyQ29udGVudFNwYWNlVG9TY3JlZW5TcGFjZSwgRmxvYXRRdWFkKGN1cnJlbnRMYXllci0+dmlz
aWJsZUxheWVyUmVjdCgpKSwgY2xpcHBlZCk7CisKKyAgICAgICAgaWYgKCFzY3JlZW5TcGFjZVZp
c2libGVRdWFkLmNvbnRhaW5zUG9pbnQodmlld3BvcnRQb2ludCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3VuZExheWVyID0gY3VycmVudExheWVyOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gMCwgd2hpY2gg
bWVhbnMgdGhlIHZpZXdwb3J0UG9pbnQgZGlkIG5vdCBzdWNjZXNzZnVsbHkgaGl0IHRlc3QgYW55
IGxheWVycywgbm90IGV2ZW4gdGhlIHJvb3QgbGF5ZXIuCisgICAgcmV0dXJuIGZvdW5kTGF5ZXI7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKaW5kZXggZjgwNDUxNjE3ZGQyNWZiMTRjZjExZmE2ZWRhZTk3NDlhZTI1ZDc2
Zi4uZTVlNGZkOWEyYzIzODJiOWU5MjVjYTc5NDk4NTkzNzcxNjgyMjlkOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgog
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPEND
TGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9v
dFNjaXNzb3JSZWN0KTsKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Npc3NvclJlY3QpOwogCisgICAgLy8gUGVyZm9y
bXMgaGl0IHRlc3RpbmcgZm9yIGEgZ2l2ZW4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC4KKyAgICBz
dGF0aWMgQ0NMYXllckltcGwqIGZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQoY29uc3QgSW50UG9p
bnQmIHZpZXdwb3J0UG9pbnQsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wg
cmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJnZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1
cmZhY2VMYXllcklEKTsKIAogICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QuY3BwCmluZGV4IDg0MGM0ZWQzYWY5NDJlOTk1NmVjYWYzYjU5MjRiNmNlNmY0ZWI0NjAu
LjAxODc3ZjMxZGJlY2I2ODRmMjNiOTAyNGI5YjQ3ZDU4YTQyMThkY2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LmNwcApAQCAtMjkxMCw2ICsyOTEwLDU2MSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZ1dpdGhQcmVzZXJ2ZXMzZEZvckZsYXR0ZW5pbgog
ICAgIEVYUEVDVF9FUShjaGlsZDEtPmlkKCksIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMV0tPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOwogfQogCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JFbXB0eUxheWVyTGlzdCkKK3sK
KyAgICAvLyBIaXQgdGVzdGluZyBvbiBhbiBlbXB0eSByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0IHNo
b3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuCisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworCisgICAgSW50UG9pbnQgdGVzdFBvaW50KDAsIDApOwor
ICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQ
b2ludCgxMCwgMjApOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpm
aW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXIpCit7CisgICAg
T3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7Cisg
ICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2Uo
KS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwg
MTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAw
KTsKKyAgICBJbnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFu
Y2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxp
c3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1
bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBl
bmQocm9vdC5nZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3
VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRp
dHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1t
eU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZp
c2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkp
OyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5n
IHRoZSBjb3JyZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdl
IGp1c3QgY3JlYXRlZC4KKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJM
aXN0KCkuc2l6ZSgpKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IG91dHNpZGUg
dGhlIGxheWVyIHNob3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuCisgICAgSW50UG9pbnQgdGVz
dFBvaW50KDEwMSwgMTAxKTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisg
ICAgdGVzdFBvaW50ID0gSW50UG9pbnQoLTEsIC0xKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisK
KyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUg
cm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxLCAxKTsKKyAgICByZXN1bHRM
YXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0
ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3Vs
dExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAg
IHRlc3RQb2ludCA9IEludFBvaW50KDk5LCA5OSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAg
RVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZVBvc2l0aW9uZWRMYXll
cikKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEyMzQ1KTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIElu
dFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBv
c2l0aW9uKDUwLCA1MCk7IC8vIHRoaXMgbGF5ZXIgaXMgcG9zaXRpb25lZCwgYW5kIGhpdCB0ZXN0
aW5nIHNob3VsZCBjb3JyZWN0bHkga25vdyB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZC4KKyAg
ICBJbnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwg
cG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7Cisg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4
VGV4dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9v
dC5nZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNm
b3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRy
aXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRl
eHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVB
bmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBl
bXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBj
b3JyZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3Qg
Y3JlYXRlZC4KKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgp
KTsKKyAgICBBU1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCku
c2l6ZSgpKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IG91dHNpZGUgdGhlIGxh
eWVyIHNob3VsZCByZXR1cm4gYSBudWxsIHBvaW50ZXIuCisgICAgSW50UG9pbnQgdGVzdFBvaW50
KDQ5LCA0OSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAgIC8vIEV2
ZW4gdGhvdWdoIHRoZSBsYXllciBleGlzdHMgYXQgKDEwMSwgMTAxKSwgaXQgc2hvdWxkIG5vdCBi
ZSB2aXNpYmxlIHRoZXJlIHNpbmNlIHRoZSByb290IHJlbmRlclN1cmZhY2Ugd291bGQgY2xhbXAg
aXQuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMTAxLCAxMDEpOworICAgIHJlc3VsdExheWVy
ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQ
b2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExh
eWVyKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0
dXJuIHRoZSByb290IGxheWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUxLCA1MSk7Cisg
ICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hp
dEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRf
VFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQo
KSk7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg5OSwgOTkpOworICAgIHJlc3VsdExheWVy
ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQ
b2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5
ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNU
KENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVSb3Rh
dGVkTGF5ZXIpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxMjM0NSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJv
b3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
aWRlbnRpdHlNYXRyaXg7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcm90YXRpb240NURl
Z3JlZXNBYm91dENlbnRlcjsKKyAgICByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyLnRyYW5z
bGF0ZSg1MCwgNTApOworICAgIHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDZW50ZXIucm90YXRlM2Qo
MCwgMCwgNDUpOworICAgIHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDZW50ZXIudHJhbnNsYXRlKC01
MCwgLTUwKTsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBv
c2l0aW9uKDAsIDApOworICAgIEludFNpemUgYm91bmRzKDEwMCwgMTAwKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRD
ZW50ZXIsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsK
KyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllcklt
cGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1
bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxw
IGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAgLy8gU2Fu
aXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJUX0VRKDF1
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCByb290
LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBIaXQgdGVz
dGluZyBmb3IgcG9pbnRzIG91dHNpZGUgdGhlIGxheWVyLgorICAgIC8vIFRoZXNlIGNvcm5lcnMg
d291bGQgaGF2ZSBiZWVuIGluc2lkZSB0aGUgdW4tdHJhbnNmb3JtZWQgbGF5ZXIsIGJ1dCB0aGV5
IHNob3VsZCBub3QgaGl0IHRoZSBjb3JyZWN0bHkgdHJhbnNmb3JtZWQgbGF5ZXIuCisgICAgSW50
UG9pbnQgdGVzdFBvaW50KDk5LCA5OSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2lu
dCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVy
KTsKKworICAgIHRlc3RQb2ludCA9IEludFBvaW50KDEsIDEpOworICAgIHJlc3VsdExheWVyID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2lu
dCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVy
KTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJu
IHRoZSByb290IGxheWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUwLCAtMSk7CisgICAg
cmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5
UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJV
RShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7
CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgtMSwgNTApOworICAgIHJlc3VsdExheWVyID0g
Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2lu
dCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIp
OworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQZXJzcGVj
dGl2ZUxheWVyKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBy
b290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworCisgICAgLy8gcGVyc3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50
ZXIgKiB0cmFuc2xhdGlvbkJ5WiBpcyBkZXNpZ25lZCBzbyB0aGF0IHRoZSAxMDAgeCAxMDAgbGF5
ZXIgYmVjb21lcyA1MCB4IDUwLCBhbmQgcmVtYWlucyBjZW50ZXJlZCBhdCAoNTAsIDUwKS4KKyAg
ICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRl
cjsKKyAgICBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlci50cmFuc2xhdGUoNTAsIDUw
KTsKKyAgICBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlci5hcHBseVBlcnNwZWN0aXZl
KDEpOworICAgIHBlcnNwZWN0aXZlUHJvamVjdGlvbkFib3V0Q2VudGVyLnRyYW5zbGF0ZSgtNTAs
IC01MCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25CeVo7CisgICAg
dHJhbnNsYXRpb25CeVoudHJhbnNsYXRlM2QoMCwgMCwgLTEpOworCisgICAgRmxvYXRQb2ludCBh
bmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRTaXpl
IGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290
LmdldCgpLCBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlciAqIHRyYW5zbGF0aW9uQnla
LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAg
cm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4g
cmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxh
eWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVt
bXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1
cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBj
aGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVu
ZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3Rpbmcg
Zm9yIHBvaW50cyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAvLyBUaGVzZSBjb3JuZXJzIHdvdWxk
IGhhdmUgYmVlbiBpbnNpZGUgdGhlIHVuLXRyYW5zZm9ybWVkIGxheWVyLCBidXQgdGhleSBzaG91
bGQgbm90IGhpdCB0aGUgY29ycmVjdGx5IHRyYW5zZm9ybWVkIGxheWVyLgorICAgIEludFBvaW50
IHRlc3RQb2ludCgyNCwgMjQpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisK
KyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NiwgNzYpOworICAgIHJlc3VsdExheWVyID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsK
KworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJuIHRo
ZSByb290IGxheWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVz
dWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9p
bnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShy
ZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisK
KyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NCwgNzQpOworICAgIHJlc3VsdExheWVyID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOwor
ICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVMYXllcldpdGhT
Y2FsZWRDb250ZW50cykKK3sKKyAgICAvLyBBIGxheWVyJ3MgdmlzaWJsZUxheWVyUmVjdCBpcyBh
Y3R1YWxseSBpbiB0aGUgbGF5ZXIncyBjb250ZW50IHNwYWNlLiBUaGUKKyAgICAvLyBzY3JlZW5T
cGFjZVRyYW5zZm9ybSBjb252ZXJ0cyBmcm9tIHRoZSBsYXllcidzIG9yaWdpbiBzcGFjZSB0byBz
Y3JlZW4gc3BhY2UuIFRoaXMKKyAgICAvLyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBoaXQgdGVzdGlu
ZyB3b3JrcyBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIHRoZSBjb250ZW50cyBzY2FsZS4KKyAgICAv
LyBBIGNvbnRlbnRzU2NhbGUgdGhhdCBpcyBub3QgMSBlZmZlY3RpdmVseSBmb3JjZXMgYSBub24t
aWRlbnRpdHkgdHJhbnNmb3JtIGJldHdlZW4KKyAgICAvLyBsYXllcidzIGNvbnRlbnQgc3BhY2Ug
YW5kIGxheWVyJ3Mgb3JpZ2luIHNwYWNlLCB3aGljaCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlCisg
ICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm1uLiBUaGUgaGl0IHRlc3RpbmcgY29kZSBtdXN0IHRh
a2UgdGhpcyBpbnRvIGFjY291bnQuCisgICAgLy8KKyAgICAvLyBUbyB0ZXN0IHRoaXMsIHRoZSBs
YXllciBpcyBwb3NpdGlvbmVkIGF0ICgyNSwgMjUpLCBhbmQgaXMgc2l6ZSAoNTAsIDUwKS4gSWYK
KyAgICAvLyBjb250ZW50c1NjYWxlIGlzIGlnbm9yZWQsIHRoZW4gaGl0IHRlc3Rpbmcgd2lsbCBt
aXMtaW50ZXJwcmV0IHRoZSB2aXNpYmxlTGF5ZXJSZWN0CisgICAgLy8gYXMgYmVpbmcgbGFyZ2Vy
IHRoYW4gdGhlIGFjdHVhbCBib3VuZHMgb2YgdGhlIGxheWVyLgorICAgIC8vCisKKyAgICBPd25Q
dHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKKyAgICBy
b290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5z
ZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDAp
KSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBG
bG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDI1LCAyNSk7
CisgICAgSW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9y
LCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRy
dWUpOworCisgICAgcm9vdC0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisK
KyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1
cmVTaXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0
KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMo
cm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJl
U2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Np
c3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkg
c2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVj
dCByZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0
ZWQuCisgICAgLy8gVGhlIHZpc2libGVMYXllclJlY3QgaXMgYWN0dWFsbHkgMTAweDEwMCwgZXZl
biB0aG91Z2ggdGhlIGxheW91dCBzaXplIG9mIHRoZSBsYXllciBpcyA1MHg1MCwgcG9zaXRpb25l
ZCBhdCAyNXgyNS4KKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVy
bygpLCBJbnRTaXplKDEwMCwgMTAwKSksIHJvb3QtPnZpc2libGVMYXllclJlY3QoKSk7CisgICAg
QVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJU
X0VRKDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAg
ICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0
dXJuIGEgbnVsbCBwb2ludGVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCgyNCwgMjQpOworICAg
IENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUg
bGF5ZXIgZXhpc3RzIGF0ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVy
ZSBzaW5jZSB0aGUgcm9vdCByZW5kZXJTdXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIC8vIFRo
aXMgY2FzZSBpbiBwYXJ0aWN1bGFyIGlzIGxpa2VseSB0byBmYWlsIGlmIGNvbnRlbnRzIHNjYWxl
IGlzIG5vdCBjb3JyZWN0bHkgYWNjb3VudGVkIGZvci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2lu
dCg3NiwgNzYpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZv
ciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJuIHRoZSByb290IGxheWVyLgorICAgIHRlc3RQ
b2ludCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNU
X0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2lu
dCg3NCwgNzQpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVz
dWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUhpdFRlc3RpbmdGb3JDbGlwcGVkT3ZlcmZsb3dMYXllcikKK3sKKyAgICAvLyBUZXN0IHRo
YXQgaGl0LXRlc3Rpbmcgd2lsbCBvbmx5IHdvcmsgZm9yIHRoZSB2aXNpYmxlIHBvcnRpb24gb2Yg
YSBsYXllciwgYW5kIG5vdCB0aGUgZW50aXJlIGxheWVyIGJvdW5kcy4KKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzKTsKKyAgICByb290LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBGbG9hdFBv
aW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDI1LCAyNSk7IC8vIHRo
aXMgbGF5ZXIgaXMgcG9zaXRpb25lZCwgYW5kIGhpdCB0ZXN0aW5nIHNob3VsZCBjb3JyZWN0bHkg
a25vdyB3aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZC4KKyAgICBJbnRTaXplIGJvdW5kcyg1MCwg
NTApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNl
KTsKKyAgICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgeworICAgICAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0NTYpOworICAg
ICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoLTUwLCAtNTApOworICAgICAgICBib3VuZHMgPSBJ
bnRTaXplKDMwMCwgMzAwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhj
aGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0
aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVl
KTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Np
c3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCBy
ZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQu
CisgICAgQVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAg
QVNTRVJUX0VRKDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7
CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91
bGQgcmV0dXJuIGEgbnVsbCBwb2ludGVyLgorICAgIC8vIERlc3BpdGUgdGhlIGNoaWxkIGxheWVy
IGJlaW5nIHZlcnkgbGFyZ2UsIGl0IHNob3VsZCBiZSBjbGlwcGVkIHRvIHRoZSByb290IGxheWVy
J3MgYm91bmRzLgorICAgIEludFBvaW50IHRlc3RQb2ludCgyNCwgMjQpOworICAgIENDTGF5ZXJJ
bXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVD
VF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgbGF5ZXIgZXhp
c3RzIGF0ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVyZSBzaW5jZSB0
aGUgcm9vdCByZW5kZXJTdXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIHRlc3RQb2ludCA9IElu
dFBvaW50KDc2LCA3Nik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRlc3Rp
bmcgZm9yIGEgcG9pbnQgaW5zaWRlIHNob3VsZCByZXR1cm4gdGhlIGNoaWxkIGxheWVyLgorICAg
IHRlc3RQb2ludCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAg
RVhQRUNUX0VRKDQ1NiwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50
UG9pbnQoNzQsIDc0KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoNDU2LCBy
ZXN1bHRMYXllci0+aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwg
dmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJzKQoreworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgcm9vdC0+Y3JlYXRlUmVu
ZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3Qo
SW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNo
b3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRTaXplIGJv
dW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJv
dW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIHsK
KyAgICAgICAgLy8gY2hpbGQgMSBhbmQgY2hpbGQyIGFyZSBpbml0aWFsaXplZCB0byBvdmVybGFw
IGJldHdlZW4geD01MCBhbmQgeD02MC4KKyAgICAgICAgLy8gZ3JhbmRDaGlsZCBpcyBzZXQgdG8g
b3ZlcmxhcCBib3RoIGNoaWxkMSBhbmQgY2hpbGQyIGJldHdlZW4geT01MCBhbmQgeT02MC4KKyAg
ICAgICAgLy8gVGhlIGV4cGVjdGVkIHN0YWNraW5nIG9yZGVyIGlzOgorICAgICAgICAvLyAgIChm
cm9udCkgY2hpbGQyLCAoc2Vjb25kKSBncmFuZENoaWxkLCAodGhpcmQpIGNoaWxkMSwgYW5kIChi
YWNrKSB0aGUgcm9vdCBsYXllciBiZWhpbmQgYWxsIG90aGVyIGxheWVycy4KKworICAgICAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7CisgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0ZSgzKTsK
KyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoNCk7CisKKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KDEwLCAxMCk7CisgICAg
ICAgIGJvdW5kcyA9IEludFNpemUoNTAsIDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVz
Rm9yVGVzdGluZyhjaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
YW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGNoaWxkMS0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCg1MCwgMTAp
OworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDUwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgICAgICBjaGlsZDIt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgICAgICAvLyBSZW1lbWJlciB0aGF0IGdyYW5k
Q2hpbGQgaXMgcG9zaXRpb25lZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHBhcmVudCAoaS5lLiBjaGls
ZDEpLgorICAgICAgICAvLyBJbiBzY3JlZW4gc3BhY2UsIHRoZSBpbnRlbmRlZCBwb3NpdGlvbiBp
cyAoMTAsIDUwKSwgd2l0aCBzaXplIDEwMCB4IDUwLgorICAgICAgICBwb3NpdGlvbiA9IEZsb2F0
UG9pbnQoMCwgNDApOworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDEwMCwgNTApOworICAgICAg
ICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQxLmdldCgpLCBpZGVudGl0
eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2Up
OworICAgICAgICBncmFuZENoaWxkMS0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgICAg
IGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEucmVsZWFzZSgpKTsKKyAgICAgICAgcm9vdC0+
YWRkQ2hpbGQoY2hpbGQxLnJlbGVhc2UoKSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
Mi5yZWxlYXNlKCkpOworICAgIH0KKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDEgPSByb290LT5j
aGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDIgPSByb290LT5jaGls
ZHJlbigpWzFdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkMSA9IGNoaWxkMS0+
Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1
cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7
CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJM
aXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246
OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwg
RmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3Jl
IGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhl
IHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KKyAgICBBU1NFUlRfVFJVRShjaGlsZDEpOworICAg
IEFTU0VSVF9UUlVFKGNoaWxkMik7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGlsZDEpOworICAg
IEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VS
VF9FUSg0dSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAg
IEFTU0VSVF9FUSgxLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzBdLT5pZCgp
KTsgLy8gcm9vdCBsYXllcgorICAgIEFTU0VSVF9FUSgyLCByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpWzFdLT5pZCgpKTsgLy8gY2hpbGQxCisgICAgQVNTRVJUX0VRKDQsIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMl0tPmlkKCkpOyAvLyBncmFuZENoaWxkMQor
ICAgIEFTU0VSVF9FUSgzLCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzNdLT5p
ZCgpKTsgLy8gY2hpbGQyCisKKyAgICAvLyBOb3RoaW5nIG92ZXJsYXBzIHRoZSByb290TGF5ZXIg
YXQgKDEsIDEpLCBzbyBoaXQgdGVzdGluZyB0aGVyZSBzaG91bGQgZmluZCB0aGUgcm9vdCBsYXll
ci4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxLCAxKTsKKyAgICBDQ0xheWVy
SW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJ
c0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NF
UlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEsIHJlc3VsdExheWVyLT5pZCgp
KTsKKworICAgIC8vIEF0ICgxNSwgMTUpLCBjaGlsZDEgYW5kIHJvb3QgYXJlIHRoZSBvbmx5IGxh
eWVycy4gY2hpbGQxIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQgPSBJ
bnRQb2ludCgxNSwgMTUpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgyLCBy
ZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoNTEsIDIwKSwgY2hpbGQxIGFuZCBjaGls
ZDIgb3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9p
bnQgPSBJbnRQb2ludCg1MSwgMjApOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9F
USgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoODAsIDUxKSwgY2hpbGQyIGFu
ZCBncmFuZENoaWxkMSBvdmVybGFwLiBjaGlsZDIgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdG9wLgor
ICAgIHRlc3RQb2ludCA9IEludFBvaW50KDgwLCA1MSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7Cisg
ICAgRVhQRUNUX0VRKDMsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIC8vIEF0ICg1MSwgNTEp
LCBhbGwgbGF5ZXJzIG92ZXJsYXAgZWFjaCBvdGhlci4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJl
IG9uIHRvcCBvZiBhbGwgb3RoZXIgbGF5ZXJzLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUx
LCA1MSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXll
clRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDMsIHJlc3VsdExheWVy
LT5pZCgpKTsKKworICAgIC8vIEF0ICgyMCwgNTEpLCBjaGlsZDEgYW5kIGdyYW5kQ2hpbGQxIG92
ZXJsYXAuIGdyYW5kQ2hpbGQxIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9p
bnQgPSBJbnRQb2ludCgyMCwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9F
USg0LCByZXN1bHRMYXllci0+aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cykKK3sKKyAgICAvLwor
ICAgIC8vIFRoZSBnZW9tZXRyeSBpcyBzZXQgdXAgc2ltaWxhcmx5IHRvIHRoZSBwcmV2aW91cyBj
YXNlLCBidXQKKyAgICAvLyBhbGwgbGF5ZXJzIGFyZSBmb3JjZWQgdG8gYmUgcmVuZGVyU3VyZmFj
ZXMgbm93LgorICAgIC8vCisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBy
b290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICBy
b290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICB7CisgICAgICAgIC8vIGNoaWxkIDEg
YW5kIGNoaWxkMiBhcmUgaW5pdGlhbGl6ZWQgdG8gb3ZlcmxhcCBiZXR3ZWVuIHg9NTAgYW5kIHg9
NjAuCisgICAgICAgIC8vIGdyYW5kQ2hpbGQgaXMgc2V0IHRvIG92ZXJsYXAgYm90aCBjaGlsZDEg
YW5kIGNoaWxkMiBiZXR3ZWVuIHk9NTAgYW5kIHk9NjAuCisgICAgICAgIC8vIFRoZSBleHBlY3Rl
ZCBzdGFja2luZyBvcmRlciBpczoKKyAgICAgICAgLy8gICAoZnJvbnQpIGNoaWxkMiwgKHNlY29u
ZCkgZ3JhbmRDaGlsZCwgKHRoaXJkKSBjaGlsZDEsIGFuZCAoYmFjaykgdGhlIHJvb3QgbGF5ZXIg
YmVoaW5kIGFsbCBvdGhlciBsYXllcnMuCisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgICAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworCisgICAgICAg
IHBvc2l0aW9uID0gRmxvYXRQb2ludCgxMCwgMTApOworICAgICAgICBib3VuZHMgPSBJbnRTaXpl
KDUwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQxLmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJv
dW5kcywgZmFsc2UpOworICAgICAgICBjaGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICAgICAgY2hpbGQxLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICAgICAgcG9z
aXRpb24gPSBGbG9hdFBvaW50KDUwLCAxMCk7CisgICAgICAgIGJvdW5kcyA9IEludFNpemUoNTAs
IDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRz
LCBmYWxzZSk7CisgICAgICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAg
ICBjaGlsZDItPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKworICAgICAgICAvLyBSZW1l
bWJlciB0aGF0IGdyYW5kQ2hpbGQgaXMgcG9zaXRpb25lZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHBh
cmVudCAoaS5lLiBjaGlsZDEpLgorICAgICAgICAvLyBJbiBzY3JlZW4gc3BhY2UsIHRoZSBpbnRl
bmRlZCBwb3NpdGlvbiBpcyAoMTAsIDUwKSwgd2l0aCBzaXplIDEwMCB4IDUwLgorICAgICAgICBw
b3NpdGlvbiA9IEZsb2F0UG9pbnQoMCwgNDApOworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDEw
MCwgNTApOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hpbGQx
LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24s
IGJvdW5kcywgZmFsc2UpOworICAgICAgICBncmFuZENoaWxkMS0+c2V0RHJhd3NDb250ZW50KHRy
dWUpOworICAgICAgICBncmFuZENoaWxkMS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOwor
CisgICAgICAgIGNoaWxkMS0+YWRkQ2hpbGQoZ3JhbmRDaGlsZDEucmVsZWFzZSgpKTsKKyAgICAg
ICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQxLnJlbGVhc2UoKSk7CisgICAgICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkMi5yZWxlYXNlKCkpOworICAgIH0KKworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDEg
PSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBjaGlsZDIgPSBy
b290LT5jaGlsZHJlbigpWzFdLmdldCgpOworICAgIENDTGF5ZXJJbXBsKiBncmFuZENoaWxkMSA9
IGNoaWxkMS0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlM
YXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBp
ZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1
bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5z
dXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkg
Y2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KKyAgICBBU1NFUlRfVFJVRShjaGls
ZDEpOworICAgIEFTU0VSVF9UUlVFKGNoaWxkMik7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRDaGls
ZDEpOworICAgIEFTU0VSVF9UUlVFKGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBBU1NF
UlRfVFJVRShjaGlsZDItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoZ3JhbmRD
aGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX0VRKDR1LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDN1LCByb290LT5yZW5kZXJTdXJmYWNl
KCktPmxheWVyTGlzdCgpLnNpemUoKSk7IC8vIFRoZSByb290IHN1cmZhY2UgaGFzIHRoZSByb290
IGxheWVyLCBhbmQgY2hpbGQxJ3MgYW5kIGNoaWxkMidzIHJlbmRlclN1cmZhY2VzLgorICAgIEFT
U0VSVF9FUSgydSwgY2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7
IC8vIFRoZSBjaGlsZDEgc3VyZmFjZSBoYXMgdGhlIGNoaWxkMSBsYXllciBhbmQgZ3JhbmRDaGls
ZDEncyByZW5kZXJTdXJmYWNlLgorICAgIEFTU0VSVF9FUSgxdSwgY2hpbGQyLT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCBncmFuZENoaWxk
MS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUSgx
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5pZCgpKTsgLy8gcm9vdCBsYXllcgorICAgIEFT
U0VSVF9FUSgyLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5pZCgpKTsgLy8gY2hpbGQxCisg
ICAgQVNTRVJUX0VRKDQsIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMl0tPmlkKCkpOyAvLyBncmFu
ZENoaWxkMQorICAgIEFTU0VSVF9FUSgzLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzNdLT5pZCgp
KTsgLy8gY2hpbGQyCisKKyAgICAvLyBOb3RoaW5nIG92ZXJsYXBzIHRoZSByb290TGF5ZXIgYXQg
KDEsIDEpLCBzbyBoaXQgdGVzdGluZyB0aGVyZSBzaG91bGQgZmluZCB0aGUgcm9vdCBsYXllci4K
KyAgICBJbnRQb2ludCB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxLCAxKTsKKyAgICBDQ0xheWVySW1w
bCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hp
dEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRf
VFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEsIHJlc3VsdExheWVyLT5pZCgpKTsK
KworICAgIC8vIEF0ICgxNSwgMTUpLCBjaGlsZDEgYW5kIHJvb3QgYXJlIHRoZSBvbmx5IGxheWVy
cy4gY2hpbGQxIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQ
b2ludCgxNSwgMTUpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpm
aW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgyLCByZXN1
bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoNTEsIDIwKSwgY2hpbGQxIGFuZCBjaGlsZDIg
b3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQg
PSBJbnRQb2ludCg1MSwgMjApOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgz
LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoODAsIDUxKSwgY2hpbGQyIGFuZCBn
cmFuZENoaWxkMSBvdmVybGFwLiBjaGlsZDIgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdG9wLgorICAg
IHRlc3RQb2ludCA9IEludFBvaW50KDgwLCA1MSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAg
RVhQRUNUX0VRKDMsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIC8vIEF0ICg1MSwgNTEpLCBh
bGwgbGF5ZXJzIG92ZXJsYXAgZWFjaCBvdGhlci4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJlIG9u
IHRvcCBvZiBhbGwgb3RoZXIgbGF5ZXJzLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUxLCA1
MSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRo
YXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBB
U1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDMsIHJlc3VsdExheWVyLT5p
ZCgpKTsKKworICAgIC8vIEF0ICgyMCwgNTEpLCBjaGlsZDEgYW5kIGdyYW5kQ2hpbGQxIG92ZXJs
YXAuIGdyYW5kQ2hpbGQxIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQg
PSBJbnRQb2ludCgyMCwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSg0
LCByZXN1bHRMYXllci0+aWQoKSk7Cit9CisKKwogLy8gRklYTUU6CiAvLyBjb250aW51ZSB3b3Jr
aW5nIG9uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODk0MgogLy8g
IC0gYWRkIGEgdGVzdCB0byB2ZXJpZnkgY2xpcHBpbmcgdGhhdCBjaGFuZ2VzIHRoZSAiY2VudGVy
IHBvaW50Igo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147256</attachid>
            <date>2012-06-13 01:05:37 -0700</date>
            <delta_ts>2012-06-13 15:29:28 -0700</delta_ts>
            <desc>restructured to expose additional helper function</desc>
            <filename>bug-88972-20120613010536.patch</filename>
            <type>text/plain</type>
            <size>35253</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg1NTkxZDc1OTM1ZTY1
YjFmNDE2MDUyMjdiNzZhZmE1ZTE4ZjUxNi4uYmRmZWExNGNiZWMzOGZkZDBiMTdhNjkxODg2Yjg1
NTAwNmE3Y2VkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEyLTA2LTEzICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGhpdC10ZXN0aW5nIGZvciBpbXBsLXNpZGUgaW5wdXQgaGFuZGxpbmcgaW4gYWNj
ZWxlcmF0ZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgb3JpZ2luYWwgaGl0IHRlc3RpbmcgY29kZSBieSBTYW1pIEt5b3N0aWxh
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIHNpbXBsZSBpbXBsLXNpZGUgaGl0
LXRlc3RpbmcgaGVscGVyCisgICAgICAgIGZ1bmN0aW9uLiBBdCB0aGlzIHRpbWUsIHRoZSBtYWlu
IG1vdGl2YXRpb24gZm9yIHRoaXMgaXMgc28gdGhhdAorICAgICAgICBjb21wb3NpdGVkIHNjcm9s
bGFibGUgbGF5ZXJzIGNhbiBiZSBzY3JvbGxlZCBieSB0aGUgaW1wbCB0aHJlYWQgLS0KKyAgICAg
ICAgYW5kIGEgcHJlcmVxdWlzaXRlIGZvciB0aGF0IGlzIHRoZSBhYmlsaXR5IHRvIGhpdC10ZXN0
IG9uIHRoZSBpbXBsCisgICAgICAgIHRocmVhZCwgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzY3Jv
bGxpbmcgYWN0aW9uIHNob3VsZCBiZSBhcHBsaWVkLgorCisgICAgICAgIDkgdW5pdCB0ZXN0cyBh
ZGRlZDoKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRlc3Rp
bmdGb3JFbXB0eUxheWVyTGlzdAorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qu
dmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUG9zaXRpb25lZExheWVyCisgICAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xl
Um90YXRlZExheWVyCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlI
aXRUZXN0aW5nRm9yU2luZ2xlUGVyc3BlY3RpdmVMYXllcgorICAgICAgICAgIENDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyV2l0aFNjYWxlZENv
bnRlbnRzCisgICAgICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0
aW5nRm9yQ2xpcHBlZE92ZXJmbG93TGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVycworICAgICAgICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0
cworCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
cG9pbnRIaXRzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5o
OgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0Q29tbW9uKToKKwogMjAxMi0wNi0xMiAgTU9SSVRB
IEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAgICAgICBTaGFkb3cgUHNldWRvIElE
IHNob3VsZCBiZSBhYmxlIHRvIG5lc3QgdG8gcG9pbnQgbmVzdGVkIHNoYWRvdyBET00uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc2YjdmMjNmYTM3M2FlYTY1ZDkwMTdjZGIxYmNlNWQ5
NjVjMGU1MjMuLmEzNzQ3NmI3ODAyNDEyYmZiMTk0NThhYWY3NDEyYTkzYmQ1OTUzNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDYtMTMgIFNoYXdu
IFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBJ
bXBsZW1lbnQgaGl0LXRlc3RpbmcgZm9yIGltcGwtc2lkZSBpbnB1dCBoYW5kbGluZyBpbiBhY2Nl
bGVyYXRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04ODk3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisKIDIwMTIt
MDYtMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBb
Y2hyb21pdW1dIFBvcnQgQ2FudmFzMkRMYXllckJyaWRnZSBvdmVyIHRvIFdlYkV4dGVybmFsVGV4
dHVyZUxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAppbmRl
eCBiYjI4NjE0OWYxNTZjMjZlYjAyMWY0M2RiZTZkMDFiZmYzNzk3ZWZhLi5lZWNjNTc3YTZlMWNh
YTA2Nzg4YWQyOTVlMWUyYmU4NWYxODYxYWY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
cmVlSG9zdENvbW1vbi5jcHAKQEAgLTg3Miw0ICs4NzIsNDQgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJ
bXBsKj4KICAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzSW50ZXJuYWw8Q0NMYXll
ckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2U+KHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CiB9CiAKK2Jvb2wgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpwb2ludEhpdHNMYXllcihjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NM
YXllckltcGwqIGxheWVyKQoreworICAgIC8vIFRoZSBzY3JlZW5TcGFjZVRyYW5zZm9ybSBhbG9u
ZSBkb2VzIG5vdCBpbmNsdWRlIHRoZSBzY2FsaW5nIGJldHdlZW4gY29udGVudEJvdW5kcyBhbmQg
Ym91bmRzLgorICAgIC8vIEJ1dCwgc2luY2Ugd2Ugd2FudCB0byB0cmFuc2Zvcm0gdGhlIHZpc2li
bGVMYXllclJlY3QsIHdoaWNoIGlzIGRlZmluZWQgaW4gY29udGVudCBzcGFjZSwgd2UKKyAgICAv
LyBoYXZlIHRvIGluY2x1ZGUgdGhhdCBzY2FsaW5nIGhlcmUuCisgICAgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggbGF5ZXJDb250ZW50U3BhY2VUb1NjcmVlblNwYWNlID0gbGF5ZXItPnNjcmVlblNw
YWNlVHJhbnNmb3JtKCk7CisgICAgbGF5ZXJDb250ZW50U3BhY2VUb1NjcmVlblNwYWNlLnNjYWxl
Tm9uVW5pZm9ybShsYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4o
bGF5ZXItPmNvbnRlbnRCb3VuZHMoKS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4obGF5ZXItPmNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOworCisg
ICAgYm9vbCBjbGlwcGVkID0gZmFsc2U7CisgICAgRmxvYXRRdWFkIHNjcmVlblNwYWNlVmlzaWJs
ZVF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGxheWVyQ29udGVudFNwYWNlVG9TY3JlZW5TcGFj
ZSwgRmxvYXRRdWFkKGxheWVyLT52aXNpYmxlTGF5ZXJSZWN0KCkpLCBjbGlwcGVkKTsKKworICAg
IHJldHVybiBzY3JlZW5TcGFjZVZpc2libGVRdWFkLmNvbnRhaW5zUG9pbnQodmlld3BvcnRQb2lu
dCk7Cit9CisKK0NDTGF5ZXJJbXBsKiBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRo
YXRJc0hpdEJ5UG9pbnQoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJJbXBsKiBm
b3VuZExheWVyID0gMDsKKworICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBs
LCBWZWN0b3I8Q0NMYXllckltcGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JB
Y3Rpb25zOjpGcm9udFRvQmFjaz4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBDQ0xheWVySXRl
cmF0b3JUeXBlIGVuZCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisKKyAgICBmb3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHJlbmRlclN1cmZhY2Vz
IGZvciBoaXQgdGVzdGluZy4KKyAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBDQ0xheWVySW1wbCogY3VycmVudExheWVy
ID0gKCppdCk7CisKKyAgICAgICAgaWYgKCFDQ0xheWVyVHJlZUhvc3RDb21tb246OnBvaW50SGl0
c0xheWVyKHZpZXdwb3J0UG9pbnQsIGN1cnJlbnRMYXllcikpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBmb3VuZExheWVyID0gY3VycmVudExheWVyOworICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICAvLyBUaGlzIGNhbiBwb3RlbnRpYWxseSByZXR1cm4gMCwgd2hpY2ggbWVh
bnMgdGhlIHZpZXdwb3J0UG9pbnQgZGlkIG5vdCBzdWNjZXNzZnVsbHkgaGl0IHRlc3QgYW55IGxh
eWVycywgbm90IGV2ZW4gdGhlIHJvb3QgbGF5ZXIuCisgICAgcmV0dXJuIGZvdW5kTGF5ZXI7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmgKaW5kZXggZjgwNDUxNjE3ZGQyNWZiMTRjZjExZmE2ZWRhZTk3NDlhZTI1ZDc2Zi4u
ODBkOGVkMDU5M2MwYjU2ZjZhZjYxMzlmYTkxNTBlOGM5NDhlZDdiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTQ3LDYgKzQ3LDEwIEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJvb3RT
Y2lzc29yUmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JS
ZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KTsKIAorICAgIHN0YXRpYyBib29s
IHBvaW50SGl0c0xheWVyKGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBDQ0xheWVySW1w
bCopOworICAgIC8vIFBlcmZvcm1zIGhpdCB0ZXN0aW5nIGZvciBhIGdpdmVuIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuCisgICAgc3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kTGF5ZXJUaGF0SXNIaXRC
eVBvaW50KGNvbnN0IEludFBvaW50JiB2aWV3cG9ydFBvaW50LCBWZWN0b3I8Q0NMYXllckltcGwq
PiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXll
clR5cGU+IHN0YXRpYyBib29sIHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVy
VHlwZSosIGludCB0YXJnZXRTdXJmYWNlTGF5ZXJJRCk7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsVXBk
YXRlSW5mbyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRleCA4NDBjNGVkM2FmOTQyZTk5NTZlY2Fm
M2I1OTI0YjZjZTZmNGViNDYwLi4wMTg3N2YzMWRiZWNiNjg0ZjIzYjkwMjRiOWI0N2Q1OGE0MjE4
ZGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI5MTAsNiArMjkxMCw1NjEgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlCYWNrRmFjZUN1bGxpbmdXaXRoUHJlc2Vy
dmVzM2RGb3JGbGF0dGVuaW4KICAgICBFWFBFQ1RfRVEoY2hpbGQxLT5pZCgpLCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0WzFdLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzFdLT5pZCgpKTsK
IH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9y
RW1wdHlMYXllckxpc3QpCit7CisgICAgLy8gSGl0IHRlc3Rpbmcgb24gYW4gZW1wdHkgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCBzaG91bGQgcmV0dXJuIGEgbnVsbCBwb2ludGVyLgorCisgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKworICAgIEludFBvaW50
IHRlc3RQb2ludCgwLCAwKTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisg
ICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMTAsIDIwKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7Cit9
CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNp
bmdsZUxheWVyKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICBy
b290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZsb2F0
UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICBy
b290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5
ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIHJlbmRlclN1
cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1t
eUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3Vy
ZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAgLy8gU2FuaXR5IGNo
ZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJUX0VRKDF1LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBIaXQgdGVzdGluZyBm
b3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0dXJuIGEgbnVsbCBwb2ludGVy
LgorICAgIEludFBvaW50IHRlc3RQb2ludCgxMDEsIDEwMSk7CisgICAgQ0NMYXllckltcGwqIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNF
KHJlc3VsdExheWVyKTsKKworICAgIHRlc3RQb2ludCA9IEludFBvaW50KC0xLCAtMSk7CisgICAg
cmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5
UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFM
U0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQgaW5zaWRl
IHNob3VsZCByZXR1cm4gdGhlIHJvb3QgbGF5ZXIuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQo
MSwgMSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXll
clRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRM
YXllci0+aWQoKSk7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg5OSwgOTkpOworICAgIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUo
cmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOwor
fQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JT
aW5nbGVQb3NpdGlvbmVkTGF5ZXIpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0g
Q0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7
CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbig1MCwgNTApOyAvLyB0aGlzIGxheWVyIGlzIHBvc2l0
aW9uZWQsIGFuZCBoaXQgdGVzdGluZyBzaG91bGQgY29ycmVjdGx5IGtub3cgd2hlcmUgdGhlIGxh
eWVyIGlzIGxvY2F0ZWQuCisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50
aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICByb290LT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0
OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VM
YXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlN
YXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVy
TGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdy
ZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRo
ZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJUX0VRKDF1LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDF1LCByb290LT5yZW5kZXJTdXJm
YWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBw
b2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0dXJuIGEgbnVsbCBwb2ludGVyLgorICAg
IEludFBvaW50IHRlc3RQb2ludCg0OSwgNDkpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXll
ciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0
UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRM
YXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgbGF5ZXIgZXhpc3RzIGF0ICgxMDEsIDEw
MSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVyZSBzaW5jZSB0aGUgcm9vdCByZW5kZXJT
dXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDEwMSwgMTAx
KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhh
dElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVY
UEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2lu
dCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJ
bnRQb2ludCg1MSwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0
NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoOTksIDk5
KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhh
dElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFT
U0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVy
LT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRU
ZXN0aW5nRm9yU2luZ2xlUm90YXRlZExheWVyKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4g
cm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRl
clN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDZW50ZXI7CisgICAgcm90YXRpb240NURlZ3Jl
ZXNBYm91dENlbnRlci50cmFuc2xhdGUoNTAsIDUwKTsKKyAgICByb3RhdGlvbjQ1RGVncmVlc0Fi
b3V0Q2VudGVyLnJvdGF0ZTNkKDAsIDAsIDQ1KTsKKyAgICByb3RhdGlvbjQ1RGVncmVlc0Fib3V0
Q2VudGVyLnRyYW5zbGF0ZSgtNTAsIC01MCk7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7
CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRTaXplIGJvdW5kcygxMDAs
IDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCByb3Rh
dGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyLCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlv
biwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0
b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgp
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNj
aXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3Qg
cmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVk
LgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAg
IEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkp
OworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIHBvaW50cyBvdXRzaWRlIHRoZSBsYXllci4KKyAg
ICAvLyBUaGVzZSBjb3JuZXJzIHdvdWxkIGhhdmUgYmVlbiBpbnNpZGUgdGhlIHVuLXRyYW5zZm9y
bWVkIGxheWVyLCBidXQgdGhleSBzaG91bGQgbm90IGhpdCB0aGUgY29ycmVjdGx5IHRyYW5zZm9y
bWVkIGxheWVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCg5OSwgOTkpOworICAgIENDTGF5ZXJJ
bXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVD
VF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxLCAxKTsK
KyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVD
VF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBp
bnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQ
b2ludCg1MCwgLTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpm
aW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwg
cmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoLTEsIDUwKTsK
KyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VS
VF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5p
ZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0
aW5nRm9yU2luZ2xlUGVyc3BlY3RpdmVMYXllcikKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKKyAgICByb290LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKworICAgIC8vIHBlcnNwZWN0aXZl
UHJvamVjdGlvbkFib3V0Q2VudGVyICogdHJhbnNsYXRpb25CeVogaXMgZGVzaWduZWQgc28gdGhh
dCB0aGUgMTAwIHggMTAwIGxheWVyIGJlY29tZXMgNTAgeCA1MCwgYW5kIHJlbWFpbnMgY2VudGVy
ZWQgYXQgKDUwLCA1MCkuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVQ
cm9qZWN0aW9uQWJvdXRDZW50ZXI7CisgICAgcGVyc3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50
ZXIudHJhbnNsYXRlKDUwLCA1MCk7CisgICAgcGVyc3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50
ZXIuYXBwbHlQZXJzcGVjdGl2ZSgxKTsKKyAgICBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENl
bnRlci50cmFuc2xhdGUoLTUwLCAtNTApOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRy
YW5zbGF0aW9uQnlaOworICAgIHRyYW5zbGF0aW9uQnlaLnRyYW5zbGF0ZTNkKDAsIDAsIC0xKTsK
KworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24o
MCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgcGVyc3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50
ZXIgKiB0cmFuc2xhdGlvbkJ5WiwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJv
dW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIFZl
Y3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPEND
TGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUg
PSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290Lmdl
dCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsK
KyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVj
dHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29y
UmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3Qu
CisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KKyAg
ICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBBU1NF
UlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKwor
ICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBwb2ludHMgb3V0c2lkZSB0aGUgbGF5ZXIuCisgICAgLy8g
VGhlc2UgY29ybmVycyB3b3VsZCBoYXZlIGJlZW4gaW5zaWRlIHRoZSB1bi10cmFuc2Zvcm1lZCBs
YXllciwgYnV0IHRoZXkgc2hvdWxkIG5vdCBoaXQgdGhlIGNvcnJlY3RseSB0cmFuc2Zvcm1lZCBs
YXllci4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoMjQsIDI0KTsKKyAgICBDQ0xheWVySW1wbCog
cmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5
UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFM
U0UocmVzdWx0TGF5ZXIpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzYsIDc2KTsKKyAg
ICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0
QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9G
QUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNp
ZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2lu
dCgyNiwgMjYpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVz
dWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzQsIDc0KTsKKyAg
ICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0
QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9U
UlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgp
KTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5n
Rm9yU2luZ2xlTGF5ZXJXaXRoU2NhbGVkQ29udGVudHMpCit7CisgICAgLy8gQSBsYXllcidzIHZp
c2libGVMYXllclJlY3QgaXMgYWN0dWFsbHkgaW4gdGhlIGxheWVyJ3MgY29udGVudCBzcGFjZS4g
VGhlCisgICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm0gY29udmVydHMgZnJvbSB0aGUgbGF5ZXIn
cyBvcmlnaW4gc3BhY2UgdG8gc2NyZWVuIHNwYWNlLiBUaGlzCisgICAgLy8gdGVzdCBtYWtlcyBz
dXJlIHRoYXQgaGl0IHRlc3Rpbmcgd29ya3MgY29ycmVjdGx5IGFjY291bnRzIGZvciB0aGUgY29u
dGVudHMgc2NhbGUuCisgICAgLy8gQSBjb250ZW50c1NjYWxlIHRoYXQgaXMgbm90IDEgZWZmZWN0
aXZlbHkgZm9yY2VzIGEgbm9uLWlkZW50aXR5IHRyYW5zZm9ybSBiZXR3ZWVuCisgICAgLy8gbGF5
ZXIncyBjb250ZW50IHNwYWNlIGFuZCBsYXllcidzIG9yaWdpbiBzcGFjZSwgd2hpY2ggaXMgbm90
IGluY2x1ZGVkIGluIHRoZQorICAgIC8vIHNjcmVlblNwYWNlVHJhbnNmb3Jtbi4gVGhlIGhpdCB0
ZXN0aW5nIGNvZGUgbXVzdCB0YWtlIHRoaXMgaW50byBhY2NvdW50LgorICAgIC8vCisgICAgLy8g
VG8gdGVzdCB0aGlzLCB0aGUgbGF5ZXIgaXMgcG9zaXRpb25lZCBhdCAoMjUsIDI1KSwgYW5kIGlz
IHNpemUgKDUwLCA1MCkuIElmCisgICAgLy8gY29udGVudHNTY2FsZSBpcyBpZ25vcmVkLCB0aGVu
IGhpdCB0ZXN0aW5nIHdpbGwgbWlzLWludGVycHJldCB0aGUgdmlzaWJsZUxheWVyUmVjdAorICAg
IC8vIGFzIGJlaW5nIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgYm91bmRzIG9mIHRoZSBsYXllci4K
KyAgICAvLworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSgxMjM0NSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbigyNSwgMjUpOworICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7CisgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRl
bnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3Qt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIHJvb3QtPnNldENvbnRlbnRCb3VuZHMoSW50
U2l6ZSgxMDAsIDEwMCkpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAg
ICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1
bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4
LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3Qs
IDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2Fs
Y3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9h
dFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0
IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2Nl
bmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIC8vIFRoZSB2aXNpYmxlTGF5ZXJSZWN0IGlzIGFj
dHVhbGx5IDEwMHgxMDAsIGV2ZW4gdGhvdWdoIHRoZSBsYXlvdXQgc2l6ZSBvZiB0aGUgbGF5ZXIg
aXMgNTB4NTAsIHBvc2l0aW9uZWQgYXQgMjV4MjUuCisgICAgRVhQRUNUX0lOVF9SRUNUX0VRKElu
dFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpLCByb290LT52aXNpYmxl
TGF5ZXJSZWN0KCkpOworICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5z
aXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxp
c3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQgb3V0c2lkZSB0
aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKyAgICBJbnRQb2ludCB0ZXN0
UG9pbnQoMjQsIDI0KTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAg
Ly8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBpdCBzaG91bGQg
bm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFjZSB3b3VsZCBj
bGFtcCBpdC4KKyAgICAvLyBUaGlzIGNhc2UgaW4gcGFydGljdWxhciBpcyBsaWtlbHkgdG8gZmFp
bCBpZiBjb250ZW50cyBzY2FsZSBpcyBub3QgY29ycmVjdGx5IGFjY291bnRlZCBmb3IuCisgICAg
dGVzdFBvaW50ID0gSW50UG9pbnQoNzYsIDc2KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAg
ICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9v
dCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgyNiwgMjYpOworICAgIHJlc3VsdExh
eWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRl
c3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0
TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAg
dGVzdFBvaW50ID0gSW50UG9pbnQoNzQsIDc0KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBF
WFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yQ2xpcHBlZE92ZXJmbG93TGF5ZXIp
Cit7CisgICAgLy8gVGVzdCB0aGF0IGhpdC10ZXN0aW5nIHdpbGwgb25seSB3b3JrIGZvciB0aGUg
dmlzaWJsZSBwb3J0aW9uIG9mIGEgbGF5ZXIsIGFuZCBub3QgdGhlIGVudGlyZSBsYXllciBib3Vu
ZHMuCisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDEyMyk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRl
clN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRT
aXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3Np
dGlvbigyNSwgMjUpOyAvLyB0aGlzIGxheWVyIGlzIHBvc2l0aW9uZWQsIGFuZCBoaXQgdGVzdGlu
ZyBzaG91bGQgY29ycmVjdGx5IGtub3cgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQuCisgICAg
SW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3Np
dGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0cnVlKTsK
KworICAgIHsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5ZXJJbXBs
OjpjcmVhdGUoNDU2KTsKKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KC01MCwgLTUwKTsK
KyAgICAgICAgYm91bmRzID0gSW50U2l6ZSgzMDAsIDMwMCk7CisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGNoaWxkLT5z
ZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVh
c2UoKSk7CisgICAgfQorCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBp
bnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0
ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAs
IGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJl
Y3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRl
c3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFy
aW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQgb3V0
c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKyAgICAvLyBEZXNw
aXRlIHRoZSBjaGlsZCBsYXllciBiZWluZyB2ZXJ5IGxhcmdlLCBpdCBzaG91bGQgYmUgY2xpcHBl
ZCB0byB0aGUgcm9vdCBsYXllcidzIGJvdW5kcy4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoMjQs
IDI0KTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gRXZlbiB0
aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBpdCBzaG91bGQgbm90IGJlIHZp
c2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFjZSB3b3VsZCBjbGFtcCBpdC4K
KyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NiwgNzYpOworICAgIHJlc3VsdExheWVyID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsK
KworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJuIHRo
ZSBjaGlsZCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgyNiwgMjYpOworICAgIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUo
cmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSg0NTYsIHJlc3VsdExheWVyLT5pZCgpKTsKKwor
ICAgIHRlc3RQb2ludCA9IEludFBvaW50KDc0LCA3NCk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7Cisg
ICAgRVhQRUNUX0VRKDQ1NiwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVycykKK3sK
KyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOwor
ICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNl
KCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAs
IDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4Owor
ICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oMCwg
MCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAgIHNldExheWVyUHJvcGVydGll
c0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBh
bmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRl
bnQodHJ1ZSk7CisKKyAgICB7CisgICAgICAgIC8vIGNoaWxkIDEgYW5kIGNoaWxkMiBhcmUgaW5p
dGlhbGl6ZWQgdG8gb3ZlcmxhcCBiZXR3ZWVuIHg9NTAgYW5kIHg9NjAuCisgICAgICAgIC8vIGdy
YW5kQ2hpbGQgaXMgc2V0IHRvIG92ZXJsYXAgYm90aCBjaGlsZDEgYW5kIGNoaWxkMiBiZXR3ZWVu
IHk9NTAgYW5kIHk9NjAuCisgICAgICAgIC8vIFRoZSBleHBlY3RlZCBzdGFja2luZyBvcmRlciBp
czoKKyAgICAgICAgLy8gICAoZnJvbnQpIGNoaWxkMiwgKHNlY29uZCkgZ3JhbmRDaGlsZCwgKHRo
aXJkKSBjaGlsZDEsIGFuZCAoYmFjaykgdGhlIHJvb3QgbGF5ZXIgYmVoaW5kIGFsbCBvdGhlciBs
YXllcnMuCisKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDIpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGls
ZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDQpOworCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQ
b2ludCgxMCwgMTApOworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDUwLCA1MCk7CisgICAgICAg
IHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQxLmdldCgpLCBpZGVudGl0eU1hdHJp
eCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAg
ICAgICBjaGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQoNTAsIDEwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSg1MCwgNTApOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNl
KTsKKyAgICAgICAgY2hpbGQyLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgLy8g
UmVtZW1iZXIgdGhhdCBncmFuZENoaWxkIGlzIHBvc2l0aW9uZWQgd2l0aCByZXNwZWN0IHRvIGl0
cyBwYXJlbnQgKGkuZS4gY2hpbGQxKS4KKyAgICAgICAgLy8gSW4gc2NyZWVuIHNwYWNlLCB0aGUg
aW50ZW5kZWQgcG9zaXRpb24gaXMgKDEwLCA1MCksIHdpdGggc2l6ZSAxMDAgeCA1MC4KKyAgICAg
ICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KDAsIDQwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6
ZSgxMDAsIDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENo
aWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0
aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDEtPnNldERyYXdzQ29udGVu
dCh0cnVlKTsKKworICAgICAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMS5yZWxlYXNlKCkpOworICAgICAgICBy
b290LT5hZGRDaGlsZChjaGlsZDIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBDQ0xheWVySW1w
bCogY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCog
Y2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3Jh
bmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBWZWN0b3I8Q0NM
YXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1w
bCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOwor
ICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2ls
bCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAg
Ly8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJU
X1RSVUUoY2hpbGQxKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZDIpOworICAgIEFTU0VSVF9UUlVF
KGdyYW5kQ2hpbGQxKTsKKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qu
c2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoNHUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJM
aXN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKVswXS0+aWQoKSk7IC8vIHJvb3QgbGF5ZXIKKyAgICBBU1NFUlRfRVEoMiwgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7IC8vIGNoaWxkMQorICAg
IEFTU0VSVF9FUSg0LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzJdLT5pZCgp
KTsgLy8gZ3JhbmRDaGlsZDEKKyAgICBBU1NFUlRfRVEoMywgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKVszXS0+aWQoKSk7IC8vIGNoaWxkMgorCisgICAgLy8gTm90aGluZyBvdmVy
bGFwcyB0aGUgcm9vdExheWVyIGF0ICgxLCAxKSwgc28gaGl0IHRlc3RpbmcgdGhlcmUgc2hvdWxk
IGZpbmQgdGhlIHJvb3QgbGF5ZXIuCisgICAgSW50UG9pbnQgdGVzdFBvaW50ID0gSW50UG9pbnQo
MSwgMSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgx
LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoMTUsIDE1KSwgY2hpbGQxIGFuZCBy
b290IGFyZSB0aGUgb25seSBsYXllcnMuIGNoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3Au
CisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMTUsIDE1KTsKKyAgICByZXN1bHRMYXllciA9IEND
TGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsK
KyAgICBFWFBFQ1RfRVEoMiwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDUxLCAy
MCksIGNoaWxkMSBhbmQgY2hpbGQyIG92ZXJsYXAuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBv
biB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNTEsIDIwKTsKKyAgICByZXN1bHRMYXll
ciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0
UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExh
eWVyKTsKKyAgICBFWFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQg
KDgwLCA1MSksIGNoaWxkMiBhbmQgZ3JhbmRDaGlsZDEgb3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVj
dGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg4MCwgNTEpOworICAg
IHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRC
eVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RS
VUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7CisK
KyAgICAvLyBBdCAoNTEsIDUxKSwgYWxsIGxheWVycyBvdmVybGFwIGVhY2ggb3RoZXIuIGNoaWxk
MiBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3Agb2YgYWxsIG90aGVyIGxheWVycy4KKyAgICB0ZXN0
UG9pbnQgPSBJbnRQb2ludCg1MSwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVD
VF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoMjAsIDUxKSwgY2hpbGQx
IGFuZCBncmFuZENoaWxkMSBvdmVybGFwLiBncmFuZENoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBv
biB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMjAsIDUxKTsKKyAgICByZXN1bHRMYXll
ciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0
UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExh
eWVyKTsKKyAgICBFWFBFQ1RfRVEoNCwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVy
TGlzdHMpCit7CisgICAgLy8KKyAgICAvLyBUaGUgZ2VvbWV0cnkgaXMgc2V0IHVwIHNpbWlsYXJs
eSB0byB0aGUgcHJldmlvdXMgY2FzZSwgYnV0CisgICAgLy8gYWxsIGxheWVycyBhcmUgZm9yY2Vk
IHRvIGJlIHJlbmRlclN1cmZhY2VzIG5vdy4KKyAgICAvLworCisgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxKTsKKyAgICByb290LT5jcmVhdGVSZW5k
ZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJ
bnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hv
cigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDAsIDApOworICAgIEludFNpemUgYm91
bmRzKDEwMCwgMTAwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0
KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91
bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgewor
ICAgICAgICAvLyBjaGlsZCAxIGFuZCBjaGlsZDIgYXJlIGluaXRpYWxpemVkIHRvIG92ZXJsYXAg
YmV0d2VlbiB4PTUwIGFuZCB4PTYwLgorICAgICAgICAvLyBncmFuZENoaWxkIGlzIHNldCB0byBv
dmVybGFwIGJvdGggY2hpbGQxIGFuZCBjaGlsZDIgYmV0d2VlbiB5PTUwIGFuZCB5PTYwLgorICAg
ICAgICAvLyBUaGUgZXhwZWN0ZWQgc3RhY2tpbmcgb3JkZXIgaXM6CisgICAgICAgIC8vICAgKGZy
b250KSBjaGlsZDIsIChzZWNvbmQpIGdyYW5kQ2hpbGQsICh0aGlyZCkgY2hpbGQxLCBhbmQgKGJh
Y2spIHRoZSByb290IGxheWVyIGJlaGluZCBhbGwgb3RoZXIgbGF5ZXJzLgorCisgICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICAg
ICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOwor
ICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxID0gQ0NMYXllckltcGw6OmNy
ZWF0ZSg0KTsKKworICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoMTAsIDEwKTsKKyAgICAg
ICAgYm91bmRzID0gSW50U2l6ZSg1MCwgNTApOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGNoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBh
bmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgY2hpbGQxLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGNoaWxkMS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRy
dWUpOworCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCg1MCwgMTApOworICAgICAgICBi
b3VuZHMgPSBJbnRTaXplKDUwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQyLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hv
ciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgICAgICBjaGlsZDItPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKyAgICAgICAgY2hpbGQyLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7
CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCBncmFuZENoaWxkIGlzIHBvc2l0aW9uZWQgd2l0
aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQgKGkuZS4gY2hpbGQxKS4KKyAgICAgICAgLy8gSW4gc2Ny
ZWVuIHNwYWNlLCB0aGUgaW50ZW5kZWQgcG9zaXRpb24gaXMgKDEwLCA1MCksIHdpdGggc2l6ZSAx
MDAgeCA1MC4KKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KDAsIDQwKTsKKyAgICAgICAg
Ym91bmRzID0gSW50U2l6ZSgxMDAsIDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDEt
PnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDEtPnNldEZvcmNlUmVu
ZGVyU3VyZmFjZSh0cnVlKTsKKworICAgICAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQx
LnJlbGVhc2UoKSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkMS5yZWxlYXNlKCkpOwor
ICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBD
Q0xheWVySW1wbCogY2hpbGQxID0gcm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xh
eWVySW1wbCogY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4oKVsxXS5nZXQoKTsKKyAgICBDQ0xheWVy
SW1wbCogZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxD
Q0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXpl
ID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5n
ZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJl
Y3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3Nv
clJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0
LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisg
ICAgQVNTRVJUX1RSVUUoY2hpbGQxKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZDIpOworICAgIEFT
U0VSVF9UUlVFKGdyYW5kQ2hpbGQxKTsKKyAgICBBU1NFUlRfVFJVRShjaGlsZDEtPnJlbmRlclN1
cmZhY2UoKSk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9F
USg0dSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgzdSwg
cm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOyAvLyBUaGUgcm9vdCBz
dXJmYWNlIGhhcyB0aGUgcm9vdCBsYXllciwgYW5kIGNoaWxkMSdzIGFuZCBjaGlsZDIncyByZW5k
ZXJTdXJmYWNlcy4KKyAgICBBU1NFUlRfRVEoMnUsIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKS5zaXplKCkpOyAvLyBUaGUgY2hpbGQxIHN1cmZhY2UgaGFzIHRoZSBjaGlsZDEg
bGF5ZXIgYW5kIGdyYW5kQ2hpbGQxJ3MgcmVuZGVyU3VyZmFjZS4KKyAgICBBU1NFUlRfRVEoMXUs
IGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEFTU0VS
VF9FUSgxdSwgZ3JhbmRDaGlsZDEtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgp
KTsKKyAgICBBU1NFUlRfRVEoMSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7IC8v
IHJvb3QgbGF5ZXIKKyAgICBBU1NFUlRfRVEoMiwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+
aWQoKSk7IC8vIGNoaWxkMQorICAgIEFTU0VSVF9FUSg0LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
WzJdLT5pZCgpKTsgLy8gZ3JhbmRDaGlsZDEKKyAgICBBU1NFUlRfRVEoMywgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdFszXS0+aWQoKSk7IC8vIGNoaWxkMgorCisgICAgLy8gTm90aGluZyBvdmVybGFw
cyB0aGUgcm9vdExheWVyIGF0ICgxLCAxKSwgc28gaGl0IHRlc3RpbmcgdGhlcmUgc2hvdWxkIGZp
bmQgdGhlIHJvb3QgbGF5ZXIuCisgICAgSW50UG9pbnQgdGVzdFBvaW50ID0gSW50UG9pbnQoMSwg
MSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxLCBy
ZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoMTUsIDE1KSwgY2hpbGQxIGFuZCByb290
IGFyZSB0aGUgb25seSBsYXllcnMuIGNoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisg
ICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMTUsIDE1KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAg
ICBFWFBFQ1RfRVEoMiwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDUxLCAyMCks
IGNoaWxkMSBhbmQgY2hpbGQyIG92ZXJsYXAuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBvbiB0
b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNTEsIDIwKTsKKyAgICByZXN1bHRMYXllciA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9p
bnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVy
KTsKKyAgICBFWFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDgw
LCA1MSksIGNoaWxkMiBhbmQgZ3JhbmRDaGlsZDEgb3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVjdGVk
IHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg4MCwgNTEpOworICAgIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUo
cmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAg
ICAvLyBBdCAoNTEsIDUxKSwgYWxsIGxheWVycyBvdmVybGFwIGVhY2ggb3RoZXIuIGNoaWxkMiBp
cyBleHBlY3RlZCB0byBiZSBvbiB0b3Agb2YgYWxsIG90aGVyIGxheWVycy4KKyAgICB0ZXN0UG9p
bnQgPSBJbnRQb2ludCg1MSwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0
Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9F
USgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoMjAsIDUxKSwgY2hpbGQxIGFu
ZCBncmFuZENoaWxkMSBvdmVybGFwLiBncmFuZENoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0
b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMjAsIDUxKTsKKyAgICByZXN1bHRMYXllciA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9p
bnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVy
KTsKKyAgICBFWFBFQ1RfRVEoNCwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCisKIC8vIEZJWE1F
OgogLy8gY29udGludWUgd29ya2luZyBvbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Njg5NDIKIC8vICAtIGFkZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQg
Y2hhbmdlcyB0aGUgImNlbnRlciBwb2ludCIK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147425</attachid>
            <date>2012-06-13 15:29:32 -0700</date>
            <delta_ts>2012-06-13 17:06:25 -0700</delta_ts>
            <desc>Avoids visibleLayerRect problems and quad limitations</desc>
            <filename>bug-88972-20120613152932.patch</filename>
            <type>text/plain</type>
            <size>50422</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMTQ4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTg1NTkxZDc1OTM1ZTY1
YjFmNDE2MDUyMjdiNzZhZmE1ZTE4ZjUxNi4uY2U3NDI4MmE5ZDgwZDcxYmE2ZmIwNjQ4MDlhZTU4
YTlhMjgxMWQ2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTA2LTEzICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGhpdC10ZXN0aW5nIGZvciBpbXBsLXNpZGUgaW5wdXQgaGFuZGxpbmcgaW4gYWNj
ZWxlcmF0ZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgb3JpZ2luYWwgaGl0IHRlc3RpbmcgY29kZSBieSBTYW1pIEt5b3N0aWxh
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIHNpbXBsZSBpbXBsLXNpZGUgaGl0
LXRlc3RpbmcgaGVscGVyCisgICAgICAgIGZ1bmN0aW9uLiBBdCB0aGlzIHRpbWUsIHRoZSBtYWlu
IG1vdGl2YXRpb24gZm9yIHRoaXMgaXMgc28gdGhhdAorICAgICAgICBjb21wb3NpdGVkIHNjcm9s
bGFibGUgbGF5ZXJzIGNhbiBiZSBzY3JvbGxlZCBieSB0aGUgaW1wbCB0aHJlYWQgLS0KKyAgICAg
ICAgYW5kIGEgcHJlcmVxdWlzaXRlIGZvciB0aGF0IGlzIHRoZSBhYmlsaXR5IHRvIGhpdC10ZXN0
IG9uIHRoZSBpbXBsCisgICAgICAgIHRocmVhZCwgdG8gZGV0ZXJtaW5lIHdoZXJlIHRoZSBzY3Jv
bGxpbmcgYWN0aW9uIHNob3VsZCBiZSBhcHBsaWVkLgorCisgICAgICAgIDEwIHVuaXQgdGVzdHMg
YWRkZWQgdG8gQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisgICAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yRW1wdHlMYXllckxpc3QKKyAg
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JTaW5n
bGVMYXllcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVz
dGluZ0ZvclNpbmdsZVBvc2l0aW9uZWRMYXllcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZVJvdGF0ZWRMYXllcgorICAgICAgICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZVBlcnNw
ZWN0aXZlTGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhp
dFRlc3RpbmdGb3JTaW5nbGVMYXllcldpdGhTY2FsZWRDb250ZW50cworICAgICAgICAgIENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0ZvclNpbXBsZUNsaXBwZWRMYXll
cgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QudmVyaWZ5SGl0VGVzdGluZ0Zv
ck11bHRpQ2xpcHBlZFJvdGF0ZWRMYXllcgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
blRlc3QudmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJzCisgICAgICAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXllckxpc3Rz
CisgICAgICAgIAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwb2ludEhpdHNSZWN0KToK
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRJc0NsaXBwZWRCeVN1
cmZhY2VPckNsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmg6CisgICAgICAgIChDQ0xheWVy
VHJlZUhvc3RDb21tb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTWF0aFV0aWwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJvamVjdEhvbW9nZW5lb3VzUG9p
bnQpOgorICAgICAgICAoV2ViQ29yZTo6bWFwSG9tb2dlbmVvdXNQb2ludCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYXRo
VXRpbDo6bWFwQ2xpcHBlZFF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYXRoVXRpbDo6bWFw
UXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ01hdGhVdGlsOjpwcm9qZWN0UG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NNYXRoVXRpbC5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDQ01hdGhVdGlsKToK
KwogMjAxMi0wNi0xMiAgTU9SSVRBIEhhamltZSAgPG1vcnJpdGFAZ29vZ2xlLmNvbT4KIAogICAg
ICAgICBTaGFkb3cgUHNldWRvIElEIHNob3VsZCBiZSBhYmxlIHRvIG5lc3QgdG8gcG9pbnQgbmVz
dGVkIHNoYWRvdyBET00uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDc2YjdmMjNmYTM3
M2FlYTY1ZDkwMTdjZGIxYmNlNWQ5NjVjMGU1MjMuLmEzNzQ3NmI3ODAyNDEyYmZiMTk0NThhYWY3
NDEyYTkzYmQ1OTUzNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIg
QEAKKzIwMTItMDYtMTMgIFNoYXduIFNpbmdoICA8c2hhd25zaW5naEBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgW2Nocm9taXVtXSBJbXBsZW1lbnQgaGl0LXRlc3RpbmcgZm9yIGltcGwtc2lkZSBp
bnB1dCBoYW5kbGluZyBpbiBhY2NlbGVyYXRlZCBjb21wb3NpdG9yCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODk3MgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdC5jcHA6CisKIDIwMTItMDYtMTIgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBvcnQgQ2FudmFzMkRMYXllckJyaWRnZSBv
dmVyIHRvIFdlYkV4dGVybmFsVGV4dHVyZUxheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAppbmRleCBiYjI4NjE0OWYxNTZjMjZlYjAyMWY0M2RiZTZkMDFiZmYz
Nzk3ZWZhLi5iNmJiN2UwM2VlMzljNTBhNTBkMDg4YThkMzg2ODRlZDdmYjNjMzJmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKQEAgLTg3Miw0ICs4NzIsNzkg
QEAgdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4KICAgICBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzSW50ZXJuYWw8Q0NMYXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRl
clN1cmZhY2U+KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIHJvb3RTY2lzc29yUmVjdCk7CiB9CiAK
K3N0YXRpYyBib29sIHBvaW50SGl0c1JlY3QoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQs
IGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBsb2NhbFNwYWNlVG9TY3JlZW5TcGFjZVRy
YW5zZm9ybSwgRmxvYXRSZWN0IGxvY2FsU3BhY2VSZWN0KQoreworICAgIC8vIE5vdGU6IGl0cyBw
b3NzaWJsZSB0byBjb21wdXRlIHRoZSBoaXQgdGVzdCBpbiB0d28gZXF1aXZhbGVudCB3YXlzOgor
ICAgIC8vICAgIGludmVyc2UtcHJvamVjdCB0aGUgcG9pbnQgaW50byBsb2NhbCBzcGFjZQorICAg
IC8vICAgIGZvcndhcmQtdHJhbnNmb3JtIHRoZSByZWN0IHRvIHNjcmVlbiBzcGFjZQorICAgIC8v
CisgICAgLy8gSXRzIG5vdCBvYnZpb3VzIHdoaWNoIG9uZSB3b3VsZCBwZXJmb3JtIGJldHRlciwg
b3Igd2hpY2ggb25lIHdvdWxkIGJlIG1vcmUgcm9idXN0CisgICAgLy8gdG8gdyA8IDAgaG9tb2dl
bmVvdXMgY2xpcHBpbmcgaXNzdWVzLiBGb3Igbm93LCB3ZSBzaW1wbHkgb3B0IGZvciB0aGUgaW52
ZXJzZS1wcm9qZWN0CisgICAgLy8gYXBwcm9hY2guCisgICAgLy8KKworICAgIC8vIFRyYW5zZm9y
bSB0aGUgaGl0IHRlc3QgcG9pbnQgZnJvbSBzY3JlZW4gc3BhY2UgdG8gdGhlIGxvY2FsIHNwYWNl
IG9mIHRoZSBnaXZlbiByZWN0LgorICAgIGJvb2wgY2xpcHBlZCA9IGZhbHNlOworICAgIEZsb2F0
UG9pbnQgaGl0VGVzdFBvaW50SW5Mb2NhbFNwYWNlID0gQ0NNYXRoVXRpbDo6cHJvamVjdFBvaW50
KGxvY2FsU3BhY2VUb1NjcmVlblNwYWNlVHJhbnNmb3JtLmludmVyc2UoKSwgRmxvYXRQb2ludCh2
aWV3cG9ydFBvaW50KSwgY2xpcHBlZCk7CisKKyAgICAvLyBJZiBwcm9qZWN0UG9pbnQgY291bGQg
bm90IHByb2plY3QgdG8gYSB2YWxpZCB2YWx1ZSwgdGhlbiB3ZSBhc3N1bWUgdGhhdCB0aGlzIHBv
aW50IGRvZXNuJ3QgaGl0IHRoaXMgcmVjdC4KKyAgICBpZiAoY2xpcHBlZCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGxvY2FsU3BhY2VSZWN0LmNvbnRhaW5zKGhpdFRlc3RQ
b2ludEluTG9jYWxTcGFjZSk7Cit9CisKK3N0YXRpYyBib29sIHBvaW50SXNDbGlwcGVkQnlTdXJm
YWNlT3JDbGlwUmVjdChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgQ0NMYXllckltcGwq
IGxheWVyKQoreworICAgIENDTGF5ZXJJbXBsKiBjdXJyZW50TGF5ZXIgPSBsYXllcjsKKworICAg
IC8vIFdhbGsgdXAgdGhlIGxheWVyIHRyZWUgYW5kIGhpdC10ZXN0IGFueSByZW5kZXJTdXJmYWNl
cyBhbmQgYW55IGxheWVyIGNsaXBSZWN0cyB0aGF0IGFyZSBhY3RpdmUuCisgICAgd2hpbGUgKGN1
cnJlbnRMYXllcikgeworICAgICAgICBpZiAoY3VycmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwgY3VycmVudExheWVyLT5yZW5kZXJTdXJm
YWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIGN1cnJlbnRMYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5jb250ZW50UmVjdCgpKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAg
IC8vIE5vdGUgdGhhdCBjbGlwUmVjdHMgYXJlIGFjdHVhbGx5IGluIHRhcmdldFN1cmZhY2Ugc3Bh
Y2UsIHNvIHRoZSB0cmFuc2Zvcm0gd2UKKyAgICAgICAgLy8gaGF2ZSB0byBwcm92aWRlIGlzIHRo
ZSB0YXJnZXQgc3VyZmFjZSdzIHNjcmVlblNwYWNlVHJhbnNmb3JtLgorICAgICAgICBpZiAoY3Vy
cmVudExheWVyLT51c2VzTGF5ZXJDbGlwcGluZygpICYmICFwb2ludEhpdHNSZWN0KHZpZXdwb3J0
UG9pbnQsIGN1cnJlbnRMYXllci0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRy
YW5zZm9ybSgpLCBjdXJyZW50TGF5ZXItPmNsaXBSZWN0KCkpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgY3VycmVudExheWVyID0gY3VycmVudExheWVyLT5wYXJlbnQoKTsK
KyAgICB9CisKKyAgICAvLyBJZiB3ZSBoYXZlIGZpbmlzaGVkIHdhbGtpbmcgYWxsIGFuY2VzdG9y
cyB3aXRob3V0IGhhdmluZyBhbHJlYWR5IGV4aXRlZCwgdGhlbiB0aGUgcG9pbnQgaXMgbm90IGNs
aXBwZWQgYnkgYW55IGFuY2VzdG9ycy4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NDTGF5ZXJJ
bXBsKiBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQoY29u
c3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KQoreworICAgIENDTGF5ZXJJbXBsKiBmb3VuZExheWVyID0gMDsKKwor
ICAgIHR5cGVkZWYgQ0NMYXllckl0ZXJhdG9yPENDTGF5ZXJJbXBsLCBWZWN0b3I8Q0NMYXllcklt
cGwqPiwgQ0NSZW5kZXJTdXJmYWNlLCBDQ0xheWVySXRlcmF0b3JBY3Rpb25zOjpGcm9udFRvQmFj
az4gQ0NMYXllckl0ZXJhdG9yVHlwZTsKKyAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGVuZCA9IEND
TGF5ZXJJdGVyYXRvclR5cGU6OmVuZCgmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisKKyAgICBm
b3IgKENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigm
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAvLyBX
ZSBkb24ndCB3YW50IHRvIGNvbnNpZGVyIHJlbmRlclN1cmZhY2VzIGZvciBoaXQgdGVzdGluZy4K
KyAgICAgICAgaWYgKCFpdC5yZXByZXNlbnRzSXRzZWxmKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBDQ0xheWVySW1wbCogY3VycmVudExheWVyID0gKCppdCk7CisKKyAgICAg
ICAgRmxvYXRSZWN0IGxheWVyUmVjdChGbG9hdFBvaW50Ojp6ZXJvKCksIGN1cnJlbnRMYXllci0+
Ym91bmRzKCkpOworICAgICAgICBpZiAoIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwgY3Vy
cmVudExheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLCBsYXllclJlY3QpKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgdGhpbmsgdGhlIHBv
aW50IGRvZXMgaGl0IHRoZSBsYXllciwgYnV0IHdlIG5lZWQgdG8gd2FsayB1cAorICAgICAgICAv
LyB0aGUgcGFyZW50cyB0byBlbnN1cmUgdGhhdCB0aGUgbGF5ZXIgd2FzIG5vdCBjbGlwcGVkIGlu
IHN1Y2ggYSB3YXkgdGhhdCB0aGUKKyAgICAgICAgLy8gaGl0IHBvaW50IGFjdHVhbGx5IHNob3Vs
ZCBub3QgaGl0IHRoZSBsYXllci4KKyAgICAgICAgaWYgKHBvaW50SXNDbGlwcGVkQnlTdXJmYWNl
T3JDbGlwUmVjdCh2aWV3cG9ydFBvaW50LCBjdXJyZW50TGF5ZXIpKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgZm91bmRMYXllciA9IGN1cnJlbnRMYXllcjsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgLy8gVGhpcyBjYW4gcG90ZW50aWFsbHkgcmV0dXJuIDAsIHdoaWNo
IG1lYW5zIHRoZSB2aWV3cG9ydFBvaW50IGRpZCBub3Qgc3VjY2Vzc2Z1bGx5IGhpdCB0ZXN0IGFu
eSBsYXllcnMsIG5vdCBldmVuIHRoZSByb290IGxheWVyLgorICAgIHJldHVybiBmb3VuZExheWVy
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCmluZGV4IGY4MDQ1MTYxN2RkMjVmYjE0Y2YxMWZhNmVkYWU5NzQ5YWUyNWQ3
NmYuLmU1ZTRmZDlhMmMyMzgyYjllOTI1Y2E3OTQ5ODU5Mzc3MTY4MjI5ZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCkBAIC00Nyw2ICs0Nyw5IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxD
Q0xheWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBjb25zdCBGbG9hdFJlY3QmIHJv
b3RTY2lzc29yUmVjdCk7CiAgICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KTsKIAorICAgIC8vIFBlcmZv
cm1zIGhpdCB0ZXN0aW5nIGZvciBhIGdpdmVuIHJlbmRlclN1cmZhY2VMYXllckxpc3QuCisgICAg
c3RhdGljIENDTGF5ZXJJbXBsKiBmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KGNvbnN0IEludFBv
aW50JiB2aWV3cG9ydFBvaW50LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+IHN0YXRpYyBib29s
IHJlbmRlclN1cmZhY2VDb250cmlidXRlc1RvVGFyZ2V0KExheWVyVHlwZSosIGludCB0YXJnZXRT
dXJmYWNlTGF5ZXJJRCk7CiAKICAgICBzdHJ1Y3QgU2Nyb2xsVXBkYXRlSW5mbyB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhV
dGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TWF0aFV0aWwuY3BwCmluZGV4IDg2NzQ2OWRkZTI0ZjBjY2U1ZDU1OWM3NWQ5YjZlMGNjMmVkMTc5
MzkuLjg0NzFiM2U2YTEwMTM2NzhiMDMxYWEwZjU3NTk1ZTY4OWZmMmMwNjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TWF0aFV0aWwuY3BwCkBAIC0zNSw3ICszNSw3IEBAIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIEhvbW9nZW5lb3Vz
Q29vcmRpbmF0ZSBwcm9qZWN0UG9pbnQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcCkKK3N0YXRpYyBIb21vZ2VuZW91c0Nvb3JkaW5h
dGUgcHJvamVjdEhvbW9nZW5lb3VzUG9pbnQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICAvLyBJbiB0aGlzIGNhc2Us
IHRoZSBsYXllciB3ZSBhcmUgdHJ5aW5nIHRvIHByb2plY3Qgb250byBpcyBwZXJwZW5kaWN1bGFy
IHRvIHJheQogICAgIC8vIChwb2ludCBwIGFuZCB6LWF4aXMgZGlyZWN0aW9uKSB0aGF0IHdlIGFy
ZSB0cnlpbmcgdG8gcHJvamVjdC4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlCkBAIC01Nyw3ICs1Nyw3
IEBAIHN0YXRpYyBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgcHJvamVjdFBvaW50KGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2ZvCiAgICAgcmV0dXJuIEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZShvdXRYLCBvdXRZLCBvdXRaLCBvdXRXKTsKIH0KIAotc3RhdGljIEhvbW9nZW5lb3VzQ29v
cmRpbmF0ZSBtYXBQb2ludChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
LCBjb25zdCBGbG9hdFBvaW50JiBwKQorc3RhdGljIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBtYXBI
b21vZ2VuZW91c1BvaW50KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGNvbnN0IEZsb2F0UG9pbnQmIHApCiB7CiAgICAgZG91YmxlIHggPSBwLngoKTsKICAgICBkb3Vi
bGUgeSA9IHAueSgpOwpAQCAtMTMwLDEwICsxMzAsMTAgQEAgRmxvYXRSZWN0IENDTWF0aFV0aWw6
Om1hcENsaXBwZWRSZWN0KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0s
IGMKIAogICAgIC8vIEFwcGx5IHRoZSB0cmFuc2Zvcm0sIGJ1dCByZXRhaW4gdGhlIHJlc3VsdCBp
biBob21vZ2VuZW91cyBjb29yZGluYXRlcy4KICAgICBGbG9hdFF1YWQgcSA9IEZsb2F0UXVhZChG
bG9hdFJlY3Qoc3JjUmVjdCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9IG1hcFBv
aW50KHRyYW5zZm9ybSwgcS5wMSgpKTsKLSAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDIgPSBt
YXBQb2ludCh0cmFuc2Zvcm0sIHEucDIoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgz
ID0gbWFwUG9pbnQodHJhbnNmb3JtLCBxLnAzKCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0
ZSBoNCA9IG1hcFBvaW50KHRyYW5zZm9ybSwgcS5wNCgpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3Jk
aW5hdGUgaDEgPSBtYXBIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wMSgpKTsKKyAgICBI
b21vZ2VuZW91c0Nvb3JkaW5hdGUgaDIgPSBtYXBIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwg
cS5wMigpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDMgPSBtYXBIb21vZ2VuZW91c1Bv
aW50KHRyYW5zZm9ybSwgcS5wMygpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDQgPSBt
YXBIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wNCgpKTsKIAogICAgIHJldHVybiBjb21w
dXRlRW5jbG9zaW5nQ2xpcHBlZFJlY3QoaDEsIGgyLCBoMywgaDQpOwogfQpAQCAtMTQyLDIwICsx
NDIsMjAgQEAgRmxvYXRSZWN0IENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3IKIHsKICAgICAvLyBQZXJmb3JtIHRoZSBw
cm9qZWN0aW9uLCBidXQgcmV0YWluIHRoZSByZXN1bHQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0
ZXMuCiAgICAgRmxvYXRRdWFkIHEgPSBGbG9hdFF1YWQoRmxvYXRSZWN0KHNyY1JlY3QpKTsKLSAg
ICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDEgPSBwcm9qZWN0UG9pbnQodHJhbnNmb3JtLCBxLnAx
KCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IHByb2plY3RQb2ludCh0cmFuc2Zv
cm0sIHEucDIoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgzID0gcHJvamVjdFBvaW50
KHRyYW5zZm9ybSwgcS5wMygpKTsKLSAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDQgPSBwcm9q
ZWN0UG9pbnQodHJhbnNmb3JtLCBxLnA0KCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBo
MSA9IHByb2plY3RIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wMSgpKTsKKyAgICBIb21v
Z2VuZW91c0Nvb3JkaW5hdGUgaDIgPSBwcm9qZWN0SG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0s
IHEucDIoKSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgzID0gcHJvamVjdEhvbW9nZW5l
b3VzUG9pbnQodHJhbnNmb3JtLCBxLnAzKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBo
NCA9IHByb2plY3RIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wNCgpKTsKIAogICAgIHJl
dHVybiBjb21wdXRlRW5jbG9zaW5nQ2xpcHBlZFJlY3QoaDEsIGgyLCBoMywgaDQpOwogfQogCiB2
b2lkIENDTWF0aFV0aWw6Om1hcENsaXBwZWRRdWFkKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UXVhZCYgc3JjUXVhZCwgRmxvYXRQb2ludCBjbGlw
cGVkUXVhZFs4XSwgaW50JiBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQpCiB7Ci0gICAgSG9tb2dl
bmVvdXNDb29yZGluYXRlIGgxID0gbWFwUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAxKCkpOwot
ICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVh
ZC5wMigpKTsKLSAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDMgPSBtYXBQb2ludCh0cmFuc2Zv
cm0sIHNyY1F1YWQucDMoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGg0ID0gbWFwUG9p
bnQodHJhbnNmb3JtLCBzcmNRdWFkLnA0KCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBo
MSA9IG1hcEhvbW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAxKCkpOworICAgIEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IG1hcEhvbW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBz
cmNRdWFkLnAyKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMyA9IG1hcEhvbW9nZW5l
b3VzUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAzKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSBoNCA9IG1hcEhvbW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnA0KCkpOwog
CiAgICAgLy8gVGhlIG9yZGVyIG9mIGFkZGluZyB0aGUgdmVydGljZXMgdG8gdGhlIGFycmF5IGlz
IGNob3NlbiBzbyB0aGF0IGNsb2Nrd2lzZSAvIGNvdW50ZXItY2xvY2t3aXNlIG9yaWVudGF0aW9u
IGlzIHJldGFpbmVkLgogCkBAIC0yNjMsMTAgKzI2MywxMCBAQCBGbG9hdFF1YWQgQ0NNYXRoVXRp
bDo6bWFwUXVhZChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25z
dCBGbAogICAgICAgICByZXR1cm4gbWFwcGVkUXVhZDsKICAgICB9CiAKLSAgICBIb21vZ2VuZW91
c0Nvb3JkaW5hdGUgaDEgPSBtYXBQb2ludCh0cmFuc2Zvcm0sIHEucDEoKSk7Ci0gICAgSG9tb2dl
bmVvdXNDb29yZGluYXRlIGgyID0gbWFwUG9pbnQodHJhbnNmb3JtLCBxLnAyKCkpOwotICAgIEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSBoMyA9IG1hcFBvaW50KHRyYW5zZm9ybSwgcS5wMygpKTsKLSAg
ICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDQgPSBtYXBQb2ludCh0cmFuc2Zvcm0sIHEucDQoKSk7
CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgxID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0cmFu
c2Zvcm0sIHEucDEoKSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgyID0gbWFwSG9tb2dl
bmVvdXNQb2ludCh0cmFuc2Zvcm0sIHEucDIoKSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRl
IGgzID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0sIHEucDMoKSk7CisgICAgSG9tb2dl
bmVvdXNDb29yZGluYXRlIGg0ID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0sIHEucDQo
KSk7CiAKICAgICBjbGlwcGVkID0gaDEuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDIuc2hvdWxkQmVD
bGlwcGVkKCkgfHwgaDMuc2hvdWxkQmVDbGlwcGVkKCkgfHwgaDQuc2hvdWxkQmVDbGlwcGVkKCk7
CiAKQEAgLTI5MCw0ICsyOTAsMjkgQEAgRmxvYXRRdWFkIENDTWF0aFV0aWw6OnByb2plY3RRdWFk
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnMKICAgICByZXR1
cm4gcHJvamVjdGVkUXVhZDsKIH0KIAorRmxvYXRQb2ludCBDQ01hdGhVdGlsOjpwcm9qZWN0UG9p
bnQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQ
b2ludCYgcCwgYm9vbCYgY2xpcHBlZCkKK3sKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaCA9
IHByb2plY3RIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcCk7CisKKyAgICBpZiAoaC53ID4g
MCkgeworICAgICAgICAvLyBUaGUgY2FydGVzaWFuIGNvb3JkaW5hdGVzIHdpbGwgYmUgdmFsaWQg
aW4gdGhpcyBjYXNlLgorICAgICAgICBjbGlwcGVkID0gZmFsc2U7CisgICAgICAgIHJldHVybiBo
LmNhcnRlc2lhblBvaW50MmQoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgY2FydGVzaWFuIGNvb3Jk
aW5hdGVzIHdpbGwgYmUgaW52YWxpZCBhZnRlciBkaXZpZGluZyBieSB3LgorICAgIGNsaXBwZWQg
PSB0cnVlOworCisgICAgLy8gQXZvaWQgZGl2aWRpbmcgYnkgdyBpZiB3ID09IDAuCisgICAgaWYg
KCFoLncpCisgICAgICAgIHJldHVybiBGbG9hdFBvaW50KCk7CisKKyAgICAvLyBUaGlzIHJldHVy
biB2YWx1ZSB3aWxsIGJlIGludmFsaWQgYmVjYXVzZSBjbGlwcGVkID09IHRydWUsIGJ1dCAoMSkg
dXNlcnMgb2YgdGhpcworICAgIC8vIGNvZGUgc2hvdWxkIGJlIGlnbm9yaW5nIHRoZSByZXR1cm4g
dmFsdWUgd2hlbiBjbGlwcGVkID09IHRydWUgYW55d2F5LCBhbmQgKDIpIHRoaXMKKyAgICAvLyBi
ZWhhdmlvciBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBiZWhhdmlvciBvZiBXZWJL
aXQgdHJhbnNmb3JtcyBpZiB0aGUgdXNlcgorICAgIC8vIHJlYWxseSBkb2VzIG5vdCBpZ25vcmUg
dGhlIHJldHVybiB2YWx1ZS4KKyAgICByZXR1cm4gaC5jYXJ0ZXNpYW5Qb2ludDJkKCk7Cit9CisK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5oCmluZGV4IDYzY2EwMDMx
MjQwZDBiYmNmZmQyZmEwZDU2OTEwYzI4MDc2NjgyNTIuLmNiY2VkYTBhMTc0M2UxODYzMWVkZmRh
NTQyNmNjNWFmNWJiY2YwYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgKQEAgLTM0LDcgKzM0LDYgQEAg
Y2xhc3MgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEludFJlY3Q7Ci1jbGFzcyBGbG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3Mg
RmxvYXRRdWFkOwogCkBAIC05OSw2ICs5OCw3IEBAIHB1YmxpYzoKICAgICAvLyBjb3JyZWN0bHkg
ZGV0ZWN0IHRoZSBjbGlwcGVkIGNvbmRpdGlvbiB2aWEgdGhlIGJvb2xlYW4gY2xpcHBlZC4KICAg
ICBzdGF0aWMgRmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYsIGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wmIGNsaXBwZWQpOwogICAgIHN0YXRpYyBG
bG9hdFF1YWQgcHJvamVjdFF1YWQoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wmIGNsaXBwZWQpOworICAgIHN0YXRpYyBGbG9hdFBv
aW50IHByb2plY3RQb2ludChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jiwg
Y29uc3QgRmxvYXRQb2ludCYsIGJvb2wmIGNsaXBwZWQpOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKaW5kZXggODQwYzRlZDNhZjk0MmU5OTU2ZWNhZjNi
NTkyNGI2Y2U2ZjRlYjQ2MC4uYjVkYzc5MWI0MDBlMTMwODgwZGRhZjMwZDdiMWE2MzAwODBhYjcx
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCkBAIC0yOTEwLDYgKzI5MTAsNjc4IEBAIFRFU1QoQ0NM
YXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nV2l0aFByZXNlcnZl
czNkRm9yRmxhdHRlbmluCiAgICAgRVhQRUNUX0VRKGNoaWxkMS0+aWQoKSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdFsxXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsxXS0+aWQoKSk7CiB9
CiAKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVzdGluZ0ZvckVt
cHR5TGF5ZXJMaXN0KQoreworICAgIC8vIEhpdCB0ZXN0aW5nIG9uIGFuIGVtcHR5IHJlbmRlclN1
cmZhY2VMYXllckxpc3Qgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKworICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisKKyAgICBJbnRQb2ludCB0
ZXN0UG9pbnQoMCwgMCk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAg
IHRlc3RQb2ludCA9IEludFBvaW50KDEwLCAyMCk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworfQor
CitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5n
bGVMYXllcikKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDEyMzQ1KTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9v
dC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJv
KCksIEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uKDAsIDApOworICAgIEludFNpemUgYm91bmRzKDEwMCwgMTAwKTsKKyAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBp
ZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUg
d2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9y
IGEgcG9pbnQgb3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4K
KyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoMTAxLCAxMDEpOworICAgIENDTGF5ZXJJbXBsKiByZXN1
bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2lu
dCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShy
ZXN1bHRMYXllcik7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgtMSwgLTEpOworICAgIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNF
KHJlc3VsdExheWVyKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBz
aG91bGQgcmV0dXJuIHRoZSByb290IGxheWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDEs
IDEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJU
aGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAg
QVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5
ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoOTksIDk5KTsKKyAgICByZXN1
bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2lu
dCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJl
c3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgpKTsKK30K
KworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2lu
Z2xlUG9zaXRpb25lZExheWVyKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IEND
TGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50
UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwor
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oNTAsIDUwKTsgLy8gdGhpcyBsYXllciBpcyBwb3NpdGlv
bmVkLCBhbmQgaGl0IHRlc3Rpbmcgc2hvdWxkIGNvcnJlY3RseSBrbm93IHdoZXJlIHRoZSBsYXll
ciBpcyBsb2NhdGVkLgorICAgIEludFNpemUgYm91bmRzKDEwMCwgMTAwKTsKKyAgICBzZXRMYXll
clByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBG
bG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUg
aGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUg
c2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9p
bnQgb3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKyAgICBJ
bnRQb2ludCB0ZXN0UG9pbnQoNDksIDQ5KTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBv
aW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5
ZXIpOworCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEp
LCBpdCBzaG91bGQgbm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3Vy
ZmFjZSB3b3VsZCBjbGFtcCBpdC4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxMDEsIDEwMSk7
CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJ
c0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQg
aW5zaWRlIHNob3VsZCByZXR1cm4gdGhlIHJvb3QgbGF5ZXIuCisgICAgdGVzdFBvaW50ID0gSW50
UG9pbnQoNTEsIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUs
IHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIHRlc3RQb2ludCA9IEludFBvaW50KDk5LCA5OSk7
CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJ
c0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NF
UlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+
aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5SGl0VGVz
dGluZ0ZvclNpbmdsZVJvdGF0ZWRMYXllcikKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJv
b3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJT
dXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRS
ZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyOworICAgIHJvdGF0aW9uNDVEZWdyZWVz
QWJvdXRDZW50ZXIudHJhbnNsYXRlKDUwLCA1MCk7CisgICAgcm90YXRpb240NURlZ3JlZXNBYm91
dENlbnRlci5yb3RhdGUzZCgwLCAwLCA0NSk7CisgICAgcm90YXRpb240NURlZ3JlZXNBYm91dENl
bnRlci50cmFuc2xhdGUoLTUwLCAtNTApOworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOwor
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAx
MDApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgcm90YXRp
b240NURlZ3JlZXNBYm91dENlbnRlciwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24s
IGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAg
IFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9y
PENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNp
emUgPSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7
CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290
LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXpl
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29y
UmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lz
c29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJl
Y3QuCisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4K
KyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBB
U1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsK
KworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBwb2ludHMgb3V0c2lkZSB0aGUgbGF5ZXIuCisgICAg
Ly8gVGhlc2UgY29ybmVycyB3b3VsZCBoYXZlIGJlZW4gaW5zaWRlIHRoZSB1bi10cmFuc2Zvcm1l
ZCBsYXllciwgYnV0IHRoZXkgc2hvdWxkIG5vdCBoaXQgdGhlIGNvcnJlY3RseSB0cmFuc2Zvcm1l
ZCBsYXllci4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoOTksIDk5KTsKKyAgICBDQ0xheWVySW1w
bCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hp
dEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMSwgMSk7Cisg
ICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hp
dEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQgaW5z
aWRlIHNob3VsZCByZXR1cm4gdGhlIHJvb3QgbGF5ZXIuCisgICAgdGVzdFBvaW50ID0gSW50UG9p
bnQoMSwgNTApOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5k
TGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7
CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVz
dWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgdGhlIGNvcm5lcnMgdGhhdCB3
b3VsZCBvdmVybGFwIHRoZSB1bmNsaXBwZWQgbGF5ZXIsIGJ1dCBhcmUgb3V0c2lkZSB0aGUgY2xp
cHBlZCByZWdpb24uCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNTAsIC0xKTsKKyAgICByZXN1
bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2lu
dCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9GQUxTRShy
ZXN1bHRMYXllcik7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgtMSwgNTApOworICAgIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX0ZBTFNF
KHJlc3VsdExheWVyKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJp
ZnlIaXRUZXN0aW5nRm9yU2luZ2xlUGVyc3BlY3RpdmVMYXllcikKK3sKKyAgICBPd25QdHI8Q0NM
YXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKKyAgICByb290LT5j
cmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250
ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKworICAgIC8vIHBl
cnNwZWN0aXZlUHJvamVjdGlvbkFib3V0Q2VudGVyICogdHJhbnNsYXRpb25CeVogaXMgZGVzaWdu
ZWQgc28gdGhhdCB0aGUgMTAwIHggMTAwIGxheWVyIGJlY29tZXMgNTAgeCA1MCwgYW5kIHJlbWFp
bnMgY2VudGVyZWQgYXQgKDUwLCA1MCkuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGVy
c3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50ZXI7CisgICAgcGVyc3BlY3RpdmVQcm9qZWN0aW9u
QWJvdXRDZW50ZXIudHJhbnNsYXRlKDUwLCA1MCk7CisgICAgcGVyc3BlY3RpdmVQcm9qZWN0aW9u
QWJvdXRDZW50ZXIuYXBwbHlQZXJzcGVjdGl2ZSgxKTsKKyAgICBwZXJzcGVjdGl2ZVByb2plY3Rp
b25BYm91dENlbnRlci50cmFuc2xhdGUoLTUwLCAtNTApOworICAgIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zbGF0aW9uQnlaOworICAgIHRyYW5zbGF0aW9uQnlaLnRyYW5zbGF0ZTNkKDAs
IDAsIC0xKTsKKworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZsb2F0UG9pbnQg
cG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOworICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgcGVyc3BlY3RpdmVQcm9qZWN0aW9u
QWJvdXRDZW50ZXIgKiB0cmFuc2xhdGlvbkJ5WiwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9z
aXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
VmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXllckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4
dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5n
ZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jt
cyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1
cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRT
Y2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0
eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJlIHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3Jy
ZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkgY2hlY2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3Jl
YXRlZC4KKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsK
KyAgICBBU1NFUlRfRVEoMXUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6
ZSgpKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBwb2ludHMgb3V0c2lkZSB0aGUgbGF5ZXIu
CisgICAgLy8gVGhlc2UgY29ybmVycyB3b3VsZCBoYXZlIGJlZW4gaW5zaWRlIHRoZSB1bi10cmFu
c2Zvcm1lZCBsYXllciwgYnV0IHRoZXkgc2hvdWxkIG5vdCBoaXQgdGhlIGNvcnJlY3RseSB0cmFu
c2Zvcm1lZCBsYXllci4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoMjQsIDI0KTsKKyAgICBDQ0xh
eWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRo
YXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBF
WFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzYs
IDc2KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
VGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBw
b2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQg
PSBJbnRQb2ludCgyNiwgMjYpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgx
MjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzQs
IDc0KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
VGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExh
eWVyLT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlI
aXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXJXaXRoU2NhbGVkQ29udGVudHMpCit7CisgICAgLy8gQSBs
YXllcidzIHZpc2libGVMYXllclJlY3QgaXMgYWN0dWFsbHkgaW4gdGhlIGxheWVyJ3MgY29udGVu
dCBzcGFjZS4gVGhlCisgICAgLy8gc2NyZWVuU3BhY2VUcmFuc2Zvcm0gY29udmVydHMgZnJvbSB0
aGUgbGF5ZXIncyBvcmlnaW4gc3BhY2UgdG8gc2NyZWVuIHNwYWNlLiBUaGlzCisgICAgLy8gdGVz
dCBtYWtlcyBzdXJlIHRoYXQgaGl0IHRlc3Rpbmcgd29ya3MgY29ycmVjdGx5IGFjY291bnRzIGZv
ciB0aGUgY29udGVudHMgc2NhbGUuCisgICAgLy8gQSBjb250ZW50c1NjYWxlIHRoYXQgaXMgbm90
IDEgZWZmZWN0aXZlbHkgZm9yY2VzIGEgbm9uLWlkZW50aXR5IHRyYW5zZm9ybSBiZXR3ZWVuCisg
ICAgLy8gbGF5ZXIncyBjb250ZW50IHNwYWNlIGFuZCBsYXllcidzIG9yaWdpbiBzcGFjZSwgd2hp
Y2ggaXMgbm90IGluY2x1ZGVkIGluIHRoZQorICAgIC8vIHNjcmVlblNwYWNlVHJhbnNmb3Jtbi4g
VGhlIGhpdCB0ZXN0aW5nIGNvZGUgbXVzdCB0YWtlIHRoaXMgaW50byBhY2NvdW50LgorICAgIC8v
CisgICAgLy8gVG8gdGVzdCB0aGlzLCB0aGUgbGF5ZXIgaXMgcG9zaXRpb25lZCBhdCAoMjUsIDI1
KSwgYW5kIGlzIHNpemUgKDUwLCA1MCkuIElmCisgICAgLy8gY29udGVudHNTY2FsZSBpcyBpZ25v
cmVkLCB0aGVuIGhpdCB0ZXN0aW5nIHdpbGwgbWlzLWludGVycHJldCB0aGUgdmlzaWJsZUxheWVy
UmVjdAorICAgIC8vIGFzIGJlaW5nIGxhcmdlciB0aGFuIHRoZSBhY3R1YWwgYm91bmRzIG9mIHRo
ZSBsYXllci4KKyAgICAvLworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgxMjM0NSk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwor
ICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2lu
dDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAg
RmxvYXRQb2ludCBwb3NpdGlvbigyNSwgMjUpOworICAgIEludFNpemUgYm91bmRzKDUwLCA1MCk7
CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290LmdldCgpLCBpZGVudGl0eU1h
dHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOwor
ICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgIHJvb3QtPnNldENvbnRlbnRC
b3VuZHMoSW50U2l6ZSgxMDAsIDEwMCkpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUg
d2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIC8vIFRoZSB2aXNpYmxlTGF5ZXJS
ZWN0IGlzIGFjdHVhbGx5IDEwMHgxMDAsIGV2ZW4gdGhvdWdoIHRoZSBsYXlvdXQgc2l6ZSBvZiB0
aGUgbGF5ZXIgaXMgNTB4NTAsIHBvc2l0aW9uZWQgYXQgMjV4MjUuCisgICAgRVhQRUNUX0lOVF9S
RUNUX0VRKEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpLCByb290
LT52aXNpYmxlTGF5ZXJSZWN0KCkpOworICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9pbnQg
b3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKyAgICBJbnRQ
b2ludCB0ZXN0UG9pbnQoMjQsIDI0KTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIp
OworCisgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBp
dCBzaG91bGQgbm90IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFj
ZSB3b3VsZCBjbGFtcCBpdC4KKyAgICAvLyBUaGlzIGNhc2UgaW4gcGFydGljdWxhciBpcyBsaWtl
bHkgdG8gZmFpbCBpZiBjb250ZW50cyBzY2FsZSBpcyBub3QgY29ycmVjdGx5IGFjY291bnRlZCBm
b3IuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzYsIDc2KTsKKyAgICByZXN1bHRMYXllciA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9p
bnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXll
cik7CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVy
biB0aGUgcm9vdCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgyNiwgMjYpOworICAg
IHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRC
eVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RS
VUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkp
OworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNzQsIDc0KTsKKyAgICByZXN1bHRMYXllciA9
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9p
bnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVy
KTsKKyAgICBFWFBFQ1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2ltcGxlQ2xpcHBl
ZExheWVyKQoreworICAgIC8vIFRlc3QgdGhhdCBoaXQtdGVzdGluZyB3aWxsIG9ubHkgd29yayBm
b3IgdGhlIHZpc2libGUgcG9ydGlvbiBvZiBhIGxheWVyLCBhbmQgbm90CisgICAgLy8gdGhlIGVu
dGlyZSBsYXllciBib3VuZHMuIEhlcmUgd2UganVzdCB0ZXN0IHRoZSBzaW1wbGUgYXhpcy1hbGln
bmVkIGNhc2UuCisKKyAgICBPd25QdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDEyMyk7CisgICAgcm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3Qt
PnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2lu
dCBwb3NpdGlvbigyNSwgMjUpOyAvLyB0aGlzIGxheWVyIGlzIHBvc2l0aW9uZWQsIGFuZCBoaXQg
dGVzdGluZyBzaG91bGQgY29ycmVjdGx5IGtub3cgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQu
CisgICAgSW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9y
LCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0TWFza3NUb0JvdW5kcyh0
cnVlKTsKKworICAgIHsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCA9IENDTGF5
ZXJJbXBsOjpjcmVhdGUoNDU2KTsKKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KC01MCwg
LTUwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSgzMDAsIDMwMCk7CisgICAgICAgIHNldExh
eWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGNo
aWxkLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxk
LnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBG
bG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUg
aGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUg
c2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIGEgcG9p
bnQgb3V0c2lkZSB0aGUgbGF5ZXIgc2hvdWxkIHJldHVybiBhIG51bGwgcG9pbnRlci4KKyAgICAv
LyBEZXNwaXRlIHRoZSBjaGlsZCBsYXllciBiZWluZyB2ZXJ5IGxhcmdlLCBpdCBzaG91bGQgYmUg
Y2xpcHBlZCB0byB0aGUgcm9vdCBsYXllcidzIGJvdW5kcy4KKyAgICBJbnRQb2ludCB0ZXN0UG9p
bnQoMjQsIDI0KTsKKyAgICBDQ0xheWVySW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8g
RXZlbiB0aG91Z2ggdGhlIGxheWVyIGV4aXN0cyBhdCAoMTAxLCAxMDEpLCBpdCBzaG91bGQgbm90
IGJlIHZpc2libGUgdGhlcmUgc2luY2UgdGhlIHJvb3QgcmVuZGVyU3VyZmFjZSB3b3VsZCBjbGFt
cCBpdC4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NiwgNzYpOworICAgIHJlc3VsdExheWVy
ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQ
b2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExh
eWVyKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0
dXJuIHRoZSBjaGlsZCBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgyNiwgMjYpOwor
ICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNI
aXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJU
X1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSg0NTYsIHJlc3VsdExheWVyLT5pZCgp
KTsKKworICAgIHRlc3RQb2ludCA9IEludFBvaW50KDc0LCA3NCk7CisgICAgcmVzdWx0TGF5ZXIg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBv
aW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXll
cik7CisgICAgRVhQRUNUX0VRKDQ1NiwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKEND
TGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aUNsaXBwZWRS
b3RhdGVkTGF5ZXIpCit7CisgICAgLy8gVGhpcyB0ZXN0IGNoZWNrcyB3aGV0aGVyIGhpdCB0ZXN0
aW5nIGNvcnJlY3RseSBhdm9pZHMgaGl0IHRlc3Rpbmcgd2l0aCBtdWx0aXBsZQorICAgIC8vIGFu
Y2VzdG9ycyB0aGF0IGNsaXAgaW4gbm9uIGF4aXMtYWxpZ25lZCB3YXlzLiBUbyBwYXNzIHRoaXMg
dGVzdCwgdGhlIGhpdCB0ZXN0aW5nCisgICAgLy8gYWxnb3JpdGhtIG5lZWRzIHRvIHJlY29nbml6
ZSB0aGF0IG11bHRpcGxlIHBhcmVudCBsYXllcnMgbWF5IGNsaXAgdGhlIGxheWVyLCBhbmQKKyAg
ICAvLyBzaG91bGQgbm90IGFjdHVhbGx5IGhpdCB0aG9zZSBjbGlwcGVkIGFyZWFzLgorICAgIC8v
CisgICAgLy8gVGhlIGNoaWxkIGFuZCBncmFuZENoaWxkIGxheWVycyBhcmUgYm90aCBpbml0aWFs
aXplZCB0byBjbGlwIHRoZSByb3RhdGVkTGVhZi4gVGhlCisgICAgLy8gY2hpbGQgbGF5ZXIgaXMg
cm90YXRlZCBhYm91dCB0aGUgdG9wLWxlZnQgY29ybmVyLCBzbyB0aGF0IHRoZSByb290ICsgY2hp
bGQgY2xpcHMKKyAgICAvLyBjb21iaW5lZCBjcmVhdGUgYSB0cmlhbmdsZS4gVGhlIHJvdGF0ZWRM
ZWFmIHdpbGwgb25seSBiZSB2aXNpYmxlIHdoZXJlIGl0IG92ZXJsYXBzCisgICAgLy8gdGhpcyB0
cmlhbmdsZS4KKyAgICAvLworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXll
ckltcGw6OmNyZWF0ZSgxMjMpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6
Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAsIDApOworICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMoMTAwLCAxMDApOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAg
ICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgeworICAgICAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0NTYpOworICAgICAgICBP
d25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDc4OSk7
CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm90YXRlZExlYWYgPSBDQ0xheWVySW1wbDo6
Y3JlYXRlKDI0NjgpOworCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCgxMCwgMTApOwor
ICAgICAgICBib3VuZHMgPSBJbnRTaXplKDgwLCA4MCk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGNoaWxkLT5zZXRN
YXNrc1RvQm91bmRzKHRydWUpOworICAgICAgICAKKyAgICAgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggcm90YXRpb240NURlZ3JlZXNBYm91dENvcm5lcjsKKyAgICAgICAgcm90YXRpb240NURl
Z3JlZXNBYm91dENvcm5lci5yb3RhdGUzZCgwLCAwLCA0NSk7CisKKyAgICAgICAgcG9zaXRpb24g
PSBGbG9hdFBvaW50KDAsIDApOyAvLyByZW1lbWJlciwgcG9zaXRpb25lZCB3aXRoIHJlc3BlY3Qg
dG8gaXRzIHBhcmVudCB3aGljaCBpcyBhbHJlYWR5IGF0IDEwLCAxMAorICAgICAgICBib3VuZHMg
PSBJbnRTaXplKDIwMCwgMjAwKTsgLy8gdG8gZW5zdXJlIGl0IGNvdmVycyBhdCBsZWFzdCBzcXJ0
KDIpICogMTAwLgorICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGdyYW5kQ2hp
bGQuZ2V0KCksIHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDb3JuZXIsIGlkZW50aXR5TWF0cml4LCBh
bmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgZ3JhbmRDaGlsZC0+c2V0
TWFza3NUb0JvdW5kcyh0cnVlKTsKKworICAgICAgICAvLyBSb3RhdGVzIGFib3V0IHRoZSBjZW50
ZXIgb2YgdGhlIGxheWVyCisgICAgICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0ZWRM
ZWFmVHJhbnNmb3JtOworICAgICAgICByb3RhdGVkTGVhZlRyYW5zZm9ybS50cmFuc2xhdGUoLTEw
LCAtMTApOyAvLyBjYW5jZWwgb3V0IHRoZSBncmFuZFBhcmVudCdzIHBvc2l0aW9uCisgICAgICAg
IHJvdGF0ZWRMZWFmVHJhbnNmb3JtLnJvdGF0ZTNkKDAsIDAsIC00NSk7IC8vIGNhbmNlbCBvdXQg
dGhlIGNvcm5lciA0NS1kZWdyZWUgcm90YXRpb24gb2YgdGhlIHBhcmVudC4KKyAgICAgICAgcm90
YXRlZExlYWZUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CisgICAgICAgIHJvdGF0ZWRMZWFm
VHJhbnNmb3JtLnJvdGF0ZTNkKDAsIDAsIDQ1KTsKKyAgICAgICAgcm90YXRlZExlYWZUcmFuc2Zv
cm0udHJhbnNsYXRlKC01MCwgLTUwKTsKKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KDAs
IDApOworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDEwMCwgMTAwKTsKKyAgICAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb3RhdGVkTGVhZi5nZXQoKSwgcm90YXRlZExlYWZUcmFu
c2Zvcm0sIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsK
KyAgICAgICAgcm90YXRlZExlYWYtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgICAgICBn
cmFuZENoaWxkLT5hZGRDaGlsZChyb3RhdGVkTGVhZi5yZWxlYXNlKCkpOworICAgICAgICBjaGls
ZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZC5yZWxlYXNlKCkpOworICAgICAgICByb290LT5hZGRDaGls
ZChjaGlsZC5yZWxlYXNlKCkpOworICAgIH0KKworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IHJl
bmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gZHVtbXlMYXll
ckxpc3Q7CisgICAgaW50IGR1bW15TWF4VGV4dHVyZVNpemUgPSA1MTI7CisgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdC5nZXQoKSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtcyhyb290LmdldCgpLCByb290LmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15
TGF5ZXJMaXN0LCAwLCBkdW1teU1heFRleHR1cmVTaXplKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHMocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgRmxvYXRSZWN0KCkpOyAvLyBlbXB0eSBzY2lzc29yUmVjdCB3aWxsIGhlbHAgZW5zdXJl
IHdlJ3JlIGhpdCB0ZXN0aW5nIHRoZSBjb3JyZWN0IHJlY3QuCisKKyAgICAvLyBTYW5pdHkgY2hl
Y2sgdGhlIHNjZW5hcmlvIHdlIGp1c3QgY3JlYXRlZC4KKyAgICAvLyBUaGUgZ3JhbmRDaGlsZCBp
cyBleHBlY3RlZCB0byBjcmVhdGUgYSByZW5kZXJTdXJmYWNlIGJlY2F1c2UgaXQgbWFza3NUb0Jv
dW5kcyBhbmQgaXMgbm90IGF4aXMgYWxpZ25lZC4KKyAgICBBU1NFUlRfRVEoMnUsIHJlbmRlclN1
cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VM
YXllckxpc3RbMF0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBB
U1NFUlRfRVEoNzg5LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzBdLT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpWzBdLT5pZCgpKTsgLy8gZ3JhbmRDaGlsZCdzIHN1cmZhY2UuCisgICAgQVNT
RVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5yZW5kZXJTdXJmYWNlKCktPmxh
eWVyTGlzdCgpLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDI0NjgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3RbMV0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOworCisgICAg
Ly8gKDExLCA4OSkgaXMgY2xvc2UgdG8gdGhlIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgd2l0aGlu
IHRoZSBjbGlwLCBidXQgaXQgaXMgbm90IGluc2lkZSB0aGUgbGF5ZXIuCisgICAgSW50UG9pbnQg
dGVzdFBvaW50KDExLCA4OSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKwor
ICAgIC8vIENsb3NlciBpbndhcmRzIGZyb20gdGhlIGJvdHRvbSBsZWZ0IHdpbGwgb3ZlcmxhcCB0
aGUgbGF5ZXIuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMjUsIDc1KTsKKyAgICByZXN1bHRM
YXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0
ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3Vs
dExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMjQ2OCwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAg
Ly8gKDQsIDUwKSBpcyBpbnNpZGUgdGhlIHVuY2xpcHBlZCBsYXllciwgYnV0IHRoYXQgY29ybmVy
IG9mIHRoZSBsYXllciBzaG91bGQgYmUKKyAgICAvLyBjbGlwcGVkIGF3YXkgYnkgdGhlIGdyYW5k
UGFyZW50IGFuZCBzaG91bGQgbm90IGdldCBoaXQuIElmIGhpdCB0ZXN0aW5nIGJsaW5kbHkgdXNl
cworICAgIC8vIHZpc2libGVMYXllclJlY3Qgd2l0aG91dCBjb25zaWRlcmluZyBob3cgcGFyZW50
IG1heSBjbGlwIHRoZSBsYXllciwgdGhlbiBoaXQKKyAgICAvLyB0ZXN0aW5nIHdvdWxkIGFjY2lk
ZW50YWxseSB0aGluayB0aGF0IHRoZSBwb2ludCBzdWNjZXNzZnVsbHkgaGl0cyB0aGUgbGF5ZXIu
CisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNCwgNTApOworICAgIHJlc3VsdExheWVyID0gQ0NM
YXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsK
KworICAgIC8vICgxMSwgNTApIGlzIGluc2lkZSB0aGUgbGF5ZXIgYW5kIHdpdGhpbiB0aGUgY2xp
cHBlZCBhcmVhLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDExLCA1MCk7CisgICAgcmVzdWx0
TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQo
dGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1
bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDI0NjgsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAg
IC8vIEFyb3VuZCB0aGUgbWlkZGxlLCBqdXN0IHRvIHRoZSByaWdodCBhbmQgdXAsIHdvdWxkIGhh
dmUgaGl0IHRoZSBsYXllciBleGNlcHQgdGhhdAorICAgIC8vIHRoYXQgYXJlYSBzaG91bGQgYmUg
Y2xpcHBlZCBhd2F5IGJ5IHRoZSBwYXJlbnQuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNTEs
IDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
VGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBBcm91bmQgdGhlIG1pZGRsZSwg
anVzdCB0byB0aGUgbGVmdCBhbmQgZG93biwgc2hvdWxkIHN1Y2Nlc3NmdWxseSBoaXQgdGhlIGxh
eWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDQ5LCA1MSk7CisgICAgcmVzdWx0TGF5ZXIg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBv
aW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXll
cik7CisgICAgRVhQRUNUX0VRKDI0NjgsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKworVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlwbGVMYXll
cnMpCit7CisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgxKTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNp
emUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0
aW9uKDAsIDApOworICAgIEludFNpemUgYm91bmRzKDEwMCwgMTAwKTsKKyAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0RHJh
d3NDb250ZW50KHRydWUpOworCisgICAgeworICAgICAgICAvLyBjaGlsZCAxIGFuZCBjaGlsZDIg
YXJlIGluaXRpYWxpemVkIHRvIG92ZXJsYXAgYmV0d2VlbiB4PTUwIGFuZCB4PTYwLgorICAgICAg
ICAvLyBncmFuZENoaWxkIGlzIHNldCB0byBvdmVybGFwIGJvdGggY2hpbGQxIGFuZCBjaGlsZDIg
YmV0d2VlbiB5PTUwIGFuZCB5PTYwLgorICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgc3RhY2tpbmcg
b3JkZXIgaXM6CisgICAgICAgIC8vICAgKGZyb250KSBjaGlsZDIsIChzZWNvbmQpIGdyYW5kQ2hp
bGQsICh0aGlyZCkgY2hpbGQxLCBhbmQgKGJhY2spIHRoZSByb290IGxheWVyIGJlaGluZCBhbGwg
b3RoZXIgbGF5ZXJzLgorCisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQxID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBjaGlsZDIg
PSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdy
YW5kQ2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKworICAgICAgICBwb3NpdGlvbiA9
IEZsb2F0UG9pbnQoMTAsIDEwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSg1MCwgNTApOwor
ICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMS5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNl
KTsKKyAgICAgICAgY2hpbGQxLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgcG9z
aXRpb24gPSBGbG9hdFBvaW50KDUwLCAxMCk7CisgICAgICAgIGJvdW5kcyA9IEludFNpemUoNTAs
IDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDIuZ2V0KCks
IGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRz
LCBmYWxzZSk7CisgICAgICAgIGNoaWxkMi0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAg
ICAgIC8vIFJlbWVtYmVyIHRoYXQgZ3JhbmRDaGlsZCBpcyBwb3NpdGlvbmVkIHdpdGggcmVzcGVj
dCB0byBpdHMgcGFyZW50IChpLmUuIGNoaWxkMSkuCisgICAgICAgIC8vIEluIHNjcmVlbiBzcGFj
ZSwgdGhlIGludGVuZGVkIHBvc2l0aW9uIGlzICgxMCwgNTApLCB3aXRoIHNpemUgMTAwIHggNTAu
CisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCgwLCA0MCk7CisgICAgICAgIGJvdW5kcyA9
IEludFNpemUoMTAwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
Z3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9y
LCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGdyYW5kQ2hpbGQxLT5zZXREcmF3
c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgY2hpbGQxLT5hZGRDaGlsZChncmFuZENoaWxkMS5y
ZWxlYXNlKCkpOworICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDEucmVsZWFzZSgpKTsKKyAg
ICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyLnJlbGVhc2UoKSk7CisgICAgfQorCisgICAgQ0NM
YXllckltcGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgQ0NMYXll
ckltcGwqIGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV0uZ2V0KCk7CisgICAgQ0NMYXllcklt
cGwqIGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdLmdldCgpOworCisgICAgVmVj
dG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NM
YXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9
IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0
KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOwor
ICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0
cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JS
ZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4K
KworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAg
IEFTU0VSVF9UUlVFKGNoaWxkMSk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQyKTsKKyAgICBBU1NF
UlRfVFJVRShncmFuZENoaWxkMSk7CisgICAgQVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDR1LCByb290LT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpLnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDEsIHJvb3QtPnJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOyAvLyByb290IGxheWVyCisgICAgQVNTRVJUX0VR
KDIsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMV0tPmlkKCkpOyAvLyBjaGls
ZDEKKyAgICBBU1NFUlRfRVEoNCwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVsy
XS0+aWQoKSk7IC8vIGdyYW5kQ2hpbGQxCisgICAgQVNTRVJUX0VRKDMsIHJvb3QtPnJlbmRlclN1
cmZhY2UoKS0+bGF5ZXJMaXN0KClbM10tPmlkKCkpOyAvLyBjaGlsZDIKKworICAgIC8vIE5vdGhp
bmcgb3ZlcmxhcHMgdGhlIHJvb3RMYXllciBhdCAoMSwgMSksIHNvIGhpdCB0ZXN0aW5nIHRoZXJl
IHNob3VsZCBmaW5kIHRoZSByb290IGxheWVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCA9IElu
dFBvaW50KDEsIDEpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBF
Q1RfRVEoMSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDE1LCAxNSksIGNoaWxk
MSBhbmQgcm9vdCBhcmUgdGhlIG9ubHkgbGF5ZXJzLiBjaGlsZDEgaXMgZXhwZWN0ZWQgdG8gYmUg
b24gdG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDE1LCAxNSk7CisgICAgcmVzdWx0TGF5
ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVz
dFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRM
YXllcik7CisgICAgRVhQRUNUX0VRKDIsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIC8vIEF0
ICg1MSwgMjApLCBjaGlsZDEgYW5kIGNoaWxkMiBvdmVybGFwLiBjaGlsZDIgaXMgZXhwZWN0ZWQg
dG8gYmUgb24gdG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUxLCAyMCk7CisgICAgcmVz
dWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9p
bnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShy
ZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDMsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAg
IC8vIEF0ICg4MCwgNTEpLCBjaGlsZDIgYW5kIGdyYW5kQ2hpbGQxIG92ZXJsYXAuIGNoaWxkMiBp
cyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoODAsIDUx
KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhh
dElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFT
U0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlk
KCkpOworCisgICAgLy8gQXQgKDUxLCA1MSksIGFsbCBsYXllcnMgb3ZlcmxhcCBlYWNoIG90aGVy
LiBjaGlsZDIgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdG9wIG9mIGFsbCBvdGhlciBsYXllcnMuCisg
ICAgdGVzdFBvaW50ID0gSW50UG9pbnQoNTEsIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5
ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAg
ICBFWFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDIwLCA1MSks
IGNoaWxkMSBhbmQgZ3JhbmRDaGlsZDEgb3ZlcmxhcC4gZ3JhbmRDaGlsZDEgaXMgZXhwZWN0ZWQg
dG8gYmUgb24gdG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDIwLCA1MSk7CisgICAgcmVz
dWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9p
bnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShy
ZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDQsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKwor
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yTXVsdGlw
bGVMYXllckxpc3RzKQoreworICAgIC8vCisgICAgLy8gVGhlIGdlb21ldHJ5IGlzIHNldCB1cCBz
aW1pbGFybHkgdG8gdGhlIHByZXZpb3VzIGNhc2UsIGJ1dAorICAgIC8vIGFsbCBsYXllcnMgYXJl
IGZvcmNlZCB0byBiZSByZW5kZXJTdXJmYWNlcyBub3cuCisgICAgLy8KKworICAgIE93blB0cjxD
Q0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7CisgICAgcm9vdC0+Y3Jl
YXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29udGVu
dFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOworCisg
ICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQb2lu
dCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRT
aXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhy
b290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRp
b24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKwor
ICAgIHsKKyAgICAgICAgLy8gY2hpbGQgMSBhbmQgY2hpbGQyIGFyZSBpbml0aWFsaXplZCB0byBv
dmVybGFwIGJldHdlZW4geD01MCBhbmQgeD02MC4KKyAgICAgICAgLy8gZ3JhbmRDaGlsZCBpcyBz
ZXQgdG8gb3ZlcmxhcCBib3RoIGNoaWxkMSBhbmQgY2hpbGQyIGJldHdlZW4geT01MCBhbmQgeT02
MC4KKyAgICAgICAgLy8gVGhlIGV4cGVjdGVkIHN0YWNraW5nIG9yZGVyIGlzOgorICAgICAgICAv
LyAgIChmcm9udCkgY2hpbGQyLCAoc2Vjb25kKSBncmFuZENoaWxkLCAodGhpcmQpIGNoaWxkMSwg
YW5kIChiYWNrKSB0aGUgcm9vdCBsYXllciBiZWhpbmQgYWxsIG90aGVyIGxheWVycy4KKworICAg
ICAgICBPd25QdHI8Q0NMYXllckltcGw+IGNoaWxkMSA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMik7
CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQyID0gQ0NMYXllckltcGw6OmNyZWF0
ZSgzKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBncmFuZENoaWxkMSA9IENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNCk7CisKKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50KDEwLCAxMCk7
CisgICAgICAgIGJvdW5kcyA9IEludFNpemUoNTAsIDUwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9w
ZXJ0aWVzRm9yVGVzdGluZyhjaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1h
dHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGNoaWxkMS0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworICAgICAgICBjaGlsZDEtPnNldEZvcmNlUmVuZGVyU3Vy
ZmFjZSh0cnVlKTsKKworICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoNTAsIDEwKTsKKyAg
ICAgICAgYm91bmRzID0gSW50U2l6ZSg1MCwgNTApOworICAgICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgY2hpbGQyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGNoaWxkMi0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNl
KHRydWUpOworCisgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgZ3JhbmRDaGlsZCBpcyBwb3NpdGlv
bmVkIHdpdGggcmVzcGVjdCB0byBpdHMgcGFyZW50IChpLmUuIGNoaWxkMSkuCisgICAgICAgIC8v
IEluIHNjcmVlbiBzcGFjZSwgdGhlIGludGVuZGVkIHBvc2l0aW9uIGlzICgxMCwgNTApLCB3aXRo
IHNpemUgMTAwIHggNTAuCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCgwLCA0MCk7Cisg
ICAgICAgIGJvdW5kcyA9IEludFNpemUoMTAwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZDEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0
eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgICAgIGdyYW5k
Q2hpbGQxLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAgIGdyYW5kQ2hpbGQxLT5zZXRG
b3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICAgICAgY2hpbGQxLT5hZGRDaGlsZChncmFu
ZENoaWxkMS5yZWxlYXNlKCkpOworICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDEucmVsZWFz
ZSgpKTsKKyAgICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQyLnJlbGVhc2UoKSk7CisgICAgfQor
CisgICAgQ0NMYXllckltcGwqIGNoaWxkMSA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7Cisg
ICAgQ0NMYXllckltcGwqIGNoaWxkMiA9IHJvb3QtPmNoaWxkcmVuKClbMV0uZ2V0KCk7CisgICAg
Q0NMYXllckltcGwqIGdyYW5kQ2hpbGQxID0gY2hpbGQxLT5jaGlsZHJlbigpWzBdLmdldCgpOwor
CisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBW
ZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0
dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290Lmdl
dCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
KHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVy
ZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNj
aXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5
IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJl
Y3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVh
dGVkLgorICAgIEFTU0VSVF9UUlVFKGNoaWxkMSk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQyKTsK
KyAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMSk7CisgICAgQVNTRVJUX1RSVUUoY2hpbGQxLT5y
ZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
KTsKKyAgICBBU1NFUlRfVFJVRShncmFuZENoaWxkMS0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBB
U1NFUlRfRVEoNHUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRf
RVEoM3UsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsgLy8gVGhl
IHJvb3Qgc3VyZmFjZSBoYXMgdGhlIHJvb3QgbGF5ZXIsIGFuZCBjaGlsZDEncyBhbmQgY2hpbGQy
J3MgcmVuZGVyU3VyZmFjZXMuCisgICAgQVNTRVJUX0VRKDJ1LCBjaGlsZDEtPnJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsgLy8gVGhlIGNoaWxkMSBzdXJmYWNlIGhhcyB0aGUg
Y2hpbGQxIGxheWVyIGFuZCBncmFuZENoaWxkMSdzIHJlbmRlclN1cmZhY2UuCisgICAgQVNTRVJU
X0VRKDF1LCBjaGlsZDItPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAg
ICBBU1NFUlRfRVEoMXUsIGdyYW5kQ2hpbGQxLT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgp
LnNpemUoKSk7CisgICAgQVNTRVJUX0VRKDEsIHJlbmRlclN1cmZhY2VMYXllckxpc3RbMF0tPmlk
KCkpOyAvLyByb290IGxheWVyCisgICAgQVNTRVJUX0VRKDIsIHJlbmRlclN1cmZhY2VMYXllckxp
c3RbMV0tPmlkKCkpOyAvLyBjaGlsZDEKKyAgICBBU1NFUlRfRVEoNCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdFsyXS0+aWQoKSk7IC8vIGdyYW5kQ2hpbGQxCisgICAgQVNTRVJUX0VRKDMsIHJlbmRl
clN1cmZhY2VMYXllckxpc3RbM10tPmlkKCkpOyAvLyBjaGlsZDIKKworICAgIC8vIE5vdGhpbmcg
b3ZlcmxhcHMgdGhlIHJvb3RMYXllciBhdCAoMSwgMSksIHNvIGhpdCB0ZXN0aW5nIHRoZXJlIHNo
b3VsZCBmaW5kIHRoZSByb290IGxheWVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCA9IEludFBv
aW50KDEsIDEpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1Rf
RVEoMSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDE1LCAxNSksIGNoaWxkMSBh
bmQgcm9vdCBhcmUgdGhlIG9ubHkgbGF5ZXJzLiBjaGlsZDEgaXMgZXhwZWN0ZWQgdG8gYmUgb24g
dG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDE1LCAxNSk7CisgICAgcmVzdWx0TGF5ZXIg
PSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBv
aW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXll
cik7CisgICAgRVhQRUNUX0VRKDIsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIC8vIEF0ICg1
MSwgMjApLCBjaGlsZDEgYW5kIGNoaWxkMiBvdmVybGFwLiBjaGlsZDIgaXMgZXhwZWN0ZWQgdG8g
YmUgb24gdG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDUxLCAyMCk7CisgICAgcmVzdWx0
TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQo
dGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1
bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDMsIHJlc3VsdExheWVyLT5pZCgpKTsKKworICAgIC8v
IEF0ICg4MCwgNTEpLCBjaGlsZDIgYW5kIGdyYW5kQ2hpbGQxIG92ZXJsYXAuIGNoaWxkMiBpcyBl
eHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoODAsIDUxKTsK
KyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VS
VF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlkKCkp
OworCisgICAgLy8gQXQgKDUxLCA1MSksIGFsbCBsYXllcnMgb3ZlcmxhcCBlYWNoIG90aGVyLiBj
aGlsZDIgaXMgZXhwZWN0ZWQgdG8gYmUgb24gdG9wIG9mIGFsbCBvdGhlciBsYXllcnMuCisgICAg
dGVzdFBvaW50ID0gSW50UG9pbnQoNTEsIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBF
WFBFQ1RfRVEoMywgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDIwLCA1MSksIGNo
aWxkMSBhbmQgZ3JhbmRDaGlsZDEgb3ZlcmxhcC4gZ3JhbmRDaGlsZDEgaXMgZXhwZWN0ZWQgdG8g
YmUgb24gdG9wLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDIwLCA1MSk7CisgICAgcmVzdWx0
TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQo
dGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1
bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDQsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKworCiAv
LyBGSVhNRToKIC8vIGNvbnRpbnVlIHdvcmtpbmcgb24gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTY4OTQyCiAvLyAgLSBhZGQgYSB0ZXN0IHRvIHZlcmlmeSBjbGlwcGlu
ZyB0aGF0IGNoYW5nZXMgdGhlICJjZW50ZXIgcG9pbnQiCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>147446</attachid>
            <date>2012-06-13 17:06:33 -0700</date>
            <delta_ts>2012-06-13 17:06:33 -0700</delta_ts>
            <desc>Patch that landed</desc>
            <filename>bug-88972-20120613170632.patch</filename>
            <type>text/plain</type>
            <size>50505</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwMjYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjY1MjU3YTE1MWQ4MjEy
NDg3OGNhNDM5NmFhZTEyYmJkNDIzZTU1ZC4uZjU1NjIxZmY2ZjI4Mjg5NDY1MmFmZDQ0NGVjOWJi
YTQ1NDY4NzI0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDEyLTA2LTEzICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
SW1wbGVtZW50IGhpdC10ZXN0aW5nIGZvciBpbXBsLXNpZGUgaW5wdXQgaGFuZGxpbmcgaW4gYWNj
ZWxlcmF0ZWQgY29tcG9zaXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODg5NzIKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpZW5uZSBXYWxrZXIu
CisKKyAgICAgICAgVGhlIG9yaWdpbmFsIGhpdCB0ZXN0aW5nIGNvZGUgYnkgU2FtaSBLeW9zdGls
YS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBzaW1wbGUgaW1wbC1zaWRlIGhp
dC10ZXN0aW5nIGhlbHBlcgorICAgICAgICBmdW5jdGlvbi4gQXQgdGhpcyB0aW1lLCB0aGUgbWFp
biBtb3RpdmF0aW9uIGZvciB0aGlzIGlzIHNvIHRoYXQKKyAgICAgICAgY29tcG9zaXRlZCBzY3Jv
bGxhYmxlIGxheWVycyBjYW4gYmUgc2Nyb2xsZWQgYnkgdGhlIGltcGwgdGhyZWFkIC0tCisgICAg
ICAgIGFuZCBhIHByZXJlcXVpc2l0ZSBmb3IgdGhhdCBpcyB0aGUgYWJpbGl0eSB0byBoaXQtdGVz
dCBvbiB0aGUgaW1wbAorICAgICAgICB0aHJlYWQsIHRvIGRldGVybWluZSB3aGVyZSB0aGUgc2Ny
b2xsaW5nIGFjdGlvbiBzaG91bGQgYmUgYXBwbGllZC4KKworICAgICAgICBUbyBpbXBsZW1lbnQg
dGhlIGFjdHVhbCBoaXQgdGVzdCwgaXQncyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSBoaXQKKyAg
ICAgICAgdGVzdCBpbiB0d28gZXF1aXZhbGVudCB3YXlzOiAoYSkgaW52ZXJzZS1wcm9qZWN0IHRo
ZSBwb2ludCBpbnRvCisgICAgICAgIGxvY2FsIHNwYWNlLCBvciAoYikgZm9yd2FyZC10cmFuc2Zv
cm0gdGhlIHJlY3QgdG8gc2NyZWVuIHNwYWNlCisgICAgICAgIEl0J3Mgbm90IG9idmlvdXMgd2hp
Y2ggb25lIHdvdWxkIHBlcmZvcm0gYmV0dGVyLCBvciB3aGljaCBvbmUKKyAgICAgICAgd291bGQg
YmUgbW9yZSByb2J1c3QgdG8gdyA8IDAgaG9tb2dlbmVvdXMgY2xpcHBpbmcgaXNzdWVzLiBGb3IK
KyAgICAgICAgdGhpcyBwYXRjaCwgd2Ugc2ltcGx5IG9wdCBmb3IgdGhlIGludmVyc2UtcHJvamVj
dGlvbiBhcHByb2FjaC4KKworICAgICAgICAxMCB1bml0IHRlc3RzIGFkZGVkIHRvIENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QuY3BwOgorICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QudmVyaWZ5SGl0VGVzdGluZ0ZvckVtcHR5TGF5ZXJMaXN0CisgICAgICAgICAgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlTGF5ZXIKKyAgICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQb3Np
dGlvbmVkTGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhp
dFRlc3RpbmdGb3JTaW5nbGVSb3RhdGVkTGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQZXJzcGVjdGl2ZUxheWVyCisgICAg
ICAgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC52ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xl
TGF5ZXJXaXRoU2NhbGVkQ29udGVudHMKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JTaW1wbGVDbGlwcGVkTGF5ZXIKKyAgICAgICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aUNsaXBwZWRSb3Rh
dGVkTGF5ZXIKKyAgICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LnZlcmlmeUhpdFRl
c3RpbmdGb3JNdWx0aXBsZUxheWVycworICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QudmVyaWZ5SGl0VGVzdGluZ0Zvck11bHRpcGxlTGF5ZXJMaXN0cworICAgICAgICAKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRIaXRzUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SXNDbGlwcGVkQnlTdXJmYWNlT3JDbGlwUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJ
c0hpdEJ5UG9pbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdENvbW1vbi5oOgorICAgICAgICAoQ0NMYXllclRyZWVIb3N0Q29tbW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnByb2plY3RIb21vZ2VuZW91c1BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Om1hcEhvbW9nZW5lb3VzUG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYXRoVXRp
bDo6bWFwQ2xpcHBlZFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NNYXRoVXRpbDo6cHJvamVj
dENsaXBwZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWF0aFV0aWw6Om1hcENsaXBwZWRR
dWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTWF0aFV0aWw6Om1hcFF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NNYXRoVXRpbDo6cHJvamVjdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuaDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ0NNYXRoVXRpbCk6CisKIDIwMTItMDYtMTMgIENo
YXJsZXMgV2VpICA8Y2hhcmxlcy53ZWlAdG9yY2htb2JpbGUuY29tLmNuPgogCiAgICAgICAgIE5l
ZWQgY3VzdG9taXplZCB0b0RPTVN0cmluZ0xpc3QgZm9yIEluZGV4ZWREQiBKU0MgYmluZGluZy4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggYjY4ZDAwMzVhNzU4YmE5ZDQwNzU5ZjhmZDNh
MDZiYzU1MGEyZjI5OS4uZDNjMGQ4YjlkZDEyMDNjNTBkNGU3MzhkNTBiOWIwMmZjMWNmMGY3MyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNi0xMyAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIEltcGxlbWVudCBoaXQtdGVzdGluZyBmb3IgaW1wbC1zaWRlIGlucHV0IGhhbmRsaW5nIGlu
IGFjY2VsZXJhdGVkIGNvbXBvc2l0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTg4OTcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRyaWVubmUgV2Fs
a2VyLgorCisgICAgICAgICogdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHA6CisK
IDIwMTItMDYtMTMgIERhdmlkIFJldmVtYW4gIDxyZXZlbWFuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbQ2hyb21pdW1dIENyYXNoIHdoZW4gV2ViVmlld0ltcGw6OnNldElzVHJhbnNwYXJlbnQg
aXMgY2FsbGVkIGJlZm9yZSB0aGUgV2ViTGF5ZXJUcmVlVmlldyBoYXMgYmVlbiBpbml0aWFsaXpl
ZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGJiMjg2
MTQ5ZjE1NmMyNmViMDIxZjQzZGJlNmQwMWJmZjM3OTdlZmEuLjNkYTkyMTk1NDk0ZmI3M2Y5ODBi
MjliODZkMjRmMGYyZGFlYzBjZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Q29tbW9uLmNwcApAQCAtODcyLDQgKzg3Miw3MCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhWZWN0b3I8Q0NMYXllckltcGwqPgog
ICAgIGNhbGN1bGF0ZVZpc2libGVBbmRTY2lzc29yUmVjdHNJbnRlcm5hbDxDQ0xheWVySW1wbCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFjZUxheWVy
TGlzdCwgcm9vdFNjaXNzb3JSZWN0KTsKIH0KIAorc3RhdGljIGJvb2wgcG9pbnRIaXRzUmVjdChj
b25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxvY2FsU3BhY2VUb1NjcmVlblNwYWNlVHJhbnNmb3JtLCBGbG9hdFJlY3QgbG9jYWxTcGFj
ZVJlY3QpCit7CisgICAgLy8gVHJhbnNmb3JtIHRoZSBoaXQgdGVzdCBwb2ludCBmcm9tIHNjcmVl
biBzcGFjZSB0byB0aGUgbG9jYWwgc3BhY2Ugb2YgdGhlIGdpdmVuIHJlY3QuCisgICAgYm9vbCBj
bGlwcGVkID0gZmFsc2U7CisgICAgRmxvYXRQb2ludCBoaXRUZXN0UG9pbnRJbkxvY2FsU3BhY2Ug
PSBDQ01hdGhVdGlsOjpwcm9qZWN0UG9pbnQobG9jYWxTcGFjZVRvU2NyZWVuU3BhY2VUcmFuc2Zv
cm0uaW52ZXJzZSgpLCBGbG9hdFBvaW50KHZpZXdwb3J0UG9pbnQpLCBjbGlwcGVkKTsKKworICAg
IC8vIElmIHByb2plY3RQb2ludCBjb3VsZCBub3QgcHJvamVjdCB0byBhIHZhbGlkIHZhbHVlLCB0
aGVuIHdlIGFzc3VtZSB0aGF0IHRoaXMgcG9pbnQgZG9lc24ndCBoaXQgdGhpcyByZWN0LgorICAg
IGlmIChjbGlwcGVkKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbG9jYWxT
cGFjZVJlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50SW5Mb2NhbFNwYWNlKTsKK30KKworc3RhdGlj
IGJvb2wgcG9pbnRJc0NsaXBwZWRCeVN1cmZhY2VPckNsaXBSZWN0KGNvbnN0IEludFBvaW50JiB2
aWV3cG9ydFBvaW50LCBDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgQ0NMYXllckltcGwqIGN1
cnJlbnRMYXllciA9IGxheWVyOworCisgICAgLy8gV2FsayB1cCB0aGUgbGF5ZXIgdHJlZSBhbmQg
aGl0LXRlc3QgYW55IHJlbmRlclN1cmZhY2VzIGFuZCBhbnkgbGF5ZXIgY2xpcFJlY3RzIHRoYXQg
YXJlIGFjdGl2ZS4KKyAgICB3aGlsZSAoY3VycmVudExheWVyKSB7CisgICAgICAgIGlmIChjdXJy
ZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiAhcG9pbnRIaXRzUmVjdCh2aWV3cG9ydFBvaW50
LCBjdXJyZW50TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSwg
Y3VycmVudExheWVyLT5yZW5kZXJTdXJmYWNlKCktPmNvbnRlbnRSZWN0KCkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IGNsaXBSZWN0cyBhcmUgYWN0
dWFsbHkgaW4gdGFyZ2V0U3VyZmFjZSBzcGFjZSwgc28gdGhlIHRyYW5zZm9ybSB3ZQorICAgICAg
ICAvLyBoYXZlIHRvIHByb3ZpZGUgaXMgdGhlIHRhcmdldCBzdXJmYWNlJ3Mgc2NyZWVuU3BhY2VU
cmFuc2Zvcm0uCisgICAgICAgIGlmIChjdXJyZW50TGF5ZXItPnVzZXNMYXllckNsaXBwaW5nKCkg
JiYgIXBvaW50SGl0c1JlY3Qodmlld3BvcnRQb2ludCwgY3VycmVudExheWVyLT50YXJnZXRSZW5k
ZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCksIGN1cnJlbnRMYXllci0+Y2xpcFJl
Y3QoKSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBjdXJyZW50TGF5ZXIg
PSBjdXJyZW50TGF5ZXItPnBhcmVudCgpOworICAgIH0KKworICAgIC8vIElmIHdlIGhhdmUgZmlu
aXNoZWQgd2Fsa2luZyBhbGwgYW5jZXN0b3JzIHdpdGhvdXQgaGF2aW5nIGFscmVhZHkgZXhpdGVk
LCB0aGVuIHRoZSBwb2ludCBpcyBub3QgY2xpcHBlZCBieSBhbnkgYW5jZXN0b3JzLgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworQ0NMYXllckltcGwqIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVyVGhhdElzSGl0QnlQb2ludChjb25zdCBJbnRQb2ludCYgdmlld3BvcnRQb2ludCwgVmVj
dG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QpCit7CisgICAgQ0NMYXll
ckltcGwqIGZvdW5kTGF5ZXIgPSAwOworCisgICAgdHlwZWRlZiBDQ0xheWVySXRlcmF0b3I8Q0NM
YXllckltcGwsIFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJJ
dGVyYXRvckFjdGlvbnM6OkZyb250VG9CYWNrPiBDQ0xheWVySXRlcmF0b3JUeXBlOworICAgIEND
TGF5ZXJJdGVyYXRvclR5cGUgZW5kID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6ZW5kKCZyZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKKworICAgIGZvciAoQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IEND
TGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY29uc2lkZXIgcmVuZGVy
U3VyZmFjZXMgZm9yIGhpdCB0ZXN0aW5nLgorICAgICAgICBpZiAoIWl0LnJlcHJlc2VudHNJdHNl
bGYoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIENDTGF5ZXJJbXBsKiBjdXJy
ZW50TGF5ZXIgPSAoKml0KTsKKworICAgICAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KEZsb2F0UG9p
bnQ6Onplcm8oKSwgY3VycmVudExheWVyLT5ib3VuZHMoKSk7CisgICAgICAgIGlmICghcG9pbnRI
aXRzUmVjdCh2aWV3cG9ydFBvaW50LCBjdXJyZW50TGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3Jt
KCksIGxheWVyUmVjdCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvLyBBdCB0
aGlzIHBvaW50LCB3ZSB0aGluayB0aGUgcG9pbnQgZG9lcyBoaXQgdGhlIGxheWVyLCBidXQgd2Ug
bmVlZCB0byB3YWxrIHVwCisgICAgICAgIC8vIHRoZSBwYXJlbnRzIHRvIGVuc3VyZSB0aGF0IHRo
ZSBsYXllciB3YXMgbm90IGNsaXBwZWQgaW4gc3VjaCBhIHdheSB0aGF0IHRoZQorICAgICAgICAv
LyBoaXQgcG9pbnQgYWN0dWFsbHkgc2hvdWxkIG5vdCBoaXQgdGhlIGxheWVyLgorICAgICAgICBp
ZiAocG9pbnRJc0NsaXBwZWRCeVN1cmZhY2VPckNsaXBSZWN0KHZpZXdwb3J0UG9pbnQsIGN1cnJl
bnRMYXllcikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3VuZExheWVyID0g
Y3VycmVudExheWVyOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbiBw
b3RlbnRpYWxseSByZXR1cm4gMCwgd2hpY2ggbWVhbnMgdGhlIHZpZXdwb3J0UG9pbnQgZGlkIG5v
dCBzdWNjZXNzZnVsbHkgaGl0IHRlc3QgYW55IGxheWVycywgbm90IGV2ZW4gdGhlIHJvb3QgbGF5
ZXIuCisgICAgcmV0dXJuIGZvdW5kTGF5ZXI7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKaW5kZXggZjgwNDUxNjE3ZGQy
NWZiMTRjZjExZmE2ZWRhZTk3NDlhZTI1ZDc2Zi4uZTVlNGZkOWEyYzIzODJiOWU5MjVjYTc5NDk4
NTkzNzcxNjgyMjlkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgK
QEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZVZpc2li
bGVBbmRTY2lzc29yUmVjdHMoVmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIGNvbnN0IEZsb2F0UmVjdCYgcm9vdFNjaXNzb3JSZWN0KTsKICAgICBzdGF0aWMgdm9p
ZCBjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgY29uc3QgRmxvYXRSZWN0JiByb290U2Np
c3NvclJlY3QpOwogCisgICAgLy8gUGVyZm9ybXMgaGl0IHRlc3RpbmcgZm9yIGEgZ2l2ZW4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdC4KKyAgICBzdGF0aWMgQ0NMYXllckltcGwqIGZpbmRMYXllclRo
YXRJc0hpdEJ5UG9pbnQoY29uc3QgSW50UG9pbnQmIHZpZXdwb3J0UG9pbnQsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKwogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIExheWVyVHlwZT4gc3RhdGljIGJvb2wgcmVuZGVyU3VyZmFjZUNvbnRyaWJ1dGVzVG9UYXJn
ZXQoTGF5ZXJUeXBlKiwgaW50IHRhcmdldFN1cmZhY2VMYXllcklEKTsKIAogICAgIHN0cnVjdCBT
Y3JvbGxVcGRhdGVJbmZvIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5jcHAKaW5kZXggODY3NDY5ZGRlMjRm
MGNjZTVkNTU5Yzc1ZDliNmUwY2MyZWQxNzkzOS4uODQ3MWIzZTZhMTAxMzY3OGIwMzFhYTBmNTc1
OTVlNjg5ZmYyYzA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5jcHAKQEAgLTM1LDcgKzM1LDcgQEAg
dXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1zdGF0aWMgSG9tb2dlbmVvdXNDb29yZGluYXRlIHByb2plY3RQb2ludChjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwKQor
c3RhdGljIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBwcm9qZWN0SG9tb2dlbmVvdXNQb2ludChjb25z
dCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
KQogewogICAgIC8vIEluIHRoaXMgY2FzZSwgdGhlIGxheWVyIHdlIGFyZSB0cnlpbmcgdG8gcHJv
amVjdCBvbnRvIGlzIHBlcnBlbmRpY3VsYXIgdG8gcmF5CiAgICAgLy8gKHBvaW50IHAgYW5kIHot
YXhpcyBkaXJlY3Rpb24pIHRoYXQgd2UgYXJlIHRyeWluZyB0byBwcm9qZWN0LiBUaGlzIGhhcHBl
bnMgd2hlbiB0aGUKQEAgLTU3LDcgKzU3LDcgQEAgc3RhdGljIEhvbW9nZW5lb3VzQ29vcmRpbmF0
ZSBwcm9qZWN0UG9pbnQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm8KICAg
ICByZXR1cm4gSG9tb2dlbmVvdXNDb29yZGluYXRlKG91dFgsIG91dFksIG91dFosIG91dFcpOwog
fQogCi1zdGF0aWMgSG9tb2dlbmVvdXNDb29yZGluYXRlIG1hcFBvaW50KGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHApCitzdGF0aWMg
SG9tb2dlbmVvdXNDb29yZGluYXRlIG1hcEhvbW9nZW5lb3VzUG9pbnQoY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICBk
b3VibGUgeCA9IHAueCgpOwogICAgIGRvdWJsZSB5ID0gcC55KCk7CkBAIC0xMzAsMTAgKzEzMCwx
MCBAQCBGbG9hdFJlY3QgQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QoY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgYwogCiAgICAgLy8gQXBwbHkgdGhlIHRyYW5zZm9y
bSwgYnV0IHJldGFpbiB0aGUgcmVzdWx0IGluIGhvbW9nZW5lb3VzIGNvb3JkaW5hdGVzLgogICAg
IEZsb2F0UXVhZCBxID0gRmxvYXRRdWFkKEZsb2F0UmVjdChzcmNSZWN0KSk7Ci0gICAgSG9tb2dl
bmVvdXNDb29yZGluYXRlIGgxID0gbWFwUG9pbnQodHJhbnNmb3JtLCBxLnAxKCkpOwotICAgIEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IG1hcFBvaW50KHRyYW5zZm9ybSwgcS5wMigpKTsKLSAg
ICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDMgPSBtYXBQb2ludCh0cmFuc2Zvcm0sIHEucDMoKSk7
Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGg0ID0gbWFwUG9pbnQodHJhbnNmb3JtLCBxLnA0
KCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9IG1hcEhvbW9nZW5lb3VzUG9pbnQo
dHJhbnNmb3JtLCBxLnAxKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IG1hcEhv
bW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBxLnAyKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSBoMyA9IG1hcEhvbW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBxLnAzKCkpOworICAgIEhv
bW9nZW5lb3VzQ29vcmRpbmF0ZSBoNCA9IG1hcEhvbW9nZW5lb3VzUG9pbnQodHJhbnNmb3JtLCBx
LnA0KCkpOwogCiAgICAgcmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdDbGlwcGVkUmVjdChoMSwgaDIs
IGgzLCBoNCk7CiB9CkBAIC0xNDIsMjAgKzE0MiwyMCBAQCBGbG9hdFJlY3QgQ0NNYXRoVXRpbDo6
cHJvamVjdENsaXBwZWRSZWN0KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cgogewogICAgIC8vIFBlcmZvcm0gdGhlIHByb2plY3Rpb24sIGJ1dCByZXRhaW4gdGhlIHJlc3Vs
dCBpbiBob21vZ2VuZW91cyBjb29yZGluYXRlcy4KICAgICBGbG9hdFF1YWQgcSA9IEZsb2F0UXVh
ZChGbG9hdFJlY3Qoc3JjUmVjdCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9IHBy
b2plY3RQb2ludCh0cmFuc2Zvcm0sIHEucDEoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRl
IGgyID0gcHJvamVjdFBvaW50KHRyYW5zZm9ybSwgcS5wMigpKTsKLSAgICBIb21vZ2VuZW91c0Nv
b3JkaW5hdGUgaDMgPSBwcm9qZWN0UG9pbnQodHJhbnNmb3JtLCBxLnAzKCkpOwotICAgIEhvbW9n
ZW5lb3VzQ29vcmRpbmF0ZSBoNCA9IHByb2plY3RQb2ludCh0cmFuc2Zvcm0sIHEucDQoKSk7Cisg
ICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgxID0gcHJvamVjdEhvbW9nZW5lb3VzUG9pbnQodHJh
bnNmb3JtLCBxLnAxKCkpOworICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IHByb2plY3RI
b21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wMigpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3Jk
aW5hdGUgaDMgPSBwcm9qZWN0SG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0sIHEucDMoKSk7Cisg
ICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGg0ID0gcHJvamVjdEhvbW9nZW5lb3VzUG9pbnQodHJh
bnNmb3JtLCBxLnA0KCkpOwogCiAgICAgcmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdDbGlwcGVkUmVj
dChoMSwgaDIsIGgzLCBoNCk7CiB9CiAKIHZvaWQgQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFF1YWQo
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRRdWFk
JiBzcmNRdWFkLCBGbG9hdFBvaW50IGNsaXBwZWRRdWFkWzhdLCBpbnQmIG51bVZlcnRpY2VzSW5D
bGlwcGVkUXVhZCkKIHsKLSAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDEgPSBtYXBQb2ludCh0
cmFuc2Zvcm0sIHNyY1F1YWQucDEoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgyID0g
bWFwUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAyKCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRp
bmF0ZSBoMyA9IG1hcFBvaW50KHRyYW5zZm9ybSwgc3JjUXVhZC5wMygpKTsKLSAgICBIb21vZ2Vu
ZW91c0Nvb3JkaW5hdGUgaDQgPSBtYXBQb2ludCh0cmFuc2Zvcm0sIHNyY1F1YWQucDQoKSk7Cisg
ICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgxID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zv
cm0sIHNyY1F1YWQucDEoKSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgyID0gbWFwSG9t
b2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0sIHNyY1F1YWQucDIoKSk7CisgICAgSG9tb2dlbmVvdXND
b29yZGluYXRlIGgzID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0cmFuc2Zvcm0sIHNyY1F1YWQucDMo
KSk7CisgICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGg0ID0gbWFwSG9tb2dlbmVvdXNQb2ludCh0
cmFuc2Zvcm0sIHNyY1F1YWQucDQoKSk7CiAKICAgICAvLyBUaGUgb3JkZXIgb2YgYWRkaW5nIHRo
ZSB2ZXJ0aWNlcyB0byB0aGUgYXJyYXkgaXMgY2hvc2VuIHNvIHRoYXQgY2xvY2t3aXNlIC8gY291
bnRlci1jbG9ja3dpc2Ugb3JpZW50YXRpb24gaXMgcmV0YWluZWQuCiAKQEAgLTI2MywxMCArMjYz
LDEwIEBAIEZsb2F0UXVhZCBDQ01hdGhVdGlsOjptYXBRdWFkKGNvbnN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsCiAgICAgICAgIHJldHVybiBtYXBwZWRRdWFk
OwogICAgIH0KIAotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMSA9IG1hcFBvaW50KHRyYW5z
Zm9ybSwgcS5wMSgpKTsKLSAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDIgPSBtYXBQb2ludCh0
cmFuc2Zvcm0sIHEucDIoKSk7Ci0gICAgSG9tb2dlbmVvdXNDb29yZGluYXRlIGgzID0gbWFwUG9p
bnQodHJhbnNmb3JtLCBxLnAzKCkpOwotICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoNCA9IG1h
cFBvaW50KHRyYW5zZm9ybSwgcS5wNCgpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDEg
PSBtYXBIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wMSgpKTsKKyAgICBIb21vZ2VuZW91
c0Nvb3JkaW5hdGUgaDIgPSBtYXBIb21vZ2VuZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wMigpKTsK
KyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDMgPSBtYXBIb21vZ2VuZW91c1BvaW50KHRyYW5z
Zm9ybSwgcS5wMygpKTsKKyAgICBIb21vZ2VuZW91c0Nvb3JkaW5hdGUgaDQgPSBtYXBIb21vZ2Vu
ZW91c1BvaW50KHRyYW5zZm9ybSwgcS5wNCgpKTsKIAogICAgIGNsaXBwZWQgPSBoMS5zaG91bGRC
ZUNsaXBwZWQoKSB8fCBoMi5zaG91bGRCZUNsaXBwZWQoKSB8fCBoMy5zaG91bGRCZUNsaXBwZWQo
KSB8fCBoNC5zaG91bGRCZUNsaXBwZWQoKTsKIApAQCAtMjkwLDQgKzI5MCwyOSBAQCBGbG9hdFF1
YWQgQ0NNYXRoVXRpbDo6cHJvamVjdFF1YWQoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29ucwogICAgIHJldHVybiBwcm9qZWN0ZWRRdWFkOwogfQogCitGbG9hdFBv
aW50IENDTWF0aFV0aWw6OnByb2plY3RQb2ludChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwLCBib29sJiBjbGlwcGVkKQoreworICAg
IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoID0gcHJvamVjdEhvbW9nZW5lb3VzUG9pbnQodHJhbnNm
b3JtLCBwKTsKKworICAgIGlmIChoLncgPiAwKSB7CisgICAgICAgIC8vIFRoZSBjYXJ0ZXNpYW4g
Y29vcmRpbmF0ZXMgd2lsbCBiZSB2YWxpZCBpbiB0aGlzIGNhc2UuCisgICAgICAgIGNsaXBwZWQg
PSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGguY2FydGVzaWFuUG9pbnQyZCgpOworICAgIH0KKwor
ICAgIC8vIFRoZSBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMgd2lsbCBiZSBpbnZhbGlkIGFmdGVyIGRp
dmlkaW5nIGJ5IHcuCisgICAgY2xpcHBlZCA9IHRydWU7CisKKyAgICAvLyBBdm9pZCBkaXZpZGlu
ZyBieSB3IGlmIHcgPT0gMC4KKyAgICBpZiAoIWgudykKKyAgICAgICAgcmV0dXJuIEZsb2F0UG9p
bnQoKTsKKworICAgIC8vIFRoaXMgcmV0dXJuIHZhbHVlIHdpbGwgYmUgaW52YWxpZCBiZWNhdXNl
IGNsaXBwZWQgPT0gdHJ1ZSwgYnV0ICgxKSB1c2VycyBvZiB0aGlzCisgICAgLy8gY29kZSBzaG91
bGQgYmUgaWdub3JpbmcgdGhlIHJldHVybiB2YWx1ZSB3aGVuIGNsaXBwZWQgPT0gdHJ1ZSBhbnl3
YXksIGFuZCAoMikgdGhpcworICAgIC8vIGJlaGF2aW9yIGlzIG1vcmUgY29uc2lzdGVudCB3aXRo
IGV4aXN0aW5nIGJlaGF2aW9yIG9mIFdlYktpdCB0cmFuc2Zvcm1zIGlmIHRoZSB1c2VyCisgICAg
Ly8gcmVhbGx5IGRvZXMgbm90IGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgorICAgIHJldHVybiBo
LmNhcnRlc2lhblBvaW50MmQoKTsKK30KKworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01h
dGhVdGlsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q01hdGhVdGlsLmgKaW5kZXggNjNjYTAwMzEyNDBkMGJiY2ZmZDJmYTBkNTY5MTBjMjgwNzY2ODI1
Mi4uY2JjZWRhMGExNzQzZTE4NjMxZWRmZGE1NDI2Y2M1YWY1YmJjZjBhZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0
aFV0aWwuaApAQCAtMzQsNyArMzQsNiBAQCBjbGFzcyBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UmVjdDsKLWNsYXNzIEZsb2F0UG9pbnQ7
CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBGbG9hdFF1YWQ7CiAKQEAgLTk5LDYgKzk4LDcgQEAg
cHVibGljOgogICAgIC8vIGNvcnJlY3RseSBkZXRlY3QgdGhlIGNsaXBwZWQgY29uZGl0aW9uIHZp
YSB0aGUgYm9vbGVhbiBjbGlwcGVkLgogICAgIHN0YXRpYyBGbG9hdFF1YWQgbWFwUXVhZChjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRRdWFkJiwgYm9v
bCYgY2xpcHBlZCk7CiAgICAgc3RhdGljIEZsb2F0UXVhZCBwcm9qZWN0UXVhZChjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRRdWFkJiwgYm9vbCYgY2xp
cHBlZCk7CisgICAgc3RhdGljIEZsb2F0UG9pbnQgcHJvamVjdFBvaW50KGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFBvaW50JiwgYm9vbCYgY2xpcHBl
ZCk7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LmNwcAppbmRl
eCA4NDBjNGVkM2FmOTQyZTk5NTZlY2FmM2I1OTI0YjZjZTZmNGViNDYwLi5iNWRjNzkxYjQwMGUx
MzA4ODBkZGFmMzBkN2IxYTYzMDA4MGFiNzE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdC5jcHAKQEAgLTI5
MTAsNiArMjkxMCw2NzggQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlC
YWNrRmFjZUN1bGxpbmdXaXRoUHJlc2VydmVzM2RGb3JGbGF0dGVuaW4KICAgICBFWFBFQ1RfRVEo
Y2hpbGQxLT5pZCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzFdLT5yZW5kZXJTdXJmYWNlKCkt
PmxheWVyTGlzdCgpWzFdLT5pZCgpKTsKIH0KIAorVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yRW1wdHlMYXllckxpc3QpCit7CisgICAgLy8gSGl0IHRl
c3Rpbmcgb24gYW4gZW1wdHkgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCBzaG91bGQgcmV0dXJuIGEg
bnVsbCBwb2ludGVyLgorCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKKworICAgIEludFBvaW50IHRlc3RQb2ludCgwLCAwKTsKKyAgICBDQ0xheWVySW1w
bCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hp
dEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBFQ1Rf
RkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMTAsIDIwKTsK
KyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElz
SGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVD
VF9GQUxTRShyZXN1bHRMYXllcik7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5SGl0VGVzdGluZ0ZvclNpbmdsZUxheWVyKQoreworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0
ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRS
ZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAg
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQg
YW5jaG9yKDAsIDApOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6
ZSBib3VuZHMoMTAwLCAxMDApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9v
dC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9u
LCBib3VuZHMsIGZhbHNlKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Np
c3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCBy
ZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQu
CisgICAgQVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAg
QVNTRVJUX0VRKDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7
CisKKyAgICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91
bGQgcmV0dXJuIGEgbnVsbCBwb2ludGVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCgxMDEsIDEw
MSk7CisgICAgQ0NMYXllckltcGwqIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAgIHRlc3RQb2ludCA9
IEludFBvaW50KC0xLCAtMSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRl
c3RpbmcgZm9yIGEgcG9pbnQgaW5zaWRlIHNob3VsZCByZXR1cm4gdGhlIHJvb3QgbGF5ZXIuCisg
ICAgdGVzdFBvaW50ID0gSW50UG9pbnQoMSwgMSk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVy
VHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAg
RVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICB0ZXN0UG9pbnQgPSBJ
bnRQb2ludCg5OSwgOTkpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0
NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRl
c3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQb3NpdGlvbmVkTGF5ZXIpCit7CisgICAgT3du
UHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgxMjM0NSk7CisgICAg
cm9vdC0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+
c2V0Q29udGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAw
KSkpOworCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAg
RmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbig1MCwgNTAp
OyAvLyB0aGlzIGxheWVyIGlzIHBvc2l0aW9uZWQsIGFuZCBoaXQgdGVzdGluZyBzaG91bGQgY29y
cmVjdGx5IGtub3cgd2hlcmUgdGhlIGxheWVyIGlzIGxvY2F0ZWQuCisgICAgSW50U2l6ZSBib3Vu
ZHMoMTAwLCAxMDApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3Vu
ZHMsIGZhbHNlKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICBWZWN0
b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQo
KSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJl
Y3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0Lgor
CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAg
QVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJU
X0VRKDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAg
ICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0
dXJuIGEgbnVsbCBwb2ludGVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCg0OSwgNDkpOworICAg
IENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUg
bGF5ZXIgZXhpc3RzIGF0ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVy
ZSBzaW5jZSB0aGUgcm9vdCByZW5kZXJTdXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIHRlc3RQ
b2ludCA9IEludFBvaW50KDEwMSwgMTAxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAv
LyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBs
YXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg1MSwgNTEpOworICAgIHJlc3VsdExheWVy
ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQ
b2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5
ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVz
dFBvaW50ID0gSW50UG9pbnQoOTksIDk5KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVl
SG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBF
Q1RfRVEoMTIzNDUsIHJlc3VsdExheWVyLT5pZCgpKTsKK30KKworVEVTVChDQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LCB2ZXJpZnlIaXRUZXN0aW5nRm9yU2luZ2xlUm90YXRlZExheWVyKQorewor
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzNDUp
OworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJm
YWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgx
MDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4
OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9uNDVEZWdyZWVzQWJvdXRDZW50
ZXI7CisgICAgcm90YXRpb240NURlZ3JlZXNBYm91dENlbnRlci50cmFuc2xhdGUoNTAsIDUwKTsK
KyAgICByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyLnJvdGF0ZTNkKDAsIDAsIDQ1KTsKKyAg
ICByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyLnRyYW5zbGF0ZSgtNTAsIC01MCk7CisgICAg
RmxvYXRQb2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsK
KyAgICBJbnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9y
VGVzdGluZyhyb290LmdldCgpLCByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q2VudGVyLCBpZGVudGl0
eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0
RHJhd3NDb250ZW50KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsK
KyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxp
c3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBG
bG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUg
aGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUg
c2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVyU3VyZmFj
ZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9yIHBvaW50
cyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAvLyBUaGVzZSBjb3JuZXJzIHdvdWxkIGhhdmUgYmVl
biBpbnNpZGUgdGhlIHVuLXRyYW5zZm9ybWVkIGxheWVyLCBidXQgdGhleSBzaG91bGQgbm90IGhp
dCB0aGUgY29ycmVjdGx5IHRyYW5zZm9ybWVkIGxheWVyLgorICAgIEludFBvaW50IHRlc3RQb2lu
dCg5OSwgOTkpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICB0ZXN0
UG9pbnQgPSBJbnRQb2ludCgxLCAxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9z
dENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBI
aXQgdGVzdGluZyBmb3IgYSBwb2ludCBpbnNpZGUgc2hvdWxkIHJldHVybiB0aGUgcm9vdCBsYXll
ci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCgxLCA1MCk7CisgICAgcmVzdWx0TGF5ZXIgPSBD
Q0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7
CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBIaXQg
dGVzdGluZyB0aGUgY29ybmVycyB0aGF0IHdvdWxkIG92ZXJsYXAgdGhlIHVuY2xpcHBlZCBsYXll
ciwgYnV0IGFyZSBvdXRzaWRlIHRoZSBjbGlwcGVkIHJlZ2lvbi4KKyAgICB0ZXN0UG9pbnQgPSBJ
bnRQb2ludCg1MCwgLTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9u
OjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdCk7CisgICAgQVNTRVJUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAgIHRlc3RQb2ludCA9
IEludFBvaW50KC0xLCA1MCk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKKyAgICBBU1NFUlRfRkFMU0UocmVzdWx0TGF5ZXIpOworfQorCitURVNUKENDTGF5
ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVQZXJzcGVjdGl2
ZUxheWVyKQoreworICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMTIzNDUpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAgICByb290
LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJlY3QoSW50UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OworCisgICAgLy8gcGVyc3BlY3RpdmVQcm9qZWN0aW9uQWJvdXRDZW50ZXIg
KiB0cmFuc2xhdGlvbkJ5WiBpcyBkZXNpZ25lZCBzbyB0aGF0IHRoZSAxMDAgeCAxMDAgbGF5ZXIg
YmVjb21lcyA1MCB4IDUwLCBhbmQgcmVtYWlucyBjZW50ZXJlZCBhdCAoNTAsIDUwKS4KKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlcjsK
KyAgICBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlci50cmFuc2xhdGUoNTAsIDUwKTsK
KyAgICBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlci5hcHBseVBlcnNwZWN0aXZlKDEp
OworICAgIHBlcnNwZWN0aXZlUHJvamVjdGlvbkFib3V0Q2VudGVyLnRyYW5zbGF0ZSgtNTAsIC01
MCk7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNsYXRpb25CeVo7CisgICAgdHJh
bnNsYXRpb25CeVoudHJhbnNsYXRlM2QoMCwgMCwgLTEpOworCisgICAgRmxvYXRQb2ludCBhbmNo
b3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJbnRTaXplIGJv
dW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyb290Lmdl
dCgpLCBwZXJzcGVjdGl2ZVByb2plY3Rpb25BYm91dENlbnRlciAqIHRyYW5zbGF0aW9uQnlaLCBp
ZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9v
dC0+c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVy
TGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgpKTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJvb3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlM
YXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNpemUpOworICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNzb3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNjaXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUg
d2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3QgcmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVj
ayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVkLgorICAgIEFTU0VSVF9FUSgxdSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgcm9vdC0+cmVuZGVy
U3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9y
IHBvaW50cyBvdXRzaWRlIHRoZSBsYXllci4KKyAgICAvLyBUaGVzZSBjb3JuZXJzIHdvdWxkIGhh
dmUgYmVlbiBpbnNpZGUgdGhlIHVuLXRyYW5zZm9ybWVkIGxheWVyLCBidXQgdGhleSBzaG91bGQg
bm90IGhpdCB0aGUgY29ycmVjdGx5IHRyYW5zZm9ybWVkIGxheWVyLgorICAgIEludFBvaW50IHRl
c3RQb2ludCgyNCwgMjQpOworICAgIENDTGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAg
ICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NiwgNzYpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKwor
ICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBhIHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJuIHRoZSBy
b290IGxheWVyLgorICAgIHRlc3RQb2ludCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVzdWx0
TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQo
dGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1
bHRMYXllcik7CisgICAgRVhQRUNUX0VRKDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAg
ICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3NCwgNzQpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAg
IEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJU
cmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUhpdFRlc3RpbmdGb3JTaW5nbGVMYXllcldpdGhTY2Fs
ZWRDb250ZW50cykKK3sKKyAgICAvLyBBIGxheWVyJ3MgdmlzaWJsZUxheWVyUmVjdCBpcyBhY3R1
YWxseSBpbiB0aGUgbGF5ZXIncyBjb250ZW50IHNwYWNlLiBUaGUKKyAgICAvLyBzY3JlZW5TcGFj
ZVRyYW5zZm9ybSBjb252ZXJ0cyBmcm9tIHRoZSBsYXllcidzIG9yaWdpbiBzcGFjZSB0byBzY3Jl
ZW4gc3BhY2UuIFRoaXMKKyAgICAvLyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCBoaXQgdGVzdGluZyB3
b3JrcyBjb3JyZWN0bHkgYWNjb3VudHMgZm9yIHRoZSBjb250ZW50cyBzY2FsZS4KKyAgICAvLyBB
IGNvbnRlbnRzU2NhbGUgdGhhdCBpcyBub3QgMSBlZmZlY3RpdmVseSBmb3JjZXMgYSBub24taWRl
bnRpdHkgdHJhbnNmb3JtIGJldHdlZW4KKyAgICAvLyBsYXllcidzIGNvbnRlbnQgc3BhY2UgYW5k
IGxheWVyJ3Mgb3JpZ2luIHNwYWNlLCB3aGljaCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlCisgICAg
Ly8gc2NyZWVuU3BhY2VUcmFuc2Zvcm1uLiBUaGUgaGl0IHRlc3RpbmcgY29kZSBtdXN0IHRha2Ug
dGhpcyBpbnRvIGFjY291bnQuCisgICAgLy8KKyAgICAvLyBUbyB0ZXN0IHRoaXMsIHRoZSBsYXll
ciBpcyBwb3NpdGlvbmVkIGF0ICgyNSwgMjUpLCBhbmQgaXMgc2l6ZSAoNTAsIDUwKS4gSWYKKyAg
ICAvLyBjb250ZW50c1NjYWxlIGlzIGlnbm9yZWQsIHRoZW4gaGl0IHRlc3Rpbmcgd2lsbCBtaXMt
aW50ZXJwcmV0IHRoZSB2aXNpYmxlTGF5ZXJSZWN0CisgICAgLy8gYXMgYmVpbmcgbGFyZ2VyIHRo
YW4gdGhlIGFjdHVhbCBib3VuZHMgb2YgdGhlIGxheWVyLgorICAgIC8vCisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMzQ1KTsKKyAgICByb290
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRD
b250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7
CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBGbG9h
dFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDI1LCAyNSk7Cisg
ICAgSW50U2l6ZSBib3VuZHMoNTAsIDUwKTsKKyAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0
aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgYW5jaG9yLCBw
b3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+c2V0RHJhd3NDb250ZW50KHRydWUp
OworCisgICAgcm9vdC0+c2V0Q29udGVudEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7CisKKyAg
ICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3Rv
cjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVT
aXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkp
OworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9v
dC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6
ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3Nv
clJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Np
c3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCBy
ZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQu
CisgICAgLy8gVGhlIHZpc2libGVMYXllclJlY3QgaXMgYWN0dWFsbHkgMTAweDEwMCwgZXZlbiB0
aG91Z2ggdGhlIGxheW91dCBzaXplIG9mIHRoZSBsYXllciBpcyA1MHg1MCwgcG9zaXRpb25lZCBh
dCAyNXgyNS4KKyAgICBFWFBFQ1RfSU5UX1JFQ1RfRVEoSW50UmVjdChJbnRQb2ludDo6emVybygp
LCBJbnRTaXplKDEwMCwgMTAwKSksIHJvb3QtPnZpc2libGVMYXllclJlY3QoKSk7CisgICAgQVNT
RVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJUX0VR
KDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAgICAv
LyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0dXJu
IGEgbnVsbCBwb2ludGVyLgorICAgIEludFBvaW50IHRlc3RQb2ludCgyNCwgMjQpOworICAgIEND
TGF5ZXJJbXBsKiByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVy
VGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IEVYUEVDVF9GQUxTRShyZXN1bHRMYXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgbGF5
ZXIgZXhpc3RzIGF0ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVyZSBz
aW5jZSB0aGUgcm9vdCByZW5kZXJTdXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIC8vIFRoaXMg
Y2FzZSBpbiBwYXJ0aWN1bGFyIGlzIGxpa2VseSB0byBmYWlsIGlmIGNvbnRlbnRzIHNjYWxlIGlz
IG5vdCBjb3JyZWN0bHkgYWNjb3VudGVkIGZvci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3
NiwgNzYpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5
ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cisg
ICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKworICAgIC8vIEhpdCB0ZXN0aW5nIGZvciBh
IHBvaW50IGluc2lkZSBzaG91bGQgcmV0dXJuIHRoZSByb290IGxheWVyLgorICAgIHRlc3RQb2lu
dCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RD
b21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNUX0VR
KDEyMzQ1LCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg3
NCwgNzQpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5
ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Cisg
ICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxMjM0NSwgcmVzdWx0
TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eUhpdFRlc3RpbmdGb3JTaW1wbGVDbGlwcGVkTGF5ZXIpCit7CisgICAgLy8gVGVzdCB0aGF0IGhp
dC10ZXN0aW5nIHdpbGwgb25seSB3b3JrIGZvciB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIGEgbGF5
ZXIsIGFuZCBub3QKKyAgICAvLyB0aGUgZW50aXJlIGxheWVyIGJvdW5kcy4gSGVyZSB3ZSBqdXN0
IHRlc3QgdGhlIHNpbXBsZSBheGlzLWFsaWduZWQgY2FzZS4KKworICAgIE93blB0cjxDQ0xheWVy
SW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMTIzKTsKKyAgICByb290LT5jcmVhdGVS
ZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVj
dChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFu
Y2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50IHBvc2l0aW9uKDI1LCAyNSk7IC8vIHRoaXMgbGF5
ZXIgaXMgcG9zaXRpb25lZCwgYW5kIGhpdCB0ZXN0aW5nIHNob3VsZCBjb3JyZWN0bHkga25vdyB3
aGVyZSB0aGUgbGF5ZXIgaXMgbG9jYXRlZC4KKyAgICBJbnRTaXplIGJvdW5kcyg1MCwgNTApOwor
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAg
ICByb290LT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgeworICAgICAgICBPd25QdHI8
Q0NMYXllckltcGw+IGNoaWxkID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0NTYpOworICAgICAgICBw
b3NpdGlvbiA9IEZsb2F0UG9pbnQoLTUwLCAtNTApOworICAgICAgICBib3VuZHMgPSBJbnRTaXpl
KDMwMCwgMzAwKTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBi
b3VuZHMsIGZhbHNlKTsKKyAgICAgICAgY2hpbGQtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAg
ICAgICAgcm9vdC0+YWRkQ2hpbGQoY2hpbGQucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBWZWN0
b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xh
eWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0g
NTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAg
IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQo
KSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7Cisg
ICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3Rz
KHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJl
Y3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0Lgor
CisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAg
QVNTRVJUX0VRKDF1LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LnNpemUoKSk7CisgICAgQVNTRVJU
X0VRKDF1LCByb290LT5yZW5kZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpLnNpemUoKSk7CisKKyAg
ICAvLyBIaXQgdGVzdGluZyBmb3IgYSBwb2ludCBvdXRzaWRlIHRoZSBsYXllciBzaG91bGQgcmV0
dXJuIGEgbnVsbCBwb2ludGVyLgorICAgIC8vIERlc3BpdGUgdGhlIGNoaWxkIGxheWVyIGJlaW5n
IHZlcnkgbGFyZ2UsIGl0IHNob3VsZCBiZSBjbGlwcGVkIHRvIHRoZSByb290IGxheWVyJ3MgYm91
bmRzLgorICAgIEludFBvaW50IHRlc3RQb2ludCgyNCwgMjQpOworICAgIENDTGF5ZXJJbXBsKiBy
ZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExheWVyVGhhdElzSGl0QnlQ
b2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIEVYUEVDVF9GQUxT
RShyZXN1bHRMYXllcik7CisKKyAgICAvLyBFdmVuIHRob3VnaCB0aGUgbGF5ZXIgZXhpc3RzIGF0
ICgxMDEsIDEwMSksIGl0IHNob3VsZCBub3QgYmUgdmlzaWJsZSB0aGVyZSBzaW5jZSB0aGUgcm9v
dCByZW5kZXJTdXJmYWNlIHdvdWxkIGNsYW1wIGl0LgorICAgIHRlc3RQb2ludCA9IEludFBvaW50
KDc2LCA3Nik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRM
YXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICBFWFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gSGl0IHRlc3RpbmcgZm9y
IGEgcG9pbnQgaW5zaWRlIHNob3VsZCByZXR1cm4gdGhlIGNoaWxkIGxheWVyLgorICAgIHRlc3RQ
b2ludCA9IEludFBvaW50KDI2LCAyNik7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmZpbmRMYXllclRoYXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKKyAgICBBU1NFUlRfVFJVRShyZXN1bHRMYXllcik7CisgICAgRVhQRUNU
X0VRKDQ1NiwgcmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQo
NzQsIDc0KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoNDU2LCByZXN1bHRM
YXllci0+aWQoKSk7Cit9CisKK1RFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
SGl0VGVzdGluZ0Zvck11bHRpQ2xpcHBlZFJvdGF0ZWRMYXllcikKK3sKKyAgICAvLyBUaGlzIHRl
c3QgY2hlY2tzIHdoZXRoZXIgaGl0IHRlc3RpbmcgY29ycmVjdGx5IGF2b2lkcyBoaXQgdGVzdGlu
ZyB3aXRoIG11bHRpcGxlCisgICAgLy8gYW5jZXN0b3JzIHRoYXQgY2xpcCBpbiBub24gYXhpcy1h
bGlnbmVkIHdheXMuIFRvIHBhc3MgdGhpcyB0ZXN0LCB0aGUgaGl0IHRlc3RpbmcKKyAgICAvLyBh
bGdvcml0aG0gbmVlZHMgdG8gcmVjb2duaXplIHRoYXQgbXVsdGlwbGUgcGFyZW50IGxheWVycyBt
YXkgY2xpcCB0aGUgbGF5ZXIsIGFuZAorICAgIC8vIHNob3VsZCBub3QgYWN0dWFsbHkgaGl0IHRo
b3NlIGNsaXBwZWQgYXJlYXMuCisgICAgLy8KKyAgICAvLyBUaGUgY2hpbGQgYW5kIGdyYW5kQ2hp
bGQgbGF5ZXJzIGFyZSBib3RoIGluaXRpYWxpemVkIHRvIGNsaXAgdGhlIHJvdGF0ZWRMZWFmLiBU
aGUKKyAgICAvLyBjaGlsZCBsYXllciBpcyByb3RhdGVkIGFib3V0IHRoZSB0b3AtbGVmdCBjb3Ju
ZXIsIHNvIHRoYXQgdGhlIHJvb3QgKyBjaGlsZCBjbGlwcworICAgIC8vIGNvbWJpbmVkIGNyZWF0
ZSBhIHRyaWFuZ2xlLiBUaGUgcm90YXRlZExlYWYgd2lsbCBvbmx5IGJlIHZpc2libGUgd2hlcmUg
aXQgb3ZlcmxhcHMKKyAgICAvLyB0aGlzIHRyaWFuZ2xlLgorICAgIC8vCisKKyAgICBPd25QdHI8
Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEyMyk7CisgICAgcm9vdC0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+c2V0Q29u
dGVudFJlY3QoSW50UmVjdChJbnRQb2ludDo6emVybygpLCBJbnRTaXplKDEwMCwgMTAwKSkpOwor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgRmxvYXRQ
b2ludCBhbmNob3IoMCwgMCk7CisgICAgRmxvYXRQb2ludCBwb3NpdGlvbigwLCAwKTsKKyAgICBJ
bnRTaXplIGJvdW5kcygxMDAsIDEwMCk7CisgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGlu
Zyhyb290LmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9z
aXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgIHJvb3QtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7
CisKKyAgICB7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDQ1Nik7CisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZCA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoNzg5KTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBy
b3RhdGVkTGVhZiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMjQ2OCk7CisKKyAgICAgICAgcG9zaXRp
b24gPSBGbG9hdFBvaW50KDEwLCAxMCk7CisgICAgICAgIGJvdW5kcyA9IEludFNpemUoODAsIDgw
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhjaGlsZC5nZXQoKSwgaWRl
bnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZh
bHNlKTsKKyAgICAgICAgY2hpbGQtPnNldE1hc2tzVG9Cb3VuZHModHJ1ZSk7CisgICAgICAgIAor
ICAgICAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q29y
bmVyOworICAgICAgICByb3RhdGlvbjQ1RGVncmVlc0Fib3V0Q29ybmVyLnJvdGF0ZTNkKDAsIDAs
IDQ1KTsKKworICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoMCwgMCk7IC8vIHJlbWVtYmVy
LCBwb3NpdGlvbmVkIHdpdGggcmVzcGVjdCB0byBpdHMgcGFyZW50IHdoaWNoIGlzIGFscmVhZHkg
YXQgMTAsIDEwCisgICAgICAgIGJvdW5kcyA9IEludFNpemUoMjAwLCAyMDApOyAvLyB0byBlbnN1
cmUgaXQgY292ZXJzIGF0IGxlYXN0IHNxcnQoMikgKiAxMDAuCisgICAgICAgIHNldExheWVyUHJv
cGVydGllc0ZvclRlc3RpbmcoZ3JhbmRDaGlsZC5nZXQoKSwgcm90YXRpb240NURlZ3JlZXNBYm91
dENvcm5lciwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2Up
OworICAgICAgICBncmFuZENoaWxkLT5zZXRNYXNrc1RvQm91bmRzKHRydWUpOworCisgICAgICAg
IC8vIFJvdGF0ZXMgYWJvdXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIKKyAgICAgICAgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcm90YXRlZExlYWZUcmFuc2Zvcm07CisgICAgICAgIHJvdGF0ZWRM
ZWFmVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMTAsIC0xMCk7IC8vIGNhbmNlbCBvdXQgdGhlIGdyYW5k
UGFyZW50J3MgcG9zaXRpb24KKyAgICAgICAgcm90YXRlZExlYWZUcmFuc2Zvcm0ucm90YXRlM2Qo
MCwgMCwgLTQ1KTsgLy8gY2FuY2VsIG91dCB0aGUgY29ybmVyIDQ1LWRlZ3JlZSByb3RhdGlvbiBv
ZiB0aGUgcGFyZW50LgorICAgICAgICByb3RhdGVkTGVhZlRyYW5zZm9ybS50cmFuc2xhdGUoNTAs
IDUwKTsKKyAgICAgICAgcm90YXRlZExlYWZUcmFuc2Zvcm0ucm90YXRlM2QoMCwgMCwgNDUpOwor
ICAgICAgICByb3RhdGVkTGVhZlRyYW5zZm9ybS50cmFuc2xhdGUoLTUwLCAtNTApOworICAgICAg
ICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoMCwgMCk7CisgICAgICAgIGJvdW5kcyA9IEludFNpemUo
MTAwLCAxMDApOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvdGF0ZWRM
ZWFmLmdldCgpLCByb3RhdGVkTGVhZlRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwg
cG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgICAgICByb3RhdGVkTGVhZi0+c2V0RHJhd3ND
b250ZW50KHRydWUpOworCisgICAgICAgIGdyYW5kQ2hpbGQtPmFkZENoaWxkKHJvdGF0ZWRMZWFm
LnJlbGVhc2UoKSk7CisgICAgICAgIGNoaWxkLT5hZGRDaGlsZChncmFuZENoaWxkLnJlbGVhc2Uo
KSk7CisgICAgICAgIHJvb3QtPmFkZENoaWxkKGNoaWxkLnJlbGVhc2UoKSk7CisgICAgfQorCisg
ICAgVmVjdG9yPENDTGF5ZXJJbXBsKj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBWZWN0
b3I8Q0NMYXllckltcGwqPiBkdW1teUxheWVyTGlzdDsKKyAgICBpbnQgZHVtbXlNYXhUZXh0dXJl
U2l6ZSA9IDUxMjsKKyAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290LmdldCgp
KTsKKyAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zKHJv
b3QuZ2V0KCksIHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgZHVtbXlMYXllckxpc3QsIDAsIGR1bW15TWF4VGV4dHVyZVNp
emUpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJsZUFuZFNjaXNz
b3JSZWN0cyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBGbG9hdFJlY3QoKSk7IC8vIGVtcHR5IHNj
aXNzb3JSZWN0IHdpbGwgaGVscCBlbnN1cmUgd2UncmUgaGl0IHRlc3RpbmcgdGhlIGNvcnJlY3Qg
cmVjdC4KKworICAgIC8vIFNhbml0eSBjaGVjayB0aGUgc2NlbmFyaW8gd2UganVzdCBjcmVhdGVk
LgorICAgIC8vIFRoZSBncmFuZENoaWxkIGlzIGV4cGVjdGVkIHRvIGNyZWF0ZSBhIHJlbmRlclN1
cmZhY2UgYmVjYXVzZSBpdCBtYXNrc1RvQm91bmRzIGFuZCBpcyBub3QgYXhpcyBhbGlnbmVkLgor
ICAgIEFTU0VSVF9FUSgydSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkpOworICAgIEFT
U0VSVF9FUSgxdSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUSg3ODksIHJlbmRlclN1cmZhY2VMYXll
ckxpc3RbMF0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KClbMF0tPmlkKCkpOyAvLyBncmFu
ZENoaWxkJ3Mgc3VyZmFjZS4KKyAgICBBU1NFUlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxp
c3RbMV0tPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRf
RVEoMjQ2OCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKVswXS0+aWQoKSk7CisKKyAgICAvLyAoMTEsIDg5KSBpcyBjbG9zZSB0byB0aGUgdGhl
IGJvdHRvbSBsZWZ0IGNvcm5lciB3aXRoaW4gdGhlIGNsaXAsIGJ1dCBpdCBpcyBub3QgaW5zaWRl
IHRoZSBsYXllci4KKyAgICBJbnRQb2ludCB0ZXN0UG9pbnQoMTEsIDg5KTsKKyAgICBDQ0xheWVy
SW1wbCogcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRoYXRJ
c0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBFWFBF
Q1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gQ2xvc2VyIGlud2FyZHMgZnJvbSB0aGUg
Ym90dG9tIGxlZnQgd2lsbCBvdmVybGFwIHRoZSBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQ
b2ludCgyNSwgNzUpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpm
aW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgyNDY4LCBy
ZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyAoNCwgNTApIGlzIGluc2lkZSB0aGUgdW5jbGlw
cGVkIGxheWVyLCBidXQgdGhhdCBjb3JuZXIgb2YgdGhlIGxheWVyIHNob3VsZCBiZQorICAgIC8v
IGNsaXBwZWQgYXdheSBieSB0aGUgZ3JhbmRQYXJlbnQgYW5kIHNob3VsZCBub3QgZ2V0IGhpdC4g
SWYgaGl0IHRlc3RpbmcgYmxpbmRseSB1c2VzCisgICAgLy8gdmlzaWJsZUxheWVyUmVjdCB3aXRo
b3V0IGNvbnNpZGVyaW5nIGhvdyBwYXJlbnQgbWF5IGNsaXAgdGhlIGxheWVyLCB0aGVuIGhpdAor
ICAgIC8vIHRlc3Rpbmcgd291bGQgYWNjaWRlbnRhbGx5IHRoaW5rIHRoYXQgdGhlIHBvaW50IHN1
Y2Nlc3NmdWxseSBoaXRzIHRoZSBsYXllci4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg0LCA1
MCk7CisgICAgcmVzdWx0TGF5ZXIgPSBDQ0xheWVyVHJlZUhvc3RDb21tb246OmZpbmRMYXllclRo
YXRJc0hpdEJ5UG9pbnQodGVzdFBvaW50LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBF
WFBFQ1RfRkFMU0UocmVzdWx0TGF5ZXIpOworCisgICAgLy8gKDExLCA1MCkgaXMgaW5zaWRlIHRo
ZSBsYXllciBhbmQgd2l0aGluIHRoZSBjbGlwcGVkIGFyZWEuCisgICAgdGVzdFBvaW50ID0gSW50
UG9pbnQoMTEsIDUwKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMjQ2OCwg
cmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXJvdW5kIHRoZSBtaWRkbGUsIGp1c3QgdG8g
dGhlIHJpZ2h0IGFuZCB1cCwgd291bGQgaGF2ZSBoaXQgdGhlIGxheWVyIGV4Y2VwdCB0aGF0Cisg
ICAgLy8gdGhhdCBhcmVhIHNob3VsZCBiZSBjbGlwcGVkIGF3YXkgYnkgdGhlIHBhcmVudC4KKyAg
ICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg1MSwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgRVhQRUNUX0ZBTFNFKHJlc3VsdExheWVyKTsKKwor
ICAgIC8vIEFyb3VuZCB0aGUgbWlkZGxlLCBqdXN0IHRvIHRoZSBsZWZ0IGFuZCBkb3duLCBzaG91
bGQgc3VjY2Vzc2Z1bGx5IGhpdCB0aGUgbGF5ZXIuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQo
NDksIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMjQ2OCwgcmVzdWx0
TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlm
eUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVycykKK3sKKyAgICBPd25QdHI8Q0NMYXllckltcGw+
IHJvb3QgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDEpOworICAgIHJvb3QtPmNyZWF0ZVJlbmRlclN1
cmZhY2UoKTsKKyAgICByb290LT5yZW5kZXJTdXJmYWNlKCktPnNldENvbnRlbnRSZWN0KEludFJl
Y3QoSW50UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMDAsIDEwMCkpKTsKKworICAgIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIEZsb2F0UG9pbnQgYW5jaG9yKDAs
IDApOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24oMCwgMCk7CisgICAgSW50U2l6ZSBib3VuZHMo
MTAwLCAxMDApOworICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmcocm9vdC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMs
IGZhbHNlKTsKKyAgICByb290LT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICB7CisgICAg
ICAgIC8vIGNoaWxkIDEgYW5kIGNoaWxkMiBhcmUgaW5pdGlhbGl6ZWQgdG8gb3ZlcmxhcCBiZXR3
ZWVuIHg9NTAgYW5kIHg9NjAuCisgICAgICAgIC8vIGdyYW5kQ2hpbGQgaXMgc2V0IHRvIG92ZXJs
YXAgYm90aCBjaGlsZDEgYW5kIGNoaWxkMiBiZXR3ZWVuIHk9NTAgYW5kIHk9NjAuCisgICAgICAg
IC8vIFRoZSBleHBlY3RlZCBzdGFja2luZyBvcmRlciBpczoKKyAgICAgICAgLy8gICAoZnJvbnQp
IGNoaWxkMiwgKHNlY29uZCkgZ3JhbmRDaGlsZCwgKHRoaXJkKSBjaGlsZDEsIGFuZCAoYmFjaykg
dGhlIHJvb3QgbGF5ZXIgYmVoaW5kIGFsbCBvdGhlciBsYXllcnMuCisKKyAgICAgICAgT3duUHRy
PENDTGF5ZXJJbXBsPiBjaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDIpOworICAgICAgICBP
d25QdHI8Q0NMYXllckltcGw+IGNoaWxkMiA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMyk7CisgICAg
ICAgIE93blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDEgPSBDQ0xheWVySW1wbDo6Y3JlYXRl
KDQpOworCisgICAgICAgIHBvc2l0aW9uID0gRmxvYXRQb2ludCgxMCwgMTApOworICAgICAgICBi
b3VuZHMgPSBJbnRTaXplKDUwLCA1MCk7CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRl
c3RpbmcoY2hpbGQxLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hv
ciwgcG9zaXRpb24sIGJvdW5kcywgZmFsc2UpOworICAgICAgICBjaGlsZDEtPnNldERyYXdzQ29u
dGVudCh0cnVlKTsKKworICAgICAgICBwb3NpdGlvbiA9IEZsb2F0UG9pbnQoNTAsIDEwKTsKKyAg
ICAgICAgYm91bmRzID0gSW50U2l6ZSg1MCwgNTApOworICAgICAgICBzZXRMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKGNoaWxkMi5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4
LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAgICAgICAgY2hpbGQyLT5zZXRE
cmF3c0NvbnRlbnQodHJ1ZSk7CisKKyAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCBncmFuZENoaWxk
IGlzIHBvc2l0aW9uZWQgd2l0aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQgKGkuZS4gY2hpbGQxKS4K
KyAgICAgICAgLy8gSW4gc2NyZWVuIHNwYWNlLCB0aGUgaW50ZW5kZWQgcG9zaXRpb24gaXMgKDEw
LCA1MCksIHdpdGggc2l6ZSAxMDAgeCA1MC4KKyAgICAgICAgcG9zaXRpb24gPSBGbG9hdFBvaW50
KDAsIDQwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSgxMDAsIDUwKTsKKyAgICAgICAgc2V0
TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMS5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMsIGZhbHNlKTsKKyAg
ICAgICAgZ3JhbmRDaGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsKKworICAgICAgICBjaGls
ZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxLnJlbGVhc2UoKSk7CisgICAgICAgIHJvb3QtPmFkZENo
aWxkKGNoaWxkMS5yZWxlYXNlKCkpOworICAgICAgICByb290LT5hZGRDaGlsZChjaGlsZDIucmVs
ZWFzZSgpKTsKKyAgICB9CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQxID0gcm9vdC0+Y2hpbGRy
ZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQyID0gcm9vdC0+Y2hpbGRyZW4o
KVsxXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZDEgPSBjaGlsZDEtPmNoaWxk
cmVuKClbMF0uZ2V0KCk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJMaXN0OworICAg
IGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIHJlbmRlclN1cmZhY2VMYXllckxp
c3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgs
IGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxheWVyTGlzdCwg
MCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxj
dWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEZsb2F0
UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3ZSdyZSBoaXQg
dGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBzY2Vu
YXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQxKTsKKyAgICBBU1NF
UlRfVFJVRShjaGlsZDIpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxKTsKKyAgICBBU1NF
UlRfRVEoMXUsIHJlbmRlclN1cmZhY2VMYXllckxpc3Quc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEo
NHUsIHJvb3QtPnJlbmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBBU1NF
UlRfRVEoMSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVswXS0+aWQoKSk7IC8v
IHJvb3QgbGF5ZXIKKyAgICBBU1NFUlRfRVEoMiwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXll
ckxpc3QoKVsxXS0+aWQoKSk7IC8vIGNoaWxkMQorICAgIEFTU0VSVF9FUSg0LCByb290LT5yZW5k
ZXJTdXJmYWNlKCktPmxheWVyTGlzdCgpWzJdLT5pZCgpKTsgLy8gZ3JhbmRDaGlsZDEKKyAgICBB
U1NFUlRfRVEoMywgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKVszXS0+aWQoKSk7
IC8vIGNoaWxkMgorCisgICAgLy8gTm90aGluZyBvdmVybGFwcyB0aGUgcm9vdExheWVyIGF0ICgx
LCAxKSwgc28gaGl0IHRlc3RpbmcgdGhlcmUgc2hvdWxkIGZpbmQgdGhlIHJvb3QgbGF5ZXIuCisg
ICAgSW50UG9pbnQgdGVzdFBvaW50ID0gSW50UG9pbnQoMSwgMSk7CisgICAgQ0NMYXllckltcGwq
IHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRC
eVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RS
VUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxLCByZXN1bHRMYXllci0+aWQoKSk7CisK
KyAgICAvLyBBdCAoMTUsIDE1KSwgY2hpbGQxIGFuZCByb290IGFyZSB0aGUgb25seSBsYXllcnMu
IGNoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9p
bnQoMTUsIDE1KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Zmlu
ZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qp
OworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMiwgcmVzdWx0
TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDUxLCAyMCksIGNoaWxkMSBhbmQgY2hpbGQyIG92
ZXJsYXAuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0g
SW50UG9pbnQoNTEsIDIwKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMywg
cmVzdWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDgwLCA1MSksIGNoaWxkMiBhbmQgZ3Jh
bmRDaGlsZDEgb3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0
ZXN0UG9pbnQgPSBJbnRQb2ludCg4MCwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRy
ZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVY
UEVDVF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoNTEsIDUxKSwgYWxs
IGxheWVycyBvdmVybGFwIGVhY2ggb3RoZXIuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBvbiB0
b3Agb2YgYWxsIG90aGVyIGxheWVycy4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg1MSwgNTEp
OworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0
SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNT
RVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgzLCByZXN1bHRMYXllci0+aWQo
KSk7CisKKyAgICAvLyBBdCAoMjAsIDUxKSwgY2hpbGQxIGFuZCBncmFuZENoaWxkMSBvdmVybGFw
LiBncmFuZENoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0g
SW50UG9pbnQoMjAsIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoNCwg
cmVzdWx0TGF5ZXItPmlkKCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeUhpdFRlc3RpbmdGb3JNdWx0aXBsZUxheWVyTGlzdHMpCit7CisgICAgLy8KKyAgICAv
LyBUaGUgZ2VvbWV0cnkgaXMgc2V0IHVwIHNpbWlsYXJseSB0byB0aGUgcHJldmlvdXMgY2FzZSwg
YnV0CisgICAgLy8gYWxsIGxheWVycyBhcmUgZm9yY2VkIHRvIGJlIHJlbmRlclN1cmZhY2VzIG5v
dy4KKyAgICAvLworCisgICAgT3duUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NMYXllckltcGw6
OmNyZWF0ZSgxKTsKKyAgICByb290LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CisgICAgcm9vdC0+
cmVuZGVyU3VyZmFjZSgpLT5zZXRDb250ZW50UmVjdChJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCks
IEludFNpemUoMTAwLCAxMDApKSk7CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVu
dGl0eU1hdHJpeDsKKyAgICBGbG9hdFBvaW50IGFuY2hvcigwLCAwKTsKKyAgICBGbG9hdFBvaW50
IHBvc2l0aW9uKDAsIDApOworICAgIEludFNpemUgYm91bmRzKDEwMCwgMTAwKTsKKyAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHJvb3QuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVu
dGl0eU1hdHJpeCwgYW5jaG9yLCBwb3NpdGlvbiwgYm91bmRzLCBmYWxzZSk7CisgICAgcm9vdC0+
c2V0RHJhd3NDb250ZW50KHRydWUpOworCisgICAgeworICAgICAgICAvLyBjaGlsZCAxIGFuZCBj
aGlsZDIgYXJlIGluaXRpYWxpemVkIHRvIG92ZXJsYXAgYmV0d2VlbiB4PTUwIGFuZCB4PTYwLgor
ICAgICAgICAvLyBncmFuZENoaWxkIGlzIHNldCB0byBvdmVybGFwIGJvdGggY2hpbGQxIGFuZCBj
aGlsZDIgYmV0d2VlbiB5PTUwIGFuZCB5PTYwLgorICAgICAgICAvLyBUaGUgZXhwZWN0ZWQgc3Rh
Y2tpbmcgb3JkZXIgaXM6CisgICAgICAgIC8vICAgKGZyb250KSBjaGlsZDIsIChzZWNvbmQpIGdy
YW5kQ2hpbGQsICh0aGlyZCkgY2hpbGQxLCBhbmQgKGJhY2spIHRoZSByb290IGxheWVyIGJlaGlu
ZCBhbGwgb3RoZXIgbGF5ZXJzLgorCisgICAgICAgIE93blB0cjxDQ0xheWVySW1wbD4gY2hpbGQx
ID0gQ0NMYXllckltcGw6OmNyZWF0ZSgyKTsKKyAgICAgICAgT3duUHRyPENDTGF5ZXJJbXBsPiBj
aGlsZDIgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDMpOworICAgICAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGdyYW5kQ2hpbGQxID0gQ0NMYXllckltcGw6OmNyZWF0ZSg0KTsKKworICAgICAgICBwb3Np
dGlvbiA9IEZsb2F0UG9pbnQoMTAsIDEwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSg1MCwg
NTApOworICAgICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkMS5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3VuZHMs
IGZhbHNlKTsKKyAgICAgICAgY2hpbGQxLT5zZXREcmF3c0NvbnRlbnQodHJ1ZSk7CisgICAgICAg
IGNoaWxkMS0+c2V0Rm9yY2VSZW5kZXJTdXJmYWNlKHRydWUpOworCisgICAgICAgIHBvc2l0aW9u
ID0gRmxvYXRQb2ludCg1MCwgMTApOworICAgICAgICBib3VuZHMgPSBJbnRTaXplKDUwLCA1MCk7
CisgICAgICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQyLmdldCgpLCBpZGVu
dGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIGFuY2hvciwgcG9zaXRpb24sIGJvdW5kcywgZmFs
c2UpOworICAgICAgICBjaGlsZDItPnNldERyYXdzQ29udGVudCh0cnVlKTsKKyAgICAgICAgY2hp
bGQyLT5zZXRGb3JjZVJlbmRlclN1cmZhY2UodHJ1ZSk7CisKKyAgICAgICAgLy8gUmVtZW1iZXIg
dGhhdCBncmFuZENoaWxkIGlzIHBvc2l0aW9uZWQgd2l0aCByZXNwZWN0IHRvIGl0cyBwYXJlbnQg
KGkuZS4gY2hpbGQxKS4KKyAgICAgICAgLy8gSW4gc2NyZWVuIHNwYWNlLCB0aGUgaW50ZW5kZWQg
cG9zaXRpb24gaXMgKDEwLCA1MCksIHdpdGggc2l6ZSAxMDAgeCA1MC4KKyAgICAgICAgcG9zaXRp
b24gPSBGbG9hdFBvaW50KDAsIDQwKTsKKyAgICAgICAgYm91bmRzID0gSW50U2l6ZSgxMDAsIDUw
KTsKKyAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFuZENoaWxkMS5nZXQo
KSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBhbmNob3IsIHBvc2l0aW9uLCBib3Vu
ZHMsIGZhbHNlKTsKKyAgICAgICAgZ3JhbmRDaGlsZDEtPnNldERyYXdzQ29udGVudCh0cnVlKTsK
KyAgICAgICAgZ3JhbmRDaGlsZDEtPnNldEZvcmNlUmVuZGVyU3VyZmFjZSh0cnVlKTsKKworICAg
ICAgICBjaGlsZDEtPmFkZENoaWxkKGdyYW5kQ2hpbGQxLnJlbGVhc2UoKSk7CisgICAgICAgIHJv
b3QtPmFkZENoaWxkKGNoaWxkMS5yZWxlYXNlKCkpOworICAgICAgICByb290LT5hZGRDaGlsZChj
aGlsZDIucmVsZWFzZSgpKTsKKyAgICB9CisKKyAgICBDQ0xheWVySW1wbCogY2hpbGQxID0gcm9v
dC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogY2hpbGQyID0gcm9vdC0+
Y2hpbGRyZW4oKVsxXS5nZXQoKTsKKyAgICBDQ0xheWVySW1wbCogZ3JhbmRDaGlsZDEgPSBjaGls
ZDEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisKKyAgICBWZWN0b3I8Q0NMYXllckltcGwqPiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIFZlY3RvcjxDQ0xheWVySW1wbCo+IGR1bW15TGF5ZXJM
aXN0OworICAgIGludCBkdW1teU1heFRleHR1cmVTaXplID0gNTEyOworICAgIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QuYXBwZW5kKHJvb3QuZ2V0KCkpOworICAgIENDTGF5ZXJUcmVlSG9zdENvbW1v
bjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXMocm9vdC5nZXQoKSwgcm9vdC5nZXQoKSwgaWRlbnRp
dHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkdW1teUxh
eWVyTGlzdCwgMCwgZHVtbXlNYXhUZXh0dXJlU2l6ZSk7CisgICAgQ0NMYXllclRyZWVIb3N0Q29t
bW9uOjpjYWxjdWxhdGVWaXNpYmxlQW5kU2Npc3NvclJlY3RzKHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIEZsb2F0UmVjdCgpKTsgLy8gZW1wdHkgc2Npc3NvclJlY3Qgd2lsbCBoZWxwIGVuc3VyZSB3
ZSdyZSBoaXQgdGVzdGluZyB0aGUgY29ycmVjdCByZWN0LgorCisgICAgLy8gU2FuaXR5IGNoZWNr
IHRoZSBzY2VuYXJpbyB3ZSBqdXN0IGNyZWF0ZWQuCisgICAgQVNTRVJUX1RSVUUoY2hpbGQxKTsK
KyAgICBBU1NFUlRfVFJVRShjaGlsZDIpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQxKTsK
KyAgICBBU1NFUlRfVFJVRShjaGlsZDEtPnJlbmRlclN1cmZhY2UoKSk7CisgICAgQVNTRVJUX1RS
VUUoY2hpbGQyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9UUlVFKGdyYW5kQ2hpbGQx
LT5yZW5kZXJTdXJmYWNlKCkpOworICAgIEFTU0VSVF9FUSg0dSwgcmVuZGVyU3VyZmFjZUxheWVy
TGlzdC5zaXplKCkpOworICAgIEFTU0VSVF9FUSgzdSwgcm9vdC0+cmVuZGVyU3VyZmFjZSgpLT5s
YXllckxpc3QoKS5zaXplKCkpOyAvLyBUaGUgcm9vdCBzdXJmYWNlIGhhcyB0aGUgcm9vdCBsYXll
ciwgYW5kIGNoaWxkMSdzIGFuZCBjaGlsZDIncyByZW5kZXJTdXJmYWNlcy4KKyAgICBBU1NFUlRf
RVEoMnUsIGNoaWxkMS0+cmVuZGVyU3VyZmFjZSgpLT5sYXllckxpc3QoKS5zaXplKCkpOyAvLyBU
aGUgY2hpbGQxIHN1cmZhY2UgaGFzIHRoZSBjaGlsZDEgbGF5ZXIgYW5kIGdyYW5kQ2hpbGQxJ3Mg
cmVuZGVyU3VyZmFjZS4KKyAgICBBU1NFUlRfRVEoMXUsIGNoaWxkMi0+cmVuZGVyU3VyZmFjZSgp
LT5sYXllckxpc3QoKS5zaXplKCkpOworICAgIEFTU0VSVF9FUSgxdSwgZ3JhbmRDaGlsZDEtPnJl
bmRlclN1cmZhY2UoKS0+bGF5ZXJMaXN0KCkuc2l6ZSgpKTsKKyAgICBBU1NFUlRfRVEoMSwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdFswXS0+aWQoKSk7IC8vIHJvb3QgbGF5ZXIKKyAgICBBU1NFUlRf
RVEoMiwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFsxXS0+aWQoKSk7IC8vIGNoaWxkMQorICAgIEFT
U0VSVF9FUSg0LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0WzJdLT5pZCgpKTsgLy8gZ3JhbmRDaGls
ZDEKKyAgICBBU1NFUlRfRVEoMywgcmVuZGVyU3VyZmFjZUxheWVyTGlzdFszXS0+aWQoKSk7IC8v
IGNoaWxkMgorCisgICAgLy8gTm90aGluZyBvdmVybGFwcyB0aGUgcm9vdExheWVyIGF0ICgxLCAx
KSwgc28gaGl0IHRlc3RpbmcgdGhlcmUgc2hvdWxkIGZpbmQgdGhlIHJvb3QgbGF5ZXIuCisgICAg
SW50UG9pbnQgdGVzdFBvaW50ID0gSW50UG9pbnQoMSwgMSk7CisgICAgQ0NMYXllckltcGwqIHJl
c3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBv
aW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUo
cmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgxLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAg
ICAvLyBBdCAoMTUsIDE1KSwgY2hpbGQxIGFuZCByb290IGFyZSB0aGUgb25seSBsYXllcnMuIGNo
aWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50UG9pbnQo
MTUsIDE1KTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6ZmluZExh
eWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwor
ICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMiwgcmVzdWx0TGF5
ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDUxLCAyMCksIGNoaWxkMSBhbmQgY2hpbGQyIG92ZXJs
YXAuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50
UG9pbnQoNTEsIDIwKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoMywgcmVz
dWx0TGF5ZXItPmlkKCkpOworCisgICAgLy8gQXQgKDgwLCA1MSksIGNoaWxkMiBhbmQgZ3JhbmRD
aGlsZDEgb3ZlcmxhcC4gY2hpbGQyIGlzIGV4cGVjdGVkIHRvIGJlIG9uIHRvcC4KKyAgICB0ZXN0
UG9pbnQgPSBJbnRQb2ludCg4MCwgNTEpOworICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVI
b3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNIaXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJUX1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVD
VF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7CisKKyAgICAvLyBBdCAoNTEsIDUxKSwgYWxsIGxh
eWVycyBvdmVybGFwIGVhY2ggb3RoZXIuIGNoaWxkMiBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3Ag
b2YgYWxsIG90aGVyIGxheWVycy4KKyAgICB0ZXN0UG9pbnQgPSBJbnRQb2ludCg1MSwgNTEpOwor
ICAgIHJlc3VsdExheWVyID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpmaW5kTGF5ZXJUaGF0SXNI
aXRCeVBvaW50KHRlc3RQb2ludCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAgQVNTRVJU
X1RSVUUocmVzdWx0TGF5ZXIpOworICAgIEVYUEVDVF9FUSgzLCByZXN1bHRMYXllci0+aWQoKSk7
CisKKyAgICAvLyBBdCAoMjAsIDUxKSwgY2hpbGQxIGFuZCBncmFuZENoaWxkMSBvdmVybGFwLiBn
cmFuZENoaWxkMSBpcyBleHBlY3RlZCB0byBiZSBvbiB0b3AuCisgICAgdGVzdFBvaW50ID0gSW50
UG9pbnQoMjAsIDUxKTsKKyAgICByZXN1bHRMYXllciA9IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6
ZmluZExheWVyVGhhdElzSGl0QnlQb2ludCh0ZXN0UG9pbnQsIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIEFTU0VSVF9UUlVFKHJlc3VsdExheWVyKTsKKyAgICBFWFBFQ1RfRVEoNCwgcmVz
dWx0TGF5ZXItPmlkKCkpOworfQorCisKIC8vIEZJWE1FOgogLy8gY29udGludWUgd29ya2luZyBv
biBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5NDIKIC8vICAtIGFk
ZCBhIHRlc3QgdG8gdmVyaWZ5IGNsaXBwaW5nIHRoYXQgY2hhbmdlcyB0aGUgImNlbnRlciBwb2lu
dCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>