<?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>19028</bug_id>
          
          <creation_ts>2008-05-13 05:02:30 -0700</creation_ts>
          <short_desc>Implement CSS Animation (with keyframes, events, interfaces, etc)</short_desc>
          <delta_ts>2008-08-04 11:35:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>19861</dependson>
    
    <dependson>19863</dependson>
    
    <dependson>19864</dependson>
    
    <dependson>19938</dependson>
    
    <dependson>20068</dependson>
    
    <dependson>20088</dependson>
    
    <dependson>20119</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bdakin</cc>
    
    <cc>dino</cc>
    
    <cc>mitz</cc>
    
    <cc>sekundes</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>80258</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-13 05:02:30 -0700</bug_when>
    <thetext>Implement the CSS Advanced Visual Effects specifications from http://www.webkit.org/specs/CSSVisualEffects

The current TOT webkit implements CSS Transitions. The goal is to bring the transition implementation up to date with a new Animation Controller, add support for CSS Animations with keyframes (and therefore the @-webkit-keyframes rule), add events for animation start/end/iteration, interfaces for accessing the keyframes and enhancing the CSS Transforms to provide a basis for 3d.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80259</commentid>
    <comment_count>1</comment_count>
      <attachid>21107</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-13 05:06:12 -0700</bug_when>
    <thetext>Created attachment 21107
in progress patch - not ready for review

This patch is included here to get initial feedback. Some parts are stubbed out and there are a couple of known bugs, but it gives an idea of the general approach. A patch ready for review will be attached within a day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80260</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-13 05:10:07 -0700</bug_when>
    <thetext>Attached a patch that does most things but:

- does not implement events yet
- does not do computed style for animations
- does not do the JS interfaces for keyframes or matrices
- has a known bug where style is applied (possibly) too often in animation loops
- has unknown behaviour if 3d transforms are specified
- does not parse perspective (not sure if it should, since it is ignored anyway)

A complete patch should appear within 24 hours.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80261</commentid>
    <comment_count>3</comment_count>
      <attachid>21108</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-13 05:11:17 -0700</bug_when>
    <thetext>Created attachment 21108
Simple keyframe animation with infinite repeat and easing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80280</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-05-13 10:44:32 -0700</bug_when>
    <thetext>Don&apos;t ever do

if (layer())

That makes a virtual function call.  We have 

if (hasLayer())

that checks a bit just to avoid that.

I&apos;m a bit confused as to why a bunch of animation functions got added to RenderObject.  That doesn&apos;t seem appropriate, especially given that they&apos;re just calling through to a layer...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80283</commentid>
    <comment_count>5</comment_count>
      <attachid>21107</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-05-13 10:53:00 -0700</bug_when>
    <thetext>Comment on attachment 21107
in progress patch - not ready for review

This is just comments from a cursory reading, not a real review yet:

I see that the RenderLayer functions are just stubs.  I&apos;d just remove them for now then.

The class declaration of KeyframeList is indented using very odd style.  Please pull the inline function definitions back next to the function names (instead of doing odd spacing to try to line up the braces).

+        // make sure there are no duplicate properties. This is an O(n^2) algorithm
+        // but the lists tend to be very short, so it is probably ok

Why are we removing duplicate properties here?  I don&apos;t like O(n^2) algorithms even when the lists are short. :)

+    // tell the animation controller that the style is all setup and it can start animations

&quot;setup&quot; should be two words.  We usually capitalize the first words of comment sentences, e.g., &quot;// Tell&quot;, not &quot;// tell&quot;.

I&apos;m still not convinced keyframes are implemented in a way that really works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80290</commentid>
    <comment_count>6</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2008-05-13 12:17:41 -0700</bug_when>
    <thetext>&gt; Why are we removing duplicate properties here?

It&apos;s possible to end up with two &quot;cAnimateAll&quot; transtisions, e.g. for properties like:
-webkit-transition-property: &quot;color&quot;, &quot;left&quot;;

Note the quotes, which result in parsing failure. It&apos;s hard to throw those away at parsing time, because the comma-separated values have to be kept in sync with transition-duration etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80302</commentid>
    <comment_count>7</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-13 15:44:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/5704655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80433</commentid>
    <comment_count>8</comment_count>
      <attachid>21146</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-14 18:27:04 -0700</bug_when>
    <thetext>Created attachment 21146
Completed patch (to be split)

This is pretty much everything. Adds Animation Events, IDL interfaces, computed style. Addresses the comments by Hyatt above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80553</commentid>
    <comment_count>9</comment_count>
      <attachid>21179</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 14:17:01 -0700</bug_when>
    <thetext>Created attachment 21179
Update support for CSS Transforms

This is an extraction of the transforms code from the complete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80554</commentid>
    <comment_count>10</comment_count>
      <attachid>21180</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 14:40:22 -0700</bug_when>
    <thetext>Created attachment 21180
Patch for using updated animation controller and keyframe parsing

Extracted patch for software animations and keyframe parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80556</commentid>
    <comment_count>11</comment_count>
      <attachid>21181</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 14:51:55 -0700</bug_when>
    <thetext>Created attachment 21181
Patch for animation/transition events and other dom interfaces

This is the extraction of the IDL/Events from the complete patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80560</commentid>
    <comment_count>12</comment_count>
      <attachid>21179</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-05-15 15:11:57 -0700</bug_when>
    <thetext>Comment on attachment 21179
Update support for CSS Transforms

In Transform3D.cpp:

+Transform3D &amp;Transform3D::function() {}

Move the &amp; to be with the return value, so:

Transform3D&amp; Transform3D::function() {}

In CodeGeneratorObjC.pm:

I don&apos;t understand this:

-    return &quot;CSSValue&quot; if $parent eq &quot;SVGColor&quot;;
+    return &quot;CSSValue&quot; if $parent eq &quot;SVGColor&quot; or $parent eq &quot;CSSValueList&quot;;

In DerivedSources.make:

     VoidCallback \
+	WebKitCSSTransformValue \
     WheelEvent \

Double-check if tabs are actually used in that file.

I see &quot;KeyframeList&quot; in this patch.  I think that was unintentional.  Can you remove it?

This is very close to being able to land.  I think I&apos;ll be able to r+ it with one more revision.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80561</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-05-15 15:12:46 -0700</bug_when>
    <thetext>Should we maybe split this up into separate bugs?  The attachment list is going to get long and confusing as we iterate over each patch. :)

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80565</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2008-05-15 15:20:34 -0700</bug_when>
    <thetext>Also, make sure you are adding files to all projects (Qt, wx, Windows, OS X, GTK).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80566</commentid>
    <comment_count>15</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 15:21:55 -0700</bug_when>
    <thetext>Transforms moved to http://bugs.webkit.org/show_bug.cgi?id=19091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80568</commentid>
    <comment_count>16</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 15:22:37 -0700</bug_when>
    <thetext>How do I add files to all projects?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80577</commentid>
    <comment_count>17</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 15:35:48 -0700</bug_when>
    <thetext>CSS Animations now in http://bugs.webkit.org/show_bug.cgi?id=19092

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>80579</commentid>
    <comment_count>18</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-05-15 15:47:00 -0700</bug_when>
    <thetext>DOM stuff now in http://bugs.webkit.org/show_bug.cgi?id=19091</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>81417</commentid>
    <comment_count>19</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-05-24 23:39:49 -0700</bug_when>
    <thetext>Since this bug has been broken up, should the patches on this bug be unflagged and obsoleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86691</commentid>
    <comment_count>20</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-07-22 17:57:14 -0700</bug_when>
    <thetext>I&apos;ll be deprecating this bug soon.
See 
http://bugs.webkit.org/show_bug.cgi?id=19938
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87747</commentid>
    <comment_count>21</comment_count>
      <attachid>21181</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-04 01:54:27 -0700</bug_when>
    <thetext>Comment on attachment 21181
Patch for animation/transition events and other dom interfaces

In general this patch looks fine.

Tabs vs. spaces here:
39     VoidCallback \
 340 	WebKitAnimationEvent \
 341 	WebKitCSSKeyframeRule \
 342 	WebKitCSSKeyframesRule \
 343 	WebKitCSSTransformValue \
340344     WheelEvent \

Single line ifs don&apos;t get { } (yes, I know the rest of that function has them wrong already:
+    } else if (attr-&gt;name() == onwebkittransitionendAttr) {
+        setHTMLEventListener(webkitTransitionEndEvent, attr);        
     }

Can&apos;t we use CamelCase for these?
+onwebkitanimationend
+onwebkitanimationiteration
+onwebkitanimationstart
+onwebkittransitionend

Seems it would make them more readable.  Yes, i know the other event attributes are all lower-case.  I&apos;m not sure they should be though.  I guess the case matters for XHTML though, so I guess they probably have to be all lower case...

This seems wrong:
+    if (eventType == &quot;WebKitAnimationEvent&quot;)
+        return new WebKitAnimationEvent;    
+    if (eventType == &quot;WebKitTransitionEvent&quot;)
+        return new WebKitTransitionEvent;  

I guess Events haven&apos;t been converted to use the new Foo::create() syntax yet?  They still start with a RefCount of 0 instead of 1?

These could probably go in the header just fine:
+bool Event::isWebKitTransitionEvent() const
+{
+    return false;
+}   


Again, no create() syntax?

+    RefPtr&lt;WebKitAnimationEvent&gt; animEvent = new WebKitAnimationEvent(eventType, animationName, elapsedTime);


I would think we would want to use the newer PassRefPtr&lt;WebKitAnimationEvent&gt; create(); syntax for all new classes.  If the parent class hasn&apos;t yet been converted to start with a RefCount of 1, this one could easily ASSERT that new WebKitAnimationEvent() comes back with a RefCount of O (to make things crash if someone changes the base class and forgets to change this one) and then still return it from create().  When someone fixes Event to start with a ref count of 1, then they&apos;ll have to change the &quot;new&quot; in your create() method to be adoptRef(new Foo) instead.

I&apos;m surprised this ASSERT isn&apos;t in dispatchEvent!?
+    ASSERT(!eventDispatchForbidden());

Why should each caller need to ASSERT that?

This does not need to call the constructor for the String, but it *does* need to init the double to some sane value:
+    WebKitAnimationEvent::WebKitAnimationEvent()
+    : m_animationName()
+    {

And again:
+    WebKitTransitionEvent::WebKitTransitionEvent()
+    : m_propertyName()
+    {

Seems these two classes are just copy/paste of one another... maybe they should just be the same class?

This is not needed in the idl files:
+    // Introduced in DOM Level ?:


Otherwise this looks fine.  Maybe you still want Hyatt to look at it for content.

r- though for the various small nits above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87767</commentid>
    <comment_count>22</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2008-08-04 10:59:13 -0700</bug_when>
    <thetext>Oops. Thanks for the comments Eric, but this bug is stale. I&apos;ll copy them into the relevant new bugs.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>87768</commentid>
    <comment_count>23</comment_count>
      <attachid>21180</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-04 11:34:14 -0700</bug_when>
    <thetext>Comment on attachment 21180
Patch for using updated animation controller and keyframe parsing

stale patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21107</attachid>
            <date>2008-05-13 05:06:12 -0700</date>
            <delta_ts>2008-05-14 18:27:04 -0700</delta_ts>
            <desc>in progress patch - not ready for review</desc>
            <filename>temporary.patch</filename>
            <type>text/plain</type>
            <size>256626</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ0
LDEyICsyMTQ0LDYwIEBACiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIGlmICghaXNUZXh0KCkgJiYgbV9zdHlsZSAmJiBz
dHlsZSkKLSAgICAgICAgc3R5bGUgPSBhbmltYXRpb25Db250cm9sbGVyKCktPnVwZGF0ZUltcGxp
Y2l0QW5pbWF0aW9ucyh0aGlzLCBzdHlsZSk7CisgICAgaWYgKCFpc1RleHQoKSAmJiBzdHlsZSkg
eworICAgICAgICBzdHlsZSA9IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+dXBkYXRlQW5pbWF0aW9u
cyh0aGlzLCBzdHlsZSk7CisgICAgfQogCi0gICAgc2V0U3R5bGUoc3R5bGUpOworICAgIGlmIChz
dHlsZSkgeworICAgICAgICBzZXRTdHlsZShzdHlsZSk7CisgICAgfQogfQogCitib29sIFJlbmRl
ck9iamVjdDo6c3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSwgaW50IGluZGV4KQorewor
ICAgIHJldHVybiBsYXllcigpID8gbGF5ZXIoKS0+c3RhcnRBbmltYXRpb24oYmVnaW5UaW1lLCBp
bmRleCkgOiBmYWxzZTsKK30KKworYm9vbCBSZW5kZXJPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbihk
b3VibGUgYmVnaW5UaW1lLCBpbnQgcHJvcGVydHksIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIFJl
bmRlclN0eWxlKiB0b1N0eWxlKQoreworICAgIHJldHVybiBsYXllcigpID8gbGF5ZXIoKS0+c3Rh
cnRUcmFuc2l0aW9uKGJlZ2luVGltZSwgcHJvcGVydHksIGZyb21TdHlsZSwgdG9TdHlsZSkgOiBm
YWxzZTsKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3Vi
bGUgdCkKK3sKKyAgICBhbmltYXRpb25Db250cm9sbGVyKCktPnNldEFuaW1hdGlvblN0YXJ0VGlt
ZSh0aGlzLCB0KTsKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6OnNldFRyYW5zaXRpb25TdGFydFRp
bWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCkKK3sKKyAgICBhbmltYXRpb25Db250cm9sbGVyKCkt
PnNldFRyYW5zaXRpb25TdGFydFRpbWUodGhpcywgcHJvcGVydHksIHQpOworfQorCit2b2lkIFJl
bmRlck9iamVjdDo6YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBuYW1lLCBpbnQgaW5k
ZXgsIGJvb2wgcmVzZXQpCit7CisgICAgaWYgKGxheWVyKCkpCisgICAgICAgIGxheWVyKCktPmFu
aW1hdGlvbkZpbmlzaGVkKG5hbWUsIGluZGV4LCByZXNldCk7Cit9CisKK3ZvaWQgUmVuZGVyT2Jq
ZWN0Ojp0cmFuc2l0aW9uRmluaXNoZWQoaW50IHByb3BlcnR5KQoreworICAgIGlmIChsYXllcigp
KQorICAgICAgICBsYXllcigpLT50cmFuc2l0aW9uRmluaXNoZWQocHJvcGVydHkpOworfQorCit2
b2lkIFJlbmRlck9iamVjdDo6c3VzcGVuZEFuaW1hdGlvbnMoKQoreworICAgIGlmIChsYXllcigp
KQorICAgICAgICBsYXllcigpLT5zdXNwZW5kQW5pbWF0aW9ucygpOworfQorCit2b2lkIFJlbmRl
ck9iamVjdDo6cmVzdW1lQW5pbWF0aW9ucygpCit7CisgICAgaWYgKGxheWVyKCkpCisgICAgICAg
IGxheWVyKCktPnJlc3VtZUFuaW1hdGlvbnMoKTsKK30KKyAgICAKKyAgICAKIHZvaWQgUmVuZGVy
T2JqZWN0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogc3R5bGUpCiB7CiAgICAgaWYgKG1fc3R5bGUg
PT0gc3R5bGUpCkBAIC0yNTI0LDcgKzI1NzIsNyBAQAogICAgIGlmIChBWE9iamVjdENhY2hlOjph
Y2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hl
KCktPnJlbW92ZSh0aGlzKTsKIAotICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Y2FuY2VsSW1w
bGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Y2FuY2Vs
QW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIC8vIEJ5IGRlZmF1bHQgbm8gcmVmLWNvdW50aW5nLiBS
ZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKSBkb2Vzbid0IGNhbGwKICAgICAvLyB0aGlzIGZ1bmN0aW9u
IGJlY2F1c2UgaXQgbmVlZHMgdG8gZG8gcmVmLWNvdW50aW5nLiBJZiBhbnl0aGluZwpJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1Miw2ICs1NTIsMTYgQEAK
ICAgICAvLyBXZSBkb24ndCB5ZXQgaGFuZGxlIGdlbmVyYXRlZCBjb250ZW50IGFuaW1hdGlvbiBz
dWNoIGFzIGZpcnN0LWxldHRlciBvciBiZWZvcmUvYWZ0ZXIgKHdlJ2xsIHdvcnJ5IGFib3V0IHRo
aXMgbGF0ZXIpLgogICAgIHZvaWQgc2V0QW5pbWF0YWJsZVN0eWxlKFJlbmRlclN0eWxlKik7CiAK
KyAgICAvLyBJbnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFu
aW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zCisgICAgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUg
YmVnaW5UaW1lLCBpbnQgaW5kZXgpOworICAgIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSBi
ZWdpblRpbWUsIGludCBwcm9wZXJ0eSwgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgUmVuZGVyU3R5
bGUqIHRvU3R5bGUpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRUaW1lKGRvdWJsZSB0KTsK
KyAgICB2b2lkIHNldFRyYW5zaXRpb25TdGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCk7
CisgICAgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIG5hbWUsIGludCBpbmRl
eCwgYm9vbCByZXNldCk7CisgICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoaW50IHByb3BlcnR5
KTsKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRp
b25zKCk7CisgICAgICAgIAogICAgIC8vIFNldCB0aGUgc3R5bGUgb2YgdGhlIG9iamVjdCBhbmQg
dXBkYXRlIHRoZSBzdGF0ZSBvZiB0aGUgb2JqZWN0IGFjY29yZGluZ2x5LgogICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXIuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDggKzI1Nyw5IEBACiAgICAgfQogICAgIAogICAg
IGlmIChoYXNUcmFuc2Zvcm0pIHsKLSAgICAgICAgbV90cmFuc2Zvcm0tPnJlc2V0KCk7Ci0gICAg
ICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPmFwcGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVu
ZGVyZXIoKS0+Ym9yZGVyQm94KCkuc2l6ZSgpKTsKKyAgICAgICAgVHJhbnNmb3JtM0QgdHJhbnNm
b3JtM0Q7CisgICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPmFwcGx5VHJhbnNmb3JtKHRyYW5z
Zm9ybTNELCByZW5kZXJlcigpLT5ib3JkZXJCb3goKS5zaXplKCksIHRydWUpOworICAgICAgICBt
X3RyYW5zZm9ybS5zZXQobmV3IEFmZmluZVRyYW5zZm9ybSh0cmFuc2Zvcm0zRC5hZmZpbmVUcmFu
c2Zvcm0oKSkpOwogICAgIH0KIH0KIApAQCAtMjM2OSw2ICsyMzcwLDQwIEBACiAgICAgbV9yZWZs
ZWN0aW9uLT5zZXRTdHlsZShuZXdTdHlsZSk7CiB9CiAKK2Jvb2wgUmVuZGVyTGF5ZXI6OnN0YXJ0
QW5pbWF0aW9uKGRvdWJsZSBiZWdpblRpbWUsIGludCBpbmRleCkKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgUmVuZGVyTGF5ZXI6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgYmVnaW5U
aW1lLCBpbnQgcHJvcGVydHksIFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIFJlbmRlclN0eWxlKiB0
b1N0eWxlKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBSZW5kZXJMYXllcjo6c2V0
QW5pbWF0aW9uU3RhcnRUaW1lKGRvdWJsZSB0KQoreworfQorCit2b2lkIFJlbmRlckxheWVyOjpz
ZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCit7Cit9CisKK3Zv
aWQgUmVuZGVyTGF5ZXI6OmFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50
IGluZGV4LCBib29sIHJlc2V0KQoreworfQorCit2b2lkIFJlbmRlckxheWVyOjp0cmFuc2l0aW9u
RmluaXNoZWQoaW50IHByb3BlcnR5KQoreworfQorICAgIAordm9pZCBSZW5kZXJMYXllcjo6c3Vz
cGVuZEFuaW1hdGlvbnMoKQoreworfQorCit2b2lkIFJlbmRlckxheWVyOjpyZXN1bWVBbmltYXRp
b25zKCkKK3sKK30KKyAgICAgICAgCiB2b2lkIFJlbmRlckxheWVyOjpzdXNwZW5kTWFycXVlZXMo
KQogewogICAgIGlmIChtX21hcnF1ZWUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN0eWxlLmgJKHJl
dmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1hZ2VWYWx1ZS5oIgotI2luY2x1
ZGUgIkNTU1RyYW5zZm9ybVZhbHVlLmgiCiAjaW5jbHVkZSAiRGF0YVJlZi5oIgogI2luY2x1ZGUg
IkZvbnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCkBAIC01MCw2ICs0OSw4IEBACiAjaW5j
bHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUgIlBhaXIuaCIK
KyNpbmNsdWRlICJUcmFuc2Zvcm0zRC5oIgorCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
ICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAg
LTc0LDYgKzc1LDcgQEAKIGNsYXNzIENhY2hlZEltYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7
CiBjbGFzcyBDdXJzb3JMaXN0OworY2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUGFpcjsKIGNs
YXNzIFJlbmRlckFyZW5hOwogY2xhc3MgU2hhZG93VmFsdWU7CkBAIC03ODIsODEgKzc4NCwxMjIg
QEAKIAogLy8gQ1NTIFRyYW5zZm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBDU1MzKQogCi1jbGFz
cyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFuc2Zvcm1PcGVyYXRp
b24+IHsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5z
Zm9ybU9wZXJhdGlvbj4KK3sKIHB1YmxpYzoKLSAgICBUcmFuc2Zvcm1PcGVyYXRpb24oKSA6IFJl
ZkNvdW50ZWQ8VHJhbnNmb3JtT3BlcmF0aW9uPigwKSB7IH0KICAgICB2aXJ0dWFsIH5UcmFuc2Zv
cm1PcGVyYXRpb24oKSB7fQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID09IG8pOyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgSW50U2l6
ZSYgYm9yZGVyQm94U2l6ZSkgPSAwOwogICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFu
c2Zvcm0zRCYsIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0ID0gMDsKKyAgICAK
ICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFs
c2UpID0gMDsKICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eU9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2NhbGVPcGVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1JvdGF0ZU9wZXJh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2tld09w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzVHJh
bnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJv
b2wgaXNNYXRyaXhPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1
YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIGJvb2wgaXNQZXJzcGVjdGl2ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiB9OwogCitjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBU
cmFuc2Zvcm1PcGVyYXRpb24KK3sKK3B1YmxpYzoKKyAgICBJZGVudGl0eVRyYW5zZm9ybU9wZXJh
dGlvbigpCisgICAge30KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eU9wZXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gby5pc0lkZW50aXR5T3BlcmF0aW9uKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
Ym9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJC
b3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFs
c2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9OworCiBjbGFzcyBTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24KIHsKIHB1Ymxp
YzoKICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgc3gsIGRvdWJsZSBzeSkKLSAg
ICA6IG1feChzeCksIG1feShzeSkKKyAgICA6IG1feChzeCksIG1feShzeSksIG1feigxLmYpCiAg
ICAge30KLSAgICAgICAgCisKKyAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgc3gs
IGRvdWJsZSBzeSwgZG91YmxlIHN6KQorICAgIDogbV94KHN4KSwgbV95KHN5KSwgbV96KHN6KQor
ICAgIHt9CisgICAgCiAgICAgdmlydHVhbCBib29sIGlzU2NhbGVPcGVyYXRpb24oKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CiAgICAgewogICAgICAgICBpZiAoby5pc1Nj
YWxlT3BlcmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFNjYWxlVHJhbnNmb3JtT3BlcmF0
aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qPigmbyk7
Ci0gICAgICAgICAgICByZXR1cm4gbV94ID09IHMtPm1feCAmJiBtX3kgPT0gcy0+bV95OworICAg
ICAgICAgICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09IHMtPm1feSAmJiBtX3ogPT0g
cy0+bV96OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNp
emUmIGJvcmRlckJveFNpemUpCisgICAgCisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9y
bTNEJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CiAgICAg
ewotICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBtX3kpOworICAgICAgICB0cmFuc2Zvcm0u
c2NhbGUzZCgoZmxvYXQpIG1feCwgKGZsb2F0KSBtX3ksIChmbG9hdCkgbV96KTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KLQorICAgIAogICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0
aW9uKiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVz
cywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KKyAgICAKIHByaXZhdGU6CiAgICAg
ZG91YmxlIG1feDsKICAgICBkb3VibGUgbV95OworICAgIGRvdWJsZSBtX3o7CiB9OwogCiBjbGFz
cyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3JtT3BlcmF0aW9uCiB7
CiBwdWJsaWM6CiAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJsZSBhbmdsZSkKLSAg
ICA6IG1fYW5nbGUoYW5nbGUpCisgICAgOiBtX3goMC5mKSwgbV95KDAuZiksIG1feigxLmYpLCBt
X2FuZ2xlKGFuZ2xlKQogICAgIHt9CiAKKyAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24oZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlKQorICAgIDogbV94KHgpLCBt
X3koeSksIG1feih6KSwgbV9hbmdsZShhbmdsZSkKKyAgICB7fQorICAgIAogICAgIHZpcnR1YWwg
Ym9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzUm90YXRlT3BlcmF0aW9uKCkpIHsKICAgICAg
ICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogciA9IHN0YXRpY19jYXN0PGNv
bnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAgICAgIHJldHVybiBt
X2FuZ2xlID09IHItPm1fYW5nbGU7CisgICAgICAgICAgICByZXR1cm4gbV94ID09IHItPm1feCAm
JiBtX3kgPT0gci0+bV95ICYmIG1feiA9PSByLT5tX3ogJiYgbV9hbmdsZSA9PSByLT5tX2FuZ2xl
OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXpl
JiBib3JkZXJCb3hTaXplKQorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJh
bnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsKLSAgICAg
ICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuZ2xlKTsKKyAgICAgICAgdHJhbnNmb3JtLnJvdGF0ZTNk
KChmbG9hdCkgbV94LCAoZmxvYXQpIG1feSwgKGZsb2F0KSBtX3osIChmbG9hdCkgbV9hbmdsZSk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKICAgICB2aXJ0dWFsIFRyYW5z
Zm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwogICAgIAogcHJpdmF0
ZToKKyAgICBkb3VibGUgbV94OworICAgIGRvdWJsZSBtX3k7CisgICAgZG91YmxlIG1fejsKICAg
ICBkb3VibGUgbV9hbmdsZTsKIH07CiAKQEAgLTg2OCw3ICs5MTEsNyBAQAogICAgIHt9CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGlzU2tld09wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzU2tld09wZXJhdGlvbigp
KSB7CkBAIC04NzcsMTIgKzkyMCwxMyBAQAogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgCisgICAgdmlydHVhbCBi
b29sIGFwcGx5KFRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJv
eFNpemUpIGNvbnN0CiAgICAgewotICAgICAgICB0cmFuc2Zvcm0uc2tldyhtX2FuZ2xlWCwgbV9h
bmdsZVkpOworICAgICAgICB0cmFuc2Zvcm0uc2tldygoZmxvYXQpIG1fYW5nbGVYLCAoZmxvYXQp
IG1fYW5nbGVZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQorICAgIAogICAgIHZp
cnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7CiAg
ICAgCiBwcml2YXRlOgpAQCAtODk0LDg1ICs5MzgsMTI2IEBACiB7CiBwdWJsaWM6CiAgICAgVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IExlbmd0aCYgdHgsIGNvbnN0IExlbmd0aCYg
dHkpCi0gICAgOiBtX3godHgpLCBtX3kodHkpCisgICAgOiBtX3godHgpLCBtX3kodHkpLCBtX3oo
TGVuZ3RoKCkpCiAgICAge30KKworICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihjb25z
dCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBjb25zdCBMZW5ndGgmIHR6KQorICAgIDog
bV94KHR4KSwgbV95KHR5KSwgbV96KHR6KQorICAgIHt9CiAgICAgCiAgICAgdmlydHVhbCBib29s
IGlzVHJhbnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCisgICAgCiAg
ICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBj
b25zdAogICAgIHsKICAgICAgICAgaWYgKG8uaXNUcmFuc2xhdGVPcGVyYXRpb24oKSkgewogICAg
ICAgICAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0ID0gc3RhdGljX2Nh
c3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwotICAgICAgICAgICAg
cmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95ID09IHQtPm1feTsKKyAgICAgICAgICAgIHJldHVy
biBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5tX3kgJiYgbV96ID09IHQtPm1fejsKICAgICAg
ICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgdmlydHVhbCB2b2lkIGFw
cGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hT
aXplKQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3Jt
LCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsKLSAgICAgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZShtX3guY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94U2l6ZS53aWR0aCgp
KSwgbV95LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAg
Ly8gVE9ETzogQ0ZNIC0gSG93IGRvIHdlIGRlYWwgd2l0aCBhIHogdmFsdWUgYXMgYSBwZXJjZW50
YWdlPworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QobV94LmNhbGNWYWx1ZShib3JkZXJC
b3hTaXplLndpZHRoKCkpLCBtX3kuY2FsY1ZhbHVlKGJvcmRlckJveFNpemUuaGVpZ2h0KCkpLCBt
X3ouY2FsY1ZhbHVlKDEpKTsKKyAgICAgICAgcmV0dXJuIG1feC50eXBlKCkgPT0gUGVyY2VudCB8
fCBtX3kudHlwZSgpID09IFBlcmNlbnQ7CiAgICAgfQotCisgICAgCiAgICAgdmlydHVhbCBUcmFu
c2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91
YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKLQorICAgIAogcHJp
dmF0ZToKICAgICBMZW5ndGggbV94OwogICAgIExlbmd0aCBtX3k7CisgICAgTGVuZ3RoIG1fejsK
IH07CiAKIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1P
cGVyYXRpb24KIHsKIHB1YmxpYzoKLSAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oZG91Ymxl
IGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKLSAg
ICA6IG1fYShhKSwgbV9iKGIpLCBtX2MoYyksIG1fZChkKSwgbV9lKGUpLCBtX2YoZikKLSAgICB7
fQorICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIG0p
CisgICAgeyBtX21hdHJpeCA9IG07IH0KICAgICAKKyAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24oZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYywgZmxvYXQgZCwgZmxvYXQgZSwgZmxvYXQgZikK
KyAgICB7CisgICAgICAgIG1fbWF0cml4LnNldE1hdHJpeChhLGIsYyxkLGUsZik7CisgICAgfQor
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeE9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzTWF0cml4T3Bl
cmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiog
bSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX2EgPT0gbS0+bV9hICYmIG1fYiA9PSBtLT5tX2IgJiYgbV9jID09
IG0tPm1fYyAmJiBtX2QgPT0gbS0+bV9kICYmIG1fZSA9PSBtLT5tX2UgJiYgbV9mID09IG0tPm1f
ZjsKKyAgICAgICAgICAgIHJldHVybiBtX21hdHJpeCA9PSBtLT5tX21hdHJpeDsKICAgICAgICAg
fQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBh
cHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXpl
KSBjb25zdAorICAgIHsKKyAgICAgICAgdHJhbnNmb3JtLm11bHRMZWZ0KFRyYW5zZm9ybTNEKG1f
bWF0cml4KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgdmlydHVh
bCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJv
bSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKKyAgICAK
K3ByaXZhdGU6CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4OworfTsKIAotICAgIHZpcnR1
YWwgdm9pZCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYg
Ym9yZGVyQm94U2l6ZSkKK2NsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uIDogcHVibGlj
IFRyYW5zZm9ybU9wZXJhdGlvbgoreworcHVibGljOgorICAgIE1hdHJpeDNEVHJhbnNmb3JtT3Bl
cmF0aW9uKGNvbnN0IFRyYW5zZm9ybTNEJiBtYXQpCisgICAgeyBtX21hdHJpeCA9IG1hdDsgfQor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0aW9uKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBt
YXRyaXgobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7Ci0gICAgICAgIHRyYW5zZm9ybSA9
IG1hdHJpeCAqIHRyYW5zZm9ybTsKKyAgICAgICAgaWYgKG8uaXNNYXRyaXgzRE9wZXJhdGlvbigp
KSB7CisgICAgICAgICAgICBjb25zdCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0
YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOworICAgICAg
ICAgICAgcmV0dXJuIG1fbWF0cml4ID09IG0tPm1fbWF0cml4OworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHkoVHJh
bnNmb3JtM0QmIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHRyYW5zZm9ybS5tdWx0TGVmdChtX21hdHJpeCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24q
IGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAKIHByaXZhdGU6Ci0gICAgZG91Ymxl
IG1fYTsKLSAgICBkb3VibGUgbV9iOwotICAgIGRvdWJsZSBtX2M7Ci0gICAgZG91YmxlIG1fZDsK
LSAgICBkb3VibGUgbV9lOwotICAgIGRvdWJsZSBtX2Y7CisgICAgVHJhbnNmb3JtM0QgbV9tYXRy
aXg7CiB9OwotCisgICAgCiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zCiB7CiBwdWJsaWM6Cisg
ICAgVHJhbnNmb3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0eSA9IGZhbHNlKQorICAgIHsK
KyAgICAgICAgaWYgKG1ha2VJZGVudGl0eSkKKyAgICAgICAgICAgIGFwcGVuZChuZXcgSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb24oKSk7CisgICAgfQorICAgIAogICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJikgY29uc3Q7CiAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0IHsKICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KLSAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVyYXRpb25zLnNpemUoKTsgfQogICAgIGNvbnN0IFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBtX29wZXJh
dGlvbnMuYXQoaSk7IH0KLQorICAgIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0IFJlZlB0cjxUcmFu
c2Zvcm1PcGVyYXRpb24+JiBvcCkgeyByZXR1cm4gbV9vcGVyYXRpb25zLmFwcGVuZChvcCk7IH0K
LQorICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9ybU9wZXJhdGlvbj4g
PiBtX29wZXJhdGlvbnM7CiB9OwotCisgICAgCiBjbGFzcyBTdHlsZVRyYW5zZm9ybURhdGEgOiBw
dWJsaWMgUmVmQ291bnRlZDxTdHlsZVRyYW5zZm9ybURhdGE+IHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxTdHlsZVRyYW5zZm9ybURhdGE+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0
UmVmKG5ldyBTdHlsZVRyYW5zZm9ybURhdGEpOyB9CkBAIC0xMDI4LDYgKzExMTMsOCBAQAogc3Ry
dWN0IFNoYWRvd0RhdGEgewogICAgIFNoYWRvd0RhdGEoaW50IF94LCBpbnQgX3ksIGludCBfYmx1
ciwgY29uc3QgQ29sb3ImIF9jb2xvcikKICAgICA6eChfeCksIHkoX3kpLCBibHVyKF9ibHVyKSwg
Y29sb3IoX2NvbG9yKSwgbmV4dCgwKSB7fQorICAgIFNoYWRvd0RhdGEoKQorICAgIDogeCgwKSwg
eSgwKSwgYmx1cigwKSwgbmV4dCgwKSB7fQogICAgIFNoYWRvd0RhdGEoY29uc3QgU2hhZG93RGF0
YSYgbyk7CiAgICAgCiAgICAgflNoYWRvd0RhdGEoKSB7IGRlbGV0ZSBuZXh0OyB9CkBAIC0xMjMy
LDYwICsxMzE5LDEzNSBAQAogICAgIGRvdWJsZSBtX3kyOwogfTsKIAotc3RydWN0IFRyYW5zaXRp
b24geworZW51bSBFQW5pbVBsYXlTdGF0ZSB7IEFuaW1QbGF5U3RhdGVQbGF5aW5nLCBBbmltUGxh
eVN0YXRlUGF1c2VkIH07CisKKyNkZWZpbmUgQW5pbWF0aW9uIFRyYW5zaXRpb24KKworY2xhc3Mg
VHJhbnNpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zaXRpb24+IHsKIHB1YmxpYzoKICAg
ICBUcmFuc2l0aW9uKCk7Ci0gICAgflRyYW5zaXRpb24oKTsKLQotICAgIFRyYW5zaXRpb24qIG5l
eHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICBUcmFuc2l0aW9uKiBuZXh0KCkgeyBy
ZXR1cm4gbV9uZXh0OyB9Ci0KKyAgICAKKyAgICBjb25zdCBUcmFuc2l0aW9uKiBuZXh0KCkgY29u
c3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgVHJhbnNpdGlvbiogbmV4dCgpIHsgcmV0
dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIAorICAgIC8vIHNoYXJlZCBiZXR3ZWVuIHRyYW5zaXRp
b25zIGFuZCBhbmltYXRpb25zCiAgICAgYm9vbCBpc0R1cmF0aW9uU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9kdXJhdGlvblNldDsgfQotICAgIGJvb2wgaXNSZXBlYXRDb3VudFNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwZWF0Q291bnRTZXQ7IH0KICAgICBib29sIGlzVGltaW5nRnVuY3Rpb25TZXQo
KSBjb25zdCB7IHJldHVybiBtX3RpbWluZ0Z1bmN0aW9uU2V0OyB9Ci0gICAgYm9vbCBpc1Byb3Bl
cnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQorCisgICAgLy8gdHJhbnNp
dGlvbnMgb25seQorICAgIGJvb2wgaXNUcmFuc2l0aW9uUHJvcGVydHlTZXQoKSBjb25zdCB7IHJl
dHVybiBtX3Byb3BlcnR5U2V0OyB9CiAgICAgCi0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIW1fZHVyYXRpb25TZXQgJiYgIW1fcmVwZWF0Q291bnRTZXQgJiYgIW1fdGltaW5nRnVu
Y3Rpb25TZXQgJiYgIW1fcHJvcGVydHlTZXQ7IH0KKyAgICAvLyBhbmltYXRpb25zIG9ubHkKKyAg
ICBib29sIGlzQW5pbWF0aW9uRGVsYXlTZXQoKSBjb25zdCB7IHJldHVybiBtX2RlbGF5U2V0OyB9
CisgICAgYm9vbCBpc0FuaW1hdGlvbkRpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZGly
ZWN0aW9uU2V0OyB9CisgICAgYm9vbCBpc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50U2V0KCkgY29u
c3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudFNldDsgfQorICAgIGJvb2wgaXNBbmltYXRpb25O
YW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2V0OyB9CisgICAgYm9vbCBpc0FuaW1hdGlv
blBsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlU2V0OyB9CisgICAgCisg
ICAgLy8gaXMgdGhlIHNwZWNpYWwgIm5vbmUiIGFuaW1hdGlvbiAoYW5pbWF0aW9uLW5hbWU6IG5v
bmUpCisgICAgYm9vbCBpc05vbmVBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2lzTm9uZTsg
fQorICAgIC8vIHdlIGNhbiBtYWtlIHBsYWNlaG9sZGVyIFRyYW5zaXRpb24gb2JqZWN0cyB0byBr
ZWVwIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMKKyAgICAvLyBvZiBwcm9wZXJ0aWVzIGluIHN5
bmMuIGlzVmFsaWRBbmltYXRpb24gbWVhbnMgdGhpcyBpcyBub3QgYSBwbGFjZWhvbGRlci4KKyAg
ICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9pc05vbmUgJiYgIW1f
bmFtZS5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICghbV9kaXJlY3Rpb25TZXQgJiYgIW1fZHVyYXRpb25TZXQgJiYgIW1f
bmFtZVNldCAmJiAhbV9wbGF5U3RhdGVTZXQgJiYgCisgICAgICAgICAgICAgICAgIW1faXRlcmF0
aW9uQ291bnRTZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25TZXQgJiYgIW1f
cHJvcGVydHlTZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlPclplcm9EdXJhdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbXB0eSgpIHx8IChtX2R1cmF0aW9u
ID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAgICB9CisgICAgCisgICAgLy8gc2hhcmVkIGJldHdl
ZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKICAgICB2b2lkIGNsZWFyRHVyYXRpb24oKSB7
IG1fZHVyYXRpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJSZXBlYXRDb3VudCgpIHsg
bV9yZXBlYXRDb3VudFNldCA9IGZhbHNlOyB9CiAgICAgdm9pZCBjbGVhclRpbWluZ0Z1bmN0aW9u
KCkgeyBtX3RpbWluZ0Z1bmN0aW9uU2V0ID0gZmFsc2U7IH0KLSAgICB2b2lkIGNsZWFyUHJvcGVy
dHkoKSB7IG1fcHJvcGVydHlTZXQgPSBmYWxzZTsgfQogCi0gICAgaW50IGR1cmF0aW9uKCkgY29u
c3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIGludCByZXBlYXRDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwZWF0Q291bnQ7IH0KKyAgICAvLyB0cmFuc2l0aW9ucyBvbmx5CisgICAgdm9p
ZCBjbGVhclRyYW5zaXRpb25Qcm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CisK
KyAgICAvLyBhbmltYXRpb25zIG9ubHkKKyAgICB2b2lkIGNsZWFyQW5pbWF0aW9uRGVsYXkoKSB7
IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xlYXJBbmltYXRpb25EaXJlY3Rpb24o
KSB7IG1fZGlyZWN0aW9uU2V0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGNsZWFyQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoKSB7IG1faXRlcmF0aW9uQ291bnRTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQg
Y2xlYXJBbmltYXRpb25OYW1lKCkgeyBtX25hbWVTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xl
YXJBbmltYXRpb25QbGF5U3RhdGUoKSB7IG1fcGxheVN0YXRlU2V0ID0gQW5pbVBsYXlTdGF0ZVBs
YXlpbmc7IH0KKyAgICAKKyAgICAvLyBzaGFyZWQgYmV0d2VlbiB0cmFuc2l0aW9ucyBhbmQgYW5p
bWF0aW9ucworICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247
IH0KICAgICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJl
dHVybiBtX3RpbWluZ0Z1bmN0aW9uOyB9Ci0gICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eTsgfQorCisgICAgLy8gdHJhbnNpdGlvbnMgb25seQorICAgIGludCB0cmFu
c2l0aW9uUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisKKyAgICAvLyBh
bmltYXRpb25zIG9ubHkKKyAgICBmbG9hdCBhbmltYXRpb25EZWxheSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGVsYXk7IH0KKyAgICBib29sIGFuaW1hdGlvbkRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZGlyZWN0aW9uOyB9CisgICAgaW50IGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVyYXRpb25Db3VudDsgfQorICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9u
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEVBbmltUGxheVN0YXRlIGFuaW1h
dGlvblBsYXlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlOyB9CisKKyAgICBjb25z
dCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiYga2V5ZnJhbWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9r
ZXlmcmFtZUxpc3Q7IH0KICAgICAKLSAgICB2b2lkIHNldER1cmF0aW9uKGludCBkKSB7IG1fZHVy
YXRpb24gPSBkOyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVwZWF0Q291
bnQoaW50IGMpIHsgbV9yZXBlYXRDb3VudCA9IGM7IG1fcmVwZWF0Q291bnRTZXQgPSB0cnVlOyB9
CisgICAgLy8gc2hhcmVkIGJldHdlZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKKyAgICB2
b2lkIHNldER1cmF0aW9uKGRvdWJsZSBkKSB7IEFTU0VSVChkID49IDApOyBtX2R1cmF0aW9uID0g
ZDsgbV9kdXJhdGlvblNldCA9IHRydWU7IH0KICAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9uKGNv
bnN0IFRpbWluZ0Z1bmN0aW9uJiBmKSB7IG1fdGltaW5nRnVuY3Rpb24gPSBmOyBtX3RpbWluZ0Z1
bmN0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UHJvcGVydHkoaW50IHQpIHsgbV9wcm9w
ZXJ0eSA9IHQ7IG1fcHJvcGVydHlTZXQgPSB0cnVlOyB9CiAKLSAgICB2b2lkIHNldE5leHQoVHJh
bnNpdGlvbiogbikgeyBpZiAobV9uZXh0ICE9IG4pIHsgZGVsZXRlIG1fbmV4dDsgbV9uZXh0ID0g
bjsgfSB9CisgICAgLy8gdHJhbnNpdGlvbnMgb25seQorICAgIHZvaWQgc2V0VHJhbnNpdGlvblBy
b3BlcnR5KGludCB0KSB7IG1fcHJvcGVydHkgPSB0OyBtX3Byb3BlcnR5U2V0ID0gdHJ1ZTsgfQog
CisgICAgLy8gYW5pbWF0aW9ucyBvbmx5CisgICAgdm9pZCBzZXRBbmltYXRpb25EZWxheShmbG9h
dCBjKSB7IG1fZGVsYXkgPSBjOyBtX2RlbGF5U2V0ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0QW5p
bWF0aW9uRGlyZWN0aW9uKGJvb2wgZCkgeyBtX2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0
ID0gdHJ1ZTsgfQorICAgIHZvaWQgc2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoaW50IGMpIHsg
bV9pdGVyYXRpb25Db3VudCA9IGM7IG1faXRlcmF0aW9uQ291bnRTZXQgPSB0cnVlOyB9CisgICAg
dm9pZCBzZXRBbmltYXRpb25OYW1lKGNvbnN0IFN0cmluZyYgbikgeyBtX25hbWUgPSBuOyBtX25h
bWVTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb25QbGF5U3RhdGUoRUFuaW1QbGF5
U3RhdGUgZCkgeyBtX3BsYXlTdGF0ZSA9IGQ7IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQorICAg
IAorICAgIHZvaWQgc2V0SXNOb25lQW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47IH0K
KyAgICAKKyAgICB2b2lkIHNldE5leHQoVHJhbnNpdGlvbiogbikgeyBpZiAobV9uZXh0LmdldCgp
ICE9IG4pIHsgbV9uZXh0ID0gbjsgfSB9CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb25LZXlm
cmFtZShjb25zdCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSkgIHsgbV9rZXlmcmFtZUxp
c3QgPSBrZXlmcmFtZTsgfQorICAgIAogICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBU
cmFuc2l0aW9uJiBvKTsgICAgCiAgICAgVHJhbnNpdGlvbihjb25zdCBUcmFuc2l0aW9uJiBvKTsK
LQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdDsKLSAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QgewotICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvKTsKLSAgICB9Ci0KKyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBh
bGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQorICAgIGJv
b2wgdHJhbnNpdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiB0LCBib29sIG1hdGNoUGxheVN0
YXRlcz10cnVlKSBjb25zdDsKKyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSB0cmFuc2l0
aW9uIGluIHRoZSBjaGFpbiAoZGVmaW5lZCBieSBtX25leHQpIG1hdGNoIAorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uc01h
dGNoKCZvKSAmJiAoKG1fbmV4dCAmJiBvLm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQp
IDogKG1fbmV4dCA9PSBvLm1fbmV4dCkpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRy
YW5zaXRpb24mIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KKyAgICAKICAgICB2
b2lkIGZpbGxVbnNldFByb3BlcnRpZXMoKTsKLQotICAgIGludCBtX2R1cmF0aW9uOwotICAgIGlu
dCBtX3JlcGVhdENvdW50OworICAgIAorcHJpdmF0ZToKKyAgICBib29sIG1fZGlyZWN0aW9uOwor
ICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAgRUFuaW1QbGF5
U3RhdGUgbV9wbGF5U3RhdGU7CisgICAgaW50IG1faXRlcmF0aW9uQ291bnQ7CiAgICAgVGltaW5n
RnVuY3Rpb24gbV90aW1pbmdGdW5jdGlvbjsKKyAgICBmbG9hdCBtX2RlbGF5OwogICAgIGludCBt
X3Byb3BlcnR5OwotCi0gICAgYm9vbCBtX2R1cmF0aW9uU2V0OwotICAgIGJvb2wgbV9yZXBlYXRD
b3VudFNldDsKLSAgICBib29sIG1fdGltaW5nRnVuY3Rpb25TZXQ7Ci0gICAgYm9vbCBtX3Byb3Bl
cnR5U2V0OwotCi0gICAgVHJhbnNpdGlvbiogbV9uZXh0OworICAgIFJlZlB0cjxLZXlmcmFtZUxp
c3Q+IG1fa2V5ZnJhbWVMaXN0OworICAgIAorICAgIGJvb2wgbV9kaXJlY3Rpb25TZXQgICAgIDog
MTsKKyAgICBib29sIG1fZHVyYXRpb25TZXQgICAgICA6IDE7CisgICAgYm9vbCBtX25hbWVTZXQg
ICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wbGF5U3RhdGVTZXQgICAgIDogMTsKKyAgICBib29s
IG1faXRlcmF0aW9uQ291bnRTZXQgICA6IDE7CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0
OiAxOworICAgIGJvb2wgbV9kZWxheVNldCAgICAgICAgIDogMTsKKyAgICBib29sIG1fcHJvcGVy
dHlTZXQgICAgICA6IDE7CisgICAgCisgICAgYm9vbCBtX2lzTm9uZSA6IDE7CisgICAgCisgICAg
UmVmUHRyPFRyYW5zaXRpb24+IG1fbmV4dDsKIH07Ci0KKyAgICAKIGNsYXNzIFN0eWxlUmVmbGVj
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4KIHsKIHB1YmxpYzoKQEAg
LTEzMzQsNiArMTQ5Niw4IEBACiAgICAgYm9vbCBzaGFkb3dEYXRhRXF1aXZhbGVudChjb25zdCBT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHJlZmxlY3Rpb25E
YXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsK
ICAgICBib29sIHRyYW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhJikgY29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25z
dCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVLZXlm
cmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcik7CiAKICAgICBpbnQg
bGluZUNsYW1wOyAvLyBBbiBBcHBsZSBleHRlbnNpb24uCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9T
VVBQT1JUKQpAQCAtMTM2MCw3ICsxNTI0LDggQEAKICAgICAKICAgICBSZWZQdHI8U3R5bGVSZWZs
ZWN0aW9uPiBtX2JveFJlZmxlY3Q7CiAKLSAgICBUcmFuc2l0aW9uKiBtX3RyYW5zaXRpb247Cisg
ICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8VHJhbnNpdGlv
bj4gbV9hbmltYXRpb247CiAKICAgICBGaWxsTGF5ZXIgbV9tYXNrOwogICAgIE5pbmVQaWVjZUlt
YWdlIG1fbWFza0JveEltYWdlOwpAQCAtMjA0OCwxMyArMjIxMywyMCBAQAogICAgIExlbmd0aCB0
cmFuc2Zvcm1PcmlnaW5YKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
dHJhbnNmb3JtLT5tX3g7IH0KICAgICBMZW5ndGggdHJhbnNmb3JtT3JpZ2luWSgpIGNvbnN0IHsg
cmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV95OyB9CiAgICAgYm9v
bCBoYXNUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiAhcmFyZU5vbkluaGVyaXRlZERhdGEtPm1f
dHJhbnNmb3JtLT5tX29wZXJhdGlvbnMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhcHBseVRyYW5z
Zm9ybShBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25z
dDsKKyAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKFRyYW5zZm9ybTNEJiwgY29uc3QgSW50U2l6ZSYg
Ym9yZGVyQm94U2l6ZSwgYm9vbCBjaGVja0FwcGx5VHJhbnNmb3JtT3JpZ2luKSBjb25zdDsKICAg
ICBib29sIGhhc01hc2soKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9t
YXNrLmhhc0ltYWdlKCkgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0JveEltYWdlLmhh
c0ltYWdlKCk7IH0KICAgICAvLyBFbmQgQ1NTMyBHZXR0ZXJzCiAKICAgICAvLyBBcHBsZS1zcGVj
aWZpYyBwcm9wZXJ0eSBnZXR0ZXIgbWV0aG9kcwogICAgIFRyYW5zaXRpb24qIGFjY2Vzc1RyYW5z
aXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJl
dHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uOyB9CisgICAgVHJhbnNpdGlv
biogYWNjZXNzQW5pbWF0aW9ucygpOworICAgIAorICAgIC8vIHJldHVybiB0aGUgZmlyc3QgZm91
bmQgVHJhbnNpdGlvbiAoaW5jbHVkaW5nICdhbGwnIHRyYW5zaXRpb25zKQorICAgIGNvbnN0IFRy
YW5zaXRpb24qIHRyYW5zaXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpOworICAgIAorICAg
IGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24q
IGFuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbmlt
YXRpb24uZ2V0KCk7IH0KKwogICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJl
Tm9uSW5oZXJpdGVkRGF0YS0+bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgp
IGNvbnN0IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAg
IEVUZXh0U2VjdXJpdHkgdGV4dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
RVRleHRTZWN1cml0eT4ocmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIz
MTgsOSArMjQ5MCwxNiBAQAogICAgIC8vIEVuZCBDU1MzIFNldHRlcnMKICAgIAogICAgIC8vIEFw
cGxlLXNwZWNpZmljIHByb3BlcnR5IHNldHRlcnMKLSAgICB2b2lkIGNsZWFyVHJhbnNpdGlvbnMo
KSB7IGRlbGV0ZSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uOyBy
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gMDsgfQorICAgIHZv
aWQgdXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3Ip
IHsgaWYgKHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5h
Y2Nlc3MoKS0+dXBkYXRlS2V5ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CisKKyAgICB2b2lkIGNs
ZWFyVHJhbnNpdGlvbnMoKSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5z
aXRpb24gPSAwOyB9CiAgICAgdm9pZCBpbmhlcml0VHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlv
biogcGFyZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpwYXJlbnQp
OyB9CiAgICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygpOworCisgICAgdm9pZCBjbGVhckFuaW1h
dGlvbnMoKSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbiA9IDA7
IH0KKyAgICB2b2lkIGluaGVyaXRBbmltYXRpb25zKGNvbnN0IFRyYW5zaXRpb24qIHBhcmVudCkg
eyBjbGVhckFuaW1hdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNj
ZXNzKCktPm1fYW5pbWF0aW9uID0gbmV3IFRyYW5zaXRpb24oKnBhcmVudCk7IH0KKyAgICB2b2lk
IGFkanVzdEFuaW1hdGlvbnMoKTsKKwogICAgIHZvaWQgc2V0TGluZUNsYW1wKGludCBjKSB7IFNF
VF9WQVIocmFyZU5vbkluaGVyaXRlZERhdGEsIGxpbmVDbGFtcCwgYyk7IH0KICAgICB2b2lkIHNl
dFRleHRTaXplQWRqdXN0KGJvb2wgYikgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0
U2l6ZUFkanVzdCwgYik7IH0KICAgICB2b2lkIHNldFRleHRTZWN1cml0eShFVGV4dFNlY3VyaXR5
IGFUZXh0U2VjdXJpdHkpIHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNlY3VyaXR5
LCBhVGV4dFNlY3VyaXR5KTsgfSAKQEAgLTI0NzcsMTAgKzI2NTYsMTcgQEAKICAgICBzdGF0aWMg
TGVuZ3RoIGluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBl
cmNlbnQpOyB9CiAgICAgCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRp
YyBpbnQgaW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0
aWMgaW50IGluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAg
c3RhdGljIFRpbWluZ0Z1bmN0aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7
IHJldHVybiBUaW1pbmdGdW5jdGlvbigpOyB9CisgICAgc3RhdGljIGRvdWJsZSBpbml0aWFsRHVy
YXRpb24oKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGljIFRpbWluZ0Z1bmN0aW9uIGluaXRpYWxU
aW1pbmdGdW5jdGlvbigpIHsgcmV0dXJuIFRpbWluZ0Z1bmN0aW9uKCk7IH0KKworICAgIHN0YXRp
YyBmbG9hdCBpbml0aWFsQW5pbWF0aW9uRGVsYXkoKSB7IHJldHVybiAwOyB9CisgICAgc3RhdGlj
IGJvb2wgaW5pdGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
c3RhdGljIGludCBpbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSB7IHJldHVybiAxOyB9
CisgICAgc3RhdGljIFN0cmluZyBpbml0aWFsQW5pbWF0aW9uTmFtZSgpIHsgcmV0dXJuIFN0cmlu
ZygpOyB9CisgICAgc3RhdGljIEVBbmltUGxheVN0YXRlIGluaXRpYWxBbmltYXRpb25QbGF5U3Rh
dGUoKSB7IHJldHVybiBBbmltUGxheVN0YXRlUGxheWluZzsgfQorCiAgICAgc3RhdGljIGludCBp
bml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkgeyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICAK
ICAgICBzdGF0aWMgaW50IGluaXRpYWxMaW5lQ2xhbXAoKSB7IHJldHVybiAtMTsgfQogICAgIHN0
YXRpYyBib29sIGluaXRpYWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBz
dGF0aWMgRVRleHRTZWN1cml0eSBpbml0aWFsVGV4dFNlY3VyaXR5KCkgeyByZXR1cm4gVFNOT05F
OyB9CkBAIC0yNDkwLDYgKzI2NzYsNDcgQEAKICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJrIC0K
KyAgICAKK2NsYXNzIEtleWZyYW1lVmFsdWUgeworcHVibGljOgorICAgIEtleWZyYW1lVmFsdWUo
KSA6IGtleSgtMSkgeyB9CisgICAgZmxvYXQga2V5OworICAgIFJlbmRlclN0eWxlIHN0eWxlOwor
fTsKKworY2xhc3MgS2V5ZnJhbWVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5ZnJhbWVMaXN0
PiB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgaW5Bbmlt
TmFtZSkKKyAgICA6IG1fYW5pbWF0aW9uTmFtZShpbkFuaW1OYW1lKQorICAgIHsKKyAgICAgICAg
aW5zZXJ0KDAsIFJlbmRlclN0eWxlKCkpOyBpbnNlcnQoMSwgUmVuZGVyU3R5bGUoKSk7CisgICAg
fQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0IHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gbyk7CisgICAgfQorICAgIAorICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgICAgYW5pbWF0aW9uTmFtZSgpIGNvbnN0ICAgICAgICB7IHJldHVybiBtX2FuaW1hdGlvbk5h
bWU7IH0KKyAgICAKKyAgICB2b2lkIGluc2VydChmbG9hdCBpbktleSwgY29uc3QgUmVuZGVyU3R5
bGUmIGluU3R5bGUpOworICAgIAorICAgIHZvaWQgYWRkUHJvcGVydHkoaW50IHByb3ApICAgICAg
ICAgICAgICAgICAgICAgICAgICB7IG1fcHJvcGVydGllcy5hZGQocHJvcCk7IH0KKyAgICBib29s
IGNvbnRhaW5zUHJvcGVydHkoaW50IHByb3ApIGNvbnN0ICAgICAgICAgICAgICAgeyByZXR1cm4g
bV9wcm9wZXJ0aWVzLmNvbnRhaW5zKHByb3ApOyB9CisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBiZWdpblByb3BlcnRpZXMoKSAgICAgIHsgcmV0dXJuIG1fcHJvcGVydGllcy5iZWdp
bigpOyB9CisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmRQcm9wZXJ0aWVzKCkg
ICAgICAgIHsgcmV0dXJuIG1fcHJvcGVydGllcy5lbmQoKTsgfQorICAgIAorICAgIHZvaWQgY2xl
YXIoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
IG1fa2V5ZnJhbWVzLmNsZWFyKCk7IG1fcHJvcGVydGllcy5jbGVhcigpOyB9CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHkoKTsgfQorICAgIFZlY3RvcjxLZXlmcmFtZVZh
bHVlPjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5LZXlmcmFtZXMoKSBjb25zdCAgICB7IHJldHVybiBt
X2tleWZyYW1lcy5iZWdpbigpOyB9CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9p
dGVyYXRvciBlbmRLZXlmcmFtZXMoKSBjb25zdCAgICAgIHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmVu
ZCgpOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQXRvbWljU3RyaW5nICAgIG1fYW5pbWF0aW9u
TmFtZTsKKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4gICBtX2tleWZyYW1lczsKKyAgICBIYXNo
U2V0PGludD4gICAgbV9wcm9wZXJ0aWVzOyAgICAgICAvLyB0aGUgcHJvcGVydGllcyBiZWluZyBh
bmltYXRlZAorfTsKKyAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyArNzIs
NyBAQAogICAgIC8vIFNvIHRoZSBjb2RlIGJlbG93IGluY2x1ZGVzIGNvcGllZCBhbmQgcGFzdGVk
IGNvbnRlbnRzIG9mCiAgICAgLy8gYm90aCBSZW5kZXJCb3g6OmRlc3Ryb3koKSBhbmQgUmVuZGVy
T2JqZWN0OjpkZXN0cm95KCkuCiAgICAgLy8gRml4IG9yaWdpbmFsbHkgbWFkZSBmb3IgPHJkYXI6
Ly9wcm9ibGVtLzQyMjg4MTg+LgotICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Y2FuY2VsSW1w
bGljaXRBbmltYXRpb25zKHRoaXMpOworICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+Y2FuY2Vs
QW5pbWF0aW9ucyh0aGlzKTsKIAogICAgIGlmIChSZW5kZXJWaWV3KiB2ID0gdmlldygpKQogICAg
ICAgICB2LT5yZW1vdmVXaWRnZXQodGhpcyk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUu
Y3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTMgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IAorLy8gY29tcGFyZSBmbG9hdGluZyBwb2ludHMsIHRha2luZyBuYW4gaW50byBhY2NvdW50Citz
dGF0aWMgaW5saW5lIGJvb2wgZmxvYXRpbmdQb2ludFZhbHVlc0VxdWFsKGZsb2F0IGEsIGZsb2F0
IGIpCit7CisgICAgcmV0dXJuIChpc25hbihhKSAmJiBpc25hbihiKSkgfHwgKGEgPT0gYik7Cit9
CisgICAgCisgICAgCiBib29sIE5pbmVQaWVjZUltYWdlOjpvcGVyYXRvcj09KGNvbnN0IE5pbmVQ
aWVjZUltYWdlJiBvKSBjb25zdAogewogICAgIHJldHVybiBpbWFnZXNFcXVpdmFsZW50KG1faW1h
Z2UuZ2V0KCksIG8ubV9pbWFnZS5nZXQoKSkgJiYgbV9zbGljZXMgPT0gby5tX3NsaWNlcyAmJiBt
X2hvcml6b250YWxSdWxlID09IG8ubV9ob3Jpem9udGFsUnVsZSAmJgpAQCAtNjEzLDEyICs2MjAs
MTQgQEAKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0
eSkKLSAgICAgICAgcmV0dXJuIG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKG1fYW5nbGVYIC0g
bV9hbmdsZVggKiBwcm9ncmVzcywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKG1fYW5nbGVYIC0gbV9hbmds
ZVggKiBwcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fYW5nbGVZIC0gbV9hbmdsZVkgKiBwcm9ncmVzcyk7CiAgICAgCiAgICAgY29uc3QgU2tld1Ry
YW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2tld1RyYW5zZm9y
bU9wZXJhdGlvbio+KGZyb20pOwogICAgIGRvdWJsZSBmcm9tQW5nbGVYID0gZnJvbU9wID8gZnJv
bU9wLT5tX2FuZ2xlWCA6IDA7CiAgICAgZG91YmxlIGZyb21BbmdsZVkgPSBmcm9tT3AgPyBmcm9t
T3AtPm1fYW5nbGVZIDogMDsKLSAgICByZXR1cm4gbmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24o
ZnJvbUFuZ2xlWCArIChtX2FuZ2xlWCAtIGZyb21BbmdsZVgpICogcHJvZ3Jlc3MsIGZyb21Bbmds
ZVkgKyAobV9hbmdsZVkgLSBmcm9tQW5nbGVZKSAqIHByb2dyZXNzKTsKKyAgICByZXR1cm4gbmV3
IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oZnJvbUFuZ2xlWCArIChtX2FuZ2xlWCAtIGZyb21Bbmds
ZVgpICogcHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZy
b21BbmdsZVkgKyAobV9hbmdsZVkgLSBmcm9tQW5nbGVZKSAqIHByb2dyZXNzKTsKIH0KIAogVHJh
bnNmb3JtT3BlcmF0aW9uKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9J
ZGVudGl0eSkKQEAgLTY0MCwxMzcgKzY0OSwyMjIgQEAKICAgICBpZiAoZnJvbSAmJiAhZnJvbS0+
aXNNYXRyaXhPcGVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCisgICAgLy8g
CiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24obV9hICogKDEuIC0gcHJvZ3Jlc3MpICsgcHJvZ3Jlc3MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYiAqICgxLiAtIHByb2dyZXNz
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jICogKDEu
IC0gcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2QgKiAoMS4gLSBwcm9ncmVzcykgKyBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9lICogKDEuIC0gcHJvZ3Jlc3MpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2YgKiAoMS4gLSBwcm9ncmVzcykp
OwotCisgICAgICAgIHJldHVybiBuZXcgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKChmbG9hdCkg
KG1fbWF0cml4LmEoKSAqICgxLiAtIHByb2dyZXNzKSArIHByb2dyZXNzKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSAobV9tYXRyaXguYigpICog
KDEuIC0gcHJvZ3Jlc3MpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZsb2F0KSAobV9tYXRyaXguYygpICogKDEuIC0gcHJvZ3Jlc3MpKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSAobV9tYXRyaXguZCgp
ICogKDEuIC0gcHJvZ3Jlc3MpICsgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIChtX21hdHJpeC5lKCkgKiAoMS4gLSBwcm9ncmVz
cykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQp
IChtX21hdHJpeC5mKCkgKiAoMS4gLSBwcm9ncmVzcykpKTsKKyAgICAKICAgICBjb25zdCBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgIGRvdWJsZSBmcm9tQSA9IGZyb21PcCA/IGZy
b21PcC0+bV9hIDogMS47Ci0gICAgZG91YmxlIGZyb21CID0gZnJvbU9wID8gZnJvbU9wLT5tX2Ig
OiAwOwotICAgIGRvdWJsZSBmcm9tQyA9IGZyb21PcCA/IGZyb21PcC0+bV9jIDogMDsKLSAgICBk
b3VibGUgZnJvbUQgPSBmcm9tT3AgPyBmcm9tT3AtPm1fZCA6IDEuOwotICAgIGRvdWJsZSBmcm9t
RSA9IGZyb21PcCA/IGZyb21PcC0+bV9lIDogMDsKLSAgICBkb3VibGUgZnJvbUYgPSBmcm9tT3Ag
PyBmcm9tT3AtPm1fZiA6IDA7CisgICAgZG91YmxlIGZyb21BID0gZnJvbU9wID8gZnJvbU9wLT5t
X21hdHJpeC5hKCkgOiAxLjsKKyAgICBkb3VibGUgZnJvbUIgPSBmcm9tT3AgPyBmcm9tT3AtPm1f
bWF0cml4LmIoKSA6IDA7CisgICAgZG91YmxlIGZyb21DID0gZnJvbU9wID8gZnJvbU9wLT5tX21h
dHJpeC5jKCkgOiAwOworICAgIGRvdWJsZSBmcm9tRCA9IGZyb21PcCA/IGZyb21PcC0+bV9tYXRy
aXguZCgpIDogMS47CisgICAgZG91YmxlIGZyb21FID0gZnJvbU9wID8gZnJvbU9wLT5tX21hdHJp
eC5lKCkgOiAwOworICAgIGRvdWJsZSBmcm9tRiA9IGZyb21PcCA/IGZyb21PcC0+bV9tYXRyaXgu
ZigpIDogMDsKICAgICAKLSAgICByZXR1cm4gbmV3IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihm
cm9tQSArIChtX2EgLSBmcm9tQSkgKiBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmcm9tQiArIChtX2IgLSBmcm9tQikgKiBwcm9ncmVzcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQyArIChtX2MgLSBmcm9tQykg
KiBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9t
RCArIChtX2QgLSBmcm9tRCkgKiBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmcm9tRSArIChtX2UgLSBmcm9tRSkgKiBwcm9ncmVzcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRiArIChtX2YgLSBmcm9tRikgKiBw
cm9ncmVzcyk7CisgICAgcmV0dXJuIG5ldyBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24oKGZsb2F0
KSAoZnJvbUEgKyAobV9tYXRyaXguYSgpIC0gZnJvbUEpICogcHJvZ3Jlc3MpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZyb21CICsgKG1fbWF0cml4
LmIoKSAtIGZyb21CKSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoZmxvYXQpIChmcm9tQyArIChtX21hdHJpeC5jKCkgLSBmcm9tQykgKiBwcm9n
cmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSAo
ZnJvbUQgKyAobV9tYXRyaXguZCgpIC0gZnJvbUQpICogcHJvZ3Jlc3MpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZyb21FICsgKG1fbWF0cml4LmUo
KSAtIGZyb21FKSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZmxvYXQpIChmcm9tRiArIChtX21hdHJpeC5mKCkgLSBmcm9tRikgKiBwcm9ncmVz
cykpOwogfQogCi1UcmFuc2l0aW9uOjpUcmFuc2l0aW9uKCkKLSAgICA6IG1fZHVyYXRpb24oUmVu
ZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSkKLSAgICAsIG1fcmVwZWF0Q291
bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSkKLSAgICAsIG1f
dGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rp
b24oKSkKLSAgICAsIG1fcHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUHJv
cGVydHkoKSkKLSAgICAsIG1fZHVyYXRpb25TZXQoZmFsc2UpCi0gICAgLCBtX3JlcGVhdENvdW50
U2V0KGZhbHNlKQotICAgICwgbV90aW1pbmdGdW5jdGlvblNldChmYWxzZSkKLSAgICAsIG1fcHJv
cGVydHlTZXQoZmFsc2UpCi0gICAgLCBtX25leHQoMCkKK1RyYW5zZm9ybU9wZXJhdGlvbiogTWF0
cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiog
ZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSkKIHsKKyAgICAvLyBU
T0RPOiBDRk0gLSBMZXQncyBub3Qgd29ycnkgYWJvdXQgZGlyZWN0IGJsZW5kIG9mIDNEIG1hdHJp
Y2VzIGp1c3QgeWV0CisgICAgcmV0dXJuIDA7CiB9CisgICAgCisgICAgCisjcHJhZ21hICBtYXJr
IC0KKyAgICAKK2Jvb2wgS2V5ZnJhbWVMaXN0OjpvcGVyYXRvcj09KGNvbnN0IEtleWZyYW1lTGlz
dCYgbykgY29uc3QKK3sKKyAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpICE9IG8ubV9rZXlmcmFt
ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgVmVjdG9yPEtleWZy
YW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdDIgPSBvLm1fa2V5ZnJhbWVzLmJlZ2luKCk7ICAg
IAorICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdDEgPSBt
X2tleWZyYW1lcy5iZWdpbigpOyBpdDEgIT0gbV9rZXlmcmFtZXMuZW5kKCk7ICsraXQxKSB7Cisg
ICAgICAgIGlmIChpdDEtPmtleSAhPSBpdDItPmtleSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlMSA9IGl0MS0+c3R5bGU7CisgICAg
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTIgPSBpdDItPnN0eWxlOworICAgICAgICBpZiAo
IShzdHlsZTEgPT0gc3R5bGUyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
KytpdDI7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQogCi1UcmFuc2l0aW9uOjpU
cmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pCi0gICAgOiBtX2R1cmF0aW9uKG8ubV9kdXJh
dGlvbikKLSAgICAsIG1fcmVwZWF0Q291bnQoby5tX3JlcGVhdENvdW50KQotICAgICwgbV90aW1p
bmdGdW5jdGlvbihvLm1fdGltaW5nRnVuY3Rpb24pCi0gICAgLCBtX3Byb3BlcnR5KG8ubV9wcm9w
ZXJ0eSkKLSAgICAsIG1fZHVyYXRpb25TZXQoby5tX2R1cmF0aW9uU2V0KQotICAgICwgbV9yZXBl
YXRDb3VudFNldChvLm1fcmVwZWF0Q291bnRTZXQpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uU2V0
KG8ubV90aW1pbmdGdW5jdGlvblNldCkKLSAgICAsIG1fcHJvcGVydHlTZXQoby5tX3Byb3BlcnR5
U2V0KQotICAgICwgbV9uZXh0KG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6
IDApCit2b2lkCitLZXlmcmFtZUxpc3Q6Omluc2VydChmbG9hdCBpbktleSwgY29uc3QgUmVuZGVy
U3R5bGUmIGluU3R5bGUpCiB7CisgICAgaWYgKGluS2V5IDwgMCB8fCBpbktleSA+IDEpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fa2V5ZnJhbWVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPT0gaW5LZXkp
IHsKKyAgICAgICAgICAgIG1fa2V5ZnJhbWVzW2ldLnN0eWxlID0gaW5TdHlsZTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAobV9rZXlmcmFtZXNbaV0ua2V5ID4g
aW5LZXkpIHsKKyAgICAgICAgICAgIC8vIGluc2VydCBiZWZvcmUKKyAgICAgICAgICAgIG1fa2V5
ZnJhbWVzLmluc2VydChpLCBLZXlmcmFtZVZhbHVlKCkpOworICAgICAgICAgICAgbV9rZXlmcmFt
ZXNbaV0ua2V5ID0gaW5LZXk7CisgICAgICAgICAgICBtX2tleWZyYW1lc1tpXS5zdHlsZSA9IGlu
U3R5bGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gYXBwZW5kCisgICAgbV9rZXlmcmFtZXMuYXBwZW5kKEtleWZyYW1lVmFsdWUoKSk7CisgICAg
bV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpLTFdLmtleSA9IGluS2V5OworICAgIG1fa2V5
ZnJhbWVzW21fa2V5ZnJhbWVzLnNpemUoKS0xXS5zdHlsZSA9IGluU3R5bGU7CiB9CisgICAgCisg
ICAgCitUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKCkKKzogbV9kaXJlY3Rpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSkKKywgbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6
aW5pdGlhbER1cmF0aW9uKCkpCissIG1fbmFtZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlv
bk5hbWUoKSkKKywgbV9wbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5
U3RhdGUoKSkKKywgbV9pdGVyYXRpb25Db3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlv
bkl0ZXJhdGlvbkNvdW50KCkpCissIG1fdGltaW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRp
YWxUaW1pbmdGdW5jdGlvbigpKQorLCBtX2RlbGF5KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uRGVsYXkoKSkKKywgbV9wcm9wZXJ0eShSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25Q
cm9wZXJ0eSgpKQorLCBtX2RpcmVjdGlvblNldChmYWxzZSkKKywgbV9kdXJhdGlvblNldChmYWxz
ZSkKKywgbV9uYW1lU2V0KGZhbHNlKQorLCBtX3BsYXlTdGF0ZVNldChmYWxzZSkKKywgbV9pdGVy
YXRpb25Db3VudFNldChmYWxzZSkKKywgbV90aW1pbmdGdW5jdGlvblNldChmYWxzZSkKKywgbV9k
ZWxheVNldChmYWxzZSkKKywgbV9wcm9wZXJ0eVNldChmYWxzZSkKKywgbV9pc05vbmUoZmFsc2Up
CissIG1fbmV4dCgwKQoreworfQogCi1UcmFuc2l0aW9uOjp+VHJhbnNpdGlvbigpCitUcmFuc2l0
aW9uOjpUcmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8pCis6IFJlZkNvdW50ZWQ8VHJhbnNp
dGlvbj4oKQorLCBtX2RpcmVjdGlvbihvLm1fZGlyZWN0aW9uKQorLCBtX2R1cmF0aW9uKG8ubV9k
dXJhdGlvbikKKywgbV9uYW1lKG8ubV9uYW1lKQorLCBtX3BsYXlTdGF0ZShvLm1fcGxheVN0YXRl
KQorLCBtX2l0ZXJhdGlvbkNvdW50KG8ubV9pdGVyYXRpb25Db3VudCkKKywgbV90aW1pbmdGdW5j
dGlvbihvLm1fdGltaW5nRnVuY3Rpb24pCissIG1fZGVsYXkoby5tX2RlbGF5KQorLCBtX3Byb3Bl
cnR5KG8ubV9wcm9wZXJ0eSkKKywgbV9rZXlmcmFtZUxpc3Qoby5tX2tleWZyYW1lTGlzdCkKKywg
bV9kaXJlY3Rpb25TZXQoby5tX2RpcmVjdGlvblNldCkKKywgbV9kdXJhdGlvblNldChvLm1fZHVy
YXRpb25TZXQpCissIG1fbmFtZVNldChvLm1fbmFtZVNldCkKKywgbV9wbGF5U3RhdGVTZXQoby5t
X3BsYXlTdGF0ZVNldCkKKywgbV9pdGVyYXRpb25Db3VudFNldChvLm1faXRlcmF0aW9uQ291bnRT
ZXQpCissIG1fdGltaW5nRnVuY3Rpb25TZXQoby5tX3RpbWluZ0Z1bmN0aW9uU2V0KQorLCBtX2Rl
bGF5U2V0KG8ubV9kZWxheVNldCkKKywgbV9wcm9wZXJ0eVNldChvLm1fcHJvcGVydHlTZXQpCiss
IG1faXNOb25lKG8ubV9pc05vbmUpCissIG1fbmV4dChvLm1fbmV4dCA/IG5ldyBUcmFuc2l0aW9u
KCooby5tX25leHQuZ2V0KCkpKSA6IDApCiB7Ci0gICAgZGVsZXRlIG1fbmV4dDsKIH0KIAogVHJh
bnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0IFRyYW5zaXRpb24mIG8pCiB7Ci0g
ICAgaWYgKG1fbmV4dCAhPSBvLm1fbmV4dCkgewotICAgICAgICBkZWxldGUgbV9uZXh0OworICAg
IGlmIChtX25leHQgIT0gby5tX25leHQpCiAgICAgICAgIG1fbmV4dCA9IG8ubV9uZXh0ID8gbmV3
IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDA7Ci0gICAgfQotCisgICAgCisgICAgbV9kaXJlY3Rp
b24gPSBvLm1fZGlyZWN0aW9uOwogICAgIG1fZHVyYXRpb24gPSBvLm1fZHVyYXRpb247Ci0gICAg
bV9yZXBlYXRDb3VudCA9IG8ubV9yZXBlYXRDb3VudDsKKyAgICBtX25hbWUgPSBvLm1fbmFtZTsK
KyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5U3RhdGU7CisgICAgbV9pdGVyYXRpb25Db3VudCA9
IG8ubV9pdGVyYXRpb25Db3VudDsKICAgICBtX3RpbWluZ0Z1bmN0aW9uID0gby5tX3RpbWluZ0Z1
bmN0aW9uOworICAgIG1fZGVsYXkgPSBvLm1fZGVsYXk7CiAgICAgbV9wcm9wZXJ0eSA9IG8ubV9w
cm9wZXJ0eTsKLQorICAgIAorICAgIG1fZGlyZWN0aW9uU2V0ID0gby5tX2RpcmVjdGlvblNldDsK
ICAgICBtX2R1cmF0aW9uU2V0ID0gby5tX2R1cmF0aW9uU2V0OwotICAgIG1fcmVwZWF0Q291bnRT
ZXQgPSBvLm1fcmVwZWF0Q291bnRTZXQ7CisgICAgbV9uYW1lU2V0ID0gby5tX25hbWVTZXQ7Cisg
ICAgbV9wbGF5U3RhdGVTZXQgPSBvLm1fcGxheVN0YXRlU2V0OworICAgIG1faXRlcmF0aW9uQ291
bnRTZXQgPSBvLm1faXRlcmF0aW9uQ291bnRTZXQ7CiAgICAgbV90aW1pbmdGdW5jdGlvblNldCA9
IG8ubV90aW1pbmdGdW5jdGlvblNldDsKKyAgICBtX2RlbGF5U2V0ID0gby5tX2RlbGF5U2V0Owog
ICAgIG1fcHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7Ci0KKyAgICAKKyAgICBtX2lzTm9u
ZSA9IG8ubV9pc05vbmU7CisgICAgCiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFRyYW5z
aXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QKK2Jvb2wgVHJhbnNp
dGlvbjo6dHJhbnNpdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiBvLCBib29sIG1hdGNoUGxh
eVN0YXRlcyAvKiA9IHRydWUgKi8pIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb24gPT0g
by5tX2R1cmF0aW9uICYmIG1fcmVwZWF0Q291bnQgPT0gby5tX3JlcGVhdENvdW50ICYmIG1fdGlt
aW5nRnVuY3Rpb24gPT0gby5tX3RpbWluZ0Z1bmN0aW9uICYmCi0gICAgICAgICAgIG1fcHJvcGVy
dHkgPT0gby5tX3Byb3BlcnR5ICYmIG1fZHVyYXRpb25TZXQgPT0gby5tX2R1cmF0aW9uU2V0ICYm
IG1fcmVwZWF0Q291bnRTZXQgPT0gby5tX3JlcGVhdENvdW50U2V0ICYmCi0gICAgICAgICAgIG1f
dGltaW5nRnVuY3Rpb25TZXQgPT0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0ICYmIG1fcHJvcGVydHlT
ZXQgPT0gby5tX3Byb3BlcnR5U2V0ICYmCi0gICAgICAgICAgICgobV9uZXh0ICYmIG8ubV9uZXh0
KSA/ICptX25leHQgPT0gKm8ubV9uZXh0IDogbV9uZXh0ID09IG8ubV9uZXh0KTsKKyAgICBpZiAo
IW8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBib29sIHJlc3VsdCA9IG1fZGly
ZWN0aW9uID09IG8tPm1fZGlyZWN0aW9uICYmCisgICAgbV9kdXJhdGlvbiA9PSBvLT5tX2R1cmF0
aW9uICYmCisgICAgbV9uYW1lID09IG8tPm1fbmFtZSAmJiAKKyAgICBtX2l0ZXJhdGlvbkNvdW50
ID09IG8tPm1faXRlcmF0aW9uQ291bnQgJiYgCisgICAgbV90aW1pbmdGdW5jdGlvbiA9PSBvLT5t
X3RpbWluZ0Z1bmN0aW9uICYmCisgICAgbV9kZWxheSA9PSBvLT5tX2RlbGF5ICYmCisgICAgbV9w
cm9wZXJ0eSA9PSBvLT5tX3Byb3BlcnR5ICYmIAorICAgIG1fZGlyZWN0aW9uU2V0ID09IG8tPm1f
ZGlyZWN0aW9uU2V0ICYmCisgICAgbV9kdXJhdGlvblNldCA9PSBvLT5tX2R1cmF0aW9uU2V0ICYm
IAorICAgIG1fbmFtZVNldCA9PSBvLT5tX25hbWVTZXQgJiYKKyAgICBtX2l0ZXJhdGlvbkNvdW50
U2V0ID09IG8tPm1faXRlcmF0aW9uQ291bnRTZXQgJiYKKyAgICBtX3RpbWluZ0Z1bmN0aW9uU2V0
ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgCisgICAgbV9kZWxheVNldCA9PSBvLT5tX2Rl
bGF5U2V0ICYmCisgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5tX3Byb3BlcnR5U2V0ICYmCisgICAg
bV9pc05vbmUgPT0gby0+bV9pc05vbmU7CisgICAgCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobWF0Y2hQbGF5U3RhdGVzICYmIChtX3BsYXlT
dGF0ZSAhPSBvLT5tX3BsYXlTdGF0ZSB8fCBtX3BsYXlTdGF0ZVNldCAhPSBvLT5tX3BsYXlTdGF0
ZVNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBub3cgY2hlY2sga2V5
ZnJhbWVzCisgICAgaWYgKChtX2tleWZyYW1lTGlzdC5nZXQoKSAmJiAhby0+bV9rZXlmcmFtZUxp
c3QuZ2V0KCkpIHx8ICghbV9rZXlmcmFtZUxpc3QuZ2V0KCkgJiYgby0+bV9rZXlmcmFtZUxpc3Qu
Z2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCEobV9rZXlmcmFtZUxpc3Qu
Z2V0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gKm1fa2V5ZnJhbWVMaXN0
ID09ICpvLT5tX2tleWZyYW1lTGlzdDsKIH0KIAorI2RlZmluZSBGSUxMX1VOU0VUX1BST1BFUlRZ
KHRlc3QsIHByb3ApIFwKK2ZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+dGVzdCgpOyBj
dXJyID0gY3Vyci0+bmV4dCgpKSB7IH0gXAoraWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7IFwK
Ky8qIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0
ZXJuIHNwZWNpZmllZC4gKi8gXAorZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3Vy
cjsgY3VyciA9IGN1cnItPm5leHQoKSkgeyBcCitjdXJyLT5wcm9wID0gcGF0dGVybi0+cHJvcDsg
XAorcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsgXAoraWYgKHBhdHRlcm4gPT0gY3VyciB8fCAh
cGF0dGVybikgXAorcGF0dGVybiA9IHRoaXM7IFwKK30gXAorfQorCiB2b2lkIFRyYW5zaXRpb246
OmZpbGxVbnNldFByb3BlcnRpZXMoKQogewogICAgIFRyYW5zaXRpb24qIGN1cnI7Ci0gICAgZm9y
IChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc0R1cmF0aW9uU2V0KCk7IGN1cnIgPSBjdXJy
LT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAv
LyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVy
biBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fZHVyYXRpb24g
PSBwYXR0ZXJuLT5tX2R1cmF0aW9uOwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5l
eHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAg
ICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRklMTF9V
TlNFVF9QUk9QRVJUWShpc0FuaW1hdGlvbkRpcmVjdGlvblNldCwgbV9kaXJlY3Rpb24pOworICAg
IEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwgbV9kdXJhdGlvbik7CisgICAgRklM
TF9VTlNFVF9QUk9QRVJUWShpc0FuaW1hdGlvblBsYXlTdGF0ZVNldCwgbV9wbGF5U3RhdGUpOwor
ICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNBbmltYXRpb25JdGVyYXRpb25Db3VudFNldCwgbV9p
dGVyYXRpb25Db3VudCk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc1RpbWluZ0Z1bmN0aW9u
U2V0LCBtX3RpbWluZ0Z1bmN0aW9uKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzQW5pbWF0
aW9uRGVsYXlTZXQsIG1fZGVsYXkpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNUcmFuc2l0
aW9uUHJvcGVydHlTZXQsIG1fcHJvcGVydHkpOworfQorCisjcHJhZ21hICBtYXJrIC0KICAgICAK
LSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzUmVwZWF0Q291bnRTZXQoKTsg
Y3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7
Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRo
IHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJu
ID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAgICAgICAgY3Vyci0+
bV9yZXBlYXRDb3VudCA9IHBhdHRlcm4tPm1fcmVwZWF0Q291bnQ7Ci0gICAgICAgICAgICBwYXR0
ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8
fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQot
ICAgIH0KICAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzVGltaW5n
RnVuY3Rpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYg
Y3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWlu
aW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFu
c2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAg
ICAgICAgICAgY3Vyci0+bV90aW1pbmdGdW5jdGlvbiA9IHBhdHRlcm4tPm1fdGltaW5nRnVuY3Rp
b247Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAg
aWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJu
ID0gdGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIg
JiYgY3Vyci0+aXNQcm9wZXJ0eVNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBp
ZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGlu
IHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAg
ICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4
dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5tX3Byb3BlcnR5ID0gcGF0dGVybi0+bV9wcm9wZXJ0
eTsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBp
ZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4g
PSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotfQotCiBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
OjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKICAgICA6IGxpbmVDbGFtcChSZW5kZXJTdHls
ZTo6aW5pdGlhbExpbmVDbGFtcCgpKQogICAgICwgb3BhY2l0eShSZW5kZXJTdHlsZTo6aW5pdGlh
bE9wYWNpdHkoKSkKQEAgLTc4NSw2ICs4NzksNyBAQAogICAgICwgbV9ib3JkZXJGaXQoUmVuZGVy
U3R5bGU6OmluaXRpYWxCb3JkZXJGaXQoKSkKICAgICAsIG1fYm94U2hhZG93KDApCiAgICAgLCBt
X3RyYW5zaXRpb24oMCkKKyAgICAsIG1fYW5pbWF0aW9uKDApCiAgICAgLCBtX21hc2soRmlsbExh
eWVyKE1hc2tGaWxsTGF5ZXIpKQogI2lmIEVOQUJMRShYQkwpCiAgICAgLCBiaW5kaW5nVVJJKDAp
CkBAIC04MTIsNiArOTA3LDcgQEAKICAgICAsIG1fYm94U2hhZG93KG8ubV9ib3hTaGFkb3cgPyBu
ZXcgU2hhZG93RGF0YSgqby5tX2JveFNoYWRvdykgOiAwKQogICAgICwgbV9ib3hSZWZsZWN0KG8u
bV9ib3hSZWZsZWN0KQogICAgICwgbV90cmFuc2l0aW9uKG8ubV90cmFuc2l0aW9uID8gbmV3IFRy
YW5zaXRpb24oKm8ubV90cmFuc2l0aW9uKSA6IDApCisgICAgLCBtX2FuaW1hdGlvbihvLm1fYW5p
bWF0aW9uID8gbmV3IFRyYW5zaXRpb24oKm8ubV9hbmltYXRpb24pIDogMCkKICAgICAsIG1fbWFz
ayhvLm1fbWFzaykKICNpZiBFTkFCTEUoWEJMKQogICAgICwgYmluZGluZ1VSSShvLmJpbmRpbmdV
UkkgPyBvLmJpbmRpbmdVUkktPmNvcHkoKSA6IDApCkBAIC04MjQsNyArOTIwLDYgQEAKICAgICBk
ZWxldGUgbV9jb250ZW50OwogICAgIGRlbGV0ZSBtX2NvdW50ZXJEaXJlY3RpdmVzOwogICAgIGRl
bGV0ZSBtX2JveFNoYWRvdzsKLSAgICBkZWxldGUgbV90cmFuc2l0aW9uOwogI2lmIEVOQUJMRShY
QkwpCiAgICAgZGVsZXRlIGJpbmRpbmdVUkk7CiAjZW5kaWYKQEAgLTg2NSw2ICs5NjAsNyBAQAog
ICAgICAgICAmJiBzaGFkb3dEYXRhRXF1aXZhbGVudChvKQogICAgICAgICAmJiByZWZsZWN0aW9u
RGF0YUVxdWl2YWxlbnQobykKICAgICAgICAgJiYgdHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KG8p
CisgICAgICAgICYmIGFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KG8pCiAgICAgICAgICYmIG1fbWFz
ayA9PSBvLm1fbWFzawogI2lmIEVOQUJMRShYQkwpCiAgICAgICAgICYmIGJpbmRpbmdzRXF1aXZh
bGVudChvKQpAQCAtODkyLDYgKzk4OCwxOSBAQAogCiB9CiAKK3ZvaWQgU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YTo6dXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxl
U2VsZWN0b3IpCit7CisgICAgVHJhbnNpdGlvbiogYW5pbTsKKyAgICBmb3IgKGFuaW0gPSBtX2Fu
aW1hdGlvbi5nZXQoKTsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAgICAgICBpZiAo
YW5pbS0+aXNWYWxpZEFuaW1hdGlvbigpKSB7CisgICAgICAgICAgICAvKiBGSVhNRSBrZXlmcmFt
ZXMKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IGtleWZyYW1lID0gc3R5bGVTZWxl
Y3Rvci0+ZmluZEtleWZyYW1lUnVsZShhbmltLT5hbmltYXRpb25OYW1lKCkpOworICAgICAgICAg
ICAgYW5pbS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAgICAgICAgICAgICov
CisgICAgICAgIH0KKyAgICB9ICAgICAgICAKK30KKyAgICAKIGJvb2wgU3R5bGVSYXJlTm9uSW5o
ZXJpdGVkRGF0YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbklu
aGVyaXRlZERhdGEmIG8pIGNvbnN0CiB7CiAgICAgaWYgKCFtX3RyYW5zaXRpb24gJiYgby5tX3Ry
YW5zaXRpb24gfHwgbV90cmFuc2l0aW9uICYmICFvLm1fdHJhbnNpdGlvbikKQEAgLTkwMSw2ICsx
MDEwLDE1IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YTo6YW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVSYXJlTm9uSW5oZXJp
dGVkRGF0YSYgbykgY29uc3QKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uICYmIG8ubV9hbmltYXRp
b24gfHwgbV9hbmltYXRpb24gJiYgIW8ubV9hbmltYXRpb24pCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAobV9hbmltYXRpb24gJiYgby5tX2FuaW1hdGlvbiAmJiAoKm1fYW5pbWF0aW9u
ICE9ICpvLm1fYW5pbWF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0
cnVlOworfQorCiBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVJbmhlcml0ZWREYXRh
KCkKICAgICA6IHRleHRTdHJva2VXaWR0aChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRTdHJva2VX
aWR0aCgpKQogICAgICwgdGV4dFNoYWRvdygwKQpAQCAtMTY5Niw3ICsxODE0LDcgQEAKICAgICB9
CiB9CiAKLXZvaWQgUmVuZGVyU3R5bGU6OmFwcGx5VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAordm9pZCBSZW5k
ZXJTdHlsZTo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSwgY29uc3QgSW50
U2l6ZSYgYm9yZGVyQm94U2l6ZSwgYm9vbCBjaGVja0FwcGx5VHJhbnNmb3JtT3JpZ2luKSBjb25z
dAogewogICAgIC8vIHRyYW5zZm9ybS1vcmlnaW4gYnJhY2tldHMgdGhlIHRyYW5zZm9ybSB3aXRo
IHRyYW5zbGF0ZSBvcGVyYXRpb25zLgogICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVy
ZSB0aGUgb25seSB0cmFuc2Zvcm0gaXMgYSB0cmFuc2xhdGlvbiwgc2luY2UgdGhlIHRyYW5zZm9y
bS1vcmlnaW4gaXMgaXJyZWxldmFudApAQCAtMTcwNCwxMCArMTgyMiwxMiBAQAogICAgIGJvb2wg
YXBwbHlUcmFuc2Zvcm1PcmlnaW4gPSBmYWxzZTsKICAgICB1bnNpZ25lZCBzID0gcmFyZU5vbklu
aGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX29wZXJhdGlvbnMuc2l6ZSgpOwogICAgIHVuc2ln
bmVkIGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAgICBpZiAoIXJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5pc1RyYW5zbGF0
ZU9wZXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBhcHBseVRyYW5zZm9ybU9yaWdpbiA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICBpZiAoY2hlY2tBcHBseVRyYW5zZm9ybU9yaWdpbikg
eworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5pc1RyYW5z
bGF0ZU9wZXJhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgYXBwbHlUcmFuc2Zvcm1PcmlnaW4g
PSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogICAgIApAQCAtMTg2OSwzMiArMTk4OSwxMDMgQEAKIHZvaWQgUmVuZGVyU3R5bGU6
OmFkanVzdFRyYW5zaXRpb25zKCkKIHsKICAgICBpZiAodHJhbnNpdGlvbnMoKSkgewotICAgICAg
ICBpZiAodHJhbnNpdGlvbnMoKS0+aXNFbXB0eSgpKSB7CisgICAgICAgIGlmICh0cmFuc2l0aW9u
cygpLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewogICAgICAgICAgICAgY2xlYXJUcmFuc2l0
aW9ucygpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAg
ICAgIFRyYW5zaXRpb24qIG5leHQ7CiAgICAgICAgIGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vz
c1RyYW5zaXRpb25zKCk7IHA7IHAgPSBuZXh0KSB7Ci0gICAgICAgICAgICBuZXh0ID0gcC0+bV9u
ZXh0OworICAgICAgICAgICAgbmV4dCA9IHAtPm5leHQoKTsKICAgICAgICAgICAgIGlmIChuZXh0
ICYmIG5leHQtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXh0OwotICAg
ICAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7CisgICAgICAgICAgICAgICAgcC0+c2V0TmV4dCgw
KTsgLy8gcmVtb3ZlcyB0aGUgcmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAgICAgICAgICAg
ICAgIG5leHQgPSAwOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAgICBpZiAoIXRyYW5zaXRpb25zKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50
byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNvbWUgcHJvcGVydGllcyBzZXQuCiAgICAgICAgIGFj
Y2Vzc1RyYW5zaXRpb25zKCktPmZpbGxVbnNldFByb3BlcnRpZXMoKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZHVwbGljYXRlIHByb3BlcnRpZXMuIFRoaXMg
aXMgYW4gTyhuXjIpIGFsZ29yaXRobQorICAgICAgICAvLyBidXQgdGhlIGxpc3RzIHRlbmQgdG8g
YmUgdmVyeSBzaG9ydCwgc28gaXQgaXMgcHJvYmFibHkgb2sKKyAgICAgICAgVHJhbnNpdGlvbiog
cHJldmkgPSAwOworICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBpID0gYWNjZXNzVHJhbnNpdGlv
bnMoKTsgcGk7ICkgeworICAgICAgICAgICAgVHJhbnNpdGlvbiogbmV4dGkgPSBwaS0+bmV4dCgp
OworICAgICAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBwaiA9IG5leHRpOyBwajsgKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHBpLT50cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBwai0+dHJhbnNpdGlv
blByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gdG9zcyBwaQorICAgICAgICAg
ICAgICAgICAgICBwaSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2
aSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpLT5zZXROZXh0KHBpKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFyZU5vbkluaGVyaXRl
ZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IHBpOworICAgICAgICAgICAgICAgICAgICBu
ZXh0aSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHBqID0gbmV4dGk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cGogPSBwai0+bmV4dCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHJldmkgPSBwaTsK
KyAgICAgICAgICAgIHBpID0gbmV4dGk7CisgICAgICAgIH0KICAgICB9CiB9CisgICAgCit2b2lk
IFJlbmRlclN0eWxlOjphZGp1c3RBbmltYXRpb25zKCkKK3sKKyAgICBpZiAoYW5pbWF0aW9ucygp
KSB7CisgICAgICAgIGlmIChhbmltYXRpb25zKCktPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7
CisgICAgICAgICAgICBjbGVhckFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gZ2V0IHJpZCBvZiBhbnkgdHJhaWxpbmcgZW1w
dHkgYW5pbWF0aW9ucworICAgICAgICBUcmFuc2l0aW9uKiBuZXh0OworICAgICAgICBmb3IgKFRy
YW5zaXRpb24qIHAgPSBhY2Nlc3NBbmltYXRpb25zKCk7IHA7IHAgPSBuZXh0KSB7CisgICAgICAg
ICAgICBuZXh0ID0gcC0+bmV4dCgpOworICAgICAgICAgICAgaWYgKG5leHQgJiYgbmV4dC0+aXNF
bXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcC0+c2V0TmV4dCgwKTsgLy8gcmVtb3ZlcyB0aGUg
cmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAgICAgICAgICAgICAgIG5leHQgPSAwOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoIWFuaW1hdGlvbnMoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
CisgICAgICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBpbnRvIGxheWVycyB0aGF0IGRvbid0IGhhdmUg
c29tZSBwcm9wZXJ0aWVzIHNldC4KKyAgICAgICAgYWNjZXNzQW5pbWF0aW9ucygpLT5maWxsVW5z
ZXRQcm9wZXJ0aWVzKCk7CisgICAgfQorfQogCiBUcmFuc2l0aW9uKiBSZW5kZXJTdHlsZTo6YWNj
ZXNzVHJhbnNpdGlvbnMoKQogewotICAgIFRyYW5zaXRpb24qIGxheWVyID0gcmFyZU5vbkluaGVy
aXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbjsKLSAgICBpZiAoIWxheWVyKQorICAgIFRy
YW5zaXRpb24qIHRyYW5zaXRpb24gPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90
cmFuc2l0aW9uLmdldCgpOworICAgIGlmICghdHJhbnNpdGlvbikKICAgICAgICAgcmFyZU5vbklu
aGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCk7Ci0g
ICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb247CisgICAgcmV0dXJu
IHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zaXRpb24uZ2V0KCk7CiB9CiAKK1RyYW5zaXRp
b24qIFJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRpb25zKCkKK3sKKyAgICBUcmFuc2l0aW9uKiBh
bmltYXRpb24gPSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV9hbmltYXRpb24uZ2V0
KCk7CisgICAgaWYgKCFhbmltYXRpb24pCisgICAgICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFj
Y2VzcygpLT5tX2FuaW1hdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCk7CisgICAgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbi5nZXQoKTsKIH0KKworY29uc3QgVHJhbnNpdGlv
biogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpCit7Cisg
ICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiBwID0gdHJhbnNpdGlvbnMoKTsgcDsgcCA9IHAtPm5l
eHQoKSkgeworICAgICAgICBpZiAocC0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gY0FuaW1hdGVB
bGwgfHwgcC0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gcHJvcGVydHkpIHsKKyAgICAgICAgICAg
IHJldHVybiBwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDYgKzM2NywxNiBAQAog
ICAgIC8vIE92ZXJyaWRkZW4gdG8gcHJldmVudCB0aGUgbm9ybWFsIGRlbGV0ZSBmcm9tIGJlaW5n
IGNhbGxlZC4KICAgICB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKiwgc2l6ZV90KTsKIAorICAg
IC8vIEludGVyZmFjZSB0byBzdGFydCwgZmluaXNoLCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0
aW9ucyBhbmQgdHJhbnNpdGlvbnMKKyAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBiZWdp
blRpbWUsIGludCBpbmRleCk7CisgICAgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIGJlZ2lu
VGltZSwgaW50IHByb3BlcnR5LCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlLCBSZW5kZXJTdHlsZSog
dG9TdHlsZSk7CisgICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpOworICAg
IHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKKyAg
ICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSwgaW50IGluZGV4LCBi
b29sIHJlc2V0KTsKKyAgICB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChpbnQgcHJvcGVydHkpOwor
ICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMo
KTsKKwogcHJpdmF0ZToKICAgICAvLyBUaGUgbm9ybWFsIG9wZXJhdG9yIG5ldyBpcyBkaXNhbGxv
d2VkIG9uIGFsbCByZW5kZXIgb2JqZWN0cy4KICAgICB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90
KSB0aHJvdygpOwpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Rv
bS9FdmVudE5hbWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTIgQEAKICAgICBt
YWNybyhwcm9ncmVzcykgXAogICAgIG1hY3JvKHN0YWxsZWQpIFwKICAgICBcCisgICAgbWFjcm8o
d2Via2l0QW5pbWF0aW9uRW5kKSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uU3RhcnQpIFwK
KyAgICBtYWNybyh3ZWJraXRBbmltYXRpb25JdGVyYXRpb24pIFwKKyAgICBcCisgICAgbWFjcm8o
d2Via2l0VHJhbnNpdGlvbkVuZCkgXAorICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNf
Rk9SX0VBQ0gKIAogI2lmbmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9CQUxTCkluZGV4OiBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIkRvY3VtZW50LmgiCiAKKyNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1
ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIKQEAgLTMwMyw2ICszMDQsNyBAQAogI2lmIFVTRShM
T1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAgLCBtX2luTG93QmFuZHdpZHRoRGlzcGxheShmYWxz
ZSkKICNlbmRpZgorICAgICwgbV9sb2FkQ29tcGxldGUoZmFsc2UpCiB7CiAgICAgbV9kb2N1bWVu
dC5yZXNldFNraXBwaW5nUmVmKHRoaXMpOwogCkBAIC0zNTEsNiArMzUzLDcgQEAKICAgICBtX3By
b2Nlc3NpbmdMb2FkRXZlbnQgPSBmYWxzZTsKICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1l
KCk7CiAgICAgbV9vdmVyTWluaW11bUxheW91dFRocmVzaG9sZCA9IGZhbHNlOworICAgIHNuYXBz
aG90U3R5bGVCZWdpblRpbWUoKTsKICAgICAKICAgICBpbml0U2VjdXJpdHlPcmlnaW4oKTsKIApA
QCAtMTA4NCw2ICsxMDg3LDExIEBACiAgICAgbV9kb2NDaGFuZ2VkID0gYjsKIH0KIAordm9pZCBE
b2N1bWVudDo6c25hcHNob3RTdHlsZUJlZ2luVGltZSgpCit7CisgICAgbV9yZWNhbGNTdHlsZVRp
bWUgPSBjdXJyZW50VGltZSgpOworfQorCiB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHls
ZUNoYW5nZSBjaGFuZ2UpCiB7CiAgICAgLy8gd2Ugc2hvdWxkIG5vdCBlbnRlciBzdHlsZSByZWNh
bGMgd2hpbGUgcGFpbnRpbmcKQEAgLTEwOTUsNiArMTEwMyw3IEBACiAgICAgaWYgKG1faW5TdHls
ZVJlY2FsYykKICAgICAgICAgcmV0dXJuOyAvLyBHdWFyZCBhZ2FpbnN0IHJlLWVudHJhbmN5LiAt
ZHdoCiAgICAgICAgIAorICAgIHNuYXBzaG90U3R5bGVCZWdpblRpbWUoKTsKICAgICBtX2luU3R5
bGVSZWNhbGMgPSB0cnVlOwogICAgIHN1c3BlbmRQb3N0QXR0YWNoQ2FsbGJhY2tzKCk7CiAgICAg
CkBAIC0xMTcxLDggKzExODAsMTYgQEAKIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlUmVuZGVyaW5n
KCkKIHsKLSAgICBpZiAoaGFzQ2hhbmdlZENoaWxkKCkpCisgICAgc25hcHNob3RTdHlsZUJlZ2lu
VGltZSgpOworCisgICAgaWYgKGhhc0NoYW5nZWRDaGlsZCgpKSB7CiAgICAgICAgIHJlY2FsY1N0
eWxlKE5vQ2hhbmdlKTsKKyAgICB9CisgICAgCisgICAgLy8gdGVsbCB0aGUgYW5pbWF0aW9uIGNv
bnRyb2xsZXIgdGhhdCB0aGUgc3R5bGUgaXMgYWxsIHNldHVwIGFuZCBpdCBjYW4gc3RhcnQgYW5p
bWF0aW9ucworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIG1fZnJhbWUtPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS0+c3R5bGVJc1NldHVwKCk7CisgICAgfQogfQogCiB2b2lkIERvY3VtZW50Ojp1
cGRhdGVEb2N1bWVudHNSZW5kZXJpbmcoKQpAQCAtMTU0NSw2ICsxNTYyLDEwIEBACiAgICAgaWYg
KGYpCiAgICAgICAgIGYtPmxvYWRlcigpLT5zdGFydEljb25Mb2FkZXIoKTsKIAorICAgIG1fbG9h
ZENvbXBsZXRlID0gdHJ1ZTsKKyAgICBpZiAoZikKKyAgICAgICAgZi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5yZXN1bWVBbmltYXRpb25zKHRoaXMpOworICAgIAogICAgIGRpc3BhdGNoSW1hZ2VM
b2FkRXZlbnRzTm93KCk7CiAgICAgdGhpcy0+ZGlzcGF0Y2hXaW5kb3dFdmVudChsb2FkRXZlbnQs
IGZhbHNlLCBmYWxzZSk7CiAgICAgaWYgKGYpCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDMyOTEyKQor
KysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzI3LDcgKzcyNywx
MyBAQAogCiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29uKCk7CiAgICAgdm9pZCBj
YW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKKworICAgIHZvaWQgc25hcHNob3RTdHlsZUJl
Z2luVGltZSgpOworICAgIGRvdWJsZSByZWNhbGNTdHlsZUJlZ2luVGltZSgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjYWxjU3R5bGVUaW1lOyB9CiAgICAgCisgICAgLy8gZm9yIGFuaW1hdGlvbnMgdG8g
a25vdyB3aGV0aGVyIHRoZXkgY2FuIHJ1biB5ZXQgb3Igbm90CisgICAgYm9vbCBsb2FkQ29tcGxl
dGUoKSBjb25zdCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZTsgfQorICAgIAogICAgIC8vIEZGIG1l
dGhvZCBmb3IgYWNjZXNzaW5nIHRoZSBzZWxlY3Rpb24gYWRkZWQgZm9yIGNvbXBhdGFiaWxpdHku
CiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsKICAgICAKQEAgLTg0Miw2
ICs4NDgsNyBAQAogICAgIGJvb2wgbV9wcm9jZXNzaW5nTG9hZEV2ZW50OwogICAgIGRvdWJsZSBt
X3N0YXJ0VGltZTsKICAgICBib29sIG1fb3Zlck1pbmltdW1MYXlvdXRUaHJlc2hvbGQ7CisgICAg
ZG91YmxlIG1fcmVjYWxjU3R5bGVUaW1lOwogICAgIAogI2lmIEVOQUJMRShYU0xUKQogICAgIHZv
aWQqIG1fdHJhbnNmb3JtU291cmNlOwpAQCAtMTAwOCw2ICsxMDE1LDggQEAKICNpZiBVU0UoTE9X
X0JBTkRXSURUSF9ESVNQTEFZKQogICAgIGJvb2wgbV9pbkxvd0JhbmR3aWR0aERpc3BsYXk7CiAj
ZW5kaWYKKyAgICAKKyAgICBib29sIG1fbG9hZENvbXBsZXRlOyAgICAvLyBmb3IgYW5pbWF0aW9u
cyB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZXkgY2FuIHJ1biB5ZXQKIH07CiAKIGlubGluZSBi
b29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmluZ0ltcGwqIGlkKSBjb25z
dApJbmRleDogV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
Tm9kZS5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3Nyw3ICszNzcsNyBAQAogICAgIGlmICgoY2hhbmdlVHlwZSAhPSBOb1N0
eWxlQ2hhbmdlKSAmJiAhYXR0YWNoZWQoKSkgLy8gY2hhbmdlZCBjb21wYXJlZCB0byB3aGF0Pwog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIShjaGFuZ2VUeXBlID09IElubGluZVN0eWxlQ2hh
bmdlICYmIG1fc3R5bGVDaGFuZ2UgPT0gRnVsbFN0eWxlQ2hhbmdlKSkKKyAgICBpZiAoY2hhbmdl
VHlwZSA+IChTdHlsZUNoYW5nZVR5cGUpbV9zdHlsZUNoYW5nZSkKICAgICAgICAgbV9zdHlsZUNo
YW5nZSA9IGNoYW5nZVR5cGU7CiAKICAgICBpZiAobV9zdHlsZUNoYW5nZSAhPSBOb1N0eWxlQ2hh
bmdlKSB7CkBAIC0xMDQ3LDggKzEwNDcsOSBAQAogCiB2b2lkIE5vZGU6OnNldFJlbmRlclN0eWxl
KFJlbmRlclN0eWxlKiBzKQogewotICAgIGlmIChtX3JlbmRlcmVyKQorICAgIGlmIChtX3JlbmRl
cmVyKSB7CiAgICAgICAgIG1fcmVuZGVyZXItPnNldEFuaW1hdGFibGVTdHlsZShzKTsgCisgICAg
fQogfQogCiBSZW5kZXJTdHlsZSogTm9kZTo6Y29tcHV0ZWRTdHlsZSgpCkluZGV4OiBXZWJDb3Jl
L2RvbS9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAko
cmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzUyLDcgKzc1MiwxNSBAQAogICAgIH0KICAgICBpZiAoaGFzUGFyZW50U3R5bGUgJiYg
KGNoYW5nZSA+PSBJbmhlcml0IHx8IGNoYW5nZWQoKSkpIHsKICAgICAgICAgUmVuZGVyU3R5bGUg
Km5ld1N0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHlsZUZvckVsZW1lbnQo
dGhpcyk7CisKKyAgICAgICAgLy8gSWYgd2UgYXJlIGZvcmNpbmcgdGhlIGNoYW5nZSBtYWtlIHN1
cmUga2V5ZnJhbWVzIGFyZSB1cGRhdGVkIGluIHRoZSBuZXcgc3R5bGUKKyAgICAgICAgbmV3U3R5
bGUtPnVwZGF0ZUtleWZyYW1lcyhkb2N1bWVudCgpLT5zdHlsZVNlbGVjdG9yKCkpOworICAgICAg
ICAKICAgICAgICAgU3R5bGVDaGFuZ2UgY2ggPSBkaWZmKGN1cnJlbnRTdHlsZSwgbmV3U3R5bGUp
OworCisgICAgICAgIGlmIChzdHlsZUNoYW5nZVR5cGUoKSA9PSBBbmltYXRhYmxlU3R5bGVDaGFu
Z2UpCisgICAgICAgICAgICBjaCA9IEZvcmNlOworICAgICAgICAKICAgICAgICAgaWYgKGNoID09
IERldGFjaCkgewogICAgICAgICAgICAgaWYgKGF0dGFjaGVkKCkpCiAgICAgICAgICAgICAgICAg
ZGV0YWNoKCk7CkBAIC03ODYsOSArNzk0LDExIEBACiAgICAgICAgICAgICAgICAgbmV3U3R5bGUt
PnNldENoaWxkcmVuQWZmZWN0ZWRCeURpcmVjdEFkamFjZW50UnVsZXMoKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChjaCAhPSBOb0NoYW5nZSkKLSAgICAgICAgICAgIHNldFJlbmRlclN0eWxl
KG5ld1N0eWxlKTsKLSAgICAgICAgZWxzZSBpZiAoY2hhbmdlZCgpICYmIChkb2N1bWVudCgpLT51
c2VzU2libGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkg
eworICAgICAgICBpZiAoY2ggIT0gTm9DaGFuZ2UpIHsKKyAgICAgICAgICAgIGlmIChuZXdTdHls
ZSkgeworICAgICAgICAgICAgICAgIHNldFJlbmRlclN0eWxlKG5ld1N0eWxlKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2VkKCkgJiYgKGRvY3VtZW50KCktPnVzZXNT
aWJsaW5nUnVsZXMoKSB8fCBkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkpKSB7CiAg
ICAgICAgICAgICAvLyBBbHRob3VnaCBubyBjaGFuZ2Ugb2NjdXJyZWQsIHdlIHVzZSB0aGUgbmV3
IHN0eWxlIHNvIHRoYXQgdGhlIGNvdXNpbiBzdHlsZSBzaGFyaW5nIGNvZGUgd29uJ3QgZ2V0CiAg
ICAgICAgICAgICAvLyBmb29sZWQgaW50byBiZWxpZXZpbmcgdGhpcyBzdHlsZSBpcyB0aGUgc2Ft
ZS4gIFRoaXMgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIGRvY3VtZW50IGFjdHVhbGx5IHVzZXMK
ICAgICAgICAgICAgIC8vIHNpYmxpbmcvZGVzY2VuZGFudCBydWxlcywgc2luY2Ugb3RoZXJ3aXNl
IGl0IGlzbid0IHBvc3NpYmxlIGZvciBhbmNlc3RvciBzdHlsZXMgdG8gYWZmZWN0IHNoYXJpbmcg
b2YKQEAgLTgwMiw3ICs4MTIsNyBAQAogICAgICAgICBuZXdTdHlsZS0+ZGVyZWYoZG9jdW1lbnQo
KS0+cmVuZGVyQXJlbmEoKSk7CiAKICAgICAgICAgaWYgKGNoYW5nZSAhPSBGb3JjZSkgewotICAg
ICAgICAgICAgaWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9z
aXRpb25hbFJ1bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA9PSBGdWxsU3R5bGVDaGFuZ2UpCisg
ICAgICAgICAgICBpZiAoKGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSB8fCBoYXNQ
b3NpdGlvbmFsUnVsZXMpICYmIHN0eWxlQ2hhbmdlVHlwZSgpID49IEZ1bGxTdHlsZUNoYW5nZSkK
ICAgICAgICAgICAgICAgICBjaGFuZ2UgPSBGb3JjZTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICBjaGFuZ2UgPSBjaDsKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9k
b20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBACiAKIHR5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CiAKLWVudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNoYW5nZSwg
SW5saW5lU3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSB9OworZW51bSBTdHlsZUNoYW5nZVR5
cGUgeyBOb1N0eWxlQ2hhbmdlLCBJbmxpbmVTdHlsZUNoYW5nZSwgRnVsbFN0eWxlQ2hhbmdlLCBB
bmltYXRhYmxlU3R5bGVDaGFuZ2UgfTsKIAogLy8gdGhpcyBjbGFzcyBpbXBsZW1lbnRzIG5vZGVz
LCB3aGljaCBjYW4gaGF2ZSBhIHBhcmVudCBidXQgbm8gY2hpbGRyZW46CiBjbGFzcyBOb2RlIDog
cHVibGljIFRyZWVTaGFyZWQ8Tm9kZT4gewpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksMjAg
QEAKIAkJMjk5OTg0QkUwREM4NTk4NTAwRjhEMjYxIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5OTk4
NEJDMERDODU5ODUwMEY4RDI2MSAvKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggKi87IH07
CiAJCTJEOTA2NjA2MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5
NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwICovOyB9OwogCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxNkNDMTQ2MERE
OEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxM0EwREQ4RkU3QjAwODg5OUUy
IC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87IH07CisJCTMxNkNDMTQ3MEREOEZFN0Iw
MDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTNCMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKKwkJMzE2Q0MxNDgwREQ4RkU3QjAwODg5OUUyIC8q
IFdlYktpdENTU0tleWZyYW1lUnVsZS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTNDMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NL
ZXlmcmFtZVJ1bGUuaWRsICovOyB9OworCQkzMTZDQzE0OTBERDhGRTdCMDA4ODk5RTIgLyogV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTZDQzEzRDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5jcHAgKi87IH07CisJCTMxNkNDMTRBMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTZDQzEzRTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5oICovOyB9OworCQkzMTZDQzE0QjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZS5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxNkNDMTNGMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmlk
bCAqLzsgfTsKKwkJMzE2Q0MxNEMwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzE0
MDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmNwcCAqLzsgfTsKKwkJMzE2Q0Mx
NEQwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxNDEwREQ4RkU3QjAwODg5OUUyIC8q
IFdlYktpdENTU01hdHJpeC5oICovOyB9OworCQkzMTZDQzE0RTBERDhGRTdCMDA4ODk5RTIgLyog
V2ViS2l0Q1NTTWF0cml4LmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE2Q0MxNDIwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5p
ZGwgKi87IH07CisJCTMxNkNDMTRGMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTZDQzE0MzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3Bw
ICovOyB9OworCQkzMTZDQzE1MDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
NkNDMTQ0MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovOyB9
OworCQkzMTZDQzE1MTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
aWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZD
QzE0NTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaWRsICovOyB9
OworCQkzMTZDQzE2OTBERDkxNEE1MDA4ODk5RTIgLyogVHJhbnNmb3JtM0QuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxNjcwREQ5MTRBNTAw
ODg5OUUyIC8qIFRyYW5zZm9ybTNELmNwcCAqLzsgfTsKKwkJMzE2Q0MxNkEwREQ5MTRBNTAwODg5
OUUyIC8qIFRyYW5zZm9ybTNELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzMTZDQzE2ODBERDkxNEE1MDA4ODk5RTIgLyogVHJhbnNmb3JtM0QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzNzFGNEY0MDBE
MjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTM3MUY0
RjQxMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9u
dERhdGEuY3BwICovOyB9OwogCQkzNzFGNEZGQzBEMjVFN0YzMDBFQ0UwRDUgLyogU2VnbWVudGVk
Rm9udERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDM3MUY0RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICovOyB9OwpA
QCAtMzY5Myw4ICszNzA3LDYgQEAKIAkJQkM5ODU0M0UwQ0QzRDk4QzAwMDY5QkMxIC8qIEpTQ29u
c29sZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5
ODU0M0MwQ0QzRDk4QjAwMDY5QkMxIC8qIEpTQ29uc29sZS5oICovOyB9OwogCQlCQzk4QTI3RDBD
MEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOThBMjdDMEMwQzk5NTAwMDRCRUJGNyAv
KiBKU1N0eWxlU2hlZXRDdXN0b20uY3BwICovOyB9OwogCQlCQzk5ODEyRTBEQkU4MDdBMDA4Q0U5
RUYgLyogRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDOTk4MTJEMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFj
dFZpZXdGcmFtZS5oICovOyB9OwotCQlCQzlBREQyMzBDQzQwMzI2MDAwOThDNEMgLyogQ1NTVHJh
bnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDOUFERDIyMENDNDAzMjYwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUJDOUFERDgwMEND
NDA5MjIwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzlBREQ3RjBDQzQwOTIyMDAwOThDNEMgLyog
Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovOyB9OwogCQlCQ0ExNjlBMjBCRkQ1NUI0MDAxOUNBNzYg
LyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5jcHAgKi87IH07CiAJCUJDQTE2OUEzMEJGRDU1QjQwMDE5Q0E3
NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1M
VGFibGVDYXB0aW9uRWxlbWVudC5oICovOyB9OwogCQlCQ0EzNzgxNjBEMTVDNjQ2MDBCNzkzRDYg
LyogUGF1c2VkVGltZW91dHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQkNBMzc4MTQwRDE1QzY0NjAwQjc5M0Q2IC8qIFBhdXNlZFRpbWVvdXRzLmNw
cCAqLzsgfTsKQEAgLTQ4MTksNiArNDgzMSwyMCBAQAogCQkyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5
OTggLyogTGF5b3V0U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExh
eW91dFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTJEOTA2NjBCMDY2NUQ5
MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcGJvYXJkTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQkyRDkwNjYwQzA2NjVEOTM3
MDA2QjZGMUEgLyogQ2xpcGJvYXJkTWFjLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gQ2xpcGJvYXJkTWFjLm1tOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJMzE2Q0MxM0Ew
REQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzEzQjBERDhGRTdCMDA4ODk5RTIgLyogV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdl
YktpdENTU0tleWZyYW1lUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZD
QzEzQzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmlkbCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkzMTZDQzEzRDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2
Q0MxM0UwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzEzRjBERDhGRTdCMDA4ODk5RTIgLyogV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTQw
MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMzE2Q0MxNDEwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJp
eC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NNYXRyaXguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MxNDIwREQ4RkU3QjAwODg5OUUyIC8q
IFdlYktpdENTU01hdHJpeC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NTTWF0
cml4LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MxNDMwREQ4RkU3QjAw
ODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MxNDQwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkND
MTQ1MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaWRsOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE2NzBERDkxNEE1MDA4ODk5RTIgLyogVHJhbnNmb3Jt
M0QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVHJhbnNmb3JtM0Qu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE2ODBERDkxNEE1MDA4ODk5
RTIgLyogVHJhbnNmb3JtM0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHJh
bnNmb3JtM0QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjRGM0UwRDI1QjlB
RjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEZvbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RjNGMEQyNUI5
QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGb250RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0
RkZBMEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZWdtZW50ZWRGb250RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNzk5Niw4ICs4MDIyLDYgQEAKIAkJQkM5ODU0M0MwQ0QzRDk4QjAwMDY5
QkMxIC8qIEpTQ29uc29sZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlND
b25zb2xlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOThBMjdDMEMwQzk5NTAw
MDRCRUJGNyAvKiBKU1N0eWxlU2hlZXRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNTdHlsZVNoZWV0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkM5OTgxMkQwREJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0Zy
YW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTUFic3RyYWN0Vmlld0Zy
YW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDOUFERDIyMENDNDAzMjYwMDA5
OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTVHJhbnNmb3JtVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
QkM5QUREN0YwQ0M0MDkyMjAwMDk4QzRDIC8qIENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBK
U0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBMTY5QTEwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTFRh
YmxlQ2FwdGlvbkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNBMzc4
MTQwRDE1QzY0NjAwQjc5M0Q2IC8qIFBhdXNlZFRpbWVvdXRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhdXNlZFRpbWVvdXRzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTExODUzLDYgKzExODc3LDggQEAKIAkJQjJBMDE1OTEwQUY2Q0Q1MzAw
NkJDRTBFIC8qIGdyYXBoaWNzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkzMTZDQzE2NzBERDkxNEE1MDA4ODk5RTIgLyogVHJhbnNmb3JtM0QuY3BwICov
LAorCQkJCTMxNkNDMTY4MEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5oICovLAogCQkJ
CUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJ
CUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQlC
MkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8sCkBAIC0xMjUwOSw2ICsxMjUz
NSwxOCBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZDQzEzQTBERDhGRTdCMDA4ODk5
RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLywKKwkJCQkzMTZDQzEzQjBERDhGRTdC
MDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi8sCisJCQkJMzE2Q0MxM0MwREQ4
RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5pZGwgKi8sCisJCQkJMzE2Q0Mx
M0QwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovLAorCQkJ
CTMxNkNDMTNFMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8s
CisJCQkJMzE2Q0MxM0YwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUu
aWRsICovLAorCQkJCTMxNkNDMTQwMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXgu
Y3BwICovLAorCQkJCTMxNkNDMTQxMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXgu
aCAqLywKKwkJCQkzMTZDQzE0MjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4Lmlk
bCAqLywKKwkJCQkzMTZDQzE0MzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwICovLAorCQkJCTMxNkNDMTQ0MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5oICovLAorCQkJCTMxNkNDMTQ1MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwgKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1
IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRl
ci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovLApAQCAtMTI1OTMsOCArMTI2MzEsNiBAQAogCQkJCTg1OEMzOTEwMEFBOEZG
MDAwMEIxODdBNCAvKiBDU1NTdHlsZVNoZWV0LmlkbCAqLywKIAkJCQlCQzgwQzk4NTBDRDI5NEVF
MDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgKi8sCiAJCQkJQkM4MEM5ODYw
Q0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCAqLywKLQkJCQlCQzlB
REQ3RjBDQzQwOTIyMDAwOThDNEMgLyogQ1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAotCQkJCUJD
OUFERDIyMENDNDAzMjYwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTM3
MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8sCiAJ
CQkJMzcxRjUzRTcwRDI3MDRGOTAwRUNFMEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8s
CiAJCQkJQTgwRTZDQ0UwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCkBA
IC0xMzA5NSw3ICsxMzEzMSw2IEBACiAJCQkJQkM3NzJCNDAwQzRFQTkxRTAwODMyODVGIC8qIENT
U1N0eWxlU2VsZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE4MDA3MEExOTUxNkUwMEE4
RUY1RiAvKiBDU1NTdHlsZVNoZWV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzgwQzk4ODBDRDI5
NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJQkM5QUREMjMwQ0M0MDMyNjAwMDk4QzRDIC8qIENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlERDdDREYyNTBBMjNDRjk4MDAwNjk5MjggLyogQ1NTVW5rbm93blJ1bGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0VFMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2NTgxNTEwOUQxMzA0MzAwMEU2MUQ3IC8qIENTU1Zh
bHVlS2V5d29yZHMuaCBpbiBIZWFkZXJzICovLApAQCAtMTQ5OTIsNiArMTUwMjcsMTEgQEAKIAkJ
CQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQ0U5OUVDNDBEQ0E2MjQxMDAxODI2ODMgLyogSlNYU0xUUHJvY2Vzc29yQ29u
c3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDQkZCNTNEMERDRDI5Q0YwMDE5QjNFNSAv
KiBKU0RPTVdpbmRvd1NoZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzE0NzBERDhGRTdC
MDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkz
MTZDQzE0QTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzE2Q0MxNEQwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJp
eC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0MxNTAwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzE2QTBERDkxNEE1
MDA4ODk5RTIgLyogVHJhbnNmb3JtM0QuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9u
bHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTUxMDUsNiArMTUx
NDUsMTAgQEAKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBu
ZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21P
dXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQlCQ0VGRTFERDBEQ0E1Q0ZEMDA3Mzky
MTkgLyogWFNMVFByb2Nlc3Nvci5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTMxNkNDMTQ4MERE
OEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaWRsIGluIFJlc291cmNlcyAq
LywKKwkJCQkzMTZDQzE0QjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5pZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTMxNkNDMTRFMEREOEZFN0IwMDg4OTlFMiAvKiBX
ZWJLaXRDU1NNYXRyaXguaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzE1MTBERDhGRTdC
MDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaWRsIGluIFJlc291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTE1MjQ1LDcgKzE1Mjg5LDYgQEAKIAkJCQlCQzc3MkIzRjBDNEVBOTFFMDA4MzI4NUYgLyog
Q1NTU3R5bGVTZWxlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBODAwODBBMTk1MTZF
MDBBOEVGNUYgLyogQ1NTU3R5bGVTaGVldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzgwQzk4
NzBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQlCQzlBREQ4MDBDQzQwOTIyMDAwOThDNEMgLyogQ1NTVHJhbnNmb3JtVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgwRTZDRTQwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Zh
bHVlTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkMzREEyNzBEMDA2QzFEMDBFRjZGMjYg
LyogQ1N0cmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0IxNkMxNzA5NzlDM0JEMDA0Njc3
NDEgLyogQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0xNjY5NSw2ICsxNjczOCwxMSBAQAog
CQkJCUJDRUZFMUVBMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNFOTlFQzMwRENBNjI0MTAwMTgyNjgzIC8qIEpTWFNMVFByb2Nlc3Nv
ckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDQkZCNTNDMERDRDI5Q0YwMDE5
QjNFNSAvKiBKU0RPTVdpbmRvd1NoZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNkNDMTQ2
MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzE2Q0MxNDkwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MxNEMwREQ4RkU3QjAwODg5OUUyIC8qIFdl
YktpdENTU01hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzE0RjBERDhGRTdCMDA4
ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzE2Q0MxNjkwREQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9ybTNELmNwcCBpbiBTb3VyY2VzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9
OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNv
cmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2ICs1NjIs
NyBAQAogCiAjCiAjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVOQ1RJT04K
KyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBlYXNlCiBs
aW5lYXIKQEAgLTU3MCw2ICs1NzEsMjggQEAKIGVhc2UtaW4tb3V0CiAKICMKKyMgQ1NTX1BST1Bf
X1dFQktJVF9UUkFOU0lUSU9OX0RFTEFZCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX0RF
TEFZCisjCitub3cKKworIworIyBDU1NfUFJPUF9fV0VCS0lUX0FOSU1BVElPTl9ESVJFQ1RJT04K
KyMKKyMgYWx0ZXJuYXRlCisKKyMKKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fSVRFUkFU
SU9OX0NPVU5UCisjCisjIGluZmluaXRlCisKKyMKKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJ
T05fUExBWV9TVEFURQorIworcnVubmluZworcGF1c2VkCisKKyMKICMgQ1NTX1BST1BfWk9PTQog
IwogcmVzZXQKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzMjkxMikK
KysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Niw2ICs2Niw5IEBACiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCisj
aW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKICNpbmNsdWRlICJYTUxOYW1lcy5o
IgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAgLTE3Nywx
NSArMTgwLDE1IEBACiAjZGVmaW5lIEhBTkRMRV9NQVNLX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVl
KSBcCiBIQU5ETEVfRklMTF9MQVlFUl9WQUxVRShtYXNrLCBNYXNrLCBwcm9wLCBQcm9wLCB2YWx1
ZSkKIAotI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3As
IFByb3ApIFwKKyNkZWZpbmUgSEFORExFX01VTFRJTEFZRVJfSU5IRVJJVF9BTkRfSU5JVElBTChs
YXllclR5cGUsIExheWVyVHlwZSwgcHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkgeyBcCi0g
ICAgVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsg
XAotICAgIFRyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKLSAgICBjb25zdCBUcmFuc2l0aW9u
KiBjdXJyUGFyZW50ID0gbV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKTsgXAorICAgIExheWVy
VHlwZSogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUjI3MoKTsgXAorICAg
IExheWVyVHlwZSogcHJldkNoaWxkID0gMDsgXAorICAgIGNvbnN0IExheWVyVHlwZSogY3VyclBh
cmVudCA9IG1fcGFyZW50U3R5bGUtPmxheWVyVHlwZSMjcygpOyBcCiAgICAgd2hpbGUgKGN1cnJQ
YXJlbnQgJiYgY3VyclBhcmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwKICAgICAgICAgaWYgKCFj
dXJyQ2hpbGQpIHsgXAogICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyLiov
IFwKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKKyAgICAgICAg
ICAgIGN1cnJDaGlsZCA9IG5ldyBMYXllclR5cGUoKTsgXAogICAgICAgICAgICAgcHJldkNoaWxk
LT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIGN1cnJDaGlsZC0+
c2V0IyNQcm9wKGN1cnJQYXJlbnQtPnByb3AoKSk7IFwKQEAgLTE5OSwzNCArMjAyLDM1IEBACiAg
ICAgICAgIGN1cnJDaGlsZC0+Y2xlYXIjI1Byb3AoKTsgXAogICAgICAgICBjdXJyQ2hpbGQgPSBj
dXJyQ2hpbGQtPm5leHQoKTsgXAogICAgIH0gXAotfSBlbHNlIGlmIChpc0luaXRpYWwpIHsgXAot
ICAgIFRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRpb25zKCk7
IFwKLSAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRp
b24jI1Byb3AoKSk7IFwKKyAgICByZXR1cm47IFwKK30gXAoraWYgKGlzSW5pdGlhbCkgeyBcCisg
ICAgTGF5ZXJUeXBlKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3MjI0xheWVyVHlwZSMjcygp
OyBcCisgICAgY3VyckNoaWxkLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Byb3Ao
KSk7IFwKICAgICBmb3IgKGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBjdXJyQ2hpbGQ7
IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpKSBcCiAgICAgICAgIGN1cnJDaGlsZC0+Y2xl
YXIjI1Byb3AoKTsgXAorICAgIHJldHVybjsgXAogfQotCi0jZGVmaW5lIEhBTkRMRV9UUkFOU0lU
SU9OX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSB7IFwKLUhBTkRMRV9UUkFOU0lUSU9OX0lOSEVS
SVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5oZXJpdCB8fCBpc0luaXRpYWwp
IFwKLSAgICByZXR1cm47IFwKLVRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vz
c1RyYW5zaXRpb25zKCk7IFwKLVRyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKKyAgICAKKyNk
ZWZpbmUgSEFORExFX01VTFRJTEFZRVJfVkFMVUUobGF5ZXJUeXBlLCBMYXllclR5cGUsIHByb3As
IFByb3AsIHZhbHVlKSB7IFwKK0hBTkRMRV9NVUxUSUxBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwo
bGF5ZXJUeXBlLCBMYXllclR5cGUsIHByb3AsIFByb3ApIFwKK0xheWVyVHlwZSogY3VyckNoaWxk
ID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUjI3MoKTsgXAorTGF5ZXJUeXBlKiBwcmV2Q2hp
bGQgPSAwOyBcCiBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIC8qIFdhbGsgZWFj
aCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBu
ZWVkZWQuICovIFwKICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19jYXN0PENT
U1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
dmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKICAgICAgICAgaWYgKCFjdXJyQ2hpbGQpIHsg
XAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyIHRvIGhvbGQgdGhpcyB2
YWx1ZSAqLyBcCi0gICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigpOyBcCi0g
ICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsgXAorICAgICAgICAvKiBO
ZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwKKyAgICAgICAg
Y3VyckNoaWxkID0gbmV3IExheWVyVHlwZSgpOyBcCisgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4
dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBtYXBUcmFuc2l0aW9uIyNQcm9w
KGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsgXAorICAg
ICAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW0oaSkpOyBcCiAgICAgICAg
IHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAogICAgICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQt
Pm5leHQoKTsgXAogICAgIH0gXAogfSBlbHNlIHsgXAotICAgIG1hcFRyYW5zaXRpb24jI1Byb3Ao
Y3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwK
ICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogfSBcCiB3aGlsZSAoY3VyckNo
aWxkKSB7IFwKQEAgLTIzNSw2ICsyMzksMTggQEAKICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQt
Pm5leHQoKTsgXAogfSB9CiAKKyNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fSU5IRVJJVF9BTkRf
SU5JVElBTChwcm9wLCBQcm9wKSBcCitIQU5ETEVfTVVMVElMQVlFUl9JTkhFUklUX0FORF9JTklU
SUFMKHRyYW5zaXRpb24sIFRyYW5zaXRpb24sIHByb3AsIFByb3ApCisgICAgCisjZGVmaW5lIEhB
TkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSBcCitIQU5ETEVfTVVMVElM
QVlFUl9WQUxVRSh0cmFuc2l0aW9uLCBUcmFuc2l0aW9uLCBwcm9wLCBQcm9wLCB2YWx1ZSkKKyAg
ICAKKyNkZWZpbmUgSEFORExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFBy
b3ApIFwKK0hBTkRMRV9NVUxUSUxBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwoYW5pbWF0aW9uLCBB
bmltYXRpb24sIHByb3AsIFByb3ApCisgICAgCisjZGVmaW5lIEhBTkRMRV9BTklNQVRJT05fVkFM
VUUocHJvcCwgUHJvcCwgdmFsdWUpIFwKK0hBTkRMRV9NVUxUSUxBWUVSX1ZBTFVFKGFuaW1hdGlv
biwgQW5pbWF0aW9uLCBwcm9wLCBQcm9wLCB2YWx1ZSkKKyAgICAKICNkZWZpbmUgSEFORExFX0lO
SEVSSVRfQ09ORChwcm9wSUQsIHByb3AsIFByb3ApIFwKIGlmIChpZCA9PSBwcm9wSUQpIHsgXAog
ICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCkBAIC0zNjcs
MTEgKzM4Myw1NyBAQAogICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldCht
YXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAKICAgICBEZXByZWNhdGVkUHRy
TGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxlU2hlZXRzLT5zdHlsZVNoZWV0cyk7Ci0g
ICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+
aXNDU1NTdHlsZVNoZWV0KCkgJiYgIWl0LmN1cnJlbnQoKS0+ZGlzYWJsZWQoKSkKLSAgICAgICAg
ICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxl
U2hlZXQqPihpdC5jdXJyZW50KCkpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGZvciAoOyBpdC5j
dXJyZW50KCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aXNDU1NTdHlsZVNo
ZWV0KCkgJiYgIWl0LmN1cnJlbnQoKS0+ZGlzYWJsZWQoKSkgeworICAgICAgICAgICAgQ1NTU3R5
bGVTaGVldCogc2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaXQuY3VycmVudCgp
KTsKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNoZWV0LCAq
bV9tZWRpdW0sIHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBhZGQgdGhlIGtl
eWZyYW1lIHJ1bGVzCisgICAgICAgICAgICBpbnQgbGVuID0gc2hlZXQtPmxlbmd0aCgpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0ZW0oaSk7CisgICAgICAg
ICAgICAgICAgaWYgKGl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHIgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEtleWZyYW1lU3R5bGUo
ZG9jLCByKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKIH0KIAorLy8gdGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGluZyBmdW5jdGlv
biBmb3Iga2V5ZnJhbWUgc3R5bGVzCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEtleWZyYW1l
U3R5bGUoRG9jdW1lbnQqIGRvYywgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSkKK3sKKyAg
ICBBdG9taWNTdHJpbmcgcyhydWxlLT5uYW1lKCkpOworICAgIEtleWZyYW1lTGlzdCogbGlzdDsK
KyAgICBpZiAobV9rZXlmcmFtZVJ1bGVNYXAuY29udGFpbnMocy5pbXBsKCkpKQorICAgICAgICBs
aXN0ID0gbV9rZXlmcmFtZVJ1bGVNYXAuZ2V0KHMuaW1wbCgpKS5nZXQoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgbGlzdCA9IG5ldyBLZXlmcmFtZUxpc3Qocyk7CisgICAgICAgIG1fa2V5ZnJhbWVS
dWxlTWFwLmFkZChzLmltcGwoKSwgbGlzdCk7CisgICAgfQorICAgIGxpc3QtPmNsZWFyKCk7Cisg
ICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGUtPmxlbmd0aCgpOyArK2kpIHsK
KyAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZiA9IHJ1bGUtPml0ZW0oaSk7CisgICAg
ICAgIG1fc3R5bGUgPSBuZXcgKGRvYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKTsKKyAg
ICAgICAgbV9zdHlsZS0+cmVmKCk7CisgICAgICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
KiBkZWNsID0ga2YtPnN0eWxlKCk7CisgICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RDb25zdEl0
ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7CisgICAgICAgIGZvciAoRGVwcmVjYXRlZFZhbHVlTGlz
dENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gZGVjbC0+dmFsdWVzSXRlcmF0b3IoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgY3VycmVu
dCA9ICppdDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBjdXJyZW50
LnZhbHVlKCkpOworICAgICAgICAgICAgbGlzdC0+YWRkUHJvcGVydHkoY3VycmVudC5pZCgpKTsK
KyAgICAgICAgfQorICAgICAgICBsaXN0LT5pbnNlcnQoa2YtPmtleSgpLCAqbV9zdHlsZSk7Cisg
ICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvYy0+cmVuZGVyQXJlbmEoKSk7CisgICAgICAgIG1fc3R5
bGUgPSAwOworICAgIH0KK30KKyAgICAKKyAgICAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5p
dCgpCiB7CiAgICAgbV9lbGVtZW50ID0gMDsKQEAgLTM4OSw4ICs0NTEsMTQgQEAKICAgICBkZWxl
dGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAgYXJlbmFE
ZXN0cm95KCk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXJlbmFEZXN0cm95KCkKK3sK
KyAgICBtX2tleWZyYW1lUnVsZU1hcC5jbGVhcigpOworfQorCiBzdGF0aWMgQ1NTU3R5bGVTaGVl
dCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNpemUpCiB7
CiAgICAgQ1NTU3R5bGVTaGVldCogY29uc3QgcGFyZW50ID0gMDsKQEAgLTc3NSw3ICs4NDMsNyBA
QAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocy0+aXNDaGVja2VkKCkgIT0gbV9lbGVt
ZW50LT5pc0NoZWNrZWQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkpCisgICAgICAgICAg
ICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGJvb2wgY2xhc3Nlc01hdGNo
ID0gdHJ1ZTsKQEAgLTEyMzMsOCArMTMwMSw5IEBACiAgICAgc3R5bGUtPmFkanVzdEJhY2tncm91
bmRMYXllcnMoKTsKICAgICBzdHlsZS0+YWRqdXN0TWFza0xheWVycygpOwogCi0gICAgLy8gRG8g
dGhlIHNhbWUgZm9yIHRyYW5zaXRpb25zLgorICAgIC8vIERvIHRoZSBzYW1lIGZvciB0cmFuc2l0
aW9ucyBhbmQgYW5pbWF0aW9ucwogICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygpOworICAg
IHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7CiAKICAgICAvLyBJbXBvcnRhbnQ6IEludHJpbnNp
YyBtYXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhhcyBhZGp1
c3RlZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCiAgICAgLy8gYWx0ZXIgZm9udHMg
YW5kIGhlaWdodHMvd2lkdGhzLgpAQCAtNDQ4MSwxMjIgKzQ1NTAsNyBAQAogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lO
SVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgewot
ICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0
Kj4odmFsdWUpOwotICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3QtPmxlbmd0aCgpOwot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg
ICAgICAgICAgIENTU1RyYW5zZm9ybVZhbHVlKiB2YWwgPSBzdGF0aWNfY2FzdDxDU1NUcmFuc2Zv
cm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAgICAgICAg
ICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0gdmFsLT52YWx1ZXMoKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApKTsKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoICh2YWwtPnR5
cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBj
YXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPnR5
cGUoKSA9PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsdWVzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
biogc2NhbGUgPSBuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gsIHN5KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHNjYWxlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoK
LSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRy
YW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0
aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgo
MCwgRml4ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0VmFsdWUsIG1fc3R5
bGUsICZvayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgbV9zdHlsZSwg
Jm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gQ1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRW
YWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
ID0gY29udmVydFRvTGVuZ3RoKHNlY29uZFZhbHVlLCBtX3N0eWxlLCAmb2spOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRyYW5zbGF0
ZSA9IG5ldyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHgsIHR5KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHRyYW5zbGF0ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmdldERv
dWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1ZS0+cHJp
bWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19HUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0g
Z3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUm90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uKiByb3RhdGUgPSBuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHJvdGF0ZSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WFRy
YW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBhbmdsZVggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xl
WSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVl
LT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFs
dWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwt
PnR5cGUoKSA9PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBh
bmdsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gQ1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUg
PSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3Vu
ZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkg
PSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChzZWNvbmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlWSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYW5nbGVZID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
WSA9IGFuZ2xlWDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHNrZXcgPSBuZXcgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbihhbmdsZVgsIGFuZ2xlWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRp
b25zLmFwcGVuZChza2V3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFs
dWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygyKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjaygzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlm
dGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBzaXh0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1
ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiBtYXRyaXggPSBuZXcgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uKGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWZ0aFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpeHRoVmFsdWUtPmdldERvdWJsZVZh
bHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQobWF0cml4
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
ICAgCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnModmFs
dWUsIG1fc3R5bGUsIG9wZXJhdGlvbnMpOwogICAgICAgICBtX3N0eWxlLT5zZXRUcmFuc2Zvcm0o
b3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NjMyLDYgKzQ1ODYsMzMg
QEAKICAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtT3JpZ2luWShsKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAg
IGlmIChpc0luaXRpYWwpCisgICAgICAgICAgICBtX3N0eWxlLT5jbGVhckFuaW1hdGlvbnMoKTsK
KyAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQorICAgICAgICAgICAgbV9zdHlsZS0+aW5oZXJp
dEFuaW1hdGlvbnMobV9wYXJlbnRTdHlsZS0+YW5pbWF0aW9ucygpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICAgICAgSEFO
RExFX0FOSU1BVElPTl9WQUxVRShhbmltYXRpb25EZWxheSwgQW5pbWF0aW9uRGVsYXksIHZhbHVl
KQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRp
cmVjdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShhbmltYXRpb25EaXJlY3Rp
b24sIEFuaW1hdGlvbkRpcmVjdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CisgICAgICAgIEhBTkRMRV9BTklN
QVRJT05fVkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICAg
ICAgSEFORExFX0FOSU1BVElPTl9WQUxVRShhbmltYXRpb25JdGVyYXRpb25Db3VudCwgQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQsIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFM
VUUoYW5pbWF0aW9uTmFtZSwgQW5pbWF0aW9uTmFtZSwgdmFsdWUpCisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgICAgICBI
QU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGFuaW1hdGlvblBsYXlTdGF0ZSwgQW5pbWF0aW9uUGxheVN0
YXRlLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9WQUxVRSh0
aW1pbmdGdW5jdGlvbiwgVGltaW5nRnVuY3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIGlmIChpc0luaXRp
YWwpCiAgICAgICAgICAgICBtX3N0eWxlLT5jbGVhclRyYW5zaXRpb25zKCk7CkBAIC00NjQxLDE1
ICs0NjIyLDEyIEBACiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlv
bjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2
YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHJlcGVhdENv
dW50LCBSZXBlYXRDb3VudCwgdmFsdWUpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25Qcm9wZXJ0eToKKyAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodHJhbnNpdGlv
blByb3BlcnR5LCBUcmFuc2l0aW9uUHJvcGVydHksIHZhbHVlKQogICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICAg
ICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodGltaW5nRnVuY3Rpb24sIFRpbWluZ0Z1bmN0aW9u
LCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5
LCBQcm9wZXJ0eSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5
SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRj
aDoKQEAgLTQ4OTAsODcgKzQ4NjgsMTQ3IEBACiAgICAgbGF5ZXItPnNldFlQb3NpdGlvbihsKTsK
IH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNp
dGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9y
OjptYXBUaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lO
SVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oUmVuZGVyU3R5bGU6Omlu
aXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAg
IHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
IHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6Cisg
ICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rp
b24oTGluZWFyVGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgorICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNl
dFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKCkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoKKyAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWlu
Z0Z1bmN0aW9uLCAuNDIsIC4wLCAxLjAsIDEuMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VPdXQ6CisgICAgICAgICAgICAgICAgdHJhbnNp
dGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbiwgLjAsIC4wLCAuNTgsIDEuMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91dDoKKyAgICAgICAgICAgICAgICB0cmFuc2l0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uLCAuNDIsIC4wLCAuNTgsIDEuMCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKHZhbHVlLT5pc1Ry
YW5zaXRpb25UaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKKyAgICAgICAgQ1NTVGltaW5nRnVuY3Rp
b25WYWx1ZSogdGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxDU1NUaW1pbmdGdW5jdGlvblZh
bHVlKj4odmFsdWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1p
bmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCB0aW1pbmdGdW5jdGlvbi0+eDEo
KSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRpbWluZ0Z1bmN0aW9uLT54MigpLCB0aW1pbmdGdW5j
dGlvbi0+eTIoKSkpOworICAgIH0KK30KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEdXJh
dGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYg
KHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxEdXJhdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1p
dGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIENTU1ByaW1pdGl2ZVZh
bHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oaW50KDEw
MDAqcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkpOworICAgICAgICB0cmFuc2l0aW9u
LT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKTsKICAgICBlbHNl
IGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTVMpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKGludChwcmltaXRpdmVW
YWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9u
KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAwMC4wZik7CiB9CiAKLXZvaWQgQ1NT
U3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblJlcGVhdENvdW50KFRyYW5zaXRpb24qIHRyYW5z
aXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwQW5pbWF0
aW9uRGVsYXkoVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAg
aWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAg
ICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFu
c2l0aW9uUmVwZWF0Q291bnQoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uRGVs
YXkoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EZWxheSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKyAgICAKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICBpZiAocHJpbWl0aXZl
VmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb3cpCisgICAgICAgIGFuaW1hdGlvbi0+c2V0
QW5pbWF0aW9uRGVsYXkoMCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCisgICAgICAg
ICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbkRlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9h
dFZhbHVlKCkvMTAwMC4wZik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+
c2V0QW5pbWF0aW9uRGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSk7CisgICAg
fQorfQogCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkRpcmVjdGlvbihUcmFu
c2l0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNz
c1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkgeworICAgICAgICBhbmltYXRp
b24tPnNldEFuaW1hdGlvbkRpcmVjdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRp
cmVjdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBDU1NQcmltaXRp
dmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbHVlKTsKKyAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbkRpcmVjdGlvbihwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUFsdGVybmF0ZSk7Cit9CisKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoVHJhbnNpdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRp
b25JdGVyYXRpb25Db3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNv
dW50KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAogICAgIGlmICghdmFsdWUtPmlz
UHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVl
SW5maW5pdGUpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldFJlcGVhdENvdW50KC0xKTsKKyAgICAg
ICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25JdGVyYXRpb25Db3VudCgtMSk7CiAgICAgZWxzZQot
ICAgICAgICB0cmFuc2l0aW9uLT5zZXRSZXBlYXRDb3VudChpbnQocHJpbWl0aXZlVmFsdWUtPmdl
dEZsb2F0VmFsdWUoKSkpOworICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50KGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CiB9CiAKLXZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24q
IHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFw
QW5pbWF0aW9uTmFtZShUcmFuc2l0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKIHsK
ICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5JVElBTCkg
ewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5p
dGlhbFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKTsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRB
bmltYXRpb25OYW1lKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICAKKyAgICBDU1NQcmltaXRpdmVWYWx1ZSogcHJpbWl0aXZl
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlKTsKKyAgICAKKyAg
ICBpZiAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVOb25lKSB7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTmFtZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3Ry
aW5nVmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICAvLyByZXNvbHZlIHRvIHRoZSBrZXlmcmFt
ZXMKKyAgICAgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4ga2V5ZnJhbWUgPSBmaW5kS2V5ZnJhbWVS
dWxlKHByaW1pdGl2ZVZhbHVlLT5nZXRTdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgYW5pbWF0aW9u
LT5zZXRBbmltYXRpb25LZXlmcmFtZShrZXlmcmFtZSk7CisgICAgfQorfQogCi0gICAgaWYgKHZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHBy
aW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0g
ICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVMaW5lYXI6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb24pKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgotICAgICAg
ICAgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKCkp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJ
bjoKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdG
dW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAxLjAsIDEuMCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VPdXQ6
Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVu
Y3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjAsIC4wLCAuNTgsIDEuMCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91dDoK
LSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5j
dGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAuNTgsIDEuMCkpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Cit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
cEFuaW1hdGlvblBsYXlTdGF0ZShUcmFuc2l0aW9uKiBhbmltYXRpb24sIENTU1ZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1ZhbHVlOjpDU1NfSU5J
VElBTCkgeworICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvblBsYXlTdGF0ZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLQotICAgIGlmICh2YWx1ZS0+aXNUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb25WYWx1ZSgpKSB7
Ci0gICAgICAgIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUqIHRpbWluZ0Z1bmN0aW9uID0gc3RhdGlj
X2Nhc3Q8Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZSo+KHZhbHVlKTsKLSAgICAgICAgdHJhbnNpdGlv
bi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5j
dGlvbiwgdGltaW5nRnVuY3Rpb24tPngxKCksIHRpbWluZ0Z1bmN0aW9uLT55MSgpLCB0aW1pbmdG
dW5jdGlvbi0+eDIoKSwgdGltaW5nRnVuY3Rpb24tPnkyKCkpKTsKLSAgICB9CisgICAgCisgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25QbGF5U3RhdGUo
KHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENTU1ZhbHVlUGF1c2VkKSA/IEFuaW1QbGF5
U3RhdGVQYXVzZWQgOiBBbmltUGxheVN0YXRlUGxheWluZyk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVT
ZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblByb3BlcnR5KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENT
U1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUtPmNzc1ZhbHVlVHlwZSgpID09IENTU1Zh
bHVlOjpDU1NfSU5JVElBTCkgewotICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKTsKKyAgICAgICAgdHJhbnNpdGlv
bi0+c2V0VHJhbnNpdGlvblByb3BlcnR5KFJlbmRlclN0eWxlOjppbml0aWFsVHJhbnNpdGlvblBy
b3BlcnR5KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCisgICAgCiAgICAgaWYgKCF2YWx1
ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQogICAgICAgICByZXR1cm47Ci0KKyAgICAKICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogcHJpbWl0aXZlVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbHVlKTsKLSAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eShwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvblByb3BlcnR5KHBy
aW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpKTsKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBOaW5lUGllY2VJbWFnZShDU1NWYWx1ZSogdmFsdWUsIE5pbmVQaWVjZUltYWdlJiBpbWFnZSkK
QEAgLTUzMjIsNCArNTM2MCwxOTEgQEAKICAgICB9CiB9CiAKK2Jvb2wgQ1NTU3R5bGVTZWxlY3Rv
cjo6Y3JlYXRlVHJhbnNmb3JtT3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5
bGUqIGluU3R5bGUsIFRyYW5zZm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCit7CisgICAg
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOworICAgIGlmIChpblZhbHVlICYmICFpblZh
bHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0g
c3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4oaW5WYWx1ZSk7CisgICAgICAgIHVuc2lnbmVkIHNp
emUgPSBsaXN0LT5sZW5ndGgoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgICAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHZhbCA9IHN0
YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4obGlzdC0+aXRlbShpKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBmaXJzdFZhbHVlID0gc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBzd2l0Y2ggKHZhbC0+dHlwZSgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAg
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3Jt
T3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAg
ICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlv
bjogeworICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3ggPSAxLjA7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN6ID0g
MS4wOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHN6ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZSBpZiAodmFsLT50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmly
c3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAor
ICAgICAgICAgICAgICAgICAgICAgICAgc3ggPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpICE9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDIpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgyKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZh
bC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4odmFsLT5pdGVtKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBz
ZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBz
Y2FsZSA9IG5ldyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihzeCwgc3ksIHN6KTsKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoc2NhbGUpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZTNEVHJhbnNm
b3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wgb2sgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAg
ICAgICAgICAgICBMZW5ndGggdHkgPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgICAg
ICAgICBMZW5ndGggdHogPSBMZW5ndGgoMCwgRml4ZWQpOworICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsLT50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFu
c2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0xl
bmd0aChmaXJzdFZhbHVlLCBpblN0eWxlLCAmb2spOworICAgICAgICAgICAgICAgICAgICBlbHNl
IGlmICh2YWwtPnR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRy
YW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRv
TGVuZ3RoKGZpcnN0VmFsdWUsIGluU3R5bGUsICZvayk7CisgICAgICAgICAgICAgICAgICAgIGVs
c2UgeyAKKyAgICAgICAgICAgICAgICAgICAgICAgIHR4ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0
VmFsdWUsIGluU3R5bGUsICZvayk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50
eXBlKCkgIT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVy
YXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5sZW5ndGgoKSA+
IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgy
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6ID0gY29udmVydFRvTGVuZ3Ro
KHRoaXJkVmFsdWUsIGluU3R5bGUsICZvayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKHNlY29u
ZFZhbHVlLCBpblN0eWxlLCAmb2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFvaykKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogdHJhbnNsYXRlID0gbmV3IFRy
YW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih0eCwgdHksIHR6KTsKKyAgICAgICAgICAgICAgICAg
ICAgb3BlcmF0aW9ucy5hcHBlbmQodHJhbnNsYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVYVHJhbnNmb3JtT3BlcmF0aW9uOgor
ICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVlUcmFu
c2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBk
b3VibGUgeCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0gMDsKKyAgICAgICAg
ICAgICAgICAgICAgZG91YmxlIHogPSAwOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5n
bGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFu
Z2xlID0gZ3JhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3Rh
dGVYVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgeCA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbC0+dHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAg
ICAgICAgeSA9IDE7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHogPSAxOworICAgICAgICAgICAgICAgICAgICBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b24qIHJvdGF0ZSA9IG5ldyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24oeCwgeSwgeiwgYW5nbGUp
OworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChyb3RhdGUpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
Y2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb246
IHsKKyAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMSkpOworICAgICAgICAg
ICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDIpKTsKKyAgICAgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWwtPml0ZW0oMykpOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgeCA9IGZpcnN0
VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB5ID0g
c2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJs
ZSB6ID0gdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ZG91YmxlIGFuZ2xlID0gZm91cnRoVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmb3VydGhWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVn
KGFuZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm91cnRoVmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCisgICAgICAgICAgICAg
ICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAg
Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiByb3RhdGUgPSBuZXcgUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uKHgsIHksIHosIGFuZ2xlKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5h
cHBlbmQocm90YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdU
cmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAg
ICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlWCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRv
dWJsZSBhbmdsZVkgPSAwOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RW
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQorICAg
ICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gZ3Jh
ZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7CisgICAgICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNr
ZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
dmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWwtPml0ZW0oMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmdsZVkgPSByYWQyZGVnKGFuZ2xlWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZ
ID0gZ3JhZDJkZWcoYW5nbGVZKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHNr
ZXcgPSBuZXcgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihhbmdsZVgsIGFuZ2xlWSk7CisgICAgICAg
ICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHNrZXcpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAg
ICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CisgICAgICAgICAgICAgICAgICAgIG1h
dHJpeC5zZXRBKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDApKS0+
Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0cml4LnNldEIoc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMSkpLT5nZXRGbG9hdFZhbHVlKCkp
OworICAgICAgICAgICAgICAgICAgICBtYXRyaXguc2V0QyhzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbC0+aXRlbSgyKSktPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1hdHJpeC5zZXREKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5p
dGVtKDMpKS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0cml4LnNl
dEUoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oNCkpLT5nZXRGbG9h
dFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBtYXRyaXguc2V0RihzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSg1KSktPmdldEZsb2F0VmFsdWUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKG5ldyBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24obWF0cml4KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm0z
RCBtYXRyaXgoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMCkpLT5n
ZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxKSktPmdldEZsb2F0VmFs
dWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDIpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWwtPml0ZW0oMykpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbC0+aXRlbSg0KSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVt
KDUpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oNikpLT5nZXRG
bG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSg3KSktPmdldEZsb2F0VmFsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDgpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW0oOSkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bC0+aXRlbSgxMCkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgx
MSkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxMikpLT5nZXRG
bG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxMykpLT5nZXRGbG9hdFZhbHVl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxNCkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbC0+aXRlbSgxNSkpLT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChuZXcgTWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24o
bWF0cml4KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0g
ICAKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgb3V0T3BlcmF0aW9ucyA9IG9wZXJhdGlvbnM7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgJKHJldmlzaW9u
IDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw2ICs1OCw3IEBACiBjbGFzcyBTdHlsZVNoZWV0OwogY2xhc3MgU3R5bGVTaGVldExp
c3Q7CiBjbGFzcyBTdHlsZWRFbGVtZW50OworY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTsK
IAogY2xhc3MgTWVkaWFRdWVyeVJlc3VsdCB7CiBwdWJsaWM6CkBAIC0xMjksNiArMTMwLDI0IEBA
CiAgICAgICAgIHZvaWQgYWxsVmlzaXRlZFN0YXRlQ2hhbmdlZCgpOwogICAgICAgICB2b2lkIHZp
c2l0ZWRTdGF0ZUNoYW5nZWQodW5zaWduZWQgdmlzaXRlZEhhc2gpOwogCisgICAgICAgIEtleWZy
YW1lTGlzdCogZmluZEtleWZyYW1lUnVsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChuYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQXRvbWljU3RyaW5nIHMobmFtZSk7
CisgICAgICAgICAgICBpZiAoIW1fa2V5ZnJhbWVSdWxlTWFwLmNvbnRhaW5zKHMuaW1wbCgpKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBtX2tleWZyYW1l
UnVsZU1hcC5maW5kKHMuaW1wbCgpKS5nZXQoKS0+c2Vjb25kLmdldCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB2b2lkIGFkZEtleWZyYW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSk7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgdm9p
ZCBjcmVhdGVUaW1pbmdGdW5jdGlvbihDU1NWYWx1ZSogaW5WYWx1ZSwgVGltaW5nRnVuY3Rpb24m
IG91dFRpbWluZ0Z1bmN0aW9uKTsKKyAgICAgICAgc3RhdGljIGJvb2wgY3JlYXRlVHJhbnNmb3Jt
T3BlcmF0aW9ucyhDU1NWYWx1ZSogaW5WYWx1ZSwgUmVuZGVyU3R5bGUqIGluU3R5bGUsIFRyYW5z
Zm9ybU9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpOworICAgICAgICAKKyAgICAgICAgdm9pZCBh
cmVuYURlc3Ryb3koKTsKKyAgICAgICAgCiAgICAgcHJpdmF0ZToKICAgICAgICAgZW51bSBTZWxl
Y3Rvck1hdGNoIHsgU2VsZWN0b3JNYXRjaGVzLCBTZWxlY3RvckZhaWxzTG9jYWxseSwgU2VsZWN0
b3JGYWlsc0NvbXBsZXRlbHkgfTsKICAgICAgICAgU2VsZWN0b3JNYXRjaCBjaGVja1NlbGVjdG9y
KENTU1NlbGVjdG9yKiwgRWxlbWVudCosIGJvb2wgaXNBbmNlc3RvciwgYm9vbCBpc1N1YlNlbGVj
dG9yKTsKQEAgLTE2Miw3ICsxODEsMTAgQEAKICAgICAgICAgQm9yZGVyRGF0YSBtX2JvcmRlckRh
dGE7CiAgICAgICAgIEZpbGxMYXllciBtX2JhY2tncm91bmREYXRhOwogICAgICAgICBDb2xvciBt
X2JhY2tncm91bmRDb2xvcjsKLQorICAgICAgICAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBSZWZQdHI8S2V5ZnJhbWVMaXN0PiA+IEtleWZyYW1lUnVsZU1hcDsK
KyAgICAgICAgS2V5ZnJhbWVSdWxlTWFwIG1fa2V5ZnJhbWVSdWxlTWFwOworICAgICAgICAKICAg
ICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBSZW5kZXJTdHlsZSogc3R5bGVOb3RZZXRBdmFpbGFi
bGUoKSB7IHJldHVybiBzX3N0eWxlTm90WWV0QXZhaWxhYmxlOyB9CiAKQEAgLTE4NSw5ICsyMDcs
MTQgQEAKICAgICAgICAgdm9pZCBtYXBGaWxsWFBvc2l0aW9uKEZpbGxMYXllciosIENTU1ZhbHVl
Kik7CiAgICAgICAgIHZvaWQgbWFwRmlsbFlQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwogCi0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvbkR1cmF0aW9uKFRyYW5zaXRpb24qLCBDU1NW
YWx1ZSopOwotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25SZXBlYXRDb3VudChUcmFuc2l0aW9u
KiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24o
VHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwRHVyYXRpb24oVHJhbnNp
dGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwVGltaW5nRnVuY3Rpb24oVHJhbnNp
dGlvbiosIENTU1ZhbHVlKik7CisKKyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EZWxheShUcmFu
c2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRpb25EaXJlY3Rpb24o
VHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uSXRlcmF0
aW9uQ291bnQoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uTmFtZShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKKyAgICAgICAgdm9pZCBtYXBBbmltYXRp
b25QbGF5U3RhdGUoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CiAgICAgICAgIHZvaWQgbWFwVHJh
bnNpdGlvblByb3BlcnR5KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwogCiAgICAgICAgIHZvaWQg
bWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqLCBOaW5lUGllY2VJbWFnZSYpOwpJbmRleDogV2Vi
Q29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1J1bGUuaAko
cmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDcgKzQxLDkgQEAKICAgICAgICAgSU1QT1JUX1JVTEUsCiAgICAgICAgIE1FRElBX1JV
TEUsCiAgICAgICAgIEZPTlRfRkFDRV9SVUxFLAotICAgICAgICBQQUdFX1JVTEUKKyAgICAgICAg
UEFHRV9SVUxFLAorICAgICAgICBXRUJLSVRfS0VZRlJBTUVTX1JVTEUsCisgICAgICAgIFdFQktJ
VF9LRVlGUkFNRV9SVUxFCiAgICAgfTsKIAogICAgIENTU1J1bGUoU3R5bGVCYXNlKiBwYXJlbnQp
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNiBAQAogI2luY2x1ZGUgIkNTU1Nl
bGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVT
aGVldC5oIgotI2luY2x1ZGUgIkNTU1RyYW5zZm9ybVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVW5p
Y29kZVJhbmdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVMaXN0LmgiCkBAIC02Miw2ICs2MSw5IEBACiAjaW5jbHVkZSAiUGFpci5oIgog
I2luY2x1ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIldl
YktpdENTU0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lc1J1bGUu
aCIKKyNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgPGtqcy9k
dG9hLmg+CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBAIC0yNTIsNiArMjU0LDIw
IEBACiAgICAgcmV0dXJuIHJ1bGUucmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPENTU1J1bGU+
IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCAqc2hlZXQsIGNvbnN0
IFN0cmluZyAmc3RyaW5nKQoreworICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OworICAgIAorICAg
IHNldHVwUGFyc2VyKCJALXdlYmtpdC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOwor
ICAgIAorICAgIENTU1BhcnNlciogb2xkID0gY3VycmVudFBhcnNlcjsKKyAgICBjdXJyZW50UGFy
c2VyID0gdGhpczsKKyAgICBjc3N5eXBhcnNlKHRoaXMpOworICAgIGN1cnJlbnRQYXJzZXIgPSBv
bGQ7CisgICAgCisgICAgcmV0dXJuIGtleWZyYW1lLnJlbGVhc2UoKTsKK30KKwogYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9u
LCBpbnQgX2lkLCBjb25zdCBTdHJpbmcgJnN0cmluZywgYm9vbCBfaW1wb3J0YW50KQogewogICAg
IHN0eWxlRWxlbWVudCA9IGRlY2xhcmF0aW9uLT5zdHlsZXNoZWV0KCk7CkBAIC0xMzI3LDcgKzEz
NDMsNiBAQAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25SZXBlYXRDb3VudDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlv
blRpbWluZ0Z1bmN0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJv
cGVydHk6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CkBAIC0xMzM3LDYgKzEzNTIs
MjAgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25EdXJhdGlvbjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9u
Q291bnQ6CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246IHsKKyAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiB2YWw7CisgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHByb3BJZCwgdmFs
KSkgeworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBv
cnRhbnQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFw
c2U6IHsKICAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Vi
a2l0TWFyZ2luVG9wQ29sbGFwc2UsCiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdp
bkJvdHRvbUNvbGxhcHNlIH07CkBAIC0xNTg1LDYgKzE2MTQsOCBAQAogICAgICAgICBjb25zdCBp
bnQgcHJvcGVydGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgsIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yIH07CiAgICAgICAgIHJldHVybiBwYXJzZVNo
b3J0aGFuZChwcm9wSWQsIHByb3BlcnRpZXMsIDIsIGltcG9ydGFudCk7CiAgICAgfQorICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAgIHJldHVybiBwYXJzZUFuaW1h
dGlvblNob3J0aGFuZChpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uOgogICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGltcG9ydGFu
dCk7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CkBAIC0xNzM5LDEwICsxNzcwLDcxIEBA
CiAgICAgICAgIGx2YWwgPSBydmFsOwogfQogCitib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRp
b25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCit7CisgICAgY29uc3QgaW50IHByb3BlcnRpZXNb
XSA9IHsgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1p
bmdGdW5jdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25EZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24gfTsKKyAg
ICBjb25zdCBpbnQgbnVtUHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihw
cm9wZXJ0aWVzWzBdKTsKKyAgICAKKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbik7CisgICAgCisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtu
dW1Qcm9wZXJ0aWVzXSA9IHsgZmFsc2UgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgZmFsc2Ug
YXMgbmVjZXNzYXJ5CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107
CisgICAgCisgICAgaW50IGk7CisgICAgd2hpbGUgKHZhbHVlTGlzdC0+Y3VycmVudCgpKSB7Cisg
ICAgICAgIFZhbHVlKiB2YWwgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHZh
bC0+dW5pdCA9PSBWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7CisgICAg
ICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMg
d2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOwor
ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCisgICAgICAgICAgICAgICAgICAgIGFk
ZFRyYW5zaXRpb25WYWx1ZSh2YWx1ZXNbaV0sIG5ldyBDU1NJbml0aWFsVmFsdWUodHJ1ZSkpOwor
ICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7
CisgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CisgICAgICAgICAgICAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWw7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQW5pbWF0aW9u
UHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJz
ZWRQcm9wZXJ0eVtpXSA9IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVHJh
bnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBpZiB3ZSBk
aWRuJ3QgZmluZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4KKyAgICAgICAgLy8gaW52
YWxpZCBzaG9ydGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0CisgICAgICAgIGlmICghZm91
bmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEZpbGwg
aW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCisgICAg
Zm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICBpZiAoIXBhcnNl
ZFByb3BlcnR5W2ldKQorICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwg
bmV3IENTU0luaXRpYWxWYWx1ZSh0cnVlKSk7CisgICAgfQorICAgIAorICAgIC8vIE5vdyBhZGQg
YWxsIG9mIHRoZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgorICAgIGZvciAoaSA9IDA7IGkgPCBudW1Q
cm9wZXJ0aWVzOyBpKyspCisgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVl
c1tpXS5yZWxlYXNlKCksIGltcG9ydGFudCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQp
CiB7Ci0gICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uUHJvcGVydHksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbiwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQgfTsK
KyAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRp
b25Qcm9wZXJ0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zaXRpb25EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiB9OwogICAgIGNvbnN0IGlu
dCBudW1Qcm9wZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gc2l6ZW9mKHByb3BlcnRpZXNb
MF0pOwogICAgIAogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbik7CkBAIC0yMjQwLDE3ICsyMzMyLDI3IEBACiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvbkR1
cmF0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25E
ZWxheSgpCiB7CiAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAg
aWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZS0+aWQpOwogICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZUaW1lLCBz
dHJpY3QpKQogICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKICAgICByZXR1
cm4gMDsKIH0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRp
b25SZXBlYXRDb3VudCgpCisgICAgCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlQW5pbWF0aW9uRGlyZWN0aW9uKCkKIHsKICAgICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3Qt
PmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVl
LT5pZCA9PSBDU1NWYWx1ZUFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh2YWx1ZS0+aWQpOworICAgIHJldHVybiAwOworfQorICAgIAorUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsdWUtPmlk
ID09IENTU1ZhbHVlSW5maW5pdGUpCiAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFs
dWUodmFsdWUtPmlkKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50ZWdlcnxGTm9uTmVn
LCBzdHJpY3QpKQpAQCAtMjI1OCw2ICsyMzYwLDM1IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK1Bh
c3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25OYW1lKCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPnVu
aXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUtPnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAgICAgICBpZiAodmFsdWUtPmlkID09IENT
U1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0cmluZywgIm5vbmUiKSkpIHsKKyAgICAg
ICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVOb25lKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFs
dWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6
OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxp
c3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlUnVubmluZyB8fCB2
YWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYXVzZWQpCisgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUtPmlkKTsKKyAgICByZXR1cm4gMDsKK30KKyAgICAKK1Bhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VEdXJhdGlvbigpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUs
IHN0cmljdCkpCisgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZW
YWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgIHJl
dHVybiAwOworfQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKFZh
bHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0KQogewogICAgIFZhbHVlKiB2ID0gYXJncy0+
Y3VycmVudCgpOwpAQCAtMjI3Niw3ICsyNDA3LDcgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rp
b24oKQogewogICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlm
ICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVh
ciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
RWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlSW5PdXQpCkBAIC0yMzIxLDYgKzI0
NTIsOTYgQEAKICAgICByZXR1cm4gMDsKIH0KIAorYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0
aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQoreworICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsKKyAgICBWYWx1ZSogdmFsOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAgYm9vbCBhbGxvd0NvbW1hID0gZmFsc2U7CisgICAgCisg
ICAgcmVzdWx0ID0gMDsKKyAgICAKKyAgICB3aGlsZSAoKHZhbCA9IHZhbHVlTGlzdC0+Y3VycmVu
dCgpKSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTsKKyAgICAgICAgaWYg
KGFsbG93Q29tbWEpIHsKKyAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgIT0gVmFsdWU6Ok9wZXJh
dG9yIHx8IHZhbC0+aVZhbHVlICE9ICcsJykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgIGFsbG93Q29tbWEg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
cHJvcElkKSB7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlv
bkRlbGF5OgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRl
bGF5KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9u
OgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUR1cmF0aW9uKCk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlvbjoKKyAgICAgICAg
ICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKTsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAg
ICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQo
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZToKKyAgICAg
ICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25OYW1lKCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICAgICAgICAg
ICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25QbGF5U3RhdGUoKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
TGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CisgICAgICAg
ICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
TGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFjdXJyVmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFsdWUgJiYg
IXZhbHVlcykgeworICAgICAgICAgICAgICAgIHZhbHVlcyA9IG5ldyBDU1NWYWx1ZUxpc3QoKTsK
KyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFsdWVzKQorICAgICAgICAg
ICAgICAgIHZhbHVlcy0+YXBwZW5kKGN1cnJWYWx1ZS5yZWxlYXNlKCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gY3VyclZhbHVlLnJlbGVhc2UoKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYWxsb3dDb21tYSA9IHRydWU7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIC8vIFdoZW4gcGFyc2luZyB0aGUgJ2FuaW1hdGlvbicgc2hvcnRoYW5kIHBy
b3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCisg
ICAgICAgIC8vIHByb3BlcnRpZXMuCisgICAgICAgIGlmIChpblNob3J0aGFuZCgpKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLT5sZW5n
dGgoKSkgeworICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVsZWFzZSgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHZhbHVlKSB7CisgICAgICAgIHJlc3VsdCA9IHZhbHVl
LnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKyAgICAKKyAgICAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0
eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCiB7CiAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gdmFsdWVzOwpAQCAtMjM0MSwxNyArMjU2MiwxMiBAQAogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAg
Y3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKTsKKyAgICAgICAgICAgICAgICAg
ICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnJW
YWx1ZSA9IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChjdXJyVmFsdWUpCi0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQo
KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKLSAgICAgICAgICAgICAgICAg
ICAgY3VyclZhbHVlID0gcGFyc2VUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUaW1pbmdGdW5jdGlvbigpOwogICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVM
aXN0LT5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzcyOCw0MiArMzk0
NCw2OSBAQAogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uSW5mbyB7CiBwdWJsaWM6CiAgICAgVHJh
bnNmb3JtT3BlcmF0aW9uSW5mbyhjb25zdCBQYXJzZVN0cmluZyYgbmFtZSkKLSAgICA6IG1fdHlw
ZShDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICA6IG1f
dHlwZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbikK
ICAgICAsIG1fYXJnQ291bnQoMSkKICAgICAsIG1fYWxsb3dTaW5nbGVBcmd1bWVudChmYWxzZSkK
ICAgICAsIG1fdW5pdChDU1NQYXJzZXI6OkZVbmtub3duKQogICAgIHsKLSAgICAgICAgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2FsZSgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1l
LCAic2NhbGV4KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2FsZXkoIikpIHsKKyAg
ICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2FsZSgiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAic2NhbGV4KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2Fs
ZXkoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNjYWxleigiKSkgewogICAgICAgICAg
ICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOwogICAgICAgICAgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJzY2FsZSgiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAg
bV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9u
OwogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNjYWxleCgi
KSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJh
bnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2NhbGV5KCIpKQorICAgICAgICAgICAgICAgIG1f
dHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb247
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3Jt
VmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRlKCIpKSB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVpUcmFuc2Zvcm1PcGVy
YXRpb247CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInJvdGF0
ZSgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRleCgiKSB8fCBlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAicm90YXRleSgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90
YXRleigiKSkgewogICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7CisgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInJvdGF0ZSgiKSkKKyAgICAgICAg
ICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3Jt
T3BlcmF0aW9uOworICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
InJvdGF0ZXgoIikpCisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRleSgiKSkKKyAgICAgICAgICAgICAgICBtX3R5
cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZTo6Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICAgICAgfSBlbHNlIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2tldygiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAic2tld3goIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNrZXd5KCIpKSB7CiAg
ICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKICAgICAgICAgICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2tldygiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUg
PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAg
ICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJh
dGlvbjsKICAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJza2V3
eCgiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hU
cmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgIG1fdHlwZSA9IENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9y
bU9wZXJhdGlvbjsKLSAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
dHJhbnNsYXRlKCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xhdGV4KCIpIHx8
IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xhdGV5KCIpKSB7CisgICAgICAgICAgICAg
ICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0
aW9uOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xh
dGUoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZXgoIikgfHwgZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZXkoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgInRyYW5zbGF0ZXooIikpIHsKICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rkxl
bmd0aCB8IENTU1BhcnNlcjo6RlBlcmNlbnQ7CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgInRyYW5zbGF0ZSgiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAg
ICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1P
cGVyYXRpb247CiAgICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
dHJhbnNsYXRleCgiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsK
KyAgICAgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xhdGV5
KCIpKQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIG1fdHlwZSA9IENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3Bl
cmF0aW9uOworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJtYXRyaXgoIikpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IENT
U1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICBt
X3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9u
OwogICAgICAgICAgICAgbV9hcmdDb3VudCA9IDExOwogICAgICAgICAgICAgbV91bml0ID0gQ1NT
UGFyc2VyOjpGTnVtYmVyOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJtYXRyaXgzZCgiKSkgeworICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgbV9hcmdD
b3VudCA9IDMxOworICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOworICAg
ICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xhdGUzZCgiKSkg
eworICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgbV9hcmdDb3VudCA9IDU7CisgICAg
ICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQYXJzZXI6OkZQZXJjZW50
OworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2FsZTNkKCIp
KSB7CisgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGUz
RFRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgIG1fYXJnQ291bnQgPSA1OworICAgICAg
ICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGTnVtYmVyOworICAgICAgICB9IGVsc2UgaWYgKGVx
dWFsSWdub3JpbmdDYXNlKG5hbWUsICJyb3RhdGUzZCgiKSkgeworICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOwor
ICAgICAgICAgICAgbV9hcmdDb3VudCA9IDc7CisgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJz
ZXI6OkZOdW1iZXI7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAic2NhbGUoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNrZXco
IikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZSgiKSkgewpAQCAtMzc3Miwx
NSArNDAxNSwxNSBAQAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7
IH0KKyAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAgICAgdW5zaWduZWQgYXJnQ291bnQoKSBj
b25zdCB7IHJldHVybiBtX2FyZ0NvdW50OyB9CiAgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0KCkg
Y29uc3QgeyByZXR1cm4gbV91bml0OyB9CiAKLSAgICBib29sIHVua25vd24oKSBjb25zdCB7IHJl
dHVybiBtX3R5cGUgPT0gQ1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRp
b247IH0KKyAgICBib29sIHVua25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KICAgICBib29s
IGhhc0NvcnJlY3RBcmdDb3VudCh1bnNpZ25lZCBhcmdDb3VudCkgeyByZXR1cm4gbV9hcmdDb3Vu
dCA9PSBhcmdDb3VudCB8fCAobV9hbGxvd1NpbmdsZUFyZ3VtZW50ICYmIGFyZ0NvdW50ID09IDEp
OyB9CiAKIHByaXZhdGU6Ci0gICAgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlv
blR5cGUgbV90eXBlOworICAgIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlIG1fdHlwZTsKICAgICB1bnNpZ25lZCBtX2FyZ0NvdW50OwogICAgIGJvb2wgbV9h
bGxvd1NpbmdsZUFyZ3VtZW50OwogICAgIENTU1BhcnNlcjo6VW5pdHMgbV91bml0OwpAQCAtMzc5
Myw3ICs0MDM2LDcgQEAKIAogICAgIC8vIFRoZSB0cmFuc2Zvcm0gaXMgYSBsaXN0IG9mIGZ1bmN0
aW9uYWwgcHJpbWl0aXZlcyB0aGF0IHNwZWNpZnkgdHJhbnNmb3JtIG9wZXJhdGlvbnMuICBXZSBj
b2xsZWN0IGEgbGlzdAogICAgIC8vIG9mIENTU1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2
YWx1ZSBzcGVjaWZpZXMgYSBzaW5nbGUgb3BlcmF0aW9uLgotICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0OworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBuZXcgQ1NTVmFsdWVMaXN0KHRydWUpOwogICAgIGZvciAoVmFsdWUqIHZhbHVlID0gdmFs
dWVMaXN0LT5jdXJyZW50KCk7IHZhbHVlOyB2YWx1ZSA9IHZhbHVlTGlzdC0+bmV4dCgpKSB7CiAg
ICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBWYWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5j
dGlvbikKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMzgxMiw3ICs0MDU1LDcgQEAKICAgICAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IENTU1RyYW5zZm9y
bVZhbHVlIGZvciB0aGlzIG9wZXJhdGlvbiBhbmQgYWRkIGl0IHRvIG91ciBsaXN0LgotICAgICAg
ICBDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBuZXcgQ1NTVHJhbnNmb3JtVmFs
dWUoaW5mby50eXBlKCkpOworICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNm
b3JtVmFsdWUgPSBuZXcgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoaW5mby50eXBlKCkpOwogICAg
ICAgICBsaXN0LT5hcHBlbmQodHJhbnNmb3JtVmFsdWUpOwogCiAgICAgICAgIC8vIFNuYWcgb3Vy
IHZhbHVlcy4KQEAgLTM4MjUsNyArNDA2OCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJl
bnQgdHJhbnNmb3JtIG9wZXJhdGlvbi4KLSAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hZGRW
YWx1ZShuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcykgYS0+dW5pdCkpOworICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcykgYS0+dW5pdCkpOwogCiAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAg
ICAgICAgICAgaWYgKCFhKQpAQCAtNDI1Niw2ICs0NDk5LDEzIEBACiAgICAgcmV0dXJuIGxpc3Q7
CiB9CiAKK1dlYktpdENTU0tleWZyYW1lc1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVz
UnVsZSgpCit7CisgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSA9IG5ldyBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKHN0eWxlRWxlbWVudCk7CisgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMu
YXBwZW5kKHJ1bGUpOworICAgIHJldHVybiBydWxlOworfQorCiBDU1NSdWxlKiBDU1NQYXJzZXI6
OmNyZWF0ZVN0eWxlUnVsZShDU1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAgICAgQ1NTU3R5bGVS
dWxlKiBydWxlID0gMDsKQEAgLTQyNzgsNiArNDUyOCwxNiBAQAogICAgIHJldHVybiBydWxlOwog
fQogCitXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVSdWxl
KGZsb2F0IGtleSkKK3sKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lID0gbmV3
IFdlYktpdENTU0tleWZyYW1lUnVsZShzdHlsZUVsZW1lbnQpOworICAgIG1fcGFyc2VkU3R5bGVP
YmplY3RzLmFwcGVuZChrZXlmcmFtZSk7CisgICAga2V5ZnJhbWUtPnNldEtleShrZXkpOworICAg
IGtleWZyYW1lLT5zZXREZWNsYXJhdGlvbihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24o
MCwgcGFyc2VkUHJvcGVydGllcywgbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIGNsZWFyUHJv
cGVydGllcygpOworICAgIHJldHVybiBrZXlmcmFtZTsKK30KKwogc3RhdGljIGludCBjc3NQcm9w
ZXJ0eUlEKGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAg
ICBpZiAoIWxlbmd0aCkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9jc3MvQ1NTR3JhbW1hci55CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRp
YUxpc3QuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAKQEAgLTY3LDYgKzY5LDkgQEAKICAgICBWYWx1ZSB2YWx1ZTsKICAgICBWYWx1
ZUxpc3QqIHZhbHVlTGlzdDsKICAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBtZWRpYVF1ZXJ5
RXhwTGlzdDsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZTsKKyAgICBX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBrZXlmcmFtZXNSdWxlOworICAgIGZsb2F0IHZhbDsKIH0K
IAogJXsKQEAgLTEwNCw2ICsxMDksNyBAQAogJXRva2VuIElNUE9SVF9TWU0KICV0b2tlbiBQQUdF
X1NZTQogJXRva2VuIE1FRElBX1NZTQorJXRva2VuIFdFQktJVF9LRVlGUkFNRVNfU1lNCiAldG9r
ZW4gRk9OVF9GQUNFX1NZTQogJXRva2VuIENIQVJTRVRfU1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZ
TQpAQCAtMTUwLDYgKzE1Niw3IEBACiAldHlwZSA8cnVsZT4gcnVsZXNldAogJXR5cGUgPHJ1bGU+
IHZhbGlkX3J1bGVfb3JfaW1wb3J0CiAldHlwZSA8cnVsZT4gbWVkaWEKKyV0eXBlIDxydWxlPiBr
ZXlmcmFtZXMKICV0eXBlIDxydWxlPiBpbXBvcnQKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8
cnVsZT4gZm9udF9mYWNlCkBAIC0xNzQsNiArMTgxLDEwIEBACiAldHlwZSA8bWVkaWFRdWVyeT4g
bWVkaWFfcXVlcnkKICV0eXBlIDxtZWRpYVF1ZXJ5UmVzdHJpY3Rvcj4gbWF5YmVfbWVkaWFfcmVz
dHJpY3RvcgogJXR5cGUgPHZhbHVlTGlzdD4gbWF5YmVfbWVkaWFfdmFsdWUKKyV0eXBlIDxzdHJp
bmc+IGtleWZyYW1lX25hbWUKKyV0eXBlIDxrZXlmcmFtZXNSdWxlPiBrZXlmcmFtZXNfcnVsZQor
JXR5cGUgPGtleWZyYW1lUnVsZT4ga2V5ZnJhbWVfcnVsZQorJXR5cGUgPHZhbD4ga2V5CiAldHlw
ZSA8bWVkaWFRdWVyeUV4cD4gbWVkaWFfcXVlcnlfZXhwCiAldHlwZSA8bWVkaWFRdWVyeUV4cExp
c3Q+IG1lZGlhX3F1ZXJ5X2V4cF9saXN0CiAldHlwZSA8bWVkaWFRdWVyeUV4cExpc3Q+IG1heWJl
X2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdApAQCAtMzE2LDYgKzMyNyw3IEBACiAgIHwgbWVkaWEK
ICAgfCBwYWdlCiAgIHwgZm9udF9mYWNlCisgIHwga2V5ZnJhbWVzCiAgIDsKIAogcnVsZToKQEAg
LTQ3NSw2ICs0ODcsNTEgQEAKICAgfQogICA7CiAKK2tleWZyYW1lczoKKyAgICBXRUJLSVRfS0VZ
RlJBTUVTX1NZTSBtYXliZV9zcGFjZSBrZXlmcmFtZV9uYW1lIG1heWJlX3NwYWNlICd7JyBtYXli
ZV9zcGFjZSBrZXlmcmFtZXNfcnVsZSAnfScgeworICAgICAgICAkJCA9ICQ3OworICAgICAgICBQ
YXJzZVN0cmluZyYgc3RyID0gJDM7CisgICAgICAgIHN0ci5sb3dlcigpOworICAgICAgICAkNy0+
c2V0TmFtZShTdHJpbmcoc3RyLmNoYXJhY3RlcnMsIHN0ci5sZW5ndGgpKTsKKyAgICB9CisgICAg
OworCitrZXlmcmFtZV9uYW1lOgorICAgIElERU5UCisgICAgfCBTVFJJTkcKKyAgICA7CisKK2tl
eWZyYW1lc19ydWxlOgorICAgIC8qIGVtcHR5ICovIHsgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJz
ZXIqPihwYXJzZXIpLT5jcmVhdGVLZXlmcmFtZXNSdWxlKCk7IH0KKyAgICB8IGtleWZyYW1lc19y
dWxlIGtleWZyYW1lX3J1bGUgbWF5YmVfc3BhY2UgeworICAgICAgICAkJCA9ICQxOworICAgICAg
ICBpZiAoJDIpCisgICAgICAgICAgICAkJC0+aW5zZXJ0KCQyKTsKKyAgICB9CisgICAgOworCitr
ZXlmcmFtZV9ydWxlOgorICAgIGtleSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFy
YXRpb25fbGlzdCAnfScgeworICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBh
cnNlciktPmNyZWF0ZUtleWZyYW1lUnVsZSgkMSk7CisgICAgfQorICAgIDsKKwora2V5OgorICAg
IFBFUkNFTlRBR0UgeyAkJCA9IChmbG9hdCkgJDE7IH0KKyAgICB8IElERU5UIHsKKyAgICAgICAg
JCQgPSAtMTsKKyAgICAgICAgUGFyc2VTdHJpbmcmIHN0ciA9ICQxOworICAgICAgICBzdHIubG93
ZXIoKTsKKyAgICAgICAgU3RyaW5nIHMgPSBTdHJpbmcoc3RyLmNoYXJhY3RlcnMsIHN0ci5sZW5n
dGgpOworICAgICAgICBpZiAocyA9PSAiZnJvbSIpCisgICAgICAgICAgICAkJCA9IDA7CisgICAg
ICAgIGVsc2UgaWYgKHMgPT0gInRvIikKKyAgICAgICAgICAgICQkID0gMTAwOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBZWUVSUk9SOworICAgIH0KKyAgICA7CisKIC8qCiBwYWdlOgogICAg
IFBBR0VfU1lNIG1heWJlX3NwYWNlIElERU5UPyBwc2V1ZG9fcGFnZT8gbWF5YmVfc3BhY2UKSW5k
ZXg6IFdlYkNvcmUvY3NzL3Rva2VuaXplci5mbGV4Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L3Rva2VuaXplci5mbGV4CShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3NzL3Rva2VuaXpl
ci5mbGV4CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBACiAiQC13ZWJraXQtZGVjbHMi
ICAgICAgICB7eXlUb2sgPSBXRUJLSVRfREVDTFNfU1lNOyByZXR1cm4geXlUb2s7IH0KICJALXdl
YmtpdC12YWx1ZSIgICAgICAgIHt5eVRvayA9IFdFQktJVF9WQUxVRV9TWU07IHJldHVybiB5eVRv
azsgfQogIkAtd2Via2l0LW1lZGlhcXVlcnkiICAge0JFR0lOKG1lZGlhcXVlcnkpOyB5eVRvayA9
IFdFQktJVF9NRURJQVFVRVJZX1NZTTsgcmV0dXJuIHl5VG9rOyB9CisiQC13ZWJraXQta2V5ZnJh
bWVzIiAgICB7eXlUb2sgPSBXRUJLSVRfS0VZRlJBTUVTX1NZTTsgcmV0dXJuIHl5VG9rOyB9CiAK
ICIhInt3fSJpbXBvcnRhbnQiICAgICAgIHt5eVRvayA9IElNUE9SVEFOVF9TWU07IHJldHVybiB5
eVRvazt9CiAKSW5kZXg6IFdlYkNvcmUvY3NzL1N0eWxlQmFzZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL1N0eWxlQmFzZS5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3NzL1N0
eWxlQmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBACiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1N0eWxlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0NoYXJzZXRSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBi
b29sIGlzSW1wb3J0UnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc0tleWZyYW1lc1J1bGUoKSB7IHJldHVybiBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNLZXlmcmFtZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJv
b2wgaXNNZWRpYVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNGb250RmFjZVJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNQYWdlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQcm9w
ZXJ0eU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMu
aW4JKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgko
d29ya2luZyBjb3B5KQpAQCAtMTQyLDExICsxNDIsMTQgQEAKIHdvcmQtd3JhcAogei1pbmRleAog
em9vbQotLXdlYmtpdC10cmFuc2l0aW9uCi0td2Via2l0LXRyYW5zaXRpb24tZHVyYXRpb24KLS13
ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQotLXdlYmtpdC10cmFuc2l0aW9uLXJlcGVhdC1jb3Vu
dAotLXdlYmtpdC10cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbgorLXdlYmtpdC1hbmltYXRpb24K
Ky13ZWJraXQtYW5pbWF0aW9uLWRlbGF5Cistd2Via2l0LWFuaW1hdGlvbi1kaXJlY3Rpb24KKy13
ZWJraXQtYW5pbWF0aW9uLWR1cmF0aW9uCistd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291
bnQKKy13ZWJraXQtYW5pbWF0aW9uLW5hbWUKKy13ZWJraXQtYW5pbWF0aW9uLXBsYXktc3RhdGUK
Ky13ZWJraXQtYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbgogLXdlYmtpdC1hcHBlYXJhbmNlCiAt
d2Via2l0LWJhY2tncm91bmQtY2xpcAogLXdlYmtpdC1iYWNrZ3JvdW5kLWNvbXBvc2l0ZQpAQCAt
MjI1LDYgKzIyOCwxMSBAQAogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luCiAtd2Via2l0LXRyYW5z
Zm9ybS1vcmlnaW4teAogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXkKKy13ZWJraXQtdHJhbnNp
dGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLWRlbGF5Cistd2Via2l0LXRyYW5zaXRpb24tZHVyYXRp
b24KKy13ZWJraXQtdHJhbnNpdGlvbi1wcm9wZXJ0eQorLXdlYmtpdC10cmFuc2l0aW9uLXRpbWlu
Zy1mdW5jdGlvbgogLXdlYmtpdC11c2VyLWRyYWcKIC13ZWJraXQtdXNlci1tb2RpZnkKIC13ZWJr
aXQtdXNlci1zZWxlY3QKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1J1bGUuaWRsCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU1J1bGUuaWRsCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUv
Y3NzL0NTU1J1bGUuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IE1FRElBX1JVTEUgPSA0OwogICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBGT05UX0ZBQ0VfUlVMRSA9IDU7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IFBBR0VfUlVMRSA9IDY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFdFQktJVF9L
RVlGUkFNRVNfUlVMRSA9IDc7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFdFQktJVF9L
RVlGUkFNRV9SVUxFID0gODsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
c2hvcnQgICB0eXBlOwogCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNs
YXJhdGlvbi5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1MSw2ICsxMDUxLDcgQEAK
ICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVTdHlsZToKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVRleHRVbmRlcmxpbmVXaWR0aDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVVuaWNvZGVSYW5nZTogLy8gT25seSB1c2VkIGluIEBmb250LWZhY2UgcnVsZXMuCisgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1czoKICAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdENvbHVtbnM6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5S
dWxlOgpAQCAtMTA2Nyw3ICsxMDY4LDYgQEAKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb246CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVy
YXRpb246CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6
Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6CiAg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246CiAg
ICAgICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGFyZSB1bmltcGxlbWVudGVkLgogICAgICAg
ICAgICAgYnJlYWs7CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQAogICAgIGNsYXNz
IE1lZGlhUXVlcnlFeHA7CiAgICAgY2xhc3MgU3R5bGVCYXNlOwogICAgIGNsYXNzIFN0eWxlTGlz
dDsKKyAgICBjbGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CisgICAgY2xhc3MgV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTsKICAgICBzdHJ1Y3QgRnVuY3Rpb247CiAKICAgICBzdHJ1Y3QgUGFyc2VT
dHJpbmcgewpAQCAtMTA1LDYgKzEwNyw3IEBACiAKICAgICAgICAgdm9pZCBwYXJzZVNoZWV0KENT
U1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxl
PiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICBQYXNz
UmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQqLCBjb25zdCBT
dHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAg
ICBzdGF0aWMgYm9vbCBwYXJzZUNvbG9yKFJHQkEzMiYgY29sb3IsIGNvbnN0IFN0cmluZyYsIGJv
b2wgc3RyaWN0ID0gZmFsc2UpOwogICAgICAgICBib29sIHBhcnNlQ29sb3IoQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24qLCBjb25zdCBTdHJpbmcmKTsKQEAgLTEzNywxMSArMTQwLDIzIEBACiAg
ICAgICAgIHZvaWQgYWRkRmlsbFZhbHVlKFJlZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQ
dHI8Q1NTVmFsdWU+IHJ2YWwpOwogCiAgICAgICAgIHZvaWQgYWRkVHJhbnNpdGlvblZhbHVlKFJl
ZlB0cjxDU1NWYWx1ZT4mIGx2YWwsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHJ2YWwpOwotICAgICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25EdXJhdGlvbigpOwotICAgICAg
ICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3VudCgpOwotICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigp
OworICAgICAgICAKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VEdXJhdGlvbigp
OworICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRpbWluZ0Z1bmN0aW9uKCk7CisK
KyAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRpb25EZWxheSgpOworICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOworICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCk7
CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uTmFtZSgpOworICAg
ICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOworCisg
ICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KCk7CisK
ICAgICAgICAgYm9vbCBwYXJzZVRpbWluZ0Z1bmN0aW9uVmFsdWUoVmFsdWVMaXN0KiYgYXJncywg
ZG91YmxlJiByZXN1bHQpOwotICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVRyYW5z
aXRpb25Qcm9wZXJ0eSgpOworCisgICAgICAgIGJvb2wgcGFyc2VBbmltYXRpb25Qcm9wZXJ0eShp
bnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CisgICAgICAgIGJvb2wgcGFyc2VBbmltYXRp
b25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOworCiAgICAgICAgIGJvb2wgcGFyc2VUcmFuc2l0
aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAgICAgICBib29s
IHBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCk7CiAgICAgICAgIApAQCAt
MjA1LDYgKzIyMCw4IEBACiAgICAgICAgIENTU1J1bGVMaXN0KiBjcmVhdGVSdWxlTGlzdCgpOwog
ICAgICAgICBDU1NSdWxlKiBjcmVhdGVTdHlsZVJ1bGUoQ1NTU2VsZWN0b3IqKTsKICAgICAgICAg
Q1NTUnVsZSogY3JlYXRlRm9udEZhY2VSdWxlKCk7CisgICAgICAgIFdlYktpdENTU0tleWZyYW1l
UnVsZSogY3JlYXRlS2V5ZnJhbWVSdWxlKGZsb2F0IGtleSk7CisgICAgICAgIFdlYktpdENTU0tl
eWZyYW1lc1J1bGUqIGNyZWF0ZUtleWZyYW1lc1J1bGUoKTsKIAogICAgICAgICBNZWRpYVF1ZXJ5
RXhwKiBjcmVhdGVGbG9hdGluZ01lZGlhUXVlcnlFeHAoY29uc3QgQXRvbWljU3RyaW5nJiwgVmFs
dWVMaXN0Kik7CiAgICAgICAgIE1lZGlhUXVlcnlFeHAqIHNpbmtGbG9hdGluZ01lZGlhUXVlcnlF
eHAoTWVkaWFRdWVyeUV4cCopOwpAQCAtMjIwLDYgKzIzNyw3IEBACiAgICAgICAgIGludCBpZDsK
ICAgICAgICAgU3R5bGVMaXN0KiBzdHlsZUVsZW1lbnQ7CiAgICAgICAgIFJlZlB0cjxDU1NSdWxl
PiBydWxlOworICAgICAgICBSZWZQdHI8Q1NTUnVsZT4ga2V5ZnJhbWU7CiAgICAgICAgIE1lZGlh
UXVlcnkqIG1lZGlhUXVlcnk7CiAgICAgICAgIFZhbHVlTGlzdCogdmFsdWVMaXN0OwogICAgICAg
ICBDU1NQcm9wZXJ0eSoqIHBhcnNlZFByb3BlcnRpZXM7CkluZGV4OiBXZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2Uu
Y3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBACiAgICAgICAgIG1fZG9jdW1lbnQtPmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsKICNlbmRpZgogCi0gICAg
bWFpbkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCktPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICBtYWluRnJhbWUtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVzdW1lQW5pbWF0aW9ucyhtX2Rv
Y3VtZW50LmdldCgpKTsKIAogICAgIG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldE1vdXNl
UHJlc3NOb2RlKG1vdXNlUHJlc3NOb2RlKCkpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcGFn
ZS9BbmltYXRpb25Db250cm9sbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FuaW1h
dGlvbkNvbnRyb2xsZXIuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL3BhZ2UvQW5pbWF0
aW9uQ29udHJvbGxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOworY2xhc3Mg
RG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFJlbmRlck9iamVjdDsKIGNsYXNzIFJlbmRl
clN0eWxlOwpAQCAtNDIsMTQgKzQzLDI1IEBACiAgICAgQW5pbWF0aW9uQ29udHJvbGxlcihGcmFt
ZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVyKCk7CiAgICAgCi0gICAgdm9pZCBjYW5jZWxJ
bXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7Ci0gICAgUmVuZGVyU3R5bGUqIHVwZGF0
ZUltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5bGUp
OworICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICBSZW5kZXJT
dHlsZSogdXBkYXRlQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogbmV3U3R5
bGUpOwogICAgIAotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIHJlc3Vt
ZUFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShSZW5kZXJPYmpl
Y3QqIG9iaiwgZG91YmxlIHQpOworICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0YXJ0VGltZShSZW5k
ZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5LCBkb3VibGUgdCk7CiAgICAgCisgICAgYm9vbCBp
c0FuaW1hdGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3Bl
cnR5KSBjb25zdDsKKyAgICAKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBk
b2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCk7
CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIAorICAgIHZvaWQgc3RhcnRV
cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7CisgICAgCisgICAgdm9pZCBzdHlsZUlzU2V0dXAo
KTsKKyAgICAKIHByaXZhdGU6CiAgICAgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fZGF0
YTsKKyAgICAKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJ
KHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSAiQW5pbWF0aW9uQ29u
dHJvbGxlci5oIgogCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNT
dHJpbmcuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgpAQCAtNDMsNiArNDUsMTIgQEAKIAogc3RhdGljIGNvbnN0IGRv
dWJsZSBjQW5pbWF0aW9uVGltZXJEZWxheSA9IDAuMDI1OwogCitzdGF0aWMgdm9pZCBzZXRDaGFu
Z2VkKE5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKCFub2RlIHx8IChub2RlLT5kb2N1bWVudCgp
ICYmICFub2RlLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKSk7CisgICAgbm9kZS0+c2V0Q2hh
bmdlZChBbmltYXRhYmxlU3R5bGVDaGFuZ2UpOworfQorCiAvLyBUaGUgZXBzaWxvbiB2YWx1ZSB3
ZSBwYXNzIHRvIFVuaXRCZXppZXI6OnNvbHZlIGdpdmVuIHRoYXQgdGhlIGFuaW1hdGlvbiBpcyBn
b2luZyB0byBydW4gb3ZlciB8ZHVyfCBzZWNvbmRzLiBUaGUgbG9uZ2VyIHRoZQogLy8gYW5pbWF0
aW9uLCB0aGUgbW9yZSBwcmVjaXNpb24gd2UgbmVlZCBpbiB0aGUgdGltaW5nIGZ1bmN0aW9uIHJl
c3VsdCB0byBhdm9pZCB1Z2x5IGRpc2NvbnRpbnVpdGllcy4KIHN0YXRpYyBpbmxpbmUgZG91Ymxl
IHNvbHZlRXBzaWxvbihkb3VibGUgZHVyYXRpb24pIHsgcmV0dXJuIDEuIC8gKDIwMC4gKiBkdXJh
dGlvbik7IH0KQEAgLTU1LDEwOCArNjMsOTAzIEBACiAgICAgcmV0dXJuIGJlemllci5zb2x2ZSh0
LCBzb2x2ZUVwc2lsb24oZHVyYXRpb24pKTsKIH0KIAotY2xhc3MgQ29tcG9zaXRlSW1wbGljaXRB
bmltYXRpb247CisjcHJhZ21hIG1hcmsgLQogCi1jbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1
YmxpYyBOb25jb3B5YWJsZSB7CitjbGFzcyBDb21wb3NpdGVBbmltYXRpb247CitjbGFzcyBBbmlt
YXRpb25CYXNlOworCitjbGFzcyBBbmltYXRpb25UaW1lckJhc2UgewogcHVibGljOgotICAgIElt
cGxpY2l0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qKTsKLSAgICB+SW1wbGljaXRBbmltYXRp
b24oKTsKKyAgICBBbmltYXRpb25UaW1lckJhc2UoQW5pbWF0aW9uQmFzZSogYW5pbSkKKyAgICA6
IG1fdGltZXIodGhpcywgJkFuaW1hdGlvblRpbWVyQmFzZTo6dGltZXJGaXJlZCkKKyAgICAsIG1f
YW5pbShhbmltKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CisgICAg
fQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRpbWVyQmFzZSgpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRpbWVvdXQ9MCkKKyAgICB7CisgICAgICAgIG1f
dGltZXIuc3RhcnRPbmVTaG90KHRpbWVvdXQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNhbmNl
bFRpbWVyKCkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RvcCgpOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikgPSAw
OworICAgIAorcHJpdmF0ZToKKyAgICBUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+IG1fdGltZXI7
CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQW5pbWF0aW9uQmFzZSogbV9hbmltOworfTsKIAotICAg
IHZvaWQgYW5pbWF0ZShDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiosIFJlbmRlck9iamVjdCos
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVu
ZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKTsKK2NsYXNzIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hl
ciA6IHB1YmxpYyBBbmltYXRpb25UaW1lckJhc2UgeworcHVibGljOgorICAgIEFuaW1hdGlvbkV2
ZW50RGlzcGF0Y2hlcihBbmltYXRpb25CYXNlKiBhbmltKSAKKyAgICA6IEFuaW1hdGlvblRpbWVy
QmFzZShhbmltKQorICAgICwgbV9wcm9wZXJ0eSgtMSkKKyAgICAsIG1fcmVzZXQoZmFsc2UpCisg
ICAgLCBtX2VsYXBzZWRUaW1lKC0xKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
QW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3RhcnRUaW1lcihIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICAg
ICAgbV9lbGVtZW50ID0gZWxlbWVudDsKKyAgICAgICAgbV9uYW1lID0gbmFtZTsKKyAgICAgICAg
bV9wcm9wZXJ0eSA9IHByb3BlcnR5OworICAgICAgICBtX3Jlc2V0ID0gcmVzZXQ7CisgICAgICAg
IG1fZXZlbnRUeXBlID0gZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBzZWRUaW1lID0gZWxhcHNl
ZFRpbWU7CisgICAgICAgIEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRUaW1lcigpOworICAgIH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJh
c2U+Kik7CisgICAgCitwcml2YXRlOgorICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9lbGVtZW50
OworICAgIEF0b21pY1N0cmluZyBtX25hbWU7CisgICAgaW50IG1fcHJvcGVydHk7CisgICAgYm9v
bCBtX3Jlc2V0OworICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsKKyAgICBkb3VibGUgbV9l
bGFwc2VkVGltZTsKK307CiAKLSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCosIFJlbmRlclN0
eWxlKiBmcm9tLCBSZW5kZXJTdHlsZSogdG8pOworY2xhc3MgQW5pbWF0aW9uVGltZXJDYWxsYmFj
ayA6IHB1YmxpYyBBbmltYXRpb25UaW1lckJhc2UgeworcHVibGljOgorICAgIEFuaW1hdGlvblRp
bWVyQ2FsbGJhY2soQW5pbWF0aW9uQmFzZSogYW5pbSkgCisgICAgOiBBbmltYXRpb25UaW1lckJh
c2UoYW5pbSkKKyAgICAsIG1fZWxhcHNlZFRpbWUoMCkKKyAgICB7IH0KKyAgICB2aXJ0dWFsIH5B
bmltYXRpb25UaW1lckNhbGxiYWNrKCkgeyB9CiAgICAgCi0gICAgZG91YmxlIHByb2dyZXNzKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJC
YXNlPiopOworICAgIAorICAgIHZvaWQgc3RhcnRUaW1lcihkb3VibGUgdGltZW91dCwgY29uc3Qg
QXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICB7CisgICAg
ICAgIG1fZXZlbnRUeXBlID0gZXZlbnRUeXBlOworICAgICAgICBtX2VsYXBzZWRUaW1lID0gZWxh
cHNlZFRpbWU7CisgICAgICAgIEFuaW1hdGlvblRpbWVyQmFzZTo6c3RhcnRUaW1lcih0aW1lb3V0
KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEF0b21pY1N0cmluZyBtX2V2ZW50VHlwZTsK
KyAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsKK307CiAKLSAgICBib29sIGZpbmlzaGVkKCkgY29u
c3QgeyByZXR1cm4gbV9maW5pc2hlZDsgfQorI3ByYWdtYSBtYXJrIC0KKyAgICAKK2NsYXNzIElt
cGxpY2l0QW5pbWF0aW9uOworY2xhc3MgS2V5ZnJhbWVBbmltYXRpb247CitjbGFzcyBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTsKIAorY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uIDogcHVibGlj
IE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBDb21wb3NpdGVBbmltYXRpb24oYm9vbCBzdXNw
ZW5kZWQsIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBhbmltYXRpb25Db250cm9sbGVyKQor
ICAgIDogbV9zdXNwZW5kZWQoc3VzcGVuZGVkKQorICAgICwgbV9hbmltYXRpb25Db250cm9sbGVy
KGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgLCBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMoMCkK
KyAgICB7IH0KKyAgICAKKyAgICB+Q29tcG9zaXRlQW5pbWF0aW9uKCkKKyAgICB7CisgICAgICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX3RyYW5zaXRpb25zKTsKKyAgICAgICAgZGVsZXRlQWxsVmFsdWVz
KG1fa2V5ZnJhbWVBbmltYXRpb25zKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyU3R5bGUqIGFu
aW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5
bGUqIHRhcmdldFN0eWxlKTsKKyAgICAKKyAgICB2b2lkIHNldEFuaW1hdGluZyhib29sIGluQW5p
bWF0aW5nKTsKKyAgICBib29sIGFuaW1hdGluZygpOworICAgIAorICAgIGJvb2wgaGFzQW5pbWF0
aW9uRm9yUHJvcGVydHkoaW50IHByb3ApIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlvbnMuY29u
dGFpbnMocHJvcCk7IH0KKyAgICAKKyAgICB2b2lkIHJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2Jq
ZWN0Kik7CisgICAgdm9pZCByZXNldEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgCisg
ICAgdm9pZCBjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIAor
ICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRUaW1lKGRvdWJsZSB0KTsKKyAgICB2b2lkIHNldFRy
YW5zaXRpb25TdGFydFRpbWUoaW50IHByb3BlcnR5LCBkb3VibGUgdCk7CisgICAgCisgICAgdm9p
ZCBzdXNwZW5kQW5pbWF0aW9ucygpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOworICAg
IGJvb2wgc3VzcGVuZGVkKCkgY29uc3QgICAgICB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQorICAg
IAorICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsKKyAg
ICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KTsK
KyAgICAKKyAgICB2b2lkIHN0eWxlSXNTZXR1cCgpOworICAgIAorICAgIGJvb2wgaXNBbmltYXRp
bmdQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorICAgIHZvaWQgc2V0V2FpdGlu
Z0ZvclN0eWxlSXNTZXR1cChib29sIHdhaXRpbmcpOworcHJvdGVjdGVkOgorICAgIHZvaWQgdXBk
YXRlVHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICB2b2lkIHVwZGF0ZUtleWZy
YW1lQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIAorICAgIGludCBmaW5kS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKTsKKyAgICAKIHByaXZhdGU6
Ci0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCi0gICAgUmVuZGVy
U3R5bGUqIG1fZnJvbVN0eWxlOwotICAgIFJlbmRlclN0eWxlKiBtX3RvU3R5bGU7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPiBDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOworICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAgICBtX3RyYW5zaXRp
b25zOworICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+ICBtX2tleWZyYW1lQW5pbWF0aW9u
czsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgbV9zdXNwZW5kZWQ7CisgICAgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKKyAgICB1aW50
MzJfdCAgICAgICAgICAgICAgICAgICAgbV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzOworfTsKIAot
ICAgIGludCBtX3Byb3BlcnR5OwotICAgIFRpbWluZ0Z1bmN0aW9uIG1fZnVuY3Rpb247Ci0gICAg
ZG91YmxlIG1fZHVyYXRpb247CisjcHJhZ21hIG1hcmsgLQogCi0gICAgaW50IG1fcmVwZWF0Q291
bnQ7CitjbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKK3B1YmxpYzoK
KyAgICBBbmltYXRpb25CYXNlKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pOyAgICAKKyAgICB2
aXJ0dWFsIH5BbmltYXRpb25CYXNlKCkKKyAgICB7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9
PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+
c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cChmYWxzZSk7CisgICAgfQorICAgIAorICAgIFJlbmRl
ck9iamVjdCogcmVuZGVyZXIoKSBjb25zdCB7IHJldHVybiBtX29iamVjdDsgfQorICAgIGRvdWJs
ZSBzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0VGltZTsgfQorICAgIGRvdWJsZSBk
dXJhdGlvbigpIGNvbnN0ICB7IHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsgfQorICAg
IAorICAgIHZvaWQgY2FuY2VsVGltZXJzKCkKKyAgICB7CisgICAgICAgIG1fYW5pbWF0aW9uVGlt
ZXJDYWxsYmFjay5jYW5jZWxUaW1lcigpOworICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlzcGF0
Y2hlci5jYW5jZWxUaW1lcigpOworICAgIH0KKyAgICAKKyAgICAvLyBBbmltYXRpb25zIGFuZCBU
cmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhl
IFNUQVJURUQgc3RhdGUKKyAgICAvLyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5
IG9yIG1heSBub3QgcmVxdWlyZSBkZWZlcnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4K
KyAgICAvLyBJZiBzbywgd2Ugc3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2Ug
aXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4KKyAgICAvLyBPdGhl
cndpc2UsIHdlIHVzZSB0aGUgY3VycmVudCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBp
bW1lZGlhdGVseSB0byB0aGUgTE9PUElORyBvcgorICAgIC8vIEVORElORyBzdGF0ZS4KKyAgICBl
bnVtIEFuaW1TdGF0ZSB7IAorICAgICAgICBTVEFURV9ORVcsICAgICAgICAgICAgICAgICAgICAg
IC8vIGFuaW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVubmluZyB5ZXQKKyAg
ICAgICAgU1RBVEVfU1RBUlRfV0FJVF9USU1FUiwgICAgICAgICAvLyBzdGFydCB0aW1lciBydW5u
aW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VU
VVAsICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFuaW1hdGlv
bnMKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSwgICAgICAvLyBhbmltYXRpb24g
c3RhcnRlZCwgd2FpdGluZyBmb3IgcmVzcG9uc2UKKyAgICAgICAgU1RBVEVfTE9PUElORywgICAg
ICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGxv
b3AgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9FTkRJTkcs
ICAgICAgICAgICAgICAgICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmlu
ZywgZW5kIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAgU1RBVEVfUEFV
U0VEX1dBSVRfVElNRVIsICAgICAgICAvLyBhbmltYXRpb24gaW4gcGF1c2UgbW9kZSB3aGVuIGFu
aW1hdGlvbiBzdGFydGVkCisgICAgICAgIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFLCAgICAg
Ly8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCisgICAgICAgIFNUQVRF
X1BBVVNFRF9SVU4sICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIExP
T1BJTkcgb3IgRU5ESU5HIHN0YXRlCisgICAgICAgIFNUQVRFX0RPTkUgICAgICAgICAgICAgICAg
ICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5kIHJlbW92ZWQK
KyAgICB9OworICAgIAorICAgIGVudW0gQW5pbVN0YXRlSW5wdXQgeworICAgICAgICBTVEFURV9J
TlBVVF9NQUtFX05FVywgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3IGZyb20gYW55IHN0
YXRlCisgICAgICAgIFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgICAgLy8gYW5pbWF0aW9u
IHJlcXVlc3RzIGEgc3RhcnQKKyAgICAgICAgU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04s
ICAvLyBmb3JjZSBhIHJlc3RhcnQgZnJvbSBhbnkgc3RhdGUKKyAgICAgICAgU1RBVEVfSU5QVVRf
U1RBUlRfVElNRVJfRklSRUQsICAvLyBzdGFydCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9J
TlBVVF9TVFlMRV9TRVRVUCwgICAgICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFy
dCBhbmltYXRpbmcKKyAgICAgICAgU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsICAgICAvLyBt
X3N0YXJ0VGltZSB3YXMgc2V0CisgICAgICAgIFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQs
ICAgLy8gbG9vcCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9FTkRfVElNRVJfRklS
RUQsICAgIC8vIGVuZCB0aW1lciBmaXJlZAorICAgICAgICBTVEFURV9JTlBVVF9QQVVTRV9PVkVS
UklERSwgICAgIC8vIHBhdXNlIGFuIGFuaW1hdGlvbiBkdWUgdG8gb3ZlcnJpZGUKKyAgICAgICAg
U1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFLCAgICAvLyByZXN1bWUgYW4gb3ZlcnJpZGRlbiBh
bmltYXRpb24KKyAgICAgICAgU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HLCAvLyBwbGF5
IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5nCisgICAgICAgIFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVf
UEFVU0VELCAgLy8gcGxheSBzdGF0ZSBydW5uaW5nIC0+IHBhdXNlZAorICAgICAgICBTVEFURV9J
TlBVVF9FTkRfQU5JTUFUSU9OICAgICAgIC8vIGZvcmNlIGFuIGVuZCBmcm9tIGFueSBzdGF0ZQor
ICAgIH07CisgICAgCisgICAgLy8gY2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIE5FVyBzdGF0
ZSB0byBzdGFydCBhbmltYXRpb24KKyAgICB2b2lkIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltU3Rh
dGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKTsKKyAgICAKKyAgICAvLyBhbmltYXRpb24gaGFz
IGFjdHVhbGx5IHN0YXJ0ZWQsIGF0IHBhc3NlZCB0aW1lCisgICAgLy8gVGhpcyBpcyBhIGNhbGxi
YWNrIGFuZCBpcyBvbmx5IHJlY2VpdmVkIHdoZW4gUmVuZGVyT2JqZWN0OjpzdGFydEFuaW1hdGlv
bigpIG9yIFJlbmRlck9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKCkgCisgICAgLy8gcmV0dXJucyB0
cnVlLiBJZiBSZW5kZXJPYmplY3Q6OgorICAgIHZvaWQgb25BbmltYXRpb25TdGFydFJlc3BvbnNl
KGRvdWJsZSBzdGFydFRpbWUpOworICAgIAorICAgIC8vIGNhbGxlZCB0byBjaGFuZ2UgdG8gb3Ig
ZnJvbSBwYXVzZWQgc3RhdGUKKyAgICB2b2lkIHVwZGF0ZVBsYXlTdGF0ZShib29sIHJ1bm5pbmcp
OworICAgIGJvb2wgcGxheVN0YXRlUGxheWluZygpIGNvbnN0ICAgICAgIHsgcmV0dXJuIG1fYW5p
bWF0aW9uICYmIG1fYW5pbWF0aW9uLT5hbmltYXRpb25QbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0
YXRlUGxheWluZzsgfQorICAgIAorICAgIGJvb2wgd2FpdGluZ1RvU3RhcnQoKSBjb25zdCB7IHJl
dHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ORVcgfHwgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RB
UlRfV0FJVF9USU1FUjsgfQorICAgIGJvb2wgcHJlYWN0aXZlKCkgY29uc3QgICAgICB7IHJldHVy
biBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ORVcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9USU1FUiB8fAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBT
VEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7
IH0KKyAgICBib29sIHBvc3RhY3RpdmUoKSBjb25zdCAgICAgeyByZXR1cm4gbV9hbmltU3RhdGUg
PT0gU1RBVEVfRE9ORTsgfQorICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgICAgICAgICB7IHJldHVy
biAhcG9zdGFjdGl2ZSgpICYmICFwcmVhY3RpdmUoKTsgfQorICAgIGJvb2wgcnVubmluZygpIGNv
bnN0ICAgICAgICB7IHJldHVybiBtX3BhdXNlVGltZSA8IDA7IH0KKyAgICBib29sIGlzbmV3KCkg
Y29uc3QgICAgICAgICAgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXOyB9CisgICAg
Ym9vbCB3YWl0aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0g
U1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsgfQorICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxlU2V0
dXAoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxF
X1NFVFVQOyB9CisgICAgYm9vbCB3YWl0aW5nRm9yRW5kRXZlbnQoKSBjb25zdCAgeyByZXR1cm4g
bV93YWl0aW5nRm9yRW5kRXZlbnQ7IH0KKyAgICAKKyAgICAvLyAiYW5pbWF0aW5nIiBtZWFucyB0
aGF0IHNvbWV0aGluZyBpcyBydW5uaW5nIHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0byBrZWVwIGZp
cmluZworICAgIC8vIChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQorICAgIHZvaWQgc2V0QW5p
bWF0aW5nKGJvb2wgaW5BbmltYXRpbmcgPSB0cnVlKSAgeyBtX2FuaW1hdGluZyA9IGluQW5pbWF0
aW5nOyB9CisgICAgYm9vbCBhbmltYXRpbmcoKSBjb25zdCAgICAgICAgICAgICAgICAgICAgICB7
IHJldHVybiBtX2FuaW1hdGluZzsgfQorICAgIAorICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUg
c2NhbGUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBhbmlt
YXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxl
KiBjdXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJT
dHlsZSogZnJvbSA9IDAsIGNvbnN0IFJlbmRlclN0eWxlKiB0byA9IDApIHsgfQorICAgIAorICAg
IHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3QgICB7IHJldHVybiBmYWxzZTsg
fQorICAgIAorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJDYWxsYmFja0ZpcmVkKGNvbnN0IEF0b21p
Y1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgIHZvaWQgYW5pbWF0
aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBib29sIHJlc2V0LCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBk
b3VibGUgZWxhcHNlZFRpbWUpOworICAgIAorICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0
IFRyYW5zaXRpb24qIGFuaW0pIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uLT50cmFuc2l0aW9u
c01hdGNoKGFuaW0sIGZhbHNlKTsgfQorICAgIAorICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0
IFRyYW5zaXRpb24qIGFuaW0pIHsgbV9hbmltYXRpb24gPSBjb25zdF9jYXN0PFRyYW5zaXRpb24q
PihhbmltKTsgfQorICAgIAorICAgIC8vIHJldHVybiB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlz
IG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRoZSBjYXNlIGZvcgorICAgIC8vIEltcGxp
Y2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ug
c2hvdWxkIGZvcmNlCisgICAgLy8gc2V0IHRoZSBzdGFydCB0aW1lLiBJZiBhbiBhbmltYXRpb24g
aXMgb3ZlcnJpZGRlbiwgaXQgd2lsbCBwcm9iYWJseSBub3QgZ2V0CisgICAgLy8gYmFjayB0aGUg
U1RBUlRfVElNRSBldmVudC4KKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgLy8gZG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0
aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PworICAgIHZpcnR1YWwgYm9vbCBhZmZlY3Rz
UHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wg
aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKCF3YWl0aW5nVG9TdGFydCgpICYmICFwb3N0YWN0aXZlKCkpICYmIGFmZmVjdHNQcm9w
ZXJ0eShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIEhUTUxFbGVtZW50
KiBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgpCisgICAgeworICAgICAgICBpZiAobV9vYmplY3Qt
Pm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgpLT5pc0hUTUxFbGVtZW50KCkpCisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQqPihtX29iamVjdC0+bm9kZSgpKTsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8vIHRoZXNlIGNhbiBiZSBvdmVycmlk
ZGVuIGJ5IHRoZSBLZXlmcmFtZUFuaW1hdGlvbiBzdWJjbGFzcyB0byBvdmVycmlkZSBJbXBsaWNp
dEFuaW1hdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgICAgICAg
ICAgICAgICAgICAgICAgIHsgfQorICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5p
bWF0aW9ucygpICAgICAgICAgICAgICAgeyB9CisgICAgCisgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wb3NpdGVBbmltYXRpb24oKSAgICAgICAgICAgICAgICB7IHJldHVybiBtX2NvbXBBbmlt
OyB9CisgICAgCisgICAgLy8gdGhlc2UgYXJlIGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5n
IHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2FuIGRvIGFueSBleHRyYSB3b3JrCisgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBzZWRUaW1lKSAgICAgICB7IH0K
KyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25JdGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1l
KSAgIHsgfQorICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRp
bWUpICAgICAgICAgeyB9CisgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSBi
ZWdpblRpbWUpICAgICAgICAgICB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBl
bmRBbmltYXRpb24oYm9vbCByZXNldCkgICAgICAgICAgICAgICAgICAgeyB9CisgICAgCisgICAg
dm9pZCBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgQW5pbVN0YXRl
IG1fYW5pbVN0YXRlOwogICAgIGludCBtX2l0ZXJhdGlvbjsKICAgICAKLSAgICBib29sIG1fZmlu
aXNoZWQ7ICAgIAorICAgIGJvb2wgbV9hbmltYXRpbmc7ICAgICAgIC8vIHRyYW5zaXRpb24vYW5p
bWF0aW9uIHJlcXVpcmVzIGNvbnRpbnVhbCB0aW1lciBmaXJpbmcKKyAgICBib29sIG1fd2FpdGVk
Rm9yUmVzcG9uc2U7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAgIGJvb2wgbV9wYXVzZWQ7
CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAgIFJlbmRlck9iamVjdCogICBtX29iamVjdDsK
KyAgICAKKyAgICBBbmltYXRpb25UaW1lckNhbGxiYWNrIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFj
azsKKyAgICBBbmltYXRpb25FdmVudERpc3BhdGNoZXIgbV9hbmltYXRpb25FdmVudERpc3BhdGNo
ZXI7CisgICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fYW5pbWF0aW9uOworICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiogbV9jb21wQW5pbTsKKyAgICBib29sIG1fd2FpdGluZ0ZvckVuZEV2ZW50OwogfTsK
IAotY2xhc3MgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFibGUg
eworI3ByYWdtYSBtYXJrIC0KKworY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5p
bWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgfkNvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKCkg
eyBkZWxldGVBbGxWYWx1ZXMobV9hbmltYXRpb25zKTsgfQorICAgIEltcGxpY2l0QW5pbWF0aW9u
KGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENv
bXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pCisgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRp
b24sIHJlbmRlcmVyLCBjb21wQW5pbSkKKyAgICAsIG1fcHJvcGVydHkodHJhbnNpdGlvbi0+dHJh
bnNpdGlvblByb3BlcnR5KCkpCisgICAgLCBtX292ZXJyaWRkZW4oZmFsc2UpCisgICAgLCBtX2Zy
b21TdHlsZSgwKQorICAgICwgbV90b1N0eWxlKDApCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fZnJv
bVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgICAgICAKKyAgICAgICAgLy8gaWYgd2Ugd2VyZSB3
YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBhbmltYXRpb24g
dG8gbWFrZSBzdXJlIG5vIG9sZAorICAgICAgICAvLyBhbmltYXRpb25zIHN0aWNrIGFyb3VuZCBp
biB0aGUgbG93ZXIgbGV2ZWxzCisgICAgICAgIGlmICh3YWl0aW5nRm9yRW5kRXZlbnQoKSAmJiBt
X29iamVjdCkKKyAgICAgICAgICAgIG1fb2JqZWN0LT50cmFuc2l0aW9uRmluaXNoZWQobV9wcm9w
ZXJ0eSk7CisgICAgICAgIAorICAgICAgICAvLyBkbyB0aGUgY2xlYW51cCBoZXJlIGluc3RlYWQg
b2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0IGNhbGxl
ZAorICAgICAgICBpZiAoIXBvc3RhY3RpdmUoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OLCAtMSk7ICAgICAKKyAgICB9CisgICAgCisg
ICAgaW50IHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHk7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRp
bWUpOworICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKTsK
KyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpOworICAgIAorICAgIHZp
cnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVjdCosIGNv
bnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVk
U3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBj
b25zdCBSZW5kZXJTdHlsZSogZnJvbSA9IDAsIGNvbnN0IFJlbmRlclN0eWxlKiB0byA9IDApOwor
ICAgIAorICAgIHZvaWQgc2V0T3ZlcnJpZGRlbihib29sIGIpOworICAgIHZpcnR1YWwgYm9vbCBv
dmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlkZGVuOyB9CisgICAgCisgICAgdmly
dHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCAgIHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAKKyAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3Q7
CisgICAgCisgICAgYm9vbCBoYXNTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbVN0eWxlICYm
IG1fdG9TdHlsZTsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50
Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX29iamVjdC0+ZG9jdW1lbnQoKS0+aGFzTGlzdGVuZXJUeXBlKGlu
TGlzdGVuZXJUeXBlKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsg
ICAgCisgICAgCitwcml2YXRlOgorICAgIGludCBtX3Byb3BlcnR5OworICAgIGJvb2wgbV9vdmVy
cmlkZGVuOworICAgIAorICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5n
LgorICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKKyAgICBSZW5kZXJTdHlsZSogbV90b1N0
eWxlOworfTsKIAotICAgIFJlbmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisjcHJhZ21h
IG1hcmsgLQorICAgIAorY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9u
QmFzZSB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiog
dHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgaW50IGluZGV4LCBDb21wb3NpdGVB
bmltYXRpb24qIGNvbXBBbmltKQorICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5k
ZXJlciwgY29tcEFuaW0pCisgICAgLCBtX2tleWZyYW1lcyh0cmFuc2l0aW9uLT5rZXlmcmFtZUxp
c3QoKSkKKyAgICAsIG1fbmFtZSh0cmFuc2l0aW9uLT5hbmltYXRpb25OYW1lKCkpCisgICAgLCBt
X2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRp
b24oKQorICAgIHsKKyAgICAgICAgLy8gaWYgd2Ugd2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZl
bnQsIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBhbmltYXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAor
ICAgICAgICAvLyBhbmltYXRpb25zIHN0aWNrIGFyb3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisg
ICAgICAgIGlmICh3YWl0aW5nRm9yRW5kRXZlbnQoKSAmJiBtX29iamVjdCkgCisgICAgICAgICAg
ICBtX29iamVjdC0+YW5pbWF0aW9uRmluaXNoZWQobV9uYW1lLCAwLCB0cnVlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIGRvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBj
bGFzcyBzbyB0aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCisgICAgICAgIGlmICgh
cG9zdGFjdGl2ZSgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVU
X0VORF9BTklNQVRJT04sIC0xKTsgICAgIAorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAg
ICAKKyAgICB2b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBzKSAgICAgICAgICAgeyBtX25hbWUg
PSBzOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29uc3QgICAgICAgIHsgcmV0
dXJuIG1fbmFtZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkg
Y29uc3QgICB7IHJldHVybiB0cnVlOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGluRWxhcHNlZFRpbWUpOworICAgIHZpcnR1YWwg
dm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgaW5FbGFwc2VkVGltZSk7CisgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0
dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2
b2lkIGVuZEFuaW1hdGlvbihib29sIHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb3Zl
cnJpZGVBbmltYXRpb25zKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5Bbmlt
YXRpb25zKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1
bWVudDo6TGlzdGVuZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIHNlbmRBbmltYXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIGluRXZlbnRUeXBlLCBkb3VibGUgaW5FbGFwc2VkVGltZSk7CisgICAgCisgICAgdmlydHVh
bCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICAvLyBUaGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgorICAgIFJlZlB0
cjxLZXlmcmFtZUxpc3Q+IG1fa2V5ZnJhbWVzOworICAgIEF0b21pY1N0cmluZyBtX25hbWU7Cisg
ICAgaW50IG1faW5kZXg7Cit9OworICAgIAorI3ByYWdtYSBtYXJrIC0KIAotICAgIGJvb2wgYW5p
bWF0aW5nKCkgY29uc3Q7Cit2b2lkIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2s6OnRpbWVyRmlyZWQo
VGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCit7CisgICAgbV9hbmltLT5hbmltYXRpb25UaW1l
ckNhbGxiYWNrRmlyZWQobV9ldmVudFR5cGUsIG1fZWxhcHNlZFRpbWUpOworfQogCi0gICAgYm9v
bCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb25zLmNvbnRhaW5zKHByb3ApOyB9Cit2b2lkIEFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcjo6
dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikKK3sKKyAgICBtX2FuaW0tPmFu
aW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVkKG1fZWxlbWVudC5nZXQoKSwgbV9uYW1lLCBtX3By
b3BlcnR5LCBtX3Jlc2V0LCBtX2V2ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7Cit9CiAKLSAgICB2
b2lkIHJlc2V0KFJlbmRlck9iamVjdCopOworI3ByYWdtYSBtYXJrIC0KIAotcHJpdmF0ZToKLSAg
ICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPiBtX2FuaW1hdGlvbnM7Ci19OwotCi1J
bXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlvbiogdHJh
bnNpdGlvbikKLTogbV9mcm9tU3R5bGUoMCkKLSwgbV90b1N0eWxlKDApCi0sIG1fcHJvcGVydHko
dHJhbnNpdGlvbi0+cHJvcGVydHkoKSkKLSwgbV9mdW5jdGlvbih0cmFuc2l0aW9uLT50aW1pbmdG
dW5jdGlvbigpKQotLCBtX2R1cmF0aW9uKHRyYW5zaXRpb24tPmR1cmF0aW9uKCkgLyAxMDAwLjAp
Ci0sIG1fcmVwZWF0Q291bnQodHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKSkKKyNwcmFnbWEgbWFy
ayAtCisgICAgCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IFRyYW5zaXRpb24q
IHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcEFuaW0pCis6IG1fYW5pbVN0YXRlKFNUQVRFX05FVykKICwgbV9pdGVyYXRpb24oMCkKLSwg
bV9maW5pc2hlZChmYWxzZSkKLSwgbV9zdGFydFRpbWUoY3VycmVudFRpbWUoKSkKLSwgbV9wYXVz
ZWQoZmFsc2UpCi0sIG1fcGF1c2VUaW1lKG1fc3RhcnRUaW1lKQorLCBtX2FuaW1hdGluZyhmYWxz
ZSkKKywgbV93YWl0ZWRGb3JSZXNwb25zZShmYWxzZSkKKywgbV9zdGFydFRpbWUoMCkKKywgbV9w
YXVzZVRpbWUoLTEpCissIG1fb2JqZWN0KHJlbmRlcmVyKQorLCBtX2FuaW1hdGlvblRpbWVyQ2Fs
bGJhY2soY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0aW9uRXZl
bnREaXNwYXRjaGVyKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uQmFzZSo+KHRoaXMpKQorLCBtX2FuaW1h
dGlvbihjb25zdF9jYXN0PFRyYW5zaXRpb24qPih0cmFuc2l0aW9uKSkKKywgbV9jb21wQW5pbShj
b21wQW5pbSkKKywgbV93YWl0aW5nRm9yRW5kRXZlbnQoZmFsc2UpCiB7CiB9CiAKLUltcGxpY2l0
QW5pbWF0aW9uOjp+SW1wbGljaXRBbmltYXRpb24oKQorLy8jZGVmaW5lIERFQlVHX1NUQVRFX01B
Q0hJTkUKKworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyNkZWZpbmUgRFNNX1BSSU5UX0ZP
UkNFKGlucHV0LCBuZXh0KSBcCitmcHJpbnRmKHN0ZG91dCwgIioqKiBnb3QgJXMgLS0+ICVzIGF0
ICVmIGZvciBhbmltYXRpb24gJXBcbiIsIGlucHV0LCBuZXh0LCBjdXJyZW50VGltZSgpLCB0aGlz
KQorCisjZGVmaW5lIERTTV9QUklOVChzdGF0ZSwgaW5wdXQsIG5leHQpIFwKK2ZwcmludGYoc3Rk
b3V0LCAiKioqIGdvdCAlcyBpbiAlcyAtLT4gJXMgYXQgJWYgZm9yIGFuaW1hdGlvbiAlcFxuIiwg
aW5wdXQsIHN0YXRlLCBuZXh0LCBjdXJyZW50VGltZSgpLCB0aGlzKQorCisjZGVmaW5lIERTTV9Q
UklOVF9QQVJBTShzdGF0ZSwgaW5wdXQsIG5hbWUsIHBhcmFtLCBuZXh0KSBcCitmcHJpbnRmKHN0
ZG91dCwgIioqKiBnb3QgJXMgaW4gJXMgLS0+ICVzICglcz0lZikgYXQgJWYgZm9yIGFuaW1hdGlv
biAlcFxuIiwgaW5wdXQsIHN0YXRlLCBuZXh0LCBuYW1lLCBwYXJhbSwgY3VycmVudFRpbWUoKSwg
dGhpcykKKyNlbHNlCisjZGVmaW5lIERTTV9QUklOVF9GT1JDRShpbnB1dCwgbmV4dCkKKyNkZWZp
bmUgRFNNX1BSSU5UKHN0YXRlLCBpbnB1dCwgbmV4dCkKKyNkZWZpbmUgRFNNX1BSSU5UX1BBUkFN
KHN0YXRlLCBpbnB1dCwgbmFtZSwgcGFyYW0sIG5leHQpCisjZW5kaWYKKwordm9pZCBBbmltYXRp
b25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBw
YXJhbSkKIHsKLSAgICBBU1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgIC8v
IGlmIHdlIGdldCBhIFJFU1RBUlQgdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2Fy
ZGxlc3Mgb2Ygc3RhdGUKKyAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfTUFLRV9ORVcpIHsK
KyAgICAgICAgRFNNX1BSSU5UX0ZPUkNFKCJTVEFURV9JTlBVVF9NQUtFX05FVyIsICJTVEFURV9O
RVciKTsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVf
U0VUVVApCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVw
KGZhbHNlKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgbV93YWl0ZWRG
b3JSZXNwb25zZSA9IGZhbHNlOworICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JFU1RB
UlRfQU5JTUFUSU9OKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5QVVRfUkVT
VEFSVF9BTklNQVRJT04iLCAiU1RBVEVfTkVXIik7CisgICAgICAgIGNhbmNlbFRpbWVycygpOwor
ICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkK
KyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2Up
OworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUg
PSAwOworICAgICAgICBtX3BhdXNlVGltZSA9IC0xOworICAgICAgICBlbmRBbmltYXRpb24oZmFs
c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKHJ1bm5pbmcoKSkKKyAgICAgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIC0xKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfQU5J
TUFUSU9OKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5QVVRfRU5EX0FOSU1B
VElPTiIsICJTVEFURV9ET05FIik7CisgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICBp
ZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkKKyAgICAgICAg
ICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOworICAgICAg
ICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBV
VF9QQVVTRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAg
ZnByaW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFIGF0ICVm
IGZvciBhbmltYXRpb24gJXBcbiIsIGN1cnJlbnRUaW1lKCksIHRoaXMpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05T
RSkgeworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFIHN0YXRl
LCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKKyAgICAgICAgICAgIC8v
IHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlCisgICAgICAgICAg
ICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNU
QVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1JF
U1VNRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAgZnBy
aW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSBhdCAlZiBm
b3IgYW5pbWF0aW9uICVwXG4iLCBjdXJyZW50VGltZSgpLCB0aGlzKTsKKyNlbmRpZgorICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX0xPT1BJTkcgfHwgbV9hbmltU3Rh
dGUgPT0gU1RBVEVfRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBzdGFydCB0aGUgYW5pbWF0aW9u
CisgICAgICAgICAgICBzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBleGVjdXRlIHN0YXRlIG1hY2hpbmUK
KyAgICBzd2l0Y2gobV9hbmltU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTVEFURV9ORVc6CisgICAg
ICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlu
cHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyB8fCBpbnB1dCA9PSBTVEFURV9J
TlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVf
SU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVf
UlVOTklORykgeworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVfTkVXIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NU
QVJUX0FOSU1BVElPTikgPyAiU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIjogIlNUQVRFX0lO
UFVUX1BMQVlfU1RBVEVfUlVOTklORyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJkZWxheSIsIG1fYW5pbWF0aW9uLT5hbmltYXRpb25EZWxheSgpLCAiU1RBVEVfU1RBUlRfV0FJ
VF9USU1FUiIpOworICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgc3RhcnQgdGltZXIgdG8gdGhl
IGluaXRpYWwgZGVsYXkgKDAgaWYgbm8gZGVsYXkpCisgICAgICAgICAgICAgICAgbV93YWl0ZWRG
b3JSZXNwb25zZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVf
U1RBUlRfV0FJVF9USU1FUjsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJh
Y2suc3RhcnRUaW1lcihtX2FuaW1hdGlvbi0+YW5pbWF0aW9uRGVsYXkoKSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXZlbnROYW1lczo6d2Via2l0QW5p
bWF0aW9uU3RhcnRFdmVudCwgbV9hbmltYXRpb24tPmFuaW1hdGlvbkRlbGF5KCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gaWYgaW5wdXQg
aXMgU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQgd2UgZG9uJ3QgZG8gYW55dGhpbmcgeWV0
CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9ORVciLCAiU1RBVEVfSU5QVVRfUExB
WV9TVEFURV9QQVVTRUQiLCAiU1RBVEVfTkVXIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOgorICAgICAgICAg
ICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEIHx8IGlucHV0
ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIERTTV9QUklO
VF9QQVJBTSgiU1RBVEVfU1RBUlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9TVEFSVF9USU1F
Ul9GSVJFRCIsICJlbGFwc2VkVGltZSIsIHBhcmFtLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVAiKTsKKyAgICAgICAgICAgICAg
ICAvLyBzdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBh
bmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAg
ICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVA7CisgICAgICAgICAg
ICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cCh0cnVlKTsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNh
biBzdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVj
dC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChydW5uaW5nKCkpOwor
ICAgICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfU1RBUlRfV0FJVF9USU1FUiIsICJTVEFU
RV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCIsICJTVEFURV9QQVVTRURfV0FJVF9USU1FUiIpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIHdlJ3JlIHdhaXRpbmcgZm9yIHRo
ZSBzdGFydCB0aW1lciB0byBmaXJlIGFuZCB3ZSBnb3QgYSBwYXVzZS4gQ2FuY2VsIHRoZSB0aW1l
ciwgcGF1c2UgYW5kIHdhaXQKKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRU
aW1lKCk7CisgICAgICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgICAgICAgICAg
bV9hbmltU3RhdGUgPSBTVEFURV9QQVVTRURfV0FJVF9USU1FUjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VU
VVA6CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAg
fHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVwKGZhbHNl
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NU
WUxFX1NFVFVQKSB7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlU
X1NUWUxFX1NFVFVQIiwgIlNUQVRFX0lOUFVUX1NUWUxFX1NFVFVQIiwgIlNUQVRFX1NUQVJUX1dB
SVRfUkVTUE9OU0UiKTsKKyAgICAgICAgICAgICAgICAvLyBzdGFydCB0aW1lciBoYXMgZmlyZWQs
IHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3
aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJU
X1dBSVRfUkVTUE9OU0U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3ZlcnJp
ZGVBbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gc2Vu
ZCBzdGFydCBldmVudCwgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgb25BbmltYXRpb25TdGFy
dCgwLjBmKTsgLy8gdGhlIGVsYXBzZWRUaW1lIGlzIGFsd2F5cyAwIGhlcmUKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAvLyBzdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAg
ICAgICAgaWYgKG92ZXJyaWRkZW4oKSB8fCAhc3RhcnRBbmltYXRpb24oMCkpIHsKKyNpZmRlZiBE
RUJVR19TVEFURV9NQUNISU5FCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
KioqICAgICAgICAgc3RhcnRBbmltYXRpb24gcmV0dXJuZWQgZmFsc2UsIHNldHRpbmcgc3RhcnQg
dGltZSBpbW1lZGlhdGVseVxuIik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gd2Un
cmUgbm90IGdvaW5nIHRvIGdldCBhIHN0YXJ0VGltZSBjYWxsYmFjaywgc28gZmlyZSB0aGUgc3Rh
cnQgdGltZSBoZXJlCisgICAgICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RB
UlRfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3dhaXRl
ZEZvclJlc3BvbnNlID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIEFTU0VSVChydW5uaW5nKCkpOworICAgICAgICAgICAgICAgIERTTV9Q
UklOVCgiU1RBVEVfU1RBUlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BB
VVNFRCIsICJTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFIik7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgLy8gd2UncmUgd2FpdGluZyBmb3IgdGhlIGEgbm90aWZpY2F0aW9uIHRo
YXQgdGhlIHN0eWxlIGhhcyBiZWVuIHNldHVwLiBJZiB3ZSdyZSBhc2tlZCB0byB3YWl0CisgICAg
ICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCwgdGhlIHN0eWxlIG11c3QgaGF2ZSBiZWVuIHBy
b2Nlc3NlZCwgc28gd2UgY2FuIGRlYWwgd2l0aCB0aGlzIGxpa2Ugd2Ugd291bGQKKyAgICAgICAg
ICAgICAgICAvLyBmb3IgV0FJVF9SRVNQT05TRSwgZXhjZXB0IHRoYXQgd2UgZG9uJ3QgbmVlZCB0
byBkbyBhbiBlbmRBbmltYXRpb24oKS4KKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IDA7
CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNF
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVf
U1RBUlRfV0FJVF9SRVNQT05TRToKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9J
TlBVVF9TVEFSVF9USU1FX1NFVCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BB
VVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBV
VF9TVEFSVF9USU1FX1NFVCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsK
KyAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIGEgc3RhcnQgdGltZSwgc2V0IGl0LCB1bmxlc3Mg
dGhlIHN0YXJ0VGltZSBpcyBhbHJlYWR5IHNldAorICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0
VGltZSA8PSAwKQorICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGRlY2lkZSB3aGVuIHRoZSBlbmQgb3Ig
bG9vcCBldmVudCBuZWVkcyB0byBmaXJlCisgICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVy
cygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgi
U1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSIsICJTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCIs
ICJzdGFydFRpbWUiLCBwYXJhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICht
X2FuaW1TdGF0ZT09U1RBVEVfTE9PUElORyk/IlNUQVRFX0xPT1BJTkciOiJTVEFURV9FTkRJTkci
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGEgcmVuZGVy
IHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdl
ZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERTTV9QUklOVCgi
U1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNF
RCIsICJTVEFURV9QQVVTRURfV0FJVF9SRVNQT05TRSIpOworICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSBwYXVzaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQgcmVzcG9uc2UuIENhbmNlbCB0
aGUgYW5pbWF0aW9uIGFuZCB3YWl0LiBXaGVuIAorICAgICAgICAgICAgICAgIC8vIHdlIHVucGF1
c2UsIHdlIHdpbGwgYWN0IGFzIHRob3VnaCB0aGUgc3RhcnQgdGltZXIganVzdCBmaXJlZAorICAg
ICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRp
b24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1dB
SVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTVEFURV9MT09QSU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lO
UFVUX0xPT1BfVElNRVJfRklSRUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9Q
QVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5Q
VVRfTE9PUF9USU1FUl9GSVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAw
KTsKKyAgICAgICAgICAgICAgICAvLyBsb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVu
ZC4KKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7CisgICAgICAg
ICAgICAgICAgcHJpbWVFdmVudFRpbWVycygpOworICAgICAgICAgICAgICAgIERTTV9QUklOVF9Q
QVJBTSgiU1RBVEVfTE9PUElORyIsICJTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVEIiwgImVs
YXBzZWRUaW1lIiwgcGFyYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9h
bmltU3RhdGU9PVNUQVRFX0xPT1BJTkcpPyJTVEFURV9MT09QSU5HIjoiU1RBVEVfRU5ESU5HIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBEU01f
UFJJTlQoIlNUQVRFX0xPT1BJTkciLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQiLCAi
U1RBVEVfUEFVU0VEX1JVTiIpOworICAgICAgICAgICAgICAgIC8vIHdlIGFyZSBwYXVzaW5nIHdo
aWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0CisgICAgICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRp
bWVycygpOworICAgICAgICAgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9QQVVTRURfUlVOOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRU5ESU5HOgorICAgICAgICAgICAg
QVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCB8fCBpbnB1dCA9PSBT
VEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9FTkRfVElNRVJfRklSRUQpIHsKKyAgICAgICAgICAg
ICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UX1BBUkFN
KCJTVEFURV9FTkRJTkciLCAiU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEIiwgImVsYXBzZWRU
aW1lIiwgcGFyYW0sICJTVEFURV9ET05FIik7CisgICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVy
IGZpcmVkLCBmaW5pc2ggdXAKKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkVuZChwYXJhbSk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcmVzdW1lT3ZlcnJpZGRlbkFuaW1h
dGlvbnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBmaXJlIG9mZiBh
bm90aGVyIHN0eWxlIGNoYW5nZSBzbyB3ZSBjYW4gc2V0IHRoZSBmaW5hbCB2YWx1ZQorICAgICAg
ICAgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAg
ICAgbV9hbmltU3RhdGUgPSBTVEFURV9ET05FOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5h
bmltYXRpb25Db250cm9sbGVyKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOwor
ICAgICAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIHdoZW4gd2UndmUg
YmVlbiBjYWxsZWQgZnJvbSB0aW1lckZpcmVkKCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfRU5ESU5HIiwgIlNUQVRF
X0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9SVU4iKTsKKyAgICAgICAg
ICAgICAgICAvLyB3ZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1h
dGlvbiBhbmQgd2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUo
KTsKKyAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBlbmRB
bmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFV
U0VEX1JVTjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVs
ZXRlZCBoZXJlCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURf
V0FJVF9USU1FUjoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZ
X1NUQVRFX1JVTk5JTkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAg
ICAgICAgRFNNX1BSSU5UKCJTVEFURV9QQVVTRURfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9Q
TEFZX1NUQVRFX1JVTk5JTkciLCAiU1RBVEVfTkVXIik7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIHVwZGF0ZSB0aGUgdGltZXMKKyAgICAgICAgICAgIG1fc3RhcnRUaW1lICs9IGN1cnJl
bnRUaW1lKCkgLSBtX3BhdXNlVGltZTsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0
IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KKyAgICAgICAgICAgIG1fYW5p
bVN0YXRlID0gU1RBVEVfTkVXOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRF
X0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTVEFURV9QQVVTRURfV0FJVF9SRVNQT05TRToKKyAgICAgICAgY2FzZSBTVEFURV9QQVVT
RURfUlVOOgorICAgICAgICAgICAgLy8gd2UgdHJlYXQgdGhlc2UgdHdvIGNhc2VzIHRoZSBzYW1l
LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQsIHdoZW4gd2UgYXJlIGluIHRoZSBXQUlUX1JF
U1BPTlNFCisgICAgICAgICAgICAvLyBzdGF0ZSwgd2UgZG9uJ3QgeWV0IGhhdmUgYSB2YWxpZCBz
dGFydFRpbWUsIHNvIHdlIHNlbmQgMCB0byBzdGFydEFuaW1hdGlvbi4gV2hlbiB0aGUgU1RBUlRf
VElNRQorICAgICAgICAgICAgLy8gZXZlbnQgY29tZXMgaW4gcW5kIHdlIHdlcmUgaW4gdGhlIFJV
TiBzdGF0ZSwgd2Ugd2lsbCBub3RpY2UgdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2V0IHRoZSAKKyAg
ICAgICAgICAgIC8vIHN0YXJ0VGltZSBhbmQgd2lsbCBpZ25vcmUgaXQuCisgICAgICAgICAgICBB
U1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghcnVubmluZygpKTsKKyAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfUEFV
U0VEX1dBSVRfUkVTUE9OU0UiLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIiwgIlNU
QVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
dXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1BB
VVNFRF9SVU4pCisgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUoKSAt
IG1fcGF1c2VUaW1lOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhcnRU
aW1lID0gMDsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJlc3BvbnNlIGZy
b20gdGhlIGFuaW1hdGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAgbV9h
bmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBzdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICBpZiAob3ZlcnJpZGRl
bigpIHx8ICFzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsKKyAgICAgICAgICAgICAgICAv
LyB3ZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRo
ZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RB
VEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0
cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRE9ORToKKyAgICAg
ICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfRE9ORSIsICJTVEFURV9ET05FIik7CisgICAg
ICAgICAgICAvLyB3ZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRl
bGV0ZWQKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyB8dGhpc3wgbWF5IGJlIGRl
bGV0ZWQgaGVyZSBpZiB3ZSBjYW1lIG91dCBvZiBTVEFURV9FTkRJTkcgd2hlbiB3ZSd2ZSBiZWVu
IGNhbGxlZCBmcm9tIHRpbWVyRmlyZWQoKQogfQorICAgIAordm9pZCBBbmltYXRpb25CYXNlOjph
bmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUs
IGRvdWJsZSBlbGFwc2VkVGltZSkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmRvY3VtZW50KCkg
JiYgIW1fb2JqZWN0LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKKyAgICAKKyAgICAvLyBG
SVhNRTogdXNlIGFuIGVudW0KKyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtp
dEFuaW1hdGlvblN0YXJ0RXZlbnQpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9J
TlBVVF9TVEFSVF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYgKGV2ZW50
VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCkKKyAgICAg
ICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQsIGVsYXBz
ZWRUaW1lKTsKKyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5p
bWF0aW9uRW5kRXZlbnQpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVU
X0VORF9USU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgICAgICAvLyB8dGhpc3wgbWF5IGJl
IGRlbGV0ZWQgaGVyZQorICAgIH0KK30KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGZyb20sIFJlbmRlclN0eWxlKiB0
bykKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRN
TEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCByZXNldCwgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGlt
ZSkKIHsKLSAgICBpZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihy
ZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgbV90
b1N0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9mcm9tU3R5bGUg
PSBmcm9tOwotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigp
OwotICAgIG1fdG9TdHlsZSA9IHRvOwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIG1fdG9T
dHlsZS0+cmVmKCk7Ci0gICAgbV9maW5pc2hlZCA9IGZhbHNlOwotICAgIGlmIChmcm9tIHx8IHRv
KQotICAgICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV93YWl0aW5nRm9y
RW5kRXZlbnQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBrZWVwIGFuIGF0b21pYyBzdHJpbmcgb24g
dGhlIHN0YWNrIHRvIGtlZXAgaXQgYWxpdmUgdW50aWwgd2UgZXhpdCB0aGlzIG1ldGhvZAorICAg
IC8vIChzaW5jZSBkaXNwYXRjaGluZyB0aGUgZXZlbnQgbWF5IGNhdXNlIHx0aGlzfCB0byBiZSBk
ZWxldGVkLCB0aGVyZWZvcmUgcmVtb3ZpbmcKKyAgICAvLyB0aGUgbGFzdCByZWYgdG8gdGhlIGF0
b21pYyBzdHJpbmcpLgorICAgIEF0b21pY1N0cmluZyAgICAgICAgYW5pbU5hbWUobmFtZSk7Cisg
ICAgQXRvbWljU3RyaW5nICAgICAgICBhbmltRXZlbnRUeXBlKGV2ZW50VHlwZSk7CisgICAgLy8g
bWFrZSBzdXJlIHRoZSBlbGVtZW50IHN0aWNrcyBhcm91bmQgdG9vCisgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBlbGVtZW50UmV0YWluZXIoZWxlbWVudCk7CisgICAgCisgICAgQVNTRVJUKCFlbGVt
ZW50IHx8IChlbGVtZW50LT5kb2N1bWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblBh
Z2VDYWNoZSgpKSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLyogRklYTUUKKyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdFRyYW5z
aXRpb25FbmRFdmVudCkgeworICAgICAgICBlbGVtZW50LT5kaXNwYXRjaFdlYktpdFRyYW5zaXRp
b25FdmVudChldmVudFR5cGUsIG5hbWUsIGVsYXBzZWRUaW1lKTsKKyAgICB9IAorICAgIGVsc2Ug
eworICAgICAgICBlbGVtZW50LT5kaXNwYXRjaFdlYktpdEFuaW1hdGlvbkV2ZW50KGV2ZW50VHlw
ZSwgbmFtZSwgZWxhcHNlZFRpbWUpOworICAgIH0KKyAgICAgKi8KKyAgICAvLyBXQVJOSU5HOiB8
dGhpc3wgbWF5IGhhdmUgYmVlbiBkZWxldGVkIGhlcmUKKyAgICAKKyAgICAKKyAgICAvLyBXZSBk
aWRuJ3QgbWFrZSB0aGUgZW5kQW5pbWF0aW9uIGNhbGwgaWYgd2UgZGlzcGF0Y2hlZCBhbiBldmVu
dC4gVGhpcyBpcyBzbworICAgIC8vIHdlIGNhbiBjYWxsIHRoZSBhbmltYXRpb24gZXZlbnQgaGFu
ZGxlciB0aGVuIHJlbW92ZSB0aGUgYW5pbWF0aW9uLiBUaGlzCisgICAgLy8gc29sdmVzIHRoZSBw
cm9ibGVtIG9uIHRoZSBwaG9uZSB3aGVyZSB0aGUgb2JqZWN0IHNuYXBzIGludG8gaXRzIHVuYW5p
bWF0ZWQgc3RhdGUKKyAgICAvLyBiZWZvcmUgdGhlIGF1dGhvciBoYXMgYSBjaGFuZ2UgdG8gY2hh
bmdlIGl0IChtYWtlIGl0IGhpZGRlbiwgbW92ZSBpdCBvZmZzY3JlZW4sIGV0Yy4pCisgICAgLy8g
V2UgY2FuJ3QgY2FsbCBlbmRBbmltYXRpb24oKSBoZXJlIGJlY2F1c2UgaXQgaXMgc3BlY2lhbGl6
ZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICAvLyB3ZSBhcmUgZG9pbmcgVHJhbnNpdGlvbnMg
b3IgQW5pbWF0aW9ucy4gU28gd2UgZG8gdGhlIGVxdWl2YWxlbnQgdG8gaXQgaGVyZS4KKyAgICBp
ZiAoYW5pbUV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQp
IHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkpCisgICAgICAgICAgICBlbGVtZW50
LT5yZW5kZXJlcigpLT50cmFuc2l0aW9uRmluaXNoZWQocHJvcGVydHkpOworICAgIH0KKyAgICBl
bHNlIGlmIChhbmltRXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2
ZW50KSB7CisgICAgICAgIGlmIChlbGVtZW50LT5yZW5kZXJlcigpKSB7CisgICAgICAgICAgICBl
bGVtZW50LT5yZW5kZXJlcigpLT5hbmltYXRpb25GaW5pc2hlZChhbmltTmFtZSwgMCwgcmVzZXQp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyByZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5h
bmltYXRlZCkgc3R5bGUKKyAgICAgICAgICAgIHNldENoYW5nZWQoZWxlbWVudC0+cmVuZGVyZXIo
KS0+ZWxlbWVudCgpKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAotZG91YmxlIEltcGxpY2l0QW5p
bWF0aW9uOjpwcm9ncmVzcygpIGNvbnN0Cit2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlT
dGF0ZShib29sIHJ1bikKIHsKLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBjdXJyZW50VGltZSgp
IC0gbV9zdGFydFRpbWU7CisgICAgaWYgKHJ1bm5pbmcoKSAhPSBydW4gfHwgaXNuZXcoKSkgewor
ICAgICAgICBpZiAobV9vYmplY3QtPmRvY3VtZW50KCktPmxvYWRDb21wbGV0ZSgpKQorICAgICAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKHJ1biA/IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVO
TklORyA6IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VELCAtMSk7CisgICAgfQorfQorCitk
b3VibGUgQW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0
KSBjb25zdAoreworICAgIGlmIChwcmVhY3RpdmUoKSkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAg
Ci0gICAgaWYgKG1fZmluaXNoZWQgfHwgIW1fZHVyYXRpb24gfHwgZWxhcHNlZFRpbWUgPj0gbV9k
dXJhdGlvbikKKyAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBydW5uaW5nKCkgPyAoY3VycmVudFRp
bWUoKSAtIG1fc3RhcnRUaW1lKSA6IChtX3BhdXNlVGltZSAtIG1fc3RhcnRUaW1lKTsKKyAgICBp
ZiAocnVubmluZygpICYmIGVsYXBzZWRUaW1lIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgZG91YmxlIGR1ciA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGlmIChtX2Fu
aW1hdGlvbi0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSA+IDApCisgICAgICAgIGR1ciAqPSBt
X2FuaW1hdGlvbi0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICAKKyAgICBpZiAocG9z
dGFjdGl2ZSgpIHx8ICFtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSB8fCAobV9hbmltYXRpb24tPmFu
aW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkgPiAwICYmIGVsYXBzZWRUaW1lID49IGR1cikpCiAgICAg
ICAgIHJldHVybiAxLjA7Ci0KLSAgICBpZiAobV9mdW5jdGlvbi50eXBlKCkgPT0gTGluZWFyVGlt
aW5nRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBlbGFwc2VkVGltZSAvIG1fZHVyYXRpb247CiAg
ICAgCisgICAgLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCB0aW1lLCB0YWtpbmcgaW50byBhY2Nv
dW50IGRpcmVjdGlvbi4KKyAgICAvLyBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0
ZXJhdGlvbnMsIHdlIGFzc3VtZSB0aGF0IHdlIHdvdWxkIGhhdmUgCisgICAgLy8gc2hvcnQgY2ly
Y3VpdGVkIGFib3ZlIGlmIHdlIHdlcmUgZG9uZQorICAgIGRvdWJsZSB0ID0gZWxhcHNlZFRpbWUg
LyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsKKyAgICBpbnQgaSA9IChpbnQpIHQ7CisgICAgdCAt
PSBpOworICAgIGlmIChtX2FuaW1hdGlvbi0+YW5pbWF0aW9uRGlyZWN0aW9uKCkgJiYgKGkgJiAx
KSkKKyAgICAgICAgdCA9IDEgLSB0OworICAgIAorICAgIGlmIChzY2FsZSAhPSAxIHx8IG9mZnNl
dCAhPSAwKQorICAgICAgICB0ID0gKHQgLSBvZmZzZXQpICogc2NhbGU7CisgICAgCisgICAgaWYg
KG1fYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLnR5cGUoKSA9PSBMaW5lYXJUaW1pbmdGdW5j
dGlvbikKKyAgICAgICAgcmV0dXJuIHQ7CisgICAgCiAgICAgLy8gQ3ViaWMgYmV6aWVyLgotICAg
IHJldHVybiBzb2x2ZUN1YmljQmV6aWVyRnVuY3Rpb24obV9mdW5jdGlvbi54MSgpLCBtX2Z1bmN0
aW9uLnkxKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9mdW5jdGlv
bi54MigpLCBtX2Z1bmN0aW9uLnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbGFwc2VkVGltZSAvIG1fZHVyYXRpb24sIG1fZHVyYXRpb24pOworICAgIGRvdWJsZSB0
dCA9IHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24o
KS54MSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmlt
YXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueTEoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLngyKCksIAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvbi0+dGltaW5n
RnVuY3Rpb24oKS55MigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0LCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7CisgICAgcmV0dXJuIHR0OwogfQogCit2b2lk
IEFuaW1hdGlvbkJhc2U6OnByaW1lRXZlbnRUaW1lcnMoKQoreworICAgIC8vIGRlY2lkZSB3aGVu
IHRoZSBlbmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCisgICAgZG91YmxlIGN0ID0gY3Vy
cmVudFRpbWUoKTsKKyAgICBjb25zdCBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gY3QgLSBtX3N0
YXJ0VGltZTsKKyAgICBBU1NFUlQoZWxhcHNlZER1cmF0aW9uID49IDApOworICAgIAorICAgIGRv
dWJsZSB0b3RhbER1cmF0aW9uID0gLTE7CisgICAgaWYgKG1fYW5pbWF0aW9uLT5hbmltYXRpb25J
dGVyYXRpb25Db3VudCgpID4gMCkKKyAgICAgICAgdG90YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPmFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCk7Cisg
ICAgCisgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IDA7CisgICAgZG91YmxlIG5leHRJdGVyYXRp
b25UaW1lID0gdG90YWxEdXJhdGlvbjsKKyAgICBpZiAodG90YWxEdXJhdGlvbiA8IDAgfHwgZWxh
cHNlZER1cmF0aW9uIDwgdG90YWxEdXJhdGlvbikgeworICAgICAgICBkdXJhdGlvbkxlZnQgPSBt
X2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0aW9uLCBtX2FuaW1hdGlv
bi0+ZHVyYXRpb24oKSk7CisgICAgICAgIG5leHRJdGVyYXRpb25UaW1lID0gZWxhcHNlZER1cmF0
aW9uICsgZHVyYXRpb25MZWZ0OworICAgIH0KKyAgICAKKyAgICAvLyBBdCB0aGlzIHBvaW50LCB3
ZSBtYXkgaGF2ZSAwIGR1cmF0aW9uTGVmdCwgaWYgd2UndmUgZ290dGVuIHRoZSBldmVudCBsYXRl
IGFuZCB3ZSBhcmUgYWxyZWFkeQorICAgIC8vIHBhc3QgdG90YWxEdXJhdGlvbi4gSW4gdGhpcyBj
YXNlIHdlIHN0aWxsIGZpcmUgYW4gZW5kIHRpbWVyIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBlbmQu
IAorICAgIC8vIFRoaXMgZGVmZXJzIHRoZSBjYWxsIHRvIHNlbmRBbmltYXRpb25FdmVudHMgdG8g
YXZvaWQgcmUtZW50cmFudCBjYWxscyB0aGF0IGRlc3Ryb3kKKyAgICAvLyB0aGUgUmVuZGVyT2Jq
ZWN0LCBhbmQgdGhlcmVmb3JlIHx0aGlzfCBiZWZvcmUgd2UncmUgZG9uZSB3aXRoIGl0LgorICAg
IGlmICh0b3RhbER1cmF0aW9uIDwgMCB8fCBuZXh0SXRlcmF0aW9uVGltZSA8IHRvdGFsRHVyYXRp
b24pIHsKKyAgICAgICAgLy8gd2UgYXJlIG5vdCBhdCB0aGUgZW5kIHlldCwgc2VuZCBhIGxvb3Ag
ZXZlbnQKKyAgICAgICAgQVNTRVJUKG5leHRJdGVyYXRpb25UaW1lID4gMCk7CisgICAgICAgIG1f
YW5pbVN0YXRlID0gU1RBVEVfTE9PUElORzsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxi
YWNrLnN0YXJ0VGltZXIoZHVyYXRpb25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25J
dGVyYXRpb25FdmVudCwgbmV4dEl0ZXJhdGlvblRpbWUpOworICAgIH0KKyAgICBlbHNlIHsKKyAg
ICAgICAgLy8gd2UgYXJlIGF0IHRoZSBlbmQsIHNlbmQgYW4gZW5kIGV2ZW50CisgICAgICAgIG1f
YW5pbVN0YXRlID0gU1RBVEVfRU5ESU5HOworICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJh
Y2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVu
ZEV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAgfQorfQorCisjcHJhZ21hIG1hcmsgLQor
CiBzdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMoaW50IGZyb20sIGludCB0bywgZG91YmxlIHBy
b2dyZXNzKQogeyAgCiAgICAgcmV0dXJuIGludChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVz
cyk7CkBAIC0xOTQsNyArOTk3LDggQEAKIHN0YXRpYyBpbmxpbmUgU2hhZG93RGF0YSogYmxlbmRG
dW5jKGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCiB7ICAKICAgICBBU1NFUlQoZnJvbSAmJiB0byk7Ci0gICAgcmV0dXJuIG5ldyBT
aGFkb3dEYXRhKGJsZW5kRnVuYyhmcm9tLT54LCB0by0+eCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMo
ZnJvbS0+eSwgdG8tPnksIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVy
LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5jb2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykp
OworICAgIHJldHVybiBuZXcgU2hhZG93RGF0YShibGVuZEZ1bmMoZnJvbS0+eCwgdG8tPngsIHBy
b2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPnksIHRvLT55LCBwcm9ncmVzcyksIAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoZnJvbS0+Ymx1ciwgdG8tPmJsdXIsIHByb2dyZXNz
KSwgYmxlbmRGdW5jKGZyb20tPmNvbG9yLCB0by0+Y29sb3IsIHByb2dyZXNzKSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKQEAgLTIwOCw3ICsxMDEyLDIzIEBACiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbU9wID0gaSA8IGZyb21TaXplID8gZnJvbVtpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRy
YW5zZm9ybU9wZXJhdGlvbiogdG9PcCA9IGkgPCB0b1NpemUgPyB0b1tpXS5nZXQoKSA6IDA7CiAg
ICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmRlZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5k
KGZyb21PcCwgcHJvZ3Jlc3MpIDogZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSk7Ci0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkK
KyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAvLyBzb21lIG9mIHRoZSB0cmFuc2Zvcm0gb3BzIChsaWtlIHBlcnNwZWN0aXZl
IGFuZCBtYXRyaXgzRCkgZG8gbm90IGJsZW5kLCBiZWNhdXNlIHRoZXkgbmV2ZXIgZXhwZWN0Cisg
ICAgICAgICAgICAvLyB0byBiZSB1c2VkIGJ5IHRoZSBzb2Z0d2FyZSBhbmltYXRvciwgc2luY2Ug
c29mdHdhcmUgYW5pbWF0aW9uIG9mIHRyYW5zZm9ybXMgb25seSBkZWFscyB3aXRoIDJELgorICAg
ICAgICAgICAgLy8gQnV0IHdlIGRvIGNvbWUgaGVyZSBhdCB0aGUgc3RhcnQgYW5kIGVuZCBvZiBh
biBhbmltYXRpb24sIHNvIHdlIG5lZWQgdG8gcmV0dXJuIHZhbGlkIHZhbHVlcyBmb3IgCisgICAg
ICAgICAgICAvLyB0aG9zZSBjYXNlcy4gV2UgZG9uJ3QgZXhwZWN0IHRvIGNvbWUgaGVyZSBmb3Ig
YW55IG90aGVyIHZhbHVlcyBvZiAncHJvZ3Jlc3MnLCBidXQgdHJ5IHRvIHJldHVybgorICAgICAg
ICAgICAgLy8gc29tZXRoaW5nIHJlYXNvbmFibGUgaWYgd2UgZG8uIFdlIGFjdHVhbGx5IHdvbid0
IG5vcm1hbGx5IGdldCBhIHByb2dyZXNzIG9mIDAsIHdlJ2xsIGdldCBhIHZhbHVlCisgICAgICAg
ICAgICAvLyB0aGF0IGlzIGp1c3Qgc2xpZ2h0bHkgZ3JlYXRlciB0aGFuIDAuCisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8qIEZJWE1FIHRyYW5zZm9ybXMKKyAgICAgICAgICAgIGlmIChwcm9n
cmVzcyA+IDAuNSkKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHRvT3AgPyB0b09wIDog
bmV3IElkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uKCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIGZyb21PcCA/IGZyb21PcCA6IG5ldyBJZGVudGl0
eVRyYW5zZm9ybU9wZXJhdGlvbigpKTsKKyAgICAgICAgICAgICAqLworICAgICAgICB9CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjUsMzEwICsxMDQ1LDEzMTcgQEAKICAgICBy
ZXR1cm4gcmVzdWx0ID4gMC4gPyBWSVNJQkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20p
OwogfQogCi0jZGVmaW5lIEJMRU5EKHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1f
cHJvcGVydHkgPT0gcHJvcCAmJiBtX3RvU3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5n
ZXR0ZXIoKSkgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRT
dHlsZSk7IFwKLSAgICBcCi0gICAgaWYgKChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFh
bmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApKSB8fCBtX3Byb3BlcnR5ID09
IHByb3ApIHsgXAotICAgICAgICBpZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICE9IG1fdG9TdHls
ZS0+Z2V0dGVyKCkpIHtcCi0gICAgICAgICAgICBtX2ZpbmlzaGVkID0gZmFsc2U7IFwKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkgXAotICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5
bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5
bGUpOyBcCi0gICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKG1fZnJv
bVN0eWxlLT5nZXR0ZXIoKSwgbV90b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jlc3MoKSkpO1wKLSAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3ApIFwKLSAgICAgICAgICAgICAgICByZXR1
cm47IFwKLSAgICAgICAgfVwKLSAgICB9XAorI3ByYWdtYSBtYXJrIC0KIAotI2RlZmluZSBCTEVO
RF9NQVlCRV9JTlZBTElEX0NPTE9SKHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1f
cHJvcGVydHkgPT0gcHJvcCAmJiBtX3RvU3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5n
ZXR0ZXIoKSkgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRT
dHlsZSk7IFwKLSAgICBcCi0gICAgaWYgKChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFh
bmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApKSB8fCBtX3Byb3BlcnR5ID09
IHByb3ApIHsgXAotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Z2V0dGVy
KCk7IFwKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IG1fdG9TdHlsZS0+Z2V0dGVyKCk7IFwKLSAg
ICAgICAgaWYgKGZyb21Db2xvci5pc1ZhbGlkKCkgfHwgdG9Db2xvci5pc1ZhbGlkKCkpIHsgXAot
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKSBcCi0gICAgICAgICAgICAgICAg
ZnJvbUNvbG9yID0gbV9mcm9tU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmICghdG9D
b2xvci5pc1ZhbGlkKCkpIFwKLSAgICAgICAgICAgICAgICB0b0NvbG9yID0gbV90b1N0eWxlLT5j
b2xvcigpOyBcCi0gICAgICAgICAgICBpZiAoZnJvbUNvbG9yICE9IHRvQ29sb3IpIHtcCi0gICAg
ICAgICAgICAgICAgbV9maW5pc2hlZCA9IGZhbHNlOyBcCi0gICAgICAgICAgICAgICAgaWYgKCFh
bmltYXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcg
KHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0g
ICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhmcm9tQ29sb3Is
IHRvQ29sb3IsIHByb2dyZXNzKCkpKTtcCi0gICAgICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkg
PT0gcHJvcCkgXAotICAgICAgICAgICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgICAgIH1c
Ci0gICAgICAgIH1cCi0gICAgfVwKKy8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFueXRoaW5n
IHRvIGRvCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlKQoreworICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW0gPSB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAKKyAgICAvLyBub3RoaW5nIHRvIGRvIGlmIHdlIGRvbid0
IGhhdmUgYW55IHRyYW5zaXRpb25zIG9yIGlmIHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgdHJhbnNp
dGlvbnMgYXJlIHRoZSBzYW1lCisgICAgaWYgKG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpICYmICFh
bmltKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG51bUFuaW1zID0gMDsKKyAgICBi
b29sIHRyYW5zaXRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIC8vIHNlZSBpZiB0aGUg
bGlzdHMgbWF0Y2gKKyAgICBmb3IgKCA7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsKKyAg
ICAgICAgKytudW1BbmltczsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0g
KGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5SW52YWxpZCkgPyAwIDoK
KyAgICAgICAgbV90cmFuc2l0aW9ucy5nZXQoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkpOwor
ICAgICAgICBpZiAoIWltcGxBbmltIHx8ICFpbXBsQW5pbS0+YW5pbWF0aW9uc01hdGNoKGFuaW0p
KSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uc0NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCF0cmFuc2l0aW9uc0NoYW5n
ZWQgJiYgbV90cmFuc2l0aW9ucy5zaXplKCkgIT0gbnVtQW5pbXMpCisgICAgICAgIHRyYW5zaXRp
b25zQ2hhbmdlZCA9IHRydWU7CisgICAgCisgICAgaWYgKCF0cmFuc2l0aW9uc0NoYW5nZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyB0cmFuc2l0aW9ucyBoYXZlIGNoYW5nZWQsIHVw
ZGF0ZSB0aGUgbGlzdAorICAgIHJlc2V0VHJhbnNpdGlvbnMocmVuZGVyZXIpOworICAgIAorICAg
IGlmICghdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBhZGQgYWxsIHRoZSBuZXcgYW5pbWF0aW9ucworICAgIGZvciAoYW5pbSA9IHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpOyBhbmltOyBhbmltID0gYW5pbS0+bmV4dCgpKSB7CisgICAg
ICAgIAorICAgICAgICBpbnQgcHJvcGVydHkgICAgICAgID0gYW5pbS0+dHJhbnNpdGlvblByb3Bl
cnR5KCk7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiAgICAgPSBhbmltLT5kdXJhdGlvbigpOwor
ICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQgID0gYW5pbS0+YW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQoKTsKKyAgICAgICAgZG91YmxlIGRlbGF5ICAgICAgICA9IGFuaW0tPmFuaW1hdGlvbkRlbGF5
KCk7CisgICAgICAgIAorICAgICAgICBpZiAocHJvcGVydHkgJiYgKGR1cmF0aW9uIHx8IGRlbGF5
KSAmJiBpdGVyYXRpb25Db3VudCAmJiAhbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9wZXJ0eSkp
IHsKKyAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGlj
aXRBbmltYXRpb24oY29uc3RfY2FzdDxUcmFuc2l0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCB0aGlz
KTsKKyAgICAgICAgICAgIG1fdHJhbnNpdGlvbnMuc2V0KHByb3BlcnR5LCBhbmltYXRpb24pOwor
ICAgICAgICB9CisgICAgfQorfQogCi0jZGVmaW5lIEJMRU5EX1NIQURPVyhwcm9wLCBnZXR0ZXIs
IHNldHRlcikgXAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgKCFtX3RvU3R5bGUtPmdl
dHRlcigpIHx8ICF0YXJnZXRTdHlsZS0+Z2V0dGVyKCkgfHwgKm1fdG9TdHlsZS0+Z2V0dGVyKCkg
IT0gKnRhcmdldFN0eWxlLT5nZXR0ZXIoKSkpIFwKLSAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1
cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAgXAotICAgIGlmICgobV9wcm9wZXJ0eSA9
PSBjQW5pbWF0ZUFsbCAmJiAhYW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9w
KSkgfHwgbV9wcm9wZXJ0eSA9PSBwcm9wKSB7IFwKLSAgICAgICAgaWYgKG1fZnJvbVN0eWxlLT5n
ZXR0ZXIoKSAmJiBtX3RvU3R5bGUtPmdldHRlcigpICYmICptX2Zyb21TdHlsZS0+Z2V0dGVyKCkg
IT0gKm1fdG9TdHlsZS0+Z2V0dGVyKCkpIHtcCi0gICAgICAgICAgICBtX2ZpbmlzaGVkID0gZmFs
c2U7IFwKLSAgICAgICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkgXAotICAgICAgICAgICAgICAg
IGFuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHls
ZSgqdGFyZ2V0U3R5bGUpOyBcCi0gICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxl
bmRGdW5jKG1fZnJvbVN0eWxlLT5nZXR0ZXIoKSwgbV90b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jl
c3MoKSkpO1wKLSAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3ApIFwKLSAgICAgICAg
ICAgICAgICByZXR1cm47IFwKLSAgICAgICAgfVwKKy8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlz
IGFueXRoaW5nIHRvIGRvCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
bmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKK3sKKyAgICBjb25zdCBUcmFuc2l0aW9uKiBh
bmltID0gdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICAvLyBub3RoaW5nIHRv
IGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMgb3IgaWYgdGhlIGN1cnJlbnQgYW5k
IHRhcmdldCBhbmltYXRpb25zIGFyZSB0aGUgc2FtZQorICAgIGlmICgobV9rZXlmcmFtZUFuaW1h
dGlvbnMuaXNFbXB0eSgpICYmICFhbmltKSB8fCAKKyAgICAgICAgKGN1cnJlbnRTdHlsZSAmJiBj
dXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+YW5pbWF0aW9ucygp
KSA9PSAqYW5pbSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3QgbnVtQW5pbXMg
PSAwOworICAgIGJvb2wgYW5pbXNDaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgLy8gc2VlIGlm
IHRoZSBsaXN0cyBtYXRjaAorICAgIGZvciAoIDsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkg
eworICAgICAgICBpZiAoIWFuaW0tPmlzVmFsaWRBbmltYXRpb24oKSkgeworICAgICAgICAgICAg
YW5pbXNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBrZkFuaW0gPSAobnVtQW5pbXMgPCBtX2tleWZyYW1lQW5pbWF0aW9ucy5z
aXplKCkpID8gbV9rZXlmcmFtZUFuaW1hdGlvbnNbbnVtQW5pbXNdIDogMDsKKyAgICAgICAgICAg
IGlmICgha2ZBbmltIHx8ICFrZkFuaW0tPmFuaW1hdGlvbnNNYXRjaChhbmltKSkKKyAgICAgICAg
ICAgICAgICBhbmltc0NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9ucyBt
YXRjaCwgYnV0IHBsYXkgc3RhdGVzIG1heSBkaWZmZXIuIHVwZGF0ZSBpZiBuZWVkZWQKKyAgICAg
ICAgICAgICAgICAgICAga2ZBbmltLT51cGRhdGVQbGF5U3RhdGUoYW5pbS0+YW5pbWF0aW9uUGxh
eVN0YXRlKCkgPT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBu
ZXcgb25lLCBqdXN0IGluIGNhc2UgdGhlIHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQKKyAgICAgICAg
ICAgICAgICAgICAga2ZBbmltLT5zZXRBbmltYXRpb24oYW5pbSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICsrbnVtQW5pbXM7CiAgICAgfQor
ICAgIAorICAgIGlmICghYW5pbXNDaGFuZ2VkICYmIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUo
KSAhPSBudW1BbmltcykKKyAgICAgICAgYW5pbXNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAKKyAgICBp
ZiAoIWFuaW1zQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGFuaW1hdGlv
bnMgaGF2ZSBjaGFuZ2VkLCB1cGRhdGUgdGhlIGxpc3QKKyAgICByZXNldEFuaW1hdGlvbnMocmVu
ZGVyZXIpOworICAgIAorICAgIGlmICghdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIC8vIGFkZCBhbGwgdGhlIG5ldyBhbmltYXRpb25zCisgICAg
aW50IGluZGV4ID0gMDsKKyAgICBmb3IgKGFuaW0gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygp
OyBhbmltOyBhbmltID0gYW5pbS0+bmV4dCgpLCArK2luZGV4KSB7CisgICAgICAgIAorICAgICAg
ICBpZiAoIWFuaW0tPmlzVmFsaWRBbmltYXRpb24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgLy8gZG9uJ3QgYm90aGVyIGFkZGluZyB0aGUgYW5pbWF0aW9uIGlm
IGl0IGhhcyBubyBrZXlmcmFtZXMgb3Igd29uJ3QgYW5pbWF0ZQorICAgICAgICBpZiAoKGFuaW0t
PmR1cmF0aW9uKCkgfHwgYW5pbS0+YW5pbWF0aW9uRGVsYXkoKSkgJiYgYW5pbS0+YW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoKSAmJgorICAgICAgICAgICAgYW5pbS0+a2V5ZnJhbWVMaXN0KCkuZ2V0
KCkgJiYgIWFuaW0tPmtleWZyYW1lTGlzdCgpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25zLmFwcGVuZChuZXcgS2V5ZnJhbWVBbmltYXRpb24oY29uc3RfY2Fz
dDxUcmFuc2l0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCBpbmRleCwgdGhpcykpOworICAgICAgICB9
CisgICAgfQorfQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUlt
cGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5
bGUqJiBhbmltYXRlZFN0eWxlKQoraW50IENvbXBvc2l0ZUFuaW1hdGlvbjo6ZmluZEtleWZyYW1l
QW5pbWF0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICAvLyBGSVhNRTogSWYg
d2UgaGF2ZSBubyB0cmFuc2l0aW9uLXByb3BlcnR5LCB0aGVuIHRoZSBvbmx5IHdheSB0byB0ZWxs
IGlmIG91ciBnb2FsIHN0YXRlIGNoYW5nZWQgaXMgdG8gY2hlY2sKLSAgICAvLyBldmVyeSBzaW5n
bGUgYW5pbWF0YWJsZSBwcm9wZXJ0eS4gIEZvciBub3cgd2UnbGwganVzdCBkaWZmIHRoZSBzdHls
ZXMgdG8gYXNrIHRoYXQgcXVlc3Rpb24sCi0gICAgLy8gYnV0IHdlIHNob3VsZCByZWFsbHkgZXhj
bHVkZSBub24tYW5pbWF0YWJsZSBwcm9wZXJ0aWVzLgotICAgIGlmICghbV90b1N0eWxlIHx8ICht
X3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmIHRhcmdldFN0eWxlLT5kaWZmKG1fdG9TdHlsZSkp
KQotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0K
LSAgICAvLyBGSVhNRTogQmxvdyB1cCBzaG9ydGhhbmRzIHNvIHRoYXQgdGhleSBjYW4gYmUgaG9u
b3JlZC4KLSAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxlZnQs
IGxlZnQsIHNldExlZnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UmlnaHQsIHJpZ2h0LCBzZXRS
aWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlUb3AsIHRvcCwgc2V0VG9wKTsKLSAgICBCTEVO
RChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBzZXRCb3R0b20pOwotICAgIEJMRU5EKENTU1By
b3BlcnR5V2lkdGgsIHdpZHRoLCBzZXRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlIZWln
aHQsIGhlaWdodCwgc2V0SGVpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckxlZnRX
aWR0aCwgYm9yZGVyTGVmdFdpZHRoLCBzZXRCb3JkZXJMZWZ0V2lkdGgpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9yZGVyUmlnaHRXaWR0aCwgc2V0Qm9yZGVyUmln
aHRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9yZGVyVG9w
V2lkdGgsIHNldEJvcmRlclRvcFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlckJv
dHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwgc2V0Qm9yZGVyQm90dG9tV2lkdGgpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgbWFyZ2luTGVmdCwgc2V0TWFyZ2luTGVmdCk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgbWFyZ2luUmlnaHQsIHNldE1hcmdp
blJpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU1hcmdpblRvcCwgbWFyZ2luVG9wLCBzZXRN
YXJnaW5Ub3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBtYXJnaW5Cb3R0
b20sIHNldE1hcmdpbkJvdHRvbSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwg
cGFkZGluZ0xlZnQsIHNldFBhZGRpbmdMZWZ0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRp
bmdSaWdodCwgcGFkZGluZ1JpZ2h0LCBzZXRQYWRkaW5nUmlnaHQpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5UGFkZGluZ1RvcCwgcGFkZGluZ1RvcCwgc2V0UGFkZGluZ1RvcCk7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRkaW5nQm90dG9tLCBzZXRQYWRkaW5nQm90dG9t
KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU9wYWNpdHksIG9wYWNpdHksIHNldE9wYWNpdHkpOwot
ICAgIEJMRU5EKENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLCBzZXRDb2xvcik7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJhY2tncm91bmRDb2xvciwgc2V0QmFja2dyb3Vu
ZENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uUnVsZUNvbG9yLCBjb2x1bW5SdWxlQ29sb3IsIHNldENvbHVtblJ1bGVDb2xvcik7Ci0g
ICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsIGNvbHVtblJ1bGVXaWR0
aCwgc2V0Q29sdW1uUnVsZVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVt
bkdhcCwgY29sdW1uR2FwLCBzZXRDb2x1bW5HYXApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Q29sdW1uQ291bnQsIGNvbHVtbkNvdW50LCBzZXRDb2x1bW5Db3VudCk7Ci0gICAgQkxFTkQo
Q1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgY29sdW1uV2lkdGgsIHNldENvbHVtbldpZHRo
KTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHNldFRleHRTdHJva2VDb2xvcik7Ci0gICAgQkxF
TkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIHRl
eHRGaWxsQ29sb3IsIHNldFRleHRGaWxsQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Vi
a2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGhvcml6b250YWxCb3JkZXJTcGFjaW5nLCBzZXRI
b3Jpem9udGFsQm9yZGVyU3BhY2luZyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3Jk
ZXJWZXJ0aWNhbFNwYWNpbmcsIHZlcnRpY2FsQm9yZGVyU3BhY2luZywgc2V0VmVydGljYWxCb3Jk
ZXJTcGFjaW5nKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5Qm9y
ZGVyTGVmdENvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIHNldEJvcmRlckxlZnRDb2xvcik7Ci0gICAg
QkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIGJv
cmRlclJpZ2h0Q29sb3IsIHNldEJvcmRlclJpZ2h0Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lO
VkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgYm9yZGVyVG9wQ29sb3IsIHNl
dEJvcmRlclRvcENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3Bl
cnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBzZXRCb3JkZXJCb3R0b21D
b2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlaSW5kZXgsIHpJbmRleCwgc2V0WkluZGV4KTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIGxpbmVIZWlnaHQsIHNldExpbmVIZWln
aHQpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlPdXRsaW5lQ29s
b3IsIG91dGxpbmVDb2xvciwgc2V0T3V0bGluZUNvbG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eU91dGxpbmVPZmZzZXQsIG91dGxpbmVPZmZzZXQsIHNldE91dGxpbmVPZmZzZXQpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgsIHNldE91dGxpbmVXaWR0
aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nLCBz
ZXRMZXR0ZXJTcGFjaW5nKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCB3b3Jk
U3BhY2luZywgc2V0V29yZFNwYWNpbmcpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9wZXJ0eVdl
YmtpdEJveFNoYWRvdywgYm94U2hhZG93LCBzZXRCb3hTaGFkb3cpOwotICAgIEJMRU5EX1NIQURP
VyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHRleHRTaGFkb3csIHNldFRleHRTaGFkb3cpOwotICAg
IEJMRU5EKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCB0cmFuc2Zvcm0sIHNldFRyYW5zZm9y
bSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCB0cmFuc2Zv
cm1PcmlnaW5YLCBzZXRUcmFuc2Zvcm1PcmlnaW5YKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybU9yaWdpblksIHRyYW5zZm9ybU9yaWdpblksIHNldFRyYW5zZm9ybU9yaWdp
blkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1cywgYm9y
ZGVyVG9wTGVmdFJhZGl1cywgc2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgYm9yZGVyVG9wUmlnaHRSYWRpdXMs
IHNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIHNldEJvcmRlckJv
dHRvbUxlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9t
UmlnaHRSYWRpdXMsIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21SaWdo
dFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCB2aXNpYmlsaXR5LCBz
ZXRWaXNpYmlsaXR5KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVpvb20sIHpvb20sIHNldFpvb20p
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkgbV9rZXlmcmFtZUFuaW1hdGlvbnMuc2l6
ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9uc1tpXS0+bmFtZSgpID09
IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gLTE7CiB9CiAKLVJlbmRl
clN0eWxlKiBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpCitSZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJlbmRlck9i
amVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0
YXJnZXRTdHlsZSkKIHsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyZW50VHJhbnNpdGlvbnMg
PSBjdXJyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdGFy
Z2V0VHJhbnNpdGlvbnMgPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBpZiAoY3Vy
cmVudFRyYW5zaXRpb25zICE9IHRhcmdldFRyYW5zaXRpb25zICYmICEoY3VycmVudFRyYW5zaXRp
b25zICYmIHRhcmdldFRyYW5zaXRpb25zICYmICpjdXJyZW50VHJhbnNpdGlvbnMgPT0gKnRhcmdl
dFRyYW5zaXRpb25zKSkgewotICAgICAgICByZXNldChyZW5kZXJlcik7Ci0gICAgICAgIGRlbGV0
ZUFsbFZhbHVlcyhtX2FuaW1hdGlvbnMpOwotICAgICAgICBtX2FuaW1hdGlvbnMuY2xlYXIoKTsK
LSAgICB9Ci0KLSAgICAvLyBHZXQgdGhlIGFuaW1hdGlvbiBsYXllcnMgZnJvbSB0aGUgdGFyZ2V0
IHN0eWxlLgotICAgIC8vIEZvciBlYWNoIG9uZSwgd2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgYW5p
bWF0aW9uIHVubGVzcyBvbmUgZXhpc3RzIGFscmVhZHkgKGxhdGVyIG9jY3VycmVuY2VzIG9mIGR1
cGxpY2F0ZQotICAgIC8vIHRyaWdnZXJzIGluIHRoZSBsYXllciBsaXN0IGdldCBpZ25vcmVkKS4K
LSAgICBpZiAobV9hbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGNvbnN0IFRy
YW5zaXRpb24qIHRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbnM7IHRyYW5zaXRpb247IHRy
YW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBwcm9wZXJ0
eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQgZHVyYXRpb24gPSB0
cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVhdENvdW50ID0gdHJh
bnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAmJiBkdXJh
dGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5zKHByb3BlcnR5KSkg
ewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1w
bGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25z
LnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKKyAgICBSZW5kZXJTdHlsZSogcmVzdWx0U3R5bGUg
PSAwOworICAgIAorICAgIC8vIHdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24n
dCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKQorICAgIHVwZGF0ZVRyYW5zaXRpb25z
KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAKKyAgICBpZiAoY3Vy
cmVudFN0eWxlKSB7CisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdHJhbnNpdGlvbiBvYmpl
Y3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdh
bnQgdGhlbQorICAgICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5l
ZWRlZC4KKyAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIGFuaW0gPSBp
dC0+c2Vjb25kOworICAgICAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgICAgICBhbmlt
LT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1
bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAKKyAgICB1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5
bGUpOworICAgIAogICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0aW9uIG9iamVjdHMgcmVh
ZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVt
CiAgICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAg
UmVuZGVyU3R5bGUqIHJlc3VsdCA9IDA7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0
aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5i
ZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFuaW1hdGUodGhp
cywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdCk7CisgICAgVmVj
dG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBr
ZmVuZDsgKytpdCkgeworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9ICppdDsKKyAg
ICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywgcmVuZGVy
ZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0U3R5bGUgPyByZXN1bHRTdHlsZSA6IHRhcmdl
dFN0eWxlOworfQogCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQot
ICAgIHJldHVybiB0YXJnZXRTdHlsZTsKKy8vICJhbmltYXRpbmciIG1lYW5zIHRoYXQgc29tZXRo
aW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyB0aGUgdGltZXIgdG8ga2VlcCBmaXJpbmcKKy8v
IChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNl
dEFuaW1hdGluZyhib29sIGluQW5pbWF0aW5nKQoreworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9y
IChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNp
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0
aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHRyYW5zaXRpb24tPnNldEFu
aW1hdGluZyhpbkFuaW1hdGluZyk7CisgICAgfSAgICAKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJh
bWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0
KSB7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBhbmlt
LT5zZXRBbmltYXRpbmcoaW5BbmltYXRpbmcpOworICAgIH0KIH0KIAotYm9vbCBDb21wb3NpdGVJ
bXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uOjphbmltYXRpbmcoKQogewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNo
TWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2FuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoIWl0LT5zZWNvbmQt
PmZpbmlzaGVkKCkpCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNp
dGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0aW9uID0g
aXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+YW5pbWF0
aW5nKCkgJiYgdHJhbnNpdGlvbi0+cnVubmluZygpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfSAgICAKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3Rf
aXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFZl
Y3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5ydW5uaW5n
KCkgJiYgYW5pbS0+YW5pbWF0aW5nKCkgJiYgYW5pbS0+YWN0aXZlKCkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENvbXBvc2l0
ZUltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBD
b21wb3NpdGVBbmltYXRpb246OnJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKLSAgICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0
b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxp
Y2l0QW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzZXQocmVuZGVyZXIsIDAs
IDApOworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNv
bmQ7CisgICAgICAgIHRyYW5zaXRpb24tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgZGVsZXRl
IHRyYW5zaXRpb247CisgICAgfQorICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKIH0KIAordm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnJlc2V0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRl
cmVyKQoreworICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBr
ZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZy
YW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMu
YmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24q
IGFuaW0gPSAqaXQ7CisgICAgICAgIGRlbGV0ZSBhbmltOworICAgIH0KKyAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jbGVhcigpOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYW51
cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmIChz
dXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIHJlc2V0IHRyYW5zaXRp
b25zCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0g
bV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAg
ICAgICBpZiAoIWFuaW0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGFuaW0t
PnBvc3RhY3RpdmUoKSAmJiAhYW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpIHsKKyAgICAgICAg
ICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShhbmltLT5TVEFURV9JTlBVVF9NQUtFX05FVywg
LTEpOworICAgICAgICAgICAgYW5pbS0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIC8vIG1ha2UgYSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUgZGVsZXRlZAor
ICAgIFZlY3RvcjxpbnQ+IGZpbmlzaGVkQW5pbWF0aW9uczsKKyAgICAKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IChpbnQpIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnNbaV07Cisg
ICAgICAgIGlmICghYW5pbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoYW5p
bS0+cG9zdGFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZlbnQoKSkKKyAgICAgICAg
ICAgIGZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAgIC8vIGRl
bGV0ZSB0aGVtCisgICAgZm9yIChWZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSBmaW5pc2hlZEFu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZmluaXNoZWRBbmltYXRpb25zLmVuZCgpOyArK2l0KSB7
CisgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zWyppdF0tPnJlc2V0KHJlbmRlcmVyKTsKKyAg
ICAgICAgZGVsZXRlIG1fa2V5ZnJhbWVBbmltYXRpb25zWyppdF07CisgICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLnJlbW92ZSgqaXQpOworICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmlt
YXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKK3sKKyAgICAvLyBzZXQgc3Rh
cnQgdGltZSBvbiBhbGwgYW5pbWF0aW9ucyB3YWl0aW5nIGZvciBpdAorICAgIFZlY3RvcjxLZXlm
cmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRp
b25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsr
aXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7CisgICAgICAgIGlm
IChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdGFydFRpbWUoKSkKKyAgICAgICAgICAgIGFuaW0t
PnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBVVF9TVEFSVF9USU1F
X1NFVCwgdCk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0VHJhbnNp
dGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KQoreworICAgIC8vIHNldCBzdGFy
dCB0aW1lIGZvciBnaXZlbiBwcm9wZXJ0eSB0cmFuc2l0aW9uCisgICAgQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90
cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRB
bmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53
YWl0aW5nRm9yU3RhcnRUaW1lKCkgJiYgCisgICAgICAgICAgICAoYW5pbS0+dHJhbnNpdGlvblBy
b3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gY0Fu
aW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
bkJhc2U6OlNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCB0KTsKKyAgICB9Cit9CisKK3ZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCit7CisgICAgaWYgKG1fc3Vz
cGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNwZW5kZWQgPSB0cnVlOwor
ICAgIAorICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVu
ZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1l
QW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVn
aW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFu
aW0gPSAqaXQ7CisgICAgICAgIGlmIChhbmltKSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVQ
bGF5U3RhdGUoZmFsc2UpOworICAgICAgICAgICAgYW5pbS0+cmVuZGVyZXIoKS0+c3VzcGVuZEFu
aW1hdGlvbnMoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5z
aXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAg
IGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3Ry
YW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFu
aW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhh
c1N0eWxlKCkpIHsKKyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShmYWxzZSk7Cisg
ICAgICAgICAgICBhbmltLT5yZW5kZXJlcigpLT5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5pbWF0aW9u
cygpCit7CisgICAgaWYgKCFtX3N1c3BlbmRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgCisgICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9u
Kj46OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7Cisg
ICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgeworICAgICAg
ICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9ICppdDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5p
bS0+cGxheVN0YXRlUGxheWluZygpKSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3Rh
dGUodHJ1ZSk7CisgICAgICAgICAgICBhbmltLT5yZW5kZXJlcigpLT5yZXN1bWVBbmltYXRpb25z
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9u
cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24q
IGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5oYXNTdHlsZSgp
KSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVQbGF5U3RhdGUodHJ1ZSk7CisgICAgICAgICAg
ICBhbmltLT5yZW5kZXJlcigpLT5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyhpbnQgcHJvcGVydHkpCit7CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBp
dC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiAoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5
KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gY0FuaW1hdGVB
bGwpKQorICAgICAgICAgICAgYW5pbS0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRp
b25zKGludCBwcm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9
IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIChhbmltLT50cmFuc2l0aW9uUHJvcGVy
dHkoKSA9PSBwcm9wZXJ0eSB8fCBhbmltLT50cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBjQW5pbWF0
ZUFsbCkpCisgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKKyAgICB9Cit9
CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdHlsZUlzU2V0dXAoKQoreworICAgIGlmICht
X251bVN0eWxlSXNTZXR1cFdhaXRlcnMgPT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9u
Kj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQg
IT0ga2ZlbmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7
CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdHlsZVNldHVwKCkpCisgICAg
ICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5Q
VVRfU1RZTEVfU0VUVVAsIC0xKTsKKyAgICB9CisgICAgCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0
aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBm
b3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFu
c2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmlt
YXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53YWl0
aW5nRm9yU3R5bGVTZXR1cCgpKQorICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvbkJhc2U6OlNUQVRFX0lOUFVUX1NUWUxFX1NFVFVQLCAtMSk7CisgICAgfQorfQor
Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVy
dHkpIGNvbnN0Cit7CisgICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJh
dG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8
S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgeworICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9ICppdDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRpbmdQ
cm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90
cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5KSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNwcmFn
bWEgbWFyayAtCisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFBy
b3BlcnR5V3JhcHBlckJhc2UoaW50IHByb3ApCisgICAgOiBtX3Byb3AocHJvcCkKKyAgICB7IH0K
KyAgICB2aXJ0dWFsIH5Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgeyB9CisgICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
PTA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0PTA7Cisg
ICAgCisgICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9CisgICAgCitw
cml2YXRlOgorICAgIGludCBtX3Byb3A7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Ns
YXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJCYXNlIHsK
K3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoaW50IHByb3AsIFQgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQor
ICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlciko
KTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRl
cikoKSBjb25zdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJvcGVydHlX
cmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyKGludCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQorICAgIDogUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAg
ICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46
Om1fZ2V0dGVyKSgpLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
U2hhZG93IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRhKj4geworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhpbnQgcHJvcCwgU2hhZG93RGF0YSogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
U2hhZG93RGF0YSosIGJvb2wpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFNoYWRvd0Rh
dGEqPihwcm9wLCBnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAg
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dhID0g
KGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIXNoYWRvd2EgJiYgc2hhZG93YiB8fCBz
aGFkb3dhICYmICFzaGFkb3diKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBp
ZiAoc2hhZG93YSAmJiBzaGFkb3diICYmICgqc2hhZG93YSAhPSAqc2hhZG93YikpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAg
ICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAg
ICAgIFNoYWRvd0RhdGEqIHNoYWRvd2EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFk
b3dEYXRhKiBzaGFkb3diID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSBk
ZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgCisgICAgICAgIGlmICghc2hhZG93YSkKKyAgICAg
ICAgICAgIHNoYWRvd2EgPSAmZGVmYXVsdFNoYWRvd0RhdGE7CisgICAgICAgIGlmICghc2hhZG93
YikKKyAgICAgICAgICAgIHNoYWRvd2IgPSAmZGVmYXVsdFNoYWRvd0RhdGE7CisgICAgICAgIAor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhzaGFkb3dhLCBzaGFkb3diLCBwcm9n
KSwgZmFsc2UpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoU2hhZG93RGF0YSosIGJvb2wpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFw
cGVySW50U2l6ZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4geworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlckludFNpemUoaW50IHByb3AsIEludFNpemUgKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29u
c3QgSW50U2l6ZSYpKQorICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPEludFNpemU+KHByb3As
IGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3QKKyAgICB7CisgICAgICAgIEludFNpemUgc2l6ZWEgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBJbnRTaXplIHNpemViID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiAoc2l6ZWEgPT0gc2l6ZWIpOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFs
IHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIEludFNp
emUgc2l6ZWEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBJbnRTaXplIHNpemViID0gKGIt
PiptX2dldHRlcikoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoc2l6ZWEsIHNpemViLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBJbnRTaXplJik7Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcihpbnQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgOiBQcm9w
ZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAg
ICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0
b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxp
ZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0
b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAg
ICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOworICAgIH0KKyAgICAK
KyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7Cisg
ICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9y
IHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAo
IXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJv
ZykpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHls
ZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIp
KGNvbnN0IENvbG9yJik7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRO
b25Db25zdENvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZE5vbkNvbnN0Q29sb3IoaW50IHByb3AsIENvbG9y
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IENvbG9yJikpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAg
LCBtX2dldHRlcihnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAg
CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+
Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsK
KyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9y
ID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21D
b2xvciA9PSB0b0NvbG9yOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZykgY29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChh
LT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZykpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgQ29sb3IgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAo
UmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKK307CisgICAgCisgICAgCiBj
bGFzcyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7CiBwdWJsaWM6CiAgICAgQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoRnJhbWUqKTsKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUoKTsKLQotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBnZXQoUmVuZGVyT2JqZWN0
Kik7CisgICAgCisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhY2Nlc3NDb21wb3NpdGVBbmltYXRp
b24oUmVuZGVyT2JqZWN0Kik7CiAgICAgYm9vbCBjbGVhcihSZW5kZXJPYmplY3QqKTsKICAgICAK
LSAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7
Ci0gICAgdm9pZCB1cGRhdGVUaW1lcigpOwotCi0gICAgYm9vbCBoYXNJbXBsaWNpdEFuaW1hdGlv
bnMoKSBjb25zdCB7IHJldHVybiAhbV9hbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCisgICAgdm9p
ZCBhbmltYXRpb25UaW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiop
OworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKKyAgICAKKyAgICB2b2lkIHVwZGF0
ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZT4qKTsKKyAgICB2b2lkIHN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgIAor
ICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuaXNFbXB0eSgpOyB9CisgICAgCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhEb2N1
bWVudCogZG9jdW1lbnQpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCogZG9j
dW1lbnQpOworICAgIAorICAgIHZvaWQgY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucygpOworICAg
IAorICAgIHZvaWQgc3R5bGVJc1NldHVwKCk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1By
b3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdDsK
KyAgICAKKyAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoaW50IHByb3AsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAgCisgICAgLy8gcmV0dXJu
IHRydWUgaWYgd2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAg
c3RhdGljIGJvb2wgYmxlbmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKTsK
KyAgICAKKyAgICB2b2lkIHNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoYm9vbCB3YWl0aW5nKSAg
ICB7IGlmICh3YWl0aW5nKSBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMrKzsgZWxzZSBtX251bVN0
eWxlSXNTZXR1cFdhaXRlcnMtLTsgfQorICAgIAogcHJpdmF0ZToKLSAgICBIYXNoTWFwPFJlbmRl
ck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj4gbV9hbmltYXRpb25zOwotICAg
IFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiBtX3RpbWVyOworICAgIHN0YXRpYyB2
b2lkIGVuc3VyZVByb3BlcnR5TWFwKCk7CisgICAgCisgICAgdHlwZWRlZiBIYXNoTWFwPFJlbmRl
ck9iamVjdCosIENvbXBvc2l0ZUFuaW1hdGlvbio+IFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDsK
KyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXAgICAgICAgICAgICBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnM7CisgICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+ICAgbV9h
bmltYXRpb25UaW1lcjsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4gICBt
X3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXI7CiAgICAgRnJhbWUqIG1fZnJhbWU7CisgICAgdWlu
dDMyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJz
OworICAgIAorICAgIHN0YXRpYyBWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KiBnX3Byb3Bl
cnR5V3JhcHBlcnM7CisgICAgc3RhdGljIGludCBnX3Byb3BlcnR5V3JhcHBlck1hcFtudW1DU1NQ
cm9wZXJ0aWVzXTsKIH07CiAKKyNwcmFnbWEgbWFyayAtCisKK1ZlY3RvcjxQcm9wZXJ0eVdyYXBw
ZXJCYXNlKj4qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnX3Byb3BlcnR5V3JhcHBlcnMg
PSAwOworaW50IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnX3Byb3BlcnR5V3JhcHBlck1h
cFtdOworCiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6QW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUoRnJhbWUqIGZyYW1lKQotICAgIDogbV90aW1lcih0aGlzLCAmQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OnRpbWVyRmlyZWQpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorOiBtX2FuaW1h
dGlvblRpbWVyKHRoaXMsICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGlt
ZXJGaXJlZCkKKywgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKHRoaXMsICZBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKQorLCBtX2Zy
YW1lKGZyYW1lKQorLCBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMoMCkKIHsKKyAgICBlbnN1cmVQ
cm9wZXJ0eU1hcCgpOwogfQogCiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6fkFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlKCkKIHsKLSAgICBkZWxldGVBbGxWYWx1ZXMobV9hbmltYXRpb25z
KTsKKyAgICBkZWxldGVBbGxWYWx1ZXMobV9jb21wb3NpdGVBbmltYXRpb25zKTsKIH0KIAotQ29t
cG9zaXRlSW1wbGljaXRBbmltYXRpb24qIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpnZXQo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKKy8vIHN0YXRpYwordm9pZCBBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6ZW5zdXJlUHJvcGVydHlNYXAoKQogewotICAgIENvbXBvc2l0ZUltcGxpY2l0
QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyKTsKLSAgICBp
ZiAoIWFuaW1hdGlvbiAmJiByZW5kZXJlci0+c3R5bGUoKS0+dHJhbnNpdGlvbnMoKSkgewotICAg
ICAgICBhbmltYXRpb24gPSBuZXcgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24oKTsKLSAgICAg
ICAgbV9hbmltYXRpb25zLnNldChyZW5kZXJlciwgYW5pbWF0aW9uKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBp
dCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IEFuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJv
eWVkPworICAgIGlmIChnX3Byb3BlcnR5V3JhcHBlcnMgPT0gMCkgeworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMgPSBuZXcgVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPigpOworICAgICAg
ICAKKyAgICAgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8g
dGhlIGNvbXBhcmlzb25zIGFuZCBibGVuZHMKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TGVmdCwgJlJlbmRl
clN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExlZnQpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
UmlnaHQsICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5n
dGg+KENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6OnRvcCwgJlJlbmRlclN0eWxlOjpzZXRU
b3ApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJl
bmRlclN0eWxlOjpzZXRCb3R0b20pKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJT
dHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpKTsK
KyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1
bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWdu
ZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9y
dD4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0
b21XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCkpOworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NT
UHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHls
ZTo6c2V0TWFyZ2luTGVmdCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRl
clN0eWxlOjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCkpOworICAg
ICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0
aD4oQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVy
U3R5bGU6OnNldE1hcmdpblRvcCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZS
ZW5kZXJTdHlsZTo6bWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSkp
OworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
PExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCkpOworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRk
aW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBh
ZGRpbmdSaWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCkpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJv
cGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0UGFkZGluZ0JvdHRvbSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgQ29sb3Im
PihDU1NQcm9wZXJ0eUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dENvbG9yKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgQ29sb3ImPihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgJlJlbmRl
clN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9y
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lk
dGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29s
dW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkdhcCkpOworICAgICAgICBnX3Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQ
cm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1u
V2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4LCAmUmVuZGVyU3R5bGU6OnpJbmRleCwgJlJl
bmRlclN0eWxlOjpzZXRaSW5kZXgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJl
bmRlclN0eWxlOjpsaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+
KENTU1Byb3BlcnR5T3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAm
UmVuZGVyU3R5bGU6OnNldE91dGxpbmVPZmZzZXQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBw
ZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVy
dHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChu
ZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZykpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGlu
dD4oQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5k
ZXJTdHlsZTo6c2V0VHJhbnNmb3JtKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpz
ZXRUcmFuc2Zvcm1PcmlnaW5YKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9y
aWdpblksICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRU
cmFuc2Zvcm1PcmlnaW5ZKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJh
ZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclRvcExlZnRSYWRpdXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBl
bmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BS
aWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBl
cnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJv
cmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1
cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRp
dXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxFVmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZp
c2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJpbGl0eSkpOworICAgICAgICAvLyBGSVhN
RTogem9vbSBtaXNzaW5nCisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogdGhlc2UgbWlnaHQg
YmUgaW52YWxpZCBjb2xvcnMsIG5lZWQgdG8gY2hlY2sgZm9yIHRoYXQKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1
bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZE5v
bkNvbnN0Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHls
ZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvcikpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5
YmVJbnZhbGlkTm9uQ29uc3RDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsICZS
ZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9y
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yKSk7
CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJN
YXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yKSk7
CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJN
YXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6
OmJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yKSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNvbG9yKSk7Cisg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRs
aW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yKSk7CisgICAgICAgIAorICAg
ICAgICAvLyB0aGVzZSBhcmUgZm9yIHNoYWRvd3MKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNo
YWRvdywgJlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXJTaGFkb3coQ1NTUHJvcGVydHlUZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnRleHRTaGFkb3cs
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNoYWRvdykpOworICAgICAgICAKKyAgICAgICAgLy8gbWFr
ZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KSBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCisgICAg
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlck1hcFtpXSA9IC0xOworICAgICAgICAKKyAgICAgICAg
c2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpCisgICAgICAgICAgICBnX3Byb3BlcnR5V3JhcHBl
ck1hcFsoKmdfcHJvcGVydHlXcmFwcGVycylbaV0tPnByb3BlcnR5KCldID0gaTsKICAgICB9Cit9
CisKKy8vIHN0YXRpYworYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJvcGVydGll
c0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpCit7CisgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAgICAgc2l6ZV90IG4g
PSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghKCpnX3Byb3BlcnR5V3JhcHBl
cnMpW2ldLT5lcXVhbHMoYSwgYikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHByb3AgPj0gMCAmJiBwcm9wIDwgbnVtQ1NTUHJv
cGVydGllcykgeworICAgICAgICBpbnQgaSA9IGdfcHJvcGVydHlXcmFwcGVyTWFwW3Byb3BdOwor
ICAgICAgICByZXR1cm4gKGkgPj0gMCkgPyAoKmdfcHJvcGVydHlXcmFwcGVycylbaV0tPmVxdWFs
cyhhLCBiKSA6IHRydWU7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCisvLyBzdGF0aWMg
LSByZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1l
cnMKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcyhpbnQg
cHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZykKK3sKKyAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZUFsbCkg
eworICAgICAgICBib29sIG5lZWRzVGltZXIgPSBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHNp
emVfdCBuID0gZ19wcm9wZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgICAgICBQcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldOworICAgICAgICAgICAgaWYg
KCF3cmFwcGVyLT5lcXVhbHMoYSwgYikpIHsKKyAgICAgICAgICAgICAgICB3cmFwcGVyLT5ibGVu
ZChkc3QsIGEsIGIsIHByb2cpOworICAgICAgICAgICAgICAgIG5lZWRzVGltZXIgPSB0cnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBuZWVkc1RpbWVyOworICAg
IH0KKyAgICAKKyAgICBpZiAocHJvcCA+PSAwICYmIHByb3AgPCBudW1DU1NQcm9wZXJ0aWVzKSB7
CisgICAgICAgIGludCBpID0gZ19wcm9wZXJ0eVdyYXBwZXJNYXBbcHJvcF07CisgICAgICAgIGlm
IChpID49IDApIHsKKyAgICAgICAgICAgIFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSAo
KmdfcHJvcGVydHlXcmFwcGVycylbaV07CisgICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChkc3Qs
IGEsIGIsIHByb2cpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb21wb3NpdGVBbmltYXRpb24qIEFuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjphY2Nlc3NDb21wb3NpdGVBbmltYXRpb24oUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlcikKK3sKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVyZXIpOworICAgIGlmICghYW5pbWF0aW9uKSB7
CisgICAgICAgIGFuaW1hdGlvbiA9IG5ldyBDb21wb3NpdGVBbmltYXRpb24oIXJlbmRlcmVyLT5k
b2N1bWVudCgpLT5sb2FkQ29tcGxldGUoKSwgdGhpcyk7CisgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5zZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CisgICAgfQogICAgIHJldHVybiBhbmlt
YXRpb247CiB9CiAKIGJvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKFJlbmRl
ck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGFu
aW1hdGlvbiA9IG1fYW5pbWF0aW9ucy50YWtlKHJlbmRlcmVyKTsKKyAgICAvLyByZXR1cm4gZmFs
c2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9SIHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRv
bid0IHRyeSB0bworICAgIC8vIGRvIGEgc2V0Q2hhbmdlZCgpIHdoZW4gc3VzcGVuZGVkCisgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMudGFr
ZShyZW5kZXJlcik7CiAgICAgaWYgKCFhbmltYXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBhbmltYXRpb24tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICBhbmltYXRpb24tPnJlc2V0VHJh
bnNpdGlvbnMocmVuZGVyZXIpOworICAgIGJvb2wgd2FzU3VzcGVuZGVkID0gYW5pbWF0aW9uLT5z
dXNwZW5kZWQoKTsKICAgICBkZWxldGUgYW5pbWF0aW9uOwotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiAhd2FzU3VzcGVuZGVkOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjp1cGRhdGVUaW1lcigpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVh
bnVwRmluaXNoZWRBbmltYXRpb25zKCkKIHsKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6
OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5k
KCk7CisgICAgZm9yIChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0
aW9uc0VuZDsgKytpdCkgeworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZp
cnN0OworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgY29tcEFuaW0tPmNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMocmVuZGVyZXIpOwor
ICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3R5bGVJc1NldHVw
KCkKK3sKKyAgICBpZiAobV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzID09IDApCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
eworICAgICAgICBpdC0+c2Vjb25kLT5zdHlsZUlzU2V0dXAoKTsKKyAgICB9Cit9CisKK3ZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKCkKK3sKICAg
ICBib29sIGFuaW1hdGluZyA9IGZhbHNlOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29t
cG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVu
ZCgpOwotICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFu
aW1hdGlvbio+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFuaW1hdGluZygpKSB7CisgICAgCisg
ICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5k
ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5p
bWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdp
bigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgQ29t
cG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghY29t
cEFuaW0tPnN1c3BlbmRlZCgpICYmIGNvbXBBbmltLT5hbmltYXRpbmcoKSkgewogICAgICAgICAg
ICAgYW5pbWF0aW5nID0gdHJ1ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
fQogICAgIAogICAgIGlmIChhbmltYXRpbmcpIHsKLSAgICAgICAgaWYgKCFtX3RpbWVyLmlzQWN0
aXZlKCkpCi0gICAgICAgICAgICBtX3RpbWVyLnN0YXJ0UmVwZWF0aW5nKGNBbmltYXRpb25UaW1l
ckRlbGF5KTsKLSAgICB9IGVsc2UgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV90
aW1lci5zdG9wKCk7CisgICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQor
ICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGlt
ZXJEZWxheSk7CisgICAgfSBlbHNlIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCisg
ICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
PiogdGltZXIpCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVSZW5kZXJp
bmdEaXNwYXRjaGVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KikKIHsK
KyAgICBpZiAobV9mcmFtZSAmJiBtX2ZyYW1lLT5kb2N1bWVudCgpKSB7CisgICAgICAgIG1fZnJh
bWUtPmRvY3VtZW50KCktPnVwZGF0ZVJlbmRlcmluZygpOworICAgIH0KK30KKwordm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkK
K3sKKyAgICBpZiAoIW1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIG1fdXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlci5zdGFydE9uZVNob3QoMCk7CisgICAg
fQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZp
cmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiogdGltZXIpCit7CisgICAgLy9j
bGVhbnVwRmluaXNoZWRBbmltYXRpb25zKCk7CisgICAgCiAgICAgLy8gV2hlbiB0aGUgdGltZXIg
ZmlyZXMsIGFsbCB3ZSBkbyBpcyBjYWxsIHNldENoYW5nZWQgb24gYWxsIERPTSBub2RlcyB3aXRo
IHJ1bm5pbmcgYW5pbWF0aW9ucyBhbmQgdGhlbiBkbyBhbiBpbW1lZGlhdGUKICAgICAvLyB1cGRh
dGVSZW5kZXJpbmcuICBJdCB3aWxsIHRoZW4gY2FsbCBiYWNrIHRvIHVzIHdpdGggbmV3IGluZm9y
bWF0aW9uLgogICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgSGFzaE1hcDxSZW5kZXJP
YmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQgPSBtX2Fu
aW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0
ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+YW5pbWF0aW5nKCkp
IHsKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFuaW1hdGlv
bnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChSZW5kZXJPYmpl
Y3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgeworICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBDb21wb3NpdGVB
bmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKCFjb21wQW5pbS0+
c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmFuaW1hdGluZygpKSB7CiAgICAgICAgICAgICBhbmlt
YXRpbmcgPSB0cnVlOwotICAgICAgICAgICAgaXQtPmZpcnN0LT5lbGVtZW50KCktPnNldENoYW5n
ZWQoKTsKKyAgICAgICAgICAgIGNvbXBBbmltLT5zZXRBbmltYXRpbmcoZmFsc2UpOworICAgICAg
ICAgICAgc2V0Q2hhbmdlZChyZW5kZXJlci0+ZWxlbWVudCgpKTsKICAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKICAgICAK
LSAgICB1cGRhdGVUaW1lcigpOworICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CiB9CiAKLUFu
aW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQotOm1f
ZGF0YShuZXcgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoZnJhbWUpKQorYm9vbCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVy
T2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3QKIHsKKyAgICBDb21wb3NpdGVBbmltYXRp
b24qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQob2JqKTsKKyAgICBpZiAo
IWFuaW1hdGlvbikgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJldHVybiBhbmltYXRpb24tPmlz
QW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHkpOworfQogCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAg
UmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigp
OyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQo
KSA9PSBkb2N1bWVudCkKKyAgICAgICAgICAgIGNvbXBBbmltLT5zdXNwZW5kQW5pbWF0aW9ucygp
OworICAgIH0KKyAgICAKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOwogfQogCit2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGFu
aW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChSZW5k
ZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVBbmlt
YXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkgewor
ICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBDb21w
b3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHJlbmRl
cmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQorICAgICAgICAgICAgY29tcEFuaW0tPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisgICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsK
K30KKworI3ByYWdtYSBtYXJrIC0KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0Fu
aW1hdGVkU3R5bGUpCit7CisgICAgaWYgKCFydW5uaW5nKCkgfHwgIW1fb2JqZWN0LT5kb2N1bWVu
dCgpLT5sb2FkQ29tcGxldGUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIElmIHdl
J3JlIG5vdCBydW5uaW5nIGFueSBhbmltYXRpb25zIGFuZCB0aGVyZSBpcyBubyBjaGFuZ2UgaW4g
b3VyIHByb3AsIGp1c3QgcmV0dXJuIAorICAgIGlmIChpc25ldygpICYmIEFuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwobV9wcm9wZXJ0eSwgY3VycmVudFN0eWxlLCB0
YXJnZXRTdHlsZSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgdGhp
cyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5n
IHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCisgICAgLy8gSWYgc28sIHdlIG5lZWQgdG8g
cmVzZXQgYW5kIHNlbmQgYmFjayB0aGUgdGFyZ2V0U3R5bGUKKyAgICBpZiAocG9zdGFjdGl2ZSgp
KSB7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9NQUtFX05FVywgLTEp
OworICAgICAgICByZXNldChyZW5kZXJlcik7CisgICAgICAgIAorICAgICAgICBpZiAoIWlvQW5p
bWF0ZWRTdHlsZSkKKyAgICAgICAgICAgIGlvQW5pbWF0ZWRTdHlsZSA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPih0YXJnZXRTdHlsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgLy8gSWYgd2UgYXJlIHJ1bm5pbmcgYW5kIHRoZSB0YXJnZXRTdHlsZSB2YWx1ZSBoYXMgY2hh
bmdlZCBmcm9tIG91ciBjdXJyZW50IHRvU3R5bGUgdmFsdWUsIHdlIG5lZWQgdG8gcmVzZXQuCisg
ICAgLy8gV2UgYWxzbyBuZWVkIHRvIHJlc2V0IGlmIHdlIGFyZSBuZXcuCisgICAgaWYgKGlzbmV3
KCkgfHwgIW1fdG9TdHlsZSB8fCAhQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnByb3BlcnRp
ZXNFcXVhbChtX3Byb3BlcnR5LCBtX3RvU3R5bGUsIHRhcmdldFN0eWxlKSkgeworICAgICAgICAv
LyBPcGFjaXR5IGlzIHNwZWNpYWwuIElmIHdlIGFyZSBhbmltYXRpbmcgaXQgd2l0aCBoYXJkd2Fy
ZSwgVGhlIHZhbHVlIGF0IHRoaXMgbW9tZW50IHdpbGwgbm90IGJlIGluCisgICAgICAgIC8vIGN1
cnJlbnRTdHlsZSBiZWNhdXNlIHRoZSBoYXJkd2FyZSBpcyBkb2luZyB0aGUgYW5pbWF0aW9uIGFu
ZCB0aGUgUmVuZGVyU3R5bGUgaXMgbm90IGdldHRpbmcgdXBkYXRlZC4KKyAgICAgICAgLy8gVGhp
cyBpcyBub3QgYSBwcm9ibGVtIGZvciB0cmFuc2Zvcm1zLCB3aGljaCBjYW4gYWxzbyBiZSBhbmlt
YXRlZCBpbiBoYXJkd2FyZSwgYmVjYXVzZSB3aGVuIHRyYW5zZm9ybXMKKyAgICAgICAgLy8gYXJl
IGFuaW1hdGluZyB0aGV5IGFsd2F5cyBoYXZlIGEgaGFyZHdhcmUgbGF5ZXIsIHdoaWNoIHJlbWVt
YmVycyB0aGUgY3VycmVudCB0cmFuc2Zvcm0gdmFsdWUuIEJ1dCBvcGFjaXR5CisgICAgICAgIC8v
IHBvcHMgaW4gYW5kIG91dCBvZiB1c2luZyBoYXJkd2FyZSBsYXllcnMsIHNvIGl0IGZvcmdldHMg
dGhlIGN1cnJlbnQgb3BhY2l0eSB2YWx1ZS4gU28gd2UgbmVlZCB0byBjb21wdXRlCisgICAgICAg
IC8vIHRoZSBibGVuZGVkIG9wYWNpdHkgdmFsdWUgYmV0d2VlbiB0aGUgcHJldmlvdXMgZnJvbSBh
bmQgdG8gc3R5bGVzIGFuZCBwdXQgdGhhdCBpbiB0aGUgY3VycmVudFN0eWxlLCB3aGljaAorICAg
ICAgICAvLyB3aWxsIGJlY29tZSB0aGUgbmV3IGZyb21TdHlsZS4gVGhpcyBpcyBjaGFuZ2luZyBh
IGNvbnN0IFJlbmRlclN0eWxlLCBidXQgd2Uga25vdyB3aGF0IHdlIGFyZSBkb2luZywgcmVhbGx5
IDotKQorICAgICAgICAvLyBGSVhNRSBuZWVkIHRvIGRvIHRoaXM/CisgICAgICAgIGlmICghaXNu
ZXcoKSAmJiBtX2Zyb21TdHlsZSAmJiAobV9wcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkg
fHwgbV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCkpIHsKKyAgICAgICAgICAgIC8vIGdldCB0aGUg
YmxlbmRlZCB2YWx1ZSBvZiBvcGFjaXR5IGludG8gdGhlIGN1cnJlbnRTdHlsZSAod2hpY2ggd2ls
bCBiZSB0aGUgbmV3IGZyb21TdHlsZSkKKyAgICAgICAgICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jl
c3MoMSwgMCk7CisgICAgICAgICAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQ
cm9wZXJ0aWVzKENTU1Byb3BlcnR5T3BhY2l0eSwgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KGN1
cnJlbnRTdHlsZSksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOworICAgICAgICB9Cisg
ICAgICAgIHJlc2V0KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICB9
CisgICAgCisgICAgLy8gcnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgorICAgIC8vIFdlIGtub3cg
d2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkCisg
ICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAgICAgIGlvQW5pbWF0ZWRTdHlsZSA9IG5ldyAo
cmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7CisgICAg
CisgICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsKKyAgICBib29sIG5lZWRzQW5pbSA9
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpibGVuZFByb3BlcnRpZXMobV9wcm9wZXJ0eSwg
aW9BbmltYXRlZFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9nKTsKKyAgICBpZiAo
bmVlZHNBbmltKQorICAgICAgICBzZXRBbmltYXRpbmcoKTsKKworICAgIC8vQVNTRVJUKG5lZWRz
QW5pbSAhPSBtX3dhaXRlZEZvclJlc3BvbnNlIHx8IHByZWFjdGl2ZSgpKTsKK30KKworYm9vbCBJ
bXBsaWNpdEFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSkKK3sKKyAg
ICAvLyBzZW5kIHRyYW5zaXRpb24gdG8gb2JqZWN0CisgICAgcmV0dXJuIG1fb2JqZWN0ID8gbV9v
YmplY3QtPnN0YXJ0VHJhbnNpdGlvbihiZWdpblRpbWUsIG1fcHJvcGVydHksIG1fZnJvbVN0eWxl
LCBtX3RvU3R5bGUpIDogZmFsc2U7Cit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmVuZEFu
aW1hdGlvbihib29sIHJlc2V0KQoreworICAgIGlmIChtX29iamVjdCkKKyAgICAgICAgbV9vYmpl
Y3QtPnRyYW5zaXRpb25GaW5pc2hlZChtX3Byb3BlcnR5KTsKK30KKwordm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgLy8g
d2UncmUgY29udmVydGluZyB0aGUgYW5pbWF0aW9uIGludG8gYSB0cmFuc2l0aW9uIGhlcmUKKyAg
ICBpZiAoIXNlbmRUcmFuc2l0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVu
ZEV2ZW50LCBpbkVsYXBzZWRUaW1lKSkgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZGlzcGF0Y2gg
YW4gZXZlbnQsIHdoaWNoIHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xsIGp1c3Qg
ZW5kCisgICAgICAgIC8vIGl0IGhlcmUuCisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAg
ICB9Cit9CisKK2Jvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpCit7Cisg
ICAgLyoKKyAgICAgRklYTUUgZXZlbnRzCisgICAgaWYgKGluRXZlbnRUeXBlID09IEV2ZW50TmFt
ZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCkgeworICAgICAgICBEb2N1bWVudDo6TGlzdGVu
ZXJUeXBlIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwor
ICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVy
VHlwZSkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvckV2
ZW50RGlzcGF0Y2goKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWU7CisgICAgICAg
ICAgICBpZiAobV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCkgeworICAgICAgICAgICAgICAgIHBy
b3BlcnR5TmFtZSA9IFN0cmluZygiIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBTdHJpbmcoZ2V0UHJvcGVydHlOYW1l
KChDU1NQcm9wZXJ0eUlEKW1fcHJvcGVydHkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSB0
cnVlOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLnN0YXJ0VGlt
ZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBtX3Byb3BlcnR5LCB0cnVlLCBpbkV2ZW50VHlwZSwg
aW5FbGFwc2VkVGltZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGRpZCBkaXNw
YXRjaCBhbiBldmVudAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgICovCisg
ICAgcmV0dXJuIGZhbHNlOyAvLyBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQKK30KKwordm9pZCBJ
bXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUqIGZyb20gLyogPSAwICovLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gLyogPSAwICov
KQoreworICAgIEFTU0VSVCgoIW1fdG9TdHlsZSAmJiAhdG8pIHx8IG1fdG9TdHlsZSAhPSB0byk7
CisgICAgQVNTRVJUKCghbV9mcm9tU3R5bGUgJiYgIWZyb20pIHx8IG1fZnJvbVN0eWxlICE9IGZy
b20pOworICAgIGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5bGUtPmRlcmVmKHJl
bmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAgICBpZiAobV90b1N0eWxlKQorICAgICAgICBtX3Rv
U3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAgICAKKyAgICBtX2Zyb21T
dHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihmcm9tKTsgICAvLyBpdCBpcyByZWFkLW9u
bHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAgIGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9m
cm9tU3R5bGUtPnJlZigpOworICAgIAorICAgIG1fdG9TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPih0byk7ICAgICAgIC8vIGl0IGlzIHJlYWQtb25seSwgb3RoZXIgdGhhbiB0aGUgcmVm
CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAgICAgbV90b1N0eWxlLT5yZWYoKTsKKyAgICAKKyAg
ICAvLyByZXN0YXJ0IHRoZSB0cmFuc2l0aW9uCisgICAgaWYgKGZyb20gJiYgdG8pCisgICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgLTEpOwor
fQorCit2b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpzZXRPdmVycmlkZGVuKGJvb2wgYikKK3sKKyAg
ICBpZiAoYiAhPSBtX292ZXJyaWRkZW4pIHsKKyAgICAgICAgbV9vdmVycmlkZGVuID0gYjsKKyAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKG1fb3ZlcnJpZGRlbiA/IFNUQVRFX0lOUFVUX1BBVVNF
X09WRVJSSURFIDogU1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFLCAtMSk7CisgICAgfQorfQor
Citib29sIEltcGxpY2l0QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBj
b25zdAoreworICAgIHJldHVybiBtX3Byb3BlcnR5ID09IHByb3BlcnR5IHx8CisgICAgKG1fcHJv
cGVydHkgPT0gY0FuaW1hdGVBbGwgJiYgIUFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9w
ZXJ0aWVzRXF1YWwocHJvcGVydHksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUpKTsKK30KKworI3By
YWdtYSBtYXJrIC0KKwordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVB
bmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5
bGUpCit7CisgICAgLy8gaWYgd2UgaGF2ZSBub3QgeWV0IHN0YXJ0ZWQsIHdlIHdpbGwgbm90IGhh
dmUgYSB2YWxpZCBzdGFydCB0aW1lLCBzbyBqdXN0IHN0YXJ0IHRoZSBhbmltYXRpb24gaWYgbmVl
ZGVkCisgICAgaWYgKGlzbmV3KCkgJiYgbV9hbmltYXRpb24tPmFuaW1hdGlvblBsYXlTdGF0ZSgp
ID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nICYmIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5sb2FkQ29t
cGxldGUoKSkKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX0FO
SU1BVElPTiwgLTEpOworICAgIAorICAgIC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFu
aW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlz
aGVkIGFuaW1hdGlvbi4KKyAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBzZW5kIGJhY2sgdGhlIHRh
cmdldFN0eWxlCisgICAgaWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAgICBpZiAoIWlvQW5pbWF0
ZWRTdHlsZSkKKyAgICAgICAgICAgIGlvQW5pbWF0ZWRTdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVy
U3R5bGUqPih0YXJnZXRTdHlsZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
Ly8gaWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciwgd2UgZG9uJ3Qgd2FudCB0
byBjaGFuZ2UgdGhlIHN0eWxlIHlldAorICAgIC8vIFNwZWNpYWwgY2FzZSAtIGlmIHRoZSBkZWxh
eSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBzZXQgdGhlIGZpcnN0IGZyYW1lIG9mIHRo
ZQorICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBUaGlzIGF2b2lkcyBhIGZsYXNoIHdoZW4g
dGhlIGFuaW1hdGlvbiBzdGFydHMKKyAgICBpZiAod2FpdGluZ1RvU3RhcnQoKSAmJiBtX2FuaW1h
dGlvbi0+YW5pbWF0aW9uRGVsYXkoKSA+IDApCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmluZyB3
aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgorICAgIC8vIFdlIHNob3Vs
ZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZworICAgIAorICAgIC8vIGZpbmQgdGhl
IGZpcnN0IGtleQorICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IChtX3N0YXJ0VGltZSA+IDApID8g
KChydW5uaW5nKCkgPyBjdXJyZW50VGltZSgpIDogbV9wYXVzZVRpbWUpIC0gbV9zdGFydFRpbWUp
IDogMDsKKyAgICBpZiAoZWxhcHNlZFRpbWUgPCAwKQorICAgICAgICBlbGFwc2VkVGltZSA9IDA7
CisgICAgCisgICAgZG91YmxlIHQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSA/IChlbGFwc2Vk
VGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSA6IDE7CisgICAgaW50IGkgPSAoaW50KSB0
OworICAgIHQgLT0gaTsKKyAgICBpZiAobV9hbmltYXRpb24tPmFuaW1hdGlvbkRpcmVjdGlvbigp
ICYmIChpICYgMSkpCisgICAgICAgIHQgPSAxIC0gdDsKKyAgICAKKyAgICBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlID0gMDsKKyAgICBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IDA7CisgICAgZG91Ymxl
IHNjYWxlID0gMTsKKyAgICBkb3VibGUgb2Zmc2V0ID0gMDsKKyAgICBpZiAobV9rZXlmcmFtZXMu
Z2V0KCkpIHsKKyAgICAgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2tleWZyYW1lcy0+ZW5kS2V5ZnJhbWVzKCk7CisgICAgICAgIGZvciAoVmVjdG9yPEtl
eWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpbktleWZy
YW1lcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGlmICh0IDwgaXQtPmtleSkg
eworICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBrZXkgc2hvdWxkIGFsd2F5cyBiZSAwLCBz
byB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUgZmlyc3Qga2V5CisgICAgICAgICAgICAg
ICAgaWYgKCFmcm9tU3R5bGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIHNjYWxlID0gMSAvIChpdC0+a2V5IC0gb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICB0
b1N0eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KCYoaXQtPnN0eWxlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG9mZnNldCA9IGl0LT5rZXk7CisgICAgICAgICAgICBmcm9tU3R5bGUgPSBjb25zdF9jYXN0PFJl
bmRlclN0eWxlKj4oJihpdC0+c3R5bGUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBpZiBlaXRoZXIgc3R5bGUgaXMgMCB3ZSBoYXZlIGFuIGludmFsaWQgY2FzZSwganVzdCBzdG9w
IHRoZSBhbmltYXRpb24KKyAgICBpZiAoIWZyb21TdHlsZSB8fCAhdG9TdHlsZSkgeworICAgICAg
ICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfRU5EX0FOSU1BVElPTiwgLTEpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIHJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlv
bi4KKyAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1h
a2Ugb25lIGlmIG5lZWRlZAorICAgIGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICBpb0Fu
aW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgq
dGFyZ2V0U3R5bGUpOworICAgIAorICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9m
ZnNldCk7CisgICAgCisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tl
eWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIGJvb2wgbmVlZHNBbmltID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmJsZW5kUHJvcGVydGllcygqaXQsIGlvQW5pbWF0ZWRTdHlsZSwgZnJvbVN0eWxlLCB0b1N0
eWxlLCBwcm9nKTsKKyAgICAgICAgaWYgKG5lZWRzQW5pbSkKKyAgICAgICAgICAgIHNldEFuaW1h
dGluZygpOworICAgICAgICAvL0FTU0VSVChuZWVkc0FuaW0gIT0gbV93YWl0ZWRGb3JSZXNwb25z
ZSB8fCBwcmVhY3RpdmUoKSk7CisgICAgfQorfQorCitib29sIEtleWZyYW1lQW5pbWF0aW9uOjpz
dGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKQoreworICAgIHJldHVybiBtX29iamVjdCA/
IG1fb2JqZWN0LT5zdGFydEFuaW1hdGlvbihiZWdpblRpbWUsIG1faW5kZXgpIDogZmFsc2U7Cit9
CisKK3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmVuZEFuaW1hdGlvbihib29sIHJlc2V0KQorewor
ICAgIGlmIChtX29iamVjdCkgeworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZXRlcm1pbmUg
YWN0dWFsIGluZGV4IChpbiBjYXNlcyB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFuaW1h
dGlvbiBwZXIgVHJhbnNpdGlvbiBvYmplY3QpCisgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb25G
aW5pc2hlZChtX25hbWUsIDAsIHJlc2V0KTsKKyAgICAgICAgCisgICAgICAgIC8vIHJlc3RvcmUg
dGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQorICAgICAgICBzZXRDaGFuZ2VkKG1fb2Jq
ZWN0LT5lbGVtZW50KCkpOworICAgIH0KK30KKwordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25B
bmltYXRpb25TdGFydChkb3VibGUgaW5FbGFwc2VkVGltZSkKK3sKKyAgICAvKiBGSVhNRSBldmVu
dHMKKyAgICBzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCwgaW5FbGFwc2VkVGltZSk7CisgICAgICovCit9CisKK3ZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246Om9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAg
IC8qIEZJWE1FCisgICAgc2VuZEFuaW1hdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1h
dGlvbkl0ZXJhdGlvbkV2ZW50LCBpbkVsYXBzZWRUaW1lKTsKKyAgICAgKi8KK30KKwordm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7
CisgICAgLyogRklYTUUKKyAgICAvLyBGSVhNRTogc2V0IHRoZSB1bmFuaW1hdGVkIHN0eWxlIG9u
IHRoZSBlbGVtZW50CisgICAgaWYgKCFzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Vi
a2l0QW5pbWF0aW9uRW5kRXZlbnQsIGluRWxhcHNlZFRpbWUpKSB7CisgICAgICAgIC8vIHdlIGRp
ZG4ndCBkaXNwYXRjaCBhbiBldmVudCwgd2hpY2ggd291bGQgY2FsbCBlbmRBbmltYXRpb24oKSwg
c28gd2UnbGwganVzdCBlbmQKKyAgICAgICAgLy8gaXQgaGVyZS4KKyAgICAgKi8KKyAgICAgICAg
ZW5kQW5pbWF0aW9uKHRydWUpOworICAgIC8qIH0gKi8KK30KKworYm9vbCBLZXlmcmFtZUFuaW1h
dGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgaW5FdmVudFR5cGUs
IGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIC8qIEZJWE1FIGV2ZW50cworICAgIERvY3Vt
ZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlOworICAgIGlmIChpbkV2ZW50VHlwZSA9PSBF
dmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCkKKyAgICAgICAgbGlzdGVu
ZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsKKyAgICBlbHNl
IGlmIChpbkV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCkK
KyAgICAgICAgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsK
KyAgICBlbHNlCisgICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFS
VF9MSVNURU5FUjsKKyAgICAKKyAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlz
dGVuZXJUeXBlKSkgeworICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IGVsZW1lbnRGb3JF
dmVudERpc3BhdGNoKCk7CisgICAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICBtX3dh
aXRpbmdGb3JFbmRFdmVudCA9IHRydWU7CisgICAgICAgICAgICBtX2FuaW1hdGlvbkV2ZW50RGlz
cGF0Y2hlci5zdGFydFRpbWVyKGVsZW1lbnQsIG1fbmFtZSwgLTEsIHRydWUsIGluRXZlbnRUeXBl
LCBpbkVsYXBzZWRUaW1lKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyBkaWQgZGlzcGF0
Y2ggYW4gZXZlbnQKKyAgICAgICAgfQorICAgIH0KKyAgICAqLworICAgIHJldHVybiBmYWxzZTsg
Ly8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisKK3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246
Om92ZXJyaWRlQW5pbWF0aW9ucygpCit7CisgICAgLy8gdGhpcyB3aWxsIG92ZXJyaWRlIGltcGxp
Y2l0IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUg
YW5pbWF0aW9uCisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZy
YW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlv
bnMoKml0KTsKK30KKwordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkFu
aW1hdGlvbnMoKQoreworICAgIC8vIHRoaXMgd2lsbCByZXN1bWUgb3ZlcnJpZGRlbiBpbXBsaWNp
dCBhbmltYXRpb25zCisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tl
eWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9p
dGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3BlcnRpZXMoKTsgaXQgIT0gZW5kOyAr
K2l0KQorICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+cmVzdW1lT3ZlcnJpZGRlbkltcGxp
Y2l0QW5pbWF0aW9ucygqaXQpOworfQorCitib29sIEtleWZyYW1lQW5pbWF0aW9uOjphZmZlY3Rz
UHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMtPmVuZFByb3BlcnRpZXMoKTsKKyAgICBmb3IgKEhh
c2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0
aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoKCppdCkgPT0gcHJvcGVydHkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CisjcHJhZ21hIG1hcmsgLQorCitBbmltYXRpb25Db250cm9sbGVyOjpBbmltYXRpb25Db250cm9s
bGVyKEZyYW1lKiBmcmFtZSkKKzogbV9kYXRhKG5ldyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZShmcmFtZSkpCit7CisgICAgCit9CisKIEFuaW1hdGlvbkNvbnRyb2xsZXI6On5BbmltYXRpb25D
b250cm9sbGVyKCkKIHsKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVj
dCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFtX2RhdGEtPmhhc0ltcGxpY2l0QW5pbWF0aW9ucygp
KQorICAgIGlmICghbV9kYXRhLT5oYXNBbmltYXRpb25zKCkpCiAgICAgICAgIHJldHVybjsKLQor
ICAgIAogICAgIGlmIChtX2RhdGEtPmNsZWFyKHJlbmRlcmVyKSkKLSAgICAgICAgcmVuZGVyZXIt
PmVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAgICAgICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5l
bGVtZW50KCkpOwogfQogCi1SZW5kZXJTdHlsZSogQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRl
SW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBu
ZXdTdHlsZSkKLXsKK1JlbmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVBbmlt
YXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKK3sg
ICAgCisgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYgd2UncmUgaW4gdGhlIGNhY2hlCisgICAg
aWYgKCFyZW5kZXJlci0+ZG9jdW1lbnQoKSB8fCByZW5kZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdl
Q2FjaGUoKSkKKyAgICAgICAgcmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxl
KiBvbGRTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOworICAgIAorICAgIGlmICgoIW9sZFN0eWxl
IHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhb2xkU3R5bGUtPnRyYW5zaXRpb25zKCkp
KSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAoIW5ld1N0eWxlLT5hbmltYXRpb25zKCkgJiYg
IW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKSkKKyAgICAgICAgcmV0dXJuIG5ld1N0eWxlOworICAg
IAorICAgIFJlbmRlclN0eWxlKiBibGVuZGVkU3R5bGUgPSBuZXdTdHlsZTsKKyAgICAKICAgICAv
LyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFz
aHRhYmxlLiAgV2UgdGhlbiBjb21wYXJlIHRoZW0KICAgICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRp
b25zIGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGluIHN5bmMuICBJZiBkZXN0aW5h
dGlvbiB2YWx1ZXMKICAgICAvLyBoYXZlIGNoYW5nZWQsIHdlIHJlc2V0IHRoZSBhbmltYXRpb24u
ICBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgogICAg
IC8vIGEgbmV3IHN0eWxlLgogICAgIEFTU0VSVChyZW5kZXJlci0+ZWxlbWVudCgpKTsgLy8gRklY
TUU6IFdlIGRvIG5vdCBhbmltYXRlIGdlbmVyYXRlZCBjb250ZW50IHlldC4KKyAgICAKKyAgICBD
b21wb3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29t
cG9zaXRlQW5pbWF0aW9uKHJlbmRlcmVyKTsKKyAgICBibGVuZGVkU3R5bGUgPSByZW5kZXJlckFu
aW1hdGlvbnMtPmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0eWxlLCBuZXdTdHlsZSk7CisgICAgCisg
ICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIAorICAgIGlmIChibGVuZGVk
U3R5bGUgIT0gbmV3U3R5bGUpIHsKKyAgICAgICAgLy8gSWYgdGhlIGFuaW1hdGlvbnMvdHJhbnNp
dGlvbnMgY2hhbmdlIG9wYWNpdHksIHRyYW5zZm9ybSBvciBwZXJzcGVjdGl2ZSwgd2UgbmVlZWQg
dG8gdXBkYXRlCisgICAgICAgIC8vIHRoZSBzdHlsZSB0byBpbXBvc2UgdGhlIHN0YWNraW5nIHJ1
bGVzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgaW4gQ1NTU3R5bGVTZWxlY3Rvcjo6YWRq
dXN0UmVuZGVyU3R5bGUoKS4KKyAgICAgICAgaWYgKGJsZW5kZWRTdHlsZS0+aGFzQXV0b1pJbmRl
eCgpICYmICgoYmxlbmRlZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmKSkpIC8vIEZJWE1FIHx8IGJs
ZW5kZWRTdHlsZS0+aGFzVHJhbnNmb3JtT3JQZXJzcGVjdGl2ZSgpKSkpCisgICAgICAgICAgICBi
bGVuZGVkU3R5bGUtPnNldFpJbmRleCgwKTsKKyAgICB9CisgICAgcmV0dXJuIGJsZW5kZWRTdHls
ZTsKK30KIAotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2Rh
dGEtPmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBu
ZXdTdHlsZTsKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0QW5pbWF0aW9uU3RhcnRUaW1l
KFJlbmRlck9iamVjdCogb2JqLCBkb3VibGUgdCkKK3sKKyAgICBDb21wb3NpdGVBbmltYXRpb24q
IHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKG9i
aik7CisgICAgcmVuZGVyZXJBbmltYXRpb25zLT5zZXRBbmltYXRpb25TdGFydFRpbWUodCk7Cit9
CiAKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gYW5pbWF0aW9uLT5hbmltYXRlKHJlbmRlcmVy
LCByZW5kZXJlci0+c3R5bGUoKSwgbmV3U3R5bGUpOwotICAgIG1fZGF0YS0+dXBkYXRlVGltZXIo
KTsKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXRUcmFu
c2l0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHksIGRvdWJsZSB0
KQoreworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRh
LT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ob2JqKTsKKyAgICByZW5kZXJlckFuaW1hdGlvbnMt
PnNldFRyYW5zaXRpb25TdGFydFRpbWUocHJvcGVydHksIHQpOwogfQogCi12b2lkIEFuaW1hdGlv
bkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxl
cjo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBvYmosIGludCBw
cm9wZXJ0eSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRhYmxl
IGFuZCBjYWxsIHBhdXNlIG9uIGVhY2ggYW5pbWF0aW9uLgotICAgIC8vIEtpbGwgb3VyIHRpbWVy
LgorICAgIHJldHVybiBtX2RhdGEtPmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKG9iaiwg
cHJvcGVydHkpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlv
bnMoKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVu
dCogZG9jdW1lbnQpCiB7Ci0gICAgLy8gRklYTUU6IFdhbGsgdGhlIHdob2xlIGhhc2h0YWJsZSBh
bmQgY2FsbCByZXN1bWUgb24gZWFjaCBhbmltYXRpb24uCi0gICAgLy8gU3RhcnQgb3VyIHRpbWVy
LgorI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1h
dGlvbkNvbnRyb2xsZXIgJXAgc3VzcGVuZEFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwXG4iLCB0
aGlzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKGRv
Y3VtZW50KTsKIH0KIAordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25z
KERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZmRlZiBERUJVR19TVEFURV9NQUNISU5FCisgICAg
ZnByaW50ZihzdGRlcnIsICJBbmltYXRpb25Db250cm9sbGVyICVwIHJlc3VtZUFuaW1hdGlvbnMg
Zm9yIGRvY3VtZW50ICVwXG4iLCB0aGlzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICBtX2RhdGEt
PnJlc3VtZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwogfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXI6OnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpCit7CisgICAgbV9kYXRhLT5zdGFy
dFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKK30KKwordm9pZCBBbmltYXRpb25Db250cm9s
bGVyOjpzdHlsZUlzU2V0dXAoKQoreworICAgIG1fZGF0YS0+c3R5bGVJc1NldHVwKCk7Cit9CisK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVwKGJvb2wg
d2FpdGluZykKK3sKKyAgICBpZiAod2FpdGluZykKKyAgICAgICAgbV9udW1TdHlsZUlzU2V0dXBX
YWl0ZXJzKys7CisgICAgZWxzZQorICAgICAgICBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMtLTsK
KyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAod2Fp
dGluZyk7Cit9CisgICAgCit9CkluZGV4OiBXZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAKICAg
ICAgICAgaWYgKHZpZXctPmZyYW1lKCkpIHsKICAgICAgICAgICAgIGlmIChkb2N1bWVudCAmJiBk
b2N1bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkK
ICAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVyZXIoKS0+bGF5ZXIoKS0+c3VzcGVuZE1h
cnF1ZWVzKCk7Ci0gICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb25Db250cm9sbGVy
KCktPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB2aWV3LT5mcmFtZSgpLT5hbmlt
YXRpb25Db250cm9sbGVyKCktPnN1c3BlbmRBbmltYXRpb25zKGRvY3VtZW50KTsKICAgICAgICAg
fQogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>21108</attachid>
            <date>2008-05-13 05:11:17 -0700</date>
            <delta_ts>2008-05-13 05:11:17 -0700</delta_ts>
            <desc>Simple keyframe animation with infinite repeat and easing.</desc>
            <filename>animate_left.html</filename>
            <type>text/html</type>
            <size>1208</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIKICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cgo8aHRtbCBs
YW5nPSJlbiI+CjxoZWFkPgoJPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50
PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgoJPHRpdGxlPkFuaW1hdGlvbiBvZiBsZWZ0IHBy
b3BlcnR5PC90aXRsZT4KICAgIDxzdHlsZT4KICAgICAgICAgZGl2IHsKICAgICAgICAgICAgIHBv
c2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgIGxlZnQ6IDEwMHB4OwogICAgICAgICAgICAg
aGVpZ2h0OiAyMDBweDsKICAgICAgICAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgICAgICAgIGJh
Y2tncm91bmQtY29sb3I6ICM5YmI7CiAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1uYW1l
OiBib3VuY2U7CiAgICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbjogMnM7CiAg
ICAgICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOwog
ICAgICAgICAgICAgLXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uOiBhbHRlcm5hdGU7CiAgICAg
ICAgICAgICAtd2Via2l0LWFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW4tb3V0Owog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlIHsK
ICAgICAgICAgICBmcm9tIHsKICAgICAgICAgICAgIC8vLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5z
bGF0ZSgwcHgpOwogICAgICAgICAgICAgbGVmdDogMTAwcHg7CiAgICAgICAgICAgfQogICAgICAg
ICAgIHRvIHsKICAgICAgICAgICAgIC8vLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZSgyMDBw
eCk7CiAgICAgICAgICAgICBsZWZ0OiAzMDBweDsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keT4KICA8aDE+QW5pbWF0aW9uIG9mICds
ZWZ0JyBwcm9wZXJ0eTwvaDE+CgogIDxwPlRoZSBlbGVtZW50IGJlbG93IHNob3VsZCBib3VuY2Ug
MjAwIHBpeGVscyBsZWZ0IGFuZCByaWdodCBjb250aW51b3VzbHk8L3A+CiAgCiAgPGRpdiBpZD0i
dGFyZ2V0Ij4KICAgIFRoaXMgZWxlbWVudCBzaG91bGQgYW5pbWF0ZS4KICA8L2Rpdj4KCjwvYm9k
eT4KPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21146</attachid>
            <date>2008-05-14 18:27:04 -0700</date>
            <delta_ts>2008-05-14 18:27:04 -0700</delta_ts>
            <desc>Completed patch (to be split)</desc>
            <filename>animations.patch</filename>
            <type>text/plain</type>
            <size>379337</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UcmFuc2Zvcm0zRC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiVHJhbnNm
b3JtM0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorQWRhcHRlZCBmcm9tIE1hdHJp
eCBJbnZlcnNpb24gYnkgUmljaGFyZCBDYXJsaW5nLCBHcmFwaGljcyBHZW1zIDxodHRwOi8vdG9n
LmFjbS5vcmcvR3JhcGhpY3NHZW1zL2luZGV4Lmh0bWw+LgorCitFVUxBOiBUaGUgR3JhcGhpY3Mg
R2VtcyBjb2RlIGlzIGNvcHlyaWdodC1wcm90ZWN0ZWQuIEluIG90aGVyIHdvcmRzLCB5b3UgY2Fu
bm90IGNsYWltIHRoZSB0ZXh0IG9mIHRoZSBjb2RlIAorYXMgeW91ciBvd24gYW5kIHJlc2VsbCBp
dC4gVXNpbmcgdGhlIGNvZGUgaXMgcGVybWl0dGVkIGluIGFueSBwcm9ncmFtLCBwcm9kdWN0LCBv
ciBsaWJyYXJ5LCBub24tY29tbWVyY2lhbCAKK29yIGNvbW1lcmNpYWwuIEdpdmluZyBjcmVkaXQg
aXMgbm90IHJlcXVpcmVkLCB0aG91Z2ggaXMgYSBuaWNlIGdlc3R1cmUuIFRoZSBjb2RlIGNvbWVz
IGFzLWlzLCBhbmQgaWYgdGhlcmUgCithcmUgYW55IGZsYXdzIG9yIHByb2JsZW1zIHdpdGggYW55
IEdlbXMgY29kZSwgbm9ib2R5IGludm9sdmVkIHdpdGggR2VtcyAtIGF1dGhvcnMsIGVkaXRvcnMs
IHB1Ymxpc2hlcnMsIG9yIAord2VibWFzdGVycyAtIGFyZSB0byBiZSBoZWxkIHJlc3BvbnNpYmxl
LiBCYXNpY2FsbHksIGRvbid0IGJlIGEgamVyaywgYW5kIHJlbWVtYmVyIHRoYXQgYW55dGhpbmcg
ZnJlZSBjb21lcyAKK3dpdGggbm8gZ3VhcmFudGVlLgorKi8KKwordHlwZWRlZiBmbG9hdCBNYXRy
aXg0WzRdWzRdOworCisjZGVmaW5lIFNNQUxMX05VTUJFUiAgICAxLmUtOAorCisvKiAKKyAqICAg
aW52ZXJzZSggb3JpZ2luYWxfbWF0cml4LCBpbnZlcnNlX21hdHJpeCApCisgKiAKKyAqICAgIGNh
bGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIDR4NCBtYXRyaXgKKyAqCisgKiAgICAgLTEgICAgIAor
ICogICAgIEEgID0gX19fMV9fIGFkam9pbnQgQQorICogICAgICAgICBkZXQgQQorICovCisKKy8q
CisgKiBkb3VibGUgPSBkZXQyeDIoIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJs
ZSBkICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIDJ4MiBtYXRyaXgu
CisgKi8KKworc3RhdGljIGZsb2F0IGRldDJ4MihmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjLCBm
bG9hdCBkKQoreworICAgIGZsb2F0IGFuczsKKyAgICBhbnMgPSBhICogZCAtIGIgKiBjOworICAg
IHJldHVybiBhbnM7Cit9CisKKy8qCisgKiBkb3VibGUgPSBkZXQzeDMoICBhMSwgYTIsIGEzLCBi
MSwgYjIsIGIzLCBjMSwgYzIsIGMzICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFu
dCBvZiBhIDN4MyBtYXRyaXgKKyAqIGluIHRoZSBmb3JtCisgKgorICogICAgIHwgYTEsICBiMSwg
IGMxIHwKKyAqICAgICB8IGEyLCAgYjIsICBjMiB8CisgKiAgICAgfCBhMywgIGIzLCAgYzMgfAor
ICovCisKK3N0YXRpYyBmbG9hdCBkZXQzeDMoZmxvYXQgYTEsIGZsb2F0IGEyLCBmbG9hdCBhMywg
ZmxvYXQgYjEsIGZsb2F0IGIyLCBmbG9hdCBiMywgZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MykKK3sKKyAgICBmbG9hdCBhbnM7CisKKyAgICBhbnMgPSBhMSAqIGRldDJ4MiggYjIsIGIzLCBj
MiwgYzMgKQorICAgICAgICAtIGIxICogZGV0MngyKCBhMiwgYTMsIGMyLCBjMyApCisgICAgICAg
ICsgYzEgKiBkZXQyeDIoIGEyLCBhMywgYjIsIGIzICk7CisgICAgcmV0dXJuIGFuczsKK30KKwor
LyoKKyAqIGRvdWJsZSA9IGRldDR4NCggbWF0cml4ICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBk
ZXRlcm1pbmFudCBvZiBhIDR4NCBtYXRyaXguCisgKi8KK3N0YXRpYyBmbG9hdCBkZXQ0eDQoY29u
c3QgTWF0cml4NCBtKQoreworICAgIGZsb2F0IGFuczsKKyAgICBmbG9hdCBhMSwgYTIsIGEzLCBh
NCwgYjEsIGIyLCBiMywgYjQsIGMxLCBjMiwgYzMsIGM0LCBkMSwgZDIsIGQzLCBkNDsKKworICAg
IC8qIGFzc2lnbiB0byBpbmRpdmlkdWFsIHZhcmlhYmxlIG5hbWVzIHRvIGFpZCBzZWxlY3Rpbmcg
Ki8KKyAgICAvKiAgY29ycmVjdCBlbGVtZW50cyAqLworCisgICAgYTEgPSBtWzBdWzBdOyBiMSA9
IG1bMF1bMV07IAorICAgIGMxID0gbVswXVsyXTsgZDEgPSBtWzBdWzNdOworCisgICAgYTIgPSBt
WzFdWzBdOyBiMiA9IG1bMV1bMV07IAorICAgIGMyID0gbVsxXVsyXTsgZDIgPSBtWzFdWzNdOwor
CisgICAgYTMgPSBtWzJdWzBdOyBiMyA9IG1bMl1bMV07IAorICAgIGMzID0gbVsyXVsyXTsgZDMg
PSBtWzJdWzNdOworCisgICAgYTQgPSBtWzNdWzBdOyBiNCA9IG1bM11bMV07IAorICAgIGM0ID0g
bVszXVsyXTsgZDQgPSBtWzNdWzNdOworCisgICAgYW5zID0gYTEgKiBkZXQzeDMoIGIyLCBiMywg
YjQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpCisgICAgICAgIC0gYjEgKiBkZXQzeDMoIGEyLCBh
MywgYTQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpCisgICAgICAgICsgYzEgKiBkZXQzeDMoIGEy
LCBhMywgYTQsIGIyLCBiMywgYjQsIGQyLCBkMywgZDQpCisgICAgICAgIC0gZDEgKiBkZXQzeDMo
IGEyLCBhMywgYTQsIGIyLCBiMywgYjQsIGMyLCBjMywgYzQpOworICAgIHJldHVybiBhbnM7Cit9
CisKKy8qIAorICogICBhZGpvaW50KCBvcmlnaW5hbF9tYXRyaXgsIGludmVyc2VfbWF0cml4ICkK
KyAqIAorICogICAgIGNhbGN1bGF0ZSB0aGUgYWRqb2ludCBvZiBhIDR4NCBtYXRyaXgKKyAqCisg
KiAgICAgIExldCAgYSAgIGRlbm90ZSB0aGUgbWlub3IgZGV0ZXJtaW5hbnQgb2YgbWF0cml4IEEg
b2J0YWluZWQgYnkKKyAqICAgICAgICAgICBpagorICoKKyAqICAgICAgZGVsZXRpbmcgdGhlIGl0
aCByb3cgYW5kIGp0aCBjb2x1bW4gZnJvbSBBLgorICoKKyAqICAgICAgICAgICAgICAgICAgICBp
K2oKKyAqICAgICBMZXQgIGIgICA9ICgtMSkgICAgYQorICogICAgICAgICAgaWogICAgICAgICAg
ICBqaQorICoKKyAqICAgIFRoZSBtYXRyaXggQiA9IChiICApIGlzIHRoZSBhZGpvaW50IG9mIEEK
KyAqICAgICAgICAgICAgICAgICAgICAgaWoKKyAqLworCitzdGF0aWMgdm9pZCBhZGpvaW50KGNv
bnN0IE1hdHJpeDQgc3JjTWF0cml4LCBNYXRyaXg0IG91dE1hdHJpeCkKK3sKKyAgICBmbG9hdCBh
MSwgYTIsIGEzLCBhNCwgYjEsIGIyLCBiMywgYjQ7CisgICAgZmxvYXQgYzEsIGMyLCBjMywgYzQs
IGQxLCBkMiwgZDMsIGQ0OworCisgICAgLyogYXNzaWduIHRvIGluZGl2aWR1YWwgdmFyaWFibGUg
bmFtZXMgdG8gYWlkICAqLworICAgIC8qIHNlbGVjdGluZyBjb3JyZWN0IHZhbHVlcyAgKi8KKwor
ICAgIGExID0gc3JjTWF0cml4WzBdWzBdOyBiMSA9IHNyY01hdHJpeFswXVsxXTsgCisgICAgYzEg
PSBzcmNNYXRyaXhbMF1bMl07IGQxID0gc3JjTWF0cml4WzBdWzNdOworCisgICAgYTIgPSBzcmNN
YXRyaXhbMV1bMF07IGIyID0gc3JjTWF0cml4WzFdWzFdOyAKKyAgICBjMiA9IHNyY01hdHJpeFsx
XVsyXTsgZDIgPSBzcmNNYXRyaXhbMV1bM107CisKKyAgICBhMyA9IHNyY01hdHJpeFsyXVswXTsg
YjMgPSBzcmNNYXRyaXhbMl1bMV07CisgICAgYzMgPSBzcmNNYXRyaXhbMl1bMl07IGQzID0gc3Jj
TWF0cml4WzJdWzNdOworCisgICAgYTQgPSBzcmNNYXRyaXhbM11bMF07IGI0ID0gc3JjTWF0cml4
WzNdWzFdOyAKKyAgICBjNCA9IHNyY01hdHJpeFszXVsyXTsgZDQgPSBzcmNNYXRyaXhbM11bM107
CisKKworICAgIC8qIHJvdyBjb2x1bW4gbGFiZWxpbmcgcmV2ZXJzZWQgc2luY2Ugd2UgdHJhbnNw
b3NlIHJvd3MgJiBjb2x1bW5zICovCisKKyAgICBvdXRNYXRyaXhbMF1bMF0gID0gICBkZXQzeDMo
IGIyLCBiMywgYjQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpOworICAgIG91dE1hdHJpeFsxXVsw
XSAgPSAtIGRldDN4MyggYTIsIGEzLCBhNCwgYzIsIGMzLCBjNCwgZDIsIGQzLCBkNCk7CisgICAg
b3V0TWF0cml4WzJdWzBdICA9ICAgZGV0M3gzKCBhMiwgYTMsIGE0LCBiMiwgYjMsIGI0LCBkMiwg
ZDMsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMF0gID0gLSBkZXQzeDMoIGEyLCBhMywgYTQsIGIy
LCBiMywgYjQsIGMyLCBjMywgYzQpOworICAgICAgICAKKyAgICBvdXRNYXRyaXhbMF1bMV0gID0g
LSBkZXQzeDMoIGIxLCBiMywgYjQsIGMxLCBjMywgYzQsIGQxLCBkMywgZDQpOworICAgIG91dE1h
dHJpeFsxXVsxXSAgPSAgIGRldDN4MyggYTEsIGEzLCBhNCwgYzEsIGMzLCBjNCwgZDEsIGQzLCBk
NCk7CisgICAgb3V0TWF0cml4WzJdWzFdICA9IC0gZGV0M3gzKCBhMSwgYTMsIGE0LCBiMSwgYjMs
IGI0LCBkMSwgZDMsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMV0gID0gICBkZXQzeDMoIGExLCBh
MywgYTQsIGIxLCBiMywgYjQsIGMxLCBjMywgYzQpOworICAgICAgICAKKyAgICBvdXRNYXRyaXhb
MF1bMl0gID0gICBkZXQzeDMoIGIxLCBiMiwgYjQsIGMxLCBjMiwgYzQsIGQxLCBkMiwgZDQpOwor
ICAgIG91dE1hdHJpeFsxXVsyXSAgPSAtIGRldDN4MyggYTEsIGEyLCBhNCwgYzEsIGMyLCBjNCwg
ZDEsIGQyLCBkNCk7CisgICAgb3V0TWF0cml4WzJdWzJdICA9ICAgZGV0M3gzKCBhMSwgYTIsIGE0
LCBiMSwgYjIsIGI0LCBkMSwgZDIsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMl0gID0gLSBkZXQz
eDMoIGExLCBhMiwgYTQsIGIxLCBiMiwgYjQsIGMxLCBjMiwgYzQpOworICAgICAgICAKKyAgICBv
dXRNYXRyaXhbMF1bM10gID0gLSBkZXQzeDMoIGIxLCBiMiwgYjMsIGMxLCBjMiwgYzMsIGQxLCBk
MiwgZDMpOworICAgIG91dE1hdHJpeFsxXVszXSAgPSAgIGRldDN4MyggYTEsIGEyLCBhMywgYzEs
IGMyLCBjMywgZDEsIGQyLCBkMyk7CisgICAgb3V0TWF0cml4WzJdWzNdICA9IC0gZGV0M3gzKCBh
MSwgYTIsIGEzLCBiMSwgYjIsIGIzLCBkMSwgZDIsIGQzKTsKKyAgICBvdXRNYXRyaXhbM11bM10g
ID0gICBkZXQzeDMoIGExLCBhMiwgYTMsIGIxLCBiMiwgYjMsIGMxLCBjMiwgYzMpOworfQorCisv
LyByZXR1cm5zIGZhbHNlIGlmIHRoZSBtYXRyaXggaXMgbm90IGludGVydGlibGUKK3N0YXRpYyBi
b29sIGludmVyc2UoY29uc3QgTWF0cml4NCBzcmNNYXRyaXgsIE1hdHJpeDQgb3V0TWF0cml4KQor
eworICAgIC8qIGNhbGN1bGF0ZSB0aGUgYWRqb2ludCBtYXRyaXggKi8KKworICAgIGFkam9pbnQo
c3JjTWF0cml4LCBvdXRNYXRyaXgpOworCisgICAgLyogIGNhbGN1bGF0ZSB0aGUgNHg0IGRldGVy
bWluYW50CisgICAgICogIGlmIHRoZSBkZXRlcm1pbmFudCBpcyB6ZXJvLCAKKyAgICAgKiAgdGhl
biB0aGUgaW52ZXJzZSBtYXRyaXggaXMgbm90IHVuaXF1ZS4KKyAgICAgKi8KKworICAgIGZsb2F0
IGRldCA9IGRldDR4NChzcmNNYXRyaXgpOworCisgICAgaWYgKGZhYnMoZGV0KSA8IFNNQUxMX05V
TUJFUikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogc2NhbGUgdGhl
IGFkam9pbnQgbWF0cml4IHRvIGdldCB0aGUgaW52ZXJzZSAqLworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyBpKyspCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAg
ICAgICAgICAgb3V0TWF0cml4W2ldW2pdID0gb3V0TWF0cml4W2ldW2pdIC8gZGV0OworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8qIEVuZCBvZiBjb2RlIGFkYXB0ZWQgZnJvbSBNYXRyaXggSW52
ZXJzaW9uIGJ5IFJpY2hhcmQgQ2FybGluZyAqLworCitUcmFuc2Zvcm0zRDo6VHJhbnNmb3JtM0Qo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQoreworICAgIG1ha2VJZGVudGl0eSgpOworICAgIG1f
bWF0cml4WzBdWzBdID0gKGZsb2F0KSB0LmEoKTsKKyAgICBtX21hdHJpeFswXVsxXSA9IChmbG9h
dCkgdC5iKCk7CisgICAgbV9tYXRyaXhbMV1bMF0gPSAoZmxvYXQpIHQuYygpOworICAgIG1fbWF0
cml4WzFdWzFdID0gKGZsb2F0KSB0LmQoKTsKKworICAgIG1fbWF0cml4WzNdWzBdID0gKGZsb2F0
KSB0LmUoKTsKKyAgICBtX21hdHJpeFszXVsxXSA9IChmbG9hdCkgdC5mKCk7Cit9CisKK1RyYW5z
Zm9ybTNEICZUcmFuc2Zvcm0zRDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQoreworICAgIFRy
YW5zZm9ybTNEIG1hdDsKKyAgICBtYXQubV9tYXRyaXhbMF1bMF0gPSBzeDsKKyAgICBtYXQubV9t
YXRyaXhbMV1bMV0gPSBzeTsKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitUcmFuc2Zvcm0zRCAmVHJhbnNmb3JtM0Q6OnNjYWxlM2QoZmxvYXQgc3gsIGZsb2F0
IHN5LCBmbG9hdCBzeikKK3sKKyAgICBUcmFuc2Zvcm0zRCBtYXQ7CisgICAgbWF0Lm1fbWF0cml4
WzBdWzBdID0gc3g7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gc3k7CisgICAgbWF0Lm1fbWF0
cml4WzJdWzJdID0gc3o7CisKKyAgICBtdWx0TGVmdChtYXQpOworICAgIHJldHVybiAqdGhpczsK
K30KKworVHJhbnNmb3JtM0QgJlRyYW5zZm9ybTNEOjpyb3RhdGUzZChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCBhbmdsZSkKK3sKKyAgICAvLyBhbmdsZXMgYXJlIGluIGRlZ3JlZXMu
IFN3aXRjaCB0byByYWRpYW5zCisgICAgYW5nbGUgPSAoZmxvYXQpIChhbmdsZSAvIDM2MC4wICog
TV9QSSAqIDIuMCk7CisgICAgCisgICAgYW5nbGUgLz0gMi4wZjsKKyAgICBmbG9hdCBzaW5BID0g
c2luZihhbmdsZSk7CisgICAgZmxvYXQgY29zQSA9IGNvc2YoYW5nbGUpOworICAgIGZsb2F0IHNp
bkEyID0gc2luQSAqIHNpbkE7CisgICAgCisgICAgLy8gbm9ybWFsaXplCisgICAgZmxvYXQgbGVu
Z3RoID0gc3FydGYoeCp4K3kqeSt6KnopOworICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAg
ICAvLyBiYWQgdmVjdG9yLCBqdXN0IHVzZSBzb21ldGhpbmcgcmVhc29uYWJsZQorICAgICAgICB4
ID0gMDsKKyAgICAgICAgeSA9IDA7CisgICAgICAgIHogPSAxOworICAgIH0KKyAgICBlbHNlIGlm
IChsZW5ndGggIT0gMSkgeworICAgICAgICB4IC89IGxlbmd0aDsKKyAgICAgICAgeSAvPSBsZW5n
dGg7CisgICAgICAgIHogLz0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBUcmFuc2Zvcm0zRCBt
YXQ7CisKKyAgICAvLyBvcHRpbWl6ZSBjYXNlIHdoZXJlIGF4aXMgaXMgYWxvbmcgbWFqb3IgYXhp
cworICAgIGlmICh4ID09IDEuMGYgJiYgeSA9PSAwLjBmICYmIHogPT0gMC4wZikgeworICAgICAg
ICBtYXQubV9tYXRyaXhbMF1bMF0gPSAxLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMF1bMV0g
PSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgICAgICBtYXQu
bV9tYXRyaXhbMV1bMF0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMV0gPSAxLjBm
IC0gMi4wZiAqIHNpbkEyOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMl0gPSAyLjBmICogc2lu
QSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDAuMGY7CisgICAgICAgIG1h
dC5tX21hdHJpeFsyXVsxXSA9IC0yLjBmICogc2luQSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21h
dHJpeFsyXVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgICAgIG1hdC5tX21hdHJpeFsw
XVszXSA9IG1hdC5tX21hdHJpeFsxXVszXSA9IG1hdC5tX21hdHJpeFsyXVszXSA9IDAuMGY7Cisg
ICAgICAgIG1hdC5tX21hdHJpeFszXVswXSA9IG1hdC5tX21hdHJpeFszXVsxXSA9IG1hdC5tX21h
dHJpeFszXVsyXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEuMGY7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHggPT0gMC4wZiAmJiB5ID09IDEuMGYgJiYgeiA9PSAwLjBmKSB7
CisgICAgICAgIG1hdC5tX21hdHJpeFswXVswXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAg
ICAgIG1hdC5tX21hdHJpeFswXVsxXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFswXVsy
XSA9IC0yLjBmICogc2luQSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IDAu
MGY7CisgICAgICAgIG1hdC5tX21hdHJpeFsxXVsxXSA9IDEuMGY7CisgICAgICAgIG1hdC5tX21h
dHJpeFsxXVsyXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDIuMGYgKiBz
aW5BICogY29zQTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzFdID0gMC4wZjsKKyAgICAgICAg
bWF0Lm1fbWF0cml4WzJdWzJdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1f
bWF0cml4WzBdWzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0g
MC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzBdID0gbWF0Lm1fbWF0cml4WzNdWzFdID0g
bWF0Lm1fbWF0cml4WzNdWzJdID0gMC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0g
MS4wZjsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA9PSAwLjBmICYmIHkgPT0gMC4wZiAmJiB6ID09
IDEuMGYpIHsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiBzaW5B
MjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMi4wZiAqIHNpbkEgKiBjb3NBOworICAg
ICAgICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMV1b
MF0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMV0gPSAx
LjBmIC0gMi4wZiAqIHNpbkEyOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMl0gPSAwLjBmOwor
ICAgICAgICBtYXQubV9tYXRyaXhbMl1bMF0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhb
Ml1bMV0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMl1bMl0gPSAxLjBmOworICAgICAg
ICBtYXQubV9tYXRyaXhbMF1bM10gPSBtYXQubV9tYXRyaXhbMV1bM10gPSBtYXQubV9tYXRyaXhb
Ml1bM10gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhb
M11bMV0gPSBtYXQubV9tYXRyaXhbM11bMl0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhb
M11bM10gPSAxLjBmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZmxvYXQgeDIgPSB4Kng7
IGZsb2F0IHkyID0geSp5OyBmbG9hdCB6MiA9IHoqejsKKyAgICAKKyAgICAgICAgbWF0Lm1fbWF0
cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiAoeTIgKyB6MikgKiBzaW5BMjsKKyAgICAgICAgbWF0
Lm1fbWF0cml4WzBdWzFdID0gMi4wZiAqICh4ICogeSAqIHNpbkEyICsgeiAqIHNpbkEgKiBjb3NB
KTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzJdID0gMi4wZiAqICh4ICogeiAqIHNpbkEyIC0g
eSAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzFdWzBdID0gMi4wZiAqICh5
ICogeCAqIHNpbkEyIC0geiAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzFd
WzFdID0gMS4wZiAtIDIuMGYgKiAoejIgKyB4MikgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1fbWF0
cml4WzFdWzJdID0gMi4wZiAqICh5ICogeiAqIHNpbkEyICsgeCAqIHNpbkEgKiBjb3NBKTsKKyAg
ICAgICAgbWF0Lm1fbWF0cml4WzJdWzBdID0gMi4wZiAqICh6ICogeCAqIHNpbkEyICsgeSAqIHNp
bkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzFdID0gMi4wZiAqICh6ICogeSAq
IHNpbkEyIC0geCAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzJdID0g
MS4wZiAtIDIuMGYgKiAoeDIgKyB5MikgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBd
WzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0gMC4wZjsKKyAg
ICAgICAgbWF0Lm1fbWF0cml4WzNdWzBdID0gbWF0Lm1fbWF0cml4WzNdWzFdID0gbWF0Lm1fbWF0
cml4WzNdWzJdID0gMC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0gMS4wZjsKKyAg
ICB9CisgICAgbXVsdExlZnQobWF0KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9y
bTNEICZUcmFuc2Zvcm0zRDo6cm90YXRlM2QoZmxvYXQgcngsIGZsb2F0IHJ5LCBmbG9hdCByeikK
K3sKKyAgICAvLyBhbmdsZXMgYXJlIGluIGRlZ3JlZXMuIFN3aXRjaCB0byByYWRpYW5zCisgICAg
cnggPSAoZmxvYXQpIChyeCAvIDM2MC4wICogTV9QSSAqIDIuMCk7CisgICAgcnkgPSAoZmxvYXQp
IChyeSAvIDM2MC4wICogTV9QSSAqIDIuMCk7CisgICAgcnogPSAoZmxvYXQpIChyeiAvIDM2MC4w
ICogTV9QSSAqIDIuMCk7CisgICAgCisgICAgVHJhbnNmb3JtM0QgbWF0OworICAgIAorICAgIHJ4
IC89IDIuMGY7CisgICAgZmxvYXQgc2luQSA9IHNpbmYocngpOworICAgIGZsb2F0IGNvc0EgPSBj
b3NmKHJ4KTsKKyAgICBmbG9hdCBzaW5BMiA9IHNpbkEgKiBzaW5BOworICAgIAorICAgIG1hdC5t
X21hdHJpeFswXVswXSA9IDEuMGY7CisgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMC4wZjsKKyAg
ICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IDAu
MGY7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICBt
YXQubV9tYXRyaXhbMV1bMl0gPSAyLjBmICogc2luQSAqIGNvc0E7CisgICAgbWF0Lm1fbWF0cml4
WzJdWzBdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbMl1bMV0gPSAtMi4wZiAqIHNpbkEgKiBj
b3NBOworICAgIG1hdC5tX21hdHJpeFsyXVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAg
bWF0Lm1fbWF0cml4WzBdWzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJd
WzNdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhbM11bMV0g
PSBtYXQubV9tYXRyaXhbM11bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEu
MGY7CisgICAgCisgICAgVHJhbnNmb3JtM0Qgcm1hdChtYXQpOworICAgIAorICAgIHJ5IC89IDIu
MGY7CisgICAgc2luQSA9IHNpbmYocnkpOworICAgIGNvc0EgPSBjb3NmKHJ5KTsKKyAgICBzaW5B
MiA9IHNpbkEgKiBzaW5BOworICAgIAorICAgIG1hdC5tX21hdHJpeFswXVswXSA9IDEuMGYgLSAy
LjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMC4wZjsKKyAgICBtYXQubV9t
YXRyaXhbMF1bMl0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgIG1hdC5tX21hdHJpeFsxXVsw
XSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gMS4wZjsKKyAgICBtYXQubV9tYXRy
aXhbMV1bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDIuMGYgKiBzaW5BICog
Y29zQTsKKyAgICBtYXQubV9tYXRyaXhbMl1bMV0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsy
XVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4WzBdWzNdID0gbWF0
Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0gMC4wZjsKKyAgICBtYXQubV9t
YXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhbM11bMV0gPSBtYXQubV9tYXRyaXhbM11bMl0gPSAw
LjBmOworICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEuMGY7CisgICAgCisgICAgcm1hdC5tdWx0
TGVmdChtYXQpOworCisgICAgcnogLz0gMi4wZjsKKyAgICBzaW5BID0gc2luZihyeik7CisgICAg
Y29zQSA9IGNvc2YocnopOworICAgIHNpbkEyID0gc2luQSAqIHNpbkE7CisgICAgCisgICAgbWF0
Lm1fbWF0cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICBtYXQubV9tYXRyaXhb
MF1bMV0gPSAyLjBmICogc2luQSAqIGNvc0E7CisgICAgbWF0Lm1fbWF0cml4WzBdWzJdID0gMC4w
ZjsKKyAgICBtYXQubV9tYXRyaXhbMV1bMF0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgIG1h
dC5tX21hdHJpeFsxXVsxXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4
WzFdWzJdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbMl1bMF0gPSAwLjBmOworICAgIG1hdC5t
X21hdHJpeFsyXVsxXSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzJdWzJdID0gMS4wZjsKKyAg
ICBtYXQubV9tYXRyaXhbMF1bM10gPSBtYXQubV9tYXRyaXhbMV1bM10gPSBtYXQubV9tYXRyaXhb
Ml1bM10gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFszXVswXSA9IG1hdC5tX21hdHJpeFszXVsx
XSA9IG1hdC5tX21hdHJpeFszXVsyXSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0g
MS4wZjsKKworICAgIHJtYXQubXVsdExlZnQobWF0KTsKKworICAgIG11bHRMZWZ0KHJtYXQpOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtM0QgJlRyYW5zZm9ybTNEOjp0cmFuc2xh
dGUoZmxvYXQgdHgsIGZsb2F0IHR5KQoreworICAgIFRyYW5zZm9ybTNEIG1hdDsKKyAgICBtYXQu
bV9tYXRyaXhbM11bMF0gPSB0eDsKKyAgICBtYXQubV9tYXRyaXhbM11bMV0gPSB0eTsKKworICAg
IG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitUcmFuc2Zvcm0zRCAmVHJh
bnNmb3JtM0Q6OnRyYW5zbGF0ZTNkKGZsb2F0IHR4LCBmbG9hdCB0eSwgZmxvYXQgdHopCit7Cisg
ICAgVHJhbnNmb3JtM0QgbWF0OworICAgIG1hdC5tX21hdHJpeFszXVswXSA9IHR4OworICAgIG1h
dC5tX21hdHJpeFszXVsxXSA9IHR5OworICAgIG1hdC5tX21hdHJpeFszXVsyXSA9IHR6OworCisg
ICAgbXVsdExlZnQobWF0KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9ybTNEICZU
cmFuc2Zvcm0zRDo6c2tldyhmbG9hdCBzeCwgZmxvYXQgc3kpCit7CisgICAgLy8gYW5nbGVzIGFy
ZSBpbiBkZWdyZWVzLiBTd2l0Y2ggdG8gcmFkaWFucworICAgIHN4ID0gKGZsb2F0KSAoc3ggLyAz
NjAuMCAqIE1fUEkgKiAyLjApOworICAgIHN5ID0gKGZsb2F0KSAoc3kgLyAzNjAuMCAqIE1fUEkg
KiAyLjApOworICAgIAorICAgIFRyYW5zZm9ybTNEIG1hdDsKKyAgICBtYXQubV9tYXRyaXhbMF1b
MV0gPSB0YW5mKHN5KTsgLy8gbm90ZSB0aGF0IHRoZSB5IHNoZWFyIGdvZXMgaW4gdGhlIGZpcnN0
IHJvdworICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IHRhbmYoc3gpOyAvLyBhbmQgdGhlIHggc2hl
YXIgaW4gdGhlIHNlY29uZCByb3cKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitUcmFuc2Zvcm0zRCAmVHJhbnNmb3JtM0Q6OmFwcGx5UGVyc3BlY3RpdmUoZmxv
YXQgcCkKK3sKKyAgICBUcmFuc2Zvcm0zRCBtYXQ7CisgICAgaWYgKHAgIT0gMCkKKyAgICAgICAg
bWF0Lm1fbWF0cml4WzJdWzNdID0gLTEvcDsKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCisvLworLy8gbXVsdGlwbGllcyBtYXRyaXggYnkgZ2l2ZW4gbWF0cml4
IG9uIHRoZSByaWdodAorLy8KK1RyYW5zZm9ybTNEICYgCitUcmFuc2Zvcm0zRDo6bXVsdExlZnQo
Y29uc3QgVHJhbnNmb3JtM0QmIG1hdCkKK3sKKyAgICBmbG9hdCB0bXBbNF1bNF07CisgICAgCisg
ICAgdG1wWzBdWzBdID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0cml4WzBdWzBdICsgbWF0
Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhbMV1bMF0KKyAgICAgICAgICAgICAgICsgbWF0Lm1f
bWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1bMF0gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21h
dHJpeFszXVswXSk7CisgICAgdG1wWzBdWzFdID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0
cml4WzBdWzFdICsgbWF0Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhbMV1bMV0KKyAgICAgICAg
ICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1bMV0gKyBtYXQubV9tYXRy
aXhbMF1bM10gKiBtX21hdHJpeFszXVsxXSk7CisgICAgdG1wWzBdWzJdID0gKG1hdC5tX21hdHJp
eFswXVswXSAqIG1fbWF0cml4WzBdWzJdICsgbWF0Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhb
MV1bMl0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1b
Ml0gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21hdHJpeFszXVsyXSk7CisgICAgdG1wWzBdWzNd
ID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0cml4WzBdWzNdICsgbWF0Lm1fbWF0cml4WzBd
WzFdICogbV9tYXRyaXhbMV1bM10KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJd
ICogbV9tYXRyaXhbMl1bM10gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21hdHJpeFszXVszXSk7
CisKKyAgICB0bXBbMV1bMF0gPSAobWF0Lm1fbWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bMF0g
KyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21hdHJpeFsxXVswXQorICAgICAgICAgICAgICAgKyBt
YXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJpeFsyXVswXSArIG1hdC5tX21hdHJpeFsxXVszXSAq
IG1fbWF0cml4WzNdWzBdKTsKKyAgICB0bXBbMV1bMV0gPSAobWF0Lm1fbWF0cml4WzFdWzBdICog
bV9tYXRyaXhbMF1bMV0gKyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21hdHJpeFsxXVsxXQorICAg
ICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJpeFsyXVsxXSArIG1hdC5t
X21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNdWzFdKTsKKyAgICB0bXBbMV1bMl0gPSAobWF0Lm1f
bWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bMl0gKyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21h
dHJpeFsxXVsyXQorICAgICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJp
eFsyXVsyXSArIG1hdC5tX21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNdWzJdKTsKKyAgICB0bXBb
MV1bM10gPSAobWF0Lm1fbWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bM10gKyBtYXQubV9tYXRy
aXhbMV1bMV0gKiBtX21hdHJpeFsxXVszXQorICAgICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhb
MV1bMl0gKiBtX21hdHJpeFsyXVszXSArIG1hdC5tX21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNd
WzNdKTsKKworICAgIHRtcFsyXVswXSA9IChtYXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFsw
XVswXSArIG1hdC5tX21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzBdCisgICAgICAgICAgICAg
ICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzBdICsgbWF0Lm1fbWF0cml4WzJd
WzNdICogbV9tYXRyaXhbM11bMF0pOworICAgIHRtcFsyXVsxXSA9IChtYXQubV9tYXRyaXhbMl1b
MF0gKiBtX21hdHJpeFswXVsxXSArIG1hdC5tX21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzFd
CisgICAgICAgICAgICAgICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzFdICsg
bWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRyaXhbM11bMV0pOworICAgIHRtcFsyXVsyXSA9ICht
YXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFswXVsyXSArIG1hdC5tX21hdHJpeFsyXVsxXSAq
IG1fbWF0cml4WzFdWzJdCisgICAgICAgICAgICAgICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1f
bWF0cml4WzJdWzJdICsgbWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRyaXhbM11bMl0pOworICAg
IHRtcFsyXVszXSA9IChtYXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFswXVszXSArIG1hdC5t
X21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzNdCisgICAgICAgICAgICAgICArIG1hdC5tX21h
dHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzNdICsgbWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRy
aXhbM11bM10pOworCisgICAgdG1wWzNdWzBdID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0
cml4WzBdWzBdICsgbWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhbMV1bMF0KKyAgICAgICAg
ICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1bMF0gKyBtYXQubV9tYXRy
aXhbM11bM10gKiBtX21hdHJpeFszXVswXSk7CisgICAgdG1wWzNdWzFdID0gKG1hdC5tX21hdHJp
eFszXVswXSAqIG1fbWF0cml4WzBdWzFdICsgbWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhb
MV1bMV0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1b
MV0gKyBtYXQubV9tYXRyaXhbM11bM10gKiBtX21hdHJpeFszXVsxXSk7CisgICAgdG1wWzNdWzJd
ID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0cml4WzBdWzJdICsgbWF0Lm1fbWF0cml4WzNd
WzFdICogbV9tYXRyaXhbMV1bMl0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJd
ICogbV9tYXRyaXhbMl1bMl0gKyBtYXQubV9tYXRyaXhbM11bM10gKiBtX21hdHJpeFszXVsyXSk7
CisgICAgdG1wWzNdWzNdID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0cml4WzBdWzNdICsg
bWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhbMV1bM10KKyAgICAgICAgICAgICAgICsgbWF0
Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1bM10gKyBtYXQubV9tYXRyaXhbM11bM10gKiBt
X21hdHJpeFszXVszXSk7CisgICAgCisgICAgc2V0TWF0cml4KChmbG9hdCopIHRtcCk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCit2b2lkCitUcmFuc2Zvcm0zRDo6bXVsdFZlY01hdHJpeChmbG9h
dCBpbngsIGZsb2F0IGlueSwgZmxvYXQmIG91dHgsIGZsb2F0JiBvdXR5KSBjb25zdAoreworICAg
IG91dHggPSBtX21hdHJpeFszXVswXSArIGlueCAqIG1fbWF0cml4WzBdWzBdICsgaW55ICogbV9t
YXRyaXhbMV1bMF07CisgICAgb3V0eSA9IG1fbWF0cml4WzNdWzFdICsgaW54ICogbV9tYXRyaXhb
MF1bMV0gKyBpbnkgKiBtX21hdHJpeFsxXVsxXTsKKyAgICBmbG9hdCB3ID0gbV9tYXRyaXhbM11b
M10gKyBpbnggKiBtX21hdHJpeFswXVszXSArIGlueSAqIG1fbWF0cml4WzFdWzNdOworICAgIGlm
ICh3ICE9IDEgJiYgdyAhPSAwKSB7CisgICAgICAgIG91dHggLz0gdzsKKyAgICAgICAgb3V0eSAv
PSB3OworICAgIH0KK30KKworLy8KKy8vIHJldHVybnMgaW52ZXJzZSBvZiBtYXRyaXgKKy8vCitU
cmFuc2Zvcm0zRAorVHJhbnNmb3JtM0Q6OmludmVyc2UoKSBjb25zdCAKK3sKKyAgICBUcmFuc2Zv
cm0zRCBpbnZNYXQ7CisgICAgCisgICAgYm9vbCBpbnZlcnRlZCA9IFdlYkNvcmU6OmludmVyc2Uo
KGZsb2F0KCopWzRdKSBtX21hdHJpeCwgKGZsb2F0KCopWzRdKSBpbnZNYXQubV9tYXRyaXgpOwor
ICAgIGlmICghaW52ZXJ0ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIGZhaWx1cmUg
c29tZWhvdworICAgICAgICByZXR1cm4gVHJhbnNmb3JtM0QoKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGludk1hdDsKK30KKworQWZmaW5lVHJhbnNmb3JtCitUcmFuc2Zvcm0zRDo6YWZmaW5l
VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyB0aHJvd3MgYXdheSB0
aGUgei1heGlzCisgICAgLy8gRklYTUU6IGluZGljYXRlIHdoZW4gdGhpcyBsb3NlcyBkYXRhIHNv
bWVob3cKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG1fbWF0cml4WzBdWzBdLCBtX21h
dHJpeFswXVsxXSwgbV9tYXRyaXhbMV1bMF0sIG1fbWF0cml4WzFdWzFdLCBtX21hdHJpeFszXVsw
XSwgbV9tYXRyaXhbM11bMV0pOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RyYW5zZm9ybTNELmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RyYW5zZm9ybTNELmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRyYW5zZm9ybTNEX2gK
KyNkZWZpbmUgVHJhbnNmb3JtM0RfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKKworY2xhc3MgVHJhbnNm
b3JtM0QgeworcHVibGljOgorICAgIFRyYW5zZm9ybTNEKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1ha2VJZGVudGl0eSgpOyB9CisgICAgVHJh
bnNmb3JtM0QoZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0xMywgZmxvYXQgbTE0LAorICAg
ICAgICAgICAgICAgIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBtMjMsIGZsb2F0IG0yNCwK
KyAgICAgICAgICAgICAgICBmbG9hdCBtMzEsIGZsb2F0IG0zMiwgZmxvYXQgbTMzLCBmbG9hdCBt
MzQsCisgICAgICAgICAgICAgICAgZmxvYXQgbTQxLCBmbG9hdCBtNDIsIGZsb2F0IG00MywgZmxv
YXQgbTQ0KSAgICAgICAgIHsgc2V0TWF0cml4KG0xMSwgbTEyLCBtMTMsIG0xNCwgbTIxLCBtMjIs
IG0yMywgbTI0LCBtMzEsIG0zMiwgbTMzLCBtMzQsIG00MSwgbTQyLCBtNDMsIG00NCk7IH0KKyAg
ICBUcmFuc2Zvcm0zRChjb25zdCBUcmFuc2Zvcm0zRCYgdCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAqdGhpcyA9IHQ7IH0KKworICAgIFRyYW5zZm9ybTNEKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdCk7CisgICAgCisgICAgVHJhbnNmb3JtM0QgJm9wZXJhdG9yID0oY29uc3QgVHJh
bnNmb3JtM0QgJnQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgoKGZsb2F0KikgdC5tX21hdHJp
eCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkIHNldE1hdHJpeChm
bG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTEzLCBmbG9hdCBtMTQsCisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBtMjMsIGZsb2F0IG0yNCwKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgbTMxLCBmbG9hdCBtMzIsIGZsb2F0IG0zMywgZmxvYXQgbTM0
LAorICAgICAgICAgICAgICAgICAgICBmbG9hdCBtNDEsIGZsb2F0IG00MiwgZmxvYXQgbTQzLCBm
bG9hdCBtNDQpCisgICAgeworICAgICAgICBtX21hdHJpeFswXVswXSA9IG0xMTsgbV9tYXRyaXhb
MF1bMV0gPSBtMTI7IG1fbWF0cml4WzBdWzJdID0gbTEzOyBtX21hdHJpeFswXVszXSA9IG0xNDsg
CisgICAgICAgIG1fbWF0cml4WzFdWzBdID0gbTIxOyBtX21hdHJpeFsxXVsxXSA9IG0yMjsgbV9t
YXRyaXhbMV1bMl0gPSBtMjM7IG1fbWF0cml4WzFdWzNdID0gbTI0OyAKKyAgICAgICAgbV9tYXRy
aXhbMl1bMF0gPSBtMzE7IG1fbWF0cml4WzJdWzFdID0gbTMyOyBtX21hdHJpeFsyXVsyXSA9IG0z
MzsgbV9tYXRyaXhbMl1bM10gPSBtMzQ7IAorICAgICAgICBtX21hdHJpeFszXVswXSA9IG00MTsg
bV9tYXRyaXhbM11bMV0gPSBtNDI7IG1fbWF0cml4WzNdWzJdID0gbTQzOyBtX21hdHJpeFszXVsz
XSA9IG00NDsKKyAgICB9CisgICAgCisgICAgVHJhbnNmb3JtM0QmICAgIG1ha2VJZGVudGl0eSgp
ICB7IHNldE1hdHJpeCgxLDAsMCwwLCAwLDEsMCwwLCAwLDAsMSwwLCAwLDAsMCwxKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgICAgIHsgcmV0dXJuICp0aGlz
ID09IFRyYW5zZm9ybTNEKCk7IH0KKyAgICAKKyAgICBmbG9hdCBtMTEoKSBjb25zdCAgICAgICAg
ICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07IH0KKyAgICBmbG9hdCBtMTIoKSBjb25zdCAgICAg
ICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMV07IH0KKyAgICBmbG9hdCBtMTMoKSBjb25zdCAg
ICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMl07IH0KKyAgICBmbG9hdCBtMTQoKSBjb25z
dCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bM107IH0KKyAgICBmbG9hdCBtMjEoKSBj
b25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMF07IH0KKyAgICBmbG9hdCBtMjIo
KSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMV07IH0KKyAgICBmbG9hdCBt
MjMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMl07IH0KKyAgICBmbG9h
dCBtMjQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bM107IH0KKyAgICBm
bG9hdCBtMzEoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMF07IH0KKyAg
ICBmbG9hdCBtMzIoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMV07IH0K
KyAgICBmbG9hdCBtMzMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMl07
IH0KKyAgICBmbG9hdCBtMzQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1b
M107IH0KKyAgICBmbG9hdCBtNDEoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhb
M11bMF07IH0KKyAgICBmbG9hdCBtNDIoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRy
aXhbM11bMV07IH0KKyAgICBmbG9hdCBtNDMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9t
YXRyaXhbM11bMl07IH0KKyAgICBmbG9hdCBtNDQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4g
bV9tYXRyaXhbM11bM107IH0KKworICAgIHZvaWQgc2V0TTExKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTEyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTEzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTE0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTIxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTIyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTIzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTI0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTMxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTMyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTMzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTM0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTQxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTQyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTQzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTQ0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzNdID0gZjsgfQorICAgIAorICAgIFRyYW5zZm9ybTNEJiBzY2FsZShmbG9hdCBz
eCwgZmxvYXQgc3kpOworICAgIFRyYW5zZm9ybTNEJiBzY2FsZTNkKGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3opOworICAgIAorICAgIC8vIGFuZ2xlcyBhcmUgaW4gZGVncmVlcy4geCx5LHog
bXVzdCBmb3JtIGEgdW5pdCB2ZWN0b3IgKGxlbmd0aCAxKSBvciByZXN1bHRzIGFyZSB1bmRlZmlu
ZWQKKyAgICBUcmFuc2Zvcm0zRCYgcm90YXRlM2QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwg
ZmxvYXQgYW5nbGUpOworICAgIAorICAgIC8vIGFuZ2xlcyBhcmUgaW4gZGVncmVlcy4gCisgICAg
VHJhbnNmb3JtM0QmIHJvdGF0ZTNkKGZsb2F0IHJ4LCBmbG9hdCByeSwgZmxvYXQgcnopOworICAg
IFRyYW5zZm9ybTNEJiB0cmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KTsKKyAgICBUcmFuc2Zv
cm0zRCYgdHJhbnNsYXRlM2QoZmxvYXQgdHgsIGZsb2F0IHR5LCBmbG9hdCB0eik7CisgICAgVHJh
bnNmb3JtM0QmIHNrZXcoZmxvYXQgc3gsIGZsb2F0IHN5KTsKKyAgICBUcmFuc2Zvcm0zRCYgYXBw
bHlQZXJzcGVjdGl2ZShmbG9hdCBwKTsKKyAgICAKKyAgICBib29sIGhhc1BlcnNwZWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bM10gIT0gMC4wZjsgfQorICAgIAorICAgIC8vIHRo
aXMgPSBtYXQgKiB0aGlzCisgICAgVHJhbnNmb3JtM0QmIG11bHRMZWZ0KGNvbnN0IFRyYW5zZm9y
bTNEJiBtYXQpOworICAgIAorICAgIC8vIG11bHRpcGx5IHBhc3NlZCAyRCBwb2ludCBieSBtYXRy
aXggKGFzc3VtZSB6PTApCisgICAgdm9pZCBtdWx0VmVjTWF0cml4KGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0JiBkc3RYLCBmbG9hdCYgZHN0WSkgY29uc3Q7CisgICAgCisgICAgLy8gcmV0dXJuIHRo
ZSBpbnZlcnNlIG9mIG1hdHJpeAorICAgIFRyYW5zZm9ybTNEIGludmVyc2UoKSBjb25zdDsKKwor
ICAgIC8vIHJldHVybiBhbiBhZmZpbmUgdHJhbnNmb3JtIChsb3NzeSEpCisgICAgQWZmaW5lVHJh
bnNmb3JtIGFmZmluZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIAorICAgIC8vRXF1YWxpdHkgY29t
cGFyaXNvbiBvcGVyYXRvcgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yID09KGNvbnN0IFRyYW5z
Zm9ybTNEICZtMSwgY29uc3QgVHJhbnNmb3JtM0QgJm0yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IChtMS5tX21hdHJpeFswXVswXSA9PSBtMi5tX21hdHJpeFswXVswXSAmJgorICAgICAgICAgICAg
ICAgIG0xLm1fbWF0cml4WzBdWzFdID09IG0yLm1fbWF0cml4WzBdWzFdICYmCisgICAgICAgICAg
ICAgICAgbTEubV9tYXRyaXhbMF1bMl0gPT0gbTIubV9tYXRyaXhbMF1bMl0gJiYKKyAgICAgICAg
ICAgICAgICBtMS5tX21hdHJpeFswXVszXSA9PSBtMi5tX21hdHJpeFswXVszXSAmJgorICAgICAg
ICAgICAgICAgIG0xLm1fbWF0cml4WzFdWzBdID09IG0yLm1fbWF0cml4WzFdWzBdICYmCisgICAg
ICAgICAgICAgICAgbTEubV9tYXRyaXhbMV1bMV0gPT0gbTIubV9tYXRyaXhbMV1bMV0gJiYKKyAg
ICAgICAgICAgICAgICBtMS5tX21hdHJpeFsxXVsyXSA9PSBtMi5tX21hdHJpeFsxXVsyXSAmJgor
ICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzFdWzNdID09IG0yLm1fbWF0cml4WzFdWzNdICYm
CisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bMF0gPT0gbTIubV9tYXRyaXhbMl1bMF0g
JiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFsyXVsxXSA9PSBtMi5tX21hdHJpeFsyXVsx
XSAmJgorICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzJdWzJdID09IG0yLm1fbWF0cml4WzJd
WzJdICYmCisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bM10gPT0gbTIubV9tYXRyaXhb
Ml1bM10gJiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVswXSA9PSBtMi5tX21hdHJp
eFszXVswXSAmJgorICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzFdID09IG0yLm1fbWF0
cml4WzNdWzFdICYmCisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbM11bMl0gPT0gbTIubV9t
YXRyaXhbM11bMl0gJiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVszXSA9PSBtMi5t
X21hdHJpeFszXVszXSk7CisgICAgfQorCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IgIT0oY29u
c3QgVHJhbnNmb3JtM0QgJm0xLCBjb25zdCBUcmFuc2Zvcm0zRCAmbTIpCisgICAgeyByZXR1cm4g
IShtMSA9PSBtMik7IH0KKworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIDwoY29uc3QgVHJhbnNm
b3JtM0QgJm0xLCBjb25zdCBUcmFuc2Zvcm0zRCAmbTIpCisgICAgeworICAgICAgICByZXR1cm4g
KG0xLm1fbWF0cml4WzBdWzBdIDwgbTIubV9tYXRyaXhbMF1bMF0gJiYKKyAgICAgICAgICAgICAg
ICBtMS5tX21hdHJpeFswXVsxXSA8IG0yLm1fbWF0cml4WzBdWzFdICYmCisgICAgICAgICAgICAg
ICAgbTEubV9tYXRyaXhbMF1bMl0gPCBtMi5tX21hdHJpeFswXVsyXSAmJgorICAgICAgICAgICAg
ICAgIG0xLm1fbWF0cml4WzBdWzNdIDwgbTIubV9tYXRyaXhbMF1bM10gJiYKKyAgICAgICAgICAg
ICAgICBtMS5tX21hdHJpeFsxXVswXSA8IG0yLm1fbWF0cml4WzFdWzBdICYmCisgICAgICAgICAg
ICAgICAgbTEubV9tYXRyaXhbMV1bMV0gPCBtMi5tX21hdHJpeFsxXVsxXSAmJgorICAgICAgICAg
ICAgICAgIG0xLm1fbWF0cml4WzFdWzJdIDwgbTIubV9tYXRyaXhbMV1bMl0gJiYKKyAgICAgICAg
ICAgICAgICBtMS5tX21hdHJpeFsxXVszXSA8IG0yLm1fbWF0cml4WzFdWzNdICYmCisgICAgICAg
ICAgICAgICAgbTEubV9tYXRyaXhbMl1bMF0gPCBtMi5tX21hdHJpeFsyXVswXSAmJgorICAgICAg
ICAgICAgICAgIG0xLm1fbWF0cml4WzJdWzFdIDwgbTIubV9tYXRyaXhbMl1bMV0gJiYKKyAgICAg
ICAgICAgICAgICBtMS5tX21hdHJpeFsyXVsyXSA8IG0yLm1fbWF0cml4WzJdWzJdICYmCisgICAg
ICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bM10gPCBtMi5tX21hdHJpeFsyXVszXSAmJgorICAg
ICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzBdIDwgbTIubV9tYXRyaXhbM11bMF0gJiYKKyAg
ICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVsxXSA8IG0yLm1fbWF0cml4WzNdWzFdICYmCisg
ICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbM11bMl0gPCBtMi5tX21hdHJpeFszXVsyXSAmJgor
ICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzNdIDwgbTIubV9tYXRyaXhbM11bM10pOwor
ICAgIH0KKyAgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IGZsb2F0KiBt
KSAgICAgICAgeyBpZiAobSAmJiBtICE9IChmbG9hdCopIG1fbWF0cml4KSBtZW1jcHkobV9tYXRy
aXgsIG0sIDE2KnNpemVvZihmbG9hdCkpOyB9CisgICAgCisgICAgZmxvYXQgICBtX21hdHJpeFs0
XVs0XTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zZm9y
bTNEX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0JKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAKIAogICAg
IHJldHVybiAkcGFyZW50IGlmICRwYXJlbnQgZXEgIk9iamVjdCIgb3IgSXNCYXNlVHlwZSgkcGFy
ZW50KTsKICAgICByZXR1cm4gIkV2ZW50IiBpZiAkcGFyZW50IGVxICJVSUV2ZW50IjsKLSAgICBy
ZXR1cm4gIkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVxICJTVkdDb2xvciI7CisgICAgcmV0dXJuICJD
U1NWYWx1ZSIgaWYgJHBhcmVudCBlcSAiU1ZHQ29sb3IiIG9yICRwYXJlbnQgZXEgIkNTU1ZhbHVl
TGlzdCI7CiAgICAgcmV0dXJuICJOb2RlIjsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01XaW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAg
QEAKICAgb25zdWJtaXQgICAgICAgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25z
dWJtaXQgICAgICAgICAgIERvbnREZWxldGUKICAgb251bmxvYWQgICAgICAgICAgICAgIFdlYkNv
cmU6OkpTRE9NV2luZG93QmFzZTo6T251bmxvYWQgICAgICAgICAgIERvbnREZWxldGUKICAgb25i
ZWZvcmV1bmxvYWQgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25iZWZvcmV1bmxv
YWQgICAgIERvbnREZWxldGUKKyAgb253ZWJraXRhbmltYXRpb25zdGFydCAgICAgIFdlYkNvcmU6
OkpTRE9NV2luZG93QmFzZTo6T25XZWJLaXRBbmltYXRpb25TdGFydCAgICAgICBEb250RGVsZXRl
CisgIG9ud2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6
Ok9uV2ViS2l0QW5pbWF0aW9uSXRlcmF0aW9uICAgRG9udERlbGV0ZQorICBvbndlYmtpdGFuaW1h
dGlvbmVuZCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbldlYktpdEFuaW1hdGlv
bkVuZCAgICAgICAgIERvbnREZWxldGUKKyAgb253ZWJraXR0cmFuc2l0aW9uZW5kICAgICAgIFdl
YkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25XZWJLaXRUcmFuc2l0aW9uRW5kICAgICAgICBEb250
RGVsZXRlCiAjIC0tIENvbnN0cnVjdG9ycyAtLQogICBBdWRpbyAgICAgICAgICAgICAgICAgV2Vi
Q29yZTo6SlNET01XaW5kb3dCYXNlOjpBdWRpbyAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBJ
bWFnZSAgICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpJbWFnZSAgICAg
ICAgICAgICAgRG9udERlbGV0ZQpAQCAtNTA5LDYgKzUxMywxNCBAQAogICAgICByZXR1cm4gZ2V0
TGlzdGVuZXIoZXhlYywgYmVmb3JldW5sb2FkRXZlbnQpOwogICAgY2FzZSBPbnVubG9hZDoKICAg
ICAgcmV0dXJuIGdldExpc3RlbmVyKGV4ZWMsIHVubG9hZEV2ZW50KTsKKyAgIGNhc2UgT25XZWJL
aXRBbmltYXRpb25TdGFydDoKKyAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgd2Via2l0
QW5pbWF0aW9uU3RhcnRFdmVudCk7CisgICBjYXNlIE9uV2ViS2l0QW5pbWF0aW9uSXRlcmF0aW9u
OgorICAgICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCB3ZWJraXRBbmltYXRpb25JdGVyYXRp
b25FdmVudCk7CisgICBjYXNlIE9uV2ViS2l0QW5pbWF0aW9uRW5kOgorICAgICAgIHJldHVybiBn
ZXRMaXN0ZW5lcihleGVjLCB3ZWJraXRBbmltYXRpb25FbmRFdmVudCk7CisgICBjYXNlIE9uV2Vi
S2l0VHJhbnNpdGlvbkVuZDoKKyAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgd2Via2l0
VHJhbnNpdGlvbkVuZEV2ZW50KTsgICAgICAgICAgIAogICAgfQogICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
anMvSlNFdmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9K
U0V2ZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRXZlbnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAjaW5j
bHVkZSAiSlNQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNUZXh0RXZlbnQuaCIKICNpbmNs
dWRlICJKU1VJRXZlbnQuaCIKKyNpbmNsdWRlICJKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisj
aW5jbHVkZSAiSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJKU1doZWVsRXZl
bnQuaCIKICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1
ZGUgIktleWJvYXJkRXZlbnQuaCIKQEAgLTQ4LDYgKzUwLDggQEAKICNpbmNsdWRlICJQcm9ncmVz
c0V2ZW50LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVUlFdmVudC5oIgor
I2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0VHJhbnNp
dGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKQEAgLTEyMCw2
ICsxMjQsMTAgQEAKICAgICBlbHNlIGlmIChldmVudC0+aXNTdG9yYWdlRXZlbnQoKSkKICAgICAg
ICAgcmV0ID0gbmV3IChleGVjKSBKU1N0b3JhZ2VFdmVudChKU1N0b3JhZ2VFdmVudFByb3RvdHlw
ZTo6c2VsZihleGVjKSwgc3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKICNlbmRp
ZgorICAgIGVsc2UgaWYgKGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgICAg
IHJldCA9IG5ldyAoZXhlYykgSlNXZWJLaXRBbmltYXRpb25FdmVudChKU1dlYktpdEFuaW1hdGlv
bkV2ZW50UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25F
dmVudCo+KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2
ZW50KCkpCisgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQo
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0
PFdlYktpdFRyYW5zaXRpb25FdmVudCo+KGV2ZW50KSk7ICAgIAogICAgIGVsc2UKICAgICAgICAg
cmV0ID0gbmV3IChleGVjKSBKU0V2ZW50KEpTRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGV2
ZW50KTsKIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lv
biAzMjkxMikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEzMiw3ICsxMzIsOSBAQAogICAgICAgICAgICAgT25tb3VzZW1vdmUsIE9u
bW91c2VvdXQsIE9ubW91c2VvdmVyLCBPbm1vdXNldXAsCiAgICAgICAgICAgICBPbldpbmRvd01v
dXNlV2hlZWwsIE9ucmVzZXQsIE9ucmVzaXplLCBPbnNjcm9sbCwKICAgICAgICAgICAgIE9uc2Vh
cmNoLCBPbnNlbGVjdCwgT25zdWJtaXQsIE9udW5sb2FkLAotICAgICAgICAgICAgT25iZWZvcmV1
bmxvYWQsCisgICAgICAgICAgICBPbmJlZm9yZXVubG9hZCwgT25XZWJLaXRBbmltYXRpb25TdGFy
dCwKKyAgICAgICAgICAgIE9uV2ViS2l0QW5pbWF0aW9uSXRlcmF0aW9uLCBPbldlYktpdEFuaW1h
dGlvbkVuZCwKKyAgICAgICAgICAgIE9uV2ViS2l0VHJhbnNpdGlvbkVuZCwKIAogICAgICAgICAg
ICAgLy8gQ29uc3RydWN0b3JzCiAgICAgICAgICAgICBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1M
SHR0cFJlcXVlc3QsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NQ1NTLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHJldmlzaW9uIDMyOTEy
KQorKysgV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2luZyBjb3B5KQpAQCAt
NDMsNiArNDMsOCBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVByaXZh
dGUuaCIKICNpbXBvcnQgIlN0eWxlU2hlZXQuaCIKKyNpbXBvcnQgIldlYktpdENTU0tleWZyYW1l
UnVsZS5oIgorI2ltcG9ydCAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2ltcG9ydCA8b2Jq
Yy9vYmpjLWNsYXNzLmg+CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTQxLDYgKzE0MywxMyBAQAog
ICAgICAgICBjYXNlIERPTV9QQUdFX1JVTEU6CiAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBb
RE9NQ1NTUGFnZVJ1bGUgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RE9NX1dFQktJVF9LRVlGUkFNRVNfUlVMRToKKyAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtE
T01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlIGNsYXNzXTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIERPTV9XRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgICAgIHdyYXBwZXJD
bGFzcyA9IFtET01XZWJLaXRDU1NLZXlmcmFtZVJ1bGUgY2xhc3NdOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxv
Y10gX2luaXRXaXRoQ1NTUnVsZTppbXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3Jl
L2JpbmRpbmdzL29iamMvRE9NSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NSW50ZXJuYWwuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxMSBA
QAogI2ltcG9ydCAiRE9NVGV4dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01UcmVlV2Fsa2VySW50
ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVVJRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NV2Vi
S2l0QW5pbWF0aW9uRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlSW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVdlYktpdENTU0tleWZyYW1lc1J1bGVJbnRl
cm5hbC5oIgorI2ltcG9ydCAiRE9NV2ViS2l0Q1NTTWF0cml4SW50ZXJuYWwuaCIKKyNpbXBvcnQg
IkRPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01XaGVlbEV2
ZW50SW50ZXJuYWwuaCIKIAogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRT
b3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShy
ZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzM3LDYgKzMzNywxMSBAQAogICAgIFRyZWVXYWxrZXIgXAogICAgIFVJRXZlbnQg
XAogICAgIFZvaWRDYWxsYmFjayBcCisJV2ViS2l0QW5pbWF0aW9uRXZlbnQgXAorCVdlYktpdENT
U0tleWZyYW1lUnVsZSBcCisJV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSBcCisJV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUgXAorCVdlYktpdFRyYW5zaXRpb25FdmVudCBcCiAgICAgV2hlZWxFdmVudCBc
CiAgICAgWE1MSHR0cFJlcXVlc3QgXAogICAgIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uIFwKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTksNiArMjE5LDE0IEBACiAgICAgICAg
IHNldEhUTUxFdmVudExpc3RlbmVyKHN1Ym1pdEV2ZW50LCBhdHRyKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmVycm9yQXR0cikgewogICAgICAgICBzZXRIVE1MRXZlbnRMaXN0
ZW5lcihlcnJvckV2ZW50LCBhdHRyKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bndlYmtpdGFuaW1hdGlvbnN0YXJ0QXR0cikgeworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5l
cih3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBhdHRyKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbndlYmtpdGFuaW1hdGlvbml0ZXJhdGlvbkF0dHIpIHsKKyAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIod2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIGF0dHIpOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9ud2Via2l0YW5pbWF0aW9uZW5kQXR0cikg
eworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih3ZWJraXRBbmltYXRpb25FbmRFdmVudCwg
YXR0cik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXR0cmFuc2l0aW9u
ZW5kQXR0cikgeworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcih3ZWJraXRUcmFuc2l0aW9u
RW5kRXZlbnQsIGF0dHIpOyAgICAgICAgCiAgICAgfQogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEF0dHJpYnV0ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQXR0
cmlidXRlTmFtZXMuaW4JKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9odG1sL0hUTUxBdHRy
aWJ1dGVOYW1lcy5pbgkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSwxMCBAQAogb25zdG9y
YWdlCiBvbnN1Ym1pdAogb251bmxvYWQKK29ud2Via2l0YW5pbWF0aW9uZW5kCitvbndlYmtpdGFu
aW1hdGlvbml0ZXJhdGlvbgorb253ZWJraXRhbmltYXRpb25zdGFydAorb253ZWJraXR0cmFuc2l0
aW9uZW5kCiBwYWdleAogcGFnZXkKIHBsYWNlaG9sZGVyCkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0NCwxMCArMjE0NCwxMyBAQAogCiB2b2lk
IFJlbmRlck9iamVjdDo6c2V0QW5pbWF0YWJsZVN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkKIHsK
LSAgICBpZiAoIWlzVGV4dCgpICYmIG1fc3R5bGUgJiYgc3R5bGUpCi0gICAgICAgIHN0eWxlID0g
YW5pbWF0aW9uQ29udHJvbGxlcigpLT51cGRhdGVJbXBsaWNpdEFuaW1hdGlvbnModGhpcywgc3R5
bGUpOworICAgIGlmICghaXNUZXh0KCkgJiYgc3R5bGUpIHsKKyAgICAgICAgc3R5bGUgPSBhbmlt
YXRpb25Db250cm9sbGVyKCktPnVwZGF0ZUFuaW1hdGlvbnModGhpcywgc3R5bGUpOworICAgIH0K
IAotICAgIHNldFN0eWxlKHN0eWxlKTsKKyAgICBpZiAoc3R5bGUpIHsKKyAgICAgICAgc2V0U3R5
bGUoc3R5bGUpOworICAgIH0KIH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFJlbmRl
clN0eWxlKiBzdHlsZSkKQEAgLTI1MjQsNyArMjUyNyw3IEBACiAgICAgaWYgKEFYT2JqZWN0Q2Fj
aGU6OmFjY2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0
Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOwogCi0gICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5jYW5j
ZWxJbXBsaWNpdEFuaW1hdGlvbnModGhpcyk7CisgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5j
YW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgLy8gQnkgZGVmYXVsdCBubyByZWYtY291bnRp
bmcuIFJlbmRlcldpZGdldDo6ZGVzdHJveSgpIGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoaXMgZnVu
Y3Rpb24gYmVjYXVzZSBpdCBuZWVkcyB0byBkbyByZWYtY291bnRpbmcuIElmIGFueXRoaW5nCklu
ZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3
IEBACiAgICAgLy8gRklYTUU6IFJpZ2h0IG5vdyB0aGlzIHdpbGwgdHlwaWNhbGx5IGJlIGNhbGxl
ZCBvbmx5IHdoZW4gdXBkYXRpbmcgaGFwcGVucyBmcm9tIHRoZSBET00gb24gZXhwbGljaXQgZWxl
bWVudHMuCiAgICAgLy8gV2UgZG9uJ3QgeWV0IGhhbmRsZSBnZW5lcmF0ZWQgY29udGVudCBhbmlt
YXRpb24gc3VjaCBhcyBmaXJzdC1sZXR0ZXIgb3IgYmVmb3JlL2FmdGVyICh3ZSdsbCB3b3JyeSBh
Ym91dCB0aGlzIGxhdGVyKS4KICAgICB2b2lkIHNldEFuaW1hdGFibGVTdHlsZShSZW5kZXJTdHls
ZSopOwotCisgICAgCiAgICAgLy8gU2V0IHRoZSBzdHlsZSBvZiB0aGUgb2JqZWN0IGFuZCB1cGRh
dGUgdGhlIHN0YXRlIG9mIHRoZSBvYmplY3QgYWNjb3JkaW5nbHkuCiAgICAgdmlydHVhbCB2b2lk
IHNldFN0eWxlKFJlbmRlclN0eWxlKik7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5j
cHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNTcsOCArMjU3LDkgQEAKICAgICB9CiAgICAgCiAgICAgaWYg
KGhhc1RyYW5zZm9ybSkgewotICAgICAgICBtX3RyYW5zZm9ybS0+cmVzZXQoKTsKLSAgICAgICAg
cmVuZGVyZXIoKS0+c3R5bGUoKS0+YXBwbHlUcmFuc2Zvcm0oKm1fdHJhbnNmb3JtLCByZW5kZXJl
cigpLT5ib3JkZXJCb3goKS5zaXplKCkpOworICAgICAgICBUcmFuc2Zvcm0zRCB0cmFuc2Zvcm0z
RDsKKyAgICAgICAgcmVuZGVyZXIoKS0+c3R5bGUoKS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3Jt
M0QsIHJlbmRlcmVyKCktPmJvcmRlckJveCgpLnNpemUoKSwgdHJ1ZSk7CisgICAgICAgIG1fdHJh
bnNmb3JtLnNldChuZXcgQWZmaW5lVHJhbnNmb3JtKHRyYW5zZm9ybTNELmFmZmluZVRyYW5zZm9y
bSgpKSk7CiAgICAgfQogfQogCkBAIC0yMzY4LDcgKzIzNjksNyBAQAogICAgIAogICAgIG1fcmVm
bGVjdGlvbi0+c2V0U3R5bGUobmV3U3R5bGUpOwogfQotCisgICAgCiB2b2lkIFJlbmRlckxheWVy
OjpzdXNwZW5kTWFycXVlZXMoKQogewogICAgIGlmIChtX21hcnF1ZWUpCkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTdHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclN0eWxlLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyU3R5bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIkNT
U1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ1NTQ3Vyc29ySW1h
Z2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1RyYW5zZm9ybVZhbHVlLmgiCiAjaW5jbHVkZSAiRGF0
YVJlZi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGbG9hdFBvaW50LmgiCkBAIC01
MCw2ICs0OSw4IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgog
I2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm0zRC5oIgorCiAjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlICJUZXh0RGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KQEAgLTc0LDYgKzc1LDcgQEAKIGNsYXNzIENhY2hlZEltYWdlOwogY2xh
c3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBDdXJzb3JMaXN0OworY2xhc3MgS2V5ZnJhbWVMaXN0
OwogY2xhc3MgUGFpcjsKIGNsYXNzIFJlbmRlckFyZW5hOwogY2xhc3MgU2hhZG93VmFsdWU7CkBA
IC03ODIsODEgKzc4NCwxMjIgQEAKIAogLy8gQ1NTIFRyYW5zZm9ybXMgKG1heSBiZWNvbWUgcGFy
dCBvZiBDU1MzKQogCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRl
ZDxUcmFuc2Zvcm1PcGVyYXRpb24+IHsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFRyYW5zZm9ybU9wZXJhdGlvbj4KK3sKIHB1YmxpYzoKLSAgICBUcmFuc2Zv
cm1PcGVyYXRpb24oKSA6IFJlZkNvdW50ZWQ8VHJhbnNmb3JtT3BlcmF0aW9uPigwKSB7IH0KICAg
ICB2aXJ0dWFsIH5UcmFuc2Zvcm1PcGVyYXRpb24oKSB7fQogICAgIAogICAgIHZpcnR1YWwgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVy
biAhKCp0aGlzID09IG8pOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgPSAwOwogICAgIAorICAgIHZpcnR1
YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYsIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUp
IGNvbnN0ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpID0gMDsKICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVu
dGl0eU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29s
IGlzU2NhbGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIGlzU2tld09wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBib29sIGlzVHJhbnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXhPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQZXJzcGVjdGl2ZU9wZXJhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCitjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24KK3sKK3B1YmxpYzoKKyAgICBJZGVu
dGl0eVRyYW5zZm9ybU9wZXJhdGlvbigpCisgICAge30KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wg
aXNJZGVudGl0eU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gby5pc0lkZW50aXR5T3BlcmF0aW9uKCk7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25z
dCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5ID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
Cit9OworCiBjbGFzcyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1P
cGVyYXRpb24KIHsKIHB1YmxpYzoKICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUg
c3gsIGRvdWJsZSBzeSkKLSAgICA6IG1feChzeCksIG1feShzeSkKKyAgICA6IG1feChzeCksIG1f
eShzeSksIG1feigxLmYpCiAgICAge30KLSAgICAgICAgCisKKyAgICBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbihkb3VibGUgc3gsIGRvdWJsZSBzeSwgZG91YmxlIHN6KQorICAgIDogbV94KHN4KSwg
bV95KHN5KSwgbV96KHN6KQorICAgIHt9CisgICAgCiAgICAgdmlydHVhbCBib29sIGlzU2NhbGVP
cGVyYXRpb24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKICAgICB2aXJ0dWFsIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CiAgICAgewog
ICAgICAgICBpZiAoby5pc1NjYWxlT3BlcmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFNj
YWxlVHJhbnNmb3JtT3BlcmF0aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zv
cm1PcGVyYXRpb24qPigmbyk7Ci0gICAgICAgICAgICByZXR1cm4gbV94ID09IHMtPm1feCAmJiBt
X3kgPT0gcy0+bV95OworICAgICAgICAgICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09
IHMtPm1feSAmJiBtX3ogPT0gcy0+bV96OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgCisgICAgdmlydHVhbCBi
b29sIGFwcGx5KFRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJv
eFNpemUpIGNvbnN0CiAgICAgewotICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBtX3kpOwor
ICAgICAgICB0cmFuc2Zvcm0uc2NhbGUzZCgoZmxvYXQpIG1feCwgKGZsb2F0KSBtX3ksIChmbG9h
dCkgbV96KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQorICAgIAogICAgIHZpcnR1
YWwgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZy
b20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KKyAg
ICAKIHByaXZhdGU6CiAgICAgZG91YmxlIG1feDsKICAgICBkb3VibGUgbV95OworICAgIGRvdWJs
ZSBtX3o7CiB9OwogCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJh
bnNmb3JtT3BlcmF0aW9uCiB7CiBwdWJsaWM6CiAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
KGRvdWJsZSBhbmdsZSkKLSAgICA6IG1fYW5nbGUoYW5nbGUpCisgICAgOiBtX3goMC5mKSwgbV95
KDAuZiksIG1feigxLmYpLCBtX2FuZ2xlKGFuZ2xlKQogICAgIHt9CiAKKyAgICBSb3RhdGVUcmFu
c2Zvcm1PcGVyYXRpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xl
KQorICAgIDogbV94KHgpLCBtX3koeSksIG1feih6KSwgbV9hbmdsZShhbmdsZSkKKyAgICB7fQor
ICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzUm90YXRlT3Bl
cmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
ciA9IHN0YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAg
ICAgICAgICAgIHJldHVybiBtX2FuZ2xlID09IHItPm1fYW5nbGU7CisgICAgICAgICAgICByZXR1
cm4gbV94ID09IHItPm1feCAmJiBtX3kgPT0gci0+bV95ICYmIG1feiA9PSByLT5tX3ogJiYgbV9h
bmdsZSA9PSByLT5tX2FuZ2xlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKQorICAgIHZpcnR1YWwgYm9vbCBhcHBs
eShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBj
b25zdAogICAgIHsKLSAgICAgICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuZ2xlKTsKKyAgICAgICAg
dHJhbnNmb3JtLnJvdGF0ZTNkKChmbG9hdCkgbV94LCAoZmxvYXQpIG1feSwgKGZsb2F0KSBtX3os
IChmbG9hdCkgbV9hbmdsZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAK
ICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFs
c2UpOwogICAgIAogcHJpdmF0ZToKKyAgICBkb3VibGUgbV94OworICAgIGRvdWJsZSBtX3k7Cisg
ICAgZG91YmxlIG1fejsKICAgICBkb3VibGUgbV9hbmdsZTsKIH07CiAKQEAgLTg2OCw3ICs5MTEs
NyBAQAogICAgIHt9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzU2tld09wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChv
LmlzU2tld09wZXJhdGlvbigpKSB7CkBAIC04NzcsMTIgKzkyMCwxMyBAQAogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZm
aW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisg
ICAgCisgICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0sIGNvbnN0
IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0CiAgICAgewotICAgICAgICB0cmFuc2Zvcm0u
c2tldyhtX2FuZ2xlWCwgbV9hbmdsZVkpOworICAgICAgICB0cmFuc2Zvcm0uc2tldygoZmxvYXQp
IG1fYW5nbGVYLCAoZmxvYXQpIG1fYW5nbGVZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KLQorICAgIAogICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRl
bnRpdHkgPSBmYWxzZSk7CiAgICAgCiBwcml2YXRlOgpAQCAtODk0LDg1ICs5MzgsMTI2IEBACiB7
CiBwdWJsaWM6CiAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IExlbmd0aCYg
dHgsIGNvbnN0IExlbmd0aCYgdHkpCi0gICAgOiBtX3godHgpLCBtX3kodHkpCisgICAgOiBtX3go
dHgpLCBtX3kodHkpLCBtX3ooTGVuZ3RoKCkpCiAgICAge30KKworICAgIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBjb25zdCBM
ZW5ndGgmIHR6KQorICAgIDogbV94KHR4KSwgbV95KHR5KSwgbV96KHR6KQorICAgIHt9CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGlzVHJhbnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQotCisgICAgCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9uJiBvKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG8uaXNUcmFuc2xhdGVP
cGVyYXRpb24oKSkgewogICAgICAgICAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0
aW9uKiB0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4o
Jm8pOwotICAgICAgICAgICAgcmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95ID09IHQtPm1feTsK
KyAgICAgICAgICAgIHJldHVybiBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5tX3kgJiYgbV96
ID09IHQtPm1fejsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0g
ICAgdmlydHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJ
bnRTaXplJiBib3JkZXJCb3hTaXplKQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFu
c2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAog
ICAgIHsKLSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3guY2FsY0Zsb2F0VmFsdWUoYm9y
ZGVyQm94U2l6ZS53aWR0aCgpKSwgbV95LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUuaGVp
Z2h0KCkpKTsKKyAgICAgICAgLy8gVE9ETzogQ0ZNIC0gSG93IGRvIHdlIGRlYWwgd2l0aCBhIHog
dmFsdWUgYXMgYSBwZXJjZW50YWdlPworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QobV94
LmNhbGNWYWx1ZShib3JkZXJCb3hTaXplLndpZHRoKCkpLCBtX3kuY2FsY1ZhbHVlKGJvcmRlckJv
eFNpemUuaGVpZ2h0KCkpLCBtX3ouY2FsY1ZhbHVlKDEpKTsKKyAgICAgICAgcmV0dXJuIG1feC50
eXBlKCkgPT0gUGVyY2VudCB8fCBtX3kudHlwZSgpID09IFBlcmNlbnQ7CiAgICAgfQotCisgICAg
CiAgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZh
bHNlKTsKLQorICAgIAogcHJpdmF0ZToKICAgICBMZW5ndGggbV94OwogICAgIExlbmd0aCBtX3k7
CisgICAgTGVuZ3RoIG1fejsKIH07CiAKIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiA6
IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24KIHsKIHB1YmxpYzoKLSAgICBNYXRyaXhUcmFuc2Zv
cm1PcGVyYXRpb24oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJs
ZSBlLCBkb3VibGUgZikKLSAgICA6IG1fYShhKSwgbV9iKGIpLCBtX2MoYyksIG1fZChkKSwgbV9l
KGUpLCBtX2YoZikKLSAgICB7fQorICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIG0pCisgICAgeyBtX21hdHJpeCA9IG07IH0KICAgICAKKyAgICBNYXRy
aXhUcmFuc2Zvcm1PcGVyYXRpb24oZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYywgZmxvYXQgZCwg
ZmxvYXQgZSwgZmxvYXQgZikKKyAgICB7CisgICAgICAgIG1fbWF0cml4LnNldE1hdHJpeChhLGIs
YyxkLGUsZik7CisgICAgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeE9wZXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAg
IGlmIChvLmlzTWF0cml4T3BlcmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9w
ZXJhdGlvbio+KCZvKTsKLSAgICAgICAgICAgIHJldHVybiBtX2EgPT0gbS0+bV9hICYmIG1fYiA9
PSBtLT5tX2IgJiYgbV9jID09IG0tPm1fYyAmJiBtX2QgPT0gbS0+bV9kICYmIG1fZSA9PSBtLT5t
X2UgJiYgbV9mID09IG0tPm1fZjsKKyAgICAgICAgICAgIHJldHVybiBtX21hdHJpeCA9PSBtLT5t
X21hdHJpeDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRT
aXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgdHJhbnNmb3JtLm11bHRM
ZWZ0KFRyYW5zZm9ybTNEKG1fbWF0cml4KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0
eSA9IGZhbHNlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4
OworfTsKIAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9y
bSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkKK2NsYXNzIE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbgoreworcHVibGljOgorICAgIE1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IFRyYW5zZm9ybTNEJiBtYXQpCisgICAgeyBt
X21hdHJpeCA9IG1hdDsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAg
IEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7Ci0g
ICAgICAgIHRyYW5zZm9ybSA9IG1hdHJpeCAqIHRyYW5zZm9ybTsKKyAgICAgICAgaWYgKG8uaXNN
YXRyaXgzRE9wZXJhdGlvbigpKSB7CisgICAgICAgICAgICBjb25zdCBNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uKj4oJm8pOworICAgICAgICAgICAgcmV0dXJuIG1fbWF0cml4ID09IG0tPm1fbWF0cml4Owor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICB2aXJ0
dWFsIGJvb2wgYXBwbHkoVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9y
ZGVyQm94U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRyYW5zZm9ybS5tdWx0TGVmdChtX21h
dHJpeCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCBU
cmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwg
ZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAKIHBy
aXZhdGU6Ci0gICAgZG91YmxlIG1fYTsKLSAgICBkb3VibGUgbV9iOwotICAgIGRvdWJsZSBtX2M7
Ci0gICAgZG91YmxlIG1fZDsKLSAgICBkb3VibGUgbV9lOwotICAgIGRvdWJsZSBtX2Y7CisgICAg
VHJhbnNmb3JtM0QgbV9tYXRyaXg7CiB9OwotCisgICAgCiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRp
b25zCiB7CiBwdWJsaWM6CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0
eSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgaWYgKG1ha2VJZGVudGl0eSkKKyAgICAgICAgICAg
IGFwcGVuZChuZXcgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24oKSk7CisgICAgfQorICAgIAog
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJikgY29uc3Q7CiAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0IHsK
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KLSAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLnNpemUoKTsgfQogICAgIGNv
bnN0IFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25z
dCB7IHJldHVybiBtX29wZXJhdGlvbnMuYXQoaSk7IH0KLQorICAgIAogICAgIHZvaWQgYXBwZW5k
KGNvbnN0IFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcCkgeyByZXR1cm4gbV9vcGVyYXRp
b25zLmFwcGVuZChvcCk7IH0KLQorICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7CiB9OwotCisgICAgCiBjbGFzcyBTdHls
ZVRyYW5zZm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVRyYW5zZm9ybURhdGE+IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVRyYW5zZm9ybURhdGE+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVRyYW5zZm9ybURhdGEpOyB9CkBAIC0xMDI4
LDYgKzExMTMsOCBAQAogc3RydWN0IFNoYWRvd0RhdGEgewogICAgIFNoYWRvd0RhdGEoaW50IF94
LCBpbnQgX3ksIGludCBfYmx1ciwgY29uc3QgQ29sb3ImIF9jb2xvcikKICAgICA6eChfeCksIHko
X3kpLCBibHVyKF9ibHVyKSwgY29sb3IoX2NvbG9yKSwgbmV4dCgwKSB7fQorICAgIFNoYWRvd0Rh
dGEoKQorICAgIDogeCgwKSwgeSgwKSwgYmx1cigwKSwgbmV4dCgwKSB7fQogICAgIFNoYWRvd0Rh
dGEoY29uc3QgU2hhZG93RGF0YSYgbyk7CiAgICAgCiAgICAgflNoYWRvd0RhdGEoKSB7IGRlbGV0
ZSBuZXh0OyB9CkBAIC0xMjMyLDYwICsxMzE5LDEzNSBAQAogICAgIGRvdWJsZSBtX3kyOwogfTsK
IAotc3RydWN0IFRyYW5zaXRpb24geworZW51bSBFQW5pbVBsYXlTdGF0ZSB7IEFuaW1QbGF5U3Rh
dGVQbGF5aW5nLCBBbmltUGxheVN0YXRlUGF1c2VkIH07CisKKyNkZWZpbmUgQW5pbWF0aW9uIFRy
YW5zaXRpb24KKworY2xhc3MgVHJhbnNpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRyYW5zaXRp
b24+IHsKIHB1YmxpYzoKICAgICBUcmFuc2l0aW9uKCk7Ci0gICAgflRyYW5zaXRpb24oKTsKLQot
ICAgIFRyYW5zaXRpb24qIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAgICBUcmFu
c2l0aW9uKiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0OyB9Ci0KKyAgICAKKyAgICBjb25zdCBUcmFu
c2l0aW9uKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAgVHJhbnNp
dGlvbiogbmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIAorICAgIC8vIHNoYXJl
ZCBiZXR3ZWVuIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zCisgICAgYm9vbCBpc0RlbGF5U2V0
KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheVNldDsgfQogICAgIGJvb2wgaXNEdXJhdGlvblNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb25TZXQ7IH0KLSAgICBib29sIGlzUmVwZWF0Q291bnRT
ZXQoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdENvdW50U2V0OyB9CiAgICAgYm9vbCBpc1RpbWlu
Z0Z1bmN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvblNldDsgfQotICAg
IGJvb2wgaXNQcm9wZXJ0eVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlTZXQ7IH0KKwor
ICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAgICBib29sIGlzVHJhbnNpdGlvblByb3BlcnR5U2V0
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQogICAgIAotICAgIGJvb2wgaXNFbXB0
eSgpIGNvbnN0IHsgcmV0dXJuICFtX2R1cmF0aW9uU2V0ICYmICFtX3JlcGVhdENvdW50U2V0ICYm
ICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0OyB9CisgICAgLy8gYW5pbWF0
aW9ucyBvbmx5CisgICAgYm9vbCBpc0FuaW1hdGlvbkRpcmVjdGlvblNldCgpIGNvbnN0IHsgcmV0
dXJuIG1fZGlyZWN0aW9uU2V0OyB9CisgICAgYm9vbCBpc0FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudFNldDsgfQorICAgIGJvb2wgaXNB
bmltYXRpb25OYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2V0OyB9CisgICAgYm9vbCBp
c0FuaW1hdGlvblBsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlU2V0OyB9
CisgICAgCisgICAgLy8gaXMgdGhlIHNwZWNpYWwgIm5vbmUiIGFuaW1hdGlvbiAoYW5pbWF0aW9u
LW5hbWU6IG5vbmUpCisgICAgYm9vbCBpc05vbmVBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2lzTm9uZTsgfQorICAgIC8vIHdlIGNhbiBtYWtlIHBsYWNlaG9sZGVyIFRyYW5zaXRpb24gb2Jq
ZWN0cyB0byBrZWVwIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMKKyAgICAvLyBvZiBwcm9wZXJ0
aWVzIGluIHN5bmMuIGlzVmFsaWRBbmltYXRpb24gbWVhbnMgdGhpcyBpcyBub3QgYSBwbGFjZWhv
bGRlci4KKyAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiAhbV9pc05v
bmUgJiYgIW1fbmFtZS5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICghbV9kaXJlY3Rpb25TZXQgJiYgIW1fZHVyYXRpb25T
ZXQgJiYgIW1fbmFtZVNldCAmJiAhbV9wbGF5U3RhdGVTZXQgJiYgCisgICAgICAgICAgICAgICAg
IW1faXRlcmF0aW9uQ291bnRTZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVuY3Rpb25T
ZXQgJiYgIW1fcHJvcGVydHlTZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1wdHlPclpl
cm9EdXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbXB0eSgpIHx8ICht
X2R1cmF0aW9uID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAgICB9CisgICAgCisgICAgLy8gc2hh
cmVkIGJldHdlZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKKyAgICB2b2lkIGNsZWFyRGVs
YXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJhdGlvbigpIHsg
bV9kdXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclJlcGVhdENvdW50KCkgeyBt
X3JlcGVhdENvdW50U2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNsZWFyVGltaW5nRnVuY3Rpb24o
KSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJQcm9wZXJ0
eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CiAKLSAgICBpbnQgZHVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgaW50IHJlcGVhdENvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBlYXRDb3VudDsgfQorICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAgICB2b2lk
IGNsZWFyVHJhbnNpdGlvblByb3BlcnR5KCkgeyBtX3Byb3BlcnR5U2V0ID0gZmFsc2U7IH0KKwor
ICAgIC8vIGFuaW1hdGlvbnMgb25seQorICAgIHZvaWQgY2xlYXJBbmltYXRpb25EaXJlY3Rpb24o
KSB7IG1fZGlyZWN0aW9uU2V0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGNsZWFyQW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQoKSB7IG1faXRlcmF0aW9uQ291bnRTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQg
Y2xlYXJBbmltYXRpb25OYW1lKCkgeyBtX25hbWVTZXQgPSBmYWxzZTsgfQorICAgIHZvaWQgY2xl
YXJBbmltYXRpb25QbGF5U3RhdGUoKSB7IG1fcGxheVN0YXRlU2V0ID0gQW5pbVBsYXlTdGF0ZVBs
YXlpbmc7IH0KKyAgICAKKyAgICAvLyBzaGFyZWQgYmV0d2VlbiB0cmFuc2l0aW9ucyBhbmQgYW5p
bWF0aW9ucworICAgIGZsb2F0IGRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheTsgfQorICAg
IGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICBjb25z
dCBUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3RpbWlu
Z0Z1bmN0aW9uOyB9Ci0gICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0
eTsgfQorCisgICAgLy8gdHJhbnNpdGlvbnMgb25seQorICAgIGludCB0cmFuc2l0aW9uUHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisKKyAgICAvLyBhbmltYXRpb25zIG9u
bHkKKyAgICBib29sIGFuaW1hdGlvbkRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZGlyZWN0
aW9uOyB9CisgICAgaW50IGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkgY29uc3QgeyByZXR1cm4g
bV9pdGVyYXRpb25Db3VudDsgfQorICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEVBbmltUGxheVN0YXRlIGFuaW1hdGlvblBsYXlT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlOyB9CisKKyAgICBjb25zdCBSZWZQdHI8
S2V5ZnJhbWVMaXN0PiYga2V5ZnJhbWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZUxp
c3Q7IH0KICAgICAKLSAgICB2b2lkIHNldER1cmF0aW9uKGludCBkKSB7IG1fZHVyYXRpb24gPSBk
OyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVwZWF0Q291bnQoaW50IGMp
IHsgbV9yZXBlYXRDb3VudCA9IGM7IG1fcmVwZWF0Q291bnRTZXQgPSB0cnVlOyB9CisgICAgLy8g
c2hhcmVkIGJldHdlZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKKyAgICB2b2lkIHNldERl
bGF5KGZsb2F0IGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0cnVlOyB9CisgICAgdm9p
ZCBzZXREdXJhdGlvbihkb3VibGUgZCkgeyBBU1NFUlQoZCA+PSAwKTsgbV9kdXJhdGlvbiA9IGQ7
IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbihjb25z
dCBUaW1pbmdGdW5jdGlvbiYgZikgeyBtX3RpbWluZ0Z1bmN0aW9uID0gZjsgbV90aW1pbmdGdW5j
dGlvblNldCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFByb3BlcnR5KGludCB0KSB7IG1fcHJvcGVy
dHkgPSB0OyBtX3Byb3BlcnR5U2V0ID0gdHJ1ZTsgfQogCi0gICAgdm9pZCBzZXROZXh0KFRyYW5z
aXRpb24qIG4pIHsgaWYgKG1fbmV4dCAhPSBuKSB7IGRlbGV0ZSBtX25leHQ7IG1fbmV4dCA9IG47
IH0gfQorICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAgICB2b2lkIHNldFRyYW5zaXRpb25Qcm9w
ZXJ0eShpbnQgdCkgeyBtX3Byb3BlcnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7IH0KIAor
ICAgIC8vIGFuaW1hdGlvbnMgb25seQorICAgIHZvaWQgc2V0QW5pbWF0aW9uRGlyZWN0aW9uKGJv
b2wgZCkgeyBtX2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1ZTsgfQorICAgIHZv
aWQgc2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoaW50IGMpIHsgbV9pdGVyYXRpb25Db3VudCA9
IGM7IG1faXRlcmF0aW9uQ291bnRTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRBbmltYXRpb25O
YW1lKGNvbnN0IFN0cmluZyYgbikgeyBtX25hbWUgPSBuOyBtX25hbWVTZXQgPSB0cnVlOyB9Cisg
ICAgdm9pZCBzZXRBbmltYXRpb25QbGF5U3RhdGUoRUFuaW1QbGF5U3RhdGUgZCkgeyBtX3BsYXlT
dGF0ZSA9IGQ7IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQorICAgIAorICAgIHZvaWQgc2V0SXNO
b25lQW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47IH0KKyAgICAKKyAgICB2b2lkIHNl
dE5leHQoVHJhbnNpdGlvbiogbikgeyBpZiAobV9uZXh0LmdldCgpICE9IG4pIHsgbV9uZXh0ID0g
bjsgfSB9CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb25LZXlmcmFtZShjb25zdCBSZWZQdHI8
S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSkgIHsgbV9rZXlmcmFtZUxpc3QgPSBrZXlmcmFtZTsgfQor
ICAgIAogICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBUcmFuc2l0aW9uJiBvKTsgICAg
CiAgICAgVHJhbnNpdGlvbihjb25zdCBUcmFuc2l0aW9uJiBvKTsKLQotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgVHJhbnNpdGlvbiYgbykgY29uc3QgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvKTsK
LSAgICB9Ci0KKyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBvZiB0aGlz
IGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQorICAgIGJvb2wgdHJhbnNpdGlvbnNNYXRj
aChjb25zdCBUcmFuc2l0aW9uKiB0LCBib29sIG1hdGNoUGxheVN0YXRlcz10cnVlKSBjb25zdDsK
KyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSB0cmFuc2l0aW9uIGluIHRoZSBjaGFpbiAo
ZGVmaW5lZCBieSBtX25leHQpIG1hdGNoIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFu
c2l0aW9uJiBvKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uc01hdGNoKCZvKSAmJiAoKG1fbmV4
dCAmJiBvLm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQpIDogKG1fbmV4dCA9PSBvLm1f
bmV4dCkpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zaXRpb24mIG8pIGNvbnN0
IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KKyAgICAKICAgICB2b2lkIGZpbGxVbnNldFByb3Bl
cnRpZXMoKTsKLQotICAgIGludCBtX2R1cmF0aW9uOwotICAgIGludCBtX3JlcGVhdENvdW50Owor
ICAgIAorcHJpdmF0ZToKKyAgICBib29sIG1fZGlyZWN0aW9uOworICAgIGRvdWJsZSBtX2R1cmF0
aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAgRUFuaW1QbGF5U3RhdGUgbV9wbGF5U3RhdGU7
CisgICAgaW50IG1faXRlcmF0aW9uQ291bnQ7CiAgICAgVGltaW5nRnVuY3Rpb24gbV90aW1pbmdG
dW5jdGlvbjsKKyAgICBmbG9hdCBtX2RlbGF5OwogICAgIGludCBtX3Byb3BlcnR5OwotCi0gICAg
Ym9vbCBtX2R1cmF0aW9uU2V0OwotICAgIGJvb2wgbV9yZXBlYXRDb3VudFNldDsKLSAgICBib29s
IG1fdGltaW5nRnVuY3Rpb25TZXQ7Ci0gICAgYm9vbCBtX3Byb3BlcnR5U2V0OwotCi0gICAgVHJh
bnNpdGlvbiogbV9uZXh0OworICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IG1fa2V5ZnJhbWVMaXN0
OworICAgIAorICAgIGJvb2wgbV9kaXJlY3Rpb25TZXQgICAgIDogMTsKKyAgICBib29sIG1fZHVy
YXRpb25TZXQgICAgICA6IDE7CisgICAgYm9vbCBtX25hbWVTZXQgICAgICAgICAgOiAxOworICAg
IGJvb2wgbV9wbGF5U3RhdGVTZXQgICAgIDogMTsKKyAgICBib29sIG1faXRlcmF0aW9uQ291bnRT
ZXQgICA6IDE7CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0OiAxOworICAgIGJvb2wgbV9k
ZWxheVNldCAgICAgICAgIDogMTsKKyAgICBib29sIG1fcHJvcGVydHlTZXQgICAgICA6IDE7Cisg
ICAgCisgICAgYm9vbCBtX2lzTm9uZSA6IDE7CisgICAgCisgICAgUmVmUHRyPFRyYW5zaXRpb24+
IG1fbmV4dDsKIH07Ci0KKyAgICAKIGNsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFN0eWxlUmVmbGVjdGlvbj4KIHsKIHB1YmxpYzoKQEAgLTEzMzQsNiArMTQ5Niw4IEBA
CiAgICAgYm9vbCBzaGFkb3dEYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0
ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVudChjb25z
dCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHRyYW5zaXRp
b25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikgY29uc3Q7
CisgICAgYm9vbCBhbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhl
cml0ZWREYXRhJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5
bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcik7CiAKICAgICBpbnQgbGluZUNsYW1wOyAvLyBBbiBB
cHBsZSBleHRlbnNpb24uCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMTM2MCw3
ICsxNTI0LDggQEAKICAgICAKICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBtX2JveFJlZmxl
Y3Q7CiAKLSAgICBUcmFuc2l0aW9uKiBtX3RyYW5zaXRpb247CisgICAgUmVmUHRyPFRyYW5zaXRp
b24+IG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV9hbmltYXRpb247CiAK
ICAgICBGaWxsTGF5ZXIgbV9tYXNrOwogICAgIE5pbmVQaWVjZUltYWdlIG1fbWFza0JveEltYWdl
OwpAQCAtMjA0OCwxMyArMjIxMywyMCBAQAogICAgIExlbmd0aCB0cmFuc2Zvcm1PcmlnaW5YKCkg
Y29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX3g7IH0K
ICAgICBMZW5ndGggdHJhbnNmb3JtT3JpZ2luWSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV95OyB9CiAgICAgYm9vbCBoYXNUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiAhcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX29wZXJh
dGlvbnMuaXNFbXB0eSgpOyB9Ci0gICAgdm9pZCBhcHBseVRyYW5zZm9ybShBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdDsKKyAgICB2b2lkIGFwcGx5
VHJhbnNmb3JtKFRyYW5zZm9ybTNEJiwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSwgYm9v
bCBjaGVja0FwcGx5VHJhbnNmb3JtT3JpZ2luKSBjb25zdDsKICAgICBib29sIGhhc01hc2soKSBj
b25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrLmhhc0ltYWdlKCkgfHwg
cmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0JveEltYWdlLmhhc0ltYWdlKCk7IH0KICAgICAv
LyBFbmQgQ1NTMyBHZXR0ZXJzCiAKICAgICAvLyBBcHBsZS1zcGVjaWZpYyBwcm9wZXJ0eSBnZXR0
ZXIgbWV0aG9kcwogICAgIFRyYW5zaXRpb24qIGFjY2Vzc1RyYW5zaXRpb25zKCk7Ci0gICAgY29u
c3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJp
dGVkRGF0YS0+bV90cmFuc2l0aW9uOyB9CisgICAgVHJhbnNpdGlvbiogYWNjZXNzQW5pbWF0aW9u
cygpOworICAgIAorICAgIC8vIHJldHVybiB0aGUgZmlyc3QgZm91bmQgVHJhbnNpdGlvbiAoaW5j
bHVkaW5nICdhbGwnIHRyYW5zaXRpb25zKQorICAgIGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRp
b25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpOworICAgIAorICAgIGNvbnN0IFRyYW5zaXRpb24q
IHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJh
bnNpdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW1hdGlvbnMoKSBjb25z
dCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbmltYXRpb24uZ2V0KCk7IH0KKwog
ICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+
bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgpIGNvbnN0IHsgcmV0dXJuIHJh
cmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAgIEVUZXh0U2VjdXJpdHkgdGV4
dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRTZWN1cml0eT4ocmFy
ZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIzMTgsOSArMjQ5MCwxNiBAQAog
ICAgIC8vIEVuZCBDU1MzIFNldHRlcnMKICAgIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3Bl
cnR5IHNldHRlcnMKLSAgICB2b2lkIGNsZWFyVHJhbnNpdGlvbnMoKSB7IGRlbGV0ZSByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uOyByYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gMDsgfQorICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVz
KGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgaWYgKHJhcmVOb25Jbmhl
cml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+dXBkYXRlS2V5
ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CisKKyAgICB2b2lkIGNsZWFyVHJhbnNpdGlvbnMoKSB7
IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24gPSAwOyB9CiAgICAg
dm9pZCBpbmhlcml0VHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvbiogcGFyZW50KSB7IGNsZWFy
VHJhbnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpwYXJlbnQpOyB9CiAgICAgdm9pZCBhZGp1
c3RUcmFuc2l0aW9ucygpOworCisgICAgdm9pZCBjbGVhckFuaW1hdGlvbnMoKSB7IHJhcmVOb25J
bmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbiA9IDA7IH0KKyAgICB2b2lkIGluaGVy
aXRBbmltYXRpb25zKGNvbnN0IFRyYW5zaXRpb24qIHBhcmVudCkgeyBjbGVhckFuaW1hdGlvbnMo
KTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9u
ID0gbmV3IFRyYW5zaXRpb24oKnBhcmVudCk7IH0KKyAgICB2b2lkIGFkanVzdEFuaW1hdGlvbnMo
KTsKKwogICAgIHZvaWQgc2V0TGluZUNsYW1wKGludCBjKSB7IFNFVF9WQVIocmFyZU5vbkluaGVy
aXRlZERhdGEsIGxpbmVDbGFtcCwgYyk7IH0KICAgICB2b2lkIHNldFRleHRTaXplQWRqdXN0KGJv
b2wgYikgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0U2l6ZUFkanVzdCwgYik7IH0K
ICAgICB2b2lkIHNldFRleHRTZWN1cml0eShFVGV4dFNlY3VyaXR5IGFUZXh0U2VjdXJpdHkpIHsg
U0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNlY3VyaXR5LCBhVGV4dFNlY3VyaXR5KTsg
fSAKQEAgLTI0NzcsMTAgKzI2NTYsMTcgQEAKICAgICBzdGF0aWMgTGVuZ3RoIGluaXRpYWxUcmFu
c2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQpOyB9CiAgICAgCiAg
ICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBpbnQgaW5pdGlhbFRyYW5z
aXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgaW50IGluaXRpYWxUcmFu
c2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGljIFRpbWluZ0Z1bmN0
aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVybiBUaW1pbmdGdW5j
dGlvbigpOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRpYWxEZWxheSgpIHsgcmV0dXJuIDA7IH0K
KyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxEdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KKyAgICBz
dGF0aWMgVGltaW5nRnVuY3Rpb24gaW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkgeyByZXR1cm4gVGlt
aW5nRnVuY3Rpb24oKTsgfQorCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbEFuaW1hdGlvbkRpcmVj
dGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGludCBpbml0aWFsQW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIFN0cmluZyBpbml0aWFs
QW5pbWF0aW9uTmFtZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgc3RhdGljIEVBbmltUGxh
eVN0YXRlIGluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSB7IHJldHVybiBBbmltUGxheVN0YXRl
UGxheWluZzsgfQorCiAgICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkg
eyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICAKICAgICBzdGF0aWMgaW50IGluaXRpYWxMaW5l
Q2xhbXAoKSB7IHJldHVybiAtMTsgfQogICAgIHN0YXRpYyBib29sIGluaXRpYWxUZXh0U2l6ZUFk
anVzdCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgRVRleHRTZWN1cml0eSBpbml0aWFs
VGV4dFNlY3VyaXR5KCkgeyByZXR1cm4gVFNOT05FOyB9CkBAIC0yNDkwLDYgKzI2NzYsNDUgQEAK
ICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJrIC0KKyAgICAKK2NsYXNzIEtleWZyYW1lVmFsdWUg
eworcHVibGljOgorICAgIEtleWZyYW1lVmFsdWUoKSA6IGtleSgtMSkgeyB9CisgICAgZmxvYXQg
a2V5OworICAgIFJlbmRlclN0eWxlIHN0eWxlOworfTsKKworY2xhc3MgS2V5ZnJhbWVMaXN0IDog
cHVibGljIFJlZkNvdW50ZWQ8S2V5ZnJhbWVMaXN0PiB7CitwdWJsaWM6CisgICAgS2V5ZnJhbWVM
aXN0KGNvbnN0IEF0b21pY1N0cmluZyYgaW5BbmltTmFtZSkKKyAgICA6IG1fYW5pbWF0aW9uTmFt
ZShpbkFuaW1OYW1lKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KDAsIFJlbmRlclN0eWxlKCkpOyBp
bnNlcnQoMSwgUmVuZGVyU3R5bGUoKSk7CisgICAgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXlm
cmFtZUxpc3QmIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KKyAgICAKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmICAgIGFuaW1hdGlvbk5hbWUoKSBjb25zdCAgICAgICAgeyByZXR1
cm4gbV9hbmltYXRpb25OYW1lOyB9CisgICAgCisgICAgdm9pZCBpbnNlcnQoZmxvYXQgaW5LZXks
IGNvbnN0IFJlbmRlclN0eWxlJiBpblN0eWxlKTsKKyAgICAKKyAgICB2b2lkIGFkZFByb3BlcnR5
KGludCBwcm9wKSB7IG1fcHJvcGVydGllcy5hZGQocHJvcCk7IH0KKyAgICBib29sIGNvbnRhaW5z
UHJvcGVydHkoaW50IHByb3ApIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGllcy5jb250YWlucyhw
cm9wKTsgfQorICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5Qcm9wZXJ0aWVz
KCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IH0KKyAgICBIYXNoU2V0PGludD46OmNv
bnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMoKSB7IHJldHVybiBtX3Byb3BlcnRpZXMuZW5kKCk7
IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVhcigpOyBtX3Byb3Bl
cnRpZXMuY2xlYXIoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
ZnJhbWVzLmlzRW1wdHkoKTsgfQorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRl
cmF0b3IgYmVnaW5LZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5iZWdpbigp
OyB9CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBlbmRLZXlmcmFt
ZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5lbmQoKTsgfQorICAgIAorcHJvdGVjdGVk
OgorICAgIEF0b21pY1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgVmVjdG9yPEtleWZyYW1l
VmFsdWU+IG1fa2V5ZnJhbWVzOworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3BlcnRpZXM7ICAgICAg
IC8vIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCit9OworICAgIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAko
cmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBACiAgICAgLy8gU28gdGhlIGNvZGUgYmVsb3cg
aW5jbHVkZXMgY29waWVkIGFuZCBwYXN0ZWQgY29udGVudHMgb2YKICAgICAvLyBib3RoIFJlbmRl
ckJveDo6ZGVzdHJveSgpIGFuZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKS4KICAgICAvLyBGaXgg
b3JpZ2luYWxseSBtYWRlIGZvciA8cmRhcjovL3Byb2JsZW0vNDIyODgxOD4uCi0gICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLT5jYW5jZWxJbXBsaWNpdEFuaW1hdGlvbnModGhpcyk7CisgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLT5jYW5jZWxBbmltYXRpb25zKHRoaXMpOwogCiAgICAgaWYgKFJl
bmRlclZpZXcqIHYgPSB2aWV3KCkpCiAgICAgICAgIHYtPnJlbW92ZVdpZGdldCh0aGlzKTsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw2ICs0MSwx
MyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBjb21wYXJlIGZsb2F0aW5nIHBvaW50cywg
dGFraW5nIG5hbiBpbnRvIGFjY291bnQKK3N0YXRpYyBpbmxpbmUgYm9vbCBmbG9hdGluZ1BvaW50
VmFsdWVzRXF1YWwoZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gKGlzbmFuKGEpICYm
IGlzbmFuKGIpKSB8fCAoYSA9PSBiKTsKK30KKyAgICAKKyAgICAKIGJvb2wgTmluZVBpZWNlSW1h
Z2U6Om9wZXJhdG9yPT0oY29uc3QgTmluZVBpZWNlSW1hZ2UmIG8pIGNvbnN0CiB7CiAgICAgcmV0
dXJuIGltYWdlc0VxdWl2YWxlbnQobV9pbWFnZS5nZXQoKSwgby5tX2ltYWdlLmdldCgpKSAmJiBt
X3NsaWNlcyA9PSBvLm1fc2xpY2VzICYmIG1faG9yaXpvbnRhbFJ1bGUgPT0gby5tX2hvcml6b250
YWxSdWxlICYmCkBAIC02MTMsMTIgKzYyMCwxNCBAQAogICAgICAgICByZXR1cm4gdGhpczsKICAg
ICAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAgICAgICByZXR1cm4gbmV3IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24obV9hbmdsZVggLSBtX2FuZ2xlWCAqIHByb2dyZXNzLCBtX2FuZ2xlWSAt
IG1fYW5nbGVZICogcHJvZ3Jlc3MpOworICAgICAgICByZXR1cm4gbmV3IFNrZXdUcmFuc2Zvcm1P
cGVyYXRpb24obV9hbmdsZVggLSBtX2FuZ2xlWCAqIHByb2dyZXNzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmdsZVkgLSBtX2FuZ2xlWSAqIHByb2dyZXNz
KTsKICAgICAKICAgICBjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tT3AgPSBzdGF0
aWNfY2FzdDxjb25zdCBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7CiAgICAgZG91Ymxl
IGZyb21BbmdsZVggPSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVYIDogMDsKICAgICBkb3VibGUg
ZnJvbUFuZ2xlWSA9IGZyb21PcCA/IGZyb21PcC0+bV9hbmdsZVkgOiAwOwotICAgIHJldHVybiBu
ZXcgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihmcm9tQW5nbGVYICsgKG1fYW5nbGVYIC0gZnJvbUFu
Z2xlWCkgKiBwcm9ncmVzcywgZnJvbUFuZ2xlWSArIChtX2FuZ2xlWSAtIGZyb21BbmdsZVkpICog
cHJvZ3Jlc3MpOworICAgIHJldHVybiBuZXcgU2tld1RyYW5zZm9ybU9wZXJhdGlvbihmcm9tQW5n
bGVYICsgKG1fYW5nbGVYIC0gZnJvbUFuZ2xlWCkgKiBwcm9ncmVzcywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUFuZ2xlWSArIChtX2FuZ2xlWSAtIGZyb21Bbmds
ZVkpICogcHJvZ3Jlc3MpOwogfQogCiBUcmFuc2Zvcm1PcGVyYXRpb24qIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbjo6YmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5KQpAQCAtNjQwLDEzNyArNjQ5LDIyMiBA
QAogICAgIGlmIChmcm9tICYmICFmcm9tLT5pc01hdHJpeE9wZXJhdGlvbigpKQogICAgICAgICBy
ZXR1cm4gdGhpczsKICAgICAKKyAgICAvLyAKICAgICBpZiAoYmxlbmRUb0lkZW50aXR5KQotICAg
ICAgICByZXR1cm4gbmV3IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihtX2EgKiAoMS4gLSBwcm9n
cmVzcykgKyBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9iICogKDEuIC0gcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2MgKiAoMS4gLSBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZCAqICgxLiAtIHByb2dyZXNzKSArIHByb2dy
ZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2UgKiAo
MS4gLSBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZiAqICgxLiAtIHByb2dyZXNzKSk7Ci0KKyAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb24oKGZsb2F0KSAobV9tYXRyaXguYSgpICogKDEuIC0gcHJvZ3Jlc3Mp
ICsgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoZmxvYXQpIChtX21hdHJpeC5iKCkgKiAoMS4gLSBwcm9ncmVzcykpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIChtX21hdHJpeC5jKCkgKiAo
MS4gLSBwcm9ncmVzcykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoZmxvYXQpIChtX21hdHJpeC5kKCkgKiAoMS4gLSBwcm9ncmVzcykgKyBwcm9ncmVzcyks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKG1f
bWF0cml4LmUoKSAqICgxLiAtIHByb2dyZXNzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKG1fbWF0cml4LmYoKSAqICgxLiAtIHByb2dyZXNz
KSkpOworICAgIAogICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0g
c3RhdGljX2Nhc3Q8Y29uc3QgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKj4oZnJvbSk7Ci0gICAg
ZG91YmxlIGZyb21BID0gZnJvbU9wID8gZnJvbU9wLT5tX2EgOiAxLjsKLSAgICBkb3VibGUgZnJv
bUIgPSBmcm9tT3AgPyBmcm9tT3AtPm1fYiA6IDA7Ci0gICAgZG91YmxlIGZyb21DID0gZnJvbU9w
ID8gZnJvbU9wLT5tX2MgOiAwOwotICAgIGRvdWJsZSBmcm9tRCA9IGZyb21PcCA/IGZyb21PcC0+
bV9kIDogMS47Ci0gICAgZG91YmxlIGZyb21FID0gZnJvbU9wID8gZnJvbU9wLT5tX2UgOiAwOwot
ICAgIGRvdWJsZSBmcm9tRiA9IGZyb21PcCA/IGZyb21PcC0+bV9mIDogMDsKKyAgICBkb3VibGUg
ZnJvbUEgPSBmcm9tT3AgPyBmcm9tT3AtPm1fbWF0cml4LmEoKSA6IDEuOworICAgIGRvdWJsZSBm
cm9tQiA9IGZyb21PcCA/IGZyb21PcC0+bV9tYXRyaXguYigpIDogMDsKKyAgICBkb3VibGUgZnJv
bUMgPSBmcm9tT3AgPyBmcm9tT3AtPm1fbWF0cml4LmMoKSA6IDA7CisgICAgZG91YmxlIGZyb21E
ID0gZnJvbU9wID8gZnJvbU9wLT5tX21hdHJpeC5kKCkgOiAxLjsKKyAgICBkb3VibGUgZnJvbUUg
PSBmcm9tT3AgPyBmcm9tT3AtPm1fbWF0cml4LmUoKSA6IDA7CisgICAgZG91YmxlIGZyb21GID0g
ZnJvbU9wID8gZnJvbU9wLT5tX21hdHJpeC5mKCkgOiAwOwogICAgIAotICAgIHJldHVybiBuZXcg
TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKGZyb21BICsgKG1fYSAtIGZyb21BKSAqIHByb2dyZXNz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21CICsgKG1fYiAt
IGZyb21CKSAqIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZyb21DICsgKG1fYyAtIGZyb21DKSAqIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZyb21EICsgKG1fZCAtIGZyb21EKSAqIHByb2dyZXNzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FICsgKG1fZSAtIGZy
b21FKSAqIHByb2dyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZyb21GICsgKG1fZiAtIGZyb21GKSAqIHByb2dyZXNzKTsKKyAgICByZXR1cm4gbmV3IE1hdHJp
eFRyYW5zZm9ybU9wZXJhdGlvbigoZmxvYXQpIChmcm9tQSArIChtX21hdHJpeC5hKCkgLSBmcm9t
QSkgKiBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZsb2F0KSAoZnJvbUIgKyAobV9tYXRyaXguYigpIC0gZnJvbUIpICogcHJvZ3Jlc3MpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZyb21DICsgKG1f
bWF0cml4LmMoKSAtIGZyb21DKSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZmxvYXQpIChmcm9tRCArIChtX21hdHJpeC5kKCkgLSBmcm9tRCkg
KiBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZs
b2F0KSAoZnJvbUUgKyAobV9tYXRyaXguZSgpIC0gZnJvbUUpICogcHJvZ3Jlc3MpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZyb21GICsgKG1fbWF0
cml4LmYoKSAtIGZyb21GKSAqIHByb2dyZXNzKSk7CiB9CiAKLVRyYW5zaXRpb246OlRyYW5zaXRp
b24oKQotICAgIDogbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRpb25EdXJh
dGlvbigpKQotICAgICwgbV9yZXBlYXRDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRyYW5zaXRp
b25SZXBlYXRDb3VudCgpKQotICAgICwgbV90aW1pbmdGdW5jdGlvbihSZW5kZXJTdHlsZTo6aW5p
dGlhbFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpKQotICAgICwgbV9wcm9wZXJ0eShSZW5kZXJT
dHlsZTo6aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKQotICAgICwgbV9kdXJhdGlvblNldChm
YWxzZSkKLSAgICAsIG1fcmVwZWF0Q291bnRTZXQoZmFsc2UpCi0gICAgLCBtX3RpbWluZ0Z1bmN0
aW9uU2V0KGZhbHNlKQotICAgICwgbV9wcm9wZXJ0eVNldChmYWxzZSkKLSAgICAsIG1fbmV4dCgw
KQorVHJhbnNmb3JtT3BlcmF0aW9uKiBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjo6YmxlbmQo
Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxl
bmRUb0lkZW50aXR5KQogeworICAgIC8vIFRPRE86IENGTSAtIExldCdzIG5vdCB3b3JyeSBhYm91
dCBkaXJlY3QgYmxlbmQgb2YgM0QgbWF0cmljZXMganVzdCB5ZXQKKyAgICByZXR1cm4gMDsKIH0K
KyAgICAKKyAgICAKKyNwcmFnbWEgIG1hcmsgLQorICAgIAorYm9vbCBLZXlmcmFtZUxpc3Q6Om9w
ZXJhdG9yPT0oY29uc3QgS2V5ZnJhbWVMaXN0JiBvKSBjb25zdAoreworICAgIGlmIChtX2tleWZy
YW1lcy5zaXplKCkgIT0gby5tX2tleWZyYW1lcy5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT46OmNvbnN0X2l0ZXJhdG9yIGl0MiA9
IG8ubV9rZXlmcmFtZXMuYmVnaW4oKTsgICAgCisgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVWYWx1
ZT46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9IG1fa2V5ZnJhbWVzLmJlZ2luKCk7IGl0MSAhPSBtX2tl
eWZyYW1lcy5lbmQoKTsgKytpdDEpIHsKKyAgICAgICAgaWYgKGl0MS0+a2V5ICE9IGl0Mi0+a2V5
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUxID0gaXQxLT5zdHlsZTsKKyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlMiA9
IGl0Mi0+c3R5bGU7CisgICAgICAgIGlmICghKHN0eWxlMSA9PSBzdHlsZTIpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICArK2l0MjsKKyAgICB9CisgICAgCisgICAgcmV0dXJu
IHRydWU7Cit9CiAKLVRyYW5zaXRpb246OlRyYW5zaXRpb24oY29uc3QgVHJhbnNpdGlvbiYgbykK
LSAgICA6IG1fZHVyYXRpb24oby5tX2R1cmF0aW9uKQotICAgICwgbV9yZXBlYXRDb3VudChvLm1f
cmVwZWF0Q291bnQpCi0gICAgLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikK
LSAgICAsIG1fcHJvcGVydHkoby5tX3Byb3BlcnR5KQotICAgICwgbV9kdXJhdGlvblNldChvLm1f
ZHVyYXRpb25TZXQpCi0gICAgLCBtX3JlcGVhdENvdW50U2V0KG8ubV9yZXBlYXRDb3VudFNldCkK
LSAgICAsIG1fdGltaW5nRnVuY3Rpb25TZXQoby5tX3RpbWluZ0Z1bmN0aW9uU2V0KQotICAgICwg
bV9wcm9wZXJ0eVNldChvLm1fcHJvcGVydHlTZXQpCi0gICAgLCBtX25leHQoby5tX25leHQgPyBu
ZXcgVHJhbnNpdGlvbigqby5tX25leHQpIDogMCkKK3ZvaWQKK0tleWZyYW1lTGlzdDo6aW5zZXJ0
KGZsb2F0IGluS2V5LCBjb25zdCBSZW5kZXJTdHlsZSYgaW5TdHlsZSkKIHsKKyAgICBpZiAoaW5L
ZXkgPCAwIHx8IGluS2V5ID4gMSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9rZXlmcmFtZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1f
a2V5ZnJhbWVzW2ldLmtleSA9PSBpbktleSkgeworICAgICAgICAgICAgbV9rZXlmcmFtZXNbaV0u
c3R5bGUgPSBpblN0eWxlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChtX2tleWZyYW1lc1tpXS5rZXkgPiBpbktleSkgeworICAgICAgICAgICAgLy8gaW5zZXJ0
IGJlZm9yZQorICAgICAgICAgICAgbV9rZXlmcmFtZXMuaW5zZXJ0KGksIEtleWZyYW1lVmFsdWUo
KSk7CisgICAgICAgICAgICBtX2tleWZyYW1lc1tpXS5rZXkgPSBpbktleTsKKyAgICAgICAgICAg
IG1fa2V5ZnJhbWVzW2ldLnN0eWxlID0gaW5TdHlsZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBhcHBlbmQKKyAgICBtX2tleWZyYW1lcy5hcHBl
bmQoS2V5ZnJhbWVWYWx1ZSgpKTsKKyAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkt
MV0ua2V5ID0gaW5LZXk7CisgICAgbV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpLTFdLnN0
eWxlID0gaW5TdHlsZTsKIH0KKyAgICAKKyAgICAKK1RyYW5zaXRpb246OlRyYW5zaXRpb24oKQor
OiBtX2RpcmVjdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkRpcmVjdGlvbigpKQor
LCBtX2R1cmF0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsRHVyYXRpb24oKSkKKywgbV9uYW1lKFJl
bmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpKQorLCBtX3BsYXlTdGF0ZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFuaW1hdGlvblBsYXlTdGF0ZSgpKQorLCBtX2l0ZXJhdGlvbkNvdW50KFJl
bmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSkKKywgbV90aW1pbmdG
dW5jdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkpCissIG1fZGVsYXko
UmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKQorLCBtX3Byb3BlcnR5KFJlbmRlclN0eWxlOjpp
bml0aWFsVHJhbnNpdGlvblByb3BlcnR5KCkpCissIG1fZGlyZWN0aW9uU2V0KGZhbHNlKQorLCBt
X2R1cmF0aW9uU2V0KGZhbHNlKQorLCBtX25hbWVTZXQoZmFsc2UpCissIG1fcGxheVN0YXRlU2V0
KGZhbHNlKQorLCBtX2l0ZXJhdGlvbkNvdW50U2V0KGZhbHNlKQorLCBtX3RpbWluZ0Z1bmN0aW9u
U2V0KGZhbHNlKQorLCBtX2RlbGF5U2V0KGZhbHNlKQorLCBtX3Byb3BlcnR5U2V0KGZhbHNlKQor
LCBtX2lzTm9uZShmYWxzZSkKKywgbV9uZXh0KDApCit7Cit9CiAKLVRyYW5zaXRpb246On5UcmFu
c2l0aW9uKCkKK1RyYW5zaXRpb246OlRyYW5zaXRpb24oY29uc3QgVHJhbnNpdGlvbiYgbykKKzog
UmVmQ291bnRlZDxUcmFuc2l0aW9uPigpCissIG1fZGlyZWN0aW9uKG8ubV9kaXJlY3Rpb24pCiss
IG1fZHVyYXRpb24oby5tX2R1cmF0aW9uKQorLCBtX25hbWUoby5tX25hbWUpCissIG1fcGxheVN0
YXRlKG8ubV9wbGF5U3RhdGUpCissIG1faXRlcmF0aW9uQ291bnQoby5tX2l0ZXJhdGlvbkNvdW50
KQorLCBtX3RpbWluZ0Z1bmN0aW9uKG8ubV90aW1pbmdGdW5jdGlvbikKKywgbV9kZWxheShvLm1f
ZGVsYXkpCissIG1fcHJvcGVydHkoby5tX3Byb3BlcnR5KQorLCBtX2tleWZyYW1lTGlzdChvLm1f
a2V5ZnJhbWVMaXN0KQorLCBtX2RpcmVjdGlvblNldChvLm1fZGlyZWN0aW9uU2V0KQorLCBtX2R1
cmF0aW9uU2V0KG8ubV9kdXJhdGlvblNldCkKKywgbV9uYW1lU2V0KG8ubV9uYW1lU2V0KQorLCBt
X3BsYXlTdGF0ZVNldChvLm1fcGxheVN0YXRlU2V0KQorLCBtX2l0ZXJhdGlvbkNvdW50U2V0KG8u
bV9pdGVyYXRpb25Db3VudFNldCkKKywgbV90aW1pbmdGdW5jdGlvblNldChvLm1fdGltaW5nRnVu
Y3Rpb25TZXQpCissIG1fZGVsYXlTZXQoby5tX2RlbGF5U2V0KQorLCBtX3Byb3BlcnR5U2V0KG8u
bV9wcm9wZXJ0eVNldCkKKywgbV9pc05vbmUoby5tX2lzTm9uZSkKKywgbV9uZXh0KG8ubV9uZXh0
ID8gbmV3IFRyYW5zaXRpb24oKihvLm1fbmV4dC5nZXQoKSkpIDogMCkKIHsKLSAgICBkZWxldGUg
bV9uZXh0OwogfQogCiBUcmFuc2l0aW9uJiBUcmFuc2l0aW9uOjpvcGVyYXRvcj0oY29uc3QgVHJh
bnNpdGlvbiYgbykKIHsKLSAgICBpZiAobV9uZXh0ICE9IG8ubV9uZXh0KSB7Ci0gICAgICAgIGRl
bGV0ZSBtX25leHQ7CisgICAgaWYgKG1fbmV4dCAhPSBvLm1fbmV4dCkKICAgICAgICAgbV9uZXh0
ID0gby5tX25leHQgPyBuZXcgVHJhbnNpdGlvbigqby5tX25leHQpIDogMDsKLSAgICB9Ci0KKyAg
ICAKKyAgICBtX2RpcmVjdGlvbiA9IG8ubV9kaXJlY3Rpb247CiAgICAgbV9kdXJhdGlvbiA9IG8u
bV9kdXJhdGlvbjsKLSAgICBtX3JlcGVhdENvdW50ID0gby5tX3JlcGVhdENvdW50OworICAgIG1f
bmFtZSA9IG8ubV9uYW1lOworICAgIG1fcGxheVN0YXRlID0gby5tX3BsYXlTdGF0ZTsKKyAgICBt
X2l0ZXJhdGlvbkNvdW50ID0gby5tX2l0ZXJhdGlvbkNvdW50OwogICAgIG1fdGltaW5nRnVuY3Rp
b24gPSBvLm1fdGltaW5nRnVuY3Rpb247CisgICAgbV9kZWxheSA9IG8ubV9kZWxheTsKICAgICBt
X3Byb3BlcnR5ID0gby5tX3Byb3BlcnR5OwotCisgICAgCisgICAgbV9kaXJlY3Rpb25TZXQgPSBv
Lm1fZGlyZWN0aW9uU2V0OwogICAgIG1fZHVyYXRpb25TZXQgPSBvLm1fZHVyYXRpb25TZXQ7Ci0g
ICAgbV9yZXBlYXRDb3VudFNldCA9IG8ubV9yZXBlYXRDb3VudFNldDsKKyAgICBtX25hbWVTZXQg
PSBvLm1fbmFtZVNldDsKKyAgICBtX3BsYXlTdGF0ZVNldCA9IG8ubV9wbGF5U3RhdGVTZXQ7Cisg
ICAgbV9pdGVyYXRpb25Db3VudFNldCA9IG8ubV9pdGVyYXRpb25Db3VudFNldDsKICAgICBtX3Rp
bWluZ0Z1bmN0aW9uU2V0ID0gby5tX3RpbWluZ0Z1bmN0aW9uU2V0OworICAgIG1fZGVsYXlTZXQg
PSBvLm1fZGVsYXlTZXQ7CiAgICAgbV9wcm9wZXJ0eVNldCA9IG8ubV9wcm9wZXJ0eVNldDsKLQor
ICAgIAorICAgIG1faXNOb25lID0gby5tX2lzTm9uZTsKKyAgICAKICAgICByZXR1cm4gKnRoaXM7
CiB9CiAKLWJvb2wgVHJhbnNpdGlvbjo6b3BlcmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBj
b25zdAorYm9vbCBUcmFuc2l0aW9uOjp0cmFuc2l0aW9uc01hdGNoKGNvbnN0IFRyYW5zaXRpb24q
IG8sIGJvb2wgbWF0Y2hQbGF5U3RhdGVzIC8qID0gdHJ1ZSAqLykgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kdXJhdGlvbiA9PSBvLm1fZHVyYXRpb24gJiYgbV9yZXBlYXRDb3VudCA9PSBvLm1fcmVw
ZWF0Q291bnQgJiYgbV90aW1pbmdGdW5jdGlvbiA9PSBvLm1fdGltaW5nRnVuY3Rpb24gJiYKLSAg
ICAgICAgICAgbV9wcm9wZXJ0eSA9PSBvLm1fcHJvcGVydHkgJiYgbV9kdXJhdGlvblNldCA9PSBv
Lm1fZHVyYXRpb25TZXQgJiYgbV9yZXBlYXRDb3VudFNldCA9PSBvLm1fcmVwZWF0Q291bnRTZXQg
JiYKLSAgICAgICAgICAgbV90aW1pbmdGdW5jdGlvblNldCA9PSBvLm1fdGltaW5nRnVuY3Rpb25T
ZXQgJiYgbV9wcm9wZXJ0eVNldCA9PSBvLm1fcHJvcGVydHlTZXQgJiYKLSAgICAgICAgICAgKCht
X25leHQgJiYgby5tX25leHQpID8gKm1fbmV4dCA9PSAqby5tX25leHQgOiBtX25leHQgPT0gby5t
X25leHQpOworICAgIGlmICghbykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGJv
b2wgcmVzdWx0ID0gbV9kaXJlY3Rpb24gPT0gby0+bV9kaXJlY3Rpb24gJiYKKyAgICBtX2R1cmF0
aW9uID09IG8tPm1fZHVyYXRpb24gJiYKKyAgICBtX25hbWUgPT0gby0+bV9uYW1lICYmIAorICAg
IG1faXRlcmF0aW9uQ291bnQgPT0gby0+bV9pdGVyYXRpb25Db3VudCAmJiAKKyAgICBtX3RpbWlu
Z0Z1bmN0aW9uID09IG8tPm1fdGltaW5nRnVuY3Rpb24gJiYKKyAgICBtX2RlbGF5ID09IG8tPm1f
ZGVsYXkgJiYKKyAgICBtX3Byb3BlcnR5ID09IG8tPm1fcHJvcGVydHkgJiYgCisgICAgbV9kaXJl
Y3Rpb25TZXQgPT0gby0+bV9kaXJlY3Rpb25TZXQgJiYKKyAgICBtX2R1cmF0aW9uU2V0ID09IG8t
Pm1fZHVyYXRpb25TZXQgJiYgCisgICAgbV9uYW1lU2V0ID09IG8tPm1fbmFtZVNldCAmJgorICAg
IG1faXRlcmF0aW9uQ291bnRTZXQgPT0gby0+bV9pdGVyYXRpb25Db3VudFNldCAmJgorICAgIG1f
dGltaW5nRnVuY3Rpb25TZXQgPT0gby0+bV90aW1pbmdGdW5jdGlvblNldCAmJiAKKyAgICBtX2Rl
bGF5U2V0ID09IG8tPm1fZGVsYXlTZXQgJiYKKyAgICBtX3Byb3BlcnR5U2V0ID09IG8tPm1fcHJv
cGVydHlTZXQgJiYKKyAgICBtX2lzTm9uZSA9PSBvLT5tX2lzTm9uZTsKKyAgICAKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmIChtYXRjaFBsYXlT
dGF0ZXMgJiYgKG1fcGxheVN0YXRlICE9IG8tPm1fcGxheVN0YXRlIHx8IG1fcGxheVN0YXRlU2V0
ICE9IG8tPm1fcGxheVN0YXRlU2V0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IC8vIG5vdyBjaGVjayBrZXlmcmFtZXMKKyAgICBpZiAoKG1fa2V5ZnJhbWVMaXN0LmdldCgpICYm
ICFvLT5tX2tleWZyYW1lTGlzdC5nZXQoKSkgfHwgKCFtX2tleWZyYW1lTGlzdC5nZXQoKSAmJiBv
LT5tX2tleWZyYW1lTGlzdC5nZXQoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IShtX2tleWZyYW1lTGlzdC5nZXQoKSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biAqbV9rZXlmcmFtZUxpc3QgPT0gKm8tPm1fa2V5ZnJhbWVMaXN0OwogfQogCisjZGVmaW5lIEZJ
TExfVU5TRVRfUFJPUEVSVFkodGVzdCwgcHJvcCkgXAorZm9yIChjdXJyID0gdGhpczsgY3VyciAm
JiBjdXJyLT50ZXN0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfSBcCitpZiAoY3VyciAmJiBj
dXJyICE9IHRoaXMpIHsgXAorLyogV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFs
dWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLiAqLyBcCitmb3IgKFRyYW5zaXRpb24qIHBh
dHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IFwKK2N1cnItPnByb3Ag
PSBwYXR0ZXJuLT5wcm9wOyBcCitwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOyBcCitpZiAocGF0
dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKSBcCitwYXR0ZXJuID0gdGhpczsgXAorfSBcCit9CisK
IHZvaWQgVHJhbnNpdGlvbjo6ZmlsbFVuc2V0UHJvcGVydGllcygpCiB7CiAgICAgVHJhbnNpdGlv
biogY3VycjsKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzRHVyYXRpb25T
ZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYgY3VyciAhPSB0
aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5nIHZhbHVl
cyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBw
YXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAgICAgICAg
Y3Vyci0+bV9kdXJhdGlvbiA9IHBhdHRlcm4tPm1fZHVyYXRpb247Ci0gICAgICAgICAgICBwYXR0
ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8
fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQot
ICAgIH0KKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzQW5pbWF0aW9uRGlyZWN0aW9uU2V0LCBt
X2RpcmVjdGlvbik7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0R1cmF0aW9uU2V0LCBtX2R1
cmF0aW9uKTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZKGlzQW5pbWF0aW9uUGxheVN0YXRlU2V0
LCBtX3BsYXlTdGF0ZSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0FuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50U2V0LCBtX2l0ZXJhdGlvbkNvdW50KTsKKyAgICBGSUxMX1VOU0VUX1BST1BFUlRZ
KGlzVGltaW5nRnVuY3Rpb25TZXQsIG1fdGltaW5nRnVuY3Rpb24pOworICAgIEZJTExfVU5TRVRf
UFJPUEVSVFkoaXNEZWxheVNldCwgbV9kZWxheSk7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShp
c1RyYW5zaXRpb25Qcm9wZXJ0eVNldCwgbV9wcm9wZXJ0eSk7Cit9CisKKyNwcmFnbWEgIG1hcmsg
LQogICAgIAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNSZXBlYXRDb3Vu
dFNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9
IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFs
dWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24q
IHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAg
ICBjdXJyLT5tX3JlcGVhdENvdW50ID0gcGF0dGVybi0+bV9yZXBlYXRDb3VudDsKLSAgICAgICAg
ICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAgICAgICAgICBpZiAocGF0dGVybiA9
PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAgIHBhdHRlcm4gPSB0aGlzOwotICAg
ICAgICB9Ci0gICAgfQogICAgIAotICAgIGZvciAoY3VyciA9IHRoaXM7IGN1cnIgJiYgY3Vyci0+
aXNUaW1pbmdGdW5jdGlvblNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0KLSAgICBpZiAo
Y3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIGluIHRo
ZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lmaWVkLgotICAgICAgICBm
b3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dCgp
KSB7Ci0gICAgICAgICAgICBjdXJyLT5tX3RpbWluZ0Z1bmN0aW9uID0gcGF0dGVybi0+bV90aW1p
bmdGdW5jdGlvbjsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0gICAg
ICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAgICAg
IHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgZm9yIChjdXJyID0gdGhp
czsgY3VyciAmJiBjdXJyLT5pc1Byb3BlcnR5U2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsg
fQotICAgIGlmIChjdXJyICYmIGN1cnIgIT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRv
IGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQu
Ci0gICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGN1cnItPm1fcHJvcGVydHkgPSBwYXR0ZXJuLT5t
X3Byb3BlcnR5OwotICAgICAgICAgICAgcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAg
ICAgICAgIGlmIChwYXR0ZXJuID09IGN1cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAg
cGF0dGVybiA9IHRoaXM7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KIFN0eWxlUmFyZU5vbkluaGVy
aXRlZERhdGE6OlN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEoKQogICAgIDogbGluZUNsYW1wKFJl
bmRlclN0eWxlOjppbml0aWFsTGluZUNsYW1wKCkpCiAgICAgLCBvcGFjaXR5KFJlbmRlclN0eWxl
Ojppbml0aWFsT3BhY2l0eSgpKQpAQCAtNzg1LDYgKzg3OSw3IEBACiAgICAgLCBtX2JvcmRlckZp
dChSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlckZpdCgpKQogICAgICwgbV9ib3hTaGFkb3coMCkK
ICAgICAsIG1fdHJhbnNpdGlvbigwKQorICAgICwgbV9hbmltYXRpb24oMCkKICAgICAsIG1fbWFz
ayhGaWxsTGF5ZXIoTWFza0ZpbGxMYXllcikpCiAjaWYgRU5BQkxFKFhCTCkKICAgICAsIGJpbmRp
bmdVUkkoMCkKQEAgLTgxMiw2ICs5MDcsNyBAQAogICAgICwgbV9ib3hTaGFkb3coby5tX2JveFNo
YWRvdyA/IG5ldyBTaGFkb3dEYXRhKCpvLm1fYm94U2hhZG93KSA6IDApCiAgICAgLCBtX2JveFJl
ZmxlY3Qoby5tX2JveFJlZmxlY3QpCiAgICAgLCBtX3RyYW5zaXRpb24oby5tX3RyYW5zaXRpb24g
PyBuZXcgVHJhbnNpdGlvbigqby5tX3RyYW5zaXRpb24pIDogMCkKKyAgICAsIG1fYW5pbWF0aW9u
KG8ubV9hbmltYXRpb24gPyBuZXcgVHJhbnNpdGlvbigqby5tX2FuaW1hdGlvbikgOiAwKQogICAg
ICwgbV9tYXNrKG8ubV9tYXNrKQogI2lmIEVOQUJMRShYQkwpCiAgICAgLCBiaW5kaW5nVVJJKG8u
YmluZGluZ1VSSSA/IG8uYmluZGluZ1VSSS0+Y29weSgpIDogMCkKQEAgLTgyNCw3ICs5MjAsNiBA
QAogICAgIGRlbGV0ZSBtX2NvbnRlbnQ7CiAgICAgZGVsZXRlIG1fY291bnRlckRpcmVjdGl2ZXM7
CiAgICAgZGVsZXRlIG1fYm94U2hhZG93OwotICAgIGRlbGV0ZSBtX3RyYW5zaXRpb247CiAjaWYg
RU5BQkxFKFhCTCkKICAgICBkZWxldGUgYmluZGluZ1VSSTsKICNlbmRpZgpAQCAtODY1LDYgKzk2
MCw3IEBACiAgICAgICAgICYmIHNoYWRvd0RhdGFFcXVpdmFsZW50KG8pCiAgICAgICAgICYmIHJl
ZmxlY3Rpb25EYXRhRXF1aXZhbGVudChvKQogICAgICAgICAmJiB0cmFuc2l0aW9uRGF0YUVxdWl2
YWxlbnQobykKKyAgICAgICAgJiYgYW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQobykKICAgICAgICAg
JiYgbV9tYXNrID09IG8ubV9tYXNrCiAjaWYgRU5BQkxFKFhCTCkKICAgICAgICAgJiYgYmluZGlu
Z3NFcXVpdmFsZW50KG8pCkBAIC04OTIsNiArOTg4LDE5IEBACiAKIH0KIAordm9pZCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjp1cGRhdGVLZXlmcmFtZXMoY29uc3QgQ1NTU3R5bGVTZWxlY3Rv
ciogc3R5bGVTZWxlY3RvcikKK3sKKyAgICBUcmFuc2l0aW9uKiBhbmltOworICAgIGZvciAoYW5p
bSA9IG1fYW5pbWF0aW9uLmdldCgpOyBhbmltOyBhbmltID0gYW5pbS0+bmV4dCgpKSB7CisgICAg
ICAgIGlmIChhbmltLT5pc1ZhbGlkQW5pbWF0aW9uKCkpIHsKKyAgICAgICAgICAgIC8qIEZJWE1F
IGtleWZyYW1lcworICAgICAgICAgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4ga2V5ZnJhbWUgPSBz
dHlsZVNlbGVjdG9yLT5maW5kS2V5ZnJhbWVSdWxlKGFuaW0tPmFuaW1hdGlvbk5hbWUoKSk7Cisg
ICAgICAgICAgICBhbmltLT5zZXRBbmltYXRpb25LZXlmcmFtZShrZXlmcmFtZSk7CisgICAgICAg
ICAgICAgKi8KKyAgICAgICAgfQorICAgIH0gICAgICAgIAorfQorICAgIAogYm9vbCBTdHlsZVJh
cmVOb25Jbmhlcml0ZWREYXRhOjp0cmFuc2l0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKIHsKICAgICBpZiAoIW1fdHJhbnNpdGlvbiAm
JiBvLm1fdHJhbnNpdGlvbiB8fCBtX3RyYW5zaXRpb24gJiYgIW8ubV90cmFuc2l0aW9uKQpAQCAt
OTAxLDYgKzEwMTAsMTUgQEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhOjphbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdAoreworICAgIGlmICghbV9hbmltYXRpb24gJiYgby5t
X2FuaW1hdGlvbiB8fCBtX2FuaW1hdGlvbiAmJiAhby5tX2FuaW1hdGlvbikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChtX2FuaW1hdGlvbiAmJiBvLm1fYW5pbWF0aW9uICYmICgqbV9h
bmltYXRpb24gIT0gKm8ubV9hbmltYXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKIFN0eWxlUmFyZUluaGVyaXRlZERhdGE6OlN0eWxlUmFyZUluaGVy
aXRlZERhdGEoKQogICAgIDogdGV4dFN0cm9rZVdpZHRoKFJlbmRlclN0eWxlOjppbml0aWFsVGV4
dFN0cm9rZVdpZHRoKCkpCiAgICAgLCB0ZXh0U2hhZG93KDApCkBAIC0xNjk2LDcgKzE4MTQsNyBA
QAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJTdHlsZTo6YXBwbHlUcmFuc2Zvcm0oQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0Cit2
b2lkIFJlbmRlclN0eWxlOjphcHBseVRyYW5zZm9ybShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBj
b25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplLCBib29sIGNoZWNrQXBwbHlUcmFuc2Zvcm1Pcmln
aW4pIGNvbnN0CiB7CiAgICAgLy8gdHJhbnNmb3JtLW9yaWdpbiBicmFja2V0cyB0aGUgdHJhbnNm
b3JtIHdpdGggdHJhbnNsYXRlIG9wZXJhdGlvbnMuCiAgICAgLy8gT3B0aW1pemUgZm9yIHRoZSBj
YXNlIHdoZXJlIHRoZSBvbmx5IHRyYW5zZm9ybSBpcyBhIHRyYW5zbGF0aW9uLCBzaW5jZSB0aGUg
dHJhbnNmb3JtLW9yaWdpbiBpcyBpcnJlbGV2YW50CkBAIC0xNzA0LDEwICsxODIyLDEyIEBACiAg
ICAgYm9vbCBhcHBseVRyYW5zZm9ybU9yaWdpbiA9IGZhbHNlOwogICAgIHVuc2lnbmVkIHMgPSBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0tPm1fb3BlcmF0aW9ucy5zaXplKCk7CiAg
ICAgdW5zaWduZWQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlm
ICghcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX29wZXJhdGlvbnNbaV0tPmlz
VHJhbnNsYXRlT3BlcmF0aW9uKCkpIHsKLSAgICAgICAgICAgIGFwcGx5VHJhbnNmb3JtT3JpZ2lu
ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIGlmIChjaGVja0FwcGx5VHJhbnNmb3Jt
T3JpZ2luKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzOyBpKyspIHsKKyAgICAgICAgICAg
IGlmICghcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5tX29wZXJhdGlvbnNbaV0t
PmlzVHJhbnNsYXRlT3BlcmF0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBhcHBseVRyYW5zZm9y
bU9yaWdpbiA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCkBAIC0xODY5LDMyICsxOTg5LDEwMyBAQAogdm9pZCBSZW5k
ZXJTdHlsZTo6YWRqdXN0VHJhbnNpdGlvbnMoKQogewogICAgIGlmICh0cmFuc2l0aW9ucygpKSB7
Ci0gICAgICAgIGlmICh0cmFuc2l0aW9ucygpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKHRy
YW5zaXRpb25zKCktPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CiAgICAgICAgICAgICBjbGVh
clRyYW5zaXRpb25zKCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLQorICAgICAg
ICAKICAgICAgICAgVHJhbnNpdGlvbiogbmV4dDsKICAgICAgICAgZm9yIChUcmFuc2l0aW9uKiBw
ID0gYWNjZXNzVHJhbnNpdGlvbnMoKTsgcDsgcCA9IG5leHQpIHsKLSAgICAgICAgICAgIG5leHQg
PSBwLT5tX25leHQ7CisgICAgICAgICAgICBuZXh0ID0gcC0+bmV4dCgpOwogICAgICAgICAgICAg
aWYgKG5leHQgJiYgbmV4dC0+aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgZGVsZXRlIG5l
eHQ7Ci0gICAgICAgICAgICAgICAgcC0+bV9uZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBwLT5z
ZXROZXh0KDApOyAvLyByZW1vdmVzIHRoZSByZWYsIHNvIG5leHQgZ2V0cyBkZWxldGVkCisgICAg
ICAgICAgICAgICAgbmV4dCA9IDA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KLSAgICAKKyAgICAgICAgCisgICAgICAgIGlmICghdHJhbnNpdGlvbnMo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgICAgIC8vIFJlcGVhdCBwYXR0
ZXJucyBpbnRvIGxheWVycyB0aGF0IGRvbid0IGhhdmUgc29tZSBwcm9wZXJ0aWVzIHNldC4KICAg
ICAgICAgYWNjZXNzVHJhbnNpdGlvbnMoKS0+ZmlsbFVuc2V0UHJvcGVydGllcygpOworICAgICAg
ICAKKyAgICAgICAgLy8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBkdXBsaWNhdGUgcHJvcGVydGll
cy4gVGhpcyBpcyBhbiBPKG5eMikgYWxnb3JpdGhtCisgICAgICAgIC8vIGJ1dCB0aGUgbGlzdHMg
dGVuZCB0byBiZSB2ZXJ5IHNob3J0LCBzbyBpdCBpcyBwcm9iYWJseSBvaworICAgICAgICBUcmFu
c2l0aW9uKiBwcmV2aSA9IDA7CisgICAgICAgIGZvciAoVHJhbnNpdGlvbiogcGkgPSBhY2Nlc3NU
cmFuc2l0aW9ucygpOyBwaTsgKSB7CisgICAgICAgICAgICBUcmFuc2l0aW9uKiBuZXh0aSA9IHBp
LT5uZXh0KCk7CisgICAgICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBqID0gbmV4dGk7IHBqOyAp
IHsKKyAgICAgICAgICAgICAgICBpZiAocGktPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IHBqLT50
cmFuc2l0aW9uUHJvcGVydHkoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyB0b3NzIHBpCisg
ICAgICAgICAgICAgICAgICAgIHBpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByZXZpKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJldmktPnNldE5leHQocGkpOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gcGk7CisgICAgICAgICAgICAg
ICAgICAgIG5leHRpID0gcGktPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgcGogPSBuZXh0
aTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBwaiA9IHBqLT5uZXh0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmV2
aSA9IHBpOworICAgICAgICAgICAgcGkgPSBuZXh0aTsKKyAgICAgICAgfQogICAgIH0KIH0KKyAg
ICAKK3ZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdEFuaW1hdGlvbnMoKQoreworICAgIGlmIChhbmlt
YXRpb25zKCkpIHsKKyAgICAgICAgaWYgKGFuaW1hdGlvbnMoKS0+aXNFbXB0eU9yWmVyb0R1cmF0
aW9uKCkpIHsKKyAgICAgICAgICAgIGNsZWFyQW5pbWF0aW9ucygpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBnZXQgcmlkIG9mIGFueSB0cmFp
bGluZyBlbXB0eSBhbmltYXRpb25zCisgICAgICAgIFRyYW5zaXRpb24qIG5leHQ7CisgICAgICAg
IGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vzc0FuaW1hdGlvbnMoKTsgcDsgcCA9IG5leHQpIHsK
KyAgICAgICAgICAgIG5leHQgPSBwLT5uZXh0KCk7CisgICAgICAgICAgICBpZiAobmV4dCAmJiBu
ZXh0LT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBwLT5zZXROZXh0KDApOyAvLyByZW1v
dmVzIHRoZSByZWYsIHNvIG5leHQgZ2V0cyBkZWxldGVkCisgICAgICAgICAgICAgICAgbmV4dCA9
IDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmICghYW5pbWF0aW9ucygpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKKyAgICAgICAgLy8gUmVwZWF0IHBhdHRlcm5zIGludG8gbGF5ZXJzIHRoYXQgZG9u
J3QgaGF2ZSBzb21lIHByb3BlcnRpZXMgc2V0LgorICAgICAgICBhY2Nlc3NBbmltYXRpb25zKCkt
PmZpbGxVbnNldFByb3BlcnRpZXMoKTsKKyAgICB9Cit9CiAKIFRyYW5zaXRpb24qIFJlbmRlclN0
eWxlOjphY2Nlc3NUcmFuc2l0aW9ucygpCiB7Ci0gICAgVHJhbnNpdGlvbiogbGF5ZXIgPSByYXJl
Tm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uOwotICAgIGlmICghbGF5ZXIp
CisgICAgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2Vz
cygpLT5tX3RyYW5zaXRpb24uZ2V0KCk7CisgICAgaWYgKCF0cmFuc2l0aW9uKQogICAgICAgICBy
YXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gbmV3IFRyYW5zaXRp
b24oKTsKLSAgICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbjsKKyAg
ICByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNpdGlvbi5nZXQoKTsKIH0KIAor
VHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OmFjY2Vzc0FuaW1hdGlvbnMoKQoreworICAgIFRyYW5z
aXRpb24qIGFuaW1hdGlvbiA9IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1h
dGlvbi5nZXQoKTsKKyAgICBpZiAoIWFuaW1hdGlvbikKKyAgICAgICAgcmFyZU5vbkluaGVyaXRl
ZERhdGEuYWNjZXNzKCktPm1fYW5pbWF0aW9uID0gbmV3IFRyYW5zaXRpb24oKTsKKyAgICByZXR1
cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fYW5pbWF0aW9uLmdldCgpOwogfQorCitjb25zdCBU
cmFuc2l0aW9uKiBSZW5kZXJTdHlsZTo6dHJhbnNpdGlvbkZvclByb3BlcnR5KGludCBwcm9wZXJ0
eSkKK3sKKyAgICBmb3IgKGNvbnN0IFRyYW5zaXRpb24qIHAgPSB0cmFuc2l0aW9ucygpOyBwOyBw
ID0gcC0+bmV4dCgpKSB7CisgICAgICAgIGlmIChwLT50cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBj
QW5pbWF0ZUFsbCB8fCBwLT50cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkgeworICAg
ICAgICAgICAgcmV0dXJuIHA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisK
K30KSW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50TmFtZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9FdmVudE5hbWVzLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9kb20vRXZlbnRO
YW1lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDEyIEBACiAgICAgbWFjcm8ocHJv
Z3Jlc3MpIFwKICAgICBtYWNybyhzdGFsbGVkKSBcCiAgICAgXAorICAgIG1hY3JvKHdlYmtpdEFu
aW1hdGlvbkVuZCkgXAorICAgIG1hY3JvKHdlYmtpdEFuaW1hdGlvblN0YXJ0KSBcCisgICAgbWFj
cm8od2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uKSBcCisgICAgXAorICAgIG1hY3JvKHdlYmtpdFRy
YW5zaXRpb25FbmQpIFwKKyAgICBcCiAvLyBlbmQgb2YgRE9NX0VWRU5UX05BTUVTX0ZPUl9FQUNI
CiAKICNpZm5kZWYgRE9NX0VWRU5UX05BTUVTX0hJREVfR0xPQkFMUwpJbmRleDogV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDYgKzI0LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogCisjaW5jbHVkZSAiQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkFY
T2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKICNpbmNsdWRlICJDYWNo
ZWRDU1NTdHlsZVNoZWV0LmgiCkBAIC0xMDMsNiArMTA0LDggQEAKICNpbmNsdWRlICJUZXh0UmVz
b3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVHJlZVdhbGtlci5oIgogI2luY2x1ZGUgIlVJRXZl
bnQuaCIKKyNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgorI2luY2x1ZGUgIldlYktp
dFRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJY
TUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCkBAIC0zMDMsNiArMzA2LDcg
QEAKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgICwgbV9pbkxvd0JhbmR3aWR0
aERpc3BsYXkoZmFsc2UpCiAjZW5kaWYKKyAgICAsIG1fbG9hZENvbXBsZXRlKGZhbHNlKQogewog
ICAgIG1fZG9jdW1lbnQucmVzZXRTa2lwcGluZ1JlZih0aGlzKTsKIApAQCAtMzUxLDYgKzM1NSw3
IEBACiAgICAgbV9wcm9jZXNzaW5nTG9hZEV2ZW50ID0gZmFsc2U7CiAgICAgbV9zdGFydFRpbWUg
PSBjdXJyZW50VGltZSgpOwogICAgIG1fb3Zlck1pbmltdW1MYXlvdXRUaHJlc2hvbGQgPSBmYWxz
ZTsKKyAgICBzbmFwc2hvdFN0eWxlQmVnaW5UaW1lKCk7CiAgICAgCiAgICAgaW5pdFNlY3VyaXR5
T3JpZ2luKCk7CiAKQEAgLTEwODQsNiArMTA4OSwxMSBAQAogICAgIG1fZG9jQ2hhbmdlZCA9IGI7
CiB9CiAKK3ZvaWQgRG9jdW1lbnQ6OnNuYXBzaG90U3R5bGVCZWdpblRpbWUoKQoreworICAgIG1f
cmVjYWxjU3R5bGVUaW1lID0gY3VycmVudFRpbWUoKTsKK30KKwogdm9pZCBEb2N1bWVudDo6cmVj
YWxjU3R5bGUoU3R5bGVDaGFuZ2UgY2hhbmdlKQogewogICAgIC8vIHdlIHNob3VsZCBub3QgZW50
ZXIgc3R5bGUgcmVjYWxjIHdoaWxlIHBhaW50aW5nCkBAIC0xMDk1LDYgKzExMDUsNyBAQAogICAg
IGlmIChtX2luU3R5bGVSZWNhbGMpCiAgICAgICAgIHJldHVybjsgLy8gR3VhcmQgYWdhaW5zdCBy
ZS1lbnRyYW5jeS4gLWR3aAogICAgICAgICAKKyAgICBzbmFwc2hvdFN0eWxlQmVnaW5UaW1lKCk7
CiAgICAgbV9pblN0eWxlUmVjYWxjID0gdHJ1ZTsKICAgICBzdXNwZW5kUG9zdEF0dGFjaENhbGxi
YWNrcygpOwogICAgIApAQCAtMTE3MSw4ICsxMTgyLDE2IEBACiAKIHZvaWQgRG9jdW1lbnQ6OnVw
ZGF0ZVJlbmRlcmluZygpCiB7Ci0gICAgaWYgKGhhc0NoYW5nZWRDaGlsZCgpKQorICAgIHNuYXBz
aG90U3R5bGVCZWdpblRpbWUoKTsKKworICAgIGlmIChoYXNDaGFuZ2VkQ2hpbGQoKSkgewogICAg
ICAgICByZWNhbGNTdHlsZShOb0NoYW5nZSk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGwgdGhl
IGFuaW1hdGlvbiBjb250cm9sbGVyIHRoYXQgdGhlIHN0eWxlIGlzIGFsbCBzZXQgdXAgYW5kIGl0
IGNhbiBzdGFydCBhbmltYXRpb25zCisgICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgbV9mcmFt
ZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5zdHlsZUlzU2V0dXAoKTsKKyAgICB9CiB9CiAKIHZv
aWQgRG9jdW1lbnQ6OnVwZGF0ZURvY3VtZW50c1JlbmRlcmluZygpCkBAIC0xNTQ1LDYgKzE1NjQs
MTAgQEAKICAgICBpZiAoZikKICAgICAgICAgZi0+bG9hZGVyKCktPnN0YXJ0SWNvbkxvYWRlcigp
OwogCisgICAgbV9sb2FkQ29tcGxldGUgPSB0cnVlOworICAgIGlmIChmKQorICAgICAgICBmLT5h
bmltYXRpb25Db250cm9sbGVyKCktPnJlc3VtZUFuaW1hdGlvbnModGhpcyk7CisgICAgCiAgICAg
ZGlzcGF0Y2hJbWFnZUxvYWRFdmVudHNOb3coKTsKICAgICB0aGlzLT5kaXNwYXRjaFdpbmRvd0V2
ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKICAgICBpZiAoZikKQEAgLTI2MDUsNiArMjYy
OCwxMSBAQAogICAgIGlmIChldmVudFR5cGUgPT0gIk1lc3NhZ2VFdmVudCIpCiAgICAgICAgIHJl
dHVybiBuZXcgTWVzc2FnZUV2ZW50OwogI2VuZGlmCisgICAgaWYgKGV2ZW50VHlwZSA9PSAiV2Vi
S2l0QW5pbWF0aW9uRXZlbnQiKQorICAgICAgICByZXR1cm4gbmV3IFdlYktpdEFuaW1hdGlvbkV2
ZW50OyAgICAKKyAgICBpZiAoZXZlbnRUeXBlID09ICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQiKQor
ICAgICAgICByZXR1cm4gbmV3IFdlYktpdFRyYW5zaXRpb25FdmVudDsgICAgCisKICAgICBlYyA9
IE5PVF9TVVBQT1JURURfRVJSOwogICAgIHJldHVybiAwOwogfQpJbmRleDogV2ViQ29yZS9kb20v
RXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50LmNwcAkocmV2aXNpb24g
MzI5MTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw2
ICsxNTMsMTYgQEAKIH0KICNlbmRpZgogCitib29sIEV2ZW50Ojppc1dlYktpdEFuaW1hdGlvbkV2
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9ICAgIAorCitib29sIEV2ZW50Ojpp
c1dlYktpdFRyYW5zaXRpb25FdmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfSAg
ICAKKwogYm9vbCBFdmVudDo6c3RvcmVzUmVzdWx0QXNTdHJpbmcoKSBjb25zdAogewogICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IFdlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgQ29tcHV0ZXIs
IEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgV2ViS2l0QW5pbWF0aW9uRXZlbnRfaAorI2RlZmluZSBXZWJLaXRB
bmltYXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisgICAgICAgIAorICAgIGNsYXNzIFdlYktpdEFuaW1hdGlvbkV2ZW50IDogcHVibGljIEV2
ZW50IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50KCk7CisgICAg
ICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgICAgICB2aXJ0
dWFsIH5XZWJLaXRBbmltYXRpb25FdmVudCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0
V2ViS2l0QW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBjYW5CdWJibGVBcmcsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgY2FuY2VsYWJsZUFyZywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSgpIGNvbnN0Owor
ICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUoKSBjb25zdDsKKyAgICAgICAgCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9hbmltYXRpb25OYW1l
OworICAgICAgICBkb3VibGUgbV9lbGFwc2VkVGltZTsKKyAgICB9OworICAgIAorfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViS2l0QW5pbWF0aW9uRXZlbnRfaApJbmRleDog
V2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9FdmVudFRhcmdldE5vZGUuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNs
dWRlICJQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJlZEV2ZW50TGlzdGVuZXIu
aCIKICNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVu
dC5oIgorI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUgIldoZWVs
RXZlbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogCkBAIC0zNjYsNyArMzY4LDI0IEBA
CiAjZW5kaWYKIH0KIAorYm9vbCBFdmVudFRhcmdldE5vZGU6OmRpc3BhdGNoV2ViS2l0QW5pbWF0
aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgYW5p
bWF0aW9uTmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworICAgIEFTU0VSVCghZXZlbnREaXNw
YXRjaEZvcmJpZGRlbigpKTsKKyAgICAKKyAgICBSZWZQdHI8V2ViS2l0QW5pbWF0aW9uRXZlbnQ+
IGFuaW1FdmVudCA9IG5ldyBXZWJLaXRBbmltYXRpb25FdmVudChldmVudFR5cGUsIGFuaW1hdGlv
bk5hbWUsIGVsYXBzZWRUaW1lKTsKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICByZXR1
cm4gZGlzcGF0Y2hFdmVudChhbmltRXZlbnQsIGVjLCB0cnVlKTsKK30KIAorYm9vbCBFdmVudFRh
cmdldE5vZGU6OmRpc3BhdGNoV2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIGVsYXBzZWRU
aW1lKQoreworICAgIEFTU0VSVCghZXZlbnREaXNwYXRjaEZvcmJpZGRlbigpKTsKKyAgICAKKyAg
ICBSZWZQdHI8V2ViS2l0VHJhbnNpdGlvbkV2ZW50PiB0cmFuc2l0aW9uRXZlbnQgPSBuZXcgV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50KGV2ZW50VHlwZSwgcHJvcGVydHlOYW1lLCBlbGFwc2VkVGltZSk7
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodHJh
bnNpdGlvbkV2ZW50LCBlYywgdHJ1ZSk7Cit9CisgICAgCiB2b2lkIEV2ZW50VGFyZ2V0Tm9kZTo6
cmVtb3ZlSFRNTEV2ZW50TGlzdGVuZXIoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUpCiB7
CiAgICAgaWYgKCFtX3JlZ2RMaXN0ZW5lcnMpIC8vIG5vdGhpbmcgdG8gcmVtb3ZlCkluZGV4OiBX
ZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5pZGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9k
b20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENP
TVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09N
UFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KK21vZHVsZSBldmVudHMgeworCitpbnRlcmZhY2UgV2ViS2l0QW5pbWF0aW9uRXZl
bnQgOiBFdmVudCB7CisgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgICAgICAgICAg
YW5pbWF0aW9uTmFtZTsKKyAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSAgICAgICAgICAg
ICBlbGFwc2VkVGltZTsKKyAgICAgdm9pZCAgICAgICAgICAgICAgIGluaXRXZWJLaXRBbmltYXRp
b25FdmVudChpbiBET01TdHJpbmcgdHlwZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbkJ1YmJsZUFyZywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBib29sZWFuIGNhbmNlbGFibGVBcmcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gRE9NU3RyaW5nIGFu
aW1hdGlvbk5hbWVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW4gZG91YmxlIGVsYXBzZWRUaW1lQXJnKTsKK307CisKK30KSW5kZXg6IFdlYkNvcmUvZG9t
L0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNp
b24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MjAsNyArNTIwLDExIEBACiAgICAgICAgIERPTU5PREVJTlNFUlRFRElOVE9ET0NVTUVOVF9MSVNU
RU5FUiA9IDB4MTAsCiAgICAgICAgIERPTUFUVFJNT0RJRklFRF9MSVNURU5FUiAgICAgICAgICAg
ICA9IDB4MjAsCiAgICAgICAgIERPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUiAgICA9
IDB4NDAsCi0gICAgICAgIE9WRVJGTE9XQ0hBTkdFRF9MSVNURU5FUiAgICAgICAgICAgICA9IDB4
ODAKKyAgICAgICAgT1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVSICAgICAgICAgICAgID0gMHg4MCwK
KyAgICAgICAgQU5JTUFUSU9ORU5EX0xJU1RFTkVSICAgICAgICAgICAgICAgID0gMHgxMDAsCisg
ICAgICAgIEFOSU1BVElPTlNUQVJUX0xJU1RFTkVSICAgICAgICAgICAgICA9IDB4MjAwLAorICAg
ICAgICBBTklNQVRJT05JVEVSQVRJT05fTElTVEVORVIgICAgICAgICAgPSAweDQwMCwKKyAgICAg
ICAgVFJBTlNJVElPTkVORF9MSVNURU5FUiAgICAgICAgICAgICAgID0gMHg4MDAgICAgICAgIAog
ICAgIH07CiAKICAgICBib29sIGhhc0xpc3RlbmVyVHlwZShMaXN0ZW5lclR5cGUgbGlzdGVuZXJU
eXBlKSBjb25zdCB7IHJldHVybiAobV9saXN0ZW5lclR5cGVzICYgbGlzdGVuZXJUeXBlKTsgfQpA
QCAtNzI3LDcgKzczMSwxMyBAQAogCiAgICAgdm9pZCB1cGRhdGVGb2N1c0FwcGVhcmFuY2VTb29u
KCk7CiAgICAgdm9pZCBjYW5jZWxGb2N1c0FwcGVhcmFuY2VVcGRhdGUoKTsKKworICAgIHZvaWQg
c25hcHNob3RTdHlsZUJlZ2luVGltZSgpOworICAgIGRvdWJsZSByZWNhbGNTdHlsZUJlZ2luVGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjYWxjU3R5bGVUaW1lOyB9CiAgICAgCisgICAgLy8gZm9y
IGFuaW1hdGlvbnMgdG8ga25vdyB3aGV0aGVyIHRoZXkgY2FuIHJ1biB5ZXQgb3Igbm90CisgICAg
Ym9vbCBsb2FkQ29tcGxldGUoKSBjb25zdCB7IHJldHVybiBtX2xvYWRDb21wbGV0ZTsgfQorICAg
IAogICAgIC8vIEZGIG1ldGhvZCBmb3IgYWNjZXNzaW5nIHRoZSBzZWxlY3Rpb24gYWRkZWQgZm9y
IGNvbXBhdGFiaWxpdHkuCiAgICAgRE9NU2VsZWN0aW9uKiBnZXRTZWxlY3Rpb24oKSBjb25zdDsK
ICAgICAKQEAgLTg0Miw2ICs4NTIsNyBAQAogICAgIGJvb2wgbV9wcm9jZXNzaW5nTG9hZEV2ZW50
OwogICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKICAgICBib29sIG1fb3Zlck1pbmltdW1MYXlvdXRU
aHJlc2hvbGQ7CisgICAgZG91YmxlIG1fcmVjYWxjU3R5bGVUaW1lOwogICAgIAogI2lmIEVOQUJM
RShYU0xUKQogICAgIHZvaWQqIG1fdHJhbnNmb3JtU291cmNlOwpAQCAtMTAwOCw2ICsxMDE5LDgg
QEAKICNpZiBVU0UoTE9XX0JBTkRXSURUSF9ESVNQTEFZKQogICAgIGJvb2wgbV9pbkxvd0JhbmR3
aWR0aERpc3BsYXk7CiAjZW5kaWYKKyAgICAKKyAgICBib29sIG1fbG9hZENvbXBsZXRlOyAgICAv
LyBmb3IgYW5pbWF0aW9ucyB0byBrbm93IHdoZXRoZXIgb3Igbm90IHRoZXkgY2FuIHJ1biB5ZXQK
IH07CiAKIGlubGluZSBib29sIERvY3VtZW50OjpoYXNFbGVtZW50V2l0aElkKEF0b21pY1N0cmlu
Z0ltcGwqIGlkKSBjb25zdApJbmRleDogV2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dlYktpdEFuaW1hdGlvbkV2ZW50LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2OSBAQAorLyoqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVz
OworICAgIAorICAgIFdlYktpdEFuaW1hdGlvbkV2ZW50OjpXZWJLaXRBbmltYXRpb25FdmVudCgp
CisgICAgOiBtX2FuaW1hdGlvbk5hbWUoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgV2ViS2l0
QW5pbWF0aW9uRXZlbnQ6OldlYktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpCisg
ICAgOiBFdmVudCh0eXBlLCB0cnVlLCB0cnVlKQorICAgICwgbV9hbmltYXRpb25OYW1lKGFuaW1h
dGlvbk5hbWUpCisgICAgLCBtX2VsYXBzZWRUaW1lKGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6On5XZWJLaXRBbmltYXRpb25FdmVudCgp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIFdlYktpdEFuaW1hdGlvbkV2ZW50Ojppbml0
V2ViS2l0QW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmNhbkJ1YmJsZUFyZyov
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIC8qY2Fu
Y2VsYWJsZUFyZyovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICB7CisgICAgICAgIGlm
IChkaXNwYXRjaGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBp
bml0RXZlbnQodHlwZSwgZmFsc2UsIHRydWUpOworICAgICAgICAKKyAgICAgICAgbV9hbmltYXRp
b25OYW1lID0gYW5pbWF0aW9uTmFtZTsKKyAgICB9CisgICAgCisgICAgY29uc3QgU3RyaW5nJiBX
ZWJLaXRBbmltYXRpb25FdmVudDo6YW5pbWF0aW9uTmFtZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9hbmltYXRpb25OYW1lOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgV2ViS2l0
QW5pbWF0aW9uRXZlbnQ6OmVsYXBzZWRUaW1lKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX2VsYXBzZWRUaW1lOworICAgIH0KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0V2ZW50VGFyZ2V0Tm9kZS5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0V2
ZW50VGFyZ2V0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw4IEBACiAgICAgdm9p
ZCBkaXNwYXRjaFNpbXVsYXRlZENsaWNrKFBhc3NSZWZQdHI8RXZlbnQ+IHVuZGVybHlpbmdFdmVu
dCwgYm9vbCBzZW5kTW91c2VFdmVudHMgPSBmYWxzZSwgYm9vbCBzaG93UHJlc3NlZExvb2sgPSB0
cnVlKTsKICAgICBib29sIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChjb25zdCBBdG9taWNTdHJpbmcg
JmV2ZW50VHlwZSwgYm9vbCBsZW5ndGhDb21wdXRhYmxlQXJnLCB1bnNpZ25lZCBsb2FkZWRBcmcs
IHVuc2lnbmVkIHRvdGFsQXJnKTsKICAgICB2b2lkIGRpc3BhdGNoU3RvcmFnZUV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIGtleSwgY29uc3QgU3RyaW5n
JiBvbGRWYWx1ZSwgY29uc3QgU3RyaW5nJiBuZXdWYWx1ZSwgRnJhbWUqIHNvdXJjZSk7CisgICAg
Ym9vbCBkaXNwYXRjaFdlYktpdEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZl
bnRUeXBlLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7
CisgICAgYm9vbCBkaXNwYXRjaFdlYktpdFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2Vk
VGltZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqLCBib29s
IHVzZUNhcHR1cmUpOwogCkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9O
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDcgKzM3Nyw3IEBACiAgICAgaWYgKChjaGFu
Z2VUeXBlICE9IE5vU3R5bGVDaGFuZ2UpICYmICFhdHRhY2hlZCgpKSAvLyBjaGFuZ2VkIGNvbXBh
cmVkIHRvIHdoYXQ/CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghKGNoYW5nZVR5cGUgPT0g
SW5saW5lU3R5bGVDaGFuZ2UgJiYgbV9zdHlsZUNoYW5nZSA9PSBGdWxsU3R5bGVDaGFuZ2UpKQor
ICAgIGlmIChjaGFuZ2VUeXBlID4gKFN0eWxlQ2hhbmdlVHlwZSltX3N0eWxlQ2hhbmdlKQogICAg
ICAgICBtX3N0eWxlQ2hhbmdlID0gY2hhbmdlVHlwZTsKIAogICAgIGlmIChtX3N0eWxlQ2hhbmdl
ICE9IE5vU3R5bGVDaGFuZ2UpIHsKQEAgLTEwNDcsOCArMTA0Nyw5IEBACiAKIHZvaWQgTm9kZTo6
c2V0UmVuZGVyU3R5bGUoUmVuZGVyU3R5bGUqIHMpCiB7Ci0gICAgaWYgKG1fcmVuZGVyZXIpCisg
ICAgaWYgKG1fcmVuZGVyZXIpIHsKICAgICAgICAgbV9yZW5kZXJlci0+c2V0QW5pbWF0YWJsZVN0
eWxlKHMpOyAKKyAgICB9CiB9CiAKIFJlbmRlclN0eWxlKiBOb2RlOjpjb21wdXRlZFN0eWxlKCkK
SW5kZXg6IFdlYkNvcmUvZG9tL0V2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZl
bnQuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsNiArMTE1LDggQEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1N0b3JhZ2VFdmVudCgpIGNvbnN0OwogI2VuZGlmCisgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1dlYktpdFRyYW5zaXRpb25FdmVudCgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wg
cHJvcGFnYXRpb25TdG9wcGVkKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQ7
IH0KIApJbmRleDogV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9kb20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCittb2R1bGUgZXZlbnRzIHsKKworaW50ZXJmYWNlIFdl
YktpdFRyYW5zaXRpb25FdmVudCA6IEV2ZW50IHsKKyAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERP
TVN0cmluZyAgICAgICAgICBwcm9wZXJ0eU5hbWU7CisgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBk
b3VibGUgICAgICAgICAgICAgZWxhcHNlZFRpbWU7CisgICAgIHZvaWQgICAgICAgICAgICAgICBp
bml0V2ViS2l0VHJhbnNpdGlvbkV2ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxlQXJn
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4g
Y2FuY2VsYWJsZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbiBET01TdHJpbmcgcHJvcGVydHlOYW1lQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluIGRvdWJsZSBlbGFwc2VkVGltZUFyZyk7Cit9OworCit9Cklu
ZGV4OiBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDY5IEBACisvKioKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIAorICAgIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworICAgIAorICAgIFdl
YktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAgICA6IG1fcHJv
cGVydHlOYW1lKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIFdlYktpdFRyYW5zaXRpb25FdmVu
dDo6V2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICA6IEV2ZW50KHR5
cGUsIHRydWUsIHRydWUpCisgICAgLCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAg
LCBtX2VsYXBzZWRUaW1lKGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50Ojp+V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojppbml0V2ViS2l0VHJhbnNp
dGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgLypjYW5CdWJibGVBcmcqLywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCAvKmNhbmNlbGFibGVBcmcq
LywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICB7CisgICAgICAgIGlmIChkaXNwYXRjaGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpbml0RXZlbnQodHlw
ZSwgZmFsc2UsIHRydWUpOworICAgICAgICAKKyAgICAgICAgbV9wcm9wZXJ0eU5hbWUgPSBwcm9w
ZXJ0eU5hbWU7CisgICAgfQorICAgIAorICAgIGNvbnN0IFN0cmluZyYgV2ViS2l0VHJhbnNpdGlv
bkV2ZW50Ojpwcm9wZXJ0eU5hbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJv
cGVydHlOYW1lOworICAgIH0KKyAgICAKKyAgICBkb3VibGUgV2ViS2l0VHJhbnNpdGlvbkV2ZW50
OjplbGFwc2VkVGltZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGlt
ZTsKKyAgICB9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Rv
bS9FdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQu
Y3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxNCBAQAogICAgICAgICB0eXBlID0gRG9jdW1lbnQ6
OkRPTUNIQVJBQ1RFUkRBVEFNT0RJRklFRF9MSVNURU5FUjsKICAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gb3ZlcmZsb3djaGFuZ2VkRXZlbnQpCiAgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6T1ZF
UkZMT1dDSEFOR0VEX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRB
bmltYXRpb25TdGFydEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNU
QVJUX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRBbmltYXRpb25F
bmRFdmVudCkKKyAgICAgICAgdHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7
CisgICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50
KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsK
KyAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gd2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KQorICAg
ICAgICB0eXBlID0gRG9jdW1lbnQ6OlRSQU5TSVRJT05FTkRfTElTVEVORVI7ICAgIAogCiAgICAg
aWYgKHR5cGUpCiAgICAgICAgIGRvY3VtZW50LT5hZGRMaXN0ZW5lclR5cGUodHlwZSk7CkluZGV4
OiBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
ZG9tL1dlYktpdFRyYW5zaXRpb25FdmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFdlYktpdFRyYW5zaXRpb25FdmVudF9oCisjZGVmaW5lIFdlYktpdFRyYW5zaXRpb25FdmVu
dF9oCisKKyNpbmNsdWRlICJFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgICAg
IAorICAgIGNsYXNzIFdlYktpdFRyYW5zaXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7CisgICAg
cHVibGljOgorICAgICAgICBXZWJLaXRUcmFuc2l0aW9uRXZlbnQoKTsKKyAgICAgICAgV2ViS2l0
VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eU5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgICAgIHZpcnR1YWwgfldlYktp
dFRyYW5zaXRpb25FdmVudCgpOworICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0V2ViS2l0VHJh
bnNpdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJvb2wgY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sIGNhbmNlbGFibGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKCkgY29uc3Q7CisgICAgICAgIGRv
dWJsZSBlbGFwc2VkVGltZSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29s
IGlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBTdHJpbmcgbV9wcm9wZXJ0eU5hbWU7CisgICAgICAg
IGRvdWJsZSBtX2VsYXBzZWRUaW1lOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBXZWJLaXRUcmFuc2l0aW9uRXZlbnRfaApJbmRleDogV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1Miw3ICs3NTIsMTUgQEAKICAgICB9CiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChj
aGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFuZ2VkKCkpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlICpu
ZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRo
aXMpOworCisgICAgICAgIC8vIElmIHdlIGFyZSBmb3JjaW5nIHRoZSBjaGFuZ2UgbWFrZSBzdXJl
IGtleWZyYW1lcyBhcmUgdXBkYXRlZCBpbiB0aGUgbmV3IHN0eWxlCisgICAgICAgIG5ld1N0eWxl
LT51cGRhdGVLZXlmcmFtZXMoZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpKTsKKyAgICAgICAg
CiAgICAgICAgIFN0eWxlQ2hhbmdlIGNoID0gZGlmZihjdXJyZW50U3R5bGUsIG5ld1N0eWxlKTsK
KworICAgICAgICBpZiAoc3R5bGVDaGFuZ2VUeXBlKCkgPT0gQW5pbWF0YWJsZVN0eWxlQ2hhbmdl
KQorICAgICAgICAgICAgY2ggPSBGb3JjZTsKKyAgICAgICAgCiAgICAgICAgIGlmIChjaCA9PSBE
ZXRhY2gpIHsKICAgICAgICAgICAgIGlmIChhdHRhY2hlZCgpKQogICAgICAgICAgICAgICAgIGRl
dGFjaCgpOwpAQCAtNzg2LDkgKzc5NCwxMSBAQAogICAgICAgICAgICAgICAgIG5ld1N0eWxlLT5z
ZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJlY3RBZGphY2VudFJ1bGVzKCk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoY2ggIT0gTm9DaGFuZ2UpCi0gICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShu
ZXdTdHlsZSk7Ci0gICAgICAgIGVsc2UgaWYgKGNoYW5nZWQoKSAmJiAoZG9jdW1lbnQoKS0+dXNl
c1NpYmxpbmdSdWxlcygpIHx8IGRvY3VtZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSkpIHsK
KyAgICAgICAgaWYgKGNoICE9IE5vQ2hhbmdlKSB7CisgICAgICAgICAgICBpZiAobmV3U3R5bGUp
IHsKKyAgICAgICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2hhbmdlZCgpICYmIChkb2N1bWVudCgpLT51c2VzU2li
bGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgewogICAg
ICAgICAgICAgLy8gQWx0aG91Z2ggbm8gY2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBz
dHlsZSBzbyB0aGF0IHRoZSBjb3VzaW4gc3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdldAogICAg
ICAgICAgICAgLy8gZm9vbGVkIGludG8gYmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUu
ICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZSBkb2N1bWVudCBhY3R1YWxseSB1c2VzCiAg
ICAgICAgICAgICAvLyBzaWJsaW5nL2Rlc2NlbmRhbnQgcnVsZXMsIHNpbmNlIG90aGVyd2lzZSBp
dCBpc24ndCBwb3NzaWJsZSBmb3IgYW5jZXN0b3Igc3R5bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9m
CkBAIC04MDIsNyArODEyLDcgQEAKICAgICAgICAgbmV3U3R5bGUtPmRlcmVmKGRvY3VtZW50KCkt
PnJlbmRlckFyZW5hKCkpOwogCiAgICAgICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpIHsKLSAgICAg
ICAgICAgIGlmICgoZG9jdW1lbnQoKS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bvc2l0
aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFuZ2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlKQorICAg
ICAgICAgICAgaWYgKChkb2N1bWVudCgpLT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9z
aXRpb25hbFJ1bGVzKSAmJiBzdHlsZUNoYW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCiAg
ICAgICAgICAgICAgICAgY2hhbmdlID0gRm9yY2U7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgY2hhbmdlID0gY2g7CkluZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vTm9kZS5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9t
L05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNyArNTksNyBAQAogCiB0eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwogCi1lbnVtIFN0eWxlQ2hhbmdlVHlwZSB7IE5vU3R5bGVDaGFuZ2UsIElu
bGluZVN0eWxlQ2hhbmdlLCBGdWxsU3R5bGVDaGFuZ2UgfTsKK2VudW0gU3R5bGVDaGFuZ2VUeXBl
IHsgTm9TdHlsZUNoYW5nZSwgSW5saW5lU3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSwgQW5p
bWF0YWJsZVN0eWxlQ2hhbmdlIH07CiAKIC8vIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBub2Rlcywg
d2hpY2ggY2FuIGhhdmUgYSBwYXJlbnQgYnV0IG5vIGNoaWxkcmVuOgogY2xhc3MgTm9kZSA6IHB1
YmxpYyBUcmVlU2hhcmVkPE5vZGU+IHsKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNjksNiArMzY5LDU2IEBA
CiAJCTI5OTk4NEJFMERDODU5ODUwMEY4RDI2MSAvKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTk5ODRC
QzBEQzg1OTg1MDBGOEQyNjEgLyogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oICovOyB9Owog
CQkyRDkwNjYwNjBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMkQ5MDY2MDQwQkUxNDFENDAwOTU2
OTk4IC8qIExheW91dFN0YXRlLmNwcCAqLzsgfTsKIAkJMkQ5MDY2MDcwQkUxNDFENDAwOTU2OTk4
IC8qIExheW91dFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAyRDkwNjYwNTBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMTZDQzE0NjBERDhG
RTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTNBMEREOEZFN0IwMDg4OTlFMiAv
KiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwICovOyB9OworCQkzMTZDQzE0NzBERDhGRTdCMDA4
ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzEzQjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CisJCTMxNkNDMTQ4MEREOEZFN0IwMDg4OTlFMiAvKiBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzEzQzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmlkbCAqLzsgfTsKKwkJMzE2Q0MxNDkwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktp
dENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE2Q0MxM0QwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1l
c1J1bGUuY3BwICovOyB9OworCQkzMTZDQzE0QTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2Q0MxM0UwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUu
aCAqLzsgfTsKKwkJMzE2Q0MxNEIwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1l
c1J1bGUuaWRsIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTZDQzEzRjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5pZGwg
Ki87IH07CisJCTMxNkNDMTRDMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxNDAw
REQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5jcHAgKi87IH07CisJCTMxNkNDMTRE
MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTQxMEREOEZFN0IwMDg4OTlFMiAvKiBX
ZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKKwkJMzE2Q0MxNEUwREQ4RkU3QjAwODg5OUUyIC8qIFdl
YktpdENTU01hdHJpeC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxNkNDMTQyMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaWRs
ICovOyB9OworCQkzMTZDQzE0RjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzE2Q0MxNDMwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAq
LzsgfTsKKwkJMzE2Q0MxNTAwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZD
QzE0NDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLzsgfTsK
KwkJMzE2Q0MxNTEwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlk
bCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0Mx
NDUwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLzsgfTsK
KwkJMzE2Q0MxNjkwREQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9ybTNELmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTY3MEREOTE0QTUwMDg4
OTlFMiAvKiBUcmFuc2Zvcm0zRC5jcHAgKi87IH07CisJCTMxNkNDMTZBMEREOTE0QTUwMDg4OTlF
MiAvKiBUcmFuc2Zvcm0zRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzE2Q0MxNjgwREQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9ybTNELmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzE2Q0MzRTcwRERB
NjdEOTAwODg5OUUyIC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDM0UxMEREQTY3RDkwMDg4OTlFMiAv
KiBXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi87IH07CisJCTMxNkNDM0U4MEREQTY3RDkwMDg4
OTlFMiAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MzRTIwRERBNjdEOTAwODg5OUUyIC8qIFdlYktpdEFu
aW1hdGlvbkV2ZW50LmggKi87IH07CisJCTMxNkNDM0U5MEREQTY3REEwMDg4OTlFMiAvKiBXZWJL
aXRBbmltYXRpb25FdmVudC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxNkNDM0UzMEREQTY3RDkwMDg4OTlFMiAvKiBXZWJLaXRBbmltYXRpb25F
dmVudC5pZGwgKi87IH07CisJCTMxNkNDM0VBMEREQTY3REEwMDg4OTlFMiAvKiBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2Q0MzRTQwRERBNjdEOTAwODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5j
cHAgKi87IH07CisJCTMxNkNDM0VCMEREQTY3REEwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
NkNDM0U1MEREQTY3RDkwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsK
KwkJMzE2Q0MzRUMwRERBNjdEQTAwODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5pZGwg
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDM0U2
MEREQTY3RDkwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsICovOyB9OworCQkz
MTZDQzNGRDBEREE2QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzNGOTBEREE2
QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi87IH07CisJCTMxNkND
M0ZFMEREQTZDMjAwMDg4OTlFMiAvKiBKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzNGQTBEREE2QzIwMDA4
ODk5RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oICovOyB9OworCQkzMTZDQzNGRjBEREE2
QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MzRkIwRERBNkMyMDAwODg5OUUy
IC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLzsgfTsKKwkJMzE2Q0M0MDAwRERBNkMy
MDAwODg5OUUyIC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzNGQzBEREE2QzIwMDA4ODk5RTIgLyog
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCAqLzsgfTsKKwkJMzE2Q0M0MEEwRERBNkM1NDAwODg5
OUUyIC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzQwNDBEREE2QzU0MDA4ODk5RTIgLyogRE9NV2Vi
S2l0QW5pbWF0aW9uRXZlbnQuaCAqLzsgfTsKKwkJMzE2Q0M0MEIwRERBNkM1NDAwODg5OUUyIC8q
IERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0MDUwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktpdEFu
aW1hdGlvbkV2ZW50Lm1tICovOyB9OworCQkzMTZDQzQwQzBEREE2QzU0MDA4ODk5RTIgLyogRE9N
V2ViS2l0QW5pbWF0aW9uRXZlbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0MDYwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktp
dEFuaW1hdGlvbkV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJMzE2Q0M0MEQwRERBNkM1NDAwODg5
OUUyIC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0MDcwRERBNkM1NDAwODg5OUUyIC8qIERPTVdl
YktpdFRyYW5zaXRpb25FdmVudC5oICovOyB9OworCQkzMTZDQzQwRTBEREE2QzU0MDA4ODk5RTIg
LyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0MDgwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktp
dFRyYW5zaXRpb25FdmVudC5tbSAqLzsgfTsKKwkJMzE2Q0M0MEYwRERBNkM1NDAwODg5OUUyIC8q
IERPTVdlYktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzQwOTBEREE2QzU0MDA4ODk5RTIgLyogRE9N
V2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJuYWwuaCAqLzsgfTsKKwkJMzE2Q0M0NTgwRERBRkNB
QTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNDUwMEREQUZDQUEwMDg4OTlFMiAv
KiBKU1dlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgKi87IH07CisJCTMxNkNDNDU5MEREQUZDQUEw
MDg4OTlFMiAvKiBKU1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NTEwRERBRkNBQTAwODg5OUUyIC8qIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CisJCTMxNkNDNDVBMEREQUZDQUEwMDg4OTlF
MiAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NTIwRERBRkNBQTAwODg5OUUyIC8qIEpTV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi87IH07CisJCTMxNkNDNDVCMEREQUZDQUEwMDg4OTlF
MiAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNDUzMEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktp
dENTU0tleWZyYW1lc1J1bGUuaCAqLzsgfTsKKwkJMzE2Q0M0NUUwRERBRkNBQTAwODg5OUUyIC8q
IEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NTYwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovOyB9OworCQkzMTZDQzQ1RjBEREFGQ0FBMDA4ODk5RTIg
LyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NTcwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLzsgfTsKKwkJMzE2Q0M0NkQwRERBRkNEQjAwODg5OUUyIC8q
IERPTVdlYktpdENTU0tleWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NjEwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENT
U0tleWZyYW1lUnVsZS5oICovOyB9OworCQkzMTZDQzQ2RTBEREFGQ0RCMDA4ODk5RTIgLyogRE9N
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzE2Q0M0NjIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tl
eWZyYW1lUnVsZS5tbSAqLzsgfTsKKwkJMzE2Q0M0NkYwRERBRkNEQjAwODg5OUUyIC8qIERPTVdl
YktpdENTU0tleWZyYW1lUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzQ2MzBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlSW50ZXJuYWwuaCAqLzsgfTsKKwkJMzE2Q0M0NzAwRERBRkNEQjAwODg5
OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNDY0MEREQUZDREIwMDg4OTlFMiAvKiBET01X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07CisJCTMxNkNDNDcxMEREQUZDREIwMDg4OTlF
MiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NjUwRERBRkNEQjAwODg5OUUyIC8qIERPTVdl
YktpdENTU0tleWZyYW1lc1J1bGUubW0gKi87IH07CisJCTMxNkNDNDcyMEREQUZDREIwMDg4OTlF
MiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNDY2MEREQUZDREIwMDg4OTlFMiAv
KiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCAqLzsgfTsKKwkJMzE2Q0M0NzYw
RERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZDQzQ2QTBEREFGQ0RCMDA4
ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLzsgfTsKKwkJMzE2Q0M0Nzcw
RERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NkIwRERBRkNEQjAw
ODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1tICovOyB9OworCQkzMTZDQzQ3
ODBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVJbnRlcm5hbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M0NkMw
RERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlSW50ZXJuYWwuaCAq
LzsgfTsKKwkJMzE2Q0M1ODgwRERCODkzRjAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNTg2
MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgKi87IH07CisJCTMxNkND
NTg5MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M1ODcwRERCODkzRjAwODg5OUUy
IC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CisJCTMxNkNDNThFMEREQjg5NUYwMDg4OTlF
MiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxNkNDNThCMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NN
YXRyaXguaCAqLzsgfTsKKwkJMzE2Q0M1OEYwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENT
U01hdHJpeC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxNkNDNThDMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXgubW0gKi87IH07
CisJCTMxNkNDNTkwMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXhJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M1
OEQwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggKi87IH07
CiAJCTM3MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGM0UwRDI1QjlBRjAwRUNFMEQ1
IC8qIEZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMzcxRjRGNDEwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3MUY0RjNGMEQyNUI5QUYw
MEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi87IH07CiAJCTM3MUY0RkZDMEQyNUU3RjMwMEVDRTBE
NSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnRE
YXRhLmggKi87IH07CkBAIC0zNjkzLDggKzM3NDMsNiBAQAogCQlCQzk4NTQzRTBDRDNEOThDMDAw
NjlCQzEgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzk4NTQzQzBDRDNEOThCMDAwNjlCQzEgLyogSlNDb25zb2xlLmggKi87IH07
CiAJCUJDOThBMjdEMEMwQzk5NTAwMDRCRUJGNyAvKiBKU1N0eWxlU2hlZXRDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OEEyN0MwQzBD
OTk1MDAwNEJFQkY3IC8qIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAgKi87IH07CiAJCUJDOTk4MTJF
MERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQwREJFODA3QTAwOENFOUVG
IC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07Ci0JCUJDOUFERDIzMENDNDAzMjYwMDA5
OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAwMDk4QzRDIC8qIENTU1RyYW5zZm9y
bVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8qIENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDOUFERDdGMENDNDA5
MjIwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07CiAJCUJDQTE2OUEyMEJG
RDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2OUEwMEJGRDU1QjQwMDE5
Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCAqLzsgfTsKIAkJQkNBMTY5QTMw
QkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2OUExMEJGRDU1QjQwMDE5
Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi87IH07CiAJCUJDQTM3ODE2MEQx
NUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzgxNDBEMTVDNjQ2MDBCNzkzRDYgLyogUGF1
c2VkVGltZW91dHMuY3BwICovOyB9OwpAQCAtNDgxOSw2ICs0ODY3LDU2IEBACiAJCTJEOTA2NjA1
MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTGF5b3V0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRNYWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTJE
OTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBDbGlwYm9hcmRNYWMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OworCQkzMTZDQzEzQTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1l
UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTNCMEREOEZFN0Iw
MDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxNkNDMTNDMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lUnVsZS5pZGw7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTNEMEREOEZFN0IwMDg4OTlFMiAv
KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkzMTZDQzEzRTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTNGMEREOEZFN0Iw
MDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE2Q0MxNDAwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NNYXRyaXguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE0MTBERDhGRTdCMDA4ODk5RTIgLyog
V2ViS2l0Q1NTTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktp
dENTU01hdHJpeC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE0MjBERDhG
RTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGgg
PSBXZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZD
QzE0MzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE0NDBERDhGRTdCMDA4ODk5
RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzE2Q0MxNDUwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTY3MEREOTE0QTUwMDg4OTlF
MiAvKiBUcmFuc2Zvcm0zRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUcmFuc2Zvcm0zRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTY4
MEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBUcmFuc2Zvcm0zRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTZDQzNFMTBEREE2N0Q5MDA4ODk5RTIgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzNFMjBEREE2N0Q5MDA4ODk5RTIg
LyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV2ViS2l0QW5pbWF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MzE2Q0MzRTMwRERBNjdEOTAwODg5OUUyIC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJLaXRBbmltYXRpb25FdmVudC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxNkNDM0U0MEREQTY3RDkwMDg4OTlFMiAvKiBXZWJLaXRUcmFu
c2l0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2
Q0MzRTUwRERBNjdEOTAwODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MzRTYwRERBNjdEOTAwODg5OUUyIC8qIFdlYktp
dFRyYW5zaXRpb25FdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViS2l0VHJhbnNp
dGlvbkV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MzRjkwRERB
NkMyMDAwODg5OUUyIC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDM0ZBMEREQTZDMjAwMDg4OTlFMiAvKiBKU1dl
YktpdEFuaW1hdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpT
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2
Q0MzRkIwRERBNkMyMDAwODg5OUUyIC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MzRkMwRERBNkMyMDAwODg5
OUUyIC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxNkNDNDA0MEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRBbmltYXRpb25F
dmVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01XZWJLaXRBbmltYXRp
b25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzQwNTBEREE2QzU0
MDA4ODk5RTIgLyogRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnQubW0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01XZWJLaXRBbmltYXRpb25FdmVudC5tbTsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0MDYwRERBNkM1NDAwODg5OUUyIC8qIERPTVdl
YktpdEFuaW1hdGlvbkV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gRE9NV2ViS2l0QW5pbWF0aW9uRXZlbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTZDQzQwNzBEREE2QzU0MDA4ODk5RTIgLyogRE9NV2ViS2l0VHJhbnNp
dGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdlYktpdFRy
YW5zaXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzQwODBE
REE2QzU0MDA4ODk5RTIgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50Lm1t
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzQwOTBEREE2QzU0MDA4ODk5RTIg
LyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50SW50ZXJuYWwuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0NTAwRERBRkNBQTAwODg5OUUyIC8qIEpTV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE2Q0M0NTEwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNDUyMEREQUZDQUEwMDg4
OTlFMiAvKiBKU1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0NTMwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dl
YktpdENTU0tleWZyYW1lc1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2
Q0M0NTYwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNDU3MEREQUZDQUEw
MDg4OTlFMiAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0NjEwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENT
U0tleWZyYW1lUnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01XZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0
NjIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lUnVsZS5tbSAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVdlYktpdENTU0tleWZyYW1lUnVs
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0NjMwRERBRkNEQjAwODg5
OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lUnVsZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdlYktpdENTU0tleWZyYW1lUnVsZUludGVybmFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNDY0MEREQUZDREIwMDg4OTlFMiAvKiBE
T01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IERPTVdlYktpdENTU0tleWZyYW1lc1J1bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE2Q0M0NjUwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1
bGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01XZWJLaXRD
U1NLZXlmcmFtZXNSdWxlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzQ2
NjBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZUludGVybmFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERPTVdlYktpdENTU0tleWZyYW1lc1J1
bGVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzQ2QTBEREFG
Q0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M0NkIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBwYXRoID0gRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUubW07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxNkNDNDZDMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZUludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERP
TVdlYktpdENTU1RyYW5zZm9ybVZhbHVlSW50ZXJuYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzE2Q0M1ODYwRERCODkzRjAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViS2l0Q1NTTWF0cml4
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M1ODcwRERCODkzRjAwODg5
OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEpTV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMx
NkNDNThCMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNThDMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRD
U1NNYXRyaXgubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBET01X
ZWJLaXRDU1NNYXRyaXgubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNThE
MEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBET01XZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEYzRTBEMjVCOUFGMDBFQ0UwRDUgLyog
Rm9udERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udERhdGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjRGM0YwRDI1QjlBRjAwRUNFMEQ1IC8q
IEZvbnREYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZvbnRE
YXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzcxRjRGRkEwRDI1RTdGMzAw
RUNFMEQ1IC8qIFNlZ21lbnRlZEZvbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNlZ21lbnRlZEZvbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC03OTk2LDggKzgwOTQsNiBAQAogCQlCQzk4NTQzQzBDRDNEOThCMDAwNjlCQzEgLyogSlNDb25z
b2xlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NvbnNvbGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM5OEEyN0MwQzBDOTk1MDAwNEJFQkY3IC8qIEpT
U3R5bGVTaGVldEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBKU1N0eWxlU2hlZXRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
Qzk5ODEyRDBEQkU4MDdBMDA4Q0U5RUYgLyogRE9NQWJzdHJhY3RWaWV3RnJhbWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NQWJzdHJhY3RWaWV3RnJhbWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQkM5QUREMjIwQ0M0MDMyNjAwMDk4QzRDIC8qIENTU1Ry
YW5zZm9ybVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NUcmFu
c2Zvcm1WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCQzlBREQ3RjBDQzQw
OTIyMDAwOThDNEMgLyogQ1NTVHJhbnNmb3JtVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU1RyYW5zZm9ybVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQkNBMTY5QTAwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2Fw
dGlvbkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
SFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlCQ0ExNjlBMTBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVudC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MVGFibGVDYXB0aW9uRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0EzNzgxNDBEMTVDNjQ2MDBC
NzkzRDYgLyogUGF1c2VkVGltZW91dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gUGF1c2VkVGltZW91dHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTE0NSw2ICs5MjQxLDE4IEBACiAJCTg1OTY3RENBMEFBOEJGMEYwMDVGRURFRSAvKiBDU1Mg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNkNDNThC
MEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCAqLywKKwkJCQkzMTZDQzU4
QzBEREI4OTVGMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tICovLAorCQkJCTMxNkND
NThEMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXhJbnRlcm5hbC5oICovLAor
CQkJCTMxNkNDNDYxMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZVJ1bGUu
aCAqLywKKwkJCQkzMTZDQzQ2MjBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlLm1tICovLAorCQkJCTMxNkNDNDYzMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRD
U1NLZXlmcmFtZVJ1bGVJbnRlcm5hbC5oICovLAorCQkJCTMxNkNDNDY0MEREQUZDREIwMDg4OTlF
MiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8sCisJCQkJMzE2Q0M0NjUwRERBRkNE
QjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGUubW0gKi8sCisJCQkJMzE2Q0M0
NjYwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGVJbnRlcm5hbC5o
ICovLAorCQkJCTMxNkNDNDZBMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZS5oICovLAorCQkJCTMxNkNDNDZCMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZS5tbSAqLywKKwkJCQkzMTZDQzQ2QzBEREFGQ0RCMDA4ODk5RTIgLyog
RE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVJbnRlcm5hbC5oICovLAogCQkJCTg1MDMyREMzMEFB
OEM5QkUwMDdEM0I3RCAvKiBET01DU1NDaGFyc2V0UnVsZS5oICovLAogCQkJCTg1MDMyREM0MEFB
OEM5QkUwMDdEM0I3RCAvKiBET01DU1NDaGFyc2V0UnVsZS5tbSAqLywKIAkJCQk4NTAzMkRDNTBB
QThDOUJFMDA3RDNCN0QgLyogRE9NQ1NTRm9udEZhY2VSdWxlLmggKi8sCkBAIC05NzMzLDYgKzk4
NDEsMTIgQEAKIAkJODVBRkE3QUIwQUFGM0JCMDAwRTg0MzA1IC8qIEV2ZW50cyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzE2Q0M0MDQwRERBNkM1NDAw
ODg5OUUyIC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50LmggKi8sCisJCQkJMzE2Q0M0MDUwRERB
NkM1NDAwODg5OUUyIC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tICovLAorCQkJCTMxNkND
NDA2MEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmgg
Ki8sCisJCQkJMzE2Q0M0MDcwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktpdFRyYW5zaXRpb25F
dmVudC5oICovLAorCQkJCTMxNkNDNDA4MEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRUcmFu
c2l0aW9uRXZlbnQubW0gKi8sCisJCQkJMzE2Q0M0MDkwRERBNkM1NDAwODg5OUUyIC8qIERPTVdl
YktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmggKi8sCiAJCQkJODVBRkE4MjAwQUFGNTI4QTAw
RTg0MzA1IC8qIERPTUV2ZW50LmggKi8sCiAJCQkJODVBRkE4MjEwQUFGNTI4QTAwRTg0MzA1IC8q
IERPTUV2ZW50Lm1tICovLAogCQkJCTg1RDJBRDY3MEFCMUE0MEEwMEMzMTNFQSAvKiBET01FdmVu
dExpc3RlbmVyLmggKi8sCkBAIC0xMTAyMyw2ICsxMTEzNywxNCBAQAogCQlBODNCNzkwRTBDQ0FG
Rjk3MDAwQjA4MjUgLyogQ1NTICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkzMTZDQzU4NjBEREI4OTNGMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NNYXRyaXgu
Y3BwICovLAorCQkJCTMxNkNDNTg3MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJp
eC5oICovLAorCQkJCTMxNkNDNDUwMEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU0tleWZy
YW1lUnVsZS5jcHAgKi8sCisJCQkJMzE2Q0M0NTEwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmggKi8sCisJCQkJMzE2Q0M0NTIwRERBRkNBQTAwODg5OUUyIC8qIEpT
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi8sCisJCQkJMzE2Q0M0NTMwRERBRkNBQTAwODg5
OUUyIC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oICovLAorCQkJCTMxNkNDNDU2MEREQUZD
QUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLywKKwkJCQkzMTZD
QzQ1NzBEREFGQ0FBMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAog
CQkJCTkzMDcwNUQ3MDlFMEM5QjcwMEIxN0ZFNCAvKiBKU0NvdW50ZXIuY3BwICovLAogCQkJCTkz
MDcwNUQ5MDlFMEM5QkYwMEIxN0ZFNCAvKiBKU0NvdW50ZXIuaCAqLywKIAkJCQlCQzQ2QzFGMDBD
MEREQzhGMDAyMENGQzMgLyogSlNDU1NDaGFyc2V0UnVsZS5jcHAgKi8sCkBAIC0xMTExNCw2ICsx
MTIzNiwxMCBAQAogCQlBODNCNzkxMjBDQ0IwMDNGMDAwQjA4MjUgLyogRXZlbnRzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZDQzNGOTBEREE2QzIw
MDA4ODk5RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgKi8sCisJCQkJMzE2Q0MzRkEw
RERBNkMyMDAwODg5OUUyIC8qIEpTV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCAqLywKKwkJCQkzMTZD
QzNGQjBEREE2QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3BwICovLAor
CQkJCTMxNkNDM0ZDMEREQTZDMjAwMDg4OTlFMiAvKiBKU1dlYktpdFRyYW5zaXRpb25FdmVudC5o
ICovLAogCQkJCTE0RTgzNzgzMDlGODVEMUMwMEI4NUFFNCAvKiBKU0V2ZW50LmNwcCAqLywKIAkJ
CQkxNEU4Mzc4RDA5Rjg1RDRGMDBCODVBRTQgLyogSlNFdmVudC5oICovLAogCQkJCUJDNjBEOUJE
MEQyQTI2OUEwMEI5OTE4RiAvKiBKU0V2ZW50RXhjZXB0aW9uLmNwcCAqLywKQEAgLTExODUzLDYg
KzExOTc5LDggQEAKIAkJQjJBMDE1OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBoaWNzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZDQzE2NzBERDkx
NEE1MDA4ODk5RTIgLyogVHJhbnNmb3JtM0QuY3BwICovLAorCQkJCTMxNkNDMTY4MEREOTE0QTUw
MDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5oICovLAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJG
QSAvKiBTdHJpbmdUcnVuY2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJG
QSAvKiBTdHJpbmdUcnVuY2F0b3IuaCAqLywKIAkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYg
LyogRm9udC5jcHAgKi8sCkBAIC0xMjUwOSw2ICsxMjYzNywxOCBAQAogCQlGNTIzRDE4NDAyREU0
MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkzMTZDQzEzQTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcCAqLywKKwkJCQkzMTZDQzEzQjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlLmggKi8sCisJCQkJMzE2Q0MxM0MwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENT
U0tleWZyYW1lUnVsZS5pZGwgKi8sCisJCQkJMzE2Q0MxM0QwREQ4RkU3QjAwODg5OUUyIC8qIFdl
YktpdENTU0tleWZyYW1lc1J1bGUuY3BwICovLAorCQkJCTMxNkNDMTNFMEREOEZFN0IwMDg4OTlF
MiAvKiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggKi8sCisJCQkJMzE2Q0MxM0YwREQ4RkU3QjAw
ODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaWRsICovLAorCQkJCTMxNkNDMTQwMERE
OEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwICovLAorCQkJCTMxNkNDMTQxMERE
OEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLywKKwkJCQkzMTZDQzE0MjBERDhG
RTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLywKKwkJCQkzMTZDQzE0MzBERDhG
RTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAorCQkJCTMxNkND
MTQ0MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAorCQkJ
CTMxNkNDMTQ1MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwg
Ki8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5
MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIw
QTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAtMTI1OTMs
OCArMTI3MzMsNiBAQAogCQkJCTg1OEMzOTEwMEFBOEZGMDAwMEIxODdBNCAvKiBDU1NTdHlsZVNo
ZWV0LmlkbCAqLywKIAkJCQlCQzgwQzk4NTBDRDI5NEVFMDBBMEI3QjMgLyogQ1NTVGltaW5nRnVu
Y3Rpb25WYWx1ZS5jcHAgKi8sCiAJCQkJQkM4MEM5ODYwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuaCAqLywKLQkJCQlCQzlBREQ3RjBDQzQwOTIyMDAwOThDNEMgLyog
Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICovLAotCQkJCUJDOUFERDIyMENDNDAzMjYwMDA5OEM0QyAv
KiBDU1NUcmFuc2Zvcm1WYWx1ZS5oICovLAogCQkJCTM3MUY1M0U4MEQyNzA0RjkwMEVDRTBENSAv
KiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5jcHAgKi8sCiAJCQkJMzcxRjUzRTcwRDI3MDRGOTAwRUNF
MEQ1IC8qIENTU1VuaWNvZGVSYW5nZVZhbHVlLmggKi8sCiAJCQkJQTgwRTZDQ0UwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1Vua25vd25SdWxlLmggKi8sCkBAIC0xMjg0Niw2ICsxMjk4NCwxMiBAQAog
CQlGNTIzRDMyNDAyREU0NDc4MDE4NjM1Q0EgLyogZG9tICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZDQzNFMTBEREE2N0Q5MDA4ODk5RTIgLyogV2Vi
S2l0QW5pbWF0aW9uRXZlbnQuY3BwICovLAorCQkJCTMxNkNDM0UyMEREQTY3RDkwMDg4OTlFMiAv
KiBXZWJLaXRBbmltYXRpb25FdmVudC5oICovLAorCQkJCTMxNkNDM0UzMEREQTY3RDkwMDg4OTlF
MiAvKiBXZWJLaXRBbmltYXRpb25FdmVudC5pZGwgKi8sCisJCQkJMzE2Q0MzRTQwRERBNjdEOTAw
ODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgKi8sCisJCQkJMzE2Q0MzRTUwRERB
NjdEOTAwODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5oICovLAorCQkJCTMxNkNDM0U2
MEREQTY3RDkwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsICovLAogCQkJCUE4
QzRBN0ZDMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmNwcCAqLywKIAkJCQlBOEM0QTdGQjA5RDU2
MzI3MDAwM0FDOEQgLyogQXR0ci5oICovLAogCQkJCTkzRUVDMUU1MDlDMjg3NzcwMEM1MTVEMSAv
KiBBdHRyLmlkbCAqLywKQEAgLTEzMDk1LDcgKzEzMjM5LDYgQEAKIAkJCQlCQzc3MkI0MDBDNEVB
OTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThF
QTgwMDcwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDODBDOTg4MENEMjk0RUUwMEEwQjdCMyAvKiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgg
aW4gSGVhZGVycyAqLywKLQkJCQlCQzlBREQyMzBDQzQwMzI2MDAwOThDNEMgLyogQ1NTVHJhbnNm
b3JtVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUREN0NERjI1MEEyM0NGOTgwMDA2OTkyOCAv
KiBDU1NVbmtub3duUnVsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRUUwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODE1MTA5RDEzMDQz
MDAwRTYxRDcgLyogQ1NTVmFsdWVLZXl3b3Jkcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0xNDk5Miw2
ICsxNTEzNSwzMSBAQAogCQkJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9j
ZXNzb3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTk5RUM0MERDQTYyNDEwMDE4MjY4MyAvKiBK
U1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNCRkI1M0Qw
RENEMjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93U2hlbGwuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxNkNDMTQ3MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTMxNkNDMTRBMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzE0RDBERDhGRTdCMDA4ODk5RTIg
LyogV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzE1MDBERDhGRTdC
MDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTMxNkNDMTZBMEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzE2Q0MzRTgwRERBNjdEOTAwODg5OUUyIC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzNFQjBEREE2N0RBMDA4ODk5RTIgLyogV2ViS2l0VHJh
bnNpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzNGRTBEREE2QzIwMDA4ODk5
RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0
MDAwRERBNkMyMDAwODg5OUUyIC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTZDQzQwQTBEREE2QzU0MDA4ODk5RTIgLyogRE9NV2ViS2l0QW5pbWF0aW9u
RXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDBDMEREQTZDNTQwMDg4OTlFMiAvKiBE
T01XZWJLaXRBbmltYXRpb25FdmVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZD
QzQwRDBEREE2QzU0MDA4ODk5RTIgLyogRE9NV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkzMTZDQzQwRjBEREE2QzU0MDA4ODk5RTIgLyogRE9NV2ViS2l0VHJhbnNp
dGlvbkV2ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDU5MEREQUZDQUEw
MDg4OTlFMiAvKiBKU1dlYktpdENTU0tleWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MzE2Q0M0NUIwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NUYwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDZEMEREQUZDREIwMDg4
OTlFMiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
NkNDNDZGMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZVJ1bGVJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NzAwRERBRkNEQjAwODg5OUUyIC8qIERPTVdl
YktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDcyMEREQUZD
REIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NLZXlmcmFtZXNSdWxlSW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxNkNDNDc2MEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NzgwRERBRkNEQjAwODg5OUUy
IC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTMxNkNDNTg5MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzE2Q0M1OEUwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01h
dHJpeC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M1OTAwRERCODk1RjAwODg5OUUyIC8qIERP
TVdlYktpdENTU01hdHJpeEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTE1MTA1LDYgKzE1
MjczLDEyIEBACiAJCQkJMUFCMUFFN0EwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21JbkN1cnNvci5w
bmcgaW4gUmVzb3VyY2VzICovLAogCQkJCTFBQjFBRTdCMEMwNTFGREUwMDEzOUY0RiAvKiB6b29t
T3V0Q3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQkNFRkUxREQwRENBNUNGRDAwNzM5
MjE5IC8qIFhTTFRQcm9jZXNzb3IuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzE0ODBE
RDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmlkbCBpbiBSZXNvdXJjZXMg
Ki8sCisJCQkJMzE2Q0MxNEIwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1
bGUuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzE0RTBERDhGRTdCMDA4ODk5RTIgLyog
V2ViS2l0Q1NTTWF0cml4LmlkbCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMzE2Q0MxNTEwREQ4RkU3
QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCBpbiBSZXNvdXJjZXMgKi8s
CisJCQkJMzE2Q0MzRTkwRERBNjdEQTAwODg5OUUyIC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50Lmlk
bCBpbiBSZXNvdXJjZXMgKi8sCisJCQkJMzE2Q0MzRUMwRERBNjdEQTAwODg5OUUyIC8qIFdlYktp
dFRyYW5zaXRpb25FdmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTUyNDUsNyArMTU0MTks
NiBAQAogCQkJCUJDNzcyQjNGMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE4RUE4MDA4MEExOTUxNkUwMEE4RUY1RiAvKiBDU1NTdHls
ZVNoZWV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDODBDOTg3MENEMjk0RUUwMEEwQjdCMyAv
KiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUJDOUFERDgw
MENDNDA5MjIwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODBFNkNFNDBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWVMaXN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUIyQzNEQTI3MEQwMDZDMUQwMEVGNkYyNiAvKiBDU3RyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUJDQjE2QzE3MDk3OUMzQkQwMDQ2Nzc0MSAvKiBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTE2Njk1LDYgKzE2ODY4LDI1IEBACiAJCQkJQkNFRkUxRUEwRENBNUY2
NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0U5
OUVDMzBEQ0E2MjQxMDAxODI2ODMgLyogSlNYU0xUUHJvY2Vzc29yQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQkNCRkI1M0MwRENEMjlDRjAwMTlCM0U1IC8qIEpTRE9NV2luZG93
U2hlbGwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MxNDYwREQ4RkU3QjAwODg5OUUyIC8q
IFdlYktpdENTU0tleWZyYW1lUnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzE0OTBE
RDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTZDQzE0QzBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMxNkNDMTRGMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzE2OTBERDkxNEE1MDA4
ODk5RTIgLyogVHJhbnNmb3JtM0QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MzRTcwRERB
NjdEOTAwODg5OUUyIC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTMxNkNDM0VBMEREQTY3REEwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MzRkQwRERBNkMyMDAwODg5OUUyIC8qIEpTV2ViS2l0
QW5pbWF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MzRkYwRERBNkMyMDAw
ODg5OUUyIC8qIEpTV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTMxNkNDNDBCMEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5tbSBp
biBTb3VyY2VzICovLAorCQkJCTMxNkNDNDBFMEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRU
cmFuc2l0aW9uRXZlbnQubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ1ODBEREFGQ0FBMDA4
ODk5RTIgLyogSlNXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzE2Q0M0NUEwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ1RTBEREFGQ0FBMDA4ODk5RTIgLyogSlNXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ2RTBEREFGQ0RC
MDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLm1tIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzE2Q0M0NzEwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tleWZyYW1lc1J1bGUu
bW0gaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ3NzBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzU4ODBEREI4
OTNGMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MzE2Q0M1OEYwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OwogCQl9OwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCShyZXZpc2lvbiAzMjkxMikKKysr
IFdlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTU2Miw2
ICs1NjIsNyBAQAogCiAjCiAjIENTU19QUk9QX19XRUJLSVRfVFJBTlNJVElPTl9USU1JTkdfRlVO
Q1RJT04KKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fVElNSU5HX0ZVTkNUSU9OCiAjCiBl
YXNlCiBsaW5lYXIKQEAgLTU3MCw2ICs1NzEsMjggQEAKIGVhc2UtaW4tb3V0CiAKICMKKyMgQ1NT
X1BST1BfX1dFQktJVF9UUkFOU0lUSU9OX0RFTEFZCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFU
SU9OX0RFTEFZCisjCitub3cKKworIworIyBDU1NfUFJPUF9fV0VCS0lUX0FOSU1BVElPTl9ESVJF
Q1RJT04KKyMKKyMgYWx0ZXJuYXRlCisKKyMKKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05f
SVRFUkFUSU9OX0NPVU5UCisjCisjIGluZmluaXRlCisKKyMKKyMgQ1NTX1BST1BfX1dFQktJVF9B
TklNQVRJT05fUExBWV9TVEFURQorIworcnVubmluZworcGF1c2VkCisKKyMKICMgQ1NTX1BST1Bf
Wk9PTQogIwogcmVzZXQKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAz
MjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02Niw2ICs2Niw5IEBACiAjaW5jbHVkZSAiU3R5bGVTaGVldExpc3QuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiVXNlckFnZW50U3R5bGVTaGVldHMuaCIKKyNpbmNsdWRlICJX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKICNpbmNsdWRlICJYTUxO
YW1lcy5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KQEAg
LTE3NywxNSArMTgwLDE1IEBACiAjZGVmaW5lIEhBTkRMRV9NQVNLX1ZBTFVFKHByb3AsIFByb3As
IHZhbHVlKSBcCiBIQU5ETEVfRklMTF9MQVlFUl9WQUxVRShtYXNrLCBNYXNrLCBwcm9wLCBQcm9w
LCB2YWx1ZSkKIAotI2RlZmluZSBIQU5ETEVfVFJBTlNJVElPTl9JTkhFUklUX0FORF9JTklUSUFM
KHByb3AsIFByb3ApIFwKKyNkZWZpbmUgSEFORExFX01VTFRJTEFZRVJfSU5IRVJJVF9BTkRfSU5J
VElBTChsYXllclR5cGUsIExheWVyVHlwZSwgcHJvcCwgUHJvcCkgXAogaWYgKGlzSW5oZXJpdCkg
eyBcCi0gICAgVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlv
bnMoKTsgXAotICAgIFRyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKLSAgICBjb25zdCBUcmFu
c2l0aW9uKiBjdXJyUGFyZW50ID0gbV9wYXJlbnRTdHlsZS0+dHJhbnNpdGlvbnMoKTsgXAorICAg
IExheWVyVHlwZSogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUjI3MoKTsg
XAorICAgIExheWVyVHlwZSogcHJldkNoaWxkID0gMDsgXAorICAgIGNvbnN0IExheWVyVHlwZSog
Y3VyclBhcmVudCA9IG1fcGFyZW50U3R5bGUtPmxheWVyVHlwZSMjcygpOyBcCiAgICAgd2hpbGUg
KGN1cnJQYXJlbnQgJiYgY3VyclBhcmVudC0+aXMjI1Byb3AjI1NldCgpKSB7IFwKICAgICAgICAg
aWYgKCFjdXJyQ2hpbGQpIHsgXAogICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxh
eWVyLiovIFwKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBUcmFuc2l0aW9uKCk7IFwKKyAg
ICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBMYXllclR5cGUoKTsgXAogICAgICAgICAgICAgcHJl
dkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKICAgICAgICAgfSBcCiAgICAgICAgIGN1cnJD
aGlsZC0+c2V0IyNQcm9wKGN1cnJQYXJlbnQtPnByb3AoKSk7IFwKQEAgLTE5OSwzNCArMjAyLDM1
IEBACiAgICAgICAgIGN1cnJDaGlsZC0+Y2xlYXIjI1Byb3AoKTsgXAogICAgICAgICBjdXJyQ2hp
bGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogICAgIH0gXAotfSBlbHNlIGlmIChpc0luaXRpYWwp
IHsgXAotICAgIFRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vzc1RyYW5zaXRp
b25zKCk7IFwKLSAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbFRy
YW5zaXRpb24jI1Byb3AoKSk7IFwKKyAgICByZXR1cm47IFwKK30gXAoraWYgKGlzSW5pdGlhbCkg
eyBcCisgICAgTGF5ZXJUeXBlKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3MjI0xheWVyVHlw
ZSMjcygpOyBcCisgICAgY3VyckNoaWxkLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwj
I1Byb3AoKSk7IFwKICAgICBmb3IgKGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBjdXJy
Q2hpbGQ7IGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpKSBcCiAgICAgICAgIGN1cnJDaGls
ZC0+Y2xlYXIjI1Byb3AoKTsgXAorICAgIHJldHVybjsgXAogfQotCi0jZGVmaW5lIEhBTkRMRV9U
UkFOU0lUSU9OX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSB7IFwKLUhBTkRMRV9UUkFOU0lUSU9O
X0lOSEVSSVRfQU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAotaWYgKGlzSW5oZXJpdCB8fCBpc0lu
aXRpYWwpIFwKLSAgICByZXR1cm47IFwKLVRyYW5zaXRpb24qIGN1cnJDaGlsZCA9IG1fc3R5bGUt
PmFjY2Vzc1RyYW5zaXRpb25zKCk7IFwKLVRyYW5zaXRpb24qIHByZXZDaGlsZCA9IDA7IFwKKyAg
ICAKKyNkZWZpbmUgSEFORExFX01VTFRJTEFZRVJfVkFMVUUobGF5ZXJUeXBlLCBMYXllclR5cGUs
IHByb3AsIFByb3AsIHZhbHVlKSB7IFwKK0hBTkRMRV9NVUxUSUxBWUVSX0lOSEVSSVRfQU5EX0lO
SVRJQUwobGF5ZXJUeXBlLCBMYXllclR5cGUsIHByb3AsIFByb3ApIFwKK0xheWVyVHlwZSogY3Vy
ckNoaWxkID0gbV9zdHlsZS0+YWNjZXNzIyNMYXllclR5cGUjI3MoKTsgXAorTGF5ZXJUeXBlKiBw
cmV2Q2hpbGQgPSAwOyBcCiBpZiAodmFsdWUtPmlzVmFsdWVMaXN0KCkpIHsgXAogICAgIC8qIFdh
bGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVy
cyBhcyBuZWVkZWQuICovIFwKICAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlTGlzdCA9IHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsgXAogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgdmFsdWVMaXN0LT5sZW5ndGgoKTsgaSsrKSB7IFwKICAgICAgICAgaWYgKCFjdXJyQ2hp
bGQpIHsgXAotICAgICAgICAgICAgLyogTmVlZCB0byBtYWtlIGEgbmV3IGxheWVyIHRvIGhvbGQg
dGhpcyB2YWx1ZSAqLyBcCi0gICAgICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgVHJhbnNpdGlvbigp
OyBcCi0gICAgICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsgXAorICAgICAg
ICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwKKyAg
ICAgICAgY3VyckNoaWxkID0gbmV3IExheWVyVHlwZSgpOyBcCisgICAgICAgIHByZXZDaGlsZC0+
c2V0TmV4dChjdXJyQ2hpbGQpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBtYXBUcmFuc2l0aW9u
IyNQcm9wKGN1cnJDaGlsZCwgdmFsdWVMaXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsg
XAorICAgICAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW0oaSkpOyBcCiAg
ICAgICAgIHByZXZDaGlsZCA9IGN1cnJDaGlsZDsgXAogICAgICAgICBjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHQoKTsgXAogICAgIH0gXAogfSBlbHNlIHsgXAotICAgIG1hcFRyYW5zaXRpb24j
I1Byb3AoY3VyckNoaWxkLCB2YWx1ZSk7IFwKKyAgICBtYXAjI1Byb3AoY3VyckNoaWxkLCB2YWx1
ZSk7IFwKICAgICBjdXJyQ2hpbGQgPSBjdXJyQ2hpbGQtPm5leHQoKTsgXAogfSBcCiB3aGlsZSAo
Y3VyckNoaWxkKSB7IFwKQEAgLTIzNSw2ICsyMzksMTggQEAKICAgICBjdXJyQ2hpbGQgPSBjdXJy
Q2hpbGQtPm5leHQoKTsgXAogfSB9CiAKKyNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fSU5IRVJJ
VF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCitIQU5ETEVfTVVMVElMQVlFUl9JTkhFUklUX0FO
RF9JTklUSUFMKHRyYW5zaXRpb24sIFRyYW5zaXRpb24sIHByb3AsIFByb3ApCisgICAgCisjZGVm
aW5lIEhBTkRMRV9UUkFOU0lUSU9OX1ZBTFVFKHByb3AsIFByb3AsIHZhbHVlKSBcCitIQU5ETEVf
TVVMVElMQVlFUl9WQUxVRSh0cmFuc2l0aW9uLCBUcmFuc2l0aW9uLCBwcm9wLCBQcm9wLCB2YWx1
ZSkKKyAgICAKKyNkZWZpbmUgSEFORExFX0FOSU1BVElPTl9JTkhFUklUX0FORF9JTklUSUFMKHBy
b3AsIFByb3ApIFwKK0hBTkRMRV9NVUxUSUxBWUVSX0lOSEVSSVRfQU5EX0lOSVRJQUwoYW5pbWF0
aW9uLCBBbmltYXRpb24sIHByb3AsIFByb3ApCisgICAgCisjZGVmaW5lIEhBTkRMRV9BTklNQVRJ
T05fVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIFwKK0hBTkRMRV9NVUxUSUxBWUVSX1ZBTFVFKGFu
aW1hdGlvbiwgQW5pbWF0aW9uLCBwcm9wLCBQcm9wLCB2YWx1ZSkKKyAgICAKICNkZWZpbmUgSEFO
RExFX0lOSEVSSVRfQ09ORChwcm9wSUQsIHByb3AsIFByb3ApIFwKIGlmIChpZCA9PSBwcm9wSUQp
IHsgXAogICAgIG1fc3R5bGUtPnNldCMjUHJvcChtX3BhcmVudFN0eWxlLT5wcm9wKCkpOyBcCkBA
IC0zNjcsMTEgKzM4Myw1NyBAQAogICAgICAgICBtX2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChtYXBwZWRFbGVtZW50U2hlZXQsICptX21lZGl1bSwgdGhpcyk7CiAKICAgICBEZXByZWNh
dGVkUHRyTGlzdEl0ZXJhdG9yPFN0eWxlU2hlZXQ+IGl0KHN0eWxlU2hlZXRzLT5zdHlsZVNoZWV0
cyk7Ci0gICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkKLSAgICAgICAgaWYgKGl0LmN1cnJl
bnQoKS0+aXNDU1NTdHlsZVNoZWV0KCkgJiYgIWl0LmN1cnJlbnQoKS0+ZGlzYWJsZWQoKSkKLSAg
ICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHN0YXRpY19jYXN0PENT
U1N0eWxlU2hlZXQqPihpdC5jdXJyZW50KCkpLCAqbV9tZWRpdW0sIHRoaXMpOworICAgIGZvciAo
OyBpdC5jdXJyZW50KCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LmN1cnJlbnQoKS0+aXNDU1NT
dHlsZVNoZWV0KCkgJiYgIWl0LmN1cnJlbnQoKS0+ZGlzYWJsZWQoKSkgeworICAgICAgICAgICAg
Q1NTU3R5bGVTaGVldCogc2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaXQuY3Vy
cmVudCgpKTsKKyAgICAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHNo
ZWV0LCAqbV9tZWRpdW0sIHRoaXMpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBhZGQg
dGhlIGtleWZyYW1lIHJ1bGVzCisgICAgICAgICAgICBpbnQgbGVuID0gc2hlZXQtPmxlbmd0aCgp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7CisgICAgICAgICAgICAgICAgU3R5bGVCYXNlKiBpdGVtID0gc2hlZXQtPml0ZW0oaSk7Cisg
ICAgICAgICAgICAgICAgaWYgKGl0ZW0tPmlzS2V5ZnJhbWVzUnVsZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHIgPSBzdGF0aWNfY2FzdDxXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlKj4oaXRlbSk7CisgICAgICAgICAgICAgICAgICAgIGFkZEtleWZyYW1l
U3R5bGUoZG9jLCByKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKIH0KIAorLy8gdGhpcyBpcyBhIHNpbXBsaWZpZWQgc3R5bGUgc2V0dGluZyBm
dW5jdGlvbiBmb3Iga2V5ZnJhbWUgc3R5bGVzCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZEtl
eWZyYW1lU3R5bGUoRG9jdW1lbnQqIGRvYywgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSkK
K3sKKyAgICBBdG9taWNTdHJpbmcgcyhydWxlLT5uYW1lKCkpOworICAgIEtleWZyYW1lTGlzdCog
bGlzdDsKKyAgICBpZiAobV9rZXlmcmFtZVJ1bGVNYXAuY29udGFpbnMocy5pbXBsKCkpKQorICAg
ICAgICBsaXN0ID0gbV9rZXlmcmFtZVJ1bGVNYXAuZ2V0KHMuaW1wbCgpKS5nZXQoKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgbGlzdCA9IG5ldyBLZXlmcmFtZUxpc3Qocyk7CisgICAgICAgIG1fa2V5
ZnJhbWVSdWxlTWFwLmFkZChzLmltcGwoKSwgbGlzdCk7CisgICAgfQorICAgIGxpc3QtPmNsZWFy
KCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJ1bGUtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBrZiA9IHJ1bGUtPml0ZW0oaSk7
CisgICAgICAgIG1fc3R5bGUgPSBuZXcgKGRvYy0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUo
KTsKKyAgICAgICAgbV9zdHlsZS0+cmVmKCk7CisgICAgICAgIENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBkZWNsID0ga2YtPnN0eWxlKCk7CisgICAgICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3RD
b25zdEl0ZXJhdG9yPENTU1Byb3BlcnR5PiBlbmQ7CisgICAgICAgIGZvciAoRGVwcmVjYXRlZFZh
bHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGl0ID0gZGVjbC0+dmFsdWVzSXRlcmF0
b3IoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYg
Y3VycmVudCA9ICppdDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoY3VycmVudC5pZCgpLCBj
dXJyZW50LnZhbHVlKCkpOworICAgICAgICAgICAgbGlzdC0+YWRkUHJvcGVydHkoY3VycmVudC5p
ZCgpKTsKKyAgICAgICAgfQorICAgICAgICBsaXN0LT5pbnNlcnQoa2YtPmtleSgpLCAqbV9zdHls
ZSk7CisgICAgICAgIG1fc3R5bGUtPmRlcmVmKGRvYy0+cmVuZGVyQXJlbmEoKSk7CisgICAgICAg
IG1fc3R5bGUgPSAwOworICAgIH0KK30KKyAgICAKKyAgICAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rv
cjo6aW5pdCgpCiB7CiAgICAgbV9lbGVtZW50ID0gMDsKQEAgLTM4OSw4ICs0NTEsMTQgQEAKICAg
ICBkZWxldGUgbV9hdXRob3JTdHlsZTsKICAgICBkZWxldGUgbV91c2VyU3R5bGU7CiAgICAgZGVs
ZXRlQWxsVmFsdWVzKG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAg
YXJlbmFEZXN0cm95KCk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YXJlbmFEZXN0cm95
KCkKK3sKKyAgICBtX2tleWZyYW1lUnVsZU1hcC5jbGVhcigpOworfQorCiBzdGF0aWMgQ1NTU3R5
bGVTaGVldCogcGFyc2VVQVNoZWV0KGNvbnN0IGNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHNp
emUpCiB7CiAgICAgQ1NTU3R5bGVTaGVldCogY29uc3QgcGFyZW50ID0gMDsKQEAgLTc3NSw3ICs4
NDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocy0+aXNDaGVja2VkKCkgIT0g
bV9lbGVtZW50LT5pc0NoZWNrZWQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkpCisgICAg
ICAgICAgICBpZiAoc3R5bGUtPnRyYW5zaXRpb25zKCkgfHwgc3R5bGUtPmFuaW1hdGlvbnMoKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIGJvb2wgY2xhc3Nl
c01hdGNoID0gdHJ1ZTsKQEAgLTEyMzMsOCArMTMwMSw5IEBACiAgICAgc3R5bGUtPmFkanVzdEJh
Y2tncm91bmRMYXllcnMoKTsKICAgICBzdHlsZS0+YWRqdXN0TWFza0xheWVycygpOwogCi0gICAg
Ly8gRG8gdGhlIHNhbWUgZm9yIHRyYW5zaXRpb25zLgorICAgIC8vIERvIHRoZSBzYW1lIGZvciB0
cmFuc2l0aW9ucyBhbmQgYW5pbWF0aW9ucwogICAgIHN0eWxlLT5hZGp1c3RUcmFuc2l0aW9ucygp
OworICAgIHN0eWxlLT5hZGp1c3RBbmltYXRpb25zKCk7CiAKICAgICAvLyBJbXBvcnRhbnQ6IElu
dHJpbnNpYyBtYXJnaW5zIGdldCBhZGRlZCB0byBjb250cm9scyBiZWZvcmUgdGhlIHRoZW1lIGhh
cyBhZGp1c3RlZCB0aGUgc3R5bGUsIHNpbmNlIHRoZSB0aGVtZSB3aWxsCiAgICAgLy8gYWx0ZXIg
Zm9udHMgYW5kIGhlaWdodHMvd2lkdGhzLgpAQCAtNDQ4MSwxMjIgKzQ1NTAsNyBAQAogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm06IHsKICAgICAgICAgSEFORExFX0lOSEVSSVRf
QU5EX0lOSVRJQUwodHJhbnNmb3JtLCBUcmFuc2Zvcm0pOwogICAgICAgICBUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUo
KSkgewotICAgICAgICAgICAgQ1NTVmFsdWVMaXN0KiBsaXN0ID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odmFsdWUpOwotICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3QtPmxlbmd0
aCgpOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICAgICAgICAgIENTU1RyYW5zZm9ybVZhbHVlKiB2YWwgPSBzdGF0aWNfY2FzdDxDU1NU
cmFuc2Zvcm1WYWx1ZSo+KGxpc3QtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soaSkpOwotICAgICAg
ICAgICAgICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzID0gdmFsLT52YWx1ZXMoKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZmlyc3RWYWx1ZSA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5k
c0NoZWNrKDApKTsKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgc3dpdGNoICh2
YWwtPnR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NU
cmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgICAg
ICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeCA9IDEuMDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGRvdWJsZSBzeSA9IDEuMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWwtPnR5cGUoKSA9PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9u
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IENTU1RyYW5zZm9ybVZhbHVl
OjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc2Vjb25kVmFsdWUtPmdl
dERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5ID0gc3g7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9w
ZXJhdGlvbiogc2NhbGUgPSBuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gsIHN5KTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHNjYWxlKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJh
dGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNs
YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFu
c2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAg
ICAgICAgICAgICAgYm9vbCBvazsKLSAgICAgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9
IExlbmd0aCgwLCBGaXhlZCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHkgPSBM
ZW5ndGgoMCwgRml4ZWQpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgp
ID09IENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0VmFsdWUs
IG1fc3R5bGUsICZvayk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHggPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgbV9z
dHlsZSwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkg
PT0gQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbikgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzLT5sZW5ndGgoKSA+IDEpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBz
ZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVt
V2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5ID0gY29udmVydFRvTGVuZ3RoKHNlY29uZFZhbHVlLCBtX3N0eWxlLCAmb2spOwotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24qIHRy
YW5zbGF0ZSA9IG5ldyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24odHgsIHR5KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHRyYW5zbGF0ZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRp
b246IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RWYWx1
ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFu
Z2xlID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgUm90YXRlVHJh
bnNmb3JtT3BlcmF0aW9uKiByb3RhdGUgPSBuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGFu
Z2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHJvdGF0ZSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IGFuZ2xlWSA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZp
cnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPnR5cGUoKSA9PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRp
b24pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gYW5nbGU7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmds
ZVggPSBhbmdsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkg
PT0gQ1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25k
VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhv
dXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bmdsZVkgPSBzZWNvbmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuZ2xlWSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYW5nbGVZID0gZ3JhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFuZ2xlWSA9IGFuZ2xlWDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24qIHNrZXcgPSBuZXcgU2tld1RyYW5z
Zm9ybU9wZXJhdGlvbihhbmdsZVgsIGFuZ2xlWSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBv
cGVyYXRpb25zLmFwcGVuZChza2V3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVHJhbnNm
b3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjogewotICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygy
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogZm91cnRoVmFs
dWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1
ZSogZmlmdGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlKiBzaXh0aFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soNSkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uKiBtYXRyaXggPSBuZXcgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uKGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmRWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VydGhWYWx1ZS0+Z2V0RG91YmxlVmFsdWUo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWZ0aFZhbHVlLT5nZXREb3VibGVW
YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpeHRoVmFsdWUtPmdldERv
dWJsZVZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
bWF0cml4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICB9ICAgCi0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlv
bnModmFsdWUsIG1fc3R5bGUsIG9wZXJhdGlvbnMpOwogICAgICAgICBtX3N0eWxlLT5zZXRUcmFu
c2Zvcm0ob3BlcmF0aW9ucyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NjMyLDI0ICs0
NTg2LDUxIEBACiAgICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybU9yaWdpblkobCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgor
ICAgICAgICBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRp
b25zKCk7CisgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKKyAgICAgICAgICAgIG1fc3R5bGUt
PmluaGVyaXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAg
ICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUoZGVsYXksIERlbGF5LCB2YWx1ZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246Cisg
ICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUoYW5pbWF0aW9uRGlyZWN0aW9uLCBBbmltYXRp
b25EaXJlY3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVF
KGR1cmF0aW9uLCBEdXJhdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAgICAgIEhBTkRMRV9B
TklNQVRJT05fVkFMVUUoYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsIEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25OYW1lOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGFuaW1hdGlv
bk5hbWUsIEFuaW1hdGlvbk5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICAgICAgSEFORExFX0FOSU1B
VElPTl9WQUxVRShhbmltYXRpb25QbGF5U3RhdGUsIEFuaW1hdGlvblBsYXlTdGF0ZSwgdmFsdWUp
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGlt
aW5nRnVuY3Rpb246CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUodGltaW5nRnVuY3Rp
b24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQogICAgICAg
ICAgICAgbV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0lu
aGVyaXQpCiAgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRT
dHlsZS0+dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgorICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxV
RShkZWxheSwgRGVsYXksIHZhbHVlKQorICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05f
VkFMVUUoZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIEhBTkRM
RV9UUkFOU0lUSU9OX1ZBTFVFKHJlcGVhdENvdW50LCBSZXBlYXRDb3VudCwgdmFsdWUpCisgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKKyAgICAgICAgSEFORExF
X1RSQU5TSVRJT05fVkFMVUUodHJhbnNpdGlvblByb3BlcnR5LCBUcmFuc2l0aW9uUHJvcGVydHks
IHZhbHVlKQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodGlt
aW5nRnVuY3Rpb24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIEhBTkRM
RV9UUkFOU0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCi0gICAgICAgIHJl
dHVybjsKICAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgQ1NTUHJvcGVydHlGb250U3RyZXRjaDoKQEAgLTQ4OTAsODcgKzQ4NzEsMTQ3IEBACiAg
ICAgbGF5ZXItPnNldFlQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBUcmFuc2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZh
bHVlKQordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9u
KiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1
ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+
c2V0RHVyYXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSk7Cisg
ICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFs
VGltaW5nRnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYg
KHZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUq
IHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7
CisgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVMaW5lYXI6CisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb24pKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgorICAg
ICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9u
KCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVh
c2VJbjoKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1p
bmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAxLjAsIDEuMCkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VP
dXQ6CisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5n
RnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjAsIC4wLCAuNTgsIDEuMCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91
dDoKKyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdG
dW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAuNTgsIDEuMCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgaWYgKHZhbHVlLT5pc1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblZhbHVlKCkp
IHsKKyAgICAgICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSogdGltaW5nRnVuY3Rpb24gPSBzdGF0
aWNfY2FzdDxDU1NUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOworICAgICAgICB0cmFuc2l0
aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uLCB0aW1pbmdGdW5jdGlvbi0+eDEoKSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRpbWlu
Z0Z1bmN0aW9uLT54MigpLCB0aW1pbmdGdW5jdGlvbi0+eTIoKSkpOworICAgIH0KK30KIAordm9p
ZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBEdXJhdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NW
YWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oUmVu
ZGVyU3R5bGU6OmluaXRpYWxEdXJhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsK
LQorICAgIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+
cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAgdHJh
bnNpdGlvbi0+c2V0RHVyYXRpb24oaW50KDEwMDAqcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKSkpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+
Z2V0RmxvYXRWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZl
VHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAgICAgIHRyYW5zaXRpb24t
PnNldER1cmF0aW9uKGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAg
ICAgIHRyYW5zaXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVl
KCkvMTAwMC4wZik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblJl
cGVhdENvdW50KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwRGVsYXkoVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1
ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6
Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoUmVuZGVy
U3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSk7CisgICAgICAgIGFuaW1hdGlv
bi0+c2V0RGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgYW5pbWF0aW9uLT5zZXREZWxh
eSgwKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUykKKyAgICAgICAgICAgIGFuaW1hdGlv
bi0+c2V0RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLmYpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVl
LT5nZXRGbG9hdFZhbHVlKCkpOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjpt
YXBBbmltYXRpb25EaXJlY3Rpb24oVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lO
SVRJQUwpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25EaXJlY3Rpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRBbmlt
YXRpb25EaXJlY3Rpb24ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbHRl
cm5hdGUpOworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50KFRyYW5zaXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlm
ICh2YWx1ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBbmltYXRpb25JdGVyYXRpb25Db3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVy
bjsKLQorICAgIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRSZXBlYXRDb3VudCgtMSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uSXRlcmF0
aW9uQ291bnQoLTEpOwogICAgIGVsc2UKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291
bnQoaW50KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgYW5pbWF0
aW9uLT5zZXRBbmltYXRpb25JdGVyYXRpb25Db3VudChpbnQocHJpbWl0aXZlVmFsdWUtPmdldEZs
b2F0VmFsdWUoKSkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2
b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbk5hbWUoVHJhbnNpdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSk7
CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTmFtZShSZW5kZXJTdHlsZTo6aW5pdGlh
bEFuaW1hdGlvbk5hbWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgQ1NT
UHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZSk7CisgICAgCisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgp
ID09IENTU1ZhbHVlTm9uZSkgeworICAgICAgICBhbmltYXRpb24tPnNldElzTm9uZUFuaW1hdGlv
bih0cnVlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk5h
bWUocHJpbWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAg
Ly8gcmVzb2x2ZSB0byB0aGUga2V5ZnJhbWVzCisgICAgICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+
IGtleWZyYW1lID0gZmluZEtleWZyYW1lUnVsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFs
dWUoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUp
OworICAgIH0KK30KIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5n
ZXRJZGVudCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgotICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKExpbmVh
clRpbWluZ0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBj
YXNlIENTU1ZhbHVlRWFzZToKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdG
dW5jdGlvbihUaW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlSW46Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+
c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlv
biwgLjQyLCAuMCwgMS4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVFYXNlT3V0OgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNl
dFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24s
IC4wLCAuMCwgLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVFYXNlSW5PdXQ6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0
VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwg
LjQyLCAuMCwgLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQor
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25QbGF5U3RhdGUoVHJhbnNpdGlvbiog
YW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5
cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRB
bmltYXRpb25QbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUo
KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzVHJhbnNpdGlv
blRpbWluZ0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NUaW1pbmdGdW5jdGlvblZhbHVl
KiB0aW1pbmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUqPih2
YWx1ZSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0
aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIHRpbWluZ0Z1bmN0aW9uLT54MSgpLCB0aW1p
bmdGdW5jdGlvbi0+eTEoKSwgdGltaW5nRnVuY3Rpb24tPngyKCksIHRpbWluZ0Z1bmN0aW9uLT55
MigpKSk7Ci0gICAgfQorICAgIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1
ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGFuaW1hdGlv
bi0+c2V0QW5pbWF0aW9uUGxheVN0YXRlKChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBD
U1NWYWx1ZVBhdXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlp
bmcpOwogfQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25Qcm9wZXJ0eShU
cmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVl
LT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJh
bnNpdGlvbi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUHJvcGVy
dHkoKSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eShSZW5kZXJT
dHlsZTo6aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLQorICAgIAogICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAg
cmV0dXJuOwotCisgICAgCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0g
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+
c2V0UHJvcGVydHkocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpOworICAgIHRyYW5zaXRpb24t
PnNldFRyYW5zaXRpb25Qcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSk7CiB9CiAK
IHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqIHZhbHVl
LCBOaW5lUGllY2VJbWFnZSYgaW1hZ2UpCkBAIC01MzIyLDQgKzUzNjMsMTkxIEBACiAgICAgfQog
fQogCitib29sIENTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NT
VmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKQoreworICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsK
KyAgICBpZiAoaW5WYWx1ZSAmJiAhaW5WYWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7CisgICAg
ICAgIENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KGluVmFs
dWUpOworICAgICAgICB1bnNpZ25lZCBzaXplID0gbGlzdC0+bGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlKiB2YWwgPSBzdGF0aWNfY2FzdDxXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZSo+KGxpc3QtPml0ZW0oaSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZmlyc3RWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
LT5pdGVtKDApKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoICh2YWwtPm9wZXJh
dGlvblR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAg
ICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlUcmFuc2Zvcm1PcGVyYXRp
b246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVa
VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIHN4ID0gMS4wOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3kgPSAxLjA7
CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBzeiA9IDEuMDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpT
Y2FsZVpUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBzeiA9IGZp
cnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVlU
cmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHN4ID0gZmlyc3RWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAyKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzeiA9IHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWwtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KHZhbC0+aXRlbSgxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5
ID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeSA9IHN4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
biogc2NhbGUgPSBuZXcgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24oc3gsIHN5LCBzeik7CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHNjYWxlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAg
ICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNm
b3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAg
ICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGUzRFRy
YW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAgICAgICAgICBib29sIG9rID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR4ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAg
ICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAg
ICAgICAgICAgTGVuZ3RoIHR6ID0gTGVuZ3RoKDAsIEZpeGVkKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpU
cmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgdHog
PSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgaW5TdHlsZSwgJm9rKTsKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZSBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAg
ICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBpblN0eWxlLCAmb2spOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICB0eCA9
IGNvbnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBpblN0eWxlLCAmb2spOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpICE9IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAyKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMikpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eiA9IGNvbnZlcnRUb0xlbmd0aCh0aGlyZFZhbHVlLCBpblN0eWxlLCAmb2sp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0aChzZWNvbmRWYWx1ZSwgaW5TdHlsZSwgJm9rKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGlmICghb2spCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24qIHRyYW5zbGF0ZSA9IG5ldyBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
dHgsIHR5LCB0eik7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHRyYW5z
bGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zv
cm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAg
ICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVpUcmFuc2Zvcm1PcGVy
YXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHggPSAwOworICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgeSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB6ID0gMDsK
KyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0dS
QUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFuZ2xlKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlv
blR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWFRyYW5zZm9ybU9wZXJh
dGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSAxOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHkg
PSAxOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB6
ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKiByb3Rh
dGUgPSBuZXcgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKHgsIHksIHosIGFuZ2xlKTsKKyAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQocm90YXRlKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAg
ICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEpKTsKKyAgICAgICAgICAgICAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHRoaXJkVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZSo+KHZhbC0+aXRlbSgyKSk7CisgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBmb3VydGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
LT5pdGVtKDMpKTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHggPSBmaXJzdFZhbHVlLT5n
ZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgeSA9IHNlY29uZFZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgeiA9IHRo
aXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBh
bmdsZSA9IGZvdXJ0aFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoZm91cnRoVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7
CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvdXJ0aFZhbHVlLT5wcmltaXRpdmVUeXBl
KCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIFJvdGF0ZVRy
YW5zZm9ybU9wZXJhdGlvbiogcm90YXRlID0gbmV3IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih4
LCB5LCB6LCBhbmdsZSk7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHJv
dGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBhbmdsZVggPSAwOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5n
bGVZID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFuZ2xlID0gcmFkMmRlZyhhbmdsZSk7CisgICAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX0dSQUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFu
Z2xlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFuZ2xlWSA9IGFuZ2xlOworICAgICAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xlWCA9IGFuZ2xlOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYW5nbGVZID0gc2Vjb25kVmFsdWUtPmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWNvbmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYW5nbGVZID0gcmFkMmRlZyhhbmdsZVkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChzZWNvbmRWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlWSA9IGdyYWQyZGVnKGFuZ2xlWSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBTa2V3VHJhbnNmb3JtT3Bl
cmF0aW9uKiBza2V3ID0gbmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5nbGVYLCBhbmdsZVkp
OworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChza2V3KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNh
c2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjogewor
ICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OworICAgICAgICAgICAg
ICAgICAgICBtYXRyaXguc2V0QShzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+
aXRlbSgwKSktPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5z
ZXRCKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEpKS0+Z2V0Rmxv
YXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0cml4LnNldEMoc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMikpLT5nZXRGbG9hdFZhbHVlKCkpOworICAg
ICAgICAgICAgICAgICAgICBtYXRyaXguc2V0RChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbC0+aXRlbSgzKSktPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAg
IG1hdHJpeC5zZXRFKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDQp
KS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgbWF0cml4LnNldEYoc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oNSkpLT5nZXRGbG9hdFZhbHVl
KCkpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChuZXcgTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uKG1hdHJpeCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZTo6TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAg
VHJhbnNmb3JtM0QgbWF0cml4KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5p
dGVtKDApKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMSkpLT5n
ZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgyKSktPmdldEZsb2F0VmFs
dWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDMpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWwtPml0ZW0oNCkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+
KHZhbC0+aXRlbSg1KSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVt
KDYpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oNykpLT5nZXRG
bG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSg4KSktPmdldEZsb2F0VmFsdWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDkpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW0oMTApKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2
YWwtPml0ZW0oMTEpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0o
MTIpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMTMpKS0+Z2V0
RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMTQpKS0+Z2V0RmxvYXRWYWx1
ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMTUpKS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQobmV3IE1hdHJpeDNEVHJhbnNmb3Jt
T3BlcmF0aW9uKG1hdHJpeCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9ICAgCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIG91dE9wZXJhdGlvbnMgPSBvcGVyYXRpb25zOworICAgIHJldHVybiB0cnVl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5o
CShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQAogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0
eWxlU2hlZXRMaXN0OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKK2NsYXNzIFdlYktpdENTU0tleWZy
YW1lc1J1bGU7CiAKIGNsYXNzIE1lZGlhUXVlcnlSZXN1bHQgewogcHVibGljOgpAQCAtMTI5LDYg
KzEzMCwyNCBAQAogICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKICAgICAg
ICAgdm9pZCB2aXNpdGVkU3RhdGVDaGFuZ2VkKHVuc2lnbmVkIHZpc2l0ZWRIYXNoKTsKIAorICAg
ICAgICBLZXlmcmFtZUxpc3QqIGZpbmRLZXlmcmFtZVJ1bGUoY29uc3QgU3RyaW5nJiBuYW1lKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF0b21pY1N0cmlu
ZyBzKG5hbWUpOworICAgICAgICAgICAgaWYgKCFtX2tleWZyYW1lUnVsZU1hcC5jb250YWlucyhz
LmltcGwoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4g
bV9rZXlmcmFtZVJ1bGVNYXAuZmluZChzLmltcGwoKSkuZ2V0KCktPnNlY29uZC5nZXQoKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKERvY3VtZW50
KiBkb2MsIFdlYktpdENTU0tleWZyYW1lc1J1bGUqIHJ1bGUpOworICAgICAgICAKKyAgICAgICAg
c3RhdGljIHZvaWQgY3JlYXRlVGltaW5nRnVuY3Rpb24oQ1NTVmFsdWUqIGluVmFsdWUsIFRpbWlu
Z0Z1bmN0aW9uJiBvdXRUaW1pbmdGdW5jdGlvbik7CisgICAgICAgIHN0YXRpYyBib29sIGNyZWF0
ZVRyYW5zZm9ybU9wZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0
eWxlLCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICAgICAgCisgICAg
ICAgIHZvaWQgYXJlbmFEZXN0cm95KCk7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAg
IGVudW0gU2VsZWN0b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2Fs
bHksIFNlbGVjdG9yRmFpbHNDb21wbGV0ZWx5IH07CiAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hl
Y2tTZWxlY3RvcihDU1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzQW5jZXN0b3IsIGJvb2wg
aXNTdWJTZWxlY3Rvcik7CkBAIC0xNjIsNyArMTgxLDEwIEBACiAgICAgICAgIEJvcmRlckRhdGEg
bV9ib3JkZXJEYXRhOwogICAgICAgICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAg
ICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7Ci0KKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYg
SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lTGlzdD4gPiBLZXlmcmFt
ZVJ1bGVNYXA7CisgICAgICAgIEtleWZyYW1lUnVsZU1hcCBtX2tleWZyYW1lUnVsZU1hcDsKKyAg
ICAgICAgCiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90
WWV0QXZhaWxhYmxlKCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCkBAIC0x
ODUsOSArMjA3LDE0IEBACiAgICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIq
LCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwg
Q1NTVmFsdWUqKTsKIAotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0
aW9uKiwgQ1NTVmFsdWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQo
VHJhbnNpdGlvbiosIENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcERlbGF5
KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcER1cmF0aW9uKFRyYW5z
aXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcFRpbWluZ0Z1bmN0aW9uKFRyYW5z
aXRpb24qLCBDU1NWYWx1ZSopOworCisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9u
KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJh
dGlvbkNvdW50KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1h
dGlvbk5hbWUoVHJhbnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0
aW9uUGxheVN0YXRlKFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcFRy
YW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2b2lk
IG1hcE5pbmVQaWVjZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKSW5kZXg6IFdl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
CisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKK21vZHVsZSBjc3MgeworCisgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgPzoK
KyAgICBpbnRlcmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBI
YXNJbmRleEdldHRlciwKKyAgICAgICAgSW50ZXJmYWNlVVVJRD00OWY1NjQ0YS01ZGJiLTRlMzEt
YWM2Yi05NDQ2YWUzODk1YzksCisgICAgICAgIEltcGxlbWVudGF0aW9uVVVJRD1hN2M3OGFhYS01
ODgzLTRlZjItYThiZC1mMmYxYTFmZDAyNWEKKyAgICBdIFdlYktpdENTU0tleWZyYW1lc1J1bGUg
OiBDU1NSdWxlIHsKKworICAgICAgICBhdHRyaWJ1dGUgW0NvbnZlcnROdWxsU3RyaW5nVG89TnVs
bCwgQ29udmVydE51bGxUb051bGxTdHJpbmddIERPTVN0cmluZyBuYW1lOworICAgICAgICByZWFk
b25seSBhdHRyaWJ1dGUgQ1NTUnVsZUxpc3QgY3NzUnVsZXM7CisgICAgICAgIAorICAgICAgICB2
b2lkIGluc2VydFJ1bGUoaW4gRE9NU3RyaW5nIHJ1bGUpOworICAgICAgICB2b2lkIGRlbGV0ZVJ1
bGUoaW4gRE9NU3RyaW5nIGtleSk7CisgICAgICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSBmaW5k
UnVsZShpbiBET01TdHJpbmcga2V5KTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCShyZXZpc2lvbiAz
MjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1J1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyAr
NDEsOSBAQAogICAgICAgICBJTVBPUlRfUlVMRSwKICAgICAgICAgTUVESUFfUlVMRSwKICAgICAg
ICAgRk9OVF9GQUNFX1JVTEUsCi0gICAgICAgIFBBR0VfUlVMRQorICAgICAgICBQQUdFX1JVTEUs
CisgICAgICAgIFdFQktJVF9LRVlGUkFNRVNfUlVMRSwKKyAgICAgICAgV0VCS0lUX0tFWUZSQU1F
X1JVTEUKICAgICB9OwogCiAgICAgQ1NTUnVsZShTdHlsZUJhc2UqIHBhcmVudCkKSW5kZXg6IFdl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTU5IEBACisvKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRp
b24gZm9yIEtERS4KKyAqCisgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5v
cmcpCisgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICog
Q29weXJpZ2h0IChDKSAyMDAyLCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIldlYktp
dENTU0tleWZyYW1lc1J1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIK
KyNpbmNsdWRlICJDU1NSdWxlTGlzdC5oIgorI2luY2x1ZGUgIlN0eWxlU2hlZXQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlKFN0eWxlQmFzZSogcGFyZW50KSAKKyAgICA6IENTU1J1bGUocGFyZW50KQorICAg
ICwgbV9sc3RDU1NSdWxlcyhuZXcgQ1NTUnVsZUxpc3QoKSkKK3sKK30KKworV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZTo6fldlYktpdENTU0tleWZyYW1lc1J1bGUoKQoreworICAgIGludCBsZW5ndGgg
PSBtX2xzdENTU1J1bGVzLT5sZW5ndGgoKTsKKyAgICBpZiAobGVuZ3RoID09IDApCisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykK
KyAgICAgICAgbV9sc3RDU1NSdWxlcy0+aXRlbShpKS0+c2V0UGFyZW50KDApOworfQorCitTdHJp
bmcgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6bmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
bmFtZTsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKGNvbnN0IFN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgLyplYyovKQoreworICAgIG1fbmFtZSA9IG5hbWU7
Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShTdHJpbmcgbmFtZSkK
K3sKKyAgICBtX25hbWUgPSBuYW1lOworfQorCit1bnNpZ25lZCBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlOjpsZW5ndGgoKSBjb25zdAoreworICAgIHJldHVybiBtX2xzdENTU1J1bGVzLmdldCgpLT5s
ZW5ndGgoKTsKK30KKworV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlOjppdGVtKHVuc2lnbmVkIGluZGV4KQoreworICAgIENTU1J1bGUqIHJ1bGUgPSBtX2xzdENT
U1J1bGVzLmdldCgpLT5pdGVtKGluZGV4KTsKKyAgICByZXR1cm4gKHJ1bGUgJiYgcnVsZS0+aXNL
ZXlmcmFtZVJ1bGUoKSkgPyBzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqPihydWxl
KSA6IDA7Cit9CisKK2NvbnN0IFdlYktpdENTU0tleWZyYW1lUnVsZSogV2ViS2l0Q1NTS2V5ZnJh
bWVzUnVsZTo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBDU1NSdWxlKiBydWxl
ID0gbV9sc3RDU1NSdWxlcy5nZXQoKS0+aXRlbShpbmRleCk7CisgICAgcmV0dXJuIChydWxlICYm
IHJ1bGUtPmlzS2V5ZnJhbWVSdWxlKCkpID8gc3RhdGljX2Nhc3Q8Y29uc3QgV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKj4ocnVsZSkgOiAwOworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6
Omluc2VydChXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIHJ1bGUpCit7CisgICAgZmxvYXQga2V5ID0g
cnVsZS0+a2V5QXNQZXJjZW50KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoaXRlbShpKS0+a2V5QXNQZXJjZW50KCkgPT0ga2V5
KSB7CisgICAgICAgICAgICBtX2xzdENTU1J1bGVzLmdldCgpLT5kZWxldGVSdWxlKGkpOworICAg
ICAgICAgICAgbV9sc3RDU1NSdWxlcy5nZXQoKS0+aW5zZXJ0UnVsZShydWxlLCBpKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXRlbShpKS0+a2V5QXNQZXJj
ZW50KCkgPiBrZXkpIHsKKyAgICAgICAgICAgIC8vIGluc2VydCBiZWZvcmUKKyAgICAgICAgICAg
IG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmluc2VydFJ1bGUocnVsZSwgaSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gYXBwZW5kCisgICAgbV9sc3RD
U1NSdWxlcy5nZXQoKS0+YXBwZW5kKHJ1bGUpOworICAgIHN0eWxlc2hlZXQoKS0+c3R5bGVTaGVl
dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxl
KGNvbnN0IFN0cmluZyYgcnVsZSkKK3sKKyAgICBDU1NQYXJzZXIgcCh1c2VTdHJpY3RQYXJzaW5n
KCkpOworICAgIFJlZlB0cjxDU1NSdWxlPiBuZXdSdWxlID0gcC5wYXJzZUtleWZyYW1lUnVsZShw
YXJlbnRTdHlsZVNoZWV0KCksIHJ1bGUpOworICAgIGlmIChuZXdSdWxlLmdldCgpICYmIG5ld1J1
bGUuZ2V0KCktPmlzS2V5ZnJhbWVSdWxlKCkpCisgICAgICAgIGluc2VydChzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqPihuZXdSdWxlLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZTo6ZGVsZXRlUnVsZShjb25zdCBTdHJpbmcmIHMpCit7CisgICAgZmxv
YXQga2V5ID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjprZXlTdHJpbmdUb0Zsb2F0KHMpOworICAg
IGludCBpID0gZmluZFJ1bGVJbmRleChrZXkpOworICAgIGlmIChpID49IDApIHsKKyAgICAgICAg
bV9sc3RDU1NSdWxlcy5nZXQoKS0+ZGVsZXRlUnVsZShpKTsKKyAgICAgICAgc3R5bGVzaGVldCgp
LT5zdHlsZVNoZWV0Q2hhbmdlZCgpOworICAgIH0KK30KKworV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpmaW5kUnVsZShjb25zdCBTdHJpbmcmIHMpCit7Cisg
ICAgZmxvYXQga2V5ID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjprZXlTdHJpbmdUb0Zsb2F0KHMp
OworICAgIGludCBpID0gZmluZFJ1bGVJbmRleChrZXkpOworICAgIHJldHVybiAoaSA+PSAwKSA/
IGl0ZW0oaSkgOiAwOworfQorCitpbnQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6ZmluZFJ1bGVJ
bmRleChmbG9hdCBrZXkpIGNvbnN0Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKGl0ZW0oaSktPmtleUFzUGVyY2VudCgpID09IGtl
eSkKKyAgICAgICAgICAgIHJldHVybiBpOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwor
U3RyaW5nIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNzc1RleHQoKSBjb25zdAoreworICAgIFN0
cmluZyByZXN1bHQgPSAiQC13ZWJraXQta2V5ZnJhbWVzICI7CisgICAgcmVzdWx0ICs9IG1fbmFt
ZTsKKyAgICByZXN1bHQgKz0gIiB7IFxuIjsKKworICAgIGlmIChtX2xzdENTU1J1bGVzKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGxlbiA9IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIHJlc3VsdCAr
PSAiICAiOworICAgICAgICAgICAgcmVzdWx0ICs9IG1fbHN0Q1NTUnVsZXMtPml0ZW0oaSktPmNz
c1RleHQoKTsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiXG4iOworICAgICAgICB9CisgICAgfQor
CisgICAgcmVzdWx0ICs9ICJ9IjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw2IEBACiAj
aW5jbHVkZSAiQ1NTU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIKICNpbmNs
dWRlICJDU1NTdHlsZVNoZWV0LmgiCi0jaW5jbHVkZSAiQ1NTVHJhbnNmb3JtVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKQEAgLTYyLDYgKzYxLDkgQEAKICNpbmNs
dWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlNoYWRvd1ZhbHVlLmgi
CisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCiAj
aW5jbHVkZSA8a2pzL2R0b2EuaD4KIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKQEAg
LTI1Miw2ICsyNTQsMjAgQEAKICAgICByZXR1cm4gcnVsZS5yZWxlYXNlKCk7CiB9CiAKK1Bhc3NS
ZWZQdHI8Q1NTUnVsZT4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0
ICpzaGVldCwgY29uc3QgU3RyaW5nICZzdHJpbmcpCit7CisgICAgc3R5bGVFbGVtZW50ID0gc2hl
ZXQ7CisgICAgCisgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LWtleWZyYW1lLXJ1bGV7ICIsIHN0
cmluZywgIn0gIik7CisgICAgCisgICAgQ1NTUGFyc2VyKiBvbGQgPSBjdXJyZW50UGFyc2VyOwor
ICAgIGN1cnJlbnRQYXJzZXIgPSB0aGlzOworICAgIGNzc3l5cGFyc2UodGhpcyk7CisgICAgY3Vy
cmVudFBhcnNlciA9IG9sZDsKKyAgICAKKyAgICByZXR1cm4ga2V5ZnJhbWUucmVsZWFzZSgpOwor
fQorCiBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biAqZGVjbGFyYXRpb24sIGludCBfaWQsIGNvbnN0IFN0cmluZyAmc3RyaW5nLCBib29sIF9pbXBv
cnRhbnQpCiB7CiAgICAgc3R5bGVFbGVtZW50ID0gZGVjbGFyYXRpb24tPnN0eWxlc2hlZXQoKTsK
QEAgLTEzMjYsOCArMTM0Miw4IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OgogICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRDb3VudDoKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uOgogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uUHJvcGVydHk6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7CkBAIC0x
MzM3LDYgKzEzNTMsMTkgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246CisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QW5pbWF0aW9uTmFtZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxh
eVN0YXRlOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlv
bjogeworICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKKyAgICAgICAgaWYgKHBhcnNlQW5p
bWF0aW9uUHJvcGVydHkocHJvcElkLCB2YWwpKSB7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShw
cm9wSWQsIHZhbC5yZWxlYXNlKCksIGltcG9ydGFudCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXJnaW5Db2xsYXBzZTogewogICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRNYXJnaW5Ub3BDb2xsYXBzZSwKICAgICAgICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQm90dG9tQ29sbGFwc2UgfTsKQEAgLTE1ODUsNiAr
MTYxNCw4IEBACiAgICAgICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzWzJdID0geyBDU1NQcm9wZXJ0
eVdlYmtpdFRleHRTdHJva2VXaWR0aCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3Ig
fTsKICAgICAgICAgcmV0dXJuIHBhcnNlU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgMiwg
aW1wb3J0YW50KTsKICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbjoK
KyAgICAgICAgcmV0dXJuIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGltcG9ydGFudCk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246CiAgICAgICAgIHJldHVybiBwYXJzZVRy
YW5zaXRpb25TaG9ydGhhbmQoaW1wb3J0YW50KTsKICAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxp
ZDoKQEAgLTE3MzksMTAgKzE3NzAsNzEgQEAKICAgICAgICAgbHZhbCA9IHJ2YWw7CiB9CiAKK2Jv
b2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkKK3sK
KyAgICBjb25zdCBpbnQgcHJvcGVydGllc1tdID0geyAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRp
b25OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkR1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkRpcmVjdGlvbiB9OworICAgIGNvbnN0IGludCBudW1Qcm9wZXJ0aWVzID0gc2l6
ZW9mKHByb3BlcnRpZXMpIC8gc2l6ZW9mKHByb3BlcnRpZXNbMF0pOworICAgIAorICAgIFNob3J0
aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uKTsKKyAgICAK
KyAgICBib29sIHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxzZSB9OyAvLyBj
b21waWxlciB3aWxsIHJlcGVhdCBmYWxzZSBhcyBuZWNlc3NhcnkKKyAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlc1tudW1Qcm9wZXJ0aWVzXTsKKyAgICAKKyAgICBpbnQgaTsKKyAgICB3aGlsZSAo
dmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKKyAgICAgICAgVmFsdWUqIHZhbCA9IHZhbHVlTGlzdC0+
Y3VycmVudCgpOworICAgICAgICBpZiAodmFsLT51bml0ID09IFZhbHVlOjpPcGVyYXRvciAmJiB2
YWwtPmlWYWx1ZSA9PSAnLCcpIHsKKyAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kLiAgRmls
bCBpbiBhbGwgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBpbml0aWFsIHZhbHVlLgorICAgICAg
ICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVt
UHJvcGVydGllczsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtp
XSkKKyAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgbmV3
IENTU0luaXRpYWxWYWx1ZSh0cnVlKSk7CisgICAgICAgICAgICAgICAgcGFyc2VkUHJvcGVydHlb
aV0gPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghdmFsdWVMaXN0LT5j
dXJyZW50KCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChpID0gMDsgIWZvdW5kICYm
IGkgPCBudW1Qcm9wZXJ0aWVzOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghcGFyc2VkUHJvcGVy
dHlbaV0pIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbDsKKyAgICAgICAg
ICAgICAgICBpZiAocGFyc2VBbmltYXRpb25Qcm9wZXJ0eShwcm9wZXJ0aWVzW2ldLCB2YWwpKSB7
CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZm91bmQgPSB0cnVlOwor
ICAgICAgICAgICAgICAgICAgICBhZGRUcmFuc2l0aW9uVmFsdWUodmFsdWVzW2ldLCB2YWwucmVs
ZWFzZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGF0IGxlYXN0IG9uZSBtYXRjaCwg
dGhpcyBpcyBhbgorICAgICAgICAvLyBpbnZhbGlkIHNob3J0aGFuZCBhbmQgd2UgaGF2ZSB0byBp
Z25vcmUgaXQKKyAgICAgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMgd2l0
aCB0aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsg
KytpKSB7CisgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCisgICAgICAgICAgICBhZGRU
cmFuc2l0aW9uVmFsdWUodmFsdWVzW2ldLCBuZXcgQ1NTSW5pdGlhbFZhbHVlKHRydWUpKTsKKyAg
ICB9CisgICAgCisgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQu
CisgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykKKyAgICAgICAgYWRkUHJv
cGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKKyAg
ICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlv
blNob3J0aGFuZChib29sIGltcG9ydGFudCkKIHsKLSAgICBjb25zdCBpbnQgcHJvcGVydGllc1td
ID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eSwgQ1NTUHJvcGVydHlXZWJr
aXRUcmFuc2l0aW9uRHVyYXRpb24sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uLCBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zaXRpb25SZXBlYXRDb3VudCB9OworICAgIGNvbnN0IGludCBwcm9wZXJ0aWVzW10gPSB7
IENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uIH07CiAgICAgY29uc3QgaW50IG51bVByb3BlcnRpZXMgPSBzaXplb2YocHJvcGVy
dGllcykgLyBzaXplb2YocHJvcGVydGllc1swXSk7CiAgICAgCiAgICAgU2hvcnRoYW5kU2NvcGUg
c2NvcGUodGhpcywgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uKTsKQEAgLTIyMzksMTYgKzIz
MzEsMTYgQEAKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQotCi1QYXNzUmVmUHRyPENTU1Zh
bHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCkKKyAgICAKK1Bhc3NSZWZQ
dHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKQogewogICAg
IFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAgIGlmICh2YWxpZFVuaXQo
dmFsdWUsIEZUaW1lLCBzdHJpY3QpKQotICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZh
bHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51
bml0KTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsIHx8IHZhbHVlLT5pZCA9
PSBDU1NWYWx1ZUFsdGVybmF0ZSkKKyAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1
ZSh2YWx1ZS0+aWQpOwogICAgIHJldHVybiAwOwogfQotCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCkKKyAgICAKK1Bhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpCiB7CiAg
ICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUluZmluaXRlKQpAQCAtMjI1OCw2ICsyMzUwLDQ1IEBACiAgICAgcmV0dXJu
IDA7CiB9CiAKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25O
YW1lKCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBp
ZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgfHwgdmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgeworICAgICAgICBpZiAodmFs
dWUtPmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUtPnN0cmluZywgIm5vbmUi
KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoQ1NTVmFsdWVO
b25lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitQYXNzUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCkKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVl
UnVubmluZyB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVQYXVzZWQpCisgICAgICAgIHJldHVybiBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKTsKKyAgICByZXR1cm4gMDsKK30KKworUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZURlbGF5KCkKK3sKKyAgICBWYWx1ZSog
dmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsdWUtPmlkID09IENTU1Zh
bHVlTm93KQorICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5pZCk7
CisgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUsIHN0cmljdCkpCisgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgIHJldHVybiAwOworfQorICAgIAorUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUR1cmF0aW9uKCkKK3sKKyAgICBWYWx1ZSog
dmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBG
VGltZSwgc3RyaWN0KSkKKyAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1
ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRpbWluZ0Z1bmN0aW9uVmFs
dWUoVmFsdWVMaXN0KiYgYXJncywgZG91YmxlJiByZXN1bHQpCiB7CiAgICAgVmFsdWUqIHYgPSBh
cmdzLT5jdXJyZW50KCk7CkBAIC0yMjc2LDcgKzI0MDcsNyBAQAogICAgIHJldHVybiB0cnVlOwog
fQogCi1QYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uKCkKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VUaW1pbmdG
dW5jdGlvbigpCiB7CiAgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAg
ICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVl
TGluZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVFYXNlT3V0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCkKQEAgLTIzMjEs
NiArMjQ1Miw5NiBAQAogICAgIHJldHVybiAwOwogfQogCitib29sIENTU1BhcnNlcjo6cGFyc2VB
bmltYXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQpCit7
CisgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOworICAgIFZhbHVlKiB2YWw7CisgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKKyAgICBib29sIGFsbG93Q29tbWEgPSBmYWxzZTsKKyAg
ICAKKyAgICByZXN1bHQgPSAwOworICAgIAorICAgIHdoaWxlICgodmFsID0gdmFsdWVMaXN0LT5j
dXJyZW50KCkpKSB7CisgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gY3VyclZhbHVlOworICAgICAg
ICBpZiAoYWxsb3dDb21tYSkgeworICAgICAgICAgICAgaWYgKHZhbC0+dW5pdCAhPSBWYWx1ZTo6
T3BlcmF0b3IgfHwgdmFsLT5pVmFsdWUgIT0gJywnKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgYWxsb3dD
b21tYSA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3dp
dGNoIChwcm9wSWQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uRGVsYXk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRGVsYXko
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246Cisg
ICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRHVyYXRpb24oKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
TGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOgorICAgICAgICAgICAg
ICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbkRpcmVjdGlvbigpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVM
aXN0LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudDoKKyAgICAgICAg
ICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdmFsdWVMaXN0LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25OYW1lOgorICAgICAgICAg
ICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvbk5hbWUoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTGlz
dC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlOgorICAgICAgICAgICAgICAg
ICAgICBjdXJyVmFsdWUgPSBwYXJzZUFuaW1hdGlvblBsYXlTdGF0ZSgpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0
LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbjoKKyAgICAgICAgICAg
ICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VUaW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoY3VyclZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0
LT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWN1cnJWYWx1ZSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFs
dWVzKSB7CisgICAgICAgICAgICAgICAgdmFsdWVzID0gbmV3IENTU1ZhbHVlTGlzdCgpOworICAg
ICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YWx1ZXMpCisgICAgICAgICAgICAg
ICAgdmFsdWVzLT5hcHBlbmQoY3VyclZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjdXJyVmFsdWUucmVsZWFzZSgpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBhbGxvd0NvbW1hID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gV2hlbiBwYXJzaW5nIHRoZSAnYW5pbWF0aW9uJyBzaG9ydGhhbmQgcHJvcGVy
dHksIHdlIGxldCBpdCBoYW5kbGUgYnVpbGRpbmcgdXAgdGhlIGxpc3RzIGZvciBhbGwKKyAgICAg
ICAgLy8gcHJvcGVydGllcy4KKyAgICAgICAgaWYgKGluU2hvcnRoYW5kKCkpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgp
KSB7CisgICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgcmVzdWx0ID0gdmFsdWUucmVs
ZWFzZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorICAgIAorICAgIAogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGlu
dCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mIHJlc3VsdCkKIHsKICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiB2YWx1ZXM7CkBAIC0yMzQwLDE4ICsyNTYxLDE4IEBACiAgICAgICAgIH0KICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByb3BJZCkgewotICAgICAgICAgICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgICAgICAg
ICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7CisgICAgICAgICAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EZWxheToKKyAgICAgICAgICAg
ICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VEZWxheSgpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1
cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7CisgICAgICAgICAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKKyAgICAgICAgICAgICAg
ICAgICAgY3VyclZhbHVlID0gcGFyc2VEdXJhdGlvbigpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoY3VyclZhbHVlKQogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVMaXN0LT5uZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246Ci0gICAgICAgICAgICAgICAgICAg
IGN1cnJWYWx1ZSA9IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVGltaW5nRnVuY3Rpb24oKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTGlz
dC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM3MjgsNyArMzk0OSw3
IEBACiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvIHsKIHB1YmxpYzoKICAgICBUcmFuc2Zv
cm1PcGVyYXRpb25JbmZvKGNvbnN0IFBhcnNlU3RyaW5nJiBuYW1lKQotICAgIDogbV90eXBlKENT
U1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgIDogbV90eXBl
KFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uKQogICAg
ICwgbV9hcmdDb3VudCgxKQogICAgICwgbV9hbGxvd1NpbmdsZUFyZ3VtZW50KGZhbHNlKQogICAg
ICwgbV91bml0KENTU1BhcnNlcjo6RlVua25vd24pCkBAIC0zNzM2LDMyICszOTU3LDM1IEBACiAg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2NhbGUoIikgfHwgZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgInNjYWxleCgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2Nh
bGV5KCIpKSB7CiAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7CiAgICAg
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNjYWxlKCIpKQotICAgICAgICAg
ICAgICAgIG1fdHlwZSA9IENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bjsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2Nh
bGVUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAic2NhbGV4KCIpKQotICAgICAgICAgICAgICAgIG1fdHlwZSA9IENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90
eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1W
YWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOwotICAgICAgICB9IGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJyb3RhdGUoIikpIHsKLSAgICAgICAgICAgIG1fdHlwZSA9IENT
U1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAg
ICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJh
dGlvbjsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRl
KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJyb3RhdGV6KCIpKSB7CiAgICAgICAgICAg
ICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZBbmdsZTsKKyAgICAgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAicm90YXRlKCIpKQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlJvdGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgInNrZXcoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNrZXd4
KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJza2V3eSgiKSkgewogICAgICAgICAgICAg
bV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgInNrZXcoIikpCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNm
b3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90eXBl
ID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAg
ICAgICAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2tld3goIikpCi0gICAg
ICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdYVHJhbnNmb3JtT3Bl
cmF0aW9uOworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb247
CisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZ
VHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICB9IGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJ0cmFuc2xhdGUoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0
ZXgoIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZXkoIikpIHsKICAgICAg
ICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6Rkxlbmd0aCB8IENTU1BhcnNlcjo6RlBlcmNlbnQ7
CiAgICAgICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZSgiKSkK
LSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJh
bnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAgICBlbHNl
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAidHJhbnNsYXRleCgiKSkKLSAgICAgICAgICAg
ICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJh
dGlvbjsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9w
ZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICAgICAgfSBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAibWF0cml4KCIpKSB7Ci0gICAgICAgICAgICBtX3R5cGUgPSBD
U1NUcmFuc2Zvcm1WYWx1ZTo6TWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAg
bV90eXBlID0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bjsKICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAxMTsKICAgICAgICAgICAgIG1fdW5pdCA9IENT
U1BhcnNlcjo6Rk51bWJlcjsKICAgICAgICAgfQpAQCAtMzc3MiwxNSArMzk5NiwxNSBAQAogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKyAgICBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CiAgICAgdW5zaWduZWQgYXJnQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2Fy
Z0NvdW50OyB9CiAgICAgQ1NTUGFyc2VyOjpVbml0cyB1bml0KCkgY29uc3QgeyByZXR1cm4gbV91
bml0OyB9CiAKLSAgICBib29sIHVua25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gQ1NT
VHJhbnNmb3JtVmFsdWU6OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KKyAgICBib29sIHVu
a25vd24oKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6
OlVua25vd25UcmFuc2Zvcm1PcGVyYXRpb247IH0KICAgICBib29sIGhhc0NvcnJlY3RBcmdDb3Vu
dCh1bnNpZ25lZCBhcmdDb3VudCkgeyByZXR1cm4gbV9hcmdDb3VudCA9PSBhcmdDb3VudCB8fCAo
bV9hbGxvd1NpbmdsZUFyZ3VtZW50ICYmIGFyZ0NvdW50ID09IDEpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUgbV90eXBlOworICAg
IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG1fdHlwZTsK
ICAgICB1bnNpZ25lZCBtX2FyZ0NvdW50OwogICAgIGJvb2wgbV9hbGxvd1NpbmdsZUFyZ3VtZW50
OwogICAgIENTU1BhcnNlcjo6VW5pdHMgbV91bml0OwpAQCAtMzc5Myw3ICs0MDE3LDcgQEAKIAog
ICAgIC8vIFRoZSB0cmFuc2Zvcm0gaXMgYSBsaXN0IG9mIGZ1bmN0aW9uYWwgcHJpbWl0aXZlcyB0
aGF0IHNwZWNpZnkgdHJhbnNmb3JtIG9wZXJhdGlvbnMuICBXZSBjb2xsZWN0IGEgbGlzdAogICAg
IC8vIG9mIENTU1RyYW5zZm9ybVZhbHVlcywgd2hlcmUgZWFjaCB2YWx1ZSBzcGVjaWZpZXMgYSBz
aW5nbGUgb3BlcmF0aW9uLgotICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NT
VmFsdWVMaXN0OworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVM
aXN0KHRydWUpOwogICAgIGZvciAoVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7
IHZhbHVlOyB2YWx1ZSA9IHZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+
dW5pdCAhPSBWYWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAgICAgICAgICAg
IHJldHVybiAwOwpAQCAtMzgxMiw3ICs0MDM2LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwog
CiAgICAgICAgIC8vIENyZWF0ZSB0aGUgbmV3IENTU1RyYW5zZm9ybVZhbHVlIGZvciB0aGlzIG9w
ZXJhdGlvbiBhbmQgYWRkIGl0IHRvIG91ciBsaXN0LgotICAgICAgICBDU1NUcmFuc2Zvcm1WYWx1
ZSogdHJhbnNmb3JtVmFsdWUgPSBuZXcgQ1NTVHJhbnNmb3JtVmFsdWUoaW5mby50eXBlKCkpOwor
ICAgICAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSogdHJhbnNmb3JtVmFsdWUgPSBuZXcgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUoaW5mby50eXBlKCkpOwogICAgICAgICBsaXN0LT5hcHBlbmQo
dHJhbnNmb3JtVmFsdWUpOwogCiAgICAgICAgIC8vIFNuYWcgb3VyIHZhbHVlcy4KQEAgLTM4MjUs
NyArNDA0OSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIC8vIEFkZCB0aGUgdmFsdWUgdG8gdGhlIGN1cnJlbnQgdHJhbnNmb3JtIG9wZXJh
dGlvbi4KLSAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hZGRWYWx1ZShuZXcgQ1NTUHJpbWl0
aXZlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5p
dCkpOworICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCkp
OwogCiAgICAgICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgICAgICAgICAgaWYgKCFhKQpA
QCAtNDI1Niw2ICs0NDgwLDEzIEBACiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKK1dlYktpdENTU0tl
eWZyYW1lc1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVzUnVsZSgpCit7CisgICAgV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZSogcnVsZSA9IG5ldyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKHN0
eWxlRWxlbWVudCk7CisgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUpOworICAg
IHJldHVybiBydWxlOworfQorCiBDU1NSdWxlKiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShD
U1NTZWxlY3Rvciogc2VsZWN0b3IpCiB7CiAgICAgQ1NTU3R5bGVSdWxlKiBydWxlID0gMDsKQEAg
LTQyNzgsNiArNDUwOSwxNiBAQAogICAgIHJldHVybiBydWxlOwogfQogCitXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUqIENTU1BhcnNlcjo6Y3JlYXRlS2V5ZnJhbWVSdWxlKGZsb2F0IGtleSkKK3sKKyAg
ICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lID0gbmV3IFdlYktpdENTU0tleWZyYW1l
UnVsZShzdHlsZUVsZW1lbnQpOworICAgIG1fcGFyc2VkU3R5bGVPYmplY3RzLmFwcGVuZChrZXlm
cmFtZSk7CisgICAga2V5ZnJhbWUtPnNldEtleShrZXkpOworICAgIGtleWZyYW1lLT5zZXREZWNs
YXJhdGlvbihuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24oMCwgcGFyc2VkUHJvcGVydGll
cywgbnVtUGFyc2VkUHJvcGVydGllcykpOworICAgIGNsZWFyUHJvcGVydGllcygpOworICAgIHJl
dHVybiBrZXlmcmFtZTsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFy
KiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9D
U1NHcmFtbWFyLnkJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKKyNpbmNsdWRl
ICJXZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlLmgiCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKQEAgLTY3
LDYgKzY5LDkgQEAKICAgICBWYWx1ZSB2YWx1ZTsKICAgICBWYWx1ZUxpc3QqIHZhbHVlTGlzdDsK
ICAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cCo+KiBtZWRpYVF1ZXJ5RXhwTGlzdDsKKyAgICBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUqIGtleWZyYW1lUnVsZTsKKyAgICBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKiBrZXlmcmFtZXNSdWxlOworICAgIGZsb2F0IHZhbDsKIH0KIAogJXsKQEAgLTEwNCw2ICsx
MDksNyBAQAogJXRva2VuIElNUE9SVF9TWU0KICV0b2tlbiBQQUdFX1NZTQogJXRva2VuIE1FRElB
X1NZTQorJXRva2VuIFdFQktJVF9LRVlGUkFNRVNfU1lNCiAldG9rZW4gRk9OVF9GQUNFX1NZTQog
JXRva2VuIENIQVJTRVRfU1lNCiAldG9rZW4gTkFNRVNQQUNFX1NZTQpAQCAtMTUwLDYgKzE1Niw3
IEBACiAldHlwZSA8cnVsZT4gcnVsZXNldAogJXR5cGUgPHJ1bGU+IHZhbGlkX3J1bGVfb3JfaW1w
b3J0CiAldHlwZSA8cnVsZT4gbWVkaWEKKyV0eXBlIDxydWxlPiBrZXlmcmFtZXMKICV0eXBlIDxy
dWxlPiBpbXBvcnQKICV0eXBlIDxydWxlPiBwYWdlCiAldHlwZSA8cnVsZT4gZm9udF9mYWNlCkBA
IC0xNzQsNiArMTgxLDEwIEBACiAldHlwZSA8bWVkaWFRdWVyeT4gbWVkaWFfcXVlcnkKICV0eXBl
IDxtZWRpYVF1ZXJ5UmVzdHJpY3Rvcj4gbWF5YmVfbWVkaWFfcmVzdHJpY3RvcgogJXR5cGUgPHZh
bHVlTGlzdD4gbWF5YmVfbWVkaWFfdmFsdWUKKyV0eXBlIDxzdHJpbmc+IGtleWZyYW1lX25hbWUK
KyV0eXBlIDxrZXlmcmFtZXNSdWxlPiBrZXlmcmFtZXNfcnVsZQorJXR5cGUgPGtleWZyYW1lUnVs
ZT4ga2V5ZnJhbWVfcnVsZQorJXR5cGUgPHZhbD4ga2V5CiAldHlwZSA8bWVkaWFRdWVyeUV4cD4g
bWVkaWFfcXVlcnlfZXhwCiAldHlwZSA8bWVkaWFRdWVyeUV4cExpc3Q+IG1lZGlhX3F1ZXJ5X2V4
cF9saXN0CiAldHlwZSA8bWVkaWFRdWVyeUV4cExpc3Q+IG1heWJlX2FuZF9tZWRpYV9xdWVyeV9l
eHBfbGlzdApAQCAtMzE2LDYgKzMyNyw3IEBACiAgIHwgbWVkaWEKICAgfCBwYWdlCiAgIHwgZm9u
dF9mYWNlCisgIHwga2V5ZnJhbWVzCiAgIDsKIAogcnVsZToKQEAgLTQ3NSw2ICs0ODcsNTEgQEAK
ICAgfQogICA7CiAKK2tleWZyYW1lczoKKyAgICBXRUJLSVRfS0VZRlJBTUVTX1NZTSBtYXliZV9z
cGFjZSBrZXlmcmFtZV9uYW1lIG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBrZXlmcmFtZXNf
cnVsZSAnfScgeworICAgICAgICAkJCA9ICQ3OworICAgICAgICBQYXJzZVN0cmluZyYgc3RyID0g
JDM7CisgICAgICAgIHN0ci5sb3dlcigpOworICAgICAgICAkNy0+c2V0TmFtZShTdHJpbmcoc3Ry
LmNoYXJhY3RlcnMsIHN0ci5sZW5ndGgpKTsKKyAgICB9CisgICAgOworCitrZXlmcmFtZV9uYW1l
OgorICAgIElERU5UCisgICAgfCBTVFJJTkcKKyAgICA7CisKK2tleWZyYW1lc19ydWxlOgorICAg
IC8qIGVtcHR5ICovIHsgJCQgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpLT5jcmVh
dGVLZXlmcmFtZXNSdWxlKCk7IH0KKyAgICB8IGtleWZyYW1lc19ydWxlIGtleWZyYW1lX3J1bGUg
bWF5YmVfc3BhY2UgeworICAgICAgICAkJCA9ICQxOworICAgICAgICBpZiAoJDIpCisgICAgICAg
ICAgICAkJC0+aW5zZXJ0KCQyKTsKKyAgICB9CisgICAgOworCitrZXlmcmFtZV9ydWxlOgorICAg
IGtleSBtYXliZV9zcGFjZSAneycgbWF5YmVfc3BhY2UgZGVjbGFyYXRpb25fbGlzdCAnfScgewor
ICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlciktPmNyZWF0ZUtleWZy
YW1lUnVsZSgkMSk7CisgICAgfQorICAgIDsKKwora2V5OgorICAgIFBFUkNFTlRBR0UgeyAkJCA9
IChmbG9hdCkgJDE7IH0KKyAgICB8IElERU5UIHsKKyAgICAgICAgJCQgPSAtMTsKKyAgICAgICAg
UGFyc2VTdHJpbmcmIHN0ciA9ICQxOworICAgICAgICBzdHIubG93ZXIoKTsKKyAgICAgICAgU3Ry
aW5nIHMgPSBTdHJpbmcoc3RyLmNoYXJhY3RlcnMsIHN0ci5sZW5ndGgpOworICAgICAgICBpZiAo
cyA9PSAiZnJvbSIpCisgICAgICAgICAgICAkJCA9IDA7CisgICAgICAgIGVsc2UgaWYgKHMgPT0g
InRvIikKKyAgICAgICAgICAgICQkID0gMTAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBZ
WUVSUk9SOworICAgIH0KKyAgICA7CisKIC8qCiBwYWdlOgogICAgIFBBR0VfU1lNIG1heWJlX3Nw
YWNlIElERU5UPyBwc2V1ZG9fcGFnZT8gbWF5YmVfc3BhY2UKSW5kZXg6IFdlYkNvcmUvY3NzL1dl
YktpdENTU0tleWZyYW1lUnVsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlLmlkbAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lUnVsZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBj
c3MgeworCisgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2ZWwgPzoKKyAgICBpbnRlcmZhY2Ug
WworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBJbnRlcmZhY2VVVUlEPTg3
YjdjZGU4LTU4MTgtNGY2OC1iNTU0LTUzODJlNmQ5NDI4YywKKyAgICAgICAgSW1wbGVtZW50YXRp
b25VVUlEPWIwMDBkNDY4LWJiN2EtNDg2Ni04OTQ2LTVkZWE4YjZhM2MxMworICAgIF0gV2ViS2l0
Q1NTS2V5ZnJhbWVSdWxlIDogQ1NTUnVsZSB7CisKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmlu
ZyBrZXlUZXh0OworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTU3R5bGVEZWNsYXJhdGlv
biBzdHlsZTsKKworICAgIH07CisKK30KSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVs
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qKgorICogVGhpcyBmaWxlIGlz
IHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIChDKSAxOTk5
LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIChDKSAyMDAyLTIwMDMgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIw
MDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldl
YktpdENTU0tleWZyYW1lUnVsZS5oIgorCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6
OldlYktpdENTU0tleWZyYW1lUnVsZShTdHlsZUJhc2UqIHBhcmVudCkKKyAgICA6IENTU1J1bGUo
cGFyZW50KQorICAgICwgbV9rZXkoMCkKK3sKK30KKworV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjp+
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKCkKK3sKKyAgICBpZiAobV9zdHlsZSkKKyAgICAgICAgbV9z
dHlsZS0+c2V0UGFyZW50KDApOworfQorCitTdHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpr
ZXlUZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3RyaW5nOjpudW1iZXIobV9rZXkpICsgIiUi
OworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lUnVsZTo6c2V0S2V5VGV4dChjb25zdCBTdHJp
bmcmIHMpCit7CisgICAgbV9rZXkgPSBrZXlTdHJpbmdUb0Zsb2F0KHMpOworfQorCitTdHJpbmcg
V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcmVz
dWx0ID0gU3RyaW5nOjpudW1iZXIobV9rZXkpOworCisgICAgcmVzdWx0ICs9ICIlIHsgIjsKKyAg
ICByZXN1bHQgKz0gbV9zdHlsZS0+Y3NzVGV4dCgpOworICAgIHJlc3VsdCArPSAifSI7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIFdlYktpdENTU0tleWZyYW1lUnVsZTo6cGFyc2VT
dHJpbmcoY29uc3QgU3RyaW5nJiAvKnN0cmluZyovLCBib29sIC8qc3RyaWN0Ki8pCit7CisgICAg
Ly8gRklYTUUKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVS
dWxlOjpzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
PiBzdHlsZSkKK3sKKyAgICBtX3N0eWxlID0gc3R5bGU7CisgICAgbV9zdHlsZS0+c2V0UGFyZW50
KHBhcmVudCgpKTsKK30KKworLyogc3RhdGljICovCitmbG9hdCBXZWJLaXRDU1NLZXlmcmFtZVJ1
bGU6OmtleVN0cmluZ1RvRmxvYXQoY29uc3QgU3RyaW5nJiBzKQoreworICAgIGZsb2F0IGtleSA9
IDA7CisgICAgCisgICAgLy8gZm9yIG5vdyB0aGUgc3ludGF4IE1VU1QgYmUgJ3h4eCUnIG9yICdm
cm9tJyBvciAndG8nLCB3aGVyZSB4eHggaXMgYSBsZWdhbCBmbG9hdGluZyBwb2ludCBudW1iZXIK
KyAgICBpZiAocyA9PSAiZnJvbSIpCisgICAgICAgIGtleSA9IDA7CisgICAgZWxzZSBpZiAocyA9
PSAidG8iKQorICAgICAgICBrZXkgPSAxMDA7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzLmVu
ZHNXaXRoKCIlIikpIHsKKyAgICAgICAgICAgIGZsb2F0IGsgPSBzLnN1YnN0cmluZygwLCBzLmxl
bmd0aCgpIC0gMSkudG9GbG9hdCgpOworICAgICAgICAgICAgaWYgKGsgPj0gMCAmJiBrIDw9IDEw
MCkKKyAgICAgICAgICAgICAgICBrZXkgPSBrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHJldHVybiBrZXk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUv
Y3NzL0NTU1RyYW5zZm9ybVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NU
cmFuc2Zvcm1WYWx1ZS5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTVHJh
bnNmb3JtVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNTU1Ry
YW5zZm9ybVZhbHVlOjpDU1NUcmFuc2Zvcm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9w
KQotOiBtX3R5cGUob3ApCi17fQotCi1DU1NUcmFuc2Zvcm1WYWx1ZTo6fkNTU1RyYW5zZm9ybVZh
bHVlKCkKLXt9Ci0KLXZvaWQgQ1NTVHJhbnNmb3JtVmFsdWU6OmFkZFZhbHVlKENTU1ZhbHVlKiB2
YWwpCi17Ci0gICAgaWYgKCFtX3ZhbHVlcykKLSAgICAgICAgbV92YWx1ZXMgPSBuZXcgQ1NTVmFs
dWVMaXN0OwotICAgIG1fdmFsdWVzLT5hcHBlbmQodmFsKTsKLX0KLQotU3RyaW5nIENTU1RyYW5z
Zm9ybVZhbHVlOjpjc3NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIHN3
aXRjaChtX3R5cGUpIHsKLSAgICAgICAgY2FzZSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAg
ICAgICAgICAgIHJlc3VsdCArPSAic2NhbGUoIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlc3VsdCArPSAi
c2NhbGVYKCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTY2FsZVlUcmFuc2Zv
cm1PcGVyYXRpb246Ci0gICAgICAgICAgICByZXN1bHQgKz0gInNjYWxlWSgiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAg
ICAgICAgcmVzdWx0ICs9ICJyb3RhdGUoIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICByZXN1bHQgKz0gInNrZXco
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrZXdYVHJhbnNmb3JtT3BlcmF0
aW9uOgotICAgICAgICAgICAgcmVzdWx0ICs9ICJza2V3WCgiOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2tld1lUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICByZXN1
bHQgKz0gInNrZXdZKCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2xh
dGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICByZXN1bHQgKz0gInRyYW5zbGF0ZSgi
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNsYXRlWFRyYW5zZm9ybU9w
ZXJhdGlvbjoKLSAgICAgICAgICAgIHJlc3VsdCArPSAidHJhbnNsYXRlWCgiOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAg
ICAgICAgICAgIHJlc3VsdCArPSAidHJhbnNsYXRlWSgiOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgcmVzdWx0
ICs9ICJtYXRyaXgoIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChtX3ZhbHVlcykKLSAgICAgICAg
cmVzdWx0ICs9IG1fdmFsdWVzLT5jc3NUZXh0KCk7Ci0gICAgCi0gICAgcmVzdWx0ICs9ICIpIjsK
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19CkluZGV4OiBXZWJDb3JlL2Nzcy90b2tlbml6ZXIu
ZmxleAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAkocmV2aXNpb24g
MzI5MTIpCisrKyBXZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleAkod29ya2luZyBjb3B5KQpAQCAt
NTksNiArNTksNyBAQAogIkAtd2Via2l0LWRlY2xzIiAgICAgICAge3l5VG9rID0gV0VCS0lUX0RF
Q0xTX1NZTTsgcmV0dXJuIHl5VG9rOyB9CiAiQC13ZWJraXQtdmFsdWUiICAgICAgICB7eXlUb2sg
PSBXRUJLSVRfVkFMVUVfU1lNOyByZXR1cm4geXlUb2s7IH0KICJALXdlYmtpdC1tZWRpYXF1ZXJ5
IiAgIHtCRUdJTihtZWRpYXF1ZXJ5KTsgeXlUb2sgPSBXRUJLSVRfTUVESUFRVUVSWV9TWU07IHJl
dHVybiB5eVRvazsgfQorIkAtd2Via2l0LWtleWZyYW1lcyIgICAge3l5VG9rID0gV0VCS0lUX0tF
WUZSQU1FU19TWU07IHJldHVybiB5eVRvazsgfQogCiAiISJ7d30iaW1wb3J0YW50IiAgICAgICB7
eXlUb2sgPSBJTVBPUlRBTlRfU1lNOyByZXR1cm4geXlUb2s7fQogCkluZGV4OiBXZWJDb3JlL2Nz
cy9TdHlsZUJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAkocmV2
aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9TdHlsZUJhc2UuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNiArNTgsOCBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZVJ1bGUoKSB7IHJl
dHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyc2V0UnVsZSgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ltcG9ydFJ1bGUoKSB7IHJldHVy
biBmYWxzZTsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZXNSdWxlKCkgeyByZXR1
cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzS2V5ZnJhbWVSdWxlKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzTWVkaWFSdWxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzRm9udEZhY2VSdWxlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBib29sIGlzUGFnZVJ1bGUoKSB7IHJldHVybiBmYWxz
ZTsgfQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlOYW1lcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVzLmluCShyZXZpc2lvbiAzMjkxMikKKysrIFdl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5TmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE0MiwxMSAr
MTQyLDE0IEBACiB3b3JkLXdyYXAKIHotaW5kZXgKIHpvb20KLS13ZWJraXQtdHJhbnNpdGlvbgot
LXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uCi0td2Via2l0LXRyYW5zaXRpb24tcHJvcGVydHkK
LS13ZWJraXQtdHJhbnNpdGlvbi1yZXBlYXQtY291bnQKLS13ZWJraXQtdHJhbnNpdGlvbi10aW1p
bmctZnVuY3Rpb24KKy13ZWJraXQtYW5pbWF0aW9uCistd2Via2l0LWFuaW1hdGlvbi1kZWxheQor
LXdlYmtpdC1hbmltYXRpb24tZGlyZWN0aW9uCistd2Via2l0LWFuaW1hdGlvbi1kdXJhdGlvbgor
LXdlYmtpdC1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50Cistd2Via2l0LWFuaW1hdGlvbi1uYW1l
Cistd2Via2l0LWFuaW1hdGlvbi1wbGF5LXN0YXRlCistd2Via2l0LWFuaW1hdGlvbi10aW1pbmct
ZnVuY3Rpb24KIC13ZWJraXQtYXBwZWFyYW5jZQogLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXAKIC13
ZWJraXQtYmFja2dyb3VuZC1jb21wb3NpdGUKQEAgLTIyNSw2ICsyMjgsMTEgQEAKIC13ZWJraXQt
dHJhbnNmb3JtLW9yaWdpbgogLXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luLXgKIC13ZWJraXQtdHJh
bnNmb3JtLW9yaWdpbi15Cistd2Via2l0LXRyYW5zaXRpb24KKy13ZWJraXQtdHJhbnNpdGlvbi1k
ZWxheQorLXdlYmtpdC10cmFuc2l0aW9uLWR1cmF0aW9uCistd2Via2l0LXRyYW5zaXRpb24tcHJv
cGVydHkKKy13ZWJraXQtdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24KIC13ZWJraXQtdXNlci1k
cmFnCiAtd2Via2l0LXVzZXItbW9kaWZ5CiAtd2Via2l0LXVzZXItc2VsZWN0CkluZGV4OiBXZWJD
b3JlL2Nzcy9DU1NSdWxlLmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NSdWxlLmlk
bAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9DU1NSdWxlLmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNiArMzYsOCBAQAogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBNRURJ
QV9SVUxFID0gNDsKICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgRk9OVF9GQUNFX1JVTEUg
PSA1OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBQQUdFX1JVTEUgPSA2OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBXRUJLSVRfS0VZRlJBTUVTX1JVTEUgPSA3OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBXRUJLSVRfS0VZRlJBTUVfUlVMRSA9IDg7CiAKICAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0ICAgdHlwZTsKIApJbmRleDogV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoK
KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4K
KyAqCisgKiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAoQykg
MjAwMi0yMDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChD
KSAyMDAyLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJh
bWVSdWxlX2gKKyNkZWZpbmUgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlX2gKKworI2luY2x1ZGUgIkNT
U1J1bGUuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbjsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlIDogcHVibGljIENTU1J1bGUgeworcHVibGljOgorICAgIFdlYktpdENTU0tl
eWZyYW1lUnVsZShTdHlsZUJhc2UqIHBhcmVudCk7CisgICAgdmlydHVhbCB+V2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlmcmFtZVJ1bGUoKSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAvLyBJbmhlcml0ZWQgZnJvbSBDU1NSdWxlCisgICAgdmlydHVhbCB1
bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3QgeyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FX1JVTEU7
IH0KKworICAgIFN0cmluZyBrZXlUZXh0KCkgY29uc3Q7CisgICAgdm9pZCBzZXRLZXlUZXh0KGNv
bnN0IFN0cmluZyYgcyk7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlLmdldCgpOyB9CisKKyAgICB2aXJ0dWFsIFN0cmluZyBj
c3NUZXh0KCkgY29uc3Q7CisKKyAgICAvLyBOb3QgcGFydCBvZiB0aGUgQ1NTT00KKyAgICB2aXJ0
dWFsIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5nJiwgYm9vbCA9IGZhbHNlKTsKKyAgICAK
KyAgICBmbG9hdCBrZXkoKSBjb25zdCB7IHJldHVybiBtX2tleS8xMDA7IH0KKyAgICBmbG9hdCBr
ZXlBc1BlcmNlbnQoKSBjb25zdCB7IHJldHVybiBtX2tleTsgfQorCisgICAgdm9pZCBzZXRLZXko
ZmxvYXQgaykgeyBtX2tleSA9IGs7IH0KKyAgICB2b2lkIHNldERlY2xhcmF0aW9uKFBhc3NSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+KTsKKworICAgIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiAgICAgICAgIGRlY2xhcmF0aW9uKCkgICAgICAgeyByZXR1cm4gbV9zdHlsZS5n
ZXQoKTsgfQorICAgIGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiAgIGRlY2xhcmF0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQorICAgIAorICAgIHN0YXRpYyBm
bG9hdCBrZXlTdHJpbmdUb0Zsb2F0KGNvbnN0IFN0cmluZyYgcyk7CisgCitwcm90ZWN0ZWQ6Cisg
ICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBtX3N0eWxlOworICAgIGZsb2F0
IG1fa2V5OyAgICAgICAgLy8gMCB0byAxMDAKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFdlYktpdENTU0tleWZyYW1lUnVsZV9oCkluZGV4OiBXZWJDb3JlL2Nzcy9D
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2Vi
Q29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
VmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2luY2x1ZGUgIldlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmgiCiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAjaW5j
bHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCkBAIC0xMjksNiArMTMxLDEzIEBACiAgICAgQ1NTUHJv
cGVydHlaSW5kZXgsCiAgICAgQ1NTUHJvcGVydHlab29tLAogCisgICAgQ1NTUHJvcGVydHlXZWJr
aXRBbmltYXRpb25EZWxheSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRpcmVjdGlv
biwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uLAorICAgIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsCisgICAgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25OYW1lLAorICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uUGxheVN0YXRlLAor
ICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb24sCiAgICAgQ1NTUHJv
cGVydHlXZWJraXRBcHBlYXJhbmNlLAogICAgIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZENs
aXAsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kQ29tcG9zaXRlLApAQCAtMTgzLDYg
KzE5MiwxMyBAQAogICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFNlY3VyaXR5LAogICAgIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLAogICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0
cm9rZVdpZHRoLAorICAgIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLAorICAgIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bU9yaWdpblksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXksCisgICAgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCisgICAgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uUHJvcGVydHksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5n
RnVuY3Rpb24sCiAgICAgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZywKICAgICBDU1NQcm9wZXJ0
eVdlYmtpdFVzZXJNb2RpZnksCiAgICAgQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0LApAQCAt
Mzg4LDYgKzQwNCw0NiBAQAogICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKS0+Ym94U2l6aW5n
KCkgPT0gQ09OVEVOVF9CT1ggPyByZW5kZXJlci0+Y29udGVudEJveCgpIDogcmVuZGVyZXItPmJv
cmRlckJveCgpOwogfQogCitzdGF0aWMgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IGNvbXB1dGVk
VHJhbnNmb3JtKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgaWYgKCFyZW5kZXJlcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgSW50UmVjdCBib3ggPSBzaXppbmdCb3gocmVu
ZGVyZXIpOworICAgIAorICAgIFRyYW5zZm9ybTNEIHRyYW5zZm9ybTsKKyAgICAKKyAgICByZW5k
ZXJlci0+c3R5bGUoKS0+YXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCBib3guc2l6ZSgpLCBmYWxz
ZSk7CisKKyAgICBSZWZQdHI8V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU+ICB0cmFuc2Zvcm1WYWwg
PSBuZXcgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6Ok1h
dHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKTsKKyAgICAKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm0xMSgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOworICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRp
dmVWYWx1ZSh0cmFuc2Zvcm0ubTEyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7
CisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9y
bS5tMTMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICB0cmFuc2Zvcm1W
YWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm0xNCgpLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIAorICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5k
KG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTIxKCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHRyYW5zZm9ybS5tMjIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsK
KyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3Jt
Lm0yMygpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIHRyYW5zZm9ybVZh
bC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTI0KCksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgCisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tMzEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUodHJhbnNmb3JtLm0zMigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOwor
ICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0u
bTMzKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgdHJhbnNmb3JtVmFs
LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tMzQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm00MSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUikpOworICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZSh0cmFuc2Zvcm0ubTQyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Cisg
ICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5t
NDMoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICB0cmFuc2Zvcm1WYWwt
PmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm00NCgpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIAorICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBuZXcgQ1NTVmFsdWVMaXN0KHRydWUpOworICAgIGxpc3QtPmFwcGVuZCh0cmFuc2Zvcm1W
YWwpOworICAgIAorICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKK30KKyAgICAKKyAgICAKIENT
U0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBh
c3NSZWZQdHI8Tm9kZT4gbikKICAgICA6IG1fbm9kZShuKQogewpAQCAtMTAwMyw2ICsxMDU5LDEz
MyBAQAogICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxl
LT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
Qm9yZGVyVG9wUmlnaHRSYWRpdXM6CiAgICAgICAgICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVz
Q29ybmVyVmFsdWUoc3R5bGUtPmJvcmRlclRvcFJpZ2h0UmFkaXVzKCkpOworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb246CisgICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NW
YWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNv
bnN0IFRyYW5zaXRpb24qIHQgPSAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1h
dGlvbkR1cmF0aW9uKSA/IHN0eWxlLT5hbmltYXRpb25zKCkgOiBzdHlsZS0+dHJhbnNpdGlvbnMo
KTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0g
dC0+bmV4dCgpKQorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1p
dGl2ZVZhbHVlKHQtPmR1cmF0aW9uKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoUmVuZGVyU3R5bGU6OmluaXRpYWxEdXJhdGlvbigpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9u
VGltaW5nRnVuY3Rpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
VGltaW5nRnVuY3Rpb246IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3Qg
PSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24q
IHQgPSAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0
aW9uKSA/IHN0eWxlLT5hbmltYXRpb25zKCkgOiBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAg
ICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiB0ZiA9IHQtPnRp
bWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NT
VGltaW5nRnVuY3Rpb25WYWx1ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgVGltaW5nRnVuY3Rpb24mIHRmID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxUaW1pbmdGdW5jdGlvbigpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcg
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZSh0Zi54MSgpLCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55Migp
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5Ogor
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdChmYWxzZSk7
CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0ID0gKHByb3BlcnR5SUQgPT0gQ1NTUHJv
cGVydHlXZWJraXRBbmltYXRpb25EZWxheSkgPyBzdHlsZS0+YW5pbWF0aW9ucygpIDogc3R5bGUt
PnRyYW5zaXRpb25zKCk7OworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodC0+ZGVsYXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZShSZW5kZXJTdHlsZTo6aW5pdGlhbERl
bGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAgICAgICAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOiB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdChmYWxzZSk7CisgICAgICAgICAgICBjb25z
dCBUcmFuc2l0aW9uKiB0ID0gc3R5bGUtPmFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0
KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAg
ICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHQtPmFuaW1hdGlv
bkRpcmVjdGlvbigpID8gQ1NTVmFsdWVBbHRlcm5hdGUgOiBDU1NWYWx1ZU5vcm1hbCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJl
Y3Rpb24oKSA/IENTU1ZhbHVlQWx0ZXJuYXRlIDogQ1NTVmFsdWVOb3JtYWwpKTsKKyAgICAgICAg
ICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHsKKyAgICAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAg
ICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+YW5pbWF0aW9ucygpOworICAgICAgICAg
ICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkpCisg
ICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodC0+
YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaXN0
LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAg
ICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZTogeworICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1ZUxpc3QoZmFsc2UpOworICAgICAgICAgICAg
Y29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT5hbmltYXRpb25zKCk7CisgICAgICAgICAgICBp
ZiAodCkgeworICAgICAgICAgICAgICAgIGZvciAoIDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG5hbWUgPSB0LT5hbmltYXRpb25OYW1lKCk7
CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
bmFtZS5pc0VtcHR5KCkgPyAibm9uZSIgOiBuYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NU
UklORykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbmFtZSA9IFJlbmRlclN0eWxlOjpp
bml0aWFsQW5pbWF0aW9uTmFtZSgpOworICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUobmFtZS5pc0VtcHR5KCkgPyAibm9uZSIgOiBuYW1lLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25QbGF5U3RhdGU6IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxp
c3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRy
YW5zaXRpb24qIHQgPSBzdHlsZS0+YW5pbWF0aW9ucygpOworICAgICAgICAgICAgaWYgKHQpIHsK
KyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkpCisgICAgICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoKHQtPmFuaW1hdGlvblBs
YXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nKSA/IENTU1ZhbHVlUnVubmluZyA6IENT
U1ZhbHVlUGF1c2VkKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSgoUmVuZGVyU3R5bGU6
OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZykgPyBD
U1NWYWx1ZVJ1bm5pbmcgOiBDU1NWYWx1ZVBhdXNlZCkpOworICAgICAgICAgICAgcmV0dXJuIGxp
c3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVkVHJhbnNmb3Jt
KHJlbmRlcmVyKTsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdp
blg6CisgICAgICAgICAgICBpZiAocmVuZGVyZXIpIHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0
IGJveCA9IHNpemluZ0JveChyZW5kZXJlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBD
U1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWCgpLmNhbGNNaW5WYWx1ZShi
b3gud2lkdGgoKSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZl
VmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgoKSk7ICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOgorICAgICAgICAgICAgaWYgKHJl
bmRlcmVyKSB7CisgICAgICAgICAgICAgICAgSW50UmVjdCBib3ggPSBzaXppbmdCb3gocmVuZGVy
ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUt
PnRyYW5zZm9ybU9yaWdpblkoKS5jYWxjTWluVmFsdWUoYm94LmhlaWdodCgpKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+dHJhbnNmb3Jt
T3JpZ2luWSgpKTsgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25Qcm9wZXJ0eTogIHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxp
c3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRp
b24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAg
ICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGludCBwcm9wID0gdC0+dHJhbnNpdGlvblByb3BlcnR5KCk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wID09IGNB
bmltYXRlTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSAibm9uZSI7CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpCisgICAgICAgICAg
ICAgICAgICAgICAgICBuYW1lID0gImFsbCI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBnZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8
Q1NTUHJvcGVydHlJRD4ocHJvcCkpOworICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKG5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoImFsbCIs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgICAgICByZXR1cm4gbGlz
dC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlcjoKICAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbToKQEAgLTEwNjAsMTUgKzEyNDMsNiBAQAog
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFycXVlZVNwZWVkOgogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9y
bToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpbjoKLSAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblg6Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZOgotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNpdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EdXJhdGlvbjoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Q
cm9wZXJ0eToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25SZXBlYXRD
b3VudDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbjoKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgYWJvdmUgYXJlIHVuaW1wbGVtZW50ZWQu
CiAgICAgICAgICAgICBicmVhazsKICNpZiBFTkFCTEUoU1ZHKQpJbmRleDogV2ViQ29yZS9jc3Mv
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dlYktp
dENTU0tleWZyYW1lc1J1bGUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENT
U0tleWZyYW1lc1J1bGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisg
KiAoQykgMTk5OS0yMDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAoQykgMjAwMi0y
MDAzIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAy
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZV9oCisjZGVmaW5lIFdlYktpdENTU0tleWZyYW1lc1J1bGVfaAorCisjaW5jbHVkZSAiQ1NTUnVs
ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NSdWxlTGlzdDsKK2NsYXNzIFdlYktp
dENTU0tleWZyYW1lUnVsZTsKK2NsYXNzIFN0cmluZzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9u
Q29kZTsKKworY2xhc3MgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSA6IHB1YmxpYyBDU1NSdWxlIHsK
K3B1YmxpYzoKKyAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKFN0eWxlQmFzZSogcGFyZW50KTsK
KyAgICB+V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSgpOworCisgICAgdmlydHVhbCBib29sIGlzS2V5
ZnJhbWVzUnVsZSgpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIEluaGVyaXRlZCBmcm9tIENT
U1J1bGUKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIHNob3J0IHR5cGUoKSBjb25zdCB7IHJldHVybiBX
RUJLSVRfS0VZRlJBTUVTX1JVTEU7IH0KKworICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAg
dm9pZCBzZXROYW1lKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsgICAgCisgICAgdm9p
ZCBzZXROYW1lKFN0cmluZyk7ICAgIAorCisgICAgQ1NTUnVsZUxpc3QqIGNzc1J1bGVzKCkgeyBy
ZXR1cm4gbV9sc3RDU1NSdWxlcy5nZXQoKTsgfQorCisgICAgdm9pZCBpbnNlcnRSdWxlKGNvbnN0
IFN0cmluZyYgcnVsZSk7CisgICAgdm9pZCBkZWxldGVSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsK
KyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGZpbmRSdWxlKGNvbnN0IFN0cmluZyYga2V5KTsK
KworICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKKworICAgIC8qIG5vdCBwYXJ0
IG9mIHRoZSBET00gKi8KKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKyAgICBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGUqICAgICAgICBpdGVtKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqICBpdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICB2
b2lkIGluc2VydChXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIHJ1bGUpOworCitwcm90ZWN0ZWQ6Cisg
ICAgaW50IGZpbmRSdWxlSW5kZXgoZmxvYXQga2V5KSBjb25zdDsKKyAgICAKKyAgICBSZWZQdHI8
Q1NTUnVsZUxpc3Q+IG1fbHN0Q1NTUnVsZXM7CisgICAgU3RyaW5nIG1fbmFtZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdlYktpdENTU0tleWZyYW1lc1J1bGVf
aApJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDggQEAKICAgICBjbGFzcyBNZWRpYVF1ZXJ5
RXhwOwogICAgIGNsYXNzIFN0eWxlQmFzZTsKICAgICBjbGFzcyBTdHlsZUxpc3Q7CisgICAgY2xh
c3MgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOworICAgIGNsYXNzIFdlYktpdENTU0tleWZyYW1lc1J1
bGU7CiAgICAgc3RydWN0IEZ1bmN0aW9uOwogCiAgICAgc3RydWN0IFBhcnNlU3RyaW5nIHsKQEAg
LTEwNSw2ICsxMDcsNyBAQAogCiAgICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0
KiwgY29uc3QgU3RyaW5nJik7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gcGFyc2VSdWxl
KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NS
dWxlPiBwYXJzZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBw
cm9wSWQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgc3RhdGljIGJv
b2wgcGFyc2VDb2xvcihSR0JBMzImIGNvbG9yLCBjb25zdCBTdHJpbmcmLCBib29sIHN0cmljdCA9
IGZhbHNlKTsKICAgICAgICAgYm9vbCBwYXJzZUNvbG9yKENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiwgY29uc3QgU3RyaW5nJik7CkBAIC0xMzcsMTEgKzE0MCwyMyBAQAogICAgICAgICB2b2lk
IGFkZEZpbGxWYWx1ZShSZWZQdHI8Q1NTVmFsdWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVl
PiBydmFsKTsKIAogICAgICAgICB2b2lkIGFkZFRyYW5zaXRpb25WYWx1ZShSZWZQdHI8Q1NTVmFs
dWU+JiBsdmFsLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBydmFsKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uRHVyYXRpb24oKTsKLSAgICAgICAgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUmVwZWF0Q291bnQoKTsKLSAgICAgICAgUGFzc1Jl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKTsKKyAgICAgICAg
CisgICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRGVsYXkoKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VEdXJhdGlvbigpOworICAgICAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZVRpbWluZ0Z1bmN0aW9uKCk7CisKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VBbmltYXRpb25EaXJlY3Rpb24oKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpOworICAgICAgICBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBwYXJzZUFuaW1hdGlvbk5hbWUoKTsKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gcGFyc2VBbmltYXRpb25QbGF5U3RhdGUoKTsKKworICAgICAgICBQYXNzUmVmUHRyPENT
U1ZhbHVlPiBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0eSgpOworCiAgICAgICAgIGJvb2wgcGFyc2VU
aW1pbmdGdW5jdGlvblZhbHVlKFZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0KTsKLSAg
ICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKwor
ICAgICAgICBib29sIHBhcnNlQW5pbWF0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENT
U1ZhbHVlPiYpOworICAgICAgICBib29sIHBhcnNlQW5pbWF0aW9uU2hvcnRoYW5kKGJvb2wgaW1w
b3J0YW50KTsKKwogICAgICAgICBib29sIHBhcnNlVHJhbnNpdGlvblByb3BlcnR5KGludCBwcm9w
SWQsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25TaG9y
dGhhbmQoYm9vbCBpbXBvcnRhbnQpOwogICAgICAgICAKQEAgLTIwNSw2ICsyMjAsOCBAQAogICAg
ICAgICBDU1NSdWxlTGlzdCogY3JlYXRlUnVsZUxpc3QoKTsKICAgICAgICAgQ1NTUnVsZSogY3Jl
YXRlU3R5bGVSdWxlKENTU1NlbGVjdG9yKik7CiAgICAgICAgIENTU1J1bGUqIGNyZWF0ZUZvbnRG
YWNlUnVsZSgpOworICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGNyZWF0ZUtleWZyYW1l
UnVsZShmbG9hdCBrZXkpOworICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBjcmVhdGVL
ZXlmcmFtZXNSdWxlKCk7CiAKICAgICAgICAgTWVkaWFRdWVyeUV4cCogY3JlYXRlRmxvYXRpbmdN
ZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmluZyYsIFZhbHVlTGlzdCopOwogICAgICAgICBN
ZWRpYVF1ZXJ5RXhwKiBzaW5rRmxvYXRpbmdNZWRpYVF1ZXJ5RXhwKE1lZGlhUXVlcnlFeHAqKTsK
QEAgLTIyMCw2ICsyMzcsNyBAQAogICAgICAgICBpbnQgaWQ7CiAgICAgICAgIFN0eWxlTGlzdCog
c3R5bGVFbGVtZW50OwogICAgICAgICBSZWZQdHI8Q1NTUnVsZT4gcnVsZTsKKyAgICAgICAgUmVm
UHRyPENTU1J1bGU+IGtleWZyYW1lOwogICAgICAgICBNZWRpYVF1ZXJ5KiBtZWRpYVF1ZXJ5Owog
ICAgICAgICBWYWx1ZUxpc3QqIHZhbHVlTGlzdDsKICAgICAgICAgQ1NTUHJvcGVydHkqKiBwYXJz
ZWRQcm9wZXJ0aWVzOwpJbmRleDogV2ViQ29yZS9jc3MvQ1NTVHJhbnNmb3JtVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NUcmFuc2Zvcm1WYWx1ZS5oCShyZXZpc2lvbiAzMjkx
MikKKysrIFdlYkNvcmUvY3NzL0NTU1RyYW5zZm9ybVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJDU1NWYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU1ZhbHVlTGlzdC5oIgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDU1NUcmFuc2Zvcm1WYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZQotewot
cHVibGljOgotICAgIGVudW0gVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB7Ci0gICAgICAgIFVua25v
d25UcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uLAot
ICAgICAgICBTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIFNjYWxlWVRyYW5zZm9y
bU9wZXJhdGlvbiwKLSAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLAotICAgICAgICBT
a2V3VHJhbnNmb3JtT3BlcmF0aW9uLAotICAgICAgICBTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbiwK
LSAgICAgICAgU2tld1lUcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIFRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbiwKLSAgICAgICAgVHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbiwKLSAg
ICAgICAgVHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbiwKLSAgICAgICAgTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uCi0gICAgfTsKLQotICAgIENTU1RyYW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9w
ZXJhdGlvblR5cGUpOwotICAgIHZpcnR1YWwgfkNTU1RyYW5zZm9ybVZhbHVlKCk7Ci0KLSAgICB2
b2lkIGFkZFZhbHVlKENTU1ZhbHVlKik7Ci0gICAgCi0gICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OwotIAotICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgdHlwZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdHlwZTsgfQotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuZ2V0KCk7IH0KLSAgICAKLXByb3RlY3RlZDoKLSAgICBUcmFuc2Zvcm1PcGVy
YXRpb25UeXBlIG1fdHlwZTsKLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBtX3ZhbHVlczsKLX07
Ci0KLX0KSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTTWF0cml4LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACisvKgor
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgor
ICoKKyAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIChDKSAy
MDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDIsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBXZWJLaXRDU1NNYXRyaXhf
aAorI2RlZmluZSBXZWJLaXRDU1NNYXRyaXhfaAorCisjaW5jbHVkZSAiU3R5bGVCYXNlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm0zRC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdl
YktpdENTU01hdHJpeCA6IHB1YmxpYyBTdHlsZUJhc2UgeworcHVibGljOgorICAgIFdlYktpdENT
U01hdHJpeCgpOworICAgIFdlYktpdENTU01hdHJpeChjb25zdCBXZWJLaXRDU1NNYXRyaXgmIG0p
OworICAgIFdlYktpdENTU01hdHJpeChjb25zdCBUcmFuc2Zvcm0zRCYgbSk7CisgICAgV2ViS2l0
Q1NTTWF0cml4KGNvbnN0IFN0cmluZyYgcyk7CisgICAgdmlydHVhbCB+V2ViS2l0Q1NTTWF0cml4
KCk7CisKKyAgICBmbG9hdCBtMTEoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMTEoKTsgfQor
ICAgIGZsb2F0IG0xMigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0xMigpOyB9CisgICAgZmxv
YXQgbTEzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTEzKCk7IH0KKyAgICBmbG9hdCBtMTQo
KSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMTQoKTsgfQorICAgIGZsb2F0IG0yMSgpIGNvbnN0
IHsgcmV0dXJuIG1fbWF0cml4Lm0yMSgpOyB9CisgICAgZmxvYXQgbTIyKCkgY29uc3QgeyByZXR1
cm4gbV9tYXRyaXgubTIyKCk7IH0KKyAgICBmbG9hdCBtMjMoKSBjb25zdCB7IHJldHVybiBtX21h
dHJpeC5tMjMoKTsgfQorICAgIGZsb2F0IG0yNCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0y
NCgpOyB9CisgICAgZmxvYXQgbTMxKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTMxKCk7IH0K
KyAgICBmbG9hdCBtMzIoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMzIoKTsgfQorICAgIGZs
b2F0IG0zMygpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0zMygpOyB9CisgICAgZmxvYXQgbTM0
KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTM0KCk7IH0KKyAgICBmbG9hdCBtNDEoKSBjb25z
dCB7IHJldHVybiBtX21hdHJpeC5tNDEoKTsgfQorICAgIGZsb2F0IG00MigpIGNvbnN0IHsgcmV0
dXJuIG1fbWF0cml4Lm00MigpOyB9CisgICAgZmxvYXQgbTQzKCkgY29uc3QgeyByZXR1cm4gbV9t
YXRyaXgubTQzKCk7IH0KKyAgICBmbG9hdCBtNDQoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5t
NDQoKTsgfQorICAgIAorICAgIHZvaWQgc2V0TTExKGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRN
MTEoZik7IH0KKyAgICB2b2lkIHNldE0xMihmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTEyKGYp
OyB9CisgICAgdm9pZCBzZXRNMTMoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE0xMyhmKTsgfQor
ICAgIHZvaWQgc2V0TTE0KGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNMTQoZik7IH0KKyAgICB2
b2lkIHNldE0yMShmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTIxKGYpOyB9CisgICAgdm9pZCBz
ZXRNMjIoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE0yMihmKTsgfQorICAgIHZvaWQgc2V0TTIz
KGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNMjMoZik7IH0KKyAgICB2b2lkIHNldE0yNChmbG9h
dCBmKSAgIHsgbV9tYXRyaXguc2V0TTI0KGYpOyB9CisgICAgdm9pZCBzZXRNMzEoZmxvYXQgZikg
ICB7IG1fbWF0cml4LnNldE0zMShmKTsgfQorICAgIHZvaWQgc2V0TTMyKGZsb2F0IGYpICAgeyBt
X21hdHJpeC5zZXRNMzIoZik7IH0KKyAgICB2b2lkIHNldE0zMyhmbG9hdCBmKSAgIHsgbV9tYXRy
aXguc2V0TTMzKGYpOyB9CisgICAgdm9pZCBzZXRNMzQoZmxvYXQgZikgICB7IG1fbWF0cml4LnNl
dE0zNChmKTsgfQorICAgIHZvaWQgc2V0TTQxKGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNNDEo
Zik7IH0KKyAgICB2b2lkIHNldE00MihmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTQyKGYpOyB9
CisgICAgdm9pZCBzZXRNNDMoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE00MyhmKTsgfQorICAg
IHZvaWQgc2V0TTQ0KGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNNDQoZik7IH0KKyAKKyAgICB2
b2lkICAgICAgICAgICAgICAgIHNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmluZyYgc3RyaW5nKTsK
KyAgICAKKyAgICAvLyB0aGlzID0gdGhpcyAqIHNlY29uZE1hdHJpeCAoaS5lLiBtdWx0UmlnaHQp
CisgICAgV2ViS2l0Q1NTTWF0cml4KiAgICBtdWx0aXBseShXZWJLaXRDU1NNYXRyaXgqIHNlY29u
ZE1hdHJpeCk7CisgICAgCisgICAgLy8gRklYTUU6IHdlIHJlYWxseSBzaG91bGQgaGF2ZSBhbiBl
eGNlcHRpb24gaGVyZSwgZm9yIHdoZW4gbWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlCisgICAgV2Vi
S2l0Q1NTTWF0cml4KiAgICBpbnZlcnNlKCk7CisgICAgV2ViS2l0Q1NTTWF0cml4KiAgICB0cmFu
c2xhdGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeik7CisgICAgV2ViS2l0Q1NTTWF0cml4KiAg
ICBzY2FsZShmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSwgZmxvYXQgc2NhbGVaKTsKKyAgICBX
ZWJLaXRDU1NNYXRyaXgqICAgIHJvdGF0ZShmbG9hdCByb3RaLCBmbG9hdCByb3RZLCBmbG9hdCBy
b3RaKTsKKyAgICBXZWJLaXRDU1NNYXRyaXgqICAgIHJvdGF0ZUF4aXNBbmdsZShmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB6LCBmbG9hdCBhbmdsZSk7CisgICAgCisgICAgY29uc3QgVHJhbnNmb3Jt
M0QmICAgIHRyYW5zZm9ybSgpIHsgcmV0dXJuIG1fbWF0cml4OyB9CisgICAgCisgICAgU3RyaW5n
IHRvU3RyaW5nKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVHJhbnNmb3JtM0QgbV9tYXRyaXg7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJLaXRDU1NNYXRy
aXhfaApJbmRleDogV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWVfaAorI2RlZmluZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZV9oCisKKyNpbmNsdWRlICJDU1NW
YWx1ZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZUxpc3QKK3sKK3B1YmxpYzoKKyAgICBlbnVtIFRy
YW5zZm9ybU9wZXJhdGlvblR5cGUgeworICAgICAgICBVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9u
LAorICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgU2NhbGVYVHJhbnNm
b3JtT3BlcmF0aW9uLAorICAgICAgICBTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAg
IFNjYWxlWlRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgU2NhbGUzRFRyYW5zZm9ybU9wZXJh
dGlvbiwKKyAgICAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBSb3RhdGVY
VHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBSb3RhdGVZVHJhbnNmb3JtT3BlcmF0aW9uLAor
ICAgICAgICBSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBSb3RhdGUzRFRyYW5z
Zm9ybU9wZXJhdGlvbiwKKyAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAg
U2tld1hUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFNrZXdZVHJhbnNmb3JtT3BlcmF0aW9u
LAorICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFRyYW5zbGF0
ZVhUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRp
b24sCisgICAgICAgIFRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFRyYW5z
bGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRp
b24sCisgICAgICAgIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uCisgICAgfTsKKworICAgIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlKFRyYW5zZm9ybU9wZXJhdGlvblR5cGUpOworICAgIHZpcnR1
YWwgfldlYktpdENTU1RyYW5zZm9ybVZhbHVlKCk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NU
ZXh0KCkgY29uc3Q7CisgCisgICAgVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSBvcGVyYXRpb25UeXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgVHJhbnNm
b3JtT3BlcmF0aW9uVHlwZSBtX3R5cGU7Cit9OworCit9CisKKyNlbmRpZiAvLyBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZV9oCisKSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmlkbAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKK21vZHVsZSBjc3MgeworCisgICAgLy8gSW50cm9kdWNlZCBpbiBET00gTGV2
ZWwgPzoKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBJbnRlcmZhY2VVVUlEPTM0OWM5ODllLTg3
N2YtNDE2ZS05Y2NlLWNhODExZTUyZDllOCwKKyAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPTVm
ZWIxNmU2LWY0NDEtNGI0Ni05YjEwLTllODMzYTRkY2QxYgorICAgIF0gV2ViS2l0Q1NTTWF0cml4
IHsKKworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTExOworICAgICAgICBhdHRyaWJ1dGUgZmxv
YXQgbTEyOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTEzOworICAgICAgICBhdHRyaWJ1dGUg
ZmxvYXQgbTE0OworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTIxOworICAgICAgICBhdHRyaWJ1
dGUgZmxvYXQgbTIyOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTIzOworICAgICAgICBhdHRy
aWJ1dGUgZmxvYXQgbTI0OworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTMxOworICAgICAgICBh
dHRyaWJ1dGUgZmxvYXQgbTMyOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTMzOworICAgICAg
ICBhdHRyaWJ1dGUgZmxvYXQgbTM0OworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTQxOworICAg
ICAgICBhdHRyaWJ1dGUgZmxvYXQgbTQyOworICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTQzOwor
ICAgICAgICBhdHRyaWJ1dGUgZmxvYXQgbTQ0OworCisgICAgICAgIHZvaWQgICAgICAgICAgICBz
ZXRNYXRyaXhWYWx1ZShpbiBET01TdHJpbmcgc3RyaW5nKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0
cml4IG11bHRpcGx5KGluIFdlYktpdENTU01hdHJpeCBzZWNvbmRNYXRyaXgpIHJhaXNlcyBDU1NF
eGNlcHRpb247CisgICAgICAgIFdlYktpdENTU01hdHJpeCBpbnZlcnNlKCkgcmFpc2VzIENTU0V4
Y2VwdGlvbjsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHRyYW5zbGF0ZShpbiBmbG9hdCB4LCBp
biBmbG9hdCB5LCBpbiBmbG9hdCB6KTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHNjYWxlKGlu
IGZsb2F0IHNjYWxlWCwgaW4gZmxvYXQgc2NhbGVZLCBpbiBmbG9hdCBzY2FsZVopOworICAgICAg
ICBXZWJLaXRDU1NNYXRyaXggcm90YXRlKGluIGZsb2F0IHJvdFgsIGluIGZsb2F0IHJvdFksIGlu
IGZsb2F0IHJvdFopOworICAgICAgICBXZWJLaXRDU1NNYXRyaXggcm90YXRlQXhpc0FuZ2xlKGlu
IGZsb2F0IHgsIGluIGZsb2F0IHksIGluIGZsb2F0IHosIGluIGZsb2F0IGFuZ2xlKTsKKyAgICAg
ICAgCisgICAgICAgIERPTVN0cmluZyB0b1N0cmluZygpOworICAgIH07CisKK30KSW5kZXg6IFdl
YkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2Ug
LSBTdWl0ZSAzMzAsCisgKiBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KKyAqLworCittb2R1
bGUgY3NzIHsKKworICAgIGludGVyZmFjZSBbCisgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3Is
CisgICAgICAgIEhhc0luZGV4R2V0dGVyCisgICAgICAgIEludGVyZmFjZVVVSUQ9MzAzZmU2MzIt
NWRjZi00NDcyLWI5NzctMzNhNTQ4MWUxZDEyLAorICAgICAgICBJbXBsZW1lbnRhdGlvblVVSUQ9
ZWI0OWU1YzYtNjA3NS00NWI4LWI1YzQtN2U3NzVjMDFlN2M0CisgICAgXSBXZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSA6IENTU1ZhbHVlTGlzdCB7CisKKyAgICAgICAgLy8gT3BlcmF0aW9uVHlwZXMK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1VOS05PV05fVFJBTlNGT1JNID0gMDsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX01BVFJJWCAgICAgICAgICAgID0gMTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX01BVFJJWDNEICAgICAgICAgID0gMjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1JPVEFURSAgICAgICAgICAgID0gMzsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1JPVEFURTNEICAgICAgICAgID0gNDsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1RSQU5TTEFURSAgICAgICAgID0gNTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1RSQU5TTEFURTNEICAgICAgID0gNjsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NDQUxFICAgICAgICAgICAgID0gNzsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NDQUxFM0QgICAgICAgICAgID0gODsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NLRVdYICAgICAgICAgICAgID0gOTsK
KyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NLRVdZICAgICAgICAgICAgID0gMTA7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENTU19TS0VXWiAgICAgICAgICAgICA9IDEx
OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfUEVSU1BFQ1RJVkUgICAgICAgPSAx
MjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1JPVEFURVggICAgICAgICAgID0g
MTM7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENTU19ST1RBVEVZICAgICAgICAgICA9
IDE0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfUk9UQVRFWiAgICAgICAgICAg
PSAxNTsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1RSQU5TTEFURVggICAgICAg
ID0gMTY7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENTU19UUkFOU0xBVEVZICAgICAg
ICA9IDE3OworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfVFJBTlNMQVRFWiAgICAg
ICAgPSAxODsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NDQUxFWCAgICAgICAg
ICAgID0gMTk7CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IENTU19TQ0FMRVkgICAgICAg
ICAgICA9IDIwOworICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfU0NBTEVaICAgICAg
ICAgICAgPSAyMTsKKworICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQg
b3BlcmF0aW9uVHlwZTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NN
YXRyaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1OCBAQAorLyoqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogKEMpIDE5OTktMjAwMyBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQorICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNSwgMjAwNiBBcHBsZSBDb21w
dXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIK
KyNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NNYXRyaXguaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitXZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeCgpIDogU3R5bGVC
YXNlKDApCit7Cit9CisKK1dlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KGNvbnN0IFdl
YktpdENTU01hdHJpeCYgbSkgOiBTdHlsZUJhc2UoMCkKK3sKKyAgICBtX21hdHJpeCA9IG0ubV9t
YXRyaXg7Cit9CisKK1dlYktpdENTU01hdHJpeDo6V2ViS2l0Q1NTTWF0cml4KGNvbnN0IFRyYW5z
Zm9ybTNEJiBtKSA6IFN0eWxlQmFzZSgwKQoreworICAgIG1fbWF0cml4ID0gbTsKK30KKworV2Vi
S2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgoY29uc3QgU3RyaW5nJiBzKSA6IFN0eWxlQmFz
ZSgwKQoreworICAgIHNldE1hdHJpeFZhbHVlKHMpOworfQorCitXZWJLaXRDU1NNYXRyaXg6On5X
ZWJLaXRDU1NNYXRyaXgoKQoreworfQorCit2b2lkIFdlYktpdENTU01hdHJpeDo6c2V0TWF0cml4
VmFsdWUoY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgQ1NTUGFyc2VyIHAodXNlU3RyaWN0
UGFyc2luZygpKTsKKyAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxl
RGVjbGFyYXRpb24gPSBuZXcgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisgICAgaWYgKHAu
cGFyc2VWYWx1ZShzdHlsZURlY2xhcmF0aW9uLmdldCgpLCBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
Zm9ybSwgc3RyaW5nLCB0cnVlKSkgeworICAgICAgICAvLyBjb252ZXJ0IHRvIFRyYW5zZm9ybU9w
ZXJhdGlvbnMuIFRoaXMgY2FuIGZhaWwgaWYgYSBwcm9wZXJ0eSAKKyAgICAgICAgLy8gcmVxdWly
ZXMgc3R5bGUgKGkuZS4sIHBhcmFtIHVzZXMgJ2Vtcycgb3IgJ2V4cycpCisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHZhbCA9ICBzdHlsZURlY2xhcmF0aW9uLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtKTsKKyAgICAgICAgVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zOworICAgICAgICBpZiAoIUNTU1N0eWxlU2VsZWN0b3I6OmNyZWF0ZVRy
YW5zZm9ybU9wZXJhdGlvbnModmFsLmdldCgpLCAwLCBvcGVyYXRpb25zKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIGNvbnZlcnQgdHJhbnNmb3JtIG9wZXJhdGlv
bnMgdG8gYSBUcmFuc2Zvcm0zRC4gVGhpcyBjYW4gZmFpbAorICAgICAgICAvLyBpZiBhIHBhcmFt
IGhhcyBhIHBlcmNlbnRhZ2UgKCclJykKKyAgICAgICAgVHJhbnNmb3JtM0QgdDsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG9wZXJhdGlvbnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmIChvcGVyYXRpb25zW2ldLmdldCgpLT5hcHBseSh0LCBJbnRTaXplKDAsIDApKSkK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IHNldCB0aGUgbWF0cml4CisgICAgICAgIG1fbWF0cml4ID0gdDsKKyAgICB9Cit9CisKKy8vIHRo
aXMgaXMgYSBtdWx0UmlnaHQgKHRoaXMgPSB0aGlzICogc2Vjb25kTWF0cml4KQorV2ViS2l0Q1NT
TWF0cml4KiBXZWJLaXRDU1NNYXRyaXg6Om11bHRpcGx5KFdlYktpdENTU01hdHJpeCogc2Vjb25k
TWF0cml4KQoreworICAgIFRyYW5zZm9ybTNEIHRtcChzZWNvbmRNYXRyaXgtPm1fbWF0cml4KTsK
KyAgICB0bXAubXVsdExlZnQobV9tYXRyaXgpOworICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0
cml4KHRtcCk7Cit9CisKK1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NTTWF0cml4OjppbnZlcnNl
KCkKK3sKKyAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeChtX21hdHJpeC5pbnZlcnNlKCkp
OworfQorCitXZWJLaXRDU1NNYXRyaXgqIFdlYktpdENTU01hdHJpeDo6dHJhbnNsYXRlKGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHopCit7CisgICAgaWYgKGlzbmFuKHgpKSB4ID0gMDsgCisgICAg
aWYgKGlzbmFuKHkpKSB5ID0gMDsgCisgICAgaWYgKGlzbmFuKHopKSB6ID0gMDsgCisgICAgcmV0
dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgoVHJhbnNmb3JtM0QobV9tYXRyaXgpLnRyYW5zbGF0ZTNk
KHgsIHksIHopKTsKK30KKworV2ViS2l0Q1NTTWF0cml4KiBXZWJLaXRDU1NNYXRyaXg6OnNjYWxl
KGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZLCBmbG9hdCBzY2FsZVopCit7CisgICAgaWYgKGlz
bmFuKHNjYWxlWCkpIHNjYWxlWCA9IDE7IAorICAgIGlmIChpc25hbihzY2FsZVkpKSBzY2FsZVkg
PSBzY2FsZVg7IAorICAgIGlmIChpc25hbihzY2FsZVopKSBzY2FsZVogPSAxOyAKKyAgICByZXR1
cm4gbmV3IFdlYktpdENTU01hdHJpeChUcmFuc2Zvcm0zRChtX21hdHJpeCkuc2NhbGUzZChzY2Fs
ZVgsIHNjYWxlWSwgc2NhbGVaKSk7Cit9CisKK1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NTTWF0
cml4Ojpyb3RhdGUoZmxvYXQgcm90WCwgZmxvYXQgcm90WSwgZmxvYXQgcm90WikKK3sKKyAgICAv
LyBpZiBvbmx5IHRoZSBmaXJzdCB2YWx1ZSBpcyBnaXZlbiwgY29uc2lkZXIgaXQgYXMgcm90Wgor
ICAgIGlmIChpc25hbihyb3RZKSAmJiBpc25hbihyb3RaKSkgeworICAgICAgICByb3RYID0gMDsK
KyAgICAgICAgcm90WSA9IDA7CisgICAgICAgIHJvdFogPSAwOworICAgIH0KKyAgICBlbHNlIGlm
IChpc25hbihyb3RYKSkgcm90WCA9IDA7IAorICAgIGlmIChpc25hbihyb3RZKSkgcm90WSA9IDA7
IAorICAgIGlmIChpc25hbihyb3RaKSkgcm90WiA9IDA7IAorICAgIHJldHVybiBuZXcgV2ViS2l0
Q1NTTWF0cml4KFRyYW5zZm9ybTNEKG1fbWF0cml4KS5yb3RhdGUzZChyb3RYLCByb3RZLCByb3Ra
KSk7Cit9CisKK1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NTTWF0cml4Ojpyb3RhdGVBeGlzQW5n
bGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgYW5nbGUpCit7CisgICAgaWYgKGlz
bmFuKHgpKSB4ID0gMDsgCisgICAgaWYgKGlzbmFuKHkpKSB5ID0gMDsgCisgICAgaWYgKGlzbmFu
KHopKSB6ID0gMDsKKyAgICBpZiAoaXNuYW4oYW5nbGUpKSBhbmdsZSA9IDA7CisgICAgaWYgKHgg
PT0gMCAmJiB5ID09IDAgJiYgeiA9PSAwKQorICAgICAgICB6ID0gMTsKKyAgICByZXR1cm4gbmV3
IFdlYktpdENTU01hdHJpeChUcmFuc2Zvcm0zRChtX21hdHJpeCkucm90YXRlM2QoeCwgeSwgeiwg
YW5nbGUpKTsKK30KKworU3RyaW5nIFdlYktpdENTU01hdHJpeDo6dG9TdHJpbmcoKQoreworICAg
IC8vIFRlbXBvcmFyaWx5IHJldHVybiBhbiBhZmZpbmUgdmVyc2lvbiB3aGlsZSBwYXJzaW5nIGZv
ciAzRCBpcworICAgIC8vIGRpc2FibGVkLiBUaGlzIGlzIG9idmlvdXNseSBsb3NzeS4gV2hpbGUg
dGhlIGNvbnRlbnQgY2Fubm90CisgICAgLy8gc3BlY2lmeSAzRCB2aWEgQ1NTLCB0aGUgM2QgZnVu
Y3Rpb25zIGFyZSBzdGlsbCBhdmFpbGFibGUgb24KKyAgICAvLyB0aGlzIGludGVyZmFjZS4KKyAg
ICAKKyAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lID0gbV9tYXRyaXguYWZmaW5lVHJhbnNmb3Jt
KCk7CisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJtYXRyaXgoJWYsICVmLCAlZiwgJWYsICVm
LCAlZikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbmUuYSgpLCBhZmZpbmUuYigp
LCBhZmZpbmUuYygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhZmZpbmUuZCgpLCBhZmZp
bmUuZSgpLCBhZmZpbmUuZigpKTsKKworICAgIC8qCisgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJtYXRyaXgzZCglZiwgJWYsICVmLCAlZiwgJWYsICVmLCAlZiwgJWYsICVmLCAlZiwgJWYsICVm
LCAlZiwgJWYsICVmLCAlZikiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0cml4
Lm0xMSgpLCBtX21hdHJpeC5tMTIoKSwgbV9tYXRyaXgubTEzKCksIG1fbWF0cml4Lm0xNCgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21hdHJpeC5tMjEoKSwgbV9tYXRyaXgubTIy
KCksIG1fbWF0cml4Lm0yMygpLCBtX21hdHJpeC5tMjQoKSwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9tYXRyaXgubTMxKCksIG1fbWF0cml4Lm0zMigpLCBtX21hdHJpeC5tMzMoKSwg
bV9tYXRyaXgubTM0KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0cml4Lm00
MSgpLCBtX21hdHJpeC5tNDIoKSwgbV9tYXRyaXgubTQzKCksIG1fbWF0cml4Lm00NCgpKTsKKyAg
ICAgKi8KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1dlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZShU
cmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQorOiBtX3R5cGUob3ApCit7fQorCitXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6fldlYktpdENTU1RyYW5zZm9ybVZhbHVlKCkKK3t9CisKK1N0cmluZyBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nIHJl
c3VsdDsKKyAgICBzd2l0Y2gobV90eXBlKSB7CisgICAgICAgIGNhc2UgU2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInNjYWxlKCI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAg
ICByZXN1bHQgKz0gInNjYWxlWCgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJzY2FsZVko
IjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNjYWxlWlRyYW5zZm9ybU9wZXJh
dGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGVaKCI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAg
cmVzdWx0ICs9ICJzY2FsZTNkKCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBS
b3RhdGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInJvdGF0ZSgi
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUm90YXRlWFRyYW5zZm9ybU9wZXJh
dGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAicm90YXRlWCgiOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUm90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAg
IHJlc3VsdCArPSAicm90YXRlWSgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Um90YXRlWlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAicm90YXRl
WigiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUm90YXRlM0RUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInJvdGF0ZTNkKCI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAg
ICAgcmVzdWx0ICs9ICJza2V3KCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBT
a2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAic2tld1goIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrZXdZVHJhbnNmb3JtT3BlcmF0aW9u
OgorICAgICAgICAgICAgcmVzdWx0ICs9ICJza2V3WSgiOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgcmVz
dWx0ICs9ICJ0cmFuc2xhdGUoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRy
YW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInRyYW5z
bGF0ZVgoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zbGF0ZVlUcmFu
c2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInRyYW5zbGF0ZVkoIjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRp
b246CisgICAgICAgICAgICByZXN1bHQgKz0gInRyYW5zbGF0ZVooIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFRyYW5zbGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICAgICAgcmVzdWx0ICs9ICJ0cmFuc2xhdGUzZCgiOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9
ICJtYXRyaXgoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJtYXRyaXgzZCgiOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgcmVzdWx0ICs9IENTU1ZhbHVlTGlzdDo6Y3NzVGV4dCgpOworICAgIAor
ICAgIHJlc3VsdCArPSAiKSI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQpJbmRleDogV2Vi
Q29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaGlzdG9y
eS9DYWNoZWRQYWdlLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICBt
X2RvY3VtZW50LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnVucGF1c2VBbmltYXRpb25zKCk7CiAj
ZW5kaWYKIAotICAgIG1haW5GcmFtZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZXN1bWVBbmlt
YXRpb25zKCk7CisgICAgbWFpbkZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCktPnJlc3VtZUFu
aW1hdGlvbnMobV9kb2N1bWVudC5nZXQoKSk7CiAKICAgICBtYWluRnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5zZXRNb3VzZVByZXNzTm9kZShtb3VzZVByZXNzTm9kZSgpKTsKICAgICAgICAgCkluZGV4
OiBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIs
NyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTsKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7
CiBjbGFzcyBSZW5kZXJTdHlsZTsKQEAgLTQyLDE0ICs0MywyNSBAQAogICAgIEFuaW1hdGlvbkNv
bnRyb2xsZXIoRnJhbWUqKTsKICAgICB+QW5pbWF0aW9uQ29udHJvbGxlcigpOwogICAgIAotICAg
IHZvaWQgY2FuY2VsSW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCopOwotICAgIFJlbmRl
clN0eWxlKiB1cGRhdGVJbXBsaWNpdEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqIG5ld1N0eWxlKTsKKyAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7
CisgICAgUmVuZGVyU3R5bGUqIHVwZGF0ZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiwgUmVuZGVy
U3R5bGUqIG5ld1N0eWxlKTsKICAgICAKLSAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7Ci0g
ICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisgICAgdm9pZCBzZXRBbmltYXRpb25TdGFydFRp
bWUoUmVuZGVyT2JqZWN0KiBvYmosIGRvdWJsZSB0KTsKKyAgICB2b2lkIHNldFRyYW5zaXRpb25T
dGFydFRpbWUoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOwogICAg
IAorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0KiBv
YmosIGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cyhEb2N1bWVudCogZG9jdW1lbnQpOworICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVu
dCogZG9jdW1lbnQpOworICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKKyAgICAKKyAg
ICB2b2lkIHN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgIAorICAgIHZvaWQg
c3R5bGVJc1NldHVwKCk7CisgICAgCiBwcml2YXRlOgogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlKiBtX2RhdGE7CisgICAgCiB9OwogCiB9CkluZGV4OiBXZWJDb3JlL3BhZ2UvQW5pbWF0
aW9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcGFnZS9BbmltYXRpb25D
b250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogI2luY2x1ZGUg
IkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
KyNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKQEAgLTQzLDYgKzQ1LDEyIEBACiAKIHN0
YXRpYyBjb25zdCBkb3VibGUgY0FuaW1hdGlvblRpbWVyRGVsYXkgPSAwLjAyNTsKIAorc3RhdGlj
IHZvaWQgc2V0Q2hhbmdlZChOb2RlKiBub2RlKQoreworICAgIEFTU0VSVCghbm9kZSB8fCAobm9k
ZS0+ZG9jdW1lbnQoKSAmJiAhbm9kZS0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAg
IG5vZGUtPnNldENoYW5nZWQoQW5pbWF0YWJsZVN0eWxlQ2hhbmdlKTsKK30KKwogLy8gVGhlIGVw
c2lsb24gdmFsdWUgd2UgcGFzcyB0byBVbml0QmV6aWVyOjpzb2x2ZSBnaXZlbiB0aGF0IHRoZSBh
bmltYXRpb24gaXMgZ29pbmcgdG8gcnVuIG92ZXIgfGR1cnwgc2Vjb25kcy4gVGhlIGxvbmdlciB0
aGUKIC8vIGFuaW1hdGlvbiwgdGhlIG1vcmUgcHJlY2lzaW9uIHdlIG5lZWQgaW4gdGhlIHRpbWlu
ZyBmdW5jdGlvbiByZXN1bHQgdG8gYXZvaWQgdWdseSBkaXNjb250aW51aXRpZXMuCiBzdGF0aWMg
aW5saW5lIGRvdWJsZSBzb2x2ZUVwc2lsb24oZG91YmxlIGR1cmF0aW9uKSB7IHJldHVybiAxLiAv
ICgyMDAuICogZHVyYXRpb24pOyB9CkBAIC01NSwxMDggKzYzLDg5OSBAQAogICAgIHJldHVybiBi
ZXppZXIuc29sdmUodCwgc29sdmVFcHNpbG9uKGR1cmF0aW9uKSk7CiB9CiAKLWNsYXNzIENvbXBv
c2l0ZUltcGxpY2l0QW5pbWF0aW9uOworI3ByYWdtYSBtYXJrIC0KIAotY2xhc3MgSW1wbGljaXRB
bmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFibGUgeworY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9u
OworY2xhc3MgQW5pbWF0aW9uQmFzZTsKKworY2xhc3MgQW5pbWF0aW9uVGltZXJCYXNlIHsKIHB1
YmxpYzoKLSAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKik7Ci0gICAgfklt
cGxpY2l0QW5pbWF0aW9uKCk7CisgICAgQW5pbWF0aW9uVGltZXJCYXNlKEFuaW1hdGlvbkJhc2Uq
IGFuaW0pCisgICAgOiBtX3RpbWVyKHRoaXMsICZBbmltYXRpb25UaW1lckJhc2U6OnRpbWVyRmly
ZWQpCisgICAgLCBtX2FuaW0oYW5pbSkKKyAgICB7CisgICAgICAgIG1fdGltZXIuc3RhcnRPbmVT
aG90KDApOworICAgIH0KKyAgICB2aXJ0dWFsIH5BbmltYXRpb25UaW1lckJhc2UoKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0PTApCisgICAg
eworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCh0aW1lb3V0KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBjYW5jZWxUaW1lcigpCisgICAgeworICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAg
ICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uVGlt
ZXJCYXNlPiopID0gMDsKKyAgICAKK3ByaXZhdGU6CisgICAgVGltZXI8QW5pbWF0aW9uVGltZXJC
YXNlPiBtX3RpbWVyOworICAgIAorcHJvdGVjdGVkOgorICAgIEFuaW1hdGlvbkJhc2UqIG1fYW5p
bTsKK307CiAKLSAgICB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qLCBS
ZW5kZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHlsZSk7CitjbGFzcyBBbmltYXRpb25F
dmVudERpc3BhdGNoZXIgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAg
ICBBbmltYXRpb25FdmVudERpc3BhdGNoZXIoQW5pbWF0aW9uQmFzZSogYW5pbSkgCisgICAgOiBB
bmltYXRpb25UaW1lckJhc2UoYW5pbSkKKyAgICAsIG1fcHJvcGVydHkoLTEpCisgICAgLCBtX3Jl
c2V0KGZhbHNlKQorICAgICwgbV9lbGFwc2VkVGltZSgtMSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgfkFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlcigpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoSFRNTEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBib29sIHJlc2V0LCAKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkK
KyAgICB7CisgICAgICAgIG1fZWxlbWVudCA9IGVsZW1lbnQ7CisgICAgICAgIG1fbmFtZSA9IG5h
bWU7CisgICAgICAgIG1fcHJvcGVydHkgPSBwcm9wZXJ0eTsKKyAgICAgICAgbV9yZXNldCA9IHJl
c2V0OworICAgICAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKyAgICAgICAgbV9lbGFwc2Vk
VGltZSA9IGVsYXBzZWRUaW1lOworICAgICAgICBBbmltYXRpb25UaW1lckJhc2U6OnN0YXJ0VGlt
ZXIoKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIHRpbWVyRmlyZWQoVGltZXI8QW5p
bWF0aW9uVGltZXJCYXNlPiopOworICAgIAorcHJpdmF0ZToKKyAgICBSZWZQdHI8SFRNTEVsZW1l
bnQ+IG1fZWxlbWVudDsKKyAgICBBdG9taWNTdHJpbmcgbV9uYW1lOworICAgIGludCBtX3Byb3Bl
cnR5OworICAgIGJvb2wgbV9yZXNldDsKKyAgICBBdG9taWNTdHJpbmcgbV9ldmVudFR5cGU7Cisg
ICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Cit9OwogCi0gICAgdm9pZCByZXNldChSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJTdHlsZSogZnJvbSwgUmVuZGVyU3R5bGUqIHRvKTsKK2NsYXNzIEFuaW1hdGlv
blRpbWVyQ2FsbGJhY2sgOiBwdWJsaWMgQW5pbWF0aW9uVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAg
ICBBbmltYXRpb25UaW1lckNhbGxiYWNrKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAorICAgIDogQW5p
bWF0aW9uVGltZXJCYXNlKGFuaW0pCisgICAgLCBtX2VsYXBzZWRUaW1lKDApCisgICAgeyB9Cisg
ICAgdmlydHVhbCB+QW5pbWF0aW9uVGltZXJDYWxsYmFjaygpIHsgfQogICAgIAotICAgIGRvdWJs
ZSBwcm9ncmVzcygpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFu
aW1hdGlvblRpbWVyQmFzZT4qKTsKKyAgICAKKyAgICB2b2lkIHN0YXJ0VGltZXIoZG91YmxlIHRp
bWVvdXQsIGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUp
CisgICAgeworICAgICAgICBtX2V2ZW50VHlwZSA9IGV2ZW50VHlwZTsKKyAgICAgICAgbV9lbGFw
c2VkVGltZSA9IGVsYXBzZWRUaW1lOworICAgICAgICBBbmltYXRpb25UaW1lckJhc2U6OnN0YXJ0
VGltZXIodGltZW91dCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBBdG9taWNTdHJpbmcg
bV9ldmVudFR5cGU7CisgICAgZG91YmxlIG1fZWxhcHNlZFRpbWU7Cit9OwogCi0gICAgYm9vbCBm
aW5pc2hlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmluaXNoZWQ7IH0KKyNwcmFnbWEgbWFyayAtCisg
ICAgCitjbGFzcyBJbXBsaWNpdEFuaW1hdGlvbjsKK2NsYXNzIEtleWZyYW1lQW5pbWF0aW9uOwor
Y2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CiAKK2NsYXNzIENvbXBvc2l0ZUFuaW1h
dGlvbiA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CitwdWJsaWM6CisgICAgQ29tcG9zaXRlQW5pbWF0
aW9uKGJvb2wgc3VzcGVuZGVkLCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogYW5pbWF0aW9u
Q29udHJvbGxlcikKKyAgICA6IG1fc3VzcGVuZGVkKHN1c3BlbmRlZCkKKyAgICAsIG1fYW5pbWF0
aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQorICAgICwgbV9udW1TdHlsZUlzU2V0
dXBXYWl0ZXJzKDApCisgICAgeyB9CisgICAgCisgICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpCisg
ICAgeworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV90cmFuc2l0aW9ucyk7CisgICAgICAgIGRl
bGV0ZUFsbFZhbHVlcyhtX2tleWZyYW1lQW5pbWF0aW9ucyk7CisgICAgfQorICAgIAorICAgIFJl
bmRlclN0eWxlKiBhbmltYXRlKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRp
bmcoYm9vbCBpbkFuaW1hdGluZyk7CisgICAgYm9vbCBhbmltYXRpbmcoKTsKKyAgICAKKyAgICBi
b29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KGludCBwcm9wKSBjb25zdCB7IHJldHVybiBtX3Ry
YW5zaXRpb25zLmNvbnRhaW5zKHByb3ApOyB9CisgICAgCisgICAgdm9pZCByZXNldFRyYW5zaXRp
b25zKFJlbmRlck9iamVjdCopOworICAgIHZvaWQgcmVzZXRBbmltYXRpb25zKFJlbmRlck9iamVj
dCopOworICAgIAorICAgIHZvaWQgY2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmpl
Y3QqKTsKKyAgICAKKyAgICB2b2lkIHNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCk7Cisg
ICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKGludCBwcm9wZXJ0eSwgZG91YmxlIHQpOwor
ICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnMoKTsKKyAgICBib29sIHN1c3BlbmRlZCgpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9zdXNw
ZW5kZWQ7IH0KKyAgICAKKyAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKGludCBw
cm9wZXJ0eSk7CisgICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKGlu
dCBwcm9wZXJ0eSk7CisgICAgCisgICAgdm9pZCBzdHlsZUlzU2V0dXAoKTsKKyAgICAKKyAgICBi
b29sIGlzQW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIHNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoYm9vbCB3YWl0aW5nKTsKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgdm9p
ZCB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyAgICAKKyAg
ICBpbnQgZmluZEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSk7Cisg
ICAgCiBwcml2YXRlOgotICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5kaW5n
LgotICAgIFJlbmRlclN0eWxlKiBtX2Zyb21TdHlsZTsKLSAgICBSZW5kZXJTdHlsZSogbV90b1N0
eWxlOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj4gQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDsKKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
ICAgbV90cmFuc2l0aW9uczsKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPiAgbV9rZXlm
cmFtZUFuaW1hdGlvbnM7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIG1fc3VzcGVu
ZGVkOworICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKiBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXI7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1fbnVtU3R5bGVJc1NldHVwV2Fp
dGVyczsKK307CiAKLSAgICBpbnQgbV9wcm9wZXJ0eTsKLSAgICBUaW1pbmdGdW5jdGlvbiBtX2Z1
bmN0aW9uOwotICAgIGRvdWJsZSBtX2R1cmF0aW9uOworI3ByYWdtYSBtYXJrIC0KIAotICAgIGlu
dCBtX3JlcGVhdENvdW50OworY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1YmxpYyBOb25jb3B5YWJs
ZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uQmFzZShjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0
aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmlt
KTsgICAgCisgICAgdmlydHVhbCB+QW5pbWF0aW9uQmFzZSgpCisgICAgeworICAgICAgICBpZiAo
bV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkKKyAgICAgICAgICAg
IG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOworICAgIH0KKyAg
ICAKKyAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3Q7
IH0KKyAgICBkb3VibGUgc3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydFRpbWU7IH0K
KyAgICBkb3VibGUgZHVyYXRpb24oKSBjb25zdCAgeyByZXR1cm4gbV9hbmltYXRpb24tPmR1cmF0
aW9uKCk7IH0KKyAgICAKKyAgICB2b2lkIGNhbmNlbFRpbWVycygpCisgICAgeworICAgICAgICBt
X2FuaW1hdGlvblRpbWVyQ2FsbGJhY2suY2FuY2VsVGltZXIoKTsKKyAgICAgICAgbV9hbmltYXRp
b25FdmVudERpc3BhdGNoZXIuY2FuY2VsVGltZXIoKTsKKyAgICB9CisgICAgCisgICAgLy8gQW5p
bWF0aW9ucyBhbmQgVHJhbnNpdGlvbnMgZ28gdGhyb3VnaCB0aGUgc3RhdGVzIGJlbG93LiBXaGVu
IGVudGVyaW5nIHRoZSBTVEFSVEVEIHN0YXRlCisgICAgLy8gdGhlIGFuaW1hdGlvbiBpcyBzdGFy
dGVkLiBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgZGVmZXJyZWQgcmVzcG9uc2UgZnJvbSB0
aGUgYW5pbWF0b3IuCisgICAgLy8gSWYgc28sIHdlIHN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB0
aGF0IHJlc3BvbnNlIGlzIHJlY2VpdmVkIChhbmQgaXQgcmV0dXJucyB0aGUgc3RhcnQgdGltZSku
CisgICAgLy8gT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgdGltZSBhcyB0aGUgc3RhcnQg
dGltZSBhbmQgZ28gaW1tZWRpYXRlbHkgdG8gdGhlIExPT1BJTkcgb3IKKyAgICAvLyBFTkRJTkcg
c3RhdGUuCisgICAgZW51bSBBbmltU3RhdGUgeyAKKyAgICAgICAgU1RBVEVfTkVXLCAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbmltYXRpb24ganVzdCBjcmVhdGVkLCBhbmltYXRpb24gbm90IHJ1
bm5pbmcgeWV0CisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfVElNRVIsICAgICAgICAgLy8gc3Rh
cnQgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9TVEFSVF9X
QUlUX1NUWUxFX1NFVFVQLCAgIC8vIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwIHNvIHdlIGNhbiBz
dGFydCBhbmltYXRpb25zCisgICAgICAgIFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UsICAgICAg
Ly8gYW5pbWF0aW9uIHN0YXJ0ZWQsIHdhaXRpbmcgZm9yIHJlc3BvbnNlCisgICAgICAgIFNUQVRF
X0xPT1BJTkcsICAgICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlv
biBydW5uaW5nLCBsb29wIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKKyAgICAgICAg
U1RBVEVfRU5ESU5HLCAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5p
bWF0aW9uIHJ1bm5pbmcsIGVuZCB0aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAg
ICAgIFNUQVRFX1BBVVNFRF9XQUlUX1RJTUVSLCAgICAgICAgLy8gYW5pbWF0aW9uIGluIHBhdXNl
IG1vZGUgd2hlbiBhbmltYXRpb24gc3RhcnRlZAorICAgICAgICBTVEFURV9QQVVTRURfV0FJVF9S
RVNQT05TRSwgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQgd2hlbiBpbiBTVEFSVElORyBzdGF0ZQor
ICAgICAgICBTVEFURV9QQVVTRURfUlVOLCAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVz
ZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQorICAgICAgICBTVEFURV9ET05FICAg
ICAgICAgICAgICAgICAgICAgIC8vIGVuZCB0aW1lciBmaXJlZCwgYW5pbWF0aW9uIGZpbmlzaGVk
IGFuZCByZW1vdmVkCisgICAgfTsKKyAgICAKKyAgICBlbnVtIEFuaW1TdGF0ZUlucHV0IHsKKyAg
ICAgICAgU1RBVEVfSU5QVVRfTUFLRV9ORVcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5l
dyBmcm9tIGFueSBzdGF0ZQorICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sICAg
IC8vIGFuaW1hdGlvbiByZXF1ZXN0cyBhIHN0YXJ0CisgICAgICAgIFNUQVRFX0lOUFVUX1JFU1RB
UlRfQU5JTUFUSU9OLCAgLy8gZm9yY2UgYSByZXN0YXJ0IGZyb20gYW55IHN0YXRlCisgICAgICAg
IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVELCAgLy8gc3RhcnQgdGltZXIgZmlyZWQKKyAg
ICAgICAgU1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAsICAgICAgICAvLyBzdHlsZSBpcyBzZXR1cCwg
cmVhZHkgdG8gc3RhcnQgYW5pbWF0aW5nCisgICAgICAgIFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVf
U0VULCAgICAgLy8gbV9zdGFydFRpbWUgd2FzIHNldAorICAgICAgICBTVEFURV9JTlBVVF9MT09Q
X1RJTUVSX0ZJUkVELCAgIC8vIGxvb3AgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5QVVRf
RU5EX1RJTUVSX0ZJUkVELCAgICAvLyBlbmQgdGltZXIgZmlyZWQKKyAgICAgICAgU1RBVEVfSU5Q
VVRfUEFVU0VfT1ZFUlJJREUsICAgICAvLyBwYXVzZSBhbiBhbmltYXRpb24gZHVlIHRvIG92ZXJy
aWRlCisgICAgICAgIFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSwgICAgLy8gcmVzdW1lIGFu
IG92ZXJyaWRkZW4gYW5pbWF0aW9uCisgICAgICAgIFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVO
TklORywgLy8gcGxheSBzdGF0ZSBwYXVzZWQgLT4gcnVubmluZworICAgICAgICBTVEFURV9JTlBV
VF9QTEFZX1NUQVRFX1BBVVNFRCwgIC8vIHBsYXkgc3RhdGUgcnVubmluZyAtPiBwYXVzZWQKKyAg
ICAgICAgU1RBVEVfSU5QVVRfRU5EX0FOSU1BVElPTiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJv
bSBhbnkgc3RhdGUKKyAgICB9OworICAgIAorICAgIC8vIENhbGxlZCB3aGVuIGFuaW1hdGlvbiBp
cyBpbiBORVcgc3RhdGUgdG8gc3RhcnQgYW5pbWF0aW9uCisgICAgdm9pZCB1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSk7CisgICAgCisgICAgLy8g
QW5pbWF0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkLCBhdCBwYXNzZWQgdGltZQorICAgIC8vIFRo
aXMgaXMgYSBjYWxsYmFjayBhbmQgaXMgb25seSByZWNlaXZlZCB3aGVuIFJlbmRlck9iamVjdDo6
c3RhcnRBbmltYXRpb24oKSBvciBSZW5kZXJPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbigpIAorICAg
IC8vIHJldHVybnMgdHJ1ZS4gSWYgUmVuZGVyT2JqZWN0OjoKKyAgICB2b2lkIG9uQW5pbWF0aW9u
U3RhcnRSZXNwb25zZShkb3VibGUgc3RhcnRUaW1lKTsKKyAgICAKKyAgICAvLyBDYWxsZWQgdG8g
Y2hhbmdlIHRvIG9yIGZyb20gcGF1c2VkIHN0YXRlCisgICAgdm9pZCB1cGRhdGVQbGF5U3RhdGUo
Ym9vbCBydW5uaW5nKTsKKyAgICBib29sIHBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvbiAmJiBtX2FuaW1hdGlvbi0+YW5pbWF0aW9uUGxheVN0YXRlKCkgPT0gQW5p
bVBsYXlTdGF0ZVBsYXlpbmc7IH0KKyAgICAKKyAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXIHx8IG1fYW5pbVN0YXRlID09IFNU
QVRFX1NUQVJUX1dBSVRfVElNRVI7IH0KKyAgICBib29sIHByZWFjdGl2ZSgpIGNvbnN0CisgICAg
eyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXIHx8CisgICAgICAgICAgICAgbV9hbmlt
U3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9USU1FUiB8fAorICAgICAgICAgICAgIG1fYW5pbVN0
YXRlID09IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVAgfHwKKyAgICAgICAgICAgICBtX2Fu
aW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgIH0KKyAgICBib29sIHBv
c3RhY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9ET05FOyB9Cisg
ICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJldHVybiAhcG9zdGFjdGl2ZSgpICYmICFwcmVhY3Rp
dmUoKTsgfQorICAgIGJvb2wgcnVubmluZygpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIDwg
MDsgfQorICAgIGJvb2wgaXNuZXcoKSBjb25zdCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFU
RV9ORVc7IH0KKyAgICBib29sIHdhaXRpbmdGb3JTdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOyB9CisgICAgYm9vbCB3YWl0
aW5nRm9yU3R5bGVTZXR1cCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0YXRlID09IFNUQVRFX1NU
QVJUX1dBSVRfU1RZTEVfU0VUVVA7IH0KKyAgICBib29sIHdhaXRpbmdGb3JFbmRFdmVudCgpIGNv
bnN0ICB7IHJldHVybiBtX3dhaXRpbmdGb3JFbmRFdmVudDsgfQorICAgIAorICAgIC8vICJhbmlt
YXRpbmciIG1lYW5zIHRoYXQgc29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyBhIHRp
bWVyIHRvIGtlZXAgZmlyaW5nCisgICAgLy8gKGUuZy4gYSBzb2Z0d2FyZSBhbmltYXRpb24pCisg
ICAgdm9pZCBzZXRBbmltYXRpbmcoYm9vbCBpbkFuaW1hdGluZyA9IHRydWUpIHsgbV9hbmltYXRp
bmcgPSBpbkFuaW1hdGluZzsgfQorICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpbmc7IH0KKyAgICAKKyAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBk
b3VibGUgb2Zmc2V0KSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShDb21w
b3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVu
dFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFy
Z2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b20gPSAwLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKSB7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisg
ICAgdm9pZCBhbmltYXRpb25UaW1lckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBl
dmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgdm9pZCBhbmltYXRpb25FdmVudERp
c3BhdGNoZXJGaXJlZChIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lLCBpbnQgcHJvcGVydHksIGJvb2wgcmVzZXQsIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFw
c2VkVGltZSk7CisgICAgCisgICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgVHJhbnNpdGlv
biogYW5pbSkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb24tPnRyYW5zaXRpb25zTWF0Y2goYW5p
bSwgZmFsc2UpOyB9CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlv
biogYW5pbSkgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+KGFuaW0pOyB9
CisgICAgCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRl
bi4gVGhpcyB3aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCisgICAgLy8gSW1wbGljaXRBbmltYXRp
b25zIGFuZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9y
Y2UKKyAgICAvLyBzZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlk
ZGVuLCBpdCB3aWxsIHByb2JhYmx5IG5vdCBnZXQKKyAgICAvLyBiYWNrIHRoZSBTVEFSVF9USU1F
IGV2ZW50LgorICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gZmFs
c2U7IH0KKyAgICAKKyAgICAvLyBEb2VzIHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2
ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/CisgICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShp
bnQgcHJvcGVydHkpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgYm9vbCBpc0FuaW1hdGlu
Z1Byb3BlcnR5KGludCBwcm9wZXJ0eSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoIXdh
aXRpbmdUb1N0YXJ0KCkgJiYgIXBvc3RhY3RpdmUoKSkgJiYgYWZmZWN0c1Byb3BlcnR5KHByb3Bl
cnR5KTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnRG
b3JFdmVudERpc3BhdGNoKCkKKyAgICB7CisgICAgICAgIGlmIChtX29iamVjdC0+bm9kZSgpICYm
IG1fb2JqZWN0LT5ub2RlKCktPmlzSFRNTEVsZW1lbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxIVE1MRWxlbWVudCo+KG1fb2JqZWN0LT5ub2RlKCkpOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CisgICAgCisgICAgLy8gVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhl
IEtleWZyYW1lQW5pbWF0aW9uIHN1YmNsYXNzIHRvIG92ZXJyaWRlIEltcGxpY2l0QW5pbWF0aW9u
cworICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKSB7IH0KKyAgICAKKyAgICBDb21wb3Np
dGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fY29tcEFuaW07IH0K
KyAgICAKKyAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgdGlt
ZXIgZmlyZXMgc28gc3ViY2xhc3NlcyBjYW4gZG8gYW55IGV4dHJhIHdvcmsKKyAgICB2aXJ0dWFs
IHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAgIHZpcnR1
YWwgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAg
IHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpIHsgfQorICAg
IHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKSB7IHJldHVybiBm
YWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCByZXNldCkgeyB9Cisg
ICAgCisgICAgdm9pZCBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
QW5pbVN0YXRlIG1fYW5pbVN0YXRlOwogICAgIGludCBtX2l0ZXJhdGlvbjsKICAgICAKLSAgICBi
b29sIG1fZmluaXNoZWQ7ICAgIAorICAgIGJvb2wgbV9hbmltYXRpbmc7ICAgICAgIC8vIHRyYW5z
aXRpb24vYW5pbWF0aW9uIHJlcXVpcmVzIGNvbnRpbnVhbCB0aW1lciBmaXJpbmcKKyAgICBib29s
IG1fd2FpdGVkRm9yUmVzcG9uc2U7CiAgICAgZG91YmxlIG1fc3RhcnRUaW1lOwotICAgIGJvb2wg
bV9wYXVzZWQ7CiAgICAgZG91YmxlIG1fcGF1c2VUaW1lOworICAgIFJlbmRlck9iamVjdCogICBt
X29iamVjdDsKKyAgICAKKyAgICBBbmltYXRpb25UaW1lckNhbGxiYWNrIG1fYW5pbWF0aW9uVGlt
ZXJDYWxsYmFjazsKKyAgICBBbmltYXRpb25FdmVudERpc3BhdGNoZXIgbV9hbmltYXRpb25FdmVu
dERpc3BhdGNoZXI7CisgICAgUmVmUHRyPFRyYW5zaXRpb24+IG1fYW5pbWF0aW9uOworICAgIENv
bXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wQW5pbTsKKyAgICBib29sIG1fd2FpdGluZ0ZvckVuZEV2
ZW50OwogfTsKIAotY2xhc3MgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgTm9u
Y29weWFibGUgeworI3ByYWdtYSBtYXJrIC0KKworY2xhc3MgSW1wbGljaXRBbmltYXRpb24gOiBw
dWJsaWMgQW5pbWF0aW9uQmFzZSB7CiBwdWJsaWM6Ci0gICAgfkNvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKCkgeyBkZWxldGVBbGxWYWx1ZXMobV9hbmltYXRpb25zKTsgfQorICAgIEltcGxpY2l0
QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVu
ZGVyZXIsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0pCisgICAgOiBBbmltYXRpb25CYXNl
KHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKKyAgICAsIG1fcHJvcGVydHkodHJhbnNp
dGlvbi0+dHJhbnNpdGlvblByb3BlcnR5KCkpCisgICAgLCBtX292ZXJyaWRkZW4oZmFsc2UpCisg
ICAgLCBtX2Zyb21TdHlsZSgwKQorICAgICwgbV90b1N0eWxlKDApCisgICAgeworICAgIH0KKyAg
ICAKKyAgICB2aXJ0dWFsIH5JbXBsaWNpdEFuaW1hdGlvbigpCisgICAgeworICAgICAgICBBU1NF
UlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOworICAgICAgICAKKyAgICAgICAgLy8gSWYg
d2Ugd2VyZSB3YWl0aW5nIGZvciBhbiBlbmQgZXZlbnQsIHdlIG5lZWQgdG8gZmluaXNoIHRoZSBh
bmltYXRpb24gdG8gbWFrZSBzdXJlIG5vIG9sZAorICAgICAgICAvLyBhbmltYXRpb25zIHN0aWNr
IGFyb3VuZCBpbiB0aGUgbG93ZXIgbGV2ZWxzCisgICAgICAgIGlmICh3YWl0aW5nRm9yRW5kRXZl
bnQoKSAmJiBtX29iamVjdCkKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAgICAgLyogc3Bt
YQorICAgICAgICAgICAgbV9vYmplY3QtPnRyYW5zaXRpb25GaW5pc2hlZChtX3Byb3BlcnR5KTsK
KyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICAvLyBEbyB0aGUgY2xlYW51cCBoZXJlIGlu
c3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMgZ2V0
IGNhbGxlZAorICAgICAgICBpZiAoIXBvc3RhY3RpdmUoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OLCAtMSk7ICAgICAKKyAgICB9Cisg
ICAgCisgICAgaW50IHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVy
dHk7IH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGluRWxh
cHNlZFRpbWUpOworICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5U
aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpOworICAgIAor
ICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiosIFJlbmRlck9iamVj
dCosIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVuZGVyU3R5bGUqJiBpb0Fu
aW1hdGVkU3R5bGUpOworICAgIHZpcnR1YWwgdm9pZCByZXNldChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSA9IDAsIGNvbnN0IFJlbmRlclN0eWxlKiB0byA9
IDApOworICAgIAorICAgIHZvaWQgc2V0T3ZlcnJpZGRlbihib29sIGIpOworICAgIHZpcnR1YWwg
Ym9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyByZXR1cm4gbV9vdmVycmlkZGVuOyB9CisgICAgCisg
ICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
CisgICAgCisgICAgdmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNv
bnN0OworICAgIAorICAgIGJvb2wgaGFzU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb21TdHls
ZSAmJiBtX3RvU3R5bGU7IH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBib29sIHNob3VsZFNlbmRF
dmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUgaW5MaXN0ZW5lclR5cGUpCisg
ICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCktPmhhc0xpc3RlbmVyVHlw
ZShpbkxpc3RlbmVyVHlwZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2VuZFRyYW5zaXRpb25F
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUgaW5FbGFwc2VkVGlt
ZSk7ICAgIAorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBib29sIG1f
b3ZlcnJpZGRlbjsKKyAgICAKKyAgICAvLyBUaGUgdHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBibGVu
ZGluZy4KKyAgICBSZW5kZXJTdHlsZSogbV9mcm9tU3R5bGU7CisgICAgUmVuZGVyU3R5bGUqIG1f
dG9TdHlsZTsKK307CiAKLSAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5kZXJPYmplY3QqLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworI3By
YWdtYSBtYXJrIC0KKyAgICAKK2NsYXNzIEtleWZyYW1lQW5pbWF0aW9uIDogcHVibGljIEFuaW1h
dGlvbkJhc2UgeworcHVibGljOgorICAgIEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRp
b24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGludCBpbmRleCwgQ29tcG9z
aXRlQW5pbWF0aW9uKiBjb21wQW5pbSkKKyAgICA6IEFuaW1hdGlvbkJhc2UodHJhbnNpdGlvbiwg
cmVuZGVyZXIsIGNvbXBBbmltKQorICAgICwgbV9rZXlmcmFtZXModHJhbnNpdGlvbi0+a2V5ZnJh
bWVMaXN0KCkpCisgICAgLCBtX25hbWUodHJhbnNpdGlvbi0+YW5pbWF0aW9uTmFtZSgpKQorICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfktleWZyYW1lQW5p
bWF0aW9uKCkKKyAgICB7CisgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYW4gZW5k
IGV2ZW50LCB3ZSBuZWVkIHRvIGZpbmlzaCB0aGUgYW5pbWF0aW9uIHRvIG1ha2Ugc3VyZSBubyBv
bGQKKyAgICAgICAgLy8gYW5pbWF0aW9ucyBzdGljayBhcm91bmQgaW4gdGhlIGxvd2VyIGxldmVs
cworICAgICAgICBpZiAod2FpdGluZ0ZvckVuZEV2ZW50KCkgJiYgbV9vYmplY3QpIAorICAgICAg
ICAgICAgQVNTRVJUKDApOworICAgICAgICAvKiBzcG1hCisgICAgICAgICAgICBtX29iamVjdC0+
YW5pbWF0aW9uRmluaXNoZWQobV9uYW1lLCAwLCB0cnVlKTsKKyAgICAgICAgICovCisgICAgICAg
IC8vIERvIHRoZSBjbGVhbnVwIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUgYmFzZSBjbGFzcyBzbyB0
aGUgc3BlY2lhbGl6ZWQgbWV0aG9kcyBnZXQgY2FsbGVkCisgICAgICAgIGlmICghcG9zdGFjdGl2
ZSgpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VORF9BTklN
QVRJT04sIC0xKTsgICAgIAorICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0ZShD
b21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAgICAKKyAgICB2
b2lkIHNldE5hbWUoY29uc3QgU3RyaW5nJiBzKSB7IG1fbmFtZSA9IHM7IH0KKyAgICBjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKyAgICAKKyAgICB2
aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAg
ICAKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUg
aW5FbGFwc2VkVGltZSk7CisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRv
dWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25FbmQoZG91
YmxlIGluRWxhcHNlZFRpbWUpOworICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3Vi
bGUgYmVnaW5UaW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQp
OworICAgIAorICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICBib29sIHNo
b3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUgaW5MaXN0ZW5l
clR5cGUpCisgICAgeworICAgICAgICByZXR1cm4gbV9vYmplY3QtPmRvY3VtZW50KCktPmhhc0xp
c3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7CisgICAgfQorICAgIAorICAgIGJvb2wgc2VuZEFu
aW1hdGlvbkV2ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgaW5FdmVudFR5cGUsIGRvdWJsZSBpbkVs
YXBzZWRUaW1lKTsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c1Byb3BlcnR5KGludCBw
cm9wZXJ0eSkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIC8vIFRoZSBrZXlmcmFtZXMgdGhh
dCB3ZSBhcmUgYmxlbmRpbmcuCisgICAgUmVmUHRyPEtleWZyYW1lTGlzdD4gbV9rZXlmcmFtZXM7
CisgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKKyAgICBpbnQgbV9pbmRleDsKK307CisgICAgCisj
cHJhZ21hIG1hcmsgLQogCi0gICAgYm9vbCBhbmltYXRpbmcoKSBjb25zdDsKK3ZvaWQgQW5pbWF0
aW9uVGltZXJDYWxsYmFjazo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikK
K3sKKyAgICBtX2FuaW0tPmFuaW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJlZChtX2V2ZW50VHlwZSwg
bV9lbGFwc2VkVGltZSk7Cit9CiAKLSAgICBib29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KGlu
dCBwcm9wKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbnMuY29udGFpbnMocHJvcCk7IH0KK3Zv
aWQgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyOjp0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRp
bWVyQmFzZT4qKQoreworICAgIG1fYW5pbS0+YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQo
bV9lbGVtZW50LmdldCgpLCBtX25hbWUsIG1fcHJvcGVydHksIG1fcmVzZXQsIG1fZXZlbnRUeXBl
LCBtX2VsYXBzZWRUaW1lKTsKK30KIAotICAgIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0Kik7Cisj
cHJhZ21hIG1hcmsgLQogCi1wcml2YXRlOgotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1h
dGlvbio+IG1fYW5pbWF0aW9uczsKLX07Ci0KLUltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFu
aW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uKQotOiBtX2Zyb21TdHlsZSgwKQot
LCBtX3RvU3R5bGUoMCkKLSwgbV9wcm9wZXJ0eSh0cmFuc2l0aW9uLT5wcm9wZXJ0eSgpKQotLCBt
X2Z1bmN0aW9uKHRyYW5zaXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkpCi0sIG1fZHVyYXRpb24odHJh
bnNpdGlvbi0+ZHVyYXRpb24oKSAvIDEwMDAuMCkKLSwgbV9yZXBlYXRDb3VudCh0cmFuc2l0aW9u
LT5yZXBlYXRDb3VudCgpKQorI3ByYWdtYSBtYXJrIC0KKyAgICAKK0FuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvbkJhc2UoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSkKKzogbV9hbmltU3RhdGUoU1RB
VEVfTkVXKQogLCBtX2l0ZXJhdGlvbigwKQotLCBtX2ZpbmlzaGVkKGZhbHNlKQotLCBtX3N0YXJ0
VGltZShjdXJyZW50VGltZSgpKQotLCBtX3BhdXNlZChmYWxzZSkKLSwgbV9wYXVzZVRpbWUobV9z
dGFydFRpbWUpCissIG1fYW5pbWF0aW5nKGZhbHNlKQorLCBtX3dhaXRlZEZvclJlc3BvbnNlKGZh
bHNlKQorLCBtX3N0YXJ0VGltZSgwKQorLCBtX3BhdXNlVGltZSgtMSkKKywgbV9vYmplY3QocmVu
ZGVyZXIpCissIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjayhjb25zdF9jYXN0PEFuaW1hdGlvbkJh
c2UqPih0aGlzKSkKKywgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXIoY29uc3RfY2FzdDxBbmlt
YXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+
KHRyYW5zaXRpb24pKQorLCBtX2NvbXBBbmltKGNvbXBBbmltKQorLCBtX3dhaXRpbmdGb3JFbmRF
dmVudChmYWxzZSkKIHsKIH0KIAotSW1wbGljaXRBbmltYXRpb246On5JbXBsaWNpdEFuaW1hdGlv
bigpCisvLyNkZWZpbmUgREVCVUdfU1RBVEVfTUFDSElORQorCisjaWZkZWYgREVCVUdfU1RBVEVf
TUFDSElORQorI2RlZmluZSBEU01fUFJJTlRfRk9SQ0UoaW5wdXQsIG5leHQpIFwKK2ZwcmludGYo
c3Rkb3V0LCAiKioqIGdvdCAlcyAtLT4gJXMgYXQgJWYgZm9yIGFuaW1hdGlvbiAlcFxuIiwgaW5w
dXQsIG5leHQsIGN1cnJlbnRUaW1lKCksIHRoaXMpCisKKyNkZWZpbmUgRFNNX1BSSU5UKHN0YXRl
LCBpbnB1dCwgbmV4dCkgXAorZnByaW50ZihzdGRvdXQsICIqKiogZ290ICVzIGluICVzIC0tPiAl
cyBhdCAlZiBmb3IgYW5pbWF0aW9uICVwXG4iLCBpbnB1dCwgc3RhdGUsIG5leHQsIGN1cnJlbnRU
aW1lKCksIHRoaXMpCisKKyNkZWZpbmUgRFNNX1BSSU5UX1BBUkFNKHN0YXRlLCBpbnB1dCwgbmFt
ZSwgcGFyYW0sIG5leHQpIFwKK2ZwcmludGYoc3Rkb3V0LCAiKioqIGdvdCAlcyBpbiAlcyAtLT4g
JXMgKCVzPSVmKSBhdCAlZiBmb3IgYW5pbWF0aW9uICVwXG4iLCBpbnB1dCwgc3RhdGUsIG5leHQs
IG5hbWUsIHBhcmFtLCBjdXJyZW50VGltZSgpLCB0aGlzKQorI2Vsc2UKKyNkZWZpbmUgRFNNX1BS
SU5UX0ZPUkNFKGlucHV0LCBuZXh0KQorI2RlZmluZSBEU01fUFJJTlQoc3RhdGUsIGlucHV0LCBu
ZXh0KQorI2RlZmluZSBEU01fUFJJTlRfUEFSQU0oc3RhdGUsIGlucHV0LCBuYW1lLCBwYXJhbSwg
bmV4dCkKKyNlbmRpZgorCit2b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShB
bmltU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBhcmFtKQogewotICAgIEFTU0VSVCghbV9mcm9t
U3R5bGUgJiYgIW1fdG9TdHlsZSk7CisgICAgLy8gaWYgd2UgZ2V0IGEgUkVTVEFSVCB0aGVuIHdl
IGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZQorICAgIGlmIChpbnB1
dCA9PSBTVEFURV9JTlBVVF9NQUtFX05FVykgeworICAgICAgICBEU01fUFJJTlRfRk9SQ0UoIlNU
QVRFX0lOUFVUX01BS0VfTkVXIiwgIlNUQVRFX05FVyIpOworICAgICAgICBpZiAobV9hbmltU3Rh
dGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkKKyAgICAgICAgICAgIG1fY29tcEFu
aW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOworICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICBtX3BhdXNl
VGltZSA9IC0xOworICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7CisgICAgICAg
IGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxzZSBp
ZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04pIHsKKyAgICAgICAgRFNN
X1BSSU5UX0ZPUkNFKCJTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiIsICJTVEFURV9ORVci
KTsKKyAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBT
VEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0
V2FpdGluZ0ZvclN0eWxlSXNTZXR1cChmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RB
VEVfTkVXOworICAgICAgICBtX3N0YXJ0VGltZSA9IDA7CisgICAgICAgIG1fcGF1c2VUaW1lID0g
LTE7CisgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
cnVubmluZygpKQorICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NU
QVJUX0FOSU1BVElPTiwgLTEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYg
KGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9BTklNQVRJT04pIHsKKyAgICAgICAgRFNNX1BSSU5U
X0ZPUkNFKCJTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OIiwgIlNUQVRFX0RPTkUiKTsKKyAgICAg
ICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgIGlmIChtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFS
VF9XQUlUX1NUWUxFX1NFVFVQKQorICAgICAgICAgICAgbV9jb21wQW5pbS0+c2V0V2FpdGluZ0Zv
clN0eWxlSXNTZXR1cChmYWxzZSk7CisgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfRE9ORTsK
KyAgICAgICAgZW5kQW5pbWF0aW9uKHRydWUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFKSB7CisjaWZkZWYg
REVCVUdfU1RBVEVfTUFDSElORQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiBnb3QgU1RB
VEVfSU5QVVRfUEFVU0VfT1ZFUlJJREUgYXQgJWYgZm9yIGFuaW1hdGlvbiAlcFxuIiwgY3VycmVu
dFRpbWUoKSwgdGhpcyk7CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIGlmIChtX2FuaW1TdGF0
ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFKSB7CisgICAgICAgICAgICAvLyBJZiB3ZSBh
cmUgaW4gdGhlIFdBSVRfUkVTUE9OU0Ugc3RhdGUsIHRoZSBhbmltYXRpb24gd2lsbCBnZXQgY2Fu
Y2VsZWQgYmVmb3JlIAorICAgICAgICAgICAgLy8gd2UgZ2V0IGEgcmVzcG9uc2UsIHNvIG1vdmUg
dG8gdGhlIG5leHQgc3RhdGUKKyAgICAgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAg
ICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1
cnJlbnRUaW1lKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWxz
ZSBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfUkVTVU1FX09WRVJSSURFKSB7CisjaWZkZWYgREVC
VUdfU1RBVEVfTUFDSElORQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIioqKiBnb3QgU1RBVEVf
SU5QVVRfUkVTVU1FX09WRVJSSURFIGF0ICVmIGZvciBhbmltYXRpb24gJXBcbiIsIGN1cnJlbnRU
aW1lKCksIHRoaXMpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBpZiAobV9hbmltU3RhdGUg
PT0gU1RBVEVfTE9PUElORyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9FTkRJTkcpIHsKKyAgICAg
ICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9u
KG1fc3RhcnRUaW1lKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIC8vIGV4ZWN1dGUgc3RhdGUgbWFjaGluZQorICAgIHN3aXRjaChtX2FuaW1TdGF0ZSkgewor
ICAgICAgICBjYXNlIFNUQVRFX05FVzoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFU
RV9JTlBVVF9TVEFSVF9BTklNQVRJT04gfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFU
RV9SVU5OSU5HIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAg
ICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04gfHwgaW5w
dXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKSB7CisgICAgICAgICAgICAgICAg
RFNNX1BSSU5UX1BBUkFNKCJTVEFURV9ORVciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OKSA/ICJTVEFURV9JTlBV
VF9TVEFSVF9BTklNQVRJT04iOiAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlbGF5IiwgbV9hbmltYXRpb24tPmRlbGF5
KCksICJTVEFURV9TVEFSVF9XQUlUX1RJTUVSIik7CisgICAgICAgICAgICAgICAgLy8gU2V0IHRo
ZSBzdGFydCB0aW1lciB0byB0aGUgaW5pdGlhbCBkZWxheSAoMCBpZiBubyBkZWxheSkKKyAgICAg
ICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNlID0gZmFsc2U7CisgICAgICAgICAgICAgICAg
bV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOworICAgICAgICAgICAgICAgIG1f
YW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKG1fYW5pbWF0aW9uLT5kZWxheSgpLCBF
dmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBtX2FuaW1hdGlvbi0+ZGVsYXko
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBJZiBpbnB1dCBpcyBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCB3ZSBkb24ndCBkbyBh
bnl0aGluZyB5ZXQKKyAgICAgICAgICAgICAgICBEU01fUFJJTlQoIlNUQVRFX05FVyIsICJTVEFU
RV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCIsICJTVEFURV9ORVciKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNUQVRFX1NUQVJUX1dBSVRfVElNRVI6
CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklS
RUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfVElNRVJfRklS
RUQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7CisgICAgICAgICAgICAg
ICAgRFNNX1BSSU5UX1BBUkFNKCJTVEFURV9TVEFSVF9XQUlUX1RJTUVSIiwgIlNUQVRFX0lOUFVU
X1NUQVJUX1RJTUVSX0ZJUkVEIiwgImVsYXBzZWRUaW1lIiwgcGFyYW0sIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAiU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCIpOworICAg
ICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9u
IHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAg
ICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUDsK
KyAgICAgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVwKHRy
dWUpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5k
ZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAgICBzZXRDaGFu
Z2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmlt
YXRpb25Db250cm9sbGVyKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJ1
bm5pbmcoKSk7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlUX1RJ
TUVSIiwgIlNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9XQUlU
X1RJTUVSIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UncmUgd2Fp
dGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUgYW5kIHdlIGdvdCBhIHBhdXNlLiBDYW5j
ZWwgdGhlIHRpbWVyLCBwYXVzZSBhbmQgd2FpdAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1l
ID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAgICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAg
ICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9XQUlUX1RJTUVSOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfU1RBUlRfV0FJ
VF9TVFlMRV9TRVRVUDoKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9T
VFlMRV9TRVRVUCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlz
U2V0dXAoZmFsc2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RB
VEVfSU5QVVRfU1RZTEVfU0VUVVApIHsKKyAgICAgICAgICAgICAgICBEU01fUFJJTlQoIlNUQVRF
X1NUQVJUX1dBSVRfU1RZTEVfU0VUVVAiLCAiU1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAiLCAiU1RB
VEVfU1RBUlRfV0FJVF9SRVNQT05TRSIpOworICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVy
IGhhcyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0
byByZXNwb25kIHdpdGggc3RhcnQgdGltZQorICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0g
U1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBvdmVycmlkZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAvLyBTZW5kIHN0YXJ0IGV2ZW50LCBpZiBuZWVkZWQKKyAgICAgICAgICAgICAgICBvbkFu
aW1hdGlvblN0YXJ0KDAuMGYpOyAvLyB0aGUgZWxhcHNlZFRpbWUgaXMgYWx3YXlzIDAgaGVyZQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24K
KyAgICAgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpIHx8ICFzdGFydEFuaW1hdGlvbigwKSkg
eworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAgICAgICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICIqKiogICAgICAgICBzdGFydEFuaW1hdGlvbiByZXR1cm5lZCBmYWxzZSwgc2V0
dGluZyBzdGFydCB0aW1lIGltbWVkaWF0ZWx5XG4iKTsKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICAvLyBXZSdyZSBub3QgZ29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBm
aXJlIHRoZSBzdGFydCB0aW1lIGhlcmUKKyAgICAgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUg
PSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHJ1bm5pbmcoKSk7CisgICAgICAgICAg
ICAgICAgRFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlUX1RJTUVSIiwgIlNUQVRFX0lOUFVUX1BM
QVlfU1RBVEVfUEFVU0VEIiwgIlNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0UiKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZvciB0aGUgYSBub3Rp
ZmljYXRpb24gdGhhdCB0aGUgc3R5bGUgaGFzIGJlZW4gc2V0dXAuIElmIHdlJ3JlIGFza2VkIHRv
IHdhaXQKKyAgICAgICAgICAgICAgICAvLyBhdCB0aGlzIHBvaW50LCB0aGUgc3R5bGUgbXVzdCBo
YXZlIGJlZW4gcHJvY2Vzc2VkLCBzbyB3ZSBjYW4gZGVhbCB3aXRoIHRoaXMgbGlrZSB3ZSB3b3Vs
ZAorICAgICAgICAgICAgICAgIC8vIGZvciBXQUlUX1JFU1BPTlNFLCBleGNlcHQgdGhhdCB3ZSBk
b24ndCBuZWVkIHRvIGRvIGFuIGVuZEFuaW1hdGlvbigpLgorICAgICAgICAgICAgICAgIG1fcGF1
c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dB
SVRfUkVTUE9OU0U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BM
QVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09
IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VUKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKHBh
cmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBzdGFydCB0aW1lLCBzZXQg
aXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0CisgICAgICAgICAgICAgICAg
aWYgKG1fc3RhcnRUaW1lIDw9IDApCisgICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0g
cGFyYW07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRGVjaWRlIHdoZW4g
dGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAgICAgICAgICAgICAgICBwcmlt
ZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgRFNNX1BS
SU5UX1BBUkFNKCJTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFIiwgIlNUQVRFX0lOUFVUX1NUQVJU
X1RJTUVfU0VUIiwgInN0YXJ0VGltZSIsIHBhcmFtLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKG1fYW5pbVN0YXRlPT1TVEFURV9MT09QSU5HKT8iU1RBVEVfTE9PUElORyI6IlNU
QVRFX0VORElORyIpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFRyaWdn
ZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgICAg
ICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgICAgICAgICAgICAgIG1fb2Jq
ZWN0LT5hbmltYXRpb25Db250cm9sbGVyKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hl
cigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
RFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFIiwgIlNUQVRFX0lOUFVUX1BMQVlf
U1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFIik7CisgICAgICAgICAg
ICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgd2FpdGluZyBmb3IgYSBzdGFydCByZXNwb25z
ZS4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQuIFdoZW4gCisgICAgICAgICAgICAgICAg
Ly8gd2UgdW5wYXVzZSwgd2Ugd2lsbCBhY3QgYXMgdGhvdWdoIHRoZSBzdGFydCB0aW1lciBqdXN0
IGZpcmVkCisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAwOworICAgICAgICAgICAgICAg
IGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFU
RV9QQVVTRURfV0FJVF9SRVNQT05TRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNUQVRFX0xPT1BJTkc6CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQg
PT0gU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9Q
TEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9
PSBTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIC8vIExvb3AgdGltZXIgZmlyZWQsIGxvb3Ag
YWdhaW4gb3IgZW5kLgorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uKHBhcmFt
KTsKKyAgICAgICAgICAgICAgICBwcmltZUV2ZW50VGltZXJzKCk7CisgICAgICAgICAgICAgICAg
RFNNX1BSSU5UX1BBUkFNKCJTVEFURV9MT09QSU5HIiwgIlNUQVRFX0lOUFVUX0xPT1BfVElNRVJf
RklSRUQiLCAiZWxhcHNlZFRpbWUiLCBwYXJhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChtX2FuaW1TdGF0ZT09U1RBVEVfTE9PUElORyk/IlNUQVRFX0xPT1BJTkciOiJTVEFU
RV9FTkRJTkciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIERTTV9QUklOVCgiU1RBVEVfTE9PUElORyIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRF
X1BBVVNFRCIsICJTVEFURV9QQVVTRURfUlVOIik7CisgICAgICAgICAgICAgICAgLy8gV2UgYXJl
IHBhdXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKKyAg
ICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgICAgICAgICAg
ICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgICAgICAgICAgZW5kQW5pbWF0aW9uKGZhbHNlKTsK
KyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1BBVVNFRF9SVU47CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9FTkRJTkc6Cisg
ICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEIHx8
IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCkgewor
ICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAgICAgICBEU01f
UFJJTlRfUEFSQU0oIlNUQVRFX0VORElORyIsICJTVEFURV9JTlBVVF9FTkRfVElNRVJfRklSRUQi
LCAiZWxhcHNlZFRpbWUiLCBwYXJhbSwgIlNUQVRFX0RPTkUiKTsKKyAgICAgICAgICAgICAgICAv
LyBFbmQgdGltZXIgZmlyZWQsIGZpbmlzaCB1cAorICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9u
RW5kKHBhcmFtKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICByZXN1bWVPdmVy
cmlkZGVuQW5pbWF0aW9ucygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZpbmFsIHZh
bHVlCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgpKTsKKyAg
ICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgICAgICAgICAg
bV9vYmplY3QtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNw
YXRjaGVyKCk7CisgICAgICAgICAgICAgICAgLy8gfHRoaXN8IG1heSBiZSBkZWxldGVkIGhlcmUg
d2hlbiB3ZSd2ZSBiZWVuIGNhbGxlZCBmcm9tIHRpbWVyRmlyZWQoKQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9FTkRJ
TkciLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQiLCAiU1RBVEVfUEFVU0VEX1JVTiIp
OworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENhbmNl
bCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBj
dXJyZW50VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOworICAgICAgICAg
ICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUg
PSBTVEFURV9QQVVTRURfUlVOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gfHRoaXN8
IG1heSBiZSBkZWxldGVkIGhlcmUKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNU
QVRFX1BBVVNFRF9XQUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRF
X0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyk7CisgICAgICAgICAgICBBU1NFUlQoIXJ1bm5pbmco
KSk7CisgICAgICAgICAgICBEU01fUFJJTlQoIlNUQVRFX1BBVVNFRF9XQUlUX1RJTUVSIiwgIlNU
QVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyIsICJTVEFURV9ORVciKTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcworICAgICAgICAgICAgbV9zdGFydFRp
bWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1lOworICAgICAgICAgICAgbV9wYXVzZVRp
bWUgPSAtMTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gd2Ugd2VyZSB3YWl0aW5nIGZv
ciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1h
Y2hpbmUoU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAwKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFNUQVRFX1BBVVNFRF9XQUlUX1JFU1BPTlNFOgorICAgICAgICBjYXNl
IFNUQVRFX1BBVVNFRF9SVU46CisgICAgICAgICAgICAvLyBXZSB0cmVhdCB0aGVzZSB0d28gY2Fz
ZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwgd2hlbiB3ZSBhcmUgaW4g
dGhlIFdBSVRfUkVTUE9OU0UKKyAgICAgICAgICAgIC8vIHN0YXRlLCB3ZSBkb24ndCB5ZXQgaGF2
ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRvIHN0YXJ0QW5pbWF0aW9uLiBXaGVu
IHRoZSBTVEFSVF9USU1FCisgICAgICAgICAgICAvLyBldmVudCBjb21lcyBpbiBxbmQgd2Ugd2Vy
ZSBpbiB0aGUgUlVOIHN0YXRlLCB3ZSB3aWxsIG5vdGljZSB0aGF0IHdlIGhhdmUgYWxyZWFkeSBz
ZXQgdGhlIAorICAgICAgICAgICAgLy8gc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KKyAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcp
OworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAgICAgICAgRFNNX1BSSU5U
KCJTVEFURV9QQVVTRURfV0FJVF9SRVNQT05TRSIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JV
Tk5JTkciLCAiU1RBVEVfU1RBUlRfV0FJVF9SRVNQT05TRSIpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVzCisgICAgICAgICAgICBpZiAobV9hbmltU3RhdGUg
PT0gU1RBVEVfUEFVU0VEX1JVTikKKyAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSArPSBjdXJy
ZW50VGltZSgpIC0gbV9wYXVzZVRpbWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV9zdGFydFRpbWUgPSAwOworICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gV2Ugd2VyZSB3YWl0aW5nIGZvciBhIGJlZ2luIHRpbWUg
cmVzcG9uc2UgZnJvbSB0aGUgYW5pbWF0aW9uLCBnbyBiYWNrIGFuZCB3YWl0IGFnYWluCisgICAg
ICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KKyAgICAgICAgICAgIGlm
IChvdmVycmlkZGVuKCkgfHwgIXN0YXJ0QW5pbWF0aW9uKG1fc3RhcnRUaW1lKSkgeworICAgICAg
ICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byBnZXQgYSBzdGFydFRpbWUgY2FsbGJhY2ss
IHNvIGZpcmUgdGhlIHN0YXJ0IHRpbWUgaGVyZQorICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgY3VycmVudFRpbWUoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JS
ZXNwb25zZSA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9E
T05FOgorICAgICAgICAgICAgRFNNX1BSSU5UX0ZPUkNFKCJTVEFURV9ET05FIiwgIlNUQVRFX0RP
TkUiKTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRp
bCB3ZSBhcmUgZGVsZXRlZAorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIC8vIHx0aGlz
fCBtYXkgYmUgZGVsZXRlZCBoZXJlIGlmIHdlIGNhbWUgb3V0IG9mIFNUQVRFX0VORElORyB3aGVu
IHdlJ3ZlIGJlZW4gY2FsbGVkIGZyb20gdGltZXJGaXJlZCgpCiB9CisgICAgCit2b2lkIEFuaW1h
dGlvbkJhc2U6OmFuaW1hdGlvblRpbWVyQ2FsbGJhY2tGaXJlZChjb25zdCBBdG9taWNTdHJpbmcm
IGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQoreworICAgIEFTU0VSVChtX29iamVjdC0+
ZG9jdW1lbnQoKSAmJiAhbV9vYmplY3QtPmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpOworICAg
IAorICAgIC8vIEZJWE1FOiB1c2UgYW4gZW51bQorICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnRO
YW1lczo6d2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCkKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7CisgICAgZWxz
ZSBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2
ZW50KQorICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9G
SVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVz
Ojp3ZWJraXRBbmltYXRpb25FbmRFdmVudCkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
U1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVELCBlbGFwc2VkVGltZSk7CisgICAgICAgIC8vIHx0
aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlCisgICAgfQorfQogCi12b2lkIEltcGxpY2l0QW5pbWF0
aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogZnJvbSwgUmVu
ZGVyU3R5bGUqIHRvKQordm9pZCBBbmltYXRpb25CYXNlOjphbmltYXRpb25FdmVudERpc3BhdGNo
ZXJGaXJlZChIVE1MRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBp
bnQgcHJvcGVydHksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib29sIHJlc2V0LCBjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKQogewotICAgIGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5
bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBpZiAobV90b1N0eWxlKQot
ICAgICAgICBtX3RvU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKLSAgICBt
X2Zyb21TdHlsZSA9IGZyb207Ci0gICAgaWYgKG1fZnJvbVN0eWxlKQotICAgICAgICBtX2Zyb21T
dHlsZS0+cmVmKCk7Ci0gICAgbV90b1N0eWxlID0gdG87Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAg
ICAgICAgbV90b1N0eWxlLT5yZWYoKTsKLSAgICBtX2ZpbmlzaGVkID0gZmFsc2U7Ci0gICAgaWYg
KGZyb20gfHwgdG8pCi0gICAgICAgIG1fc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBt
X3dhaXRpbmdGb3JFbmRFdmVudCA9IGZhbHNlOworICAgIAorICAgIC8vIEtlZXAgYW4gYXRvbWlj
IHN0cmluZyBvbiB0aGUgc3RhY2sgdG8ga2VlcCBpdCBhbGl2ZSB1bnRpbCB3ZSBleGl0IHRoaXMg
bWV0aG9kCisgICAgLy8gKHNpbmNlIGRpc3BhdGNoaW5nIHRoZSBldmVudCBtYXkgY2F1c2UgfHRo
aXN8IHRvIGJlIGRlbGV0ZWQsIHRoZXJlZm9yZSByZW1vdmluZworICAgIC8vIHRoZSBsYXN0IHJl
ZiB0byB0aGUgYXRvbWljIHN0cmluZykuCisgICAgQXRvbWljU3RyaW5nIGFuaW1OYW1lKG5hbWUp
OworICAgIEF0b21pY1N0cmluZyBhbmltRXZlbnRUeXBlKGV2ZW50VHlwZSk7CisgICAgLy8gTWFr
ZSBzdXJlIHRoZSBlbGVtZW50IHN0aWNrcyBhcm91bmQgdG9vCisgICAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBlbGVtZW50UmV0YWluZXIoZWxlbWVudCk7CisgICAgCisgICAgQVNTRVJUKCFlbGVtZW50
IHx8IChlbGVtZW50LT5kb2N1bWVudCgpICYmICFlbGVtZW50LT5kb2N1bWVudCgpLT5pblBhZ2VD
YWNoZSgpKSk7CisgICAgaWYgKCFlbGVtZW50KQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
aWYgKGV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRUcmFuc2l0aW9uRW5kRXZlbnQpIHsK
KyAgICAgICAgZWxlbWVudC0+ZGlzcGF0Y2hXZWJLaXRUcmFuc2l0aW9uRXZlbnQoZXZlbnRUeXBl
LCBuYW1lLCBlbGFwc2VkVGltZSk7CisgICAgfSAKKyAgICBlbHNlIHsKKyAgICAgICAgZWxlbWVu
dC0+ZGlzcGF0Y2hXZWJLaXRBbmltYXRpb25FdmVudChldmVudFR5cGUsIG5hbWUsIGVsYXBzZWRU
aW1lKTsKKyAgICB9CisgICAgLy8gV0FSTklORzogfHRoaXN8IG1heSBoYXZlIGJlZW4gZGVsZXRl
ZCBoZXJlCisgICAgCisgICAgCisgICAgLy8gV2UgZGlkbid0IG1ha2UgdGhlIGVuZEFuaW1hdGlv
biBjYWxsIGlmIHdlIGRpc3BhdGNoZWQgYW4gZXZlbnQuIFRoaXMgaXMgc28KKyAgICAvLyB3ZSBj
YW4gY2FsbCB0aGUgYW5pbWF0aW9uIGV2ZW50IGhhbmRsZXIgdGhlbiByZW1vdmUgdGhlIGFuaW1h
dGlvbi4gCisgICAgLy8gV2UgY2FuJ3QgY2FsbCBlbmRBbmltYXRpb24oKSBoZXJlIGJlY2F1c2Ug
aXQgaXMgc3BlY2lhbGl6ZWQgZGVwZW5kaW5nIG9uIHdoZXRoZXIKKyAgICAvLyB3ZSBhcmUgZG9p
bmcgVHJhbnNpdGlvbnMgb3IgQW5pbWF0aW9ucy4gU28gd2UgZG8gdGhlIGVxdWl2YWxlbnQgdG8g
aXQgaGVyZS4KKyAgICBpZiAoYW5pbUV2ZW50VHlwZSA9PSBFdmVudE5hbWVzOjp3ZWJraXRBbmlt
YXRpb25FbmRFdmVudCkgeworICAgICAgICBpZiAoZWxlbWVudC0+cmVuZGVyZXIoKSkgeworICAg
ICAgICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCisgICAg
ICAgICAgICBzZXRDaGFuZ2VkKGVsZW1lbnQtPnJlbmRlcmVyKCktPmVsZW1lbnQoKSk7CisgICAg
ICAgIH0KKyAgICB9CiB9CiAKLWRvdWJsZSBJbXBsaWNpdEFuaW1hdGlvbjo6cHJvZ3Jlc3MoKSBj
b25zdAordm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVQbGF5U3RhdGUoYm9vbCBydW4pCiB7Ci0g
ICAgZG91YmxlIGVsYXBzZWRUaW1lID0gY3VycmVudFRpbWUoKSAtIG1fc3RhcnRUaW1lOworICAg
IGlmIChydW5uaW5nKCkgIT0gcnVuIHx8IGlzbmV3KCkpIHsKKyAgICAgICAgaWYgKG1fb2JqZWN0
LT5kb2N1bWVudCgpLT5sb2FkQ29tcGxldGUoKSkKKyAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFj
aGluZShydW4gPyBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcgOiBTVEFURV9JTlBVVF9Q
TEFZX1NUQVRFX1BBVVNFRCwgLTEpOworICAgIH0KK30KKworZG91YmxlIEFuaW1hdGlvbkJhc2U6
OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3QKK3sKKyAgICBpZiAo
cHJlYWN0aXZlKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGlmIChtX2ZpbmlzaGVk
IHx8ICFtX2R1cmF0aW9uIHx8IGVsYXBzZWRUaW1lID49IG1fZHVyYXRpb24pCisgICAgZG91Ymxl
IGVsYXBzZWRUaW1lID0gcnVubmluZygpID8gKGN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZSkg
OiAobV9wYXVzZVRpbWUgLSBtX3N0YXJ0VGltZSk7CisgICAgaWYgKHJ1bm5pbmcoKSAmJiBlbGFw
c2VkVGltZSA8IDApCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGRvdWJsZSBkdXIgPSBt
X2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsKKyAgICBpZiAobV9hbmltYXRpb24tPmFuaW1hdGlvbkl0
ZXJhdGlvbkNvdW50KCkgPiAwKQorICAgICAgICBkdXIgKj0gbV9hbmltYXRpb24tPmFuaW1hdGlv
bkl0ZXJhdGlvbkNvdW50KCk7CisgICAgCisgICAgaWYgKHBvc3RhY3RpdmUoKSB8fCAhbV9hbmlt
YXRpb24tPmR1cmF0aW9uKCkgfHwgKG1fYW5pbWF0aW9uLT5hbmltYXRpb25JdGVyYXRpb25Db3Vu
dCgpID4gMCAmJiBlbGFwc2VkVGltZSA+PSBkdXIpKQogICAgICAgICByZXR1cm4gMS4wOwotCi0g
ICAgaWYgKG1fZnVuY3Rpb24udHlwZSgpID09IExpbmVhclRpbWluZ0Z1bmN0aW9uKQotICAgICAg
ICByZXR1cm4gZWxhcHNlZFRpbWUgLyBtX2R1cmF0aW9uOwogICAgIAorICAgIC8vIENvbXB1dGUg
dGhlIGZyYWN0aW9uYWwgdGltZSwgdGFraW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24uCisgICAg
Ly8gVGhlcmUgaXMgbm8gbmVlZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUg
dGhhdCB3ZSB3b3VsZCBoYXZlIAorICAgIC8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3
ZXJlIGRvbmUKKyAgICBkb3VibGUgdCA9IGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0
aW9uKCk7CisgICAgaW50IGkgPSAoaW50KSB0OworICAgIHQgLT0gaTsKKyAgICBpZiAobV9hbmlt
YXRpb24tPmFuaW1hdGlvbkRpcmVjdGlvbigpICYmIChpICYgMSkpCisgICAgICAgIHQgPSAxIC0g
dDsKKyAgICAKKyAgICBpZiAoc2NhbGUgIT0gMSB8fCBvZmZzZXQgIT0gMCkKKyAgICAgICAgdCA9
ICh0IC0gb2Zmc2V0KSAqIHNjYWxlOworICAgIAorICAgIGlmIChtX2FuaW1hdGlvbi0+dGltaW5n
RnVuY3Rpb24oKS50eXBlKCkgPT0gTGluZWFyVGltaW5nRnVuY3Rpb24pCisgICAgICAgIHJldHVy
biB0OworICAgIAogICAgIC8vIEN1YmljIGJlemllci4KLSAgICByZXR1cm4gc29sdmVDdWJpY0Jl
emllckZ1bmN0aW9uKG1fZnVuY3Rpb24ueDEoKSwgbV9mdW5jdGlvbi55MSgpLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZnVuY3Rpb24ueDIoKSwgbV9mdW5jdGlvbi55
MigpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZFRpbWUgLyBt
X2R1cmF0aW9uLCBtX2R1cmF0aW9uKTsKKyAgICBkb3VibGUgdHQgPSBzb2x2ZUN1YmljQmV6aWVy
RnVuY3Rpb24obV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueDEoKSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uLT50aW1pbmdGdW5jdGlv
bigpLnkxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Fu
aW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS54MigpLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkueTIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCwgbV9hbmltYXRpb24tPmR1
cmF0aW9uKCkpOworICAgIHJldHVybiB0dDsKIH0KIAordm9pZCBBbmltYXRpb25CYXNlOjpwcmlt
ZUV2ZW50VGltZXJzKCkKK3sKKyAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5kIG9yIGxvb3AgZXZl
bnQgbmVlZHMgdG8gZmlyZQorICAgIGRvdWJsZSBjdCA9IGN1cnJlbnRUaW1lKCk7CisgICAgY29u
c3QgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGN0IC0gbV9zdGFydFRpbWU7CisgICAgQVNTRVJU
KGVsYXBzZWREdXJhdGlvbiA+PSAwKTsKKyAgICAKKyAgICBkb3VibGUgdG90YWxEdXJhdGlvbiA9
IC0xOworICAgIGlmIChtX2FuaW1hdGlvbi0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSA+IDAp
CisgICAgICAgIHRvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5p
bWF0aW9uLT5hbmltYXRpb25JdGVyYXRpb25Db3VudCgpOworICAgIAorICAgIGRvdWJsZSBkdXJh
dGlvbkxlZnQgPSAwOworICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IHRvdGFsRHVyYXRp
b247CisgICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IGVsYXBzZWREdXJhdGlvbiA8IHRvdGFs
RHVyYXRpb24pIHsKKyAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkgLSBmbW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOworICAg
ICAgICBuZXh0SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsK
KyAgICB9CisgICAgCisgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgbWF5IGhhdmUgMCBkdXJhdGlv
bkxlZnQsIGlmIHdlJ3ZlIGdvdHRlbiB0aGUgZXZlbnQgbGF0ZSBhbmQgd2UgYXJlIGFscmVhZHkK
KyAgICAvLyBwYXN0IHRvdGFsRHVyYXRpb24uIEluIHRoaXMgY2FzZSB3ZSBzdGlsbCBmaXJlIGFu
IGVuZCB0aW1lciBiZWZvcmUgcHJvY2Vzc2luZyB0aGUgZW5kLiAKKyAgICAvLyBUaGlzIGRlZmVy
cyB0aGUgY2FsbCB0byBzZW5kQW5pbWF0aW9uRXZlbnRzIHRvIGF2b2lkIHJlLWVudHJhbnQgY2Fs
bHMgdGhhdCBkZXN0cm95CisgICAgLy8gdGhlIFJlbmRlck9iamVjdCwgYW5kIHRoZXJlZm9yZSB8
dGhpc3wgYmVmb3JlIHdlJ3JlIGRvbmUgd2l0aCBpdC4KKyAgICBpZiAodG90YWxEdXJhdGlvbiA8
IDAgfHwgbmV4dEl0ZXJhdGlvblRpbWUgPCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIC8vIFdl
IGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQsIHNlbmQgYSBsb29wIGV2ZW50CisgICAgICAgIEFTU0VS
VChuZXh0SXRlcmF0aW9uVGltZSA+IDApOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0xP
T1BJTkc7CisgICAgICAgIG1fYW5pbWF0aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0
aW9uTGVmdCwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQsIG5leHRJ
dGVyYXRpb25UaW1lKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8vIFdlIGFyZSBhdCB0
aGUgZW5kLCBzZW5kIGFuIGVuZCBldmVudAorICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0VO
RElORzsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNrLnN0YXJ0VGltZXIoZHVyYXRp
b25MZWZ0LCBFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgbmV4dEl0ZXJhdGlv
blRpbWUpOworICAgIH0KK30KKworI3ByYWdtYSBtYXJrIC0KKwogc3RhdGljIGlubGluZSBpbnQg
YmxlbmRGdW5jKGludCBmcm9tLCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIHJl
dHVybiBpbnQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwpAQCAtMTk0LDcgKzk5Myw4
IEBACiBzdGF0aWMgaW5saW5lIFNoYWRvd0RhdGEqIGJsZW5kRnVuYyhjb25zdCBTaGFkb3dEYXRh
KiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQogeyAgCiAgICAg
QVNTRVJUKGZyb20gJiYgdG8pOwotICAgIHJldHVybiBuZXcgU2hhZG93RGF0YShibGVuZEZ1bmMo
ZnJvbS0+eCwgdG8tPngsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPnksIHRvLT55LCBwcm9n
cmVzcyksIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+Ymx1ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1
bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gbmV3IFNo
YWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVzcyksIGJsZW5kRnVuYyhm
cm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYmxl
bmRGdW5jKGZyb20tPmJsdXIsIHRvLT5ibHVyLCBwcm9ncmVzcyksIGJsZW5kRnVuYyhmcm9tLT5j
b2xvciwgdG8tPmNvbG9yLCBwcm9ncmVzcykpOwogfQogCiBzdGF0aWMgaW5saW5lIFRyYW5zZm9y
bU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCkBAIC0yMDgsNyAr
MTAwOCw4IEBACiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gaSA8IGZyb21T
aXplID8gZnJvbVtpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbiogdG9P
cCA9IGkgPCB0b1NpemUgPyB0b1tpXS5nZXQoKSA6IDA7CiAgICAgICAgIFRyYW5zZm9ybU9wZXJh
dGlvbiogYmxlbmRlZE9wID0gdG9PcCA/IHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MpIDog
ZnJvbU9wLT5ibGVuZCgwLCBwcm9ncmVzcywgdHJ1ZSk7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQo
YmxlbmRlZE9wKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoYmxlbmRlZE9wKTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIyNSwz
MTAgKzEwMjYsMTI5OSBAQAogICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZJU0lCTEUgOiAodG8g
IT0gVklTSUJMRSA/IHRvIDogZnJvbSk7CiB9CiAKLSNkZWZpbmUgQkxFTkQocHJvcCwgZ2V0dGVy
LCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+Z2V0
dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSBcCi0gICAgICAgIHJlc2V0KHJlbmRlcmVy
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsgXAotICAgIFwKLSAgICBpZiAoKG1fcHJvcGVy
dHkgPT0gY0FuaW1hdGVBbGwgJiYgIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHko
cHJvcCkpIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIGlmIChtX2Zyb21TdHls
ZS0+Z2V0dGVyKCkgIT0gbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgICAgIG1fZmlu
aXNoZWQgPSBmYWxzZTsgXAotICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBcCi0gICAg
ICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkp
IFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUt
PnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBtX3RvU3R5bGUtPmdldHRl
cigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCkg
XAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9XAotICAgIH1cCisjcHJhZ21h
IG1hcmsgLQogCi0jZGVmaW5lIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IocHJvcCwgZ2V0dGVy
LCBzZXR0ZXIpIFwKLSAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wICYmIG1fdG9TdHlsZS0+Z2V0
dGVyKCkgIT0gdGFyZ2V0U3R5bGUtPmdldHRlcigpKSBcCi0gICAgICAgIHJlc2V0KHJlbmRlcmVy
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsgXAotICAgIFwKLSAgICBpZiAoKG1fcHJvcGVy
dHkgPT0gY0FuaW1hdGVBbGwgJiYgIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHko
cHJvcCkpIHx8IG1fcHJvcGVydHkgPT0gcHJvcCkgeyBcCi0gICAgICAgIENvbG9yIGZyb21Db2xv
ciA9IG1fZnJvbVN0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBDb2xvciB0b0NvbG9yID0gbV90
b1N0eWxlLT5nZXR0ZXIoKTsgXAotICAgICAgICBpZiAoZnJvbUNvbG9yLmlzVmFsaWQoKSB8fCB0
b0NvbG9yLmlzVmFsaWQoKSkgeyBcCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlk
KCkpIFwKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Y29sb3IoKTsg
XAotICAgICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkgXAotICAgICAgICAgICAgICAg
IHRvQ29sb3IgPSBtX3RvU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmIChmcm9tQ29s
b3IgIT0gdG9Db2xvcikge1wKLSAgICAgICAgICAgICAgICBtX2ZpbmlzaGVkID0gZmFsc2U7IFwK
LSAgICAgICAgICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpIFwKLSAgICAgICAgICAgICAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0
eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0
ZXIoYmxlbmRGdW5jKGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MoKSkpO1wKLSAgICAgICAg
ICAgICAgICBpZiAobV9wcm9wZXJ0eSA9PSBwcm9wKSBcCi0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsgXAotICAgICAgICAgICAgfVwKLSAgICAgICAgfVwKLSAgICB9XAorLy8gcmV0dXJuIHRy
dWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZG8KK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3Vy
cmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCit7CisgICAgY29uc3QgVHJhbnNp
dGlvbiogYW5pbSA9IHRhcmdldFN0eWxlLT50cmFuc2l0aW9ucygpOworICAgIAorICAgIC8vIE5v
dGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgdHJhbnNpdGlvbnMgb3IgaWYgdGhlIGN1
cnJlbnQgYW5kIHRhcmdldCB0cmFuc2l0aW9ucyBhcmUgdGhlIHNhbWUKKyAgICBpZiAobV90cmFu
c2l0aW9ucy5pc0VtcHR5KCkgJiYgIWFuaW0pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
bnQgbnVtQW5pbXMgPSAwOworICAgIGJvb2wgdHJhbnNpdGlvbnNDaGFuZ2VkID0gZmFsc2U7Cisg
ICAgCisgICAgLy8gU2VlIGlmIHRoZSBsaXN0cyBtYXRjaAorICAgIGZvciAoIDsgYW5pbTsgYW5p
bSA9IGFuaW0tPm5leHQoKSkgeworICAgICAgICArK251bUFuaW1zOworICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogaW1wbEFuaW0gPSAoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gQ1NT
UHJvcGVydHlJbnZhbGlkKSA/IDAgOgorICAgICAgICBtX3RyYW5zaXRpb25zLmdldChhbmltLT50
cmFuc2l0aW9uUHJvcGVydHkoKSk7CisgICAgICAgIGlmICghaW1wbEFuaW0gfHwgIWltcGxBbmlt
LT5hbmltYXRpb25zTWF0Y2goYW5pbSkpIHsKKyAgICAgICAgICAgIHRyYW5zaXRpb25zQ2hhbmdl
ZCA9IHRydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpZiAoIXRyYW5zaXRpb25zQ2hhbmdlZCAmJiBtX3RyYW5zaXRpb25zLnNpemUoKSAhPSBudW1B
bmltcykKKyAgICAgICAgdHJhbnNpdGlvbnNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAo
IXRyYW5zaXRpb25zQ2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFRyYW5z
aXRpb25zIGhhdmUgY2hhbmdlZCwgdXBkYXRlIHRoZSBsaXN0CisgICAgcmVzZXRUcmFuc2l0aW9u
cyhyZW5kZXJlcik7CisgICAgCisgICAgaWYgKCF0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEFkZCBhbGwgdGhlIG5ldyBhbmltYXRpb25z
CisgICAgZm9yIChhbmltID0gdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCk7IGFuaW07IGFuaW0g
PSBhbmltLT5uZXh0KCkpIHsKKyAgICAgICAgCisgICAgICAgIGludCBwcm9wZXJ0eSAgICAgICAg
PSBhbmltLT50cmFuc2l0aW9uUHJvcGVydHkoKTsKKyAgICAgICAgZG91YmxlIGR1cmF0aW9uICAg
ICA9IGFuaW0tPmR1cmF0aW9uKCk7CisgICAgICAgIGludCBpdGVyYXRpb25Db3VudCAgPSBhbmlt
LT5hbmltYXRpb25JdGVyYXRpb25Db3VudCgpOworICAgICAgICBkb3VibGUgZGVsYXkgICAgICAg
ID0gYW5pbS0+ZGVsYXkoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChwcm9wZXJ0eSAmJiAoZHVy
YXRpb24gfHwgZGVsYXkpICYmIGl0ZXJhdGlvbkNvdW50ICYmICFtX3RyYW5zaXRpb25zLmNvbnRh
aW5zKHByb3BlcnR5KSkgeworICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlv
biA9IG5ldyBJbXBsaWNpdEFuaW1hdGlvbihjb25zdF9jYXN0PFRyYW5zaXRpb24qPihhbmltKSwg
cmVuZGVyZXIsIHRoaXMpOworICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5zZXQocHJvcGVydHks
IGFuaW1hdGlvbik7CisgICAgICAgIH0KKyAgICB9Cit9CiAKLSNkZWZpbmUgQkxFTkRfU0hBRE9X
KHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1fcHJvcGVydHkgPT0gcHJvcCAmJiAo
IW1fdG9TdHlsZS0+Z2V0dGVyKCkgfHwgIXRhcmdldFN0eWxlLT5nZXR0ZXIoKSB8fCAqbV90b1N0
eWxlLT5nZXR0ZXIoKSAhPSAqdGFyZ2V0U3R5bGUtPmdldHRlcigpKSkgXAotICAgICAgICByZXNl
dChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7IFwKLSAgICBcCi0gICAgaWYg
KChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFhbmltYXRpb24tPmhhc0FuaW1hdGlvbkZv
clByb3BlcnR5KHByb3ApKSB8fCBtX3Byb3BlcnR5ID09IHByb3ApIHsgXAotICAgICAgICBpZiAo
bV9mcm9tU3R5bGUtPmdldHRlcigpICYmIG1fdG9TdHlsZS0+Z2V0dGVyKCkgJiYgKm1fZnJvbVN0
eWxlLT5nZXR0ZXIoKSAhPSAqbV90b1N0eWxlLT5nZXR0ZXIoKSkge1wKLSAgICAgICAgICAgIG1f
ZmluaXNoZWQgPSBmYWxzZTsgXAotICAgICAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKSBcCi0g
ICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IG5ldyAocmVuZGVyZXItPnJlbmRlckFyZW5h
KCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7IFwKLSAgICAgICAgICAgIGFuaW1hdGVkU3R5
bGUtPnNldHRlcihibGVuZEZ1bmMobV9mcm9tU3R5bGUtPmdldHRlcigpLCBtX3RvU3R5bGUtPmdl
dHRlcigpLCBwcm9ncmVzcygpKSk7XAotICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkgPT0gcHJv
cCkgXAotICAgICAgICAgICAgICAgIHJldHVybjsgXAotICAgICAgICB9XAorLy8gUmV0dXJuIHRy
dWUgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gZG8KK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQoreworICAgIGNvbnN0
IFRyYW5zaXRpb24qIGFuaW0gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpOworICAgIAorICAg
IC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucyBvciBpZiB0
aGUgY3VycmVudCBhbmQgdGFyZ2V0IGFuaW1hdGlvbnMgYXJlIHRoZSBzYW1lCisgICAgaWYgKCht
X2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIWFuaW0pIHx8IAorICAgICAgICAoY3Vy
cmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+YW5pbWF0aW9ucygpICYmICooY3VycmVudFN0eWxl
LT5hbmltYXRpb25zKCkpID09ICphbmltKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIHNp
emVfdCBudW1BbmltcyA9IDA7CisgICAgYm9vbCBhbmltc0NoYW5nZWQgPSBmYWxzZTsKKyAgICAK
KyAgICAvLyBTZWUgaWYgdGhlIGxpc3RzIG1hdGNoCisgICAgZm9yICggOyBhbmltOyBhbmltID0g
YW5pbS0+bmV4dCgpKSB7CisgICAgICAgIGlmICghYW5pbS0+aXNWYWxpZEFuaW1hdGlvbigpKSB7
CisgICAgICAgICAgICBhbmltc0NoYW5nZWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGtmQW5pbSA9IChudW1BbmltcyA8IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnNpemUoKSkgPyBtX2tleWZyYW1lQW5pbWF0aW9uc1tudW1Bbmltc10gOiAw
OworICAgICAgICAgICAgaWYgKCFrZkFuaW0gfHwgIWtmQW5pbS0+YW5pbWF0aW9uc01hdGNoKGFu
aW0pKQorICAgICAgICAgICAgICAgIGFuaW1zQ2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYW5pbSkgeworICAgICAgICAgICAgICAgICAgICAv
LyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRpZmZlci4gdXBkYXRlIGlm
IG5lZWRlZAorICAgICAgICAgICAgICAgICAgICBrZkFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShhbmlt
LT5hbmltYXRpb25QbGF5U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZyk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNhdmVkIGFuaW1h
dGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBzdGF0ZSBoYXMgY2hh
bmdlZAorICAgICAgICAgICAgICAgICAgICBrZkFuaW0tPnNldEFuaW1hdGlvbihhbmltKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKytudW1B
bmltczsKICAgICB9CisgICAgCisgICAgaWYgKCFhbmltc0NoYW5nZWQgJiYgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuc2l6ZSgpICE9IG51bUFuaW1zKQorICAgICAgICBhbmltc0NoYW5nZWQgPSB0cnVl
OworICAgIAorICAgIGlmICghYW5pbXNDaGFuZ2VkKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gQW5pbWF0aW9ucyBoYXZlIGNoYW5nZWQsIHVwZGF0ZSB0aGUgbGlzdAorICAgIHJlc2V0
QW5pbWF0aW9ucyhyZW5kZXJlcik7CisgICAgCisgICAgaWYgKCF0YXJnZXRTdHlsZS0+YW5pbWF0
aW9ucygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gQWRkIGFsbCB0aGUgbmV3IGFu
aW1hdGlvbnMKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGZvciAoYW5pbSA9IHRhcmdldFN0eWxl
LT5hbmltYXRpb25zKCk7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCksICsraW5kZXgpIHsKKyAg
ICAgICAgCisgICAgICAgIGlmICghYW5pbS0+aXNWYWxpZEFuaW1hdGlvbigpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICAvLyBEb24ndCBib3RoZXIgYWRkaW5nIHRo
ZSBhbmltYXRpb24gaWYgaXQgaGFzIG5vIGtleWZyYW1lcyBvciB3b24ndCBhbmltYXRlCisgICAg
ICAgIGlmICgoYW5pbS0+ZHVyYXRpb24oKSB8fCBhbmltLT5kZWxheSgpKSAmJiBhbmltLT5hbmlt
YXRpb25JdGVyYXRpb25Db3VudCgpICYmCisgICAgICAgICAgICBhbmltLT5rZXlmcmFtZUxpc3Qo
KS5nZXQoKSAmJiAhYW5pbS0+a2V5ZnJhbWVMaXN0KCktPmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmFwcGVuZChuZXcgS2V5ZnJhbWVBbmltYXRpb24oY29u
c3RfY2FzdDxUcmFuc2l0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCBpbmRleCwgdGhpcykpOworICAg
ICAgICB9CisgICAgfQorfQogCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBv
c2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSwgUmVu
ZGVyU3R5bGUqJiBhbmltYXRlZFN0eWxlKQoraW50IENvbXBvc2l0ZUFuaW1hdGlvbjo6ZmluZEtl
eWZyYW1lQW5pbWF0aW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICAvLyBGSVhN
RTogSWYgd2UgaGF2ZSBubyB0cmFuc2l0aW9uLXByb3BlcnR5LCB0aGVuIHRoZSBvbmx5IHdheSB0
byB0ZWxsIGlmIG91ciBnb2FsIHN0YXRlIGNoYW5nZWQgaXMgdG8gY2hlY2sKLSAgICAvLyBldmVy
eSBzaW5nbGUgYW5pbWF0YWJsZSBwcm9wZXJ0eS4gIEZvciBub3cgd2UnbGwganVzdCBkaWZmIHRo
ZSBzdHlsZXMgdG8gYXNrIHRoYXQgcXVlc3Rpb24sCi0gICAgLy8gYnV0IHdlIHNob3VsZCByZWFs
bHkgZXhjbHVkZSBub24tYW5pbWF0YWJsZSBwcm9wZXJ0aWVzLgotICAgIGlmICghbV90b1N0eWxl
IHx8IChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmIHRhcmdldFN0eWxlLT5kaWZmKG1fdG9T
dHlsZSkpKQotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHls
ZSk7Ci0KLSAgICAvLyBGSVhNRTogQmxvdyB1cCBzaG9ydGhhbmRzIHNvIHRoYXQgdGhleSBjYW4g
YmUgaG9ub3JlZC4KLSAgICBtX2ZpbmlzaGVkID0gdHJ1ZTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eUxlZnQsIGxlZnQsIHNldExlZnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UmlnaHQsIHJpZ2h0
LCBzZXRSaWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlUb3AsIHRvcCwgc2V0VG9wKTsKLSAg
ICBCTEVORChDU1NQcm9wZXJ0eUJvdHRvbSwgYm90dG9tLCBzZXRCb3R0b20pOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5V2lkdGgsIHdpZHRoLCBzZXRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVy
dHlIZWlnaHQsIGhlaWdodCwgc2V0SGVpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRXaWR0aCwgYm9yZGVyTGVmdFdpZHRoLCBzZXRCb3JkZXJMZWZ0V2lkdGgpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgYm9yZGVyUmlnaHRXaWR0aCwgc2V0Qm9y
ZGVyUmlnaHRXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgYm9y
ZGVyVG9wV2lkdGgsIHNldEJvcmRlclRvcFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoLCBib3JkZXJCb3R0b21XaWR0aCwgc2V0Qm9yZGVyQm90dG9tV2lkdGgp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgbWFyZ2luTGVmdCwgc2V0TWFyZ2lu
TGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgbWFyZ2luUmlnaHQsIHNl
dE1hcmdpblJpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU1hcmdpblRvcCwgbWFyZ2luVG9w
LCBzZXRNYXJnaW5Ub3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCBtYXJn
aW5Cb3R0b20sIHNldE1hcmdpbkJvdHRvbSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5n
TGVmdCwgcGFkZGluZ0xlZnQsIHNldFBhZGRpbmdMZWZ0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eVBhZGRpbmdSaWdodCwgcGFkZGluZ1JpZ2h0LCBzZXRQYWRkaW5nUmlnaHQpOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgcGFkZGluZ1RvcCwgc2V0UGFkZGluZ1RvcCk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCBwYWRkaW5nQm90dG9tLCBzZXRQYWRkaW5n
Qm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU9wYWNpdHksIG9wYWNpdHksIHNldE9wYWNp
dHkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5Q29sb3IsIGNvbG9yLCBzZXRDb2xvcik7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIGJhY2tncm91bmRDb2xvciwgc2V0QmFj
a2dyb3VuZENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5
V2Via2l0Q29sdW1uUnVsZUNvbG9yLCBjb2x1bW5SdWxlQ29sb3IsIHNldENvbHVtblJ1bGVDb2xv
cik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlV2lkdGgsIGNvbHVtblJ1
bGVXaWR0aCwgc2V0Q29sdW1uUnVsZVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtbkdhcCwgY29sdW1uR2FwLCBzZXRDb2x1bW5HYXApOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uQ291bnQsIGNvbHVtbkNvdW50LCBzZXRDb2x1bW5Db3VudCk7Ci0gICAg
QkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5XaWR0aCwgY29sdW1uV2lkdGgsIHNldENvbHVt
bldpZHRoKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5V2Via2l0
VGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHNldFRleHRTdHJva2VDb2xvcik7Ci0g
ICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29s
b3IsIHRleHRGaWxsQ29sb3IsIHNldFRleHRGaWxsQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsIGhvcml6b250YWxCb3JkZXJTcGFjaW5n
LCBzZXRIb3Jpem9udGFsQm9yZGVyU3BhY2luZyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsIHZlcnRpY2FsQm9yZGVyU3BhY2luZywgc2V0VmVydGlj
YWxCb3JkZXJTcGFjaW5nKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdENvbG9yLCBib3JkZXJMZWZ0Q29sb3IsIHNldEJvcmRlckxlZnRDb2xvcik7
Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29s
b3IsIGJvcmRlclJpZ2h0Q29sb3IsIHNldEJvcmRlclJpZ2h0Q29sb3IpOwotICAgIEJMRU5EX01B
WUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgYm9yZGVyVG9wQ29s
b3IsIHNldEJvcmRlclRvcENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIGJvcmRlckJvdHRvbUNvbG9yLCBzZXRCb3JkZXJC
b3R0b21Db2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlaSW5kZXgsIHpJbmRleCwgc2V0Wklu
ZGV4KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIGxpbmVIZWlnaHQsIHNldExp
bmVIZWlnaHQpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURfQ09MT1IoQ1NTUHJvcGVydHlPdXRs
aW5lQ29sb3IsIG91dGxpbmVDb2xvciwgc2V0T3V0bGluZUNvbG9yKTsKLSAgICBCTEVORChDU1NQ
cm9wZXJ0eU91dGxpbmVPZmZzZXQsIG91dGxpbmVPZmZzZXQsIHNldE91dGxpbmVPZmZzZXQpOwot
ICAgIEJMRU5EKENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCBvdXRsaW5lV2lkdGgsIHNldE91dGxp
bmVXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCBsZXR0ZXJTcGFj
aW5nLCBzZXRMZXR0ZXJTcGFjaW5nKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdvcmRTcGFjaW5n
LCB3b3JkU3BhY2luZywgc2V0V29yZFNwYWNpbmcpOwotICAgIEJMRU5EX1NIQURPVyhDU1NQcm9w
ZXJ0eVdlYmtpdEJveFNoYWRvdywgYm94U2hhZG93LCBzZXRCb3hTaGFkb3cpOwotICAgIEJMRU5E
X1NIQURPVyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csIHRleHRTaGFkb3csIHNldFRleHRTaGFkb3cp
OwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCB0cmFuc2Zvcm0sIHNldFRy
YW5zZm9ybSk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCB0
cmFuc2Zvcm1PcmlnaW5YLCBzZXRUcmFuc2Zvcm1PcmlnaW5YKTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblksIHRyYW5zZm9ybU9yaWdpblksIHNldFRyYW5zZm9y
bU9yaWdpblkpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wTGVmdFJhZGl1
cywgYm9yZGVyVG9wTGVmdFJhZGl1cywgc2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJUb3BSaWdodFJhZGl1cywgYm9yZGVyVG9wUmlnaHRS
YWRpdXMsIHNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIGJvcmRlckJvdHRvbUxlZnRSYWRpdXMsIHNldEJv
cmRlckJvdHRvbUxlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVy
Qm90dG9tUmlnaHRSYWRpdXMsIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJCb3R0
b21SaWdodFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCB2aXNpYmls
aXR5LCBzZXRWaXNpYmlsaXR5KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVpvb20sIHpvb20sIHNl
dFpvb20pOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludCkgbV9rZXlmcmFtZUFuaW1hdGlv
bnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9uc1tpXS0+bmFt
ZSgpID09IG5hbWUpCisgICAgICAgICAgICByZXR1cm4gaTsKKyAgICByZXR1cm4gLTE7CiB9CiAK
LVJlbmRlclN0eWxlKiBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSog
dGFyZ2V0U3R5bGUpCitSZW5kZXJTdHlsZSogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRlclN0
eWxlKiB0YXJnZXRTdHlsZSkKIHsKLSAgICBjb25zdCBUcmFuc2l0aW9uKiBjdXJyZW50VHJhbnNp
dGlvbnMgPSBjdXJyZW50U3R5bGUtPnRyYW5zaXRpb25zKCk7Ci0gICAgY29uc3QgVHJhbnNpdGlv
biogdGFyZ2V0VHJhbnNpdGlvbnMgPSB0YXJnZXRTdHlsZS0+dHJhbnNpdGlvbnMoKTsKLSAgICBp
ZiAoY3VycmVudFRyYW5zaXRpb25zICE9IHRhcmdldFRyYW5zaXRpb25zICYmICEoY3VycmVudFRy
YW5zaXRpb25zICYmIHRhcmdldFRyYW5zaXRpb25zICYmICpjdXJyZW50VHJhbnNpdGlvbnMgPT0g
KnRhcmdldFRyYW5zaXRpb25zKSkgewotICAgICAgICByZXNldChyZW5kZXJlcik7Ci0gICAgICAg
IGRlbGV0ZUFsbFZhbHVlcyhtX2FuaW1hdGlvbnMpOwotICAgICAgICBtX2FuaW1hdGlvbnMuY2xl
YXIoKTsKLSAgICB9Ci0KLSAgICAvLyBHZXQgdGhlIGFuaW1hdGlvbiBsYXllcnMgZnJvbSB0aGUg
dGFyZ2V0IHN0eWxlLgotICAgIC8vIEZvciBlYWNoIG9uZSwgd2UgbmVlZCB0byBjcmVhdGUgYSBu
ZXcgYW5pbWF0aW9uIHVubGVzcyBvbmUgZXhpc3RzIGFscmVhZHkgKGxhdGVyIG9jY3VycmVuY2Vz
IG9mIGR1cGxpY2F0ZQotICAgIC8vIHRyaWdnZXJzIGluIHRoZSBsYXllciBsaXN0IGdldCBpZ25v
cmVkKS4KLSAgICBpZiAobV9hbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGNv
bnN0IFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSBjdXJyZW50VHJhbnNpdGlvbnM7IHRyYW5zaXRp
b247IHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uLT5uZXh0KCkpIHsKLSAgICAgICAgICAgIGludCBw
cm9wZXJ0eSA9IHRyYW5zaXRpb24tPnByb3BlcnR5KCk7Ci0gICAgICAgICAgICBpbnQgZHVyYXRp
b24gPSB0cmFuc2l0aW9uLT5kdXJhdGlvbigpOwotICAgICAgICAgICAgaW50IHJlcGVhdENvdW50
ID0gdHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKTsKLSAgICAgICAgICAgIGlmIChwcm9wZXJ0eSAm
JiBkdXJhdGlvbiAmJiByZXBlYXRDb3VudCAmJiAhbV9hbmltYXRpb25zLmNvbnRhaW5zKHByb3Bl
cnR5KSkgewotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBu
ZXcgSW1wbGljaXRBbmltYXRpb24odHJhbnNpdGlvbik7Ci0gICAgICAgICAgICAgICAgbV9hbmlt
YXRpb25zLnNldChwcm9wZXJ0eSwgYW5pbWF0aW9uKTsKKyAgICBSZW5kZXJTdHlsZSogcmVzdWx0
U3R5bGUgPSAwOworICAgIAorICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3
ZSBkb24ndCBoYXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKQorICAgIHVwZGF0ZVRyYW5z
aXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAKKyAgICBp
ZiAoY3VycmVudFN0eWxlKSB7CisgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdHJhbnNpdGlv
biBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4g
IFdlIHdhbnQgdGhlbQorICAgICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5
IGlmIG5lZWRlZC4KKyAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRl
cmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIGFu
aW0gPSBpdC0+c2Vjb25kOworICAgICAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgICAg
ICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxl
LCByZXN1bHRTdHlsZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KKyAgICAK
KyAgICB1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMocmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFy
Z2V0U3R5bGUpOworICAgIAogICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0aW9uIG9iamVj
dHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAgV2Ugd2Fu
dCB0aGVtCiAgICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQu
Ci0gICAgUmVuZGVyU3R5bGUqIHJlc3VsdCA9IDA7Ci0gICAgSGFzaE1hcDxpbnQsIEltcGxpY2l0
QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3Ig
KEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0
aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIGl0LT5zZWNvbmQtPmFuaW1h
dGUodGhpcywgcmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdCk7Cisg
ICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVBbmltYXRp
b24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigpOyBp
dCAhPSBrZmVuZDsgKytpdCkgeworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9ICpp
dDsKKyAgICAgICAgaWYgKGFuaW0pIHsKKyAgICAgICAgICAgIGFuaW0tPmFuaW1hdGUodGhpcywg
cmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUsIHJlc3VsdFN0eWxlKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gcmVzdWx0U3R5bGUgPyByZXN1bHRTdHlsZSA6
IHRhcmdldFN0eWxlOworfQogCi0gICAgaWYgKHJlc3VsdCkKLSAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKLQotICAgIHJldHVybiB0YXJnZXRTdHlsZTsKKy8vICJhbmltYXRpbmciIG1lYW5zIHRoYXQg
c29tZXRoaW5nIGlzIHJ1bm5pbmcgdGhhdCByZXF1aXJlcyB0aGUgdGltZXIgdG8ga2VlcCBmaXJp
bmcKKy8vIChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQordm9pZCBDb21wb3NpdGVBbmltYXRp
b246OnNldEFuaW1hdGluZyhib29sIGluQW5pbWF0aW5nKQoreworICAgIENTU1Byb3BlcnR5VHJh
bnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7Cisg
ICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0
QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAgICAgIHRyYW5zaXRpb24t
PnNldEFuaW1hdGluZyhpbkFuaW1hdGluZyk7CisgICAgfSAgICAKKyAgICAKKyAgICBWZWN0b3I8
S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5k
OyArK2l0KSB7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAg
ICBhbmltLT5zZXRBbmltYXRpbmcoaW5BbmltYXRpbmcpOworICAgIH0KIH0KIAotYm9vbCBDb21w
b3NpdGVJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0aW5nKCkgY29uc3QKK2Jvb2wgQ29tcG9zaXRl
QW5pbWF0aW9uOjphbmltYXRpbmcoKQogewotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1h
dGlvbio+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICBpZiAoIWl0LT5z
ZWNvbmQtPmZpbmlzaGVkKCkpCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5
VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigp
OyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICB0cmFuc2l0
aW9uID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+
YW5pbWF0aW5nKCkgJiYgdHJhbnNpdGlvbi0+cnVubmluZygpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSAgICAKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6
Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBm
b3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5y
dW5uaW5nKCkgJiYgYW5pbS0+YW5pbWF0aW5nKCkgJiYgYW5pbS0+YWN0aXZlKCkpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uOjpyZXNldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
dm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc2V0VHJhbnNpdGlvbnMoUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcikKIHsKLSAgICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQs
IEltcGxpY2l0QW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaXQtPnNlY29uZC0+cmVzZXQocmVuZGVy
ZXIsIDAsIDApOworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9y
IGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRp
b25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0
LT5zZWNvbmQ7CisgICAgICAgIHRyYW5zaXRpb24tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAg
ZGVsZXRlIHRyYW5zaXRpb247CisgICAgfQorICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKIH0K
IAordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc2V0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3Qq
IHJlbmRlcmVyKQoreworICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVy
YXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9y
PEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1h
dGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmlt
YXRpb24qIGFuaW0gPSAqaXQ7CisgICAgICAgIGRlbGV0ZSBhbmltOworICAgIH0KKyAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jbGVhcigpOworfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
Y2xlYW51cEZpbmlzaGVkQW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAg
IGlmIChzdXNwZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIFJlc2V0IHRy
YW5zaXRpb25zCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV90cmFuc2l0aW9ucy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBl
bmQ7ICsraXQpIHsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25k
OworICAgICAgICBpZiAoIWFuaW0pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KGFuaW0tPnBvc3RhY3RpdmUoKSAmJiAhYW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpIHsKKyAg
ICAgICAgICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShhbmltLT5TVEFURV9JTlBVVF9NQUtF
X05FVywgLTEpOworICAgICAgICAgICAgYW5pbS0+cmVzZXQocmVuZGVyZXIpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIE1ha2UgYSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUgZGVs
ZXRlZAorICAgIFZlY3RvcjxpbnQ+IGZpbmlzaGVkQW5pbWF0aW9uczsKKyAgICAKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IChpbnQpIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUoKTsgKytpKSB7
CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnNb
aV07CisgICAgICAgIGlmICghYW5pbSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBp
ZiAoYW5pbS0+cG9zdGFjdGl2ZSgpICYmICFhbmltLT53YWl0aW5nRm9yRW5kRXZlbnQoKSkKKyAg
ICAgICAgICAgIGZpbmlzaGVkQW5pbWF0aW9ucy5hcHBlbmQoaSk7CisgICAgfQorICAgIAorICAg
IC8vIERlbGV0ZSB0aGVtCisgICAgZm9yIChWZWN0b3I8aW50Pjo6aXRlcmF0b3IgaXQgPSBmaW5p
c2hlZEFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZmluaXNoZWRBbmltYXRpb25zLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zWyppdF0tPnJlc2V0KHJlbmRlcmVy
KTsKKyAgICAgICAgZGVsZXRlIG1fa2V5ZnJhbWVBbmltYXRpb25zWyppdF07CisgICAgICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25zLnJlbW92ZSgqaXQpOworICAgIH0KK30KKwordm9pZCBDb21wb3Np
dGVBbmltYXRpb246OnNldEFuaW1hdGlvblN0YXJ0VGltZShkb3VibGUgdCkKK3sKKyAgICAvLyBT
ZXQgc3RhcnQgdGltZSBvbiBhbGwgYW5pbWF0aW9ucyB3YWl0aW5nIGZvciBpdAorICAgIFZlY3Rv
cjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2Zl
bmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7CisgICAg
ICAgIGlmIChhbmltICYmIGFuaW0tPndhaXRpbmdGb3JTdGFydFRpbWUoKSkKKyAgICAgICAgICAg
IGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBVVF9TVEFS
VF9USU1FX1NFVCwgdCk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c2V0
VHJhbnNpdGlvblN0YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KQoreworICAgIC8vIFNl
dCBzdGFydCB0aW1lIGZvciBnaXZlbiBwcm9wZXJ0eSB0cmFuc2l0aW9uCisgICAgQ1NTUHJvcGVy
dHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9ucy5lbmQo
KTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgSW1w
bGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5pbSAmJiBh
bmltLT53YWl0aW5nRm9yU3RhcnRUaW1lKCkgJiYgCisgICAgICAgICAgICAoYW5pbS0+dHJhbnNp
dGlvblByb3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkg
PT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvbkJhc2U6OlNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCB0KTsKKyAgICB9Cit9CisK
K3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCit7CisgICAgaWYg
KG1fc3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNwZW5kZWQgPSB0
cnVlOworICAgIAorICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRv
ciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtl
eWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlv
bnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRp
b24qIGFuaW0gPSAqaXQ7CisgICAgICAgIGlmIChhbmltKSB7CisgICAgICAgICAgICBhbmltLT51
cGRhdGVQbGF5U3RhdGUoZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0g
JiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRl
KGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246
OnJlc3VtZUFuaW1hdGlvbnMoKQoreworICAgIGlmICghbV9zdXNwZW5kZWQpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOworICAgIAorICAgIFZlY3RvcjxL
ZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7
ICsraXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7CisgICAgICAg
IGlmIChhbmltICYmIGFuaW0tPnBsYXlTdGF0ZVBsYXlpbmcoKSkgeworICAgICAgICAgICAgYW5p
bS0+dXBkYXRlUGxheVN0YXRlKHRydWUpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAg
ICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFu
aW0gJiYgYW5pbS0+aGFzU3R5bGUoKSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0
YXRlKHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoaW50IHByb3BlcnR5KQoreworICAgIENTU1By
b3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMu
ZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRv
ciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAg
IEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0g
JiYgKGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFuaW0tPnRyYW5z
aXRpb25Qcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0tPnNldE92
ZXJyaWRkZW4odHJ1ZSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVz
dW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpCit7CisgICAgQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV90cmFuc2l0aW9u
cy5lbmQoKTsKKyAgICBmb3IgKENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90cmFuc2l0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAg
ICAgSW1wbGljaXRBbmltYXRpb24qIGFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoYW5p
bSAmJiAoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkgPT0gcHJvcGVydHkgfHwgYW5pbS0+dHJh
bnNpdGlvblByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwpKQorICAgICAgICAgICAgYW5pbS0+c2V0
T3ZlcnJpZGRlbihmYWxzZSk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
c3R5bGVJc1NldHVwKCkKK3sKKyAgICBpZiAobV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzID09IDAp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6
Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBm
b3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53
YWl0aW5nRm9yU3R5bGVTZXR1cCgpKQorICAgICAgICAgICAgYW5pbS0+dXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvbkJhc2U6OlNUQVRFX0lOUFVUX1NUWUxFX1NFVFVQLCAtMSk7CisgICAgfQor
ICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyAr
K2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAg
ICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlU2V0dXAoKSkKKyAgICAgICAg
ICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBVVF9T
VFlMRV9TRVRVUCwgLTEpOworICAgIH0KK30KKworYm9vbCBDb21wb3NpdGVBbmltYXRpb246Omlz
QW5pbWF0aW5nUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIFZlY3RvcjxLZXlm
cmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRp
b25zLmVuZCgpOworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsr
aXQpIHsKKyAgICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7CisgICAgICAgIGlm
IChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHkpKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChD
U1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlv
bnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9u
KiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+aXNBbmltYXRp
bmdQcm9wZXJ0eShwcm9wZXJ0eSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisjcHJhZ21hIG1hcmsgLQorCitjbGFzcyBQcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKGludCBwcm9wKQor
ICAgIDogbV9wcm9wKHByb3ApCisgICAgeyB9CisgICAgdmlydHVhbCB+UHJvcGVydHlXcmFwcGVy
QmFzZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdD0wOworICAgIHZpcnR1YWwgdm9pZCBibGVuZChS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9nKSBjb25zdD0wOworICAgIAorICAgIGludCBwcm9wZXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcDsgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQgbV9wcm9wOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIgOiBw
dWJsaWMgUHJvcGVydHlXcmFwcGVyQmFzZSB7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVy
R2V0dGVyKGludCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKKyAgICA6
IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICB7
IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAoYS0+Km1f
Z2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgor
ICAgIFQgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KK2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8VD4geworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlcihpbnQgcHJvcCwgVCAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShUKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihwcm9wLCBnZXR0ZXIpCisgICAg
LCBtX3NldHRlcihzZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJsZW5k
KFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIp
KGJsZW5kRnVuYygoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChi
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwgcHJvZykpOworICAgIH0K
KyAgICAKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsK
K307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNoYWRvdyA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8U2hhZG93RGF0YSo+IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFk
b3coaW50IHByb3AsIFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFNoYWRvd0RhdGEqLCBib29sKSkKKyAgICA6IFBy
b3BlcnR5V3JhcHBlckdldHRlcjxTaGFkb3dEYXRhKj4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgU2hhZG93RGF0YSogc2hhZG93YSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIFNo
YWRvd0RhdGEqIHNoYWRvd2IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFzaGFkb3dhICYmIHNoYWRvd2IgfHwgc2hhZG93YSAmJiAhc2hhZG93YikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKHNoYWRvd2EgJiYgc2hhZG93YiAmJiAoKnNo
YWRvd2EgIT0gKnNoYWRvd2IpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0
eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91
YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3dhID0gKGEt
PiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YiA9IChiLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgIFNoYWRvd0RhdGEgZGVmYXVsdFNoYWRvd0RhdGE7CisgICAgICAgIAor
ICAgICAgICBpZiAoIXNoYWRvd2EpCisgICAgICAgICAgICBzaGFkb3dhID0gJmRlZmF1bHRTaGFk
b3dEYXRhOworICAgICAgICBpZiAoIXNoYWRvd2IpCisgICAgICAgICAgICBzaGFkb3diID0gJmRl
ZmF1bHRTaGFkb3dEYXRhOworICAgICAgICAKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVu
ZEZ1bmMoc2hhZG93YSwgc2hhZG93YiwgcHJvZyksIGZhbHNlKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFNoYWRvd0RhdGEqLCBib29s
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckludFNpemUgOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyR2V0dGVyPEludFNpemU+IHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJJbnRT
aXplKGludCBwcm9wLCBJbnRTaXplIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IEludFNpemUmKSkKKyAgICA6IFByb3BlcnR5
V3JhcHBlckdldHRlcjxJbnRTaXplPihwcm9wLCBnZXR0ZXIpCisgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0CisgICAgeworICAgICAgICBJbnRT
aXplIHNpemVhID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgSW50U2l6ZSBzaXplYiA9IChi
LT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gKHNpemVhID09IHNpemVi
KTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3Qs
IGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cp
IGNvbnN0CisgICAgeworICAgICAgICBJbnRTaXplIHNpemVhID0gKGEtPiptX2dldHRlcikoKTsK
KyAgICAgICAgSW50U2l6ZSBzaXplYiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKHNpemVhLCBzaXplYiwgcHJv
ZykpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoY29uc3QgSW50U2l6ZSYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyTWF5YmVJ
bnZhbGlkQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyQmFzZSB7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoaW50IHByb3AsIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShjb25zdCBDb2xvciYpKQorICAgIDogUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICwg
bV9nZXR0ZXIoZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPipt
X2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xvciA9
IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tQ29s
b3IgPT0gdG9Db2xvcjsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRl
clN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
ZG91YmxlIHByb2cpIGNvbnN0CisgICAgeworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+
Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsK
KyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9y
ID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2cpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3Mg
UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkTm9uQ29uc3RDb2xvciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRO
b25Db25zdENvbG9yKGludCBwcm9wLCBDb2xvciAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgIDogUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3Ig
dG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICgh
dG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAg
ICAgICAgCisgICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xvcjsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2cpIGNvbnN0CisgICAgewor
ICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDb2xv
ciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNW
YWxpZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYg
KCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOwor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhmcm9tQ29sb3IsIHRvQ29sb3IsIHBy
b2cpKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIENvbG9yIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0
IENvbG9yJik7Cit9OworICAgIAorICAgIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUgewogcHVibGljOgogICAgIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKik7CiAg
ICAgfkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKCk7Ci0KLSAgICBDb21wb3NpdGVJbXBsaWNp
dEFuaW1hdGlvbiogZ2V0KFJlbmRlck9iamVjdCopOworICAgIAorICAgIENvbXBvc2l0ZUFuaW1h
dGlvbiogYWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKFJlbmRlck9iamVjdCopOwogICAgIGJvb2wg
Y2xlYXIoUmVuZGVyT2JqZWN0Kik7CiAgICAgCi0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopOwotICAgIHZvaWQgdXBkYXRlVGltZXIoKTsKLQot
ICAgIGJvb2wgaGFzSW1wbGljaXRBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fYW5pbWF0
aW9ucy5pc0VtcHR5KCk7IH0KLQorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qKTsKKyAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRp
bWVyKCk7CisgICAgCisgICAgdm9pZCB1cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyRmlyZWQoVGlt
ZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+Kik7CisgICAgdm9pZCBzdGFydFVwZGF0ZVJl
bmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAKKyAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25z
dCB7IHJldHVybiAhbV9jb21wb3NpdGVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQorICAgIAorICAg
IHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lkIHJl
c3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICAKKyAgICB2b2lkIGNsZWFu
dXBGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICB2b2lkIHN0eWxlSXNTZXR1cCgpOwor
ICAgIAorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIoUmVuZGVyT2JqZWN0
KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgCisgICAgc3RhdGljIGJvb2wgcHJvcGVy
dGllc0VxdWFsKGludCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpOworICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29m
dHdhcmUgYW5pbWF0aW9uIHRpbWVycworICAgIHN0YXRpYyBib29sIGJsZW5kUHJvcGVydGllcyhp
bnQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZyk7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9y
U3R5bGVJc1NldHVwKGJvb2wgd2FpdGluZykgeyBpZiAod2FpdGluZykgbV9udW1TdHlsZUlzU2V0
dXBXYWl0ZXJzKys7IGVsc2UgbV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzLS07IH0KKyAgICAKIHBy
aXZhdGU6Ci0gICAgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1h
dGlvbio+IG1fYW5pbWF0aW9uczsKLSAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZT4gbV90aW1lcjsKKyAgICBzdGF0aWMgdm9pZCBlbnN1cmVQcm9wZXJ0eU1hcCgpOworICAgIAor
ICAgIHR5cGVkZWYgSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVBbmltYXRpb24qPiBS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA7CisgICAgCisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9u
TWFwIG1fY29tcG9zaXRlQW5pbWF0aW9uczsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4gbV9hbmltYXRpb25UaW1lcjsKKyAgICBUaW1lcjxBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4gbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyOwogICAgIEZyYW1lKiBtX2ZyYW1l
OworICAgIHVpbnQzMl90IG1fbnVtU3R5bGVJc1NldHVwV2FpdGVyczsKKyAgICAKKyAgICBzdGF0
aWMgVmVjdG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogZ19wcm9wZXJ0eVdyYXBwZXJzOworICAg
IHN0YXRpYyBpbnQgZ19wcm9wZXJ0eVdyYXBwZXJNYXBbbnVtQ1NTUHJvcGVydGllc107CiB9Owog
CisjcHJhZ21hIG1hcmsgLQorCitWZWN0b3I8UHJvcGVydHlXcmFwcGVyQmFzZSo+KiBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6Z19wcm9wZXJ0eVdyYXBwZXJzID0gMDsKK2ludCBBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6Z19wcm9wZXJ0eVdyYXBwZXJNYXBbXTsKKwogQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lKiBmcmFt
ZSkKLSAgICA6IG1fdGltZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp0aW1l
ckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKKzogbV9hbmltYXRpb25UaW1lcih0aGlzLCAm
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCissIG1fdXBk
YXRlUmVuZGVyaW5nRGlzcGF0Y2hlcih0aGlzLCAmQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZCkKKywgbV9mcmFtZShmcmFtZSkKKywgbV9u
dW1TdHlsZUlzU2V0dXBXYWl0ZXJzKDApCiB7CisgICAgZW5zdXJlUHJvcGVydHlNYXAoKTsKIH0K
IAogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5BbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSgpCiB7Ci0gICAgZGVsZXRlQWxsVmFsdWVzKG1fYW5pbWF0aW9ucyk7CisgICAgZGVsZXRlQWxs
VmFsdWVzKG1fY29tcG9zaXRlQW5pbWF0aW9ucyk7CiB9CiAKLUNvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Z2V0KFJlbmRlck9iamVjdCogcmVu
ZGVyZXIpCisvLyBzdGF0aWMKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3Vy
ZVByb3BlcnR5TWFwKCkKIHsKLSAgICBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0
aW9uID0gbV9hbmltYXRpb25zLmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmltYXRpb24gJiYg
cmVuZGVyZXItPnN0eWxlKCktPnRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgYW5pbWF0aW9uID0g
bmV3IENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKCk7Ci0gICAgICAgIG1fYW5pbWF0aW9ucy5z
ZXQocmVuZGVyZXIsIGFuaW1hdGlvbik7CisgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZl
ciBkZXN0cm95ZWQuIE1heWJlIHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hl
biB0aGUgbGFzdCBBbmltYXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KKyAgICBpZiAoZ19w
cm9wZXJ0eVdyYXBwZXJzID09IDApIHsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzID0gbmV3
IFZlY3RvcjxQcm9wZXJ0eVdyYXBwZXJCYXNlKj4oKTsKKyAgICAgICAgCisgICAgICAgIC8vIGJ1
aWxkIHRoZSBsaXN0IG9mIHByb3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBh
bmQgYmxlbmRzCisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJl
bmRlclN0eWxlOjpzZXRMZWZ0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5
bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVRv
cCwgJlJlbmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQ
cm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5kZXJTdHlsZTo6c2V0Qm90
dG9tKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldFdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5k
KG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0
eWxlOjpoZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0SGVpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVy
dHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENT
U1Byb3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRXaWR0aCwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJv
cGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9w
ZXJ0eUJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlclRvcFdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJz
LT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luTGVm
dCwgJlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmln
aHQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luUmlnaHQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFy
Z2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5U
b3ApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6Om1hcmdp
bkJvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20pKTsKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3Bl
cnR5UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6
c2V0UGFkZGluZ0xlZnQpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQpKTsKKyAg
ICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5n
dGg+KENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nVG9wLCAmUmVu
ZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5UGFkZGluZ0JvdHRv
bSwgJlJlbmRlclN0eWxlOjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdC
b3R0b20pKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENvbG9yJj4oQ1NTUHJvcGVydHlDb2xv
ciwgJlJlbmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvcikpOworICAgICAg
ICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IENv
bG9yJj4oQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3Vu
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvcikpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0
PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5V2Via2l0Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0
eWxlOjpzZXRDb2x1bW5HYXApKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5Db3VudCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbldpZHRoLCAmUmVuZGVyU3R5
bGU6OmNvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQ
cm9wZXJ0eVpJbmRleCwgJlJlbmRlclN0eWxlOjp6SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0Wklu
ZGV4KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6bGluZUhl
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eU91dGxp
bmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRP
dXRsaW5lT2Zmc2V0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5T3V0bGluZVdpZHRoLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lV2lkdGgp
KTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBl
cjxpbnQ+KENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFj
aW5nLCAmUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5V29y
ZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0V29y
ZFNwYWNpbmcpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5z
Zm9ybSkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlX
cmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVy
U3R5bGU6OnRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2lu
WCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPExlbmd0aD4oQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWSkp
OworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
SW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BMZWZ0UmFk
aXVzKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXJJbnRTaXplKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
UmlnaHRSYWRpdXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6
c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMt
PmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0eVdlYmtpdEJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8RVZpc2liaWxpdHk+
KENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVy
U3R5bGU6OnNldFZpc2liaWxpdHkpKTsKKyAgICAgICAgLy8gRklYTUU6IHpvb20gbWlzc2luZwor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IHRoZXNlIG1pZ2h0IGJlIGludmFsaWQgY29sb3Jz
LCBuZWVkIHRvIGNoZWNrIGZvciB0aGF0CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBw
ZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+
YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWROb25Db25zdENvbG9yKENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ryb2tlQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZE5vbkNvbnN0
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRG
aWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvcikpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRDb2xvcikpOworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRDb2xvcikpOworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvcikpOworICAgICAgICBnX3Byb3BlcnR5V3Jh
cHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJv
cGVydHlCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwg
JlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xvcikpOworICAgICAgICBnX3Byb3BlcnR5
V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldE91dGxpbmVDb2xvcikpOworICAgICAgICAKKyAgICAgICAgLy8gVGhlc2UgYXJl
IGZvciBzaGFkb3dzCisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csICZSZW5kZXJTdHls
ZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdykpOworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3Bl
cnR5VGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRTaGFkb3cpKTsKKyAgICAgICAgCisgICAgICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xv
dHMgaGF2ZSBhIHZhbHVlCisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgKHVu
c2lnbmVkIGludCkgbnVtQ1NTUHJvcGVydGllczsgKytpKQorICAgICAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJNYXBbaV0gPSAtMTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBuID0gZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbjsgKytpKQorICAgICAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJNYXBbKCpnX3Byb3BlcnR5
V3JhcHBlcnMpW2ldLT5wcm9wZXJ0eSgpXSA9IGk7CiAgICAgfQorfQorCisvLyBzdGF0aWMKK2Jv
b2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnByb3BlcnRpZXNFcXVhbChpbnQgcHJvcCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIGlmIChw
cm9wID09IGNBbmltYXRlQWxsKSB7CisgICAgICAgIHNpemVfdCBuID0gZ19wcm9wZXJ0eVdyYXBw
ZXJzLT5zaXplKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbjsgKytp
KSB7CisgICAgICAgICAgICBpZiAoISgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+ZXF1YWxzKGEs
IGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBlbHNlIGlmIChwcm9wID49IDAgJiYgcHJvcCA8IG51bUNTU1Byb3BlcnRpZXMpIHsKKyAgICAg
ICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtwcm9wXTsKKyAgICAgICAgcmV0dXJuIChp
ID49IDApID8gKCpnX3Byb3BlcnR5V3JhcHBlcnMpW2ldLT5lcXVhbHMoYSwgYikgOiB0cnVlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gc3RhdGljIC0gcmV0dXJuIHRydWUgaWYg
d2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCitib29sIEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpibGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJlbmRlclN0eWxl
KiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91Ymxl
IHByb2cpCit7CisgICAgaWYgKHByb3AgPT0gY0FuaW1hdGVBbGwpIHsKKyAgICAgICAgYm9vbCBu
ZWVkc1RpbWVyID0gZmFsc2U7CisgICAgICAgIAorICAgICAgICBzaXplX3QgbiA9IGdfcHJvcGVy
dHlXcmFwcGVycy0+c2l6ZSgpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG47ICsraSkgeworICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9ICgq
Z19wcm9wZXJ0eVdyYXBwZXJzKVtpXTsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxz
KGEsIGIpKSB7CisgICAgICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9n
KTsKKyAgICAgICAgICAgICAgICBuZWVkc1RpbWVyID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbmVlZHNUaW1lcjsKKyAgICB9CisgICAgCisgICAgaWYg
KHByb3AgPj0gMCAmJiBwcm9wIDwgbnVtQ1NTUHJvcGVydGllcykgeworICAgICAgICBpbnQgaSA9
IGdfcHJvcGVydHlXcmFwcGVyTWFwW3Byb3BdOworICAgICAgICBpZiAoaSA+PSAwKSB7CisgICAg
ICAgICAgICBQcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gKCpnX3Byb3BlcnR5V3JhcHBl
cnMpW2ldOworICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoZHN0LCBhLCBiLCBwcm9nKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVy
biBmYWxzZTsKK30KKworQ29tcG9zaXRlQW5pbWF0aW9uKiBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7
CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMuZ2V0KHJlbmRlcmVyKTsKKyAgICBpZiAoIWFuaW1hdGlvbikgeworICAgICAgICBhbmltYXRp
b24gPSBuZXcgQ29tcG9zaXRlQW5pbWF0aW9uKCFyZW5kZXJlci0+ZG9jdW1lbnQoKS0+bG9hZENv
bXBsZXRlKCksIHRoaXMpOworICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuc2V0KHJlbmRl
cmVyLCBhbmltYXRpb24pOworICAgIH0KICAgICByZXR1cm4gYW5pbWF0aW9uOwogfQogCiBib29s
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihSZW5kZXJPYmplY3QqIHJlbmRlcmVy
KQogewotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBtX2FuaW1h
dGlvbnMudGFrZShyZW5kZXJlcik7CisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBk
byBhbnl0aGluZyBPUiB3ZSBhcmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KKyAgICAv
LyBkbyBhIHNldENoYW5nZWQoKSB3aGVuIHN1c3BlbmRlZAorICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLnRha2UocmVuZGVyZXIpOwogICAg
IGlmICghYW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYW5pbWF0aW9uLT5y
ZXNldChyZW5kZXJlcik7CisgICAgYW5pbWF0aW9uLT5yZXNldFRyYW5zaXRpb25zKHJlbmRlcmVy
KTsKKyAgICBib29sIHdhc1N1c3BlbmRlZCA9IGFuaW1hdGlvbi0+c3VzcGVuZGVkKCk7CiAgICAg
ZGVsZXRlIGFuaW1hdGlvbjsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gIXdhc1N1c3Bl
bmRlZDsKIH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlVGltZXIo
KQordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYW51cEZpbmlzaGVkQW5pbWF0
aW9ucygpCiB7CisgICAgUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBh
bmltYXRpb25zRW5kID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVu
ZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5iZWdpbigpOyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsK
KyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29t
cG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGNvbXBBbmlt
LT5jbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKHJlbmRlcmVyKTsKKyAgICB9Cit9CisKK3ZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0eWxlSXNTZXR1cCgpCit7CisgICAgaWYgKG1f
bnVtU3R5bGVJc1NldHVwV2FpdGVycyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
UmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0
aW9uTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigp
OyAKKyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgaXQtPnNl
Y29uZC0+c3R5bGVJc1NldHVwKCk7CisgICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcigpCit7CiAgICAgYm9vbCBhbmltYXRpbmcg
PSBmYWxzZTsKLSAgICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKj46Oml0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhh
c2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0
b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAg
IGlmIChpdC0+c2Vjb25kLT5hbmltYXRpbmcoKSkgeworICAgIAorICAgIFJlbmRlck9iamVjdEFu
aW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBp
dCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiog
Y29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAgICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQo
KSAmJiBjb21wQW5pbS0+YW5pbWF0aW5nKCkpIHsKICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRy
dWU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBpZiAo
YW5pbWF0aW5nKSB7Ci0gICAgICAgIGlmICghbV90aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICAg
ICAgbV90aW1lci5zdGFydFJlcGVhdGluZyhjQW5pbWF0aW9uVGltZXJEZWxheSk7Ci0gICAgfSBl
bHNlIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdGltZXIuc3RvcCgpOworICAg
ICAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgICAgIG1fYW5p
bWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOworICAgIH0g
ZWxzZSBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX2FuaW1hdGlv
blRpbWVyLnN0b3AoKTsKIH0KIAotdm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGlt
ZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZT4qIHRpbWVyKQordm9pZCBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVk
KFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlPiopCiB7CisgICAgaWYgKG1fZnJhbWUg
JiYgbV9mcmFtZS0+ZG9jdW1lbnQoKSkgeworICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT51
cGRhdGVSZW5kZXJpbmcoKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpCit7CisgICAgaWYgKCFtX3Vw
ZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBtX3VwZGF0ZVJl
bmRlcmluZ0Rpc3BhdGNoZXIuc3RhcnRPbmVTaG90KDApOworICAgIH0KK30KKwordm9pZCBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZChUaW1lcjxBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZT4qIHRpbWVyKQoreworICAgIC8vY2xlYW51cEZpbmlzaGVkQW5p
bWF0aW9ucygpOworICAgIAogICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8g
aXMgY2FsbCBzZXRDaGFuZ2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlv
bnMgYW5kIHRoZW4gZG8gYW4gaW1tZWRpYXRlCiAgICAgLy8gdXBkYXRlUmVuZGVyaW5nLiAgSXQg
d2lsbCB0aGVuIGNhbGwgYmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KICAgICBib29s
IGFuaW1hdGluZyA9IGZhbHNlOwotICAgIEhhc2hNYXA8UmVuZGVyT2JqZWN0KiwgQ29tcG9zaXRl
SW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwot
ICAgIGZvciAoSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlv
bio+OjppdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKLSAgICAgICAgaWYgKGl0LT5zZWNvbmQtPmFuaW1hdGluZygpKSB7CisgICAgUmVuZGVyT2Jq
ZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAKKyAgICAg
ICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5p
bSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmICghY29tcEFuaW0tPnN1c3BlbmRlZCgpICYmIGNv
bXBBbmltLT5hbmltYXRpbmcoKSkgewogICAgICAgICAgICAgYW5pbWF0aW5nID0gdHJ1ZTsKLSAg
ICAgICAgICAgIGl0LT5maXJzdC0+ZWxlbWVudCgpLT5zZXRDaGFuZ2VkKCk7CisgICAgICAgICAg
ICBjb21wQW5pbS0+c2V0QW5pbWF0aW5nKGZhbHNlKTsKKyAgICAgICAgICAgIHNldENoYW5nZWQo
cmVuZGVyZXItPmVsZW1lbnQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CiAgICAgCi0gICAgdXBkYXRlVGltZXIo
KTsKKyAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOwogfQogCi1BbmltYXRpb25Db250cm9sbGVy
OjpBbmltYXRpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKLTptX2RhdGEobmV3IEFuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkKK2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmlzQW5pbWF0aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQg
cHJvcGVydHkpIGNvbnN0CiB7CisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24gPSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KG9iaik7CisgICAgaWYgKCFhbmltYXRpb24pIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5
KHByb3BlcnR5KTsKK30KIAordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVu
ZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFJlbmRlck9iamVjdEFuaW1h
dGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAh
PSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIg
PSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+
c2Vjb25kOworICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisg
ICAgICAgICAgICBjb21wQW5pbS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICB9CisgICAgCisg
ICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKIH0KIAordm9pZCBBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgUmVu
ZGVyT2JqZWN0QW5pbWF0aW9uTWFwOjpjb25zdF9pdGVyYXRvciBhbmltYXRpb25zRW5kID0gbV9j
b21wb3NpdGVBbmltYXRpb25zLmVuZCgpOworICAgIGZvciAoUmVuZGVyT2JqZWN0QW5pbWF0aW9u
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5iZWdpbigpOyAK
KyAgICAgICAgIGl0ICE9IGFuaW1hdGlvbnNFbmQ7ICsraXQpIHsKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZW5kZXJlciA9IGl0LT5maXJzdDsKKyAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wQW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChyZW5kZXJlci0+ZG9jdW1lbnQoKSA9
PSBkb2N1bWVudCkKKyAgICAgICAgICAgIGNvbXBBbmltLT5yZXN1bWVBbmltYXRpb25zKCk7Cisg
ICAgfQorICAgIAorICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Cit9CisKKyNwcmFnbWEgbWFy
ayAtCisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9u
KiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5k
ZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKQorewor
ICAgIGlmICghcnVubmluZygpIHx8ICFtX29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBsZXRl
KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBub3QgcnVubmluZyBh
bnkgYW5pbWF0aW9ucyBhbmQgdGhlcmUgaXMgbm8gY2hhbmdlIGluIG91ciBwcm9wLCBqdXN0IHJl
dHVybiAKKyAgICBpZiAoaXNuZXcoKSAmJiBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cHJv
cGVydGllc0VxdWFsKG1fcHJvcGVydHksIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5p
bWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QgZmluaXNo
ZWQgYW5pbWF0aW9uLgorICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIHJlc2V0IGFuZCBzZW5kIGJh
Y2sgdGhlIHRhcmdldFN0eWxlCisgICAgaWYgKHBvc3RhY3RpdmUoKSkgeworICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfTUFLRV9ORVcsIC0xKTsKKyAgICAgICAgcmVzZXQo
cmVuZGVyZXIpOworICAgICAgICAKKyAgICAgICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAg
ICAgICAgICBpb0FuaW1hdGVkU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4odGFyZ2V0
U3R5bGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGFyZSBy
dW5uaW5nIGFuZCB0aGUgdGFyZ2V0U3R5bGUgdmFsdWUgaGFzIGNoYW5nZWQgZnJvbSBvdXIgY3Vy
cmVudCB0b1N0eWxlIHZhbHVlLCB3ZSBuZWVkIHRvIHJlc2V0LgorICAgIC8vIFdlIGFsc28gbmVl
ZCB0byByZXNldCBpZiB3ZSBhcmUgbmV3LgorICAgIGlmIChpc25ldygpIHx8ICFtX3RvU3R5bGUg
fHwgIUFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwobV9wcm9wZXJ0
eSwgbV90b1N0eWxlLCB0YXJnZXRTdHlsZSkpIHsKKyAgICAgICAgLy8gT3BhY2l0eSBpcyBzcGVj
aWFsLiBUaGlzIGlzIGNoYW5naW5nIGEgY29uc3QgUmVuZGVyU3R5bGUsIGJ1dCB3ZSBrbm93IHdo
YXQgd2UgYXJlIGRvaW5nLCByZWFsbHkgOi0pCisgICAgICAgIC8vIEZJWE1FIG5lZWQgdG8gZG8g
dGhpcz8KKyAgICAgICAgaWYgKCFpc25ldygpICYmIG1fZnJvbVN0eWxlICYmIChtX3Byb3BlcnR5
ID09IENTU1Byb3BlcnR5T3BhY2l0eSB8fCBtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsKSkgewor
ICAgICAgICAgICAgLy8gR2V0IHRoZSBibGVuZGVkIHZhbHVlIG9mIG9wYWNpdHkgaW50byB0aGUg
Y3VycmVudFN0eWxlICh3aGljaCB3aWxsIGJlIHRoZSBuZXcgZnJvbVN0eWxlKQorICAgICAgICAg
ICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsKKyAgICAgICAgICAgIEFuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjpibGVuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlPcGFjaXR5LCBjb25z
dF9jYXN0PFJlbmRlclN0eWxlKj4oY3VycmVudFN0eWxlKSwgbV9mcm9tU3R5bGUsIG1fdG9TdHls
ZSwgcHJvZyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHls
ZSwgdGFyZ2V0U3R5bGUpOworICAgIH0KKyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmlt
YXRpb24uCisgICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBz
byBtYWtlIG9uZSBpZiBuZWVkZWQKKyAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAg
aW9BbmltYXRlZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5
bGUoKnRhcmdldFN0eWxlKTsKKyAgICAKKyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKDEsIDAp
OworICAgIGJvb2wgbmVlZHNBbmltID0gQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5k
UHJvcGVydGllcyhtX3Byb3BlcnR5LCBpb0FuaW1hdGVkU3R5bGUsIG1fZnJvbVN0eWxlLCBtX3Rv
U3R5bGUsIHByb2cpOworICAgIGlmIChuZWVkc0FuaW0pCisgICAgICAgIHNldEFuaW1hdGluZygp
OworCisgICAgLy9BU1NFUlQobmVlZHNBbmltICE9IG1fd2FpdGVkRm9yUmVzcG9uc2UgfHwgcHJl
YWN0aXZlKCkpOworfQorCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihk
b3VibGUgYmVnaW5UaW1lKQoreworICAgIC8vIFNlbmQgdHJhbnNpdGlvbiB0byBvYmplY3QKKyAg
ICByZXR1cm4gZmFsc2U7CisgICAgLyogcmV0dXJuIG1fb2JqZWN0ID8gbV9vYmplY3QtPnN0YXJ0
VHJhbnNpdGlvbihiZWdpblRpbWUsIG1fcHJvcGVydHksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUp
IDogZmFsc2U7ICovCit9CisKK3ZvaWQgSW1wbGljaXRBbmltYXRpb246OmVuZEFuaW1hdGlvbihi
b29sIHJlc2V0KQoreworICAgIC8qCisgICAgaWYgKG1fb2JqZWN0KQorICAgICAgICBtX29iamVj
dC0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fcHJvcGVydHkpOworICAgICAqLworfQorCit2b2lkIElt
cGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgaW5FbGFwc2VkVGltZSkKK3sK
KyAgICAvLyB3ZSdyZSBjb252ZXJ0aW5nIHRoZSBhbmltYXRpb24gaW50byBhIHRyYW5zaXRpb24g
aGVyZQorICAgIGlmICghc2VuZFRyYW5zaXRpb25FdmVudChFdmVudE5hbWVzOjp3ZWJraXRUcmFu
c2l0aW9uRW5kRXZlbnQsIGluRWxhcHNlZFRpbWUpKSB7CisgICAgICAgIC8vIHdlIGRpZG4ndCBk
aXNwYXRjaCBhbiBldmVudCwgd2hpY2ggd291bGQgY2FsbCBlbmRBbmltYXRpb24oKSwgc28gd2Un
bGwganVzdCBlbmQKKyAgICAgICAgLy8gaXQgaGVyZS4KKyAgICAgICAgZW5kQW5pbWF0aW9uKHRy
dWUpOworICAgIH0KK30KKworYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c2VuZFRyYW5zaXRpb25F
dmVudChjb25zdCBBdG9taWNTdHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUgaW5FbGFwc2VkVGlt
ZSkKK3sKKyAgICBpZiAoaW5FdmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlv
bkVuZEV2ZW50KSB7CisgICAgICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBl
ID0gRG9jdW1lbnQ6OlRSQU5TSVRJT05FTkRfTElTVEVORVI7CisgICAgICAgIAorICAgICAgICBp
ZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgeworICAgICAgICAg
ICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgpOworICAg
ICAgICAgICAgU3RyaW5nIHByb3BlcnR5TmFtZTsKKyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5
ID09IGNBbmltYXRlQWxsKSB7CisgICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lID0gU3RyaW5n
KCIiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IHByb3BlcnR5TmFtZSA9IFN0cmluZyhnZXRQcm9wZXJ0eU5hbWUoKENTU1Byb3BlcnR5SUQpbV9w
cm9wZXJ0eSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICBtX3dhaXRpbmdGb3JFbmRFdmVudCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25FdmVudERpc3BhdGNoZXIuc3RhcnRUaW1lcihlbGVtZW50LCBwcm9wZXJ0
eU5hbWUsIG1fcHJvcGVydHksIHRydWUsIGluRXZlbnRUeXBlLCBpbkVsYXBzZWRUaW1lKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGlkIGRpc3BhdGNoIGFuIGV2ZW50CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOyAvLyBkaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20gLyogPSAwICovLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8gLyogPSAwICovKQoreworICAgIEFTU0VSVCgoIW1fdG9TdHls
ZSAmJiAhdG8pIHx8IG1fdG9TdHlsZSAhPSB0byk7CisgICAgQVNTRVJUKCghbV9mcm9tU3R5bGUg
JiYgIWZyb20pIHx8IG1fZnJvbVN0eWxlICE9IGZyb20pOworICAgIGlmIChtX2Zyb21TdHlsZSkK
KyAgICAgICAgbV9mcm9tU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKTsKKyAg
ICBpZiAobV90b1N0eWxlKQorICAgICAgICBtX3RvU3R5bGUtPmRlcmVmKHJlbmRlcmVyLT5yZW5k
ZXJBcmVuYSgpKTsKKyAgICAKKyAgICBtX2Zyb21TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5
bGUqPihmcm9tKTsgICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4gdGhlIHJlZgorICAg
IGlmIChtX2Zyb21TdHlsZSkKKyAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigpOworICAgIAorICAg
IG1fdG9TdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0byk7ICAgICAgIC8vIGl0IGlz
IHJlYWQtb25seSwgb3RoZXIgdGhhbiB0aGUgcmVmCisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAg
ICAgbV90b1N0eWxlLT5yZWYoKTsKKyAgICAKKyAgICAvLyByZXN0YXJ0IHRoZSB0cmFuc2l0aW9u
CisgICAgaWYgKGZyb20gJiYgdG8pCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9J
TlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgLTEpOworfQorCit2b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpzZXRPdmVycmlkZGVuKGJvb2wgYikKK3sKKyAgICBpZiAoYiAhPSBtX292ZXJyaWRkZW4pIHsK
KyAgICAgICAgbV9vdmVycmlkZGVuID0gYjsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKG1f
b3ZlcnJpZGRlbiA/IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFIDogU1RBVEVfSU5QVVRfUkVT
VU1FX09WRVJSSURFLCAtMSk7CisgICAgfQorfQorCitib29sIEltcGxpY2l0QW5pbWF0aW9uOjph
ZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAoreworICAgIHJldHVybiBtX3Byb3Bl
cnR5ID09IHByb3BlcnR5IHx8CisgICAgKG1fcHJvcGVydHkgPT0gY0FuaW1hdGVBbGwgJiYgIUFu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwocHJvcGVydHksIG1fZnJv
bVN0eWxlLCBtX3RvU3R5bGUpKTsKK30KKworI3ByYWdtYSBtYXJrIC0KKwordm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiwgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHls
ZSwgUmVuZGVyU3R5bGUqJiBpb0FuaW1hdGVkU3R5bGUpCit7CisgICAgLy8gSWYgd2UgaGF2ZSBu
b3QgeWV0IHN0YXJ0ZWQsIHdlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBzdGFydCB0aW1lLCBzbyBq
dXN0IHN0YXJ0IHRoZSBhbmltYXRpb24gaWYgbmVlZGVkCisgICAgaWYgKGlzbmV3KCkgJiYgbV9h
bmltYXRpb24tPmFuaW1hdGlvblBsYXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nICYm
IG1fb2JqZWN0LT5kb2N1bWVudCgpLT5sb2FkQ29tcGxldGUoKSkKKyAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJUX0FOSU1BVElPTiwgLTEpOworICAgIAorICAgIC8v
IElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3
ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KKyAgICAvLyBJZiBz
bywgd2UgbmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlCisgICAgaWYgKHBvc3RhY3Rp
dmUoKSkgeworICAgICAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgICAgIGlvQW5p
bWF0ZWRTdHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPih0YXJnZXRTdHlsZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRo
ZSBzdGFydCB0aW1lciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldAorICAg
IC8vIFNwZWNpYWwgY2FzZSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2Fu
dCB0byBzZXQgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZQorICAgIC8vIGFuaW1hdGlvbiByaWdodCBh
d2F5LiBUaGlzIGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMKKyAgICBp
ZiAod2FpdGluZ1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDApCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVu
dCBhYm91dCBkZXRlcm1pbmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3
ZWVuLgorICAgIC8vIFdlIHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZwor
ICAgIAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IGtleQorICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9
IChtX3N0YXJ0VGltZSA+IDApID8gKChydW5uaW5nKCkgPyBjdXJyZW50VGltZSgpIDogbV9wYXVz
ZVRpbWUpIC0gbV9zdGFydFRpbWUpIDogMDsKKyAgICBpZiAoZWxhcHNlZFRpbWUgPCAwKQorICAg
ICAgICBlbGFwc2VkVGltZSA9IDA7CisgICAgCisgICAgZG91YmxlIHQgPSBtX2FuaW1hdGlvbi0+
ZHVyYXRpb24oKSA/IChlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSA6IDE7
CisgICAgaW50IGkgPSAoaW50KSB0OworICAgIHQgLT0gaTsKKyAgICBpZiAobV9hbmltYXRpb24t
PmFuaW1hdGlvbkRpcmVjdGlvbigpICYmIChpICYgMSkpCisgICAgICAgIHQgPSAxIC0gdDsKKyAg
ICAKKyAgICBSZW5kZXJTdHlsZSogZnJvbVN0eWxlID0gMDsKKyAgICBSZW5kZXJTdHlsZSogdG9T
dHlsZSA9IDA7CisgICAgZG91YmxlIHNjYWxlID0gMTsKKyAgICBkb3VibGUgb2Zmc2V0ID0gMDsK
KyAgICBpZiAobV9rZXlmcmFtZXMuZ2V0KCkpIHsKKyAgICAgICAgVmVjdG9yPEtleWZyYW1lVmFs
dWU+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kS2V5ZnJhbWVzKCk7Cisg
ICAgICAgIGZvciAoVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1f
a2V5ZnJhbWVzLT5iZWdpbktleWZyYW1lcygpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAg
ICAgIGlmICh0IDwgaXQtPmtleSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBrZXkg
c2hvdWxkIGFsd2F5cyBiZSAwLCBzbyB3ZSBzaG91bGQgbmV2ZXIgc3VjY2VlZCBvbiB0aGUgZmly
c3Qga2V5CisgICAgICAgICAgICAgICAgaWYgKCFmcm9tU3R5bGUpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHNjYWxlID0gMSAvIChpdC0+a2V5IC0gb2Zmc2V0
KTsKKyAgICAgICAgICAgICAgICB0b1N0eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KCYo
aXQtPnN0eWxlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIG9mZnNldCA9IGl0LT5rZXk7CisgICAgICAgICAgICBmcm9t
U3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oJihpdC0+c3R5bGUpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICAvLyBJZiBlaXRoZXIgc3R5bGUgaXMgMCB3ZSBoYXZlIGFuIGlu
dmFsaWQgY2FzZSwganVzdCBzdG9wIHRoZSBhbmltYXRpb24KKyAgICBpZiAoIWZyb21TdHlsZSB8
fCAhdG9TdHlsZSkgeworICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfRU5E
X0FOSU1BVElPTiwgLTEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFJ1
biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4KKyAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5l
dyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ugb25lIGlmIG5lZWRlZAorICAgIGlmICghaW9BbmltYXRl
ZFN0eWxlKQorICAgICAgICBpb0FuaW1hdGVkU3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJB
cmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOworICAgIAorICAgIGRvdWJsZSBwcm9n
ID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCk7CisgICAgCisgICAgSGFzaFNldDxpbnQ+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAo
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3Bl
cnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGJvb2wgbmVlZHNBbmltID0gQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJsZW5kUHJvcGVydGllcygqaXQsIGlvQW5pbWF0ZWRT
dHlsZSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9nKTsKKyAgICAgICAgaWYgKG5lZWRzQW5pbSkK
KyAgICAgICAgICAgIHNldEFuaW1hdGluZygpOworICAgICAgICAvL0FTU0VSVChuZWVkc0FuaW0g
IT0gbV93YWl0ZWRGb3JSZXNwb25zZSB8fCBwcmVhY3RpdmUoKSk7CisgICAgfQorfQorCitib29s
IEtleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgYmVnaW5UaW1lKQorewor
ICAgIC8qIHNwbWEgcmV0dXJuIG1fb2JqZWN0ID8gbV9vYmplY3QtPnN0YXJ0QW5pbWF0aW9uKGJl
Z2luVGltZSwgbV9pbmRleCkgOiBmYWxzZTsgKi8KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgS2V5ZnJhbWVBbmltYXRpb246OmVuZEFuaW1hdGlvbihib29sIHJlc2V0KQoreworICAgIGlm
IChtX29iamVjdCkgeworICAgICAgICAvLyBGSVhNRTogbmVlZCB0byBkZXRlcm1pbmUgYWN0dWFs
IGluZGV4IChpbiBjYXNlcyB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFuaW1hdGlvbiBw
ZXIgVHJhbnNpdGlvbiBvYmplY3QpCisKKyAgICAgICAgLy8gcmVzdG9yZSB0aGUgb3JpZ2luYWwg
KHVuYW5pbWF0ZWQpIHN0eWxlCisgICAgICAgIHNldENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQo
KSk7CisgICAgfQorfQorCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0
KGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHNlbmRBbmltYXRpb25FdmVudChFdmVudE5h
bWVzOjp3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50LCBpbkVsYXBzZWRUaW1lKTsKK30KKwordm9p
ZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVyYXRpb24oZG91YmxlIGluRWxhcHNl
ZFRpbWUpCit7CisgICAgc2VuZEFuaW1hdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1h
dGlvbkl0ZXJhdGlvbkV2ZW50LCBpbkVsYXBzZWRUaW1lKTsKK30KKwordm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgLy8g
RklYTUU6IHNldCB0aGUgdW5hbmltYXRlZCBzdHlsZSBvbiB0aGUgZWxlbWVudAorICAgIGlmICgh
c2VuZEFuaW1hdGlvbkV2ZW50KEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50LCBp
bkVsYXBzZWRUaW1lKSkgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQs
IHdoaWNoIHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xsIGp1c3QgZW5kCisgICAg
ICAgIC8vIGl0IGhlcmUuCisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAgICB9Cit9CisK
K2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudChjb25zdCBBdG9taWNT
dHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUgaW5FbGFwc2VkVGltZSkKK3sKKyAgICBEb2N1bWVu
dDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKKyAgICBpZiAoaW5FdmVudFR5cGUgPT0gRXZl
bnROYW1lczo6d2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQpCisgICAgICAgIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05JVEVSQVRJT05fTElTVEVORVI7CisgICAgZWxzZSBp
ZiAoaW5FdmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpCisg
ICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7Cisg
ICAgZWxzZQorICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OU1RBUlRf
TElTVEVORVI7CisgICAgCisgICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3Rl
bmVyVHlwZSkpIHsKKyAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBlbGVtZW50Rm9yRXZl
bnREaXNwYXRjaCgpOworICAgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICAgICAgbV93YWl0
aW5nRm9yRW5kRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgbV9hbmltYXRpb25FdmVudERpc3Bh
dGNoZXIuc3RhcnRUaW1lcihlbGVtZW50LCBtX25hbWUsIC0xLCB0cnVlLCBpbkV2ZW50VHlwZSwg
aW5FbGFwc2VkVGltZSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZGlkIGRpc3BhdGNo
IGFuIGV2ZW50CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOyAvLyBkaWRuJ3Qg
ZGlzcGF0Y2ggYW4gZXZlbnQKK30KKwordm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b3ZlcnJpZGVB
bmltYXRpb25zKCkKK3sKKyAgICAvLyBUaGlzIHdpbGwgb3ZlcnJpZGUgaW1wbGljaXQgYW5pbWF0
aW9ucyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBrZXlmcmFtZSBhbmltYXRpb24K
KyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJhbWVzLT5lbmRQ
cm9wZXJ0aWVzKCk7CisgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9rZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucygqaXQpOwor
fQorCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygp
Cit7CisgICAgLy8gVGhpcyB3aWxsIHJlc3VtZSBvdmVycmlkZGVuIGltcGxpY2l0IGFuaW1hdGlv
bnMKKyAgICBIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fa2V5ZnJhbWVzLT5l
bmRQcm9wZXJ0aWVzKCk7CisgICAgZm9yIChIYXNoU2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZXMtPmJlZ2luUHJvcGVydGllcygpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAg
ICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRp
b25zKCppdCk7Cit9CisKK2Jvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFmZmVjdHNQcm9wZXJ0eShp
bnQgcHJvcGVydHkpIGNvbnN0Cit7CisgICAgSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBtX2tleWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAoSGFzaFNldDxpbnQ+
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3BlcnRpZXMoKTsgaXQg
IT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmICgoKml0KSA9PSBwcm9wZXJ0eSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKyNwcmFnbWEg
bWFyayAtCisKK0FuaW1hdGlvbkNvbnRyb2xsZXI6OkFuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUq
IGZyYW1lKQorOiBtX2RhdGEobmV3IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKGZyYW1lKSkK
K3sKKyAgICAKK30KKwogQW5pbWF0aW9uQ29udHJvbGxlcjo6fkFuaW1hdGlvbkNvbnRyb2xsZXIo
KQogewogICAgIGRlbGV0ZSBtX2RhdGE7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6
Y2FuY2VsSW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2b2lkIEFu
aW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJl
cikKIHsKLSAgICBpZiAoIW1fZGF0YS0+aGFzSW1wbGljaXRBbmltYXRpb25zKCkpCisgICAgaWYg
KCFtX2RhdGEtPmhhc0FuaW1hdGlvbnMoKSkKICAgICAgICAgcmV0dXJuOwotCisgICAgCiAgICAg
aWYgKG1fZGF0YS0+Y2xlYXIocmVuZGVyZXIpKQotICAgICAgICByZW5kZXJlci0+ZWxlbWVudCgp
LT5zZXRDaGFuZ2VkKCk7CisgICAgICAgIHNldENoYW5nZWQocmVuZGVyZXItPmVsZW1lbnQoKSk7
CiB9CiAKLVJlbmRlclN0eWxlKiBBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVJbXBsaWNpdEFu
aW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQot
eworUmVuZGVyU3R5bGUqIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQoreyAgICAKKyAgICAv
LyBkb24ndCBkbyBhbnl0aGluZyBpZiB3ZSdyZSBpbiB0aGUgY2FjaGUKKyAgICBpZiAoIXJlbmRl
cmVyLT5kb2N1bWVudCgpIHx8IHJlbmRlcmVyLT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKQor
ICAgICAgICByZXR1cm4gbmV3U3R5bGU7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7CisgICAgCisgICAgaWYgKCghb2xkU3R5bGUgfHwgKCFvbGRT
dHlsZS0+YW5pbWF0aW9ucygpICYmICFvbGRTdHlsZS0+dHJhbnNpdGlvbnMoKSkpICYmIAorICAg
ICAgICAgICAgICAgICAgICAgICghbmV3U3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAhbmV3U3R5bGUt
PnRyYW5zaXRpb25zKCkpKQorICAgICAgICByZXR1cm4gbmV3U3R5bGU7CisgICAgCisgICAgUmVu
ZGVyU3R5bGUqIGJsZW5kZWRTdHlsZSA9IG5ld1N0eWxlOworICAgIAogICAgIC8vIEZldGNoIG91
ciBjdXJyZW50IHNldCBvZiBpbXBsaWNpdCBhbmltYXRpb25zIGZyb20gYSBoYXNodGFibGUuICBX
ZSB0aGVuIGNvbXBhcmUgdGhlbQogICAgIC8vIGFnYWluc3QgdGhlIGFuaW1hdGlvbnMgaW4gdGhl
IHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gIElmIGRlc3RpbmF0aW9uIHZhbHVl
cwogICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVzZXQgdGhlIGFuaW1hdGlvbi4gIFdlIHRoZW4g
ZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVlcyBhbmQgd2UgcmV0dXJuCiAgICAgLy8gYSBuZXcg
c3R5bGUuCiAgICAgQVNTRVJUKHJlbmRlcmVyLT5lbGVtZW50KCkpOyAvLyBGSVhNRTogV2UgZG8g
bm90IGFuaW1hdGUgZ2VuZXJhdGVkIGNvbnRlbnQgeWV0LgorICAgIAorICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiogcmVuZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmlt
YXRpb24ocmVuZGVyZXIpOworICAgIGJsZW5kZWRTdHlsZSA9IHJlbmRlcmVyQW5pbWF0aW9ucy0+
YW5pbWF0ZShyZW5kZXJlciwgb2xkU3R5bGUsIG5ld1N0eWxlKTsKKyAgICAKKyAgICBtX2RhdGEt
PnVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisgICAgaWYgKGJsZW5kZWRTdHlsZSAhPSBu
ZXdTdHlsZSkgeworICAgICAgICAvLyBJZiB0aGUgYW5pbWF0aW9ucy90cmFuc2l0aW9ucyBjaGFu
Z2Ugb3BhY2l0eSwgdHJhbnNmb3JtIG9yIHBlcnNwZWN0aXZlLCB3ZSBuZWVlZCB0byB1cGRhdGUK
KyAgICAgICAgLy8gdGhlIHN0eWxlIHRvIGltcG9zZSB0aGUgc3RhY2tpbmcgcnVsZXMuIE5vdGUg
dGhhdCB0aGlzIGlzIGFsc28gZG9uZSBpbiBDU1NTdHlsZVNlbGVjdG9yOjphZGp1c3RSZW5kZXJT
dHlsZSgpLgorICAgICAgICBpZiAoYmxlbmRlZFN0eWxlLT5oYXNBdXRvWkluZGV4KCkgJiYgKChi
bGVuZGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYpKSkgLy8gRklYTUUgfHwgYmxlbmRlZFN0eWxl
LT5oYXNUcmFuc2Zvcm1PclBlcnNwZWN0aXZlKCkpKSkKKyAgICAgICAgICAgIGJsZW5kZWRTdHls
ZS0+c2V0WkluZGV4KDApOworICAgIH0KKyAgICByZXR1cm4gYmxlbmRlZFN0eWxlOworfQogCi0g
ICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fZGF0YS0+Z2V0KHJl
bmRlcmVyKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIG5ld1N0eWxlOwor
dm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzZXRBbmltYXRpb25TdGFydFRpbWUoUmVuZGVyT2Jq
ZWN0KiBvYmosIGRvdWJsZSB0KQoreworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVuZGVyZXJB
bmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ob2JqKTsKKyAgICBy
ZW5kZXJlckFuaW1hdGlvbnMtPnNldEFuaW1hdGlvblN0YXJ0VGltZSh0KTsKK30KIAotICAgIFJl
bmRlclN0eWxlKiByZXN1bHQgPSBhbmltYXRpb24tPmFuaW1hdGUocmVuZGVyZXIsIHJlbmRlcmVy
LT5zdHlsZSgpLCBuZXdTdHlsZSk7Ci0gICAgbV9kYXRhLT51cGRhdGVUaW1lcigpOwotICAgIHJl
dHVybiByZXN1bHQ7Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnNldFRyYW5zaXRpb25TdGFy
dFRpbWUoUmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSwgZG91YmxlIHQpCit7CisgICAg
Q29tcG9zaXRlQW5pbWF0aW9uKiByZW5kZXJlckFuaW1hdGlvbnMgPSBtX2RhdGEtPmFjY2Vzc0Nv
bXBvc2l0ZUFuaW1hdGlvbihvYmopOworICAgIHJlbmRlcmVyQW5pbWF0aW9ucy0+c2V0VHJhbnNp
dGlvblN0YXJ0VGltZShwcm9wZXJ0eSwgdCk7CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
cjo6c3VzcGVuZEFuaW1hdGlvbnMoKQorYm9vbCBBbmltYXRpb25Db250cm9sbGVyOjppc0FuaW1h
dGluZ1Byb3BlcnR5T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBj
b25zdAogewotICAgIC8vIEZJWE1FOiBXYWxrIHRoZSB3aG9sZSBoYXNodGFibGUgYW5kIGNhbGwg
cGF1c2Ugb24gZWFjaCBhbmltYXRpb24uCi0gICAgLy8gS2lsbCBvdXIgdGltZXIuCisgICAgcmV0
dXJuIG1fZGF0YS0+aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIob2JqLCBwcm9wZXJ0eSk7
CiB9CiAKLXZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVu
dCkKIHsKLSAgICAvLyBGSVhNRTogV2FsayB0aGUgd2hvbGUgaGFzaHRhYmxlIGFuZCBjYWxsIHJl
c3VtZSBvbiBlYWNoIGFuaW1hdGlvbi4KLSAgICAvLyBTdGFydCBvdXIgdGltZXIuCisjaWZkZWYg
REVCVUdfU1RBVEVfTUFDSElORQorICAgIGZwcmludGYoc3RkZXJyLCAiQW5pbWF0aW9uQ29udHJv
bGxlciAlcCBzdXNwZW5kQW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXBcbiIsIHRoaXMsIGRvY3Vt
ZW50KTsKKyNlbmRpZgorICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwog
fQogCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQq
IGRvY3VtZW50KQoreworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICBmcHJpbnRmKHN0
ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgcmVzdW1lQW5pbWF0aW9ucyBmb3IgZG9jdW1l
bnQgJXBcbiIsIHRoaXMsIGRvY3VtZW50KTsKKyNlbmRpZgorICAgIG1fZGF0YS0+cmVzdW1lQW5p
bWF0aW9ucyhkb2N1bWVudCk7CiB9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRV
cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCkKK3sKKyAgICBtX2RhdGEtPnN0YXJ0VXBkYXRlUmVu
ZGVyaW5nRGlzcGF0Y2hlcigpOworfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0eWxl
SXNTZXR1cCgpCit7CisgICAgbV9kYXRhLT5zdHlsZUlzU2V0dXAoKTsKK30KKwordm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoYm9vbCB3YWl0aW5nKQor
eworICAgIGlmICh3YWl0aW5nKQorICAgICAgICBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMrKzsK
KyAgICBlbHNlCisgICAgICAgIG1fbnVtU3R5bGVJc1NldHVwV2FpdGVycy0tOworICAgIG1fYW5p
bWF0aW9uQ29udHJvbGxlci0+c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cCh3YWl0aW5nKTsKK30K
KyAgICAKK30KSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAogICAgICAgICBpZiAo
dmlldy0+ZnJhbWUoKSkgewogICAgICAgICAgICAgaWYgKGRvY3VtZW50ICYmIGRvY3VtZW50LT5y
ZW5kZXJlcigpICYmIGRvY3VtZW50LT5yZW5kZXJlcigpLT5oYXNMYXllcigpKQogICAgICAgICAg
ICAgICAgIGRvY3VtZW50LT5yZW5kZXJlcigpLT5sYXllcigpLT5zdXNwZW5kTWFycXVlZXMoKTsK
LSAgICAgICAgICAgIHZpZXctPmZyYW1lKCktPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+c3VzcGVu
ZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIHZpZXctPmZyYW1lKCktPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS0+c3VzcGVuZEFuaW1hdGlvbnMoZG9jdW1lbnQpOwogICAgICAgICB9CiAgICAgfQog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21179</attachid>
            <date>2008-05-15 14:17:01 -0700</date>
            <delta_ts>2008-08-04 11:35:31 -0700</delta_ts>
            <desc>Update support for CSS Transforms</desc>
            <filename>transforms.patch</filename>
            <type>text/plain</type>
            <size>128394</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UcmFuc2Zvcm0zRC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiVHJhbnNm
b3JtM0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvKgorQWRhcHRlZCBmcm9tIE1hdHJp
eCBJbnZlcnNpb24gYnkgUmljaGFyZCBDYXJsaW5nLCBHcmFwaGljcyBHZW1zIDxodHRwOi8vdG9n
LmFjbS5vcmcvR3JhcGhpY3NHZW1zL2luZGV4Lmh0bWw+LgorCitFVUxBOiBUaGUgR3JhcGhpY3Mg
R2VtcyBjb2RlIGlzIGNvcHlyaWdodC1wcm90ZWN0ZWQuIEluIG90aGVyIHdvcmRzLCB5b3UgY2Fu
bm90IGNsYWltIHRoZSB0ZXh0IG9mIHRoZSBjb2RlIAorYXMgeW91ciBvd24gYW5kIHJlc2VsbCBp
dC4gVXNpbmcgdGhlIGNvZGUgaXMgcGVybWl0dGVkIGluIGFueSBwcm9ncmFtLCBwcm9kdWN0LCBv
ciBsaWJyYXJ5LCBub24tY29tbWVyY2lhbCAKK29yIGNvbW1lcmNpYWwuIEdpdmluZyBjcmVkaXQg
aXMgbm90IHJlcXVpcmVkLCB0aG91Z2ggaXMgYSBuaWNlIGdlc3R1cmUuIFRoZSBjb2RlIGNvbWVz
IGFzLWlzLCBhbmQgaWYgdGhlcmUgCithcmUgYW55IGZsYXdzIG9yIHByb2JsZW1zIHdpdGggYW55
IEdlbXMgY29kZSwgbm9ib2R5IGludm9sdmVkIHdpdGggR2VtcyAtIGF1dGhvcnMsIGVkaXRvcnMs
IHB1Ymxpc2hlcnMsIG9yIAord2VibWFzdGVycyAtIGFyZSB0byBiZSBoZWxkIHJlc3BvbnNpYmxl
LiBCYXNpY2FsbHksIGRvbid0IGJlIGEgamVyaywgYW5kIHJlbWVtYmVyIHRoYXQgYW55dGhpbmcg
ZnJlZSBjb21lcyAKK3dpdGggbm8gZ3VhcmFudGVlLgorKi8KKwordHlwZWRlZiBmbG9hdCBNYXRy
aXg0WzRdWzRdOworCisjZGVmaW5lIFNNQUxMX05VTUJFUiAgICAxLmUtOAorCisvKiAKKyAqICAg
aW52ZXJzZSggb3JpZ2luYWxfbWF0cml4LCBpbnZlcnNlX21hdHJpeCApCisgKiAKKyAqICAgIGNh
bGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIDR4NCBtYXRyaXgKKyAqCisgKiAgICAgLTEgICAgIAor
ICogICAgIEEgID0gX19fMV9fIGFkam9pbnQgQQorICogICAgICAgICBkZXQgQQorICovCisKKy8q
CisgKiBkb3VibGUgPSBkZXQyeDIoIGRvdWJsZSBhLCBkb3VibGUgYiwgZG91YmxlIGMsIGRvdWJs
ZSBkICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIDJ4MiBtYXRyaXgu
CisgKi8KKworc3RhdGljIGZsb2F0IGRldDJ4MihmbG9hdCBhLCBmbG9hdCBiLCBmbG9hdCBjLCBm
bG9hdCBkKQoreworICAgIGZsb2F0IGFuczsKKyAgICBhbnMgPSBhICogZCAtIGIgKiBjOworICAg
IHJldHVybiBhbnM7Cit9CisKKy8qCisgKiBkb3VibGUgPSBkZXQzeDMoICBhMSwgYTIsIGEzLCBi
MSwgYjIsIGIzLCBjMSwgYzIsIGMzICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFu
dCBvZiBhIDN4MyBtYXRyaXgKKyAqIGluIHRoZSBmb3JtCisgKgorICogICAgIHwgYTEsICBiMSwg
IGMxIHwKKyAqICAgICB8IGEyLCAgYjIsICBjMiB8CisgKiAgICAgfCBhMywgIGIzLCAgYzMgfAor
ICovCisKK3N0YXRpYyBmbG9hdCBkZXQzeDMoZmxvYXQgYTEsIGZsb2F0IGEyLCBmbG9hdCBhMywg
ZmxvYXQgYjEsIGZsb2F0IGIyLCBmbG9hdCBiMywgZmxvYXQgYzEsIGZsb2F0IGMyLCBmbG9hdCBj
MykKK3sKKyAgICBmbG9hdCBhbnM7CisKKyAgICBhbnMgPSBhMSAqIGRldDJ4MiggYjIsIGIzLCBj
MiwgYzMgKQorICAgICAgICAtIGIxICogZGV0MngyKCBhMiwgYTMsIGMyLCBjMyApCisgICAgICAg
ICsgYzEgKiBkZXQyeDIoIGEyLCBhMywgYjIsIGIzICk7CisgICAgcmV0dXJuIGFuczsKK30KKwor
LyoKKyAqIGRvdWJsZSA9IGRldDR4NCggbWF0cml4ICkKKyAqIAorICogY2FsY3VsYXRlIHRoZSBk
ZXRlcm1pbmFudCBvZiBhIDR4NCBtYXRyaXguCisgKi8KK3N0YXRpYyBmbG9hdCBkZXQ0eDQoY29u
c3QgTWF0cml4NCBtKQoreworICAgIGZsb2F0IGFuczsKKyAgICBmbG9hdCBhMSwgYTIsIGEzLCBh
NCwgYjEsIGIyLCBiMywgYjQsIGMxLCBjMiwgYzMsIGM0LCBkMSwgZDIsIGQzLCBkNDsKKworICAg
IC8qIGFzc2lnbiB0byBpbmRpdmlkdWFsIHZhcmlhYmxlIG5hbWVzIHRvIGFpZCBzZWxlY3Rpbmcg
Ki8KKyAgICAvKiAgY29ycmVjdCBlbGVtZW50cyAqLworCisgICAgYTEgPSBtWzBdWzBdOyBiMSA9
IG1bMF1bMV07IAorICAgIGMxID0gbVswXVsyXTsgZDEgPSBtWzBdWzNdOworCisgICAgYTIgPSBt
WzFdWzBdOyBiMiA9IG1bMV1bMV07IAorICAgIGMyID0gbVsxXVsyXTsgZDIgPSBtWzFdWzNdOwor
CisgICAgYTMgPSBtWzJdWzBdOyBiMyA9IG1bMl1bMV07IAorICAgIGMzID0gbVsyXVsyXTsgZDMg
PSBtWzJdWzNdOworCisgICAgYTQgPSBtWzNdWzBdOyBiNCA9IG1bM11bMV07IAorICAgIGM0ID0g
bVszXVsyXTsgZDQgPSBtWzNdWzNdOworCisgICAgYW5zID0gYTEgKiBkZXQzeDMoIGIyLCBiMywg
YjQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpCisgICAgICAgIC0gYjEgKiBkZXQzeDMoIGEyLCBh
MywgYTQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpCisgICAgICAgICsgYzEgKiBkZXQzeDMoIGEy
LCBhMywgYTQsIGIyLCBiMywgYjQsIGQyLCBkMywgZDQpCisgICAgICAgIC0gZDEgKiBkZXQzeDMo
IGEyLCBhMywgYTQsIGIyLCBiMywgYjQsIGMyLCBjMywgYzQpOworICAgIHJldHVybiBhbnM7Cit9
CisKKy8qIAorICogICBhZGpvaW50KCBvcmlnaW5hbF9tYXRyaXgsIGludmVyc2VfbWF0cml4ICkK
KyAqIAorICogICAgIGNhbGN1bGF0ZSB0aGUgYWRqb2ludCBvZiBhIDR4NCBtYXRyaXgKKyAqCisg
KiAgICAgIExldCAgYSAgIGRlbm90ZSB0aGUgbWlub3IgZGV0ZXJtaW5hbnQgb2YgbWF0cml4IEEg
b2J0YWluZWQgYnkKKyAqICAgICAgICAgICBpagorICoKKyAqICAgICAgZGVsZXRpbmcgdGhlIGl0
aCByb3cgYW5kIGp0aCBjb2x1bW4gZnJvbSBBLgorICoKKyAqICAgICAgICAgICAgICAgICAgICBp
K2oKKyAqICAgICBMZXQgIGIgICA9ICgtMSkgICAgYQorICogICAgICAgICAgaWogICAgICAgICAg
ICBqaQorICoKKyAqICAgIFRoZSBtYXRyaXggQiA9IChiICApIGlzIHRoZSBhZGpvaW50IG9mIEEK
KyAqICAgICAgICAgICAgICAgICAgICAgaWoKKyAqLworCitzdGF0aWMgdm9pZCBhZGpvaW50KGNv
bnN0IE1hdHJpeDQgc3JjTWF0cml4LCBNYXRyaXg0IG91dE1hdHJpeCkKK3sKKyAgICBmbG9hdCBh
MSwgYTIsIGEzLCBhNCwgYjEsIGIyLCBiMywgYjQ7CisgICAgZmxvYXQgYzEsIGMyLCBjMywgYzQs
IGQxLCBkMiwgZDMsIGQ0OworCisgICAgLyogYXNzaWduIHRvIGluZGl2aWR1YWwgdmFyaWFibGUg
bmFtZXMgdG8gYWlkICAqLworICAgIC8qIHNlbGVjdGluZyBjb3JyZWN0IHZhbHVlcyAgKi8KKwor
ICAgIGExID0gc3JjTWF0cml4WzBdWzBdOyBiMSA9IHNyY01hdHJpeFswXVsxXTsgCisgICAgYzEg
PSBzcmNNYXRyaXhbMF1bMl07IGQxID0gc3JjTWF0cml4WzBdWzNdOworCisgICAgYTIgPSBzcmNN
YXRyaXhbMV1bMF07IGIyID0gc3JjTWF0cml4WzFdWzFdOyAKKyAgICBjMiA9IHNyY01hdHJpeFsx
XVsyXTsgZDIgPSBzcmNNYXRyaXhbMV1bM107CisKKyAgICBhMyA9IHNyY01hdHJpeFsyXVswXTsg
YjMgPSBzcmNNYXRyaXhbMl1bMV07CisgICAgYzMgPSBzcmNNYXRyaXhbMl1bMl07IGQzID0gc3Jj
TWF0cml4WzJdWzNdOworCisgICAgYTQgPSBzcmNNYXRyaXhbM11bMF07IGI0ID0gc3JjTWF0cml4
WzNdWzFdOyAKKyAgICBjNCA9IHNyY01hdHJpeFszXVsyXTsgZDQgPSBzcmNNYXRyaXhbM11bM107
CisKKworICAgIC8qIHJvdyBjb2x1bW4gbGFiZWxpbmcgcmV2ZXJzZWQgc2luY2Ugd2UgdHJhbnNw
b3NlIHJvd3MgJiBjb2x1bW5zICovCisKKyAgICBvdXRNYXRyaXhbMF1bMF0gID0gICBkZXQzeDMo
IGIyLCBiMywgYjQsIGMyLCBjMywgYzQsIGQyLCBkMywgZDQpOworICAgIG91dE1hdHJpeFsxXVsw
XSAgPSAtIGRldDN4MyggYTIsIGEzLCBhNCwgYzIsIGMzLCBjNCwgZDIsIGQzLCBkNCk7CisgICAg
b3V0TWF0cml4WzJdWzBdICA9ICAgZGV0M3gzKCBhMiwgYTMsIGE0LCBiMiwgYjMsIGI0LCBkMiwg
ZDMsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMF0gID0gLSBkZXQzeDMoIGEyLCBhMywgYTQsIGIy
LCBiMywgYjQsIGMyLCBjMywgYzQpOworICAgICAgICAKKyAgICBvdXRNYXRyaXhbMF1bMV0gID0g
LSBkZXQzeDMoIGIxLCBiMywgYjQsIGMxLCBjMywgYzQsIGQxLCBkMywgZDQpOworICAgIG91dE1h
dHJpeFsxXVsxXSAgPSAgIGRldDN4MyggYTEsIGEzLCBhNCwgYzEsIGMzLCBjNCwgZDEsIGQzLCBk
NCk7CisgICAgb3V0TWF0cml4WzJdWzFdICA9IC0gZGV0M3gzKCBhMSwgYTMsIGE0LCBiMSwgYjMs
IGI0LCBkMSwgZDMsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMV0gID0gICBkZXQzeDMoIGExLCBh
MywgYTQsIGIxLCBiMywgYjQsIGMxLCBjMywgYzQpOworICAgICAgICAKKyAgICBvdXRNYXRyaXhb
MF1bMl0gID0gICBkZXQzeDMoIGIxLCBiMiwgYjQsIGMxLCBjMiwgYzQsIGQxLCBkMiwgZDQpOwor
ICAgIG91dE1hdHJpeFsxXVsyXSAgPSAtIGRldDN4MyggYTEsIGEyLCBhNCwgYzEsIGMyLCBjNCwg
ZDEsIGQyLCBkNCk7CisgICAgb3V0TWF0cml4WzJdWzJdICA9ICAgZGV0M3gzKCBhMSwgYTIsIGE0
LCBiMSwgYjIsIGI0LCBkMSwgZDIsIGQ0KTsKKyAgICBvdXRNYXRyaXhbM11bMl0gID0gLSBkZXQz
eDMoIGExLCBhMiwgYTQsIGIxLCBiMiwgYjQsIGMxLCBjMiwgYzQpOworICAgICAgICAKKyAgICBv
dXRNYXRyaXhbMF1bM10gID0gLSBkZXQzeDMoIGIxLCBiMiwgYjMsIGMxLCBjMiwgYzMsIGQxLCBk
MiwgZDMpOworICAgIG91dE1hdHJpeFsxXVszXSAgPSAgIGRldDN4MyggYTEsIGEyLCBhMywgYzEs
IGMyLCBjMywgZDEsIGQyLCBkMyk7CisgICAgb3V0TWF0cml4WzJdWzNdICA9IC0gZGV0M3gzKCBh
MSwgYTIsIGEzLCBiMSwgYjIsIGIzLCBkMSwgZDIsIGQzKTsKKyAgICBvdXRNYXRyaXhbM11bM10g
ID0gICBkZXQzeDMoIGExLCBhMiwgYTMsIGIxLCBiMiwgYjMsIGMxLCBjMiwgYzMpOworfQorCisv
LyByZXR1cm5zIGZhbHNlIGlmIHRoZSBtYXRyaXggaXMgbm90IGludGVydGlibGUKK3N0YXRpYyBi
b29sIGludmVyc2UoY29uc3QgTWF0cml4NCBzcmNNYXRyaXgsIE1hdHJpeDQgb3V0TWF0cml4KQor
eworICAgIC8qIGNhbGN1bGF0ZSB0aGUgYWRqb2ludCBtYXRyaXggKi8KKworICAgIGFkam9pbnQo
c3JjTWF0cml4LCBvdXRNYXRyaXgpOworCisgICAgLyogIGNhbGN1bGF0ZSB0aGUgNHg0IGRldGVy
bWluYW50CisgICAgICogIGlmIHRoZSBkZXRlcm1pbmFudCBpcyB6ZXJvLCAKKyAgICAgKiAgdGhl
biB0aGUgaW52ZXJzZSBtYXRyaXggaXMgbm90IHVuaXF1ZS4KKyAgICAgKi8KKworICAgIGZsb2F0
IGRldCA9IGRldDR4NChzcmNNYXRyaXgpOworCisgICAgaWYgKGZhYnMoZGV0KSA8IFNNQUxMX05V
TUJFUikgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLyogc2NhbGUgdGhl
IGFkam9pbnQgbWF0cml4IHRvIGdldCB0aGUgaW52ZXJzZSAqLworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCA0OyBpKyspCisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNDsgaisrKQorICAg
ICAgICAgICAgb3V0TWF0cml4W2ldW2pdID0gb3V0TWF0cml4W2ldW2pdIC8gZGV0OworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKKy8qIEVuZCBvZiBjb2RlIGFkYXB0ZWQgZnJvbSBNYXRyaXggSW52
ZXJzaW9uIGJ5IFJpY2hhcmQgQ2FybGluZyAqLworCitUcmFuc2Zvcm0zRDo6VHJhbnNmb3JtM0Qo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQoreworICAgIG1ha2VJZGVudGl0eSgpOworICAgIG1f
bWF0cml4WzBdWzBdID0gKGZsb2F0KSB0LmEoKTsKKyAgICBtX21hdHJpeFswXVsxXSA9IChmbG9h
dCkgdC5iKCk7CisgICAgbV9tYXRyaXhbMV1bMF0gPSAoZmxvYXQpIHQuYygpOworICAgIG1fbWF0
cml4WzFdWzFdID0gKGZsb2F0KSB0LmQoKTsKKworICAgIG1fbWF0cml4WzNdWzBdID0gKGZsb2F0
KSB0LmUoKTsKKyAgICBtX21hdHJpeFszXVsxXSA9IChmbG9hdCkgdC5mKCk7Cit9CisKK1RyYW5z
Zm9ybTNEICZUcmFuc2Zvcm0zRDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQoreworICAgIFRy
YW5zZm9ybTNEIG1hdDsKKyAgICBtYXQubV9tYXRyaXhbMF1bMF0gPSBzeDsKKyAgICBtYXQubV9t
YXRyaXhbMV1bMV0gPSBzeTsKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0aGlz
OworfQorCitUcmFuc2Zvcm0zRCAmVHJhbnNmb3JtM0Q6OnNjYWxlM2QoZmxvYXQgc3gsIGZsb2F0
IHN5LCBmbG9hdCBzeikKK3sKKyAgICBUcmFuc2Zvcm0zRCBtYXQ7CisgICAgbWF0Lm1fbWF0cml4
WzBdWzBdID0gc3g7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gc3k7CisgICAgbWF0Lm1fbWF0
cml4WzJdWzJdID0gc3o7CisKKyAgICBtdWx0TGVmdChtYXQpOworICAgIHJldHVybiAqdGhpczsK
K30KKworVHJhbnNmb3JtM0QgJlRyYW5zZm9ybTNEOjpyb3RhdGUzZChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCBhbmdsZSkKK3sKKyAgICAvLyBhbmdsZXMgYXJlIGluIGRlZ3JlZXMu
IFN3aXRjaCB0byByYWRpYW5zCisgICAgYW5nbGUgPSAoZmxvYXQpIChhbmdsZSAvIDM2MC4wICog
TV9QSSAqIDIuMCk7CisgICAgCisgICAgYW5nbGUgLz0gMi4wZjsKKyAgICBmbG9hdCBzaW5BID0g
c2luZihhbmdsZSk7CisgICAgZmxvYXQgY29zQSA9IGNvc2YoYW5nbGUpOworICAgIGZsb2F0IHNp
bkEyID0gc2luQSAqIHNpbkE7CisgICAgCisgICAgLy8gbm9ybWFsaXplCisgICAgZmxvYXQgbGVu
Z3RoID0gc3FydGYoeCp4K3kqeSt6KnopOworICAgIGlmIChsZW5ndGggPT0gMCkgeworICAgICAg
ICAvLyBiYWQgdmVjdG9yLCBqdXN0IHVzZSBzb21ldGhpbmcgcmVhc29uYWJsZQorICAgICAgICB4
ID0gMDsKKyAgICAgICAgeSA9IDA7CisgICAgICAgIHogPSAxOworICAgIH0KKyAgICBlbHNlIGlm
IChsZW5ndGggIT0gMSkgeworICAgICAgICB4IC89IGxlbmd0aDsKKyAgICAgICAgeSAvPSBsZW5n
dGg7CisgICAgICAgIHogLz0gbGVuZ3RoOworICAgIH0KKyAgICAKKyAgICBUcmFuc2Zvcm0zRCBt
YXQ7CisKKyAgICAvLyBvcHRpbWl6ZSBjYXNlIHdoZXJlIGF4aXMgaXMgYWxvbmcgbWFqb3IgYXhp
cworICAgIGlmICh4ID09IDEuMGYgJiYgeSA9PSAwLjBmICYmIHogPT0gMC4wZikgeworICAgICAg
ICBtYXQubV9tYXRyaXhbMF1bMF0gPSAxLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMF1bMV0g
PSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgICAgICBtYXQu
bV9tYXRyaXhbMV1bMF0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMV0gPSAxLjBm
IC0gMi4wZiAqIHNpbkEyOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMl0gPSAyLjBmICogc2lu
QSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDAuMGY7CisgICAgICAgIG1h
dC5tX21hdHJpeFsyXVsxXSA9IC0yLjBmICogc2luQSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21h
dHJpeFsyXVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgICAgIG1hdC5tX21hdHJpeFsw
XVszXSA9IG1hdC5tX21hdHJpeFsxXVszXSA9IG1hdC5tX21hdHJpeFsyXVszXSA9IDAuMGY7Cisg
ICAgICAgIG1hdC5tX21hdHJpeFszXVswXSA9IG1hdC5tX21hdHJpeFszXVsxXSA9IG1hdC5tX21h
dHJpeFszXVsyXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEuMGY7Cisg
ICAgfQorICAgIGVsc2UgaWYgKHggPT0gMC4wZiAmJiB5ID09IDEuMGYgJiYgeiA9PSAwLjBmKSB7
CisgICAgICAgIG1hdC5tX21hdHJpeFswXVswXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAg
ICAgIG1hdC5tX21hdHJpeFswXVsxXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFswXVsy
XSA9IC0yLjBmICogc2luQSAqIGNvc0E7CisgICAgICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IDAu
MGY7CisgICAgICAgIG1hdC5tX21hdHJpeFsxXVsxXSA9IDEuMGY7CisgICAgICAgIG1hdC5tX21h
dHJpeFsxXVsyXSA9IDAuMGY7CisgICAgICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDIuMGYgKiBz
aW5BICogY29zQTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzFdID0gMC4wZjsKKyAgICAgICAg
bWF0Lm1fbWF0cml4WzJdWzJdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1f
bWF0cml4WzBdWzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0g
MC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzBdID0gbWF0Lm1fbWF0cml4WzNdWzFdID0g
bWF0Lm1fbWF0cml4WzNdWzJdID0gMC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0g
MS4wZjsKKyAgICB9CisgICAgZWxzZSBpZiAoeCA9PSAwLjBmICYmIHkgPT0gMC4wZiAmJiB6ID09
IDEuMGYpIHsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiBzaW5B
MjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMi4wZiAqIHNpbkEgKiBjb3NBOworICAg
ICAgICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMV1b
MF0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMV0gPSAx
LjBmIC0gMi4wZiAqIHNpbkEyOworICAgICAgICBtYXQubV9tYXRyaXhbMV1bMl0gPSAwLjBmOwor
ICAgICAgICBtYXQubV9tYXRyaXhbMl1bMF0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhb
Ml1bMV0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbMl1bMl0gPSAxLjBmOworICAgICAg
ICBtYXQubV9tYXRyaXhbMF1bM10gPSBtYXQubV9tYXRyaXhbMV1bM10gPSBtYXQubV9tYXRyaXhb
Ml1bM10gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhb
M11bMV0gPSBtYXQubV9tYXRyaXhbM11bMl0gPSAwLjBmOworICAgICAgICBtYXQubV9tYXRyaXhb
M11bM10gPSAxLjBmOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZmxvYXQgeDIgPSB4Kng7
IGZsb2F0IHkyID0geSp5OyBmbG9hdCB6MiA9IHoqejsKKyAgICAKKyAgICAgICAgbWF0Lm1fbWF0
cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiAoeTIgKyB6MikgKiBzaW5BMjsKKyAgICAgICAgbWF0
Lm1fbWF0cml4WzBdWzFdID0gMi4wZiAqICh4ICogeSAqIHNpbkEyICsgeiAqIHNpbkEgKiBjb3NB
KTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBdWzJdID0gMi4wZiAqICh4ICogeiAqIHNpbkEyIC0g
eSAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzFdWzBdID0gMi4wZiAqICh5
ICogeCAqIHNpbkEyIC0geiAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzFd
WzFdID0gMS4wZiAtIDIuMGYgKiAoejIgKyB4MikgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1fbWF0
cml4WzFdWzJdID0gMi4wZiAqICh5ICogeiAqIHNpbkEyICsgeCAqIHNpbkEgKiBjb3NBKTsKKyAg
ICAgICAgbWF0Lm1fbWF0cml4WzJdWzBdID0gMi4wZiAqICh6ICogeCAqIHNpbkEyICsgeSAqIHNp
bkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzFdID0gMi4wZiAqICh6ICogeSAq
IHNpbkEyIC0geCAqIHNpbkEgKiBjb3NBKTsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzJdWzJdID0g
MS4wZiAtIDIuMGYgKiAoeDIgKyB5MikgKiBzaW5BMjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzBd
WzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0gMC4wZjsKKyAg
ICAgICAgbWF0Lm1fbWF0cml4WzNdWzBdID0gbWF0Lm1fbWF0cml4WzNdWzFdID0gbWF0Lm1fbWF0
cml4WzNdWzJdID0gMC4wZjsKKyAgICAgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0gMS4wZjsKKyAg
ICB9CisgICAgbXVsdExlZnQobWF0KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9y
bTNEICZUcmFuc2Zvcm0zRDo6cm90YXRlM2QoZmxvYXQgcngsIGZsb2F0IHJ5LCBmbG9hdCByeikK
K3sKKyAgICAvLyBhbmdsZXMgYXJlIGluIGRlZ3JlZXMuIFN3aXRjaCB0byByYWRpYW5zCisgICAg
cnggPSAoZmxvYXQpIChyeCAvIDM2MC4wICogTV9QSSAqIDIuMCk7CisgICAgcnkgPSAoZmxvYXQp
IChyeSAvIDM2MC4wICogTV9QSSAqIDIuMCk7CisgICAgcnogPSAoZmxvYXQpIChyeiAvIDM2MC4w
ICogTV9QSSAqIDIuMCk7CisgICAgCisgICAgVHJhbnNmb3JtM0QgbWF0OworICAgIAorICAgIHJ4
IC89IDIuMGY7CisgICAgZmxvYXQgc2luQSA9IHNpbmYocngpOworICAgIGZsb2F0IGNvc0EgPSBj
b3NmKHJ4KTsKKyAgICBmbG9hdCBzaW5BMiA9IHNpbkEgKiBzaW5BOworICAgIAorICAgIG1hdC5t
X21hdHJpeFswXVswXSA9IDEuMGY7CisgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMC4wZjsKKyAg
ICBtYXQubV9tYXRyaXhbMF1bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IDAu
MGY7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICBt
YXQubV9tYXRyaXhbMV1bMl0gPSAyLjBmICogc2luQSAqIGNvc0E7CisgICAgbWF0Lm1fbWF0cml4
WzJdWzBdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbMl1bMV0gPSAtMi4wZiAqIHNpbkEgKiBj
b3NBOworICAgIG1hdC5tX21hdHJpeFsyXVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAg
bWF0Lm1fbWF0cml4WzBdWzNdID0gbWF0Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJd
WzNdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhbM11bMV0g
PSBtYXQubV9tYXRyaXhbM11bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEu
MGY7CisgICAgCisgICAgVHJhbnNmb3JtM0Qgcm1hdChtYXQpOworICAgIAorICAgIHJ5IC89IDIu
MGY7CisgICAgc2luQSA9IHNpbmYocnkpOworICAgIGNvc0EgPSBjb3NmKHJ5KTsKKyAgICBzaW5B
MiA9IHNpbkEgKiBzaW5BOworICAgIAorICAgIG1hdC5tX21hdHJpeFswXVswXSA9IDEuMGYgLSAy
LjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4WzBdWzFdID0gMC4wZjsKKyAgICBtYXQubV9t
YXRyaXhbMF1bMl0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgIG1hdC5tX21hdHJpeFsxXVsw
XSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzFdWzFdID0gMS4wZjsKKyAgICBtYXQubV9tYXRy
aXhbMV1bMl0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsyXVswXSA9IDIuMGYgKiBzaW5BICog
Y29zQTsKKyAgICBtYXQubV9tYXRyaXhbMl1bMV0gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFsy
XVsyXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4WzBdWzNdID0gbWF0
Lm1fbWF0cml4WzFdWzNdID0gbWF0Lm1fbWF0cml4WzJdWzNdID0gMC4wZjsKKyAgICBtYXQubV9t
YXRyaXhbM11bMF0gPSBtYXQubV9tYXRyaXhbM11bMV0gPSBtYXQubV9tYXRyaXhbM11bMl0gPSAw
LjBmOworICAgIG1hdC5tX21hdHJpeFszXVszXSA9IDEuMGY7CisgICAgCisgICAgcm1hdC5tdWx0
TGVmdChtYXQpOworCisgICAgcnogLz0gMi4wZjsKKyAgICBzaW5BID0gc2luZihyeik7CisgICAg
Y29zQSA9IGNvc2YocnopOworICAgIHNpbkEyID0gc2luQSAqIHNpbkE7CisgICAgCisgICAgbWF0
Lm1fbWF0cml4WzBdWzBdID0gMS4wZiAtIDIuMGYgKiBzaW5BMjsKKyAgICBtYXQubV9tYXRyaXhb
MF1bMV0gPSAyLjBmICogc2luQSAqIGNvc0E7CisgICAgbWF0Lm1fbWF0cml4WzBdWzJdID0gMC4w
ZjsKKyAgICBtYXQubV9tYXRyaXhbMV1bMF0gPSAtMi4wZiAqIHNpbkEgKiBjb3NBOworICAgIG1h
dC5tX21hdHJpeFsxXVsxXSA9IDEuMGYgLSAyLjBmICogc2luQTI7CisgICAgbWF0Lm1fbWF0cml4
WzFdWzJdID0gMC4wZjsKKyAgICBtYXQubV9tYXRyaXhbMl1bMF0gPSAwLjBmOworICAgIG1hdC5t
X21hdHJpeFsyXVsxXSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzJdWzJdID0gMS4wZjsKKyAg
ICBtYXQubV9tYXRyaXhbMF1bM10gPSBtYXQubV9tYXRyaXhbMV1bM10gPSBtYXQubV9tYXRyaXhb
Ml1bM10gPSAwLjBmOworICAgIG1hdC5tX21hdHJpeFszXVswXSA9IG1hdC5tX21hdHJpeFszXVsx
XSA9IG1hdC5tX21hdHJpeFszXVsyXSA9IDAuMGY7CisgICAgbWF0Lm1fbWF0cml4WzNdWzNdID0g
MS4wZjsKKworICAgIHJtYXQubXVsdExlZnQobWF0KTsKKworICAgIG11bHRMZWZ0KHJtYXQpOwor
ICAgIHJldHVybiAqdGhpczsKK30KKworVHJhbnNmb3JtM0QgJlRyYW5zZm9ybTNEOjp0cmFuc2xh
dGUoZmxvYXQgdHgsIGZsb2F0IHR5KQoreworICAgIFRyYW5zZm9ybTNEIG1hdDsKKyAgICBtYXQu
bV9tYXRyaXhbM11bMF0gPSB0eDsKKyAgICBtYXQubV9tYXRyaXhbM11bMV0gPSB0eTsKKworICAg
IG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0aGlzOworfQorCitUcmFuc2Zvcm0zRCAmVHJh
bnNmb3JtM0Q6OnRyYW5zbGF0ZTNkKGZsb2F0IHR4LCBmbG9hdCB0eSwgZmxvYXQgdHopCit7Cisg
ICAgVHJhbnNmb3JtM0QgbWF0OworICAgIG1hdC5tX21hdHJpeFszXVswXSA9IHR4OworICAgIG1h
dC5tX21hdHJpeFszXVsxXSA9IHR5OworICAgIG1hdC5tX21hdHJpeFszXVsyXSA9IHR6OworCisg
ICAgbXVsdExlZnQobWF0KTsKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1RyYW5zZm9ybTNEICZU
cmFuc2Zvcm0zRDo6c2tldyhmbG9hdCBzeCwgZmxvYXQgc3kpCit7CisgICAgLy8gYW5nbGVzIGFy
ZSBpbiBkZWdyZWVzLiBTd2l0Y2ggdG8gcmFkaWFucworICAgIHN4ID0gKGZsb2F0KSAoc3ggLyAz
NjAuMCAqIE1fUEkgKiAyLjApOworICAgIHN5ID0gKGZsb2F0KSAoc3kgLyAzNjAuMCAqIE1fUEkg
KiAyLjApOworICAgIAorICAgIFRyYW5zZm9ybTNEIG1hdDsKKyAgICBtYXQubV9tYXRyaXhbMF1b
MV0gPSB0YW5mKHN5KTsgLy8gbm90ZSB0aGF0IHRoZSB5IHNoZWFyIGdvZXMgaW4gdGhlIGZpcnN0
IHJvdworICAgIG1hdC5tX21hdHJpeFsxXVswXSA9IHRhbmYoc3gpOyAvLyBhbmQgdGhlIHggc2hl
YXIgaW4gdGhlIHNlY29uZCByb3cKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitUcmFuc2Zvcm0zRCAmVHJhbnNmb3JtM0Q6OmFwcGx5UGVyc3BlY3RpdmUoZmxv
YXQgcCkKK3sKKyAgICBUcmFuc2Zvcm0zRCBtYXQ7CisgICAgaWYgKHAgIT0gMCkKKyAgICAgICAg
bWF0Lm1fbWF0cml4WzJdWzNdID0gLTEvcDsKKworICAgIG11bHRMZWZ0KG1hdCk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCisvLworLy8gbXVsdGlwbGllcyBtYXRyaXggYnkgZ2l2ZW4gbWF0cml4
IG9uIHRoZSByaWdodAorLy8KK1RyYW5zZm9ybTNEICYgCitUcmFuc2Zvcm0zRDo6bXVsdExlZnQo
Y29uc3QgVHJhbnNmb3JtM0QmIG1hdCkKK3sKKyAgICBmbG9hdCB0bXBbNF1bNF07CisgICAgCisg
ICAgdG1wWzBdWzBdID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0cml4WzBdWzBdICsgbWF0
Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhbMV1bMF0KKyAgICAgICAgICAgICAgICsgbWF0Lm1f
bWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1bMF0gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21h
dHJpeFszXVswXSk7CisgICAgdG1wWzBdWzFdID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0
cml4WzBdWzFdICsgbWF0Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhbMV1bMV0KKyAgICAgICAg
ICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1bMV0gKyBtYXQubV9tYXRy
aXhbMF1bM10gKiBtX21hdHJpeFszXVsxXSk7CisgICAgdG1wWzBdWzJdID0gKG1hdC5tX21hdHJp
eFswXVswXSAqIG1fbWF0cml4WzBdWzJdICsgbWF0Lm1fbWF0cml4WzBdWzFdICogbV9tYXRyaXhb
MV1bMl0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJdICogbV9tYXRyaXhbMl1b
Ml0gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21hdHJpeFszXVsyXSk7CisgICAgdG1wWzBdWzNd
ID0gKG1hdC5tX21hdHJpeFswXVswXSAqIG1fbWF0cml4WzBdWzNdICsgbWF0Lm1fbWF0cml4WzBd
WzFdICogbV9tYXRyaXhbMV1bM10KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzBdWzJd
ICogbV9tYXRyaXhbMl1bM10gKyBtYXQubV9tYXRyaXhbMF1bM10gKiBtX21hdHJpeFszXVszXSk7
CisKKyAgICB0bXBbMV1bMF0gPSAobWF0Lm1fbWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bMF0g
KyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21hdHJpeFsxXVswXQorICAgICAgICAgICAgICAgKyBt
YXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJpeFsyXVswXSArIG1hdC5tX21hdHJpeFsxXVszXSAq
IG1fbWF0cml4WzNdWzBdKTsKKyAgICB0bXBbMV1bMV0gPSAobWF0Lm1fbWF0cml4WzFdWzBdICog
bV9tYXRyaXhbMF1bMV0gKyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21hdHJpeFsxXVsxXQorICAg
ICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJpeFsyXVsxXSArIG1hdC5t
X21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNdWzFdKTsKKyAgICB0bXBbMV1bMl0gPSAobWF0Lm1f
bWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bMl0gKyBtYXQubV9tYXRyaXhbMV1bMV0gKiBtX21h
dHJpeFsxXVsyXQorICAgICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhbMV1bMl0gKiBtX21hdHJp
eFsyXVsyXSArIG1hdC5tX21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNdWzJdKTsKKyAgICB0bXBb
MV1bM10gPSAobWF0Lm1fbWF0cml4WzFdWzBdICogbV9tYXRyaXhbMF1bM10gKyBtYXQubV9tYXRy
aXhbMV1bMV0gKiBtX21hdHJpeFsxXVszXQorICAgICAgICAgICAgICAgKyBtYXQubV9tYXRyaXhb
MV1bMl0gKiBtX21hdHJpeFsyXVszXSArIG1hdC5tX21hdHJpeFsxXVszXSAqIG1fbWF0cml4WzNd
WzNdKTsKKworICAgIHRtcFsyXVswXSA9IChtYXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFsw
XVswXSArIG1hdC5tX21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzBdCisgICAgICAgICAgICAg
ICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzBdICsgbWF0Lm1fbWF0cml4WzJd
WzNdICogbV9tYXRyaXhbM11bMF0pOworICAgIHRtcFsyXVsxXSA9IChtYXQubV9tYXRyaXhbMl1b
MF0gKiBtX21hdHJpeFswXVsxXSArIG1hdC5tX21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzFd
CisgICAgICAgICAgICAgICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzFdICsg
bWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRyaXhbM11bMV0pOworICAgIHRtcFsyXVsyXSA9ICht
YXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFswXVsyXSArIG1hdC5tX21hdHJpeFsyXVsxXSAq
IG1fbWF0cml4WzFdWzJdCisgICAgICAgICAgICAgICArIG1hdC5tX21hdHJpeFsyXVsyXSAqIG1f
bWF0cml4WzJdWzJdICsgbWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRyaXhbM11bMl0pOworICAg
IHRtcFsyXVszXSA9IChtYXQubV9tYXRyaXhbMl1bMF0gKiBtX21hdHJpeFswXVszXSArIG1hdC5t
X21hdHJpeFsyXVsxXSAqIG1fbWF0cml4WzFdWzNdCisgICAgICAgICAgICAgICArIG1hdC5tX21h
dHJpeFsyXVsyXSAqIG1fbWF0cml4WzJdWzNdICsgbWF0Lm1fbWF0cml4WzJdWzNdICogbV9tYXRy
aXhbM11bM10pOworCisgICAgdG1wWzNdWzBdID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0
cml4WzBdWzBdICsgbWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhbMV1bMF0KKyAgICAgICAg
ICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1bMF0gKyBtYXQubV9tYXRy
aXhbM11bM10gKiBtX21hdHJpeFszXVswXSk7CisgICAgdG1wWzNdWzFdID0gKG1hdC5tX21hdHJp
eFszXVswXSAqIG1fbWF0cml4WzBdWzFdICsgbWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhb
MV1bMV0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1b
MV0gKyBtYXQubV9tYXRyaXhbM11bM10gKiBtX21hdHJpeFszXVsxXSk7CisgICAgdG1wWzNdWzJd
ID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0cml4WzBdWzJdICsgbWF0Lm1fbWF0cml4WzNd
WzFdICogbV9tYXRyaXhbMV1bMl0KKyAgICAgICAgICAgICAgICsgbWF0Lm1fbWF0cml4WzNdWzJd
ICogbV9tYXRyaXhbMl1bMl0gKyBtYXQubV9tYXRyaXhbM11bM10gKiBtX21hdHJpeFszXVsyXSk7
CisgICAgdG1wWzNdWzNdID0gKG1hdC5tX21hdHJpeFszXVswXSAqIG1fbWF0cml4WzBdWzNdICsg
bWF0Lm1fbWF0cml4WzNdWzFdICogbV9tYXRyaXhbMV1bM10KKyAgICAgICAgICAgICAgICsgbWF0
Lm1fbWF0cml4WzNdWzJdICogbV9tYXRyaXhbMl1bM10gKyBtYXQubV9tYXRyaXhbM11bM10gKiBt
X21hdHJpeFszXVszXSk7CisgICAgCisgICAgc2V0TWF0cml4KChmbG9hdCopIHRtcCk7CisgICAg
cmV0dXJuICp0aGlzOworfQorCit2b2lkCitUcmFuc2Zvcm0zRDo6bXVsdFZlY01hdHJpeChmbG9h
dCBpbngsIGZsb2F0IGlueSwgZmxvYXQmIG91dHgsIGZsb2F0JiBvdXR5KSBjb25zdAoreworICAg
IG91dHggPSBtX21hdHJpeFszXVswXSArIGlueCAqIG1fbWF0cml4WzBdWzBdICsgaW55ICogbV9t
YXRyaXhbMV1bMF07CisgICAgb3V0eSA9IG1fbWF0cml4WzNdWzFdICsgaW54ICogbV9tYXRyaXhb
MF1bMV0gKyBpbnkgKiBtX21hdHJpeFsxXVsxXTsKKyAgICBmbG9hdCB3ID0gbV9tYXRyaXhbM11b
M10gKyBpbnggKiBtX21hdHJpeFswXVszXSArIGlueSAqIG1fbWF0cml4WzFdWzNdOworICAgIGlm
ICh3ICE9IDEgJiYgdyAhPSAwKSB7CisgICAgICAgIG91dHggLz0gdzsKKyAgICAgICAgb3V0eSAv
PSB3OworICAgIH0KK30KKworLy8KKy8vIHJldHVybnMgaW52ZXJzZSBvZiBtYXRyaXgKKy8vCitU
cmFuc2Zvcm0zRAorVHJhbnNmb3JtM0Q6OmludmVyc2UoKSBjb25zdCAKK3sKKyAgICBUcmFuc2Zv
cm0zRCBpbnZNYXQ7CisgICAgCisgICAgYm9vbCBpbnZlcnRlZCA9IFdlYkNvcmU6OmludmVyc2Uo
KGZsb2F0KCopWzRdKSBtX21hdHJpeCwgKGZsb2F0KCopWzRdKSBpbnZNYXQubV9tYXRyaXgpOwor
ICAgIGlmICghaW52ZXJ0ZWQpIHsKKyAgICAgICAgLy8gRklYTUU6IGluZGljYXRlIGZhaWx1cmUg
c29tZWhvdworICAgICAgICByZXR1cm4gVHJhbnNmb3JtM0QoKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIGludk1hdDsKK30KKworQWZmaW5lVHJhbnNmb3JtCitUcmFuc2Zvcm0zRDo6YWZmaW5l
VHJhbnNmb3JtKCkgY29uc3QKK3sKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyB0aHJvd3MgYXdheSB0
aGUgei1heGlzCisgICAgLy8gRklYTUU6IGluZGljYXRlIHdoZW4gdGhpcyBsb3NlcyBkYXRhIHNv
bWVob3cKKyAgICBBZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtKG1fbWF0cml4WzBdWzBdLCBtX21h
dHJpeFswXVsxXSwgbV9tYXRyaXhbMV1bMF0sIG1fbWF0cml4WzFdWzFdLCBtX21hdHJpeFszXVsw
XSwgbV9tYXRyaXhbM11bMV0pOworICAgIHJldHVybiB0cmFuc2Zvcm07Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVHJhbnNmb3JtM0QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RyYW5zZm9ybTNELmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RyYW5zZm9ybTNELmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFRyYW5zZm9ybTNEX2gK
KyNkZWZpbmUgVHJhbnNmb3JtM0RfaAorCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFmZmluZVRyYW5zZm9ybTsKKworY2xhc3MgVHJhbnNm
b3JtM0QgeworcHVibGljOgorICAgIFRyYW5zZm9ybTNEKCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG1ha2VJZGVudGl0eSgpOyB9CisgICAgVHJh
bnNmb3JtM0QoZmxvYXQgbTExLCBmbG9hdCBtMTIsIGZsb2F0IG0xMywgZmxvYXQgbTE0LAorICAg
ICAgICAgICAgICAgIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBtMjMsIGZsb2F0IG0yNCwK
KyAgICAgICAgICAgICAgICBmbG9hdCBtMzEsIGZsb2F0IG0zMiwgZmxvYXQgbTMzLCBmbG9hdCBt
MzQsCisgICAgICAgICAgICAgICAgZmxvYXQgbTQxLCBmbG9hdCBtNDIsIGZsb2F0IG00MywgZmxv
YXQgbTQ0KSAgICAgICAgIHsgc2V0TWF0cml4KG0xMSwgbTEyLCBtMTMsIG0xNCwgbTIxLCBtMjIs
IG0yMywgbTI0LCBtMzEsIG0zMiwgbTMzLCBtMzQsIG00MSwgbTQyLCBtNDMsIG00NCk7IH0KKyAg
ICBUcmFuc2Zvcm0zRChjb25zdCBUcmFuc2Zvcm0zRCYgdCkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAqdGhpcyA9IHQ7IH0KKworICAgIFRyYW5zZm9ybTNEKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdCk7CisgICAgCisgICAgVHJhbnNmb3JtM0QgJm9wZXJhdG9yID0oY29uc3QgVHJh
bnNmb3JtM0QgJnQpCisgICAgeworICAgICAgICBzZXRNYXRyaXgoKGZsb2F0KikgdC5tX21hdHJp
eCk7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICB2b2lkIHNldE1hdHJpeChm
bG9hdCBtMTEsIGZsb2F0IG0xMiwgZmxvYXQgbTEzLCBmbG9hdCBtMTQsCisgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IG0yMSwgZmxvYXQgbTIyLCBmbG9hdCBtMjMsIGZsb2F0IG0yNCwKKyAgICAg
ICAgICAgICAgICAgICAgZmxvYXQgbTMxLCBmbG9hdCBtMzIsIGZsb2F0IG0zMywgZmxvYXQgbTM0
LAorICAgICAgICAgICAgICAgICAgICBmbG9hdCBtNDEsIGZsb2F0IG00MiwgZmxvYXQgbTQzLCBm
bG9hdCBtNDQpCisgICAgeworICAgICAgICBtX21hdHJpeFswXVswXSA9IG0xMTsgbV9tYXRyaXhb
MF1bMV0gPSBtMTI7IG1fbWF0cml4WzBdWzJdID0gbTEzOyBtX21hdHJpeFswXVszXSA9IG0xNDsg
CisgICAgICAgIG1fbWF0cml4WzFdWzBdID0gbTIxOyBtX21hdHJpeFsxXVsxXSA9IG0yMjsgbV9t
YXRyaXhbMV1bMl0gPSBtMjM7IG1fbWF0cml4WzFdWzNdID0gbTI0OyAKKyAgICAgICAgbV9tYXRy
aXhbMl1bMF0gPSBtMzE7IG1fbWF0cml4WzJdWzFdID0gbTMyOyBtX21hdHJpeFsyXVsyXSA9IG0z
MzsgbV9tYXRyaXhbMl1bM10gPSBtMzQ7IAorICAgICAgICBtX21hdHJpeFszXVswXSA9IG00MTsg
bV9tYXRyaXhbM11bMV0gPSBtNDI7IG1fbWF0cml4WzNdWzJdID0gbTQzOyBtX21hdHJpeFszXVsz
XSA9IG00NDsKKyAgICB9CisgICAgCisgICAgVHJhbnNmb3JtM0QmICAgIG1ha2VJZGVudGl0eSgp
ICB7IHNldE1hdHJpeCgxLDAsMCwwLCAwLDEsMCwwLCAwLDAsMSwwLCAwLDAsMCwxKTsgcmV0dXJu
ICp0aGlzOyB9CisgICAgYm9vbCBpc0lkZW50aXR5KCkgY29uc3QgICAgIHsgcmV0dXJuICp0aGlz
ID09IFRyYW5zZm9ybTNEKCk7IH0KKyAgICAKKyAgICBmbG9hdCBtMTEoKSBjb25zdCAgICAgICAg
ICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMF07IH0KKyAgICBmbG9hdCBtMTIoKSBjb25zdCAgICAg
ICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMV07IH0KKyAgICBmbG9hdCBtMTMoKSBjb25zdCAg
ICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bMl07IH0KKyAgICBmbG9hdCBtMTQoKSBjb25z
dCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMF1bM107IH0KKyAgICBmbG9hdCBtMjEoKSBj
b25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMF07IH0KKyAgICBmbG9hdCBtMjIo
KSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMV07IH0KKyAgICBmbG9hdCBt
MjMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bMl07IH0KKyAgICBmbG9h
dCBtMjQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMV1bM107IH0KKyAgICBm
bG9hdCBtMzEoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMF07IH0KKyAg
ICBmbG9hdCBtMzIoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMV07IH0K
KyAgICBmbG9hdCBtMzMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1bMl07
IH0KKyAgICBmbG9hdCBtMzQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhbMl1b
M107IH0KKyAgICBmbG9hdCBtNDEoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRyaXhb
M11bMF07IH0KKyAgICBmbG9hdCBtNDIoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9tYXRy
aXhbM11bMV07IH0KKyAgICBmbG9hdCBtNDMoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4gbV9t
YXRyaXhbM11bMl07IH0KKyAgICBmbG9hdCBtNDQoKSBjb25zdCAgICAgICAgICAgeyByZXR1cm4g
bV9tYXRyaXhbM11bM107IH0KKworICAgIHZvaWQgc2V0TTExKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTEyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTEzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTE0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzBdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTIxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTIyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTIzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTI0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzFdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTMxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTMyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTMzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTM0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzJdWzNdID0gZjsgfQorICAgIHZvaWQgc2V0TTQxKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzBdID0gZjsgfQorICAgIHZvaWQgc2V0TTQyKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzFdID0gZjsgfQorICAgIHZvaWQgc2V0TTQzKGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzJdID0gZjsgfQorICAgIHZvaWQgc2V0TTQ0KGZsb2F0IGYpICAgICAgICB7IG1f
bWF0cml4WzNdWzNdID0gZjsgfQorICAgIAorICAgIFRyYW5zZm9ybTNEJiBzY2FsZShmbG9hdCBz
eCwgZmxvYXQgc3kpOworICAgIFRyYW5zZm9ybTNEJiBzY2FsZTNkKGZsb2F0IHN4LCBmbG9hdCBz
eSwgZmxvYXQgc3opOworICAgIAorICAgIC8vIGFuZ2xlcyBhcmUgaW4gZGVncmVlcy4geCx5LHog
bXVzdCBmb3JtIGEgdW5pdCB2ZWN0b3IgKGxlbmd0aCAxKSBvciByZXN1bHRzIGFyZSB1bmRlZmlu
ZWQKKyAgICBUcmFuc2Zvcm0zRCYgcm90YXRlM2QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwg
ZmxvYXQgYW5nbGUpOworICAgIAorICAgIC8vIGFuZ2xlcyBhcmUgaW4gZGVncmVlcy4gCisgICAg
VHJhbnNmb3JtM0QmIHJvdGF0ZTNkKGZsb2F0IHJ4LCBmbG9hdCByeSwgZmxvYXQgcnopOworICAg
IFRyYW5zZm9ybTNEJiB0cmFuc2xhdGUoZmxvYXQgdHgsIGZsb2F0IHR5KTsKKyAgICBUcmFuc2Zv
cm0zRCYgdHJhbnNsYXRlM2QoZmxvYXQgdHgsIGZsb2F0IHR5LCBmbG9hdCB0eik7CisgICAgVHJh
bnNmb3JtM0QmIHNrZXcoZmxvYXQgc3gsIGZsb2F0IHN5KTsKKyAgICBUcmFuc2Zvcm0zRCYgYXBw
bHlQZXJzcGVjdGl2ZShmbG9hdCBwKTsKKyAgICAKKyAgICBib29sIGhhc1BlcnNwZWN0aXZlKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXhbMl1bM10gIT0gMC4wZjsgfQorICAgIAorICAgIC8vIHRo
aXMgPSBtYXQgKiB0aGlzCisgICAgVHJhbnNmb3JtM0QmIG11bHRMZWZ0KGNvbnN0IFRyYW5zZm9y
bTNEJiBtYXQpOworICAgIAorICAgIC8vIG11bHRpcGx5IHBhc3NlZCAyRCBwb2ludCBieSBtYXRy
aXggKGFzc3VtZSB6PTApCisgICAgdm9pZCBtdWx0VmVjTWF0cml4KGZsb2F0IHgsIGZsb2F0IHks
IGZsb2F0JiBkc3RYLCBmbG9hdCYgZHN0WSkgY29uc3Q7CisgICAgCisgICAgLy8gcmV0dXJuIHRo
ZSBpbnZlcnNlIG9mIG1hdHJpeAorICAgIFRyYW5zZm9ybTNEIGludmVyc2UoKSBjb25zdDsKKwor
ICAgIC8vIHJldHVybiBhbiBhZmZpbmUgdHJhbnNmb3JtIChsb3NzeSEpCisgICAgQWZmaW5lVHJh
bnNmb3JtIGFmZmluZVRyYW5zZm9ybSgpIGNvbnN0OworICAgIAorICAgIC8vRXF1YWxpdHkgY29t
cGFyaXNvbiBvcGVyYXRvcgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yID09KGNvbnN0IFRyYW5z
Zm9ybTNEICZtMSwgY29uc3QgVHJhbnNmb3JtM0QgJm0yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IChtMS5tX21hdHJpeFswXVswXSA9PSBtMi5tX21hdHJpeFswXVswXSAmJgorICAgICAgICAgICAg
ICAgIG0xLm1fbWF0cml4WzBdWzFdID09IG0yLm1fbWF0cml4WzBdWzFdICYmCisgICAgICAgICAg
ICAgICAgbTEubV9tYXRyaXhbMF1bMl0gPT0gbTIubV9tYXRyaXhbMF1bMl0gJiYKKyAgICAgICAg
ICAgICAgICBtMS5tX21hdHJpeFswXVszXSA9PSBtMi5tX21hdHJpeFswXVszXSAmJgorICAgICAg
ICAgICAgICAgIG0xLm1fbWF0cml4WzFdWzBdID09IG0yLm1fbWF0cml4WzFdWzBdICYmCisgICAg
ICAgICAgICAgICAgbTEubV9tYXRyaXhbMV1bMV0gPT0gbTIubV9tYXRyaXhbMV1bMV0gJiYKKyAg
ICAgICAgICAgICAgICBtMS5tX21hdHJpeFsxXVsyXSA9PSBtMi5tX21hdHJpeFsxXVsyXSAmJgor
ICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzFdWzNdID09IG0yLm1fbWF0cml4WzFdWzNdICYm
CisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bMF0gPT0gbTIubV9tYXRyaXhbMl1bMF0g
JiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFsyXVsxXSA9PSBtMi5tX21hdHJpeFsyXVsx
XSAmJgorICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzJdWzJdID09IG0yLm1fbWF0cml4WzJd
WzJdICYmCisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bM10gPT0gbTIubV9tYXRyaXhb
Ml1bM10gJiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVswXSA9PSBtMi5tX21hdHJp
eFszXVswXSAmJgorICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzFdID09IG0yLm1fbWF0
cml4WzNdWzFdICYmCisgICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbM11bMl0gPT0gbTIubV9t
YXRyaXhbM11bMl0gJiYKKyAgICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVszXSA9PSBtMi5t
X21hdHJpeFszXVszXSk7CisgICAgfQorCisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3IgIT0oY29u
c3QgVHJhbnNmb3JtM0QgJm0xLCBjb25zdCBUcmFuc2Zvcm0zRCAmbTIpCisgICAgeyByZXR1cm4g
IShtMSA9PSBtMik7IH0KKworICAgIGZyaWVuZCBib29sIG9wZXJhdG9yIDwoY29uc3QgVHJhbnNm
b3JtM0QgJm0xLCBjb25zdCBUcmFuc2Zvcm0zRCAmbTIpCisgICAgeworICAgICAgICByZXR1cm4g
KG0xLm1fbWF0cml4WzBdWzBdIDwgbTIubV9tYXRyaXhbMF1bMF0gJiYKKyAgICAgICAgICAgICAg
ICBtMS5tX21hdHJpeFswXVsxXSA8IG0yLm1fbWF0cml4WzBdWzFdICYmCisgICAgICAgICAgICAg
ICAgbTEubV9tYXRyaXhbMF1bMl0gPCBtMi5tX21hdHJpeFswXVsyXSAmJgorICAgICAgICAgICAg
ICAgIG0xLm1fbWF0cml4WzBdWzNdIDwgbTIubV9tYXRyaXhbMF1bM10gJiYKKyAgICAgICAgICAg
ICAgICBtMS5tX21hdHJpeFsxXVswXSA8IG0yLm1fbWF0cml4WzFdWzBdICYmCisgICAgICAgICAg
ICAgICAgbTEubV9tYXRyaXhbMV1bMV0gPCBtMi5tX21hdHJpeFsxXVsxXSAmJgorICAgICAgICAg
ICAgICAgIG0xLm1fbWF0cml4WzFdWzJdIDwgbTIubV9tYXRyaXhbMV1bMl0gJiYKKyAgICAgICAg
ICAgICAgICBtMS5tX21hdHJpeFsxXVszXSA8IG0yLm1fbWF0cml4WzFdWzNdICYmCisgICAgICAg
ICAgICAgICAgbTEubV9tYXRyaXhbMl1bMF0gPCBtMi5tX21hdHJpeFsyXVswXSAmJgorICAgICAg
ICAgICAgICAgIG0xLm1fbWF0cml4WzJdWzFdIDwgbTIubV9tYXRyaXhbMl1bMV0gJiYKKyAgICAg
ICAgICAgICAgICBtMS5tX21hdHJpeFsyXVsyXSA8IG0yLm1fbWF0cml4WzJdWzJdICYmCisgICAg
ICAgICAgICAgICAgbTEubV9tYXRyaXhbMl1bM10gPCBtMi5tX21hdHJpeFsyXVszXSAmJgorICAg
ICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzBdIDwgbTIubV9tYXRyaXhbM11bMF0gJiYKKyAg
ICAgICAgICAgICAgICBtMS5tX21hdHJpeFszXVsxXSA8IG0yLm1fbWF0cml4WzNdWzFdICYmCisg
ICAgICAgICAgICAgICAgbTEubV9tYXRyaXhbM11bMl0gPCBtMi5tX21hdHJpeFszXVsyXSAmJgor
ICAgICAgICAgICAgICAgIG0xLm1fbWF0cml4WzNdWzNdIDwgbTIubV9tYXRyaXhbM11bM10pOwor
ICAgIH0KKyAgICAgCitwcml2YXRlOgorICAgIHZvaWQgc2V0TWF0cml4KGNvbnN0IGZsb2F0KiBt
KSAgICAgICAgeyBpZiAobSAmJiBtICE9IChmbG9hdCopIG1fbWF0cml4KSBtZW1jcHkobV9tYXRy
aXgsIG0sIDE2KnNpemVvZihmbG9hdCkpOyB9CisgICAgCisgICAgZmxvYXQgICBtX21hdHJpeFs0
XVs0XTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyYW5zZm9y
bTNEX2gKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5w
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9i
akMucG0JKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAKIAogICAg
IHJldHVybiAkcGFyZW50IGlmICRwYXJlbnQgZXEgIk9iamVjdCIgb3IgSXNCYXNlVHlwZSgkcGFy
ZW50KTsKICAgICByZXR1cm4gIkV2ZW50IiBpZiAkcGFyZW50IGVxICJVSUV2ZW50IjsKLSAgICBy
ZXR1cm4gIkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVxICJTVkdDb2xvciI7CisgICAgcmV0dXJuICJD
U1NWYWx1ZSIgaWYgJHBhcmVudCBlcSAiU1ZHQ29sb3IiIG9yICRwYXJlbnQgZXEgIkNTU1ZhbHVl
TGlzdCI7CiAgICAgcmV0dXJuICJOb2RlIjsKIH0KIApJbmRleDogV2ViQ29yZS9EZXJpdmVkU291
cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2
aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNyw2ICszMzcsNyBAQAogICAgIFRyZWVXYWxrZXIgXAogICAgIFVJRXZlbnQgXAog
ICAgIFZvaWRDYWxsYmFjayBcCisJV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUgXAogICAgIFdoZWVs
RXZlbnQgXAogICAgIFhNTEh0dHBSZXF1ZXN0IFwKICAgICBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlv
biBcCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCShyZXZpc2lvbiAzMjkxMikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjU3
LDggKzI1Nyw5IEBACiAgICAgfQogICAgIAogICAgIGlmIChoYXNUcmFuc2Zvcm0pIHsKLSAgICAg
ICAgbV90cmFuc2Zvcm0tPnJlc2V0KCk7Ci0gICAgICAgIHJlbmRlcmVyKCktPnN0eWxlKCktPmFw
cGx5VHJhbnNmb3JtKCptX3RyYW5zZm9ybSwgcmVuZGVyZXIoKS0+Ym9yZGVyQm94KCkuc2l6ZSgp
KTsKKyAgICAgICAgVHJhbnNmb3JtM0QgdHJhbnNmb3JtM0Q7CisgICAgICAgIHJlbmRlcmVyKCkt
PnN0eWxlKCktPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybTNELCByZW5kZXJlcigpLT5ib3JkZXJC
b3goKS5zaXplKCksIHRydWUpOworICAgICAgICBtX3RyYW5zZm9ybS5zZXQobmV3IEFmZmluZVRy
YW5zZm9ybSh0cmFuc2Zvcm0zRC5hZmZpbmVUcmFuc2Zvcm0oKSkpOwogICAgIH0KIH0KIApAQCAt
MjM2OCw3ICsyMzY5LDcgQEAKICAgICAKICAgICBtX3JlZmxlY3Rpb24tPnNldFN0eWxlKG5ld1N0
eWxlKTsKIH0KLQorICAgIAogdm9pZCBSZW5kZXJMYXllcjo6c3VzcGVuZE1hcnF1ZWVzKCkKIHsK
ICAgICBpZiAobV9tYXJxdWVlKQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTdHlsZS5oCShyZXZpc2lv
biAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKICNpbmNsdWRl
ICJDb2xvci5oIgogI2luY2x1ZGUgIkNTU0N1cnNvckltYWdlVmFsdWUuaCIKLSNpbmNsdWRlICJD
U1NUcmFuc2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgIkRhdGFSZWYuaCIKICNpbmNsdWRlICJGb250
LmgiCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgpAQCAtNTAsNiArNDksOCBAQAogI2luY2x1ZGUg
IkludFJlY3QuaCIKICNpbmNsdWRlICJMZW5ndGguaCIKICNpbmNsdWRlICJQYWlyLmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtM0QuaCIKKwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5j
bHVkZSAiVGV4dERpcmVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC03ODIs
ODEgKzc4NCwxMjIgQEAKIAogLy8gQ1NTIFRyYW5zZm9ybXMgKG1heSBiZWNvbWUgcGFydCBvZiBD
U1MzKQogCi1jbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxUcmFu
c2Zvcm1PcGVyYXRpb24+IHsKK2NsYXNzIFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPFRyYW5zZm9ybU9wZXJhdGlvbj4KK3sKIHB1YmxpYzoKLSAgICBUcmFuc2Zvcm1PcGVy
YXRpb24oKSA6IFJlZkNvdW50ZWQ8VHJhbnNmb3JtT3BlcmF0aW9uPigwKSB7IH0KICAgICB2aXJ0
dWFsIH5UcmFuc2Zvcm1PcGVyYXRpb24oKSB7fQogICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYpIGNvbnN0ID0gMDsKICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9uJiBvKSBjb25zdCB7IHJldHVybiAhKCp0
aGlzID09IG8pOyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiwg
Y29uc3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkgPSAwOwogICAgIAorICAgIHZpcnR1YWwgYm9v
bCBhcHBseShUcmFuc2Zvcm0zRCYsIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpIGNvbnN0
ID0gMDsKKyAgICAKICAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpID0gMDsKICAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVudGl0eU9w
ZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2Nh
bGVPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBp
c1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBi
b29sIGlzU2tld09wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBib29sIGlzVHJhbnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgaXNNYXRyaXhPcGVyYXRpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICB2aXJ0dWFsIGJvb2wgaXNQZXJzcGVjdGl2ZU9wZXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CiB9OwogCitjbGFzcyBJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlv
biA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRpb24KK3sKK3B1YmxpYzoKKyAgICBJZGVudGl0eVRy
YW5zZm9ybU9wZXJhdGlvbigpCisgICAge30KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaXNJZGVu
dGl0eU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB2aXJ0dWFs
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gby5pc0lkZW50aXR5T3BlcmF0aW9uKCk7CisgICAgfQorICAgIAor
ICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRT
aXplJiBib3JkZXJCb3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3Qg
VHJhbnNmb3JtT3BlcmF0aW9uKiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lk
ZW50aXR5ID0gZmFsc2UpCisgICAgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9Owor
CiBjbGFzcyBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1YmxpYyBUcmFuc2Zvcm1PcGVyYXRp
b24KIHsKIHB1YmxpYzoKICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbihkb3VibGUgc3gsIGRv
dWJsZSBzeSkKLSAgICA6IG1feChzeCksIG1feShzeSkKKyAgICA6IG1feChzeCksIG1feShzeSks
IG1feigxLmYpCiAgICAge30KLSAgICAgICAgCisKKyAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlv
bihkb3VibGUgc3gsIGRvdWJsZSBzeSwgZG91YmxlIHN6KQorICAgIDogbV94KHN4KSwgbV95KHN5
KSwgbV96KHN6KQorICAgIHt9CisgICAgCiAgICAgdmlydHVhbCBib29sIGlzU2NhbGVPcGVyYXRp
b24oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0KKyAgICAKICAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24mIG8pIGNvbnN0CiAgICAgewogICAgICAg
ICBpZiAoby5pc1NjYWxlT3BlcmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IFNjYWxlVHJh
bnNmb3JtT3BlcmF0aW9uKiBzID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2NhbGVUcmFuc2Zvcm1PcGVy
YXRpb24qPigmbyk7Ci0gICAgICAgICAgICByZXR1cm4gbV94ID09IHMtPm1feCAmJiBtX3kgPT0g
cy0+bV95OworICAgICAgICAgICAgcmV0dXJuIG1feCA9PSBzLT5tX3ggJiYgbV95ID09IHMtPm1f
eSAmJiBtX3ogPT0gcy0+bV96OwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgCisgICAgdmlydHVhbCBib29sIGFw
cGx5KFRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUp
IGNvbnN0CiAgICAgewotICAgICAgICB0cmFuc2Zvcm0uc2NhbGUobV94LCBtX3kpOworICAgICAg
ICB0cmFuc2Zvcm0uc2NhbGUzZCgoZmxvYXQpIG1feCwgKGZsb2F0KSBtX3ksIChmbG9hdCkgbV96
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQorICAgIAogICAgIHZpcnR1YWwgVHJh
bnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRv
dWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkgPSBmYWxzZSk7Ci0KKyAgICAKIHBy
aXZhdGU6CiAgICAgZG91YmxlIG1feDsKICAgICBkb3VibGUgbV95OworICAgIGRvdWJsZSBtX3o7
CiB9OwogCiBjbGFzcyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24gOiBwdWJsaWMgVHJhbnNmb3Jt
T3BlcmF0aW9uCiB7CiBwdWJsaWM6CiAgICAgUm90YXRlVHJhbnNmb3JtT3BlcmF0aW9uKGRvdWJs
ZSBhbmdsZSkKLSAgICA6IG1fYW5nbGUoYW5nbGUpCisgICAgOiBtX3goMC5mKSwgbV95KDAuZiks
IG1feigxLmYpLCBtX2FuZ2xlKGFuZ2xlKQogICAgIHt9CiAKKyAgICBSb3RhdGVUcmFuc2Zvcm1P
cGVyYXRpb24oZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlKQorICAg
IDogbV94KHgpLCBtX3koeSksIG1feih6KSwgbV9hbmdsZShhbmdsZSkKKyAgICB7fQorICAgIAog
ICAgIHZpcnR1YWwgYm9vbCBpc1JvdGF0ZU9wZXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRydWU7
IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzUm90YXRlT3BlcmF0aW9u
KCkpIHsKICAgICAgICAgICAgIGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogciA9IHN0
YXRpY19jYXN0PGNvbnN0IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbio+KCZvKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX2FuZ2xlID09IHItPm1fYW5nbGU7CisgICAgICAgICAgICByZXR1cm4gbV94
ID09IHItPm1feCAmJiBtX3kgPT0gci0+bV95ICYmIG1feiA9PSByLT5tX3ogJiYgbV9hbmdsZSA9
PSByLT5tX2FuZ2xlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgCi0gICAgdmlydHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBj
b25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKQorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFu
c2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAog
ICAgIHsKLSAgICAgICAgdHJhbnNmb3JtLnJvdGF0ZShtX2FuZ2xlKTsKKyAgICAgICAgdHJhbnNm
b3JtLnJvdGF0ZTNkKChmbG9hdCkgbV94LCAoZmxvYXQpIG1feSwgKGZsb2F0KSBtX3osIChmbG9h
dCkgbV9hbmdsZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKICAgICB2
aXJ0dWFsIFRyYW5zZm9ybU9wZXJhdGlvbiogYmxlbmQoY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
KiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb0lkZW50aXR5ID0gZmFsc2UpOwog
ICAgIAogcHJpdmF0ZToKKyAgICBkb3VibGUgbV94OworICAgIGRvdWJsZSBtX3k7CisgICAgZG91
YmxlIG1fejsKICAgICBkb3VibGUgbV9hbmdsZTsKIH07CiAKQEAgLTg2OCw3ICs5MTEsNyBAQAog
ICAgIHt9CiAgICAgCiAgICAgdmlydHVhbCBib29sIGlzU2tld09wZXJhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChvLmlzU2tl
d09wZXJhdGlvbigpKSB7CkBAIC04NzcsMTIgKzkyMCwxMyBAQAogICAgICAgICB9CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoQWZmaW5lVHJh
bnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNpemUmIGJvcmRlckJveFNpemUpCisgICAgCisg
ICAgdmlydHVhbCBib29sIGFwcGx5KFRyYW5zZm9ybTNEJiB0cmFuc2Zvcm0sIGNvbnN0IEludFNp
emUmIGJvcmRlckJveFNpemUpIGNvbnN0CiAgICAgewotICAgICAgICB0cmFuc2Zvcm0uc2tldyht
X2FuZ2xlWCwgbV9hbmdsZVkpOworICAgICAgICB0cmFuc2Zvcm0uc2tldygoZmxvYXQpIG1fYW5n
bGVYLCAoZmxvYXQpIG1fYW5nbGVZKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLQor
ICAgIAogICAgIHZpcnR1YWwgVHJhbnNmb3JtT3BlcmF0aW9uKiBibGVuZChjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb24qIGZyb20sIGRvdWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkg
PSBmYWxzZSk7CiAgICAgCiBwcml2YXRlOgpAQCAtODk0LDg1ICs5MzgsMTI2IEBACiB7CiBwdWJs
aWM6CiAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IExlbmd0aCYgdHgsIGNv
bnN0IExlbmd0aCYgdHkpCi0gICAgOiBtX3godHgpLCBtX3kodHkpCisgICAgOiBtX3godHgpLCBt
X3kodHkpLCBtX3ooTGVuZ3RoKCkpCiAgICAge30KKworICAgIFRyYW5zbGF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbihjb25zdCBMZW5ndGgmIHR4LCBjb25zdCBMZW5ndGgmIHR5LCBjb25zdCBMZW5ndGgm
IHR6KQorICAgIDogbV94KHR4KSwgbV95KHR5KSwgbV96KHR6KQorICAgIHt9CiAgICAgCiAgICAg
dmlydHVhbCBib29sIGlzVHJhbnNsYXRlT3BlcmF0aW9uKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsg
fQotCisgICAgCiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgVHJhbnNmb3JtT3Bl
cmF0aW9uJiBvKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG8uaXNUcmFuc2xhdGVPcGVyYXRp
b24oKSkgewogICAgICAgICAgICAgY29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKj4oJm8pOwot
ICAgICAgICAgICAgcmV0dXJuIG1feCA9PSB0LT5tX3ggJiYgbV95ID09IHQtPm1feTsKKyAgICAg
ICAgICAgIHJldHVybiBtX3ggPT0gdC0+bV94ICYmIG1feSA9PSB0LT5tX3kgJiYgbV96ID09IHQt
Pm1fejsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotCi0gICAgdmly
dHVhbCB2b2lkIGFwcGx5KEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXpl
JiBib3JkZXJCb3hTaXplKQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0z
RCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAogICAgIHsK
LSAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZShtX3guY2FsY0Zsb2F0VmFsdWUoYm9yZGVyQm94
U2l6ZS53aWR0aCgpKSwgbV95LmNhbGNGbG9hdFZhbHVlKGJvcmRlckJveFNpemUuaGVpZ2h0KCkp
KTsKKyAgICAgICAgLy8gVE9ETzogQ0ZNIC0gSG93IGRvIHdlIGRlYWwgd2l0aCBhIHogdmFsdWUg
YXMgYSBwZXJjZW50YWdlPworICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlM2QobV94LmNhbGNW
YWx1ZShib3JkZXJCb3hTaXplLndpZHRoKCkpLCBtX3kuY2FsY1ZhbHVlKGJvcmRlckJveFNpemUu
aGVpZ2h0KCkpLCBtX3ouY2FsY1ZhbHVlKDEpKTsKKyAgICAgICAgcmV0dXJuIG1feC50eXBlKCkg
PT0gUGVyY2VudCB8fCBtX3kudHlwZSgpID09IFBlcmNlbnQ7CiAgICAgfQotCisgICAgCiAgICAg
dmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
biogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsK
LQorICAgIAogcHJpdmF0ZToKICAgICBMZW5ndGggbV94OwogICAgIExlbmd0aCBtX3k7CisgICAg
TGVuZ3RoIG1fejsKIH07CiAKIGNsYXNzIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbiA6IHB1Ymxp
YyBUcmFuc2Zvcm1PcGVyYXRpb24KIHsKIHB1YmxpYzoKLSAgICBNYXRyaXhUcmFuc2Zvcm1PcGVy
YXRpb24oZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBk
b3VibGUgZikKLSAgICA6IG1fYShhKSwgbV9iKGIpLCBtX2MoYyksIG1fZChkKSwgbV9lKGUpLCBt
X2YoZikKLSAgICB7fQorICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIG0pCisgICAgeyBtX21hdHJpeCA9IG07IH0KICAgICAKKyAgICBNYXRyaXhUcmFu
c2Zvcm1PcGVyYXRpb24oZmxvYXQgYSwgZmxvYXQgYiwgZmxvYXQgYywgZmxvYXQgZCwgZmxvYXQg
ZSwgZmxvYXQgZikKKyAgICB7CisgICAgICAgIG1fbWF0cml4LnNldE1hdHJpeChhLGIsYyxkLGUs
Zik7CisgICAgfQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeE9wZXJhdGlvbigpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KLQorICAgIAogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChv
LmlzTWF0cml4T3BlcmF0aW9uKCkpIHsKICAgICAgICAgICAgIGNvbnN0IE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bio+KCZvKTsKLSAgICAgICAgICAgIHJldHVybiBtX2EgPT0gbS0+bV9hICYmIG1fYiA9PSBtLT5t
X2IgJiYgbV9jID09IG0tPm1fYyAmJiBtX2QgPT0gbS0+bV9kICYmIG1fZSA9PSBtLT5tX2UgJiYg
bV9mID09IG0tPm1fZjsKKyAgICAgICAgICAgIHJldHVybiBtX21hdHJpeCA9PSBtLT5tX21hdHJp
eDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQorICAgIAorICAgIHZp
cnR1YWwgYm9vbCBhcHBseShUcmFuc2Zvcm0zRCYgdHJhbnNmb3JtLCBjb25zdCBJbnRTaXplJiBi
b3JkZXJCb3hTaXplKSBjb25zdAorICAgIHsKKyAgICAgICAgdHJhbnNmb3JtLm11bHRMZWZ0KFRy
YW5zZm9ybTNEKG1fbWF0cml4KSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgdmlydHVhbCBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9w
ZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZh
bHNlKTsKKyAgICAKK3ByaXZhdGU6CisgICAgQWZmaW5lVHJhbnNmb3JtIG1fbWF0cml4OworfTsK
IAotICAgIHZpcnR1YWwgdm9pZCBhcHBseShBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29u
c3QgSW50U2l6ZSYgYm9yZGVyQm94U2l6ZSkKK2NsYXNzIE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0
aW9uIDogcHVibGljIFRyYW5zZm9ybU9wZXJhdGlvbgoreworcHVibGljOgorICAgIE1hdHJpeDNE
VHJhbnNmb3JtT3BlcmF0aW9uKGNvbnN0IFRyYW5zZm9ybTNEJiBtYXQpCisgICAgeyBtX21hdHJp
eCA9IG1hdDsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBpc01hdHJpeDNET3BlcmF0aW9uKCkg
Y29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiYgbykgY29uc3QKICAgICB7Ci0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBtYXRyaXgobV9hLCBtX2IsIG1fYywgbV9kLCBtX2UsIG1fZik7Ci0gICAgICAg
IHRyYW5zZm9ybSA9IG1hdHJpeCAqIHRyYW5zZm9ybTsKKyAgICAgICAgaWYgKG8uaXNNYXRyaXgz
RE9wZXJhdGlvbigpKSB7CisgICAgICAgICAgICBjb25zdCBNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbiogbSA9IHN0YXRpY19jYXN0PGNvbnN0IE1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uKj4o
Jm8pOworICAgICAgICAgICAgcmV0dXJuIG1fbWF0cml4ID09IG0tPm1fbWF0cml4OworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0KKyAgICAKKyAgICB2aXJ0dWFsIGJv
b2wgYXBwbHkoVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYgYm9yZGVyQm94
U2l6ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHRyYW5zZm9ybS5tdWx0TGVmdChtX21hdHJpeCk7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCiAgICAgdmlydHVhbCBUcmFuc2Zv
cm1PcGVyYXRpb24qIGJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91Ymxl
IHByb2dyZXNzLCBib29sIGJsZW5kVG9JZGVudGl0eSA9IGZhbHNlKTsKICAgICAKIHByaXZhdGU6
Ci0gICAgZG91YmxlIG1fYTsKLSAgICBkb3VibGUgbV9iOwotICAgIGRvdWJsZSBtX2M7Ci0gICAg
ZG91YmxlIG1fZDsKLSAgICBkb3VibGUgbV9lOwotICAgIGRvdWJsZSBtX2Y7CisgICAgVHJhbnNm
b3JtM0QgbV9tYXRyaXg7CiB9OwotCisgICAgCiBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25zCiB7
CiBwdWJsaWM6CisgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyhib29sIG1ha2VJZGVudGl0eSA9IGZh
bHNlKQorICAgIHsKKyAgICAgICAgaWYgKG1ha2VJZGVudGl0eSkKKyAgICAgICAgICAgIGFwcGVu
ZChuZXcgSWRlbnRpdHlUcmFuc2Zvcm1PcGVyYXRpb24oKSk7CisgICAgfQorICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJikgY29uc3Q7CiAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIG8pIGNvbnN0IHsKICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7IH0KLSAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0aW9ucy5zaXplKCk7IH0KKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRpb25zLnNpemUoKTsgfQogICAgIGNvbnN0IFJl
ZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcGVyYXRvcltdKHNpemVfdCBpKSBjb25zdCB7IHJl
dHVybiBtX29wZXJhdGlvbnMuYXQoaSk7IH0KLQorICAgIAogICAgIHZvaWQgYXBwZW5kKGNvbnN0
IFJlZlB0cjxUcmFuc2Zvcm1PcGVyYXRpb24+JiBvcCkgeyByZXR1cm4gbV9vcGVyYXRpb25zLmFw
cGVuZChvcCk7IH0KLQorICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFRyYW5zZm9y
bU9wZXJhdGlvbj4gPiBtX29wZXJhdGlvbnM7CiB9OwotCisgICAgCiBjbGFzcyBTdHlsZVRyYW5z
Zm9ybURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVRyYW5zZm9ybURhdGE+IHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHlsZVRyYW5zZm9ybURhdGE+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKG5ldyBTdHlsZVRyYW5zZm9ybURhdGEpOyB9CkBAIC0yMDQ4LDEyICsy
MjEzLDEyIEBACiAgICAgTGVuZ3RoIHRyYW5zZm9ybU9yaWdpblgoKSBjb25zdCB7IHJldHVybiBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0tPm1feDsgfQogICAgIExlbmd0aCB0cmFu
c2Zvcm1PcmlnaW5ZKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJh
bnNmb3JtLT5tX3k7IH0KICAgICBib29sIGhhc1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuICFy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2Zvcm0tPm1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7
IH0KLSAgICB2b2lkIGFwcGx5VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEludFNp
emUmIGJvcmRlckJveFNpemUpIGNvbnN0OworICAgIHZvaWQgYXBwbHlUcmFuc2Zvcm0oVHJhbnNm
b3JtM0QmLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplLCBib29sIGNoZWNrQXBwbHlUcmFu
c2Zvcm1PcmlnaW4pIGNvbnN0OwogICAgIGJvb2wgaGFzTWFzaygpIGNvbnN0IHsgcmV0dXJuIHJh
cmVOb25Jbmhlcml0ZWREYXRhLT5tX21hc2suaGFzSW1hZ2UoKSB8fCByYXJlTm9uSW5oZXJpdGVk
RGF0YS0+bV9tYXNrQm94SW1hZ2UuaGFzSW1hZ2UoKTsgfQogICAgIC8vIEVuZCBDU1MzIEdldHRl
cnMKIAogICAgIC8vIEFwcGxlLXNwZWNpZmljIHByb3BlcnR5IGdldHRlciBtZXRob2RzCiAgICAg
VHJhbnNpdGlvbiogYWNjZXNzVHJhbnNpdGlvbnMoKTsKICAgICBjb25zdCBUcmFuc2l0aW9uKiB0
cmFuc2l0aW9ucygpIGNvbnN0IHsgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5z
aXRpb247IH0KICAgICBpbnQgbGluZUNsYW1wKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVy
aXRlZERhdGEtPmxpbmVDbGFtcDsgfQogICAgIGJvb2wgdGV4dFNpemVBZGp1c3QoKSBjb25zdCB7
IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4dFNpemVBZGp1c3Q7IH0KICAgICBFVGV4dFNl
Y3VyaXR5IHRleHRTZWN1cml0eSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEVUZXh0U2Vj
dXJpdHk+KHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2VjdXJpdHkpOyB9CkluZGV4OiBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU3R5bGUuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclN0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsMTMgQEAKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAorLy8gY29tcGFyZSBmbG9hdGluZyBwb2ludHMsIHRha2luZyBuYW4g
aW50byBhY2NvdW50CitzdGF0aWMgaW5saW5lIGJvb2wgZmxvYXRpbmdQb2ludFZhbHVlc0VxdWFs
KGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIChpc25hbihhKSAmJiBpc25hbihiKSkg
fHwgKGEgPT0gYik7Cit9CisgICAgCisgICAgCiBib29sIE5pbmVQaWVjZUltYWdlOjpvcGVyYXRv
cj09KGNvbnN0IE5pbmVQaWVjZUltYWdlJiBvKSBjb25zdAogewogICAgIHJldHVybiBpbWFnZXNF
cXVpdmFsZW50KG1faW1hZ2UuZ2V0KCksIG8ubV9pbWFnZS5nZXQoKSkgJiYgbV9zbGljZXMgPT0g
by5tX3NsaWNlcyAmJiBtX2hvcml6b250YWxSdWxlID09IG8ubV9ob3Jpem9udGFsUnVsZSAmJgpA
QCAtNjEzLDEyICs2MjAsMTQgQEAKICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgCiAgICAgaWYg
KGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJuIG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0
aW9uKG1fYW5nbGVYIC0gbV9hbmdsZVggKiBwcm9ncmVzcywgbV9hbmdsZVkgLSBtX2FuZ2xlWSAq
IHByb2dyZXNzKTsKKyAgICAgICAgcmV0dXJuIG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKG1f
YW5nbGVYIC0gbV9hbmdsZVggKiBwcm9ncmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYW5nbGVZIC0gbV9hbmdsZVkgKiBwcm9ncmVzcyk7CiAgICAgCiAg
ICAgY29uc3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbiogZnJvbU9wID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU2tld1RyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwogICAgIGRvdWJsZSBmcm9tQW5nbGVY
ID0gZnJvbU9wID8gZnJvbU9wLT5tX2FuZ2xlWCA6IDA7CiAgICAgZG91YmxlIGZyb21BbmdsZVkg
PSBmcm9tT3AgPyBmcm9tT3AtPm1fYW5nbGVZIDogMDsKLSAgICByZXR1cm4gbmV3IFNrZXdUcmFu
c2Zvcm1PcGVyYXRpb24oZnJvbUFuZ2xlWCArIChtX2FuZ2xlWCAtIGZyb21BbmdsZVgpICogcHJv
Z3Jlc3MsIGZyb21BbmdsZVkgKyAobV9hbmdsZVkgLSBmcm9tQW5nbGVZKSAqIHByb2dyZXNzKTsK
KyAgICByZXR1cm4gbmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oZnJvbUFuZ2xlWCArIChtX2Fu
Z2xlWCAtIGZyb21BbmdsZVgpICogcHJvZ3Jlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZyb21BbmdsZVkgKyAobV9hbmdsZVkgLSBmcm9tQW5nbGVZKSAqIHByb2dy
ZXNzKTsKIH0KIAogVHJhbnNmb3JtT3BlcmF0aW9uKiBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b246OmJsZW5kKGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbiogZnJvbSwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9JZGVudGl0eSkKQEAgLTY0MCwxMzcgKzY0OSwyMjIgQEAKICAgICBpZiAo
ZnJvbSAmJiAhZnJvbS0+aXNNYXRyaXhPcGVyYXRpb24oKSkKICAgICAgICAgcmV0dXJuIHRoaXM7
CiAgICAgCisgICAgLy8gCiAgICAgaWYgKGJsZW5kVG9JZGVudGl0eSkKLSAgICAgICAgcmV0dXJu
IG5ldyBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24obV9hICogKDEuIC0gcHJvZ3Jlc3MpICsgcHJv
Z3Jlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYiAq
ICgxLiAtIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9jICogKDEuIC0gcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2QgKiAoMS4gLSBwcm9ncmVzcykgKyBwcm9ncmVzcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9lICogKDEuIC0gcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2YgKiAo
MS4gLSBwcm9ncmVzcykpOwotCisgICAgICAgIHJldHVybiBuZXcgTWF0cml4VHJhbnNmb3JtT3Bl
cmF0aW9uKChmbG9hdCkgKG1fbWF0cml4LmEoKSAqICgxLiAtIHByb2dyZXNzKSArIHByb2dyZXNz
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSAo
bV9tYXRyaXguYigpICogKDEuIC0gcHJvZ3Jlc3MpKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KSAobV9tYXRyaXguYygpICogKDEuIC0gcHJvZ3Jl
c3MpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0
KSAobV9tYXRyaXguZCgpICogKDEuIC0gcHJvZ3Jlc3MpICsgcHJvZ3Jlc3MpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIChtX21hdHJpeC5lKCkg
KiAoMS4gLSBwcm9ncmVzcykpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoZmxvYXQpIChtX21hdHJpeC5mKCkgKiAoMS4gLSBwcm9ncmVzcykpKTsKKyAgICAK
ICAgICBjb25zdCBNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IHN0YXRpY19jYXN0
PGNvbnN0IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbio+KGZyb20pOwotICAgIGRvdWJsZSBmcm9t
QSA9IGZyb21PcCA/IGZyb21PcC0+bV9hIDogMS47Ci0gICAgZG91YmxlIGZyb21CID0gZnJvbU9w
ID8gZnJvbU9wLT5tX2IgOiAwOwotICAgIGRvdWJsZSBmcm9tQyA9IGZyb21PcCA/IGZyb21PcC0+
bV9jIDogMDsKLSAgICBkb3VibGUgZnJvbUQgPSBmcm9tT3AgPyBmcm9tT3AtPm1fZCA6IDEuOwot
ICAgIGRvdWJsZSBmcm9tRSA9IGZyb21PcCA/IGZyb21PcC0+bV9lIDogMDsKLSAgICBkb3VibGUg
ZnJvbUYgPSBmcm9tT3AgPyBmcm9tT3AtPm1fZiA6IDA7CisgICAgZG91YmxlIGZyb21BID0gZnJv
bU9wID8gZnJvbU9wLT5tX21hdHJpeC5hKCkgOiAxLjsKKyAgICBkb3VibGUgZnJvbUIgPSBmcm9t
T3AgPyBmcm9tT3AtPm1fbWF0cml4LmIoKSA6IDA7CisgICAgZG91YmxlIGZyb21DID0gZnJvbU9w
ID8gZnJvbU9wLT5tX21hdHJpeC5jKCkgOiAwOworICAgIGRvdWJsZSBmcm9tRCA9IGZyb21PcCA/
IGZyb21PcC0+bV9tYXRyaXguZCgpIDogMS47CisgICAgZG91YmxlIGZyb21FID0gZnJvbU9wID8g
ZnJvbU9wLT5tX21hdHJpeC5lKCkgOiAwOworICAgIGRvdWJsZSBmcm9tRiA9IGZyb21PcCA/IGZy
b21PcC0+bV9tYXRyaXguZigpIDogMDsKICAgICAKLSAgICByZXR1cm4gbmV3IE1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbihmcm9tQSArIChtX2EgLSBmcm9tQSkgKiBwcm9ncmVzcywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQiArIChtX2IgLSBmcm9tQikgKiBw
cm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tQyAr
IChtX2MgLSBmcm9tQykgKiBwcm9ncmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmcm9tRCArIChtX2QgLSBmcm9tRCkgKiBwcm9ncmVzcywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRSArIChtX2UgLSBmcm9tRSkgKiBwcm9n
cmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tRiArICht
X2YgLSBmcm9tRikgKiBwcm9ncmVzcyk7CisgICAgcmV0dXJuIG5ldyBNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24oKGZsb2F0KSAoZnJvbUEgKyAobV9tYXRyaXguYSgpIC0gZnJvbUEpICogcHJvZ3Jl
c3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZy
b21CICsgKG1fbWF0cml4LmIoKSAtIGZyb21CKSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIChmcm9tQyArIChtX21hdHJpeC5jKCkg
LSBmcm9tQykgKiBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZsb2F0KSAoZnJvbUQgKyAobV9tYXRyaXguZCgpIC0gZnJvbUQpICogcHJvZ3Jlc3Mp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbG9hdCkgKGZyb21F
ICsgKG1fbWF0cml4LmUoKSAtIGZyb21FKSAqIHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQpIChmcm9tRiArIChtX21hdHJpeC5mKCkgLSBm
cm9tRikgKiBwcm9ncmVzcykpOwogfQogCitUcmFuc2Zvcm1PcGVyYXRpb24qIE1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uOjpibGVuZChjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb24qIGZyb20sIGRv
dWJsZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvSWRlbnRpdHkpCiB7CisgICAgLy8gVE9ETzogQ0ZN
IC0gTGV0J3Mgbm90IHdvcnJ5IGFib3V0IGRpcmVjdCBibGVuZCBvZiAzRCBtYXRyaWNlcyBqdXN0
IHlldAorICAgIHJldHVybiAwOwogfQorICAgIAorICAgIAorI3ByYWdtYSAgbWFyayAtCisgICAg
Citib29sIEtleWZyYW1lTGlzdDo6b3BlcmF0b3I9PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNv
bnN0Cit7CisgICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSAhPSBvLm1fa2V5ZnJhbWVzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVl
Pjo6Y29uc3RfaXRlcmF0b3IgaXQyID0gby5tX2tleWZyYW1lcy5iZWdpbigpOyAgICAKKyAgICBm
b3IgKFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQxID0gbV9rZXlmcmFt
ZXMuYmVnaW4oKTsgaXQxICE9IG1fa2V5ZnJhbWVzLmVuZCgpOyArK2l0MSkgeworICAgICAgICBp
ZiAoaXQxLT5rZXkgIT0gaXQyLT5rZXkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZTEgPSBpdDEtPnN0eWxlOworICAgICAgICBjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUyID0gaXQyLT5zdHlsZTsKKyAgICAgICAgaWYgKCEoc3R5bGUx
ID09IHN0eWxlMikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICsraXQyOwor
ICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAordm9pZAorS2V5ZnJhbWVMaXN0Ojpp
bnNlcnQoZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRlclN0eWxlJiBpblN0eWxlKQogeworICAgIGlm
IChpbktleSA8IDAgfHwgaW5LZXkgPiAxKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2tleWZyYW1lcy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9rZXlmcmFtZXNbaV0ua2V5ID09IGluS2V5KSB7CisgICAgICAgICAgICBtX2tleWZyYW1l
c1tpXS5zdHlsZSA9IGluU3R5bGU7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG1fa2V5ZnJhbWVzW2ldLmtleSA+IGluS2V5KSB7CisgICAgICAgICAgICAvLyBp
bnNlcnQgYmVmb3JlCisgICAgICAgICAgICBtX2tleWZyYW1lcy5pbnNlcnQoaSwgS2V5ZnJhbWVW
YWx1ZSgpKTsKKyAgICAgICAgICAgIG1fa2V5ZnJhbWVzW2ldLmtleSA9IGluS2V5OworICAgICAg
ICAgICAgbV9rZXlmcmFtZXNbaV0uc3R5bGUgPSBpblN0eWxlOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIGFwcGVuZAorICAgIG1fa2V5ZnJhbWVz
LmFwcGVuZChLZXlmcmFtZVZhbHVlKCkpOworICAgIG1fa2V5ZnJhbWVzW21fa2V5ZnJhbWVzLnNp
emUoKS0xXS5rZXkgPSBpbktleTsKKyAgICBtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkt
MV0uc3R5bGUgPSBpblN0eWxlOwogfQpAQCAtMTY5Niw3ICsxODE0LDcgQEAKICAgICB9CiB9CiAK
LXZvaWQgUmVuZGVyU3R5bGU6OmFwcGx5VHJhbnNmb3JtKEFmZmluZVRyYW5zZm9ybSYgdHJhbnNm
b3JtLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdAordm9pZCBSZW5kZXJTdHls
ZTo6YXBwbHlUcmFuc2Zvcm0oVHJhbnNmb3JtM0QmIHRyYW5zZm9ybSwgY29uc3QgSW50U2l6ZSYg
Ym9yZGVyQm94U2l6ZSwgYm9vbCBjaGVja0FwcGx5VHJhbnNmb3JtT3JpZ2luKSBjb25zdAogewog
ICAgIC8vIHRyYW5zZm9ybS1vcmlnaW4gYnJhY2tldHMgdGhlIHRyYW5zZm9ybSB3aXRoIHRyYW5z
bGF0ZSBvcGVyYXRpb25zLgogICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUg
b25seSB0cmFuc2Zvcm0gaXMgYSB0cmFuc2xhdGlvbiwgc2luY2UgdGhlIHRyYW5zZm9ybS1vcmln
aW4gaXMgaXJyZWxldmFudApAQCAtMTcwNCwxMCArMTgyMiwxMiBAQAogICAgIGJvb2wgYXBwbHlU
cmFuc2Zvcm1PcmlnaW4gPSBmYWxzZTsKICAgICB1bnNpZ25lZCBzID0gcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fdHJhbnNmb3JtLT5tX29wZXJhdGlvbnMuc2l6ZSgpOwogICAgIHVuc2lnbmVkIGk7
Ci0gICAgZm9yIChpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAgICBpZiAoIXJhcmVOb25Jbmhl
cml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5pc1RyYW5zbGF0ZU9wZXJh
dGlvbigpKSB7Ci0gICAgICAgICAgICBhcHBseVRyYW5zZm9ybU9yaWdpbiA9IHRydWU7Ci0gICAg
ICAgICAgICBicmVhazsKKyAgICBpZiAoY2hlY2tBcHBseVRyYW5zZm9ybU9yaWdpbikgeworICAg
ICAgICBmb3IgKGkgPSAwOyBpIDwgczsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXJhcmVOb25J
bmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV9vcGVyYXRpb25zW2ldLT5pc1RyYW5zbGF0ZU9w
ZXJhdGlvbigpKSB7CisgICAgICAgICAgICAgICAgYXBwbHlUcmFuc2Zvcm1PcmlnaW4gPSB0cnVl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogICAgIApJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM2OSw2ICszNjksNTYgQEAKIAkJMjk5OTg0QkUwREM4
NTk4NTAwRjhEMjYxIC8qIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5OTk4NEJDMERDODU5ODUwMEY4RDI2
MSAvKiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmggKi87IH07CiAJCTJEOTA2NjA2MEJFMTQx
RDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAyRDkwNjYwNDBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3Rh
dGUuY3BwICovOyB9OwogCQkyRDkwNjYwNzBCRTE0MUQ0MDA5NTY5OTggLyogTGF5b3V0U3RhdGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJEOTA2NjA1
MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTMxNkNDMTRDMEREOEZFN0IwMDg4OTlFMiAvKiBX
ZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzE2Q0MxNDAwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5jcHAg
Ki87IH07CisJCTMxNkNDMTREMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTQxMERE
OEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKKwkJMzE2Q0MxNEUwREQ4
RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgaW4gUmVzb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDMTQyMEREOEZFN0IwMDg4OTlFMiAvKiBX
ZWJLaXRDU1NNYXRyaXguaWRsICovOyB9OworCQkzMTZDQzE0RjBERDhGRTdCMDA4ODk5RTIgLyog
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxNDMwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmNwcCAqLzsgfTsKKwkJMzE2Q0MxNTAwREQ4RkU3QjAwODg5OUUyIC8qIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzMTZDQzE0NDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWUuaCAqLzsgfTsKKwkJMzE2Q0MxNTEwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlLmlkbCBpbiBSZXNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzE2Q0MxNDUwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9y
bVZhbHVlLmlkbCAqLzsgfTsKKwkJMzE2Q0MxNjkwREQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9y
bTNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
NkNDMTY3MEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5jcHAgKi87IH07CisJCTMxNkND
MTZBMEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0MxNjgwREQ5MTRBNTAwODg5OUUyIC8qIFRy
YW5zZm9ybTNELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJMzE2Q0M0NzYwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZD
QzQ2QTBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAqLzsg
fTsKKwkJMzE2Q0M0NzcwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZh
bHVlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2
Q0M0NkIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1tICov
OyB9OworCQkzMTZDQzQ3ODBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2Q0M0NkMwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZh
bHVlSW50ZXJuYWwuaCAqLzsgfTsKKwkJMzE2Q0M1ODgwRERCODkzRjAwODg5OUUyIC8qIEpTV2Vi
S2l0Q1NTTWF0cml4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxNkNDNTg2MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAg
Ki87IH07CisJCTMxNkNDNTg5MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2Q0M1ODcw
RERCODkzRjAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CisJCTMxNkNDNThF
MEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkNDNThCMEREQjg5NUYwMDg4OTlFMiAv
KiBET01XZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKKwkJMzE2Q0M1OEYwRERCODk1RjAwODg5OUUy
IC8qIERPTVdlYktpdENTU01hdHJpeC5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDMxNkNDNThDMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NN
YXRyaXgubW0gKi87IH07CisJCTMxNkNDNTkwMEREQjg5NUYwMDg4OTlFMiAvKiBET01XZWJLaXRD
U1NNYXRyaXhJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzE2Q0M1OEQwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeElu
dGVybmFsLmggKi87IH07CiAJCTM3MUY0RjQwMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGM0Uw
RDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMzcxRjRGNDEwRDI1QjlBRjAwRUNFMEQ1IC8qIEZvbnRE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3
MUY0RjNGMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5jcHAgKi87IH07CiAJCTM3MUY0RkZD
MEQyNUU3RjMwMEVDRTBENSAvKiBTZWdtZW50ZWRGb250RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzcxRjRGRkEwRDI1RTdGMzAwRUNFMEQ1IC8q
IFNlZ21lbnRlZEZvbnREYXRhLmggKi87IH07CkBAIC0zNjkzLDggKzM3NDMsNiBAQAogCQlCQzk4
NTQzRTBDRDNEOThDMDAwNjlCQzEgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzk4NTQzQzBDRDNEOThCMDAwNjlCQzEgLyogSlND
b25zb2xlLmggKi87IH07CiAJCUJDOThBMjdEMEMwQzk5NTAwMDRCRUJGNyAvKiBKU1N0eWxlU2hl
ZXRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkM5OEEyN0MwQzBDOTk1MDAwNEJFQkY3IC8qIEpTU3R5bGVTaGVldEN1c3RvbS5jcHAgKi87
IH07CiAJCUJDOTk4MTJFMERCRTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5OTgxMkQw
REJFODA3QTAwOENFOUVGIC8qIERPTUFic3RyYWN0Vmlld0ZyYW1lLmggKi87IH07Ci0JCUJDOUFE
RDIzMENDNDAzMjYwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM5QUREMjIwQ0M0MDMyNjAwMDk4QzRD
IC8qIENTU1RyYW5zZm9ybVZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKLQkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8qIENTU1RyYW5zZm9y
bVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDOUFERDdGMENDNDA5MjIwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi87IH07
CiAJCUJDQTE2OUEyMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2
OUEwMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmNwcCAqLzsg
fTsKIAkJQkNBMTY5QTMwQkZENTVCNDAwMTlDQTc2IC8qIEpTSFRNTFRhYmxlQ2FwdGlvbkVsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDQTE2
OUExMEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi87IH07
CiAJCUJDQTM3ODE2MEQxNUM2NDYwMEI3OTNENiAvKiBQYXVzZWRUaW1lb3V0cy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0EzNzgxNDBEMTVDNjQ2
MDBCNzkzRDYgLyogUGF1c2VkVGltZW91dHMuY3BwICovOyB9OwpAQCAtNDgxOSw2ICs0ODY3LDU2
IEBACiAJCTJEOTA2NjA1MEJFMTQxRDQwMDk1Njk5OCAvKiBMYXlvdXRTdGF0ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5b3V0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMkQ5MDY2MEIwNjY1RDkzNzAwNkI2RjFBIC8qIENsaXBib2FyZE1hYy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlw
Ym9hcmRNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFi
cyA9IDA7IH07CiAJCTJEOTA2NjBDMDY2NUQ5MzcwMDZCNkYxQSAvKiBDbGlwYm9hcmRNYWMubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBDbGlwYm9hcmRNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
dXNlc1RhYnMgPSAwOyB9OworCQkzMTZDQzE0MDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NT
TWF0cml4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdENT
U01hdHJpeC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTQxMEREOEZF
N0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV2ViS2l0Q1NTTWF0cml4Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTMxNkNDMTQyMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdlYktpdENTU01hdHJpeC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxNkNDMTQzMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDMTQ0
MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzE0NTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdENTU1Ry
YW5zZm9ybVZhbHVlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0MxNjcw
REQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9ybTNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRyYW5zZm9ybTNELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMzE2Q0MxNjgwREQ5MTRBNTAwODg5OUUyIC8qIFRyYW5zZm9ybTNELmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRyYW5zZm9ybTNELmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTMxNkNDNDU2MEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU1RyYW5z
Zm9ybVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTZDQzQ1NzBEREFGQ0FBMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkNDNDZBMEREQUZDREIwMDg4OTlF
MiAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkzMTZDQzQ2QjBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBE
T01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzE2Q0M0NkMwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVl
SW50ZXJuYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRE9NV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWVJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkz
MTZDQzU4NjBEREI4OTNGMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NNYXRyaXguY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJLaXRDU1NNYXRyaXguY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzMTZDQzU4NzBEREI4OTNGMDA4ODk5RTIgLyogSlNX
ZWJLaXRDU1NNYXRyaXguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJL
aXRDU1NNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M1OEIwRERC
ODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01XZWJLaXRDU1NNYXRyaXguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMzE2Q0M1OEMwRERCODk1RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeC5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IERPTVdlYktpdENTU01h
dHJpeC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2Q0M1OEQwRERCODk1RjAw
ODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTM3MUY0RjNFMEQyNUI5QUYwMEVDRTBENSAvKiBGb250RGF0YS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGb250RGF0YS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEYzRjBEMjVCOUFGMDBFQ0UwRDUgLyogRm9udERhdGEu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udERhdGEuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzFGNEZGQTBEMjVFN0YzMDBFQ0UwRDUgLyog
U2VnbWVudGVkRm9udERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Vn
bWVudGVkRm9udERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTc5OTYsOCAr
ODA5NCw2IEBACiAJCUJDOTg1NDNDMENEM0Q5OEIwMDA2OUJDMSAvKiBKU0NvbnNvbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29uc29sZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQzk4QTI3QzBDMEM5OTUwMDA0QkVCRjcgLyogSlNTdHlsZVNoZWV0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3R5bGVT
aGVldEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDOTk4MTJEMERC
RTgwN0EwMDhDRTlFRiAvKiBET01BYnN0cmFjdFZpZXdGcmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBET01BYnN0cmFjdFZpZXdGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlCQzlBREQyMjBDQzQwMzI2MDAwOThDNEMgLyogQ1NTVHJhbnNmb3JtVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1RyYW5zZm9ybVZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUJDOUFERDdGMENDNDA5MjIwMDA5OEM0
QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTVHJhbnNmb3JtVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0ExNjlBMDBCRkQ1NUI0MDAxOUNBNzYgLyogSlNIVE1MVGFibGVDYXB0aW9uRWxlbWVu
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MVGFibGVD
YXB0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTE2OUEx
MEJGRDU1QjQwMDE5Q0E3NiAvKiBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxUYWJsZUNhcHRpb25FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDQTM3ODE0MEQxNUM2NDYwMEI3OTNENiAvKiBQ
YXVzZWRUaW1lb3V0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQ
YXVzZWRUaW1lb3V0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05MTQ1LDYg
KzkyNDEsMTggQEAKIAkJODU5NjdEQ0EwQUE4QkYwRjAwNUZFREVFIC8qIENTUyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMzE2Q0M1OEIwRERCODk1RjAw
ODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeC5oICovLAorCQkJCTMxNkNDNThDMEREQjg5NUYw
MDg4OTlFMiAvKiBET01XZWJLaXRDU1NNYXRyaXgubW0gKi8sCisJCQkJMzE2Q0M1OEQwRERCODk1
RjAwODg5OUUyIC8qIERPTVdlYktpdENTU01hdHJpeEludGVybmFsLmggKi8sCisJCQkJMzE2Q0M0
NkEwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggKi8sCisJ
CQkJMzE2Q0M0NkIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVl
Lm1tICovLAorCQkJCTMxNkNDNDZDMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZUludGVybmFsLmggKi8sCiAJCQkJODUwMzJEQzMwQUE4QzlCRTAwN0QzQjdEIC8q
IERPTUNTU0NoYXJzZXRSdWxlLmggKi8sCiAJCQkJODUwMzJEQzQwQUE4QzlCRTAwN0QzQjdEIC8q
IERPTUNTU0NoYXJzZXRSdWxlLm1tICovLAogCQkJCTg1MDMyREM1MEFBOEM5QkUwMDdEM0I3RCAv
KiBET01DU1NGb250RmFjZVJ1bGUuaCAqLywKQEAgLTk3MzMsNiArOTg0MSwxMiBAQAogCQk4NUFG
QTdBQjBBQUYzQkIwMDBFODQzMDUgLyogRXZlbnRzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKIAkJCQk4NUFGQTgyMDBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZl
bnQuaCAqLywKIAkJCQk4NUFGQTgyMTBBQUY1MjhBMDBFODQzMDUgLyogRE9NRXZlbnQubW0gKi8s
CiAJCQkJODVEMkFENjcwQUIxQTQwQTAwQzMxM0VBIC8qIERPTUV2ZW50TGlzdGVuZXIuaCAqLywK
QEAgLTExMDIzLDYgKzExMTM3LDE0IEBACiAJCUE4M0I3OTBFMENDQUZGOTcwMDBCMDgyNSAvKiBD
U1MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTMxNkND
NTg2MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktpdENTU01hdHJpeC5jcHAgKi8sCisJCQkJMzE2
Q0M1ODcwRERCODkzRjAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggKi8sCisJCQkJMzE2
Q0M0NTYwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuY3BwICov
LAorCQkJCTMxNkNDNDU3MEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmggKi8sCiAJCQkJOTMwNzA1RDcwOUUwQzlCNzAwQjE3RkU0IC8qIEpTQ291bnRlci5jcHAg
Ki8sCiAJCQkJOTMwNzA1RDkwOUUwQzlCRjAwQjE3RkU0IC8qIEpTQ291bnRlci5oICovLAogCQkJ
CUJDNDZDMUYwMEMwRERDOEYwMDIwQ0ZDMyAvKiBKU0NTU0NoYXJzZXRSdWxlLmNwcCAqLywKQEAg
LTExMTE0LDYgKzExMjM2LDEwIEBACiAJCUE4M0I3OTEyMENDQjAwM0YwMDBCMDgyNSAvKiBFdmVu
dHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTE0RTgz
NzgzMDlGODVEMUMwMEI4NUFFNCAvKiBKU0V2ZW50LmNwcCAqLywKIAkJCQkxNEU4Mzc4RDA5Rjg1
RDRGMDBCODVBRTQgLyogSlNFdmVudC5oICovLAogCQkJCUJDNjBEOUJEMEQyQTI2OUEwMEI5OTE4
RiAvKiBKU0V2ZW50RXhjZXB0aW9uLmNwcCAqLywKQEAgLTExODUzLDYgKzExOTc5LDggQEAKIAkJ
QjJBMDE1OTEwQUY2Q0Q1MzAwNkJDRTBFIC8qIGdyYXBoaWNzICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZDQzE2NzBERDkxNEE1MDA4ODk5RTIgLyog
VHJhbnNmb3JtM0QuY3BwICovLAorCQkJCTMxNkNDMTY4MEREOTE0QTUwMDg4OTlFMiAvKiBUcmFu
c2Zvcm0zRC5oICovLAogCQkJCUIyMzU0MEYwMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVu
Y2F0b3IuY3BwICovLAogCQkJCUIyMzU0MEYxMEQwMDc4MkUwMDIzODJGQSAvKiBTdHJpbmdUcnVu
Y2F0b3IuaCAqLywKIAkJCQlCMkMzREE0RjBEMDA2Q0Q2MDBFRjZGMjYgLyogRm9udC5jcHAgKi8s
CkBAIC0xMjUwOSw2ICsxMjYzNywxOCBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyog
Y3NzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzMTZD
QzE0MDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmNwcCAqLywKKwkJCQkzMTZD
QzE0MTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTTWF0cml4LmggKi8sCisJCQkJMzE2Q0Mx
NDIwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU01hdHJpeC5pZGwgKi8sCisJCQkJMzE2Q0Mx
NDMwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLywKKwkJ
CQkzMTZDQzE0NDBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCAq
LywKKwkJCQkzMTZDQzE0NTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuaWRsICovLAogCQkJCUE4MEU2Q0RBMEExOTg5Q0EwMDdGQjhDNSAvKiBDb3VudGVyLmggKi8s
CiAJCQkJOTMwNzA1QzcwOUUwQzk1RjAwQjE3RkU0IC8qIENvdW50ZXIuaWRsICovLAogCQkJCUE4
MEU2Q0JCMEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NCb3JkZXJJbWFnZVZhbHVlLmNwcCAqLywKQEAg
LTEyNTkzLDggKzEyNzMzLDYgQEAKIAkJCQk4NThDMzkxMDBBQThGRjAwMDBCMTg3QTQgLyogQ1NT
U3R5bGVTaGVldC5pZGwgKi8sCiAJCQkJQkM4MEM5ODUwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1Rp
bWluZ0Z1bmN0aW9uVmFsdWUuY3BwICovLAogCQkJCUJDODBDOTg2MENEMjk0RUUwMEEwQjdCMyAv
KiBDU1NUaW1pbmdGdW5jdGlvblZhbHVlLmggKi8sCi0JCQkJQkM5QUREN0YwQ0M0MDkyMjAwMDk4
QzRDIC8qIENTU1RyYW5zZm9ybVZhbHVlLmNwcCAqLywKLQkJCQlCQzlBREQyMjBDQzQwMzI2MDAw
OThDNEMgLyogQ1NTVHJhbnNmb3JtVmFsdWUuaCAqLywKIAkJCQkzNzFGNTNFODBEMjcwNEY5MDBF
Q0UwRDUgLyogQ1NTVW5pY29kZVJhbmdlVmFsdWUuY3BwICovLAogCQkJCTM3MUY1M0U3MEQyNzA0
RjkwMEVDRTBENSAvKiBDU1NVbmljb2RlUmFuZ2VWYWx1ZS5oICovLAogCQkJCUE4MEU2Q0NFMEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NVbmtub3duUnVsZS5oICovLApAQCAtMTI4NDYsNiArMTI5ODQs
MTIgQEAKIAkJRjUyM0QzMjQwMkRFNDQ3ODAxODYzNUNBIC8qIGRvbSAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJQThDNEE3RkMwOUQ1NjMyNzAwMDNBQzhE
IC8qIEF0dHIuY3BwICovLAogCQkJCUE4QzRBN0ZCMDlENTYzMjcwMDAzQUM4RCAvKiBBdHRyLmgg
Ki8sCiAJCQkJOTNFRUMxRTUwOUMyODc3NzAwQzUxNUQxIC8qIEF0dHIuaWRsICovLApAQCAtMTMw
OTUsNyArMTMyMzksNiBAQAogCQkJCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHls
ZVNlbGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBODAwNzBBMTk1MTZFMDBBOEVGNUYg
LyogQ1NTU3R5bGVTaGVldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4MEM5ODgwQ0QyOTRFRTAw
QTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCUJD
OUFERDIzMENDNDAzMjYwMDA5OEM0QyAvKiBDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJREQ3Q0RGMjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBODBFNkNFRTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NjU4MTUxMDlEMTMwNDMwMDBFNjFENyAvKiBDU1NWYWx1ZUtl
eXdvcmRzLmggaW4gSGVhZGVycyAqLywKQEAgLTE0OTkyLDYgKzE1MTM1LDMxIEBACiAJCQkJQkNF
RkUxRUIwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkNFOTlFQzQwRENBNjI0MTAwMTgyNjgzIC8qIEpTWFNMVFByb2Nlc3NvckNvbnN0cnVj
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0JGQjUzRDBEQ0QyOUNGMDAxOUIzRTUgLyogSlNE
T01XaW5kb3dTaGVsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0MxNDcwREQ4RkU3QjAwODg5
OUUyIC8qIFdlYktpdENTU0tleWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0Mx
NEEwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU0tleWZyYW1lc1J1bGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTMxNkNDMTREMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaCBp
biBIZWFkZXJzICovLAorCQkJCTMxNkNDMTUwMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0MxNkEwREQ5MTRBNTAwODg5
OUUyIC8qIFRyYW5zZm9ybTNELmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzNFODBEREE2N0Q5
MDA4ODk5RTIgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMx
NkNDM0VCMEREQTY3REEwMDg4OTlFMiAvKiBXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTMxNkNDM0ZFMEREQTZDMjAwMDg4OTlFMiAvKiBKU1dlYktpdEFuaW1hdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzQwMDBEREE2QzIwMDA4ODk5RTIgLyog
SlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDBBMERE
QTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRBbmltYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMzE2Q0M0MEMwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50
SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDBEMEREQTZDNTQwMDg4OTlFMiAv
KiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkNDNDBG
MEREQTZDNTQwMDg4OTlFMiAvKiBET01XZWJLaXRUcmFuc2l0aW9uRXZlbnRJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NTkwRERBRkNBQTAwODg5OUUyIC8qIEpTV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzQ1QjBEREFGQ0FBMDA4ODk5
RTIgLyogSlNXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZD
QzQ1RjBEREFGQ0FBMDA4ODk5RTIgLyogSlNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMzE2Q0M0NkQwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU0tl
eWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NkYwRERBRkNEQjAwODg5OUUy
IC8qIERPTVdlYktpdENTU0tleWZyYW1lUnVsZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkzMTZDQzQ3MDBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NzIwRERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktp
dENTU0tleWZyYW1lc1J1bGVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M0NzYw
RERBRkNEQjAwODg5OUUyIC8qIERPTVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkzMTZDQzQ3ODBEREFGQ0RCMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTVHJhbnNm
b3JtVmFsdWVJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMzE2Q0M1ODkwRERCODkzRjAw
ODg5OUUyIC8qIEpTV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZDQzU4
RTBEREI4OTVGMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTTWF0cml4LmggaW4gSGVhZGVycyAqLywK
KwkJCQkzMTZDQzU5MDBEREI4OTVGMDA4ODk5RTIgLyogRE9NV2ViS2l0Q1NTTWF0cml4SW50ZXJu
YWwuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHBy
b2Nlc3NpbmcgPSAwOwogCQl9OwpAQCAtMTUxMDUsNiArMTUyNzMsMTIgQEAKIAkJCQkxQUIxQUU3
QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJ
CQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291
cmNlcyAqLywKIAkJCQlCQ0VGRTFERDBEQ0E1Q0ZEMDA3MzkyMTkgLyogWFNMVFByb2Nlc3Nvci5p
ZGwgaW4gUmVzb3VyY2VzICovLAorCQkJCTMxNkNDMTQ4MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJL
aXRDU1NLZXlmcmFtZVJ1bGUuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzE0QjBERDhG
RTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5pZGwgaW4gUmVzb3VyY2VzICov
LAorCQkJCTMxNkNDMTRFMEREOEZFN0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsIGlu
IFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzE1MTBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQkzMTZDQzNFOTBEREE2N0RB
MDA4ODk5RTIgLyogV2ViS2l0QW5pbWF0aW9uRXZlbnQuaWRsIGluIFJlc291cmNlcyAqLywKKwkJ
CQkzMTZDQzNFQzBEREE2N0RBMDA4ODk5RTIgLyogV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbCBp
biBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CkBAIC0xNTI0NSw3ICsxNTQxOSw2IEBACiAJCQkJQkM3NzJCM0YwQzRF
QTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QThFQTgwMDgwQTE5NTE2RTAwQThFRjVGIC8qIENTU1N0eWxlU2hlZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM4MEM5ODcwQ0QyOTRFRTAwQTBCN0IzIC8qIENTU1RpbWluZ0Z1bmN0aW9uVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQkM5QUREODAwQ0M0MDkyMjAwMDk4QzRDIC8qIENT
U1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MEU2Q0U0MEExOTg5Q0Ew
MDdGQjhDNSAvKiBDU1NWYWx1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJDM0RBMjcw
RDAwNkMxRDAwRUY2RjI2IC8qIENTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNCMTZD
MTcwOTc5QzNCRDAwNDY3NzQxIC8qIENhY2hlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMTY2OTUs
NiArMTY4NjgsMjUgQEAKIAkJCQlCQ0VGRTFFQTBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJv
Y2Vzc29yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRTk5RUMzMERDQTYyNDEwMDE4MjY4MyAv
KiBKU1hTTFRQcm9jZXNzb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0JG
QjUzQzBEQ0QyOUNGMDAxOUIzRTUgLyogSlNET01XaW5kb3dTaGVsbC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkzMTZDQzE0NjBERDhGRTdCMDA4ODk5RTIgLyogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNkNDMTQ5MEREOEZFN0IwMDg4OTlFMiAvKiBXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNkNDMTRDMEREOEZF
N0IwMDg4OTlFMiAvKiBXZWJLaXRDU1NNYXRyaXguY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2
Q0MxNEYwREQ4RkU3QjAwODg5OUUyIC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTMxNkNDMTY5MEREOTE0QTUwMDg4OTlFMiAvKiBUcmFuc2Zvcm0zRC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzNFNzBEREE2N0Q5MDA4ODk5RTIgLyogV2ViS2l0
QW5pbWF0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0MzRUEwRERBNjdEQTAw
ODg5OUUyIC8qIFdlYktpdFRyYW5zaXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkz
MTZDQzNGRDBEREE2QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRBbmltYXRpb25FdmVudC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkzMTZDQzNGRjBEREE2QzIwMDA4ODk5RTIgLyogSlNXZWJLaXRUcmFu
c2l0aW9uRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2Q0M0MEIwRERBNkM1NDAwODg5
OUUyIC8qIERPTVdlYktpdEFuaW1hdGlvbkV2ZW50Lm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2
Q0M0MEUwRERBNkM1NDAwODg5OUUyIC8qIERPTVdlYktpdFRyYW5zaXRpb25FdmVudC5tbSBpbiBT
b3VyY2VzICovLAorCQkJCTMxNkNDNDU4MEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU0tl
eWZyYW1lUnVsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ1QTBEREFGQ0FBMDA4ODk5
RTIgLyogSlNXZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMx
NkNDNDVFMEREQUZDQUEwMDg4OTlFMiAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTMxNkNDNDZFMEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRD
U1NLZXlmcmFtZVJ1bGUubW0gaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzQ3MTBEREFGQ0RCMDA4
ODk5RTIgLyogRE9NV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTMxNkNDNDc3MEREQUZDREIwMDg4OTlFMiAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5t
bSBpbiBTb3VyY2VzICovLAorCQkJCTMxNkNDNTg4MEREQjg5M0YwMDg4OTlFMiAvKiBKU1dlYktp
dENTU01hdHJpeC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkzMTZDQzU4RjBEREI4OTVGMDA4ODk5
RTIgLyogRE9NV2ViS2l0Q1NTTWF0cml4Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NT
dHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHls
ZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsNyBAQAogI2luY2x1ZGUg
IlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKICNp
bmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgImxvYWRlci5oIgogI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KQEAgLTQ0ODEsMTIyICs0NTUwLDcgQEAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNmb3JtOiB7CiAgICAgICAgIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHRyYW5z
Zm9ybSwgVHJhbnNmb3JtKTsKICAgICAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
OwotICAgICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKLSAgICAgICAgICAg
IENTU1ZhbHVlTGlzdCogbGlzdCA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHZhbHVlKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBsaXN0LT5sZW5ndGgoKTsKLSAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgICAgICAgICBD
U1NUcmFuc2Zvcm1WYWx1ZSogdmFsID0gc3RhdGljX2Nhc3Q8Q1NTVHJhbnNmb3JtVmFsdWUqPihs
aXN0LT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKGkpKTsKLSAgICAgICAgICAgICAgICBDU1NWYWx1
ZUxpc3QqIHZhbHVlcyA9IHZhbC0+dmFsdWVzKCk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSk7Ci0gICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsLT50eXBlKCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlNj
YWxlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFu
c2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgc3ggPSAxLjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUg
c3kgPSAxLjA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0gQ1NT
VHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzeSA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3gg
PSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPnR5cGUoKSA9PSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVUcmFuc2Zvcm1P
cGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlcy0+
bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzeSA9IHN4OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRpb24qIHNjYWxlID0g
bmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHN4LCBzeSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25zLmFwcGVuZChzY2FsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIENT
U1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVy
YXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
b2s7Ci0gICAgICAgICAgICAgICAgICAgICAgICBMZW5ndGggdHggPSBMZW5ndGgoMCwgRml4ZWQp
OwotICAgICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHR5ID0gTGVuZ3RoKDAsIEZpeGVkKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPnR5cGUoKSA9PSBDU1NUcmFuc2Zvcm1W
YWx1ZTo6VHJhbnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eSA9IGNvbnZlcnRUb0xlbmd0aChmaXJzdFZhbHVlLCBtX3N0eWxlLCAmb2spOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR4ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0VmFsdWUsIG1fc3R5bGUsICZvayk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHZhbHVlcy0+bGVuZ3RoKCkgPiAxKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0
aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSA9IGNvbnZlcnRU
b0xlbmd0aChzZWNvbmRWYWx1ZSwgbV9zdHlsZSwgJm9rKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKiB0cmFuc2xhdGUgPSBuZXcgVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uKHR4LCB0eSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25zLmFwcGVuZCh0cmFuc2xhdGUpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2FzZSBD
U1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBkb3VibGUgYW5nbGUgPSBmaXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgp
OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoZmlyc3RWYWx1ZS0+cHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpD
U1NfR1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IGdyYWQyZGVnKGFu
Z2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiog
cm90YXRlID0gbmV3IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbihhbmdsZSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChyb3RhdGUpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAg
ICAgICAgICAgICAgICAgY2FzZSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVy
YXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgQ1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZ
VHJhbnNmb3JtT3BlcmF0aW9uOiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgYW5n
bGVYID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZVkgPSAwOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFuZ2xlID0gZmlyc3RWYWx1ZS0+Z2V0RG91Ymxl
VmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYW5nbGUgPSByYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGZpcnN0VmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0dSQUQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBncmFk
MmRlZyhhbmdsZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT50eXBlKCkgPT0g
Q1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJhbnNmb3JtT3BlcmF0aW9uKQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFuZ2xlWSA9IGFuZ2xlOwotICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVYID0gYW5nbGU7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbC0+dHlwZSgpID09IENTU1RyYW5zZm9ybVZh
bHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZXMtPmxlbmd0aCgpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGVZID0gc2Vjb25kVmFs
dWUtPmdldERvdWJsZVZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1JBRCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkg
PSByYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHNlY29uZFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19HUkFEKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ2xl
WSA9IGdyYWQyZGVnKGFuZ2xlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmdsZVg7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBTa2V3
VHJhbnNmb3JtT3BlcmF0aW9uKiBza2V3ID0gbmV3IFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24oYW5n
bGVYLCBhbmdsZVkpOwotICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQo
c2tldyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICBjYXNlIENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb246IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2
ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFs
dWVzLT5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMikpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZvdXJ0aFZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZXMtPml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMykpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIGZpZnRoVmFsdWUgPSBz
dGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbHVlcy0+aXRlbVdpdGhvdXRCb3VuZHND
aGVjayg0KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2l4
dGhWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWVzLT5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE1hdHJpeFRyYW5z
Zm9ybU9wZXJhdGlvbiogbWF0cml4ID0gbmV3IE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbihmaXJz
dFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHRoaXJkVmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm91cnRoVmFsdWUtPmdldERvdWJsZVZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmlmdGhWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXh0aFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKG1hdHJpeCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfSAgIAotICAgICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQorICAgICAgICBjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKHZhbHVlLCBtX3N0eWxl
LCBvcGVyYXRpb25zKTsKICAgICAgICAgbV9zdHlsZS0+c2V0VHJhbnNmb3JtKG9wZXJhdGlvbnMp
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNTMyMiw0ICs1MzYzLDE5MSBAQAogICAgIH0K
IH0KIAorYm9vbCBDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25zKENT
U1ZhbHVlKiBpblZhbHVlLCBSZW5kZXJTdHlsZSogaW5TdHlsZSwgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7
CisgICAgaWYgKGluVmFsdWUgJiYgIWluVmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkgeworICAg
ICAgICBDU1NWYWx1ZUxpc3QqIGxpc3QgPSBzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpblZh
bHVlKTsKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGxpc3QtPmxlbmd0aCgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZSogdmFsID0gc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUqPihsaXN0LT5pdGVtKGkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIGZpcnN0VmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bC0+aXRlbSgwKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodmFsLT5vcGVy
YXRpb25UeXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAg
ICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZVHJhbnNmb3JtT3BlcmF0
aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxl
WlRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTY2FsZTNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZSBzeCA9IDEuMDsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHN5ID0gMS4w
OworICAgICAgICAgICAgICAgICAgICBkb3VibGUgc3ogPSAxLjA7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
U2NhbGVaVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBm
aXJzdFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
ICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVZ
VHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBmaXJzdFZh
bHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsgCisgICAg
ICAgICAgICAgICAgICAgICAgICBzeCA9IGZpcnN0VmFsdWUtPmdldERvdWJsZVZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgIT0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRp
Y19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDIpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3ogPSB0aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAodmFsLT5sZW5ndGgoKSA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWUqIHNlY29uZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWUqPih2YWwtPml0ZW0oMSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
eSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3kgPSBzeDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU2NhbGVUcmFuc2Zvcm1PcGVyYXRp
b24qIHNjYWxlID0gbmV3IFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uKHN4LCBzeSwgc3opOworICAg
ICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChzY2FsZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246CisgICAg
ICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5z
Zm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZh
bHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2Ug
V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVpUcmFuc2Zvcm1PcGVyYXRpb246Cisg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlM0RU
cmFuc2Zvcm1PcGVyYXRpb246IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBvayA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIExlbmd0aCB0eCA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAg
ICAgICAgICAgICAgICAgIExlbmd0aCB0eSA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAg
ICAgICAgICAgIExlbmd0aCB0eiA9IExlbmd0aCgwLCBGaXhlZCk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6
VHJhbnNsYXRlWlRyYW5zZm9ybU9wZXJhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR6
ID0gY29udmVydFRvTGVuZ3RoKGZpcnN0VmFsdWUsIGluU3R5bGUsICZvayk7CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UgaWYgKHZhbC0+b3BlcmF0aW9uVHlwZSgpID09IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgaW5TdHlsZSwgJm9rKTsK
KyAgICAgICAgICAgICAgICAgICAgZWxzZSB7IAorICAgICAgICAgICAgICAgICAgICAgICAgdHgg
PSBjb252ZXJ0VG9MZW5ndGgoZmlyc3RWYWx1ZSwgaW5TdHlsZSwgJm9rKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSAhPSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6VHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMikgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogdGhpcmRWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHogPSBjb252ZXJ0VG9MZW5ndGgodGhpcmRWYWx1ZSwgaW5TdHlsZSwgJm9r
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHZhbC0+bGVuZ3RoKCkgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBzZWNvbmRWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgPSBjb252ZXJ0VG9MZW5ndGgoc2Vjb25kVmFsdWUsIGluU3R5bGUsICZvayk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlVHJhbnNm
b3JtT3BlcmF0aW9uKiB0cmFuc2xhdGUgPSBuZXcgVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9u
KHR4LCB0eSwgdHopOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZCh0cmFu
c2xhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNm
b3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICAgICAgY2FzZSBXZWJL
aXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAg
ICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3Bl
cmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gMDsKKyAgICAgICAgICAg
ICAgICAgICAgZG91YmxlIHkgPSAwOworICAgICAgICAgICAgICAgICAgICBkb3VibGUgeiA9IDA7
CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUtPmdldERvdWJs
ZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVU
eXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm
IChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19H
UkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBncmFkMmRlZyhhbmdsZSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAodmFsLT5vcGVyYXRp
b25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlJvdGF0ZVhUcmFuc2Zvcm1PcGVy
YXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gMTsKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodmFsLT5vcGVyYXRpb25UeXBlKCkgPT0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWU6OlJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAgICAgICAgICAgICAgICAgICB5
ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
eiA9IDE7CisgICAgICAgICAgICAgICAgICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiogcm90
YXRlID0gbmV3IFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbih4LCB5LCB6LCBhbmdsZSk7CisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKHJvdGF0ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlOjpSb3RhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjogeworICAg
ICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNf
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxKSk7CisgICAgICAgICAgICAgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlKiB0aGlyZFZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWUqPih2YWwtPml0ZW0oMikpOworICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZSogZm91cnRoVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZh
bC0+aXRlbSgzKSk7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSB4ID0gZmlyc3RWYWx1ZS0+
Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHkgPSBzZWNvbmRW
YWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIHogPSB0
aGlyZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBkb3VibGUg
YW5nbGUgPSBmb3VydGhWYWx1ZS0+Z2V0RG91YmxlVmFsdWUoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZvdXJ0aFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19SQUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUp
OworICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3VydGhWYWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfR1JBRCkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFuZ2xlID0gZ3JhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBSb3RhdGVU
cmFuc2Zvcm1PcGVyYXRpb24qIHJvdGF0ZSA9IG5ldyBSb3RhdGVUcmFuc2Zvcm1PcGVyYXRpb24o
eCwgeSwgeiwgYW5nbGUpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLmFwcGVuZChy
b3RhdGUpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgY2FzZSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1RyYW5zZm9y
bU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVl
OjpTa2V3WFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBjYXNlIFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjogeworICAgICAgICAgICAg
ICAgICAgICBkb3VibGUgYW5nbGVYID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZG91YmxlIGFu
Z2xlWSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBhbmdsZSA9IGZpcnN0VmFsdWUt
PmdldERvdWJsZVZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdFZhbHVlLT5w
cmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SQUQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBhbmdsZSA9IHJhZDJkZWcoYW5nbGUpOworICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmIChmaXJzdFZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19HUkFEKQorICAgICAgICAgICAgICAgICAgICAgICAgYW5nbGUgPSBncmFkMmRlZyhh
bmdsZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBX
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1lUcmFuc2Zvcm1PcGVyYXRpb24pCisgICAgICAg
ICAgICAgICAgICAgICAgICBhbmdsZVkgPSBhbmdsZTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbmdsZVggPSBhbmdsZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWwtPm9wZXJhdGlvblR5cGUoKSA9PSBXZWJLaXRDU1NUcmFuc2Zv
cm1WYWx1ZTo6U2tld1RyYW5zZm9ybU9wZXJhdGlvbikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICh2YWwtPmxlbmd0aCgpID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZSogc2Vjb25kVmFsdWUgPSBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFuZ2xlWSA9IHNlY29uZFZhbHVlLT5nZXREb3VibGVWYWx1ZSgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JBRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFuZ2xlWSA9IHJhZDJkZWcoYW5nbGVZKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAoc2Vjb25kVmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX0dSQUQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhbmdsZVkgPSBncmFkMmRlZyhhbmdsZVkpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgU2tld1RyYW5zZm9ybU9w
ZXJhdGlvbiogc2tldyA9IG5ldyBTa2V3VHJhbnNmb3JtT3BlcmF0aW9uKGFuZ2xlWCwgYW5nbGVZ
KTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQoc2tldyk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
YXNlIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb246IHsK
KyAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeDsKKyAgICAgICAgICAg
ICAgICAgICAgbWF0cml4LnNldEEoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwt
Pml0ZW0oMCkpLT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBtYXRyaXgu
c2V0QihzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgxKSktPmdldEZs
b2F0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5zZXRDKHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDIpKS0+Z2V0RmxvYXRWYWx1ZSgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbWF0cml4LnNldEQoc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih2YWwtPml0ZW0oMykpLT5nZXRGbG9hdFZhbHVlKCkpOworICAgICAgICAgICAgICAgICAg
ICBtYXRyaXguc2V0RShzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSg0
KSktPmdldEZsb2F0VmFsdWUoKSk7CisgICAgICAgICAgICAgICAgICAgIG1hdHJpeC5zZXRGKHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDUpKS0+Z2V0RmxvYXRWYWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9ucy5hcHBlbmQobmV3IE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbihtYXRyaXgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6Ok1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uOiB7CisgICAgICAgICAgICAgICAgICAg
IFRyYW5zZm9ybTNEIG1hdHJpeChzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+
aXRlbSgwKSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEpKS0+
Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oMikpLT5nZXRGbG9hdFZh
bHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSgzKSktPmdldEZsb2F0VmFsdWUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlKj4odmFsLT5pdGVtKDQpKS0+Z2V0RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWwtPml0ZW0oNSkpLT5nZXRGbG9hdFZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRl
bSg2KSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDcpKS0+Z2V0
RmxvYXRWYWx1ZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWwtPml0ZW0oOCkpLT5nZXRGbG9hdFZhbHVl
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZSo+KHZhbC0+aXRlbSg5KSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsLT5pdGVtKDEwKSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4o
dmFsLT5pdGVtKDExKSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVt
KDEyKSktPmdldEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDEzKSktPmdl
dEZsb2F0VmFsdWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDE0KSktPmdldEZsb2F0VmFs
dWUoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsLT5pdGVtKDE1KSktPmdldEZsb2F0VmFsdWUoKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnMuYXBwZW5kKG5ldyBNYXRyaXgzRFRyYW5zZm9y
bU9wZXJhdGlvbihtYXRyaXgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfSAgIAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBvdXRPcGVyYXRpb25zID0gb3BlcmF0aW9uczsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lv
biAzMjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ4LDcgKzQ4LDYgQEAKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNTU1N0
eWxlUnVsZS5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKLSNpbmNsdWRlICJDU1NUcmFu
c2Zvcm1WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgpAQCAtNjIs
NiArNjEsNyBAQAogI2luY2x1ZGUgIlBhaXIuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVk
ZSAiU2hhZG93VmFsdWUuaCIKKyNpbmNsdWRlICJXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5oIgog
I2luY2x1ZGUgPGtqcy9kdG9hLmg+CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCkBA
IC0zNzI4LDcgKzM5NDksNyBAQAogY2xhc3MgVHJhbnNmb3JtT3BlcmF0aW9uSW5mbyB7CiBwdWJs
aWM6CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9uSW5mbyhjb25zdCBQYXJzZVN0cmluZyYgbmFtZSkK
LSAgICA6IG1fdHlwZShDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9ybU9wZXJhdGlv
bikKKyAgICA6IG1fdHlwZShXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VW5rbm93blRyYW5zZm9y
bU9wZXJhdGlvbikKICAgICAsIG1fYXJnQ291bnQoMSkKICAgICAsIG1fYWxsb3dTaW5nbGVBcmd1
bWVudChmYWxzZSkKICAgICAsIG1fdW5pdChDU1NQYXJzZXI6OkZVbmtub3duKQpAQCAtMzczNiwz
MiArMzk1NywzNSBAQAogICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNjYWxl
KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2FsZXgoIikgfHwgZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgInNjYWxleSgiKSkgewogICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2Vy
OjpGTnVtYmVyOwogICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJzY2Fs
ZSgiKSkKLSAgICAgICAgICAgICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWU6OlNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICAgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInNjYWxleCgiKSkKLSAgICAgICAgICAgICAgICBt
X3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6U2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOworICAg
ICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2FsZVhUcmFu
c2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV90eXBl
ID0gQ1NTVHJhbnNmb3JtVmFsdWU6OlNjYWxlWVRyYW5zZm9ybU9wZXJhdGlvbjsKLSAgICAgICAg
fSBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRlKCIpKSB7Ci0gICAgICAg
ICAgICBtX3R5cGUgPSBDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0aW9u
OworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTY2Fs
ZVlUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgInJvdGF0ZSgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAicm90YXRleigi
KSkgewogICAgICAgICAgICAgbV91bml0ID0gQ1NTUGFyc2VyOjpGQW5nbGU7CisgICAgICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInJvdGF0ZSgiKSkKKyAgICAgICAgICAgICAg
ICBtX3R5cGUgPSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6Um90YXRlVHJhbnNmb3JtT3BlcmF0
aW9uOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpSb3RhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOwogICAgICAgICB9IGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJza2V3KCIpIHx8IGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJza2V3eCgiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAic2tld3koIikp
IHsKICAgICAgICAgICAgIG1fdW5pdCA9IENTU1BhcnNlcjo6RkFuZ2xlOwogICAgICAgICAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJza2V3KCIpKQotICAgICAgICAgICAgICAgIG1f
dHlwZSA9IENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3JtT3BlcmF0aW9uOworICAgICAg
ICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpTa2V3VHJhbnNmb3Jt
T3BlcmF0aW9uOwogICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwg
InNrZXd4KCIpKQotICAgICAgICAgICAgICAgIG1fdHlwZSA9IENTU1RyYW5zZm9ybVZhbHVlOjpT
a2V3WFRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX3R5cGUgPSBXZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZTo6U2tld1hUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFsdWU6OlNrZXdZVHJh
bnNmb3JtT3BlcmF0aW9uOworICAgICAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5z
Zm9ybVZhbHVlOjpTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjsKICAgICAgICAgfSBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAidHJhbnNsYXRlKCIpIHx8IGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJ0cmFuc2xhdGV4KCIpIHx8IGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJ0cmFuc2xh
dGV5KCIpKSB7CiAgICAgICAgICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZMZW5ndGggfCBDU1NQ
YXJzZXI6OkZQZXJjZW50OwogICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJ0cmFuc2xhdGUoIikpCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFs
dWU6OlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjsKKyAgICAgICAgICAgICAgICBtX3R5cGUg
PSBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uOwog
ICAgICAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgInRyYW5zbGF0ZXgo
IikpCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0
ZVhUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5z
bGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247CisgICAgICAgICAgICAgICAgbV90eXBlID0gV2ViS2l0
Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zbGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAg
IH0gZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIm1hdHJpeCgiKSkgewotICAgICAg
ICAgICAgbV90eXBlID0gQ1NTVHJhbnNmb3JtVmFsdWU6Ok1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bjsKKyAgICAgICAgICAgIG1fdHlwZSA9IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXhU
cmFuc2Zvcm1PcGVyYXRpb247CiAgICAgICAgICAgICBtX2FyZ0NvdW50ID0gMTE7CiAgICAgICAg
ICAgICBtX3VuaXQgPSBDU1NQYXJzZXI6OkZOdW1iZXI7CiAgICAgICAgIH0KQEAgLTM3NzIsMTUg
KzM5OTYsMTUgQEAKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBDU1NUcmFuc2Zvcm1WYWx1
ZTo6VHJhbnNmb3JtT3BlcmF0aW9uVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUgdHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHVuc2lnbmVkIGFyZ0NvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9hcmdDb3VudDsgfQogICAgIENTU1BhcnNlcjo6VW5pdHMgdW5pdCgpIGNv
bnN0IHsgcmV0dXJuIG1fdW5pdDsgfQogCi0gICAgYm9vbCB1bmtub3duKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlID09IENTU1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9u
OyB9CisgICAgYm9vbCB1bmtub3duKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFdlYktpdENT
U1RyYW5zZm9ybVZhbHVlOjpVbmtub3duVHJhbnNmb3JtT3BlcmF0aW9uOyB9CiAgICAgYm9vbCBo
YXNDb3JyZWN0QXJnQ291bnQodW5zaWduZWQgYXJnQ291bnQpIHsgcmV0dXJuIG1fYXJnQ291bnQg
PT0gYXJnQ291bnQgfHwgKG1fYWxsb3dTaW5nbGVBcmd1bWVudCAmJiBhcmdDb3VudCA9PSAxKTsg
fQogCiBwcml2YXRlOgotICAgIENTU1RyYW5zZm9ybVZhbHVlOjpUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlIG1fdHlwZTsKKyAgICBXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZTo6VHJhbnNmb3JtT3BlcmF0
aW9uVHlwZSBtX3R5cGU7CiAgICAgdW5zaWduZWQgbV9hcmdDb3VudDsKICAgICBib29sIG1fYWxs
b3dTaW5nbGVBcmd1bWVudDsKICAgICBDU1NQYXJzZXI6OlVuaXRzIG1fdW5pdDsKQEAgLTM3OTMs
NyArNDAxNyw3IEBACiAKICAgICAvLyBUaGUgdHJhbnNmb3JtIGlzIGEgbGlzdCBvZiBmdW5jdGlv
bmFsIHByaW1pdGl2ZXMgdGhhdCBzcGVjaWZ5IHRyYW5zZm9ybSBvcGVyYXRpb25zLiAgV2UgY29s
bGVjdCBhIGxpc3QKICAgICAvLyBvZiBDU1NUcmFuc2Zvcm1WYWx1ZXMsIHdoZXJlIGVhY2ggdmFs
dWUgc3BlY2lmaWVzIGEgc2luZ2xlIG9wZXJhdGlvbi4KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0
PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlzdDsKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gbmV3IENTU1ZhbHVlTGlzdCh0cnVlKTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA9IHZhbHVl
TGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSB2YWx1ZUxpc3QtPm5leHQoKSkgewogICAg
ICAgICBpZiAodmFsdWUtPnVuaXQgIT0gVmFsdWU6OkZ1bmN0aW9uIHx8ICF2YWx1ZS0+ZnVuY3Rp
b24pCiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM4MTIsNyArNDAzNiw3IEBACiAgICAgICAg
ICAgICByZXR1cm4gMDsKIAogICAgICAgICAvLyBDcmVhdGUgdGhlIG5ldyBDU1NUcmFuc2Zvcm1W
YWx1ZSBmb3IgdGhpcyBvcGVyYXRpb24gYW5kIGFkZCBpdCB0byBvdXIgbGlzdC4KLSAgICAgICAg
Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9ybVZhbHVlID0gbmV3IENTU1RyYW5zZm9ybVZhbHVl
KGluZm8udHlwZSgpKTsKKyAgICAgICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUqIHRyYW5zZm9y
bVZhbHVlID0gbmV3IFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKGluZm8udHlwZSgpKTsKICAgICAg
ICAgbGlzdC0+YXBwZW5kKHRyYW5zZm9ybVZhbHVlKTsKIAogICAgICAgICAvLyBTbmFnIG91ciB2
YWx1ZXMuCkBAIC0zODI1LDcgKzQwNDksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAwOwog
ICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBBZGQgdGhlIHZhbHVlIHRvIHRoZSBjdXJyZW50
IHRyYW5zZm9ybSBvcGVyYXRpb24uCi0gICAgICAgICAgICB0cmFuc2Zvcm1WYWx1ZS0+YWRkVmFs
dWUobmV3IENTU1ByaW1pdGl2ZVZhbHVlKGEtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpIGEtPnVuaXQpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKGEtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMpIGEtPnVuaXQpKTsKIAogICAgICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAg
ICAgICAgIGlmICghYSkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1RyYW5zZm9ybVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NUcmFuc2Zvcm1WYWx1ZS5jcHAJKHJldmlzaW9u
IDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTVHJhbnNmb3JtVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDk0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ1NTVHJhbnNmb3JtVmFsdWUuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNTU1RyYW5zZm9ybVZhbHVlOjpDU1NUcmFuc2Zvcm1W
YWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIG9wKQotOiBtX3R5cGUob3ApCi17fQotCi1DU1NU
cmFuc2Zvcm1WYWx1ZTo6fkNTU1RyYW5zZm9ybVZhbHVlKCkKLXt9Ci0KLXZvaWQgQ1NTVHJhbnNm
b3JtVmFsdWU6OmFkZFZhbHVlKENTU1ZhbHVlKiB2YWwpCi17Ci0gICAgaWYgKCFtX3ZhbHVlcykK
LSAgICAgICAgbV92YWx1ZXMgPSBuZXcgQ1NTVmFsdWVMaXN0OwotICAgIG1fdmFsdWVzLT5hcHBl
bmQodmFsKTsKLX0KLQotU3RyaW5nIENTU1RyYW5zZm9ybVZhbHVlOjpjc3NUZXh0KCkgY29uc3QK
LXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIHN3aXRjaChtX3R5cGUpIHsKLSAgICAgICAgY2Fz
ZSBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGUo
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNjYWxlWFRyYW5zZm9ybU9wZXJh
dGlvbjoKLSAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGVYKCI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAgICAgICAgICBy
ZXN1bHQgKz0gInNjYWxlWSgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUm90
YXRlVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgcmVzdWx0ICs9ICJyb3RhdGUoIjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb246
Ci0gICAgICAgICAgICByZXN1bHQgKz0gInNrZXcoIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIFNrZXdYVHJhbnNmb3JtT3BlcmF0aW9uOgotICAgICAgICAgICAgcmVzdWx0ICs9
ICJza2V3WCgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tld1lUcmFuc2Zv
cm1PcGVyYXRpb246Ci0gICAgICAgICAgICByZXN1bHQgKz0gInNrZXdZKCI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb246Ci0gICAg
ICAgICAgICByZXN1bHQgKz0gInRyYW5zbGF0ZSgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgVHJhbnNsYXRlWFRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlc3Vs
dCArPSAidHJhbnNsYXRlWCgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVHJh
bnNsYXRlWVRyYW5zZm9ybU9wZXJhdGlvbjoKLSAgICAgICAgICAgIHJlc3VsdCArPSAidHJhbnNs
YXRlWSgiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uOgotICAgICAgICAgICAgcmVzdWx0ICs9ICJtYXRyaXgoIjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IAotICAgIGlmIChtX3ZhbHVlcykKLSAgICAgICAgcmVzdWx0ICs9IG1fdmFsdWVzLT5jc3NUZXh0
KCk7Ci0gICAgCi0gICAgcmVzdWx0ICs9ICIpIjsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi19
CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJl
dmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzgsNyBAQAogI2luY2x1ZGUgIlJlY3QuaCIK
ICNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJTaGFkb3dWYWx1ZS5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCiAKICNpZiBFTkFCTEUoREFTSEJPQVJE
X1NVUFBPUlQpCiAjaW5jbHVkZSAiRGFzaGJvYXJkUmVnaW9uLmgiCkBAIC0xODMsNiArMTkyLDkg
QEAKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTZWN1cml0eSwKICAgICBDU1NQcm9wZXJ0eVdl
YmtpdFRleHRTdHJva2VDb2xvciwKICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0
aCwKKyAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybSwKKyAgICBDU1NQcm9wZXJ0eVdlYmtp
dFRyYW5zZm9ybU9yaWdpblgsCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1PcmlnaW5Z
LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlckRyYWcsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRV
c2VyTW9kaWZ5LAogICAgIENTU1Byb3BlcnR5V2Via2l0VXNlclNlbGVjdCwKQEAgLTM4OCw2ICs0
MDQsNDYgQEAKICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCktPmJveFNpemluZygpID09IENP
TlRFTlRfQk9YID8gcmVuZGVyZXItPmNvbnRlbnRCb3goKSA6IHJlbmRlcmVyLT5ib3JkZXJCb3go
KTsKIH0KIAorc3RhdGljIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBjb21wdXRlZFRyYW5zZm9y
bShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAg
IHJldHVybiAwOworICAgIAorICAgIEludFJlY3QgYm94ID0gc2l6aW5nQm94KHJlbmRlcmVyKTsK
KyAgICAKKyAgICBUcmFuc2Zvcm0zRCB0cmFuc2Zvcm07CisgICAgCisgICAgcmVuZGVyZXItPnN0
eWxlKCktPmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgYm94LnNpemUoKSwgZmFsc2UpOworCisg
ICAgUmVmUHRyPFdlYktpdENTU1RyYW5zZm9ybVZhbHVlPiAgdHJhbnNmb3JtVmFsID0gbmV3IFdl
YktpdENTU1RyYW5zZm9ybVZhbHVlKFdlYktpdENTU1RyYW5zZm9ybVZhbHVlOjpNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbik7CisgICAgCisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tMTEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpKTsKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUo
dHJhbnNmb3JtLm0xMigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIHRy
YW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTEzKCks
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgdHJhbnNmb3JtVmFsLT5hcHBl
bmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tMTQoKSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpKTsKKyAgICAKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NT
UHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm0yMSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUikpOworICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0
cmFuc2Zvcm0ubTIyKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgdHJh
bnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tMjMoKSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm0yNCgpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUikpOworICAgIAorICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTMxKCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7CisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRy
YW5zZm9ybS5tMzIoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICB0cmFu
c2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJhbnNmb3JtLm0zMygpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIHRyYW5zZm9ybVZhbC0+YXBwZW5k
KG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTM0KCksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfTlVNQkVSKSk7CisgICAgCisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQobmV3IENTU1By
aW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tNDEoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKKyAgICB0cmFuc2Zvcm1WYWwtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodHJh
bnNmb3JtLm00MigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikpOworICAgIHRyYW5z
Zm9ybVZhbC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh0cmFuc2Zvcm0ubTQzKCksIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgdHJhbnNmb3JtVmFsLT5hcHBlbmQo
bmV3IENTU1ByaW1pdGl2ZVZhbHVlKHRyYW5zZm9ybS5tNDQoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpKTsKKyAgICAKKyAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3
IENTU1ZhbHVlTGlzdCh0cnVlKTsKKyAgICBsaXN0LT5hcHBlbmQodHJhbnNmb3JtVmFsKTsKKyAg
ICAKKyAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7Cit9CisgICAgCisgICAgCiBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb246OkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbihQYXNzUmVmUHRy
PE5vZGU+IG4pCiAgICAgOiBtX25vZGUobikKIHsKQEAgLTEwMDMsNiArMTA1OSwxMzMgQEAKICAg
ICAgICAgICAgIHJldHVybiBnZXRCb3JkZXJSYWRpdXNDb3JuZXJWYWx1ZShzdHlsZS0+Ym9yZGVy
VG9wTGVmdFJhZGl1cygpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRv
cFJpZ2h0UmFkaXVzOgogICAgICAgICAgICAgcmV0dXJuIGdldEJvcmRlclJhZGl1c0Nvcm5lclZh
bHVlKHN0eWxlLT5ib3JkZXJUb3BSaWdodFJhZGl1cygpKTsKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdFRyYW5zZm9ybToKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlZFRyYW5zZm9y
bShyZW5kZXJlcik7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW5YOgorICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgSW50UmVj
dCBib3ggPSBzaXppbmdCb3gocmVuZGVyZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgoKS5jYWxjTWluVmFsdWUo
Ym94LndpZHRoKCkpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2
ZVZhbHVlKHN0eWxlLT50cmFuc2Zvcm1PcmlnaW5YKCkpOyAgICAgICAgICAgIAorICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWToKKyAgICAgICAgICAgIGlmIChy
ZW5kZXJlcikgeworICAgICAgICAgICAgICAgIEludFJlY3QgYm94ID0gc2l6aW5nQm94KHJlbmRl
cmVyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHN0eWxl
LT50cmFuc2Zvcm1PcmlnaW5ZKCkuY2FsY01pblZhbHVlKGJveC5oZWlnaHQoKSksIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnRyYW5zZm9y
bU9yaWdpblkoKSk7ICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5Qm9yZGVyOgogICAgICAgICBjYXNlIENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tOgpAQCAtMTA2MCwxMCArMTI0Myw2IEBACiAgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXJxdWVlU3BlZWQ6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRQYWRkaW5nU3RhcnQ6CiAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ry
b2tlOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOgotICAgICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luOgotICAgICAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybU9yaWdpblk6CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGFy
ZSB1bmltcGxlbWVudGVkLgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFNWRykKSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1RyYW5zZm9ybVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvQ1NTVHJhbnNmb3JtVmFsdWUuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nz
cy9DU1NUcmFuc2Zvcm1WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY1ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiQ1NTVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIK
LSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
Q1NTVHJhbnNmb3JtVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUKLXsKLXB1YmxpYzoKLSAgICBlbnVt
IFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgewotICAgICAgICBVbmtub3duVHJhbnNmb3JtT3BlcmF0
aW9uLAotICAgICAgICBTY2FsZVRyYW5zZm9ybU9wZXJhdGlvbiwKLSAgICAgICAgU2NhbGVYVHJh
bnNmb3JtT3BlcmF0aW9uLAotICAgICAgICBTY2FsZVlUcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAg
ICAgIFJvdGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiwKLSAgICAgICAgU2tld1RyYW5zZm9ybU9wZXJh
dGlvbiwKLSAgICAgICAgU2tld1hUcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIFNrZXdZVHJh
bnNmb3JtT3BlcmF0aW9uLAotICAgICAgICBUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24sCi0g
ICAgICAgIFRyYW5zbGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIFRyYW5zbGF0ZVlU
cmFuc2Zvcm1PcGVyYXRpb24sCi0gICAgICAgIE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbgotICAg
IH07Ci0KLSAgICBDU1NUcmFuc2Zvcm1WYWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKTsKLSAg
ICB2aXJ0dWFsIH5DU1NUcmFuc2Zvcm1WYWx1ZSgpOwotCi0gICAgdm9pZCBhZGRWYWx1ZShDU1NW
YWx1ZSopOwotICAgIAotICAgIHZpcnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKLSAKLSAg
ICBUcmFuc2Zvcm1PcGVyYXRpb25UeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0K
LSAgICBDU1NWYWx1ZUxpc3QqIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmdldCgp
OyB9Ci0gICAgCi1wcm90ZWN0ZWQ6Ci0gICAgVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSBtX3R5cGU7
Ci0gICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbV92YWx1ZXM7Ci19OwotCi19CkluZGV4OiBXZWJD
b3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJL
aXRDU1NNYXRyaXguaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENTU01hdHJp
eC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBw
YXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KKyAqCisgKiAoQykgMTk5OS0y
MDAzIExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCisgKiAoQykgMjAwMi0yMDAzIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0Q1NTTWF0cml4X2gKKyNkZWZpbmUgV2ViS2l0
Q1NTTWF0cml4X2gKKworI2luY2x1ZGUgIlN0eWxlQmFzZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
U3RyaW5nLmgiCisjaW5jbHVkZSAiVHJhbnNmb3JtM0QuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBXZWJLaXRDU1NNYXRyaXggOiBw
dWJsaWMgU3R5bGVCYXNlIHsKK3B1YmxpYzoKKyAgICBXZWJLaXRDU1NNYXRyaXgoKTsKKyAgICBX
ZWJLaXRDU1NNYXRyaXgoY29uc3QgV2ViS2l0Q1NTTWF0cml4JiBtKTsKKyAgICBXZWJLaXRDU1NN
YXRyaXgoY29uc3QgVHJhbnNmb3JtM0QmIG0pOworICAgIFdlYktpdENTU01hdHJpeChjb25zdCBT
dHJpbmcmIHMpOworICAgIHZpcnR1YWwgfldlYktpdENTU01hdHJpeCgpOworCisgICAgZmxvYXQg
bTExKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTExKCk7IH0KKyAgICBmbG9hdCBtMTIoKSBj
b25zdCB7IHJldHVybiBtX21hdHJpeC5tMTIoKTsgfQorICAgIGZsb2F0IG0xMygpIGNvbnN0IHsg
cmV0dXJuIG1fbWF0cml4Lm0xMygpOyB9CisgICAgZmxvYXQgbTE0KCkgY29uc3QgeyByZXR1cm4g
bV9tYXRyaXgubTE0KCk7IH0KKyAgICBmbG9hdCBtMjEoKSBjb25zdCB7IHJldHVybiBtX21hdHJp
eC5tMjEoKTsgfQorICAgIGZsb2F0IG0yMigpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0yMigp
OyB9CisgICAgZmxvYXQgbTIzKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTIzKCk7IH0KKyAg
ICBmbG9hdCBtMjQoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tMjQoKTsgfQorICAgIGZsb2F0
IG0zMSgpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm0zMSgpOyB9CisgICAgZmxvYXQgbTMyKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTMyKCk7IH0KKyAgICBmbG9hdCBtMzMoKSBjb25zdCB7
IHJldHVybiBtX21hdHJpeC5tMzMoKTsgfQorICAgIGZsb2F0IG0zNCgpIGNvbnN0IHsgcmV0dXJu
IG1fbWF0cml4Lm0zNCgpOyB9CisgICAgZmxvYXQgbTQxKCkgY29uc3QgeyByZXR1cm4gbV9tYXRy
aXgubTQxKCk7IH0KKyAgICBmbG9hdCBtNDIoKSBjb25zdCB7IHJldHVybiBtX21hdHJpeC5tNDIo
KTsgfQorICAgIGZsb2F0IG00MygpIGNvbnN0IHsgcmV0dXJuIG1fbWF0cml4Lm00MygpOyB9Cisg
ICAgZmxvYXQgbTQ0KCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXgubTQ0KCk7IH0KKyAgICAKKyAg
ICB2b2lkIHNldE0xMShmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTExKGYpOyB9CisgICAgdm9p
ZCBzZXRNMTIoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE0xMihmKTsgfQorICAgIHZvaWQgc2V0
TTEzKGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNMTMoZik7IH0KKyAgICB2b2lkIHNldE0xNChm
bG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTE0KGYpOyB9CisgICAgdm9pZCBzZXRNMjEoZmxvYXQg
ZikgICB7IG1fbWF0cml4LnNldE0yMShmKTsgfQorICAgIHZvaWQgc2V0TTIyKGZsb2F0IGYpICAg
eyBtX21hdHJpeC5zZXRNMjIoZik7IH0KKyAgICB2b2lkIHNldE0yMyhmbG9hdCBmKSAgIHsgbV9t
YXRyaXguc2V0TTIzKGYpOyB9CisgICAgdm9pZCBzZXRNMjQoZmxvYXQgZikgICB7IG1fbWF0cml4
LnNldE0yNChmKTsgfQorICAgIHZvaWQgc2V0TTMxKGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRN
MzEoZik7IH0KKyAgICB2b2lkIHNldE0zMihmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTMyKGYp
OyB9CisgICAgdm9pZCBzZXRNMzMoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE0zMyhmKTsgfQor
ICAgIHZvaWQgc2V0TTM0KGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNMzQoZik7IH0KKyAgICB2
b2lkIHNldE00MShmbG9hdCBmKSAgIHsgbV9tYXRyaXguc2V0TTQxKGYpOyB9CisgICAgdm9pZCBz
ZXRNNDIoZmxvYXQgZikgICB7IG1fbWF0cml4LnNldE00MihmKTsgfQorICAgIHZvaWQgc2V0TTQz
KGZsb2F0IGYpICAgeyBtX21hdHJpeC5zZXRNNDMoZik7IH0KKyAgICB2b2lkIHNldE00NChmbG9h
dCBmKSAgIHsgbV9tYXRyaXguc2V0TTQ0KGYpOyB9CisgCisgICAgdm9pZCAgICAgICAgICAgICAg
ICBzZXRNYXRyaXhWYWx1ZShjb25zdCBTdHJpbmcmIHN0cmluZyk7CisgICAgCisgICAgLy8gdGhp
cyA9IHRoaXMgKiBzZWNvbmRNYXRyaXggKGkuZS4gbXVsdFJpZ2h0KQorICAgIFdlYktpdENTU01h
dHJpeCogICAgbXVsdGlwbHkoV2ViS2l0Q1NTTWF0cml4KiBzZWNvbmRNYXRyaXgpOworICAgIAor
ICAgIC8vIEZJWE1FOiB3ZSByZWFsbHkgc2hvdWxkIGhhdmUgYW4gZXhjZXB0aW9uIGhlcmUsIGZv
ciB3aGVuIG1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZQorICAgIFdlYktpdENTU01hdHJpeCogICAg
aW52ZXJzZSgpOworICAgIFdlYktpdENTU01hdHJpeCogICAgdHJhbnNsYXRlKGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHopOworICAgIFdlYktpdENTU01hdHJpeCogICAgc2NhbGUoZmxvYXQgc2Nh
bGVYLCBmbG9hdCBzY2FsZVksIGZsb2F0IHNjYWxlWik7CisgICAgV2ViS2l0Q1NTTWF0cml4KiAg
ICByb3RhdGUoZmxvYXQgcm90WiwgZmxvYXQgcm90WSwgZmxvYXQgcm90Wik7CisgICAgV2ViS2l0
Q1NTTWF0cml4KiAgICByb3RhdGVBeGlzQW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwg
ZmxvYXQgYW5nbGUpOworICAgIAorICAgIGNvbnN0IFRyYW5zZm9ybTNEJiAgICB0cmFuc2Zvcm0o
KSB7IHJldHVybiBtX21hdHJpeDsgfQorICAgIAorICAgIFN0cmluZyB0b1N0cmluZygpOworICAg
IAorcHJvdGVjdGVkOgorICAgIFRyYW5zZm9ybTNEIG1fbWF0cml4OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV2ViS2l0Q1NTTWF0cml4X2gKSW5kZXg6IFdlYkNv
cmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3Nz
L1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlX2gKKyNkZWZpbmUgV2Vi
S2l0Q1NTVHJhbnNmb3JtVmFsdWVfaAorCisjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUgOiBwdWJs
aWMgQ1NTVmFsdWVMaXN0Cit7CitwdWJsaWM6CisgICAgZW51bSBUcmFuc2Zvcm1PcGVyYXRpb25U
eXBlIHsKKyAgICAgICAgVW5rbm93blRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgU2NhbGVU
cmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFNjYWxlWFRyYW5zZm9ybU9wZXJhdGlvbiwKKyAg
ICAgICAgU2NhbGVZVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBTY2FsZVpUcmFuc2Zvcm1P
cGVyYXRpb24sCisgICAgICAgIFNjYWxlM0RUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFJv
dGF0ZVRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgUm90YXRlWFRyYW5zZm9ybU9wZXJhdGlv
biwKKyAgICAgICAgUm90YXRlWVRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgUm90YXRlWlRy
YW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgUm90YXRlM0RUcmFuc2Zvcm1PcGVyYXRpb24sCisg
ICAgICAgIFNrZXdUcmFuc2Zvcm1PcGVyYXRpb24sCisgICAgICAgIFNrZXdYVHJhbnNmb3JtT3Bl
cmF0aW9uLAorICAgICAgICBTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbiwKKyAgICAgICAgVHJhbnNs
YXRlVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBUcmFuc2xhdGVYVHJhbnNmb3JtT3BlcmF0
aW9uLAorICAgICAgICBUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBUcmFu
c2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBUcmFuc2xhdGUzRFRyYW5zZm9ybU9w
ZXJhdGlvbiwKKyAgICAgICAgTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLAorICAgICAgICBNYXRy
aXgzRFRyYW5zZm9ybU9wZXJhdGlvbgorICAgIH07CisKKyAgICBXZWJLaXRDU1NUcmFuc2Zvcm1W
YWx1ZShUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKTsKKyAgICB2aXJ0dWFsIH5XZWJLaXRDU1NUcmFu
c2Zvcm1WYWx1ZSgpOworCisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworIAor
ICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUgb3BlcmF0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorICAgIAorcHJvdGVjdGVkOgorICAgIFRyYW5zZm9ybU9wZXJhdGlvblR5cGUg
bV90eXBlOworfTsKKworfQorCisjZW5kaWYgLy8gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWVfaAor
CkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nz
cy9XZWJLaXRDU1NNYXRyaXguaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVy
LCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1
bGUgY3NzIHsKKworICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsID86CisgICAgaW50ZXJm
YWNlIFsKKyAgICAgICAgSW50ZXJmYWNlVVVJRD0zNDljOTg5ZS04NzdmLTQxNmUtOWNjZS1jYTgx
MWU1MmQ5ZTgsCisgICAgICAgIEltcGxlbWVudGF0aW9uVVVJRD01ZmViMTZlNi1mNDQxLTRiNDYt
OWIxMC05ZTgzM2E0ZGNkMWIKKyAgICBdIFdlYktpdENTU01hdHJpeCB7CisKKyAgICAgICAgYXR0
cmlidXRlIGZsb2F0IG0xMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0xMjsKKyAgICAgICAg
YXR0cmlidXRlIGZsb2F0IG0xMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0xNDsKKyAgICAg
ICAgYXR0cmlidXRlIGZsb2F0IG0yMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0yMjsKKyAg
ICAgICAgYXR0cmlidXRlIGZsb2F0IG0yMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0yNDsK
KyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0zMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0z
MjsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0zMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0
IG0zNDsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG00MTsKKyAgICAgICAgYXR0cmlidXRlIGZs
b2F0IG00MjsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG00MzsKKyAgICAgICAgYXR0cmlidXRl
IGZsb2F0IG00NDsKKworICAgICAgICB2b2lkICAgICAgICAgICAgc2V0TWF0cml4VmFsdWUoaW4g
RE9NU3RyaW5nIHN0cmluZyk7CisgICAgICAgIFdlYktpdENTU01hdHJpeCBtdWx0aXBseShpbiBX
ZWJLaXRDU1NNYXRyaXggc2Vjb25kTWF0cml4KSByYWlzZXMgQ1NTRXhjZXB0aW9uOworICAgICAg
ICBXZWJLaXRDU1NNYXRyaXggaW52ZXJzZSgpIHJhaXNlcyBDU1NFeGNlcHRpb247CisgICAgICAg
IFdlYktpdENTU01hdHJpeCB0cmFuc2xhdGUoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxv
YXQgeik7CisgICAgICAgIFdlYktpdENTU01hdHJpeCBzY2FsZShpbiBmbG9hdCBzY2FsZVgsIGlu
IGZsb2F0IHNjYWxlWSwgaW4gZmxvYXQgc2NhbGVaKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4
IHJvdGF0ZShpbiBmbG9hdCByb3RYLCBpbiBmbG9hdCByb3RZLCBpbiBmbG9hdCByb3RaKTsKKyAg
ICAgICAgV2ViS2l0Q1NTTWF0cml4IHJvdGF0ZUF4aXNBbmdsZShpbiBmbG9hdCB4LCBpbiBmbG9h
dCB5LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCBhbmdsZSk7CisgICAgICAgIAorICAgICAgICBET01T
dHJpbmcgdG9TdHJpbmcoKTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRD
U1NUcmFuc2Zvcm1WYWx1ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NT
VHJhbnNmb3JtVmFsdWUuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICog
Qm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIGNzcyB7CisKKyAgICBp
bnRlcmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBIYXNJbmRl
eEdldHRlcgorICAgICAgICBJbnRlcmZhY2VVVUlEPTMwM2ZlNjMyLTVkY2YtNDQ3Mi1iOTc3LTMz
YTU0ODFlMWQxMiwKKyAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWViNDllNWM2LTYwNzUtNDVi
OC1iNWM0LTdlNzc1YzAxZTdjNAorICAgIF0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUgOiBDU1NW
YWx1ZUxpc3QgeworCisgICAgICAgIC8vIE9wZXJhdGlvblR5cGVzCisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19VTktOT1dOX1RSQU5TRk9STSA9IDA7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19NQVRSSVggICAgICAgICAgICA9IDE7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19NQVRSSVgzRCAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19ST1RBVEUgICAgICAgICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19ST1RBVEUzRCAgICAgICAgICA9IDQ7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19UUkFOU0xBVEUgICAgICAgICA9IDU7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19UUkFOU0xBVEUzRCAgICAgICA9IDY7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19TQ0FMRSAgICAgICAgICAgICA9IDc7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19TQ0FMRTNEICAgICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19TS0VXWCAgICAgICAgICAgICA9IDk7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19TS0VXWSAgICAgICAgICAgICA9IDEwOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBDU1NfU0tFV1ogICAgICAgICAgICAgPSAxMTsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgQ1NTX1BFUlNQRUNUSVZFICAgICAgID0gMTI7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IENTU19ST1RBVEVYICAgICAgICAgICA9IDEzOworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBDU1NfUk9UQVRFWSAgICAgICAgICAgPSAxNDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgQ1NTX1JPVEFURVogICAgICAgICAgID0gMTU7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IENTU19UUkFOU0xBVEVYICAgICAgICA9IDE2OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfVFJBTlNMQVRFWSAgICAgICAgPSAxNzsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1RSQU5TTEFURVogICAgICAgID0gMTg7CisgICAgICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0IENTU19TQ0FMRVggICAgICAgICAgICA9IDE5OworICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfU0NBTEVZICAgICAgICAgICAgPSAyMDsKKyAgICAg
ICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NDQUxFWiAgICAgICAgICAgID0gMjE7CisKKyAg
ICAgICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IG9wZXJhdGlvblR5cGU7Cisg
ICAgfTsKKworfQpJbmRleDogV2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTTWF0cml4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NTggQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgorICoKKyAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTU3R5
bGVTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCisj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiV2ViS2l0Q1NTTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV2Vi
S2l0Q1NTTWF0cml4OjpXZWJLaXRDU1NNYXRyaXgoKSA6IFN0eWxlQmFzZSgwKQoreworfQorCitX
ZWJLaXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBXZWJLaXRDU1NNYXRyaXgmIG0p
IDogU3R5bGVCYXNlKDApCit7CisgICAgbV9tYXRyaXggPSBtLm1fbWF0cml4OworfQorCitXZWJL
aXRDU1NNYXRyaXg6OldlYktpdENTU01hdHJpeChjb25zdCBUcmFuc2Zvcm0zRCYgbSkgOiBTdHls
ZUJhc2UoMCkKK3sKKyAgICBtX21hdHJpeCA9IG07Cit9CisKK1dlYktpdENTU01hdHJpeDo6V2Vi
S2l0Q1NTTWF0cml4KGNvbnN0IFN0cmluZyYgcykgOiBTdHlsZUJhc2UoMCkKK3sKKyAgICBzZXRN
YXRyaXhWYWx1ZShzKTsKK30KKworV2ViS2l0Q1NTTWF0cml4Ojp+V2ViS2l0Q1NTTWF0cml4KCkK
K3sKK30KKwordm9pZCBXZWJLaXRDU1NNYXRyaXg6OnNldE1hdHJpeFZhbHVlKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQoreworICAgIENTU1BhcnNlciBwKHVzZVN0cmljdFBhcnNpbmcoKSk7CisgICAg
UmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBzdHlsZURlY2xhcmF0aW9uID0gbmV3
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOworICAgIGlmIChwLnBhcnNlVmFsdWUoc3R5bGVE
ZWNsYXJhdGlvbi5nZXQoKSwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm0sIHN0cmluZywgdHJ1
ZSkpIHsKKyAgICAgICAgLy8gY29udmVydCB0byBUcmFuc2Zvcm1PcGVyYXRpb25zLiBUaGlzIGNh
biBmYWlsIGlmIGEgcHJvcGVydHkgCisgICAgICAgIC8vIHJlcXVpcmVzIHN0eWxlIChpLmUuLCBw
YXJhbSB1c2VzICdlbXMnIG9yICdleHMnKQorICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWwgPSAgc3R5bGVEZWNsYXJhdGlvbi0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zZm9ybSk7CisgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsK
KyAgICAgICAgaWYgKCFDU1NTdHlsZVNlbGVjdG9yOjpjcmVhdGVUcmFuc2Zvcm1PcGVyYXRpb25z
KHZhbC5nZXQoKSwgMCwgb3BlcmF0aW9ucykpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICAvLyBjb252ZXJ0IHRyYW5zZm9ybSBvcGVyYXRpb25zIHRvIGEgVHJhbnNmb3Jt
M0QuIFRoaXMgY2FuIGZhaWwKKyAgICAgICAgLy8gaWYgYSBwYXJhbSBoYXMgYSBwZXJjZW50YWdl
ICgnJScpCisgICAgICAgIFRyYW5zZm9ybTNEIHQ7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBvcGVyYXRpb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAob3BlcmF0
aW9uc1tpXS5nZXQoKS0+YXBwbHkodCwgSW50U2l6ZSgwLCAwKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBzZXQgdGhlIG1hdHJpeAor
ICAgICAgICBtX21hdHJpeCA9IHQ7CisgICAgfQorfQorCisvLyB0aGlzIGlzIGEgbXVsdFJpZ2h0
ICh0aGlzID0gdGhpcyAqIHNlY29uZE1hdHJpeCkKK1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NT
TWF0cml4OjptdWx0aXBseShXZWJLaXRDU1NNYXRyaXgqIHNlY29uZE1hdHJpeCkKK3sKKyAgICBU
cmFuc2Zvcm0zRCB0bXAoc2Vjb25kTWF0cml4LT5tX21hdHJpeCk7CisgICAgdG1wLm11bHRMZWZ0
KG1fbWF0cml4KTsKKyAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeCh0bXApOworfQorCitX
ZWJLaXRDU1NNYXRyaXgqIFdlYktpdENTU01hdHJpeDo6aW52ZXJzZSgpCit7CisgICAgcmV0dXJu
IG5ldyBXZWJLaXRDU1NNYXRyaXgobV9tYXRyaXguaW52ZXJzZSgpKTsKK30KKworV2ViS2l0Q1NT
TWF0cml4KiBXZWJLaXRDU1NNYXRyaXg6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB6KQoreworICAgIGlmIChpc25hbih4KSkgeCA9IDA7IAorICAgIGlmIChpc25hbih5KSkgeSA9
IDA7IAorICAgIGlmIChpc25hbih6KSkgeiA9IDA7IAorICAgIHJldHVybiBuZXcgV2ViS2l0Q1NT
TWF0cml4KFRyYW5zZm9ybTNEKG1fbWF0cml4KS50cmFuc2xhdGUzZCh4LCB5LCB6KSk7Cit9CisK
K1dlYktpdENTU01hdHJpeCogV2ViS2l0Q1NTTWF0cml4OjpzY2FsZShmbG9hdCBzY2FsZVgsIGZs
b2F0IHNjYWxlWSwgZmxvYXQgc2NhbGVaKQoreworICAgIGlmIChpc25hbihzY2FsZVgpKSBzY2Fs
ZVggPSAxOyAKKyAgICBpZiAoaXNuYW4oc2NhbGVZKSkgc2NhbGVZID0gc2NhbGVYOyAKKyAgICBp
ZiAoaXNuYW4oc2NhbGVaKSkgc2NhbGVaID0gMTsgCisgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NN
YXRyaXgoVHJhbnNmb3JtM0QobV9tYXRyaXgpLnNjYWxlM2Qoc2NhbGVYLCBzY2FsZVksIHNjYWxl
WikpOworfQorCitXZWJLaXRDU1NNYXRyaXgqIFdlYktpdENTU01hdHJpeDo6cm90YXRlKGZsb2F0
IHJvdFgsIGZsb2F0IHJvdFksIGZsb2F0IHJvdFopCit7CisgICAgLy8gaWYgb25seSB0aGUgZmly
c3QgdmFsdWUgaXMgZ2l2ZW4sIGNvbnNpZGVyIGl0IGFzIHJvdFoKKyAgICBpZiAoaXNuYW4ocm90
WSkgJiYgaXNuYW4ocm90WikpIHsKKyAgICAgICAgcm90WCA9IDA7CisgICAgICAgIHJvdFkgPSAw
OworICAgICAgICByb3RaID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoaXNuYW4ocm90WCkpIHJv
dFggPSAwOyAKKyAgICBpZiAoaXNuYW4ocm90WSkpIHJvdFkgPSAwOyAKKyAgICBpZiAoaXNuYW4o
cm90WikpIHJvdFogPSAwOyAKKyAgICByZXR1cm4gbmV3IFdlYktpdENTU01hdHJpeChUcmFuc2Zv
cm0zRChtX21hdHJpeCkucm90YXRlM2Qocm90WCwgcm90WSwgcm90WikpOworfQorCitXZWJLaXRD
U1NNYXRyaXgqIFdlYktpdENTU01hdHJpeDo6cm90YXRlQXhpc0FuZ2xlKGZsb2F0IHgsIGZsb2F0
IHksIGZsb2F0IHosIGZsb2F0IGFuZ2xlKQoreworICAgIGlmIChpc25hbih4KSkgeCA9IDA7IAor
ICAgIGlmIChpc25hbih5KSkgeSA9IDA7IAorICAgIGlmIChpc25hbih6KSkgeiA9IDA7CisgICAg
aWYgKGlzbmFuKGFuZ2xlKSkgYW5nbGUgPSAwOworICAgIGlmICh4ID09IDAgJiYgeSA9PSAwICYm
IHogPT0gMCkKKyAgICAgICAgeiA9IDE7CisgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgo
VHJhbnNmb3JtM0QobV9tYXRyaXgpLnJvdGF0ZTNkKHgsIHksIHosIGFuZ2xlKSk7Cit9CisKK1N0
cmluZyBXZWJLaXRDU1NNYXRyaXg6OnRvU3RyaW5nKCkKK3sKKyAgICAvLyBUZW1wb3JhcmlseSBy
ZXR1cm4gYW4gYWZmaW5lIHZlcnNpb24gd2hpbGUgcGFyc2luZyBmb3IgM0QgaXMKKyAgICAvLyBk
aXNhYmxlZC4gVGhpcyBpcyBvYnZpb3VzbHkgbG9zc3kuIFdoaWxlIHRoZSBjb250ZW50IGNhbm5v
dAorICAgIC8vIHNwZWNpZnkgM0QgdmlhIENTUywgdGhlIDNkIGZ1bmN0aW9ucyBhcmUgc3RpbGwg
YXZhaWxhYmxlIG9uCisgICAgLy8gdGhpcyBpbnRlcmZhY2UuCisgICAgCisgICAgQWZmaW5lVHJh
bnNmb3JtIGFmZmluZSA9IG1fbWF0cml4LmFmZmluZVRyYW5zZm9ybSgpOworICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgibWF0cml4KCVmLCAlZiwgJWYsICVmLCAlZiwgJWYpIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWZmaW5lLmEoKSwgYWZmaW5lLmIoKSwgYWZmaW5lLmMoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWZmaW5lLmQoKSwgYWZmaW5lLmUoKSwgYWZmaW5lLmYo
KSk7CisKKyAgICAvKgorICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgibWF0cml4M2QoJWYsICVm
LCAlZiwgJWYsICVmLCAlZiwgJWYsICVmLCAlZiwgJWYsICVmLCAlZiwgJWYsICVmLCAlZiwgJWYp
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21hdHJpeC5tMTEoKSwgbV9tYXRyaXgu
bTEyKCksIG1fbWF0cml4Lm0xMygpLCBtX21hdHJpeC5tMTQoKSwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tYXRyaXgubTIxKCksIG1fbWF0cml4Lm0yMigpLCBtX21hdHJpeC5tMjMo
KSwgbV9tYXRyaXgubTI0KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWF0cml4
Lm0zMSgpLCBtX21hdHJpeC5tMzIoKSwgbV9tYXRyaXgubTMzKCksIG1fbWF0cml4Lm0zNCgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21hdHJpeC5tNDEoKSwgbV9tYXRyaXgubTQy
KCksIG1fbWF0cml4Lm00MygpLCBtX21hdHJpeC5tNDQoKSk7CisgICAgICovCit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU1RyYW5zZm9ybVZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1
ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktpdENTU1RyYW5zZm9ybVZhbHVlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZTo6V2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUoVHJhbnNmb3JtT3BlcmF0aW9u
VHlwZSBvcCkKKzogbV90eXBlKG9wKQore30KKworV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6On5X
ZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpCit7fQorCitTdHJpbmcgV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWU6OmNzc1RleHQoKSBjb25zdAoreworICAgIFN0cmluZyByZXN1bHQ7CisgICAgc3dpdGNo
KG1fdHlwZSkgeworICAgICAgICBjYXNlIFNjYWxlVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICAgICAgcmVzdWx0ICs9ICJzY2FsZSgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU2NhbGVYVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJzY2Fs
ZVgoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNjYWxlWVRyYW5zZm9ybU9w
ZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGVZKCI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTY2FsZVpUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAg
ICByZXN1bHQgKz0gInNjYWxlWigiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
U2NhbGUzRFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAic2NhbGUz
ZCgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUm90YXRlVHJhbnNmb3JtT3Bl
cmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJyb3RhdGUoIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFJvdGF0ZVhUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAg
ICByZXN1bHQgKz0gInJvdGF0ZVgoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFJvdGF0ZVlUcmFuc2Zvcm1PcGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInJvdGF0
ZVkoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJvdGF0ZVpUcmFuc2Zvcm1P
cGVyYXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInJvdGF0ZVooIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFJvdGF0ZTNEVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAg
ICAgICAgcmVzdWx0ICs9ICJyb3RhdGUzZCgiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2tld1RyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAic2tl
dygiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tld1hUcmFuc2Zvcm1PcGVy
YXRpb246CisgICAgICAgICAgICByZXN1bHQgKz0gInNrZXdYKCI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBTa2V3WVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJl
c3VsdCArPSAic2tld1koIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAidHJhbnNsYXRl
KCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUcmFuc2xhdGVYVHJhbnNmb3Jt
T3BlcmF0aW9uOgorICAgICAgICAgICAgcmVzdWx0ICs9ICJ0cmFuc2xhdGVYKCI7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUcmFuc2xhdGVZVHJhbnNmb3JtT3BlcmF0aW9uOgor
ICAgICAgICAgICAgcmVzdWx0ICs9ICJ0cmFuc2xhdGVZKCI7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBUcmFuc2xhdGVaVHJhbnNmb3JtT3BlcmF0aW9uOgorICAgICAgICAgICAg
cmVzdWx0ICs9ICJ0cmFuc2xhdGVaKCI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUcmFuc2xhdGUzRFRyYW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAi
dHJhbnNsYXRlM2QoIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1hdHJpeFRy
YW5zZm9ybU9wZXJhdGlvbjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAibWF0cml4KCI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNYXRyaXgzRFRyYW5zZm9ybU9wZXJhdGlvbjoK
KyAgICAgICAgICAgIHJlc3VsdCArPSAibWF0cml4M2QoIjsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIHJl
c3VsdCArPSBDU1NWYWx1ZUxpc3Q6OmNzc1RleHQoKTsKKyAgICAKKyAgICByZXN1bHQgKz0gIiki
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21180</attachid>
            <date>2008-05-15 14:40:22 -0700</date>
            <delta_ts>2008-08-04 11:35:47 -0700</delta_ts>
            <desc>Patch for using updated animation controller and keyframe parsing</desc>
            <filename>animationcontroller.patch</filename>
            <type>text/plain</type>
            <size>209454</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQ0
LDEwICsyMTQ0LDEzIEBACiAKIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRBbmltYXRhYmxlU3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKQogewotICAgIGlmICghaXNUZXh0KCkgJiYgbV9zdHlsZSAmJiBz
dHlsZSkKLSAgICAgICAgc3R5bGUgPSBhbmltYXRpb25Db250cm9sbGVyKCktPnVwZGF0ZUltcGxp
Y2l0QW5pbWF0aW9ucyh0aGlzLCBzdHlsZSk7CisgICAgaWYgKCFpc1RleHQoKSAmJiBzdHlsZSkg
eworICAgICAgICBzdHlsZSA9IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+dXBkYXRlQW5pbWF0aW9u
cyh0aGlzLCBzdHlsZSk7CisgICAgfQogCi0gICAgc2V0U3R5bGUoc3R5bGUpOworICAgIGlmIChz
dHlsZSkgeworICAgICAgICBzZXRTdHlsZShzdHlsZSk7CisgICAgfQogfQogCiB2b2lkIFJlbmRl
ck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKQpAQCAtMjUyNCw3ICsyNTI3LDcg
QEAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAg
ICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CiAKLSAgICBhbmlt
YXRpb25Db250cm9sbGVyKCktPmNhbmNlbEltcGxpY2l0QW5pbWF0aW9ucyh0aGlzKTsKKyAgICBh
bmltYXRpb25Db250cm9sbGVyKCktPmNhbmNlbEFuaW1hdGlvbnModGhpcyk7CiAKICAgICAvLyBC
eSBkZWZhdWx0IG5vIHJlZi1jb3VudGluZy4gUmVuZGVyV2lkZ2V0OjpkZXN0cm95KCkgZG9lc24n
dCBjYWxsCiAgICAgLy8gdGhpcyBmdW5jdGlvbiBiZWNhdXNlIGl0IG5lZWRzIHRvIGRvIHJlZi1j
b3VudGluZy4gSWYgYW55dGhpbmcKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZp
c2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NTEsNyArNTUxLDcgQEAKICAgICAvLyBGSVhNRTogUmlnaHQgbm93IHRoaXMg
d2lsbCB0eXBpY2FsbHkgYmUgY2FsbGVkIG9ubHkgd2hlbiB1cGRhdGluZyBoYXBwZW5zIGZyb20g
dGhlIERPTSBvbiBleHBsaWNpdCBlbGVtZW50cy4KICAgICAvLyBXZSBkb24ndCB5ZXQgaGFuZGxl
IGdlbmVyYXRlZCBjb250ZW50IGFuaW1hdGlvbiBzdWNoIGFzIGZpcnN0LWxldHRlciBvciBiZWZv
cmUvYWZ0ZXIgKHdlJ2xsIHdvcnJ5IGFib3V0IHRoaXMgbGF0ZXIpLgogICAgIHZvaWQgc2V0QW5p
bWF0YWJsZVN0eWxlKFJlbmRlclN0eWxlKik7Ci0KKyAgICAKICAgICAvLyBTZXQgdGhlIHN0eWxl
IG9mIHRoZSBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgc3RhdGUgb2YgdGhlIG9iamVjdCBhY2NvcmRp
bmdseS4KICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKIApJbmRleDog
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJTdHlsZS5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclN0eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDYgKzc1LDcgQEAKIGNsYXNz
IENhY2hlZEltYWdlOwogY2xhc3MgQ2FjaGVkUmVzb3VyY2U7CiBjbGFzcyBDdXJzb3JMaXN0Owor
Y2xhc3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUGFpcjsKIGNsYXNzIFJlbmRlckFyZW5hOwogY2xh
c3MgU2hhZG93VmFsdWU7CkBAIC0xMjMyLDYwICsxMzE5LDEzNSBAQAogICAgIGRvdWJsZSBtX3ky
OwogfTsKIAotc3RydWN0IFRyYW5zaXRpb24geworZW51bSBFQW5pbVBsYXlTdGF0ZSB7IEFuaW1Q
bGF5U3RhdGVQbGF5aW5nLCBBbmltUGxheVN0YXRlUGF1c2VkIH07CisKKyNkZWZpbmUgQW5pbWF0
aW9uIFRyYW5zaXRpb24KKworY2xhc3MgVHJhbnNpdGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPFRy
YW5zaXRpb24+IHsKIHB1YmxpYzoKICAgICBUcmFuc2l0aW9uKCk7Ci0gICAgflRyYW5zaXRpb24o
KTsKLQotICAgIFRyYW5zaXRpb24qIG5leHQoKSBjb25zdCB7IHJldHVybiBtX25leHQ7IH0KLSAg
ICBUcmFuc2l0aW9uKiBuZXh0KCkgeyByZXR1cm4gbV9uZXh0OyB9Ci0KKyAgICAKKyAgICBjb25z
dCBUcmFuc2l0aW9uKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CisgICAg
VHJhbnNpdGlvbiogbmV4dCgpIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQorICAgIAorICAgIC8v
IHNoYXJlZCBiZXR3ZWVuIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zCisgICAgYm9vbCBpc0Rl
bGF5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheVNldDsgfQogICAgIGJvb2wgaXNEdXJhdGlv
blNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb25TZXQ7IH0KLSAgICBib29sIGlzUmVwZWF0
Q291bnRTZXQoKSBjb25zdCB7IHJldHVybiBtX3JlcGVhdENvdW50U2V0OyB9CiAgICAgYm9vbCBp
c1RpbWluZ0Z1bmN0aW9uU2V0KCkgY29uc3QgeyByZXR1cm4gbV90aW1pbmdGdW5jdGlvblNldDsg
fQotICAgIGJvb2wgaXNQcm9wZXJ0eVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlTZXQ7
IH0KKworICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAgICBib29sIGlzVHJhbnNpdGlvblByb3Bl
cnR5U2V0KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVNldDsgfQogICAgIAotICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFtX2R1cmF0aW9uU2V0ICYmICFtX3JlcGVhdENvdW50
U2V0ICYmICFtX3RpbWluZ0Z1bmN0aW9uU2V0ICYmICFtX3Byb3BlcnR5U2V0OyB9CisgICAgLy8g
YW5pbWF0aW9ucyBvbmx5CisgICAgYm9vbCBpc0FuaW1hdGlvbkRpcmVjdGlvblNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlyZWN0aW9uU2V0OyB9CisgICAgYm9vbCBpc0FuaW1hdGlvbkl0ZXJhdGlv
bkNvdW50U2V0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25Db3VudFNldDsgfQorICAgIGJv
b2wgaXNBbmltYXRpb25OYW1lU2V0KCkgY29uc3QgeyByZXR1cm4gbV9uYW1lU2V0OyB9CisgICAg
Ym9vbCBpc0FuaW1hdGlvblBsYXlTdGF0ZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRl
U2V0OyB9CisgICAgCisgICAgLy8gaXMgdGhlIHNwZWNpYWwgIm5vbmUiIGFuaW1hdGlvbiAoYW5p
bWF0aW9uLW5hbWU6IG5vbmUpCisgICAgYm9vbCBpc05vbmVBbmltYXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX2lzTm9uZTsgfQorICAgIC8vIHdlIGNhbiBtYWtlIHBsYWNlaG9sZGVyIFRyYW5zaXRp
b24gb2JqZWN0cyB0byBrZWVwIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMKKyAgICAvLyBvZiBw
cm9wZXJ0aWVzIGluIHN5bmMuIGlzVmFsaWRBbmltYXRpb24gbWVhbnMgdGhpcyBpcyBub3QgYSBw
bGFjZWhvbGRlci4KKyAgICBib29sIGlzVmFsaWRBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiAh
bV9pc05vbmUgJiYgIW1fbmFtZS5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICBib29sIGlzRW1wdHko
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICghbV9kaXJlY3Rpb25TZXQgJiYgIW1fZHVy
YXRpb25TZXQgJiYgIW1fbmFtZVNldCAmJiAhbV9wbGF5U3RhdGVTZXQgJiYgCisgICAgICAgICAg
ICAgICAgIW1faXRlcmF0aW9uQ291bnRTZXQgJiYgIW1fZGVsYXlTZXQgJiYgIW1fdGltaW5nRnVu
Y3Rpb25TZXQgJiYgIW1fcHJvcGVydHlTZXQpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzRW1w
dHlPclplcm9EdXJhdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbXB0eSgp
IHx8IChtX2R1cmF0aW9uID09IDAgJiYgbV9kZWxheSA8PSAwKTsKKyAgICB9CisgICAgCisgICAg
Ly8gc2hhcmVkIGJldHdlZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKKyAgICB2b2lkIGNs
ZWFyRGVsYXkoKSB7IG1fZGVsYXlTZXQgPSBmYWxzZTsgfQogICAgIHZvaWQgY2xlYXJEdXJhdGlv
bigpIHsgbV9kdXJhdGlvblNldCA9IGZhbHNlOyB9Ci0gICAgdm9pZCBjbGVhclJlcGVhdENvdW50
KCkgeyBtX3JlcGVhdENvdW50U2V0ID0gZmFsc2U7IH0KICAgICB2b2lkIGNsZWFyVGltaW5nRnVu
Y3Rpb24oKSB7IG1fdGltaW5nRnVuY3Rpb25TZXQgPSBmYWxzZTsgfQotICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0eSgpIHsgbV9wcm9wZXJ0eVNldCA9IGZhbHNlOyB9CiAKLSAgICBpbnQgZHVyYXRpb24o
KSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9Ci0gICAgaW50IHJlcGVhdENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9yZXBlYXRDb3VudDsgfQorICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAg
ICB2b2lkIGNsZWFyVHJhbnNpdGlvblByb3BlcnR5KCkgeyBtX3Byb3BlcnR5U2V0ID0gZmFsc2U7
IH0KKworICAgIC8vIGFuaW1hdGlvbnMgb25seQorICAgIHZvaWQgY2xlYXJBbmltYXRpb25EaXJl
Y3Rpb24oKSB7IG1fZGlyZWN0aW9uU2V0ID0gZmFsc2U7IH0KKyAgICB2b2lkIGNsZWFyQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoKSB7IG1faXRlcmF0aW9uQ291bnRTZXQgPSBmYWxzZTsgfQorICAg
IHZvaWQgY2xlYXJBbmltYXRpb25OYW1lKCkgeyBtX25hbWVTZXQgPSBmYWxzZTsgfQorICAgIHZv
aWQgY2xlYXJBbmltYXRpb25QbGF5U3RhdGUoKSB7IG1fcGxheVN0YXRlU2V0ID0gQW5pbVBsYXlT
dGF0ZVBsYXlpbmc7IH0KKyAgICAKKyAgICAvLyBzaGFyZWQgYmV0d2VlbiB0cmFuc2l0aW9ucyBh
bmQgYW5pbWF0aW9ucworICAgIGZsb2F0IGRlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9kZWxheTsg
fQorICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAg
ICBjb25zdCBUaW1pbmdGdW5jdGlvbiYgdGltaW5nRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBt
X3RpbWluZ0Z1bmN0aW9uOyB9Ci0gICAgaW50IHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0eTsgfQorCisgICAgLy8gdHJhbnNpdGlvbnMgb25seQorICAgIGludCB0cmFuc2l0aW9u
UHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisKKyAgICAvLyBhbmltYXRp
b25zIG9ubHkKKyAgICBib29sIGFuaW1hdGlvbkRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
ZGlyZWN0aW9uOyB9CisgICAgaW50IGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9pdGVyYXRpb25Db3VudDsgfQorICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorICAgIEVBbmltUGxheVN0YXRlIGFuaW1hdGlv
blBsYXlTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxheVN0YXRlOyB9CisKKyAgICBjb25zdCBS
ZWZQdHI8S2V5ZnJhbWVMaXN0PiYga2V5ZnJhbWVMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9rZXlm
cmFtZUxpc3Q7IH0KICAgICAKLSAgICB2b2lkIHNldER1cmF0aW9uKGludCBkKSB7IG1fZHVyYXRp
b24gPSBkOyBtX2R1cmF0aW9uU2V0ID0gdHJ1ZTsgfQotICAgIHZvaWQgc2V0UmVwZWF0Q291bnQo
aW50IGMpIHsgbV9yZXBlYXRDb3VudCA9IGM7IG1fcmVwZWF0Q291bnRTZXQgPSB0cnVlOyB9Cisg
ICAgLy8gc2hhcmVkIGJldHdlZW4gdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMKKyAgICB2b2lk
IHNldERlbGF5KGZsb2F0IGMpIHsgbV9kZWxheSA9IGM7IG1fZGVsYXlTZXQgPSB0cnVlOyB9Cisg
ICAgdm9pZCBzZXREdXJhdGlvbihkb3VibGUgZCkgeyBBU1NFUlQoZCA+PSAwKTsgbV9kdXJhdGlv
biA9IGQ7IG1fZHVyYXRpb25TZXQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlv
bihjb25zdCBUaW1pbmdGdW5jdGlvbiYgZikgeyBtX3RpbWluZ0Z1bmN0aW9uID0gZjsgbV90aW1p
bmdGdW5jdGlvblNldCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFByb3BlcnR5KGludCB0KSB7IG1f
cHJvcGVydHkgPSB0OyBtX3Byb3BlcnR5U2V0ID0gdHJ1ZTsgfQogCi0gICAgdm9pZCBzZXROZXh0
KFRyYW5zaXRpb24qIG4pIHsgaWYgKG1fbmV4dCAhPSBuKSB7IGRlbGV0ZSBtX25leHQ7IG1fbmV4
dCA9IG47IH0gfQorICAgIC8vIHRyYW5zaXRpb25zIG9ubHkKKyAgICB2b2lkIHNldFRyYW5zaXRp
b25Qcm9wZXJ0eShpbnQgdCkgeyBtX3Byb3BlcnR5ID0gdDsgbV9wcm9wZXJ0eVNldCA9IHRydWU7
IH0KIAorICAgIC8vIGFuaW1hdGlvbnMgb25seQorICAgIHZvaWQgc2V0QW5pbWF0aW9uRGlyZWN0
aW9uKGJvb2wgZCkgeyBtX2RpcmVjdGlvbiA9IGQ7IG1fZGlyZWN0aW9uU2V0ID0gdHJ1ZTsgfQor
ICAgIHZvaWQgc2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoaW50IGMpIHsgbV9pdGVyYXRpb25D
b3VudCA9IGM7IG1faXRlcmF0aW9uQ291bnRTZXQgPSB0cnVlOyB9CisgICAgdm9pZCBzZXRBbmlt
YXRpb25OYW1lKGNvbnN0IFN0cmluZyYgbikgeyBtX25hbWUgPSBuOyBtX25hbWVTZXQgPSB0cnVl
OyB9CisgICAgdm9pZCBzZXRBbmltYXRpb25QbGF5U3RhdGUoRUFuaW1QbGF5U3RhdGUgZCkgeyBt
X3BsYXlTdGF0ZSA9IGQ7IG1fcGxheVN0YXRlU2V0ID0gdHJ1ZTsgfQorICAgIAorICAgIHZvaWQg
c2V0SXNOb25lQW5pbWF0aW9uKGJvb2wgbikgeyBtX2lzTm9uZSA9IG47IH0KKyAgICAKKyAgICB2
b2lkIHNldE5leHQoVHJhbnNpdGlvbiogbikgeyBpZiAobV9uZXh0LmdldCgpICE9IG4pIHsgbV9u
ZXh0ID0gbjsgfSB9CisgICAgCisgICAgdm9pZCBzZXRBbmltYXRpb25LZXlmcmFtZShjb25zdCBS
ZWZQdHI8S2V5ZnJhbWVMaXN0PiBrZXlmcmFtZSkgIHsgbV9rZXlmcmFtZUxpc3QgPSBrZXlmcmFt
ZTsgfQorICAgIAogICAgIFRyYW5zaXRpb24mIG9wZXJhdG9yPShjb25zdCBUcmFuc2l0aW9uJiBv
KTsgICAgCiAgICAgVHJhbnNpdGlvbihjb25zdCBUcmFuc2l0aW9uJiBvKTsKLQotICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBUcmFuc2l0aW9uJiBvKSBjb25zdDsKLSAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgVHJhbnNpdGlvbiYgbykgY29uc3QgewotICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvKTsKLSAgICB9Ci0KKyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBpZiBhbGwgbWVtYmVycyBv
ZiB0aGlzIGNsYXNzIG1hdGNoIChleGNsdWRpbmcgbV9uZXh0KQorICAgIGJvb2wgdHJhbnNpdGlv
bnNNYXRjaChjb25zdCBUcmFuc2l0aW9uKiB0LCBib29sIG1hdGNoUGxheVN0YXRlcz10cnVlKSBj
b25zdDsKKyAgICAKKyAgICAvLyByZXR1cm4gdHJ1ZSBldmVyeSB0cmFuc2l0aW9uIGluIHRoZSBj
aGFpbiAoZGVmaW5lZCBieSBtX25leHQpIG1hdGNoIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUcmFuc2l0aW9uJiBvKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uc01hdGNoKCZvKSAmJiAo
KG1fbmV4dCAmJiBvLm1fbmV4dCkgPyAoKm1fbmV4dCA9PSAqby5tX25leHQpIDogKG1fbmV4dCA9
PSBvLm1fbmV4dCkpOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRyYW5zaXRpb24mIG8p
IGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0KKyAgICAKICAgICB2b2lkIGZpbGxVbnNl
dFByb3BlcnRpZXMoKTsKLQotICAgIGludCBtX2R1cmF0aW9uOwotICAgIGludCBtX3JlcGVhdENv
dW50OworICAgIAorcHJpdmF0ZToKKyAgICBib29sIG1fZGlyZWN0aW9uOworICAgIGRvdWJsZSBt
X2R1cmF0aW9uOworICAgIFN0cmluZyBtX25hbWU7CisgICAgRUFuaW1QbGF5U3RhdGUgbV9wbGF5
U3RhdGU7CisgICAgaW50IG1faXRlcmF0aW9uQ291bnQ7CiAgICAgVGltaW5nRnVuY3Rpb24gbV90
aW1pbmdGdW5jdGlvbjsKKyAgICBmbG9hdCBtX2RlbGF5OwogICAgIGludCBtX3Byb3BlcnR5Owot
Ci0gICAgYm9vbCBtX2R1cmF0aW9uU2V0OwotICAgIGJvb2wgbV9yZXBlYXRDb3VudFNldDsKLSAg
ICBib29sIG1fdGltaW5nRnVuY3Rpb25TZXQ7Ci0gICAgYm9vbCBtX3Byb3BlcnR5U2V0OwotCi0g
ICAgVHJhbnNpdGlvbiogbV9uZXh0OworICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IG1fa2V5ZnJh
bWVMaXN0OworICAgIAorICAgIGJvb2wgbV9kaXJlY3Rpb25TZXQgICAgIDogMTsKKyAgICBib29s
IG1fZHVyYXRpb25TZXQgICAgICA6IDE7CisgICAgYm9vbCBtX25hbWVTZXQgICAgICAgICAgOiAx
OworICAgIGJvb2wgbV9wbGF5U3RhdGVTZXQgICAgIDogMTsKKyAgICBib29sIG1faXRlcmF0aW9u
Q291bnRTZXQgICA6IDE7CisgICAgYm9vbCBtX3RpbWluZ0Z1bmN0aW9uU2V0OiAxOworICAgIGJv
b2wgbV9kZWxheVNldCAgICAgICAgIDogMTsKKyAgICBib29sIG1fcHJvcGVydHlTZXQgICAgICA6
IDE7CisgICAgCisgICAgYm9vbCBtX2lzTm9uZSA6IDE7CisgICAgCisgICAgUmVmUHRyPFRyYW5z
aXRpb24+IG1fbmV4dDsKIH07Ci0KKyAgICAKIGNsYXNzIFN0eWxlUmVmbGVjdGlvbiA6IHB1Ymxp
YyBSZWZDb3VudGVkPFN0eWxlUmVmbGVjdGlvbj4KIHsKIHB1YmxpYzoKQEAgLTEzMzQsNiArMTQ5
Niw4IEBACiAgICAgYm9vbCBzaGFkb3dEYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHJlZmxlY3Rpb25EYXRhRXF1aXZhbGVu
dChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJiBvKSBjb25zdDsKICAgICBib29sIHRy
YW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhJikg
Y29uc3Q7CisgICAgYm9vbCBhbmltYXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhJikgY29uc3Q7CisgICAgdm9pZCB1cGRhdGVLZXlmcmFtZXMoY29uc3Qg
Q1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3Rvcik7CiAKICAgICBpbnQgbGluZUNsYW1wOyAv
LyBBbiBBcHBsZSBleHRlbnNpb24uCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAt
MTM2MCw3ICsxNTI0LDggQEAKICAgICAKICAgICBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBtX2Jv
eFJlZmxlY3Q7CiAKLSAgICBUcmFuc2l0aW9uKiBtX3RyYW5zaXRpb247CisgICAgUmVmUHRyPFRy
YW5zaXRpb24+IG1fdHJhbnNpdGlvbjsKKyAgICBSZWZQdHI8VHJhbnNpdGlvbj4gbV9hbmltYXRp
b247CiAKICAgICBGaWxsTGF5ZXIgbV9tYXNrOwogICAgIE5pbmVQaWVjZUltYWdlIG1fbWFza0Jv
eEltYWdlOwpAQCAtMjA0OCwxMyArMjIxMywyMCBAQAogICAgIExlbmd0aCB0cmFuc2Zvcm1Pcmln
aW5YKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5t
X3g7IH0KICAgICBMZW5ndGggdHJhbnNmb3JtT3JpZ2luWSgpIGNvbnN0IHsgcmV0dXJuIHJhcmVO
b25Jbmhlcml0ZWREYXRhLT5tX3RyYW5zZm9ybS0+bV95OyB9CiAgICAgYm9vbCBoYXNUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiAhcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fdHJhbnNmb3JtLT5t
X29wZXJhdGlvbnMuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBhcHBseVRyYW5zZm9ybShBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBJbnRTaXplJiBib3JkZXJCb3hTaXplKSBjb25zdDsKICAgICBib29s
IGhhc01hc2soKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9tYXNrLmhh
c0ltYWdlKCkgfHwgcmFyZU5vbkluaGVyaXRlZERhdGEtPm1fbWFza0JveEltYWdlLmhhc0ltYWdl
KCk7IH0KICAgICAvLyBFbmQgQ1NTMyBHZXR0ZXJzCiAKICAgICAvLyBBcHBsZS1zcGVjaWZpYyBw
cm9wZXJ0eSBnZXR0ZXIgbWV0aG9kcwogICAgIFRyYW5zaXRpb24qIGFjY2Vzc1RyYW5zaXRpb25z
KCk7Ci0gICAgY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbnMoKSBjb25zdCB7IHJldHVybiBy
YXJlTm9uSW5oZXJpdGVkRGF0YS0+bV90cmFuc2l0aW9uOyB9CisgICAgVHJhbnNpdGlvbiogYWNj
ZXNzQW5pbWF0aW9ucygpOworICAgIAorICAgIC8vIHJldHVybiB0aGUgZmlyc3QgZm91bmQgVHJh
bnNpdGlvbiAoaW5jbHVkaW5nICdhbGwnIHRyYW5zaXRpb25zKQorICAgIGNvbnN0IFRyYW5zaXRp
b24qIHRyYW5zaXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcGVydHkpOworICAgIAorICAgIGNvbnN0
IFRyYW5zaXRpb24qIHRyYW5zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gcmFyZU5vbkluaGVyaXRl
ZERhdGEtPm1fdHJhbnNpdGlvbi5nZXQoKTsgfQorICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW1h
dGlvbnMoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5oZXJpdGVkRGF0YS0+bV9hbmltYXRpb24u
Z2V0KCk7IH0KKwogICAgIGludCBsaW5lQ2xhbXAoKSBjb25zdCB7IHJldHVybiByYXJlTm9uSW5o
ZXJpdGVkRGF0YS0+bGluZUNsYW1wOyB9CiAgICAgYm9vbCB0ZXh0U2l6ZUFkanVzdCgpIGNvbnN0
IHsgcmV0dXJuIHJhcmVJbmhlcml0ZWREYXRhLT50ZXh0U2l6ZUFkanVzdDsgfQogICAgIEVUZXh0
U2VjdXJpdHkgdGV4dFNlY3VyaXR5KCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RVRleHRT
ZWN1cml0eT4ocmFyZUluaGVyaXRlZERhdGEtPnRleHRTZWN1cml0eSk7IH0KQEAgLTIzMTgsOSAr
MjQ5MCwxNiBAQAogICAgIC8vIEVuZCBDU1MzIFNldHRlcnMKICAgIAogICAgIC8vIEFwcGxlLXNw
ZWNpZmljIHByb3BlcnR5IHNldHRlcnMKLSAgICB2b2lkIGNsZWFyVHJhbnNpdGlvbnMoKSB7IGRl
bGV0ZSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uOyByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uID0gMDsgfQorICAgIHZvaWQgdXBk
YXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IpIHsgaWYg
KHJhcmVOb25Jbmhlcml0ZWREYXRhLmdldCgpKSByYXJlTm9uSW5oZXJpdGVkRGF0YS5hY2Nlc3Mo
KS0+dXBkYXRlS2V5ZnJhbWVzKHN0eWxlU2VsZWN0b3IpOyB9CisKKyAgICB2b2lkIGNsZWFyVHJh
bnNpdGlvbnMoKSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX3RyYW5zaXRpb24g
PSAwOyB9CiAgICAgdm9pZCBpbmhlcml0VHJhbnNpdGlvbnMoY29uc3QgVHJhbnNpdGlvbiogcGFy
ZW50KSB7IGNsZWFyVHJhbnNpdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERh
dGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9IG5ldyBUcmFuc2l0aW9uKCpwYXJlbnQpOyB9CiAg
ICAgdm9pZCBhZGp1c3RUcmFuc2l0aW9ucygpOworCisgICAgdm9pZCBjbGVhckFuaW1hdGlvbnMo
KSB7IHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbiA9IDA7IH0KKyAg
ICB2b2lkIGluaGVyaXRBbmltYXRpb25zKGNvbnN0IFRyYW5zaXRpb24qIHBhcmVudCkgeyBjbGVh
ckFuaW1hdGlvbnMoKTsgaWYgKHBhcmVudCkgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCkt
Pm1fYW5pbWF0aW9uID0gbmV3IFRyYW5zaXRpb24oKnBhcmVudCk7IH0KKyAgICB2b2lkIGFkanVz
dEFuaW1hdGlvbnMoKTsKKwogICAgIHZvaWQgc2V0TGluZUNsYW1wKGludCBjKSB7IFNFVF9WQVIo
cmFyZU5vbkluaGVyaXRlZERhdGEsIGxpbmVDbGFtcCwgYyk7IH0KICAgICB2b2lkIHNldFRleHRT
aXplQWRqdXN0KGJvb2wgYikgeyBTRVRfVkFSKHJhcmVJbmhlcml0ZWREYXRhLCB0ZXh0U2l6ZUFk
anVzdCwgYik7IH0KICAgICB2b2lkIHNldFRleHRTZWN1cml0eShFVGV4dFNlY3VyaXR5IGFUZXh0
U2VjdXJpdHkpIHsgU0VUX1ZBUihyYXJlSW5oZXJpdGVkRGF0YSwgdGV4dFNlY3VyaXR5LCBhVGV4
dFNlY3VyaXR5KTsgfSAKQEAgLTI0NzcsMTAgKzI2NTYsMTcgQEAKICAgICBzdGF0aWMgTGVuZ3Ro
IGluaXRpYWxUcmFuc2Zvcm1PcmlnaW5ZKCkgeyByZXR1cm4gTGVuZ3RoKDUwLjAsIFBlcmNlbnQp
OyB9CiAgICAgCiAgICAgLy8gS2VlcCB0aGVzZSBhdCB0aGUgZW5kLgotICAgIHN0YXRpYyBpbnQg
aW5pdGlhbFRyYW5zaXRpb25EdXJhdGlvbigpIHsgcmV0dXJuIDA7IH0KLSAgICBzdGF0aWMgaW50
IGluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSB7IHJldHVybiAxOyB9Ci0gICAgc3RhdGlj
IFRpbWluZ0Z1bmN0aW9uIGluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSB7IHJldHVy
biBUaW1pbmdGdW5jdGlvbigpOyB9CisgICAgc3RhdGljIGZsb2F0IGluaXRpYWxEZWxheSgpIHsg
cmV0dXJuIDA7IH0KKyAgICBzdGF0aWMgZG91YmxlIGluaXRpYWxEdXJhdGlvbigpIHsgcmV0dXJu
IDA7IH0KKyAgICBzdGF0aWMgVGltaW5nRnVuY3Rpb24gaW5pdGlhbFRpbWluZ0Z1bmN0aW9uKCkg
eyByZXR1cm4gVGltaW5nRnVuY3Rpb24oKTsgfQorCisgICAgc3RhdGljIGJvb2wgaW5pdGlhbEFu
aW1hdGlvbkRpcmVjdGlvbigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgc3RhdGljIGludCBpbml0
aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSB7IHJldHVybiAxOyB9CisgICAgc3RhdGljIFN0
cmluZyBpbml0aWFsQW5pbWF0aW9uTmFtZSgpIHsgcmV0dXJuIFN0cmluZygpOyB9CisgICAgc3Rh
dGljIEVBbmltUGxheVN0YXRlIGluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSB7IHJldHVybiBB
bmltUGxheVN0YXRlUGxheWluZzsgfQorCiAgICAgc3RhdGljIGludCBpbml0aWFsVHJhbnNpdGlv
blByb3BlcnR5KCkgeyByZXR1cm4gY0FuaW1hdGVBbGw7IH0KKyAgICAKICAgICBzdGF0aWMgaW50
IGluaXRpYWxMaW5lQ2xhbXAoKSB7IHJldHVybiAtMTsgfQogICAgIHN0YXRpYyBib29sIGluaXRp
YWxUZXh0U2l6ZUFkanVzdCgpIHsgcmV0dXJuIHRydWU7IH0KICAgICBzdGF0aWMgRVRleHRTZWN1
cml0eSBpbml0aWFsVGV4dFNlY3VyaXR5KCkgeyByZXR1cm4gVFNOT05FOyB9CkBAIC0yNDkwLDYg
KzI2NzYsNDUgQEAKICNlbmRpZgogfTsKIAorI3ByYWdtYSBtYXJrIC0KKyAgICAKK2NsYXNzIEtl
eWZyYW1lVmFsdWUgeworcHVibGljOgorICAgIEtleWZyYW1lVmFsdWUoKSA6IGtleSgtMSkgeyB9
CisgICAgZmxvYXQga2V5OworICAgIFJlbmRlclN0eWxlIHN0eWxlOworfTsKKworY2xhc3MgS2V5
ZnJhbWVMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8S2V5ZnJhbWVMaXN0PiB7CitwdWJsaWM6Cisg
ICAgS2V5ZnJhbWVMaXN0KGNvbnN0IEF0b21pY1N0cmluZyYgaW5BbmltTmFtZSkKKyAgICA6IG1f
YW5pbWF0aW9uTmFtZShpbkFuaW1OYW1lKQorICAgIHsKKyAgICAgICAgaW5zZXJ0KDAsIFJlbmRl
clN0eWxlKCkpOyBpbnNlcnQoMSwgUmVuZGVyU3R5bGUoKSk7CisgICAgfQorICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0OworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBLZXlmcmFtZUxpc3QmIG8pIGNvbnN0IHsgcmV0dXJuICEoKnRoaXMgPT0gbyk7IH0K
KyAgICAKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmICAgIGFuaW1hdGlvbk5hbWUoKSBjb25zdCAg
ICAgICAgeyByZXR1cm4gbV9hbmltYXRpb25OYW1lOyB9CisgICAgCisgICAgdm9pZCBpbnNlcnQo
ZmxvYXQgaW5LZXksIGNvbnN0IFJlbmRlclN0eWxlJiBpblN0eWxlKTsKKyAgICAKKyAgICB2b2lk
IGFkZFByb3BlcnR5KGludCBwcm9wKSB7IG1fcHJvcGVydGllcy5hZGQocHJvcCk7IH0KKyAgICBi
b29sIGNvbnRhaW5zUHJvcGVydHkoaW50IHByb3ApIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydGll
cy5jb250YWlucyhwcm9wKTsgfQorICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgYmVn
aW5Qcm9wZXJ0aWVzKCkgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmJlZ2luKCk7IH0KKyAgICBIYXNo
U2V0PGludD46OmNvbnN0X2l0ZXJhdG9yIGVuZFByb3BlcnRpZXMoKSB7IHJldHVybiBtX3Byb3Bl
cnRpZXMuZW5kKCk7IH0KKyAgICAKKyAgICB2b2lkIGNsZWFyKCkgeyBtX2tleWZyYW1lcy5jbGVh
cigpOyBtX3Byb3BlcnRpZXMuY2xlYXIoKTsgfQorICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsg
cmV0dXJuIG1fa2V5ZnJhbWVzLmlzRW1wdHkoKTsgfQorICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVl
Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW5LZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZy
YW1lcy5iZWdpbigpOyB9CisgICAgVmVjdG9yPEtleWZyYW1lVmFsdWU+Ojpjb25zdF9pdGVyYXRv
ciBlbmRLZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5lbmQoKTsgfQorICAg
IAorcHJvdGVjdGVkOgorICAgIEF0b21pY1N0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgVmVj
dG9yPEtleWZyYW1lVmFsdWU+IG1fa2V5ZnJhbWVzOworICAgIEhhc2hTZXQ8aW50PiBtX3Byb3Bl
cnRpZXM7ICAgICAgIC8vIHRoZSBwcm9wZXJ0aWVzIGJlaW5nIGFuaW1hdGVkCit9OworICAgIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJX
aWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBACiAgICAgLy8gU28gdGhl
IGNvZGUgYmVsb3cgaW5jbHVkZXMgY29waWVkIGFuZCBwYXN0ZWQgY29udGVudHMgb2YKICAgICAv
LyBib3RoIFJlbmRlckJveDo6ZGVzdHJveSgpIGFuZCBSZW5kZXJPYmplY3Q6OmRlc3Ryb3koKS4K
ICAgICAvLyBGaXggb3JpZ2luYWxseSBtYWRlIGZvciA8cmRhcjovL3Byb2JsZW0vNDIyODgxOD4u
Ci0gICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5jYW5jZWxJbXBsaWNpdEFuaW1hdGlvbnModGhp
cyk7CisgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLT5jYW5jZWxBbmltYXRpb25zKHRoaXMpOwog
CiAgICAgaWYgKFJlbmRlclZpZXcqIHYgPSB2aWV3KCkpCiAgICAgICAgIHYtPnJlbW92ZVdpZGdl
dCh0aGlzKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclN0eWxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTdHlsZS5jcHAJKHJldmlzaW9uIDMyOTEy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU3R5bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw2ICs0MSwxMyBAQAogICAgIHJldHVybiB0cnVlOwogfQogCisvLyBjb21wYXJlIGZsb2F0
aW5nIHBvaW50cywgdGFraW5nIG5hbiBpbnRvIGFjY291bnQKK3N0YXRpYyBpbmxpbmUgYm9vbCBm
bG9hdGluZ1BvaW50VmFsdWVzRXF1YWwoZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4g
KGlzbmFuKGEpICYmIGlzbmFuKGIpKSB8fCAoYSA9PSBiKTsKK30KKyAgICAKKyAgICAKIGJvb2wg
TmluZVBpZWNlSW1hZ2U6Om9wZXJhdG9yPT0oY29uc3QgTmluZVBpZWNlSW1hZ2UmIG8pIGNvbnN0
CiB7CiAgICAgcmV0dXJuIGltYWdlc0VxdWl2YWxlbnQobV9pbWFnZS5nZXQoKSwgby5tX2ltYWdl
LmdldCgpKSAmJiBtX3NsaWNlcyA9PSBvLm1fc2xpY2VzICYmIG1faG9yaXpvbnRhbFJ1bGUgPT0g
by5tX2hvcml6b250YWxSdWxlICYmCisgICAgCisgICAgCitUcmFuc2l0aW9uOjpUcmFuc2l0aW9u
KCkKKzogbV9kaXJlY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24o
KSkKKywgbV9kdXJhdGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbER1cmF0aW9uKCkpCissIG1fbmFt
ZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbk5hbWUoKSkKKywgbV9wbGF5U3RhdGUoUmVu
ZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSkKKywgbV9pdGVyYXRpb25Db3Vu
dChSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkpCissIG1fdGlt
aW5nRnVuY3Rpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpKQorLCBtX2Rl
bGF5KFJlbmRlclN0eWxlOjppbml0aWFsRGVsYXkoKSkKKywgbV9wcm9wZXJ0eShSZW5kZXJTdHls
ZTo6aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKQorLCBtX2RpcmVjdGlvblNldChmYWxzZSkK
KywgbV9kdXJhdGlvblNldChmYWxzZSkKKywgbV9uYW1lU2V0KGZhbHNlKQorLCBtX3BsYXlTdGF0
ZVNldChmYWxzZSkKKywgbV9pdGVyYXRpb25Db3VudFNldChmYWxzZSkKKywgbV90aW1pbmdGdW5j
dGlvblNldChmYWxzZSkKKywgbV9kZWxheVNldChmYWxzZSkKKywgbV9wcm9wZXJ0eVNldChmYWxz
ZSkKKywgbV9pc05vbmUoZmFsc2UpCissIG1fbmV4dCgwKQoreworfQogCi1UcmFuc2l0aW9uOjp+
VHJhbnNpdGlvbigpCitUcmFuc2l0aW9uOjpUcmFuc2l0aW9uKGNvbnN0IFRyYW5zaXRpb24mIG8p
Cis6IFJlZkNvdW50ZWQ8VHJhbnNpdGlvbj4oKQorLCBtX2RpcmVjdGlvbihvLm1fZGlyZWN0aW9u
KQorLCBtX2R1cmF0aW9uKG8ubV9kdXJhdGlvbikKKywgbV9uYW1lKG8ubV9uYW1lKQorLCBtX3Bs
YXlTdGF0ZShvLm1fcGxheVN0YXRlKQorLCBtX2l0ZXJhdGlvbkNvdW50KG8ubV9pdGVyYXRpb25D
b3VudCkKKywgbV90aW1pbmdGdW5jdGlvbihvLm1fdGltaW5nRnVuY3Rpb24pCissIG1fZGVsYXko
by5tX2RlbGF5KQorLCBtX3Byb3BlcnR5KG8ubV9wcm9wZXJ0eSkKKywgbV9rZXlmcmFtZUxpc3Qo
by5tX2tleWZyYW1lTGlzdCkKKywgbV9kaXJlY3Rpb25TZXQoby5tX2RpcmVjdGlvblNldCkKKywg
bV9kdXJhdGlvblNldChvLm1fZHVyYXRpb25TZXQpCissIG1fbmFtZVNldChvLm1fbmFtZVNldCkK
KywgbV9wbGF5U3RhdGVTZXQoby5tX3BsYXlTdGF0ZVNldCkKKywgbV9pdGVyYXRpb25Db3VudFNl
dChvLm1faXRlcmF0aW9uQ291bnRTZXQpCissIG1fdGltaW5nRnVuY3Rpb25TZXQoby5tX3RpbWlu
Z0Z1bmN0aW9uU2V0KQorLCBtX2RlbGF5U2V0KG8ubV9kZWxheVNldCkKKywgbV9wcm9wZXJ0eVNl
dChvLm1fcHJvcGVydHlTZXQpCissIG1faXNOb25lKG8ubV9pc05vbmUpCissIG1fbmV4dChvLm1f
bmV4dCA/IG5ldyBUcmFuc2l0aW9uKCooby5tX25leHQuZ2V0KCkpKSA6IDApCiB7Ci0gICAgZGVs
ZXRlIG1fbmV4dDsKIH0KIAogVHJhbnNpdGlvbiYgVHJhbnNpdGlvbjo6b3BlcmF0b3I9KGNvbnN0
IFRyYW5zaXRpb24mIG8pCiB7Ci0gICAgaWYgKG1fbmV4dCAhPSBvLm1fbmV4dCkgewotICAgICAg
ICBkZWxldGUgbV9uZXh0OworICAgIGlmIChtX25leHQgIT0gby5tX25leHQpCiAgICAgICAgIG1f
bmV4dCA9IG8ubV9uZXh0ID8gbmV3IFRyYW5zaXRpb24oKm8ubV9uZXh0KSA6IDA7Ci0gICAgfQot
CisgICAgCisgICAgbV9kaXJlY3Rpb24gPSBvLm1fZGlyZWN0aW9uOwogICAgIG1fZHVyYXRpb24g
PSBvLm1fZHVyYXRpb247Ci0gICAgbV9yZXBlYXRDb3VudCA9IG8ubV9yZXBlYXRDb3VudDsKKyAg
ICBtX25hbWUgPSBvLm1fbmFtZTsKKyAgICBtX3BsYXlTdGF0ZSA9IG8ubV9wbGF5U3RhdGU7Cisg
ICAgbV9pdGVyYXRpb25Db3VudCA9IG8ubV9pdGVyYXRpb25Db3VudDsKICAgICBtX3RpbWluZ0Z1
bmN0aW9uID0gby5tX3RpbWluZ0Z1bmN0aW9uOworICAgIG1fZGVsYXkgPSBvLm1fZGVsYXk7CiAg
ICAgbV9wcm9wZXJ0eSA9IG8ubV9wcm9wZXJ0eTsKLQorICAgIAorICAgIG1fZGlyZWN0aW9uU2V0
ID0gby5tX2RpcmVjdGlvblNldDsKICAgICBtX2R1cmF0aW9uU2V0ID0gby5tX2R1cmF0aW9uU2V0
OwotICAgIG1fcmVwZWF0Q291bnRTZXQgPSBvLm1fcmVwZWF0Q291bnRTZXQ7CisgICAgbV9uYW1l
U2V0ID0gby5tX25hbWVTZXQ7CisgICAgbV9wbGF5U3RhdGVTZXQgPSBvLm1fcGxheVN0YXRlU2V0
OworICAgIG1faXRlcmF0aW9uQ291bnRTZXQgPSBvLm1faXRlcmF0aW9uQ291bnRTZXQ7CiAgICAg
bV90aW1pbmdGdW5jdGlvblNldCA9IG8ubV90aW1pbmdGdW5jdGlvblNldDsKKyAgICBtX2RlbGF5
U2V0ID0gby5tX2RlbGF5U2V0OwogICAgIG1fcHJvcGVydHlTZXQgPSBvLm1fcHJvcGVydHlTZXQ7
Ci0KKyAgICAKKyAgICBtX2lzTm9uZSA9IG8ubV9pc05vbmU7CisgICAgCiAgICAgcmV0dXJuICp0
aGlzOwogfQogCi1ib29sIFRyYW5zaXRpb246Om9wZXJhdG9yPT0oY29uc3QgVHJhbnNpdGlvbiYg
bykgY29uc3QKK2Jvb2wgVHJhbnNpdGlvbjo6dHJhbnNpdGlvbnNNYXRjaChjb25zdCBUcmFuc2l0
aW9uKiBvLCBib29sIG1hdGNoUGxheVN0YXRlcyAvKiA9IHRydWUgKi8pIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fZHVyYXRpb24gPT0gby5tX2R1cmF0aW9uICYmIG1fcmVwZWF0Q291bnQgPT0gby5t
X3JlcGVhdENvdW50ICYmIG1fdGltaW5nRnVuY3Rpb24gPT0gby5tX3RpbWluZ0Z1bmN0aW9uICYm
Ci0gICAgICAgICAgIG1fcHJvcGVydHkgPT0gby5tX3Byb3BlcnR5ICYmIG1fZHVyYXRpb25TZXQg
PT0gby5tX2R1cmF0aW9uU2V0ICYmIG1fcmVwZWF0Q291bnRTZXQgPT0gby5tX3JlcGVhdENvdW50
U2V0ICYmCi0gICAgICAgICAgIG1fdGltaW5nRnVuY3Rpb25TZXQgPT0gby5tX3RpbWluZ0Z1bmN0
aW9uU2V0ICYmIG1fcHJvcGVydHlTZXQgPT0gby5tX3Byb3BlcnR5U2V0ICYmCi0gICAgICAgICAg
ICgobV9uZXh0ICYmIG8ubV9uZXh0KSA/ICptX25leHQgPT0gKm8ubV9uZXh0IDogbV9uZXh0ID09
IG8ubV9uZXh0KTsKKyAgICBpZiAoIW8pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAg
ICBib29sIHJlc3VsdCA9IG1fZGlyZWN0aW9uID09IG8tPm1fZGlyZWN0aW9uICYmCisgICAgbV9k
dXJhdGlvbiA9PSBvLT5tX2R1cmF0aW9uICYmCisgICAgbV9uYW1lID09IG8tPm1fbmFtZSAmJiAK
KyAgICBtX2l0ZXJhdGlvbkNvdW50ID09IG8tPm1faXRlcmF0aW9uQ291bnQgJiYgCisgICAgbV90
aW1pbmdGdW5jdGlvbiA9PSBvLT5tX3RpbWluZ0Z1bmN0aW9uICYmCisgICAgbV9kZWxheSA9PSBv
LT5tX2RlbGF5ICYmCisgICAgbV9wcm9wZXJ0eSA9PSBvLT5tX3Byb3BlcnR5ICYmIAorICAgIG1f
ZGlyZWN0aW9uU2V0ID09IG8tPm1fZGlyZWN0aW9uU2V0ICYmCisgICAgbV9kdXJhdGlvblNldCA9
PSBvLT5tX2R1cmF0aW9uU2V0ICYmIAorICAgIG1fbmFtZVNldCA9PSBvLT5tX25hbWVTZXQgJiYK
KyAgICBtX2l0ZXJhdGlvbkNvdW50U2V0ID09IG8tPm1faXRlcmF0aW9uQ291bnRTZXQgJiYKKyAg
ICBtX3RpbWluZ0Z1bmN0aW9uU2V0ID09IG8tPm1fdGltaW5nRnVuY3Rpb25TZXQgJiYgCisgICAg
bV9kZWxheVNldCA9PSBvLT5tX2RlbGF5U2V0ICYmCisgICAgbV9wcm9wZXJ0eVNldCA9PSBvLT5t
X3Byb3BlcnR5U2V0ICYmCisgICAgbV9pc05vbmUgPT0gby0+bV9pc05vbmU7CisgICAgCisgICAg
aWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAobWF0Y2hQ
bGF5U3RhdGVzICYmIChtX3BsYXlTdGF0ZSAhPSBvLT5tX3BsYXlTdGF0ZSB8fCBtX3BsYXlTdGF0
ZVNldCAhPSBvLT5tX3BsYXlTdGF0ZVNldCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICAvLyBub3cgY2hlY2sga2V5ZnJhbWVzCisgICAgaWYgKChtX2tleWZyYW1lTGlzdC5nZXQo
KSAmJiAhby0+bV9rZXlmcmFtZUxpc3QuZ2V0KCkpIHx8ICghbV9rZXlmcmFtZUxpc3QuZ2V0KCkg
JiYgby0+bV9rZXlmcmFtZUxpc3QuZ2V0KCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
aWYgKCEobV9rZXlmcmFtZUxpc3QuZ2V0KCkpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gKm1fa2V5ZnJhbWVMaXN0ID09ICpvLT5tX2tleWZyYW1lTGlzdDsKIH0KIAorI2RlZmlu
ZSBGSUxMX1VOU0VUX1BST1BFUlRZKHRlc3QsIHByb3ApIFwKK2ZvciAoY3VyciA9IHRoaXM7IGN1
cnIgJiYgY3Vyci0+dGVzdCgpOyBjdXJyID0gY3Vyci0+bmV4dCgpKSB7IH0gXAoraWYgKGN1cnIg
JiYgY3VyciAhPSB0aGlzKSB7IFwKKy8qIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5n
IHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4gKi8gXAorZm9yIChUcmFuc2l0aW9u
KiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgeyBcCitjdXJyLT5w
cm9wID0gcGF0dGVybi0+cHJvcDsgXAorcGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsgXAoraWYg
KHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikgXAorcGF0dGVybiA9IHRoaXM7IFwKK30gXAor
fQorCiB2b2lkIFRyYW5zaXRpb246OmZpbGxVbnNldFByb3BlcnRpZXMoKQogewogICAgIFRyYW5z
aXRpb24qIGN1cnI7Ci0gICAgZm9yIChjdXJyID0gdGhpczsgY3VyciAmJiBjdXJyLT5pc0R1cmF0
aW9uU2V0KCk7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsgfQotICAgIGlmIChjdXJyICYmIGN1cnIg
IT0gdGhpcykgewotICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHJlbWFpbmluZyB2
YWx1ZXMgd2l0aCB0aGUgcGF0dGVybiBzcGVjaWZpZWQuCi0gICAgICAgIGZvciAoVHJhbnNpdGlv
biogcGF0dGVybiA9IHRoaXM7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0KCkpIHsKLSAgICAgICAg
ICAgIGN1cnItPm1fZHVyYXRpb24gPSBwYXR0ZXJuLT5tX2R1cmF0aW9uOwotICAgICAgICAgICAg
cGF0dGVybiA9IHBhdHRlcm4tPm5leHQoKTsKLSAgICAgICAgICAgIGlmIChwYXR0ZXJuID09IGN1
cnIgfHwgIXBhdHRlcm4pCi0gICAgICAgICAgICAgICAgcGF0dGVybiA9IHRoaXM7Ci0gICAgICAg
IH0KLSAgICB9CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0FuaW1hdGlvbkRpcmVjdGlvblNl
dCwgbV9kaXJlY3Rpb24pOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNEdXJhdGlvblNldCwg
bV9kdXJhdGlvbik7CisgICAgRklMTF9VTlNFVF9QUk9QRVJUWShpc0FuaW1hdGlvblBsYXlTdGF0
ZVNldCwgbV9wbGF5U3RhdGUpOworICAgIEZJTExfVU5TRVRfUFJPUEVSVFkoaXNBbmltYXRpb25J
dGVyYXRpb25Db3VudFNldCwgbV9pdGVyYXRpb25Db3VudCk7CisgICAgRklMTF9VTlNFVF9QUk9Q
RVJUWShpc1RpbWluZ0Z1bmN0aW9uU2V0LCBtX3RpbWluZ0Z1bmN0aW9uKTsKKyAgICBGSUxMX1VO
U0VUX1BST1BFUlRZKGlzRGVsYXlTZXQsIG1fZGVsYXkpOworICAgIEZJTExfVU5TRVRfUFJPUEVS
VFkoaXNUcmFuc2l0aW9uUHJvcGVydHlTZXQsIG1fcHJvcGVydHkpOworfQorCisjcHJhZ21hICBt
YXJrIC0KICAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1cnItPmlzUmVwZWF0
Q291bnRTZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAgaWYgKGN1cnIgJiYgY3Vy
ciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBpbiB0aGUgcmVtYWluaW5n
IHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAgICAgZm9yIChUcmFuc2l0
aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5leHQoKSkgewotICAgICAg
ICAgICAgY3Vyci0+bV9yZXBlYXRDb3VudCA9IHBhdHRlcm4tPm1fcmVwZWF0Q291bnQ7Ci0gICAg
ICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKHBhdHRl
cm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuID0gdGhpczsK
LSAgICAgICAgfQotICAgIH0KICAgICAKLSAgICBmb3IgKGN1cnIgPSB0aGlzOyBjdXJyICYmIGN1
cnItPmlzVGltaW5nRnVuY3Rpb25TZXQoKTsgY3VyciA9IGN1cnItPm5leHQoKSkgeyB9Ci0gICAg
aWYgKGN1cnIgJiYgY3VyciAhPSB0aGlzKSB7Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCBp
biB0aGUgcmVtYWluaW5nIHZhbHVlcyB3aXRoIHRoZSBwYXR0ZXJuIHNwZWNpZmllZC4KLSAgICAg
ICAgZm9yIChUcmFuc2l0aW9uKiBwYXR0ZXJuID0gdGhpczsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHQoKSkgewotICAgICAgICAgICAgY3Vyci0+bV90aW1pbmdGdW5jdGlvbiA9IHBhdHRlcm4tPm1f
dGltaW5nRnVuY3Rpb247Ci0gICAgICAgICAgICBwYXR0ZXJuID0gcGF0dGVybi0+bmV4dCgpOwot
ICAgICAgICAgICAgaWYgKHBhdHRlcm4gPT0gY3VyciB8fCAhcGF0dGVybikKLSAgICAgICAgICAg
ICAgICBwYXR0ZXJuID0gdGhpczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGZvciAoY3VyciA9
IHRoaXM7IGN1cnIgJiYgY3Vyci0+aXNQcm9wZXJ0eVNldCgpOyBjdXJyID0gY3Vyci0+bmV4dCgp
KSB7IH0KLSAgICBpZiAoY3VyciAmJiBjdXJyICE9IHRoaXMpIHsKLSAgICAgICAgLy8gV2UgbmVl
ZCB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgdmFsdWVzIHdpdGggdGhlIHBhdHRlcm4gc3BlY2lm
aWVkLgotICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHBhdHRlcm4gPSB0aGlzOyBjdXJyOyBjdXJy
ID0gY3Vyci0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBjdXJyLT5tX3Byb3BlcnR5ID0gcGF0dGVy
bi0+bV9wcm9wZXJ0eTsKLSAgICAgICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLT5uZXh0KCk7Ci0g
ICAgICAgICAgICBpZiAocGF0dGVybiA9PSBjdXJyIHx8ICFwYXR0ZXJuKQotICAgICAgICAgICAg
ICAgIHBhdHRlcm4gPSB0aGlzOwotICAgICAgICB9Ci0gICAgfQotfQotCiBTdHlsZVJhcmVOb25J
bmhlcml0ZWREYXRhOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhKCkKICAgICA6IGxpbmVDbGFt
cChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVDbGFtcCgpKQogICAgICwgb3BhY2l0eShSZW5kZXJT
dHlsZTo6aW5pdGlhbE9wYWNpdHkoKSkKQEAgLTc4NSw2ICs4NzksNyBAQAogICAgICwgbV9ib3Jk
ZXJGaXQoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJGaXQoKSkKICAgICAsIG1fYm94U2hhZG93
KDApCiAgICAgLCBtX3RyYW5zaXRpb24oMCkKKyAgICAsIG1fYW5pbWF0aW9uKDApCiAgICAgLCBt
X21hc2soRmlsbExheWVyKE1hc2tGaWxsTGF5ZXIpKQogI2lmIEVOQUJMRShYQkwpCiAgICAgLCBi
aW5kaW5nVVJJKDApCkBAIC04MTIsNiArOTA3LDcgQEAKICAgICAsIG1fYm94U2hhZG93KG8ubV9i
b3hTaGFkb3cgPyBuZXcgU2hhZG93RGF0YSgqby5tX2JveFNoYWRvdykgOiAwKQogICAgICwgbV9i
b3hSZWZsZWN0KG8ubV9ib3hSZWZsZWN0KQogICAgICwgbV90cmFuc2l0aW9uKG8ubV90cmFuc2l0
aW9uID8gbmV3IFRyYW5zaXRpb24oKm8ubV90cmFuc2l0aW9uKSA6IDApCisgICAgLCBtX2FuaW1h
dGlvbihvLm1fYW5pbWF0aW9uID8gbmV3IFRyYW5zaXRpb24oKm8ubV9hbmltYXRpb24pIDogMCkK
ICAgICAsIG1fbWFzayhvLm1fbWFzaykKICNpZiBFTkFCTEUoWEJMKQogICAgICwgYmluZGluZ1VS
SShvLmJpbmRpbmdVUkkgPyBvLmJpbmRpbmdVUkktPmNvcHkoKSA6IDApCkBAIC04MjQsNyArOTIw
LDYgQEAKICAgICBkZWxldGUgbV9jb250ZW50OwogICAgIGRlbGV0ZSBtX2NvdW50ZXJEaXJlY3Rp
dmVzOwogICAgIGRlbGV0ZSBtX2JveFNoYWRvdzsKLSAgICBkZWxldGUgbV90cmFuc2l0aW9uOwog
I2lmIEVOQUJMRShYQkwpCiAgICAgZGVsZXRlIGJpbmRpbmdVUkk7CiAjZW5kaWYKQEAgLTg2NSw2
ICs5NjAsNyBAQAogICAgICAgICAmJiBzaGFkb3dEYXRhRXF1aXZhbGVudChvKQogICAgICAgICAm
JiByZWZsZWN0aW9uRGF0YUVxdWl2YWxlbnQobykKICAgICAgICAgJiYgdHJhbnNpdGlvbkRhdGFF
cXVpdmFsZW50KG8pCisgICAgICAgICYmIGFuaW1hdGlvbkRhdGFFcXVpdmFsZW50KG8pCiAgICAg
ICAgICYmIG1fbWFzayA9PSBvLm1fbWFzawogI2lmIEVOQUJMRShYQkwpCiAgICAgICAgICYmIGJp
bmRpbmdzRXF1aXZhbGVudChvKQpAQCAtODkyLDYgKzk4OCwxOSBAQAogCiB9CiAKK3ZvaWQgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6dXBkYXRlS2V5ZnJhbWVzKGNvbnN0IENTU1N0eWxlU2Vs
ZWN0b3IqIHN0eWxlU2VsZWN0b3IpCit7CisgICAgVHJhbnNpdGlvbiogYW5pbTsKKyAgICBmb3Ig
KGFuaW0gPSBtX2FuaW1hdGlvbi5nZXQoKTsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgewor
ICAgICAgICBpZiAoYW5pbS0+aXNWYWxpZEFuaW1hdGlvbigpKSB7CisgICAgICAgICAgICAvKiBG
SVhNRSBrZXlmcmFtZXMKKyAgICAgICAgICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IGtleWZyYW1l
ID0gc3R5bGVTZWxlY3Rvci0+ZmluZEtleWZyYW1lUnVsZShhbmltLT5hbmltYXRpb25OYW1lKCkp
OworICAgICAgICAgICAgYW5pbS0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAg
ICAgICAgICAgICovCisgICAgICAgIH0KKyAgICB9ICAgICAgICAKK30KKyAgICAKIGJvb2wgU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6dHJhbnNpdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0CiB7CiAgICAgaWYgKCFtX3RyYW5zaXRp
b24gJiYgby5tX3RyYW5zaXRpb24gfHwgbV90cmFuc2l0aW9uICYmICFvLm1fdHJhbnNpdGlvbikK
QEAgLTkwMSw2ICsxMDEwLDE1IEBACiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YTo6YW5pbWF0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3QgU3R5bGVS
YXJlTm9uSW5oZXJpdGVkRGF0YSYgbykgY29uc3QKK3sKKyAgICBpZiAoIW1fYW5pbWF0aW9uICYm
IG8ubV9hbmltYXRpb24gfHwgbV9hbmltYXRpb24gJiYgIW8ubV9hbmltYXRpb24pCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9hbmltYXRpb24gJiYgby5tX2FuaW1hdGlvbiAmJiAo
Km1fYW5pbWF0aW9uICE9ICpvLm1fYW5pbWF0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIHJldHVybiB0cnVlOworfQorCiBTdHlsZVJhcmVJbmhlcml0ZWREYXRhOjpTdHlsZVJhcmVJ
bmhlcml0ZWREYXRhKCkKICAgICA6IHRleHRTdHJva2VXaWR0aChSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRTdHJva2VXaWR0aCgpKQogICAgICwgdGV4dFNoYWRvdygwKQpAQCAtMTg2OSwzMiArMTk4
OSwxMDMgQEAKIHZvaWQgUmVuZGVyU3R5bGU6OmFkanVzdFRyYW5zaXRpb25zKCkKIHsKICAgICBp
ZiAodHJhbnNpdGlvbnMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbnMoKS0+aXNFbXB0eSgp
KSB7CisgICAgICAgIGlmICh0cmFuc2l0aW9ucygpLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkg
ewogICAgICAgICAgICAgY2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0KKyAgICAgICAgCiAgICAgICAgIFRyYW5zaXRpb24qIG5leHQ7CiAgICAgICAg
IGZvciAoVHJhbnNpdGlvbiogcCA9IGFjY2Vzc1RyYW5zaXRpb25zKCk7IHA7IHAgPSBuZXh0KSB7
Ci0gICAgICAgICAgICBuZXh0ID0gcC0+bV9uZXh0OworICAgICAgICAgICAgbmV4dCA9IHAtPm5l
eHQoKTsKICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5leHQtPmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgICAgIGRlbGV0ZSBuZXh0OwotICAgICAgICAgICAgICAgIHAtPm1fbmV4dCA9IDA7Cisg
ICAgICAgICAgICAgICAgcC0+c2V0TmV4dCgwKTsgLy8gcmVtb3ZlcyB0aGUgcmVmLCBzbyBuZXh0
IGdldHMgZGVsZXRlZAorICAgICAgICAgICAgICAgIG5leHQgPSAwOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgCisgICAgICAgIAorICAgICAg
ICBpZiAoIXRyYW5zaXRpb25zKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAogICAg
ICAgICAvLyBSZXBlYXQgcGF0dGVybnMgaW50byBsYXllcnMgdGhhdCBkb24ndCBoYXZlIHNvbWUg
cHJvcGVydGllcyBzZXQuCiAgICAgICAgIGFjY2Vzc1RyYW5zaXRpb25zKCktPmZpbGxVbnNldFBy
b3BlcnRpZXMoKTsKKyAgICAgICAgCisgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8g
ZHVwbGljYXRlIHByb3BlcnRpZXMuIFRoaXMgaXMgYW4gTyhuXjIpIGFsZ29yaXRobQorICAgICAg
ICAvLyBidXQgdGhlIGxpc3RzIHRlbmQgdG8gYmUgdmVyeSBzaG9ydCwgc28gaXQgaXMgcHJvYmFi
bHkgb2sKKyAgICAgICAgVHJhbnNpdGlvbiogcHJldmkgPSAwOworICAgICAgICBmb3IgKFRyYW5z
aXRpb24qIHBpID0gYWNjZXNzVHJhbnNpdGlvbnMoKTsgcGk7ICkgeworICAgICAgICAgICAgVHJh
bnNpdGlvbiogbmV4dGkgPSBwaS0+bmV4dCgpOworICAgICAgICAgICAgZm9yIChUcmFuc2l0aW9u
KiBwaiA9IG5leHRpOyBwajsgKSB7CisgICAgICAgICAgICAgICAgaWYgKHBpLT50cmFuc2l0aW9u
UHJvcGVydHkoKSA9PSBwai0+dHJhbnNpdGlvblByb3BlcnR5KCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdG9zcyBwaQorICAgICAgICAgICAgICAgICAgICBwaSA9IHBpLT5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmV2aSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZXZpLT5zZXROZXh0KHBpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlvbiA9
IHBpOworICAgICAgICAgICAgICAgICAgICBuZXh0aSA9IHBpLT5uZXh0KCk7CisgICAgICAgICAg
ICAgICAgICAgIHBqID0gbmV4dGk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcGogPSBwai0+bmV4dCgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcHJldmkgPSBwaTsKKyAgICAgICAgICAgIHBpID0gbmV4dGk7CisgICAg
ICAgIH0KICAgICB9CiB9CisgICAgCit2b2lkIFJlbmRlclN0eWxlOjphZGp1c3RBbmltYXRpb25z
KCkKK3sKKyAgICBpZiAoYW5pbWF0aW9ucygpKSB7CisgICAgICAgIGlmIChhbmltYXRpb25zKCkt
PmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7CisgICAgICAgICAgICBjbGVhckFuaW1hdGlvbnMo
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
Z2V0IHJpZCBvZiBhbnkgdHJhaWxpbmcgZW1wdHkgYW5pbWF0aW9ucworICAgICAgICBUcmFuc2l0
aW9uKiBuZXh0OworICAgICAgICBmb3IgKFRyYW5zaXRpb24qIHAgPSBhY2Nlc3NBbmltYXRpb25z
KCk7IHA7IHAgPSBuZXh0KSB7CisgICAgICAgICAgICBuZXh0ID0gcC0+bmV4dCgpOworICAgICAg
ICAgICAgaWYgKG5leHQgJiYgbmV4dC0+aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgcC0+
c2V0TmV4dCgwKTsgLy8gcmVtb3ZlcyB0aGUgcmVmLCBzbyBuZXh0IGdldHMgZGVsZXRlZAorICAg
ICAgICAgICAgICAgIG5leHQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoIWFuaW1hdGlvbnMoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIC8vIFJlcGVhdCBwYXR0ZXJucyBp
bnRvIGxheWVycyB0aGF0IGRvbid0IGhhdmUgc29tZSBwcm9wZXJ0aWVzIHNldC4KKyAgICAgICAg
YWNjZXNzQW5pbWF0aW9ucygpLT5maWxsVW5zZXRQcm9wZXJ0aWVzKCk7CisgICAgfQorfQogCiBU
cmFuc2l0aW9uKiBSZW5kZXJTdHlsZTo6YWNjZXNzVHJhbnNpdGlvbnMoKQogewotICAgIFRyYW5z
aXRpb24qIGxheWVyID0gcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNpdGlv
bjsKLSAgICBpZiAoIWxheWVyKQorICAgIFRyYW5zaXRpb24qIHRyYW5zaXRpb24gPSByYXJlTm9u
SW5oZXJpdGVkRGF0YS5hY2Nlc3MoKS0+bV90cmFuc2l0aW9uLmdldCgpOworICAgIGlmICghdHJh
bnNpdGlvbikKICAgICAgICAgcmFyZU5vbkluaGVyaXRlZERhdGEuYWNjZXNzKCktPm1fdHJhbnNp
dGlvbiA9IG5ldyBUcmFuc2l0aW9uKCk7Ci0gICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRh
LT5tX3RyYW5zaXRpb247CisgICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX3RyYW5z
aXRpb24uZ2V0KCk7CiB9CiAKK1RyYW5zaXRpb24qIFJlbmRlclN0eWxlOjphY2Nlc3NBbmltYXRp
b25zKCkKK3sKKyAgICBUcmFuc2l0aW9uKiBhbmltYXRpb24gPSByYXJlTm9uSW5oZXJpdGVkRGF0
YS5hY2Nlc3MoKS0+bV9hbmltYXRpb24uZ2V0KCk7CisgICAgaWYgKCFhbmltYXRpb24pCisgICAg
ICAgIHJhcmVOb25Jbmhlcml0ZWREYXRhLmFjY2VzcygpLT5tX2FuaW1hdGlvbiA9IG5ldyBUcmFu
c2l0aW9uKCk7CisgICAgcmV0dXJuIHJhcmVOb25Jbmhlcml0ZWREYXRhLT5tX2FuaW1hdGlvbi5n
ZXQoKTsKIH0KKworY29uc3QgVHJhbnNpdGlvbiogUmVuZGVyU3R5bGU6OnRyYW5zaXRpb25Gb3JQ
cm9wZXJ0eShpbnQgcHJvcGVydHkpCit7CisgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiBwID0g
dHJhbnNpdGlvbnMoKTsgcDsgcCA9IHAtPm5leHQoKSkgeworICAgICAgICBpZiAocC0+dHJhbnNp
dGlvblByb3BlcnR5KCkgPT0gY0FuaW1hdGVBbGwgfHwgcC0+dHJhbnNpdGlvblByb3BlcnR5KCkg
PT0gcHJvcGVydHkpIHsKKyAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiAwOworfQorCit9CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzMjkxMikKKysr
IFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAKKyNpbmNsdWRl
ICJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxlU2hlZXQuaCIK
QEAgLTMwMyw2ICszMDYsNyBAQAogI2lmIFVTRShMT1dfQkFORFdJRFRIX0RJU1BMQVkpCiAgICAg
LCBtX2luTG93QmFuZHdpZHRoRGlzcGxheShmYWxzZSkKICNlbmRpZgorICAgICwgbV9sb2FkQ29t
cGxldGUoZmFsc2UpCiB7CiAgICAgbV9kb2N1bWVudC5yZXNldFNraXBwaW5nUmVmKHRoaXMpOwog
CkBAIC0zNTEsNiArMzU1LDcgQEAKICAgICBtX3Byb2Nlc3NpbmdMb2FkRXZlbnQgPSBmYWxzZTsK
ICAgICBtX3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CiAgICAgbV9vdmVyTWluaW11bUxheW91
dFRocmVzaG9sZCA9IGZhbHNlOworICAgIHNuYXBzaG90U3R5bGVCZWdpblRpbWUoKTsKICAgICAK
ICAgICBpbml0U2VjdXJpdHlPcmlnaW4oKTsKIApAQCAtMTA4NCw2ICsxMDg5LDExIEBACiAgICAg
bV9kb2NDaGFuZ2VkID0gYjsKIH0KIAordm9pZCBEb2N1bWVudDo6c25hcHNob3RTdHlsZUJlZ2lu
VGltZSgpCit7CisgICAgbV9yZWNhbGNTdHlsZVRpbWUgPSBjdXJyZW50VGltZSgpOworfQorCiB2
b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7CiAgICAgLy8g
d2Ugc2hvdWxkIG5vdCBlbnRlciBzdHlsZSByZWNhbGMgd2hpbGUgcGFpbnRpbmcKQEAgLTEwOTUs
NiArMTEwNSw3IEBACiAgICAgaWYgKG1faW5TdHlsZVJlY2FsYykKICAgICAgICAgcmV0dXJuOyAv
LyBHdWFyZCBhZ2FpbnN0IHJlLWVudHJhbmN5LiAtZHdoCiAgICAgICAgIAorICAgIHNuYXBzaG90
U3R5bGVCZWdpblRpbWUoKTsKICAgICBtX2luU3R5bGVSZWNhbGMgPSB0cnVlOwogICAgIHN1c3Bl
bmRQb3N0QXR0YWNoQ2FsbGJhY2tzKCk7CiAgICAgCkBAIC0xMTcxLDggKzExODIsMTYgQEAKIAog
dm9pZCBEb2N1bWVudDo6dXBkYXRlUmVuZGVyaW5nKCkKIHsKLSAgICBpZiAoaGFzQ2hhbmdlZENo
aWxkKCkpCisgICAgc25hcHNob3RTdHlsZUJlZ2luVGltZSgpOworCisgICAgaWYgKGhhc0NoYW5n
ZWRDaGlsZCgpKSB7CiAgICAgICAgIHJlY2FsY1N0eWxlKE5vQ2hhbmdlKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGVsbCB0aGUgYW5pbWF0aW9uIGNvbnRyb2xsZXIgdGhhdCB0aGUgc3R5bGUgaXMg
YWxsIHNldCB1cCBhbmQgaXQgY2FuIHN0YXJ0IGFuaW1hdGlvbnMKKyAgICBpZiAobV9mcmFtZSkg
eworICAgICAgICBtX2ZyYW1lLT5hbmltYXRpb25Db250cm9sbGVyKCktPnN0eWxlSXNTZXR1cCgp
OworICAgIH0KIH0KIAogdm9pZCBEb2N1bWVudDo6dXBkYXRlRG9jdW1lbnRzUmVuZGVyaW5nKCkK
QEAgLTE1NDUsNiArMTU2NCwxMCBAQAogICAgIGlmIChmKQogICAgICAgICBmLT5sb2FkZXIoKS0+
c3RhcnRJY29uTG9hZGVyKCk7CiAKKyAgICBtX2xvYWRDb21wbGV0ZSA9IHRydWU7CisgICAgaWYg
KGYpCisgICAgICAgIGYtPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVzdW1lQW5pbWF0aW9ucyh0
aGlzKTsKKyAgICAKICAgICBkaXNwYXRjaEltYWdlTG9hZEV2ZW50c05vdygpOwogICAgIHRoaXMt
PmRpc3BhdGNoV2luZG93RXZlbnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOwogICAgIGlmIChm
KQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTcyNyw3ICs3MzEsMTMgQEAKIAogICAgIHZvaWQgdXBkYXRlRm9j
dXNBcHBlYXJhbmNlU29vbigpOwogICAgIHZvaWQgY2FuY2VsRm9jdXNBcHBlYXJhbmNlVXBkYXRl
KCk7CisKKyAgICB2b2lkIHNuYXBzaG90U3R5bGVCZWdpblRpbWUoKTsKKyAgICBkb3VibGUgcmVj
YWxjU3R5bGVCZWdpblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3JlY2FsY1N0eWxlVGltZTsgfQog
ICAgIAorICAgIC8vIGZvciBhbmltYXRpb25zIHRvIGtub3cgd2hldGhlciB0aGV5IGNhbiBydW4g
eWV0IG9yIG5vdAorICAgIGJvb2wgbG9hZENvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9sb2Fk
Q29tcGxldGU7IH0KKyAgICAKICAgICAvLyBGRiBtZXRob2QgZm9yIGFjY2Vzc2luZyB0aGUgc2Vs
ZWN0aW9uIGFkZGVkIGZvciBjb21wYXRhYmlsaXR5LgogICAgIERPTVNlbGVjdGlvbiogZ2V0U2Vs
ZWN0aW9uKCkgY29uc3Q7CiAgICAgCkBAIC04NDIsNiArODUyLDcgQEAKICAgICBib29sIG1fcHJv
Y2Vzc2luZ0xvYWRFdmVudDsKICAgICBkb3VibGUgbV9zdGFydFRpbWU7CiAgICAgYm9vbCBtX292
ZXJNaW5pbXVtTGF5b3V0VGhyZXNob2xkOworICAgIGRvdWJsZSBtX3JlY2FsY1N0eWxlVGltZTsK
ICAgICAKICNpZiBFTkFCTEUoWFNMVCkKICAgICB2b2lkKiBtX3RyYW5zZm9ybVNvdXJjZTsKQEAg
LTEwMDgsNiArMTAxOSw4IEBACiAjaWYgVVNFKExPV19CQU5EV0lEVEhfRElTUExBWSkKICAgICBi
b29sIG1faW5Mb3dCYW5kd2lkdGhEaXNwbGF5OwogI2VuZGlmCisgICAgCisgICAgYm9vbCBtX2xv
YWRDb21wbGV0ZTsgICAgLy8gZm9yIGFuaW1hdGlvbnMgdG8ga25vdyB3aGV0aGVyIG9yIG5vdCB0
aGV5IGNhbiBydW4geWV0CiB9OwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudDo6aGFzRWxlbWVudFdp
dGhJZChBdG9taWNTdHJpbmdJbXBsKiBpZCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvZG9tL05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiAzMjkxMikK
KysrIFdlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzcsNyArMzc3LDcg
QEAKICAgICBpZiAoKGNoYW5nZVR5cGUgIT0gTm9TdHlsZUNoYW5nZSkgJiYgIWF0dGFjaGVkKCkp
IC8vIGNoYW5nZWQgY29tcGFyZWQgdG8gd2hhdD8KICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KCEoY2hhbmdlVHlwZSA9PSBJbmxpbmVTdHlsZUNoYW5nZSAmJiBtX3N0eWxlQ2hhbmdlID09IEZ1
bGxTdHlsZUNoYW5nZSkpCisgICAgaWYgKGNoYW5nZVR5cGUgPiAoU3R5bGVDaGFuZ2VUeXBlKW1f
c3R5bGVDaGFuZ2UpCiAgICAgICAgIG1fc3R5bGVDaGFuZ2UgPSBjaGFuZ2VUeXBlOwogCiAgICAg
aWYgKG1fc3R5bGVDaGFuZ2UgIT0gTm9TdHlsZUNoYW5nZSkgewpAQCAtMTA0Nyw4ICsxMDQ3LDkg
QEAKIAogdm9pZCBOb2RlOjpzZXRSZW5kZXJTdHlsZShSZW5kZXJTdHlsZSogcykKIHsKLSAgICBp
ZiAobV9yZW5kZXJlcikKKyAgICBpZiAobV9yZW5kZXJlcikgewogICAgICAgICBtX3JlbmRlcmVy
LT5zZXRBbmltYXRhYmxlU3R5bGUocyk7IAorICAgIH0KIH0KIAogUmVuZGVyU3R5bGUqIE5vZGU6
OmNvbXB1dGVkU3R5bGUoKQpJbmRleDogV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1Miw3ICs3NTIsMTUgQEAKICAg
ICB9CiAgICAgaWYgKGhhc1BhcmVudFN0eWxlICYmIChjaGFuZ2UgPj0gSW5oZXJpdCB8fCBjaGFu
Z2VkKCkpKSB7CiAgICAgICAgIFJlbmRlclN0eWxlICpuZXdTdHlsZSA9IGRvY3VtZW50KCktPnN0
eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHRoaXMpOworCisgICAgICAgIC8vIElmIHdl
IGFyZSBmb3JjaW5nIHRoZSBjaGFuZ2UgbWFrZSBzdXJlIGtleWZyYW1lcyBhcmUgdXBkYXRlZCBp
biB0aGUgbmV3IHN0eWxlCisgICAgICAgIG5ld1N0eWxlLT51cGRhdGVLZXlmcmFtZXMoZG9jdW1l
bnQoKS0+c3R5bGVTZWxlY3RvcigpKTsKKyAgICAgICAgCiAgICAgICAgIFN0eWxlQ2hhbmdlIGNo
ID0gZGlmZihjdXJyZW50U3R5bGUsIG5ld1N0eWxlKTsKKworICAgICAgICBpZiAoc3R5bGVDaGFu
Z2VUeXBlKCkgPT0gQW5pbWF0YWJsZVN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgY2ggPSBGb3Jj
ZTsKKyAgICAgICAgCiAgICAgICAgIGlmIChjaCA9PSBEZXRhY2gpIHsKICAgICAgICAgICAgIGlm
IChhdHRhY2hlZCgpKQogICAgICAgICAgICAgICAgIGRldGFjaCgpOwpAQCAtNzg2LDkgKzc5NCwx
MSBAQAogICAgICAgICAgICAgICAgIG5ld1N0eWxlLT5zZXRDaGlsZHJlbkFmZmVjdGVkQnlEaXJl
Y3RBZGphY2VudFJ1bGVzKCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoY2ggIT0gTm9DaGFu
Z2UpCi0gICAgICAgICAgICBzZXRSZW5kZXJTdHlsZShuZXdTdHlsZSk7Ci0gICAgICAgIGVsc2Ug
aWYgKGNoYW5nZWQoKSAmJiAoZG9jdW1lbnQoKS0+dXNlc1NpYmxpbmdSdWxlcygpIHx8IGRvY3Vt
ZW50KCktPnVzZXNEZXNjZW5kYW50UnVsZXMoKSkpIHsKKyAgICAgICAgaWYgKGNoICE9IE5vQ2hh
bmdlKSB7CisgICAgICAgICAgICBpZiAobmV3U3R5bGUpIHsKKyAgICAgICAgICAgICAgICBzZXRS
ZW5kZXJTdHlsZShuZXdTdHlsZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo
Y2hhbmdlZCgpICYmIChkb2N1bWVudCgpLT51c2VzU2libGluZ1J1bGVzKCkgfHwgZG9jdW1lbnQo
KS0+dXNlc0Rlc2NlbmRhbnRSdWxlcygpKSkgewogICAgICAgICAgICAgLy8gQWx0aG91Z2ggbm8g
Y2hhbmdlIG9jY3VycmVkLCB3ZSB1c2UgdGhlIG5ldyBzdHlsZSBzbyB0aGF0IHRoZSBjb3VzaW4g
c3R5bGUgc2hhcmluZyBjb2RlIHdvbid0IGdldAogICAgICAgICAgICAgLy8gZm9vbGVkIGludG8g
YmVsaWV2aW5nIHRoaXMgc3R5bGUgaXMgdGhlIHNhbWUuICBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5
IGlmIHRoZSBkb2N1bWVudCBhY3R1YWxseSB1c2VzCiAgICAgICAgICAgICAvLyBzaWJsaW5nL2Rl
c2NlbmRhbnQgcnVsZXMsIHNpbmNlIG90aGVyd2lzZSBpdCBpc24ndCBwb3NzaWJsZSBmb3IgYW5j
ZXN0b3Igc3R5bGVzIHRvIGFmZmVjdCBzaGFyaW5nIG9mCkBAIC04MDIsNyArODEyLDcgQEAKICAg
ICAgICAgbmV3U3R5bGUtPmRlcmVmKGRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpOwogCiAgICAg
ICAgIGlmIChjaGFuZ2UgIT0gRm9yY2UpIHsKLSAgICAgICAgICAgIGlmICgoZG9jdW1lbnQoKS0+
dXNlc0Rlc2NlbmRhbnRSdWxlcygpIHx8IGhhc1Bvc2l0aW9uYWxSdWxlcykgJiYgc3R5bGVDaGFu
Z2VUeXBlKCkgPT0gRnVsbFN0eWxlQ2hhbmdlKQorICAgICAgICAgICAgaWYgKChkb2N1bWVudCgp
LT51c2VzRGVzY2VuZGFudFJ1bGVzKCkgfHwgaGFzUG9zaXRpb25hbFJ1bGVzKSAmJiBzdHlsZUNo
YW5nZVR5cGUoKSA+PSBGdWxsU3R5bGVDaGFuZ2UpCiAgICAgICAgICAgICAgICAgY2hhbmdlID0g
Rm9yY2U7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgY2hhbmdlID0gY2g7Cklu
ZGV4OiBXZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vTm9kZS5o
CShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNTksNyArNTksNyBAQAogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCi1lbnVtIFN0
eWxlQ2hhbmdlVHlwZSB7IE5vU3R5bGVDaGFuZ2UsIElubGluZVN0eWxlQ2hhbmdlLCBGdWxsU3R5
bGVDaGFuZ2UgfTsKK2VudW0gU3R5bGVDaGFuZ2VUeXBlIHsgTm9TdHlsZUNoYW5nZSwgSW5saW5l
U3R5bGVDaGFuZ2UsIEZ1bGxTdHlsZUNoYW5nZSwgQW5pbWF0YWJsZVN0eWxlQ2hhbmdlIH07CiAK
IC8vIHRoaXMgY2xhc3MgaW1wbGVtZW50cyBub2Rlcywgd2hpY2ggY2FuIGhhdmUgYSBwYXJlbnQg
YnV0IG5vIGNoaWxkcmVuOgogY2xhc3MgTm9kZSA6IHB1YmxpYyBUcmVlU2hhcmVkPE5vZGU+IHsK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU1ZhbHVlS2V5d29yZHMuaW4KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9jc3MvQ1NTVmFsdWVLZXl3b3Jkcy5pbgkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3Jl
L2Nzcy9DU1NWYWx1ZUtleXdvcmRzLmluCSh3b3JraW5nIGNvcHkpCkBAIC01NjIsNiArNTYyLDcg
QEAKIAogIwogIyBDU1NfUFJPUF9fV0VCS0lUX1RSQU5TSVRJT05fVElNSU5HX0ZVTkNUSU9OCisj
IENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX1RJTUlOR19GVU5DVElPTgogIwogZWFzZQogbGlu
ZWFyCkBAIC01NzAsNiArNTcxLDI4IEBACiBlYXNlLWluLW91dAogCiAjCisjIENTU19QUk9QX19X
RUJLSVRfVFJBTlNJVElPTl9ERUxBWQorIyBDU1NfUFJPUF9fV0VCS0lUX0FOSU1BVElPTl9ERUxB
WQorIworbm93CisKKyMKKyMgQ1NTX1BST1BfX1dFQktJVF9BTklNQVRJT05fRElSRUNUSU9OCisj
CisjIGFsdGVybmF0ZQorCisjCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9OX0lURVJBVElP
Tl9DT1VOVAorIworIyBpbmZpbml0ZQorCisjCisjIENTU19QUk9QX19XRUJLSVRfQU5JTUFUSU9O
X1BMQVlfU1RBVEUKKyMKK3J1bm5pbmcKK3BhdXNlZAorCisjCiAjIENTU19QUk9QX1pPT00KICMK
IHJlc2V0CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzI5MTIpCisr
KyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYs
NiArNjYsOCBAQAogI2luY2x1ZGUgIlN0eWxlU2hlZXRMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dC5o
IgogI2luY2x1ZGUgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NT
S2V5ZnJhbWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2lu
Y2x1ZGUgIlhNTE5hbWVzLmgiCiAjaW5jbHVkZSAibG9hZGVyLmgiCiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgpAQCAtMTc3LDE1ICsxODAsMTUgQEAKICNkZWZpbmUgSEFORExFX01BU0tfVkFMVUUo
cHJvcCwgUHJvcCwgdmFsdWUpIFwKIEhBTkRMRV9GSUxMX0xBWUVSX1ZBTFVFKG1hc2ssIE1hc2ss
IHByb3AsIFByb3AsIHZhbHVlKQogCi0jZGVmaW5lIEhBTkRMRV9UUkFOU0lUSU9OX0lOSEVSSVRf
QU5EX0lOSVRJQUwocHJvcCwgUHJvcCkgXAorI2RlZmluZSBIQU5ETEVfTVVMVElMQVlFUl9JTkhF
UklUX0FORF9JTklUSUFMKGxheWVyVHlwZSwgTGF5ZXJUeXBlLCBwcm9wLCBQcm9wKSBcCiBpZiAo
aXNJbmhlcml0KSB7IFwKLSAgICBUcmFuc2l0aW9uKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nl
c3NUcmFuc2l0aW9ucygpOyBcCi0gICAgVHJhbnNpdGlvbiogcHJldkNoaWxkID0gMDsgXAotICAg
IGNvbnN0IFRyYW5zaXRpb24qIGN1cnJQYXJlbnQgPSBtX3BhcmVudFN0eWxlLT50cmFuc2l0aW9u
cygpOyBcCisgICAgTGF5ZXJUeXBlKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3MjI0xheWVy
VHlwZSMjcygpOyBcCisgICAgTGF5ZXJUeXBlKiBwcmV2Q2hpbGQgPSAwOyBcCisgICAgY29uc3Qg
TGF5ZXJUeXBlKiBjdXJyUGFyZW50ID0gbV9wYXJlbnRTdHlsZS0+bGF5ZXJUeXBlIyNzKCk7IFwK
ICAgICB3aGlsZSAoY3VyclBhcmVudCAmJiBjdXJyUGFyZW50LT5pcyMjUHJvcCMjU2V0KCkpIHsg
XAogICAgICAgICBpZiAoIWN1cnJDaGlsZCkgeyBcCiAgICAgICAgICAgICAvKiBOZWVkIHRvIG1h
a2UgYSBuZXcgbGF5ZXIuKi8gXAotICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IFRyYW5zaXRp
b24oKTsgXAorICAgICAgICAgICAgY3VyckNoaWxkID0gbmV3IExheWVyVHlwZSgpOyBcCiAgICAg
ICAgICAgICBwcmV2Q2hpbGQtPnNldE5leHQoY3VyckNoaWxkKTsgXAogICAgICAgICB9IFwKICAg
ICAgICAgY3VyckNoaWxkLT5zZXQjI1Byb3AoY3VyclBhcmVudC0+cHJvcCgpKTsgXApAQCAtMTk5
LDM0ICsyMDIsMzUgQEAKICAgICAgICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCiAgICAg
ICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiAgICAgfSBcCi19IGVsc2UgaWYg
KGlzSW5pdGlhbCkgeyBcCi0gICAgVHJhbnNpdGlvbiogY3VyckNoaWxkID0gbV9zdHlsZS0+YWNj
ZXNzVHJhbnNpdGlvbnMoKTsgXAotICAgIGN1cnJDaGlsZC0+c2V0IyNQcm9wKFJlbmRlclN0eWxl
Ojppbml0aWFsVHJhbnNpdGlvbiMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAorfSBcCitpZiAo
aXNJbml0aWFsKSB7IFwKKyAgICBMYXllclR5cGUqIGN1cnJDaGlsZCA9IG1fc3R5bGUtPmFjY2Vz
cyMjTGF5ZXJUeXBlIyNzKCk7IFwKKyAgICBjdXJyQ2hpbGQtPnNldCMjUHJvcChSZW5kZXJTdHls
ZTo6aW5pdGlhbCMjUHJvcCgpKTsgXAogICAgIGZvciAoY3VyckNoaWxkID0gY3VyckNoaWxkLT5u
ZXh0KCk7IGN1cnJDaGlsZDsgY3VyckNoaWxkID0gY3VyckNoaWxkLT5uZXh0KCkpIFwKICAgICAg
ICAgY3VyckNoaWxkLT5jbGVhciMjUHJvcCgpOyBcCisgICAgcmV0dXJuOyBcCiB9Ci0KLSNkZWZp
bmUgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUpIHsgXAotSEFORExF
X1RSQU5TSVRJT05fSU5IRVJJVF9BTkRfSU5JVElBTChwcm9wLCBQcm9wKSBcCi1pZiAoaXNJbmhl
cml0IHx8IGlzSW5pdGlhbCkgXAotICAgIHJldHVybjsgXAotVHJhbnNpdGlvbiogY3VyckNoaWxk
ID0gbV9zdHlsZS0+YWNjZXNzVHJhbnNpdGlvbnMoKTsgXAotVHJhbnNpdGlvbiogcHJldkNoaWxk
ID0gMDsgXAorICAgIAorI2RlZmluZSBIQU5ETEVfTVVMVElMQVlFUl9WQUxVRShsYXllclR5cGUs
IExheWVyVHlwZSwgcHJvcCwgUHJvcCwgdmFsdWUpIHsgXAorSEFORExFX01VTFRJTEFZRVJfSU5I
RVJJVF9BTkRfSU5JVElBTChsYXllclR5cGUsIExheWVyVHlwZSwgcHJvcCwgUHJvcCkgXAorTGF5
ZXJUeXBlKiBjdXJyQ2hpbGQgPSBtX3N0eWxlLT5hY2Nlc3MjI0xheWVyVHlwZSMjcygpOyBcCitM
YXllclR5cGUqIHByZXZDaGlsZCA9IDA7IFwKIGlmICh2YWx1ZS0+aXNWYWx1ZUxpc3QoKSkgeyBc
CiAgICAgLyogV2FsayBlYWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGlu
ZyBuZXcgbGF5ZXJzIGFzIG5lZWRlZC4gKi8gXAogICAgIENTU1ZhbHVlTGlzdCogdmFsdWVMaXN0
ID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odmFsdWUpOyBcCiAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCB2YWx1ZUxpc3QtPmxlbmd0aCgpOyBpKyspIHsgXAogICAgICAgICBp
ZiAoIWN1cnJDaGlsZCkgeyBcCi0gICAgICAgICAgICAvKiBOZWVkIHRvIG1ha2UgYSBuZXcgbGF5
ZXIgdG8gaG9sZCB0aGlzIHZhbHVlICovIFwKLSAgICAgICAgICAgIGN1cnJDaGlsZCA9IG5ldyBU
cmFuc2l0aW9uKCk7IFwKLSAgICAgICAgICAgIHByZXZDaGlsZC0+c2V0TmV4dChjdXJyQ2hpbGQp
OyBcCisgICAgICAgIC8qIE5lZWQgdG8gbWFrZSBhIG5ldyBsYXllciB0byBob2xkIHRoaXMgdmFs
dWUgKi8gXAorICAgICAgICBjdXJyQ2hpbGQgPSBuZXcgTGF5ZXJUeXBlKCk7IFwKKyAgICAgICAg
cHJldkNoaWxkLT5zZXROZXh0KGN1cnJDaGlsZCk7IFwKICAgICAgICAgfSBcCi0gICAgICAgIG1h
cFRyYW5zaXRpb24jI1Byb3AoY3VyckNoaWxkLCB2YWx1ZUxpc3QtPml0ZW1XaXRob3V0Qm91bmRz
Q2hlY2soaSkpOyBcCisgICAgICAgIG1hcCMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlTGlzdC0+aXRl
bShpKSk7IFwKICAgICAgICAgcHJldkNoaWxkID0gY3VyckNoaWxkOyBcCiAgICAgICAgIGN1cnJD
aGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiAgICAgfSBcCiB9IGVsc2UgeyBcCi0gICAgbWFw
VHJhbnNpdGlvbiMjUHJvcChjdXJyQ2hpbGQsIHZhbHVlKTsgXAorICAgIG1hcCMjUHJvcChjdXJy
Q2hpbGQsIHZhbHVlKTsgXAogICAgIGN1cnJDaGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiB9
IFwKIHdoaWxlIChjdXJyQ2hpbGQpIHsgXApAQCAtMjM1LDYgKzIzOSwxOCBAQAogICAgIGN1cnJD
aGlsZCA9IGN1cnJDaGlsZC0+bmV4dCgpOyBcCiB9IH0KIAorI2RlZmluZSBIQU5ETEVfVFJBTlNJ
VElPTl9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKK0hBTkRMRV9NVUxUSUxBWUVS
X0lOSEVSSVRfQU5EX0lOSVRJQUwodHJhbnNpdGlvbiwgVHJhbnNpdGlvbiwgcHJvcCwgUHJvcCkK
KyAgICAKKyNkZWZpbmUgSEFORExFX1RSQU5TSVRJT05fVkFMVUUocHJvcCwgUHJvcCwgdmFsdWUp
IFwKK0hBTkRMRV9NVUxUSUxBWUVSX1ZBTFVFKHRyYW5zaXRpb24sIFRyYW5zaXRpb24sIHByb3As
IFByb3AsIHZhbHVlKQorICAgIAorI2RlZmluZSBIQU5ETEVfQU5JTUFUSU9OX0lOSEVSSVRfQU5E
X0lOSVRJQUwocHJvcCwgUHJvcCkgXAorSEFORExFX01VTFRJTEFZRVJfSU5IRVJJVF9BTkRfSU5J
VElBTChhbmltYXRpb24sIEFuaW1hdGlvbiwgcHJvcCwgUHJvcCkKKyAgICAKKyNkZWZpbmUgSEFO
RExFX0FOSU1BVElPTl9WQUxVRShwcm9wLCBQcm9wLCB2YWx1ZSkgXAorSEFORExFX01VTFRJTEFZ
RVJfVkFMVUUoYW5pbWF0aW9uLCBBbmltYXRpb24sIHByb3AsIFByb3AsIHZhbHVlKQorICAgIAog
I2RlZmluZSBIQU5ETEVfSU5IRVJJVF9DT05EKHByb3BJRCwgcHJvcCwgUHJvcCkgXAogaWYgKGlk
ID09IHByb3BJRCkgeyBcCiAgICAgbV9zdHlsZS0+c2V0IyNQcm9wKG1fcGFyZW50U3R5bGUtPnBy
b3AoKSk7IFwKQEAgLTM2NywxMSArMzgzLDU3IEBACiAgICAgICAgIG1fYXV0aG9yU3R5bGUtPmFk
ZFJ1bGVzRnJvbVNoZWV0KG1hcHBlZEVsZW1lbnRTaGVldCwgKm1fbWVkaXVtLCB0aGlzKTsKIAog
ICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8U3R5bGVTaGVldD4gaXQoc3R5bGVTaGVldHMt
PnN0eWxlU2hlZXRzKTsKLSAgICBmb3IgKDsgaXQuY3VycmVudCgpOyArK2l0KQotICAgICAgICBp
ZiAoaXQuY3VycmVudCgpLT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhaXQuY3VycmVudCgpLT5kaXNh
YmxlZCgpKQotICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGl0LmN1cnJlbnQoKSksICptX21lZGl1bSwgdGhpcyk7
CisgICAgZm9yICg7IGl0LmN1cnJlbnQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQuY3VycmVu
dCgpLT5pc0NTU1N0eWxlU2hlZXQoKSAmJiAhaXQuY3VycmVudCgpLT5kaXNhYmxlZCgpKSB7Cisg
ICAgICAgICAgICBDU1NTdHlsZVNoZWV0KiBzaGVldCA9IHN0YXRpY19jYXN0PENTU1N0eWxlU2hl
ZXQqPihpdC5jdXJyZW50KCkpOworICAgICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNG
cm9tU2hlZXQoc2hlZXQsICptX21lZGl1bSwgdGhpcyk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIGFkZCB0aGUga2V5ZnJhbWUgcnVsZXMKKyAgICAgICAgICAgIGludCBsZW4gPSBzaGVl
dC0+bGVuZ3RoKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgICAgICBTdHlsZUJhc2UqIGl0ZW0gPSBzaGVldC0+
aXRlbShpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlbS0+aXNLZXlmcmFtZXNSdWxlKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSogciA9IHN0YXRpY19j
YXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAg
YWRkS2V5ZnJhbWVTdHlsZShkb2MsIHIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKwogfQogCisvLyB0aGlzIGlzIGEgc2ltcGxpZmllZCBzdHls
ZSBzZXR0aW5nIGZ1bmN0aW9uIGZvciBrZXlmcmFtZSBzdHlsZXMKK3ZvaWQgQ1NTU3R5bGVTZWxl
Y3Rvcjo6YWRkS2V5ZnJhbWVTdHlsZShEb2N1bWVudCogZG9jLCBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKiBydWxlKQoreworICAgIEF0b21pY1N0cmluZyBzKHJ1bGUtPm5hbWUoKSk7CisgICAgS2V5
ZnJhbWVMaXN0KiBsaXN0OworICAgIGlmIChtX2tleWZyYW1lUnVsZU1hcC5jb250YWlucyhzLmlt
cGwoKSkpCisgICAgICAgIGxpc3QgPSBtX2tleWZyYW1lUnVsZU1hcC5nZXQocy5pbXBsKCkpLmdl
dCgpOworICAgIGVsc2UgeworICAgICAgICBsaXN0ID0gbmV3IEtleWZyYW1lTGlzdChzKTsKKyAg
ICAgICAgbV9rZXlmcmFtZVJ1bGVNYXAuYWRkKHMuaW1wbCgpLCBsaXN0KTsKKyAgICB9CisgICAg
bGlzdC0+Y2xlYXIoKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVsZS0+
bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIGtmID0gcnVs
ZS0+aXRlbShpKTsKKyAgICAgICAgbV9zdHlsZSA9IG5ldyAoZG9jLT5yZW5kZXJBcmVuYSgpKSBS
ZW5kZXJTdHlsZSgpOworICAgICAgICBtX3N0eWxlLT5yZWYoKTsKKyAgICAgICAgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wgPSBrZi0+c3R5bGUoKTsKKyAgICAgICAgRGVwcmVjYXRl
ZFZhbHVlTGlzdENvbnN0SXRlcmF0b3I8Q1NTUHJvcGVydHk+IGVuZDsKKyAgICAgICAgZm9yIChE
ZXByZWNhdGVkVmFsdWVMaXN0Q29uc3RJdGVyYXRvcjxDU1NQcm9wZXJ0eT4gaXQgPSBkZWNsLT52
YWx1ZXNJdGVyYXRvcigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIGNvbnN0IENT
U1Byb3BlcnR5JiBjdXJyZW50ID0gKml0OworICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShjdXJy
ZW50LmlkKCksIGN1cnJlbnQudmFsdWUoKSk7CisgICAgICAgICAgICBsaXN0LT5hZGRQcm9wZXJ0
eShjdXJyZW50LmlkKCkpOworICAgICAgICB9CisgICAgICAgIGxpc3QtPmluc2VydChrZi0+a2V5
KCksICptX3N0eWxlKTsKKyAgICAgICAgbV9zdHlsZS0+ZGVyZWYoZG9jLT5yZW5kZXJBcmVuYSgp
KTsKKyAgICAgICAgbV9zdHlsZSA9IDA7CisgICAgfQorfQorICAgIAorICAgIAogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjppbml0KCkKIHsKICAgICBtX2VsZW1lbnQgPSAwOwpAQCAtMzg5LDggKzQ1
MSwxNCBAQAogICAgIGRlbGV0ZSBtX2F1dGhvclN0eWxlOwogICAgIGRlbGV0ZSBtX3VzZXJTdHls
ZTsKICAgICBkZWxldGVBbGxWYWx1ZXMobV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHRzKTsKKyAgICBhcmVuYURlc3Ryb3koKTsKIH0KIAordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjph
cmVuYURlc3Ryb3koKQoreworICAgIG1fa2V5ZnJhbWVSdWxlTWFwLmNsZWFyKCk7Cit9CisKIHN0
YXRpYyBDU1NTdHlsZVNoZWV0KiBwYXJzZVVBU2hlZXQoY29uc3QgY2hhciogY2hhcmFjdGVycywg
dW5zaWduZWQgc2l6ZSkKIHsKICAgICBDU1NTdHlsZVNoZWV0KiBjb25zdCBwYXJlbnQgPSAwOwpA
QCAtNzc1LDcgKzg0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzLT5pc0No
ZWNrZWQoKSAhPSBtX2VsZW1lbnQtPmlzQ2hlY2tlZCgpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlv
bnMoKSkKKyAgICAgICAgICAgIGlmIChzdHlsZS0+dHJhbnNpdGlvbnMoKSB8fCBzdHlsZS0+YW5p
bWF0aW9ucygpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAg
Ym9vbCBjbGFzc2VzTWF0Y2ggPSB0cnVlOwpAQCAtMTIzMyw4ICsxMzAxLDkgQEAKICAgICBzdHls
ZS0+YWRqdXN0QmFja2dyb3VuZExheWVycygpOwogICAgIHN0eWxlLT5hZGp1c3RNYXNrTGF5ZXJz
KCk7CiAKLSAgICAvLyBEbyB0aGUgc2FtZSBmb3IgdHJhbnNpdGlvbnMuCisgICAgLy8gRG8gdGhl
IHNhbWUgZm9yIHRyYW5zaXRpb25zIGFuZCBhbmltYXRpb25zCiAgICAgc3R5bGUtPmFkanVzdFRy
YW5zaXRpb25zKCk7CisgICAgc3R5bGUtPmFkanVzdEFuaW1hdGlvbnMoKTsKIAogICAgIC8vIElt
cG9ydGFudDogSW50cmluc2ljIG1hcmdpbnMgZ2V0IGFkZGVkIHRvIGNvbnRyb2xzIGJlZm9yZSB0
aGUgdGhlbWUgaGFzIGFkanVzdGVkIHRoZSBzdHlsZSwgc2luY2UgdGhlIHRoZW1lIHdpbGwKICAg
ICAvLyBhbHRlciBmb250cyBhbmQgaGVpZ2h0cy93aWR0aHMuCkBAIC00NjMyLDI0ICs0NTg2LDUx
IEBACiAgICAgICAgIG1fc3R5bGUtPnNldFRyYW5zZm9ybU9yaWdpblkobCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uOgorICAgICAg
ICBpZiAoaXNJbml0aWFsKQorICAgICAgICAgICAgbV9zdHlsZS0+Y2xlYXJBbmltYXRpb25zKCk7
CisgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKKyAgICAgICAgICAgIG1fc3R5bGUtPmluaGVy
aXRBbmltYXRpb25zKG1fcGFyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGVsYXk6CisgICAgICAgIEhB
TkRMRV9BTklNQVRJT05fVkFMVUUoZGVsYXksIERlbGF5LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb246CisgICAgICAg
IEhBTkRMRV9BTklNQVRJT05fVkFMVUUoYW5pbWF0aW9uRGlyZWN0aW9uLCBBbmltYXRpb25EaXJl
Y3Rpb24sIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkR1cmF0aW9uOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGR1cmF0
aW9uLCBEdXJhdGlvbiwgdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6CisgICAgICAgIEhBTkRMRV9BTklNQVRJ
T05fVkFMVUUoYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQsIEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
LCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25OYW1lOgorICAgICAgICBIQU5ETEVfQU5JTUFUSU9OX1ZBTFVFKGFuaW1hdGlvbk5hbWUs
IEFuaW1hdGlvbk5hbWUsIHZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICAgICAgSEFORExFX0FOSU1BVElPTl9W
QUxVRShhbmltYXRpb25QbGF5U3RhdGUsIEFuaW1hdGlvblBsYXlTdGF0ZSwgdmFsdWUpCisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVu
Y3Rpb246CisgICAgICAgIEhBTkRMRV9BTklNQVRJT05fVkFMVUUodGltaW5nRnVuY3Rpb24sIFRp
bWluZ0Z1bmN0aW9uLCB2YWx1ZSkKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRUcmFuc2l0aW9uOgogICAgICAgICBpZiAoaXNJbml0aWFsKQogICAgICAgICAgICAg
bV9zdHlsZS0+Y2xlYXJUcmFuc2l0aW9ucygpOwogICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQp
CiAgICAgICAgICAgICBtX3N0eWxlLT5pbmhlcml0VHJhbnNpdGlvbnMobV9wYXJlbnRTdHlsZS0+
dHJhbnNpdGlvbnMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0VHJhbnNpdGlvbkRlbGF5OgorICAgICAgICBIQU5ETEVfVFJBTlNJVElPTl9WQUxVRShkZWxh
eSwgRGVsYXksIHZhbHVlKQorICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdFRyYW5zaXRpb25EdXJhdGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUo
ZHVyYXRpb24sIER1cmF0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIEhBTkRMRV9UUkFO
U0lUSU9OX1ZBTFVFKHJlcGVhdENvdW50LCBSZXBlYXRDb3VudCwgdmFsdWUpCisgICAgY2FzZSBD
U1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eToKKyAgICAgICAgSEFORExFX1RSQU5T
SVRJT05fVkFMVUUodHJhbnNpdGlvblByb3BlcnR5LCBUcmFuc2l0aW9uUHJvcGVydHksIHZhbHVl
KQogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25U
aW1pbmdGdW5jdGlvbjoKICAgICAgICAgSEFORExFX1RSQU5TSVRJT05fVkFMVUUodGltaW5nRnVu
Y3Rpb24sIFRpbWluZ0Z1bmN0aW9uLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIEhBTkRMRV9UUkFO
U0lUSU9OX1ZBTFVFKHByb3BlcnR5LCBQcm9wZXJ0eSwgdmFsdWUpCi0gICAgICAgIHJldHVybjsK
ICAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2Ug
Q1NTUHJvcGVydHlGb250U3RyZXRjaDoKQEAgLTQ4OTAsODcgKzQ4NzEsMTQ3IEBACiAgICAgbGF5
ZXItPnNldFlQb3NpdGlvbihsKTsKIH0KIAotdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUcmFu
c2l0aW9uRHVyYXRpb24oVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQor
dm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBUaW1pbmdGdW5jdGlvbihUcmFuc2l0aW9uKiB0cmFu
c2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUo
KSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVy
YXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uRHVyYXRpb24oKSk7CisgICAgICAg
IHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFJlbmRlclN0eWxlOjppbml0aWFsVGltaW5n
RnVuY3Rpb24oKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgaWYgKHZhbHVl
LT5pc1ByaW1pdGl2ZVZhbHVlKCkpIHsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1p
dGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAg
ICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVMaW5lYXI6CisgICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oTGluZWFyVGltaW5nRnVuY3Rpb24pKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVFYXNlOgorICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbjoK
KyAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5j
dGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAxLjAsIDEuMCkpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VPdXQ6Cisg
ICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rp
b24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjAsIC4wLCAuNTgsIDEuMCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUVhc2VJbk91dDoKKyAg
ICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlv
bihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uLCAuNDIsIC4wLCAuNTgsIDEuMCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKHZhbHVlLT5pc1RyYW5zaXRpb25UaW1pbmdGdW5jdGlvblZhbHVlKCkpIHsKKyAg
ICAgICAgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSogdGltaW5nRnVuY3Rpb24gPSBzdGF0aWNfY2Fz
dDxDU1NUaW1pbmdGdW5jdGlvblZhbHVlKj4odmFsdWUpOworICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRUaW1pbmdGdW5jdGlvbihUaW1pbmdGdW5jdGlvbihDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9u
LCB0aW1pbmdGdW5jdGlvbi0+eDEoKSwgdGltaW5nRnVuY3Rpb24tPnkxKCksIHRpbWluZ0Z1bmN0
aW9uLT54MigpLCB0aW1pbmdGdW5jdGlvbi0+eTIoKSkpOworICAgIH0KK30KIAordm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXBEdXJhdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1
ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6
Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0RHVyYXRpb24oUmVuZGVyU3R5
bGU6OmluaXRpYWxEdXJhdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKICAg
ICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKLQorICAg
IAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0
aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUykKLSAgICAgICAgdHJhbnNpdGlv
bi0+c2V0RHVyYXRpb24oaW50KDEwMDAqcHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKSkp
OworICAgICAgICB0cmFuc2l0aW9uLT5zZXREdXJhdGlvbihwcmltaXRpdmVWYWx1ZS0+Z2V0Rmxv
YXRWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS0+cHJpbWl0aXZlVHlwZSgp
ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTVMpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldER1
cmF0aW9uKGludChwcmltaXRpdmVWYWx1ZS0+Z2V0RmxvYXRWYWx1ZSgpKSk7CisgICAgICAgIHRy
YW5zaXRpb24tPnNldER1cmF0aW9uKHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkvMTAw
MC4wZik7CiB9CiAKLXZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6bWFwVHJhbnNpdGlvblJlcGVhdENv
dW50KFRyYW5zaXRpb24qIHRyYW5zaXRpb24sIENTU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6bWFwRGVsYXkoVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFs
dWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lO
SVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoUmVuZGVyU3R5bGU6
OmluaXRpYWxUcmFuc2l0aW9uUmVwZWF0Q291bnQoKSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0
RGVsYXkoUmVuZGVyU3R5bGU6OmluaXRpYWxEZWxheSgpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgYW5pbWF0aW9uLT5zZXREZWxheSgwKTsK
KyAgICBlbHNlIHsKKyAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5wcmltaXRpdmVUeXBlKCkg
PT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19NUykKKyAgICAgICAgICAgIGFuaW1hdGlvbi0+c2V0
RGVsYXkocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFsdWUoKS8xMDAwLmYpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBhbmltYXRpb24tPnNldERlbGF5KHByaW1pdGl2ZVZhbHVlLT5nZXRG
bG9hdFZhbHVlKCkpOworICAgIH0KK30KKwordm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXBBbmlt
YXRpb25EaXJlY3Rpb24oVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7
CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwp
IHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25EaXJlY3Rpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7CisgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRpb25E
aXJlY3Rpb24ocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgPT0gQ1NTVmFsdWVBbHRlcm5hdGUp
OworfQorCit2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50
KFRyYW5zaXRpb24qIGFuaW1hdGlvbiwgQ1NTVmFsdWUqIHZhbHVlKQoreworICAgIGlmICh2YWx1
ZS0+Y3NzVmFsdWVUeXBlKCkgPT0gQ1NTVmFsdWU6OkNTU19JTklUSUFMKSB7CisgICAgICAgIGFu
aW1hdGlvbi0+c2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxB
bmltYXRpb25JdGVyYXRpb25Db3VudCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
ICAgICBpZiAoIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCiAgICAgICAgIHJldHVybjsKLQor
ICAgIAogICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS0+Z2V0
SWRlbnQoKSA9PSBDU1NWYWx1ZUluZmluaXRlKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXRSZXBl
YXRDb3VudCgtMSk7CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQoLTEpOwogICAgIGVsc2UKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0UmVwZWF0Q291bnQoaW50
KHByaW1pdGl2ZVZhbHVlLT5nZXRGbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgYW5pbWF0aW9uLT5z
ZXRBbmltYXRpb25JdGVyYXRpb25Db3VudChpbnQocHJpbWl0aXZlVmFsdWUtPmdldEZsb2F0VmFs
dWUoKSkpOwogfQogCi12b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbihUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit2b2lkIENT
U1N0eWxlU2VsZWN0b3I6Om1hcEFuaW1hdGlvbk5hbWUoVHJhbnNpdGlvbiogYW5pbWF0aW9uLCBD
U1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9PSBDU1NW
YWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5nRnVuY3Rp
b24oUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb24oKSk7CisgICAg
ICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uTmFtZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFuaW1h
dGlvbk5hbWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgCisgICAgQ1NTUHJpbWl0
aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUq
Pih2YWx1ZSk7CisgICAgCisgICAgaWYgKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVudCgpID09IENT
U1ZhbHVlTm9uZSkgeworICAgICAgICBhbmltYXRpb24tPnNldElzTm9uZUFuaW1hdGlvbih0cnVl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhbmltYXRpb24tPnNldEFuaW1hdGlvbk5hbWUocHJp
bWl0aXZlVmFsdWUtPmdldFN0cmluZ1ZhbHVlKCkpOworICAgICAgICAKKyAgICAgICAgLy8gcmVz
b2x2ZSB0byB0aGUga2V5ZnJhbWVzCisgICAgICAgIFJlZlB0cjxLZXlmcmFtZUxpc3Q+IGtleWZy
YW1lID0gZmluZEtleWZyYW1lUnVsZShwcmltaXRpdmVWYWx1ZS0+Z2V0U3RyaW5nVmFsdWUoKSk7
CisgICAgICAgIGFuaW1hdGlvbi0+c2V0QW5pbWF0aW9uS2V5ZnJhbWUoa2V5ZnJhbWUpOworICAg
IH0KK30KIAotICAgIGlmICh2YWx1ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKSB7Ci0gICAgICAgIENT
U1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlKj4odmFsdWUpOwotICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLT5nZXRJZGVu
dCgpKSB7Ci0gICAgICAgICAgICBjYXNlIENTU1ZhbHVlTGluZWFyOgotICAgICAgICAgICAgICAg
IHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKExpbmVhclRpbWlu
Z0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENT
U1ZhbHVlRWFzZToKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRUaW1pbmdGdW5jdGlv
bihUaW1pbmdGdW5jdGlvbigpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgQ1NTVmFsdWVFYXNlSW46Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGlt
aW5nRnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjQy
LCAuMCwgMS4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVFYXNlT3V0OgotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWlu
Z0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIC4wLCAu
MCwgLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVFYXNlSW5PdXQ6Ci0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0VGltaW5n
RnVuY3Rpb24oVGltaW5nRnVuY3Rpb24oQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbiwgLjQyLCAu
MCwgLjU4LCAxLjApKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQordm9pZCBD
U1NTdHlsZVNlbGVjdG9yOjptYXBBbmltYXRpb25QbGF5U3RhdGUoVHJhbnNpdGlvbiogYW5pbWF0
aW9uLCBDU1NWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKHZhbHVlLT5jc3NWYWx1ZVR5cGUoKSA9
PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKKyAgICAgICAgYW5pbWF0aW9uLT5zZXRBbmltYXRp
b25QbGF5U3RhdGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgICBpZiAodmFsdWUtPmlzVHJhbnNpdGlvblRpbWlu
Z0Z1bmN0aW9uVmFsdWUoKSkgewotICAgICAgICBDU1NUaW1pbmdGdW5jdGlvblZhbHVlKiB0aW1p
bmdGdW5jdGlvbiA9IHN0YXRpY19jYXN0PENTU1RpbWluZ0Z1bmN0aW9uVmFsdWUqPih2YWx1ZSk7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFRpbWluZ0Z1bmN0aW9uKFRpbWluZ0Z1bmN0aW9uKEN1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb24sIHRpbWluZ0Z1bmN0aW9uLT54MSgpLCB0aW1pbmdGdW5j
dGlvbi0+eTEoKSwgdGltaW5nRnVuY3Rpb24tPngyKCksIHRpbWluZ0Z1bmN0aW9uLT55MigpKSk7
Ci0gICAgfQorICAgIAorICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVWYWx1ZSA9IHN0
YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUpOworICAgIGFuaW1hdGlvbi0+c2V0
QW5pbWF0aW9uUGxheVN0YXRlKChwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSA9PSBDU1NWYWx1
ZVBhdXNlZCkgPyBBbmltUGxheVN0YXRlUGF1c2VkIDogQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOwog
fQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1hcFRyYW5zaXRpb25Qcm9wZXJ0eShUcmFuc2l0
aW9uKiB0cmFuc2l0aW9uLCBDU1NWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT5jc3NW
YWx1ZVR5cGUoKSA9PSBDU1NWYWx1ZTo6Q1NTX0lOSVRJQUwpIHsKLSAgICAgICAgdHJhbnNpdGlv
bi0+c2V0UHJvcGVydHkoUmVuZGVyU3R5bGU6OmluaXRpYWxUcmFuc2l0aW9uUHJvcGVydHkoKSk7
CisgICAgICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eShSZW5kZXJTdHlsZTo6
aW5pdGlhbFRyYW5zaXRpb25Qcm9wZXJ0eSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQor
ICAgIAogICAgIGlmICghdmFsdWUtPmlzUHJpbWl0aXZlVmFsdWUoKSkKICAgICAgICAgcmV0dXJu
OwotCisgICAgCiAgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZVZhbHVlID0gc3RhdGlj
X2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih2YWx1ZSk7Ci0gICAgdHJhbnNpdGlvbi0+c2V0UHJv
cGVydHkocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkpOworICAgIHRyYW5zaXRpb24tPnNldFRy
YW5zaXRpb25Qcm9wZXJ0eShwcmltaXRpdmVWYWx1ZS0+Z2V0SWRlbnQoKSk7CiB9CiAKIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6bWFwTmluZVBpZWNlSW1hZ2UoQ1NTVmFsdWUqIHZhbHVlLCBOaW5l
UGllY2VJbWFnZSYgaW1hZ2UpCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTU3R5bGVTZWxlY3Rvci5oCShyZXZpc2lvbiAz
MjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTgsNiArNTgsNyBAQAogY2xhc3MgU3R5bGVTaGVldDsKIGNsYXNzIFN0eWxlU2hlZXRMaXN0
OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lc1J1bGU7CiAK
IGNsYXNzIE1lZGlhUXVlcnlSZXN1bHQgewogcHVibGljOgpAQCAtMTI5LDYgKzEzMCwyNCBAQAog
ICAgICAgICB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoKTsKICAgICAgICAgdm9pZCB2aXNp
dGVkU3RhdGVDaGFuZ2VkKHVuc2lnbmVkIHZpc2l0ZWRIYXNoKTsKIAorICAgICAgICBLZXlmcmFt
ZUxpc3QqIGZpbmRLZXlmcmFtZVJ1bGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEF0b21pY1N0cmluZyBzKG5hbWUpOwor
ICAgICAgICAgICAgaWYgKCFtX2tleWZyYW1lUnVsZU1hcC5jb250YWlucyhzLmltcGwoKSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gbV9rZXlmcmFtZVJ1
bGVNYXAuZmluZChzLmltcGwoKSkuZ2V0KCktPnNlY29uZC5nZXQoKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgdm9pZCBhZGRLZXlmcmFtZVN0eWxlKERvY3VtZW50KiBkb2MsIFdlYktp
dENTU0tleWZyYW1lc1J1bGUqIHJ1bGUpOworICAgICAgICAKKyAgICAgICAgc3RhdGljIHZvaWQg
Y3JlYXRlVGltaW5nRnVuY3Rpb24oQ1NTVmFsdWUqIGluVmFsdWUsIFRpbWluZ0Z1bmN0aW9uJiBv
dXRUaW1pbmdGdW5jdGlvbik7CisgICAgICAgIHN0YXRpYyBib29sIGNyZWF0ZVRyYW5zZm9ybU9w
ZXJhdGlvbnMoQ1NTVmFsdWUqIGluVmFsdWUsIFJlbmRlclN0eWxlKiBpblN0eWxlLCBUcmFuc2Zv
cm1PcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICAgICAgCisgICAgICAgIHZvaWQgYXJl
bmFEZXN0cm95KCk7CisgICAgICAgIAogICAgIHByaXZhdGU6CiAgICAgICAgIGVudW0gU2VsZWN0
b3JNYXRjaCB7IFNlbGVjdG9yTWF0Y2hlcywgU2VsZWN0b3JGYWlsc0xvY2FsbHksIFNlbGVjdG9y
RmFpbHNDb21wbGV0ZWx5IH07CiAgICAgICAgIFNlbGVjdG9yTWF0Y2ggY2hlY2tTZWxlY3RvcihD
U1NTZWxlY3RvciosIEVsZW1lbnQqLCBib29sIGlzQW5jZXN0b3IsIGJvb2wgaXNTdWJTZWxlY3Rv
cik7CkBAIC0xNjIsNyArMTgxLDEwIEBACiAgICAgICAgIEJvcmRlckRhdGEgbV9ib3JkZXJEYXRh
OwogICAgICAgICBGaWxsTGF5ZXIgbV9iYWNrZ3JvdW5kRGF0YTsKICAgICAgICAgQ29sb3IgbV9i
YWNrZ3JvdW5kQ29sb3I7Ci0KKyAgICAgICAgCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lTGlzdD4gPiBLZXlmcmFtZVJ1bGVNYXA7Cisg
ICAgICAgIEtleWZyYW1lUnVsZU1hcCBtX2tleWZyYW1lUnVsZU1hcDsKKyAgICAgICAgCiAgICAg
cHVibGljOgogICAgICAgICBzdGF0aWMgUmVuZGVyU3R5bGUqIHN0eWxlTm90WWV0QXZhaWxhYmxl
KCkgeyByZXR1cm4gc19zdHlsZU5vdFlldEF2YWlsYWJsZTsgfQogCkBAIC0xODUsOSArMjA3LDE0
IEBACiAgICAgICAgIHZvaWQgbWFwRmlsbFhQb3NpdGlvbihGaWxsTGF5ZXIqLCBDU1NWYWx1ZSop
OwogICAgICAgICB2b2lkIG1hcEZpbGxZUG9zaXRpb24oRmlsbExheWVyKiwgQ1NTVmFsdWUqKTsK
IAotICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25EdXJhdGlvbihUcmFuc2l0aW9uKiwgQ1NTVmFs
dWUqKTsKLSAgICAgICAgdm9pZCBtYXBUcmFuc2l0aW9uUmVwZWF0Q291bnQoVHJhbnNpdGlvbios
IENTU1ZhbHVlKik7Ci0gICAgICAgIHZvaWQgbWFwVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKFRy
YW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcERlbGF5KFRyYW5zaXRpb24q
LCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcER1cmF0aW9uKFRyYW5zaXRpb24qLCBDU1NW
YWx1ZSopOworICAgICAgICB2b2lkIG1hcFRpbWluZ0Z1bmN0aW9uKFRyYW5zaXRpb24qLCBDU1NW
YWx1ZSopOworCisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uRGlyZWN0aW9uKFRyYW5zaXRpb24q
LCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KFRy
YW5zaXRpb24qLCBDU1NWYWx1ZSopOworICAgICAgICB2b2lkIG1hcEFuaW1hdGlvbk5hbWUoVHJh
bnNpdGlvbiosIENTU1ZhbHVlKik7CisgICAgICAgIHZvaWQgbWFwQW5pbWF0aW9uUGxheVN0YXRl
KFRyYW5zaXRpb24qLCBDU1NWYWx1ZSopOwogICAgICAgICB2b2lkIG1hcFRyYW5zaXRpb25Qcm9w
ZXJ0eShUcmFuc2l0aW9uKiwgQ1NTVmFsdWUqKTsKIAogICAgICAgICB2b2lkIG1hcE5pbmVQaWVj
ZUltYWdlKENTU1ZhbHVlKiwgTmluZVBpZWNlSW1hZ2UmKTsKSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDMy
OTEyKQorKysgV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0
MSw5IEBACiAgICAgICAgIElNUE9SVF9SVUxFLAogICAgICAgICBNRURJQV9SVUxFLAogICAgICAg
ICBGT05UX0ZBQ0VfUlVMRSwKLSAgICAgICAgUEFHRV9SVUxFCisgICAgICAgIFBBR0VfUlVMRSwK
KyAgICAgICAgV0VCS0lUX0tFWUZSQU1FU19SVUxFLAorICAgICAgICBXRUJLSVRfS0VZRlJBTUVf
UlVMRQogICAgIH07CiAKICAgICBDU1NSdWxlKFN0eWxlQmFzZSogcGFyZW50KQpJbmRleDogV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NTkgQEAKKy8qKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgorICoKKyAqIChDKSAxOTk5LTIwMDMgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKKyAqIChDKSAyMDAyLTIwMDMgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDIsIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgor
I2luY2x1ZGUgIkNTU1J1bGVMaXN0LmgiCisjaW5jbHVkZSAiU3R5bGVTaGVldC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1dlYktpdENTU0tleWZyYW1lc1J1bGU6OldlYktpdENTU0tleWZy
YW1lc1J1bGUoU3R5bGVCYXNlKiBwYXJlbnQpIAorICAgIDogQ1NTUnVsZShwYXJlbnQpCisgICAg
LCBtX2xzdENTU1J1bGVzKG5ldyBDU1NSdWxlTGlzdCgpKQoreworfQorCitXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlOjp+V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSgpCit7CisgICAgaW50IGxlbmd0aCA9
IG1fbHN0Q1NTUnVsZXMtPmxlbmd0aCgpOworICAgIGlmIChsZW5ndGggPT0gMCkKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQor
ICAgICAgICBtX2xzdENTU1J1bGVzLT5pdGVtKGkpLT5zZXRQYXJlbnQoMCk7Cit9CisKK1N0cmlu
ZyBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9u
YW1lOworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OnNldE5hbWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiAvKmVjKi8pCit7CisgICAgbV9uYW1lID0gbmFtZTsK
K30KKwordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKFN0cmluZyBuYW1lKQor
eworICAgIG1fbmFtZSA9IG5hbWU7Cit9CisKK3Vuc2lnbmVkIFdlYktpdENTU0tleWZyYW1lc1J1
bGU6Omxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmxl
bmd0aCgpOworfQorCitXZWJLaXRDU1NLZXlmcmFtZVJ1bGUqIFdlYktpdENTU0tleWZyYW1lc1J1
bGU6Oml0ZW0odW5zaWduZWQgaW5kZXgpCit7CisgICAgQ1NTUnVsZSogcnVsZSA9IG1fbHN0Q1NT
UnVsZXMuZ2V0KCktPml0ZW0oaW5kZXgpOworICAgIHJldHVybiAocnVsZSAmJiBydWxlLT5pc0tl
eWZyYW1lUnVsZSgpKSA/IHN0YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lUnVsZSo+KHJ1bGUp
IDogMDsKK30KKworY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlOjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIENTU1J1bGUqIHJ1bGUg
PSBtX2xzdENTU1J1bGVzLmdldCgpLT5pdGVtKGluZGV4KTsKKyAgICByZXR1cm4gKHJ1bGUgJiYg
cnVsZS0+aXNLZXlmcmFtZVJ1bGUoKSkgPyBzdGF0aWNfY2FzdDxjb25zdCBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGUqPihydWxlKSA6IDA7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6
aW5zZXJ0KFdlYktpdENTU0tleWZyYW1lUnVsZSogcnVsZSkKK3sKKyAgICBmbG9hdCBrZXkgPSBy
dWxlLT5rZXlBc1BlcmNlbnQoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGgoKTsgKytpKSB7CisgICAgICAgIGlmIChpdGVtKGkpLT5rZXlBc1BlcmNlbnQoKSA9PSBrZXkp
IHsKKyAgICAgICAgICAgIG1fbHN0Q1NTUnVsZXMuZ2V0KCktPmRlbGV0ZVJ1bGUoaSk7CisgICAg
ICAgICAgICBtX2xzdENTU1J1bGVzLmdldCgpLT5pbnNlcnRSdWxlKHJ1bGUsIGkpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChpdGVtKGkpLT5rZXlBc1BlcmNl
bnQoKSA+IGtleSkgeworICAgICAgICAgICAgLy8gaW5zZXJ0IGJlZm9yZQorICAgICAgICAgICAg
bV9sc3RDU1NSdWxlcy5nZXQoKS0+aW5zZXJ0UnVsZShydWxlLCBpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBhcHBlbmQKKyAgICBtX2xzdENT
U1J1bGVzLmdldCgpLT5hcHBlbmQocnVsZSk7CisgICAgc3R5bGVzaGVldCgpLT5zdHlsZVNoZWV0
Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Omluc2VydFJ1bGUo
Y29uc3QgU3RyaW5nJiBydWxlKQoreworICAgIENTU1BhcnNlciBwKHVzZVN0cmljdFBhcnNpbmco
KSk7CisgICAgUmVmUHRyPENTU1J1bGU+IG5ld1J1bGUgPSBwLnBhcnNlS2V5ZnJhbWVSdWxlKHBh
cmVudFN0eWxlU2hlZXQoKSwgcnVsZSk7CisgICAgaWYgKG5ld1J1bGUuZ2V0KCkgJiYgbmV3UnVs
ZS5nZXQoKS0+aXNLZXlmcmFtZVJ1bGUoKSkKKyAgICAgICAgaW5zZXJ0KHN0YXRpY19jYXN0PFdl
YktpdENTU0tleWZyYW1lUnVsZSo+KG5ld1J1bGUuZ2V0KCkpKTsKK30KKwordm9pZCBXZWJLaXRD
U1NLZXlmcmFtZXNSdWxlOjpkZWxldGVSdWxlKGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBmbG9h
dCBrZXkgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmtleVN0cmluZ1RvRmxvYXQocyk7CisgICAg
aW50IGkgPSBmaW5kUnVsZUluZGV4KGtleSk7CisgICAgaWYgKGkgPj0gMCkgeworICAgICAgICBt
X2xzdENTU1J1bGVzLmdldCgpLT5kZWxldGVSdWxlKGkpOworICAgICAgICBzdHlsZXNoZWV0KCkt
PnN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgfQorfQorCitXZWJLaXRDU1NLZXlmcmFtZVJ1bGUq
IFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmZpbmRSdWxlKGNvbnN0IFN0cmluZyYgcykKK3sKKyAg
ICBmbG9hdCBrZXkgPSBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmtleVN0cmluZ1RvRmxvYXQocyk7
CisgICAgaW50IGkgPSBmaW5kUnVsZUluZGV4KGtleSk7CisgICAgcmV0dXJuIChpID49IDApID8g
aXRlbShpKSA6IDA7Cit9CisKK2ludCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpmaW5kUnVsZUlu
ZGV4KGZsb2F0IGtleSkgY29uc3QKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgeworICAgICAgICBpZiAoaXRlbShpKS0+a2V5QXNQZXJjZW50KCkgPT0ga2V5
KQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorCisgICAgcmV0dXJuIC0xOworfQorCitT
dHJpbmcgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nIHJlc3VsdCA9ICJALXdlYmtpdC1rZXlmcmFtZXMgIjsKKyAgICByZXN1bHQgKz0gbV9uYW1l
OworICAgIHJlc3VsdCArPSAiIHsgXG4iOworCisgICAgaWYgKG1fbHN0Q1NTUnVsZXMpIHsKKyAg
ICAgICAgdW5zaWduZWQgbGVuID0gbV9sc3RDU1NSdWxlcy0+bGVuZ3RoKCk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgcmVzdWx0ICs9
ICIgICI7CisgICAgICAgICAgICByZXN1bHQgKz0gbV9sc3RDU1NSdWxlcy0+aXRlbShpKS0+Y3Nz
VGV4dCgpOworICAgICAgICAgICAgcmVzdWx0ICs9ICJcbiI7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICByZXN1bHQgKz0gIn0iOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYgKzYxLDggQEAKICNp
bmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlNoYWRvd1ZhbHVl
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCisjaW5jbHVkZSAiV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgPGtqcy9kdG9hLmg+CiAKICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCkBAIC0yNTIsNiArMjU0LDIwIEBACiAgICAgcmV0dXJuIHJ1bGUu
cmVsZWFzZSgpOwogfQogCitQYXNzUmVmUHRyPENTU1J1bGU+IENTU1BhcnNlcjo6cGFyc2VLZXlm
cmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCAqc2hlZXQsIGNvbnN0IFN0cmluZyAmc3RyaW5nKQorewor
ICAgIHN0eWxlRWxlbWVudCA9IHNoZWV0OworICAgIAorICAgIHNldHVwUGFyc2VyKCJALXdlYmtp
dC1rZXlmcmFtZS1ydWxleyAiLCBzdHJpbmcsICJ9ICIpOworICAgIAorICAgIENTU1BhcnNlciog
b2xkID0gY3VycmVudFBhcnNlcjsKKyAgICBjdXJyZW50UGFyc2VyID0gdGhpczsKKyAgICBjc3N5
eXBhcnNlKHRoaXMpOworICAgIGN1cnJlbnRQYXJzZXIgPSBvbGQ7CisgICAgCisgICAgcmV0dXJu
IGtleWZyYW1lLnJlbGVhc2UoKTsKK30KKwogYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24gKmRlY2xhcmF0aW9uLCBpbnQgX2lkLCBjb25zdCBTdHJp
bmcgJnN0cmluZywgYm9vbCBfaW1wb3J0YW50KQogewogICAgIHN0eWxlRWxlbWVudCA9IGRlY2xh
cmF0aW9uLT5zdHlsZXNoZWV0KCk7CkBAIC0xMzI2LDggKzEzNDIsOCBAQAogICAgICAgICB9CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRy
YW5zaXRpb25EZWxheToKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0
aW9uOgotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQ6CiAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbjoKICAgICBj
YXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblByb3BlcnR5OiB7CiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsOwpAQCAtMTMzNyw2ICsxMzUzLDE5IEBACiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRGlyZWN0aW9uOgorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlv
bjoKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6Cisg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWU6CisgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlTdGF0ZToKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246IHsKKyAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWw7
CisgICAgICAgIGlmIChwYXJzZUFuaW1hdGlvblByb3BlcnR5KHByb3BJZCwgdmFsKSkgeworICAg
ICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFyZ2luQ29sbGFwc2U6IHsKICAg
ICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbMl0gPSB7IENTU1Byb3BlcnR5V2Via2l0TWFyZ2lu
VG9wQ29sbGFwc2UsCiAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hcmdpbkJvdHRvbUNv
bGxhcHNlIH07CkBAIC0xNTg1LDYgKzE2MTQsOCBAQAogICAgICAgICBjb25zdCBpbnQgcHJvcGVy
dGllc1syXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgsIENTU1Byb3BlcnR5
V2Via2l0VGV4dFN0cm9rZUNvbG9yIH07CiAgICAgICAgIHJldHVybiBwYXJzZVNob3J0aGFuZChw
cm9wSWQsIHByb3BlcnRpZXMsIDIsIGltcG9ydGFudCk7CiAgICAgfQorICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRBbmltYXRpb246CisgICAgICAgIHJldHVybiBwYXJzZUFuaW1hdGlvblNob3J0
aGFuZChpbXBvcnRhbnQpOwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uOgog
ICAgICAgICByZXR1cm4gcGFyc2VUcmFuc2l0aW9uU2hvcnRoYW5kKGltcG9ydGFudCk7CiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CkBAIC0xNzM5LDEwICsxNzcwLDcxIEBACiAgICAgICAg
IGx2YWwgPSBydmFsOwogfQogCitib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhh
bmQoYm9vbCBpbXBvcnRhbnQpCit7CisgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgIENT
U1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EdXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmlt
YXRpb25EZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlX
ZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EaXJlY3Rpb24gfTsKKyAgICBjb25zdCBp
bnQgbnVtUHJvcGVydGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9wZXJ0aWVz
WzBdKTsKKyAgICAKKyAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBDU1NQcm9wZXJ0eVdl
YmtpdEFuaW1hdGlvbik7CisgICAgCisgICAgYm9vbCBwYXJzZWRQcm9wZXJ0eVtudW1Qcm9wZXJ0
aWVzXSA9IHsgZmFsc2UgfTsgLy8gY29tcGlsZXIgd2lsbCByZXBlYXQgZmFsc2UgYXMgbmVjZXNz
YXJ5CisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZXNbbnVtUHJvcGVydGllc107CisgICAgCisg
ICAgaW50IGk7CisgICAgd2hpbGUgKHZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CisgICAgICAgIFZh
bHVlKiB2YWwgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKKyAgICAgICAgaWYgKHZhbC0+dW5pdCA9
PSBWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsLT5pVmFsdWUgPT0gJywnKSB7CisgICAgICAgICAgICAv
LyBXZSBoaXQgdGhlIGVuZC4gIEZpbGwgaW4gYWxsIHJlbWFpbmluZyB2YWx1ZXMgd2l0aCB0aGUg
aW5pdGlhbCB2YWx1ZS4KKyAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAg
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmICghcGFyc2VkUHJvcGVydHlbaV0pCisgICAgICAgICAgICAgICAgICAgIGFkZFRyYW5zaXRp
b25WYWx1ZSh2YWx1ZXNbaV0sIG5ldyBDU1NJbml0aWFsVmFsdWUodHJ1ZSkpOworICAgICAgICAg
ICAgICAgIHBhcnNlZFByb3BlcnR5W2ldID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoIXZhbHVlTGlzdC0+Y3VycmVudCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAg
IGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVydGllczsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CisgICAgICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB2YWw7CisgICAgICAgICAgICAgICAgaWYgKHBhcnNlQW5pbWF0aW9uUHJvcGVydHko
cHJvcGVydGllc1tpXSwgdmFsKSkgeworICAgICAgICAgICAgICAgICAgICBwYXJzZWRQcm9wZXJ0
eVtpXSA9IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZh
bHVlKHZhbHVlc1tpXSwgdmFsLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmlu
ZCBhdCBsZWFzdCBvbmUgbWF0Y2gsIHRoaXMgaXMgYW4KKyAgICAgICAgLy8gaW52YWxpZCBzaG9y
dGhhbmQgYW5kIHdlIGhhdmUgdG8gaWdub3JlIGl0CisgICAgICAgIGlmICghZm91bmQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCisgICAgZm9yIChpID0g
MDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgeworICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5
W2ldKQorICAgICAgICAgICAgYWRkVHJhbnNpdGlvblZhbHVlKHZhbHVlc1tpXSwgbmV3IENTU0lu
aXRpYWxWYWx1ZSh0cnVlKSk7CisgICAgfQorICAgIAorICAgIC8vIE5vdyBhZGQgYWxsIG9mIHRo
ZSBwcm9wZXJ0aWVzIHdlIGZvdW5kLgorICAgIGZvciAoaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVz
OyBpKyspCisgICAgICAgIGFkZFByb3BlcnR5KHByb3BlcnRpZXNbaV0sIHZhbHVlc1tpXS5yZWxl
YXNlKCksIGltcG9ydGFudCk7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiB7Ci0gICAg
Y29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUHJv
cGVydHksIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5j
dGlvbiwgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uUmVwZWF0Q291bnQgfTsKKyAgICBjb25z
dCBpbnQgcHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0
eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5z
aXRpb25EdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbiB9OwogICAgIGNvbnN0IGludCBudW1Qcm9w
ZXJ0aWVzID0gc2l6ZW9mKHByb3BlcnRpZXMpIC8gc2l6ZW9mKHByb3BlcnRpZXNbMF0pOwogICAg
IAogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvbik7CkBAIC0yMjM5LDE2ICsyMzMxLDE2IEBACiAgICAgfQogICAgIHJldHVybiBmYWxzZTsK
IH0KLQotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25EdXJh
dGlvbigpCisgICAgCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0
aW9uRGlyZWN0aW9uKCkKIHsKICAgICBWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQo
KTsKLSAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGVGltZSwgc3RyaWN0KSkKLSAgICAgICAgcmV0
dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CisgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZU5vcm1hbCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVBbHRlcm5hdGUpCisgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmlkKTsKICAgICByZXR1cm4gMDsKIH0KLQot
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3Vu
dCgpCisgICAgCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
SXRlcmF0aW9uQ291bnQoKQogewogICAgIFZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVu
dCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVJbmZpbml0ZSkKQEAgLTIyNTgsNiAr
MjM1MCw0NSBAQAogICAgIHJldHVybiAwOwogfQogCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlQW5pbWF0aW9uTmFtZSgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVM
aXN0LT5jdXJyZW50KCk7CisgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfU1RSSU5HIHx8IHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURF
TlQpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vbmUgfHwgKHZhbHVlLT51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HICYmIGVxdWFsSWdub3JpbmdDYXNl
KHZhbHVlLT5zdHJpbmcsICJub25lIikpKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlKENTU1ZhbHVlTm9uZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30K
KworUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblBsYXlTdGF0
ZSgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAgaWYg
KHZhbHVlLT5pZCA9PSBDU1NWYWx1ZVJ1bm5pbmcgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlUGF1
c2VkKQorICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5pZCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VE
ZWxheSgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAg
aWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZU5vdykKKyAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZSh2YWx1ZS0+aWQpOworICAgIGlmICh2YWxpZFVuaXQodmFsdWUsIEZUaW1lLCBz
dHJpY3QpKQorICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlKHZhbHVlLT5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAgICByZXR1
cm4gMDsKK30KKyAgICAKK1Bhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VEdXJh
dGlvbigpCit7CisgICAgVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7CisgICAg
aWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUsIHN0cmljdCkpCisgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXMpdmFsdWUtPnVuaXQpOworICAgIHJldHVybiAwOworfQorCiBib29sIENTU1BhcnNlcjo6
cGFyc2VUaW1pbmdGdW5jdGlvblZhbHVlKFZhbHVlTGlzdComIGFyZ3MsIGRvdWJsZSYgcmVzdWx0
KQogewogICAgIFZhbHVlKiB2ID0gYXJncy0+Y3VycmVudCgpOwpAQCAtMjI3Niw3ICsyNDA3LDcg
QEAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2Vy
OjpwYXJzZVRyYW5zaXRpb25UaW1pbmdGdW5jdGlvbigpCitQYXNzUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVGltaW5nRnVuY3Rpb24oKQogewogICAgIFZhbHVlKiB2YWx1ZSA9IHZh
bHVlTGlzdC0+Y3VycmVudCgpOwogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNlIHx8
IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUxpbmVhciB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFsdWVFYXNl
SW4gfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlRWFzZU91dCB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFYXNlSW5PdXQpCkBAIC0yMzIxLDYgKzI0NTIsOTYgQEAKICAgICByZXR1cm4gMDsKIH0KIAor
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uUHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRy
PENTU1ZhbHVlPiYgcmVzdWx0KQoreworICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IHZhbHVlczsK
KyAgICBWYWx1ZSogdmFsOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CisgICAgYm9vbCBh
bGxvd0NvbW1hID0gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gMDsKKyAgICAKKyAgICB3aGls
ZSAoKHZhbCA9IHZhbHVlTGlzdC0+Y3VycmVudCgpKSkgeworICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IGN1cnJWYWx1ZTsKKyAgICAgICAgaWYgKGFsbG93Q29tbWEpIHsKKyAgICAgICAgICAgIGlm
ICh2YWwtPnVuaXQgIT0gVmFsdWU6Ok9wZXJhdG9yIHx8IHZhbC0+aVZhbHVlICE9ICcsJykKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQo
KTsKKyAgICAgICAgICAgIGFsbG93Q29tbWEgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIHN3aXRjaCAocHJvcElkKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgorICAgICAgICAgICAgICAgICAgICBj
dXJyVmFsdWUgPSBwYXJzZURlbGF5KCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFs
dWUpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dEFuaW1hdGlvbkR1cmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJz
ZUR1cmF0aW9uKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAg
ICAgICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRp
cmVjdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25E
aXJlY3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRl
cmF0aW9uQ291bnQ6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlQW5pbWF0
aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5p
bWF0aW9uTmFtZToKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRp
b25OYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvblBsYXlT
dGF0ZToKKyAgICAgICAgICAgICAgICAgICAgY3VyclZhbHVlID0gcGFyc2VBbmltYXRpb25QbGF5
U3RhdGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5n
RnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlVGltaW5nRnVu
Y3Rpb24oKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlTGlzdC0+bmV4dCgpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFjdXJyVmFs
dWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgeworICAgICAgICAgICAgICAgIHZhbHVlcyA9IG5l
dyBDU1NWYWx1ZUxpc3QoKTsKKyAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5y
ZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
dmFsdWVzKQorICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGN1cnJWYWx1ZS5yZWxlYXNl
KCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHZhbHVlID0gY3VyclZhbHVl
LnJlbGVhc2UoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYWxsb3dDb21tYSA9IHRydWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIFdoZW4gcGFyc2luZyB0aGUgJ2FuaW1h
dGlvbicgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRo
ZSBsaXN0cyBmb3IgYWxsCisgICAgICAgIC8vIHByb3BlcnRpZXMuCisgICAgICAgIGlmIChpblNo
b3J0aGFuZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmICh2YWx1
ZXMgJiYgdmFsdWVzLT5sZW5ndGgoKSkgeworICAgICAgICByZXN1bHQgPSB2YWx1ZXMucmVsZWFz
ZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHZhbHVlKSB7CisgICAg
ICAgIHJlc3VsdCA9IHZhbHVlLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKyAgICAKKyAgICAKIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVRyYW5zaXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1bHQp
CiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gdmFsdWVzOwpAQCAtMjM0MCwxOCArMjU2MSwx
OCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcm9w
SWQpIHsKLSAgICAgICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvbkR1
cmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25E
dXJhdGlvbigpOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uRGVsYXk6CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRGVsYXkoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblJlcGVhdENvdW50Ogot
ICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25SZXBlYXRDb3Vu
dCgpOworICAgICAgICAgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVy
YXRpb246CisgICAgICAgICAgICAgICAgICAgIGN1cnJWYWx1ZSA9IHBhcnNlRHVyYXRpb24oKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJWYWx1ZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9u
OgotICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRyYW5zaXRpb25UaW1pbmdG
dW5jdGlvbigpOworICAgICAgICAgICAgICAgICAgICBjdXJyVmFsdWUgPSBwYXJzZVRpbWluZ0Z1
bmN0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyVmFsdWUpCiAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CkBAIC00MjU2LDYgKzQ0ODAsMTMgQEAKICAgICByZXR1cm4gbGlzdDsKIH0KIAorV2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZXNSdWxlKCkKK3sKKyAg
ICBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlKiBydWxlID0gbmV3IFdlYktpdENTU0tleWZyYW1lc1J1
bGUoc3R5bGVFbGVtZW50KTsKKyAgICBtX3BhcnNlZFN0eWxlT2JqZWN0cy5hcHBlbmQocnVsZSk7
CisgICAgcmV0dXJuIHJ1bGU7Cit9CisKIENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVS
dWxlKENTU1NlbGVjdG9yKiBzZWxlY3RvcikKIHsKICAgICBDU1NTdHlsZVJ1bGUqIHJ1bGUgPSAw
OwpAQCAtNDI3OCw2ICs0NTA5LDE2IEBACiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKK1dlYktpdENT
U0tleWZyYW1lUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVLZXlmcmFtZVJ1bGUoZmxvYXQga2V5KQor
eworICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWUgPSBuZXcgV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlKHN0eWxlRWxlbWVudCk7CisgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5k
KGtleWZyYW1lKTsKKyAgICBrZXlmcmFtZS0+c2V0S2V5KGtleSk7CisgICAga2V5ZnJhbWUtPnNl
dERlY2xhcmF0aW9uKG5ldyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbigwLCBwYXJzZWRQcm9w
ZXJ0aWVzLCBudW1QYXJzZWRQcm9wZXJ0aWVzKSk7CisgICAgY2xlYXJQcm9wZXJ0aWVzKCk7Cisg
ICAgcmV0dXJuIGtleWZyYW1lOworfQorCiBzdGF0aWMgaW50IGNzc1Byb3BlcnR5SUQoY29uc3Qg
VUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3Ro
KQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9DU1NHcmFt
bWFyLnkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgorI2lu
Y2x1ZGUgIldlYktpdENTU0tleWZyYW1lUnVsZS5oIgorI2luY2x1ZGUgIldlYktpdENTU0tleWZy
YW1lc1J1bGUuaCIKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIApA
QCAtNjcsNiArNjksOSBAQAogICAgIFZhbHVlIHZhbHVlOwogICAgIFZhbHVlTGlzdCogdmFsdWVM
aXN0OwogICAgIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwKj4qIG1lZGlhUXVlcnlFeHBMaXN0OworICAg
IFdlYktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVSdWxlOworICAgIFdlYktpdENTU0tleWZy
YW1lc1J1bGUqIGtleWZyYW1lc1J1bGU7CisgICAgZmxvYXQgdmFsOwogfQogCiAlewpAQCAtMTA0
LDYgKzEwOSw3IEBACiAldG9rZW4gSU1QT1JUX1NZTQogJXRva2VuIFBBR0VfU1lNCiAldG9rZW4g
TUVESUFfU1lNCisldG9rZW4gV0VCS0lUX0tFWUZSQU1FU19TWU0KICV0b2tlbiBGT05UX0ZBQ0Vf
U1lNCiAldG9rZW4gQ0hBUlNFVF9TWU0KICV0b2tlbiBOQU1FU1BBQ0VfU1lNCkBAIC0xNTAsNiAr
MTU2LDcgQEAKICV0eXBlIDxydWxlPiBydWxlc2V0CiAldHlwZSA8cnVsZT4gdmFsaWRfcnVsZV9v
cl9pbXBvcnQKICV0eXBlIDxydWxlPiBtZWRpYQorJXR5cGUgPHJ1bGU+IGtleWZyYW1lcwogJXR5
cGUgPHJ1bGU+IGltcG9ydAogJXR5cGUgPHJ1bGU+IHBhZ2UKICV0eXBlIDxydWxlPiBmb250X2Zh
Y2UKQEAgLTE3NCw2ICsxODEsMTAgQEAKICV0eXBlIDxtZWRpYVF1ZXJ5PiBtZWRpYV9xdWVyeQog
JXR5cGUgPG1lZGlhUXVlcnlSZXN0cmljdG9yPiBtYXliZV9tZWRpYV9yZXN0cmljdG9yCiAldHlw
ZSA8dmFsdWVMaXN0PiBtYXliZV9tZWRpYV92YWx1ZQorJXR5cGUgPHN0cmluZz4ga2V5ZnJhbWVf
bmFtZQorJXR5cGUgPGtleWZyYW1lc1J1bGU+IGtleWZyYW1lc19ydWxlCisldHlwZSA8a2V5ZnJh
bWVSdWxlPiBrZXlmcmFtZV9ydWxlCisldHlwZSA8dmFsPiBrZXkKICV0eXBlIDxtZWRpYVF1ZXJ5
RXhwPiBtZWRpYV9xdWVyeV9leHAKICV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4gbWVkaWFfcXVl
cnlfZXhwX2xpc3QKICV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4gbWF5YmVfYW5kX21lZGlhX3F1
ZXJ5X2V4cF9saXN0CkBAIC0zMTYsNiArMzI3LDcgQEAKICAgfCBtZWRpYQogICB8IHBhZ2UKICAg
fCBmb250X2ZhY2UKKyAgfCBrZXlmcmFtZXMKICAgOwogCiBydWxlOgpAQCAtNDc1LDYgKzQ4Nyw1
MSBAQAogICB9CiAgIDsKIAora2V5ZnJhbWVzOgorICAgIFdFQktJVF9LRVlGUkFNRVNfU1lNIG1h
eWJlX3NwYWNlIGtleWZyYW1lX25hbWUgbWF5YmVfc3BhY2UgJ3snIG1heWJlX3NwYWNlIGtleWZy
YW1lc19ydWxlICd9JyB7CisgICAgICAgICQkID0gJDc7CisgICAgICAgIFBhcnNlU3RyaW5nJiBz
dHIgPSAkMzsKKyAgICAgICAgc3RyLmxvd2VyKCk7CisgICAgICAgICQ3LT5zZXROYW1lKFN0cmlu
ZyhzdHIuY2hhcmFjdGVycywgc3RyLmxlbmd0aCkpOworICAgIH0KKyAgICA7CisKK2tleWZyYW1l
X25hbWU6CisgICAgSURFTlQKKyAgICB8IFNUUklORworICAgIDsKKwora2V5ZnJhbWVzX3J1bGU6
CisgICAgLyogZW1wdHkgKi8geyAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmNyZWF0ZUtleWZyYW1lc1J1bGUoKTsgfQorICAgIHwga2V5ZnJhbWVzX3J1bGUga2V5ZnJhbWVf
cnVsZSBtYXliZV9zcGFjZSB7CisgICAgICAgICQkID0gJDE7CisgICAgICAgIGlmICgkMikKKyAg
ICAgICAgICAgICQkLT5pbnNlcnQoJDIpOworICAgIH0KKyAgICA7CisKK2tleWZyYW1lX3J1bGU6
CisgICAga2V5IG1heWJlX3NwYWNlICd7JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0ICd9
JyB7CisgICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRl
S2V5ZnJhbWVSdWxlKCQxKTsKKyAgICB9CisgICAgOworCitrZXk6CisgICAgUEVSQ0VOVEFHRSB7
ICQkID0gKGZsb2F0KSAkMTsgfQorICAgIHwgSURFTlQgeworICAgICAgICAkJCA9IC0xOworICAg
ICAgICBQYXJzZVN0cmluZyYgc3RyID0gJDE7CisgICAgICAgIHN0ci5sb3dlcigpOworICAgICAg
ICBTdHJpbmcgcyA9IFN0cmluZyhzdHIuY2hhcmFjdGVycywgc3RyLmxlbmd0aCk7CisgICAgICAg
IGlmIChzID09ICJmcm9tIikKKyAgICAgICAgICAgICQkID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
cyA9PSAidG8iKQorICAgICAgICAgICAgJCQgPSAxMDA7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFlZRVJST1I7CisgICAgfQorICAgIDsKKwogLyoKIHBhZ2U6CiAgICAgUEFHRV9TWU0gbWF5
YmVfc3BhY2UgSURFTlQ/IHBzZXVkb19wYWdlPyBtYXliZV9zcGFjZQpJbmRleDogV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVSdWxlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoq
CisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
CisgKgorICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICogKEMp
IDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAo
QykgMjAwMiwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgiCisKKyNpbmNsdWRlICJDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dlYktp
dENTU0tleWZyYW1lUnVsZTo6V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKFN0eWxlQmFzZSogcGFyZW50
KQorICAgIDogQ1NTUnVsZShwYXJlbnQpCisgICAgLCBtX2tleSgwKQoreworfQorCitXZWJLaXRD
U1NLZXlmcmFtZVJ1bGU6On5XZWJLaXRDU1NLZXlmcmFtZVJ1bGUoKQoreworICAgIGlmIChtX3N0
eWxlKQorICAgICAgICBtX3N0eWxlLT5zZXRQYXJlbnQoMCk7Cit9CisKK1N0cmluZyBXZWJLaXRD
U1NLZXlmcmFtZVJ1bGU6OmtleVRleHQoKSBjb25zdAoreworICAgIHJldHVybiBTdHJpbmc6Om51
bWJlcihtX2tleSkgKyAiJSI7Cit9CisKK3ZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpzZXRL
ZXlUZXh0KGNvbnN0IFN0cmluZyYgcykKK3sKKyAgICBtX2tleSA9IGtleVN0cmluZ1RvRmxvYXQo
cyk7Cit9CisKK1N0cmluZyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OmNzc1RleHQoKSBjb25zdAor
eworICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6Om51bWJlcihtX2tleSk7CisKKyAgICByZXN1
bHQgKz0gIiUgeyAiOworICAgIHJlc3VsdCArPSBtX3N0eWxlLT5jc3NUZXh0KCk7CisgICAgcmVz
dWx0ICs9ICJ9IjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgV2ViS2l0Q1NTS2V5
ZnJhbWVSdWxlOjpwYXJzZVN0cmluZyhjb25zdCBTdHJpbmcmIC8qc3RyaW5nKi8sIGJvb2wgLypz
dHJpY3QqLykKK3sKKyAgICAvLyBGSVhNRQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGU6OnNldERlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb24+IHN0eWxlKQoreworICAgIG1fc3R5bGUgPSBzdHlsZTsKKyAgICBt
X3N0eWxlLT5zZXRQYXJlbnQocGFyZW50KCkpOworfQorCisvKiBzdGF0aWMgKi8KK2Zsb2F0IFdl
YktpdENTU0tleWZyYW1lUnVsZTo6a2V5U3RyaW5nVG9GbG9hdChjb25zdCBTdHJpbmcmIHMpCit7
CisgICAgZmxvYXQga2V5ID0gMDsKKyAgICAKKyAgICAvLyBmb3Igbm93IHRoZSBzeW50YXggTVVT
VCBiZSAneHh4JScgb3IgJ2Zyb20nIG9yICd0bycsIHdoZXJlIHh4eCBpcyBhIGxlZ2FsIGZsb2F0
aW5nIHBvaW50IG51bWJlcgorICAgIGlmIChzID09ICJmcm9tIikKKyAgICAgICAga2V5ID0gMDsK
KyAgICBlbHNlIGlmIChzID09ICJ0byIpCisgICAgICAgIGtleSA9IDEwMDsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKHMuZW5kc1dpdGgoIiUiKSkgeworICAgICAgICAgICAgZmxvYXQgayA9IHMu
c3Vic3RyaW5nKDAsIHMubGVuZ3RoKCkgLSAxKS50b0Zsb2F0KCk7CisgICAgICAgICAgICBpZiAo
ayA+PSAwICYmIGsgPD0gMTAwKQorICAgICAgICAgICAgICAgIGtleSA9IGs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGtleTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9jc3MvdG9rZW5pemVyLmZsZXgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9jc3MvdG9r
ZW5pemVyLmZsZXgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAKICJALXdlYmtpdC1k
ZWNscyIgICAgICAgIHt5eVRvayA9IFdFQktJVF9ERUNMU19TWU07IHJldHVybiB5eVRvazsgfQog
IkAtd2Via2l0LXZhbHVlIiAgICAgICAge3l5VG9rID0gV0VCS0lUX1ZBTFVFX1NZTTsgcmV0dXJu
IHl5VG9rOyB9CiAiQC13ZWJraXQtbWVkaWFxdWVyeSIgICB7QkVHSU4obWVkaWFxdWVyeSk7IHl5
VG9rID0gV0VCS0lUX01FRElBUVVFUllfU1lNOyByZXR1cm4geXlUb2s7IH0KKyJALXdlYmtpdC1r
ZXlmcmFtZXMiICAgIHt5eVRvayA9IFdFQktJVF9LRVlGUkFNRVNfU1lNOyByZXR1cm4geXlUb2s7
IH0KIAogIiEie3d9ImltcG9ydGFudCIgICAgICAge3l5VG9rID0gSU1QT1JUQU5UX1NZTTsgcmV0
dXJuIHl5VG9rO30KIApJbmRleDogV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9jc3MvU3R5bGVCYXNlLmgJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9j
c3MvU3R5bGVCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDggQEAKICAgICAgICAg
dmlydHVhbCBib29sIGlzU3R5bGVSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmly
dHVhbCBib29sIGlzQ2hhcnNldFJ1bGUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNJbXBvcnRSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVh
bCBib29sIGlzS2V5ZnJhbWVzUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgICAgIHZpcnR1
YWwgYm9vbCBpc0tleWZyYW1lUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc01lZGlhUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc0ZvbnRGYWNlUnVsZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1BhZ2VSdWxlKCkgeyByZXR1cm4gZmFsc2U7IH0KSW5kZXg6IFdlYkNvcmUvY3NzL0NT
U1Byb3BlcnR5TmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUHJvcGVydHlO
YW1lcy5pbgkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eU5hbWVz
LmluCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsMTEgKzE0MiwxNCBAQAogd29yZC13cmFwCiB6LWlu
ZGV4CiB6b29tCi0td2Via2l0LXRyYW5zaXRpb24KLS13ZWJraXQtdHJhbnNpdGlvbi1kdXJhdGlv
bgotLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Ci0td2Via2l0LXRyYW5zaXRpb24tcmVwZWF0
LWNvdW50Ci0td2Via2l0LXRyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uCistd2Via2l0LWFuaW1h
dGlvbgorLXdlYmtpdC1hbmltYXRpb24tZGVsYXkKKy13ZWJraXQtYW5pbWF0aW9uLWRpcmVjdGlv
bgorLXdlYmtpdC1hbmltYXRpb24tZHVyYXRpb24KKy13ZWJraXQtYW5pbWF0aW9uLWl0ZXJhdGlv
bi1jb3VudAorLXdlYmtpdC1hbmltYXRpb24tbmFtZQorLXdlYmtpdC1hbmltYXRpb24tcGxheS1z
dGF0ZQorLXdlYmtpdC1hbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LWFwcGVhcmFu
Y2UKIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwCiAtd2Via2l0LWJhY2tncm91bmQtY29tcG9zaXRl
CkBAIC0yMjUsNiArMjI4LDExIEBACiAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4KIC13ZWJraXQt
dHJhbnNmb3JtLW9yaWdpbi14CiAtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW4teQorLXdlYmtpdC10
cmFuc2l0aW9uCistd2Via2l0LXRyYW5zaXRpb24tZGVsYXkKKy13ZWJraXQtdHJhbnNpdGlvbi1k
dXJhdGlvbgorLXdlYmtpdC10cmFuc2l0aW9uLXByb3BlcnR5Cistd2Via2l0LXRyYW5zaXRpb24t
dGltaW5nLWZ1bmN0aW9uCiAtd2Via2l0LXVzZXItZHJhZwogLXdlYmtpdC11c2VyLW1vZGlmeQog
LXdlYmtpdC11c2VyLXNlbGVjdApJbmRleDogV2ViQ29yZS9jc3MvQ1NTUnVsZS5pZGwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTUnVsZS5pZGwJKHJldmlzaW9uIDMyOTEyKQorKysgV2Vi
Q29yZS9jc3MvQ1NTUnVsZS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDggQEAKICAg
ICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgTUVESUFfUlVMRSA9IDQ7CiAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IEZPTlRfRkFDRV9SVUxFID0gNTsKICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgc2hvcnQgUEFHRV9SVUxFID0gNjsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgV0VC
S0lUX0tFWUZSQU1FU19SVUxFID0gNzsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgV0VC
S0lUX0tFWUZSQU1FX1JVTEUgPSA4OwogCiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNp
Z25lZCBzaG9ydCAgIHR5cGU7CiAKSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
UnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCisgKgorICogKEMpIDE5OTktMjAwMyBMYXJz
IEtub2xsIChrbm9sbEBrZGUub3JnKQorICogKEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworCisjaWZuZGVmIFdlYktpdENTU0tleWZyYW1lUnVsZV9oCisjZGVmaW5lIFdlYktpdENT
U0tleWZyYW1lUnVsZV9oCisKKyNpbmNsdWRlICJDU1NSdWxlLmgiCisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CisKK3R5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lUnVsZSA6IHB1YmxpYyBDU1NS
dWxlIHsKK3B1YmxpYzoKKyAgICBXZWJLaXRDU1NLZXlmcmFtZVJ1bGUoU3R5bGVCYXNlKiBwYXJl
bnQpOworICAgIHZpcnR1YWwgfldlYktpdENTU0tleWZyYW1lUnVsZSgpOworCisgICAgdmlydHVh
bCBib29sIGlzS2V5ZnJhbWVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gSW5oZXJp
dGVkIGZyb20gQ1NTUnVsZQorICAgIHZpcnR1YWwgdW5zaWduZWQgc2hvcnQgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIFdFQktJVF9LRVlGUkFNRV9SVUxFOyB9CisKKyAgICBTdHJpbmcga2V5VGV4dCgp
IGNvbnN0OworICAgIHZvaWQgc2V0S2V5VGV4dChjb25zdCBTdHJpbmcmIHMpOworCisgICAgQ1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5n
ZXQoKTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworCisgICAgLy8g
Tm90IHBhcnQgb2YgdGhlIENTU09NCisgICAgdmlydHVhbCBib29sIHBhcnNlU3RyaW5nKGNvbnN0
IFN0cmluZyYsIGJvb2wgPSBmYWxzZSk7CisgICAgCisgICAgZmxvYXQga2V5KCkgY29uc3QgeyBy
ZXR1cm4gbV9rZXkvMTAwOyB9CisgICAgZmxvYXQga2V5QXNQZXJjZW50KCkgY29uc3QgeyByZXR1
cm4gbV9rZXk7IH0KKworICAgIHZvaWQgc2V0S2V5KGZsb2F0IGspIHsgbV9rZXkgPSBrOyB9Cisg
ICAgdm9pZCBzZXREZWNsYXJhdGlvbihQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uPik7CisKKyAgICBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogICAgICAgICBkZWNsYXJh
dGlvbigpICAgICAgIHsgcmV0dXJuIG1fc3R5bGUuZ2V0KCk7IH0KKyAgICBjb25zdCBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbiogICBkZWNsYXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUuZ2V0KCk7IH0KKyAgICAKKyAgICBzdGF0aWMgZmxvYXQga2V5U3RyaW5nVG9GbG9hdChjb25z
dCBTdHJpbmcmIHMpOworIAorcHJvdGVjdGVkOgorICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gbV9zdHlsZTsKKyAgICBmbG9hdCBtX2tleTsgICAgICAgIC8vIDAgdG8gMTAw
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJLaXRDU1NLZXlm
cmFtZVJ1bGVfaApJbmRleDogV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGlu
Z3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVGltaW5n
RnVuY3Rpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTEyOSw2ICsxMzEsMTMgQEAK
ICAgICBDU1NQcm9wZXJ0eVpJbmRleCwKICAgICBDU1NQcm9wZXJ0eVpvb20sCiAKKyAgICBDU1NQ
cm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5LAorICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uRGlyZWN0aW9uLAorICAgIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVyYXRpb24sCisg
ICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25JdGVyYXRpb25Db3VudCwKKyAgICBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbk5hbWUsCisgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25Q
bGF5U3RhdGUsCisgICAgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25UaW1pbmdGdW5jdGlvbiwK
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdEFwcGVhcmFuY2UsCiAgICAgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kQ2xpcCwKICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRDb21wb3NpdGUs
CkBAIC0xODMsNiArMTkyLDEzIEBACiAgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJpdHks
CiAgICAgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsCiAgICAgQ1NTUHJvcGVydHlX
ZWJraXRUZXh0U3Ryb2tlV2lkdGgsCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVs
YXksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb24sCisgICAgQ1NTUHJv
cGVydHlXZWJraXRUcmFuc2l0aW9uUHJvcGVydHksCisgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uVGltaW5nRnVuY3Rpb24sCiAgICAgQ1NTUHJvcGVydHlXZWJraXRVc2VyRHJhZywKICAg
ICBDU1NQcm9wZXJ0eVdlYmtpdFVzZXJNb2RpZnksCiAgICAgQ1NTUHJvcGVydHlXZWJraXRVc2Vy
U2VsZWN0LApAQCAtMTAwMyw2ICsxMDU5LDEzMyBAQAogICAgICAgICAgICAgcmV0dXJuIGdldEJv
cmRlclJhZGl1c0Nvcm5lclZhbHVlKHN0eWxlLT5ib3JkZXJUb3BMZWZ0UmFkaXVzKCkpOwogICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVG9wUmlnaHRSYWRpdXM6CiAgICAgICAg
ICAgICByZXR1cm4gZ2V0Qm9yZGVyUmFkaXVzQ29ybmVyVmFsdWUoc3R5bGUtPmJvcmRlclRvcFJp
Z2h0UmFkaXVzKCkpOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRHVy
YXRpb246CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRHVyYXRpb246
IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVM
aXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSAocHJvcGVydHlJ
RCA9PSBDU1NQcm9wZXJ0eVdlYmtpdEFuaW1hdGlvbkR1cmF0aW9uKSA/IHN0eWxlLT5hbmltYXRp
b25zKCkgOiBzdHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAg
ICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAgICAgICAgICAg
ICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKHQtPmR1cmF0aW9uKCksIENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfUykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoUmVuZGVy
U3R5bGU6OmluaXRpYWxEdXJhdGlvbigpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1MpKTsKKyAg
ICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uVGltaW5nRnVuY3Rpb246CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9uVGltaW5nRnVuY3Rpb246IHsKKyAgICAgICAgICAg
IFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsKKyAg
ICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSAocHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0
eVdlYmtpdEFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKSA/IHN0eWxlLT5hbmltYXRpb25zKCkgOiBz
dHlsZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAg
ICAgZm9yICggOyB0OyB0ID0gdC0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRpbWluZ0Z1bmN0aW9uJiB0ZiA9IHQtPnRpbWluZ0Z1bmN0aW9uKCk7CisgICAgICAgICAgICAg
ICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSh0Zi54MSgpLCB0
Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgY29uc3QgVGltaW5nRnVu
Y3Rpb24mIHRmID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUaW1pbmdGdW5jdGlvbigpOworICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTVGltaW5nRnVuY3Rpb25WYWx1ZSh0Zi54MSgp
LCB0Zi55MSgpLCB0Zi54MigpLCB0Zi55MigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdEFuaW1hdGlvbkRlbGF5OgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
VHJhbnNpdGlvbkRlbGF5OiB7CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0
ID0gbmV3IENTU1ZhbHVlTGlzdChmYWxzZSk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9u
KiB0ID0gKHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25EZWxheSkgPyBz
dHlsZS0+YW5pbWF0aW9ucygpIDogc3R5bGUtPnRyYW5zaXRpb25zKCk7OworICAgICAgICAgICAg
aWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkpCisgICAg
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodC0+ZGVs
YXkoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQcmltaXRpdmVW
YWx1ZShSZW5kZXJTdHlsZTo6aW5pdGlhbERlbGF5KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
UykpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uRGlyZWN0aW9uOiB7
CisgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBsaXN0ID0gbmV3IENTU1ZhbHVlTGlz
dChmYWxzZSk7CisgICAgICAgICAgICBjb25zdCBUcmFuc2l0aW9uKiB0ID0gc3R5bGUtPmFuaW1h
dGlvbnMoKTsKKyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0
OyB0ID0gdC0+bmV4dCgpKQorICAgICAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENT
U1ByaW1pdGl2ZVZhbHVlKHQtPmFuaW1hdGlvbkRpcmVjdGlvbigpID8gQ1NTVmFsdWVBbHRlcm5h
dGUgOiBDU1NWYWx1ZU5vcm1hbCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoUmVuZGVy
U3R5bGU6OmluaXRpYWxBbmltYXRpb25EaXJlY3Rpb24oKSA/IENTU1ZhbHVlQWx0ZXJuYXRlIDog
Q1NTVmFsdWVOb3JtYWwpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2UoKTsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uSXRlcmF0aW9u
Q291bnQ6IHsKKyAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NT
VmFsdWVMaXN0KGZhbHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHls
ZS0+YW5pbWF0aW9ucygpOworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBm
b3IgKCA7IHQ7IHQgPSB0LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVu
ZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUodC0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVl
KFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgIHJldHVybiBsaXN0LnJlbGVhc2Uo
KTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0aW9uTmFt
ZTogeworICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IG5ldyBDU1NWYWx1
ZUxpc3QoZmFsc2UpOworICAgICAgICAgICAgY29uc3QgVHJhbnNpdGlvbiogdCA9IHN0eWxlLT5h
bmltYXRpb25zKCk7CisgICAgICAgICAgICBpZiAodCkgeworICAgICAgICAgICAgICAgIGZvciAo
IDsgdDsgdCA9IHQtPm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IG5hbWUgPSB0LT5hbmltYXRpb25OYW1lKCk7CisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFw
cGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobmFtZS5pc0VtcHR5KCkgPyAibm9uZSIgOiBuYW1l
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGNvbnN0IFN0
cmluZyYgbmFtZSA9IFJlbmRlclN0eWxlOjppbml0aWFsQW5pbWF0aW9uTmFtZSgpOworICAgICAg
ICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJpbWl0aXZlVmFsdWUobmFtZS5pc0VtcHR5
KCkgPyAibm9uZSIgOiBuYW1lLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRBbmltYXRpb25QbGF5U3RhdGU6IHsKKyAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZh
bHNlKTsKKyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+YW5pbWF0aW9u
cygpOworICAgICAgICAgICAgaWYgKHQpIHsKKyAgICAgICAgICAgICAgICBmb3IgKCA7IHQ7IHQg
PSB0LT5uZXh0KCkpCisgICAgICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChuZXcgQ1NTUHJp
bWl0aXZlVmFsdWUoKHQtPmFuaW1hdGlvblBsYXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5
aW5nKSA/IENTU1ZhbHVlUnVubmluZyA6IENTU1ZhbHVlUGF1c2VkKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlzdC0+YXBwZW5kKG5ldyBDU1NQ
cmltaXRpdmVWYWx1ZSgoUmVuZGVyU3R5bGU6OmluaXRpYWxBbmltYXRpb25QbGF5U3RhdGUoKSA9
PSBBbmltUGxheVN0YXRlUGxheWluZykgPyBDU1NWYWx1ZVJ1bm5pbmcgOiBDU1NWYWx1ZVBhdXNl
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGxpc3QucmVsZWFzZSgpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtOgorICAgICAgICAg
ICAgcmV0dXJuIGNvbXB1dGVkVHJhbnNmb3JtKHJlbmRlcmVyKTsKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblg6CisgICAgICAgICAgICBpZiAocmVuZGVyZXIp
IHsKKyAgICAgICAgICAgICAgICBJbnRSZWN0IGJveCA9IHNpemluZ0JveChyZW5kZXJlcik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZShzdHlsZS0+dHJhbnNm
b3JtT3JpZ2luWCgpLmNhbGNNaW5WYWx1ZShib3gud2lkdGgoKSksIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfUFgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblgo
KSk7ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1P
cmlnaW5ZOgorICAgICAgICAgICAgaWYgKHJlbmRlcmVyKSB7CisgICAgICAgICAgICAgICAgSW50
UmVjdCBib3ggPSBzaXppbmdCb3gocmVuZGVyZXIpOworICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoc3R5bGUtPnRyYW5zZm9ybU9yaWdpblkoKS5jYWxjTWluVmFs
dWUoYm94LmhlaWdodCgpKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmlt
aXRpdmVWYWx1ZShzdHlsZS0+dHJhbnNmb3JtT3JpZ2luWSgpKTsgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb25Qcm9wZXJ0eTogIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IGxpc3QgPSBuZXcgQ1NTVmFsdWVMaXN0KGZhbHNlKTsK
KyAgICAgICAgICAgIGNvbnN0IFRyYW5zaXRpb24qIHQgPSBzdHlsZS0+dHJhbnNpdGlvbnMoKTsK
KyAgICAgICAgICAgIGlmICh0KSB7CisgICAgICAgICAgICAgICAgZm9yICggOyB0OyB0ID0gdC0+
bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGludCBwcm9wID0gdC0+dHJhbnNpdGlvblBy
b3BlcnR5KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChwcm9wID09IGNBbmltYXRlTm9uZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5hbWUgPSAibm9uZSI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHByb3Ag
PT0gY0FuaW1hdGVBbGwpCisgICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gImFsbCI7Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBn
ZXRQcm9wZXJ0eU5hbWUoc3RhdGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcCkpOworICAgICAg
ICAgICAgICAgICAgICBsaXN0LT5hcHBlbmQobmV3IENTU1ByaW1pdGl2ZVZhbHVlKG5hbWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpc3QtPmFwcGVuZChu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWUoImFsbCIsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KSk7CisgICAgICAgICAgICByZXR1cm4gbGlzdC5yZWxlYXNlKCk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZDoKICAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJvcmRlcjoKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bToKQEAgLTEwNjAsMTUgKzEyNDMsNiBAQAogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFycXVlZVNwZWVkOgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0UGFkZGluZ1N0YXJ0
OgogICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZToKLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zaXRpb246Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRUcmFuc2l0aW9uRHVyYXRpb246Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRU
cmFuc2l0aW9uUHJvcGVydHk6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0
aW9uUmVwZWF0Q291bnQ6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUcmFuc2l0aW9u
VGltaW5nRnVuY3Rpb246CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhlIGFib3ZlIGFyZSB1bmlt
cGxlbWVudGVkLgogICAgICAgICAgICAgYnJlYWs7CiAjaWYgRU5BQkxFKFNWRykKSW5kZXg6IFdl
YkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nz
cy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAK
Ky8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCisgKgorICogKEMpIDE5OTktMjAwMyBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQorICog
KEMpIDIwMDItMjAwMyBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMiwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaWZuZGVmIFdlYktpdENTU0tl
eWZyYW1lc1J1bGVfaAorI2RlZmluZSBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlX2gKKworI2luY2x1
ZGUgIkNTU1J1bGUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiQXRvbWlj
U3RyaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUnVsZUxpc3Q7Citj
bGFzcyBXZWJLaXRDU1NLZXlmcmFtZVJ1bGU7CitjbGFzcyBTdHJpbmc7CisKK3R5cGVkZWYgaW50
IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdlYktpdENTU0tleWZyYW1lc1J1bGUgOiBwdWJsaWMg
Q1NTUnVsZSB7CitwdWJsaWM6CisgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHlsZUJhc2Uq
IHBhcmVudCk7CisgICAgfldlYktpdENTU0tleWZyYW1lc1J1bGUoKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc0tleWZyYW1lc1J1bGUoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBJbmhlcml0
ZWQgZnJvbSBDU1NSdWxlCisgICAgdmlydHVhbCB1bnNpZ25lZCBzaG9ydCB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gV0VCS0lUX0tFWUZSQU1FU19SVUxFOyB9CisKKyAgICBTdHJpbmcgbmFtZSgpIGNv
bnN0OworICAgIHZvaWQgc2V0TmFtZShjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7ICAg
IAorICAgIHZvaWQgc2V0TmFtZShTdHJpbmcpOyAgICAKKworICAgIENTU1J1bGVMaXN0KiBjc3NS
dWxlcygpIHsgcmV0dXJuIG1fbHN0Q1NTUnVsZXMuZ2V0KCk7IH0KKworICAgIHZvaWQgaW5zZXJ0
UnVsZShjb25zdCBTdHJpbmcmIHJ1bGUpOworICAgIHZvaWQgZGVsZXRlUnVsZShjb25zdCBTdHJp
bmcmIGtleSk7CisgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBmaW5kUnVsZShjb25zdCBTdHJp
bmcmIGtleSk7CisKKyAgICB2aXJ0dWFsIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CisKKyAgICAv
KiBub3QgcGFydCBvZiB0aGUgRE9NICovCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7Cisg
ICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiAgICAgICAgaXRlbSh1bnNpZ25lZCBpbmRleCk7Cisg
ICAgY29uc3QgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiAgaXRlbSh1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CisgICAgdm9pZCBpbnNlcnQoV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBydWxlKTsKKworcHJv
dGVjdGVkOgorICAgIGludCBmaW5kUnVsZUluZGV4KGZsb2F0IGtleSkgY29uc3Q7CisgICAgCisg
ICAgUmVmUHRyPENTU1J1bGVMaXN0PiBtX2xzdENTU1J1bGVzOworICAgIFN0cmluZyBtX25hbWU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJLaXRDU1NLZXlm
cmFtZXNSdWxlX2gKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3Nz
L0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBACiAgICAgY2xhc3Mg
TWVkaWFRdWVyeUV4cDsKICAgICBjbGFzcyBTdHlsZUJhc2U7CiAgICAgY2xhc3MgU3R5bGVMaXN0
OworICAgIGNsYXNzIFdlYktpdENTU0tleWZyYW1lUnVsZTsKKyAgICBjbGFzcyBXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlOwogICAgIHN0cnVjdCBGdW5jdGlvbjsKIAogICAgIHN0cnVjdCBQYXJzZVN0
cmluZyB7CkBAIC0xMDUsNiArMTA3LDcgQEAKIAogICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+
IHBhcnNlUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7CisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTUnVsZT4gcGFyc2VLZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0
cmluZyYpOwogICAgICAgICBib29sIHBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qLCBpbnQgcHJvcElkLCBjb25zdCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CiAgICAgICAg
IHN0YXRpYyBib29sIHBhcnNlQ29sb3IoUkdCQTMyJiBjb2xvciwgY29uc3QgU3RyaW5nJiwgYm9v
bCBzdHJpY3QgPSBmYWxzZSk7CiAgICAgICAgIGJvb2wgcGFyc2VDb2xvcihDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbiosIGNvbnN0IFN0cmluZyYpOwpAQCAtMTM3LDExICsxNDAsMjMgQEAKICAg
ICAgICAgdm9pZCBhZGRGaWxsVmFsdWUoUmVmUHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0
cjxDU1NWYWx1ZT4gcnZhbCk7CiAKICAgICAgICAgdm9pZCBhZGRUcmFuc2l0aW9uVmFsdWUoUmVm
UHRyPENTU1ZhbHVlPiYgbHZhbCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcnZhbCk7Ci0gICAgICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvbkR1cmF0aW9uKCk7Ci0gICAgICAg
IFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblJlcGVhdENvdW50KCk7Ci0gICAg
ICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uKCk7
CisgICAgICAgIAorICAgICAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBwYXJzZURlbGF5KCk7Cisg
ICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlRHVyYXRpb24oKTsKKyAgICAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUaW1pbmdGdW5jdGlvbigpOworCisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uRGlyZWN0aW9uKCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKTsKKyAgICAgICAg
UGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VBbmltYXRpb25OYW1lKCk7CisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlQW5pbWF0aW9uUGxheVN0YXRlKCk7CisKKyAgICAgICAgUGFz
c1JlZlB0cjxDU1NWYWx1ZT4gcGFyc2VUcmFuc2l0aW9uUHJvcGVydHkoKTsKKwogICAgICAgICBi
b29sIHBhcnNlVGltaW5nRnVuY3Rpb25WYWx1ZShWYWx1ZUxpc3QqJiBhcmdzLCBkb3VibGUmIHJl
c3VsdCk7Ci0gICAgICAgIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVHJhbnNpdGlvblByb3Bl
cnR5KCk7CisKKyAgICAgICAgYm9vbCBwYXJzZUFuaW1hdGlvblByb3BlcnR5KGludCBwcm9wSWQs
IFJlZlB0cjxDU1NWYWx1ZT4mKTsKKyAgICAgICAgYm9vbCBwYXJzZUFuaW1hdGlvblNob3J0aGFu
ZChib29sIGltcG9ydGFudCk7CisKICAgICAgICAgYm9vbCBwYXJzZVRyYW5zaXRpb25Qcm9wZXJ0
eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAgICAgICAgIGJvb2wgcGFyc2VUcmFu
c2l0aW9uU2hvcnRoYW5kKGJvb2wgaW1wb3J0YW50KTsKICAgICAgICAgCkBAIC0yMDUsNiArMjIw
LDggQEAKICAgICAgICAgQ1NTUnVsZUxpc3QqIGNyZWF0ZVJ1bGVMaXN0KCk7CiAgICAgICAgIENT
U1J1bGUqIGNyZWF0ZVN0eWxlUnVsZShDU1NTZWxlY3RvciopOwogICAgICAgICBDU1NSdWxlKiBj
cmVhdGVGb250RmFjZVJ1bGUoKTsKKyAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBjcmVh
dGVLZXlmcmFtZVJ1bGUoZmxvYXQga2V5KTsKKyAgICAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZSogY3JlYXRlS2V5ZnJhbWVzUnVsZSgpOwogCiAgICAgICAgIE1lZGlhUXVlcnlFeHAqIGNyZWF0
ZUZsb2F0aW5nTWVkaWFRdWVyeUV4cChjb25zdCBBdG9taWNTdHJpbmcmLCBWYWx1ZUxpc3QqKTsK
ICAgICAgICAgTWVkaWFRdWVyeUV4cCogc2lua0Zsb2F0aW5nTWVkaWFRdWVyeUV4cChNZWRpYVF1
ZXJ5RXhwKik7CkBAIC0yMjAsNiArMjM3LDcgQEAKICAgICAgICAgaW50IGlkOwogICAgICAgICBT
dHlsZUxpc3QqIHN0eWxlRWxlbWVudDsKICAgICAgICAgUmVmUHRyPENTU1J1bGU+IHJ1bGU7Cisg
ICAgICAgIFJlZlB0cjxDU1NSdWxlPiBrZXlmcmFtZTsKICAgICAgICAgTWVkaWFRdWVyeSogbWVk
aWFRdWVyeTsKICAgICAgICAgVmFsdWVMaXN0KiB2YWx1ZUxpc3Q7CiAgICAgICAgIENTU1Byb3Bl
cnR5KiogcGFyc2VkUHJvcGVydGllczsKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9DYWNoZWRQYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQ2FjaGVkUGFnZS5jcHAJKHJldmlz
aW9uIDMyOTEyKQorKysgV2ViQ29yZS9oaXN0b3J5L0NhY2hlZFBhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgbV9kb2N1bWVudC0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT51bnBhdXNlQW5pbWF0aW9ucygpOwogI2VuZGlmCiAKLSAgICBtYWluRnJhbWUt
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIG1haW5GcmFt
ZS0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5yZXN1bWVBbmltYXRpb25zKG1fZG9jdW1lbnQuZ2V0
KCkpOwogCiAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91c2VQcmVzc05vZGUo
bW91c2VQcmVzc05vZGUoKSk7CiAgICAgICAgIApJbmRleDogV2ViQ29yZS9wYWdlL0FuaW1hdGlv
bkNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJv
bGxlci5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7CitjbGFzcyBEb2N1bWVudDsK
IGNsYXNzIEZyYW1lOwogY2xhc3MgUmVuZGVyT2JqZWN0OwogY2xhc3MgUmVuZGVyU3R5bGU7CkBA
IC00MiwxNCArNDMsMjUgQEAKICAgICBBbmltYXRpb25Db250cm9sbGVyKEZyYW1lKik7CiAgICAg
fkFuaW1hdGlvbkNvbnRyb2xsZXIoKTsKICAgICAKLSAgICB2b2lkIGNhbmNlbEltcGxpY2l0QW5p
bWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKLSAgICBSZW5kZXJTdHlsZSogdXBkYXRlSW1wbGljaXRB
bmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CisgICAgdm9p
ZCBjYW5jZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCopOworICAgIFJlbmRlclN0eWxlKiB1cGRh
dGVBbmltYXRpb25zKFJlbmRlck9iamVjdCosIFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7CiAgICAg
Ci0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9u
cygpOworICAgIHZvaWQgc2V0QW5pbWF0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCogb2JqLCBk
b3VibGUgdCk7CisgICAgdm9pZCBzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCog
b2JqLCBpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKICAgICAKKyAgICBib29sIGlzQW5pbWF0aW5n
UHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNvbnN0
OworICAgIAorICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsK
KyAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KTsKKyAgICB2b2lk
IHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7CisgICAgCisgICAgdm9pZCBzdGFydFVwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAKKyAgICB2b2lkIHN0eWxlSXNTZXR1cCgpOworICAgIAog
cHJpdmF0ZToKICAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSogbV9kYXRhOworICAgIAog
fTsKIAogfQpJbmRleDogV2ViQ29yZS9wYWdlL0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9BbmltYXRpb25Db250cm9sbGVyLmNwcAkocmV2aXNpb24g
MzI5MTIpCisrKyBXZWJDb3JlL3BhZ2UvQW5pbWF0aW9uQ29udHJvbGxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDkgQEAKICNpbmNsdWRlICJBbmltYXRpb25Db250cm9sbGVyLmgi
CiAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUg
IkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCkBAIC00Myw2ICs0NSwxMiBAQAogCiBzdGF0aWMgY29uc3QgZG91YmxlIGNBbmlt
YXRpb25UaW1lckRlbGF5ID0gMC4wMjU7CiAKK3N0YXRpYyB2b2lkIHNldENoYW5nZWQoTm9kZSog
bm9kZSkKK3sKKyAgICBBU1NFUlQoIW5vZGUgfHwgKG5vZGUtPmRvY3VtZW50KCkgJiYgIW5vZGUt
PmRvY3VtZW50KCktPmluUGFnZUNhY2hlKCkpKTsKKyAgICBub2RlLT5zZXRDaGFuZ2VkKEFuaW1h
dGFibGVTdHlsZUNoYW5nZSk7Cit9CisKIC8vIFRoZSBlcHNpbG9uIHZhbHVlIHdlIHBhc3MgdG8g
VW5pdEJlemllcjo6c29sdmUgZ2l2ZW4gdGhhdCB0aGUgYW5pbWF0aW9uIGlzIGdvaW5nIHRvIHJ1
biBvdmVyIHxkdXJ8IHNlY29uZHMuIFRoZSBsb25nZXIgdGhlCiAvLyBhbmltYXRpb24sIHRoZSBt
b3JlIHByZWNpc2lvbiB3ZSBuZWVkIGluIHRoZSB0aW1pbmcgZnVuY3Rpb24gcmVzdWx0IHRvIGF2
b2lkIHVnbHkgZGlzY29udGludWl0aWVzLgogc3RhdGljIGlubGluZSBkb3VibGUgc29sdmVFcHNp
bG9uKGRvdWJsZSBkdXJhdGlvbikgeyByZXR1cm4gMS4gLyAoMjAwLiAqIGR1cmF0aW9uKTsgfQpA
QCAtNTUsMTA4ICs2Myw4OTkgQEAKICAgICByZXR1cm4gYmV6aWVyLnNvbHZlKHQsIHNvbHZlRXBz
aWxvbihkdXJhdGlvbikpOwogfQogCi1jbGFzcyBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbjsK
KyNwcmFnbWEgbWFyayAtCiAKLWNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIE5vbmNv
cHlhYmxlIHsKK2NsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbjsKK2NsYXNzIEFuaW1hdGlvbkJhc2U7
CisKK2NsYXNzIEFuaW1hdGlvblRpbWVyQmFzZSB7CiBwdWJsaWM6Ci0gICAgSW1wbGljaXRBbmlt
YXRpb24oY29uc3QgVHJhbnNpdGlvbiopOwotICAgIH5JbXBsaWNpdEFuaW1hdGlvbigpOworICAg
IEFuaW1hdGlvblRpbWVyQmFzZShBbmltYXRpb25CYXNlKiBhbmltKQorICAgIDogbV90aW1lcih0
aGlzLCAmQW5pbWF0aW9uVGltZXJCYXNlOjp0aW1lckZpcmVkKQorICAgICwgbV9hbmltKGFuaW0p
CisgICAgeworICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKKyAgICB9CisgICAgdmly
dHVhbCB+QW5pbWF0aW9uVGltZXJCYXNlKCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQg
c3RhcnRUaW1lcihkb3VibGUgdGltZW91dD0wKQorICAgIHsKKyAgICAgICAgbV90aW1lci5zdGFy
dE9uZVNob3QodGltZW91dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY2FuY2VsVGltZXIoKQor
ICAgIHsKKyAgICAgICAgbV90aW1lci5zdG9wKCk7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKSA9IDA7CisgICAgCitw
cml2YXRlOgorICAgIFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4gbV90aW1lcjsKKyAgICAKK3By
b3RlY3RlZDoKKyAgICBBbmltYXRpb25CYXNlKiBtX2FuaW07Cit9OwogCi0gICAgdm9pZCBhbmlt
YXRlKENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKiwgUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSom
IGFuaW1hdGVkU3R5bGUpOworY2xhc3MgQW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyIDogcHVibGlj
IEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uRXZlbnREaXNwYXRj
aGVyKEFuaW1hdGlvbkJhc2UqIGFuaW0pIAorICAgIDogQW5pbWF0aW9uVGltZXJCYXNlKGFuaW0p
CisgICAgLCBtX3Byb3BlcnR5KC0xKQorICAgICwgbV9yZXNldChmYWxzZSkKKyAgICAsIG1fZWxh
cHNlZFRpbWUoLTEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIH5BbmltYXRpb25F
dmVudERpc3BhdGNoZXIoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBzdGFydFRpbWVy
KEhUTUxFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGludCBwcm9w
ZXJ0eSwgYm9vbCByZXNldCwgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCisgICAgeworICAgICAgICBtX2VsZW1l
bnQgPSBlbGVtZW50OworICAgICAgICBtX25hbWUgPSBuYW1lOworICAgICAgICBtX3Byb3BlcnR5
ID0gcHJvcGVydHk7CisgICAgICAgIG1fcmVzZXQgPSByZXNldDsKKyAgICAgICAgbV9ldmVudFR5
cGUgPSBldmVudFR5cGU7CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsKKyAg
ICAgICAgQW5pbWF0aW9uVGltZXJCYXNlOjpzdGFydFRpbWVyKCk7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEFuaW1hdGlvblRpbWVyQmFzZT4qKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBtX2VsZW1lbnQ7CisgICAgQXRv
bWljU3RyaW5nIG1fbmFtZTsKKyAgICBpbnQgbV9wcm9wZXJ0eTsKKyAgICBib29sIG1fcmVzZXQ7
CisgICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBlOworICAgIGRvdWJsZSBtX2VsYXBzZWRUaW1l
OworfTsKIAotICAgIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGZyb20s
IFJlbmRlclN0eWxlKiB0byk7CitjbGFzcyBBbmltYXRpb25UaW1lckNhbGxiYWNrIDogcHVibGlj
IEFuaW1hdGlvblRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgQW5pbWF0aW9uVGltZXJDYWxsYmFj
ayhBbmltYXRpb25CYXNlKiBhbmltKSAKKyAgICA6IEFuaW1hdGlvblRpbWVyQmFzZShhbmltKQor
ICAgICwgbV9lbGFwc2VkVGltZSgwKQorICAgIHsgfQorICAgIHZpcnR1YWwgfkFuaW1hdGlvblRp
bWVyQ2FsbGJhY2soKSB7IH0KICAgICAKLSAgICBkb3VibGUgcHJvZ3Jlc3MoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+Kik7Cisg
ICAgCisgICAgdm9pZCBzdGFydFRpbWVyKGRvdWJsZSB0aW1lb3V0LCBjb25zdCBBdG9taWNTdHJp
bmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQorICAgIHsKKyAgICAgICAgbV9ldmVu
dFR5cGUgPSBldmVudFR5cGU7CisgICAgICAgIG1fZWxhcHNlZFRpbWUgPSBlbGFwc2VkVGltZTsK
KyAgICAgICAgQW5pbWF0aW9uVGltZXJCYXNlOjpzdGFydFRpbWVyKHRpbWVvdXQpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgQXRvbWljU3RyaW5nIG1fZXZlbnRUeXBlOworICAgIGRvdWJs
ZSBtX2VsYXBzZWRUaW1lOworfTsKIAotICAgIGJvb2wgZmluaXNoZWQoKSBjb25zdCB7IHJldHVy
biBtX2ZpbmlzaGVkOyB9CisjcHJhZ21hIG1hcmsgLQorICAgIAorY2xhc3MgSW1wbGljaXRBbmlt
YXRpb247CitjbGFzcyBLZXlmcmFtZUFuaW1hdGlvbjsKK2NsYXNzIEFuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOwogCitjbGFzcyBDb21wb3NpdGVBbmltYXRpb24gOiBwdWJsaWMgTm9uY29weWFi
bGUgeworcHVibGljOgorICAgIENvbXBvc2l0ZUFuaW1hdGlvbihib29sIHN1c3BlbmRlZCwgQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUqIGFuaW1hdGlvbkNvbnRyb2xsZXIpCisgICAgOiBtX3N1
c3BlbmRlZChzdXNwZW5kZWQpCisgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9u
Q29udHJvbGxlcikKKyAgICAsIG1fbnVtU3R5bGVJc1NldHVwV2FpdGVycygwKQorICAgIHsgfQor
ICAgIAorICAgIH5Db21wb3NpdGVBbmltYXRpb24oKQorICAgIHsKKyAgICAgICAgZGVsZXRlQWxs
VmFsdWVzKG1fdHJhbnNpdGlvbnMpOworICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9rZXlmcmFt
ZUFuaW1hdGlvbnMpOworICAgIH0KKyAgICAKKyAgICBSZW5kZXJTdHlsZSogYW5pbWF0ZShSZW5k
ZXJPYmplY3QqLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0
U3R5bGUpOworICAgIAorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJvb2wgaW5BbmltYXRpbmcpOwor
ICAgIGJvb2wgYW5pbWF0aW5nKCk7CisgICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9w
ZXJ0eShpbnQgcHJvcCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9w
KTsgfQorICAgIAorICAgIHZvaWQgcmVzZXRUcmFuc2l0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAg
ICB2b2lkIHJlc2V0QW5pbWF0aW9ucyhSZW5kZXJPYmplY3QqKTsKKyAgICAKKyAgICB2b2lkIGNs
ZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0Kik7CisgICAgCisgICAgdm9pZCBz
ZXRBbmltYXRpb25TdGFydFRpbWUoZG91YmxlIHQpOworICAgIHZvaWQgc2V0VHJhbnNpdGlvblN0
YXJ0VGltZShpbnQgcHJvcGVydHksIGRvdWJsZSB0KTsKKyAgICAKKyAgICB2b2lkIHN1c3BlbmRB
bmltYXRpb25zKCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7CisgICAgYm9vbCBzdXNw
ZW5kZWQoKSBjb25zdCAgICAgIHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9CisgICAgCisgICAgdm9p
ZCBvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpOworICAgIHZvaWQgcmVz
dW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhpbnQgcHJvcGVydHkpOworICAgIAorICAg
IHZvaWQgc3R5bGVJc1NldHVwKCk7CisgICAgCisgICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5
KGludCBwcm9wZXJ0eSkgY29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRXYWl0aW5nRm9yU3R5bGVJ
c1NldHVwKGJvb2wgd2FpdGluZyk7Citwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVUcmFuc2l0
aW9ucyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBS
ZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpOworICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRp
b25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJl
bmRlclN0eWxlKiB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgaW50IGZpbmRLZXlmcmFtZUFuaW1h
dGlvbihjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpOworICAgIAogcHJpdmF0ZToKLSAgICAvLyBU
aGUgdHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBSZW5kZXJTdHlsZSogbV9m
cm9tU3R5bGU7Ci0gICAgUmVuZGVyU3R5bGUqIG1fdG9TdHlsZTsKKyAgICB0eXBlZGVmIEhhc2hN
YXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7Cisg
ICAgCisgICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCAgIG1fdHJhbnNpdGlvbnM7CisgICAg
VmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj4gIG1fa2V5ZnJhbWVBbmltYXRpb25zOworICAgIGJv
b2wgICAgICAgICAgICAgICAgICAgICAgICBtX3N1c3BlbmRlZDsKKyAgICBBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSogbV9hbmltYXRpb25Db250cm9sbGVyOworICAgIHVpbnQzMl90ICAgICAg
ICAgICAgICAgICAgICBtX251bVN0eWxlSXNTZXR1cFdhaXRlcnM7Cit9OwogCi0gICAgaW50IG1f
cHJvcGVydHk7Ci0gICAgVGltaW5nRnVuY3Rpb24gbV9mdW5jdGlvbjsKLSAgICBkb3VibGUgbV9k
dXJhdGlvbjsKKyNwcmFnbWEgbWFyayAtCiAKLSAgICBpbnQgbV9yZXBlYXRDb3VudDsKK2NsYXNz
IEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMgTm9uY29weWFibGUgeworcHVibGljOgorICAgIEFuaW1h
dGlvbkJhc2UoY29uc3QgVHJhbnNpdGlvbiogdHJhbnNpdGlvbiwgUmVuZGVyT2JqZWN0KiByZW5k
ZXJlciwgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wQW5pbSk7ICAgIAorICAgIHZpcnR1YWwgfkFu
aW1hdGlvbkJhc2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NU
QVJUX1dBSVRfU1RZTEVfU0VUVVApCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5n
Rm9yU3R5bGVJc1NldHVwKGZhbHNlKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0OyB9CisgICAgZG91YmxlIHN0YXJ0VGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnRUaW1lOyB9CisgICAgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3QgIHsgcmV0dXJuIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOyB9CisgICAgCisgICAgdm9p
ZCBjYW5jZWxUaW1lcnMoKQorICAgIHsKKyAgICAgICAgbV9hbmltYXRpb25UaW1lckNhbGxiYWNr
LmNhbmNlbFRpbWVyKCk7CisgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLmNhbmNl
bFRpbWVyKCk7CisgICAgfQorICAgIAorICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5zaXRpb25z
IGdvIHRocm91Z2ggdGhlIHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RBUlRFRCBz
dGF0ZQorICAgIC8vIHRoZSBhbmltYXRpb24gaXMgc3RhcnRlZC4gVGhpcyBtYXkgb3IgbWF5IG5v
dCByZXF1aXJlIGRlZmVycmVkIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdG9yLgorICAgIC8vIElm
IHNvLCB3ZSBzdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgdGhhdCByZXNwb25zZSBpcyByZWNlaXZl
ZCAoYW5kIGl0IHJldHVybnMgdGhlIHN0YXJ0IHRpbWUpLgorICAgIC8vIE90aGVyd2lzZSwgd2Ug
dXNlIHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlIHN0YXJ0IHRpbWUgYW5kIGdvIGltbWVkaWF0ZWx5
IHRvIHRoZSBMT09QSU5HIG9yCisgICAgLy8gRU5ESU5HIHN0YXRlLgorICAgIGVudW0gQW5pbVN0
YXRlIHsgCisgICAgICAgIFNUQVRFX05FVywgICAgICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0
aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBydW5uaW5nIHlldAorICAgICAgICBTVEFU
RV9TVEFSVF9XQUlUX1RJTUVSLCAgICAgICAgIC8vIHN0YXJ0IHRpbWVyIHJ1bm5pbmcsIHdhaXRp
bmcgZm9yIGZpcmUKKyAgICAgICAgU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCwgICAvLyB3
YWl0aW5nIGZvciBzdHlsZSBzZXR1cCBzbyB3ZSBjYW4gc3RhcnQgYW5pbWF0aW9ucworICAgICAg
ICBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFLCAgICAgIC8vIGFuaW1hdGlvbiBzdGFydGVkLCB3
YWl0aW5nIGZvciByZXNwb25zZQorICAgICAgICBTVEFURV9MT09QSU5HLCAgICAgICAgICAgICAg
ICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgbG9vcCB0aW1lciBy
dW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCisgICAgICAgIFNUQVRFX0VORElORywgICAgICAgICAg
ICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBlbmQgdGlt
ZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQorICAgICAgICBTVEFURV9QQVVTRURfV0FJVF9U
SU1FUiwgICAgICAgIC8vIGFuaW1hdGlvbiBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHN0
YXJ0ZWQKKyAgICAgICAgU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0UsICAgICAvLyBhbmltYXRp
b24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcgc3RhdGUKKyAgICAgICAgU1RBVEVfUEFVU0VEX1JV
TiwgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gTE9PUElORyBvciBF
TkRJTkcgc3RhdGUKKyAgICAgICAgU1RBVEVfRE9ORSAgICAgICAgICAgICAgICAgICAgICAvLyBl
bmQgdGltZXIgZmlyZWQsIGFuaW1hdGlvbiBmaW5pc2hlZCBhbmQgcmVtb3ZlZAorICAgIH07Cisg
ICAgCisgICAgZW51bSBBbmltU3RhdGVJbnB1dCB7CisgICAgICAgIFNUQVRFX0lOUFVUX01BS0Vf
TkVXLCAgICAgICAgICAgLy8gcmVzZXQgYmFjayB0byBuZXcgZnJvbSBhbnkgc3RhdGUKKyAgICAg
ICAgU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OLCAgICAvLyBhbmltYXRpb24gcmVxdWVzdHMg
YSBzdGFydAorICAgICAgICBTVEFURV9JTlBVVF9SRVNUQVJUX0FOSU1BVElPTiwgIC8vIGZvcmNl
IGEgcmVzdGFydCBmcm9tIGFueSBzdGF0ZQorICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9USU1F
Ul9GSVJFRCwgIC8vIHN0YXJ0IHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX1NUWUxF
X1NFVFVQLCAgICAgICAgLy8gc3R5bGUgaXMgc2V0dXAsIHJlYWR5IHRvIHN0YXJ0IGFuaW1hdGlu
ZworICAgICAgICBTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCwgICAgIC8vIG1fc3RhcnRUaW1l
IHdhcyBzZXQKKyAgICAgICAgU1RBVEVfSU5QVVRfTE9PUF9USU1FUl9GSVJFRCwgICAvLyBsb29w
IHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCwgICAgLy8g
ZW5kIHRpbWVyIGZpcmVkCisgICAgICAgIFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURFLCAgICAg
Ly8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQorICAgICAgICBTVEFURV9JTlBV
VF9SRVNVTUVfT1ZFUlJJREUsICAgIC8vIHJlc3VtZSBhbiBvdmVycmlkZGVuIGFuaW1hdGlvbgor
ICAgICAgICBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5JTkcsIC8vIHBsYXkgc3RhdGUgcGF1
c2VkIC0+IHJ1bm5pbmcKKyAgICAgICAgU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQsICAv
LyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1c2VkCisgICAgICAgIFNUQVRFX0lOUFVUX0VORF9B
TklNQVRJT04gICAgICAgLy8gZm9yY2UgYW4gZW5kIGZyb20gYW55IHN0YXRlCisgICAgfTsKKyAg
ICAKKyAgICAvLyBDYWxsZWQgd2hlbiBhbmltYXRpb24gaXMgaW4gTkVXIHN0YXRlIHRvIHN0YXJ0
IGFuaW1hdGlvbgorICAgIHZvaWQgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1TdGF0ZUlucHV0IGlu
cHV0LCBkb3VibGUgcGFyYW0pOworICAgIAorICAgIC8vIEFuaW1hdGlvbiBoYXMgYWN0dWFsbHkg
c3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKKyAgICAvLyBUaGlzIGlzIGEgY2FsbGJhY2sgYW5kIGlz
IG9ubHkgcmVjZWl2ZWQgd2hlbiBSZW5kZXJPYmplY3Q6OnN0YXJ0QW5pbWF0aW9uKCkgb3IgUmVu
ZGVyT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oKSAKKyAgICAvLyByZXR1cm5zIHRydWUuIElmIFJl
bmRlck9iamVjdDo6CisgICAgdm9pZCBvbkFuaW1hdGlvblN0YXJ0UmVzcG9uc2UoZG91YmxlIHN0
YXJ0VGltZSk7CisgICAgCisgICAgLy8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNl
ZCBzdGF0ZQorICAgIHZvaWQgdXBkYXRlUGxheVN0YXRlKGJvb2wgcnVubmluZyk7CisgICAgYm9v
bCBwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb24gJiYgbV9hbmlt
YXRpb24tPmFuaW1hdGlvblBsYXlTdGF0ZSgpID09IEFuaW1QbGF5U3RhdGVQbGF5aW5nOyB9Cisg
ICAgCisgICAgYm9vbCB3YWl0aW5nVG9TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbVN0YXRl
ID09IFNUQVRFX05FVyB8fCBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOyB9
CisgICAgYm9vbCBwcmVhY3RpdmUoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fYW5pbVN0YXRlID09
IFNUQVRFX05FVyB8fAorICAgICAgICAgICAgIG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dB
SVRfVElNRVIgfHwKKyAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlU
X1NUWUxFX1NFVFVQIHx8CisgICAgICAgICAgICAgbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRf
V0FJVF9SRVNQT05TRTsKKyAgICB9CisgICAgYm9vbCBwb3N0YWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfRE9ORTsgfQorICAgIGJvb2wgYWN0aXZlKCkgY29uc3Qg
eyByZXR1cm4gIXBvc3RhY3RpdmUoKSAmJiAhcHJlYWN0aXZlKCk7IH0KKyAgICBib29sIHJ1bm5p
bmcoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZSA8IDA7IH0KKyAgICBib29sIGlzbmV3KCkg
Y29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfTkVXOyB9CisgICAgYm9vbCB3YWl0
aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltU3RhdGUgPT0gU1RBVEVfU1RB
UlRfV0FJVF9SRVNQT05TRTsgfQorICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxlU2V0dXAoKSBjb25z
dCB7IHJldHVybiBtX2FuaW1TdGF0ZSA9PSBTVEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQOyB9
CisgICAgYm9vbCB3YWl0aW5nRm9yRW5kRXZlbnQoKSBjb25zdCAgeyByZXR1cm4gbV93YWl0aW5n
Rm9yRW5kRXZlbnQ7IH0KKyAgICAKKyAgICAvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNvbWV0
aGluZyBpcyBydW5uaW5nIHRoYXQgcmVxdWlyZXMgYSB0aW1lciB0byBrZWVwIGZpcmluZworICAg
IC8vIChlLmcuIGEgc29mdHdhcmUgYW5pbWF0aW9uKQorICAgIHZvaWQgc2V0QW5pbWF0aW5nKGJv
b2wgaW5BbmltYXRpbmcgPSB0cnVlKSB7IG1fYW5pbWF0aW5nID0gaW5BbmltYXRpbmc7IH0KKyAg
ICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CisgICAgCisg
ICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVuZGVy
T2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHlsZSom
IGlvQW5pbWF0ZWRTdHlsZSkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc2V0KFJlbmRlck9iamVj
dCogcmVuZGVyZXIsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tID0gMCwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvID0gMCkgeyB9CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIAorICAgIHZvaWQgYW5pbWF0aW9uVGltZXJD
YWxsYmFja0ZpcmVkKGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNl
ZFRpbWUpOworICAgIHZvaWQgYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCBib29s
IHJlc2V0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpOworICAgIAorICAgIGJv
b2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IFRyYW5zaXRpb24qIGFuaW0pIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uLT50cmFuc2l0aW9uc01hdGNoKGFuaW0sIGZhbHNlKTsgfQorICAgIAorICAg
IHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0IFRyYW5zaXRpb24qIGFuaW0pIHsgbV9hbmltYXRpb24g
PSBjb25zdF9jYXN0PFRyYW5zaXRpb24qPihhbmltKTsgfQorICAgIAorICAgIC8vIFJldHVybiB0
cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBvbmx5IGJlIHRo
ZSBjYXNlIGZvcgorICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNlZCB0byBkZXRl
cm1pbmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCisgICAgLy8gc2V0IHRoZSBzdGFy
dCB0aW1lLiBJZiBhbiBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbiwgaXQgd2lsbCBwcm9iYWJseSBu
b3QgZ2V0CisgICAgLy8gYmFjayB0aGUgU1RBUlRfVElNRSBldmVudC4KKyAgICB2aXJ0dWFsIGJv
b2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgCisgICAgLy8gRG9l
cyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5Pwor
ICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShpbnQgcHJvcGVydHkp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKCF3YWl0aW5nVG9TdGFydCgpICYmICFwb3N0
YWN0aXZlKCkpICYmIGFmZmVjdHNQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgfQorICAgIAorcHJv
dGVjdGVkOgorICAgIEhUTUxFbGVtZW50KiBlbGVtZW50Rm9yRXZlbnREaXNwYXRjaCgpCisgICAg
eworICAgICAgICBpZiAobV9vYmplY3QtPm5vZGUoKSAmJiBtX29iamVjdC0+bm9kZSgpLT5pc0hU
TUxFbGVtZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SFRNTEVsZW1lbnQq
PihtX29iamVjdC0+bm9kZSgpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
IC8vIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBLZXlmcmFtZUFuaW1hdGlvbiBzdWJj
bGFzcyB0byBvdmVycmlkZSBJbXBsaWNpdEFuaW1hdGlvbnMKKyAgICB2aXJ0dWFsIHZvaWQgb3Zl
cnJpZGVBbmltYXRpb25zKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5B
bmltYXRpb25zKCkgeyB9CisgICAgCisgICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVB
bmltYXRpb24oKSB7IHJldHVybiBtX2NvbXBBbmltOyB9CisgICAgCisgICAgLy8gVGhlc2UgYXJl
IGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMg
Y2FuIGRvIGFueSBleHRyYSB3b3JrCisgICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQo
ZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25JdGVy
YXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRp
b25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKSB7IH0KKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmlt
YXRpb24oZG91YmxlIGJlZ2luVGltZSkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgZW5kQW5pbWF0aW9uKGJvb2wgcmVzZXQpIHsgfQorICAgIAorICAgIHZvaWQgcHJpbWVFdmVu
dFRpbWVycygpOworICAgIAorcHJvdGVjdGVkOgorICAgIEFuaW1TdGF0ZSBtX2FuaW1TdGF0ZTsK
ICAgICBpbnQgbV9pdGVyYXRpb247CiAgICAgCi0gICAgYm9vbCBtX2ZpbmlzaGVkOyAgICAKKyAg
ICBib29sIG1fYW5pbWF0aW5nOyAgICAgICAvLyB0cmFuc2l0aW9uL2FuaW1hdGlvbiByZXF1aXJl
cyBjb250aW51YWwgdGltZXIgZmlyaW5nCisgICAgYm9vbCBtX3dhaXRlZEZvclJlc3BvbnNlOwog
ICAgIGRvdWJsZSBtX3N0YXJ0VGltZTsKLSAgICBib29sIG1fcGF1c2VkOwogICAgIGRvdWJsZSBt
X3BhdXNlVGltZTsKKyAgICBSZW5kZXJPYmplY3QqICAgbV9vYmplY3Q7CisgICAgCisgICAgQW5p
bWF0aW9uVGltZXJDYWxsYmFjayBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2s7CisgICAgQW5pbWF0
aW9uRXZlbnREaXNwYXRjaGVyIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyOworICAgIFJlZlB0
cjxUcmFuc2l0aW9uPiBtX2FuaW1hdGlvbjsKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIG1fY29t
cEFuaW07CisgICAgYm9vbCBtX3dhaXRpbmdGb3JFbmRFdmVudDsKIH07CiAKLWNsYXNzIENvbXBv
c2l0ZUltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIE5vbmNvcHlhYmxlIHsKKyNwcmFnbWEgbWFy
ayAtCisKK2NsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2Ugewog
cHVibGljOgotICAgIH5Db21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbigpIHsgZGVsZXRlQWxsVmFs
dWVzKG1fYW5pbWF0aW9ucyk7IH0KKyAgICBJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBUcmFuc2l0
aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBDb21wb3NpdGVBbmltYXRp
b24qIGNvbXBBbmltKQorICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCByZW5kZXJlciwg
Y29tcEFuaW0pCisgICAgLCBtX3Byb3BlcnR5KHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0
eSgpKQorICAgICwgbV9vdmVycmlkZGVuKGZhbHNlKQorICAgICwgbV9mcm9tU3R5bGUoMCkKKyAg
ICAsIG1fdG9TdHlsZSgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX2Zyb21TdHlsZSAmJiAhbV90
b1N0eWxlKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdlIHdlcmUgd2FpdGluZyBmb3IgYW4g
ZW5kIGV2ZW50LCB3ZSBuZWVkIHRvIGZpbmlzaCB0aGUgYW5pbWF0aW9uIHRvIG1ha2Ugc3VyZSBu
byBvbGQKKyAgICAgICAgLy8gYW5pbWF0aW9ucyBzdGljayBhcm91bmQgaW4gdGhlIGxvd2VyIGxl
dmVscworICAgICAgICBpZiAod2FpdGluZ0ZvckVuZEV2ZW50KCkgJiYgbV9vYmplY3QpCisgICAg
ICAgICAgICBBU1NFUlQoMCk7CisgICAgICAgIC8qIHNwbWEKKyAgICAgICAgICAgIG1fb2JqZWN0
LT50cmFuc2l0aW9uRmluaXNoZWQobV9wcm9wZXJ0eSk7CisgICAgICAgICAqLworICAgICAgICAK
KyAgICAgICAgLy8gRG8gdGhlIGNsZWFudXAgaGVyZSBpbnN0ZWFkIG9mIGluIHRoZSBiYXNlIGNs
YXNzIHNvIHRoZSBzcGVjaWFsaXplZCBtZXRob2RzIGdldCBjYWxsZWQKKyAgICAgICAgaWYgKCFw
b3N0YWN0aXZlKCkpCisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRf
RU5EX0FOSU1BVElPTiwgLTEpOyAgICAgCisgICAgfQorICAgIAorICAgIGludCB0cmFuc2l0aW9u
UHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9CisgICAgCisgICAgdmlydHVh
bCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmlydHVhbCB2b2lk
IGVuZEFuaW1hdGlvbihib29sIHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0
ZShDb21wb3NpdGVBbmltYXRpb24qLCBSZW5kZXJPYmplY3QqLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9BbmltYXRlZFN0eWxlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb20gPSAwLCBjb25zdCBSZW5kZXJTdHlsZSogdG8gPSAwKTsKKyAgICAKKyAgICB2b2lkIHNl
dE92ZXJyaWRkZW4oYm9vbCBiKTsKKyAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQorICAgIAorICAgIHZpcnR1YWwgYm9vbCBzaG91bGRG
aXJlRXZlbnRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHZpcnR1YWwgYm9v
bCBhZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhh
c1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9CisgICAg
Citwcm90ZWN0ZWQ6CisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVu
dDo6TGlzdGVuZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
b2JqZWN0LT5kb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOworICAg
IH0KKyAgICAKKyAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpOyAgICAKKyAgICAKK3ByaXZhdGU6
CisgICAgaW50IG1fcHJvcGVydHk7CisgICAgYm9vbCBtX292ZXJyaWRkZW47CisgICAgCisgICAg
Ly8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxlbmRpbmcuCisgICAgUmVuZGVyU3R5bGUq
IG1fZnJvbVN0eWxlOworICAgIFJlbmRlclN0eWxlKiBtX3RvU3R5bGU7Cit9OwogCi0gICAgUmVu
ZGVyU3R5bGUqIGFuaW1hdGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHls
ZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKTsKKyNwcmFnbWEgbWFyayAtCisgICAgCitjbGFz
cyBLZXlmcmFtZUFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKK3B1YmxpYzoKKyAg
ICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0aW9uLCBSZW5kZXJP
YmplY3QqIHJlbmRlcmVyLCBpbnQgaW5kZXgsIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0p
CisgICAgOiBBbmltYXRpb25CYXNlKHRyYW5zaXRpb24sIHJlbmRlcmVyLCBjb21wQW5pbSkKKyAg
ICAsIG1fa2V5ZnJhbWVzKHRyYW5zaXRpb24tPmtleWZyYW1lTGlzdCgpKQorICAgICwgbV9uYW1l
KHRyYW5zaXRpb24tPmFuaW1hdGlvbk5hbWUoKSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKyAgICB2aXJ0dWFsIH5LZXlmcmFtZUFuaW1hdGlvbigpCisgICAgeworICAgICAg
ICAvLyBJZiB3ZSB3ZXJlIHdhaXRpbmcgZm9yIGFuIGVuZCBldmVudCwgd2UgbmVlZCB0byBmaW5p
c2ggdGhlIGFuaW1hdGlvbiB0byBtYWtlIHN1cmUgbm8gb2xkCisgICAgICAgIC8vIGFuaW1hdGlv
bnMgc3RpY2sgYXJvdW5kIGluIHRoZSBsb3dlciBsZXZlbHMKKyAgICAgICAgaWYgKHdhaXRpbmdG
b3JFbmRFdmVudCgpICYmIG1fb2JqZWN0KSAKKyAgICAgICAgICAgIEFTU0VSVCgwKTsKKyAgICAg
ICAgLyogc3BtYQorICAgICAgICAgICAgbV9vYmplY3QtPmFuaW1hdGlvbkZpbmlzaGVkKG1fbmFt
ZSwgMCwgdHJ1ZSk7CisgICAgICAgICAqLworICAgICAgICAvLyBEbyB0aGUgY2xlYW51cCBoZXJl
IGluc3RlYWQgb2YgaW4gdGhlIGJhc2UgY2xhc3Mgc28gdGhlIHNwZWNpYWxpemVkIG1ldGhvZHMg
Z2V0IGNhbGxlZAorICAgICAgICBpZiAoIXBvc3RhY3RpdmUoKSkKKyAgICAgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9FTkRfQU5JTUFUSU9OLCAtMSk7ICAgICAKKyAgICB9
CisgICAgCisgICAgdmlydHVhbCB2b2lkIGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uKiwgUmVu
ZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBSZW5kZXJTdHls
ZSomIGlvQW5pbWF0ZWRTdHlsZSk7CisgICAgCisgICAgdm9pZCBzZXROYW1lKGNvbnN0IFN0cmlu
ZyYgcykgeyBtX25hbWUgPSBzOyB9CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgCisgICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVF
dmVudHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAgdmly
dHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGluRWxhcHNlZFRpbWUpOworICAgIHZp
cnR1YWwgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgaW5FbGFwc2VkVGltZSk7Cisg
ICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBpbkVsYXBzZWRUaW1lKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSk7CisgICAgdmly
dHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29sIHJlc2V0KTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgb3ZlcnJpZGVBbmltYXRpb25zKCk7CisgICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRk
ZW5BbmltYXRpb25zKCk7CisgICAgCisgICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5l
cihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGluTGlzdGVuZXJUeXBlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2JqZWN0LT5kb2N1bWVudCgpLT5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5
cGUpOworICAgIH0KKyAgICAKKyAgICBib29sIHNlbmRBbmltYXRpb25FdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGluRXZlbnRUeXBlLCBkb3VibGUgaW5FbGFwc2VkVGltZSk7CisgICAgCisgICAg
dmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShpbnQgcHJvcGVydHkpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICAvLyBUaGUga2V5ZnJhbWVzIHRoYXQgd2UgYXJlIGJsZW5kaW5nLgorICAg
IFJlZlB0cjxLZXlmcmFtZUxpc3Q+IG1fa2V5ZnJhbWVzOworICAgIEF0b21pY1N0cmluZyBtX25h
bWU7CisgICAgaW50IG1faW5kZXg7Cit9OworICAgIAorI3ByYWdtYSBtYXJrIC0KIAotICAgIGJv
b2wgYW5pbWF0aW5nKCkgY29uc3Q7Cit2b2lkIEFuaW1hdGlvblRpbWVyQ2FsbGJhY2s6OnRpbWVy
RmlyZWQoVGltZXI8QW5pbWF0aW9uVGltZXJCYXNlPiopCit7CisgICAgbV9hbmltLT5hbmltYXRp
b25UaW1lckNhbGxiYWNrRmlyZWQobV9ldmVudFR5cGUsIG1fZWxhcHNlZFRpbWUpOworfQogCi0g
ICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShpbnQgcHJvcCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25zLmNvbnRhaW5zKHByb3ApOyB9Cit2b2lkIEFuaW1hdGlvbkV2ZW50RGlzcGF0
Y2hlcjo6dGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25UaW1lckJhc2U+KikKK3sKKyAgICBtX2Fu
aW0tPmFuaW1hdGlvbkV2ZW50RGlzcGF0Y2hlckZpcmVkKG1fZWxlbWVudC5nZXQoKSwgbV9uYW1l
LCBtX3Byb3BlcnR5LCBtX3Jlc2V0LCBtX2V2ZW50VHlwZSwgbV9lbGFwc2VkVGltZSk7Cit9CiAK
LSAgICB2b2lkIHJlc2V0KFJlbmRlck9iamVjdCopOworI3ByYWdtYSBtYXJrIC0KIAotcHJpdmF0
ZToKLSAgICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPiBtX2FuaW1hdGlvbnM7Ci19
OwotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29uc3QgVHJhbnNpdGlv
biogdHJhbnNpdGlvbikKLTogbV9mcm9tU3R5bGUoMCkKLSwgbV90b1N0eWxlKDApCi0sIG1fcHJv
cGVydHkodHJhbnNpdGlvbi0+cHJvcGVydHkoKSkKLSwgbV9mdW5jdGlvbih0cmFuc2l0aW9uLT50
aW1pbmdGdW5jdGlvbigpKQotLCBtX2R1cmF0aW9uKHRyYW5zaXRpb24tPmR1cmF0aW9uKCkgLyAx
MDAwLjApCi0sIG1fcmVwZWF0Q291bnQodHJhbnNpdGlvbi0+cmVwZWF0Q291bnQoKSkKKyNwcmFn
bWEgbWFyayAtCisgICAgCitBbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0IFRyYW5z
aXRpb24qIHRyYW5zaXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIENvbXBvc2l0ZUFuaW1h
dGlvbiogY29tcEFuaW0pCis6IG1fYW5pbVN0YXRlKFNUQVRFX05FVykKICwgbV9pdGVyYXRpb24o
MCkKLSwgbV9maW5pc2hlZChmYWxzZSkKLSwgbV9zdGFydFRpbWUoY3VycmVudFRpbWUoKSkKLSwg
bV9wYXVzZWQoZmFsc2UpCi0sIG1fcGF1c2VUaW1lKG1fc3RhcnRUaW1lKQorLCBtX2FuaW1hdGlu
ZyhmYWxzZSkKKywgbV93YWl0ZWRGb3JSZXNwb25zZShmYWxzZSkKKywgbV9zdGFydFRpbWUoMCkK
KywgbV9wYXVzZVRpbWUoLTEpCissIG1fb2JqZWN0KHJlbmRlcmVyKQorLCBtX2FuaW1hdGlvblRp
bWVyQ2FsbGJhY2soY29uc3RfY2FzdDxBbmltYXRpb25CYXNlKj4odGhpcykpCissIG1fYW5pbWF0
aW9uRXZlbnREaXNwYXRjaGVyKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uQmFzZSo+KHRoaXMpKQorLCBt
X2FuaW1hdGlvbihjb25zdF9jYXN0PFRyYW5zaXRpb24qPih0cmFuc2l0aW9uKSkKKywgbV9jb21w
QW5pbShjb21wQW5pbSkKKywgbV93YWl0aW5nRm9yRW5kRXZlbnQoZmFsc2UpCiB7CiB9CiAKLUlt
cGxpY2l0QW5pbWF0aW9uOjp+SW1wbGljaXRBbmltYXRpb24oKQorLy8jZGVmaW5lIERFQlVHX1NU
QVRFX01BQ0hJTkUKKworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyNkZWZpbmUgRFNNX1BS
SU5UX0ZPUkNFKGlucHV0LCBuZXh0KSBcCitmcHJpbnRmKHN0ZG91dCwgIioqKiBnb3QgJXMgLS0+
ICVzIGF0ICVmIGZvciBhbmltYXRpb24gJXBcbiIsIGlucHV0LCBuZXh0LCBjdXJyZW50VGltZSgp
LCB0aGlzKQorCisjZGVmaW5lIERTTV9QUklOVChzdGF0ZSwgaW5wdXQsIG5leHQpIFwKK2Zwcmlu
dGYoc3Rkb3V0LCAiKioqIGdvdCAlcyBpbiAlcyAtLT4gJXMgYXQgJWYgZm9yIGFuaW1hdGlvbiAl
cFxuIiwgaW5wdXQsIHN0YXRlLCBuZXh0LCBjdXJyZW50VGltZSgpLCB0aGlzKQorCisjZGVmaW5l
IERTTV9QUklOVF9QQVJBTShzdGF0ZSwgaW5wdXQsIG5hbWUsIHBhcmFtLCBuZXh0KSBcCitmcHJp
bnRmKHN0ZG91dCwgIioqKiBnb3QgJXMgaW4gJXMgLS0+ICVzICglcz0lZikgYXQgJWYgZm9yIGFu
aW1hdGlvbiAlcFxuIiwgaW5wdXQsIHN0YXRlLCBuZXh0LCBuYW1lLCBwYXJhbSwgY3VycmVudFRp
bWUoKSwgdGhpcykKKyNlbHNlCisjZGVmaW5lIERTTV9QUklOVF9GT1JDRShpbnB1dCwgbmV4dCkK
KyNkZWZpbmUgRFNNX1BSSU5UKHN0YXRlLCBpbnB1dCwgbmV4dCkKKyNkZWZpbmUgRFNNX1BSSU5U
X1BBUkFNKHN0YXRlLCBpbnB1dCwgbmFtZSwgcGFyYW0sIG5leHQpCisjZW5kaWYKKwordm9pZCBB
bmltYXRpb25CYXNlOjp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbVN0YXRlSW5wdXQgaW5wdXQsIGRv
dWJsZSBwYXJhbSkKIHsKLSAgICBBU1NFUlQoIW1fZnJvbVN0eWxlICYmICFtX3RvU3R5bGUpOwor
ICAgIC8vIGlmIHdlIGdldCBhIFJFU1RBUlQgdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24s
IHJlZ2FyZGxlc3Mgb2Ygc3RhdGUKKyAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfTUFLRV9O
RVcpIHsKKyAgICAgICAgRFNNX1BSSU5UX0ZPUkNFKCJTVEFURV9JTlBVVF9NQUtFX05FVyIsICJT
VEFURV9ORVciKTsKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1NUQVJUX1dBSVRf
U1RZTEVfU0VUVVApCisgICAgICAgICAgICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJ
c1NldHVwKGZhbHNlKTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9ORVc7CisgICAgICAg
IG1fc3RhcnRUaW1lID0gMDsKKyAgICAgICAgbV9wYXVzZVRpbWUgPSAtMTsKKyAgICAgICAgbV93
YWl0ZWRGb3JSZXNwb25zZSA9IGZhbHNlOworICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVU
X1JFU1RBUlRfQU5JTUFUSU9OKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5Q
VVRfUkVTVEFSVF9BTklNQVRJT04iLCAiU1RBVEVfTkVXIik7CisgICAgICAgIGNhbmNlbFRpbWVy
cygpOworICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9T
RVRVUCkKKyAgICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAo
ZmFsc2UpOworICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX05FVzsKKyAgICAgICAgbV9zdGFy
dFRpbWUgPSAwOworICAgICAgICBtX3BhdXNlVGltZSA9IC0xOworICAgICAgICBlbmRBbmltYXRp
b24oZmFsc2UpOworICAgICAgICAKKyAgICAgICAgaWYgKHJ1bm5pbmcoKSkKKyAgICAgICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9BTklNQVRJT04sIC0xKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9F
TkRfQU5JTUFUSU9OKSB7CisgICAgICAgIERTTV9QUklOVF9GT1JDRSgiU1RBVEVfSU5QVVRfRU5E
X0FOSU1BVElPTiIsICJTVEFURV9ET05FIik7CisgICAgICAgIGNhbmNlbFRpbWVycygpOworICAg
ICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9TVFlMRV9TRVRVUCkKKyAg
ICAgICAgICAgIG1fY29tcEFuaW0tPnNldFdhaXRpbmdGb3JTdHlsZUlzU2V0dXAoZmFsc2UpOwor
ICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX0RPTkU7CisgICAgICAgIGVuZEFuaW1hdGlvbih0
cnVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBlbHNlIGlmIChpbnB1dCA9PSBTVEFU
RV9JTlBVVF9QQVVTRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAg
ICAgICAgZnByaW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1BBVVNFX09WRVJSSURF
IGF0ICVmIGZvciBhbmltYXRpb24gJXBcbiIsIGN1cnJlbnRUaW1lKCksIHRoaXMpOworI2VuZGlm
CisgICAgICAgIAorICAgICAgICBpZiAobV9hbmltU3RhdGUgPT0gU1RBVEVfU1RBUlRfV0FJVF9S
RVNQT05TRSkgeworICAgICAgICAgICAgLy8gSWYgd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNF
IHN0YXRlLCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKKyAgICAgICAg
ICAgIC8vIHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlCisgICAg
ICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGVsc2UgaWYgKGlucHV0ID09IFNUQVRFX0lO
UFVUX1JFU1VNRV9PVkVSUklERSkgeworI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIqKiogZ290IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSBh
dCAlZiBmb3IgYW5pbWF0aW9uICVwXG4iLCBjdXJyZW50VGltZSgpLCB0aGlzKTsKKyNlbmRpZgor
ICAgICAgICAKKyAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX0xPT1BJTkcgfHwgbV9h
bmltU3RhdGUgPT0gU1RBVEVfRU5ESU5HKSB7CisgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5p
bWF0aW9uCisgICAgICAgICAgICBzdGFydEFuaW1hdGlvbihtX3N0YXJ0VGltZSk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBleGVjdXRlIHN0YXRlIG1h
Y2hpbmUKKyAgICBzd2l0Y2gobV9hbmltU3RhdGUpIHsKKyAgICAgICAgY2FzZSBTVEFURV9ORVc6
CisgICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9O
IHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyB8fCBpbnB1dCA9PSBT
VEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICBpZiAoaW5wdXQgPT0g
U1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIHx8IGlucHV0ID09IFNUQVRFX0lOUFVUX1BMQVlf
U1RBVEVfUlVOTklORykgeworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVf
TkVXIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0ID09IFNUQVRFX0lO
UFVUX1NUQVJUX0FOSU1BVElPTikgPyAiU1RBVEVfSU5QVVRfU1RBUlRfQU5JTUFUSU9OIjogIlNU
QVRFX0lOUFVUX1BMQVlfU1RBVEVfUlVOTklORyIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZWxheSIsIG1fYW5pbWF0aW9uLT5kZWxheSgpLCAiU1RBVEVfU1RBUlRfV0FJVF9U
SU1FUiIpOworICAgICAgICAgICAgICAgIC8vIFNldCB0aGUgc3RhcnQgdGltZXIgdG8gdGhlIGlu
aXRpYWwgZGVsYXkgKDAgaWYgbm8gZGVsYXkpCisgICAgICAgICAgICAgICAgbV93YWl0ZWRGb3JS
ZXNwb25zZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RB
UlRfV0FJVF9USU1FUjsKKyAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyQ2FsbGJhY2su
c3RhcnRUaW1lcihtX2FuaW1hdGlvbi0+ZGVsYXkoKSwgRXZlbnROYW1lczo6d2Via2l0QW5pbWF0
aW9uU3RhcnRFdmVudCwgbV9hbmltYXRpb24tPmRlbGF5KCkpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gSWYgaW5wdXQgaXMgU1RBVEVfSU5Q
VVRfUExBWV9TVEFURV9QQVVTRUQgd2UgZG9uJ3QgZG8gYW55dGhpbmcgeWV0CisgICAgICAgICAg
ICAgICAgRFNNX1BSSU5UKCJTVEFURV9ORVciLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVT
RUQiLCAiU1RBVEVfTkVXIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBTVEFURV9TVEFSVF9XQUlUX1RJTUVSOgorICAgICAgICAgICAgQVNTRVJUKGlu
cHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEIHx8IGlucHV0ID09IFNUQVRFX0lO
UFVUX1BMQVlfU1RBVEVfUEFVU0VEKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGlu
cHV0ID09IFNUQVRFX0lOUFVUX1NUQVJUX1RJTUVSX0ZJUkVEKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHBhcmFtID49IDApOworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RB
VEVfU1RBUlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9TVEFSVF9USU1FUl9GSVJFRCIsICJl
bGFwc2VkVGltZSIsIHBhcmFtLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNU
QVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVAiKTsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB0
aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3Ig
aXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0
ZSA9IFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVA7CisgICAgICAgICAgICAgICAgbV9jb21w
QW5pbS0+c2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cCh0cnVlKTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUg
YW5pbWF0aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+ZWxlbWVudCgp
KTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uQ29udHJvbGxlcigpLT5zdGFy
dFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgICAgIEFTU0VSVChydW5uaW5nKCkpOworICAgICAgICAgICAg
ICAgIERTTV9QUklOVCgiU1RBVEVfU1RBUlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9QTEFZ
X1NUQVRFX1BBVVNFRCIsICJTVEFURV9QQVVTRURfV0FJVF9USU1FUiIpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1l
ciB0byBmaXJlIGFuZCB3ZSBnb3QgYSBwYXVzZS4gQ2FuY2VsIHRoZSB0aW1lciwgcGF1c2UgYW5k
IHdhaXQKKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAg
ICAgICAgICAgICAgY2FuY2VsVGltZXJzKCk7CisgICAgICAgICAgICAgICAgbV9hbmltU3RhdGUg
PSBTVEFURV9QQVVTRURfV0FJVF9USU1FUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFNUQVRFX1NUQVJUX1dBSVRfU1RZTEVfU0VUVVA6CisgICAgICAg
ICAgICBBU1NFUlQoaW5wdXQgPT0gU1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAgfHwgaW5wdXQgPT0g
U1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBtX2NvbXBBbmltLT5zZXRXYWl0aW5nRm9yU3R5bGVJc1NldHVwKGZhbHNlKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKGlucHV0ID09IFNUQVRFX0lOUFVUX1NUWUxFX1NFVFVQKSB7
CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UKCJTVEFURV9TVEFSVF9XQUlUX1NUWUxFX1NFVFVQ
IiwgIlNUQVRFX0lOUFVUX1NUWUxFX1NFVFVQIiwgIlNUQVRFX1NUQVJUX1dBSVRfUkVTUE9OU0Ui
KTsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFu
aW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRp
bWUKKyAgICAgICAgICAgICAgICBtX2FuaW1TdGF0ZSA9IFNUQVRFX1NUQVJUX1dBSVRfUkVTUE9O
U0U7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25z
KCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gU2VuZCBzdGFydCBldmVu
dCwgaWYgbmVlZGVkCisgICAgICAgICAgICAgICAgb25BbmltYXRpb25TdGFydCgwLjBmKTsgLy8g
dGhlIGVsYXBzZWRUaW1lIGlzIGFsd2F5cyAwIGhlcmUKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgaWYgKG92
ZXJyaWRkZW4oKSB8fCAhc3RhcnRBbmltYXRpb24oMCkpIHsKKyNpZmRlZiBERUJVR19TVEFURV9N
QUNISU5FCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiKioqICAgICAgICAg
c3RhcnRBbmltYXRpb24gcmV0dXJuZWQgZmFsc2UsIHNldHRpbmcgc3RhcnQgdGltZSBpbW1lZGlh
dGVseVxuIik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5n
IHRvIGdldCBhIHN0YXJ0VGltZSBjYWxsYmFjaywgc28gZmlyZSB0aGUgc3RhcnQgdGltZSBoZXJl
CisgICAgICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfU1RBUlRfV0FJVF9SRVNQ
T05TRTsKKyAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVU
X1NUQVJUX1RJTUVfU0VULCBjdXJyZW50VGltZSgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3dhaXRlZEZvclJlc3BvbnNl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChydW5uaW5nKCkpOworICAgICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVf
U1RBUlRfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCIsICJTVEFU
RV9TVEFSVF9XQUlUX1JFU1BPTlNFIik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIGEgbm90aWZpY2F0aW9uIHRoYXQgdGhlIHN0eWxl
IGhhcyBiZWVuIHNldHVwLiBJZiB3ZSdyZSBhc2tlZCB0byB3YWl0CisgICAgICAgICAgICAgICAg
Ly8gYXQgdGhpcyBwb2ludCwgdGhlIHN0eWxlIG11c3QgaGF2ZSBiZWVuIHByb2Nlc3NlZCwgc28g
d2UgY2FuIGRlYWwgd2l0aCB0aGlzIGxpa2Ugd2Ugd291bGQKKyAgICAgICAgICAgICAgICAvLyBm
b3IgV0FJVF9SRVNQT05TRSwgZXhjZXB0IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbiBlbmRB
bmltYXRpb24oKS4KKyAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IDA7CisgICAgICAgICAg
ICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfU1RBUlRfV0FJVF9S
RVNQT05TRToKKyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9U
SU1FX1NFVCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9PSBTVEFURV9JTlBVVF9TVEFSVF9USU1F
X1NFVCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAgICAg
ICAgICAvLyBXZSBoYXZlIGEgc3RhcnQgdGltZSwgc2V0IGl0LCB1bmxlc3MgdGhlIHN0YXJ0VGlt
ZSBpcyBhbHJlYWR5IHNldAorICAgICAgICAgICAgICAgIGlmIChtX3N0YXJ0VGltZSA8PSAwKQor
ICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGVuIHRoZSBlbmQgb3IgbG9vcCBldmVudCBu
ZWVkcyB0byBmaXJlCisgICAgICAgICAgICAgICAgcHJpbWVFdmVudFRpbWVycygpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVfU1RBUlRf
V0FJVF9SRVNQT05TRSIsICJTVEFURV9JTlBVVF9TVEFSVF9USU1FX1NFVCIsICJzdGFydFRpbWUi
LCBwYXJhbSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX2FuaW1TdGF0ZT09
U1RBVEVfTE9PUElORyk/IlNUQVRFX0xPT1BJTkciOiJTVEFURV9FTkRJTkciKTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBz
dGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICAgICAgc2V0Q2hhbmdlZChtX29iamVjdC0+
ZWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBtX29iamVjdC0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfU1RBUlRf
V0FJVF9SRVNQT05TRSIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1BBVVNFRCIsICJTVEFURV9Q
QVVTRURfV0FJVF9SRVNQT05TRSIpOworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5n
IHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQgcmVzcG9uc2UuIENhbmNlbCB0aGUgYW5pbWF0aW9u
IGFuZCB3YWl0LiBXaGVuIAorICAgICAgICAgICAgICAgIC8vIHdlIHVucGF1c2UsIHdlIHdpbGwg
YWN0IGFzIHRob3VnaCB0aGUgc3RhcnQgdGltZXIganVzdCBmaXJlZAorICAgICAgICAgICAgICAg
IG1fcGF1c2VUaW1lID0gMDsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFsc2UpOwor
ICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1dBSVRfUkVTUE9OU0U7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9M
T09QSU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IFNUQVRFX0lOUFVUX0xPT1BfVElN
RVJfRklSRUQgfHwgaW5wdXQgPT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAoaW5wdXQgPT0gU1RBVEVfSU5QVVRfTE9PUF9USU1F
Ul9GSVJFRCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKKyAgICAgICAg
ICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KKyAgICAgICAg
ICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7CisgICAgICAgICAgICAgICAgcHJp
bWVFdmVudFRpbWVycygpOworICAgICAgICAgICAgICAgIERTTV9QUklOVF9QQVJBTSgiU1RBVEVf
TE9PUElORyIsICJTVEFURV9JTlBVVF9MT09QX1RJTUVSX0ZJUkVEIiwgImVsYXBzZWRUaW1lIiwg
cGFyYW0sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9hbmltU3RhdGU9PVNU
QVRFX0xPT1BJTkcpPyJTVEFURV9MT09QSU5HIjoiU1RBVEVfRU5ESU5HIik7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBEU01fUFJJTlQoIlNUQVRF
X0xPT1BJTkciLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQiLCAiU1RBVEVfUEFVU0VE
X1JVTiIpOworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcu
IENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0CisgICAgICAgICAgICAgICAgbV9wYXVzZVRp
bWUgPSBjdXJyZW50VGltZSgpOworICAgICAgICAgICAgICAgIGNhbmNlbFRpbWVycygpOworICAg
ICAgICAgICAgICAgIGVuZEFuaW1hdGlvbihmYWxzZSk7CisgICAgICAgICAgICAgICAgbV9hbmlt
U3RhdGUgPSBTVEFURV9QQVVTRURfUlVOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU1RBVEVfRU5ESU5HOgorICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IFNUQVRFX0lOUFVUX0VORF9USU1FUl9GSVJFRCB8fCBpbnB1dCA9PSBTVEFURV9JTlBVVF9Q
TEFZX1NUQVRFX1BBVVNFRCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChpbnB1dCA9
PSBTVEFURV9JTlBVVF9FTkRfVElNRVJfRklSRUQpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
cGFyYW0gPj0gMCk7CisgICAgICAgICAgICAgICAgRFNNX1BSSU5UX1BBUkFNKCJTVEFURV9FTkRJ
TkciLCAiU1RBVEVfSU5QVVRfRU5EX1RJTUVSX0ZJUkVEIiwgImVsYXBzZWRUaW1lIiwgcGFyYW0s
ICJTVEFURV9ET05FIik7CisgICAgICAgICAgICAgICAgLy8gRW5kIHRpbWVyIGZpcmVkLCBmaW5p
c2ggdXAKKyAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkVuZChwYXJhbSk7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBGaXJlIG9mZiBhbm90aGVyIHN0eWxl
IGNoYW5nZSBzbyB3ZSBjYW4gc2V0IHRoZSBmaW5hbCB2YWx1ZQorICAgICAgICAgICAgICAgIHNl
dENoYW5nZWQobV9vYmplY3QtPmVsZW1lbnQoKSk7CisgICAgICAgICAgICAgICAgbV9hbmltU3Rh
dGUgPSBTVEFURV9ET05FOworICAgICAgICAgICAgICAgIG1fb2JqZWN0LT5hbmltYXRpb25Db250
cm9sbGVyKCktPnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlcigpOworICAgICAgICAgICAg
ICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlIHdoZW4gd2UndmUgYmVlbiBjYWxsZWQg
ZnJvbSB0aW1lckZpcmVkKCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfRU5ESU5HIiwgIlNUQVRFX0lOUFVUX1BMQVlf
U1RBVEVfUEFVU0VEIiwgIlNUQVRFX1BBVVNFRF9SVU4iKTsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2Fp
dAorICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICAgICAg
ICAgICAgICBjYW5jZWxUaW1lcnMoKTsKKyAgICAgICAgICAgICAgICBlbmRBbmltYXRpb24oZmFs
c2UpOworICAgICAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RBVEVfUEFVU0VEX1JVTjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIHx0aGlzfCBtYXkgYmUgZGVsZXRlZCBoZXJlCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfV0FJVF9USU1FUjoK
KyAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JVTk5J
TkcpOworICAgICAgICAgICAgQVNTRVJUKCFydW5uaW5nKCkpOworICAgICAgICAgICAgRFNNX1BS
SU5UKCJTVEFURV9QQVVTRURfV0FJVF9USU1FUiIsICJTVEFURV9JTlBVVF9QTEFZX1NUQVRFX1JV
Tk5JTkciLCAiU1RBVEVfTkVXIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFVwZGF0
ZSB0aGUgdGltZXMKKyAgICAgICAgICAgIG1fc3RhcnRUaW1lICs9IGN1cnJlbnRUaW1lKCkgLSBt
X3BhdXNlVGltZTsKKyAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZp
cmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KKyAgICAgICAgICAgIG1fYW5pbVN0YXRlID0gU1RB
VEVfTkVXOworICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX1NUQVJU
X0FOSU1BVElPTiwgMCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTVEFURV9Q
QVVTRURfV0FJVF9SRVNQT05TRToKKyAgICAgICAgY2FzZSBTVEFURV9QQVVTRURfUlVOOgorICAg
ICAgICAgICAgLy8gV2UgdHJlYXQgdGhlc2UgdHdvIGNhc2VzIHRoZSBzYW1lLiBUaGUgb25seSBk
aWZmZXJlbmNlIGlzIHRoYXQsIHdoZW4gd2UgYXJlIGluIHRoZSBXQUlUX1JFU1BPTlNFCisgICAg
ICAgICAgICAvLyBzdGF0ZSwgd2UgZG9uJ3QgeWV0IGhhdmUgYSB2YWxpZCBzdGFydFRpbWUsIHNv
IHdlIHNlbmQgMCB0byBzdGFydEFuaW1hdGlvbi4gV2hlbiB0aGUgU1RBUlRfVElNRQorICAgICAg
ICAgICAgLy8gZXZlbnQgY29tZXMgaW4gcW5kIHdlIHdlcmUgaW4gdGhlIFJVTiBzdGF0ZSwgd2Ug
d2lsbCBub3RpY2UgdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2V0IHRoZSAKKyAgICAgICAgICAgIC8v
IHN0YXJ0VGltZSBhbmQgd2lsbCBpZ25vcmUgaXQuCisgICAgICAgICAgICBBU1NFUlQoaW5wdXQg
PT0gU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HKTsKKyAgICAgICAgICAgIEFTU0VSVCgh
cnVubmluZygpKTsKKyAgICAgICAgICAgIERTTV9QUklOVCgiU1RBVEVfUEFVU0VEX1dBSVRfUkVT
UE9OU0UiLCAiU1RBVEVfSU5QVVRfUExBWV9TVEFURV9SVU5OSU5HIiwgIlNUQVRFX1NUQVJUX1dB
SVRfUkVTUE9OU0UiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0
aW1lcworICAgICAgICAgICAgaWYgKG1fYW5pbVN0YXRlID09IFNUQVRFX1BBVVNFRF9SVU4pCisg
ICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgKz0gY3VycmVudFRpbWUoKSAtIG1fcGF1c2VUaW1l
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gMDsKKyAg
ICAgICAgICAgIG1fcGF1c2VUaW1lID0gLTE7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IFdlIHdlcmUgd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1h
dGlvbiwgZ28gYmFjayBhbmQgd2FpdCBhZ2FpbgorICAgICAgICAgICAgbV9hbmltU3RhdGUgPSBT
VEFURV9TVEFSVF9XQUlUX1JFU1BPTlNFOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBT
dGFydCB0aGUgYW5pbWF0aW9uCisgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpIHx8ICFzdGFy
dEFuaW1hdGlvbihtX3N0YXJ0VGltZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSdyZSBub3Qg
Z29pbmcgdG8gZ2V0IGEgc3RhcnRUaW1lIGNhbGxiYWNrLCBzbyBmaXJlIHRoZSBzdGFydCB0aW1l
IGhlcmUKKyAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfU1RB
UlRfVElNRV9TRVQsIGN1cnJlbnRUaW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fd2FpdGVkRm9yUmVzcG9uc2UgPSB0cnVlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1RBVEVfRE9ORToKKyAgICAgICAgICAgIERTTV9Q
UklOVF9GT1JDRSgiU1RBVEVfRE9ORSIsICJTVEFURV9ET05FIik7CisgICAgICAgICAgICAvLyBX
ZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRlbGV0ZWQKKyAgICAg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZSBp
ZiB3ZSBjYW1lIG91dCBvZiBTVEFURV9FTkRJTkcgd2hlbiB3ZSd2ZSBiZWVuIGNhbGxlZCBmcm9t
IHRpbWVyRmlyZWQoKQogfQorICAgIAordm9pZCBBbmltYXRpb25CYXNlOjphbmltYXRpb25UaW1l
ckNhbGxiYWNrRmlyZWQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFw
c2VkVGltZSkKK3sKKyAgICBBU1NFUlQobV9vYmplY3QtPmRvY3VtZW50KCkgJiYgIW1fb2JqZWN0
LT5kb2N1bWVudCgpLT5pblBhZ2VDYWNoZSgpKTsKKyAgICAKKyAgICAvLyBGSVhNRTogdXNlIGFu
IGVudW0KKyAgICBpZiAoZXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlvblN0
YXJ0RXZlbnQpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9TVEFSVF9U
SU1FUl9GSVJFRCwgZWxhcHNlZFRpbWUpOworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSBFdmVu
dE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCkKKyAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKFNUQVRFX0lOUFVUX0xPT1BfVElNRVJfRklSRUQsIGVsYXBzZWRUaW1lKTsKKyAg
ICBlbHNlIGlmIChldmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZl
bnQpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VORF9USU1FUl9G
SVJFRCwgZWxhcHNlZFRpbWUpOworICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVy
ZQorICAgIH0KK30KIAotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoUmVuZGVyT2JqZWN0
KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGZyb20sIFJlbmRlclN0eWxlKiB0bykKK3ZvaWQgQW5p
bWF0aW9uQmFzZTo6YW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyRmlyZWQoSFRNTEVsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgaW50IHByb3BlcnR5LCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCByZXNldCwgY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKIHsKLSAgICBp
ZiAobV9mcm9tU3R5bGUpCi0gICAgICAgIG1fZnJvbVN0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVu
ZGVyQXJlbmEoKSk7Ci0gICAgaWYgKG1fdG9TdHlsZSkKLSAgICAgICAgbV90b1N0eWxlLT5kZXJl
ZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7Ci0gICAgbV9mcm9tU3R5bGUgPSBmcm9tOwotICAg
IGlmIChtX2Zyb21TdHlsZSkKLSAgICAgICAgbV9mcm9tU3R5bGUtPnJlZigpOwotICAgIG1fdG9T
dHlsZSA9IHRvOwotICAgIGlmIChtX3RvU3R5bGUpCi0gICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7
Ci0gICAgbV9maW5pc2hlZCA9IGZhbHNlOwotICAgIGlmIChmcm9tIHx8IHRvKQotICAgICAgICBt
X3N0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV93YWl0aW5nRm9yRW5kRXZlbnQgPSBm
YWxzZTsKKyAgICAKKyAgICAvLyBLZWVwIGFuIGF0b21pYyBzdHJpbmcgb24gdGhlIHN0YWNrIHRv
IGtlZXAgaXQgYWxpdmUgdW50aWwgd2UgZXhpdCB0aGlzIG1ldGhvZAorICAgIC8vIChzaW5jZSBk
aXNwYXRjaGluZyB0aGUgZXZlbnQgbWF5IGNhdXNlIHx0aGlzfCB0byBiZSBkZWxldGVkLCB0aGVy
ZWZvcmUgcmVtb3ZpbmcKKyAgICAvLyB0aGUgbGFzdCByZWYgdG8gdGhlIGF0b21pYyBzdHJpbmcp
LgorICAgIEF0b21pY1N0cmluZyBhbmltTmFtZShuYW1lKTsKKyAgICBBdG9taWNTdHJpbmcgYW5p
bUV2ZW50VHlwZShldmVudFR5cGUpOworICAgIC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBzdGlj
a3MgYXJvdW5kIHRvbworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gZWxlbWVudFJldGFpbmVyKGVs
ZW1lbnQpOworICAgIAorICAgIEFTU0VSVCghZWxlbWVudCB8fCAoZWxlbWVudC0+ZG9jdW1lbnQo
KSAmJiAhZWxlbWVudC0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkpOworICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChldmVudFR5cGUgPT0gRXZlbnRO
YW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KSB7CisgICAgICAgIGVsZW1lbnQtPmRpc3Bh
dGNoV2ViS2l0VHJhbnNpdGlvbkV2ZW50KGV2ZW50VHlwZSwgbmFtZSwgZWxhcHNlZFRpbWUpOwor
ICAgIH0gCisgICAgZWxzZSB7CisgICAgICAgIGVsZW1lbnQtPmRpc3BhdGNoV2ViS2l0QW5pbWF0
aW9uRXZlbnQoZXZlbnRUeXBlLCBuYW1lLCBlbGFwc2VkVGltZSk7CisgICAgfQorICAgIC8vIFdB
Uk5JTkc6IHx0aGlzfCBtYXkgaGF2ZSBiZWVuIGRlbGV0ZWQgaGVyZQorICAgIAorICAgIAorICAg
IC8vIFdlIGRpZG4ndCBtYWtlIHRoZSBlbmRBbmltYXRpb24gY2FsbCBpZiB3ZSBkaXNwYXRjaGVk
IGFuIGV2ZW50LiBUaGlzIGlzIHNvCisgICAgLy8gd2UgY2FuIGNhbGwgdGhlIGFuaW1hdGlvbiBl
dmVudCBoYW5kbGVyIHRoZW4gcmVtb3ZlIHRoZSBhbmltYXRpb24uIAorICAgIC8vIFdlIGNhbid0
IGNhbGwgZW5kQW5pbWF0aW9uKCkgaGVyZSBiZWNhdXNlIGl0IGlzIHNwZWNpYWxpemVkIGRlcGVu
ZGluZyBvbiB3aGV0aGVyCisgICAgLy8gd2UgYXJlIGRvaW5nIFRyYW5zaXRpb25zIG9yIEFuaW1h
dGlvbnMuIFNvIHdlIGRvIHRoZSBlcXVpdmFsZW50IHRvIGl0IGhlcmUuCisgICAgaWYgKGFuaW1F
dmVudFR5cGUgPT0gRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQpIHsKKyAgICAg
ICAgaWYgKGVsZW1lbnQtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIC8vIHJlc3RvcmUgdGhl
IG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQorICAgICAgICAgICAgc2V0Q2hhbmdlZChlbGVt
ZW50LT5yZW5kZXJlcigpLT5lbGVtZW50KCkpOworICAgICAgICB9CisgICAgfQogfQogCi1kb3Vi
bGUgSW1wbGljaXRBbmltYXRpb246OnByb2dyZXNzKCkgY29uc3QKK3ZvaWQgQW5pbWF0aW9uQmFz
ZTo6dXBkYXRlUGxheVN0YXRlKGJvb2wgcnVuKQogewotICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9
IGN1cnJlbnRUaW1lKCkgLSBtX3N0YXJ0VGltZTsKKyAgICBpZiAocnVubmluZygpICE9IHJ1biB8
fCBpc25ldygpKSB7CisgICAgICAgIGlmIChtX29iamVjdC0+ZG9jdW1lbnQoKS0+bG9hZENvbXBs
ZXRlKCkpCisgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUocnVuID8gU1RBVEVfSU5QVVRf
UExBWV9TVEFURV9SVU5OSU5HIDogU1RBVEVfSU5QVVRfUExBWV9TVEFURV9QQVVTRUQsIC0xKTsK
KyAgICB9Cit9CisKK2RvdWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUs
IGRvdWJsZSBvZmZzZXQpIGNvbnN0Cit7CisgICAgaWYgKHByZWFjdGl2ZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKICAgICAKLSAgICBpZiAobV9maW5pc2hlZCB8fCAhbV9kdXJhdGlvbiB8fCBlbGFw
c2VkVGltZSA+PSBtX2R1cmF0aW9uKQorICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IHJ1bm5pbmco
KSA/IChjdXJyZW50VGltZSgpIC0gbV9zdGFydFRpbWUpIDogKG1fcGF1c2VUaW1lIC0gbV9zdGFy
dFRpbWUpOworICAgIGlmIChydW5uaW5nKCkgJiYgZWxhcHNlZFRpbWUgPCAwKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICBkb3VibGUgZHVyID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7
CisgICAgaWYgKG1fYW5pbWF0aW9uLT5hbmltYXRpb25JdGVyYXRpb25Db3VudCgpID4gMCkKKyAg
ICAgICAgZHVyICo9IG1fYW5pbWF0aW9uLT5hbmltYXRpb25JdGVyYXRpb25Db3VudCgpOworICAg
IAorICAgIGlmIChwb3N0YWN0aXZlKCkgfHwgIW1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIHx8ICht
X2FuaW1hdGlvbi0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSA+IDAgJiYgZWxhcHNlZFRpbWUg
Pj0gZHVyKSkKICAgICAgICAgcmV0dXJuIDEuMDsKLQotICAgIGlmIChtX2Z1bmN0aW9uLnR5cGUo
KSA9PSBMaW5lYXJUaW1pbmdGdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGVsYXBzZWRUaW1lIC8g
bV9kdXJhdGlvbjsKICAgICAKKyAgICAvLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFsIHRpbWUsIHRh
a2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgorICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8g
d29ycnkgYWJvdXQgaXRlcmF0aW9ucywgd2UgYXNzdW1lIHRoYXQgd2Ugd291bGQgaGF2ZSAKKyAg
ICAvLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lCisgICAgZG91YmxlIHQg
PSBlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOworICAgIGludCBpID0gKGlu
dCkgdDsKKyAgICB0IC09IGk7CisgICAgaWYgKG1fYW5pbWF0aW9uLT5hbmltYXRpb25EaXJlY3Rp
b24oKSAmJiAoaSAmIDEpKQorICAgICAgICB0ID0gMSAtIHQ7CisgICAgCisgICAgaWYgKHNjYWxl
ICE9IDEgfHwgb2Zmc2V0ICE9IDApCisgICAgICAgIHQgPSAodCAtIG9mZnNldCkgKiBzY2FsZTsK
KyAgICAKKyAgICBpZiAobV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCkudHlwZSgpID09IExp
bmVhclRpbWluZ0Z1bmN0aW9uKQorICAgICAgICByZXR1cm4gdDsKKyAgICAKICAgICAvLyBDdWJp
YyBiZXppZXIuCi0gICAgcmV0dXJuIHNvbHZlQ3ViaWNCZXppZXJGdW5jdGlvbihtX2Z1bmN0aW9u
LngxKCksIG1fZnVuY3Rpb24ueTEoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2Z1bmN0aW9uLngyKCksIG1fZnVuY3Rpb24ueTIoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsYXBzZWRUaW1lIC8gbV9kdXJhdGlvbiwgbV9kdXJhdGlvbik7
CisgICAgZG91YmxlIHR0ID0gc29sdmVDdWJpY0JlemllckZ1bmN0aW9uKG1fYW5pbWF0aW9uLT50
aW1pbmdGdW5jdGlvbigpLngxKCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKS55MSgpLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9u
KCkueDIoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5p
bWF0aW9uLT50aW1pbmdGdW5jdGlvbigpLnkyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHQsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICByZXR1cm4g
dHQ7CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQmFzZTo6cHJpbWVFdmVudFRpbWVycygpCit7CisgICAg
Ly8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKKyAgICBk
b3VibGUgY3QgPSBjdXJyZW50VGltZSgpOworICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVyYXRp
b24gPSBjdCAtIG1fc3RhcnRUaW1lOworICAgIEFTU0VSVChlbGFwc2VkRHVyYXRpb24gPj0gMCk7
CisgICAgCisgICAgZG91YmxlIHRvdGFsRHVyYXRpb24gPSAtMTsKKyAgICBpZiAobV9hbmltYXRp
b24tPmFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50KCkgPiAwKQorICAgICAgICB0b3RhbER1cmF0aW9u
ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+YW5pbWF0aW9uSXRlcmF0
aW9uQ291bnQoKTsKKyAgICAKKyAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsKKyAgICBkb3Vi
bGUgbmV4dEl0ZXJhdGlvblRpbWUgPSB0b3RhbER1cmF0aW9uOworICAgIGlmICh0b3RhbER1cmF0
aW9uIDwgMCB8fCBlbGFwc2VkRHVyYXRpb24gPCB0b3RhbER1cmF0aW9uKSB7CisgICAgICAgIGR1
cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRp
b24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKKyAgICAgICAgbmV4dEl0ZXJhdGlvblRpbWUg
PSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7CisgICAgfQorICAgIAorICAgIC8vIEF0
IHRoaXMgcG9pbnQsIHdlIG1heSBoYXZlIDAgZHVyYXRpb25MZWZ0LCBpZiB3ZSd2ZSBnb3R0ZW4g
dGhlIGV2ZW50IGxhdGUgYW5kIHdlIGFyZSBhbHJlYWR5CisgICAgLy8gcGFzdCB0b3RhbER1cmF0
aW9uLiBJbiB0aGlzIGNhc2Ugd2Ugc3RpbGwgZmlyZSBhbiBlbmQgdGltZXIgYmVmb3JlIHByb2Nl
c3NpbmcgdGhlIGVuZC4gCisgICAgLy8gVGhpcyBkZWZlcnMgdGhlIGNhbGwgdG8gc2VuZEFuaW1h
dGlvbkV2ZW50cyB0byBhdm9pZCByZS1lbnRyYW50IGNhbGxzIHRoYXQgZGVzdHJveQorICAgIC8v
IHRoZSBSZW5kZXJPYmplY3QsIGFuZCB0aGVyZWZvcmUgfHRoaXN8IGJlZm9yZSB3ZSdyZSBkb25l
IHdpdGggaXQuCisgICAgaWYgKHRvdGFsRHVyYXRpb24gPCAwIHx8IG5leHRJdGVyYXRpb25UaW1l
IDwgdG90YWxEdXJhdGlvbikgeworICAgICAgICAvLyBXZSBhcmUgbm90IGF0IHRoZSBlbmQgeWV0
LCBzZW5kIGEgbG9vcCBldmVudAorICAgICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAw
KTsKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9MT09QSU5HOworICAgICAgICBtX2FuaW1h
dGlvblRpbWVyQ2FsbGJhY2suc3RhcnRUaW1lcihkdXJhdGlvbkxlZnQsIEV2ZW50TmFtZXM6Ondl
YmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50LCBuZXh0SXRlcmF0aW9uVGltZSk7CisgICAgfQor
ICAgIGVsc2UgeworICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZCwgc2VuZCBhbiBlbmQgZXZl
bnQKKyAgICAgICAgbV9hbmltU3RhdGUgPSBTVEFURV9FTkRJTkc7CisgICAgICAgIG1fYW5pbWF0
aW9uVGltZXJDYWxsYmFjay5zdGFydFRpbWVyKGR1cmF0aW9uTGVmdCwgRXZlbnROYW1lczo6d2Vi
a2l0QW5pbWF0aW9uRW5kRXZlbnQsIG5leHRJdGVyYXRpb25UaW1lKTsKKyAgICB9Cit9CisKKyNw
cmFnbWEgbWFyayAtCisKIHN0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhpbnQgZnJvbSwgaW50
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCiB7ICAKICAgICByZXR1cm4gaW50KGZyb20gKyAodG8gLSBm
cm9tKSAqIHByb2dyZXNzKTsKQEAgLTE5NCw3ICs5OTMsOCBAQAogc3RhdGljIGlubGluZSBTaGFk
b3dEYXRhKiBibGVuZEZ1bmMoY29uc3QgU2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0
YSogdG8sIGRvdWJsZSBwcm9ncmVzcykKIHsgIAogICAgIEFTU0VSVChmcm9tICYmIHRvKTsKLSAg
ICByZXR1cm4gbmV3IFNoYWRvd0RhdGEoYmxlbmRGdW5jKGZyb20tPngsIHRvLT54LCBwcm9ncmVz
cyksIGJsZW5kRnVuYyhmcm9tLT55LCB0by0+eSwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+
Ymx1ciwgdG8tPmJsdXIsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGZyb20tPmNvbG9yLCB0by0+Y29s
b3IsIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIG5ldyBTaGFkb3dEYXRhKGJsZW5kRnVuYyhmcm9t
LT54LCB0by0+eCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+eSwgdG8tPnksIHByb2dyZXNz
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhmcm9tLT5ibHVyLCB0by0+
Ymx1ciwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoZnJvbS0+Y29sb3IsIHRvLT5jb2xvciwgcHJvZ3Jl
c3MpKTsKIH0KIAogc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQpAQCAtMjA4LDcgKzEwMDgsOCBAQAogICAgICAgICBUcmFu
c2Zvcm1PcGVyYXRpb24qIGZyb21PcCA9IGkgPCBmcm9tU2l6ZSA/IGZyb21baV0uZ2V0KCkgOiAw
OwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb24qIHRvT3AgPSBpIDwgdG9TaXplID8gdG9baV0u
Z2V0KCkgOiAwOwogICAgICAgICBUcmFuc2Zvcm1PcGVyYXRpb24qIGJsZW5kZWRPcCA9IHRvT3Ag
PyB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzKSA6IGZyb21PcC0+YmxlbmQoMCwgcHJvZ3Jl
c3MsIHRydWUpOwotICAgICAgICByZXN1bHQuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGlm
IChibGVuZGVkT3ApCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGJsZW5kZWRPcCk7CiAgICAg
fQogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0yMjUsMzEwICsxMDI2LDEyOTkgQEAKICAgICBy
ZXR1cm4gcmVzdWx0ID4gMC4gPyBWSVNJQkxFIDogKHRvICE9IFZJU0lCTEUgPyB0byA6IGZyb20p
OwogfQogCi0jZGVmaW5lIEJMRU5EKHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1f
cHJvcGVydHkgPT0gcHJvcCAmJiBtX3RvU3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5n
ZXR0ZXIoKSkgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRT
dHlsZSk7IFwKLSAgICBcCi0gICAgaWYgKChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFh
bmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApKSB8fCBtX3Byb3BlcnR5ID09
IHByb3ApIHsgXAotICAgICAgICBpZiAobV9mcm9tU3R5bGUtPmdldHRlcigpICE9IG1fdG9TdHls
ZS0+Z2V0dGVyKCkpIHtcCi0gICAgICAgICAgICBtX2ZpbmlzaGVkID0gZmFsc2U7IFwKLSAgICAg
ICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkgXAotICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5
bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5
bGUpOyBcCi0gICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKG1fZnJv
bVN0eWxlLT5nZXR0ZXIoKSwgbV90b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jlc3MoKSkpO1wKLSAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3ApIFwKLSAgICAgICAgICAgICAgICByZXR1
cm47IFwKLSAgICAgICAgfVwKLSAgICB9XAorI3ByYWdtYSBtYXJrIC0KIAotI2RlZmluZSBCTEVO
RF9NQVlCRV9JTlZBTElEX0NPTE9SKHByb3AsIGdldHRlciwgc2V0dGVyKSBcCi0gICAgaWYgKG1f
cHJvcGVydHkgPT0gcHJvcCAmJiBtX3RvU3R5bGUtPmdldHRlcigpICE9IHRhcmdldFN0eWxlLT5n
ZXR0ZXIoKSkgXAotICAgICAgICByZXNldChyZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRT
dHlsZSk7IFwKLSAgICBcCi0gICAgaWYgKChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFh
bmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApKSB8fCBtX3Byb3BlcnR5ID09
IHByb3ApIHsgXAotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSBtX2Zyb21TdHlsZS0+Z2V0dGVy
KCk7IFwKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IG1fdG9TdHlsZS0+Z2V0dGVyKCk7IFwKLSAg
ICAgICAgaWYgKGZyb21Db2xvci5pc1ZhbGlkKCkgfHwgdG9Db2xvci5pc1ZhbGlkKCkpIHsgXAot
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKSBcCi0gICAgICAgICAgICAgICAg
ZnJvbUNvbG9yID0gbV9mcm9tU3R5bGUtPmNvbG9yKCk7IFwKLSAgICAgICAgICAgIGlmICghdG9D
b2xvci5pc1ZhbGlkKCkpIFwKLSAgICAgICAgICAgICAgICB0b0NvbG9yID0gbV90b1N0eWxlLT5j
b2xvcigpOyBcCi0gICAgICAgICAgICBpZiAoZnJvbUNvbG9yICE9IHRvQ29sb3IpIHtcCi0gICAg
ICAgICAgICAgICAgbV9maW5pc2hlZCA9IGZhbHNlOyBcCi0gICAgICAgICAgICAgICAgaWYgKCFh
bmltYXRlZFN0eWxlKSBcCi0gICAgICAgICAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBuZXcg
KHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0U3R5bGUpOyBcCi0g
ICAgICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZS0+c2V0dGVyKGJsZW5kRnVuYyhmcm9tQ29sb3Is
IHRvQ29sb3IsIHByb2dyZXNzKCkpKTtcCi0gICAgICAgICAgICAgICAgaWYgKG1fcHJvcGVydHkg
PT0gcHJvcCkgXAotICAgICAgICAgICAgICAgICAgICByZXR1cm47IFwKLSAgICAgICAgICAgIH1c
Ci0gICAgICAgIH1cCi0gICAgfVwKKy8vIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFueXRoaW5n
IHRvIGRvCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoUmVuZGVy
T2JqZWN0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUq
IHRhcmdldFN0eWxlKQoreworICAgIGNvbnN0IFRyYW5zaXRpb24qIGFuaW0gPSB0YXJnZXRTdHls
ZS0+dHJhbnNpdGlvbnMoKTsKKyAgICAKKyAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdlIGRvbid0
IGhhdmUgYW55IHRyYW5zaXRpb25zIG9yIGlmIHRoZSBjdXJyZW50IGFuZCB0YXJnZXQgdHJhbnNp
dGlvbnMgYXJlIHRoZSBzYW1lCisgICAgaWYgKG1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpICYmICFh
bmltKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG51bUFuaW1zID0gMDsKKyAgICBi
b29sIHRyYW5zaXRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgIAorICAgIC8vIFNlZSBpZiB0aGUg
bGlzdHMgbWF0Y2gKKyAgICBmb3IgKCA7IGFuaW07IGFuaW0gPSBhbmltLT5uZXh0KCkpIHsKKyAg
ICAgICAgKytudW1BbmltczsKKyAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0g
KGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5SW52YWxpZCkgPyAwIDoK
KyAgICAgICAgbV90cmFuc2l0aW9ucy5nZXQoYW5pbS0+dHJhbnNpdGlvblByb3BlcnR5KCkpOwor
ICAgICAgICBpZiAoIWltcGxBbmltIHx8ICFpbXBsQW5pbS0+YW5pbWF0aW9uc01hdGNoKGFuaW0p
KSB7CisgICAgICAgICAgICB0cmFuc2l0aW9uc0NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKCF0cmFuc2l0aW9uc0NoYW5n
ZWQgJiYgbV90cmFuc2l0aW9ucy5zaXplKCkgIT0gbnVtQW5pbXMpCisgICAgICAgIHRyYW5zaXRp
b25zQ2hhbmdlZCA9IHRydWU7CisgICAgCisgICAgaWYgKCF0cmFuc2l0aW9uc0NoYW5nZWQpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUcmFuc2l0aW9ucyBoYXZlIGNoYW5nZWQsIHVw
ZGF0ZSB0aGUgbGlzdAorICAgIHJlc2V0VHJhbnNpdGlvbnMocmVuZGVyZXIpOworICAgIAorICAg
IGlmICghdGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCkpCisgICAgICAgIHJldHVybjsKKyAgICAK
KyAgICAvLyBBZGQgYWxsIHRoZSBuZXcgYW5pbWF0aW9ucworICAgIGZvciAoYW5pbSA9IHRhcmdl
dFN0eWxlLT50cmFuc2l0aW9ucygpOyBhbmltOyBhbmltID0gYW5pbS0+bmV4dCgpKSB7CisgICAg
ICAgIAorICAgICAgICBpbnQgcHJvcGVydHkgICAgICAgID0gYW5pbS0+dHJhbnNpdGlvblByb3Bl
cnR5KCk7CisgICAgICAgIGRvdWJsZSBkdXJhdGlvbiAgICAgPSBhbmltLT5kdXJhdGlvbigpOwor
ICAgICAgICBpbnQgaXRlcmF0aW9uQ291bnQgID0gYW5pbS0+YW5pbWF0aW9uSXRlcmF0aW9uQ291
bnQoKTsKKyAgICAgICAgZG91YmxlIGRlbGF5ICAgICAgICA9IGFuaW0tPmRlbGF5KCk7CisgICAg
ICAgIAorICAgICAgICBpZiAocHJvcGVydHkgJiYgKGR1cmF0aW9uIHx8IGRlbGF5KSAmJiBpdGVy
YXRpb25Db3VudCAmJiAhbV90cmFuc2l0aW9ucy5jb250YWlucyhwcm9wZXJ0eSkpIHsKKyAgICAg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltYXRpb24gPSBuZXcgSW1wbGljaXRBbmltYXRp
b24oY29uc3RfY2FzdDxUcmFuc2l0aW9uKj4oYW5pbSksIHJlbmRlcmVyLCB0aGlzKTsKKyAgICAg
ICAgICAgIG1fdHJhbnNpdGlvbnMuc2V0KHByb3BlcnR5LCBhbmltYXRpb24pOworICAgICAgICB9
CisgICAgfQorfQogCi0jZGVmaW5lIEJMRU5EX1NIQURPVyhwcm9wLCBnZXR0ZXIsIHNldHRlcikg
XAotICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3AgJiYgKCFtX3RvU3R5bGUtPmdldHRlcigpIHx8
ICF0YXJnZXRTdHlsZS0+Z2V0dGVyKCkgfHwgKm1fdG9TdHlsZS0+Z2V0dGVyKCkgIT0gKnRhcmdl
dFN0eWxlLT5nZXR0ZXIoKSkpIFwKLSAgICAgICAgcmVzZXQocmVuZGVyZXIsIGN1cnJlbnRTdHls
ZSwgdGFyZ2V0U3R5bGUpOyBcCi0gICAgXAotICAgIGlmICgobV9wcm9wZXJ0eSA9PSBjQW5pbWF0
ZUFsbCAmJiAhYW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKSkgfHwgbV9w
cm9wZXJ0eSA9PSBwcm9wKSB7IFwKLSAgICAgICAgaWYgKG1fZnJvbVN0eWxlLT5nZXR0ZXIoKSAm
JiBtX3RvU3R5bGUtPmdldHRlcigpICYmICptX2Zyb21TdHlsZS0+Z2V0dGVyKCkgIT0gKm1fdG9T
dHlsZS0+Z2V0dGVyKCkpIHtcCi0gICAgICAgICAgICBtX2ZpbmlzaGVkID0gZmFsc2U7IFwKLSAg
ICAgICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkgXAotICAgICAgICAgICAgICAgIGFuaW1hdGVk
U3R5bGUgPSBuZXcgKHJlbmRlcmVyLT5yZW5kZXJBcmVuYSgpKSBSZW5kZXJTdHlsZSgqdGFyZ2V0
U3R5bGUpOyBcCi0gICAgICAgICAgICBhbmltYXRlZFN0eWxlLT5zZXR0ZXIoYmxlbmRGdW5jKG1f
ZnJvbVN0eWxlLT5nZXR0ZXIoKSwgbV90b1N0eWxlLT5nZXR0ZXIoKSwgcHJvZ3Jlc3MoKSkpO1wK
LSAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5ID09IHByb3ApIFwKLSAgICAgICAgICAgICAgICBy
ZXR1cm47IFwKLSAgICAgICAgfVwKKy8vIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFueXRoaW5n
IHRvIGRvCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVBbmltYXRpb25z
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIFJlbmRl
clN0eWxlKiB0YXJnZXRTdHlsZSkKK3sKKyAgICBjb25zdCBUcmFuc2l0aW9uKiBhbmltID0gdGFy
Z2V0U3R5bGUtPmFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICAvLyBOb3RoaW5nIHRvIGRvIGlmIHdl
IGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMgb3IgaWYgdGhlIGN1cnJlbnQgYW5kIHRhcmdldCBh
bmltYXRpb25zIGFyZSB0aGUgc2FtZQorICAgIGlmICgobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNF
bXB0eSgpICYmICFhbmltKSB8fCAKKyAgICAgICAgKGN1cnJlbnRTdHlsZSAmJiBjdXJyZW50U3R5
bGUtPmFuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+YW5pbWF0aW9ucygpKSA9PSAqYW5p
bSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3QgbnVtQW5pbXMgPSAwOworICAg
IGJvb2wgYW5pbXNDaGFuZ2VkID0gZmFsc2U7CisgICAgCisgICAgLy8gU2VlIGlmIHRoZSBsaXN0
cyBtYXRjaAorICAgIGZvciAoIDsgYW5pbTsgYW5pbSA9IGFuaW0tPm5leHQoKSkgeworICAgICAg
ICBpZiAoIWFuaW0tPmlzVmFsaWRBbmltYXRpb24oKSkgeworICAgICAgICAgICAgYW5pbXNDaGFu
Z2VkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEtleWZyYW1lQW5pbWF0
aW9uKiBrZkFuaW0gPSAobnVtQW5pbXMgPCBtX2tleWZyYW1lQW5pbWF0aW9ucy5zaXplKCkpID8g
bV9rZXlmcmFtZUFuaW1hdGlvbnNbbnVtQW5pbXNdIDogMDsKKyAgICAgICAgICAgIGlmICgha2ZB
bmltIHx8ICFrZkFuaW0tPmFuaW1hdGlvbnNNYXRjaChhbmltKSkKKyAgICAgICAgICAgICAgICBh
bmltc0NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKGFuaW0pIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQW5pbWF0aW9ucyBtYXRjaCwgYnV0
IHBsYXkgc3RhdGVzIG1heSBkaWZmZXIuIHVwZGF0ZSBpZiBuZWVkZWQKKyAgICAgICAgICAgICAg
ICAgICAga2ZBbmltLT51cGRhdGVQbGF5U3RhdGUoYW5pbS0+YW5pbWF0aW9uUGxheVN0YXRlKCkg
PT0gQW5pbVBsYXlTdGF0ZVBsYXlpbmcpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgLy8gU2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBq
dXN0IGluIGNhc2UgdGhlIHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQKKyAgICAgICAgICAgICAgICAg
ICAga2ZBbmltLT5zZXRBbmltYXRpb24oYW5pbSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgICsrbnVtQW5pbXM7CiAgICAgfQorICAgIAorICAg
IGlmICghYW5pbXNDaGFuZ2VkICYmIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUoKSAhPSBudW1B
bmltcykKKyAgICAgICAgYW5pbXNDaGFuZ2VkID0gdHJ1ZTsKKyAgICAKKyAgICBpZiAoIWFuaW1z
Q2hhbmdlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIEFuaW1hdGlvbnMgaGF2ZSBj
aGFuZ2VkLCB1cGRhdGUgdGhlIGxpc3QKKyAgICByZXNldEFuaW1hdGlvbnMocmVuZGVyZXIpOwor
ICAgIAorICAgIGlmICghdGFyZ2V0U3R5bGUtPmFuaW1hdGlvbnMoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIC8vIEFkZCBhbGwgdGhlIG5ldyBhbmltYXRpb25zCisgICAgaW50IGluZGV4
ID0gMDsKKyAgICBmb3IgKGFuaW0gPSB0YXJnZXRTdHlsZS0+YW5pbWF0aW9ucygpOyBhbmltOyBh
bmltID0gYW5pbS0+bmV4dCgpLCArK2luZGV4KSB7CisgICAgICAgIAorICAgICAgICBpZiAoIWFu
aW0tPmlzVmFsaWRBbmltYXRpb24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAK
KyAgICAgICAgLy8gRG9uJ3QgYm90aGVyIGFkZGluZyB0aGUgYW5pbWF0aW9uIGlmIGl0IGhhcyBu
byBrZXlmcmFtZXMgb3Igd29uJ3QgYW5pbWF0ZQorICAgICAgICBpZiAoKGFuaW0tPmR1cmF0aW9u
KCkgfHwgYW5pbS0+ZGVsYXkoKSkgJiYgYW5pbS0+YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQoKSAm
JgorICAgICAgICAgICAgYW5pbS0+a2V5ZnJhbWVMaXN0KCkuZ2V0KCkgJiYgIWFuaW0tPmtleWZy
YW1lTGlzdCgpLT5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5hcHBlbmQobmV3IEtleWZyYW1lQW5pbWF0aW9uKGNvbnN0X2Nhc3Q8VHJhbnNpdGlvbio+KGFu
aW0pLCByZW5kZXJlciwgaW5kZXgsIHRoaXMpKTsKKyAgICAgICAgfQorICAgIH0KK30KIAotdm9p
ZCBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbWF0aW9uLCBSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgYW5pbWF0ZWRTdHls
ZSkKK2ludCBDb21wb3NpdGVBbmltYXRpb246OmZpbmRLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgLy8gRklYTUU6IElmIHdlIGhhdmUgbm8gdHJhbnNp
dGlvbi1wcm9wZXJ0eSwgdGhlbiB0aGUgb25seSB3YXkgdG8gdGVsbCBpZiBvdXIgZ29hbCBzdGF0
ZSBjaGFuZ2VkIGlzIHRvIGNoZWNrCi0gICAgLy8gZXZlcnkgc2luZ2xlIGFuaW1hdGFibGUgcHJv
cGVydHkuICBGb3Igbm93IHdlJ2xsIGp1c3QgZGlmZiB0aGUgc3R5bGVzIHRvIGFzayB0aGF0IHF1
ZXN0aW9uLAotICAgIC8vIGJ1dCB3ZSBzaG91bGQgcmVhbGx5IGV4Y2x1ZGUgbm9uLWFuaW1hdGFi
bGUgcHJvcGVydGllcy4KLSAgICBpZiAoIW1fdG9TdHlsZSB8fCAobV9wcm9wZXJ0eSA9PSBjQW5p
bWF0ZUFsbCAmJiB0YXJnZXRTdHlsZS0+ZGlmZihtX3RvU3R5bGUpKSkKLSAgICAgICAgcmVzZXQo
cmVuZGVyZXIsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotCi0gICAgLy8gRklYTUU6IEJs
b3cgdXAgc2hvcnRoYW5kcyBzbyB0aGF0IHRoZXkgY2FuIGJlIGhvbm9yZWQuCi0gICAgbV9maW5p
c2hlZCA9IHRydWU7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlMZWZ0LCBsZWZ0LCBzZXRMZWZ0KTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eVJpZ2h0LCByaWdodCwgc2V0UmlnaHQpOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5VG9wLCB0b3AsIHNldFRvcCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3R0
b20sIGJvdHRvbSwgc2V0Qm90dG9tKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdpZHRoLCB3aWR0
aCwgc2V0V2lkdGgpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5SGVpZ2h0LCBoZWlnaHQsIHNldEhl
aWdodCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIGJvcmRlckxlZnRX
aWR0aCwgc2V0Qm9yZGVyTGVmdFdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eUJvcmRlclJp
Z2h0V2lkdGgsIGJvcmRlclJpZ2h0V2lkdGgsIHNldEJvcmRlclJpZ2h0V2lkdGgpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgsIGJvcmRlclRvcFdpZHRoLCBzZXRCb3JkZXJU
b3BXaWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgYm9yZGVy
Qm90dG9tV2lkdGgsIHNldEJvcmRlckJvdHRvbVdpZHRoKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eU1hcmdpbkxlZnQsIG1hcmdpbkxlZnQsIHNldE1hcmdpbkxlZnQpOwotICAgIEJMRU5EKENTU1By
b3BlcnR5TWFyZ2luUmlnaHQsIG1hcmdpblJpZ2h0LCBzZXRNYXJnaW5SaWdodCk7Ci0gICAgQkxF
TkQoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIG1hcmdpblRvcCwgc2V0TWFyZ2luVG9wKTsKLSAgICBC
TEVORChDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgbWFyZ2luQm90dG9tLCBzZXRNYXJnaW5Cb3R0
b20pOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsIHBhZGRpbmdMZWZ0LCBzZXRQ
YWRkaW5nTGVmdCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsIHBhZGRpbmdS
aWdodCwgc2V0UGFkZGluZ1JpZ2h0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVBhZGRpbmdUb3As
IHBhZGRpbmdUb3AsIHNldFBhZGRpbmdUb3ApOwotICAgIEJMRU5EKENTU1Byb3BlcnR5UGFkZGlu
Z0JvdHRvbSwgcGFkZGluZ0JvdHRvbSwgc2V0UGFkZGluZ0JvdHRvbSk7Ci0gICAgQkxFTkQoQ1NT
UHJvcGVydHlPcGFjaXR5LCBvcGFjaXR5LCBzZXRPcGFjaXR5KTsKLSAgICBCTEVORChDU1NQcm9w
ZXJ0eUNvbG9yLCBjb2xvciwgc2V0Q29sb3IpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yLCBiYWNrZ3JvdW5kQ29sb3IsIHNldEJhY2tncm91bmRDb2xvcik7Ci0gICAgQkxF
TkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtblJ1bGVDb2xvciwg
Y29sdW1uUnVsZUNvbG9yLCBzZXRDb2x1bW5SdWxlQ29sb3IpOwotICAgIEJMRU5EKENTU1Byb3Bl
cnR5V2Via2l0Q29sdW1uUnVsZVdpZHRoLCBjb2x1bW5SdWxlV2lkdGgsIHNldENvbHVtblJ1bGVX
aWR0aCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5HYXAsIGNvbHVtbkdhcCwg
c2V0Q29sdW1uR2FwKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkNvdW50LCBj
b2x1bW5Db3VudCwgc2V0Q29sdW1uQ291bnQpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0
Q29sdW1uV2lkdGgsIGNvbHVtbldpZHRoLCBzZXRDb2x1bW5XaWR0aCk7Ci0gICAgQkxFTkRfTUFZ
QkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgdGV4dFN0
cm9rZUNvbG9yLCBzZXRUZXh0U3Ryb2tlQ29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFMSURf
Q09MT1IoQ1NTUHJvcGVydHlXZWJraXRUZXh0RmlsbENvbG9yLCB0ZXh0RmlsbENvbG9yLCBzZXRU
ZXh0RmlsbENvbG9yKTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250
YWxTcGFjaW5nLCBob3Jpem9udGFsQm9yZGVyU3BhY2luZywgc2V0SG9yaXpvbnRhbEJvcmRlclNw
YWNpbmcpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5n
LCB2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsIHNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyk7Ci0gICAg
QkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgYm9y
ZGVyTGVmdENvbG9yLCBzZXRCb3JkZXJMZWZ0Q29sb3IpOwotICAgIEJMRU5EX01BWUJFX0lOVkFM
SURfQ09MT1IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBz
ZXRCb3JkZXJSaWdodENvbG9yKTsKLSAgICBCTEVORF9NQVlCRV9JTlZBTElEX0NPTE9SKENTU1By
b3BlcnR5Qm9yZGVyVG9wQ29sb3IsIGJvcmRlclRvcENvbG9yLCBzZXRCb3JkZXJUb3BDb2xvcik7
Ci0gICAgQkxFTkRfTUFZQkVfSU5WQUxJRF9DT0xPUihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNv
bG9yLCBib3JkZXJCb3R0b21Db2xvciwgc2V0Qm9yZGVyQm90dG9tQ29sb3IpOwotICAgIEJMRU5E
KENTU1Byb3BlcnR5WkluZGV4LCB6SW5kZXgsIHNldFpJbmRleCk7Ci0gICAgQkxFTkQoQ1NTUHJv
cGVydHlMaW5lSGVpZ2h0LCBsaW5lSGVpZ2h0LCBzZXRMaW5lSGVpZ2h0KTsKLSAgICBCTEVORF9N
QVlCRV9JTlZBTElEX0NPTE9SKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCBvdXRsaW5lQ29sb3Is
IHNldE91dGxpbmVDb2xvcik7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCBv
dXRsaW5lT2Zmc2V0LCBzZXRPdXRsaW5lT2Zmc2V0KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0eU91
dGxpbmVXaWR0aCwgb3V0bGluZVdpZHRoLCBzZXRPdXRsaW5lV2lkdGgpOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5TGV0dGVyU3BhY2luZywgbGV0dGVyU3BhY2luZywgc2V0TGV0dGVyU3BhY2luZyk7
Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgd29yZFNwYWNpbmcsIHNldFdvcmRT
cGFjaW5nKTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGJv
eFNoYWRvdywgc2V0Qm94U2hhZG93KTsKLSAgICBCTEVORF9TSEFET1coQ1NTUHJvcGVydHlUZXh0
U2hhZG93LCB0ZXh0U2hhZG93LCBzZXRUZXh0U2hhZG93KTsKLSAgICBCTEVORChDU1NQcm9wZXJ0
eVdlYmtpdFRyYW5zZm9ybSwgdHJhbnNmb3JtLCBzZXRUcmFuc2Zvcm0pOwotICAgIEJMRU5EKENT
U1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgdHJhbnNmb3JtT3JpZ2luWCwgc2V0VHJh
bnNmb3JtT3JpZ2luWCk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRUcmFuc2Zvcm1Pcmln
aW5ZLCB0cmFuc2Zvcm1PcmlnaW5ZLCBzZXRUcmFuc2Zvcm1PcmlnaW5ZKTsKLSAgICBCTEVORChD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclRvcExlZnRSYWRpdXMsIGJvcmRlclRvcExlZnRSYWRpdXMs
IHNldEJvcmRlclRvcExlZnRSYWRpdXMpOwotICAgIEJMRU5EKENTU1Byb3BlcnR5V2Via2l0Qm9y
ZGVyVG9wUmlnaHRSYWRpdXMsIGJvcmRlclRvcFJpZ2h0UmFkaXVzLCBzZXRCb3JkZXJUb3BSaWdo
dFJhZGl1cyk7Ci0gICAgQkxFTkQoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzLCBib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCBzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKTsK
LSAgICBCTEVORChDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCBib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cywgc2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpOwotICAgIEJM
RU5EKENTU1Byb3BlcnR5VmlzaWJpbGl0eSwgdmlzaWJpbGl0eSwgc2V0VmlzaWJpbGl0eSk7Ci0g
ICAgQkxFTkQoQ1NTUHJvcGVydHlab29tLCB6b29tLCBzZXRab29tKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IChpbnQpIG1fa2V5ZnJhbWVBbmltYXRpb25zLnNpemUoKTsgKytpKQorICAgICAg
ICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnNbaV0tPm5hbWUoKSA9PSBuYW1lKQorICAgICAgICAg
ICAgcmV0dXJuIGk7CisgICAgcmV0dXJuIC0xOwogfQogCi1SZW5kZXJTdHlsZSogQ29tcG9zaXRl
SW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQorUmVuZGVyU3R5
bGUqIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCiB7Ci0g
ICAgY29uc3QgVHJhbnNpdGlvbiogY3VycmVudFRyYW5zaXRpb25zID0gY3VycmVudFN0eWxlLT50
cmFuc2l0aW9ucygpOwotICAgIGNvbnN0IFRyYW5zaXRpb24qIHRhcmdldFRyYW5zaXRpb25zID0g
dGFyZ2V0U3R5bGUtPnRyYW5zaXRpb25zKCk7Ci0gICAgaWYgKGN1cnJlbnRUcmFuc2l0aW9ucyAh
PSB0YXJnZXRUcmFuc2l0aW9ucyAmJiAhKGN1cnJlbnRUcmFuc2l0aW9ucyAmJiB0YXJnZXRUcmFu
c2l0aW9ucyAmJiAqY3VycmVudFRyYW5zaXRpb25zID09ICp0YXJnZXRUcmFuc2l0aW9ucykpIHsK
LSAgICAgICAgcmVzZXQocmVuZGVyZXIpOwotICAgICAgICBkZWxldGVBbGxWYWx1ZXMobV9hbmlt
YXRpb25zKTsKLSAgICAgICAgbV9hbmltYXRpb25zLmNsZWFyKCk7Ci0gICAgfQotCi0gICAgLy8g
R2V0IHRoZSBhbmltYXRpb24gbGF5ZXJzIGZyb20gdGhlIHRhcmdldCBzdHlsZS4KLSAgICAvLyBG
b3IgZWFjaCBvbmUsIHdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IGFuaW1hdGlvbiB1bmxlc3Mgb25l
IGV4aXN0cyBhbHJlYWR5IChsYXRlciBvY2N1cnJlbmNlcyBvZiBkdXBsaWNhdGUKLSAgICAvLyB0
cmlnZ2VycyBpbiB0aGUgbGF5ZXIgbGlzdCBnZXQgaWdub3JlZCkuCi0gICAgaWYgKG1fYW5pbWF0
aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChjb25zdCBUcmFuc2l0aW9uKiB0cmFuc2l0
aW9uID0gY3VycmVudFRyYW5zaXRpb25zOyB0cmFuc2l0aW9uOyB0cmFuc2l0aW9uID0gdHJhbnNp
dGlvbi0+bmV4dCgpKSB7Ci0gICAgICAgICAgICBpbnQgcHJvcGVydHkgPSB0cmFuc2l0aW9uLT5w
cm9wZXJ0eSgpOwotICAgICAgICAgICAgaW50IGR1cmF0aW9uID0gdHJhbnNpdGlvbi0+ZHVyYXRp
b24oKTsKLSAgICAgICAgICAgIGludCByZXBlYXRDb3VudCA9IHRyYW5zaXRpb24tPnJlcGVhdENv
dW50KCk7Ci0gICAgICAgICAgICBpZiAocHJvcGVydHkgJiYgZHVyYXRpb24gJiYgcmVwZWF0Q291
bnQgJiYgIW1fYW5pbWF0aW9ucy5jb250YWlucyhwcm9wZXJ0eSkpIHsKLSAgICAgICAgICAgICAg
ICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbmV3IEltcGxpY2l0QW5pbWF0aW9uKHRy
YW5zaXRpb24pOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9ucy5zZXQocHJvcGVydHksIGFu
aW1hdGlvbik7CisgICAgUmVuZGVyU3R5bGUqIHJlc3VsdFN0eWxlID0gMDsKKyAgICAKKyAgICAv
LyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1cnJlbnRT
dHlsZSAob24gc3RhcnR1cCkKKyAgICB1cGRhdGVUcmFuc2l0aW9ucyhyZW5kZXJlciwgY3VycmVu
dFN0eWxlLCB0YXJnZXRTdHlsZSk7CisgICAgCisgICAgaWYgKGN1cnJlbnRTdHlsZSkgeworICAg
ICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRo
ZW0ga25vdyBhYm91dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KKyAgICAgICAg
Ly8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCisgICAgICAgIENT
U1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlv
bnMuZW5kKCk7CisgICAgICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewor
ICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qICBhbmltID0gaXQtPnNlY29uZDsKKyAgICAg
ICAgICAgIGlmIChhbmltKSB7CisgICAgICAgICAgICAgICAgYW5pbS0+YW5pbWF0ZSh0aGlzLCBy
ZW5kZXJlciwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSwgcmVzdWx0U3R5bGUpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQotCisgICAgCisgICAgdXBkYXRlS2V5ZnJhbWVBbmlt
YXRpb25zKHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICAKICAgICAv
LyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93
IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQogICAgIC8vIHRvIGZpbGwg
aW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgotICAgIFJlbmRlclN0eWxlKiByZXN1
bHQgPSAwOwotICAgIEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBl
bmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPGludCwgSW1wbGljaXRB
bmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2FuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQotICAgICAgICBpdC0+c2Vjb25kLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJy
ZW50U3R5bGUsIHRhcmdldFN0eWxlLCByZXN1bHQpOworICAgIFZlY3RvcjxLZXlmcmFtZUFuaW1h
dGlvbio+Ojpjb25zdF9pdGVyYXRvciBrZmVuZCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmVuZCgp
OworICAgIGZvciAoVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0ga2ZlbmQ7ICsraXQpIHsKKyAg
ICAgICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW0gPSAqaXQ7CisgICAgICAgIGlmIChhbmltKSB7
CisgICAgICAgICAgICBhbmltLT5hbmltYXRlKHRoaXMsIHJlbmRlcmVyLCBjdXJyZW50U3R5bGUs
IHRhcmdldFN0eWxlLCByZXN1bHRTdHlsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
cmV0dXJuIHJlc3VsdFN0eWxlID8gcmVzdWx0U3R5bGUgOiB0YXJnZXRTdHlsZTsKK30KIAotICAg
IGlmIChyZXN1bHQpCi0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICByZXR1cm4gdGFyZ2V0
U3R5bGU7CisvLyAiYW5pbWF0aW5nIiBtZWFucyB0aGF0IHNvbWV0aGluZyBpcyBydW5uaW5nIHRo
YXQgcmVxdWlyZXMgdGhlIHRpbWVyIHRvIGtlZXAgZmlyaW5nCisvLyAoZS5nLiBhIHNvZnR3YXJl
IGFuaW1hdGlvbikKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRpbmcoYm9vbCBp
bkFuaW1hdGluZykKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVy
YXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFu
c2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24g
PSBpdC0+c2Vjb25kOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRBbmltYXRpbmcoaW5BbmltYXRp
bmcpOworICAgIH0gICAgCisgICAgCisgICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNv
bnN0X2l0ZXJhdG9yIGtmZW5kID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZy
YW1lQW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBrZmVuZDsgKytpdCkgeworICAgICAgICBLZXlm
cmFtZUFuaW1hdGlvbiogYW5pbSA9ICppdDsKKyAgICAgICAgYW5pbS0+c2V0QW5pbWF0aW5nKGlu
QW5pbWF0aW5nKTsKKyAgICB9CiB9CiAKLWJvb2wgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb246
OmFuaW1hdGluZygpIGNvbnN0Citib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0aW5nKCkK
IHsKLSAgICBIYXNoTWFwPGludCwgSW1wbGljaXRBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3Ig
ZW5kID0gbV9hbmltYXRpb25zLmVuZCgpOwotICAgIGZvciAoSGFzaE1hcDxpbnQsIEltcGxpY2l0
QW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKLSAgICAgICAgaWYgKCFpdC0+c2Vjb25kLT5maW5pc2hlZCgpKQorICAg
IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNp
dGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9p
dGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiAgdHJhbnNpdGlvbiA9IGl0LT5zZWNvbmQ7CisgICAg
ICAgIGlmICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPmFuaW1hdGluZygpICYmIHRyYW5zaXRp
b24tPnJ1bm5pbmcoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0gICAgCisgICAg
CisgICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVBbmlt
YXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBrZmVuZDsgKytpdCkgeworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
ICppdDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+cnVubmluZygpICYmIGFuaW0tPmFuaW1h
dGluZygpICYmIGFuaW0tPmFjdGl2ZSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlv
bjo6cmVzZXQoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpyZXNldFRyYW5zaXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgSGFzaE1h
cDxpbnQsIEltcGxpY2l0QW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fYW5pbWF0
aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8aW50LCBJbXBsaWNpdEFuaW1hdGlvbio+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fYW5pbWF0aW9ucy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIGl0LT5zZWNvbmQtPnJlc2V0KHJlbmRlcmVyLCAwLCAwKTsKKyAgICBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVu
ZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogIHRyYW5zaXRpb24gPSBpdC0+c2Vjb25kOworICAgICAgICB0cmFu
c2l0aW9uLT5yZXNldChyZW5kZXJlcik7CisgICAgICAgIGRlbGV0ZSB0cmFuc2l0aW9uOworICAg
IH0KKyAgICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7CiB9CiAKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0
aW9uOjpyZXNldEFuaW1hdGlvbnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBWZWN0
b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1l
QW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpj
b25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtm
ZW5kOyArK2l0KSB7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAg
ICAgICBkZWxldGUgYW5pbTsKKyAgICB9CisgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIo
KTsKK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFudXBGaW5pc2hlZEFuaW1hdGlv
bnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sKKyAgICBpZiAoc3VzcGVuZGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBSZXNldCB0cmFuc2l0aW9ucworICAgIENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5k
KCk7CisgICAgZm9yIChDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIElt
cGxpY2l0QW5pbWF0aW9uKiBhbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKCFhbmltKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChhbmltLT5wb3N0YWN0aXZlKCkgJiYg
IWFuaW0tPndhaXRpbmdGb3JFbmRFdmVudCgpKSB7CisgICAgICAgICAgICBhbmltLT51cGRhdGVT
dGF0ZU1hY2hpbmUoYW5pbS0+U1RBVEVfSU5QVVRfTUFLRV9ORVcsIC0xKTsKKyAgICAgICAgICAg
IGFuaW0tPnJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBN
YWtlIGEgbGlzdCBvZiBhbmltYXRpb25zIHRvIGJlIGRlbGV0ZWQKKyAgICBWZWN0b3I8aW50PiBm
aW5pc2hlZEFuaW1hdGlvbnM7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5zaXplKCk7ICsraSkgeworICAgICAgICBLZXlmcmFtZUFuaW1h
dGlvbiogYW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zW2ldOworICAgICAgICBpZiAoIWFuaW0p
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGFuaW0tPnBvc3RhY3RpdmUoKSAm
JiAhYW5pbS0+d2FpdGluZ0ZvckVuZEV2ZW50KCkpCisgICAgICAgICAgICBmaW5pc2hlZEFuaW1h
dGlvbnMuYXBwZW5kKGkpOworICAgIH0KKyAgICAKKyAgICAvLyBEZWxldGUgdGhlbQorICAgIGZv
ciAoVmVjdG9yPGludD46Oml0ZXJhdG9yIGl0ID0gZmluaXNoZWRBbmltYXRpb25zLmJlZ2luKCk7
IGl0ICE9IGZpbmlzaGVkQW5pbWF0aW9ucy5lbmQoKTsgKytpdCkgeworICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9uc1sqaXRdLT5yZXNldChyZW5kZXJlcik7CisgICAgICAgIGRlbGV0ZSBtX2tl
eWZyYW1lQW5pbWF0aW9uc1sqaXRdOworICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5yZW1v
dmUoKml0KTsKKyAgICB9Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRBbmltYXRp
b25TdGFydFRpbWUoZG91YmxlIHQpCit7CisgICAgLy8gU2V0IHN0YXJ0IHRpbWUgb24gYWxsIGFu
aW1hdGlvbnMgd2FpdGluZyBmb3IgaXQKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6
Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBm
b3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT53
YWl0aW5nRm9yU3RhcnRUaW1lKCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5QVVRfU1RBUlRfVElNRV9TRVQsIHQpOworICAgIH0K
K30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnNldFRyYW5zaXRpb25TdGFydFRpbWUoaW50
IHByb3BlcnR5LCBkb3VibGUgdCkKK3sKKyAgICAvLyBTZXQgc3RhcnQgdGltZSBmb3IgZ2l2ZW4g
cHJvcGVydHkgdHJhbnNpdGlvbgorICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6OmNvbnN0
X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBhbmltID0g
aXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0YXJ0VGlt
ZSgpICYmIAorICAgICAgICAgICAgKGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IHByb3Bl
cnR5IHx8IGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IGNBbmltYXRlQWxsKSkKKyAgICAg
ICAgICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFURV9JTlBV
VF9TVEFSVF9USU1FX1NFVCwgdCk7CisgICAgfQorfQorCit2b2lkIENvbXBvc2l0ZUFuaW1hdGlv
bjo6c3VzcGVuZEFuaW1hdGlvbnMoKQoreworICAgIGlmIChtX3N1c3BlbmRlZCkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fc3VzcGVuZGVkID0gdHJ1ZTsKKyAgICAKKyAgICBWZWN0b3I8
S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5p
bWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25z
dF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5k
OyArK2l0KSB7CisgICAgICAgIEtleWZyYW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAg
ICBpZiAoYW5pbSkgeworICAgICAgICAgICAgYW5pbS0+dXBkYXRlUGxheVN0YXRlKGZhbHNlKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkpIHsK
KyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShmYWxzZSk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVBbmltYXRpb25zKCkKK3sK
KyAgICBpZiAoIW1fc3VzcGVuZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9zdXNw
ZW5kZWQgPSBmYWxzZTsKKyAgICAKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29u
c3RfaXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3Ig
KFZlY3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5wbGF5
U3RhdGVQbGF5aW5nKCkpIHsKKyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZSh0cnVl
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFw
Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NT
UHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25z
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiog
YW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0tPmhhc1N0eWxlKCkp
IHsKKyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVBsYXlTdGF0ZSh0cnVlKTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmlt
YXRpb25zKGludCBwcm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5p
bSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIChhbmltLT50cmFuc2l0aW9uUHJv
cGVydHkoKSA9PSBwcm9wZXJ0eSB8fCBhbmltLT50cmFuc2l0aW9uUHJvcGVydHkoKSA9PSBjQW5p
bWF0ZUFsbCkpCisgICAgICAgICAgICBhbmltLT5zZXRPdmVycmlkZGVuKHRydWUpOworICAgIH0K
K30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFu
aW1hdGlvbnMoaW50IHByb3BlcnR5KQoreworICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA6
OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IG1fdHJhbnNpdGlvbnMuZW5kKCk7CisgICAgZm9yIChDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdHJhbnNpdGlvbnMu
YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBh
bmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKGFuaW0gJiYgKGFuaW0tPnRyYW5zaXRpb25Q
cm9wZXJ0eSgpID09IHByb3BlcnR5IHx8IGFuaW0tPnRyYW5zaXRpb25Qcm9wZXJ0eSgpID09IGNB
bmltYXRlQWxsKSkKKyAgICAgICAgICAgIGFuaW0tPnNldE92ZXJyaWRkZW4oZmFsc2UpOworICAg
IH0KK30KKwordm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN0eWxlSXNTZXR1cCgpCit7CisgICAg
aWYgKG1fbnVtU3R5bGVJc1NldHVwV2FpdGVycyA9PSAwKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPEtleWZyYW1lQW5pbWF0aW9uKj46OmNvbnN0X2l0ZXJhdG9yIGtmZW5kID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8S2V5ZnJhbWVBbmlt
YXRpb24qPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5iZWdpbigp
OyBpdCAhPSBrZmVuZDsgKytpdCkgeworICAgICAgICBLZXlmcmFtZUFuaW1hdGlvbiogYW5pbSA9
ICppdDsKKyAgICAgICAgaWYgKGFuaW0gJiYgYW5pbS0+d2FpdGluZ0ZvclN0eWxlU2V0dXAoKSkK
KyAgICAgICAgICAgIGFuaW0tPnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25CYXNlOjpTVEFU
RV9JTlBVVF9TVFlMRV9TRVRVUCwgLTEpOworICAgIH0KKyAgICAKKyAgICBDU1NQcm9wZXJ0eVRy
YW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQgPSBtX3RyYW5zaXRpb25zLmVuZCgpOwor
ICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBJbXBsaWNp
dEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7CisgICAgICAgIGlmIChhbmltICYmIGFuaW0t
PndhaXRpbmdGb3JTdHlsZVNldHVwKCkpCisgICAgICAgICAgICBhbmltLT51cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uQmFzZTo6U1RBVEVfSU5QVVRfU1RZTEVfU0VUVVAsIC0xKTsKKyAgICB9
Cit9CisKK2Jvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KGludCBw
cm9wZXJ0eSkgY29uc3QKK3sKKyAgICBWZWN0b3I8S2V5ZnJhbWVBbmltYXRpb24qPjo6Y29uc3Rf
aXRlcmF0b3Iga2ZlbmQgPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFZl
Y3RvcjxLZXlmcmFtZUFuaW1hdGlvbio+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVB
bmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGtmZW5kOyArK2l0KSB7CisgICAgICAgIEtleWZyYW1l
QW5pbWF0aW9uKiBhbmltID0gKml0OworICAgICAgICBpZiAoYW5pbSAmJiBhbmltLT5pc0FuaW1h
dGluZ1Byb3BlcnR5KHByb3BlcnR5KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0K
KyAgICAKKyAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwOjpjb25zdF9pdGVyYXRvciBlbmQg
PSBtX3RyYW5zaXRpb25zLmVuZCgpOworICAgIGZvciAoQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RyYW5zaXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgeworICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogYW5pbSA9IGl0LT5zZWNvbmQ7Cisg
ICAgICAgIGlmIChhbmltICYmIGFuaW0tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHkpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwor
I3ByYWdtYSBtYXJrIC0KKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQmFzZSB7CitwdWJsaWM6Cisg
ICAgUHJvcGVydHlXcmFwcGVyQmFzZShpbnQgcHJvcCkKKyAgICA6IG1fcHJvcChwcm9wKQorICAg
IHsgfQorICAgIHZpcnR1YWwgflByb3BlcnR5V3JhcHBlckJhc2UoKSB7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3Q9MDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoUmVuZGVyU3R5bGUqIGRzdCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZykgY29uc3Q9
MDsKKyAgICAKKyAgICBpbnQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgaW50IG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckJh
c2UgeworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckdldHRlcihpbnQgcHJvcCwgVCAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJCYXNlKHBy
b3ApCisgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeyB9CisgICAgCisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0
dGVyKSgpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBUIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcm9w
ZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKK3B1YmxpYzoK
KyAgICBQcm9wZXJ0eVdyYXBwZXIoaW50IHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgOiBQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8VD4ocHJvcCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAg
IHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25z
dAorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoKGEtPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxUPjo6bV9nZXR0ZXIpKCksIHByb2cpKTsKKyAgICB9CisgICAgCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdy
YXBwZXJTaGFkb3cgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFNoYWRvd0RhdGEqPiB7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KGludCBwcm9wLCBTaGFkb3dEYXRh
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShTaGFkb3dEYXRhKiwgYm9vbCkpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8U2hh
ZG93RGF0YSo+KHByb3AsIGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIFNoYWRvd0RhdGEqIHNoYWRv
d2EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFkb3dEYXRhKiBzaGFkb3diID0gKGIt
PiptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIGlmICghc2hhZG93YSAmJiBzaGFkb3di
IHx8IHNoYWRvd2EgJiYgIXNoYWRvd2IpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGlmIChzaGFkb3dhICYmIHNoYWRvd2IgJiYgKCpzaGFkb3dhICE9ICpzaGFkb3diKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsK
KyAgICAgICAgU2hhZG93RGF0YSogc2hhZG93YSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAg
IFNoYWRvd0RhdGEqIHNoYWRvd2IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBTaGFkb3dE
YXRhIGRlZmF1bHRTaGFkb3dEYXRhOworICAgICAgICAKKyAgICAgICAgaWYgKCFzaGFkb3dhKQor
ICAgICAgICAgICAgc2hhZG93YSA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAgICAgaWYgKCFz
aGFkb3diKQorICAgICAgICAgICAgc2hhZG93YiA9ICZkZWZhdWx0U2hhZG93RGF0YTsKKyAgICAg
ICAgCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKHNoYWRvd2EsIHNoYWRvd2Is
IHByb2cpLCBmYWxzZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIChSZW5kZXJT
dHlsZTo6Km1fc2V0dGVyKShTaGFkb3dEYXRhKiwgYm9vbCk7Cit9OworCitjbGFzcyBQcm9wZXJ0
eVdyYXBwZXJJbnRTaXplIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxJbnRTaXplPiB7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVySW50U2l6ZShpbnQgcHJvcCwgSW50U2l6ZSAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShjb25zdCBJbnRTaXplJikpCisgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8SW50U2l6ZT4o
cHJvcCwgZ2V0dGVyKQorICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsgfQorICAgIAorICAg
IHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdAorICAgIHsKKyAgICAgICAgSW50U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6ZWIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIChzaXplYSA9PSBzaXplYik7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAgICAg
SW50U2l6ZSBzaXplYSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIEludFNpemUgc2l6ZWIg
PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhzaXplYSwgc2l6ZWIsIHByb2cpKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IEludFNpemUmKTsK
K307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIFBy
b3BlcnR5V3JhcHBlckJhc2UgeworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yKGludCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICA6
IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAs
IG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0KKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7
CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENv
bG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAoIWZyb21Db2xvci5p
c1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBp
ZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7
CisgICAgICAgIAorICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVuZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAg
IHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAg
Q29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmICghZnJvbUNvbG9y
LmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAg
IGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3Io
KTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9y
LCBwcm9nKSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCBDb2xvciYgKFJlbmRl
clN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoY29uc3QgQ29sb3ImKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZE5vbkNvbnN0Q29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyQmFzZSB7CitwdWJsaWM6
CisgICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkTm9uQ29uc3RDb2xvcihpbnQgcHJvcCwg
Q29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICA6IFByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkK
KyAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7IH0K
KyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9t
Q29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4g
ZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBibGVu
ZChSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9nKSBjb25zdAorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9y
ID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZy
b21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9nKSk7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBDb2xvciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKyAgICAKKyAg
ICAKIGNsYXNzIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlIHsKIHB1YmxpYzoKICAgICBBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSopOwogICAgIH5BbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSgpOwotCi0gICAgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGdldChSZW5kZXJP
YmplY3QqKTsKKyAgICAKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFjY2Vzc0NvbXBvc2l0ZUFu
aW1hdGlvbihSZW5kZXJPYmplY3QqKTsKICAgICBib29sIGNsZWFyKFJlbmRlck9iamVjdCopOwog
ICAgIAotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZT4qKTsKLSAgICB2b2lkIHVwZGF0ZVRpbWVyKCk7Ci0KLSAgICBib29sIGhhc0ltcGxpY2l0QW5p
bWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2FuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KKyAg
ICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU+Kik7CisgICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lcigpOworICAgIAorICAgIHZvaWQg
dXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hlckZpcmVkKFRpbWVyPEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiopOworICAgIHZvaWQgc3RhcnRVcGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyKCk7Cisg
ICAgCisgICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fY29tcG9zaXRl
QW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KKyAgICAKKyAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KERvY3VtZW50KiBkb2N1bWVudCk7CisgICAgdm9pZCByZXN1bWVBbmltYXRpb25zKERvY3VtZW50
KiBkb2N1bWVudCk7CisgICAgCisgICAgdm9pZCBjbGVhbnVwRmluaXNoZWRBbmltYXRpb25zKCk7
CisgICAgCisgICAgdm9pZCBzdHlsZUlzU2V0dXAoKTsKKyAgICAKKyAgICBib29sIGlzQW5pbWF0
aW5nUHJvcGVydHlPblJlbmRlcmVyKFJlbmRlck9iamVjdCogb2JqLCBpbnQgcHJvcGVydHkpIGNv
bnN0OworICAgIAorICAgIHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVhbChpbnQgcHJvcCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsKKyAgICAKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMK
KyAgICBzdGF0aWMgYm9vbCBibGVuZFByb3BlcnRpZXMoaW50IHByb3AsIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2cpOworICAgIAorICAgIHZvaWQgc2V0V2FpdGluZ0ZvclN0eWxlSXNTZXR1cChib29sIHdhaXRp
bmcpIHsgaWYgKHdhaXRpbmcpIG1fbnVtU3R5bGVJc1NldHVwV2FpdGVycysrOyBlbHNlIG1fbnVt
U3R5bGVJc1NldHVwV2FpdGVycy0tOyB9CisgICAgCiBwcml2YXRlOgotICAgIEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPiBtX2FuaW1hdGlvbnM7Ci0g
ICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+IG1fdGltZXI7CisgICAgc3RhdGlj
IHZvaWQgZW5zdXJlUHJvcGVydHlNYXAoKTsKKyAgICAKKyAgICB0eXBlZGVmIEhhc2hNYXA8UmVu
ZGVyT2JqZWN0KiwgQ29tcG9zaXRlQW5pbWF0aW9uKj4gUmVuZGVyT2JqZWN0QW5pbWF0aW9uTWFw
OworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcCBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnM7CisgICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+IG1fYW5pbWF0aW9uVGlt
ZXI7CisgICAgVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+IG1fdXBkYXRlUmVuZGVy
aW5nRGlzcGF0Y2hlcjsKICAgICBGcmFtZSogbV9mcmFtZTsKKyAgICB1aW50MzJfdCBtX251bVN0
eWxlSXNTZXR1cFdhaXRlcnM7CisgICAgCisgICAgc3RhdGljIFZlY3RvcjxQcm9wZXJ0eVdyYXBw
ZXJCYXNlKj4qIGdfcHJvcGVydHlXcmFwcGVyczsKKyAgICBzdGF0aWMgaW50IGdfcHJvcGVydHlX
cmFwcGVyTWFwW251bUNTU1Byb3BlcnRpZXNdOwogfTsKIAorI3ByYWdtYSBtYXJrIC0KKworVmVj
dG9yPFByb3BlcnR5V3JhcHBlckJhc2UqPiogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omdf
cHJvcGVydHlXcmFwcGVycyA9IDA7CitpbnQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Omdf
cHJvcGVydHlXcmFwcGVyTWFwW107CisKIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSogZnJhbWUpCi0gICAgOiBtX3RpbWVyKHRoaXMs
ICZBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dGltZXJGaXJlZCkKLSAgICAsIG1fZnJhbWUo
ZnJhbWUpCis6IG1fYW5pbWF0aW9uVGltZXIodGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjphbmltYXRpb25UaW1lckZpcmVkKQorLCBtX3VwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIo
dGhpcywgJkFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVSZW5kZXJpbmdEaXNwYXRj
aGVyRmlyZWQpCissIG1fZnJhbWUoZnJhbWUpCissIG1fbnVtU3R5bGVJc1NldHVwV2FpdGVycygw
KQogeworICAgIGVuc3VyZVByb3BlcnR5TWFwKCk7CiB9CiAKIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjp+QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoKQogewotICAgIGRlbGV0ZUFsbFZh
bHVlcyhtX2FuaW1hdGlvbnMpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMpOwogfQogCi1Db21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmdldChSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQorLy8gc3RhdGljCit2b2lk
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVQcm9wZXJ0eU1hcCgpCiB7Ci0gICAg
Q29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fYW5pbWF0aW9ucy5nZXQo
cmVuZGVyZXIpOwotICAgIGlmICghYW5pbWF0aW9uICYmIHJlbmRlcmVyLT5zdHlsZSgpLT50cmFu
c2l0aW9ucygpKSB7Ci0gICAgICAgIGFuaW1hdGlvbiA9IG5ldyBDb21wb3NpdGVJbXBsaWNpdEFu
aW1hdGlvbigpOwotICAgICAgICBtX2FuaW1hdGlvbnMuc2V0KHJlbmRlcmVyLCBhbmltYXRpb24p
OworICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBz
aG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQW5pbWF0aW9uQ29u
dHJvbGxlciBpcyBkZXN0cm95ZWQ/CisgICAgaWYgKGdfcHJvcGVydHlXcmFwcGVycyA9PSAwKSB7
CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycyA9IG5ldyBWZWN0b3I8UHJvcGVydHlXcmFwcGVy
QmFzZSo+KCk7CisgICAgICAgIAorICAgICAgICAvLyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0
eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcworICAgICAgICBnX3By
b3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJv
cGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TGVmdCkpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlSaWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxl
OjpzZXRSaWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6dG9wLCAm
UmVuZGVyU3R5bGU6OnNldFRvcCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJT
dHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5bGU6OnNldEJvdHRvbSkpOworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVy
dHlXaWR0aCwgJlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCkpOwor
ICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExl
bmd0aD4oQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNldEhlaWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcg
UHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0
aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
TGVmdFdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwg
JlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJp
Z2h0V2lkdGgpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJl
bmRlclN0eWxlOjpib3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0
aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdp
ZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdy
YXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2lu
TGVmdCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1h
cmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1h
cmdpblJpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjpt
YXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSk7CisgICAgICAgIGdfcHJvcGVy
dHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0
eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6
c2V0TWFyZ2luQm90dG9tKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5l
dyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSk7CisgICAg
ICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
PihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZS
ZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVy
cy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdU
b3AsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9w
KSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoPihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6cGFkZGlu
Z0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSk7CisgICAgICAgIGdfcHJv
cGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNp
dHkpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5h
cHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBDb2xvciY+KENTU1Byb3BlcnR5QmFja2dy
b3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRCYWNrZ3JvdW5kQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlXZWJraXRDb2x1
bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldENvbHVtblJ1bGVXaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdENvbHVtbkdhcCwg
JlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSk7Cisg
ICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5z
aWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5V2Via2l0Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6
Y29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uQ291bnQpKTsKKyAgICAgICAgZ19w
cm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlXZWJraXRDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRl
clN0eWxlOjpzZXRDb2x1bW5XaWR0aCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFw
cGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZSZW5kZXJT
dHlsZTo6ekluZGV4LCAmUmVuZGVyU3R5bGU6OnNldFpJbmRleCkpOworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPExlbmd0aD4oQ1NTUHJvcGVy
dHlMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0
TGluZUhlaWdodCkpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJv
cGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6
Om91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZU9mZnNldCkpOworICAgICAg
ICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVk
IHNob3J0PihDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoKSk7CisgICAgICAgIGdfcHJvcGVydHlX
cmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eUxldHRl
clNwYWNpbmcsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRM
ZXR0ZXJTcGFjaW5nKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6
OndvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5nKSk7CisgICAgICAgIGdf
cHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5V2Via2l0VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6
OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pKTsKKyAgICAgICAgZ19wcm9w
ZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3Bl
cnR5V2Via2l0VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5Y
LCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpKTsKKyAgICAgICAgZ19wcm9wZXJ0
eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlcjxMZW5ndGg+KENTU1Byb3BlcnR5
V2Via2l0VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAm
UmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblkpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdy
YXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3JhcHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cykpOworICAgICAgICBnX3Byb3Bl
cnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVySW50U2l6ZShDU1NQcm9wZXJ0
eVdlYmtpdEJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFJpZ2h0
UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKSk7CisgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQcm9wZXJ0eVdyYXBwZXJJbnRTaXplKENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRp
dXMpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3BlcnR5V3Jh
cHBlckludFNpemUoQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJl
bmRlclN0eWxlOjpib3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJCb3R0b21SaWdodFJhZGl1cykpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVu
ZChuZXcgUHJvcGVydHlXcmFwcGVyPEVWaXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZpc2liaWxpdHks
ICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNpYmlsaXR5KSk7
CisgICAgICAgIC8vIEZJWE1FOiB6b29tIG1pc3NpbmcKKyAgICAgICAgCisgICAgICAgIC8vIEZJ
WE1FOiB0aGVzZSBtaWdodCBiZSBpbnZhbGlkIGNvbG9ycywgbmVlZCB0byBjaGVjayBmb3IgdGhh
dAorICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVy
TWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRDb2x1bW5SdWxlQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xv
cikpOworICAgICAgICBnX3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFw
cGVyTWF5YmVJbnZhbGlkTm9uQ29uc3RDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dFN0cm9rZUNvbG9yKSk7CisgICAgICAgIGdfcHJvcGVydHlXcmFwcGVycy0+YXBwZW5kKG5ldyBQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWROb25Db25zdENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFRleHRGaWxsQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVm
dENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJMZWZ0Q29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRD
b2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlclJpZ2h0Q29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29s
b3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFByb3Bl
cnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3Is
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
Qm90dG9tQ29sb3IpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQobmV3IFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yLCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lQ29sb3Ip
KTsKKyAgICAgICAgCisgICAgICAgIC8vIFRoZXNlIGFyZSBmb3Igc2hhZG93cworICAgICAgICBn
X3Byb3BlcnR5V3JhcHBlcnMtPmFwcGVuZChuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1By
b3BlcnR5V2Via2l0Qm94U2hhZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0
eWxlOjpzZXRCb3hTaGFkb3cpKTsKKyAgICAgICAgZ19wcm9wZXJ0eVdyYXBwZXJzLT5hcHBlbmQo
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJT
dHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSk7CisgICAgICAg
IAorICAgICAgICAvLyBNYWtlIHN1cmUgdW51c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpIG51bUNTU1Byb3Bl
cnRpZXM7ICsraSkKKyAgICAgICAgICAgIGdfcHJvcGVydHlXcmFwcGVyTWFwW2ldID0gLTE7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3QgbiA9IGdfcHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47ICsraSkKKyAgICAgICAgICAg
IGdfcHJvcGVydHlXcmFwcGVyTWFwWygqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXS0+cHJvcGVydHko
KV0gPSBpOwogICAgIH0KK30KKworLy8gc3RhdGljCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpwcm9wZXJ0aWVzRXF1YWwoaW50IHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikKK3sKKyAgICBpZiAocHJvcCA9PSBjQW5pbWF0ZUFsbCkgewor
ICAgICAgICBzaXplX3QgbiA9IGdfcHJvcGVydHlXcmFwcGVycy0+c2l6ZSgpOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICAgICAgaWYgKCEo
KmdfcHJvcGVydHlXcmFwcGVycylbaV0tPmVxdWFscyhhLCBiKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAocHJvcCA+PSAwICYm
IHByb3AgPCBudW1DU1NQcm9wZXJ0aWVzKSB7CisgICAgICAgIGludCBpID0gZ19wcm9wZXJ0eVdy
YXBwZXJNYXBbcHJvcF07CisgICAgICAgIHJldHVybiAoaSA+PSAwKSA/ICgqZ19wcm9wZXJ0eVdy
YXBwZXJzKVtpXS0+ZXF1YWxzKGEsIGIpIDogdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIHN0YXRpYyAtIHJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdh
cmUgYW5pbWF0aW9uIHRpbWVycworYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Ymxl
bmRQcm9wZXJ0aWVzKGludCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9nKQoreworICAgIGlmIChwcm9w
ID09IGNBbmltYXRlQWxsKSB7CisgICAgICAgIGJvb2wgbmVlZHNUaW1lciA9IGZhbHNlOworICAg
ICAgICAKKyAgICAgICAgc2l6ZV90IG4gPSBnX3Byb3BlcnR5V3JhcHBlcnMtPnNpemUoKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBuOyArK2kpIHsKKyAgICAgICAgICAg
IFByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSAoKmdfcHJvcGVydHlXcmFwcGVycylbaV07
CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkgeworICAgICAgICAgICAg
ICAgIHdyYXBwZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICAgICAgbmVl
ZHNUaW1lciA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG5lZWRzVGltZXI7CisgICAgfQorICAgIAorICAgIGlmIChwcm9wID49IDAgJiYgcHJvcCA8IG51
bUNTU1Byb3BlcnRpZXMpIHsKKyAgICAgICAgaW50IGkgPSBnX3Byb3BlcnR5V3JhcHBlck1hcFtw
cm9wXTsKKyAgICAgICAgaWYgKGkgPj0gMCkgeworICAgICAgICAgICAgUHJvcGVydHlXcmFwcGVy
QmFzZSogd3JhcHBlciA9ICgqZ19wcm9wZXJ0eVdyYXBwZXJzKVtpXTsKKyAgICAgICAgICAgIHdy
YXBwZXItPmJsZW5kKGRzdCwgYSwgYiwgcHJvZyk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NvbXBvc2l0
ZUFuaW1hdGlvbiogQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFjY2Vzc0NvbXBvc2l0ZUFu
aW1hdGlvbihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQoreworICAgIENvbXBvc2l0ZUFuaW1hdGlv
biogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldChyZW5kZXJlcik7CisgICAg
aWYgKCFhbmltYXRpb24pIHsKKyAgICAgICAgYW5pbWF0aW9uID0gbmV3IENvbXBvc2l0ZUFuaW1h
dGlvbighcmVuZGVyZXItPmRvY3VtZW50KCktPmxvYWRDb21wbGV0ZSgpLCB0aGlzKTsKKyAgICAg
ICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnNldChyZW5kZXJlciwgYW5pbWF0aW9uKTsKKyAgICB9
CiAgICAgcmV0dXJuIGFuaW1hdGlvbjsKIH0KIAogYm9vbCBBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6Y2xlYXIoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKIHsKLSAgICBDb21wb3NpdGVJbXBs
aWNpdEFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9hbmltYXRpb25zLnRha2UocmVuZGVyZXIpOwor
ICAgIC8vIFJldHVybiBmYWxzZSBpZiB3ZSBkaWRuJ3QgZG8gYW55dGhpbmcgT1Igd2UgYXJlIHN1
c3BlbmRlZCAoc28gd2UgZG9uJ3QgdHJ5IHRvCisgICAgLy8gZG8gYSBzZXRDaGFuZ2VkKCkgd2hl
biBzdXNwZW5kZWQKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIGFuaW1hdGlvbiA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy50YWtlKHJlbmRlcmVyKTsKICAgICBpZiAoIWFuaW1hdGlvbikKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGFuaW1hdGlvbi0+cmVzZXQocmVuZGVyZXIpOworICAgIGFu
aW1hdGlvbi0+cmVzZXRUcmFuc2l0aW9ucyhyZW5kZXJlcik7CisgICAgYm9vbCB3YXNTdXNwZW5k
ZWQgPSBhbmltYXRpb24tPnN1c3BlbmRlZCgpOwogICAgIGRlbGV0ZSBhbmltYXRpb247Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuICF3YXNTdXNwZW5kZWQ7CiB9CiAKLXZvaWQgQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVRpbWVyKCkKK3ZvaWQgQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmNsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoKQogeworICAgIFJlbmRlck9i
amVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAg
ICAgICBpdCAhPSBhbmltYXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCog
cmVuZGVyZXIgPSBpdC0+Zmlyc3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFu
aW0gPSBpdC0+c2Vjb25kOworICAgICAgICBjb21wQW5pbS0+Y2xlYW51cEZpbmlzaGVkQW5pbWF0
aW9ucyhyZW5kZXJlcik7CisgICAgfQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpzdHlsZUlzU2V0dXAoKQoreworICAgIGlmIChtX251bVN0eWxlSXNTZXR1cFdhaXRlcnMg
PT0gMCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1h
cDo6Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmlt
YXRpb25zRW5kOyArK2l0KSB7CisgICAgICAgIGl0LT5zZWNvbmQtPnN0eWxlSXNTZXR1cCgpOwor
ICAgIH0KK30KKwordm9pZCBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0
aW9uVGltZXIoKQorewogICAgIGJvb2wgYW5pbWF0aW5nID0gZmFsc2U7Ci0gICAgSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBDb21wb3NpdGVJbXBsaWNpdEFuaW1hdGlvbio+OjppdGVyYXRvciBlbmQg
PSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoTWFwPFJlbmRlck9iamVjdCosIENv
bXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJl
Z2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnNlY29uZC0+YW5pbWF0
aW5nKCkpIHsKKyAgICAKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJh
dG9yIGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9y
IChSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytp
dCkgeworICAgICAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsK
KyAgICAgICAgaWYgKCFjb21wQW5pbS0+c3VzcGVuZGVkKCkgJiYgY29tcEFuaW0tPmFuaW1hdGlu
ZygpKSB7CiAgICAgICAgICAgICBhbmltYXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKGFuaW1hdGluZykgewotICAgICAgICBp
ZiAoIW1fdGltZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgICAgIG1fdGltZXIuc3RhcnRSZXBlYXRp
bmcoY0FuaW1hdGlvblRpbWVyRGVsYXkpOwotICAgIH0gZWxzZSBpZiAobV90aW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICBtX3RpbWVyLnN0b3AoKTsKKyAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRp
bWVyLmlzQWN0aXZlKCkpCisgICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0
aW5nKGNBbmltYXRpb25UaW1lckRlbGF5KTsKKyAgICB9IGVsc2UgaWYgKG1fYW5pbWF0aW9uVGlt
ZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7CiB9CiAKLXZv
aWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU+KiB0aW1lcikKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXJGaXJlZChUaW1lcjxBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZT4qKQogeworICAgIGlmIChtX2ZyYW1lICYmIG1fZnJhbWUtPmRvY3VtZW50KCkp
IHsKKyAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CisgICAg
fQorfQorCit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFVwZGF0ZVJlbmRl
cmluZ0Rpc3BhdGNoZXIoKQoreworICAgIGlmICghbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVy
LmlzQWN0aXZlKCkpIHsKKyAgICAgICAgbV91cGRhdGVSZW5kZXJpbmdEaXNwYXRjaGVyLnN0YXJ0
T25lU2hvdCgwKTsKKyAgICB9Cit9CisKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGlvblRpbWVyRmlyZWQoVGltZXI8QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KiB0
aW1lcikKK3sKKyAgICAvL2NsZWFudXBGaW5pc2hlZEFuaW1hdGlvbnMoKTsKKyAgICAKICAgICAv
LyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hhbmdlZCBvbiBh
bGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRvIGFuIGltbWVk
aWF0ZQogICAgIC8vIHVwZGF0ZVJlbmRlcmluZy4gIEl0IHdpbGwgdGhlbiBjYWxsIGJhY2sgdG8g
dXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCiAgICAgYm9vbCBhbmltYXRpbmcgPSBmYWxzZTsKLSAg
ICBIYXNoTWFwPFJlbmRlck9iamVjdCosIENvbXBvc2l0ZUltcGxpY2l0QW5pbWF0aW9uKj46Oml0
ZXJhdG9yIGVuZCA9IG1fYW5pbWF0aW9ucy5lbmQoKTsKLSAgICBmb3IgKEhhc2hNYXA8UmVuZGVy
T2JqZWN0KiwgQ29tcG9zaXRlSW1wbGljaXRBbmltYXRpb24qPjo6aXRlcmF0b3IgaXQgPSBtX2Fu
aW1hdGlvbnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+c2Vj
b25kLT5hbmltYXRpbmcoKSkgeworICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3Rf
aXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQoKTsKKyAg
ICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRpb25zRW5k
OyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmlyc3Q7Cisg
ICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOworICAgICAg
ICBpZiAoIWNvbXBBbmltLT5zdXNwZW5kZWQoKSAmJiBjb21wQW5pbS0+YW5pbWF0aW5nKCkpIHsK
ICAgICAgICAgICAgIGFuaW1hdGluZyA9IHRydWU7Ci0gICAgICAgICAgICBpdC0+Zmlyc3QtPmVs
ZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAgICAgICAgICAgY29tcEFuaW0tPnNldEFuaW1hdGlu
ZyhmYWxzZSk7CisgICAgICAgICAgICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkpOwog
ICAgICAgICB9CiAgICAgfQogICAgIAogICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnVwZGF0ZVJl
bmRlcmluZygpOwogICAgIAotICAgIHVwZGF0ZVRpbWVyKCk7CisgICAgdXBkYXRlQW5pbWF0aW9u
VGltZXIoKTsKIH0KIAotQW5pbWF0aW9uQ29udHJvbGxlcjo6QW5pbWF0aW9uQ29udHJvbGxlcihG
cmFtZSogZnJhbWUpCi06bV9kYXRhKG5ldyBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShmcmFt
ZSkpCitib29sIEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc0FuaW1hdGluZ1Byb3BlcnR5
T25SZW5kZXJlcihSZW5kZXJPYmplY3QqIG9iaiwgaW50IHByb3BlcnR5KSBjb25zdAogeworICAg
IENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdl
dChvYmopOworICAgIGlmICghYW5pbWF0aW9uKSByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0
dXJuIGFuaW1hdGlvbi0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSk7Cit9CiAKK3ZvaWQg
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zKERvY3VtZW50KiBk
b2N1bWVudCkKK3sKKyAgICBSZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9y
IGFuaW1hdGlvbnNFbmQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5kKCk7CisgICAgZm9yIChS
ZW5kZXJPYmplY3RBbmltYXRpb25NYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmJlZ2luKCk7IAorICAgICAgICAgaXQgIT0gYW5pbWF0aW9uc0VuZDsgKytpdCkg
eworICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gaXQtPmZpcnN0OworICAgICAgICBD
b21wb3NpdGVBbmltYXRpb24qIGNvbXBBbmltID0gaXQtPnNlY29uZDsKKyAgICAgICAgaWYgKHJl
bmRlcmVyLT5kb2N1bWVudCgpID09IGRvY3VtZW50KQorICAgICAgICAgICAgY29tcEFuaW0tPnN1
c3BlbmRBbmltYXRpb25zKCk7CisgICAgfQorICAgIAorICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVy
KCk7CiB9CiAKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlv
bnMoRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6
Y29uc3RfaXRlcmF0b3IgYW5pbWF0aW9uc0VuZCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbmQo
KTsKKyAgICBmb3IgKFJlbmRlck9iamVjdEFuaW1hdGlvbk1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuYmVnaW4oKTsgCisgICAgICAgICBpdCAhPSBhbmltYXRp
b25zRW5kOyArK2l0KSB7CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBpdC0+Zmly
c3Q7CisgICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcEFuaW0gPSBpdC0+c2Vjb25kOwor
ICAgICAgICBpZiAocmVuZGVyZXItPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCisgICAgICAgICAg
ICBjb21wQW5pbS0+cmVzdW1lQW5pbWF0aW9ucygpOworICAgIH0KKyAgICAKKyAgICB1cGRhdGVB
bmltYXRpb25UaW1lcigpOworfQorCisjcHJhZ21hIG1hcmsgLQorCit2b2lkIEltcGxpY2l0QW5p
bWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiogYW5pbWF0aW9uLCBSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlLCBS
ZW5kZXJTdHlsZSomIGlvQW5pbWF0ZWRTdHlsZSkKK3sKKyAgICBpZiAoIXJ1bm5pbmcoKSB8fCAh
bV9vYmplY3QtPmRvY3VtZW50KCktPmxvYWRDb21wbGV0ZSgpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgLy8gSWYgd2UncmUgbm90IHJ1bm5pbmcgYW55IGFuaW1hdGlvbnMgYW5kIHRoZXJl
IGlzIG5vIGNoYW5nZSBpbiBvdXIgcHJvcCwganVzdCByZXR1cm4gCisgICAgaWYgKGlzbmV3KCkg
JiYgQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnByb3BlcnRpZXNFcXVhbChtX3Byb3BlcnR5
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IC8vIElmIHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFu
cyB3ZSBhcmUgY2xlYW5pbmcgdXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KKyAgICAvLyBJ
ZiBzbywgd2UgbmVlZCB0byByZXNldCBhbmQgc2VuZCBiYWNrIHRoZSB0YXJnZXRTdHlsZQorICAg
IGlmIChwb3N0YWN0aXZlKCkpIHsKKyAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lO
UFVUX01BS0VfTkVXLCAtMSk7CisgICAgICAgIHJlc2V0KHJlbmRlcmVyKTsKKyAgICAgICAgCisg
ICAgICAgIGlmICghaW9BbmltYXRlZFN0eWxlKQorICAgICAgICAgICAgaW9BbmltYXRlZFN0eWxl
ID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHRhcmdldFN0eWxlKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICAvLyBJZiB3ZSBhcmUgcnVubmluZyBhbmQgdGhlIHRhcmdldFN0
eWxlIHZhbHVlIGhhcyBjaGFuZ2VkIGZyb20gb3VyIGN1cnJlbnQgdG9TdHlsZSB2YWx1ZSwgd2Ug
bmVlZCB0byByZXNldC4KKyAgICAvLyBXZSBhbHNvIG5lZWQgdG8gcmVzZXQgaWYgd2UgYXJlIG5l
dy4KKyAgICBpZiAoaXNuZXcoKSB8fCAhbV90b1N0eWxlIHx8ICFBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6cHJvcGVydGllc0VxdWFsKG1fcHJvcGVydHksIG1fdG9TdHlsZSwgdGFyZ2V0U3R5
bGUpKSB7CisgICAgICAgIC8vIE9wYWNpdHkgaXMgc3BlY2lhbC4gVGhpcyBpcyBjaGFuZ2luZyBh
IGNvbnN0IFJlbmRlclN0eWxlLCBidXQgd2Uga25vdyB3aGF0IHdlIGFyZSBkb2luZywgcmVhbGx5
IDotKQorICAgICAgICAvLyBGSVhNRSBuZWVkIHRvIGRvIHRoaXM/CisgICAgICAgIGlmICghaXNu
ZXcoKSAmJiBtX2Zyb21TdHlsZSAmJiAobV9wcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkg
fHwgbV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCkpIHsKKyAgICAgICAgICAgIC8vIEdldCB0aGUg
YmxlbmRlZCB2YWx1ZSBvZiBvcGFjaXR5IGludG8gdGhlIGN1cnJlbnRTdHlsZSAod2hpY2ggd2ls
bCBiZSB0aGUgbmV3IGZyb21TdHlsZSkKKyAgICAgICAgICAgIGRvdWJsZSBwcm9nID0gcHJvZ3Jl
c3MoMSwgMCk7CisgICAgICAgICAgICBBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmxlbmRQ
cm9wZXJ0aWVzKENTU1Byb3BlcnR5T3BhY2l0eSwgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KGN1
cnJlbnRTdHlsZSksIG1fZnJvbVN0eWxlLCBtX3RvU3R5bGUsIHByb2cpOworICAgICAgICB9Cisg
ICAgICAgIHJlc2V0KHJlbmRlcmVyLCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKKyAgICB9
CisgICAgCisgICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgorICAgIC8vIFdlIGtub3cg
d2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkCisg
ICAgaWYgKCFpb0FuaW1hdGVkU3R5bGUpCisgICAgICAgIGlvQW5pbWF0ZWRTdHlsZSA9IG5ldyAo
cmVuZGVyZXItPnJlbmRlckFyZW5hKCkpIFJlbmRlclN0eWxlKCp0YXJnZXRTdHlsZSk7CisgICAg
CisgICAgZG91YmxlIHByb2cgPSBwcm9ncmVzcygxLCAwKTsKKyAgICBib29sIG5lZWRzQW5pbSA9
IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpibGVuZFByb3BlcnRpZXMobV9wcm9wZXJ0eSwg
aW9BbmltYXRlZFN0eWxlLCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlLCBwcm9nKTsKKyAgICBpZiAo
bmVlZHNBbmltKQorICAgICAgICBzZXRBbmltYXRpbmcoKTsKKworICAgIC8vQVNTRVJUKG5lZWRz
QW5pbSAhPSBtX3dhaXRlZEZvclJlc3BvbnNlIHx8IHByZWFjdGl2ZSgpKTsKK30KKworYm9vbCBJ
bXBsaWNpdEFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSkKK3sKKyAg
ICAvLyBTZW5kIHRyYW5zaXRpb24gdG8gb2JqZWN0CisgICAgcmV0dXJuIGZhbHNlOworICAgIC8q
IHJldHVybiBtX29iamVjdCA/IG1fb2JqZWN0LT5zdGFydFRyYW5zaXRpb24oYmVnaW5UaW1lLCBt
X3Byb3BlcnR5LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSA6IGZhbHNlOyAqLworfQorCit2b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCByZXNldCkKK3sKKyAgICAvKgor
ICAgIGlmIChtX29iamVjdCkKKyAgICAgICAgbV9vYmplY3QtPnRyYW5zaXRpb25GaW5pc2hlZCht
X3Byb3BlcnR5KTsKKyAgICAgKi8KK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6b25Bbmlt
YXRpb25FbmQoZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgLy8gd2UncmUgY29udmVydGlu
ZyB0aGUgYW5pbWF0aW9uIGludG8gYSB0cmFuc2l0aW9uIGhlcmUKKyAgICBpZiAoIXNlbmRUcmFu
c2l0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBpbkVsYXBz
ZWRUaW1lKSkgeworICAgICAgICAvLyB3ZSBkaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQsIHdoaWNo
IHdvdWxkIGNhbGwgZW5kQW5pbWF0aW9uKCksIHNvIHdlJ2xsIGp1c3QgZW5kCisgICAgICAgIC8v
IGl0IGhlcmUuCisgICAgICAgIGVuZEFuaW1hdGlvbih0cnVlKTsKKyAgICB9Cit9CisKK2Jvb2wg
SW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5n
JiBpbkV2ZW50VHlwZSwgZG91YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgaWYgKGluRXZlbnRU
eXBlID09IEV2ZW50TmFtZXM6OndlYmtpdFRyYW5zaXRpb25FbmRFdmVudCkgeworICAgICAgICBE
b2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9O
RU5EX0xJU1RFTkVSOworICAgICAgICAKKyAgICAgICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxp
c3RlbmVyKGxpc3RlbmVyVHlwZSkpIHsKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBlbGVtZW50
ID0gZWxlbWVudEZvckV2ZW50RGlzcGF0Y2goKTsKKyAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0
eU5hbWU7CisgICAgICAgICAgICBpZiAobV9wcm9wZXJ0eSA9PSBjQW5pbWF0ZUFsbCkgeworICAg
ICAgICAgICAgICAgIHByb3BlcnR5TmFtZSA9IFN0cmluZygiIik7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eU5hbWUgPSBTdHJpbmco
Z2V0UHJvcGVydHlOYW1lKChDU1NQcm9wZXJ0eUlEKW1fcHJvcGVydHkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgICAgICAgICAgbV93YWl0aW5n
Rm9yRW5kRXZlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNw
YXRjaGVyLnN0YXJ0VGltZXIoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBtX3Byb3BlcnR5LCB0cnVl
LCBpbkV2ZW50VHlwZSwgaW5FbGFwc2VkVGltZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7IC8vIGRpZCBkaXNwYXRjaCBhbiBldmVudAorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsgLy8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisK
K3ZvaWQgSW1wbGljaXRBbmltYXRpb246OnJlc2V0KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tIC8qID0gMCAqLywgY29uc3QgUmVuZGVyU3R5bGUqIHRvIC8q
ID0gMCAqLykKK3sKKyAgICBBU1NFUlQoKCFtX3RvU3R5bGUgJiYgIXRvKSB8fCBtX3RvU3R5bGUg
IT0gdG8pOworICAgIEFTU0VSVCgoIW1fZnJvbVN0eWxlICYmICFmcm9tKSB8fCBtX2Zyb21TdHls
ZSAhPSBmcm9tKTsKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAgICAgIG1fZnJvbVN0eWxlLT5k
ZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7CisgICAgaWYgKG1fdG9TdHlsZSkKKyAgICAg
ICAgbV90b1N0eWxlLT5kZXJlZihyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSk7CisgICAgCisgICAg
bV9mcm9tU3R5bGUgPSBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oZnJvbSk7ICAgLy8gaXQgaXMg
cmVhZC1vbmx5LCBvdGhlciB0aGFuIHRoZSByZWYKKyAgICBpZiAobV9mcm9tU3R5bGUpCisgICAg
ICAgIG1fZnJvbVN0eWxlLT5yZWYoKTsKKyAgICAKKyAgICBtX3RvU3R5bGUgPSBjb25zdF9jYXN0
PFJlbmRlclN0eWxlKj4odG8pOyAgICAgICAvLyBpdCBpcyByZWFkLW9ubHksIG90aGVyIHRoYW4g
dGhlIHJlZgorICAgIGlmIChtX3RvU3R5bGUpCisgICAgICAgIG1fdG9TdHlsZS0+cmVmKCk7Cisg
ICAgCisgICAgLy8gcmVzdGFydCB0aGUgdHJhbnNpdGlvbgorICAgIGlmIChmcm9tICYmIHRvKQor
ICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoU1RBVEVfSU5QVVRfUkVTVEFSVF9BTklNQVRJT04s
IC0xKTsKK30KKwordm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRlbihib29sIGIp
Cit7CisgICAgaWYgKGIgIT0gbV9vdmVycmlkZGVuKSB7CisgICAgICAgIG1fb3ZlcnJpZGRlbiA9
IGI7CisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShtX292ZXJyaWRkZW4gPyBTVEFURV9JTlBV
VF9QQVVTRV9PVkVSUklERSA6IFNUQVRFX0lOUFVUX1JFU1VNRV9PVkVSUklERSwgLTEpOworICAg
IH0KK30KKworYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KGludCBwcm9w
ZXJ0eSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcm9wZXJ0eSA9PSBwcm9wZXJ0eSB8fAorICAg
IChtX3Byb3BlcnR5ID09IGNBbmltYXRlQWxsICYmICFBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cHJvcGVydGllc0VxdWFsKHByb3BlcnR5LCBtX2Zyb21TdHlsZSwgbV90b1N0eWxlKSk7Cit9
CisKKyNwcmFnbWEgbWFyayAtCisKK3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmFuaW1hdGUoQ29t
cG9zaXRlQW5pbWF0aW9uKiBhbmltYXRpb24sIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGNvbnN0
IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUsIFJlbmRlclN0eWxlKiYgaW9Bbmlt
YXRlZFN0eWxlKQoreworICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBzdGFydGVkLCB3ZSB3aWxs
IG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFydCB0aGUgYW5pbWF0aW9u
IGlmIG5lZWRlZAorICAgIGlmIChpc25ldygpICYmIG1fYW5pbWF0aW9uLT5hbmltYXRpb25QbGF5
U3RhdGUoKSA9PSBBbmltUGxheVN0YXRlUGxheWluZyAmJiBtX29iamVjdC0+ZG9jdW1lbnQoKS0+
bG9hZENvbXBsZXRlKCkpCisgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShTVEFURV9JTlBVVF9T
VEFSVF9BTklNQVRJT04sIC0xKTsKKyAgICAKKyAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5k
IHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVz
dCBmaW5pc2hlZCBhbmltYXRpb24uCisgICAgLy8gSWYgc28sIHdlIG5lZWQgdG8gc2VuZCBiYWNr
IHRoZSB0YXJnZXRTdHlsZQorICAgIGlmIChwb3N0YWN0aXZlKCkpIHsKKyAgICAgICAgaWYgKCFp
b0FuaW1hdGVkU3R5bGUpCisgICAgICAgICAgICBpb0FuaW1hdGVkU3R5bGUgPSBjb25zdF9jYXN0
PFJlbmRlclN0eWxlKj4odGFyZ2V0U3R5bGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIsIHdlIGRvbid0
IHdhbnQgdG8gY2hhbmdlIHRoZSBzdHlsZSB5ZXQKKyAgICAvLyBTcGVjaWFsIGNhc2UgLSBpZiB0
aGUgZGVsYXkgdGltZSBpcyAwLCB0aGVuIHdlIGRvIHdhbnQgdG8gc2V0IHRoZSBmaXJzdCBmcmFt
ZSBvZiB0aGUKKyAgICAvLyBhbmltYXRpb24gcmlnaHQgYXdheS4gVGhpcyBhdm9pZHMgYSBmbGFz
aCB3aGVuIHRoZSBhbmltYXRpb24gc3RhcnRzCisgICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYg
bV9hbmltYXRpb24tPmRlbGF5KCkgPiAwKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gYmUgbW9yZSBlZmZpY2llbnQgYWJvdXQgZGV0ZXJtaW5pbmcgd2hp
Y2gga2V5ZnJhbWVzIHdlIGFyZSBhbmltYXRpbmcgYmV0d2Vlbi4KKyAgICAvLyBXZSBzaG91bGQg
Y2FjaGUgdGhlIGxhc3QgcGFpciBvciBzb21ldGhpbmcKKyAgICAKKyAgICAvLyBGaW5kIHRoZSBm
aXJzdCBrZXkKKyAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSAobV9zdGFydFRpbWUgPiAwKSA/ICgo
cnVubmluZygpID8gY3VycmVudFRpbWUoKSA6IG1fcGF1c2VUaW1lKSAtIG1fc3RhcnRUaW1lKSA6
IDA7CisgICAgaWYgKGVsYXBzZWRUaW1lIDwgMCkKKyAgICAgICAgZWxhcHNlZFRpbWUgPSAwOwor
ICAgIAorICAgIGRvdWJsZSB0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRp
bWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkgOiAxOworICAgIGludCBpID0gKGludCkgdDsK
KyAgICB0IC09IGk7CisgICAgaWYgKG1fYW5pbWF0aW9uLT5hbmltYXRpb25EaXJlY3Rpb24oKSAm
JiAoaSAmIDEpKQorICAgICAgICB0ID0gMSAtIHQ7CisgICAgCisgICAgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSA9IDA7CisgICAgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSAwOworICAgIGRvdWJsZSBz
Y2FsZSA9IDE7CisgICAgZG91YmxlIG9mZnNldCA9IDA7CisgICAgaWYgKG1fa2V5ZnJhbWVzLmdl
dCgpKSB7CisgICAgICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gbV9rZXlmcmFtZXMtPmVuZEtleWZyYW1lcygpOworICAgICAgICBmb3IgKFZlY3RvcjxLZXlm
cmFtZVZhbHVlPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5LZXlmcmFt
ZXMoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgICAgICBpZiAodCA8IGl0LT5rZXkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgZmlyc3Qga2V5IHNob3VsZCBhbHdheXMgYmUgMCwgc28g
d2Ugc2hvdWxkIG5ldmVyIHN1Y2NlZWQgb24gdGhlIGZpcnN0IGtleQorICAgICAgICAgICAgICAg
IGlmICghZnJvbVN0eWxlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBzY2FsZSA9IDEgLyAoaXQtPmtleSAtIG9mZnNldCk7CisgICAgICAgICAgICAgICAgdG9T
dHlsZSA9IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPigmKGl0LT5zdHlsZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBv
ZmZzZXQgPSBpdC0+a2V5OworICAgICAgICAgICAgZnJvbVN0eWxlID0gY29uc3RfY2FzdDxSZW5k
ZXJTdHlsZSo+KCYoaXQtPnN0eWxlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8g
SWYgZWl0aGVyIHN0eWxlIGlzIDAgd2UgaGF2ZSBhbiBpbnZhbGlkIGNhc2UsIGp1c3Qgc3RvcCB0
aGUgYW5pbWF0aW9uCisgICAgaWYgKCFmcm9tU3R5bGUgfHwgIXRvU3R5bGUpIHsKKyAgICAgICAg
dXBkYXRlU3RhdGVNYWNoaW5lKFNUQVRFX0lOUFVUX0VORF9BTklNQVRJT04sIC0xKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24u
CisgICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtl
IG9uZSBpZiBuZWVkZWQKKyAgICBpZiAoIWlvQW5pbWF0ZWRTdHlsZSkKKyAgICAgICAgaW9Bbmlt
YXRlZFN0eWxlID0gbmV3IChyZW5kZXJlci0+cmVuZGVyQXJlbmEoKSkgUmVuZGVyU3R5bGUoKnRh
cmdldFN0eWxlKTsKKyAgICAKKyAgICBkb3VibGUgcHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZz
ZXQpOworICAgIAorICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlm
cmFtZXMtPmVuZFByb3BlcnRpZXMoKTsKKyAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBib29sIG5lZWRzQW5pbSA9IEFuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpibGVuZFByb3BlcnRpZXMoKml0LCBpb0FuaW1hdGVkU3R5bGUsIGZyb21TdHlsZSwgdG9TdHls
ZSwgcHJvZyk7CisgICAgICAgIGlmIChuZWVkc0FuaW0pCisgICAgICAgICAgICBzZXRBbmltYXRp
bmcoKTsKKyAgICAgICAgLy9BU1NFUlQobmVlZHNBbmltICE9IG1fd2FpdGVkRm9yUmVzcG9uc2Ug
fHwgcHJlYWN0aXZlKCkpOworICAgIH0KK30KKworYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3Rh
cnRBbmltYXRpb24oZG91YmxlIGJlZ2luVGltZSkKK3sKKyAgICAvKiBzcG1hIHJldHVybiBtX29i
amVjdCA/IG1fb2JqZWN0LT5zdGFydEFuaW1hdGlvbihiZWdpblRpbWUsIG1faW5kZXgpIDogZmFs
c2U7ICovCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpl
bmRBbmltYXRpb24oYm9vbCByZXNldCkKK3sKKyAgICBpZiAobV9vYmplY3QpIHsKKyAgICAgICAg
Ly8gRklYTUU6IG5lZWQgdG8gZGV0ZXJtaW5lIGFjdHVhbCBpbmRleCAoaW4gY2FzZXMgd2hlcmUg
dGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBhbmltYXRpb24gcGVyIFRyYW5zaXRpb24gb2JqZWN0KQor
CisgICAgICAgIC8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQorICAg
ICAgICBzZXRDaGFuZ2VkKG1fb2JqZWN0LT5lbGVtZW50KCkpOworICAgIH0KK30KKwordm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25TdGFydChkb3VibGUgaW5FbGFwc2VkVGltZSkK
K3sKKyAgICBzZW5kQW5pbWF0aW9uRXZlbnQoRXZlbnROYW1lczo6d2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCwgaW5FbGFwc2VkVGltZSk7Cit9CisKK3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om9u
QW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIHNlbmRBbmlt
YXRpb25FdmVudChFdmVudE5hbWVzOjp3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCwgaW5F
bGFwc2VkVGltZSk7Cit9CisKK3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uRW5k
KGRvdWJsZSBpbkVsYXBzZWRUaW1lKQoreworICAgIC8vIEZJWE1FOiBzZXQgdGhlIHVuYW5pbWF0
ZWQgc3R5bGUgb24gdGhlIGVsZW1lbnQKKyAgICBpZiAoIXNlbmRBbmltYXRpb25FdmVudChFdmVu
dE5hbWVzOjp3ZWJraXRBbmltYXRpb25FbmRFdmVudCwgaW5FbGFwc2VkVGltZSkpIHsKKyAgICAg
ICAgLy8gd2UgZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50LCB3aGljaCB3b3VsZCBjYWxsIGVuZEFu
aW1hdGlvbigpLCBzbyB3ZSdsbCBqdXN0IGVuZAorICAgICAgICAvLyBpdCBoZXJlLgorICAgICAg
ICBlbmRBbmltYXRpb24odHJ1ZSk7CisgICAgfQorfQorCitib29sIEtleWZyYW1lQW5pbWF0aW9u
OjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBpbkV2ZW50VHlwZSwgZG91
YmxlIGluRWxhcHNlZFRpbWUpCit7CisgICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5l
clR5cGU7CisgICAgaWYgKGluRXZlbnRUeXBlID09IEV2ZW50TmFtZXM6OndlYmtpdEFuaW1hdGlv
bkl0ZXJhdGlvbkV2ZW50KQorICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFU
SU9OSVRFUkFUSU9OX0xJU1RFTkVSOworICAgIGVsc2UgaWYgKGluRXZlbnRUeXBlID09IEV2ZW50
TmFtZXM6OndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50KQorICAgICAgICBsaXN0ZW5lclR5cGUgPSBE
b2N1bWVudDo6QU5JTUFUSU9ORU5EX0xJU1RFTkVSOworICAgIGVsc2UKKyAgICAgICAgbGlzdGVu
ZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNUQVJUX0xJU1RFTkVSOworICAgIAorICAgIGlm
IChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7CisgICAgICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gZWxlbWVudEZvckV2ZW50RGlzcGF0Y2goKTsKKyAgICAgICAg
aWYgKGVsZW1lbnQpIHsKKyAgICAgICAgICAgIG1fd2FpdGluZ0ZvckVuZEV2ZW50ID0gdHJ1ZTsK
KyAgICAgICAgICAgIG1fYW5pbWF0aW9uRXZlbnREaXNwYXRjaGVyLnN0YXJ0VGltZXIoZWxlbWVu
dCwgbV9uYW1lLCAtMSwgdHJ1ZSwgaW5FdmVudFR5cGUsIGluRWxhcHNlZFRpbWUpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7IC8vIGRpZCBkaXNwYXRjaCBhbiBldmVudAorICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsgLy8gZGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Cit9CisK
K3ZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om92ZXJyaWRlQW5pbWF0aW9ucygpCit7CisgICAgLy8g
VGhpcyB3aWxsIG92ZXJyaWRlIGltcGxpY2l0IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJv
cGVydGllcyBpbiB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uCisgICAgSGFzaFNldDxpbnQ+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZvciAo
SGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblByb3Bl
cnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+
b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoKml0KTsKK30KKwordm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKQoreworICAgIC8vIFRoaXMgd2lsbCBy
ZXN1bWUgb3ZlcnJpZGRlbiBpbXBsaWNpdCBhbmltYXRpb25zCisgICAgSGFzaFNldDxpbnQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQgPSBtX2tleWZyYW1lcy0+ZW5kUHJvcGVydGllcygpOworICAgIGZv
ciAoSGFzaFNldDxpbnQ+Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fa2V5ZnJhbWVzLT5iZWdpblBy
b3BlcnRpZXMoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBjb21wb3NpdGVBbmltYXRpb24o
KS0+cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucygqaXQpOworfQorCitib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoaW50IHByb3BlcnR5KSBjb25zdAorewor
ICAgIEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gbV9rZXlmcmFtZXMtPmVuZFBy
b3BlcnRpZXMoKTsKKyAgICBmb3IgKEhhc2hTZXQ8aW50Pjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X2tleWZyYW1lcy0+YmVnaW5Qcm9wZXJ0aWVzKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAg
ICBpZiAoKCppdCkgPT0gcHJvcGVydHkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisjcHJhZ21hIG1hcmsgLQorCitBbmltYXRpb25Db250
cm9sbGVyOjpBbmltYXRpb25Db250cm9sbGVyKEZyYW1lKiBmcmFtZSkKKzogbV9kYXRhKG5ldyBB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShmcmFtZSkpCit7CisgICAgCit9CisKIEFuaW1hdGlv
bkNvbnRyb2xsZXI6On5BbmltYXRpb25Db250cm9sbGVyKCkKIHsKICAgICBkZWxldGUgbV9kYXRh
OwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OmNhbmNlbEltcGxpY2l0QW5pbWF0aW9u
cyhSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpjYW5j
ZWxBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiB7Ci0gICAgaWYgKCFtX2RhdGEt
Pmhhc0ltcGxpY2l0QW5pbWF0aW9ucygpKQorICAgIGlmICghbV9kYXRhLT5oYXNBbmltYXRpb25z
KCkpCiAgICAgICAgIHJldHVybjsKLQorICAgIAogICAgIGlmIChtX2RhdGEtPmNsZWFyKHJlbmRl
cmVyKSkKLSAgICAgICAgcmVuZGVyZXItPmVsZW1lbnQoKS0+c2V0Q2hhbmdlZCgpOworICAgICAg
ICBzZXRDaGFuZ2VkKHJlbmRlcmVyLT5lbGVtZW50KCkpOwogfQogCi1SZW5kZXJTdHlsZSogQW5p
bWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlSW1wbGljaXRBbmltYXRpb25zKFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIFJlbmRlclN0eWxlKiBuZXdTdHlsZSkKLXsKK1JlbmRlclN0eWxlKiBBbmltYXRp
b25Db250cm9sbGVyOjp1cGRhdGVBbmltYXRpb25zKFJlbmRlck9iamVjdCogcmVuZGVyZXIsIFJl
bmRlclN0eWxlKiBuZXdTdHlsZSkKK3sgICAgCisgICAgLy8gZG9uJ3QgZG8gYW55dGhpbmcgaWYg
d2UncmUgaW4gdGhlIGNhY2hlCisgICAgaWYgKCFyZW5kZXJlci0+ZG9jdW1lbnQoKSB8fCByZW5k
ZXJlci0+ZG9jdW1lbnQoKS0+aW5QYWdlQ2FjaGUoKSkKKyAgICAgICAgcmV0dXJuIG5ld1N0eWxl
OworICAgIAorICAgIFJlbmRlclN0eWxlKiBvbGRTdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwor
ICAgIAorICAgIGlmICgoIW9sZFN0eWxlIHx8ICghb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSAmJiAh
b2xkU3R5bGUtPnRyYW5zaXRpb25zKCkpKSAmJiAKKyAgICAgICAgICAgICAgICAgICAgICAoIW5l
d1N0eWxlLT5hbmltYXRpb25zKCkgJiYgIW5ld1N0eWxlLT50cmFuc2l0aW9ucygpKSkKKyAgICAg
ICAgcmV0dXJuIG5ld1N0eWxlOworICAgIAorICAgIFJlbmRlclN0eWxlKiBibGVuZGVkU3R5bGUg
PSBuZXdTdHlsZTsKKyAgICAKICAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGlj
aXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFzaHRhYmxlLiAgV2UgdGhlbiBjb21wYXJlIHRoZW0KICAg
ICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRpb25zIGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdl
J3JlIGluIHN5bmMuICBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKICAgICAvLyBoYXZlIGNoYW5nZWQs
IHdlIHJlc2V0IHRoZSBhbmltYXRpb24uICBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2
YWx1ZXMgYW5kIHdlIHJldHVybgogICAgIC8vIGEgbmV3IHN0eWxlLgogICAgIEFTU0VSVChyZW5k
ZXJlci0+ZWxlbWVudCgpKTsgLy8gRklYTUU6IFdlIGRvIG5vdCBhbmltYXRlIGdlbmVyYXRlZCBj
b250ZW50IHlldC4KKyAgICAKKyAgICBDb21wb3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0
aW9ucyA9IG1fZGF0YS0+YWNjZXNzQ29tcG9zaXRlQW5pbWF0aW9uKHJlbmRlcmVyKTsKKyAgICBi
bGVuZGVkU3R5bGUgPSByZW5kZXJlckFuaW1hdGlvbnMtPmFuaW1hdGUocmVuZGVyZXIsIG9sZFN0
eWxlLCBuZXdTdHlsZSk7CisgICAgCisgICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1lcigp
OworICAgIAorICAgIGlmIChibGVuZGVkU3R5bGUgIT0gbmV3U3R5bGUpIHsKKyAgICAgICAgLy8g
SWYgdGhlIGFuaW1hdGlvbnMvdHJhbnNpdGlvbnMgY2hhbmdlIG9wYWNpdHksIHRyYW5zZm9ybSBv
ciBwZXJzcGVjdGl2ZSwgd2UgbmVlZWQgdG8gdXBkYXRlCisgICAgICAgIC8vIHRoZSBzdHlsZSB0
byBpbXBvc2UgdGhlIHN0YWNraW5nIHJ1bGVzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUg
aW4gQ1NTU3R5bGVTZWxlY3Rvcjo6YWRqdXN0UmVuZGVyU3R5bGUoKS4KKyAgICAgICAgaWYgKGJs
ZW5kZWRTdHlsZS0+aGFzQXV0b1pJbmRleCgpICYmICgoYmxlbmRlZFN0eWxlLT5vcGFjaXR5KCkg
PCAxLjBmKSkpIC8vIEZJWE1FIHx8IGJsZW5kZWRTdHlsZS0+aGFzVHJhbnNmb3JtT3JQZXJzcGVj
dGl2ZSgpKSkpCisgICAgICAgICAgICBibGVuZGVkU3R5bGUtPnNldFpJbmRleCgwKTsKKyAgICB9
CisgICAgcmV0dXJuIGJsZW5kZWRTdHlsZTsKK30KIAotICAgIENvbXBvc2l0ZUltcGxpY2l0QW5p
bWF0aW9uKiBhbmltYXRpb24gPSBtX2RhdGEtPmdldChyZW5kZXJlcik7Ci0gICAgaWYgKCFhbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiBuZXdTdHlsZTsKK3ZvaWQgQW5pbWF0aW9uQ29udHJvbGxl
cjo6c2V0QW5pbWF0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCogb2JqLCBkb3VibGUgdCkKK3sK
KyAgICBDb21wb3NpdGVBbmltYXRpb24qIHJlbmRlcmVyQW5pbWF0aW9ucyA9IG1fZGF0YS0+YWNj
ZXNzQ29tcG9zaXRlQW5pbWF0aW9uKG9iaik7CisgICAgcmVuZGVyZXJBbmltYXRpb25zLT5zZXRB
bmltYXRpb25TdGFydFRpbWUodCk7Cit9CiAKLSAgICBSZW5kZXJTdHlsZSogcmVzdWx0ID0gYW5p
bWF0aW9uLT5hbmltYXRlKHJlbmRlcmVyLCByZW5kZXJlci0+c3R5bGUoKSwgbmV3U3R5bGUpOwot
ICAgIG1fZGF0YS0+dXBkYXRlVGltZXIoKTsKLSAgICByZXR1cm4gcmVzdWx0Owordm9pZCBBbmlt
YXRpb25Db250cm9sbGVyOjpzZXRUcmFuc2l0aW9uU3RhcnRUaW1lKFJlbmRlck9iamVjdCogb2Jq
LCBpbnQgcHJvcGVydHksIGRvdWJsZSB0KQoreworICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogcmVu
ZGVyZXJBbmltYXRpb25zID0gbV9kYXRhLT5hY2Nlc3NDb21wb3NpdGVBbmltYXRpb24ob2JqKTsK
KyAgICByZW5kZXJlckFuaW1hdGlvbnMtPnNldFRyYW5zaXRpb25TdGFydFRpbWUocHJvcGVydHks
IHQpOwogfQogCi12b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkK
K2Jvb2wgQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNBbmltYXRpbmdQcm9wZXJ0eU9uUmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiBvYmosIGludCBwcm9wZXJ0eSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTog
V2FsayB0aGUgd2hvbGUgaGFzaHRhYmxlIGFuZCBjYWxsIHBhdXNlIG9uIGVhY2ggYW5pbWF0aW9u
LgotICAgIC8vIEtpbGwgb3VyIHRpbWVyLgorICAgIHJldHVybiBtX2RhdGEtPmlzQW5pbWF0aW5n
UHJvcGVydHlPblJlbmRlcmVyKG9iaiwgcHJvcGVydHkpOwogfQogCi12b2lkIEFuaW1hdGlvbkNv
bnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpz
dXNwZW5kQW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpCiB7Ci0gICAgLy8gRklYTUU6IFdh
bGsgdGhlIHdob2xlIGhhc2h0YWJsZSBhbmQgY2FsbCByZXN1bWUgb24gZWFjaCBhbmltYXRpb24u
Ci0gICAgLy8gU3RhcnQgb3VyIHRpbWVyLgorI2lmZGVmIERFQlVHX1NUQVRFX01BQ0hJTkUKKyAg
ICBmcHJpbnRmKHN0ZGVyciwgIkFuaW1hdGlvbkNvbnRyb2xsZXIgJXAgc3VzcGVuZEFuaW1hdGlv
bnMgZm9yIGRvY3VtZW50ICVwXG4iLCB0aGlzLCBkb2N1bWVudCk7CisjZW5kaWYKKyAgICBtX2Rh
dGEtPnN1c3BlbmRBbmltYXRpb25zKGRvY3VtZW50KTsKIH0KIAordm9pZCBBbmltYXRpb25Db250
cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyNpZmRlZiBE
RUJVR19TVEFURV9NQUNISU5FCisgICAgZnByaW50ZihzdGRlcnIsICJBbmltYXRpb25Db250cm9s
bGVyICVwIHJlc3VtZUFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwXG4iLCB0aGlzLCBkb2N1bWVu
dCk7CisjZW5kaWYKKyAgICBtX2RhdGEtPnJlc3VtZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwogfQor
Cit2b2lkIEFuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0VXBkYXRlUmVuZGVyaW5nRGlzcGF0Y2hl
cigpCit7CisgICAgbV9kYXRhLT5zdGFydFVwZGF0ZVJlbmRlcmluZ0Rpc3BhdGNoZXIoKTsKK30K
Kwordm9pZCBBbmltYXRpb25Db250cm9sbGVyOjpzdHlsZUlzU2V0dXAoKQoreworICAgIG1fZGF0
YS0+c3R5bGVJc1NldHVwKCk7Cit9CisKK3ZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzZXRXYWl0
aW5nRm9yU3R5bGVJc1NldHVwKGJvb2wgd2FpdGluZykKK3sKKyAgICBpZiAod2FpdGluZykKKyAg
ICAgICAgbV9udW1TdHlsZUlzU2V0dXBXYWl0ZXJzKys7CisgICAgZWxzZQorICAgICAgICBtX251
bVN0eWxlSXNTZXR1cFdhaXRlcnMtLTsKKyAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPnNldFdh
aXRpbmdGb3JTdHlsZUlzU2V0dXAod2FpdGluZyk7Cit9CisgICAgCit9CkluZGV4OiBXZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZS5jcHAJKHJl
dmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTQ4NCw3ICsxNDg0LDcgQEAKICAgICAgICAgaWYgKHZpZXctPmZyYW1lKCkpIHsKICAgICAg
ICAgICAgIGlmIChkb2N1bWVudCAmJiBkb2N1bWVudC0+cmVuZGVyZXIoKSAmJiBkb2N1bWVudC0+
cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKSkKICAgICAgICAgICAgICAgICBkb2N1bWVudC0+cmVuZGVy
ZXIoKS0+bGF5ZXIoKS0+c3VzcGVuZE1hcnF1ZWVzKCk7Ci0gICAgICAgICAgICB2aWV3LT5mcmFt
ZSgpLT5hbmltYXRpb25Db250cm9sbGVyKCktPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAg
ICAgICB2aWV3LT5mcmFtZSgpLT5hbmltYXRpb25Db250cm9sbGVyKCktPnN1c3BlbmRBbmltYXRp
b25zKGRvY3VtZW50KTsKICAgICAgICAgfQogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>21181</attachid>
            <date>2008-05-15 14:51:55 -0700</date>
            <delta_ts>2008-08-04 11:35:57 -0700</delta_ts>
            <desc>Patch for animation/transition events and other dom interfaces</desc>
            <filename>animationeventsinterfaces.patch</filename>
            <type>text/plain</type>
            <size>38027</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yT2JqQy5wbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvck9iakMucG0J
KHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JPYmpDLnBtCSh3b3JraW5nIGNvcHkpCkBAIC00MDEsNyArNDAxLDcgQEAKIAogICAgIHJldHVy
biAkcGFyZW50IGlmICRwYXJlbnQgZXEgIk9iamVjdCIgb3IgSXNCYXNlVHlwZSgkcGFyZW50KTsK
ICAgICByZXR1cm4gIkV2ZW50IiBpZiAkcGFyZW50IGVxICJVSUV2ZW50IjsKLSAgICByZXR1cm4g
IkNTU1ZhbHVlIiBpZiAkcGFyZW50IGVxICJTVkdDb2xvciI7CisgICAgcmV0dXJuICJDU1NWYWx1
ZSIgaWYgJHBhcmVudCBlcSAiU1ZHQ29sb3IiIG9yICRwYXJlbnQgZXEgIkNTU1ZhbHVlTGlzdCI7
CiAgICAgcmV0dXJuICJOb2RlIjsKIH0KIApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NV2luZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NSw2ICsxODUsMTAgQEAKICAg
b25zdWJtaXQgICAgICAgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25zdWJtaXQg
ICAgICAgICAgIERvbnREZWxldGUKICAgb251bmxvYWQgICAgICAgICAgICAgIFdlYkNvcmU6OkpT
RE9NV2luZG93QmFzZTo6T251bmxvYWQgICAgICAgICAgIERvbnREZWxldGUKICAgb25iZWZvcmV1
bmxvYWQgICAgICAgIFdlYkNvcmU6OkpTRE9NV2luZG93QmFzZTo6T25iZWZvcmV1bmxvYWQgICAg
IERvbnREZWxldGUKKyAgb253ZWJraXRhbmltYXRpb25zdGFydCAgICAgIFdlYkNvcmU6OkpTRE9N
V2luZG93QmFzZTo6T25XZWJLaXRBbmltYXRpb25TdGFydCAgICAgICBEb250RGVsZXRlCisgIG9u
d2Via2l0YW5pbWF0aW9uaXRlcmF0aW9uICBXZWJDb3JlOjpKU0RPTVdpbmRvd0Jhc2U6Ok9uV2Vi
S2l0QW5pbWF0aW9uSXRlcmF0aW9uICAgRG9udERlbGV0ZQorICBvbndlYmtpdGFuaW1hdGlvbmVu
ZCAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpPbldlYktpdEFuaW1hdGlvbkVuZCAg
ICAgICAgIERvbnREZWxldGUKKyAgb253ZWJraXR0cmFuc2l0aW9uZW5kICAgICAgIFdlYkNvcmU6
OkpTRE9NV2luZG93QmFzZTo6T25XZWJLaXRUcmFuc2l0aW9uRW5kICAgICAgICBEb250RGVsZXRl
CiAjIC0tIENvbnN0cnVjdG9ycyAtLQogICBBdWRpbyAgICAgICAgICAgICAgICAgV2ViQ29yZTo6
SlNET01XaW5kb3dCYXNlOjpBdWRpbyAgICAgICAgICAgICAgRG9udERlbGV0ZQogICBJbWFnZSAg
ICAgICAgICAgICAgICAgV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpJbWFnZSAgICAgICAgICAg
ICAgRG9udERlbGV0ZQpAQCAtNTA5LDYgKzUxMywxNCBAQAogICAgICByZXR1cm4gZ2V0TGlzdGVu
ZXIoZXhlYywgYmVmb3JldW5sb2FkRXZlbnQpOwogICAgY2FzZSBPbnVubG9hZDoKICAgICAgcmV0
dXJuIGdldExpc3RlbmVyKGV4ZWMsIHVubG9hZEV2ZW50KTsKKyAgIGNhc2UgT25XZWJLaXRBbmlt
YXRpb25TdGFydDoKKyAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgd2Via2l0QW5pbWF0
aW9uU3RhcnRFdmVudCk7CisgICBjYXNlIE9uV2ViS2l0QW5pbWF0aW9uSXRlcmF0aW9uOgorICAg
ICAgIHJldHVybiBnZXRMaXN0ZW5lcihleGVjLCB3ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVu
dCk7CisgICBjYXNlIE9uV2ViS2l0QW5pbWF0aW9uRW5kOgorICAgICAgIHJldHVybiBnZXRMaXN0
ZW5lcihleGVjLCB3ZWJraXRBbmltYXRpb25FbmRFdmVudCk7CisgICBjYXNlIE9uV2ViS2l0VHJh
bnNpdGlvbkVuZDoKKyAgICAgICByZXR1cm4gZ2V0TGlzdGVuZXIoZXhlYywgd2Via2l0VHJhbnNp
dGlvbkVuZEV2ZW50KTsgICAgICAgICAgIAogICAgfQogICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNF
dmVudEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
Q3VzdG9tLmNwcAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZl
bnRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw4IEBACiAjaW5jbHVkZSAi
SlNQcm9ncmVzc0V2ZW50LmgiCiAjaW5jbHVkZSAiSlNUZXh0RXZlbnQuaCIKICNpbmNsdWRlICJK
U1VJRXZlbnQuaCIKKyNpbmNsdWRlICJKU1dlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVk
ZSAiSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJKU1doZWVsRXZlbnQuaCIK
ICNpbmNsdWRlICJKU1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKQEAgLTQ4LDYgKzUwLDggQEAKICNpbmNsdWRlICJQcm9ncmVzc0V2ZW50
LmgiCiAjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCiAjaW5jbHVkZSAiVUlFdmVudC5oIgorI2luY2x1
ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2
ZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudC5oIgogI2luY2x1ZGUgImtqc19ldmVudHMuaCIKQEAgLTEyMCw2ICsxMjQs
MTAgQEAKICAgICBlbHNlIGlmIChldmVudC0+aXNTdG9yYWdlRXZlbnQoKSkKICAgICAgICAgcmV0
ID0gbmV3IChleGVjKSBKU1N0b3JhZ2VFdmVudChKU1N0b3JhZ2VFdmVudFByb3RvdHlwZTo6c2Vs
ZihleGVjKSwgc3RhdGljX2Nhc3Q8U3RvcmFnZUV2ZW50Kj4oZXZlbnQpKTsKICNlbmRpZgorICAg
IGVsc2UgaWYgKGV2ZW50LT5pc1dlYktpdEFuaW1hdGlvbkV2ZW50KCkpCisgICAgICAgIHJldCA9
IG5ldyAoZXhlYykgSlNXZWJLaXRBbmltYXRpb25FdmVudChKU1dlYktpdEFuaW1hdGlvbkV2ZW50
UHJvdG90eXBlOjpzZWxmKGV4ZWMpLCBzdGF0aWNfY2FzdDxXZWJLaXRBbmltYXRpb25FdmVudCo+
KGV2ZW50KSk7CisgICAgZWxzZSBpZiAoZXZlbnQtPmlzV2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkp
CisgICAgICAgIHJldCA9IG5ldyAoZXhlYykgSlNXZWJLaXRUcmFuc2l0aW9uRXZlbnQoSlNXZWJL
aXRUcmFuc2l0aW9uRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIHN0YXRpY19jYXN0PFdlYktp
dFRyYW5zaXRpb25FdmVudCo+KGV2ZW50KSk7ICAgIAogICAgIGVsc2UKICAgICAgICAgcmV0ID0g
bmV3IChleGVjKSBKU0V2ZW50KEpTRXZlbnRQcm90b3R5cGU6OnNlbGYoZXhlYyksIGV2ZW50KTsK
IApJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93QmFzZS5oCShyZXZpc2lvbiAzMjkx
MikKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMiw3ICsxMzIsOSBAQAogICAgICAgICAgICAgT25tb3VzZW1vdmUsIE9ubW91c2Vv
dXQsIE9ubW91c2VvdmVyLCBPbm1vdXNldXAsCiAgICAgICAgICAgICBPbldpbmRvd01vdXNlV2hl
ZWwsIE9ucmVzZXQsIE9ucmVzaXplLCBPbnNjcm9sbCwKICAgICAgICAgICAgIE9uc2VhcmNoLCBP
bnNlbGVjdCwgT25zdWJtaXQsIE9udW5sb2FkLAotICAgICAgICAgICAgT25iZWZvcmV1bmxvYWQs
CisgICAgICAgICAgICBPbmJlZm9yZXVubG9hZCwgT25XZWJLaXRBbmltYXRpb25TdGFydCwKKyAg
ICAgICAgICAgIE9uV2ViS2l0QW5pbWF0aW9uSXRlcmF0aW9uLCBPbldlYktpdEFuaW1hdGlvbkVu
ZCwKKyAgICAgICAgICAgIE9uV2ViS2l0VHJhbnNpdGlvbkVuZCwKIAogICAgICAgICAgICAgLy8g
Q29uc3RydWN0b3JzCiAgICAgICAgICAgICBBdWRpbywgSW1hZ2UsIE9wdGlvbiwgWE1MSHR0cFJl
cXVlc3QsCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NQ1NTLm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET01DU1MubW0JKHJldmlzaW9uIDMyOTEyKQorKysg
V2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTUNTUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDMsNiAr
NDMsOCBAQAogI2ltcG9ydCAiRE9NSW50ZXJuYWwuaCIKICNpbXBvcnQgIkRPTVByaXZhdGUuaCIK
ICNpbXBvcnQgIlN0eWxlU2hlZXQuaCIKKyNpbXBvcnQgIldlYktpdENTU0tleWZyYW1lUnVsZS5o
IgorI2ltcG9ydCAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2ltcG9ydCA8b2JqYy9vYmpj
LWNsYXNzLmg+CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTQxLDYgKzE0MywxMyBAQAogICAgICAg
ICBjYXNlIERPTV9QQUdFX1JVTEU6CiAgICAgICAgICAgICB3cmFwcGVyQ2xhc3MgPSBbRE9NQ1NT
UGFnZVJ1bGUgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRE9NX1dF
QktJVF9LRVlGUkFNRVNfUlVMRToKKyAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9IFtET01XZWJL
aXRDU1NLZXlmcmFtZXNSdWxlIGNsYXNzXTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIERPTV9XRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgICAgIHdyYXBwZXJDbGFzcyA9
IFtET01XZWJLaXRDU1NLZXlmcmFtZVJ1bGUgY2xhc3NdOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAKICAgICB9CiAgICAgcmV0dXJuIFtbW3dyYXBwZXJDbGFzcyBhbGxvY10gX2lu
aXRXaXRoQ1NTUnVsZTppbXBsXSBhdXRvcmVsZWFzZV07CiB9CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL29iamMvRE9NSW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NSW50ZXJuYWwuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2JpbmRpbmdzL29i
amMvRE9NSW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDYgKzE0MywxMSBAQAogI2lt
cG9ydCAiRE9NVGV4dEludGVybmFsLmgiCiAjaW1wb3J0ICJET01UcmVlV2Fsa2VySW50ZXJuYWwu
aCIKICNpbXBvcnQgIkRPTVVJRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NV2ViS2l0QW5p
bWF0aW9uRXZlbnRJbnRlcm5hbC5oIgorI2ltcG9ydCAiRE9NV2ViS2l0Q1NTS2V5ZnJhbWVSdWxl
SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVdlYktpdENTU0tleWZyYW1lc1J1bGVJbnRlcm5hbC5o
IgorI2ltcG9ydCAiRE9NV2ViS2l0Q1NTTWF0cml4SW50ZXJuYWwuaCIKKyNpbXBvcnQgIkRPTVdl
YktpdFRyYW5zaXRpb25FdmVudEludGVybmFsLmgiCiAjaW1wb3J0ICJET01XaGVlbEV2ZW50SW50
ZXJuYWwuaCIKIAogI2lmIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3VyY2Vz
Lm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAzMjkxMikKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMzM3LDYgKzMzNywxMSBAQAogICAgIFRyZWVXYWxrZXIgXAogICAgIFVJRXZlbnQgXAogICAg
IFZvaWRDYWxsYmFjayBcCisJV2ViS2l0QW5pbWF0aW9uRXZlbnQgXAorCVdlYktpdENTU0tleWZy
YW1lUnVsZSBcCisJV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSBcCisJV2ViS2l0Q1NTVHJhbnNmb3Jt
VmFsdWUgXAogICAgIFdoZWVsRXZlbnQgXAogICAgIFhNTEh0dHBSZXF1ZXN0IFwKICAgICBYTUxI
dHRwUmVxdWVzdEV4Y2VwdGlvbiBcCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHJldmlzaW9uIDMy
OTEyKQorKysgV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjE5LDYgKzIxOSwxNCBAQAogICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihzdWJtaXRFdmVu
dCwgYXR0cik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lcnJvckF0dHIpIHsK
ICAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZXJyb3JFdmVudCwgYXR0cik7CisgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXRhbmltYXRpb25zdGFydEF0dHIpIHsKKyAg
ICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIod2Via2l0QW5pbWF0aW9uU3RhcnRFdmVudCwgYXR0
cik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb253ZWJraXRhbmltYXRpb25pdGVy
YXRpb25BdHRyKSB7CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKHdlYmtpdEFuaW1hdGlv
bkl0ZXJhdGlvbkV2ZW50LCBhdHRyKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bndlYmtpdGFuaW1hdGlvbmVuZEF0dHIpIHsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIo
d2Via2l0QW5pbWF0aW9uRW5kRXZlbnQsIGF0dHIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9ud2Via2l0dHJhbnNpdGlvbmVuZEF0dHIpIHsKKyAgICAgICAgc2V0SFRNTEV2ZW50
TGlzdGVuZXIod2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50LCBhdHRyKTsgICAgICAgIAogICAgIH0K
IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAzMjkxMikK
KysrIFdlYkNvcmUvaHRtbC9IVE1MQXR0cmlidXRlTmFtZXMuaW4JKHdvcmtpbmcgY29weSkKQEAg
LTEzNSw2ICsxMzUsMTAgQEAKIG9uc3RvcmFnZQogb25zdWJtaXQKIG9udW5sb2FkCitvbndlYmtp
dGFuaW1hdGlvbmVuZAorb253ZWJraXRhbmltYXRpb25pdGVyYXRpb24KK29ud2Via2l0YW5pbWF0
aW9uc3RhcnQKK29ud2Via2l0dHJhbnNpdGlvbmVuZAogcGFnZXgKIHBhZ2V5CiBwbGFjZWhvbGRl
cgpJbmRleDogV2ViQ29yZS9kb20vRXZlbnROYW1lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZG9tL0V2ZW50TmFtZXMuaAkocmV2aXNpb24gMzI5MTIpCisrKyBXZWJDb3JlL2RvbS9FdmVudE5h
bWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNiw2ICsxMTYsMTIgQEAKICAgICBtYWNybyhwcm9n
cmVzcykgXAogICAgIG1hY3JvKHN0YWxsZWQpIFwKICAgICBcCisgICAgbWFjcm8od2Via2l0QW5p
bWF0aW9uRW5kKSBcCisgICAgbWFjcm8od2Via2l0QW5pbWF0aW9uU3RhcnQpIFwKKyAgICBtYWNy
byh3ZWJraXRBbmltYXRpb25JdGVyYXRpb24pIFwKKyAgICBcCisgICAgbWFjcm8od2Via2l0VHJh
bnNpdGlvbkVuZCkgXAorICAgIFwKIC8vIGVuZCBvZiBET01fRVZFTlRfTkFNRVNfRk9SX0VBQ0gK
IAogI2lmbmRlZiBET01fRVZFTlRfTkFNRVNfSElERV9HTE9CQUxTCkluZGV4OiBXZWJDb3JlL2Rv
bS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShy
ZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAzLDYgKzEwNCw4IEBACiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgog
I2luY2x1ZGUgIlRyZWVXYWxrZXIuaCIKICNpbmNsdWRlICJVSUV2ZW50LmgiCisjaW5jbHVkZSAi
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKKyNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQu
aCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3QuaCIK
ICNpbmNsdWRlICJYTUxOYW1lcy5oIgpAQCAtMjYwNSw2ICsyNjI4LDExIEBACiAgICAgaWYgKGV2
ZW50VHlwZSA9PSAiTWVzc2FnZUV2ZW50IikKICAgICAgICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZl
bnQ7CiAjZW5kaWYKKyAgICBpZiAoZXZlbnRUeXBlID09ICJXZWJLaXRBbmltYXRpb25FdmVudCIp
CisgICAgICAgIHJldHVybiBuZXcgV2ViS2l0QW5pbWF0aW9uRXZlbnQ7ICAgIAorICAgIGlmIChl
dmVudFR5cGUgPT0gIldlYktpdFRyYW5zaXRpb25FdmVudCIpCisgICAgICAgIHJldHVybiBuZXcg
V2ViS2l0VHJhbnNpdGlvbkV2ZW50OyAgICAKKwogICAgIGVjID0gTk9UX1NVUFBPUlRFRF9FUlI7
CiAgICAgcmV0dXJuIDA7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRXZlbnQuY3BwCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUv
ZG9tL0V2ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1MywxNiBAQAogfQogI2Vu
ZGlmCiAKK2Jvb2wgRXZlbnQ6OmlzV2ViS2l0QW5pbWF0aW9uRXZlbnQoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30gICAgCisKK2Jvb2wgRXZlbnQ6OmlzV2ViS2l0VHJhbnNpdGlvbkV2
ZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9ICAgIAorCiBib29sIEV2ZW50Ojpz
dG9yZXNSZXN1bHRBc1N0cmluZygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDog
V2ViQ29yZS9kb20vV2ViS2l0QW5pbWF0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9XZWJLaXRBbmltYXRpb25FdmVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20v
V2ViS2l0QW5pbWF0aW9uRXZlbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBX
ZWJLaXRBbmltYXRpb25FdmVudF9oCisjZGVmaW5lIFdlYktpdEFuaW1hdGlvbkV2ZW50X2gKKwor
I2luY2x1ZGUgIkV2ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAgICAgCisgICAg
Y2xhc3MgV2ViS2l0QW5pbWF0aW9uRXZlbnQgOiBwdWJsaWMgRXZlbnQgeworICAgIHB1YmxpYzoK
KyAgICAgICAgV2ViS2l0QW5pbWF0aW9uRXZlbnQoKTsKKyAgICAgICAgV2ViS2l0QW5pbWF0aW9u
RXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5h
bWUsIGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgICAgIHZpcnR1YWwgfldlYktpdEFuaW1hdGlv
bkV2ZW50KCk7CisgICAgICAgIAorICAgICAgICB2b2lkIGluaXRXZWJLaXRBbmltYXRpb25FdmVu
dChjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sIGNhbkJ1YmJsZUFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBjYW5jZWxhYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZSBlbGFwc2VkVGltZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
Y29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBlbGFw
c2VkVGltZSgpIGNvbnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzV2ViS2l0
QW5pbWF0aW9uRXZlbnQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIFN0cmluZyBtX2FuaW1hdGlvbk5hbWU7CisgICAgICAgIGRvdWJsZSBt
X2VsYXBzZWRUaW1lOworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBXZWJLaXRBbmltYXRpb25FdmVudF9oCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRh
cmdldE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0Tm9kZS5j
cHAJKHJldmlzaW9uIDMyOTEyKQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgIlByb2dyZXNzRXZlbnQu
aCIKICNpbmNsdWRlICJSZWdpc3RlcmVkRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIlRleHRF
dmVudC5oIgorI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCisjaW5jbHVkZSAiV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+CiAKQEAgLTM2Niw3ICszNjgsMjQgQEAKICNlbmRpZgogfQogCitib29s
IEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hXZWJLaXRBbmltYXRpb25FdmVudChjb25zdCBBdG9t
aWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUg
ZWxhcHNlZFRpbWUpCit7CisgICAgQVNTRVJUKCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwor
ICAgIAorICAgIFJlZlB0cjxXZWJLaXRBbmltYXRpb25FdmVudD4gYW5pbUV2ZW50ID0gbmV3IFdl
YktpdEFuaW1hdGlvbkV2ZW50KGV2ZW50VHlwZSwgYW5pbWF0aW9uTmFtZSwgZWxhcHNlZFRpbWUp
OworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KGFu
aW1FdmVudCwgZWMsIHRydWUpOworfQogCitib29sIEV2ZW50VGFyZ2V0Tm9kZTo6ZGlzcGF0Y2hX
ZWJLaXRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpCit7CisgICAgQVNTRVJU
KCFldmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOworICAgIAorICAgIFJlZlB0cjxXZWJLaXRUcmFu
c2l0aW9uRXZlbnQ+IHRyYW5zaXRpb25FdmVudCA9IG5ldyBXZWJLaXRUcmFuc2l0aW9uRXZlbnQo
ZXZlbnRUeXBlLCBwcm9wZXJ0eU5hbWUsIGVsYXBzZWRUaW1lKTsKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0cmFuc2l0aW9uRXZlbnQsIGVjLCB0
cnVlKTsKK30KKyAgICAKIHZvaWQgRXZlbnRUYXJnZXROb2RlOjpyZW1vdmVIVE1MRXZlbnRMaXN0
ZW5lcihjb25zdCBBdG9taWNTdHJpbmcgJmV2ZW50VHlwZSkKIHsKICAgICBpZiAoIW1fcmVnZExp
c3RlbmVycykgLy8gbm90aGluZyB0byByZW1vdmUKSW5kZXg6IFdlYkNvcmUvZG9tL1dlYktpdEFu
aW1hdGlvbkV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRp
b25FdmVudC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9XZWJLaXRBbmltYXRpb25F
dmVudC5pZGwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworbW9kdWxlIGV2
ZW50cyB7CisKK2ludGVyZmFjZSBXZWJLaXRBbmltYXRpb25FdmVudCA6IEV2ZW50IHsKKyAgICAg
cmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICBhbmltYXRpb25OYW1lOworICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlICAgICAgICAgICAgIGVsYXBzZWRUaW1lOworICAg
ICB2b2lkICAgICAgICAgICAgICAgaW5pdFdlYktpdEFuaW1hdGlvbkV2ZW50KGluIERPTVN0cmlu
ZyB0eXBlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGJvb2xlYW4gY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgYW5pbWF0aW9uTmFtZUFyZywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBkb3VibGUgZWxhcHNl
ZFRpbWVBcmcpOworfTsKKworfQpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyMCw3ICs1MjAsMTEgQEAKICAg
ICAgICAgRE9NTk9ERUlOU0VSVEVESU5UT0RPQ1VNRU5UX0xJU1RFTkVSID0gMHgxMCwKICAgICAg
ICAgRE9NQVRUUk1PRElGSUVEX0xJU1RFTkVSICAgICAgICAgICAgID0gMHgyMCwKICAgICAgICAg
RE9NQ0hBUkFDVEVSREFUQU1PRElGSUVEX0xJU1RFTkVSICAgID0gMHg0MCwKLSAgICAgICAgT1ZF
UkZMT1dDSEFOR0VEX0xJU1RFTkVSICAgICAgICAgICAgID0gMHg4MAorICAgICAgICBPVkVSRkxP
V0NIQU5HRURfTElTVEVORVIgICAgICAgICAgICAgPSAweDgwLAorICAgICAgICBBTklNQVRJT05F
TkRfTElTVEVORVIgICAgICAgICAgICAgICAgPSAweDEwMCwKKyAgICAgICAgQU5JTUFUSU9OU1RB
UlRfTElTVEVORVIgICAgICAgICAgICAgID0gMHgyMDAsCisgICAgICAgIEFOSU1BVElPTklURVJB
VElPTl9MSVNURU5FUiAgICAgICAgICA9IDB4NDAwLAorICAgICAgICBUUkFOU0lUSU9ORU5EX0xJ
U1RFTkVSICAgICAgICAgICAgICAgPSAweDgwMCAgICAgICAgCiAgICAgfTsKIAogICAgIGJvb2wg
aGFzTGlzdGVuZXJUeXBlKExpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGUpIGNvbnN0IHsgcmV0dXJu
IChtX2xpc3RlbmVyVHlwZXMgJiBsaXN0ZW5lclR5cGUpOyB9CkluZGV4OiBXZWJDb3JlL2RvbS9X
ZWJLaXRBbmltYXRpb25FdmVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vV2ViS2l0
QW5pbWF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV2ViS2l0QW5p
bWF0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKioKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgorCisjaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCisgICAgdXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CisgICAgCisgICAgV2ViS2l0QW5pbWF0aW9uRXZlbnQ6Oldl
YktpdEFuaW1hdGlvbkV2ZW50KCkKKyAgICA6IG1fYW5pbWF0aW9uTmFtZSgpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBXZWJLaXRBbmltYXRpb25FdmVudDo6V2ViS2l0QW5pbWF0aW9uRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBlbGFwc2VkVGltZSkKKyAgICA6IEV2ZW50KHR5cGUsIHRydWUsIHRydWUpCisgICAgLCBt
X2FuaW1hdGlvbk5hbWUoYW5pbWF0aW9uTmFtZSkKKyAgICAsIG1fZWxhcHNlZFRpbWUoZWxhcHNl
ZFRpbWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBXZWJLaXRBbmltYXRpb25FdmVudDo6fldl
YktpdEFuaW1hdGlvbkV2ZW50KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgV2ViS2l0
QW5pbWF0aW9uRXZlbnQ6OmluaXRXZWJLaXRBbmltYXRpb25FdmVudChjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
b29sIC8qY2FuQnViYmxlQXJnKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJvb2wgLypjYW5jZWxhYmxlQXJnKi8sCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGVsYXBzZWRUaW1l
KQorICAgIHsKKyAgICAgICAgaWYgKGRpc3BhdGNoZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGluaXRFdmVudCh0eXBlLCBmYWxzZSwgdHJ1ZSk7CisgICAgICAg
IAorICAgICAgICBtX2FuaW1hdGlvbk5hbWUgPSBhbmltYXRpb25OYW1lOworICAgIH0KKyAgICAK
KyAgICBjb25zdCBTdHJpbmcmIFdlYktpdEFuaW1hdGlvbkV2ZW50OjphbmltYXRpb25OYW1lKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2FuaW1hdGlvbk5hbWU7CisgICAgfQorICAg
IAorICAgIGRvdWJsZSBXZWJLaXRBbmltYXRpb25FdmVudDo6ZWxhcHNlZFRpbWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZWxhcHNlZFRpbWU7CisgICAgfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmgJKHJldmlzaW9uIDMyOTEy
KQorKysgV2ViQ29yZS9kb20vRXZlbnRUYXJnZXROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY2
LDYgKzY2LDggQEAKICAgICB2b2lkIGRpc3BhdGNoU2ltdWxhdGVkQ2xpY2soUGFzc1JlZlB0cjxF
dmVudD4gdW5kZXJseWluZ0V2ZW50LCBib29sIHNlbmRNb3VzZUV2ZW50cyA9IGZhbHNlLCBib29s
IHNob3dQcmVzc2VkTG9vayA9IHRydWUpOwogICAgIGJvb2wgZGlzcGF0Y2hQcm9ncmVzc0V2ZW50
KGNvbnN0IEF0b21pY1N0cmluZyAmZXZlbnRUeXBlLCBib29sIGxlbmd0aENvbXB1dGFibGVBcmcs
IHVuc2lnbmVkIGxvYWRlZEFyZywgdW5zaWduZWQgdG90YWxBcmcpOwogICAgIHZvaWQgZGlzcGF0
Y2hTdG9yYWdlRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIGNvbnN0IFN0cmlu
ZyYga2V5LCBjb25zdCBTdHJpbmcmIG9sZFZhbHVlLCBjb25zdCBTdHJpbmcmIG5ld1ZhbHVlLCBG
cmFtZSogc291cmNlKTsKKyAgICBib29sIGRpc3BhdGNoV2ViS2l0QW5pbWF0aW9uRXZlbnQoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwg
ZG91YmxlIGVsYXBzZWRUaW1lKTsKKyAgICBib29sIGRpc3BhdGNoV2ViS2l0VHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
TmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKTsKIAogICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2Nh
bEV2ZW50cyhFdmVudCosIGJvb2wgdXNlQ2FwdHVyZSk7CiAKSW5kZXg6IFdlYkNvcmUvZG9tL0V2
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnQuaAkocmV2aXNpb24gMzI5MTIp
CisrKyBXZWJDb3JlL2RvbS9FdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDgg
QEAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0b3Jh
Z2VFdmVudCgpIGNvbnN0OwogI2VuZGlmCisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dlYktpdEFu
aW1hdGlvbkV2ZW50KCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1dlYktpdFRyYW5z
aXRpb25FdmVudCgpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgcHJvcGFnYXRpb25TdG9wcGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wYWdhdGlvblN0b3BwZWQ7IH0KIApJbmRleDogV2ViQ29yZS9k
b20vV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9X
ZWJLaXRUcmFuc2l0aW9uRXZlbnQuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9kb20vV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCittb2R1bGUgZXZlbnRzIHsKKworaW50ZXJmYWNlIFdlYktpdFRyYW5zaXRpb25FdmVudCA6
IEV2ZW50IHsKKyAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyAgICAgICAgICBwcm9w
ZXJ0eU5hbWU7CisgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgICAgICAgICAgICAgZWxh
cHNlZFRpbWU7CisgICAgIHZvaWQgICAgICAgICAgICAgICBpbml0V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KGluIERPTVN0cmluZyB0eXBlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluIGJvb2xlYW4gY2FuY2VsYWJsZUFyZywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBET01TdHJpbmcgcHJvcGVy
dHlOYW1lQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
IGRvdWJsZSBlbGFwc2VkVGltZUFyZyk7Cit9OworCit9CkluZGV4OiBXZWJDb3JlL2RvbS9XZWJL
aXRUcmFuc2l0aW9uRXZlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1dlYktpdFRy
YW5zaXRpb25FdmVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2RvbS9XZWJLaXRUcmFu
c2l0aW9uRXZlbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY5IEBACisvKioKKyAqIENv
cHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZlbnQuaCIKKworI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorICAgIHVzaW5n
IG5hbWVzcGFjZSBFdmVudE5hbWVzOworICAgIAorICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6
V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAgICA6IG1fcHJvcGVydHlOYW1lKCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFdlYktpdFRyYW5zaXRpb25FdmVudDo6V2ViS2l0VHJhbnNpdGlvbkV2
ZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IGRvdWJsZSBlbGFwc2VkVGltZSkKKyAgICA6IEV2ZW50KHR5cGUsIHRydWUsIHRydWUpCisgICAg
LCBtX3Byb3BlcnR5TmFtZShwcm9wZXJ0eU5hbWUpCisgICAgLCBtX2VsYXBzZWRUaW1lKGVsYXBz
ZWRUaW1lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojp+
V2ViS2l0VHJhbnNpdGlvbkV2ZW50KCkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgV2Vi
S2l0VHJhbnNpdGlvbkV2ZW50Ojppbml0V2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgLypjYW5CdWJibGVBcmcqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCAvKmNhbmNlbGFibGVBcmcqLywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZSBlbGFwc2Vk
VGltZSkKKyAgICB7CisgICAgICAgIGlmIChkaXNwYXRjaGVkKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIAorICAgICAgICBpbml0RXZlbnQodHlwZSwgZmFsc2UsIHRydWUpOworICAg
ICAgICAKKyAgICAgICAgbV9wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7CisgICAgfQorICAg
IAorICAgIGNvbnN0IFN0cmluZyYgV2ViS2l0VHJhbnNpdGlvbkV2ZW50Ojpwcm9wZXJ0eU5hbWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlOYW1lOworICAgIH0KKyAg
ICAKKyAgICBkb3VibGUgV2ViS2l0VHJhbnNpdGlvbkV2ZW50OjplbGFwc2VkVGltZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9lbGFwc2VkVGltZTsKKyAgICB9CisgICAgCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2RvbS9FdmVudFRhcmdldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuY3BwCShyZXZpc2lvbiAzMjkxMikK
KysrIFdlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYg
KzEwMSwxNCBAQAogICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkRPTUNIQVJBQ1RFUkRBVEFNT0RJ
RklFRF9MSVNURU5FUjsKICAgICBlbHNlIGlmIChldmVudFR5cGUgPT0gb3ZlcmZsb3djaGFuZ2Vk
RXZlbnQpCiAgICAgICAgIHR5cGUgPSBEb2N1bWVudDo6T1ZFUkZMT1dDSEFOR0VEX0xJU1RFTkVS
OworICAgIGVsc2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRBbmltYXRpb25TdGFydEV2ZW50KQor
ICAgICAgICB0eXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNUQVJUX0xJU1RFTkVSOworICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSB3ZWJraXRBbmltYXRpb25FbmRFdmVudCkKKyAgICAgICAgdHlw
ZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7CisgICAgZWxzZSBpZiAoZXZlbnRU
eXBlID09IHdlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50KQorICAgICAgICB0eXBlID0gRG9j
dW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsKKyAgICBlbHNlIGlmIChldmVudFR5
cGUgPT0gd2Via2l0VHJhbnNpdGlvbkVuZEV2ZW50KQorICAgICAgICB0eXBlID0gRG9jdW1lbnQ6
OlRSQU5TSVRJT05FTkRfTElTVEVORVI7ICAgIAogCiAgICAgaWYgKHR5cGUpCiAgICAgICAgIGRv
Y3VtZW50LT5hZGRMaXN0ZW5lclR5cGUodHlwZSk7CkluZGV4OiBXZWJDb3JlL2RvbS9XZWJLaXRU
cmFuc2l0aW9uRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9XZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1dlYktpdFRyYW5zaXRpb25F
dmVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA3IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdlYktpdFRyYW5zaXRpb25F
dmVudF9oCisjZGVmaW5lIFdlYktpdFRyYW5zaXRpb25FdmVudF9oCisKKyNpbmNsdWRlICJFdmVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgICAgIAorICAgIGNsYXNzIFdlYktpdFRy
YW5zaXRpb25FdmVudCA6IHB1YmxpYyBFdmVudCB7CisgICAgcHVibGljOgorICAgICAgICBXZWJL
aXRUcmFuc2l0aW9uRXZlbnQoKTsKKyAgICAgICAgV2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0
IEF0b21pY1N0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBl
bGFwc2VkVGltZSk7CisgICAgICAgIHZpcnR1YWwgfldlYktpdFRyYW5zaXRpb25FdmVudCgpOwor
ICAgICAgICAKKyAgICAgICAgdm9pZCBpbml0V2ViS2l0VHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdHlwZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wg
Y2FuQnViYmxlQXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGNhbmNl
bGFibGVBcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYg
cHJvcGVydHlOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZWxh
cHNlZFRpbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZSgpIGNv
bnN0OworICAgICAgICAKKyAgICAgICAgdmlydHVhbCBib29sIGlzV2ViS2l0VHJhbnNpdGlvbkV2
ZW50KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBTdHJpbmcgbV9wcm9wZXJ0eU5hbWU7CisgICAgICAgIGRvdWJsZSBtX2VsYXBzZWRUaW1l
OworICAgIH07CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBXZWJL
aXRUcmFuc2l0aW9uRXZlbnRfaApJbmRleDogV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVs
ZS5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmlkbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworbW9kdWxlIGNzcyB7CisKKyAgICAv
LyBJbnRyb2R1Y2VkIGluIERPTSBMZXZlbCA/OgorICAgIGludGVyZmFjZSBbCisgICAgICAgIEdl
bmVyYXRlQ29uc3RydWN0b3IsCisgICAgICAgIEhhc0luZGV4R2V0dGVyLAorICAgICAgICBJbnRl
cmZhY2VVVUlEPTQ5ZjU2NDRhLTVkYmItNGUzMS1hYzZiLTk0NDZhZTM4OTVjOSwKKyAgICAgICAg
SW1wbGVtZW50YXRpb25VVUlEPWE3Yzc4YWFhLTU4ODMtNGVmMi1hOGJkLWYyZjFhMWZkMDI1YQor
ICAgIF0gV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSA6IENTU1J1bGUgeworCisgICAgICAgIGF0dHJp
YnV0ZSBbQ29udmVydE51bGxTdHJpbmdUbz1OdWxsLCBDb252ZXJ0TnVsbFRvTnVsbFN0cmluZ10g
RE9NU3RyaW5nIG5hbWU7CisgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NSdWxlTGlzdCBj
c3NSdWxlczsKKyAgICAgICAgCisgICAgICAgIHZvaWQgaW5zZXJ0UnVsZShpbiBET01TdHJpbmcg
cnVsZSk7CisgICAgICAgIHZvaWQgZGVsZXRlUnVsZShpbiBET01TdHJpbmcga2V5KTsKKyAgICAg
ICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIGZpbmRSdWxlKGluIERPTVN0cmluZyBrZXkpOworICAg
IH07CisKK30KSW5kZXg6IFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlLmlkbAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lUnVsZS5pZGwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIg
dGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKK21vZHVsZSBjc3MgeworCisgICAgLy8gSW50cm9kdWNlZCBp
biBET00gTGV2ZWwgPzoKKyAgICBpbnRlcmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVj
dG9yLAorICAgICAgICBJbnRlcmZhY2VVVUlEPTg3YjdjZGU4LTU4MTgtNGY2OC1iNTU0LTUzODJl
NmQ5NDI4YywKKyAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWIwMDBkNDY4LWJiN2EtNDg2Ni04
OTQ2LTVkZWE4YjZhM2MxMworICAgIF0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlIDogQ1NTUnVsZSB7
CisKKyAgICAgICAgYXR0cmlidXRlIERPTVN0cmluZyBrZXlUZXh0OworICAgICAgICByZWFkb25s
eSBhdHRyaWJ1dGUgQ1NTU3R5bGVEZWNsYXJhdGlvbiBzdHlsZTsKKworICAgIH07CisKK30KSW5k
ZXg6IFdlYkNvcmUvY3NzL0NTU1J1bGUuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NT
U1J1bGUuaWRsCShyZXZpc2lvbiAzMjkxMikKKysrIFdlYkNvcmUvY3NzL0NTU1J1bGUuaWRsCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNo
b3J0IE1FRElBX1JVTEUgPSA0OwogICAgICAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBGT05UX0ZB
Q0VfUlVMRSA9IDU7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFBBR0VfUlVMRSA9IDY7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFdFQktJVF9LRVlGUkFNRVNfUlVMRSA9IDc7
CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IFdFQktJVF9LRVlGUkFNRV9SVUxFID0gODsK
IAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgc2hvcnQgICB0eXBlOwogCklu
ZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NNYXRyaXguaWRsCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL1dlYktpdENTU01hdHJpeC5pZGwJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NNYXRyaXguaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCittb2R1bGUg
Y3NzIHsKKworICAgIC8vIEludHJvZHVjZWQgaW4gRE9NIExldmVsID86CisgICAgaW50ZXJmYWNl
IFsKKyAgICAgICAgSW50ZXJmYWNlVVVJRD0zNDljOTg5ZS04NzdmLTQxNmUtOWNjZS1jYTgxMWU1
MmQ5ZTgsCisgICAgICAgIEltcGxlbWVudGF0aW9uVVVJRD01ZmViMTZlNi1mNDQxLTRiNDYtOWIx
MC05ZTgzM2E0ZGNkMWIKKyAgICBdIFdlYktpdENTU01hdHJpeCB7CisKKyAgICAgICAgYXR0cmli
dXRlIGZsb2F0IG0xMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0xMjsKKyAgICAgICAgYXR0
cmlidXRlIGZsb2F0IG0xMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0xNDsKKyAgICAgICAg
YXR0cmlidXRlIGZsb2F0IG0yMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0yMjsKKyAgICAg
ICAgYXR0cmlidXRlIGZsb2F0IG0yMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0yNDsKKyAg
ICAgICAgYXR0cmlidXRlIGZsb2F0IG0zMTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0zMjsK
KyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0zMzsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG0z
NDsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG00MTsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0
IG00MjsKKyAgICAgICAgYXR0cmlidXRlIGZsb2F0IG00MzsKKyAgICAgICAgYXR0cmlidXRlIGZs
b2F0IG00NDsKKworICAgICAgICB2b2lkICAgICAgICAgICAgc2V0TWF0cml4VmFsdWUoaW4gRE9N
U3RyaW5nIHN0cmluZyk7CisgICAgICAgIFdlYktpdENTU01hdHJpeCBtdWx0aXBseShpbiBXZWJL
aXRDU1NNYXRyaXggc2Vjb25kTWF0cml4KSByYWlzZXMgQ1NTRXhjZXB0aW9uOworICAgICAgICBX
ZWJLaXRDU1NNYXRyaXggaW52ZXJzZSgpIHJhaXNlcyBDU1NFeGNlcHRpb247CisgICAgICAgIFdl
YktpdENTU01hdHJpeCB0cmFuc2xhdGUoaW4gZmxvYXQgeCwgaW4gZmxvYXQgeSwgaW4gZmxvYXQg
eik7CisgICAgICAgIFdlYktpdENTU01hdHJpeCBzY2FsZShpbiBmbG9hdCBzY2FsZVgsIGluIGZs
b2F0IHNjYWxlWSwgaW4gZmxvYXQgc2NhbGVaKTsKKyAgICAgICAgV2ViS2l0Q1NTTWF0cml4IHJv
dGF0ZShpbiBmbG9hdCByb3RYLCBpbiBmbG9hdCByb3RZLCBpbiBmbG9hdCByb3RaKTsKKyAgICAg
ICAgV2ViS2l0Q1NTTWF0cml4IHJvdGF0ZUF4aXNBbmdsZShpbiBmbG9hdCB4LCBpbiBmbG9hdCB5
LCBpbiBmbG9hdCB6LCBpbiBmbG9hdCBhbmdsZSk7CisgICAgICAgIAorICAgICAgICBET01TdHJp
bmcgdG9TdHJpbmcoKTsKKyAgICB9OworCit9CkluZGV4OiBXZWJDb3JlL2Nzcy9XZWJLaXRDU1NU
cmFuc2Zvcm1WYWx1ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuaWRsCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9jc3MvV2ViS2l0Q1NTVHJh
bnNmb3JtVmFsdWUuaWRsCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9z
dG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworbW9kdWxlIGNzcyB7CisKKyAgICBpbnRl
cmZhY2UgWworICAgICAgICBHZW5lcmF0ZUNvbnN0cnVjdG9yLAorICAgICAgICBIYXNJbmRleEdl
dHRlcgorICAgICAgICBJbnRlcmZhY2VVVUlEPTMwM2ZlNjMyLTVkY2YtNDQ3Mi1iOTc3LTMzYTU0
ODFlMWQxMiwKKyAgICAgICAgSW1wbGVtZW50YXRpb25VVUlEPWViNDllNWM2LTYwNzUtNDViOC1i
NWM0LTdlNzc1YzAxZTdjNAorICAgIF0gV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUgOiBDU1NWYWx1
ZUxpc3QgeworCisgICAgICAgIC8vIE9wZXJhdGlvblR5cGVzCisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19VTktOT1dOX1RSQU5TRk9STSA9IDA7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19NQVRSSVggICAgICAgICAgICA9IDE7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19NQVRSSVgzRCAgICAgICAgICA9IDI7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19ST1RBVEUgICAgICAgICAgICA9IDM7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19ST1RBVEUzRCAgICAgICAgICA9IDQ7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19UUkFOU0xBVEUgICAgICAgICA9IDU7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19UUkFOU0xBVEUzRCAgICAgICA9IDY7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19TQ0FMRSAgICAgICAgICAgICA9IDc7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19TQ0FMRTNEICAgICAgICAgICA9IDg7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19TS0VXWCAgICAgICAgICAgICA9IDk7CisgICAgICAgIGNvbnN0IHVuc2ln
bmVkIHNob3J0IENTU19TS0VXWSAgICAgICAgICAgICA9IDEwOworICAgICAgICBjb25zdCB1bnNp
Z25lZCBzaG9ydCBDU1NfU0tFV1ogICAgICAgICAgICAgPSAxMTsKKyAgICAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgQ1NTX1BFUlNQRUNUSVZFICAgICAgID0gMTI7CisgICAgICAgIGNvbnN0IHVu
c2lnbmVkIHNob3J0IENTU19ST1RBVEVYICAgICAgICAgICA9IDEzOworICAgICAgICBjb25zdCB1
bnNpZ25lZCBzaG9ydCBDU1NfUk9UQVRFWSAgICAgICAgICAgPSAxNDsKKyAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgQ1NTX1JPVEFURVogICAgICAgICAgID0gMTU7CisgICAgICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0IENTU19UUkFOU0xBVEVYICAgICAgICA9IDE2OworICAgICAgICBjb25z
dCB1bnNpZ25lZCBzaG9ydCBDU1NfVFJBTlNMQVRFWSAgICAgICAgPSAxNzsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgc2hvcnQgQ1NTX1RSQU5TTEFURVogICAgICAgID0gMTg7CisgICAgICAgIGNv
bnN0IHVuc2lnbmVkIHNob3J0IENTU19TQ0FMRVggICAgICAgICAgICA9IDE5OworICAgICAgICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBDU1NfU0NBTEVZICAgICAgICAgICAgPSAyMDsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2hvcnQgQ1NTX1NDQUxFWiAgICAgICAgICAgID0gMjE7CisKKyAgICAg
ICAgcmVhZG9ubHkgYXR0cmlidXRlIHVuc2lnbmVkIHNob3J0IG9wZXJhdGlvblR5cGU7CisgICAg
fTsKKworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>