<?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>158067</bug_id>
          
          <creation_ts>2016-05-25 05:54:38 -0700</creation_ts>
          <short_desc>Media queries and platform screen modernization and streamlining</short_desc>
          <delta_ts>2016-05-26 17:04:20 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1196304</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 05:54:38 -0700</bug_when>
    <thetext>Media queries and platform screen modernization and streamlining</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196358</commentid>
    <comment_count>1</comment_count>
      <attachid>279777</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 09:26:54 -0700</bug_when>
    <thetext>Created attachment 279777
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196360</commentid>
    <comment_count>2</comment_count>
      <attachid>279778</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 09:35:22 -0700</bug_when>
    <thetext>Created attachment 279778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196625</commentid>
    <comment_count>3</comment_count>
      <attachid>279860</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 20:12:16 -0700</bug_when>
    <thetext>Created attachment 279860
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196635</commentid>
    <comment_count>4</comment_count>
      <attachid>279863</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-25 21:11:11 -0700</bug_when>
    <thetext>Created attachment 279863
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196640</commentid>
    <comment_count>5</comment_count>
      <attachid>279860</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-25 21:38:12 -0700</bug_when>
    <thetext>Comment on attachment 279860
Patch

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

partial review

&gt; Source/WebCore/css/MediaList.cpp:301
&gt; +                if (expression.mediaFeature() == MediaFeatureNames::resolution || expression.mediaFeature() == MediaFeatureNames::maxResolution || expexpression.mediaFeature() == MediaFeatureNames::minResoution) {

expexpression
I guess EFL is the only port to enable RESOLUTION_MEDIA_QUERY

&gt; Source/WebCore/platform/mac/PlatformScreenMac.mm:125
&gt; +    return [window screen] ? : firstScreen();

I&apos;ve never seen this before.  What does it do if [window screen] is non-nil?

&gt; Source/WebCore/platform/mac/PlatformScreenMac.mm:134
&gt; -    return nil;
&gt; +    return firstScreen();

Is this a subtle change in behavior?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196736</commentid>
    <comment_count>6</comment_count>
      <attachid>279860</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-26 09:06:24 -0700</bug_when>
    <thetext>Comment on attachment 279860
Patch

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

&gt;&gt; Source/WebCore/platform/mac/PlatformScreenMac.mm:125
&gt;&gt; +    return [window screen] ? : firstScreen();
&gt; 
&gt; I&apos;ve never seen this before.  What does it do if [window screen] is non-nil?

Returns the value of &quot;[window screen]&quot;; it behaves exactly like the || operator in perl or another way to put it is that &quot;a ?: b&quot; is the same as &quot;a ? a : b&quot; except that it only evaluates a once.

We don’t use it in cross platform code, probably because it’s not standard C++, but it has been supported by gcc and clang since before the WebKit project even existed.

I had thought use of this was common in WebKit, but it turns out that I can only find two uses of it, in WebKit2/UIProcess/API/Cocoa/WKWebView.mm and in WebKit2/UIProcess/ios/WKContentViewInteraction.mm; in both cases it’s written &quot;?:&quot; rather than &quot;? :&quot; with a space. I would be happy to just use a local variable instead if you prefer.

&gt;&gt; Source/WebCore/platform/mac/PlatformScreenMac.mm:134
&gt;&gt; +    return firstScreen();
&gt; 
&gt; Is this a subtle change in behavior?

It is a change; here is why it is OK. There were only two call sites for this function:

1) effectiveMousePositionForSelectionAutoscroll in EventHandlerMac.mm called this function and did not check for nil.  There was no real chance that call site would ever get nil — unclear how the screen could disappear before an event from that screen is handled — so the code change doesn’t affect any real case. The code after this point uses the returned NSScreen * and calls the &quot;frame&quot; method; calling that on a nil object will return something unpredictable and so returning an actual object clearly would not do harm, but it’s not really all that helpful to discuss it since it’s really untestable dead code.

2) The function in this file named screenForWidget called this function, and in the old version of that function, if it returned nil, it would call screenForWindow(nil), which was a way to get the pointer to the first screen, as the comment indicated. The new version of screenForWidget, now an overload of screen that takes a Widget*, continues to return the first screen in that case, but now it does so as a result of the fact that all functions named screen, including this one, return that rather than nil.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196738</commentid>
    <comment_count>7</comment_count>
      <attachid>279889</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-26 09:07:40 -0700</bug_when>
    <thetext>Created attachment 279889
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196741</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-26 09:09:26 -0700</bug_when>
    <thetext>Hoping to get a review and land this soon. While there is more work to be done in that area, this should cut down on the number of memory allocations when dealing with media queries and possibly cut down a bit on total memory used for the queries. Who knows, on pages that use a ton of queries it might even “move the needle” a tiny bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196799</commentid>
    <comment_count>9</comment_count>
      <attachid>279889</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-26 11:41:58 -0700</bug_when>
    <thetext>Comment on attachment 279889
Patch

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

200k patches aren&apos;t easy to review

&gt; Source/WebCore/css/CSSGrammar.y.in:655
&gt; -    media_query_exp_list {
&gt; -        $$ = new MediaQuery(MediaQuery::None, &quot;all&quot;, std::unique_ptr&lt;Vector&lt;std::unique_ptr&lt;MediaQueryExp&gt;&gt;&gt;($1));
&gt; +    media_query_expression_list {
&gt; +        $$ = new MediaQuery(MediaQuery::None, &quot;all&quot;, WTFMove(*$1));
&gt; +        delete $1;

Generated code with this change:
BEFORE:
        (yyval.mediaQuery) = new MediaQuery(MediaQuery::None, &quot;all&quot;, std::unique_ptr&lt;Vector&lt;std::unique_ptr&lt;MediaQueryExp&gt;&gt;&gt;((yyvsp[(1) - (1)].mediaQueryExpList)));
AFTER
        (yyval.mediaQuery) = new MediaQuery(MediaQuery::None, &quot;all&quot;, WTFMove(*(yyvsp[(1) - (1)].mediaQueryExpressionList)));
        delete (yyvsp[(1) - (1)].mediaQueryExpressionList);
mediaQueryExpressionList is a Vector&lt;MediaQueryExpression&gt;* in the union.  I&apos;m going to need a minute to wrap my head around why these deletes are now necessary when they weren&apos;t before, where the corresponding new is, and why they are not double deleting anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196840</commentid>
    <comment_count>10</comment_count>
      <attachid>279889</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-26 13:06:41 -0700</bug_when>
    <thetext>Comment on attachment 279889
Patch

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

&gt; Source/WebCore/css/CSSGrammar.y.in:620
&gt; +        $$ = new Vector&lt;MediaQueryExpression&gt;;

We allocated here with new, so delete is necessary to delete the sizeof(Vector&lt;MediaQueryExpression&gt;) bytes we allocate here.  WTFMoving just sets these bytes to 0, and they still need to be freed.  Before we were adopting this with a std::unique_ptr constructor and storing the std::unique_ptr&lt;ExpressionVector&gt; in MediaQuery, but now MediaQuery just stores the Vector.
Ok, I think I know what&apos;s going on here now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196859</commentid>
    <comment_count>11</comment_count>
      <attachid>279889</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-05-26 14:32:39 -0700</bug_when>
    <thetext>Comment on attachment 279889
Patch

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

&gt; Source/WebCore/css/MediaFeatureNames.h:83
&gt; +namespace MediaFeatureNames {

I agree, a namespace is nicer than putting MediaFeature in the name.

&gt; Source/WebCore/css/MediaList.cpp:144
&gt; +        String medium = stripLeadingAndTrailingHTMLSpaces(listString);

Is stripLeadingAndTrailingHTMLSpaces faster than stripWhiteSpace?  Is there a guarantee that there will be no internal whitespace?

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:203
&gt; +    return compareValue(width * aspectRatio.denominatorValue(), height * aspectRatio.numeratorValue(), op);

This used to do integer comparison and now it does float comparison.  This might cause some things that used to be considered equal to not be considered equal any more.

&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:233
&gt; +    return compareValue(bitsPerComponent, numericValue.value(), op);

Ditto

&gt; Source/WebCore/css/MediaQueryList.cpp:61
&gt; -void MediaQueryList::removeListener(PassRefPtr&lt;MediaQueryListListener&gt; listener)
&gt; +void MediaQueryList::removeListener(RefPtr&lt;MediaQueryListListener&gt;&amp;&amp; listener)

This should take a MediaQueryListListener*</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196907</commentid>
    <comment_count>12</comment_count>
      <attachid>279889</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-05-26 16:42:46 -0700</bug_when>
    <thetext>Comment on attachment 279889
Patch

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

Thank you so much for the review!

&gt;&gt; Source/WebCore/css/MediaList.cpp:144
&gt;&gt; +        String medium = stripLeadingAndTrailingHTMLSpaces(listString);
&gt; 
&gt; Is stripLeadingAndTrailingHTMLSpaces faster than stripWhiteSpace?  Is there a guarantee that there will be no internal whitespace?

Yes, stripLeadingAndTrailingHTMLSpaces is faster, but that is not why I am using it (see below).

Both functions strip only leading and trailing spaces, although the name of the stripWhiteSpace function does not make that as clear. Neither function strips internal whitespace.

The reason I am using this is that stripWhiteSpace strips many characters that it should not strip. Virtually every place in HTML, CSS, DOM, and other specifications that relies on stripping spaces call for stripping only the particular few ASCII characters that HTML calls spaces. Not all the other Unicode whitespace. It’s correctness that has me changing this. Technically it’s a change in behavior for some exotic whitespace characters to stop stripping them. I suppose I could add a couple test cases for this. Maybe after landing the patch (I’ve done that kind of thing before).

I don’t think there are *any* correct uses of stripWhiteSpace in WebKit.

&gt;&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:203
&gt;&gt; +    return compareValue(width * aspectRatio.denominatorValue(), height * aspectRatio.numeratorValue(), op);
&gt; 
&gt; This used to do integer comparison and now it does float comparison.  This might cause some things that used to be considered equal to not be considered equal any more.

True. The old code also used to do integer multiplication that could overflow. That could also change the result of some comparisons.

&gt;&gt; Source/WebCore/css/MediaQueryEvaluator.cpp:233
&gt;&gt; +    return compareValue(bitsPerComponent, numericValue.value(), op);
&gt; 
&gt; Ditto

Yes, absolutely.

But I think it’s even more unlikely than above that the floating point comparison will give a different result here in any important case. I suppose we’ll get different results if someone specifies a floating point value and before relied on integer truncation to make it equal to something. Like asking if this is 8.5 bits per component and getting a yes.

&gt;&gt; Source/WebCore/css/MediaQueryList.cpp:61
&gt;&gt; +void MediaQueryList::removeListener(RefPtr&lt;MediaQueryListListener&gt;&amp;&amp; listener)
&gt; 
&gt; This should take a MediaQueryListListener*

You are right. The issues are similar to the issues with removeEventListener. I would like to return here and improve this further, but I would also like to leave this as-is for now. I don’t want to change how the bindings are generated in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196919</commentid>
    <comment_count>13</comment_count>
      <attachid>279889</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-26 17:04:15 -0700</bug_when>
    <thetext>Comment on attachment 279889
Patch

Clearing flags on attachment: 279889

Committed r201441: &lt;http://trac.webkit.org/changeset/201441&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196920</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-05-26 17:04:20 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279777</attachid>
            <date>2016-05-25 09:26:54 -0700</date>
            <delta_ts>2016-05-25 09:35:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158067-20160525092802.patch</filename>
            <type>text/plain</type>
            <size>209128</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZmOTdlMGYwM2NjZDE5
MjVkNzY1YWFkNmM3Mzg0YWI1ZDNlMTc1Ni4uNzJiMmVkODI1OGNkYTE1N2EwOWQ5MGUwZDQ1NzQ2
NTQ2NWQ4ZjljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMSBAQAorMjAxNi0wNS0yNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWEgcXVlcmllcyBhbmQg
cGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVhbWxpbmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NSFRNTExpbmtFbGVtZW50IF9tZWRpYVF1ZXJ5TWF0Y2hlc10p
OiBVc2UgcmVmZXJlbmNlcywgdXNlIGZhc3RHZXRBdHRyaWJ1dGUsCisgICAgICAgIHBhc3MgYSBk
b2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUgdG8gdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRvciBh
bmQgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55LmluOiBVc2UgImV4cHJlc3Npb24iIGluc3RlYWQgb2YgImV4cCIg
Zm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb25zLgorICAgICAgICBVcGRhdGUgdmVjdG9ycyBhbmQg
YXJndW1lbnRzIHRvIG1vdmUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiB1c2lu
ZyB1bmlxdWVfcHRyLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDogVXNlIHByYWdt
YSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBN
YWRlIG1vcmUgb3ZlcnJpZGVzIHByaXZhdGUgYW5kIG1hcmtlZCB0aGVtIGZpbmFsLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OlNv
dXJjZVNpemU6OlNvdXJjZVNpemUpOiBBZGRlZCBtaXNzaW5nIFdURk1vdmUgdG8gYXZvaWQgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50IGNodXJuLiBDaGFuZ2VkIHR5cGUgb2YgZXhwcmVzc2lvbiB0
byBubyBsb25nZXIgdXNlIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNvdXJjZVNpemUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDogQ2hhbmdl
ZCBTb3VyY2VTaXplOjpleHByZXNzaW9uIHRvIG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAg
ICAgICAgQWxzbyBjaGFuZ2VkIFNvdXJjZVNpemU6Omxlbmd0aCB0byBiZSBSZWYgaW5zdGVhZCBv
ZiBSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUZlYXR1cmVOYW1lczo6aW5pdCk6IFN0cmVhbWxpbmVkIGEgYml0LiBSZW1vdmVkICJNZWRpYUZl
YXR1cmUiIHN1ZmZpeCBmcm9tCisgICAgICAgIG5hbWVzIG9mIG1lZGlhIGZlYXR1cmUgc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5oOiBVc2UgcHJhZ21hIG9uY2Uu
IENoYW5nZWQgbWVkaWEgZmVhdHVyZSBuYW1lIGdsb2JhbHMKKyAgICAgICAgdG8gdXNlIG5vcm1h
bCBXZWJLaXQgbmFtaW5nIHN0eWxlIGluc3RlYWQgb2YgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVy
c2NvcmVzLgorICAgICAgICBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkuIFJlbW92ZWQgIk1lZGlhRmVh
dHVyZSIgc3VmZml4IGZyb20gbmFtZXMgb2YgbWVkaWEgZmVhdHVyZSBzdHJpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjpNZWRpYVF1ZXJ5U2V0KTogU2ltcGxpZmllZCBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHRoZSBx
dWVyaWVzCisgICAgICAgIHZlY3RvciBjYW4gbm93IGJlIGNvcGllZCBub3JtYWxseS4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTWVkaWFEZXNjcmlwdG9yKTogTm9ybWFsaXplZCB0eXBlcyBhbmQg
Y2hhbmdlZCB0byB1c2UgaXNBU0NJSUFscGhhbnVtZXJpYy4KKyAgICAgICAgVGhlIG9sZCBjb2Rl
IHdhcyBub3QgaGFuZGxpbmcgJzAnIHRoZSB3YXkgdGhlIGNvbW1lbnQgc2FpZCBpdCBkaWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKTogQWRkZWQuIEhl
bHBlciBmdW5jdGlvbiB0byBjdXQgZG93biBvbiByZWR1bmRhbnQKKyAgICAgICAgY29kZSBpbiBm
dW5jdGlvbnMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6
IFVzZSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMgaW5zdGVhZCBvZgorICAgICAg
ICBzdHJpcFdoaXRlU3BhY2UuIFN0cmVhbWxpbmVkIGxvZ2ljIHVzaW5nIGhlbHBlciBmdW5jdGlv
bi4gVXBkYXRlZCB0byB1c2UgYSB2ZWN0b3Igb2YKKyAgICAgICAgcXVlcmllcyBpbnN0ZWFkIG9m
IGEgdmVjdG9yIG9mIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjphZGQpOiBVc2UgaW50ZXJuYWxQYXJzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6YWRk
TWVkaWFRdWVyeSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBub3QgYmUgdW5pcXVlX3B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCk6IFVzZSBtb2Rlcm4g
Zm9yIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6Ok1lZGlhTGlzdCk6IEluaXRp
YWxpemUgcG9pbnRlcnMgdG8gbnVsbCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgICAgICBy
YXRoZXIgdGhhbiBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dCk6IFJlbW92ZWQgdW5oZWxwZnVsIGxvY2FsIHZhcmlhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjppdGVtKTogVXBkYXRlZCBzaW5jZSBxdWVyaWVz
IG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZXMgdG8gcmVm
ZXJlbmNlcworICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdpdGggYXNzZXJ0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQpOiBVcGRhdGVk
IHRvIG1vZGVybml6ZS4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogVXNlIHByYWdtYSBv
bmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgQ2hhbmdlZCB2ZWN0b3IgdG8gY29udGFpbiBtZWRpYSBxdWVyaWVzIGluc3RlYWQg
b2YgdW5pcXVlX3B0ci4gVXNlIG51bGxwdHIgaW5zdGVhZCBvZiAwLgorICAgICAgICBJbml0aWFs
aXplIHBvaW50ZXJzIHRvIG51bGwgaGVyZS4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogRGVsZXRlZCBub3ctdW5uZWVkZWQgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4g
Qm90aCBhcmUKKyAgICAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCB3aXRob3V0IHVzIHdyaXRpbmcg
dGhlbSBleHBsaWNpdGx5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6c2VyaWFsaXpl
KTogUmV3cm90ZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
TWVkaWFRdWVyeSk6IFVwZGF0ZXMgc2luY2UgZXhwcmVzc2lvbnMgYXJlIG5vIGxvbmdlciB1bmlx
dWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IENoYW5nZWQg
cmV0dXJuIHR5cGUgdG8gcmVmZXJlbmNlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDog
VXNlIHByYWdtYSBvbmNlLiBBZGRlZCBpbmNsdWRlIHNpbmNlIHRoaXMgbm93IGluY2x1ZGVzIG1l
ZGlhIHF1ZXJ5CisgICAgICAgIGV4cHJlc3Npb25zLCBub3QganVzdCB1bmlxdWVfcHRyLiBEZWxl
dGVkIHRoZSB1bm5lZWRlZCBjb3B5IGZ1bmN0aW9uLgorCisgICAgICAgICogY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydERlcGVuZGVudCk6
IE1vdmVkIHRoaXMgaGVyZS4gSXQgdXNlZCB0byBiZSBhIG1lbWJlciBmdW5jdGlvbiBvZgorICAg
ICAgICBNZWRpYVF1ZXJ5RXhwLCBidXQgdGhpcyBmaWxlIGhhcyBhIGxvdCBtb3JlIGZ1bmN0aW9u
cyBhYm91dCBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaG93CisgICAgICAgIHRoZXkgYXJlIGV2YWx1
YXRlZCwgc28gaXQgcmVhbGx5IGJlbG9uZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOiBDaGFuZ2VkIGNvbnN0cnVjdG9y
IHRvIHRha2UgYQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUuIEluaXRpYWxp
emUgdGhlIGZhbGxiYWNrIHJlc3VsdCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogQ2hhbmdlZCB0aGUgYXJn
dW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVWYWx1
ZSk6IE1hZGUgYm90aCBvZiB0aGUgYXJndW1lbnRzIHNlcGFyYXRlIHRlbXBsYXRlIHR5cGVzLiBU
aGlzCisgICAgICAgIGhlbHBzIHVzIGNvbXBhcmUgYW4gaW50ZWdlciB0byBhIGRvdWJsZSB3aXRo
b3V0IGxvdHMgb2YgdHlwZSBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVBc3BlY3RS
YXRpb1ZhbHVlKTogQ2hhbmdlZCB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBnb3Qgcmlk
IG9mCisgICAgICAgIHRoZSBjYXN0cyB0byBpbnQgc28gd2Ugd2lsbCBkbyB0aGUgd29yayBpbiBk
b3VibGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVZhbHVlKTogUmVwbGFjZWQg
dGhlIG9sZCBudW1iZXJWYWx1ZSBmdW5jdGlvbiB3aXRoIHRoaXMuIFNpbmNlIHZhbHVlcworICAg
ICAgICBhcmUgc3RvcmVkIGFzIGRvdWJsZXMsIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGRvdWJs
ZSByYXRoZXIgdGhhbiBmbG9hdC4KKyAgICAgICAgKFdlYkNvcmU6Onplcm9FdmFsdWF0ZSk6IEFk
ZGVkLiBIZWxwZnVsIGZvciB0aGUgbWFueSBmdW5jdGlvbnMgdGhhdCBqdXN0IG5lZWQgdG8KKyAg
ICAgICAgZXZhbHVhdGUgYXMgMC4KKyAgICAgICAgKFdlYkNvcmU6Om9uZUV2YWx1YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2xvckV2YWx1YXRlKTogUmVuYW1lZCB0aGlzIGFuZCBh
bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8g
dXNlIHRoZSBuZXcgZG91YmxlVmFsdWUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckluZGV4RXZhbHVhdGUpOiBVc2UgemVyb0V2YWx1YXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JHYW11dEV2YWx1YXRlKTogTm8gbG9uZ2VyIHVzZSBwYWdlIGp1c3QgdG8gZ2V0IGZyb20gdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBtYWluIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6bW9u
b2Nocm9tZUV2YWx1YXRlKTogU2ltcGxpZnkgbG9naWMgdXNpbmcgemVyb0V2YWx1YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZSk6IFVzZSBhdXRvIGZvciB0aGUg
a2V5d29yZDsgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkV2
YWx1YXRlKTogVXNlIGVhcmx5IHJldHVybiBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmFzcGVj
dFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUFzcGVjdFJh
dGlvRXZhbHVhdGUpOiBTaW1wbGlmaWVkIGxvZ2ljIGFuZCByZW1vdmVkIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpldmFsdWF0ZVJlc29sdXRpb24pOiBBZGRlZCBhIGNvdXBsZSBudWxs
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IFJl
bmFtZWQuIEFkZGVkIG1pc3NpbmcgdHlwZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z3JpZEV2YWx1YXRlKTog
VXNlIHplcm9FdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBBZGRl
ZCBhIG51bGwgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VIZWlnaHRFdmFsdWF0ZSk6
IFVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VXaWR0aEV2YWx1YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6d2lkdGhFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
bWluQ29sb3JFdmFsdWF0ZSk6IFVwZGF0ZWQgbmFtZSBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6
bWF4Q29sb3JFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWluQ29sb3JJbmRl
eEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhDb2xvckluZGV4RXZhbHVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk1vbm9jaHJvbWVFdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4TW9ub2Nocm9tZUV2YWx1YXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjptaW5Bc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjptYXhBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptYXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6bWluSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1heEhlaWdo
dEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW5XaWR0aEV2YWx1YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhXaWR0aEV2YWx1YXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjptaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6bWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1pbkRldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1h
eERldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pblJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4UmVzb2x1dGlvbkV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25FdmFsdWF0ZSk6IFVz
ZSBvbmVFdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25FdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtMmRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtM2RFdmFsdWF0ZSk6IFNpbXBsaWZ5IHVzaW5nIHplcm9F
dmFsdWF0ZSBhbmQgb25lRXZhbHVhdGUuCisgICAgICAgIChXZWJDb3JlOjp2aWV3TW9kZUV2YWx1
YXRlKTogU2ltcGxpZmllZCBsb2dpYyB3aXRoIGZld2VyIGxvY2FsIHZhcmlhYmxlcyBhbmQgdGhl
IG5hbWUgImtleXdvcmQiLgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9QbGF5YWJsZUlubGluZUV2
YWx1YXRlKTogVXNlIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhvdmVyRXZhbHVhdGUp
OiBTaW1wbGlmeSB1c2luZyBrZXl3b3JkLgorICAgICAgICAoV2ViQ29yZTo6YW55SG92ZXJFdmFs
dWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckV2YWx1
YXRlKTogU2ltcGxpZnkgdXNpbmcga2V5d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OmFueVBvaW50
ZXJFdmFsdWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTog
QWRkZWQuIEhlbHBlciBmb3IgYnVpbGRpbmcgdXAgdGhlIG1lZGlhIHF1ZXJ5IGZ1bmN0aW9uIG1h
cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogTW92
ZWQgY29kZSB0byBidWlsZCB0aGUgZnVuY3Rpb24gbWFwIGluIGhlcmUgaW4KKyAgICAgICAgYSBs
YW1iZGEsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBhIHNlcGFyYXRlIGdsb2JhbCBmdW5jdGlv
bi4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bmVlZGVkIGluY2x1ZGVzLiBTaW1wbGlmaWVkIGNvbW1lbnRzIGFuZAorICAg
ICAgICBtb2Rlcm5pemVkIHRoZWlyIHN0eWxlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlF
eHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcik6
IFJlbmFtZWQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgdGhpcyBkb2VzLiBVcGRhdGVkCisgICAg
ICAgIHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSB0ZSBuZXcgZmVhdHVyZSBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
SW50ZWdlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoTm9u
TmVnYXRpdmVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlk
V2l0aFplcm9Pck9uZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBc3BlY3RSYXRpb0Zl
YXR1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aG91dFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJX
aXRoVW5pdCk6IEFkZGVkLiBIZWxwZXIgdGhhdCBjYWxscyBtdWx0aXBsZSBmdW5jdGlvbnMgYWJv
dmUuCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzU2xhc2gpOiBBZGRlZC4gSGVscGVyIHRvIG1ha2UgYXNwZWN0
IHJhdGlvIGNvZGUgYmVsb3cgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
c2l0aXZlSW50ZWdlclZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOiBSZWFycmFuZ2VkIGNvZGUgdG8gYmUg
bXVjaCBsZXNzIHdvcmR5IGFuZAorICAgICAgICB0byBub3QgdXNlIGN1cnJlbnQvbmV4dC4KKwor
ICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6IFVzZSBwcmFnbWEgb25jZS4gUmVuYW1lZCBj
bGFzcyB0byBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi4gUmVtb3ZlZAorICAgICAgICB0aGUgaXNWaWV3
cG9ydERlcGVuZGVudCBmdW5jdGlvbiwgbm93IHBhcnQgb2YgTWVkaWFRdWVyeUV2YWx1YXRvci4g
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3Qp
OiBNYXJrZWQgdGhpcyBpbmxpbmUuIFVzZSBhIHJlZmVyZW5jZSBhbmQgYSBSZWYmJgorICAgICAg
ICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dDo6Y3JlYXRlKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcik6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZSBhbmQgdXNl
IHJlbGVhc2VOb25OdWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q6OnJlbW92
ZUxpc3RlbmVyKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUxpc3Q6Om1hdGNoZXMpOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlMaXN0Lmg6IFVzZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCB0eXBlcyB0byB1c2UgcmVm
ZXJlbmNlcywgUmVmUHRyJiYgYW5kIFJlZiYmLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1
ZXJ5TWF0Y2hlcik6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSk6
IFVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRl
KTogVGFrZSBhIHJlZmVyZW5jZS4gVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEp
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVy
eU1hdGNoZXI6OmFkZExpc3RlbmVyKTogVXNlIFJlZiYmIGFuZCByZWZlcmVuY2UgZm9yIGFyZ3Vt
ZW50cy4gU2ltcGxpZnkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVy
OjpyZW1vdmVMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKTogTW92ZWQgdGhlIGxvZ2ljIGZvciBldmFsdWF0
aW5nIGVhY2ggcXVlcnkgaGVyZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmg6IFVz
ZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCBjcmVhdGUgdG8gdGFrZSBhIHJlZmVyZW5jZS4gVGlnaHRl
bmVkIGFyZ3VtZW50CisgICAgICAgIHR5cGVzIGZvciBhZGRMaXN0ZW5lciBhbmQgcmVtb3ZlTGlz
dGVuZXIuIE1hZGUgdGhlIHByaXZhdGUgTGlzdGVuZXIgYSBzaW1wbGUgc3RydWN0IHJhdGhlciB0
aGFuIGEKKyAgICAgICAgY2xhc3MuIEluaXRpYWxpemVkIG1fZXZhbHVhdGlvblJvdW5kLgorCisg
ICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
Q2hpbGRSdWxlcyk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gTWVkaWFRdWVyeUV2YWx1YXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGl0dG8uCisK
KyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0
Y2gpOiBVcGRhdGVkIHRvIHVzZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGluIGEgc2ltcGxlciB3YXku
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGVuZ3RoKTogVXNlIGEgcmVmZXJlbmNlIGFuZCBz
aW1wbGVyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOiBDaGFuZ2VkIGFyZ3VtZW50
cyB0byB0YWtlIGEgRG9jdW1lbnQgaW5zdGVhZCBvZiBib3RoIGEKKyAgICAgICAgUmVuZGVyVmll
dyBhbmQgYSBGcmFtZS4KKworICAgICAgICAqIGNzcy9Tb3VyY2VTaXplTGlzdC5oOiBVc2UgI3By
YWdtYSBvbmNlLiBDaGFuZ2UgcGFyc2VTaXplc0F0dHJpYnV0ZSB0byB0YWtlIGEgRG9jdW1lbnQu
CisKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZU1lZGlhOjptYXRjaE1lZGl1bSk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6IFVzZSBhIE1lZGlhUXVlcnlFdmFs
dWF0b3IgaW5zdGVhZCBvZiBhIHVuaXF1ZV9wdHIKKyAgICAgICAgdG8gb25lLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KTogVXNlIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZgorICAgICAgICBwb250ZXJzLCBhbmQgdXNlIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlS
ZXN1bHQgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKTogVXNlIGEgbW9k
ZXJuIGZvciBsb29wLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogVXNlIGEgTWVk
aWFRdWVyeUV2YWx1YXRvciBpbnN0ZWFkIG9mIGEgdW5pcXVlX3B0ciB0byBvbmUuCisgICAgICAg
IFVzZSBhIHZlY3RvciBvZiBNZWRpYVF1ZXJ5UmVzdWx0IGluc3RlYWQgb2YgYSB2ZWN0b3Igb2Yg
dW5pcXVlX3B0ci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IFJlbW92ZWQgYSBzdHJheSBzcGFjZSAo
dW5yZWxhdGVkIHRvCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXRjaCkuCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gdGhlCisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgY2xhc3MuIEFsc28gdXNl
IGF1dG8gYSBiaXQgbW9yZSBhbmQgZWxpbWluYXRlZCBhIGRvdWJsZSBoYXNoIHRhYmxlCisgICAg
ICAgIGxvb2t1cCBpbiBjb2RlIHRoYXQgdXNlZCBoYXNBdHRyaWJ1dGUgZm9sbG93ZWQgYnkgZmFz
dEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNlbGVj
dEltYWdlU291cmNlKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBwYXJzZVNpemVzQXR0cmlidXRl
LgorCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNv
dXJjZUNoaWxkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgor
CisgICAgICAgICogaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGh0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmg6IFVzZSAjcHJhZ21hIG9uY2UuIENoYW5n
ZWQgdmlld3BvcnQgZGVwZW5kZW50IG1lZGlhIHF1ZXJ5IHJlc3VsdHMKKyAgICAgICAgdmVjdG9y
IHRvIGJlIGEgdmVjdG9yIG9mIHJlc3VsdHMsIG5vdCBvZiB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZXMp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHBhcnNlU2l6ZXNBdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxvYWRTY2FubmVyOjpTdGFydFRhZ1NjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFBdHRyaWJ1dGVNYXRjaGVzKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBQbGF0Zm9ybVNjcmVl
bi5oLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCk6IFNpbXBsaWZpZWQgY29kZSBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3IgY2hh
bmdlcyB0byBQbGF0Zm9ybVNjcmVlbk1hYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVNjcmVlbi5oOiBVc2UgI3ByYWdtYSBvbmNlLiBVc2UgdXNpbmcgaW5zdGFkIG9m
IHR5cGVkZWYuIFB1dCB0aGUgdHlwZWRlZgorICAgICAgICBmb3IgUGxhdGZvcm1EaXNwbGF5SUQg
aW5zaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUgdHlwZWRlZiBmb3IgQ29s
b3JQcm9maWxlLgorICAgICAgICBSZW5hbWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBmaW5kIGEgc2Ny
ZWVuIHRvIGp1c3QgInNjcmVlbiIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQpOiBNb3ZlZCBp
bml0aWFsaXphdGlvbgorICAgICAgICBvZiBib29sZWFucyB0byB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOiBVc2UgcHJhZ21hIG9uY2UuIFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgZGlzcGxheSBJRCBkYXRhIG1lbWJlciB0byBiZSBhbiBP
cHRpb25hbCBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICBwYWlyZWQgd2l0aCBhbm90aGVy
IGRhdGEgbWVtYmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clVwZGF0ZXIuaDogVXNlIHByYWdtYSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YK
KyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oOiBVc2UgcHJhZ21hIG9uY2UuIE1vdmVkIENvbG9yUHJvZmls
ZSBoZXJlIGZyb20KKyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaCwgc2luY2UgaXQncyBub3QgdXNl
ZCB0aGVyZS4gYW5kIGlzIHVzZWQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5oOiBVc2UgcGFybWEgb25jZS4gQ2hhbmdlZCByZXV0cm4gdHlw
ZSBvZiB0aGUKKyAgICAgICAgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gdG8gTlNQb2ludC4gVHdlYWtl
ZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBv
aW50KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBOU1BvaW50IGFuZCBzbyByZW1vdmVkIHRoZSBl
eHBsaWNpdAorICAgICAgICBjb252ZXJzaW9uIHRvIEludFBvaW50LgorICAgICAgICAoV2ViQ29y
ZTo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gTlNQb2ludC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOiBNb3ZlZCBjb252ZXJzaW9uIHRvCisgICAgICAgIEludFBvaW50IGlu
IGhlcmUuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsIGluZGVudGluZyBzdHlsZSBhbmQganVzdCBp
bmRlbnRlZCBub3JtYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1
aWxkZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJRCk6IFJlbmFtZWQgZnJvbSBkaXNwbGF5
SURGcm9tU2NyZWVuIGFuZCBkaXNwbGF5RnJvbVdpZGdldCBzaW5jZSB0aGlzCisgICAgICAgIGlz
IEMrKyBhbmQgd2UgaGF2ZSBvdmVybG9hZGluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFy
Z3VtZW50cy4gQWRkZWQgYSBudWxsIGNoZWNrCisgICAgICAgIG9mIHRoZSBob3cgZGlud28gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0U2NyZWVuKTogQWRkZWQuIEhlbHBlciB1c2Vk
IGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6d2luZG93KTogQWRkZWQuIEhlbHBlciB1c2VkIGJl
bG93LgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKTogUmVuYW1lZCBmcm9tIHNjcmVlbkZvcldp
ZGdldCBhbmQgc2NyZWVuRnJvbVdpbmRvdyBhbmQgcmVtb3ZlZCB0aGUKKyAgICAgICAgdW5uZWVk
ZWQgd2luZG93IGFyZ3VtZW50IGZyb20gdGhlIHdpZGdldCB2ZXJzaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGgpOiBTaW1wbGlmaWVkLCB1c2luZyBuZXcgaGVscGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOiBUd2Vha2VkIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5IYXNJbnZlcnRlZENvbG9ycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6IFNpbXBsaWZpZWQgdXNpbmcgbmV3IGVscGVycy4KKyAgICAgICAgKFdl
YkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcik6IFN0cmVhbWxpbmVkIHVzaW5nIGZld2VyIGxvY2Fs
IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgdXNpbmcgYXV0byBmb3IgdHlwZXMgb2YgdGhlIHJlc3Vs
dHMgb2YgYWRvcHRDRi4KKyAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNwYWNlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6dG9EZXZpY2VTcGFj
ZSk6IERpdHRvLgorCiAyMDE2LTA1LTI1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEFTU0VSVCBpbiBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjpyZW1v
dmUgd2hlbiBydW5uaW5nIG1lZGlhL3RyYWNrL3RyYWNrLXJlbW92ZS10cmFjay5odG1sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKaW5kZXggMTQ5N2MwNDY2ZGU1OTM0ZjNiODYyMWRlMzc5OTVkNWI1YzIxNmRmYy4u
ODFhMTAyNjRkMGViYmZmZDI2YzlkZmI2NWE2YTkyM2U4NjRlNjA2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBNZWRpYSBxdWVyaWVzIGFuZCBwbGF0Zm9ybSBzY3JlZW4gbW9kZXJu
aXphdGlvbiBhbmQgc3RyZWFtbGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTgwNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZy
YW1lIF9kcmFnU291cmNlRW5kZWRBdDpvcGVyYXRpb246XSk6IFVwZGF0ZWQgdG8gdXNlIHRoZSBu
ZXcgdmVyc2lvbiBvZgorICAgICAgICBnbG9iYWxQb2ludCwgd2hpY2ggcmV0dXJucyBhbiBOU1Bv
aW50LgorCiAyMDE2LTA1LTI0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDYW5kaWRhdGVzIHNob3VsZCB3b3JrIHdpdGggaW5wdXQgbWV0aG9kcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDg4ZTJjNDJmMDZlZjY5ZDk2MjdiODRhMGJjODk0ZDM5N2M0Yzc0NzcuLmU5MjEyNjc1OWVh
NGI0ODcxNWFhYTc4NDEzMWE2OTI5ZWNjY2Q4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBA
QAorMjAxNi0wNS0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
TWVkaWEgcXVlcmllcyBhbmQgcGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVh
bWxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU4MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbToKKyAgICAgICAgKFdlYktpdDo6c2NyZWVu
Rm9yV2luZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6ZmxpcFNjcmVlblBvaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2xvYmFsUG9pbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpnbG9iYWxQb2ludEZvckV2ZW50KTogVXNlIGdsb2JhbFBvaW50IGZ1bmN0aW9u
IGZyb20gV2ViQ29yZSBzbyB3ZSBkb24ndCBuZWVkCisgICAgICAgIGNvcGllcyBvZiBldmVyeXRo
aW5nIGluIGhlcmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3aW5kb3dEaWRDaGFuZ2VTY3JlZW4pOiBS
ZW1vdmVkIHVubmVlZGVkIHR5cGUgY2FzdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmRyYWdnZWRJbWFnZSk6IEFkZGVkIHR5cGUgY2FzdCBzaW5jZSBnbG9iYWxQb2ludCBub3cgcmV0
dXJucyBhbgorICAgICAgICBOU1BvaW50IHJhdGhlciB0aGFuIGFuIEludFBvaW50LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBVc2UgcHJhZ21hIG9uY2UuIEFkZCBhIFdl
YkNvcmUgcHJlZml4IHRvIGEgdXNlIG9mCisgICAgICAgIFBsYXRmb3JtRGlzcGxheUlELCBzaW5j
ZSB0aGF0IGlzIG5vdyBpbnNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6IERpdHRvLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVz
aE1vbml0b3IuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmg6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEuaDogRGl0dG8uCisKIDIwMTYtMDUtMjUgIEZ1amlpIEhpcm9ub3Jp
ICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1VuaXhdIFBvdGVudGlhbCBi
dWZmZXIgb3ZlcnJ1biBvZiBtX2ZpbGVEZXNjcmlwdG9ycyBpbiByZWFkQnl0ZXNGcm9tU29ja2V0
IG9mIENvbm5lY3Rpb25Vbml4LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRl
eCA1MDg2OWMyMzEyMzYxYzI3ZmQxNjRjZGQ0MDQ4YWQ0ODQzMTIwOTY2Li5mNDc0NWUxOTE0YzU1
MzI0ZDhmYjBjNTg0NDUxNTg5MDUwZDQ2M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TS5tbQpAQCAtNzYyLDcgKzc2Miw5IEBAIC0gKEJPT0wpaXNGb2N1c2VkCiBAZW5kCiAKICNpZiBQ
TEFURk9STShJT1MpCisKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MTGlua0VsZW1lbnQgKFdlYlBy
aXZhdGUpCisKIC0gKEJPT0wpX21lZGlhUXVlcnlNYXRjaGVzRm9yT3JpZW50YXRpb246KGludClv
cmllbnRhdGlvbgogewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxM
aW5rRWxlbWVudCo+KGNvcmUoc2VsZikpLT5kb2N1bWVudCgpOwpAQCAtNzkwLDE4ICs3OTIsMTkg
QEAgLSAoQk9PTClfbWVkaWFRdWVyeU1hdGNoZXNGb3JPcmllbnRhdGlvbjooaW50KW9yaWVudGF0
aW9uCiAKIC0gKEJPT0wpX21lZGlhUXVlcnlNYXRjaGVzCiB7Ci0gICAgSFRNTExpbmtFbGVtZW50
KiBsaW5rID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oY29yZShzZWxmKSk7Ci0gICAg
U3RyaW5nIG1lZGlhID0gbGluay0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWVkaWFBdHRyKTsK
KyAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50
Kj4oY29yZShzZWxmKSk7CisKKyAgICBhdXRvJiBtZWRpYSA9IGxpbmsuZmFzdEdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6Om1lZGlhQXR0cik7CiAgICAgaWYgKG1lZGlhLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbGluay0+ZG9jdW1lbnQo
KTsKIAotICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJ5U2V0ID0gTWVkaWFRdWVy
eVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtZWRpYSk7Ci0gICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCBkb2N1bWVudC5mcmFtZSgpLCBkb2N1
bWVudC5yZW5kZXJWaWV3KCkgPyAmZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpIDogMCk7
Ci0KLSAgICByZXR1cm4gc2NyZWVuRXZhbC5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOworICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGxpbmsuZG9jdW1lbnQoKTsKKyAgICBhdXRvIG1lZGlhUXVl
cnlTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1l
ZGlhKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJzY3JlZW4iLCBkb2N1bWVu
dCwgZG9jdW1lbnQucmVuZGVyVmlldygpID8gJmRvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUo
KSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYVF1ZXJ5U2V0LmdldCgpKTsKIH0KKwogQGVuZAor
CiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55LmluCmluZGV4IGY1YjBkMTc1MzE4NGQ4OGNhNzFjZjcxMzEyMTU3N2Mx
ZDMwYTdlOWMuLjRiN2YxODNlODdjNmZiMGI2YjUzZDZhN2M0MGUxMTM0MjQ5MzIxZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgpAQCAtMzcsOSArMzcsOSBAQAogICAgIE1lZGlhUXVl
cnlTZXQqIG1lZGlhTGlzdDsKICAgICBNZWRpYVF1ZXJ5KiBtZWRpYVF1ZXJ5OwogICAgIE1lZGlh
UXVlcnk6OlJlc3RyaWN0b3IgbWVkaWFRdWVyeVJlc3RyaWN0b3I7Ci0gICAgTWVkaWFRdWVyeUV4
cCogbWVkaWFRdWVyeUV4cDsKKyAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiogbWVkaWFRdWVyeUV4
cHJlc3Npb247CiAgICAgVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4qIHNvdXJjZVNpemVM
aXN0OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+KiBtZWRpYVF1
ZXJ5RXhwTGlzdDsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+KiBtZWRpYVF1ZXJ5
RXhwcmVzc2lvbkxpc3Q7CiAgICAgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWU7CiAgICAgVmVjdG9y
PFJlZlB0cjxTdHlsZUtleWZyYW1lPj4qIGtleWZyYW1lUnVsZUxpc3Q7CiAgICAgQ1NTUHJvcGVy
dHlJRCBpZDsKQEAgLTI3MSwyMCArMjcxLDIwIEBAIHN0YXRpYyBib29sIHNlbGVjdG9yTGlzdERv
ZXNOb3RNYXRjaEFueVBzZXVkb0VsZW1lbnQoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0CiAK
ICV0eXBlIDxtZWRpYVF1ZXJ5UmVzdHJpY3Rvcj4gbWF5YmVfbWVkaWFfcmVzdHJpY3RvcgogCi0l
dHlwZSA8bWVkaWFRdWVyeUV4cD4gbWVkaWFfcXVlcnlfZXhwIGJhc2VfbWVkaWFfcXVlcnlfZXhw
Ci0lZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHAgYmFzZV9tZWRpYV9x
dWVyeV9leHAKKyV0eXBlIDxtZWRpYVF1ZXJ5RXhwcmVzc2lvbj4gbWVkaWFfcXVlcnlfZXhwcmVz
c2lvbiBiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQk
OyB9IG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb24gYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uCiAK
ICV0eXBlIDxzb3VyY2VTaXplTGlzdD4gc291cmNlX3NpemVfbGlzdAogJWRlc3RydWN0b3IgeyBk
ZWxldGUgJCQ7IH0gc291cmNlX3NpemVfbGlzdAogCi0ldHlwZSA8bWVkaWFRdWVyeUV4cD4gbWF5
YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cAotJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gbWF5
YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cAorJXR5cGUgPG1lZGlhUXVlcnlFeHByZXNzaW9uPiBt
YXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbgorJWRlc3RydWN0b3IgeyBkZWxldGUg
JCQ7IH0gbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KIAogJXR5cGUgPHZhbHVl
PiBzb3VyY2Vfc2l6ZV9sZW5ndGgKICVkZXN0cnVjdG9yIHsgZGVzdHJveSgkJCk7IH0gc291cmNl
X3NpemVfbGVuZ3RoCiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4gbWVkaWFfcXVlcnlfZXhw
X2xpc3QgbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cF9saXN0Ci0lZGVzdHJ1Y3RvciB7IGRlbGV0
ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xp
c3QKKyV0eXBlIDxtZWRpYVF1ZXJ5RXhwcmVzc2lvbkxpc3Q+IG1lZGlhX3F1ZXJ5X2V4cHJlc3Np
b25fbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0CislZGVzdHJ1Y3Rv
ciB7IGRlbGV0ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgbWF5YmVfYW5kX21l
ZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdAogCiAldHlwZSA8c3RyaW5nPiBrZXlmcmFtZV9uYW1l
CiAKQEAgLTU3Niw1OSArNTc2LDYzIEBAIHdlYmtpdF9zb3VyY2Vfc2l6ZV9saXN0OgogICAgIDsK
IAogc291cmNlX3NpemVfbGlzdDoKLSAgICBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwIHNv
dXJjZV9zaXplX2xlbmd0aCB7CisgICAgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Np
b24gc291cmNlX3NpemVfbGVuZ3RoIHsKICAgICAgICAgJCQgPSBuZXcgVmVjdG9yPENTU1BhcnNl
cjo6U291cmNlU2l6ZT47Ci0gICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zb3VyY2VTaXplKHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkMSksICQyKSk7CisgICAgICAgICQkLT5hcHBl
bmQocGFyc2VyLT5zb3VyY2VTaXplKFdURk1vdmUoKiQxKSwgJDIpKTsKKyAgICAgICAgZGVsZXRl
ICQxOwogICAgIH0KLSAgICB8IHNvdXJjZV9zaXplX2xpc3QgbWF5YmVfc3BhY2UgJywnIG1heWJl
X3NwYWNlIG1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHAgc291cmNlX3NpemVfbGVuZ3RoIHsK
KyAgICB8IHNvdXJjZV9zaXplX2xpc3QgbWF5YmVfc3BhY2UgJywnIG1heWJlX3NwYWNlIG1heWJl
X3NvdXJjZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIHNvdXJjZV9zaXplX2xlbmd0aCB7CiAgICAg
ICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zb3VyY2VTaXplKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkNSksICQ2KSk7CisgICAgICAgICQkLT5hcHBlbmQo
cGFyc2VyLT5zb3VyY2VTaXplKFdURk1vdmUoKiQ1KSwgJDYpKTsKKyAgICAgICAgZGVsZXRlICQ1
OwogICAgIH0KICAgICA7CiAKLW1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHA6CittYXliZV9z
b3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbjoKICAgICAvKiBlbXB0eSAqLyB7Ci0gICAgICAg
ICQkID0gbmV3IE1lZGlhUXVlcnlFeHA7CisgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHBy
ZXNzaW9uOwogICAgIH0KLSAgICB8IGJhc2VfbWVkaWFfcXVlcnlfZXhwIG1heWJlX3NwYWNlOwor
ICAgIHwgYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIG1heWJlX3NwYWNlOwogCiBzb3VyY2Vf
c2l6ZV9sZW5ndGg6IHVuYXJ5X3Rlcm0gfCBjYWxjX2Z1bmN0aW9uOwogCi1iYXNlX21lZGlhX3F1
ZXJ5X2V4cDogJygnIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX3Zh
bHVlICcpJyB7CitiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb246ICcoJyBtYXliZV9zcGFjZSBJ
REVOVCBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV92YWx1ZSAnKScgewogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtZWRpYVZhbHVlKCQ1KTsKICAgICAgICAgJDMu
Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICQkID0gbmV3IE1lZGlh
UXVlcnlFeHAoJDMsIG1lZGlhVmFsdWUuZ2V0KCkpOworICAgICAgICAkJCA9IG5ldyBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbigkMywgbWVkaWFWYWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIDsKIAotbWVk
aWFfcXVlcnlfZXhwOgotICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5YmVfc3BhY2UgYmFz
ZV9tZWRpYV9xdWVyeV9leHAgbWF5YmVfc3BhY2UgeworbWVkaWFfcXVlcnlfZXhwcmVzc2lvbjoK
KyAgICBtYXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlIGJhc2VfbWVkaWFfcXVlcnlf
ZXhwcmVzc2lvbiBtYXliZV9zcGFjZSB7CiAgICAgICAgIGlmICgkMSAhPSBNZWRpYVF1ZXJ5OjpO
b25lKSB7CiAgICAgICAgICAgICAvLyBJZiByZXN0cmljdG9yIGlzIHNwZWNpZmllZCwgbWVkaWEg
cXVlcnkgZXhwcmVzc2lvbiBpcyBpbnZhbGlkLgogICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5
IG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gYW5kIGNvbnRpbnVlIHBhcnNpbmcgbWVkaWEgcXVlcnku
CiAgICAgICAgICAgICBkZWxldGUgJDM7Ci0gICAgICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5
RXhwOworICAgICAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cHJlc3Npb247CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgJCQgPSAkMzsKICAgICB9CiAgICAgOwogCi1tZWRpYV9xdWVy
eV9leHBfbGlzdDoKLSAgICBtZWRpYV9xdWVyeV9leHAgewotICAgICAgICAkJCA9IG5ldyBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+PjsKLSAgICAgICAgJCQtPmFwcGVuZChz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4oJDEpKTsKK21lZGlhX3F1ZXJ5X2V4cHJlc3Np
b25fbGlzdDoKKyAgICBtZWRpYV9xdWVyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBuZXcg
VmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPjsKKyAgICAgICAgJCQtPmFwcGVuZChXVEZNb3Zl
KCokMSkpOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQotICAgIHwgbWVkaWFfcXVlcnlfZXhw
X2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4cCB7
CisgICAgfCBtZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5E
IG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb24gewogICAgICAgICAkJCA9ICQxOwot
ICAgICAgICAkJC0+YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkNSkpOwor
ICAgICAgICAkJC0+YXBwZW5kKFdURk1vdmUoKiQ1KSk7CisgICAgICAgIGRlbGV0ZSAkNTsKICAg
ICB9CiAgICAgOwogCi1tYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3Q6CittYXliZV9hbmRf
bWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0OgogICAgIC8qZW1wdHkqLyB7Ci0gICAgICAgICQk
ID0gbmV3IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+OworICAgICAgICAk
JCA9IG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+OwogICAgIH0KLSAgICB8IE1FRElB
X0FORCBtYXliZV9zcGFjZSBtZWRpYV9xdWVyeV9leHBfbGlzdCB7CisgICAgfCBNRURJQV9BTkQg
bWF5YmVfc3BhY2UgbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0IHsKICAgICAgICAgJCQgPSAk
MzsKICAgICB9CiAgICAgOwpAQCAtNjQ2LDEzICs2NTAsMTUgQEAgbWF5YmVfbWVkaWFfcmVzdHJp
Y3RvcjoKICAgICA7CiAKIG1lZGlhX3F1ZXJ5OgotICAgIG1lZGlhX3F1ZXJ5X2V4cF9saXN0IHsK
LSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwgc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigkMSkp
OworICAgIG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCB7CisgICAgICAgICQkID0gbmV3IE1l
ZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwgImFsbCIsIFdURk1vdmUoKiQxKSk7CisgICAgICAg
IGRlbGV0ZSAkMTsKICAgICB9CiAgICAgfAotICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5
YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cF9saXN0
IHsKKyAgICBtYXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3Nw
YWNlIG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgewogICAgICAgICAkMy5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFR
dWVyeSgkMSwgJDMsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnlFeHA+Pj4oJDUpKTsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeSgkMSwgJDMsIFdU
Rk1vdmUoKiQ1KSk7CisgICAgICAgIGRlbGV0ZSAkNTsKICAgICB9CiAgICAgOwogCkBAIC02NjEs
MTYgKzY2NywxNyBAQCBtYXliZV9tZWRpYV9saXN0OiAvKiBlbXB0eSAqLyB7ICQkID0gJk1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgfSB8IG1lZAogbWVkaWFfbGlzdDoKICAgICBt
ZWRpYV9xdWVyeSB7CiAgICAgICAgICQkID0gJk1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpLmxlYWtS
ZWYoKTsKLSAgICAgICAgJCQtPmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnk+KCQxKSk7CisgICAgICAgICQkLT5hZGRNZWRpYVF1ZXJ5KFdURk1vdmUoKiQxKSk7CisgICAg
ICAgIGRlbGV0ZSAkMTsKICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0TWVkaWFMaW5lKCokJCk7
CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCAnLCcgbWF5YmVfc3BhY2UgbWVkaWFfcXVlcnkgewog
ICAgICAgICAkJCA9ICQxOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gbWVk
aWFRdWVyeSgkNCk7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPmFkZE1lZGlh
UXVlcnkoV1RGTW92ZShtZWRpYVF1ZXJ5KSk7CisgICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVy
eShXVEZNb3ZlKCokNCkpOwogICAgICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0TWVkaWFMaW5l
KCokJCk7CiAgICAgICAgIH0KKyAgICAgICAgZGVsZXRlICQ0OwogICAgIH0KICAgICB8IG1lZGlh
X2xpc3QgZXJyb3IgewogICAgICAgICAkJCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9y
dFJ1bGUuaAppbmRleCA1YzVlZjkzMDI2YjcyYWFmNmY5YTFkYWI4Y2NkNjZmOTgwNGZiMjdkLi40
NTIzZWM1NWNmNGY0YzdmY2Y0ODQwZWQ1ZjYxZGQwZDkxNjEwN2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbXBvcnRSdWxlLmgKQEAgLTE5LDI2ICsxOSwyMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NJbXBvcnRSdWxlX2gKLSNkZWZpbmUgQ1NTSW1w
b3J0UnVsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3MgTWVkaWFM
aXN0OwotY2xhc3MgTWVkaWFRdWVyeVNldDsKIGNsYXNzIFN0eWxlUnVsZUltcG9ydDsKIAogY2xh
c3MgQ1NTSW1wb3J0UnVsZSBmaW5hbCA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPENTU0ltcG9ydFJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQmIHJ1bGUsIENT
U1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltcG9ydFJ1bGUo
cnVsZSwgc2hlZXQpKTsgfQotICAgIAotICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKIAot
ICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWF0dGFjaChT
dHlsZVJ1bGVCYXNlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZSgpOwog
CiAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKICAgICBNZWRpYUxpc3QmIG1lZGlhKCkgY29uc3Q7
CkBAIC00Nyw3ICs0MSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ1NTSW1wb3J0UnVsZShT
dHlsZVJ1bGVJbXBvcnQmLCBDU1NTdHlsZVNoZWV0Kik7CiAKLSAgICBDU1NSdWxlOjpUeXBlIHR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJTVBPUlRfUlVMRTsgfQorICAgIENTU1J1bGU6
OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIElNUE9SVF9SVUxFOyB9CisgICAgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJh
c2UmKSBmaW5hbDsKIAogICAgIFJlZjxTdHlsZVJ1bGVJbXBvcnQ+IG1faW1wb3J0UnVsZTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxNZWRpYUxpc3Q+IG1fbWVkaWFDU1NPTVdyYXBwZXI7CkBAIC01Nyw1
ICs1MywzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTX1JVTEUoQ1NTSW1wb3J0UnVsZSwgQ1NTUnVsZTo6SU1QT1JUX1JVTEUp
Ci0KLSNlbmRpZiAvLyBDU1NJbXBvcnRSdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5k
ZXggMjJhMTMxNTFjYjhkNjgwM2U0YTQ1YzA1NDgyMmY0MDkzYmQwOThiNS4uYThlNGI3ZmY5MmEw
N2U4ZWQ1NDYwYWFmYmVkOWUzZTNhOGMwZDNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
QEAgLTE1MjksMTkgKzE1MjksMjAgQEAgVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4gQ1NT
UGFyc2VyOjpwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQogCiAvLyBGSVhN
RSgxNDEyODkpOiBUaGUgZm9sbG93aW5nIHR3byBjb25zdHJ1Y3RvcnMgYXJlIG9ubHkgbmVlZGVk
IGJlY2F1c2Ugb2YgYSBidWcgaW4gTVNWQyAyMDEzIChhbmQgcHJpb3IpLgogLy8gV2Ugc2hvdWxk
IHJlbW92ZSB0aGlzIGNvZGUgYXMgc29vbiBhcyBhIFZpc3VhbCBTdHVkaW8gdXBkYXRlIHRoYXQg
Zml4ZXMgdGhpcyBwcm9ibGVtIGlzIHJlbGVhc2VkLgorCiBDU1NQYXJzZXI6OlNvdXJjZVNpemU6
OlNvdXJjZVNpemUoQ1NTUGFyc2VyOjpTb3VyY2VTaXplJiYgb3JpZ2luYWwpCiAgICAgOiBleHBy
ZXNzaW9uKFdURk1vdmUob3JpZ2luYWwuZXhwcmVzc2lvbikpCi0gICAgLCBsZW5ndGgob3JpZ2lu
YWwubGVuZ3RoKQorICAgICwgbGVuZ3RoKFdURk1vdmUob3JpZ2luYWwubGVuZ3RoKSkKIHsKIH0K
IAotQ1NTUGFyc2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIG9yaWdFeHAsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSkKLSAgICA6IGV4
cHJlc3Npb24oV1RGTW92ZShvcmlnRXhwKSkKK0NTU1BhcnNlcjo6U291cmNlU2l6ZTo6U291cmNl
U2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlZjxDU1NWYWx1ZT4mJiB2
YWx1ZSkKKyAgICA6IGV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKICAgICAsIGxlbmd0
aChXVEZNb3ZlKHZhbHVlKSkKIHsKIH0KIAotQ1NTUGFyc2VyOjpTb3VyY2VTaXplIENTU1BhcnNl
cjo6c291cmNlU2l6ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9u
LCBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUpCitDU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NT
UGFyc2VyOjpzb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVzc2lvbiwgQ1NT
UGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7
CiAgICAgaWYgKGlzQ2FsY3VsYXRpb24ocGFyc2VyVmFsdWUpKSB7CkBAIC0xNTU0LDcgKzE1NTUs
NyBAQCBDU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NTUGFyc2VyOjpzb3VyY2VTaXplKHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYmIGV4cAogICAgIGRlc3Ryb3kocGFyc2VyVmFsdWUpOwog
ICAgIC8vIEZJWE1FOiBDYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciBleHBsaWNpdGx5IGhlcmUgdG8g
d29yayBhcm91bmQgYW4gTVNWQyBidWcuCiAgICAgLy8gRm9yIG90aGVyIGNvbXBpbGVycywgd2Ug
ZGlkIG5vdCBuZWVkIHRvIGRlZmluZSB0aGUgY29uc3RydWN0b3JzIGFuZCB3ZSBjb3VsZCB1c2Ug
YWdncmVnYXRlIGluaXRpYWxpemF0aW9uIHN5bnRheC4KLSAgICByZXR1cm4gU291cmNlU2l6ZShX
VEZNb3ZlKGV4cHJlc3Npb24pLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIFNvdXJjZVNp
emUoV1RGTW92ZShleHByZXNzaW9uKSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQ
YXJzZWRQcm9wZXJ0eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0
cHV0LCBzaXplX3QmIHVudXNlZEVudHJpZXMsIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3BlcnRpZXM+
JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuQ3VzdG9tUHJvcGVy
dGllcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAzMGFkYTg1MWVjOTViOTM1N2IxYTI0ZWI4
MzM1YzVjYTI2MjBiMmQxLi4xMmM4ZTZhZWM2ZGFiM2M1ZWIyZTRlZjA1MzI1NzM2MWNhN2M1ODNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFzcyBNZWRpYVF1ZXJ5RXhwOworY2xhc3Mg
TWVkaWFRdWVyeUV4cHJlc3Npb247CiBjbGFzcyBNZWRpYVF1ZXJ5U2V0OwogY2xhc3MgTXV0YWJs
ZVN0eWxlUHJvcGVydGllczsKIGNsYXNzIFNWR0NvbG9yOwpAQCAtMTY4LDE0ICsxNjgsMTQgQEAg
cHVibGljOgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VCYWNrZ3JvdW5kQ29s
b3IoKTsKIAogICAgIHN0cnVjdCBTb3VyY2VTaXplIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+IGV4cHJlc3Npb247Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbGVu
Z3RoOworICAgICAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgICAgICBS
ZWY8Q1NTVmFsdWU+IGxlbmd0aDsKIAogICAgICAgICBTb3VyY2VTaXplKFNvdXJjZVNpemUmJik7
Ci0gICAgICAgIFNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYsIFJl
ZlB0cjxDU1NWYWx1ZT4mJik7CisgICAgICAgIFNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Np
b24mJiwgUmVmPENTU1ZhbHVlPiYmKTsKICAgICB9OwogICAgIFZlY3RvcjxTb3VyY2VTaXplPiBw
YXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcpOwotICAgIFNvdXJjZVNpemUgc291cmNlU2l6
ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiwgQ1NTUGFyc2VyVmFsdWUmKTsKKyAg
ICBTb3VyY2VTaXplIHNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Npb24mJiwgQ1NTUGFyc2Vy
VmFsdWUmKTsKIAogICAgIGJvb2wgcGFyc2VGaWxsSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5j
cHAKaW5kZXggOWNjMDhkZWI3ZTA5N2MwYzlmMWZlYTgzOTMxMDMxMzY2OGI1YmNkMi4uYzQ4ZTlj
OWI5YTAxODYwZjc0N2M2MGY0ZGUyMTZhOTA5MDEwYWM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIERvY3VtZW50UnVsZVNl
dHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldAogICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRp
b25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4K
ICAgICBmb3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJU
KCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVy
aWVzKCkgJiYgIW1lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVy
KSkKKyAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFs
dWF0ZSgqY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hl
ZXQtPmNvbnRlbnRzKCksICptZWRpdW0sIHJlc29sdmVyKTsKICAgICAgICAgaW5zcGVjdG9yQ1NT
T01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldC5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcAppbmRleCA4NWEyZGI1NmRm
NWI0ZGYyYzU4NjQ5MzRmNmYyZTY3MzRkNjAyY2UxLi4xODQzMGM5MGMxNGY3ZTFiMzZkYmQzOWFl
MTBiMzkzOTRjYjM3NmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0
dXJlTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5j
cHAKQEAgLTMwLDggKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBNZWRp
YUZlYXR1cmVOYW1lcyB7CiAKLSNkZWZpbmUgREVGSU5FX01FRElBRkVBVFVSRV9HTE9CQUwobmFt
ZSwgc3RyKSBcCi0gICAgREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsIG5hbWUjI01lZGlhRmVh
dHVyZSwgc3RyKQorI2RlZmluZSBERUZJTkVfTUVESUFGRUFUVVJFX0dMT0JBTChuYW1lLCBzdHJp
bmcpIERFRklORV9HTE9CQUwoQXRvbWljU3RyaW5nLCBuYW1lKQogQ1NTX01FRElBUVVFUllfTkFN
RVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMKQogI3Vu
ZGVmIERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMCiAKQEAgLTM5LDEwICszOCw5IEBAIHZvaWQg
aW5pdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAgaWYgKCFpbml0aWFs
aXplZCkgewotICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGds
b2JhbHMuCi0KKyAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUg
Z2xvYmFscy4KICAgICAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7Ci0jZGVmaW5lIElOSVRJQUxJ
WkVfR0xPQkFMKG5hbWUsIHN0cikgbmV3IChOb3ROdWxsLCAodm9pZCopJm5hbWUjI01lZGlhRmVh
dHVyZSkgQXRvbWljU3RyaW5nKHN0ciwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisjZGVmaW5lIElOSVRJQUxJWkVfR0xPQkFMKG5hbWUsIHN0cmluZykgbmV3IChOb3ROdWxs
LCAodm9pZCopJm5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9N
RURJQUZFQVRVUkUoSU5JVElBTElaRV9HTE9CQUwpCiAjdW5kZWYgSU5JVElBTElaRV9HTE9CQUwK
ICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhRmVhdHVyZU5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJl
TmFtZXMuaAppbmRleCBiNWNhMjUwZDcxN2QyMTI0YzczZGY2ZjE2MmY0YzAzYTY1MGMzMGY5Li42
Mjk3MWMwMmZmMmNjY2RmYTM0ZjI1NTYwN2VjOTQ4ZDU0MDE5MGQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFGZWF0dXJlTmFtZXMuaApAQCAtMTcsODAgKzE3LDc4IEBACiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgTWVkaWFGZWF0dXJlTmFtZXNfaAot
I2RlZmluZSBNZWRpYUZlYXR1cmVOYW1lc19oCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KKyNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgbmFtZXNw
YWNlIE1lZGlhRmVhdHVyZU5hbWVzIHsKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotI2RlZmluZSBDU1NfTUVESUFR
VUVSWV9WSUVXX01PREUobWFjcm8pIG1hY3JvKHZpZXdfbW9kZSwgIi13ZWJraXQtdmlldy1tb2Rl
IikKKyNkZWZpbmUgQ1NTX01FRElBUVVFUllfVklFV19NT0RFKG1hY3JvKSBtYWNybyh2aWV3TW9k
ZSwgIi13ZWJraXQtdmlldy1tb2RlIikKICNlbHNlCiAjZGVmaW5lIENTU19NRURJQVFVRVJZX1ZJ
RVdfTU9ERShtYWNybykKICNlbmRpZgogCiAjZGVmaW5lIENTU19NRURJQVFVRVJZX05BTUVTX0ZP
Ul9FQUNIX01FRElBRkVBVFVSRShtYWNybykgXAotICAgIG1hY3JvKGFueV9ob3ZlciwgImFueS1o
b3ZlciIpIFwKLSAgICBtYWNybyhhbnlfcG9pbnRlciwgImFueS1wb2ludGVyIikgXAorICAgIG1h
Y3JvKGFuaW1hdGlvbiwgIi13ZWJraXQtYW5pbWF0aW9uIikgXAorICAgIG1hY3JvKGFueUhvdmVy
LCAiYW55LWhvdmVyIikgXAorICAgIG1hY3JvKGFueVBvaW50ZXIsICJhbnktcG9pbnRlciIpIFwK
KyAgICBtYWNybyhhc3BlY3RSYXRpbywgImFzcGVjdC1yYXRpbyIpIFwKICAgICBtYWNybyhjb2xv
ciwgImNvbG9yIikgXAotICAgIG1hY3JvKGNvbG9yX2luZGV4LCAiY29sb3ItaW5kZXgiKSBcCi0g
ICAgbWFjcm8oY29sb3JfZ2FtdXQsICJjb2xvci1nYW11dCIpIFwKKyAgICBtYWNybyhjb2xvckdh
bXV0LCAiY29sb3ItZ2FtdXQiKSBcCisgICAgbWFjcm8oY29sb3JJbmRleCwgImNvbG9yLWluZGV4
IikgXAorICAgIG1hY3JvKGRldmljZUFzcGVjdFJhdGlvLCAiZGV2aWNlLWFzcGVjdC1yYXRpbyIp
IFwKKyAgICBtYWNybyhkZXZpY2VIZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAorICAgIG1hY3Jv
KGRldmljZVBpeGVsUmF0aW8sICItd2Via2l0LWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAgICBt
YWNybyhkZXZpY2VXaWR0aCwgImRldmljZS13aWR0aCIpIFwKICAgICBtYWNybyhncmlkLCAiZ3Jp
ZCIpIFwKLSAgICBtYWNybyhtb25vY2hyb21lLCAibW9ub2Nocm9tZSIpIFwKICAgICBtYWNybyho
ZWlnaHQsICJoZWlnaHQiKSBcCiAgICAgbWFjcm8oaG92ZXIsICJob3ZlciIpIFwKLSAgICBtYWNy
byh3aWR0aCwgIndpZHRoIikgXAorICAgIG1hY3JvKGludmVydGVkQ29sb3JzLCAiaW52ZXJ0ZWQt
Y29sb3JzIikgXAorICAgIG1hY3JvKG1heEFzcGVjdFJhdGlvLCAibWF4LWFzcGVjdC1yYXRpbyIp
IFwKKyAgICBtYWNybyhtYXhDb2xvciwgIm1heC1jb2xvciIpIFwKKyAgICBtYWNybyhtYXhDb2xv
ckluZGV4LCAibWF4LWNvbG9yLWluZGV4IikgXAorICAgIG1hY3JvKG1heERldmljZUFzcGVjdFJh
dGlvLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisgICAgbWFjcm8obWF4RGV2aWNlSGVp
Z2h0LCAibWF4LWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8obWF4RGV2aWNlUGl4ZWxSYXRp
bywgIi13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAgICBtYWNybyhtYXhEZXZp
Y2VXaWR0aCwgIm1heC1kZXZpY2Utd2lkdGgiKSBcCisgICAgbWFjcm8obWF4SGVpZ2h0LCAibWF4
LWhlaWdodCIpIFwKKyAgICBtYWNybyhtYXhNb25vY2hyb21lLCAibWF4LW1vbm9jaHJvbWUiKSBc
CisgICAgbWFjcm8obWF4UmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9uIikgXAorICAgIG1hY3Jv
KG1heFdpZHRoLCAibWF4LXdpZHRoIikgXAorICAgIG1hY3JvKG1pbkFzcGVjdFJhdGlvLCAibWlu
LWFzcGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtaW5Db2xvciwgIm1pbi1jb2xvciIpIFwKKyAg
ICBtYWNybyhtaW5Db2xvckluZGV4LCAibWluLWNvbG9yLWluZGV4IikgXAorICAgIG1hY3JvKG1p
bkRldmljZUFzcGVjdFJhdGlvLCAibWluLWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisgICAgbWFj
cm8obWluRGV2aWNlSGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8obWlu
RGV2aWNlUGl4ZWxSYXRpbywgIi13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAg
ICBtYWNybyhtaW5EZXZpY2VXaWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCisgICAgbWFjcm8o
bWluSGVpZ2h0LCAibWluLWhlaWdodCIpIFwKKyAgICBtYWNybyhtaW5Nb25vY2hyb21lLCAibWlu
LW1vbm9jaHJvbWUiKSBcCisgICAgbWFjcm8obWluUmVzb2x1dGlvbiwgIm1pbi1yZXNvbHV0aW9u
IikgXAorICAgIG1hY3JvKG1pbldpZHRoLCAibWluLXdpZHRoIikgXAorICAgIG1hY3JvKG1vbm9j
aHJvbWUsICJtb25vY2hyb21lIikgXAogICAgIG1hY3JvKG9yaWVudGF0aW9uLCAib3JpZW50YXRp
b24iKSBcCi0gICAgbWFjcm8oYXNwZWN0X3JhdGlvLCAiYXNwZWN0LXJhdGlvIikgXAotICAgIG1h
Y3JvKGRldmljZV9hc3BlY3RfcmF0aW8sICJkZXZpY2UtYXNwZWN0LXJhdGlvIikgXAotICAgIG1h
Y3JvKGRldmljZV9waXhlbF9yYXRpbywgIi13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvIikgXAot
ICAgIG1hY3JvKGRldmljZV9oZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAotICAgIG1hY3JvKGRl
dmljZV93aWR0aCwgImRldmljZS13aWR0aCIpIFwKLSAgICBtYWNybyhpbnZlcnRlZF9jb2xvcnMs
ICJpbnZlcnRlZC1jb2xvcnMiKSBcCi0gICAgbWFjcm8obWF4X2NvbG9yLCAibWF4LWNvbG9yIikg
XAotICAgIG1hY3JvKG1heF9jb2xvcl9pbmRleCwgIm1heC1jb2xvci1pbmRleCIpIFwKLSAgICBt
YWNybyhtYXhfYXNwZWN0X3JhdGlvLCAibWF4LWFzcGVjdC1yYXRpbyIpIFwKLSAgICBtYWNybyht
YXhfZGV2aWNlX2FzcGVjdF9yYXRpbywgIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvIikgXAotICAg
IG1hY3JvKG1heF9kZXZpY2VfcGl4ZWxfcmF0aW8sICItd2Via2l0LW1heC1kZXZpY2UtcGl4ZWwt
cmF0aW8iKSBcCi0gICAgbWFjcm8obWF4X2RldmljZV9oZWlnaHQsICJtYXgtZGV2aWNlLWhlaWdo
dCIpIFwKLSAgICBtYWNybyhtYXhfZGV2aWNlX3dpZHRoLCAibWF4LWRldmljZS13aWR0aCIpIFwK
LSAgICBtYWNybyhtYXhfaGVpZ2h0LCAibWF4LWhlaWdodCIpIFwKLSAgICBtYWNybyhtYXhfbW9u
b2Nocm9tZSwgIm1heC1tb25vY2hyb21lIikgXAotICAgIG1hY3JvKG1heF93aWR0aCwgIm1heC13
aWR0aCIpIFwKLSAgICBtYWNybyhtYXhfcmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9uIikgXAot
ICAgIG1hY3JvKG1pbl9jb2xvciwgIm1pbi1jb2xvciIpIFwKLSAgICBtYWNybyhtaW5fY29sb3Jf
aW5kZXgsICJtaW4tY29sb3ItaW5kZXgiKSBcCi0gICAgbWFjcm8obWluX2FzcGVjdF9yYXRpbywg
Im1pbi1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8obWluX2RldmljZV9hc3BlY3RfcmF0aW8s
ICJtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyIpIFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX3BpeGVs
X3JhdGlvLCAiLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIikgXAotICAgIG1hY3JvKG1p
bl9kZXZpY2VfaGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCi0gICAgbWFjcm8obWluX2Rl
dmljZV93aWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCi0gICAgbWFjcm8obWluX2hlaWdodCwg
Im1pbi1oZWlnaHQiKSBcCi0gICAgbWFjcm8obWluX21vbm9jaHJvbWUsICJtaW4tbW9ub2Nocm9t
ZSIpIFwKLSAgICBtYWNybyhtaW5fd2lkdGgsICJtaW4td2lkdGgiKSBcCi0gICAgbWFjcm8obWlu
X3Jlc29sdXRpb24sICJtaW4tcmVzb2x1dGlvbiIpIFwKICAgICBtYWNybyhwb2ludGVyLCAicG9p
bnRlciIpIFwKICAgICBtYWNybyhyZXNvbHV0aW9uLCAicmVzb2x1dGlvbiIpIFwKLSAgICBtYWNy
byh0cmFuc2Zvcm1fMmQsICItd2Via2l0LXRyYW5zZm9ybS0yZCIpIFwKLSAgICBtYWNybyh0cmFu
c2Zvcm1fM2QsICItd2Via2l0LXRyYW5zZm9ybS0zZCIpIFwKKyAgICBtYWNybyh0cmFuc2Zvcm0y
ZCwgIi13ZWJraXQtdHJhbnNmb3JtLTJkIikgXAorICAgIG1hY3JvKHRyYW5zZm9ybTNkLCAiLXdl
YmtpdC10cmFuc2Zvcm0tM2QiKSBcCiAgICAgbWFjcm8odHJhbnNpdGlvbiwgIi13ZWJraXQtdHJh
bnNpdGlvbiIpIFwKLSAgICBtYWNybyhhbmltYXRpb24sICItd2Via2l0LWFuaW1hdGlvbiIpIFwK
LSAgICBtYWNybyh2aWRlb19wbGF5YWJsZV9pbmxpbmUsICItd2Via2l0LXZpZGVvLXBsYXlhYmxl
LWlubGluZSIpIFwKKyAgICBtYWNybyh2aWRlb1BsYXlhYmxlSW5saW5lLCAiLXdlYmtpdC12aWRl
by1wbGF5YWJsZS1pbmxpbmUiKSBcCisgICAgbWFjcm8od2lkdGgsICJ3aWR0aCIpIFwKICAgICBD
U1NfTUVESUFRVUVSWV9WSUVXX01PREUobWFjcm8pCiAKIC8vIGVuZCBvZiBtYWNybwogCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMgeworCiAjaWZuZGVm
IENTU19NRURJQVFVRVJZX05BTUVTX0hJREVfR0xPQkFMUwotICAgICNkZWZpbmUgQ1NTX01FRElB
UVVFUllfTkFNRVNfREVDTEFSRShuYW1lLCBzdHIpIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
bmFtZSMjTWVkaWFGZWF0dXJlOworI2RlZmluZSBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJF
KG5hbWUsIHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lOwogICAgIENTU19N
RURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShDU1NfTUVESUFRVUVSWV9OQU1F
U19ERUNMQVJFKQotICAgICN1bmRlZiBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJFCisjdW5k
ZWYgQ1NTX01FRElBUVVFUllfTkFNRVNfREVDTEFSRQogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBp
bml0KCk7CisgICAgdm9pZCBpbml0KCk7CiAKLSAgICB9IC8vIG5hbWVzcGFjZSBNZWRpYUZlYXR1
cmVOYW1lcworfSAvLyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIE1lZGlhRmVhdHVyZU5hbWVzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
TGlzdC5jcHAKaW5kZXggMDFmODg2Mjc3OTk0NjY5ODViZWRiZWQ3NTI1OWMzZWYxZDczYTI2Ny4u
ZjJjNjEzZDU3MDFhOTY1Yzc5YmViNDc5Nzc0OTRkZTg1NzM5MzU3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTWVkaWFMaXN0LmgiCiAKQEAgLTI2LDkgKzI3LDggQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgog
I2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTc0
LDI4ICs3NCwyNyBAQCBNZWRpYVF1ZXJ5U2V0OjpNZWRpYVF1ZXJ5U2V0KGNvbnN0IFN0cmluZyYg
bWVkaWFTdHJpbmcsIGJvb2wgZmFsbGJhY2tUb0Rlc2NyaXB0bwogICAgICwgbV9sYXN0TGluZSgw
KQogewogICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlKG1lZGlhU3RyaW5nKTsKKwogICAgIC8vIEZJ
WE1FOiBwYXJzaW5nIGNhbiBmYWlsLiBUaGUgcHJvYmxlbSB3aXRoIGZhaWxpbmcgY29uc3RydWN0
b3IgaXMgdGhhdAogICAgIC8vIHdlIHdvdWxkIG5lZWQgYWRkaXRpb25hbCBmbGFnIHNheWluZyBN
ZWRpYUxpc3QgaXMgbm90IHZhbGlkCiAgICAgLy8gUGFyc2UgY2FuIGZhaWwgb25seSB3aGVuIGZh
bGxiYWNrVG9EZXNjcmlwdG9yID09IGZhbHNlLCBpLmUgd2hlbiBIVE1MNCBtZWRpYSBkZXNjcmlw
dG9yCiAgICAgLy8gZm9yd2FyZC1jb21wYXRpYmxlIHN5bnRheCBpcyBub3QgaW4gdXNlLgogICAg
IC8vIERPTUltcGxlbWVudGF0aW9uQ1NTIHNlZW1zIHRvIG1hbmRhdGUgdGhhdCBtZWRpYSBkZXNj
cmlwdG9ycyBhcmUgdXNlZAotICAgIC8vIGZvciBib3RoIGh0bWwgYW5kIHN2ZywgZXZlbiB0aG91
Z2ggc3ZnOnN0eWxlIGRvZXNuJ3QgdXNlIG1lZGlhIGRlc2NyaXB0b3JzCisgICAgLy8gZm9yIGJv
dGggSFRNTCBhbmQgU1ZHLCBldmVuIHRob3VnaCBzdmc6c3R5bGUgZG9lc24ndCB1c2UgbWVkaWEg
ZGVzY3JpcHRvcnMKICAgICAvLyBDdXJyZW50bHkgdGhlIG9ubHkgcGxhY2VzIHdoZXJlIHBhcnNp
bmcgY2FuIGZhaWwgYXJlCiAgICAgLy8gY3JlYXRpbmcgPHN2ZzpzdHlsZT4sIGNyZWF0aW5nIGNz
cyBtZWRpYSAvIGltcG9ydCBydWxlcyBmcm9tIGpzCi0gICAgCisKICAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHBh
cnNlKCJpbnZhbGlkIik7CiB9CiAKIE1lZGlhUXVlcnlTZXQ6Ok1lZGlhUXVlcnlTZXQoY29uc3Qg
TWVkaWFRdWVyeVNldCYgbykKLSAgICA6IFJlZkNvdW50ZWQ8TWVkaWFRdWVyeVNldD4oKQorICAg
IDogUmVmQ291bnRlZCgpCiAgICAgLCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKG8ubV9mYWxsYmFj
a1RvRGVzY3JpcHRvcikKICAgICAsIG1fbGFzdExpbmUoby5tX2xhc3RMaW5lKQotICAgICwgbV9x
dWVyaWVzKG8ubV9xdWVyaWVzLnNpemUoKSkKKyAgICAsIG1fcXVlcmllcyhvLm1fcXVlcmllcykK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9xdWVyaWVzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3F1ZXJpZXNbaV0gPSBvLm1fcXVlcmllc1tpXS0+Y29weSgpOwogfQogCiBNZWRp
YVF1ZXJ5U2V0Ojp+TWVkaWFRdWVyeVNldCgpCkBAIC0xMDksNDYgKzEwOCw1MSBAQCBzdGF0aWMg
U3RyaW5nIHBhcnNlTWVkaWFEZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8v
IFVTIEFTQ0lJIGxldHRlciBbYS16QS1aXSAoSVNPIDEwNjQ2IGhleCA0MS01YSwgNjEtN2EpLCBk
aWdpdCBbMC05XSAoaGV4IDMwLTM5KSwKICAgICAvLyBvciBoeXBoZW4gKGhleCAyZCkuIgogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGMg
PSBzdHJpbmdbaV07Ci0gICAgICAgIGlmICghICgoYyA+PSAnYScgJiYgYyA8PSAneicpCi0gICAg
ICAgICAgICAgICB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpCi0gICAgICAgICAgICAgICB8fCAo
YyA+PSAnMScgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICAgICB8fCAoYyA9PSAnLScpKSkKKyAg
ICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgaWYgKCEoaXNBU0NJSUFscGhh
bnVtZXJpYyhjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PSAnLScpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiBzdHJpbmcubGVmdChpKTsKIH0KIAorT3B0aW9uYWw8TWVk
aWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZShDU1NQYXJzZXImIHBhcnNlciwg
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBpZiAoYXV0byBxdWVyeSA9IHBhcnNl
ci5wYXJzZU1lZGlhUXVlcnkocXVlcnlTdHJpbmcpKQorICAgICAgICByZXR1cm4gV1RGTW92ZSgq
cXVlcnkpOworICAgIGlmICghbV9mYWxsYmFja1RvRGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgcmV0dXJuIE1lZGlhUXVlcnkgeyBNZWRpYVF1ZXJ5OjpOb25lLCBwYXJz
ZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyksIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lv
bj4geyB9IH07Cit9CisKK09wdGlvbmFsPE1lZGlhUXVlcnk+IE1lZGlhUXVlcnlTZXQ6OmludGVy
bmFsUGFyc2UoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU1NQYXJzZXIgcGFy
c2VyKENTU1N0cmljdE1vZGUpOworICAgIHJldHVybiBpbnRlcm5hbFBhcnNlKHBhcnNlciwgcXVl
cnlTdHJpbmcpOworfQorCiBib29sIE1lZGlhUXVlcnlTZXQ6OnBhcnNlKGNvbnN0IFN0cmluZyYg
bWVkaWFTdHJpbmcpCiB7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2RlKTsKICAg
ICAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+PiByZXN1bHQ7CisgICAg
VmVjdG9yPE1lZGlhUXVlcnk+IHJlc3VsdDsKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OwogICAg
IG1lZGlhU3RyaW5nLnNwbGl0KCcsJywgbGlzdCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9IGxpc3RbaV0u
c3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgZm9yIChhdXRvJiBsaXN0U3RyaW5nIDogbGlzdCkgewor
ICAgICAgICBTdHJpbmcgbWVkaXVtID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KGxpc3RTdHJpbmcpOwogICAgICAgICBpZiAobWVkaXVtLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5ID0gcGFyc2VyLnBhcnNlTWVkaWFRdWVyeSht
ZWRpdW0pOwotICAgICAgICBpZiAoIW1lZGlhUXVlcnkpIHsKLSAgICAgICAgICAgIGlmICghbV9m
YWxsYmFja1RvRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdG9yID0gcGFyc2VNZWRpYURlc2NyaXB0b3IobWVk
aXVtKTsKLSAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0b3IuaXNOdWxsKCkpCisgICAgICAg
ICAgICBpZiAobV9mYWxsYmFja1RvRGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1lZGlhUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+
KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGlhRGVzY3JpcHRvciwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZSBpZiAoYXV0byBxdWVyeSA9IGludGVybmFsUGFyc2UocGFyc2VyLCBtZWRpdW0pKSB7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUocXVlcnkudmFsdWUoKSkpOworICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KG1lZGlhUXVlcnkpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyAiLCws
LCIgZmFsbHMgc3RyYWlnaHQgdGhyb3VnaCwgYnV0IGlzIG5vdCB2YWxpZCB1bmxlc3MgZmFsbGJh
Y2sKICAgICBpZiAoIW1fZmFsbGJhY2tUb0Rlc2NyaXB0b3IgJiYgbGlzdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBtZWRpYVN0cmluZy5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBzdHJpcExl
YWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobWVkaWFTdHJpbmcpOwogICAgICAgICBpZiAoIXN0
cmlwcGVkTWVkaWFTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KQEAgLTE1OCw0MCArMTYyLDI0IEBAIGJvb2wgTWVkaWFRdWVyeVNldDo6cGFyc2UoY29u
c3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIAogYm9vbCBNZWRpYVF1ZXJ5U2V0OjphZGQoY29uc3Qg
U3RyaW5nJiBxdWVyeVN0cmluZykKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1v
ZGUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlZFF1ZXJ5ID0gcGFy
c2VyLnBhcnNlTWVkaWFRdWVyeShxdWVyeVN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRRdWVyeSAm
JiBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKSB7Ci0gICAgICAgIFN0cmluZyBtZWRpdW0gPSBwYXJz
ZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyk7Ci0gICAgICAgIGlmICghbWVkaXVtLmlzTnVs
bCgpKQotICAgICAgICAgICAgcGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVl
cnk+KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAgIGF1dG8g
cGFyc2VkUXVlcnkgPSBpbnRlcm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAoIXBhcnNl
ZFF1ZXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3F1ZXJpZXMuYXBwZW5kKFdU
Rk1vdmUocGFyc2VkUXVlcnkpKTsKKyAgICBtX3F1ZXJpZXMuYXBwZW5kKFdURk1vdmUocGFyc2Vk
UXVlcnkudmFsdWUoKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nVG9SZW1vdmUpCitib29sIE1lZGlh
UXVlcnlTZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQogewotICAgIENTU1Bh
cnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFR
dWVyeT4gcGFyc2VkUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5KHF1ZXJ5U3RyaW5nVG9S
ZW1vdmUpOwotICAgIGlmICghcGFyc2VkUXVlcnkgJiYgbV9mYWxsYmFja1RvRGVzY3JpcHRvcikg
ewotICAgICAgICBTdHJpbmcgbWVkaXVtID0gcGFyc2VNZWRpYURlc2NyaXB0b3IocXVlcnlTdHJp
bmdUb1JlbW92ZSk7Ci0gICAgICAgIGlmICghbWVkaXVtLmlzTnVsbCgpKQotICAgICAgICAgICAg
cGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+KE1lZGlhUXVlcnk6Ok5v
bmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAgIGF1dG8gcGFyc2VkUXVlcnkgPSBpbnRl
cm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAoIXBhcnNlZFF1ZXJ5KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgcmV0dXJuIG1fcXVlcmllcy5yZW1vdmVGaXJzdE1hdGNo
aW5nKFsmcGFyc2VkUXVlcnldKGF1dG8mIHF1ZXJ5KSB7Ci0gICAgICAgIHJldHVybiAqcXVlcnkg
PT0gKnBhcnNlZFF1ZXJ5OworICAgICAgICByZXR1cm4gcXVlcnkgPT0gcGFyc2VkUXVlcnkudmFs
dWUoKTsKICAgICB9KTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5U2V0OjphZGRNZWRpYVF1ZXJ5KHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KQordm9pZCBNZWRpYVF1ZXJ5U2V0
OjphZGRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkmJiBtZWRpYVF1ZXJ5KQogewogICAgIG1fcXVlcmll
cy5hcHBlbmQoV1RGTW92ZShtZWRpYVF1ZXJ5KSk7CiB9CkBAIC0xOTksMTQgKzE4NywxMiBAQCB2
b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnk+IG1lZGlhUXVlcnkpCiBTdHJpbmcgTWVkaWFRdWVyeVNldDo6bWVkaWFUZXh0KCkgY29uc3QK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHRleHQ7Ci0gICAgCi0gICAgYm9vbCBmaXJzdCA9IHRydWU7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFmaXJzdCkKKyAgICBib29sIG5lZWRDb21tYSA9IGZhbHNlOworICAgIGZvciAo
YXV0byYgcXVlcnkgOiBtX3F1ZXJpZXMpIHsKKyAgICAgICAgaWYgKG5lZWRDb21tYSkKICAgICAg
ICAgICAgIHRleHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgdGV4dC5hcHBlbmQobV9xdWVyaWVzW2ldLT5jc3NU
ZXh0KCkpOworICAgICAgICB0ZXh0LmFwcGVuZChxdWVyeS5jc3NUZXh0KCkpOworICAgICAgICBu
ZWVkQ29tbWEgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gdGV4dC50b1N0cmluZygpOwogfQpA
QCAtMjE0LDEzICsyMDAsMTEgQEAgU3RyaW5nIE1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCgpIGNv
bnN0CiBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMsIENT
U1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0KQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVkaWFRdWVy
aWVzKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFNoZWV0KQotICAgICwgbV9wYXJl
bnRSdWxlKDApCiB7CiB9CiAKIE1lZGlhTGlzdDo6TWVkaWFMaXN0KE1lZGlhUXVlcnlTZXQqIG1l
ZGlhUXVlcmllcywgQ1NTUnVsZSogcGFyZW50UnVsZSkKICAgICA6IG1fbWVkaWFRdWVyaWVzKG1l
ZGlhUXVlcmllcykKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQogICAgICwgbV9wYXJlbnRS
dWxlKHBhcmVudFJ1bGUpCiB7CiB9CkBAIC0yMzIsOSArMjE2LDcgQEAgTWVkaWFMaXN0Ojp+TWVk
aWFMaXN0KCkKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZShtX3BhcmVudFJ1bGUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0g
bV9tZWRpYVF1ZXJpZXMtPnBhcnNlKHZhbHVlKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICBp
ZiAoIW1fbWVkaWFRdWVyaWVzLT5wYXJzZSh2YWx1ZSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ2LDcgKzIyOCw3IEBAIFN0cmluZyBN
ZWRpYUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgYXV0byYgcXVlcmll
cyA9IG1fbWVkaWFRdWVyaWVzLT5xdWVyeVZlY3RvcigpOwogICAgIGlmIChpbmRleCA8IHF1ZXJp
ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gcXVlcmllc1tpbmRleF0tPmNzc1RleHQoKTsKKyAg
ICAgICAgcmV0dXJuIHF1ZXJpZXNbaW5kZXhdLmNzc1RleHQoKTsKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKQEAgLTI4NCwxMSArMjY2LDkgQEAgdm9pZCBNZWRpYUxpc3Q6OnJlYXR0YWNoKE1l
ZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcykKIH0KIAogI2lmIEVOQUJMRShSRVNPTFVUSU9OX01F
RElBX1FVRVJZKQotc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25z
b2xlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzZXJpYWxpemVkRXhwcmVzc2lv
biwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQotewotICAgIEFTU0VSVChkb2N1bWVu
dCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKIAorc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5p
bmdNZXNzYWdlVG9Db25zb2xlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzZXJp
YWxpemVkRXhwcmVzc2lvbiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQorewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhUXVlcnlNZXNzYWdlKEFTQ0lJTGl0
ZXJhbCgiQ29uc2lkZXIgdXNpbmcgJ2RwcHgnIHVuaXRzIGluc3RlYWQgb2YgJyVyZXBsYWNlbWVu
dFVuaXRzJScsIGFzIGluIENTUyAnJXJlcGxhY2VtZW50VW5pdHMlJyBtZWFucyBkb3RzLXBlci1D
U1MtJWxlbmd0aFVuaXQlLCBub3QgZG90cy1wZXItcGh5c2ljYWwtJWxlbmd0aFVuaXQlLCBzbyBk
b2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgJyVyZXBsYWNlbWVudFVuaXRzJScgb2Yg
YSBzY3JlZW4uIEluIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb246ICIpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVZhbHVlRFBJKEFTQ0lJTGl0ZXJhbCgiZHBpIikpOwog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhVmFsdWVEUENNKEFTQ0lJTGl0
ZXJhbCgiZHBjbSIpKTsKQEAgLTI5NiwxNiArMjc2LDE2IEBAIHN0YXRpYyB2b2lkIGFkZFJlc29s
dXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbGVuZ3RoVW5pdENlbnRpbWV0
ZXIoQVNDSUlMaXRlcmFsKCJjZW50aW1ldGVyIikpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0g
ICAgaWYgKHZhbHVlLT5pc0RvdHNQZXJJbmNoKCkpCi0gICAgICAgIG1lc3NhZ2UgPSBTdHJpbmco
bWVkaWFRdWVyeU1lc3NhZ2UpLnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFs
dWVEUEkpLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRJbmNoKTsKLSAgICBlbHNl
IGlmICh2YWx1ZS0+aXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICBtZXNzYWdlID0gU3Ry
aW5nKG1lZGlhUXVlcnlNZXNzYWdlKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRp
YVZhbHVlRFBDTSkucmVwbGFjZSgiJWxlbmd0aFVuaXQlIiwgbGVuZ3RoVW5pdENlbnRpbWV0ZXIp
OworICAgIGlmICh2YWx1ZS5pc0RvdHNQZXJJbmNoKCkpCisgICAgICAgIG1lc3NhZ2UgPSBtZWRp
YVF1ZXJ5TWVzc2FnZS5nZXQoKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRpYVZh
bHVlRFBJKS5yZXBsYWNlKCIlbGVuZ3RoVW5pdCUiLCBsZW5ndGhVbml0SW5jaCk7CisgICAgZWxz
ZSBpZiAodmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQorICAgICAgICBtZXNzYWdlID0gbWVk
aWFRdWVyeU1lc3NhZ2UuZ2V0KCkucmVwbGFjZSgiJXJlcGxhY2VtZW50VW5pdHMlIiwgbWVkaWFW
YWx1ZURQQ00pLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRDZW50aW1ldGVyKTsK
ICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgbWVzc2FnZS5h
cHBlbmQoc2VyaWFsaXplZEV4cHJlc3Npb24pOwogCi0gICAgZG9jdW1lbnQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywgTWVzc2FnZUxldmVsOjpEZWJ1ZywgbWVzc2FnZSk7
CisgICAgZG9jdW1lbnQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6Q1NTLCBNZXNz
YWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlKTsKIH0KIAogdm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2Fy
bmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFRdWVyeVNldCogbWVk
aWFRdWVyeVNldCkKQEAgLTMxMywzMSArMjkzLDIzIEBAIHZvaWQgcmVwb3J0TWVkaWFRdWVyeVdh
cm5pbmdJZk5lZWRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIG1l
CiAgICAgaWYgKCFtZWRpYVF1ZXJ5U2V0IHx8ICFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyeVNldC0+cXVlcnlWZWN0b3IoKTsK
LSAgICBjb25zdCBzaXplX3QgcXVlcnlDb3VudCA9IG1lZGlhUXVlcmllcy5zaXplKCk7Ci0KLSAg
ICBpZiAoIXF1ZXJ5Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcXVlcnlDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1lZGlhUXVlcnkqIHF1
ZXJ5ID0gbWVkaWFRdWVyaWVzW2ldLmdldCgpOwotICAgICAgICBTdHJpbmcgbWVkaWFUeXBlID0g
cXVlcnktPm1lZGlhVHlwZSgpOwotICAgICAgICBpZiAoIXF1ZXJ5LT5pZ25vcmVkKCkgJiYgIWVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInByaW50IikpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV4cHJlc3Npb25zLnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwID0gZXhwcmVzc2lvbnMuYXQo
aikuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cC0+bWVkaWFGZWF0dXJlKCkgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwgZXhwLT5tZWRpYUZlYXR1
cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwg
ZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3Jlc29sdXRpb25N
ZWRpYUZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0g
IGV4cC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPihjc3NWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpOworICAgIGZvciAoYXV0byYgcXVlcnkgOiBtZWRpYVF1ZXJ5U2V0LT5xdWVyeVZlY3Rvcigp
KSB7CisgICAgICAgIGlmICghcXVlcnktPmlnbm9yZWQoKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UocXVlcnkubWVkaWFUeXBlKCksICJwcmludCIpKSB7CisgICAgICAgICAgICBh
dXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9ucykgeworICAgICAgICAgICAgICAgIGlmIChl
eHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
IHx8IGV4cHJlc3Npb24ubWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFJl
c29sdXRpb24gfHwgZXhwZXhwcmVzc2lvbi5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluUmVzb3V0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHZhbHVlID0g
ZXhwcmVzc2lvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJJbmNoKCkgfHwgcHJp
bWl0aXZlVmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFJlc29sdXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVk
aWFRdWVyeVNldC0+bWVkaWFUZXh0KCksICZwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25zb2xlKCpkb2N1
bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksIHByaW1pdGl2ZVZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIH0KKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAppbmRleCA3
MzEwMzQwMGI0NjdjYmI0ZWY1YTgwNWU0MmM5MDIyYTBmZTkwNzNhLi5kNzM2NWNkYjE5NzI2NDIz
NGFhNGI4YzY3YjcyOWQwMjU3ZTNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCkBAIC0xOCwy
NSArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgTWVkaWFMaXN0X2gKLSNkZWZpbmUgTWVkaWFMaXN0X2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUGFyc2VyOwog
Y2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsKLWNs
YXNzIE1lZGlhTGlzdDsKIGNsYXNzIE1lZGlhUXVlcnk7CiAKK3VzaW5nIEV4Y2VwdGlvbkNvZGUg
PSBpbnQ7CisKIGNsYXNzIE1lZGlhUXVlcnlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVF1
ZXJ5U2V0PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxNZWRpYVF1ZXJ5U2V0PiBjcmVhdGUo
KQpAQCAtNTIsMTggKzUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFRdWVyeVNldChtZWRpYVN0cmluZywgdHJ1ZSkpOwogICAgIH0KICAgICB+TWVkaWFR
dWVyeVNldCgpOwotICAgIAorCiAgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmKTsKICAgICBi
b29sIGFkZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHJlbW92ZShjb25zdCBTdHJpbmcmKTsK
IAotICAgIHZvaWQgYWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4pOwor
ICAgIHZvaWQgYWRkTWVkaWFRdWVyeShNZWRpYVF1ZXJ5JiYpOworCisgICAgY29uc3QgVmVjdG9y
PE1lZGlhUXVlcnk+JiBxdWVyeVZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcmllczsgfQog
Ci0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5Pj4mIHF1ZXJ5VmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9xdWVyaWVzOyB9Ci0gICAgCiAgICAgaW50IGxhc3RMaW5l
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZTsgfQogICAgIHZvaWQgc2V0TGFzdExpbmUoaW50
IGxhc3RMaW5lKSB7IG1fbGFzdExpbmUgPSBsYXN0TGluZTsgfQotICAgIAorCiAgICAgU3RyaW5n
IG1lZGlhVGV4dCgpIGNvbnN0OwogCiAgICAgUmVmPE1lZGlhUXVlcnlTZXQ+IGNvcHkoKSBjb25z
dCB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlTZXQoKnRoaXMpKTsgfQpAQCAtNzIs
MTAgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgTWVkaWFRdWVyeVNldCgpOwogICAgIE1lZGlhUXVl
cnlTZXQoY29uc3QgU3RyaW5nJiBtZWRpYVF1ZXJ5LCBib29sIGZhbGxiYWNrVG9EZXNjcmlwdGlv
bik7CiAgICAgTWVkaWFRdWVyeVNldChjb25zdCBNZWRpYVF1ZXJ5U2V0Jik7Ci0gICAgCisKKyAg
ICBPcHRpb25hbDxNZWRpYVF1ZXJ5PiBpbnRlcm5hbFBhcnNlKENTU1BhcnNlciYsIGNvbnN0IFN0
cmluZyYpOworICAgIE9wdGlvbmFsPE1lZGlhUXVlcnk+IGludGVybmFsUGFyc2UoY29uc3QgU3Ry
aW5nJik7CisKICAgICB1bnNpZ25lZCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yIDogMTsgLy8gdHJ1
ZSBpZiBmYWlsZWQgbWVkaWEgcXVlcnkgcGFyc2luZyBzaG91bGQgZmFsbGJhY2sgdG8gbWVkaWEg
ZGVzY3JpcHRpb24gcGFyc2luZy4KICAgICBzaWduZWQgbV9sYXN0TGluZSA6IDMxOwotICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+IG1fcXVlcmllczsKKyAgICBWZWN0b3I8
TWVkaWFRdWVyeT4gbV9xdWVyaWVzOwogfTsKIAogY2xhc3MgTWVkaWFMaXN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFMaXN0PiB7CkBAIC05OSwxMSArMTAwLDEwIEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgbWVkaWFUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMtPm1lZGlhVGV4
dCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgLy8gTm90IHBhcnQgb2YgQ1NTT00uCiAgICAgQ1NTUnVsZSogcGFyZW50UnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsgfQogICAgIENTU1N0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlU2hlZXQ7IH0KLSAg
ICB2b2lkIGNsZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVl
dCk7IG1fcGFyZW50U3R5bGVTaGVldCA9IDA7IH0KLSAgICB2b2lkIGNsZWFyUGFyZW50UnVsZSgp
IHsgQVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IDA7IH0KKyAgICB2b2lkIGNs
ZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVldCk7IG1fcGFy
ZW50U3R5bGVTaGVldCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsg
QVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IG51bGxwdHI7IH0KICAgICBjb25z
dCBNZWRpYVF1ZXJ5U2V0KiBxdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMu
Z2V0KCk7IH0KIAogICAgIHZvaWQgcmVhdHRhY2goTWVkaWFRdWVyeVNldCopOwpAQCAtMTE0LDE1
ICsxMTQsMTUgQEAgcHJpdmF0ZToKICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1J1
bGUqIHBhcmVudFJ1bGUpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVy
aWVzOwotICAgIENTU1N0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKLSAgICBDU1NSdWxl
KiBtX3BhcmVudFJ1bGU7CisgICAgQ1NTU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0IHsg
bnVsbHB0ciB9OworICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZSB7IG51bGxwdHIgfTsKIH07CiAK
ICNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKKwogLy8gQWRkcyBtZXNzYWdlIHRv
IGluc3BlY3RvciBjb25zb2xlIHdoZW5ldmVyIGRwaSBvciBkcGNtIHZhbHVlcyBhcmUgdXNlZCBm
b3IgInNjcmVlbiIgbWVkaWEuCiB2b2lkIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQo
RG9jdW1lbnQqLCBjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7CisKICNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAppbmRleCA0YTI1YTExYjli
ZDY2ZTJhNjMzMmQ0Y2I4MGYzNGI1NTc3NGI0NWYxLi4xM2Q3NzU2OTZlNDdhOTUwMzkzYTlmZTNl
ODdmNmZjMjMzOTY4Zjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeS5oIgogCi0j
aW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsODYgKzM2LDYyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxpemUt
YS1tZWRpYS1xdWVyeQogU3RyaW5nIE1lZGlhUXVlcnk6OnNlcmlhbGl6ZSgpIGNvbnN0CiB7Ci0g
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgaWYgKCFtX2lnbm9yZWQpIHsKLSAgICAgICAg
c3dpdGNoIChtX3Jlc3RyaWN0b3IpIHsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpPbmx5Ogot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm9ubHkgIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb3Q6Ci0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgibm90ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TWVkaWFRdWVyeTo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fZXhwcmVzc2lvbnMtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChtX21lZGlhVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9tZWRpYVR5cGUgIT0gImFsbCIgfHwgbV9yZXN0
cmljdG9yICE9IE5vbmUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9tZWRpYVR5cGUp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiBhbmQgIik7Ci0gICAgICAgIH0K
KyAgICBpZiAobV9pZ25vcmVkKSB7CisgICAgICAgIC8vIElmIHF1ZXJ5IGlzIGludmFsaWQsIHNl
cmlhbGl6ZWQgdGV4dCBzaG91bGQgdHVybiBpbnRvICJub3QgYWxsIi4KKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgibm90IGFsbCIpOworICAgIH0KIAotICAgICAgICByZXN1bHQuYXBwZW5k
KG1fZXhwcmVzc2lvbnMtPmF0KDApLT5zZXJpYWxpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgbV9leHByZXNzaW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICBib29sIHNob3Vs
ZE9taXRNZWRpYVR5cGUgPSBmYWxzZTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBz
d2l0Y2ggKG1fcmVzdHJpY3RvcikgeworICAgIGNhc2UgTWVkaWFRdWVyeTo6T25seToKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm9ubHkgIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTWVkaWFRdWVyeTo6Tm90OgorICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibm90ICIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUXVlcnk6Ok5vbmU6CisgICAgICAgIHNo
b3VsZE9taXRNZWRpYVR5cGUgPSAhbV9leHByZXNzaW9ucy5pc0VtcHR5KCkgJiYgbV9tZWRpYVR5
cGUgPT0gImFsbCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBib29sIG5lZWRzQW5kID0g
ZmFsc2U7CisgICAgaWYgKCFzaG91bGRPbWl0TWVkaWFUeXBlKSB7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQobV9tZWRpYVR5cGUpOworICAgICAgICBuZWVkc0FuZCA9IHRydWU7CisgICAgfQorICAg
IGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IG1fZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgaWYgKG5l
ZWRzQW5kKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiBhbmQgIik7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBxdWVyeSBpcyBpbnZhbGlk
LCBzZXJpYWxpemVkIHRleHQgc2hvdWxkIHR1cm4gaW50byAibm90IGFsbCIuCi0gICAgICAgIHJl
c3VsdC5hcHBlbmRMaXRlcmFsKCJub3QgYWxsIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZXhw
cmVzc2lvbi5zZXJpYWxpemUoKSk7CisgICAgICAgIG5lZWRzQW5kID0gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1NZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5
KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uVmVjdG9yPiBleHBycykKLSAgICA6IG1fcmVzdHJpY3RvcihyKQorTWVkaWFRdWVy
eTo6TWVkaWFRdWVyeShSZXN0cmljdG9yIHJlc3RyaWN0b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlLCBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+JiYgZXhwcmVzc2lvbnMpCisgICAgOiBt
X3Jlc3RyaWN0b3IocmVzdHJpY3RvcikKICAgICAsIG1fbWVkaWFUeXBlKG1lZGlhVHlwZS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKQotICAgICwgbV9leHByZXNzaW9ucyhXVEZNb3ZlKGV4cHJz
KSkKLSAgICAsIG1faWdub3JlZChmYWxzZSkKKyAgICAsIG1fZXhwcmVzc2lvbnMoV1RGTW92ZShl
eHByZXNzaW9ucykpCiB7Ci0gICAgaWYgKCFtX2V4cHJlc3Npb25zKSB7Ci0gICAgICAgIG1fZXhw
cmVzc2lvbnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEV4cHJlc3Npb25WZWN0b3I+KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnNvcnQobV9leHByZXNzaW9ucy0+YmVnaW4oKSwg
bV9leHByZXNzaW9ucy0+ZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKLSAgICAgICAgcmV0
dXJuIGNvZGVQb2ludENvbXBhcmUoYS0+c2VyaWFsaXplKCksIGItPnNlcmlhbGl6ZSgpKSA8IDA7
CisgICAgc3RkOjpzb3J0KG1fZXhwcmVzc2lvbnMuYmVnaW4oKSwgbV9leHByZXNzaW9ucy5lbmQo
KSwgW10oYXV0byYgYSwgYXV0byYgYikgeworICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFy
ZShhLnNlcmlhbGl6ZSgpLCBiLnNlcmlhbGl6ZSgpKSA8IDA7CiAgICAgfSk7CiAKLSAgICAvLyBy
ZW1vdmUgYWxsIGR1cGxpY2F0ZWQgZXhwcmVzc2lvbnMKKyAgICAvLyBSZW1vdmUgYWxsIGR1cGxp
Y2F0ZWQgZXhwcmVzc2lvbnMuCiAgICAgU3RyaW5nIGtleTsKLSAgICBmb3IgKGludCBpID0gbV9l
eHByZXNzaW9ucy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICBmb3IgKGludCBpID0g
bV9leHByZXNzaW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogCi0gICAgICAgIC8vIGlm
IG5vdCBhbGwgb2YgdGhlIGV4cHJlc3Npb25zIGlzIHZhbGlkIHRoZSBtZWRpYSBxdWVyeSBtdXN0
IGJlIGlnbm9yZWQuCisgICAgICAgIC8vIElmIGFueSBleHByZXNzaW9uIGlzIGludmFsaWQgdGhl
IG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdub3JlZC4KICAgICAgICAgaWYgKCFtX2lnbm9yZWQpCi0g
ICAgICAgICAgICBtX2lnbm9yZWQgPSAhbV9leHByZXNzaW9ucy0+YXQoaSktPmlzVmFsaWQoKTsK
KyAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25zW2ldLmlzVmFsaWQoKTsKIAot
ICAgICAgICBpZiAobV9leHByZXNzaW9ucy0+YXQoaSktPnNlcmlhbGl6ZSgpID09IGtleSkKLSAg
ICAgICAgICAgIG1fZXhwcmVzc2lvbnMtPnJlbW92ZShpKTsKKyAgICAgICAgaWYgKG1fZXhwcmVz
c2lvbnNbaV0uc2VyaWFsaXplKCkgPT0ga2V5KQorICAgICAgICAgICAgbV9leHByZXNzaW9ucy5y
ZW1vdmUoaSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtleSA9IG1fZXhwcmVzc2lvbnMt
PmF0KGkpLT5zZXJpYWxpemUoKTsKKyAgICAgICAgICAgIGtleSA9IG1fZXhwcmVzc2lvbnNbaV0u
c2VyaWFsaXplKCk7CiAgICAgfQogfQogCi1NZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KGNvbnN0IE1l
ZGlhUXVlcnkmIG8pCi0gICAgOiBtX3Jlc3RyaWN0b3Ioby5tX3Jlc3RyaWN0b3IpCi0gICAgLCBt
X21lZGlhVHlwZShvLm1fbWVkaWFUeXBlKQotICAgICwgbV9leHByZXNzaW9ucyhzdGQ6Om1ha2Vf
dW5pcXVlPEV4cHJlc3Npb25WZWN0b3I+KG8ubV9leHByZXNzaW9ucy0+c2l6ZSgpKSkKLSAgICAs
IG1faWdub3JlZChvLm1faWdub3JlZCkKLSAgICAsIG1fc2VyaWFsaXphdGlvbkNhY2hlKG8ubV9z
ZXJpYWxpemF0aW9uQ2FjaGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXhw
cmVzc2lvbnMtPnNpemUoKTsgKytpKQotICAgICAgICAoKm1fZXhwcmVzc2lvbnMpW2ldID0gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXhwPigqby5tX2V4cHJlc3Npb25zLT5hdChpKSk7Ci19
Ci0KLU1lZGlhUXVlcnk6On5NZWRpYVF1ZXJ5KCkKLXsKLX0KLQogLy8gaHR0cDovL2Rldi53My5v
cmcvY3Nzd2cvY3Nzb20vI2NvbXBhcmUtbWVkaWEtcXVlcmllcwogYm9vbCBNZWRpYVF1ZXJ5Ojpv
cGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90aGVyKSBjb25zdAogewpAQCAtMTI0LDExICs5
OSwxMCBAQCBib29sIE1lZGlhUXVlcnk6Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3Ro
ZXIpIGNvbnN0CiB9CiAKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxp
emUtYS1saXN0LW9mLW1lZGlhLXF1ZXJpZXMKLVN0cmluZyBNZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkg
Y29uc3QKK2NvbnN0IFN0cmluZyYgTWVkaWFRdWVyeTo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc2VyaWFsaXphdGlvbkNhY2hlLmlzTnVsbCgpKQotICAgICAgICBjb25zdF9jYXN0PE1l
ZGlhUXVlcnkqPih0aGlzKS0+bV9zZXJpYWxpemF0aW9uQ2FjaGUgPSBzZXJpYWxpemUoKTsKLQor
ICAgICAgICBtX3NlcmlhbGl6YXRpb25DYWNoZSA9IHNlcmlhbGl6ZSgpOwogICAgIHJldHVybiBt
X3NlcmlhbGl6YXRpb25DYWNoZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKaW5kZXggNWY5
ZmExZjEzOGNlNTFjZDg4ZmVkMGUwOWY5YWUxMTZiNTU4Y2MyMS4uMjA5ODRkMzU2M2VmYWVhMzEz
NGU4YWZjZmMzNzVkZWU4ZGViMmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCkBAIC0yNiw0
OSArMjYsMzcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5X2gK
LSNkZWZpbmUgTWVkaWFRdWVyeV9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFRdWVyeUV4cDsKIAogY2xh
c3MgTWVkaWFRdWVyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgZW51bSBSZXN0cmljdG9yIHsKLSAgICAgICAgT25seSwgTm90LCBOb25lCi0gICAgfTsKKyAg
ICBlbnVtIFJlc3RyaWN0b3IgeyBPbmx5LCBOb3QsIE5vbmUgfTsKIAotICAgIHR5cGVkZWYgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4gRXhwcmVzc2lvblZlY3RvcjsKLQot
ICAgIE1lZGlhUXVlcnkoUmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+Pj4gZXhwcnMp
OwotICAgIE1lZGlhUXVlcnkoY29uc3QgTWVkaWFRdWVyeSYpOwotICAgIH5NZWRpYVF1ZXJ5KCk7
CisgICAgTWVkaWFRdWVyeShSZXN0cmljdG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgVmVj
dG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiYmKTsKIAogICAgIFJlc3RyaWN0b3IgcmVzdHJpY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RvcjsgfQotICAgIGNvbnN0IFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+JiBleHByZXNzaW9ucygpIGNvbnN0IHsgcmV0dXJu
ICptX2V4cHJlc3Npb25zOyB9Ci0gICAgU3RyaW5nIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWFUeXBlOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90
aGVyKSBjb25zdDsKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAgIGNvbnN0IFZlY3Rv
cjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4mIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gbV9l
eHByZXNzaW9uczsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVR5cGU7IH0KICAgICBib29sIGlnbm9yZWQoKSBjb25zdCB7IHJldHVybiBtX2ln
bm9yZWQ7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBjb3B5KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5PigqdGhpcyk7IH0KKyAgICBjb25z
dCBTdHJpbmcmIGNzc1RleHQoKSBjb25zdDsKIAotIHByaXZhdGU6Ci0gICAgUmVzdHJpY3RvciBt
X3Jlc3RyaWN0b3I7Ci0gICAgU3RyaW5nIG1fbWVkaWFUeXBlOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uVmVjdG9yPiBtX2V4cHJlc3Npb25zOwotICAgIGJvb2wgbV9pZ25vcmVkOwot
ICAgIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNoZTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwogCitwcml2YXRlOgogICAgIFN0cmluZyBzZXJp
YWxpemUoKSBjb25zdDsKKworICAgIFJlc3RyaWN0b3IgbV9yZXN0cmljdG9yOworICAgIFN0cmlu
ZyBtX21lZGlhVHlwZTsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+IG1fZXhwcmVz
c2lvbnM7CisgICAgYm9vbCBtX2lnbm9yZWQgeyBmYWxzZSB9OworICAgIG11dGFibGUgU3RyaW5n
IG1fc2VyaWFsaXphdGlvbkNhY2hlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKaW5kZXggZmRjZTg5YWUz
MGMyNzYxNmY5MWM5NTg3ZjdmYTIxZGE1ZGFjNjY2ZC4uY2VmMDlmNDQ3YTYzYWYzODM4ZWE3NTZj
NTNlMWFjZjMxY2U4Yjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmNwcApAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgi
CiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeS5oIgotI2luY2x1
ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTU4LDQyICs1Nyw0
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBNZWRpYUZlYXR1
cmVOYW1lczsKLQogZW51bSBNZWRpYUZlYXR1cmVQcmVmaXggeyBNaW5QcmVmaXgsIE1heFByZWZp
eCwgTm9QcmVmaXggfTsKIAotdHlwZWRlZiBib29sICgqRXZhbEZ1bmMpKENTU1ZhbHVlKiwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4
KTsKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgRXZhbEZ1bmM+IEZ1bmN0aW9u
TWFwOwotc3RhdGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rpb25NYXA7Cit0eXBlZGVmIGJvb2wgKCpN
ZWRpYVF1ZXJ5RnVuY3Rpb24pKENTU1ZhbHVlKiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4KTsKK3R5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmdJbXBsKiwgTWVkaWFRdWVyeUZ1bmN0aW9uPiBNZWRpYVF1ZXJ5RnVuY3Rpb25NYXA7
CiAKLS8qCi0gKiBGSVhNRTogZm9sbG93aW5nIG1lZGlhIGZlYXR1cmVzIGFyZSBub3QgaW1wbGVt
ZW50ZWQ6IHNjYW4KLSAqCi0gKiBzY2FuOiBUaGUgInNjYW4iIG1lZGlhIGZlYXR1cmUgZGVzY3Jp
YmVzIHRoZSBzY2FubmluZyBwcm9jZXNzIG9mCi0gKiB0diBvdXRwdXQgZGV2aWNlcy4gSXQncyB1
bmtub3duIGhvdyB0byByZXRyaWV2ZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KLSAqIHRoZSBwbGF0
Zm9ybQotICovCitzdGF0aWMgYm9vbCBpc1ZpZXdwb3J0RGVwZW5kZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbWVkaWFGZWF0dXJlKQoreworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OndpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluV2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptaW5IZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptYXhXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heEhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om9yaWVudGF0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5Bc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heEFzcGVjdFJhdGlvOworfQogCiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpN
ZWRpYVF1ZXJ5RXZhbHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQotICAgIDogbV9leHBS
ZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQorICAgIDogbV9mYWxsYmFja1Jlc3VsdChtZWRpYUZl
YXR1cmVSZXN1bHQpCiB7CiB9CiAKIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVS
ZXN1bHQpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKLSAgICAsIG1fZXhw
UmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKKyAgICAsIG1fZmFsbGJhY2tSZXN1bHQobWVkaWFG
ZWF0dXJlUmVzdWx0KQogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZh
bHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2
YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVk
TWVkaWFUeXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZnJhbWUoZG9jdW1lbnQu
ZnJhbWUoKSkKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgLCBtX2V4cFJlc3VsdChmYWxzZSkg
Ly8gZG9lc24ndCBtYXR0ZXIgd2hlbiB3ZSBoYXZlIG1fZnJhbWUgYW5kIG1fc3R5bGUKLXsKLX0K
LQotTWVkaWFRdWVyeUV2YWx1YXRvcjo6fk1lZGlhUXVlcnlFdmFsdWF0b3IoKQogewogfQogCkBA
IC0xMTgsODIgKzExNSw3NCBAQCBzdGF0aWMgYm9vbCBhcHBseVJlc3RyaWN0b3IoTWVkaWFRdWVy
eTo6UmVzdHJpY3RvciByLCBib29sIHZhbHVlKQogICAgIHJldHVybiByID09IE1lZGlhUXVlcnk6
Ok5vdCA/ICF2YWx1ZSA6IHZhbHVlOwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2
YWwoY29uc3QgTWVkaWFRdWVyeVNldCogcXVlcnlTZXQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpIGNvbnN0Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25z
dAogewotICAgIGlmICghcXVlcnlTZXQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0
byYgcXVlcmllcyA9IHF1ZXJ5U2V0LT5xdWVyeVZlY3RvcigpOworICAgIGF1dG8mIHF1ZXJpZXMg
PSBxdWVyeVNldC5xdWVyeVZlY3RvcigpOwogICAgIGlmICghcXVlcmllcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBlbXB0eSBxdWVyeSBsaXN0IGV2YWx1YXRlcyB0byB0cnVlCiAK
ICAgICAvLyBpdGVyYXRlIG92ZXIgcXVlcmllcywgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRv
IHRydWUgKE9SIHNlbWFudGljcykKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcXVlcmllcy5zaXplKCkgJiYgIXJlc3VsdDsgKytpKSB7Ci0gICAg
ICAgIE1lZGlhUXVlcnkqIHF1ZXJ5ID0gcXVlcmllc1tpXS5nZXQoKTsKKyAgICAgICAgYXV0byYg
cXVlcnkgPSBxdWVyaWVzW2ldOwogCi0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpIHx8ICgh
cXVlcnktPmV4cHJlc3Npb25zKCkuc2l6ZSgpICYmIHF1ZXJ5LT5tZWRpYVR5cGUoKS5pc0VtcHR5
KCkpKQorICAgICAgICBpZiAocXVlcnkuaWdub3JlZCgpIHx8ICghcXVlcnkuZXhwcmVzc2lvbnMo
KS5zaXplKCkgJiYgcXVlcnkubWVkaWFUeXBlKCkuaXNFbXB0eSgpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS0+bWVkaWFUeXBlKCkp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LT5leHByZXNzaW9ucygp
OwotICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGV4cHJlc3Npb25zLCBzdG9wIGlmIGFu
eSBvZiB0aGVtIGV2YWwgdG8gZmFsc2UKLSAgICAgICAgICAgIC8vIChBTkQgc2VtYW50aWNzKQor
ICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkpKSB7CisgICAgICAg
ICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7CisgICAgICAgICAg
ICAvLyBpdGVyYXRlIHRocm91Z2ggZXhwcmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZh
bCB0byBmYWxzZSAoQU5EIHNlbWFudGljcykKICAgICAgICAgICAgIHNpemVfdCBqID0gMDsKICAg
ICAgICAgICAgIGZvciAoOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAg
ICAgICAgICBib29sIGV4cHJSZXN1bHQgPSBldmFsKGV4cHJlc3Npb25zLmF0KGopLmdldCgpKTsK
LSAgICAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlciAmJiBleHByZXNzaW9ucy5hdChqKS0+
aXNWaWV3cG9ydERlcGVuZGVudCgpKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5hZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoZXhwcmVzc2lvbnMuYXQoaiku
Z2V0KCksIGV4cHJSZXN1bHQpOwotICAgICAgICAgICAgICAgIGlmICghZXhwclJlc3VsdCkKKyAg
ICAgICAgICAgICAgICBib29sIGV4cHJlc3Npb25SZXN1bHQgPSBldmFsdWF0ZShleHByZXNzaW9u
c1tqXSk7CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIgJiYgaXNWaWV3cG9ydERl
cGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChl
eHByZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFl
eHByZXNzaW9uUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgLy8gYXNzdW1lIHRydWUgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2Yg
dGhlIGxpc3QsCiAgICAgICAgICAgICAvLyBvdGhlcndpc2UgYXNzdW1lIGZhbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwgZXhwcmVz
c2lvbnMuc2l6ZSgpID09IGopOworICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9y
KHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZXhwcmVzc2lvbnMuc2l6ZSgpID09IGopOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS0+cmVzdHJp
Y3RvcigpLCBmYWxzZSk7CisgICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVl
cnkucmVzdHJpY3RvcigpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsQ2hlY2tpbmdWaWV3cG9ydERlcGVuZGVu
dFJlc3VsdHMoY29uc3QgTWVkaWFRdWVyeVNldCogcXVlcnlTZXQsIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+JiByZXN1bHRzKQorYm9vbCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNldCwgVmVjdG9yPE1lZGlh
UXVlcnlSZXN1bHQ+JiByZXN1bHRzKSBjb25zdAogewotICAgIGlmICghcXVlcnlTZXQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgcXVlcmllcyA9IHF1ZXJ5U2V0LT5xdWVyeVZl
Y3RvcigpOworICAgIGF1dG8mIHF1ZXJpZXMgPSBxdWVyeVNldC5xdWVyeVZlY3RvcigpOwogICAg
IGlmICghcXVlcmllcy5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgp
ICYmICFyZXN1bHQ7ICsraSkgewotICAgICAgICBNZWRpYVF1ZXJ5KiBxdWVyeSA9IHF1ZXJpZXNb
aV0uZ2V0KCk7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gcXVlcmllc1tpXTsKIAotICAgICAgICBp
ZiAocXVlcnktPmlnbm9yZWQoKSkKKyAgICAgICAgaWYgKHF1ZXJ5Lmlnbm9yZWQoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS0+bWVk
aWFUeXBlKCkpKSB7Ci0gICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LT5leHBy
ZXNzaW9ucygpOworICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkp
KSB7CisgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7
CiAgICAgICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgICAgICBmb3IgKDsgaiA8IGV4cHJl
c3Npb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBleHByUmVzdWx0ID0g
ZXZhbChleHByZXNzaW9ucy5hdChqKS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cHJl
c3Npb25zLmF0KGopLT5pc1ZpZXdwb3J0RGVwZW5kZW50KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeVJlc3VsdD4oKmV4cHJl
c3Npb25zLmF0KGopLCBleHByUmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleHByUmVz
dWx0KQorICAgICAgICAgICAgICAgIGJvb2wgZXhwcmVzc2lvblJlc3VsdCA9IGV2YWx1YXRlKGV4
cHJlc3Npb25zW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWaWV3cG9ydERlcGVuZGVudChl
eHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHsgZXhwcmVzc2lvbnNbal0sIGV4cHJlc3Npb25SZXN1bHQgfSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFleHByZXNzaW9uUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3Rvcihx
dWVyeS0+cmVzdHJpY3RvcigpLCBleHByZXNzaW9ucy5zaXplKCkgPT0gaik7CisgICAgICAgICAg
ICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVzdHJpY3RvcigpLCBleHByZXNzaW9u
cy5zaXplKCkgPT0gaik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBw
bHlSZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGZhbHNlKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGZhbHNlKTsKICAgICB9
CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBj
b21wYXJlVmFsdWUoVCBhLCBUIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGJvb2wgY29tcGFyZVZhbHVlKFQgYSwgVSBiLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgTWluUHJlZml4
OgpAQCAtMjA4LDQ1ICsxOTcsNDkgQEAgYm9vbCBjb21wYXJlVmFsdWUoVCBhLCBUIGIsIE1lZGlh
RmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUo
Q1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKIHsKLSAgICBpZiAoaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKSkgewotICAg
ICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlJiBhc3BlY3RSYXRpbyA9IGRvd25jYXN0PENTU0FzcGVj
dFJhdGlvVmFsdWU+KCp2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlVmFsdWUod2lkdGgg
KiBzdGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSksIGhlaWdo
dCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8ubnVtZXJhdG9yVmFsdWUoKSksIG9wKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpczxDU1NBc3BlY3RSYXRpb1Zh
bHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBhc3BlY3RSYXRp
byA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSk7CisgICAgcmV0dXJuIGNv
bXBhcmVWYWx1ZSh3aWR0aCAqIGFzcGVjdFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSwgaGVpZ2h0
ICogYXNwZWN0UmF0aW8ubnVtZXJhdG9yVmFsdWUoKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBu
dW1iZXJWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGZsb2F0JiByZXN1bHQpCitzdGF0aWMgT3B0aW9u
YWw8ZG91YmxlPiBkb3VibGVWYWx1ZShDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpIHx8ICFkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KyAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RG91Ymxl
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogfQogCi1zdGF0aWMgYm9vbCBj
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0
aWMgYm9vbCB6ZXJvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCiB7Ci0gICAgaW50IGJpdHNQZXJDb21wb25lbnQgPSBzY3JlZW5EZXB0aFBlckNvbXBvbmVu
dChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwotICAgIGZsb2F0IG51bWJlcjsK
LSAgICBpZiAodmFsdWUpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVy
KSAmJiBjb21wYXJlVmFsdWUoYml0c1BlckNvbXBvbmVudCwgc3RhdGljX2Nhc3Q8aW50PihudW1i
ZXIpLCBvcCk7Ci0KLSAgICByZXR1cm4gYml0c1BlckNvbXBvbmVudCAhPSAwOworICAgIGF1dG8g
bnVtZXJpY1ZhbHVlID0gZG91YmxlVmFsdWUodmFsdWUpOworICAgIHJldHVybiBudW1lcmljVmFs
dWUgJiYgY29tcGFyZVZhbHVlKDAsIG51bWVyaWNWYWx1ZS52YWx1ZSgpLCBvcCk7CiB9CiAKLXN0
YXRpYyBib29sIGNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKK3N0YXRpYyBib29sIG9uZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgTWVkaWFGZWF0
dXJlUHJlZml4IG9wKQogewotICAgIC8vIEZJWE1FOiBJdCdzIHVua25vd24gaG93IHRvIHJldHJp
ZXZlIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgZGlzcGxheSBtb2RlIGlzIGluZGV4ZWQKLSAgICAv
LyBBc3N1bWUgd2UgZG9uJ3Qgc3VwcG9ydCBpbmRleGVkIGRpc3BsYXkuCiAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRv
IG51bWVyaWNWYWx1ZSA9IGRvdWJsZVZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbnVtZXJpY1Zh
bHVlICYmIGNvbXBhcmVWYWx1ZSgxLCBudW1lcmljVmFsdWUudmFsdWUoKSwgb3ApOworfQogCi0g
ICAgZmxvYXQgbnVtYmVyOwotICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAm
JiBjb21wYXJlVmFsdWUoMCwgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CitzdGF0aWMg
Ym9vbCBjb2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQoreworICAg
IGludCBiaXRzUGVyQ29tcG9uZW50ID0gc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoZnJhbWUubWFp
bkZyYW1lKCkudmlldygpKTsKKyAgICBhdXRvIG51bWVyaWNWYWx1ZSA9IGRvdWJsZVZhbHVlKHZh
bHVlKTsKKyAgICBpZiAoIW51bWVyaWNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGJpdHNQZXJDb21w
b25lbnQ7CisgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZShiaXRzUGVyQ29tcG9uZW50LCBudW1lcmlj
VmFsdWUudmFsdWUoKSwgb3ApOworfQorCitzdGF0aWMgYm9vbCBjb2xvckluZGV4RXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUm
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCit7CisgICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBm
b3IgaW5kZXhlZCBkaXNwbGF5LgorICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsK
IH0KIAotc3RhdGljIGJvb2wgY29sb3JfZ2FtdXRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgY29sb3JHYW11dEV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjU1LDEyICsyNDgsMTAgQEAgc3RhdGljIGJvb2wgY29sb3JfZ2FtdXRNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXIKICAgICBj
YXNlIENTU1ZhbHVlU3JnYjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDU1NWYWx1
ZVAzOgotICAgICAgICAvLyBGSVhNRTogRm9yIHRoZSBtb21lbnQgd2UnbGwganVzdCBhc3N1bWUg
YW4gImV4dGVuZGVkCi0gICAgICAgIC8vIGNvbG9yIiBkaXNwbGF5IGlzIGF0IGxlYXN0IGFzIGdv
b2QgYXMgUDMuCi0gICAgICAgIHJldHVybiBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciB0
aGUgbW9tZW50IHdlIGp1c3QgYXNzdW1lIGFueSAiZXh0ZW5kZWQgY29sb3IiIGRpc3BsYXkgaXMg
YXQgbGVhc3QgYXMgZ29vZCBhcyBQMy4KKyAgICAgICAgcmV0dXJuIHNjcmVlblN1cHBvcnRzRXh0
ZW5kZWRDb2xvcihmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpOwogICAgIGNhc2UgQ1NTVmFsdWVS
ZWMyMDIwOgotICAgICAgICAvLyBGSVhNRTogQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgc3RhcnQg
ZGV0ZWN0aW5nIGRpc3BsYXlzIHRoYXQKLSAgICAgICAgLy8gc3VwcG9ydCBtb3JlIGNvbG9ycy4K
KyAgICAgICAgLy8gRklYTUU6IEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHN0YXJ0IGRldGVjdGlu
ZyBkaXNwbGF5cyB0aGF0IHN1cHBvcnQgbW9yZSBjb2xvcnMuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI2OCw5
MCArMjU5LDgyIEBAIHN0YXRpYyBib29sIGNvbG9yX2dhbXV0TWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyCiAgICAgfQogfQogCi1zdGF0aWMg
Ym9vbCBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIG1vbm9jaHJvbWVFdmFsdWF0ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAoIXNj
cmVlbklzTW9ub2Nocm9tZShmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZSgwLCBz
dGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBvcCk7CisgICAgaWYgKCFzY3JlZW5Jc01vbm9jaHJvbWUo
ZnJhbWUubWFpbkZyYW1lKCkudmlldygpKSkKKyAgICAgICAgcmV0dXJuIHplcm9FdmFsdWF0ZSh2
YWx1ZSwgb3ApOworICAgIHJldHVybiBjb2xvckV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgaW52ZXJ0ZWRfY29sb3JzTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
LCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIGludmVydGVkQ29sb3Jz
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgYm9vbCBpc0ludmVydGVkID0g
c2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKTsKLQogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJl
dHVybiBpc0ludmVydGVkOwotCi0gICAgY29uc3QgQ1NTVmFsdWVJRCBpZCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKLSAgICByZXR1cm4gKGlzSW52
ZXJ0ZWQgJiYgaWQgPT0gQ1NTVmFsdWVJbnZlcnRlZCkgfHwgKCFpc0ludmVydGVkICYmIGlkID09
IENTU1ZhbHVlTm9uZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSAoaXNJbnZlcnRlZCA/IENTU1ZhbHVlSW52ZXJ0ZWQgOiBD
U1NWYWx1ZU5vbmUpOwogfQogCi1zdGF0aWMgYm9vbCBvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBvcmllbnRhdGlvbkV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYs
IEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIEZyYW1lVmlldyogdmll
dyA9IGZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwog
ICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IHdpZHRoID0g
dmlldy0+bGF5b3V0V2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0
KCk7Ci0gICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgY29u
c3QgQ1NTVmFsdWVJRCBpZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dFZhbHVlSUQoKTsKLSAgICAgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSAvLyBTcXVhcmUgdmlld3Bv
cnQgaXMgcG9ydHJhaXQuCi0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVMYW5kc2NhcGUgPT0g
aWQ7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvcnRyYWl0ID09IGlkOworICAgIGF1dG8gd2lk
dGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOworICAgIGF1dG8gaGVpZ2h0ID0gdmlldy0+bGF5b3V0
SGVpZ2h0KCk7CisKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAg
ICAgICAgLy8gRXhwcmVzc2lvbiAob3JpZW50YXRpb24pIGV2YWx1YXRlcyB0byB0cnVlIGlmIHdp
ZHRoIGFuZCBoZWlnaHQgPj0gMC4KKyAgICAgICAgcmV0dXJuIGhlaWdodCA+PSAwICYmIHdpZHRo
ID49IDA7CiAgICAgfQogCi0gICAgLy8gRXhwcmVzc2lvbiAob3JpZW50YXRpb24pIGV2YWx1YXRl
cyB0byB0cnVlIGlmIHdpZHRoIGFuZCBoZWlnaHQgPj0gMC4KLSAgICByZXR1cm4gaGVpZ2h0ID49
IDAgJiYgd2lkdGggPj0gMDsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CisgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSAv
LyBTcXVhcmUgdmlld3BvcnQgaXMgcG9ydHJhaXQuCisgICAgICAgIHJldHVybiBrZXl3b3JkID09
IENTU1ZhbHVlTGFuZHNjYXBlOworICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlUG9ydHJh
aXQ7CiB9CiAKLXN0YXRpYyBib29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBhc3BlY3RSYXRpb0V2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIEZyYW1lVmlldyogdmlldyA9
IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQorICAgIC8vICh7LG1pbi0sbWF4LX1hc3Bl
Y3QtcmF0aW8pCisgICAgLy8gYXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGl0cyBhc3BlY3Qg
cmF0aW8gaXMgbm9uLXplcm8KKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVl
KHZhbHVlLCB2aWV3LT5sYXlvdXRXaWR0aCgpLCB2aWV3LT5sYXlvdXRIZWlnaHQoKSwgb3ApOwor
ICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gKHssbWluLSxtYXgtfWFzcGVjdC1yYXRpbykKLSAg
ICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgaXRzIGFzcGVjdCByYXRpbyBpcyBub24t
emVybwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1
ZSh2YWx1ZSwgdmlldy0+bGF5b3V0V2lkdGgoKSwgdmlldy0+bGF5b3V0SGVpZ2h0KCksIG9wKTsK
IH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VBc3BlY3RSYXRp
b0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICh2YWx1
ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLnZpZXcoKSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1
ZSh2YWx1ZSwgc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihz
Zy5oZWlnaHQoKSksIG9wKTsKLSAgICB9Ci0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLWFz
cGVjdC1yYXRpbykKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgaXRzIGFzcGVj
dCByYXRpbyBpcyBub24temVybwotICAgIHJldHVybiB0cnVlOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBzaXplID0gc2NyZWVuUmVjdChmcmFtZS5t
YWluRnJhbWUoKS52aWV3KCkpLnNpemUoKTsKKyAgICByZXR1cm4gY29tcGFyZUFzcGVjdFJhdGlv
VmFsdWUodmFsdWUsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgb3ApOwogfQogCi1zdGF0
aWMgYm9vbCBldmFsUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZXZhbHVhdGVSZXNvbHV0aW9uKENTU1Zh
bHVlKiB2YWx1ZSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAg
Ly8gRklYTUU6IFBvc3NpYmxlIGhhbmRsZSBvdGhlciBtZWRpYSB0eXBlcyB0aGFuICdzY3JlZW4n
IGFuZCAncHJpbnQnLgotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAwOworCiAgICAg
Ly8gVGhpcyBjaGVja3MgdGhlIGFjdHVhbCBtZWRpYSB0eXBlIGFwcGxpZWQgdG8gdGhlIGRvY3Vt
ZW50LCBhbmQgd2Uga25vdwogICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgZ290IGNhbGxlZCBpZiB0
aGlzIG1lZGlhIHR5cGUgbWF0Y2hlcyB0aGUgb25lIGRlZmluZWQKICAgICAvLyBpbiB0aGUgcXVl
cnkuIFRodXMsIGlmIGlmIHRoZSBkb2N1bWVudCdzIG1lZGlhIHR5cGUgaXMgInByaW50IiwgdGhl
CiAgICAgLy8gbWVkaWEgdHlwZSBvZiB0aGUgcXVlcnkgd2lsbCBlaXRoZXIgYmUgInByaW50IiBv
ciAiYWxsIi4KICAgICBTdHJpbmcgbWVkaWFUeXBlID0gdmlldy0+bWVkaWFUeXBlKCk7CiAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInNjcmVlbiIpKQot
ICAgICAgICBkZXZpY2VTY2FsZUZhY3RvciA9IGZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgICAgIGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpID8gZnJhbWUu
cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpIDogMTsKICAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtZWRpYVR5cGUsICJwcmludCIpKSB7CiAgICAgICAgIC8vIFRo
ZSByZXNvbHV0aW9uIG9mIGltYWdlcyB3aGlsZSBwcmludGluZyBzaG91bGQgbm90IGRlcGVuZCBv
biB0aGUgZHBpCiAgICAgICAgIC8vIG9mIHRoZSBzY3JlZW4uIFVudGlsIHdlIHN1cHBvcnQgcHJv
cGVyIHdheXMgb2YgcXVlcnlpbmcgdGhpcyBpbmZvCkBAIC0zNjIsMjIgKzM0NSwyMiBAQCBzdGF0
aWMgYm9vbCBldmFsUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiAhIWRl
dmljZVNjYWxlRmFjdG9yOwogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiByZXNvbHV0aW9uID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYXV0byYgcmVzb2x1dGlvbiA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgIHJldHVybiBjb21wYXJlVmFsdWUo
ZGV2aWNlU2NhbGVGYWN0b3IsIHJlc29sdXRpb24uaXNOdW1iZXIoKSA/IHJlc29sdXRpb24uZ2V0
RmxvYXRWYWx1ZSgpIDogcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSAqdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29s
IGRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
IHsKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5pc051bWJlcigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKKyAg
ICByZXR1cm4gKCF2YWx1ZSB8fCAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkpICYmIGV2YWx1YXRl
UmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x1dGlv
bk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMg
Ym9vbCByZXNvbHV0aW9uRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7
CiAjaWYgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgcmV0dXJuICghdmFsdWUg
fHwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSZXNvbHV0aW9uKCkpICYm
IGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5pc1Jlc29sdXRpb24oKSkpICYmIGV2YWx1YXRlUmVzb2x1dGlvbih2YWx1
ZSwgZnJhbWUsIG9wKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0oZnJhbWUpOwpAQCAtMzg2LDIyICszNjksMTcgQEAgc3RhdGljIGJvb2wgcmVzb2x1
dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnMKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBncmlkTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGdyaWRFdmFsdWF0ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVh
dHVyZVByZWZpeCBvcCkKIHsKLSAgICAvLyBpZiBvdXRwdXQgZGV2aWNlIGlzIGJpdG1hcCwgZ3Jp
ZDogMCA9PSB0cnVlCi0gICAgLy8gYXNzdW1lIHdlIGhhdmUgYml0bWFwIGRldmljZQotICAgIGZs
b2F0IG51bWJlcjsKLSAgICBpZiAodmFsdWUgJiYgbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikp
Ci0gICAgICAgIHJldHVybiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCAw
LCBvcCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUs
IG9wKTsKIH0KIAogc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGJv
b2wgc3RyaWN0LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgaW50JiByZXN1bHQpCiB7Ci0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICByZXN1bHQgPSBwcmltaXRpdmVWYWx1ZS5n
ZXRJbnRWYWx1ZSgpOwpAQCAtNDE2LDI3MSArMzk0LDIyNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRl
TGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgYm9vbCBzdHJpY3QsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVycwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCitzdGF0aWMgYm9vbCBkZXZpY2VIZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
RmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCkpOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBsb25nIGhlaWdodCA9IHNnLmhlaWdo
dCgpOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZh
bHVlKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSwgbGVuZ3RoLCBvcCk7Ci0gICAgfQogICAgIC8v
ICh7LG1pbi0sbWF4LX1kZXZpY2UtaGVpZ2h0KQogICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZlIGEg
ZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpbnQgbGVuZ3RoOworICAgIGF1dG8gaGVpZ2h0
ID0gc2NyZWVuUmVjdChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpLmhlaWdodCgpOworICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0
aCwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wg
ZGV2aWNlV2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNnID0gc2Ny
ZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwotICAgICAgICBpbnQg
bGVuZ3RoOwotICAgICAgICBsb25nIHdpZHRoID0gc2cud2lkdGgoKTsKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCks
IGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KHdpZHRoKSwgbGVuZ3RoLCBvcCk7Ci0gICAgfQogICAgIC8vICh7LG1pbi0sbWF4LX1kZXZpY2Ut
d2lkdGgpCiAgICAgLy8gYXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVy
bwotICAgIHJldHVybiB0cnVlOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGludCBsZW5ndGg7CisgICAgYXV0byB3aWR0aCA9IHNjcmVlblJlY3QoZnJhbWUubWFp
bkZyYW1lKCkudmlldygpKS53aWR0aCgpOworICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVl
LCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRhLCBsZW5n
dGgpICYmIGNvbXBhcmVWYWx1ZSh3aWR0aCwgbGVuZ3RoLCBvcCk7CiB9CiAKLXN0YXRpYyBib29s
IGhlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBoZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYg
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICBp
ZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0KCk7Ci0gICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgICAgIGhlaWdodCA9IGFkanVzdEZvckFic29sdXRlWm9vbShoZWlnaHQsICpyZW5kZXJW
aWV3KTsKLSAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgo
dmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRh
LCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0aCwgb3ApOwotICAgIH0KLQot
ICAgIHJldHVybiB2aWV3LT5sYXlvdXRIZWlnaHQoKSAhPSAwOworICAgIGludCBoZWlnaHQgPSB2
aWV3LT5sYXlvdXRIZWlnaHQoKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gaGVp
Z2h0OworICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuZG9jdW1lbnQoKS0+cmVuZGVy
VmlldygpKQorICAgICAgICBoZWlnaHQgPSBhZGp1c3RGb3JBYnNvbHV0ZVpvb20oaGVpZ2h0LCAq
cmVuZGVyVmlldyk7CisgICAgaW50IGxlbmd0aDsKKyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2
YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoaGVpZ2h0LCBsZW5ndGgsIG9wKTsKIH0KIAotc3RhdGlj
IGJvb2wgd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgd2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcg
PSBmcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICBpbnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOwotICAgICAgICBpZiAoUmVu
ZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCi0g
ICAgICAgICAgICB3aWR0aCA9IGFkanVzdEZvckFic29sdXRlWm9vbSh3aWR0aCwgKnJlbmRlclZp
ZXcpOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2
YWx1ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEs
IGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9wKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdmlldy0+bGF5b3V0V2lkdGgoKSAhPSAwOworICAgIGludCB3aWR0aCA9IHZpZXct
PmxheW91dFdpZHRoKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHdpZHRoOwor
ICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygp
KQorICAgICAgICB3aWR0aCA9IGFkanVzdEZvckFic29sdXRlWm9vbSh3aWR0aCwgKnJlbmRlclZp
ZXcpOworICAgIGludCBsZW5ndGg7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFm
cmFtZS5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkg
JiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9wKTsKIH0KIAotLy8gcmVzdCBvZiB0aGUg
ZnVuY3Rpb25zIGFyZSB0cmFtcG9saW5lcyB3aGljaCBzZXQgdGhlIHByZWZpeCBhY2NvcmRpbmcg
dG8gdGhlIG1lZGlhIGZlYXR1cmUgZXhwcmVzc2lvbiB1c2VkCi0KLXN0YXRpYyBib29sIG1pbl9j
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Db2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4g
Y29sb3JFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtYXhfY29sb3JNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
KiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4Q29sb3JFdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1
cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1h
eFByZWZpeCk7CisgICAgcmV0dXJuIGNvbG9yRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2NvbG9yX2luZGV4TWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
K3N0YXRpYyBib29sIG1pbkNvbG9ySW5kZXhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gY29sb3JfaW5kZXhNZWRpYUZlYXR1
cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0
dXJuIGNvbG9ySW5kZXhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5Q
cmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWF4Q29sb3JJbmRleEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewotICAgIHJldHVybiBjb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JJbmRl
eEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAK
LXN0YXRpYyBib29sIG1pbl9tb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbk1vbm9jaHJvbWVF
dmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAg
ICByZXR1cm4gbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gbW9ub2Nocm9tZUV2YWx1YXRlKHZhbHVl
LCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1h
eF9tb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heE1vbm9jaHJvbWVFdmFsdWF0ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gbW9ub2No
cm9tZU1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJl
Zml4KTsKKyAgICByZXR1cm4gbW9ub2Nocm9tZUV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQorc3RhdGljIGJvb2wgbWluQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gYXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAg
IHJldHVybiBhc3BlY3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgbWF4QXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZh
bCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBh
c3BlY3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZp
eCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
RXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBi
b29sIG1pbkRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7Cisg
ICAgcmV0dXJuIGRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9hc3BlY3Rf
cmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgbWF4RGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNl
X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZSh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBt
aW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkRldmljZVBpeGVsUmF0aW9F
dmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAg
ICByZXR1cm4gZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VQaXhlbFJhdGlv
RXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAot
c3RhdGljIGJvb2wgbWF4X2RldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZp
Y2VQaXhlbFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
dmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2
aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFBy
ZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluSGVp
Z2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
Ci0gICAgcmV0dXJuIGhlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gaGVpZ2h0RXZhbHVhdGUodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2hl
aWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhIZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gaGVpZ2h0TWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVy
biBoZWlnaHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluV2lkdGhFdmFs
dWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1pblByZWZpeCk7CisgICAgcmV0dXJuIHdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3dpZHRoTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0
YXRpYyBib29sIG1heFdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHdpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiB3aWR0aEV2YWx1
YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRp
YyBib29sIG1pbl9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkRldmljZUhlaWdodEV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAg
IHJldHVybiBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRh
dGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VIZWlnaHRFdmFsdWF0ZSh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9v
bCBtYXhfZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZpY2VIZWlnaHRFdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1
cm4gZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlSGVpZ2h0RXZhbHVhdGUodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWlu
X2RldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5EZXZpY2VXaWR0aEV2YWx1YXRlKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZp
Y2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1p
blByZWZpeCk7CisgICAgcmV0dXJuIGRldmljZVdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNp
b25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV93
aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZpY2VXaWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2Vfd2lkdGhN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7
CisgICAgcmV0dXJuIGRldmljZVdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX3Jlc29sdXRpb25NZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3Rh
dGljIGJvb2wgbWluUmVzb2x1dGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZh
bCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBy
ZXNvbHV0aW9uRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4
KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4UmVz
b2x1dGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiByZXNvbHV0aW9uRXZhbHVh
dGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGlj
IGJvb2wgYW5pbWF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
K3N0YXRpYyBib29sIGFuaW1hdGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQog
ewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJldHVy
biBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMSwgc3RhdGljX2Nh
c3Q8aW50PihudW1iZXIpLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5z
aXRpb25FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUp
IHsKLSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFs
dWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDEsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwg
b3ApOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb25lRXZhbHVhdGUodmFs
dWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgdHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSos
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5zZm9ybTJkRXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUm
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZs
b2F0IG51bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYm
IGNvbXBhcmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9uZUV2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAK
LXN0YXRpYyBib29sIHRyYW5zZm9ybV8zZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB0cmFuc2Zvcm0zZEV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGJvb2wgcmV0dXJuVmFsdWVJZk5vUGFyYW1l
dGVyOwotICAgIGludCBoYXZlM2RSZW5kZXJpbmc7Ci0KICNpZiBFTkFCTEUoM0RfVFJBTlNGT1JN
UykKLSAgICBib29sIHRocmVlREVuYWJsZWQgPSBmYWxzZTsKLSAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgdGhyZWVERW5hYmxlZCA9
IHZpZXctPmNvbXBvc2l0b3IoKS5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKTsKLQotICAgIHJldHVy
blZhbHVlSWZOb1BhcmFtZXRlciA9IHRocmVlREVuYWJsZWQ7Ci0gICAgaGF2ZTNkUmVuZGVyaW5n
ID0gdGhyZWVERW5hYmxlZCA/IDEgOiAwOworICAgIGF1dG8qIHZpZXcgPSBmcmFtZS5jb250ZW50
UmVuZGVyZXIoKTsKKyAgICByZXR1cm4gdmlldyAmJiB2aWV3LT5jb21wb3NpdG9yKCkuY2FuUmVu
ZGVyM0RUcmFuc2Zvcm1zKCkgPyBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApIDogemVyb0V2YWx1YXRl
KHZhbHVlLCBvcCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7Ci0gICAgcmV0dXJu
VmFsdWVJZk5vUGFyYW1ldGVyID0gZmFsc2U7Ci0gICAgaGF2ZTNkUmVuZGVyaW5nID0gMDsKKyAg
ICByZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CiAjZW5kaWYKLQotICAgIGlmICh2YWx1
ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2
YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoaGF2ZTNkUmVuZGVyaW5nLCBzdGF0aWNfY2Fz
dDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlSWZOb1Bh
cmFtZXRlcjsKIH0KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotc3RhdGljIGJv
b2wgdmlld19tb2RlTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKKworc3RhdGljIGJvb2wgdmlld01vZGVFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3ApOwogICAgIGlmICghdmFsdWUpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgaW50IHZpZXdNb2RlQ1NTS2V5d29yZElEID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwotICAgIGNv
bnN0IFBhZ2U6OlZpZXdNb2RlIHZpZXdNb2RlID0gZnJhbWUtPnBhZ2UoKS0+dmlld01vZGUoKTsK
LSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIHN3aXRjaCAodmlld01vZGUpIHsKKyAgICBh
dXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1
ZUlEKCk7CisKKyAgICBzd2l0Y2ggKGZyYW1lLnBhZ2UoKS0+dmlld01vZGUoKSkgewogICAgIGNh
c2UgUGFnZTo6Vmlld01vZGVXaW5kb3dlZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NL
ZXl3b3JkSUQgPT0gQ1NTVmFsdWVXaW5kb3dlZDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBrZXl3b3JkID09IENTU1ZhbHVlV2luZG93ZWQ7CiAgICAgY2FzZSBQYWdlOjpWaWV3TW9k
ZUZsb2F0aW5nOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NW
YWx1ZUZsb2F0aW5nOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0g
Q1NTVmFsdWVGbG9hdGluZzsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlRnVsbHNjcmVlbjoKLSAg
ICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVGdWxsc2NyZWVu
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVGdWxs
c2NyZWVuOwogICAgIGNhc2UgUGFnZTo6Vmlld01vZGVNYXhpbWl6ZWQ6Ci0gICAgICAgIHJlc3Vs
dCA9IHZpZXdNb2RlQ1NTS2V5d29yZElEID09IENTU1ZhbHVlTWF4aW1pemVkOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVNYXhpbWl6ZWQ7CiAgICAg
Y2FzZSBQYWdlOjpWaWV3TW9kZU1pbmltaXplZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVD
U1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVNaW5pbWl6ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZU1pbmltaXplZDsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoVklFV19N
T0RFX0NTU19NRURJQSkKIAotc3RhdGljIGJvb2wgdmlkZW9fcGxheWFibGVfaW5saW5lTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIHZpZGVvUGxheWFi
bGVJbmxpbmVFdmFsdWF0ZShDU1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZnJh
bWUtPnNldHRpbmdzKCkuYWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjaygpOworICAgIHJldHVybiBm
cmFtZS5zZXR0aW5ncygpLmFsbG93c0lubGluZU1lZGlhUGxheWJhY2soKTsKIH0KIAotc3RhdGlj
IGJvb2wgaG92ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgaG92ZXJFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpA
QCAtNjkwLDcwICs2MjQsNjUgQEAgc3RhdGljIGJvb2wgaG92ZXJNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGEKICNlbmRpZgogICAg
IH0KIAotICAgIGludCBob3ZlckNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLSAgICByZXR1cm4gaG92ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVOb25lOwor
ICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlTm9uZTsKICNlbHNlCi0gICAgcmV0dXJuIGhv
dmVyQ1NTS2V5d29yZElEID09IENTU1ZhbHVlSG92ZXI7CisgICAgcmV0dXJuIGtleXdvcmQgPT0g
Q1NTVmFsdWVIb3ZlcjsKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBhbnlfaG92ZXJNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggcHJlZml4KQorc3RhdGljIGJvb2wgYW55SG92ZXJFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IHByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gaG92ZXJNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhLCBmcmFtZSwgcHJlZml4KTsKKyAgICByZXR1cm4gaG92ZXJFdmFsdWF0ZSh2YWx1ZSwgY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgZnJhbWUsIHByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29s
IHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJv
b2wgcG9pbnRlckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
bnQgcG9pbnRlckNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKTsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICByZXR1cm4gcG9pbnRlckNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZUNvYXJzZTsKKyAgICBy
ZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUNvYXJzZTsKICNlbHNlCi0gICAgcmV0dXJuIHBvaW50
ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVGaW5lOworICAgIHJldHVybiBrZXl3b3JkID09IENT
U1ZhbHVlRmluZTsKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBhbnlfcG9pbnRlck1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBwcmVmaXgpCitzdGF0aWMgYm9vbCBhbnlQb2ludGVyRXZhbHVhdGUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBwcmVmaXgpCiB7Ci0gICAg
cmV0dXJuIHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLCBmcmFtZSwgcHJlZml4KTsKKyAgICByZXR1cm4gcG9pbnRlckV2YWx1YXRlKHZhbHVl
LCBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBmcmFtZSwgcHJlZml4KTsKIH0KIAotc3RhdGlj
IHZvaWQgY3JlYXRlRnVuY3Rpb25NYXAoKQorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBv
ZiBjYWxsaW5nIGFkZCBkaXJlY3RseSB0byBhdm9pZCBpbmxpbmluZy4KK3N0YXRpYyB2b2lkIGFk
ZChNZWRpYVF1ZXJ5RnVuY3Rpb25NYXAmIG1hcCwgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBNZWRp
YVF1ZXJ5RnVuY3Rpb24gdmFsdWUpCiB7Ci0gICAgLy8gQ3JlYXRlIHRoZSB0YWJsZS4KLSAgICBn
RnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7Ci0jZGVmaW5lIEFERF9UT19GVU5DVElPTk1B
UChuYW1lLCBzdHIpICBcCi0gICAgZ0Z1bmN0aW9uTWFwLT5zZXQobmFtZSMjTWVkaWFGZWF0dXJl
LmltcGwoKSwgbmFtZSMjTWVkaWFGZWF0dXJlRXZhbCk7Ci0gICAgQ1NTX01FRElBUVVFUllfTkFN
RVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKEFERF9UT19GVU5DVElPTk1BUCk7Ci0jdW5kZWYgQURE
X1RPX0ZVTkNUSU9OTUFQCisgICAgbWFwLmFkZChrZXksIHZhbHVlKTsKIH0KIAotYm9vbCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIpIGNvbnN0Citi
b29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlFeHByZXNz
aW9uJiBleHByZXNzaW9uKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+
dmlldygpIHx8ICFtX3N0eWxlKQotICAgICAgICByZXR1cm4gbV9leHBSZXN1bHQ7CisgICAgICAg
IHJldHVybiBtX2ZhbGxiYWNrUmVzdWx0OwogCi0gICAgaWYgKCFleHByLT5pc1ZhbGlkKCkpCisg
ICAgaWYgKCFleHByZXNzaW9uLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCFnRnVuY3Rpb25NYXApCi0gICAgICAgIGNyZWF0ZUZ1bmN0aW9uTWFwKCk7Ci0KLSAg
ICAvLyBjYWxsIHRoZSBtZWRpYSBmZWF0dXJlIGV2YWx1YXRpb24gZnVuY3Rpb24uIEFzc3VtZSBu
byBwcmVmaXgKLSAgICAvLyBhbmQgbGV0IHRyYW1wb2xpbmUgZnVuY3Rpb25zIG92ZXJyaWRlIHRo
ZSBwcmVmaXggaWYgcHJlZml4IGlzCi0gICAgLy8gdXNlZAotICAgIEV2YWxGdW5jIGZ1bmMgPSBn
RnVuY3Rpb25NYXAtPmdldChleHByLT5tZWRpYUZlYXR1cmUoKS5pbXBsKCkpOwotICAgIGlmIChm
dW5jKSB7Ci0gICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEo
bV9zdHlsZSwKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpLT5yZW5kZXJTdHlsZSgpLAotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyVmlldygpLCAxLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmdW5jKGV4cHItPnZhbHVlKCks
IGNvbnZlcnNpb25EYXRhLCBtX2ZyYW1lLCBOb1ByZWZpeCk7Ci0gICAgfQorICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZWRpYVF1ZXJ5RnVuY3Rpb25NYXA+IG1hcCA9IFtdIHsKKyAgICAgICAg
TWVkaWFRdWVyeUZ1bmN0aW9uTWFwIG1hcDsKKyNkZWZpbmUgQUREX1RPX0ZVTkNUSU9OTUFQKG5h
bWUsIHN0cikgYWRkKG1hcCwgTWVkaWFGZWF0dXJlTmFtZXM6Om5hbWUuaW1wbCgpLCBuYW1lIyNF
dmFsdWF0ZSk7CisgICAgICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVB
VFVSRShBRERfVE9fRlVOQ1RJT05NQVApOworI3VuZGVmIEFERF9UT19GVU5DVElPTk1BUAorICAg
ICAgICByZXR1cm4gbWFwOworICAgIH0oKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
IGZ1bmN0aW9uID0gbWFwLmdldCgpLmdldChleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmltcGwo
KSk7CisgICAgaWYgKCFmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gKm1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKGV4cHJlc3Npb24udmFsdWUoKSwgeyBtX3N0eWxlLCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQoKS0+cmVuZGVyU3R5bGUoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLCBmYWxzZSB9LCAq
bV9mcmFtZSwgTm9QcmVmaXgpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKaW5kZXggMDdkMTE0MTAyMjBhMWJlM2MyZDRkZTNiMDdk
NTcwMDNhZTYwNGE2Zi4uNjJjNWFlOTI5YjZkNjlhMjNlZGU2MjkxMmE0MTIwODg3NWJlMmIxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCkBAIC0yNSw4MyArMjUs
NTYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5RXZhbHVhdG9y
X2gKLSNkZWZpbmUgTWVkaWFRdWVyeUV2YWx1YXRvcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIk1lZGlhUXVlcnlFeHAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwotY2xh
c3MgTWVkaWFRdWVyeUV4cDsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBSZW5kZXJTdHls
ZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKLWNsYXNzIE1lZGlhUXVlcnlSZXN1bHQgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUXVlcnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlF
eHAmIGV4cHIsIGJvb2wgcmVzdWx0KQotICAgICAgICA6IG1fZXhwcmVzc2lvbihleHByKQotICAg
ICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWVkaWFRdWVyeUV4
cCBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3Jlc3VsdDsKK3N0cnVjdCBNZWRpYVF1ZXJ5UmVz
dWx0IHsKKyAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgIGJvb2wgcmVz
dWx0OwogfTsKIAotLyoqCi0gKiBDbGFzcyB0aGF0IGV2YWx1YXRlcyBjc3MgbWVkaWEgcXVlcmll
cyBhcyBkZWZpbmVkIGluCi0gKiBDU1MzIE1vZHVsZSAiTWVkaWEgUXVlcmllcyIgKGh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLykKLSAqIFNwZWNpYWwgY29uc3RydWN0b3Jz
IGFyZSBuZWVkZWQsIGlmIHNpbXBsZSBtZWRpYSBxdWVyaWVzIGFyZSB0byBiZQotICogZXZhbHVh
dGVkIHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBtZWRpdW0gZmVhdHVyZXMuIFRoaXMgY2FuIGhh
cHBlbgotICogZm9yIGV4YW1wbGUgd2hlbiBwYXJzaW5nIFVBIHN0eWxlc2hlZXRzLCBpZiBldmFs
dWF0aW9uIGlzIGRvbmUKLSAqIHJpZ2h0IGFmdGVyIHBhcnNpbmcuCi0gKgotICogdGhlIGJvb2xl
YW4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gYXBwcm94aW1hdGUgcmVzdWx0cyBvZiBldmFsdWF0aW9u
LCBpZgotICogdGhlIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4gVGhpcyBj
YW4gYmUgdXNlZCB0byBwcnVuZSB0aGUgbG9hZGluZwotICogb2Ygc3R5bGVzaGVldHMgdG8gb25s
eSB0aG9zZSB3aGljaCBhcmUgcHJvYmFibGUgdG8gbWF0Y2guCi0gKi8KKy8vIFNvbWUgb2YgdGhl
IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIGRldmljZSBjaGFyYWN0
ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4KKy8vIFRoZXNlICBjYW4gYmUgdXNlZCB0byBwcnVuZSB0
aGUgbG9hZGluZyBvZiBzdHlsZXNoZWV0cyB0byBvbmx5IHRob3NlIHdoaWNoIGFyZSBub3QgYWxy
ZWFkeSBrbm93biB0byBub3QgbWF0Y2guCisKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3Igewot
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5RXZhbHVhdG9yKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNo
IGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0gICAgICogIEV2YWx1YXRvciBy
ZXR1cm5zIHRydWUgZm9yICJhbGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJl
UmVzdWx0Ci0gICAgICogIGZvciBhbnkgbWVkaWEgZmVhdHVyZXMKLSAgICAgKi8KKyAgICAvLyBD
cmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmll
cy4KKyAgICAvLyBFdmFsdWF0b3IgcmV0dXJucyB0cnVlIGZvciAiYWxsIiwgYW5kIHJldHVybnMg
dmFsdWUgb2YgXG1lZGlhRmVhdHVyZVJlc3VsdCBmb3IgYW55IG1lZGlhIGZlYXR1cmVzLgogICAg
IGV4cGxpY2l0IE1lZGlhUXVlcnlFdmFsdWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBm
YWxzZSk7CiAKLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkg
c2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAgICAgKiAgRXZhbHVhdG9yICByZXR1cm5zIHRydWUgZm9y
IGFjY2VwdGVkTWVkaWFUeXBlIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYWZlYXR1cmVSZXN1
bHQKLSAgICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwotICAgICAqLworICAgIC8vIENyZWF0
ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzLgor
ICAgIC8vIEV2YWx1YXRvciByZXR1cm5zIHRydWUgZm9yIGFjY2VwdGVkTWVkaWFUeXBlIGFuZCBy
ZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQgZm9yIGFueSBtZWRpYSBmZWF0dXJl
cy4KICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5
cGUsIGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0ID0gZmFsc2UpOwogCi0gICAgLyoqIENyZWF0ZXMg
ZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKLSAgICAgKi8KLSAg
ICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZy
YW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKLQotICAgIH5NZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7
CisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVl
cmllcy4KKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRp
YVR5cGUsIERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIGJvb2wgbWVkaWFU
eXBlTWF0Y2goY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVUb01hdGNoKSBjb25zdDsKICAgICBib29s
IG1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoY29uc3QgY2hhciogbWVkaWFUeXBlVG9NYXRjaCkgY29u
c3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVyaWVzICovCi0gICAg
Ym9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlTZXQqLCBTdHlsZVJlc29sdmVyKiA9IDApIGNvbnN0
OworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcy4KKyAgICBib29sIGV2
YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmLCBTdHlsZVJlc29sdmVyKiA9IG51bGxwdHIpIGNv
bnN0OworCisgICAgLy8gRXZhbHVhdGVzIG1lZGlhIHF1ZXJ5IHN1YmV4cHJlc3Npb24sIGllICJh
bmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFydC4KKyAgICBib29sIGV2YWx1YXRlKGNvbnN0
IE1lZGlhUXVlcnlFeHByZXNzaW9uJikgY29uc3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIG1lZGlh
IHF1ZXJ5IHN1YmV4cHJlc3Npb24sIGllICJhbmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFy
dCAqLwotICAgIGJvb2wgZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwKikgY29uc3Q7Ci0gICAgCi0g
ICAgLyogRXZhbHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVyaWVzIGFuZCBmaWxscyBpbiBhIHZl
Y3RvciB3aXRoIGFueSB2aWV3cG9ydC1kZXBlbmRlbnQgcmVzdWx0cyBmb3VuZC4gKi8KLSAgICBi
b29sIGV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhjb25zdCBNZWRpYVF1ZXJ5
U2V0KiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4mKTsKKyAgICAv
LyBFdmFsdWF0ZXMgYSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMgYW5kIGZpbGxzIGluIGEgdmVjdG9y
IHdpdGggYW55IHZpZXdwb3J0LWRlcGVuZGVudCByZXN1bHRzIGZvdW5kLgorICAgIGJvb2wgZXZh
bHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYsIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiYpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhVHlwZTsKICAgICBGcmFtZSogbV9m
cmFtZSB7IG51bGxwdHIgfTsgLy8gbm90IG93bmVkCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1f
c3R5bGUgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX2V4cFJlc3VsdDsKKyAgICBib29sIG1fZmFs
bGJhY2tSZXN1bHQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UKLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCmluZGV4IGU4ZGE3ODA0NTk2OTVhODFhNzI1ZWFm
MTJiNTU2ZGMwMDY1ZWY2NTMuLjRiNjBiNjAwZDg3NDNhZTIzYzc4ODJlM2FmNWE3NWRmZDA3OWVk
NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKQEAgLTMyLDIwMSArMzIsMTg2
IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhDU1NWYWx1ZUlEKGNvbnN0
IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUp
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcihjb25zdCBB
dG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQog
ewotICAgIGlmICghdmFsdWUtPmlkKQorICAgIGlmICghdmFsdWUuaWQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
Om9yaWVudGF0aW9uTWVkaWFGZWF0dXJlCisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb24KICNpZiBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJ
QSkKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWV3X21v
ZGVNZWRpYUZlYXR1cmUKLSNlbmRpZiAvLyBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJQSkKLSAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcl9nYW11dE1l
ZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmFueV9ob3Zlck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmFueV9wb2ludGVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aG92ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjppbnZlcnRlZF9jb2xvcnNNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpwb2lu
dGVyTWVkaWFGZWF0dXJlOworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OnZpZXdNb2RlCisjZW5kaWYKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpjb2xvckdhbXV0CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6YW55SG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjphbnlQb2ludGVyCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6aG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjppbnZlcnRlZENvbG9ycworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnBvaW50ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJl
V2l0aFZhbGlkUG9zaXRpdmVMZW5naHRPck51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlh
RmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29s
IGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1iZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIShDU1NQcmltaXRpdmVWYWx1ZTo6aXNMZW5ndGgodmFsdWUtPnVuaXQpIHx8IHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB8fCB2YWx1ZS0+ZlZhbHVl
IDwgMCkKKyAgICBpZiAoIShDU1NQcmltaXRpdmVWYWx1ZTo6aXNMZW5ndGgodmFsdWUudW5pdCkg
fHwgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgfHwgdmFsdWUu
ZlZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2hlaWdodE1lZGlhRmVhdHVy
ZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9oZWln
aHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjp3aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9oZWlnaHRNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhf
ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2Rl
dmljZV93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4SGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluSGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbldpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlSGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlSGVpZ2h0CisgICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluRGV2aWNlSGVpZ2h0CisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlV2lkdGgKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhEZXZpY2VXaWR0aAor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkRldmljZVdp
ZHRoOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhWYWxpZERlbnNpdHkoY29u
c3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhEZW5zaXR5KGNvbnN0IEF0
b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNSZXNvbHV0aW9uKHZhbHVlLT51bml0KSB8
fCB2YWx1ZS0+ZlZhbHVlIDw9IDApCisgICAgaWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNSZXNv
bHV0aW9uKHZhbHVlLnVuaXQpIHx8IHZhbHVlLmZWYWx1ZSA8PSAwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpy
ZXNvbHV0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZTsK
KyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4UmVzb2x1
dGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pblJl
c29sdXRpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aFBvc2l0aXZlSW50
ZWdlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0
aXZlSW50ZWdlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmICghdmFsdWUtPmlzSW50IHx8IHZhbHVlLT5mVmFs
dWUgPCAwKQorICAgIGlmICghdmFsdWUuaXNJbnQgfHwgdmFsdWUuZlZhbHVlIDwgMCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6Y29sb3JNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjptYXhfY29sb3JNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fY29sb3JNZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcl9pbmRleE1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1h
eF9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9tb25vY2hyb21lTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X21v
bm9jaHJvbWVNZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6Y29sb3IKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhDb2xvcgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1pbkNvbG9yCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6Y29sb3JJbmRleAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1heENvbG9ySW5kZXgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptaW5Db2xvckluZGV4CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWluTW9ub2Nocm9tZQorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om1heE1vbm9jaHJvbWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBmZWF0dXJlV2l0aFBvc2l0aXZlTnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNG
ZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVOdW1iZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRp
YUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgdmFsdWUtPmZWYWx1ZSA8
IDApCisgICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIg
fHwgdmFsdWUuZlZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzJkTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNm
b3JtXzNkTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6dHJhbnNpdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFuaW1hdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1h
eF9kZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJl
OworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zZm9y
bTJkCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNm
b3JtM2QKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2l0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5p
bWF0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2
aWNlUGl4ZWxSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heERldmljZVBpeGVsUmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptaW5EZXZpY2VQaXhlbFJhdGlvOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgZmVhdHVyZVdpdGhaZXJvT3JPbmUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUs
IGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1
cmVWYWxpZFdpdGhaZXJvT3JPbmUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNv
bnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlLT5pc0ludCB8fCAh
KHZhbHVlLT5mVmFsdWUgPT0gMSB8fCAhdmFsdWUtPmZWYWx1ZSkpCisgICAgaWYgKCF2YWx1ZS5p
c0ludCB8fCAhKHZhbHVlLmZWYWx1ZSA9PSAxIHx8ICF2YWx1ZS5mVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpncmlkTWVkaWFGZWF0dXJlOworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmdyaWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aEFz
cGVjdFJhdGlvKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlKQorc3RhdGljIGlubGlu
ZSBib29sIGlzQXNwZWN0UmF0aW9GZWF0dXJlKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlKQogewotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fYXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4
X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2RldmljZV9hc3Bl
Y3RfcmF0aW9NZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpkZXZpY2VBc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4QXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5EZXZpY2VBc3BlY3RSYXRpbworICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heERldmljZUFzcGVj
dFJhdGlvOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhvdXRWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1
cmVWYWxpZFdpdGhvdXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkKIHsK
ICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IGFyZSBwcmVmaXhlZCBieSBtaW4vbWF4IGNhbm5v
dCBiZSB1c2VkIHdpdGhvdXQgYSB2YWx1ZS4KLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjphbnlfaG92ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlfcG9pbnRlck1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1vbm9jaHJvbWVNZWRp
YUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpj
b2xvck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmNvbG9yX2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6Z3JpZE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmRldmljZV93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2Fz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmhvdmVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzNkTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNp
dGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmFuaW1hdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6OmludmVydGVkX2NvbG9yc01lZGlhRmVhdHVyZQorICAgIHJldHVy
biBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueUhvdmVyCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55UG9pbnRlcgorICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1vbm9jaHJvbWUKKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcgorICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9ySW5kZXgKKyAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpncmlkCisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VXaWR0aAorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0aW9uCisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VBc3BlY3RSYXRpbworICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhvdmVyCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtMmQKKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm0zZAorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zaXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbmltYXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjppbnZlcnRlZENvbG9ycwog
I2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZQotI2VuZGlmIC8vIEVO
QUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnBvaW50ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6dmlkZW9fcGxheWFibGVfaW5saW5lTWVkaWFGZWF0dXJlOworICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZXdfbW9kZQorI2VuZGlmCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlcgorICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZVBpeGVsUmF0aW8KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9uCisgICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlkZW9QbGF5YWJsZUlu
bGluZTsKIH0KIAotTWVkaWFRdWVyeUV4cDo6TWVkaWFRdWVyeUV4cChjb25zdCBBdG9taWNTdHJp
bmcmIG1lZGlhRmVhdHVyZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTnVtYmVyV2l0aFVuaXQoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gaXNGZWF0dXJlVmFsaWRXaXRoRGVuc2l0eShtZWRpYUZlYXR1cmUsIHZhbHVlKSB8
fCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZUxlbmd0aE9yTnVtYmVyKG1lZGlhRmVhdHVy
ZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTnVt
YmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlSW50
ZWdlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2
ZU51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhaZXJvT3JP
bmUobWVkaWFGZWF0dXJlLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NsYXNo
KENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQ
YXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUuaVZhbHVlID09ICcvJzsKK30KKworc3RhdGlj
IGlubGluZSBib29sIGlzUG9zaXRpdmVJbnRlZ2VyVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQoreworICAgIHJldHVybiB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSICYmIHZhbHVlLmZWYWx1ZSA+IDAgJiYgdmFsdWUuaXNJbnQ7Cit9CisKK01lZGlhUXVlcnlF
eHByZXNzaW9uOjpNZWRpYVF1ZXJ5RXhwcmVzc2lvbihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlh
RmVhdHVyZSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCiAgICAgOiBtX21lZGlhRmVh
dHVyZShtZWRpYUZlYXR1cmUpCiB7Ci0gICAgLy8gSW5pdGlhbGl6ZSBtZWRpYSBxdWVyeSBleHBy
ZXNzaW9uIHRoYXQgbXVzdCBoYXZlIDEgb3IgbW9yZSB2YWx1ZXMuCi0gICAgaWYgKHZhbHVlTGlz
dCkgewotICAgICAgICBpZiAodmFsdWVMaXN0LT5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAg
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICAgICAg
ICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgdXNlIENTU1ZhbHVlSURzLgotICAgICAgICAgICAg
aWYgKGZlYXR1cmVXaXRoQ1NTVmFsdWVJRChtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFs
dWUtPmlkKTsKLQotICAgICAgICAgICAgLy8gTWVkaWEgZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUg
bm9uLW5lZ2F0aXZlIDxkZW5zaXR5PiwgaWUuIGRwcHgsIGRwaSBvciBkcGNtLgotICAgICAgICAg
ICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhWYWxpZERlbnNpdHkobWVkaWFGZWF0dXJlLCB2YWx1ZSkp
Ci0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFs
dWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsK
LQotICAgICAgICAgICAgLy8gTWVkaWEgZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0
aXZlIDxsZW5naHQ+IG9yIG51bWJlciB2YWx1ZS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1
cmVXaXRoVmFsaWRQb3NpdGl2ZUxlbmdodE9yTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKQot
ICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
LT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7Ci0K
LSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgbXVzdCBoYXZlIG5vbi1uZWdhdGl2
ZSBpbnRlZ2VyIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhQb3NpdGl2
ZUludGVnZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9
IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11
c3QgaGF2ZSBub24tbmVnYXRpdmUgbnVtYmVyIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBpZiAo
ZmVhdHVyZVdpdGhQb3NpdGl2ZU51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAg
ICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVl
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlh
IGZlYXR1cmVzIHRoYXQgbXVzdCBoYXZlICgwfDEpIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBp
ZiAoZmVhdHVyZVdpdGhaZXJvT3JPbmUobWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAg
ICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotCi0gICAgICAgICAgICBtX2lzVmFsaWQg
PSBtX3ZhbHVlOwotICAgICAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09IDMgJiYg
ZmVhdHVyZVdpdGhBc3BlY3RSYXRpbyhtZWRpYUZlYXR1cmUpKSB7Ci0gICAgICAgICAgICAvLyBD
cmVhdGUgbGlzdCBvZiB2YWx1ZXMuCi0gICAgICAgICAgICAvLyBDdXJyZW50bHkgYWNjZXB0cyBv
bmx5IDxpbnRlZ2VyPi88aW50ZWdlcj4uCi0gICAgICAgICAgICAvLyBBcHBsaWNhYmxlIHRvIGRl
dmljZS1hc3BlY3QtcmF0aW8gYW5kIGFzcGVjLXJhdGlvLgotICAgICAgICAgICAgYm9vbCBpc1Zh
bGlkID0gdHJ1ZTsKLSAgICAgICAgICAgIGZsb2F0IG51bWVyYXRvclZhbHVlID0gMDsKLSAgICAg
ICAgICAgIGZsb2F0IGRlbm9taW5hdG9yVmFsdWUgPSAwOwotCi0gICAgICAgICAgICAvLyBUaGUg
YXNwZWN0LXJhdGlvIG11c3QgYmUgPGludGVnZXI+ICh3aGl0ZXNwYWNlKT8gLyAod2hpdGVzcGFj
ZSk/IDxpbnRlZ2VyPi4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyAr
K2ksIHZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1NTUGFyc2Vy
VmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGkgIT0gMSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAm
JiB2YWx1ZS0+ZlZhbHVlID4gMCAmJiB2YWx1ZS0+aXNJbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpKQotICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJhdG9yVmFsdWUgPSB2YWx1
ZS0+ZlZhbHVlOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICBkZW5vbWluYXRvclZhbHVlID0gdmFsdWUtPmZWYWx1ZTsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKGkgPT0gMSAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0
b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLycpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGlzVmFsaWQpCi0gICAgICAgICAgICAgICAg
bV92YWx1ZSA9IENTU0FzcGVjdFJhdGlvVmFsdWU6OmNyZWF0ZShudW1lcmF0b3JWYWx1ZSwgZGVu
b21pbmF0b3JWYWx1ZSk7Ci0KLSAgICAgICAgICAgIG1faXNWYWxpZCA9IG1fdmFsdWU7CisgICAg
aWYgKCF2YWx1ZUxpc3QpIHsKKyAgICAgICAgaWYgKGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVl
KG1lZGlhRmVhdHVyZSkpCisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgIH0gZWxz
ZSBpZiAodmFsdWVMaXN0LT5zaXplKCkgPT0gMSkgeworICAgICAgICBhdXRvJiB2YWx1ZSA9ICp2
YWx1ZUxpc3QtPnZhbHVlQXQoMCk7CisgICAgICAgIGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhJZGVu
dGlmaWVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUuaWQpOworICAgICAgICAgICAg
bV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhO
dW1iZXJXaXRoVW5pdChtZWRpYUZlYXR1cmUsIHZhbHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhO
b25OZWdhdGl2ZUxlbmd0aE9yTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKSB7CisgICAgICAg
ICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mVmFsdWUsIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS51bml0KTsKKyAgICAgICAgICAgIG1f
aXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaXNGZWF0dXJlVmFsaWRXaXRoTnVt
YmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHdl
IG1lcmdlIHRoaXMgd2l0aCB0aGUgY2FzZSBhYm92ZT8KKyAgICAgICAgICAgIG1fdmFsdWUgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19OVU1CRVIpOworICAgICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSBpZiAodmFsdWVMaXN0LT5zaXplKCkgPT0gMyAmJiBpc0FzcGVjdFJhdGlvRmVh
dHVyZShtZWRpYUZlYXR1cmUpKSB7CisgICAgICAgIGF1dG8mIG51bWVyYXRvciA9ICp2YWx1ZUxp
c3QtPnZhbHVlQXQoMCk7CisgICAgICAgIGF1dG8mIHNsYXNoID0gKnZhbHVlTGlzdC0+dmFsdWVB
dCgxKTsKKyAgICAgICAgYXV0byYgZGVub21pbmF0b3IgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDIp
OworICAgICAgICBpZiAoaXNQb3NpdGl2ZUludGVnZXJWYWx1ZShudW1lcmF0b3IpICYmIGlzU2xh
c2goc2xhc2gpICYmIGlzUG9zaXRpdmVJbnRlZ2VyVmFsdWUoZGVub21pbmF0b3IpKSB7CisgICAg
ICAgICAgICBtX3ZhbHVlID0gQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG51bWVyYXRvci5m
VmFsdWUsIGRlbm9taW5hdG9yLmZWYWx1ZSk7CisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVl
OwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChmZWF0dXJlV2l0aG91dFZhbHVlKG1lZGlhRmVh
dHVyZSkpCi0gICAgICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgfQogfQogCi1TdHJpbmcgTWVk
aWFRdWVyeUV4cDo6c2VyaWFsaXplKCkgY29uc3QKK1N0cmluZyBNZWRpYVF1ZXJ5RXhwcmVzc2lv
bjo6c2VyaWFsaXplKCkgY29uc3QKIHsKICAgICBpZiAoIW1fc2VyaWFsaXphdGlvbkNhY2hlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gbV9zZXJpYWxpemF0aW9uQ2FjaGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlFeHAuaAppbmRleCA3YzM4Mzk3NTU5NWZkYTgxOGYxZDZkNTA5YzM2MjJhMjAw
M2QyMzI0Li4yYjRlNzFjYzgwYWM0ODllNGE4NTU0OTBkMzE0NzAzMzk0YmNlYzZiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKQEAgLTI1LDMyICsyNSwyOSBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi0jaWZuZGVmIE1lZGlhUXVlcnlFeHBfaAotI2RlZmluZSBNZWRpYVF1ZXJ5RXhw
X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKLSNpbmNsdWRlICJNZWRp
YUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NQYXJzZXJW
YWx1ZUxpc3Q7CiAKLWNsYXNzIE1lZGlhUXVlcnlFeHAgeworLy8gRklYTUU6IFJlbmFtZSB0aGUg
ZmlsZSB0byBtYXRjaCB0aGlzIGNsYXNzJ3MgbmFtZS4KK2NsYXNzIE1lZGlhUXVlcnlFeHByZXNz
aW9uIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlID0gZW1wdHlB
dG9tLCBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlcyA9IG51bGxwdHIpOworICAgIGV4cGxpY2l0
IE1lZGlhUXVlcnlFeHByZXNzaW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlID0g
ZW1wdHlBdG9tLCBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlcyA9IG51bGxwdHIpOwogCiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUoKSBjb25zdDsKICAgICBDU1NWYWx1ZSog
dmFsdWUoKSBjb25zdDsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaXNW
aWV3cG9ydERlcGVuZGVudCgpIGNvbnN0OwogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNvbnN0
OwogCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnlFeHAmKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBBdG9taWNTdHJpbmcgbV9tZWRpYUZlYXR1cmU7CkBAIC01OSw0MiArNTYs
MjUgQEAgcHJpdmF0ZToKICAgICBtdXRhYmxlIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNoZTsK
IH07CiAKLWlubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhUXVlcnlFeHA6Om1lZGlhRmVh
dHVyZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVF1ZXJ5RXhwcmVz
c2lvbjo6bWVkaWFGZWF0dXJlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUZlYXR1cmU7
CiB9CiAKLWlubGluZSBDU1NWYWx1ZSogTWVkaWFRdWVyeUV4cDo6dmFsdWUoKSBjb25zdAoraW5s
aW5lIENTU1ZhbHVlKiBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6dmFsdWUoKSBjb25zdAogewogICAg
IHJldHVybiBtX3ZhbHVlLmdldCgpOwogfQogCi1pbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwOjpv
cGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnlFeHAmIG90aGVyKSBjb25zdAoraW5saW5lIGJvb2wg
TWVkaWFRdWVyeUV4cHJlc3Npb246Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Np
b24mIG90aGVyKSBjb25zdAogewotICAgIHJldHVybiAob3RoZXIubV9tZWRpYUZlYXR1cmUgPT0g
bV9tZWRpYUZlYXR1cmUpCi0gICAgICAgICYmICgoIW90aGVyLm1fdmFsdWUgJiYgIW1fdmFsdWUp
Ci0gICAgICAgICAgICB8fCAob3RoZXIubV92YWx1ZSAmJiBtX3ZhbHVlICYmIG90aGVyLm1fdmFs
dWUtPmVxdWFscygqbV92YWx1ZSkpKTsKKyAgICByZXR1cm4gb3RoZXIubV9tZWRpYUZlYXR1cmUg
PT0gbV9tZWRpYUZlYXR1cmUKKyAgICAgICAgJiYgKCghbV92YWx1ZSAmJiAhb3RoZXIubV92YWx1
ZSkgfHwgKG1fdmFsdWUgJiYgb3RoZXIubV92YWx1ZSAmJiAqbV92YWx1ZSA9PSAqb3RoZXIubV92
YWx1ZSkpOwogfQogCi1pbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwOjppc1ZhbGlkKCkgY29uc3QK
K2lubGluZSBib29sIE1lZGlhUXVlcnlFeHByZXNzaW9uOjppc1ZhbGlkKCkgY29uc3QKIHsKICAg
ICByZXR1cm4gbV9pc1ZhbGlkOwogfQogCi1pbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwOjppc1Zp
ZXdwb3J0RGVwZW5kZW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9tZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAg
fHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlhRmVh
dHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWlu
X2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWF4X3dpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAg
IHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbk1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjptaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlOwotfQotCiB9IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUxpc3QuY3BwCmluZGV4IDdiNGZkMDJkZDU0Yjc0ZDQwMTcyZTMwNGIyMGNkZGFj
NzliMGJlN2UuLjQwMTBjMjljN2E3ZDkzYWYyNGU0YTU2MmMxNjVlOTg2YmEzMTVkZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmNwcApAQCAtMjcsMTggKzI3LDE4IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmPE1lZGlhUXVlcnlMaXN0PiBNZWRpYVF1ZXJ5TGlzdDo6
Y3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+IHZlY3RvciwgUGFzc1JlZlB0cjxN
ZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgYm9vbCBtYXRjaGVzKQoraW5saW5lIE1lZGlhUXVlcnlMaXN0
OjpNZWRpYVF1ZXJ5TGlzdChNZWRpYVF1ZXJ5TWF0Y2hlciYgbWF0Y2hlciwgUmVmPE1lZGlhUXVl
cnlTZXQ+JiYgbWVkaWEsIGJvb2wgbWF0Y2hlcykKKyAgICA6IG1fbWF0Y2hlcihtYXRjaGVyKQor
ICAgICwgbV9tZWRpYShXVEZNb3ZlKG1lZGlhKSkKKyAgICAsIG1fZXZhbHVhdGlvblJvdW5kKG1f
bWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCkpCisgICAgLCBtX2NoYW5nZVJvdW5kKG1fZXZhbHVh
dGlvblJvdW5kIC0gMSkgLy8gQW55IHZhbHVlIHRoYXQgaXMgbm90IHRoZSBzYW1lIGFzIG1fZXZh
bHVhdGlvblJvdW5kIHdvdWxkIGRvLgorICAgICwgbV9tYXRjaGVzKG1hdGNoZXMpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFRdWVyeUxpc3QodmVjdG9yLCBtZWRpYSwgbWF0Y2hl
cykpOwogfQogCi1NZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3QoUGFzc1JlZlB0cjxNZWRp
YVF1ZXJ5TWF0Y2hlcj4gdmVjdG9yLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBi
b29sIG1hdGNoZXMpCi0gICAgOiBtX21hdGNoZXIodmVjdG9yKQotICAgICwgbV9tZWRpYShtZWRp
YSkKLSAgICAsIG1fZXZhbHVhdGlvblJvdW5kKG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCkp
Ci0gICAgLCBtX2NoYW5nZVJvdW5kKG1fZXZhbHVhdGlvblJvdW5kIC0gMSkgLy8gbV9ldmFsdWF0
aW9uUm91bmQgYW5kIG1fY2hhbmdlUm91bmQgaW5pdGlhbCB2YWx1ZXMgbXVzdCBiZSBkaWZmZXJl
bnQuCi0gICAgLCBtX21hdGNoZXMobWF0Y2hlcykKK1JlZjxNZWRpYVF1ZXJ5TGlzdD4gTWVkaWFR
dWVyeUxpc3Q6OmNyZWF0ZShNZWRpYVF1ZXJ5TWF0Y2hlciYgbWF0Y2hlciwgUmVmPE1lZGlhUXVl
cnlTZXQ+JiYgbWVkaWEsIGJvb2wgbWF0Y2hlcykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBNZWRpYVF1ZXJ5TGlzdChtYXRjaGVyLCBXVEZNb3ZlKG1lZGlhKSwgbWF0Y2hlcykpOwogfQog
CiBNZWRpYVF1ZXJ5TGlzdDo6fk1lZGlhUXVlcnlMaXN0KCkKQEAgLTUwLDI2ICs1MCwyNiBAQCBT
dHJpbmcgTWVkaWFRdWVyeUxpc3Q6Om1lZGlhKCkgY29uc3QKICAgICByZXR1cm4gbV9tZWRpYS0+
bWVkaWFUZXh0KCk7CiB9CiAKLXZvaWQgTWVkaWFRdWVyeUxpc3Q6OmFkZExpc3RlbmVyKFBhc3NS
ZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIpCit2b2lkIE1lZGlhUXVlcnlM
aXN0OjphZGRMaXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiBsaXN0ZW5l
cikKIHsKICAgICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21hdGNo
ZXItPmFkZExpc3RlbmVyKGxpc3RlbmVyLCB0aGlzKTsKKyAgICBtX21hdGNoZXItPmFkZExpc3Rl
bmVyKGxpc3RlbmVyLnJlbGVhc2VOb25OdWxsKCksICp0aGlzKTsKIH0KIAotdm9pZCBNZWRpYVF1
ZXJ5TGlzdDo6cmVtb3ZlTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
PiBsaXN0ZW5lcikKK3ZvaWQgTWVkaWFRdWVyeUxpc3Q6OnJlbW92ZUxpc3RlbmVyKFJlZlB0cjxN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmIGxpc3RlbmVyKQogewogICAgIGlmICghbGlzdGVuZXIp
CiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWF0Y2hlci0+cmVtb3ZlTGlzdGVuZXIobGlzdGVu
ZXIuZ2V0KCksIHRoaXMpOworICAgIG1fbWF0Y2hlci0+cmVtb3ZlTGlzdGVuZXIoKmxpc3RlbmVy
LCAqdGhpcyk7CiB9CiAKLXZvaWQgTWVkaWFRdWVyeUxpc3Q6OmV2YWx1YXRlKE1lZGlhUXVlcnlF
dmFsdWF0b3IqIGV2YWx1YXRvciwgYm9vbCYgbm90aWZpY2F0aW9uTmVlZGVkKQordm9pZCBNZWRp
YVF1ZXJ5TGlzdDo6ZXZhbHVhdGUoTWVkaWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBib29s
JiBub3RpZmljYXRpb25OZWVkZWQpCiB7Ci0gICAgaWYgKG1fZXZhbHVhdGlvblJvdW5kICE9IG1f
bWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCkgJiYgZXZhbHVhdG9yKQotICAgICAgICBzZXRNYXRj
aGVzKGV2YWx1YXRvci0+ZXZhbChtX21lZGlhLmdldCgpKSk7CisgICAgaWYgKG1fZXZhbHVhdGlv
blJvdW5kICE9IG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCkpCisgICAgICAgIHNldE1hdGNo
ZXMoZXZhbHVhdG9yLmV2YWx1YXRlKG1fbWVkaWEuZ2V0KCkpKTsKICAgICBub3RpZmljYXRpb25O
ZWVkZWQgPSBtX2NoYW5nZVJvdW5kID09IG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmgKaW5kZXggNjlhZmE3NmIwZTA2YjAyODQ0
NDc5NGNlYzFmMDliZTgxNmJhNTY4OS4uZjM5MjkwZDI4MmQ1MDUxOGJiYjUyODA5N2I4MjNkNzU1
NWRjNGM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmgKQEAgLTE3LDggKzE3LDcg
QEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIE1lZGlh
UXVlcnlMaXN0X2gKLSNkZWZpbmUgTWVkaWFRdWVyeUxpc3RfaAorI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0z
OCwyOCArMzcsMjcgQEAgY2xhc3MgTWVkaWFRdWVyeVNldDsKIAogY2xhc3MgTWVkaWFRdWVyeUxp
c3QgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVF1ZXJ5TGlzdD4gewogcHVibGljOgotICAgIHN0
YXRpYyBSZWY8TWVkaWFRdWVyeUxpc3Q+IGNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhUXVlcnlNYXRj
aGVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxN
ZWRpYVF1ZXJ5TGlzdD4gY3JlYXRlKE1lZGlhUXVlcnlNYXRjaGVyJiwgUmVmPE1lZGlhUXVlcnlT
ZXQ+JiYsIGJvb2wpOwogICAgIH5NZWRpYVF1ZXJ5TGlzdCgpOwogCiAgICAgU3RyaW5nIG1lZGlh
KCkgY29uc3Q7CiAgICAgYm9vbCBtYXRjaGVzKCk7CiAKLSAgICB2b2lkIGFkZExpc3RlbmVyKFBh
c3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4pOwotICAgIHZvaWQgcmVtb3ZlTGlzdGVu
ZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPik7CisgICAgdm9pZCBhZGRMaXN0
ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJik7CisgICAgdm9pZCByZW1vdmVM
aXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJik7CiAKLSAgICB2b2lkIGV2
YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0b3IqLCBib29sJiBub3RpZmljYXRpb25OZWVkZWQpOwor
ICAgIHZvaWQgZXZhbHVhdGUoTWVkaWFRdWVyeUV2YWx1YXRvciYsIGJvb2wmIG5vdGlmaWNhdGlv
bk5lZWRlZCk7CiAKIHByaXZhdGU6Ci0gICAgTWVkaWFRdWVyeUxpc3QoUGFzc1JlZlB0cjxNZWRp
YVF1ZXJ5TWF0Y2hlcj4sIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4sIGJvb2wgbWF0Y2hlcyk7
CisgICAgTWVkaWFRdWVyeUxpc3QoTWVkaWFRdWVyeU1hdGNoZXImLCBSZWY8TWVkaWFRdWVyeVNl
dD4mJiwgYm9vbCBtYXRjaGVzKTsKKwogICAgIHZvaWQgc2V0TWF0Y2hlcyhib29sKTsKIAotICAg
IFJlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gbV9tYXRjaGVyOwotICAgIFJlZlB0cjxNZWRpYVF1
ZXJ5U2V0PiBtX21lZGlhOworICAgIFJlZjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gbV9tYXRjaGVyOwor
ICAgIFJlZjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhOwogICAgIHVuc2lnbmVkIG1fZXZhbHVhdGlv
blJvdW5kOyAvLyBJbmRpY2F0ZXMgaWYgdGhlIHF1ZXJ5IGhhcyBiZWVuIGV2YWx1YXRlZCBhZnRl
ciB0aGUgbGFzdCBzdHlsZSBzZWxlY3RvciBjaGFuZ2UuCiAgICAgdW5zaWduZWQgbV9jaGFuZ2VS
b3VuZDsgLy8gVXNlZCB0byBrbm93IGlmIHRoZSBxdWVyeSBoYXMgY2hhbmdlZCBpbiB0aGUgbGFz
dCBzdHlsZSBzZWxlY3RvciBjaGFuZ2UuCiAgICAgYm9vbCBtX21hdGNoZXM7CiB9OwogCiB9Ci0K
LSNlbmRpZiAvLyBNZWRpYVF1ZXJ5TGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcAppbmRleCAxNjBjN2QzNjI4ZWQyNzJhMDYxZGVjYmNhNDY1NzExZjEyNTk4NDg3
Li5kOGI4Nzg3NDVmYjE1ZDJkYTczZDA2ZDQ4MWI1ZjBkZWU0OTU4YjQ5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRl
ICJNZWRpYVF1ZXJ5TWF0Y2hlci5oIgogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJFbGVtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIK
ICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKQEAgLTMzLDMxICszMiwxMSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLU1lZGlhUXVlcnlNYXRjaGVyOjpMaXN0ZW5lcjo6TGlzdGVuZXIoUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lciwgUGFzc1JlZlB0cjxNZWRpYVF1
ZXJ5TGlzdD4gcXVlcnkpCi0gICAgOiBtX2xpc3RlbmVyKGxpc3RlbmVyKQotICAgICwgbV9xdWVy
eShxdWVyeSkKK01lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1ZXJ5TWF0Y2hlcihEb2N1bWVudCYg
ZG9jdW1lbnQpCisgICAgOiBtX2RvY3VtZW50KCZkb2N1bWVudCkKIHsKIH0KIAotTWVkaWFRdWVy
eU1hdGNoZXI6Okxpc3RlbmVyOjp+TGlzdGVuZXIoKQotewotfQotCi12b2lkIE1lZGlhUXVlcnlN
YXRjaGVyOjpMaXN0ZW5lcjo6ZXZhbHVhdGUoTWVkaWFRdWVyeUV2YWx1YXRvciogZXZhbHVhdG9y
KQotewotICAgIGJvb2wgbm90aWZ5OwotICAgIG1fcXVlcnktPmV2YWx1YXRlKGV2YWx1YXRvciwg
bm90aWZ5KTsKLSAgICBpZiAobm90aWZ5KQotICAgICAgICBtX2xpc3RlbmVyLT5xdWVyeUNoYW5n
ZWQobV9xdWVyeS5nZXQoKSk7Ci19Ci0KLU1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1ZXJ5TWF0
Y2hlcihEb2N1bWVudCogZG9jdW1lbnQpCi0gICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAg
ICwgbV9ldmFsdWF0aW9uUm91bmQoMSkKLXsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci19Ci0K
IE1lZGlhUXVlcnlNYXRjaGVyOjp+TWVkaWFRdWVyeU1hdGNoZXIoKQogewogfQpAQCAtNjUsNyAr
NDQsNyBAQCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6fk1lZGlhUXVlcnlNYXRjaGVyKCkKIHZvaWQgTWVk
aWFRdWVyeU1hdGNoZXI6OmRvY3VtZW50RGVzdHJveWVkKCkKIHsKICAgICBtX2xpc3RlbmVycy5j
bGVhcigpOwotICAgIG1fZG9jdW1lbnQgPSAwOworICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwog
fQogCiBTdHJpbmcgTWVkaWFRdWVyeU1hdGNoZXI6Om1lZGlhVHlwZSgpIGNvbnN0CkBAIC04MSwy
MyArNjAsMTkgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBNZWRpYVF1ZXJ5TWF0Y2hl
cjo6ZG9jdW1lbnRFbGVtZW50VXNlckFnZW50U3R5bGUoKQogICAgIGlmICghbV9kb2N1bWVudCB8
fCAhbV9kb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBF
bGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnQgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICByZXR1cm4gbV9kb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxl
bWVudCgqZG9jdW1lbnRFbGVtZW50LCBtX2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBNYXRjaE9u
bHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeU1hdGNo
ZXI6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqIG1lZGlhKQorYm9vbCBNZWRpYVF1ZXJ5
TWF0Y2hlcjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgbWVkaWEpCiB7Ci0gICAgaWYg
KCFtZWRpYSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgYXV0byBzdHlsZSA9IGRvY3Vt
ZW50RWxlbWVudFVzZXJBZ2VudFN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKG1lZGlhVHlwZSgp
LCBtX2RvY3VtZW50LT5mcmFtZSgpLCBzdHlsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2YWx1YXRv
ci5ldmFsKG1lZGlhKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7IG1lZGlhVHlw
ZSgpLCAqbV9kb2N1bWVudCwgc3R5bGUuZ2V0KCkgfS5ldmFsdWF0ZShtZWRpYSk7CiB9CiAKIFJl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gTWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEoY29uc3Qg
U3RyaW5nJiBxdWVyeSkKQEAgLTEwNSwzNCArODAsMzIgQEAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0
PiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6bWF0Y2hNZWRpYShjb25zdCBTdHJpbmcmIHF1ZXJ5KQogICAg
IGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8
TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUocXVlcnkpOworICAg
IGF1dG8gbWVkaWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUocXVlcnkpOwogI2lmIEVOQUJMRShS
RVNPTFVUSU9OX01FRElBX1FVRVJZKQogICAgIC8vIEFkZCB3YXJuaW5nIG1lc3NhZ2UgdG8gaW5z
cGVjdG9yIHdoZW5ldmVyIGRwaS9kcGNtIHZhbHVlcyBhcmUgdXNlZCBmb3IgInNjcmVlbiIgbWVk
aWEuCiAgICAgcmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZChtX2RvY3VtZW50LCBtZWRp
YS5nZXQoKSk7CiAjZW5kaWYKLSAgICByZXR1cm4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZSh0aGlz
LCBtZWRpYSwgZXZhbHVhdGUobWVkaWEuZ2V0KCkpKTsKKyAgICBib29sIHJlc3VsdCA9IGV2YWx1
YXRlKG1lZGlhLmdldCgpKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZSgqdGhp
cywgV1RGTW92ZShtZWRpYSksIHJlc3VsdCk7CiB9CiAKLXZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6
OmFkZExpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIs
IFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IHF1ZXJ5KQordm9pZCBNZWRpYVF1ZXJ5TWF0Y2hl
cjo6YWRkTGlzdGVuZXIoUmVmPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYgbGlzdGVuZXIsIE1l
ZGlhUXVlcnlMaXN0JiBxdWVyeSkKIHsKICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0ZW5lcnMuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgaWYgKCptX2xpc3RlbmVyc1tpXS0+bGlzdGVuZXIoKSA9PSAqbGlzdGVu
ZXIgJiYgbV9saXN0ZW5lcnNbaV0tPnF1ZXJ5KCkgPT0gcXVlcnkpCisgICAgZm9yIChhdXRvJiBl
eGlzdGluZ0xpc3RlbmVyIDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nTGlz
dGVuZXIubGlzdGVuZXIuZ2V0KCkgPT0gbGlzdGVuZXIuZ2V0KCkgJiYgZXhpc3RpbmdMaXN0ZW5l
ci5xdWVyeS5wdHIoKSA9PSAmcXVlcnkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgbV9saXN0ZW5lcnMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TGlzdGVuZXI+KGxpc3RlbmVy
LCBxdWVyeSkpOworICAgIG1fbGlzdGVuZXJzLmFwcGVuZChMaXN0ZW5lciB7IFdURk1vdmUobGlz
dGVuZXIpLCBxdWVyeSB9KTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6cmVtb3ZlTGlz
dGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0KiBx
dWVyeSkKK3ZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXImIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5TGlzdCYgcXVlcnkpCiB7Ci0gICAgaWYg
KCFtX2RvY3VtZW50KQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2xpc3RlbmVycy5yZW1vdmVG
aXJzdE1hdGNoaW5nKFtsaXN0ZW5lciwgcXVlcnldKGF1dG8mIGN1cnJlbnQpIHsKLSAgICAgICAg
cmV0dXJuICpjdXJyZW50LT5saXN0ZW5lcigpID09ICpsaXN0ZW5lciAmJiBjdXJyZW50LT5xdWVy
eSgpID09IHF1ZXJ5OworICAgIG1fbGlzdGVuZXJzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZsaXN0
ZW5lciwgJnF1ZXJ5XShhdXRvJiBleGlzdGluZ0xpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBl
eGlzdGluZ0xpc3RlbmVyLmxpc3RlbmVyLmdldCgpID09IGxpc3RlbmVyICYmIGV4aXN0aW5nTGlz
dGVuZXIucXVlcnkucHRyKCkgPT0gJnF1ZXJ5OwogICAgIH0pOwogfQogCkBAIC0xNDUsOSArMTE4
LDE0IEBAIHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKCkKICAg
ICBhdXRvIHN0eWxlID0gZG9jdW1lbnRFbGVtZW50VXNlckFnZW50U3R5bGUoKTsKICAgICBpZiAo
IXN0eWxlKQogICAgICAgICByZXR1cm47Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0
b3IobWVkaWFUeXBlKCksIG1fZG9jdW1lbnQtPmZyYW1lKCksIHN0eWxlLmdldCgpKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fbGlzdGVuZXJzLnNpemUoKTsgKytpKQotICAgICAgICBt
X2xpc3RlbmVyc1tpXS0+ZXZhbHVhdGUoJmV2YWx1YXRvcik7CisKKyAgICBNZWRpYVF1ZXJ5RXZh
bHVhdG9yIGV2YWx1YXRvciB7IG1lZGlhVHlwZSgpLCAqbV9kb2N1bWVudCwgc3R5bGUuZ2V0KCkg
fTsKKyAgICBmb3IgKGF1dG8mIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgYm9v
bCBub3RpZnk7CisgICAgICAgIGxpc3RlbmVyLnF1ZXJ5LT5ldmFsdWF0ZShldmFsdWF0b3IsIG5v
dGlmeSk7CisgICAgICAgIGlmIChub3RpZnkpCisgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5l
ci0+cXVlcnlDaGFuZ2VkKGxpc3RlbmVyLnF1ZXJ5LnB0cigpKTsKKyAgICB9CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5TWF0Y2hlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgKaW5k
ZXggYjc3NzNkMzhlODJlZDk0NTA1MzQ1M2MyMzgxYTFmNDgzNDBmNGQwMC4uNDY0OGVlNmZjNDdh
M2U1NjExNzcyYjhjMThmYzNlMDE0Y2MzMzhlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlNYXRjaGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlNYXRjaGVyLmgKQEAgLTE3LDggKzE3LDcgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KICAqLwogCi0jaWZuZGVmIE1lZGlhUXVlcnlNYXRjaGVyX2gKLSNkZWZpbmUgTWVkaWFR
dWVyeU1hdGNoZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM3LDUzICszNiw0MyBAQCBjbGFzcyBSZW5kZXJTdHlsZTsK
IC8vIE1lZGlhUXVlcnlNYXRjaGVyIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIGEg
dmVjdG9yIG9mIHBhaXJzCiAvLyBNZWRpYVF1ZXJ5TGlzdCB4IE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZvciBldmFsdWF0aW5nIHRoZSBxdWVyaWVzCiAvLyB3aGVu
ZXZlciBpdCBpcyBuZWVkZWQgYW5kIHRvIGNhbGwgdGhlIGxpc3RlbmVycyBpZiB0aGUgY29ycmVz
cG9uZGluZyBxdWVyeSBoYXMgY2hhbmdlZC4KLS8vIFRoZSBsaXN0ZW5lcnMgbXVzdCBiZSBjYWxs
ZWQgaW4gdGhlIHZlcnkgc2FtZSBvcmRlciBpbiB3aGljaCB0aGV5IGhhdmUgYmVlbiBhZGRlZC4K
Ky8vIFRoZSBsaXN0ZW5lcnMgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRo
ZXkgd2VyZSBhZGRlZC4KIAogY2xhc3MgTWVkaWFRdWVyeU1hdGNoZXIgOiBwdWJsaWMgUmVmQ291
bnRlZDxNZWRpYVF1ZXJ5TWF0Y2hlcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFR
dWVyeU1hdGNoZXI+IGNyZWF0ZShEb2N1bWVudCogZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFRdWVyeU1hdGNoZXIoZG9jdW1lbnQpKTsgfQorICAgIHN0YXRpYyBSZWY8TWVk
aWFRdWVyeU1hdGNoZXI+IGNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTWVkaWFRdWVyeU1hdGNoZXIoZG9jdW1lbnQpKTsgfQogICAgIH5NZWRpYVF1ZXJ5
TWF0Y2hlcigpOworCiAgICAgdm9pZCBkb2N1bWVudERlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBh
ZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCBQYXNzUmVmUHRy
PE1lZGlhUXVlcnlMaXN0Pik7Ci0gICAgdm9pZCByZW1vdmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiwgTWVkaWFRdWVyeUxpc3QqKTsKKyAgICB2b2lkIGFkZExpc3RlbmVyKFJlZjxN
ZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmLCBNZWRpYVF1ZXJ5TGlzdCYpOworICAgIHZvaWQgcmVt
b3ZlTGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciYsIE1lZGlhUXVlcnlMaXN0Jik7CiAK
ICAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IG1hdGNoTWVkaWEoY29uc3QgU3RyaW5nJik7CiAK
ICAgICB1bnNpZ25lZCBldmFsdWF0aW9uUm91bmQoKSBjb25zdCB7IHJldHVybiBtX2V2YWx1YXRp
b25Sb3VuZDsgfQotICAgIHZvaWQgc3R5bGVSZXNvbHZlckNoYW5nZWQoKTsKLSAgICBib29sIGV2
YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQqKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBMaXN0
ZW5lciB7Ci0gICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAg
ICAgICAgTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiwgUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdD4pOwotICAgICAgICB+TGlzdGVuZXIoKTsKIAotICAgICAgICB2
b2lkIGV2YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0b3IqKTsKKyAgICB2b2lkIHN0eWxlUmVzb2x2
ZXJDaGFuZ2VkKCk7CiAKLSAgICAgICAgTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogbGlzdGVuZXIo
KSB7IHJldHVybiBtX2xpc3RlbmVyLmdldCgpOyB9Ci0gICAgICAgIE1lZGlhUXVlcnlMaXN0KiBx
dWVyeSgpIHsgcmV0dXJuIG1fcXVlcnkuZ2V0KCk7IH0KKyAgICBib29sIGV2YWx1YXRlKGNvbnN0
IE1lZGlhUXVlcnlTZXQmKTsKIAotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyPiBtX2xpc3RlbmVyOwotICAgICAgICBSZWZQdHI8TWVkaWFRdWVyeUxp
c3Q+IG1fcXVlcnk7Citwcml2YXRlOgorICAgIHN0cnVjdCBMaXN0ZW5lciB7CisgICAgICAgIFJl
ZjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcjsKKyAgICAgICAgUmVmPE1lZGlhUXVl
cnlMaXN0PiBxdWVyeTsKICAgICB9OwogCi0gICAgTWVkaWFRdWVyeU1hdGNoZXIoRG9jdW1lbnQq
KTsKKyAgICBleHBsaWNpdCBNZWRpYVF1ZXJ5TWF0Y2hlcihEb2N1bWVudCYpOwogICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gZG9jdW1lbnRFbGVtZW50VXNlckFnZW50U3R5bGUoKSBj
b25zdDsKICAgICBTdHJpbmcgbWVkaWFUeXBlKCkgY29uc3Q7CiAKICAgICBEb2N1bWVudCogbV9k
b2N1bWVudDsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExpc3RlbmVyPj4gbV9saXN0ZW5l
cnM7CisgICAgVmVjdG9yPExpc3RlbmVyPiBtX2xpc3RlbmVyczsKIAogICAgIC8vIFRoaXMgdmFs
dWUgaXMgaW5jcmVtZW50ZWQgYXQgc3R5bGUgc2VsZWN0b3IgY2hhbmdlcy4KICAgICAvLyBJdCBp
cyB1c2VkIHRvIGF2b2lkIGV2YWx1YXRpbmcgcXVlcmllcyBtb3JlIHRoZW4gb25jZSBhbmQgdG8g
bWFrZSBzdXJlCiAgICAgLy8gdGhhdCBhIG1lZGlhIHF1ZXJ5IHJlc3VsdCBjaGFuZ2UgaXMgbm90
aWZpZWQgZXhhY3RseSBvbmNlLgotICAgIHVuc2lnbmVkIG1fZXZhbHVhdGlvblJvdW5kOworICAg
IHVuc2lnbmVkIG1fZXZhbHVhdGlvblJvdW5kIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gTWVkaWFRdWVyeU1hdGNoZXJfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwCmluZGV4IDc1YjI1ZGIwZDlkYzM2YTZlYmM4ODUxMDBmMjE3ZjA0NTljOTIyMjcuLjQ0YWM2
MmJhNWRiM2I4N2RmM2IwYWI1YTcxYjEzNmQyMTlhODZkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5j
cHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzLCBjb25zdCBNZQogICAgICAgICAg
ICAgYWRkUGFnZVJ1bGUoZG93bmNhc3Q8U3R5bGVSdWxlUGFnZT4ocnVsZS5nZXQoKSkpOwogICAg
ICAgICBlbHNlIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpKSB7CiAgICAgICAgICAgICBh
dXRvJiBtZWRpYVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpOwotICAgICAg
ICAgICAgaWYgKCghbWVkaWFSdWxlLm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1lZGlh
UnVsZS5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKKyAgICAgICAgICAgIGlmICgoIW1lZGlh
UnVsZS5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbHVhdGUoKm1lZGlhUnVsZS5tZWRpYVF1
ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKICAgICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlh
UnVsZS5jaGlsZFJ1bGVzKCksIG1lZGl1bSwgcmVzb2x2ZXIsIGhhc0RvY3VtZW50U2VjdXJpdHlP
cmlnaW4sIGlzSW5pdGlhdGluZ0VsZW1lbnRJblVzZXJBZ2VudFNoYWRvd1RyZWUsIGFkZFJ1bGVG
bGFncyk7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAm
JiByZXNvbHZlcikgewogICAgICAgICAgICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBz
ZXQuCkBAIC0zNjMsNyArMzYzLDcgQEAgdm9pZCBSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxlcywgY29uc3QgTWUKIHZvaWQgUnVs
ZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3Qg
TWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKIHsK
ICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBzaGVldC5pbXBvcnRSdWxlcygpKSB7Ci0gICAgICAgIGlm
IChydWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFydWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0u
ZXZhbChydWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKKyAgICAgICAgaWYgKHJ1bGUt
PnN0eWxlU2hlZXQoKSAmJiAoIXJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsdWF0
ZSgqcnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCiAgICAgICAgICAgICBhZGRSdWxl
c0Zyb21TaGVldCgqcnVsZS0+c3R5bGVTaGVldCgpLCBtZWRpdW0sIHJlc29sdmVyKTsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCmluZGV4IDc0MTc1MWYzMGQ0NDI2
YjM4Y2EzYTBlMDdiYjUxZWRiZmZhNzQxMzkuLmQ5ZjUyNDc1OWY5ZDEzYmEzYWQwNTBkMzBhOTEx
NmM3NjhlMWZlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlz
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcApAQCAtMjQs
NTggKzI0LDQ3IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1ZGUgIk1l
ZGlhUXVlcnkuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAi
TWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIG1hdGNoKHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgRnJhbWUqIGZyYW1lKQorc3RhdGljIGJvb2wgbWF0Y2goY29uc3QgTWVkaWFR
dWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRG9j
dW1lbnQmIGRvY3VtZW50KQogewotICAgIGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byBleHBMaXN0ID0gc3Rk
OjptYWtlX3VuaXF1ZTxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+Pj4oKTsK
LSAgICBleHBMaXN0LT5hcHBlbmQoV1RGTW92ZShleHByZXNzaW9uKSk7Ci0KLSAgICBSZWZQdHI8
TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVyeVNldCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpOwot
ICAgIG1lZGlhUXVlcnlTZXQtPmFkZE1lZGlhUXVlcnkoc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1
ZXJ5PihNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwgV1RGTW92ZShleHBMaXN0KSkpOwotCi0gICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwg
JnN0eWxlKTsKLSAgICByZXR1cm4gbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsKG1lZGlhUXVlcnlT
ZXQuZ2V0KCkpOworICAgIHJldHVybiBleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmlzRW1wdHko
KSB8fCBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIsIGRvY3VtZW50LCAmc3R5bGUgfS5l
dmFsdWF0ZShleHByZXNzaW9uKTsKIH0KIAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRl
ZmF1bHRMZW5ndGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3JiByZW5kZXJl
cikKIHsKLSAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1
dGVOb25DYWxjTGVuZ3RoRG91YmxlKENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCAm
c3R5bGUsIHZpZXcpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXLCAxMDAuMCkpOworICAgIHJl
dHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5n
dGhEb3VibGUoeyAmc3R5bGUsICZzdHlsZSwgJnJlbmRlcmVyIH0sIENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBjb21wdXRlTGVuZ3RoKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQor
c3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBSZW5kZXJT
dHlsZSYgc3R5bGUsIFJlbmRlclZpZXcmIHJlbmRlcmVyKQogewotICAgIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsIHZpZXcpOworICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsICZy
ZW5kZXJlcik7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAg
ICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGlmICgh
cHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGVu
Z3RoKHN0eWxlLCB2aWV3KTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxl
LCByZW5kZXJlcik7CiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3Ro
PGZsb2F0Pihjb252ZXJzaW9uRGF0YSk7CiAgICAgfQogICAgIGlmIChpczxDU1NDYWxjVmFsdWU+
KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4oKnZhbHVlKS5j
b21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOwotICAgIHJldHVybiBkZWZhdWx0TGVuZ3Ro
KHN0eWxlLCB2aWV3KTsKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4odmFs
dWUpLmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJuIGRlZmF1bHRM
ZW5ndGgoc3R5bGUsIHJlbmRlcmVyKTsKIH0KIAotZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShT
dHJpbmdWaWV3IHNpemVzQXR0cmlidXRlLCBSZW5kZXJWaWV3KiB2aWV3LCBGcmFtZSogZnJhbWUp
CitmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmll
dyBzaXplc0F0dHJpYnV0ZSkKIHsKLSAgICBpZiAoIXZpZXcpCisgICAgYXV0byogcmVuZGVyZXIg
PSBkb2N1bWVudC5yZW5kZXJWaWV3KCk7CisgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgYXV0byYgc3R5bGUgPSB2aWV3LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxl
ID0gcmVuZGVyZXItPnN0eWxlKCk7CiAgICAgZm9yIChhdXRvJiBzb3VyY2VTaXplIDogQ1NTUGFy
c2VyKENTU1N0cmljdE1vZGUpLnBhcnNlU2l6ZXNBdHRyaWJ1dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7
Ci0gICAgICAgIGlmIChtYXRjaChXVEZNb3ZlKHNvdXJjZVNpemUuZXhwcmVzc2lvbiksIHN0eWxl
LCBmcmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aChzb3VyY2VTaXplLmxl
bmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcpOworICAgICAgICBpZiAobWF0Y2goc291cmNlU2l6ZS5l
eHByZXNzaW9uLCBzdHlsZSwgZG9jdW1lbnQpKQorICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVM
ZW5ndGgoc291cmNlU2l6ZS5sZW5ndGguZ2V0KCksIHN0eWxlLCAqcmVuZGVyZXIpOwogICAgIH0K
LSAgICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgdmlldyk7CisgICAgcmV0dXJuIGRlZmF1
bHRMZW5ndGgoc3R5bGUsICpyZW5kZXJlcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmgKaW5kZXggZTFhZWY5NzBmZWZhMGViMTJhZTFi
NWYzYzVlNGU0NmMwMzc2NjdkMS4uYWI3MTY0ZTYzYmEwOGU4MmNjODM3OGYyOWJlMTQ1MjRiZDk1
MTIzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmgKQEAgLTE4LDE4ICsxOCwxNCBA
QAogICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VT
aXplTGlzdF9oCi0jZGVmaW5lIFNvdXJjZVNpemVMaXN0X2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFt
ZTsKLWNsYXNzIFJlbmRlclZpZXc7CitjbGFzcyBEb2N1bWVudDsKIAotZmxvYXQgcGFyc2VTaXpl
c0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpemVzQXR0cmlidXRlLCBSZW5kZXJWaWV3KiwgRnJhbWUq
KTsKK2Zsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoRG9jdW1lbnQmLCBTdHJpbmdWaWV3IHNpemVz
QXR0cmlidXRlKTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNl
U2l6ZUxpc3RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwCmluZGV4IDM0ZGU4Y2JhMTI2ZDE0
NzI0N2RkOGRhODVmNDZlYWJjOWIwNWRlNTguLjdjZGQyNzE3YzMxMmJlNzUyMzczMGVhMDc3YWNj
NjRmZTY2N2JhZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKQEAgLTYzLDEyICs2Mywx
MSBAQCBib29sIFN0eWxlTWVkaWE6Om1hdGNoTWVkaXVtKGNvbnN0IFN0cmluZyYgcXVlcnkpIGNv
bnN0CiAKICAgICBhdXRvIHJvb3RTdHlsZSA9IGRvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVy
KCkuc3R5bGVGb3JFbGVtZW50KCpkb2N1bWVudEVsZW1lbnQsIGRvY3VtZW50LT5yZW5kZXJTdHls
ZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKLSAgICBSZWZQdHI8
TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKTsKKyAgICBhdXRv
IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2Uo
cXVlcnkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9y
IHNjcmVlbkV2YWwodHlwZSgpLCBtX2ZyYW1lLCByb290U3R5bGUuZ2V0KCkpOwotICAgIHJldHVy
biBzY3JlZW5FdmFsLmV2YWwobWVkaWEuZ2V0KCkpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZh
bHVhdG9yIHsgdHlwZSgpLCAqZG9jdW1lbnQsIHJvb3RTdHlsZS5nZXQoKSB9LmV2YWx1YXRlKG1l
ZGlhLmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDhmNmRhZmY0NzY5NjY3YTJiMzYzMGU4YmU4NTllMzMxMjEz
NjEzNGQuLmQ4ODFjMTVhYTFmOTgwODAyMDZkYTRkYmMzZjBhZjdmYWJlOTU4NWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTI3MCwxOSArMjcwLDE5IEBAIFN0eWxlUmVz
b2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogICAgIC8vIGlzIGFsd2F5
cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCiAgICAgRnJh
bWVWaWV3KiB2aWV3ID0gbV9kb2N1bWVudC52aWV3KCk7CiAgICAgaWYgKHZpZXcpCi0gICAgICAg
IG1fbWVkaXVtID0gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPih2aWV3LT5t
ZWRpYVR5cGUoKSk7CisgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1YXRvciA9IE1lZGlhUXVlcnlF
dmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5cGUoKSB9OwogICAgIGVsc2UKLSAgICAgICAgbV9tZWRp
dW0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KCJhbGwiKTsKKyAgICAg
ICAgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJhbGwiIH07
CiAKICAgICBpZiAocm9vdCkKICAgICAgICAgbV9yb290RGVmYXVsdFN0eWxlID0gc3R5bGVGb3JF
bGVtZW50KCpyb290LCBtX2RvY3VtZW50LnJlbmRlclN0eWxlKCksIE1hdGNoT25seVVzZXJBZ2Vu
dFJ1bGVzKS5yZW5kZXJTdHlsZTsKIAogICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmll
dykKLSAgICAgICAgbV9tZWRpdW0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0
b3I+KHZpZXctPm1lZGlhVHlwZSgpLCAmdmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxl
LmdldCgpKTsKKyAgICAgICAgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yID0gTWVkaWFRdWVyeUV2YWx1
YXRvciB7IHZpZXctPm1lZGlhVHlwZSgpLCBtX2RvY3VtZW50LCBtX3Jvb3REZWZhdWx0U3R5bGUu
Z2V0KCkgfTsKIAogICAgIG1fcnVsZVNldHMucmVzZXRBdXRob3JTdHlsZSgpOwogCi0gICAgbV9y
dWxlU2V0cy5pbml0VXNlclN0eWxlKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSwg
Km1fbWVkaXVtLCAqdGhpcyk7CisgICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKG1fZG9jdW1l
bnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSwgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLCAqdGhpcyk7
CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIGlmIChtX2RvY3VtZW50LnN2Z0V4dGVuc2lv
bnMoKSkgewpAQCAtMjk1LDcgKzI5NSw3IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIo
RG9jdW1lbnQmIGRvY3VtZW50KQogCiB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0
eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0
cykKIHsKLSAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRz
LCBtX21lZGl1bS5nZXQoKSwgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzLCB0aGlzKTsKKyAgICBt
X3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzLCAmbV9tZWRpYVF1
ZXJ5RXZhbHVhdG9yLCBtX2luc3BlY3RvckNTU09NV3JhcHBlcnMsIHRoaXMpOwogICAgIGlmIChh
dXRvIHJlbmRlclZpZXcgPSBkb2N1bWVudCgpLnJlbmRlclZpZXcoKSkKICAgICAgICAgcmVuZGVy
Vmlldy0+c3R5bGUoKS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0
b3IoKSk7CiAKQEAgLTQxOSw3ICs0MTksNyBAQCBFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6
c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlcgogCiAg
ICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1f
c3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAgY29sbGVjdG9yLnNldFJlZ2lvbkZvclN0eWxp
bmcocmVnaW9uRm9yU3R5bGluZyk7Ci0gICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5n
ZXQoKSk7CisgICAgY29sbGVjdG9yLnNldE1lZGl1bSgmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsK
IAogICAgIGlmIChtYXRjaGluZ0JlaGF2aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQog
ICAgICAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1bGVzKCk7CkBAIC01ODIsNyArNTgyLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVs
ZW1lbnQoY29uc3QgRWxlbWVudCYKICAgICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1
bGVzLgogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVT
ZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmlsdGVyKCkpOwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9T
dHlsZVJlcXVlc3QocHNldWRvU3R5bGVSZXF1ZXN0KTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVt
KG1fbWVkaXVtLmdldCgpKTsKKyAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKCZtX21lZGlhUXVlcnlF
dmFsdWF0b3IpOwogICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKIAogICAgIGlmIChtX21h
dGNoQXV0aG9yQW5kVXNlclN0eWxlcykgewpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgVmVjdG9yPFJl
ZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVu
dChjb25zdCBFbGVtZW4KICAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoKmVsZW1l
bnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAgY29sbGVjdG9y
LnNldE1vZGUoU2VsZWN0b3JDaGVja2VyOjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNv
bGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJlcXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb0lk
KSk7Ci0gICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgY29sbGVj
dG9yLnNldE1lZGl1bSgmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKIAogICAgIGlmIChydWxlc1Rv
SW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNo
IHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdlbnQgc2hlZXQuCkBAIC0xODc4LDE2ICsxODc4LDE1IEBA
IENvbG9yIFN0eWxlUmVzb2x2ZXI6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1By
aW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vCiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6
OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhw
KiBleHByLCBib29sIHJlc3VsdCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3BvcnREZXBl
bmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBleHByZXNz
aW9uLCBib29sIHJlc3VsdCkKIHsKLSAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJl
c3VsdHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeVJlc3VsdD4oKmV4cHIsIHJl
c3VsdCkpOworICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQo
TWVkaWFRdWVyeVJlc3VsdCB7IGV4cHJlc3Npb24sIHJlc3VsdCB9KTsKIH0KIAogYm9vbCBTdHls
ZVJlc29sdmVyOjpoYXNNZWRpYVF1ZXJpZXNBZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25z
dAogewotICAgIHVuc2lnbmVkIHMgPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzOyBpKyspIHsKLSAgICAg
ICAgaWYgKG1fbWVkaXVtLT5ldmFsKCZtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dHNbaV0tPm1fZXhwcmVzc2lvbikgIT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHRzW2ldLT5tX3Jlc3VsdCkKKyAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IG1fdmlld3BvcnREZXBl
bmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cykgeworICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVh
dG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0KQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5oCmluZGV4IDJmMDY0ZTYwY2NkZjQ3MDE2NDE0NjJhYmM0NzNiZGYzMWFj
NTA3ZjAuLjYzYTZkOGQxZWUxNjhjOWEwZTM2MTk0ZmFmMzg1YjYxNzQ1ODVkZDcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKICAgICBE
b2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cygpIHsgcmV0dXJuIG1fcnVsZVNldHM7IH0KICAgICBj
b25zdCBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNl
dHM7IH0KIAotICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0
b3IoKSBjb25zdCB7IHJldHVybiAqbV9tZWRpdW07IH0KKyAgICBjb25zdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJ5
RXZhbHVhdG9yOyB9CiAKICAgICB2b2lkIHNldE92ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUo
UmVuZGVyU3R5bGUqIHN0eWxlKSB7IG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSA9IHN0
eWxlOyB9CiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgVmlld3BvcnRTdHlsZVJl
c29sdmVyKiB2aWV3cG9ydFN0eWxlUmVzb2x2ZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0U3R5bGVS
ZXNvbHZlci5nZXQoKTsgfQogI2VuZGlmCiAKLSAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50
TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworICAg
IHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVl
cnlFeHByZXNzaW9uJiwgYm9vbCByZXN1bHQpOwogICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiAhbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0
ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3Q7CiAKQEAgLTUxNyw3ICs1MTcsNyBAQCBwcml2YXRl
OgogCiAgICAgVGltZXIgbV9tYXRjaGVkUHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAg
IHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXZhbHVhdG9yPiBtX21lZGl1bTsKKyAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1fbWVkaWFRdWVyeUV2YWx1YXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IG1fcm9vdERlZmF1bHRTdHlsZTsKIAogICAgIERvY3VtZW50JiBtX2Rv
Y3VtZW50OwpAQCAtNTI2LDcgKzUyNiw3IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJTdHlsZSog
bV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlIHsgbnVsbHB0ciB9OwogCi0gICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4gbV92aWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcnlSZXN1bHRzOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CiAKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQ
VEFUSU9OKQogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRTdHls
ZVJlc29sdmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXggNmYzM2YyMzRkYjc4MWNlYjZj
ZDE4M2RmNWRmZmE0ODQwOTE2ZDQ3NS4uZDA2MDc1NTFlNjIzZDIxNDZlOTVhOTA1Yzk5YzU0Zjc3
ZjQ4ZTM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04MDIsNyArODAyLDcgQEAgdm9p
ZCBEb2N1bWVudDo6Y2xlYXJTZWxlY3RvclF1ZXJ5Q2FjaGUoKQogTWVkaWFRdWVyeU1hdGNoZXIm
IERvY3VtZW50OjptZWRpYVF1ZXJ5TWF0Y2hlcigpCiB7CiAgICAgaWYgKCFtX21lZGlhUXVlcnlN
YXRjaGVyKQotICAgICAgICBtX21lZGlhUXVlcnlNYXRjaGVyID0gTWVkaWFRdWVyeU1hdGNoZXI6
OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9tZWRpYVF1ZXJ5TWF0Y2hlciA9IE1lZGlhUXVlcnlN
YXRjaGVyOjpjcmVhdGUoKnRoaXMpOwogICAgIHJldHVybiAqbV9tZWRpYVF1ZXJ5TWF0Y2hlcjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAppbmRl
eCBhZTQxZjczYmJhYzRkZjU4MGNjNzZmMzRkZWM2NTk4NDJlMzIyMTkxLi45ZmM0MjZkMWI4Mzhl
MmQzZTIxZDgzMmQ0N2JiNjIxODllYTE5OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5s
aW5lU3R5bGVTaGVldE93bmVyLmNwcApAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgSW5saW5lU3R5
bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IHRleHQpCiAKICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoQVNDSUlMaXRlcmFs
KCJzY3JlZW4iKSwgdHJ1ZSk7CiAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoQVND
SUlMaXRlcmFsKCJwcmludCIpLCB0cnVlKTsKLSAgICBpZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRp
YVF1ZXJpZXMuZ2V0KCkpICYmICFwcmludEV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKQor
ICAgIGlmICghc2NyZWVuRXZhbC5ldmFsdWF0ZSgqbWVkaWFRdWVyaWVzKSAmJiAhcHJpbnRFdmFs
LmV2YWx1YXRlKCptZWRpYVF1ZXJpZXMpKQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRob3JT
dHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCkuYWRkUGVuZGluZ1NoZWV0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggODU1Y2FmMWVmMzI2ODk0MDdhZDc5
YmU4M2U3NDE0ZDliMWE3YmI5ZC4uMmRmZjA0MjYzZWQ2Zjk2OTg0M2ZjOTNjNDc1NjQ2Njk4NDgy
ZTViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTI2Niw3
ICsxMjY2LDcgQEAgdm9pZCBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNl
KCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEV4aXQgZW1wdHkgY29udGFpbmVy
cyBhcyB3ZSBwYXNzIG92ZXIgdGhlbSBvciBjb250YWluZXJzCiAgICAgICAgICAgICAvLyB3aGVy
ZSBbY29udGFpbmVyLCAwXSBpcyB3aGVyZSB3ZSBzdGFydGVkIGl0ZXJhdGluZy4KLSAgICAgICAg
ICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCptX25v
ZGUpICAmJiBtX25vZGUtPnBhcmVudE5vZGUoKSAmJiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwg
KG1fbm9kZSA9PSBtX2VuZENvbnRhaW5lciAmJiAhbV9lbmRPZmZzZXQpKSkgeworICAgICAgICAg
ICAgaWYgKCFtX2hhbmRsZWROb2RlICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9k
ZSkgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkgJiYgKCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8ICht
X25vZGUgPT0gbV9lbmRDb250YWluZXIgJiYgIW1fZW5kT2Zmc2V0KSkpIHsKICAgICAgICAgICAg
ICAgICBleGl0Tm9kZSgpOwogICAgICAgICAgICAgICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWROb2RlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4IDkxMzYwOTQ5YWY0NzY0OTRmNTI0MmU1ZDNm
MjdlYWNmOTM2YTQyYWIuLmIwZjYxYTdlMWFkOTg2MDc2YTE4ZDFlNGU1ZjBkNTcyMGExNTZlNDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcApAQCAtMTUzLDI3ICsx
NTMsMzEgQEAgSW1hZ2VDYW5kaWRhdGUgSFRNTEltYWdlRWxlbWVudDo6YmVzdEZpdFNvdXJjZUZy
b21QaWN0dXJlRWxlbWVudCgpCiAgICAgICAgIGlmICghaXM8SFRNTFNvdXJjZUVsZW1lbnQ+KCpj
aGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgYXV0byYgc291cmNlID0gZG93
bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCpjaGlsZCk7CisKICAgICAgICAgYXV0byYgc3Jjc2V0
ID0gc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUoc3Jjc2V0QXR0cik7CiAgICAgICAgIGlmIChzcmNz
ZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzb3VyY2Uu
aGFzQXR0cmlidXRlKHR5cGVBdHRyKSkgewotICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBzb3Vy
Y2UuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikuc3RyaW5nKCk7Ci0gICAgICAgICAgICBpbnQg
aW5kZXhPZlNlbWljb2xvbiA9IHR5cGUuZmluZCgnOycpOwotICAgICAgICAgICAgaWYgKGluZGV4
T2ZTZW1pY29sb24gPj0gMCkKLSAgICAgICAgICAgICAgICB0eXBlLnRydW5jYXRlKGluZGV4T2ZT
ZW1pY29sb24pOworCisgICAgICAgIGF1dG8mIHR5cGVBdHRyaWJ1dGUgPSBzb3VyY2UuZmFzdEdl
dEF0dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgICAgIGlmICghdHlwZUF0dHJpYnV0ZS5pc051bGwo
KSkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSB0eXBlQXR0cmlidXRlLnN0cmluZygpOwor
ICAgICAgICAgICAgdHlwZS50cnVuY2F0ZSh0eXBlLmZpbmQoJzsnKSk7CiAgICAgICAgICAgICB0
eXBlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHR5cGUpOwogICAgICAgICAg
ICAgaWYgKCF0eXBlLmlzRW1wdHkoKSAmJiAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJ
bWFnZU1JTUVUeXBlKHR5cGUpICYmICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBl
LCAiaW1hZ2Uvc3ZnK3htbCIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
Ci0gICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50KCkucHJpbnRp
bmcoKSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9jdW1lbnQoKS5mcmFtZSgpLCBkb2N1bWVudCgp
LmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0
ZWRTdHlsZSgpIDogbnVsbHB0cik7Ci0gICAgICAgIGJvb2wgZXZhbHVhdGlvbiA9IGV2YWx1YXRv
ci5ldmFsQ2hlY2tpbmdWaWV3cG9ydERlcGVuZGVudFJlc3VsdHMoc291cmNlLm1lZGlhUXVlcnlT
ZXQoKSwgcGljdHVyZS0+dmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkpOworCisgICAgICAgIGF1
dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAg
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yIHsgZG9jdW1lbnQoKS5wcmludGluZygp
ID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCgpLCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1
bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byog
cXVlcmllcyA9IHNvdXJjZS5tZWRpYVF1ZXJ5U2V0KCk7CisgICAgICAgIGF1dG8gZXZhbHVhdGlv
biA9ICFxdWVyaWVzIHx8IGV2YWx1YXRvci5ldmFsdWF0ZSgqcXVlcmllcywgcGljdHVyZS0+dmll
d3BvcnREZXBlbmRlbnRSZXN1bHRzKCkpOwogICAgICAgICBpZiAocGljdHVyZS0+aGFzVmlld3Bv
cnREZXBlbmRlbnRSZXN1bHRzKCkpCiAgICAgICAgICAgICBkb2N1bWVudCgpLmFkZFZpZXdwb3J0
RGVwZW5kZW50UGljdHVyZSgqcGljdHVyZSk7CiAgICAgICAgIGlmICghZXZhbHVhdGlvbikKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNp
emVzQXR0cmlidXRlKHNvdXJjZS5mYXN0R2V0QXR0cmlidXRlKHNpemVzQXR0cikuc3RyaW5nKCks
IGRvY3VtZW50KCkucmVuZGVyVmlldygpLCBkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgICAgICBJ
bWFnZUNhbmRpZGF0ZSBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVz
KGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbnVsbEF0b20sIHNvdXJjZS5mYXN0R2V0
QXR0cmlidXRlKHNyY3NldEF0dHIpLCBzb3VyY2VTaXplKTsKKyAgICAgICAgYXV0byBzb3VyY2VT
aXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShkb2N1bWVudCgpLCBzb3VyY2UuZmFzdEdldEF0dHJp
YnV0ZShzaXplc0F0dHIpLnN0cmluZygpKTsKKyAgICAgICAgYXV0byBjYW5kaWRhdGUgPSBiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSwgbnVsbEF0b20sIHNyY3NldCwgc291cmNlU2l6ZSk7CiAgICAgICAgIGlmICghY2FuZGlkYXRl
LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgfQpAQCAtMTg2
LDcgKzE5MCw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2VsZWN0SW1hZ2VTb3VyY2UoKQog
ICAgIEltYWdlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVs
ZW1lbnQoKTsKICAgICBpZiAoY2FuZGlkYXRlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBJZiB3
ZSBkb24ndCBoYXZlIGEgPHBpY3R1cmU+IG9yIGRpZG4ndCBmaW5kIGEgc291cmNlLCB0aGVuIHdl
IHVzZSBvdXIgb3duIGF0dHJpYnV0ZXMuCi0gICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJz
ZVNpemVzQXR0cmlidXRlKGZhc3RHZXRBdHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSwgZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCksIGRvY3VtZW50KCkuZnJhbWUoKSk7CisgICAgICAgIGZsb2F0
IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRvY3VtZW50KCksIGZhc3RHZXRBdHRy
aWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSk7CiAgICAgICAgIGNhbmRpZGF0ZSA9IGJlc3RGaXRT
b3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBm
YXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpLCBz
b3VyY2VTaXplKTsKICAgICB9CiAgICAgc2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRp
ZGF0ZShjYW5kaWRhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCmlu
ZGV4IGI0MDE0MmZhYWJjYWFkMmE0MTQ1NjI2OTM1ODFhMjQ5NjYxMjA0YzMuLjgwMWI0OWJmMjM1
MzVhNThlNTliNWFjN2FhZGQzOGMxZTE3ODJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxM
aW5rRWxlbWVudC5jcHAKQEAgLTI0MSw4ICsyNDEsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6
cHJvY2VzcygpCiAgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVl
KCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRG9j
dW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBhdXRvIG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKTsKLSAgICAgICAgICAg
IE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygp
LT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQoKS5mcmFtZSgpLCBkb2N1bWVudFN0eWxlID8gJipkb2N1
bWVudFN0eWxlIDogbnVsbHB0cik7Ci0gICAgICAgICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IGV2
YWx1YXRvci5ldmFsKG1lZGlhLnB0cigpKTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlNYXRjaGVz
ID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7IGRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5tZWRp
YVR5cGUoKSwgZG9jdW1lbnQoKSwgZG9jdW1lbnRTdHlsZSA/ICYqZG9jdW1lbnRTdHlsZSA6IG51
bGxwdHIgfS5ldmFsdWF0ZShtZWRpYS5nZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBE
b24ndCBob2xkIHVwIHJlbmRlciB0cmVlIGNvbnN0cnVjdGlvbiBhbmQgc2NyaXB0IGV4ZWN1dGlv
biBvbiBzdHlsZXNoZWV0cwpAQCAtMzYxLDcgKzM2MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50
OjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJM
LCBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWY8U3R5bGVTaGVldENvbnRlbnRz
PiBzdHlsZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKGhyZWYsIHBhcnNlckNvbnRl
eHQpKTsKKyAgICBhdXRvIHN0eWxlU2hlZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZSho
cmVmLCBwYXJzZXJDb250ZXh0KTsKICAgICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
KHN0eWxlU2hlZXQuY29weVJlZigpLCB0aGlzKTsKICAgICBtX3NoZWV0LT5zZXRNZWRpYVF1ZXJp
ZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlh
KSk7CiAgICAgbV9zaGVldC0+c2V0VGl0bGUodGl0bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBlZjZjOThhM2VjZDYzNjM5NTQ0YmE5NDQ4ZDk1MjAx
OTc1MGRjNWFmLi4zOWIyZjc2MGFjYWFhNTk1YjA3NGRjYzg0YjVmZmU4ZGMxN2U4MjVkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKQEAgLTQxNzYsMTMgKzQxNzYs
MTIgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50
VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UKICAgICAgICAgICAgIGdvdG8gY2hlY2tfYWdh
aW47CiAgICAgICAgIAogICAgICAgICBpZiAoc291cmNlLT5mYXN0SGFzQXR0cmlidXRlKG1lZGlh
QXR0cikpIHsKLSAgICAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2Ny
ZWVuIiwgZG9jdW1lbnQoKS5mcmFtZSgpLCByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxl
KCkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9
IHNvdXJjZS0+bWVkaWFRdWVyeVNldCgpOworICAgICAgICAgICAgYXV0byBtZWRpYSA9IHNvdXJj
ZS0+bWVkaWFRdWVyeVNldCgpOwogI2lmICFMT0dfRElTQUJMRUQKICAgICAgICAgICAgIGlmIChz
aG91bGRMb2cpCiAgICAgICAgICAgICAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6
c2VsZWN0TmV4dFNvdXJjZUNoaWxkKCVwKSAtICdtZWRpYScgaXMgJXMiLCB0aGlzLCBzb3VyY2Ut
Pm1lZGlhKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5kaWYKLSAgICAgICAgICAgIGlmICghc2NyZWVu
RXZhbC5ldmFsKG1lZGlhLmdldCgpKSkgCisgICAgICAgICAgICBpZiAobWVkaWEgJiYgIU1lZGlh
UXVlcnlFdmFsdWF0b3IgeyAic2NyZWVuIiwgZG9jdW1lbnQoKSwgcmVuZGVyZXIoKSA/ICZyZW5k
ZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0ciB9LmV2YWx1YXRlKCptZWRpYSkpCiAgICAgICAgICAg
ICAgICAgZ290byBjaGVja19hZ2FpbjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxQaWN0dXJlRWxlbWVudC5jcHAKaW5kZXggZTJmMjYwYzg0ZWNhNGI1ZGIxMTQ4NTA4NDU1
OGVkYzIxZDg2MWY5OS4uNzAyNDQxOGY0MjVkOTQwMDdkMGU2OWY2Yjc0NmM3YjlhMWU4MWJjMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50LmNwcApAQCAtNTcsMTYg
KzU3LDE2IEBAIFJlZjxIVE1MUGljdHVyZUVsZW1lbnQ+IEhUTUxQaWN0dXJlRWxlbWVudDo6Y3Jl
YXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsCiAKIHZvaWQgSFRNTFBpY3R1cmVFbGVt
ZW50Ojpzb3VyY2VzQ2hhbmdlZCgpCiB7Ci0gICAgZm9yIChhdXRvJiBpbWFnZUVsZW1lbnQgOiBj
aGlsZHJlbk9mVHlwZTxIVE1MSW1hZ2VFbGVtZW50PigqdGhpcykpCi0gICAgICAgIGltYWdlRWxl
bWVudC5zZWxlY3RJbWFnZVNvdXJjZSgpOworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxk
cmVuT2ZUeXBlPEhUTUxJbWFnZUVsZW1lbnQ+KCp0aGlzKSkKKyAgICAgICAgZWxlbWVudC5zZWxl
Y3RJbWFnZVNvdXJjZSgpOwogfQogCi1ib29sIEhUTUxQaWN0dXJlRWxlbWVudDo6dmlld3BvcnRD
aGFuZ2VBZmZlY3RlZFBpY3R1cmUoKQorYm9vbCBIVE1MUGljdHVyZUVsZW1lbnQ6OnZpZXdwb3J0
Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCkgY29uc3QKIHsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9y
IGV2YWx1YXRvcihkb2N1bWVudCgpLnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRv
Y3VtZW50KCkuZnJhbWUoKSwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA/IGRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwotICAgIHVu
c2lnbmVkIG51bVJlc3VsdHMgPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMu
c2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1SZXN1bHRzOyBpKyspIHsK
LSAgICAgICAgaWYgKGV2YWx1YXRvci5ldmFsKCZtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikgIT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKKyAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOworICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVh
dG9yIHsgZG9jdW1lbnQoKS5wcmludGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVu
dCgpLCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6
IG51bGxwdHIgfTsKKyAgICBmb3IgKGF1dG8mIHJlc3VsdCA6IG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cykgeworICAgICAgICBpZiAoZXZhbHVhdG9yLmV2YWx1YXRlKHJlc3Vs
dC5leHByZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFBpY3R1cmVFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJl
RWxlbWVudC5oCmluZGV4IGFiZDQ3YzBhOWIzMDZmYWM0NjdkNTYxYjY1YjU0ODc2OTg5NjU0YWYu
LmZiNTEzNmY3YzdjM2M0OWQxMzgzNWEwYTY3YTZhNmM0NWUwNDgwMWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuaApAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIVE1MUGljdHVyZUVsZW1lbnRfaAotI2RlZmluZSBIVE1M
UGljdHVyZUVsZW1lbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5o
IgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKQEAgLTM0LDI4ICszMywyNSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MUGljdHVyZUVsZW1lbnQgZmluYWwgOiBwdWJs
aWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8SFRNTFBpY3R1cmVFbGVt
ZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7Ci0gICAgfkhUTUxQ
aWN0dXJlRWxlbWVudCgpOworICAgIHZpcnR1YWwgfkhUTUxQaWN0dXJlRWxlbWVudCgpOwogCiAg
ICAgdm9pZCBzb3VyY2VzQ2hhbmdlZCgpOwogCiAgICAgdm9pZCBjbGVhclZpZXdwb3J0RGVwZW5k
ZW50UmVzdWx0cygpIHsgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmNsZWFy
KCk7IH0KICAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpIGNvbnN0IHsgcmV0
dXJuIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7IH0KLSAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiYgdmlld3BvcnREZXBlbmRl
bnRSZXN1bHRzKCkgeyByZXR1cm4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRz
OyB9CisgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1bHQ+JiB2aWV3cG9ydERlcGVuZGVudFJlc3Vs
dHMoKSB7IHJldHVybiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7IH0KIAot
ICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KTsKLSAg
ICAKLSAgICBib29sIHZpZXdwb3J0Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCk7CisgICAgYm9vbCB2
aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSgpIGNvbnN0OwogCiAgICAgV2Vha1B0cjxIVE1M
UGljdHVyZUVsZW1lbnQ+IGNyZWF0ZVdlYWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNy
ZWF0ZVdlYWtQdHIoKTsgfQogCiBwcml2YXRlOgogICAgIEhUTUxQaWN0dXJlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKLSAgICAKLSAgICBXZWFrUHRyRmFjdG9yeTxI
VE1MUGljdHVyZUVsZW1lbnQ+IG1fd2Vha0ZhY3RvcnkgeyB0aGlzIH07Ci0gICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzOwogCisgICAgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCog
b2xkRG9jdW1lbnQpIGZpbmFsOworCisgICAgV2Vha1B0ckZhY3Rvcnk8SFRNTFBpY3R1cmVFbGVt
ZW50PiBtX3dlYWtGYWN0b3J5IHsgdGhpcyB9OworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0
PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIVE1MUGljdHVyZUVsZW1lbnRfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggYmFj
MjhkNDc0NjBjOGQ3YTJjMjhmYzc2MTI4ZTJlZGFjNmUzNmQxYi4uYmE2YTIxNTAxNWE5YzM3YTAw
MjM0NWY2YTVmNTJlNzM2MWNjOTJhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAobV90YWdJZCA9PSBUYWdJZDo6U291cmNl
ICYmICFwaWN0dXJlU3RhdGUuaXNFbXB0eSgpICYmICFwaWN0dXJlU3RhdGUubGFzdCgpICYmIG1f
bWVkaWFNYXRjaGVkICYmICFtX3NyY1NldEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKG1fc2l6ZXNBdHRyaWJ1
dGUsIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgICAgICAg
ICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShkb2N1bWVudCwgbV9zaXpl
c0F0dHJpYnV0ZSk7CiAgICAgICAgICAgICBJbWFnZUNhbmRpZGF0ZSBpbWFnZUNhbmRpZGF0ZSA9
IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMobV9kZXZpY2VTY2FsZUZhY3RvciwgbV91
cmxUb0xvYWQsIG1fc3JjU2V0QXR0cmlidXRlLCBzb3VyY2VTaXplKTsKICAgICAgICAgICAgIGlm
ICghaW1hZ2VDYW5kaWRhdGUuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgcGljdHVyZVN0
YXRlLmxhc3QoKSA9IHRydWU7CkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgICAgICAK
ICAgICAgICAgLy8gUmVzb2x2ZSBiZXR3ZWVuIHNyYyBhbmQgc3JjU2V0IGlmIHdlIGhhdmUgdGhl
bSBhbmQgdGhlIHRhZyBpcyBpbWcuCiAgICAgICAgIGlmIChtX3RhZ0lkID09IFRhZ0lkOjpJbWcg
JiYgIW1fc3JjU2V0QXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgZmxvYXQgc291
cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUobV9zaXplc0F0dHJpYnV0ZSwgZG9jdW1lbnQu
cmVuZGVyVmlldygpLCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgICAgIGZsb2F0IHNvdXJj
ZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRvY3VtZW50LCBtX3NpemVzQXR0cmlidXRlKTsK
ICAgICAgICAgICAgIEltYWdlQ2FuZGlkYXRlIGltYWdlQ2FuZGlkYXRlID0gYmVzdEZpdFNvdXJj
ZUZvckltYWdlQXR0cmlidXRlcyhtX2RldmljZVNjYWxlRmFjdG9yLCBtX3VybFRvTG9hZCwgbV9z
cmNTZXRBdHRyaWJ1dGUsIHNvdXJjZVNpemUpOwogICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKGlt
YWdlQ2FuZGlkYXRlLnN0cmluZy50b1N0cmluZygpLCB0cnVlKTsKICAgICAgICAgfQpAQCAtMTk4
LDEwICsxOTgsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1h
dGNoKGF0dHJpYnV0ZU5hbWUsIG1lZGlhQXR0cikgJiYgbV9tZWRpYUF0dHJpYnV0ZS5pc051bGwo
KSkgewogICAgICAgICAgICAgICAgIG1fbWVkaWFBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZTsK
LSAgICAgICAgICAgICAgICBSZWY8TWVkaWFRdWVyeVNldD4gbWVkaWFTZXQgPSBNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKLSAg
ICAgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiB2
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwotICAgICAgICAgICAgICAgIE1lZGlh
UXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50LnByaW50aW5nKCkgPyAicHJpbnQiIDog
InNjcmVlbiIsIGRvY3VtZW50LmZyYW1lKCksIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpID8g
ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwot
ICAgICAgICAgICAgICAgIG1fbWVkaWFNYXRjaGVkID0gZXZhbHVhdG9yLmV2YWxDaGVja2luZ1Zp
ZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhtZWRpYVNldC5wdHIoKSwgdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAgICAgICAgICAgICAgYXV0byBtZWRpYVNldCA9IE1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUp
OworICAgICAgICAgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3Vt
ZW50RWxlbWVudCgpOworICAgICAgICAgICAgICAgIG1fbWVkaWFNYXRjaGVkID0gTWVkaWFRdWVy
eUV2YWx1YXRvciB7IGRvY3VtZW50LnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRv
Y3VtZW50LCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUo
KSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYVNldC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUYWdJZDo6U2NyaXB0OgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKaW5k
ZXggMjI2YTllYmIzZTFjNDBkYWM4MGY2MmE4YTFlYzYwNmRjMmMxMTIxOC4uYTE1Y2IyZDk0YTdm
ZjlkZmEyNzBlZjdiZjE2M2U1MWQyZWY1ZTY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCkBAIC01OCwxOCArNTgsMTcg
QEAgdm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6OnByZWxvYWQoUHJlbG9hZFJlcXVlc3RTdHJl
YW0gcmVxdWVzdHMpCiAgICAgICAgIHByZWxvYWQoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKLXN0
YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRl
clN0eWxlKiByZW5kZXJTdHlsZSwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKK3N0YXRp
YyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJl
bmRlclN0eWxlKiByZW5kZXJTdHlsZSwgY29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKIHsK
LSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVyaWVzID0gTWVkaWFRdWVyeVNldDo6
Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgTWVk
aWFRdWVyeUV2YWx1YXRvciBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwgcmVu
ZGVyU3R5bGUpOwotICAgIHJldHVybiBtZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWwobWVkaWFRdWVy
aWVzLmdldCgpKTsKKyAgICBhdXRvIG1lZGlhUXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0
ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOworICAgIHJldHVybiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIsIGRvY3VtZW50LCByZW5kZXJTdHlsZSB9LmV2
YWx1YXRlKG1lZGlhUXVlcmllcy5nZXQoKSk7CiB9CiAKIHZvaWQgSFRNTFJlc291cmNlUHJlbG9h
ZGVyOjpwcmVsb2FkKHN0ZDo6dW5pcXVlX3B0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKIHsK
ICAgICBBU1NFUlQobV9kb2N1bWVudC5mcmFtZSgpKTsKICAgICBBU1NFUlQobV9kb2N1bWVudC5y
ZW5kZXJWaWV3KCkpOwotICAgIGlmICghcHJlbG9hZC0+bWVkaWEoKS5pc0VtcHR5KCkgJiYgIW1l
ZGlhQXR0cmlidXRlTWF0Y2hlcyhtX2RvY3VtZW50LmZyYW1lKCksICZtX2RvY3VtZW50LnJlbmRl
clZpZXcoKS0+c3R5bGUoKSwgcHJlbG9hZC0+bWVkaWEoKSkpCisgICAgaWYgKCFwcmVsb2FkLT5t
ZWRpYSgpLmlzRW1wdHkoKSAmJiAhbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKG1fZG9jdW1lbnQsICZt
X2RvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUoKSwgcHJlbG9hZC0+bWVkaWEoKSkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIENhY2hlZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gcHJlbG9h
ZC0+cmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3Bw
CmluZGV4IGZlZmRiNTgwYWZjNWExYzY0YWI3MWRjNzU3ODlkMjkxOTliYjYwOTIuLmZiMzA0YjRk
NTM4MzFjNTNkMTYxMDg3MDgwNWZjYTI5N2UxZjQ5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRv
dy5jcHAKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRl
ICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKLSNpbmNs
dWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0
aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJN
YWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXgg
NzAwMjNiMWNiODU5NWEyYjRlMGQzNTY1ZWMyYzZhYmNjY2QyNzViMy4uYzQ4ODQ1N2UyOGJlNTRi
OTNmOTNmYzA3N2QzZWIzODU3NDQyNTY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2
ZW50SGFuZGxlck1hYy5tbQpAQCAtMTE3NSwxMCArMTE3NSw4IEBAIEludFBvaW50IEV2ZW50SGFu
ZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25z
dAogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIG1fbGFzdEtub3duTW91c2VQb3NpdGlv
bjsKIAotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JEaXNwbGF5SUQocGFnZS0+Y2hy
b21lKCkuZGlzcGxheUlEKCkpOwotICAgIEludFNpemUgYXV0b3Njcm9sbEFkanVzdG1lbnRGYWN0
b3IgPSBhdXRvc2Nyb2xsQWRqdXN0bWVudEZhY3RvckZvclNjcmVlbkJvdW5kYXJpZXMobV9sYXN0
S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uLCB0b1VzZXJTcGFjZShzY3JlZW4uZnJhbWUsIG5pbCkp
OwotCi0gICAgcmV0dXJuIG1fbGFzdEtub3duTW91c2VQb3NpdGlvbiArIGF1dG9zY3JvbGxBZGp1
c3RtZW50RmFjdG9yOworICAgIGF1dG8gZnJhbWUgPSB0b1VzZXJTcGFjZShzY3JlZW4ocGFnZS0+
Y2hyb21lKCkuZGlzcGxheUlEKCkpLmZyYW1lLCBuaWwpOworICAgIHJldHVybiBtX2xhc3RLbm93
bk1vdXNlUG9zaXRpb24gKyBhdXRvc2Nyb2xsQWRqdXN0bWVudEZhY3RvckZvclNjcmVlbkJvdW5k
YXJpZXMobV9sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uLCBmcmFtZSk7CiB9CiAKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCmluZGV4IDBkODA3MzZhNWJiMmUw
ZDMxMzgyYTJiOTQ1YzZlODZkMzI2ZDNjODUuLmUyOGZmMTk5NTBkZGE1NGUwOTA2ZDk4MGFiYzQ1
MmFiMzcyMjYxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3Jt
U2NyZWVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaApA
QCAtMjMsMTAgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9y
bVNjcmVlbl9oCi0jZGVmaW5lIFBsYXRmb3JtU2NyZWVuX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKyNwcmFnbWEgb25jZQogCiAjaWYgUExBVEZPUk0oTUFDKQogT0JKQ19DTEFTUyBOU1Nj
cmVlbjsKQEAgLTQ0LDQ0ICs0MSw0NCBAQCB0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50
OwogT0JKQ19DTEFTUyBVSVNjcmVlbjsKICNlbmRpZgogCi10eXBlZGVmIHVpbnQzMl90IFBsYXRm
b3JtRGlzcGxheUlEOwotCi10eXBlZGVmIFdURjo6VmVjdG9yPGNoYXI+IENvbG9yUHJvZmlsZTsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNz
IEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBXaWRnZXQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBG
bG9hdFNpemU7CitjbGFzcyBXaWRnZXQ7CiAKLSAgICBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7
Ci0gICAgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopOwotICAgIGJvb2wgc2Ny
ZWVuSXNNb25vY2hyb21lKFdpZGdldCopOwordXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50
MzJfdDsKIAotICAgIGJvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKTsKK2ludCBzY3JlZW5E
ZXB0aChXaWRnZXQqKTsKK2ludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKK2Jv
b2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopOwogCi0gICAgRmxvYXRSZWN0IHNjcmVlblJl
Y3QoV2lkZ2V0Kik7Ci0gICAgRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7
Citib29sIHNjcmVlbkhhc0ludmVydGVkQ29sb3JzKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBi
b29sIHNjcmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCA9IG51bGxwdHIp
OworRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7CitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxh
YmxlUmVjdChXaWRnZXQqKTsKKworV0VCQ09SRV9FWFBPUlQgYm9vbCBzY3JlZW5TdXBwb3J0c0V4
dGVuZGVkQ29sb3IoV2lkZ2V0KiA9IG51bGxwdHIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAg
IE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKik7Ci0gICAgTlNTY3JlZW4gKnNj
cmVlbkZvckRpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCk7CiAKLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0
aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9h
dFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKK05TU2NyZWVuICpzY3JlZW4oTlNXaW5kb3cgKik7
CitOU1NjcmVlbiAqc2NyZWVuKFBsYXRmb3JtRGlzcGxheUlEKTsKKworV0VCQ09SRV9FWFBPUlQg
RmxvYXRSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5TUmVjdCYsIE5TV2luZG93ICpkZXN0aW5hdGlv
bik7CitXRUJDT1JFX0VYUE9SVCBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3Qm
LCBOU1dpbmRvdyAqc291cmNlKTsKKworTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQ
b2ludCYsIE5TU2NyZWVuICopOwogCi0gICAgTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3Qg
TlNQb2ludCYsIE5TU2NyZWVuICopOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCi0gICAg
ZmxvYXQgc2NyZWVuUFBJRmFjdG9yKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNj
cmVlblNpemUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgYXZhaWxhYmxlU2NyZWVu
U2l6ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIGZsb2F0IHNjcmVlblNjYWxlRmFjdG9yKFVJU2Ny
ZWVuICogPSBudWxscHRyKTsKKworZmxvYXQgc2NyZWVuUFBJRmFjdG9yKCk7CitXRUJDT1JFX0VY
UE9SVCBGbG9hdFNpemUgc2NyZWVuU2l6ZSgpOworV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIGF2
YWlsYWJsZVNjcmVlblNpemUoKTsKK1dFQkNPUkVfRVhQT1JUIGZsb2F0IHNjcmVlblNjYWxlRmFj
dG9yKFVJU2NyZWVuICogPSBudWxscHRyKTsKKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIFBsYXRmb3JtU2NyZWVuX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuY3BwCmluZGV4IGMxMDFiZWY4OWJjNmI2MDgwOWY1ZGQxNDNlNDVlYTM1NjI0MTkwMTUu
LmI1MWQ2OGFjNjE4NzRhZTIyNDQzMDE0ODRlMTAxZjc4MTA0N2FjMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJl
c2hNb25pdG9yQ2xpZW50LmNwcApAQCAtMzQsOCArMzQsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQ6OkRpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudCgpCi0gICAgOiBtX3NjaGVkdWxlZChmYWxzZSkKLSAgICAsIG1fZGlzcGxheUlESXNTZXQo
ZmFsc2UpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKaW5kZXggMzBkYWZmM2E2
NDY4ZDdjM2NiOWJmOGY3OGI1MDAwODQ4NjZjNzZkNS4uMjk5M2QxZDAyMDk5MzU2ZjE1M2ExMDgw
MDNhMDE0NjUxYjI4ZjE5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKQEAgLTIzLDE4
ICsyMywxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBEaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnRfaAotI2RlZmluZSBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnRfaAor
I3ByYWdtYSBvbmNlCiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9N
T05JVE9SKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRvcjsKLWNsYXNzIERpc3BsYXlSZWZyZXNoTW9u
aXRvck1hbmFnZXI7CiAKIGNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCB7CiBwdWJs
aWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNw
bGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURp
c3BsYXlJRCkgY29uc3QgPSAwOwogCi0gICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkg
Y29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0KLSAgICBib29sIGhhc0Rpc3BsYXlJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGlzcGxheUlESXNTZXQ7IH0KLSAgICB2b2lkIHNldERpc3BsYXlJRChQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi0gICAgewotICAgICAgICBtX2Rpc3BsYXlJRCA9
IGRpc3BsYXlJRDsKLSAgICAgICAgbV9kaXNwbGF5SURJc1NldCA9IHRydWU7Ci0gICAgfQorICAg
IFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlE
LnZhbHVlKCk7IH0KKyAgICBib29sIGhhc0Rpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuICEhbV9k
aXNwbGF5SUQ7IH0KKyAgICB2b2lkIHNldERpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpIHsgbV9kaXNwbGF5SUQgPSBkaXNwbGF5SUQ7IH0KIAogICAgIHZvaWQgc2V0SXNTY2hl
ZHVsZWQoYm9vbCBpc1NjaGVkdWxlZCkgeyBtX3NjaGVkdWxlZCA9IGlzU2NoZWR1bGVkOyB9CiAg
ICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NoZWR1bGVkOyB9CkBAIC02
MCwxMyArNTUsMTAgQEAgcHVibGljOgogICAgIHZvaWQgZmlyZURpc3BsYXlSZWZyZXNoSWZOZWVk
ZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBtX3NjaGVkdWxlZDsK
LSAgICBib29sIG1fZGlzcGxheUlESXNTZXQ7Ci0gICAgUGxhdGZvcm1EaXNwbGF5SUQgbV9kaXNw
bGF5SUQ7CisgICAgYm9vbCBtX3NjaGVkdWxlZCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8UGxh
dGZvcm1EaXNwbGF5SUQ+IG1fZGlzcGxheUlEOwogfTsKIAogfQogCiAjZW5kaWYgLy8gVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0
ZXIuaAppbmRleCA4MTUyMDNmOTVkYTVhYTRlYmI3MmZjOWJjZDM4MmZiZDAzZGI1M2YyLi5iNmZj
YmE0M2ExZGIzNjlhNTc4MTBkNjYyMDIzZTJkM2MwMDNhYmMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmgKQEAg
LTIzLDExICsyMyw5IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBHcmFwaGljc0xheWVyVXBkYXRlcl9oCi0jZGVmaW5lIEdyYXBoaWNzTGF5ZXJV
cGRhdGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC02OCw1ICs2NiwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBHcmFwaGljc0xheWVyVXBkYXRlcl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4
IDVhYmIwYWNjZTM4YjkwZmQ4ZGNiNDE1YzVkOGQ1NzIwZjgxMzljYWYuLmQxNmY0ODQzNTI2YWJj
OWM3ZDdmYTRlOWJhY2FmYTZhODFlZmM5NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yNiw4ICsyNiw3IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgSW1hZ2VEZWNvZGVyX2gKLSNkZWZpbmUg
SW1hZ2VEZWNvZGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2lu
Y2x1ZGUgIkltYWdlU291cmNlLmgiCkBAIC00MSw2ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAordXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OworCiAgICAgLy8gSW1h
Z2VGcmFtZSByZXByZXNlbnRzIHRoZSBkZWNvZGVkIGltYWdlIGRhdGEuICBUaGlzIGJ1ZmZlciBp
cyB3aGF0IGFsbAogICAgIC8vIGRlY29kZXJzIHdyaXRlIGEgc2luZ2xlIGZyYW1lIGludG8uCiAg
ICAgY2xhc3MgSW1hZ2VGcmFtZSB7CkBAIC00MTEsNSArNDEyLDMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
CmluZGV4IDhhMGU5YmMwZWVmMTk1NTQ4NjQ3Y2RiZDgxMjNkM2Y4MDFkNDFiYzcuLjI0NjA0MTc3
MDM1N2I3MzdjOTUyNTI4MDVmNGI4ZGZmNGQ4OTU1MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5oCkBAIC0yMyw4ICsy
Myw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRl
ZiBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hY19oCi0jZGVmaW5lIFBsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCkBAIC00MCwxNiArMzksMTUgQEAgcHVi
bGljOgogfTsKIAogI2lmIFBMQVRGT1JNKENPQ09BKSAmJiBkZWZpbmVkKF9fT0JKQ19fKQotLy8g
RklYTUU6IFRoaXMgZG9lc24ndCByZWFsbHkgYmVsb25nIGhlcmUuCi1XRUJDT1JFX0VYUE9SVCBJ
bnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cg
Kik7CiAKLS8vIEZJWE1FOiBXZWJLaXQyIGhhcyBhIGxvdCBvZiBjb2RlIGNvcHkvcGFzdGVkIGZy
b20gUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMgaW4gV2ViRXZlbnRGYWN0b3J5LiBJdCBzaG91bGQg
YmUgY2FyZWZ1bGx5IHNoYXJlZCB3aXRoIFdlYkNvcmUuCi1XRUJDT1JFX0VYUE9SVCBpbnQgd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChOU0V2ZW50Kik7Ci1XRUJDT1JFX0VYUE9SVCBTdHJpbmcg
a2V5SWRlbnRpZmllckZvcktleUV2ZW50KE5TRXZlbnQqKTsKLVdFQkNPUkVfRVhQT1JUIGRvdWJs
ZSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChOU0V2ZW50Kik7CisvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaW4gdGhpcyBoZWFkZXIuCitXRUJDT1JFX0VYUE9S
VCBOU1BvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRv
dyAqKTsKKworLy8gRklYTUU6IFdlYktpdDIgaGFzIGEgbG90IG9mIGNvZGUgY29waWVkIGFuZCBw
YXN0ZWQgZnJvbSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYyBpbiBXZWJFdmVudEZhY3RvcnkuIE1v
cmUgb2YgaXQgc2hvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkNvcmUuCitXRUJDT1JFX0VYUE9SVCBp
bnQgd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChOU0V2ZW50ICopOworV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChOU0V2ZW50ICopOworV0VCQ09SRV9FWFBP
UlQgZG91YmxlIGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKE5TRXZlbnQgKik7CiAKICNlbmRpZgog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQbGF0Zm9ybUV2ZW50RmFjdG9y
eU1hY19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1F
dmVudEZhY3RvcnlNYWMubW0KaW5kZXggZTIyMjRlMGJiZGE0Yjc5NGYxNGQwOWIwZWQ1MzU1NTkw
NDE1YTE5Zi4uYTc0NzQ3M2NkMTUwNzI1YzNiYjIzZDIyZDY1ZGNiNzE2ZWQzOGM2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9y
eU1hYy5tbQpAQCAtMzgsMTUgKzM4LDE1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50
UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93ICp3
aW5kb3cpCitOU1BvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBO
U1dpbmRvdyAqd2luZG93KQogewogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgot
ICAgIHJldHVybiBJbnRQb2ludChmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0QmFzZVRv
U2NyZWVuOndpbmRvd1BvaW50XSwgc2NyZWVuRm9yV2luZG93KHdpbmRvdykpKTsKKyAgICByZXR1
cm4gZmxpcFNjcmVlblBvaW50KFt3aW5kb3cgY29udmVydEJhc2VUb1NjcmVlbjp3aW5kb3dQb2lu
dF0sIHNjcmVlbih3aW5kb3cpKTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIH0KIAot
c3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCitzdGF0
aWMgTlNQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3
aXRjaCAoW2V2ZW50IHR5cGVdKSB7CiAjaWYgZGVmaW5lZChfX0xQNjRfXykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01BWF9BTExPV0VEID49IDEwMTAwMwpAQCAtNzAsNyArNzAsNyBAQCBzdGF0aWMg
SW50UG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICNwcmFnbWEgY2xh
bmcgZGlhZ25vc3RpYyBwb3AKICAgICAgICAgICAgIHJldHVybiBnbG9iYWxQb2ludChbZXZlbnQg
bG9jYXRpb25JbldpbmRvd10sIFtldmVudCB3aW5kb3ddKTsKICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIHJldHVybiBJbnRQb2ludCgpOworICAgICAgICAgICAgcmV0dXJuIHsgMCwgMCB9
OwogICAgIH0KIH0KIApAQCAtNDg1LDcgKzQ4NSw3IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBQ
bGF0Zm9ybU1vdXNlRXZlbnQKICAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9yRXZlbnQoZXZl
bnQsIHdpbmRvd1ZpZXcpOwotICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gZ2xvYmFsUG9pbnRG
b3JFdmVudChldmVudCk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQb2ludChnbG9i
YWxQb2ludEZvckV2ZW50KGV2ZW50KSk7CiAgICAgICAgIG1fYnV0dG9uID0gbW91c2VCdXR0b25G
b3JFdmVudChldmVudCk7CiAgICAgICAgIG1fY2xpY2tDb3VudCA9IGNsaWNrQ291bnRGb3JFdmVu
dChldmVudCk7CiAKQEAgLTUxNCwxNCArNTE0LDE0IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnRCdWlsZGVyKE5TRXZlbnQgKmV2ZW50LCBOU1ZpZXcgKndpbmRvd1ZpZXcpCiAgICAg
ewogICAgICAgICAvLyBQbGF0Zm9ybUV2ZW50Ci0gICAgICAgIG1fdHlwZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gUGxhdGZvcm1FdmVudDo6V2hlZWw7Ci0gICAgICAgIG1fbW9kaWZp
ZXJzICAgICAgICAgICAgICAgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOwot
ICAgICAgICBtX3RpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICA9IGV2ZW50VGltZVN0
YW1wU2luY2UxOTcwKGV2ZW50KTsKKyAgICAgICAgbV90eXBlID0gUGxhdGZvcm1FdmVudDo6V2hl
ZWw7CisgICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAg
ICAgICBtX3RpbWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKIAogICAg
ICAgICAvLyBQbGF0Zm9ybVdoZWVsRXZlbnQKLSAgICAgICAgbV9wb3NpdGlvbiAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBwb2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAg
ICAgbV9nbG9iYWxQb3NpdGlvbiAgICAgICAgICAgICAgICAgICAgPSBnbG9iYWxQb2ludEZvckV2
ZW50KGV2ZW50KTsKLSAgICAgICAgbV9ncmFudWxhcml0eSAgICAgICAgICAgICAgICAgICAgICAg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKKyAgICAgICAgbV9wb3NpdGlvbiA9IHBvaW50Rm9y
RXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50
UG9pbnQoZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCkpOworICAgICAgICBtX2dyYW51bGFyaXR5
ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CiAKICAgICAgICAgQk9PTCBjb250aW51b3VzOwog
ICAgICAgICB3a0dldFdoZWVsRXZlbnREZWx0YXMoZXZlbnQsICZtX2RlbHRhWCwgJm1fZGVsdGFZ
LCAmY29udGludW91cyk7CkBAIC01MzUsMTAgKzUzNSwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtX2RlbHRhWSAqPSBzdGF0aWNfY2FzdDxmbG9hdD4oU2Nyb2xsYmFyOjpwaXhlbHNQZXJMaW5l
U3RlcCgpKTsKICAgICAgICAgfQogCi0gICAgICAgIG1fcGhhc2UgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gcGhhc2VGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fbW9tZW50dW1QaGFz
ZSAgICAgICAgICAgICAgICAgICAgID0gbW9tZW50dW1QaGFzZUZvckV2ZW50KGV2ZW50KTsKLSAg
ICAgICAgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzICAgICAgICAgPSBjb250aW51b3VzOwot
ICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSAgICAgICA9IFtldmVudCBpc0Rp
cmVjdGlvbkludmVydGVkRnJvbURldmljZV07CisgICAgICAgIG1fcGhhc2UgPSBwaGFzZUZvckV2
ZW50KGV2ZW50KTsKKyAgICAgICAgbV9tb21lbnR1bVBoYXNlID0gbW9tZW50dW1QaGFzZUZvckV2
ZW50KGV2ZW50KTsKKyAgICAgICAgbV9oYXNQcmVjaXNlU2Nyb2xsaW5nRGVsdGFzID0gY29udGlu
dW91czsKKyAgICAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgPSBbZXZlbnQgaXNE
aXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2VdOwogICAgIH0KIH07CiAKQEAgLTU1MywyMyArNTUz
LDIzIEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnRCdWlsZGVyKE5TRXZlbnQg
KmV2ZW50KQogICAgIHsKICAgICAgICAgLy8gUGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IGlzS2V5VXBFdmVudChldmVudCkgPyBQbGF0
Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Ci0gICAgICAgIG1fbW9k
aWZpZXJzICAgICAgICAgICAgICAgICAgICAgICAgID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQp
OwotICAgICAgICBtX3RpbWVzdGFtcCAgICAgICAgICAgICAgICAgICAgICAgICA9IGV2ZW50VGlt
ZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKKyAgICAgICAgbV90eXBlID0gaXNLZXlVcEV2ZW50KGV2
ZW50KSA/IFBsYXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKKyAg
ICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAgICAgIG1f
dGltZXN0YW1wID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOwogCiAgICAgICAgIC8v
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudAotICAgICAgICBtX3RleHQgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IHRleHRGcm9tRXZlbnQoZXZlbnQpOwotICAgICAgICBtX3VubW9kaWZpZWRU
ZXh0ICAgICAgICAgICAgICAgICAgICA9IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KGV2ZW50KTsK
LSAgICAgICAgbV9rZXlJZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgPSBrZXlJZGVudGlm
aWVyRm9yS2V5RXZlbnQoZXZlbnQpOwotICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSAg
ICAgICAgICAgICA9IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoZXZlbnQpOwotICAgICAgICBt
X25hdGl2ZVZpcnR1YWxLZXlDb2RlICAgICAgICAgICAgICA9IFtldmVudCBrZXlDb2RlXTsKLSAg
ICAgICAgbV9tYWNDaGFyQ29kZSAgICAgICAgICAgICAgICAgICAgICAgPSB3a0dldE5TRXZlbnRL
ZXlDaGFyKGV2ZW50KTsKKyAgICAgICAgbV90ZXh0ID0gdGV4dEZyb21FdmVudChldmVudCk7Cisg
ICAgICAgIG1fdW5tb2RpZmllZFRleHQgPSB1bm1vZGlmaWVkVGV4dEZyb21FdmVudChldmVudCk7
CisgICAgICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChldmVu
dCk7CisgICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID0gd2luZG93c0tleUNvZGVGb3JL
ZXlFdmVudChldmVudCk7CisgICAgICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgPSBbZXZlbnQg
a2V5Q29kZV07CisgICAgICAgIG1fbWFjQ2hhckNvZGUgPSB3a0dldE5TRXZlbnRLZXlDaGFyKGV2
ZW50KTsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAgICAgbV9hdXRv
UmVwZWF0ICAgICAgICAgICAgICAgICAgICAgICAgPSAoW2V2ZW50IHR5cGVdICE9IE5TRmxhZ3ND
aGFuZ2VkKSAmJiBbZXZlbnQgaXNBUmVwZWF0XTsKKyAgICAgICAgbV9hdXRvUmVwZWF0ID0gW2V2
ZW50IHR5cGVdICE9IE5TRmxhZ3NDaGFuZ2VkICYmIFtldmVudCBpc0FSZXBlYXRdOwogI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAotICAgICAgICBtX2lzS2V5cGFkICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IGlzS2V5cGFkRXZlbnQoZXZlbnQpOwotICAgICAgICBtX2lzU3lzdGVtS2V5
ICAgICAgICAgICAgICAgICAgICAgICA9IGZhbHNlOyAvLyBTeXN0ZW1LZXkgaXMgYWx3YXlzIGZh
bHNlIG9uIHRoZSBNYWMuCisgICAgICAgIG1faXNLZXlwYWQgPSBpc0tleXBhZEV2ZW50KGV2ZW50
KTsKKyAgICAgICAgbV9pc1N5c3RlbUtleSA9IGZhbHNlOyAvLyBTeXN0ZW1LZXkgaXMgYWx3YXlz
IGZhbHNlIG9uIHRoZSBNYWMuCiAKICAgICAgICAgLy8gQWx3YXlzIHVzZSAxMyBmb3IgRW50ZXIv
UmV0dXJuIC0tIHdlIGRvbid0IHdhbnQgdG8gdXNlIEFwcEtpdCdzIGRpZmZlcmVudCBjaGFyYWN0
ZXIgZm9yIEVudGVyLgogICAgICAgICBpZiAobV93aW5kb3dzVmlydHVhbEtleUNvZGUgPT0gVktf
UkVUVVJOKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZv
cm1TY3JlZW5NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3Jl
ZW5NYWMubW0KaW5kZXggZmUxMWVkZTEyNTNmNTQ0MzJiZGRkMjI1MGYyNWQzZWM4YTUwMTk0OS4u
ODY5ZDY1ZTJhZDI0ZmQ3NGExM2JkZmE3NjMwNDhjMjM1ZmFjNmE5YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQpAQCAtMzAsNyArMzAs
NiBAQAogI2ltcG9ydCAiRmxvYXRSZWN0LmgiCiAjaW1wb3J0ICJGcmFtZVZpZXcuaCIKICNpbXBv
cnQgIkhvc3RXaW5kb3cuaCIKLQogI2ltcG9ydCA8Q29sb3JTeW5jL0NvbG9yU3luYy5oPgogCiBl
eHRlcm4gIkMiIHsKQEAgLTQwLDEwMiArMzksOTkgQEAgYm9vbCBDR0Rpc3BsYXlVc2VzRm9yY2VU
b0dyYXkodm9pZCk7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFBsYXRmb3JtRGlz
cGxheUlEIGRpc3BsYXlJREZyb21TY3JlZW4oTlNTY3JlZW4gKnNjcmVlbikKLXsKLSAgICByZXR1
cm4gKFBsYXRmb3JtRGlzcGxheUlEKVtbW3NjcmVlbiBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0
Rm9yS2V5OkAiTlNTY3JlZW5OdW1iZXIiXSBpbnRWYWx1ZV07Ci19Ci0KIC8vIFRoZXNlIGZ1bmN0
aW9ucyBzY2FsZSBiZXR3ZWVuIHNjcmVlbiBhbmQgcGFnZSBjb29yZGluYXRlcyBiZWNhdXNlIEph
dmFTY3JpcHQvRE9NIG9wZXJhdGlvbnMKIC8vIGFzc3VtZSB0aGF0IHRoZSBzY3JlZW4gYW5kIHRo
ZSBwYWdlIHNoYXJlIHRoZSBzYW1lIGNvb3JkaW5hdGUgc3lzdGVtLgogCi1zdGF0aWMgUGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUZyb21XaWRnZXQoV2lkZ2V0KiB3aWRnZXQpCitzdGF0aWMgUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKE5TU2NyZWVuICpzY3JlZW4pCit7CisgICAgcmV0dXJu
IFtbW3NjcmVlbiBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5OkAiTlNTY3JlZW5OdW1i
ZXIiXSBpbnRWYWx1ZV07Cit9CisKK3N0YXRpYyBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQo
V2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gd2lkZ2V0LT5yb290KCk7CisgICAgYXV0byogdmlldyA9
IHdpZGdldC0+cm9vdCgpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIDA7CiAKLSAg
ICByZXR1cm4gdmlldy0+aG9zdFdpbmRvdygpLT5kaXNwbGF5SUQoKTsKKyAgICBhdXRvKiBob3N0
V2luZG93ID0gdmlldy0+aG9zdFdpbmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gaG9zdFdpbmRvdy0+ZGlzcGxheUlEKCk7CiB9CiAK
LXN0YXRpYyBOU1NjcmVlbiAqc2NyZWVuRm9yV2lkZ2V0KFdpZGdldCogd2lkZ2V0LCBOU1dpbmRv
dyAqd2luZG93KQorLy8gU2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1lbnViYXIuCitzdGF0aWMgTlNT
Y3JlZW4gKmZpcnN0U2NyZWVuKCkKIHsKLSAgICAvLyBXaWRnZXQgaXMgaW4gYW4gTlNXaW5kb3cs
IHVzZSBpdHMgc2NyZWVuLgotICAgIGlmICh3aW5kb3cpCi0gICAgICAgIHJldHVybiBzY3JlZW5G
b3JXaW5kb3cod2luZG93KTsKKyAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVuIHNjcmVl
bnNdOworICAgIGlmICghW3NjcmVlbnMgY291bnRdKQorICAgICAgICByZXR1cm4gbmlsOworICAg
IHJldHVybiBbc2NyZWVucyBvYmplY3RBdEluZGV4OjBdOworfQogCi0gICAgLy8gRGlkbid0IGdl
dCBhbiBOU1dpbmRvdzsgcHJvYmFibHkgV2ViS2l0Mi4gVHJ5IHVzaW5nIHRoZSBXaWRnZXQncyBk
aXNwbGF5IElELgotICAgIGlmIChOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yRGlzcGxheUlE
KGRpc3BsYXlGcm9tV2lkZ2V0KHdpZGdldCkpKQotICAgICAgICByZXR1cm4gc2NyZWVuOworc3Rh
dGljIE5TV2luZG93ICp3aW5kb3coV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIHdpZGdldC0+cGxhdGZvcm1XaWRnZXQo
KS53aW5kb3c7Cit9CiAKLSAgICAvLyBXaWRnZXQncyB3aW5kb3cgaXMgb2Zmc2NyZWVuLCBvciBu
byBzY3JlZW5zLiBGYWxsIGJhY2sgdG8gdGhlIGZpcnN0IHNjcmVlbiBpZiBhdmFpbGFibGUuCi0g
ICAgcmV0dXJuIHNjcmVlbkZvcldpbmRvdyhuaWwpOworc3RhdGljIE5TU2NyZWVuICpzY3JlZW4o
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgLy8gSWYgdGhlIHdpZGdldCBpcyBpbiBhIHdpbmRvdywg
dXNlIHRoYXQsIG90aGVyd2lzZSB1c2UgdGhlIGRpc3BsYXkgSUQgZnJvbSB0aGUgaG9zdCB3aW5k
b3cuCisgICAgLy8gRmlyc3QgY2FzZSBpcyBmb3Igd2hlbiB0aGUgTlNXaW5kb3cgaXMgaW4gdGhl
IHNhbWUgcHJvY2Vzcywgc2Vjb25kIGNhc2UgZm9yIHdoZW4gaXQncyBub3QuCisgICAgaWYgKGF1
dG8gc2NyZWVuRnJvbVdpbmRvdyA9IHdpbmRvdyh3aWRnZXQpLnNjcmVlbikKKyAgICAgICAgcmV0
dXJuIHNjcmVlbkZyb21XaW5kb3c7CisgICAgcmV0dXJuIHNjcmVlbihkaXNwbGF5SUQod2lkZ2V0
KSk7CiB9CiAKIGludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICBOU1dpbmRv
dyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIDog
bmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JXaWRnZXQod2lkZ2V0LCB3aW5k
b3cpOwotICAgIHJldHVybiBOU0JpdHNQZXJQaXhlbEZyb21EZXB0aChzY3JlZW4uZGVwdGgpOwor
ICAgIHJldHVybiBOU0JpdHNQZXJQaXhlbEZyb21EZXB0aChzY3JlZW4od2lkZ2V0KS5kZXB0aCk7
CiB9CiAKIGludCBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHdpZGdldCkKIHsKLSAg
ICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3
aW5kb3ddIDogbmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JXaWRnZXQod2lk
Z2V0LCB3aW5kb3cpOwotICAgIHJldHVybiBOU0JpdHNQZXJTYW1wbGVGcm9tRGVwdGgoc2NyZWVu
LmRlcHRoKTsKKyAgICByZXR1cm4gTlNCaXRzUGVyU2FtcGxlRnJvbURlcHRoKHNjcmVlbih3aWRn
ZXQpLmRlcHRoKTsKIH0KIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KikKIHsKLSAg
ICAvLyBBdCB0aGUgbW9tZW50IHRoaXMgaXMgYSBzeXN0ZW0td2lkZSBhY2Nlc3NpYmlsaXR5IHNl
dHRpbmcsCi0gICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgc2NyZWVuIHdlJ3Jl
IHVzaW5nLgorICAgIC8vIFRoaXMgaXMgYSBzeXN0ZW0td2lkZSBhY2Nlc3NpYmlsaXR5IHNldHRp
bmcsIHNhbWUgb24gYWxsIHNjcmVlbnMuCiAgICAgcmV0dXJuIENHRGlzcGxheVVzZXNGb3JjZVRv
R3JheSgpOwogfQogCiBib29sIHNjcmVlbkhhc0ludmVydGVkQ29sb3JzKCkKIHsKLSAgICAvLyBB
dCB0aGUgbW9tZW50IHRoaXMgaXMgYSBzeXN0ZW0td2lkZSBhY2Nlc3NpYmlsaXR5IHNldHRpbmcs
Ci0gICAgLy8gc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgc2NyZWVuIHdlJ3JlIHVzaW5n
LgorICAgIC8vIFRoaXMgaXMgYSBzeXN0ZW0td2lkZSBhY2Nlc3NpYmlsaXR5IHNldHRpbmcsIHNh
bWUgb24gYWxsIHNjcmVlbnMuCiAgICAgcmV0dXJuIENHRGlzcGxheVVzZXNJbnZlcnRlZFBvbGFy
aXR5KCk7CiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAg
IE5TV2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdp
bmRvd10gOiBuaWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldpZGdldCh3aWRn
ZXQsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW4gZnJhbWVdLCB3aW5k
b3cpOworICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuKHdpZGdldCkgZnJhbWVdLCB3aW5k
b3cod2lkZ2V0KSk7CiB9CiAKIEZsb2F0UmVjdCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCog
d2lkZ2V0KQogewotICAgIE5TV2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0
Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBuaWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVl
bkZvcldpZGdldCh3aWRnZXQsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3Jl
ZW4gdmlzaWJsZUZyYW1lXSwgd2luZG93KTsKKyAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVl
bih3aWRnZXQpIHZpc2libGVGcmFtZV0sIHdpbmRvdyh3aWRnZXQpKTsKIH0KIAotTlNTY3JlZW4g
KnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAqd2luZG93KQorTlNTY3JlZW4gKnNjcmVlbihOU1dp
bmRvdyAqd2luZG93KQogewotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBbd2luZG93IHNjcmVlbl07
IC8vIG5pbCBpZiB0aGUgd2luZG93IGlzIG9mZi1zY3JlZW4KLSAgICBpZiAoc2NyZWVuKQotICAg
ICAgICByZXR1cm4gc2NyZWVuOwotCi0gICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBz
Y3JlZW5zXTsKLSAgICBpZiAoW3NjcmVlbnMgY291bnRdID4gMCkKLSAgICAgICAgcmV0dXJuIFtz
Y3JlZW5zIG9iamVjdEF0SW5kZXg6MF07IC8vIHNjcmVlbiBjb250YWluaW5nIHRoZSBtZW51YmFy
Ci0KLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBbd2luZG93IHNjcmVlbl0gPyA6IGZpcnN0
U2NyZWVuKCk7CiB9CiAKLU5TU2NyZWVuICpzY3JlZW5Gb3JEaXNwbGF5SUQoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKQorTlNTY3JlZW4gKnNjcmVlbihQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpCiB7CiAgICAgZm9yIChOU1NjcmVlbiAqc2NyZWVuIGluIFtOU1NjcmVlbiBzY3JlZW5z
XSkgewotICAgICAgICBpZiAoZGlzcGxheUlERnJvbVNjcmVlbihzY3JlZW4pID09IGRpc3BsYXlJ
RCkKKyAgICAgICAgaWYgKFdlYkNvcmU6OmRpc3BsYXlJRChzY3JlZW4pID09IGRpc3BsYXlJRCkK
ICAgICAgICAgICAgIHJldHVybiBzY3JlZW47CiAgICAgfQotICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIGZpcnN0U2NyZWVuKCk7CiB9CiAKIGJvb2wgc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENv
bG9yKFdpZGdldCogd2lkZ2V0KQpAQCAtMTQ3LDE5ICsxNDMsMTQgQEAgYm9vbCBzY3JlZW5TdXBw
b3J0c0V4dGVuZGVkQ29sb3IoV2lkZ2V0KiB3aWRnZXQpCiAgICAgaWYgKCF3aWRnZXQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbd2lkZ2V0LT5wbGF0
Zm9ybVdpZGdldCgpIHdpbmRvd107Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldp
ZGdldCh3aWRnZXQsIHdpbmRvdyk7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBz
Y3JlZW4uY29sb3JTcGFjZS5DR0NvbG9yU3BhY2U7CisgICAgYXV0byBjb2xvclNwYWNlID0gc2Ny
ZWVuKHdpZGdldCkuY29sb3JTcGFjZS5DR0NvbG9yU3BhY2U7CiAKICNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAogICAgIHJldHVybiBDR0NvbG9yU3BhY2VJc1dp
ZGVHYW11dFJHQihjb2xvclNwYWNlKTsKICNlbHNlCi0gICAgYm9vbCBpc1dpZGVHYW11dCA9IGZh
bHNlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGljY0RhdGEgPSBhZG9wdENGKENHQ29sb3JT
cGFjZUNvcHlJQ0NQcm9maWxlKGNvbG9yU3BhY2UpKTsKLSAgICBSZXRhaW5QdHI8Q29sb3JTeW5j
UHJvZmlsZVJlZj4gcHJvZmlsZSA9IGFkb3B0Q0YoQ29sb3JTeW5jUHJvZmlsZUNyZWF0ZShpY2NE
YXRhLmdldCgpLCBOVUxMKSk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIGlzV2lkZUdhbXV0
ID0gQ29sb3JTeW5jUHJvZmlsZUlzV2lkZUdhbXV0KHByb2ZpbGUuZ2V0KCkpOwotICAgIHJldHVy
biBpc1dpZGVHYW11dDsKKyAgICBhdXRvIGljY0RhdGEgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNv
cHlJQ0NQcm9maWxlKGNvbG9yU3BhY2UpKTsKKyAgICBhdXRvIHByb2ZpbGUgPSBhZG9wdENGKENv
bG9yU3luY1Byb2ZpbGVDcmVhdGUoaWNjRGF0YS5nZXQoKSwgbnVsbHB0cikpOworICAgIHJldHVy
biBwcm9maWxlICYmIENvbG9yU3luY1Byb2ZpbGVJc1dpZGVHYW11dChwcm9maWxlLmdldCgpKTsK
ICNlbmRpZgogI2VuZGlmCiB9CkBAIC0xNjcsMTQgKzE1OCwxNCBAQCBib29sIHNjcmVlblN1cHBv
cnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCkKIEZsb2F0UmVjdCB0b1VzZXJTcGFjZShj
b25zdCBOU1JlY3QmIHJlY3QsIE5TV2luZG93ICpkZXN0aW5hdGlvbikKIHsKICAgICBGbG9hdFJl
Y3QgdXNlclJlY3QgPSByZWN0OwotICAgIHVzZXJSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JX
aW5kb3coZGVzdGluYXRpb24pIGZyYW1lXSkgLSAodXNlclJlY3QueSgpICsgdXNlclJlY3QuaGVp
Z2h0KCkpKTsgLy8gZmxpcAorICAgIHVzZXJSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW4oZGVzdGlu
YXRpb24pIGZyYW1lXSkgLSAodXNlclJlY3QueSgpICsgdXNlclJlY3QuaGVpZ2h0KCkpKTsgLy8g
ZmxpcAogICAgIHJldHVybiB1c2VyUmVjdDsKIH0KIAogTlNSZWN0IHRvRGV2aWNlU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQogewogICAgIEZsb2F0UmVjdCBk
ZXZpY2VSZWN0ID0gcmVjdDsKLSAgICBkZXZpY2VSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JX
aW5kb3coc291cmNlKSBmcmFtZV0pIC0gKGRldmljZVJlY3QueSgpICsgZGV2aWNlUmVjdC5oZWln
aHQoKSkpOyAvLyBmbGlwCisgICAgZGV2aWNlUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVuKHNvdXJj
ZSkgZnJhbWVdKSAtIChkZXZpY2VSZWN0LnkoKSArIGRldmljZVJlY3QuaGVpZ2h0KCkpKTsgLy8g
ZmxpcAogICAgIHJldHVybiBkZXZpY2VSZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQppbmRleCA3ZGZjMDVhNmJjZGYxZTNmZjdjMzA5NjVkYzg5NWM3ZmYzZjFjNWMw
Li5iMGRjZDlhOWFhNmFlZmY0Y2RmNmFkZGUwNGVmN2NmMjlhZTQxODc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTk3Niw3ICs5NzYsNyBAQCAtICh2b2lkKV9kcmFn
U291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRp
b24pb3BlcmF0aQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1F
OiBUaGVzZSBhcmUgZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSBy
ZWFsIG9uZXMgaW5zdGVhZC4KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQo
d2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRnZXQo
KSB3aW5kb3ddKSwKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93
TG9jKSwgSW50UG9pbnQoZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRn
ZXQoKSB3aW5kb3ddKSksCiAgICAgICAgIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpLCBXZWJD
b3JlOjpGb3JjZUF0Q2xpY2spOwogICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLmRyYWdTb3VyY2VFbmRlZEF0KGV2ZW50LCAoRHJhZ09wZXJhdGlvbilvcGVyYXRpb24pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3Rvcnku
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQppbmRleCBj
ZWJiYzI2OTAxYmU3OTNhODhiYWNiZjljOTJjN2Q1MzkyNzgwN2RjLi5jZjc3NDI3ZjU0ZWY0ZjE5
MGEzNmI1YzY4OTQyNzZjMDU0NDJlNjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5tbQpAQCAtMTM3LDM0ICsxMzcsNiBAQCBzdGF0aWMgaW50IGNsaWNr
Q291bnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKIH0KIAotc3RhdGljIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKndpbmRv
dykKLXsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gW3dpbmRvdyBzY3JlZW5dOyAvLyBuaWwgaWYg
dGhlIHdpbmRvdyBpcyBvZmYtc2NyZWVuCi0gICAgaWYgKHNjcmVlbikKLSAgICAgICAgcmV0dXJu
IHNjcmVlbjsKLSAgICAKLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNd
OwotICAgIGlmIChbc2NyZWVucyBjb3VudF0gPiAwKQotICAgICAgICByZXR1cm4gW3NjcmVlbnMg
b2JqZWN0QXRJbmRleDowXTsgLy8gc2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1lbnViYXIKLSAgICAK
LSAgICByZXR1cm4gbmlsOwotfQotCi1zdGF0aWMgTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29u
c3QgTlNQb2ludCYgc2NyZWVuUG9pbnQsIE5TU2NyZWVuICpzY3JlZW4pCi17Ci0gICAgTlNQb2lu
dCBmbGlwcGVkUG9pbnQgPSBzY3JlZW5Qb2ludDsKLSAgICBmbGlwcGVkUG9pbnQueSA9IE5TTWF4
WShbc2NyZWVuIGZyYW1lXSkgLSBmbGlwcGVkUG9pbnQueTsKLSAgICByZXR1cm4gZmxpcHBlZFBv
aW50OwotfQotCi1zdGF0aWMgTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5k
b3dQb2ludCwgTlNXaW5kb3cgKndpbmRvdykKLXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICByZXR1cm4gZmxpcFNjcmVlblBvaW50KFt3aW5kb3cgY29udmVydEJhc2VU
b1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cpKTsKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKLX0KLQogc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JF
dmVudChOU0V2ZW50ICpldmVudCkKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgewpAQCAt
MTg3LDcgKzE1OSw3IEBAIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVu
dCAqZXZlbnQpCiAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKICAgICBjYXNlIE5TU2Nyb2xsV2hl
ZWw6CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybiBnbG9iYWxQ
b2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtldmVudCB3aW5kb3ddKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6Omdsb2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2
ZW50IHdpbmRvd10pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0K
aW5kZXggZjBmNDYzZDMxNjRhYTNhYjBkNGU4ODI5MjAyY2MzNWE1YTAyMzNkYi4uYjIyMWQyMjJh
Y2UxNjY2ZmJkN2M2Y2YyYTY5NWFjMmM4NzM4ZjFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXMoQ0dGbG9hdCBvbGRC
YWNraW5nU2NhbGVGYWN0b3IKIHZvaWQgV2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVl
bigpCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fdGFyZ2V0V2luZG93Rm9yTW92ZVByZXBh
cmF0aW9uID8gbV90YXJnZXRXaW5kb3dGb3JNb3ZlUHJlcGFyYXRpb24gOiBtX3ZpZXcud2luZG93
OwotICAgIG1fcGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKChQbGF0Zm9ybURpc3BsYXlJRClb
W1tbd2luZG93IHNjcmVlbl0gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5TU2Ny
ZWVuTnVtYmVyIl0gaW50VmFsdWVdKTsKKyAgICBtX3BhZ2UtPndpbmRvd1NjcmVlbkRpZENoYW5n
ZShbW1tbd2luZG93IHNjcmVlbl0gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5T
U2NyZWVuTnVtYmVyIl0gaW50VmFsdWVdKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93
RGlkQ2hhbmdlTGF5ZXJIb3N0aW5nKCkKQEAgLTI3NzgsNyArMjc3OCw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmRyYWdnZWRJbWFnZShOU0ltYWdlICppbWFnZSwgQ0dQb2ludCBlbmRQb2ludCwgTlNE
cmFnT3BlcmF0aW9uCiAgICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VEcmFnZ2VkIGV2ZW50cyBm
cm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVwIGV2ZW50LgogICAgIG1f
aWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyA9IHRydWU7CiAKLSAgICBtX3BhZ2UtPmRyYWdFbmRl
ZChXZWJDb3JlOjpJbnRQb2ludCh3aW5kb3dNb3VzZUxvYyksIFdlYkNvcmU6Omdsb2JhbFBvaW50
KHdpbmRvd01vdXNlTG9jLCBtX3ZpZXcud2luZG93KSwgb3BlcmF0aW9uKTsKKyAgICBtX3BhZ2Ut
PmRyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCh3aW5kb3dNb3VzZUxvYyksIFdlYkNvcmU6Oklu
dFBvaW50KFdlYkNvcmU6Omdsb2JhbFBvaW50KHdpbmRvd01vdXNlTG9jLCBtX3ZpZXcud2luZG93
KSksIG9wZXJhdGlvbik7CiB9CiAKIHN0YXRpYyBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFn
cyBhcHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhOU1ZpZXcgKnZpZXcsIGlkIDxOU0RyYWdnaW5nSW5m
bz4gZHJhZ2dpbmdJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IDFmOWRjMDQwYzdjOGNjYzVjMWUwZjU5MzUzNjEyMzM1ZWZhZmUyOTIuLmIzZjhkZjliZTdk
NmNhMjliZGUwMzRhYzQyNWZlZWQ0N2I3MjAyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBhZ2VQcm94eV9oCi0jZGVmaW5lIFdlYlBh
Z2VQcm94eV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1
ZGUgIkFQSVNlc3Npb24uaCIKQEAgLTY2Niw3ICs2NjUsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEludHJpbnNpY0RldmljZVNj
YWxlRmFjdG9yKGZsb2F0KTsKICAgICB2b2lkIHNldEN1c3RvbURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KTsKLSAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7
CisgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5
SUQpOwogCiAgICAgdm9pZCBzZXRVc2VGaXhlZExheW91dChib29sKTsKICAgICB2b2lkIHNldEZp
eGVkTGF5b3V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CkBAIC0xODMxLDUgKzE4MzAs
MyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBX
ZWJQYWdlUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZGE2NmMzYTU3MjBhNzU5YjU0
MTk2YmM1ODliOTM4YTQxNTdmOWY4OC4uYjNhMDgxOTQ0MTI0M2FiY2ViOWQ0YjUzM2FiY2NjMWQw
OWYyOTU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yNCw4ICsyNCw3IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJDaHJvbWVDbGll
bnRfaAotI2RlZmluZSBXZWJDaHJvbWVDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lQ2xpZW50Lmg+CkBAIC0yMTAs
NyArMjA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5n
KFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7CiAKICNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIFJlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAg
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25z
dCBvdmVycmlkZQpAQCAtMzQ2LDUgKzM0NSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkNocm9tZUNsaWVudF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlz
cGxheVJlZnJlc2hNb25pdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKaW5kZXggOGM1YTVj
OTVkZTYyN2UwZTcyODM1YmM0ZDEyODcyOTdmYzEwNjA1MC4uMzJiN2Y1YWExN2EzMDYzOGMyYmQw
YjA4MTQ4Y2NmZDA3ZDg2OGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRy
ZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaApAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3Jf
aAotI2RlZmluZSBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3JfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9S
KQogCkBAIC0zNSw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZUxheWVyVHJlZURp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCwg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEmIGRyYXdpbmdBcmVhKQorICAgIHN0YXRpYyBSZWY8
UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGUoV2ViQ29yZTo6UGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYgZHJh
d2luZ0FyZWEpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVMYXll
clRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlELCBkcmF3aW5nQXJlYSkpOwogICAg
IH0KQEAgLTQ3LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkVXBkYXRlTGF5ZXJzKCk7
CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hN
b25pdG9yKFBsYXRmb3JtRGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYpOwor
ICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3Jl
OjpQbGF0Zm9ybURpc3BsYXlJRCwgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEmKTsKIAogICAg
IFdlYWtQdHI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+IG1fZHJhd2luZ0FyZWE7CiB9OwpA
QCAtNTUsNSArNTQsMyBAQCBwcml2YXRlOgogfQogCiAjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJl
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDlkODNlMDY0Njc0NmIyYTI4ZjdkMGE3N2JmOTE1
YzRhMWRkYzNkZmMuLmU0YzczYzcyNTZhOGE0OTEzYTJkZDI1ZDViMTE1ZTY4NzVlZDk3ZTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBA
IC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBEcmF3aW5nQXJlYV9oCi0jZGVmaW5lIERyYXdpbmdBcmVhX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVl
Q29udGV4dC5oIgpAQCAtMTExLDcgKzExMCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
c2NoZWR1bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpID0gMDsKIAogI2lmIFVT
RShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgdmlydHVhbCBS
ZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVz
aE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpOworICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6
OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheUlEKTsKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dS
QVBISUNTX01VTFRJUFJPQ0VTUykKQEAgLTE4Miw1ICsxODEsMyBAQCBwcml2YXRlOgogU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlRvVmFsdWVUeXBlTmFtZSkgXAogICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OkRyYXdpbmdBcmVhJiBhcmVhKSB7IHJldHVy
biBhcmVhLnR5cGUoKSA9PSBXZWJLaXQ6OkFyZWFUeXBlOyB9IFwKIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKLQotI2VuZGlmIC8vIERyYXdpbmdBcmVhX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEuaAppbmRleCBkZTNjYzI4NzQ5YzU2NjBjMzk0OTYzOWI4OWIwMGVmMDVk
ZThlNTgyLi5iNWI2ZTViZWJhOTllNTVhNjkxODc1ZTQ2ZmY0MjllYmI2NDAzYjRmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYV9oCi0jZGVmaW5lIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhX2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJHcmFwaGlj
c0xheWVyQ0FSZW1vdGUuaCIKQEAgLTc0LDcgKzczLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
YWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwog
Ci0gICAgUmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxh
eVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbERl
c3Ryb3lEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9y
Kik7CiAKICAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBX
ZWJDb3JlOjpGcmFtZVZpZXcqKSBvdmVycmlkZTsKQEAgLTE3OSw1ICsxNzgsMyBAQCBwcml2YXRl
OgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRFJBV0lO
R19BUkVBKFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLCBEcmF3aW5nQXJlYVR5cGVSZW1vdGVM
YXllclRyZWUpCi0KLSNlbmRpZiAvLyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYV9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279778</attachid>
            <date>2016-05-25 09:35:22 -0700</date>
            <delta_ts>2016-05-25 20:12:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158067-20160525093629.patch</filename>
            <type>text/plain</type>
            <size>209127</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZmOTdlMGYwM2NjZDE5
MjVkNzY1YWFkNmM3Mzg0YWI1ZDNlMTc1Ni4uNzJiMmVkODI1OGNkYTE1N2EwOWQ5MGUwZDQ1NzQ2
NTQ2NWQ4ZjljNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMSBAQAorMjAxNi0wNS0yNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWEgcXVlcmllcyBhbmQg
cGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVhbWxpbmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NSFRNTExpbmtFbGVtZW50IF9tZWRpYVF1ZXJ5TWF0Y2hlc10p
OiBVc2UgcmVmZXJlbmNlcywgdXNlIGZhc3RHZXRBdHRyaWJ1dGUsCisgICAgICAgIHBhc3MgYSBk
b2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUgdG8gdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRvciBh
bmQgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55LmluOiBVc2UgImV4cHJlc3Npb24iIGluc3RlYWQgb2YgImV4cCIg
Zm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb25zLgorICAgICAgICBVcGRhdGUgdmVjdG9ycyBhbmQg
YXJndW1lbnRzIHRvIG1vdmUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiB1c2lu
ZyB1bmlxdWVfcHRyLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDogVXNlIHByYWdt
YSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBN
YWRlIG1vcmUgb3ZlcnJpZGVzIHByaXZhdGUgYW5kIG1hcmtlZCB0aGVtIGZpbmFsLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OlNv
dXJjZVNpemU6OlNvdXJjZVNpemUpOiBBZGRlZCBtaXNzaW5nIFdURk1vdmUgdG8gYXZvaWQgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50IGNodXJuLiBDaGFuZ2VkIHR5cGUgb2YgZXhwcmVzc2lvbiB0
byBubyBsb25nZXIgdXNlIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNvdXJjZVNpemUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDogQ2hhbmdl
ZCBTb3VyY2VTaXplOjpleHByZXNzaW9uIHRvIG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAg
ICAgICAgQWxzbyBjaGFuZ2VkIFNvdXJjZVNpemU6Omxlbmd0aCB0byBiZSBSZWYgaW5zdGVhZCBv
ZiBSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUZlYXR1cmVOYW1lczo6aW5pdCk6IFN0cmVhbWxpbmVkIGEgYml0LiBSZW1vdmVkICJNZWRpYUZl
YXR1cmUiIHN1ZmZpeCBmcm9tCisgICAgICAgIG5hbWVzIG9mIG1lZGlhIGZlYXR1cmUgc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5oOiBVc2UgcHJhZ21hIG9uY2Uu
IENoYW5nZWQgbWVkaWEgZmVhdHVyZSBuYW1lIGdsb2JhbHMKKyAgICAgICAgdG8gdXNlIG5vcm1h
bCBXZWJLaXQgbmFtaW5nIHN0eWxlIGluc3RlYWQgb2YgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVy
c2NvcmVzLgorICAgICAgICBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkuIFJlbW92ZWQgIk1lZGlhRmVh
dHVyZSIgc3VmZml4IGZyb20gbmFtZXMgb2YgbWVkaWEgZmVhdHVyZSBzdHJpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjpNZWRpYVF1ZXJ5U2V0KTogU2ltcGxpZmllZCBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHRoZSBx
dWVyaWVzCisgICAgICAgIHZlY3RvciBjYW4gbm93IGJlIGNvcGllZCBub3JtYWxseS4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTWVkaWFEZXNjcmlwdG9yKTogTm9ybWFsaXplZCB0eXBlcyBhbmQg
Y2hhbmdlZCB0byB1c2UgaXNBU0NJSUFscGhhbnVtZXJpYy4KKyAgICAgICAgVGhlIG9sZCBjb2Rl
IHdhcyBub3QgaGFuZGxpbmcgJzAnIHRoZSB3YXkgdGhlIGNvbW1lbnQgc2FpZCBpdCBkaWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKTogQWRkZWQuIEhl
bHBlciBmdW5jdGlvbiB0byBjdXQgZG93biBvbiByZWR1bmRhbnQKKyAgICAgICAgY29kZSBpbiBm
dW5jdGlvbnMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6
IFVzZSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMgaW5zdGVhZCBvZgorICAgICAg
ICBzdHJpcFdoaXRlU3BhY2UuIFN0cmVhbWxpbmVkIGxvZ2ljIHVzaW5nIGhlbHBlciBmdW5jdGlv
bi4gVXBkYXRlZCB0byB1c2UgYSB2ZWN0b3Igb2YKKyAgICAgICAgcXVlcmllcyBpbnN0ZWFkIG9m
IGEgdmVjdG9yIG9mIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjphZGQpOiBVc2UgaW50ZXJuYWxQYXJzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6YWRk
TWVkaWFRdWVyeSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBub3QgYmUgdW5pcXVlX3B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCk6IFVzZSBtb2Rlcm4g
Zm9yIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6Ok1lZGlhTGlzdCk6IEluaXRp
YWxpemUgcG9pbnRlcnMgdG8gbnVsbCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgICAgICBy
YXRoZXIgdGhhbiBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dCk6IFJlbW92ZWQgdW5oZWxwZnVsIGxvY2FsIHZhcmlhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjppdGVtKTogVXBkYXRlZCBzaW5jZSBxdWVyaWVz
IG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZXMgdG8gcmVm
ZXJlbmNlcworICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdpdGggYXNzZXJ0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQpOiBVcGRhdGVk
IHRvIG1vZGVybml6ZS4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogVXNlIHByYWdtYSBv
bmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgQ2hhbmdlZCB2ZWN0b3IgdG8gY29udGFpbiBtZWRpYSBxdWVyaWVzIGluc3RlYWQg
b2YgdW5pcXVlX3B0ci4gVXNlIG51bGxwdHIgaW5zdGVhZCBvZiAwLgorICAgICAgICBJbml0aWFs
aXplIHBvaW50ZXJzIHRvIG51bGwgaGVyZS4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogRGVsZXRlZCBub3ctdW5uZWVkZWQgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4g
Qm90aCBhcmUKKyAgICAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCB3aXRob3V0IHVzIHdyaXRpbmcg
dGhlbSBleHBsaWNpdGx5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6c2VyaWFsaXpl
KTogUmV3cm90ZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
TWVkaWFRdWVyeSk6IFVwZGF0ZXMgc2luY2UgZXhwcmVzc2lvbnMgYXJlIG5vIGxvbmdlciB1bmlx
dWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IENoYW5nZWQg
cmV0dXJuIHR5cGUgdG8gcmVmZXJlbmNlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDog
VXNlIHByYWdtYSBvbmNlLiBBZGRlZCBpbmNsdWRlIHNpbmNlIHRoaXMgbm93IGluY2x1ZGVzIG1l
ZGlhIHF1ZXJ5CisgICAgICAgIGV4cHJlc3Npb25zLCBub3QganVzdCB1bmlxdWVfcHRyLiBEZWxl
dGVkIHRoZSB1bm5lZWRlZCBjb3B5IGZ1bmN0aW9uLgorCisgICAgICAgICogY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydERlcGVuZGVudCk6
IE1vdmVkIHRoaXMgaGVyZS4gSXQgdXNlZCB0byBiZSBhIG1lbWJlciBmdW5jdGlvbiBvZgorICAg
ICAgICBNZWRpYVF1ZXJ5RXhwLCBidXQgdGhpcyBmaWxlIGhhcyBhIGxvdCBtb3JlIGZ1bmN0aW9u
cyBhYm91dCBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaG93CisgICAgICAgIHRoZXkgYXJlIGV2YWx1
YXRlZCwgc28gaXQgcmVhbGx5IGJlbG9uZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOiBDaGFuZ2VkIGNvbnN0cnVjdG9y
IHRvIHRha2UgYQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUuIEluaXRpYWxp
emUgdGhlIGZhbGxiYWNrIHJlc3VsdCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogQ2hhbmdlZCB0aGUgYXJn
dW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVWYWx1
ZSk6IE1hZGUgYm90aCBvZiB0aGUgYXJndW1lbnRzIHNlcGFyYXRlIHRlbXBsYXRlIHR5cGVzLiBU
aGlzCisgICAgICAgIGhlbHBzIHVzIGNvbXBhcmUgYW4gaW50ZWdlciB0byBhIGRvdWJsZSB3aXRo
b3V0IGxvdHMgb2YgdHlwZSBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVBc3BlY3RS
YXRpb1ZhbHVlKTogQ2hhbmdlZCB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBnb3Qgcmlk
IG9mCisgICAgICAgIHRoZSBjYXN0cyB0byBpbnQgc28gd2Ugd2lsbCBkbyB0aGUgd29yayBpbiBk
b3VibGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVZhbHVlKTogUmVwbGFjZWQg
dGhlIG9sZCBudW1iZXJWYWx1ZSBmdW5jdGlvbiB3aXRoIHRoaXMuIFNpbmNlIHZhbHVlcworICAg
ICAgICBhcmUgc3RvcmVkIGFzIGRvdWJsZXMsIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGRvdWJs
ZSByYXRoZXIgdGhhbiBmbG9hdC4KKyAgICAgICAgKFdlYkNvcmU6Onplcm9FdmFsdWF0ZSk6IEFk
ZGVkLiBIZWxwZnVsIGZvciB0aGUgbWFueSBmdW5jdGlvbnMgdGhhdCBqdXN0IG5lZWQgdG8KKyAg
ICAgICAgZXZhbHVhdGUgYXMgMC4KKyAgICAgICAgKFdlYkNvcmU6Om9uZUV2YWx1YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2xvckV2YWx1YXRlKTogUmVuYW1lZCB0aGlzIGFuZCBh
bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8g
dXNlIHRoZSBuZXcgZG91YmxlVmFsdWUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckluZGV4RXZhbHVhdGUpOiBVc2UgemVyb0V2YWx1YXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JHYW11dEV2YWx1YXRlKTogTm8gbG9uZ2VyIHVzZSBwYWdlIGp1c3QgdG8gZ2V0IGZyb20gdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBtYWluIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6bW9u
b2Nocm9tZUV2YWx1YXRlKTogU2ltcGxpZnkgbG9naWMgdXNpbmcgemVyb0V2YWx1YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZSk6IFVzZSBhdXRvIGZvciB0aGUg
a2V5d29yZDsgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkV2
YWx1YXRlKTogVXNlIGVhcmx5IHJldHVybiBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmFzcGVj
dFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUFzcGVjdFJh
dGlvRXZhbHVhdGUpOiBTaW1wbGlmaWVkIGxvZ2ljIGFuZCByZW1vdmVkIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpldmFsdWF0ZVJlc29sdXRpb24pOiBBZGRlZCBhIGNvdXBsZSBudWxs
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IFJl
bmFtZWQuIEFkZGVkIG1pc3NpbmcgdHlwZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z3JpZEV2YWx1YXRlKTog
VXNlIHplcm9FdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBBZGRl
ZCBhIG51bGwgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VIZWlnaHRFdmFsdWF0ZSk6
IFVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VXaWR0aEV2YWx1YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6d2lkdGhFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
bWluQ29sb3JFdmFsdWF0ZSk6IFVwZGF0ZWQgbmFtZSBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6
bWF4Q29sb3JFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWluQ29sb3JJbmRl
eEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhDb2xvckluZGV4RXZhbHVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk1vbm9jaHJvbWVFdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4TW9ub2Nocm9tZUV2YWx1YXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjptaW5Bc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjptYXhBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptYXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6bWluSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1heEhlaWdo
dEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW5XaWR0aEV2YWx1YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhXaWR0aEV2YWx1YXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjptaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6bWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1pbkRldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1h
eERldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pblJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4UmVzb2x1dGlvbkV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25FdmFsdWF0ZSk6IFVz
ZSBvbmVFdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25FdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtMmRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtM2RFdmFsdWF0ZSk6IFNpbXBsaWZ5IHVzaW5nIHplcm9F
dmFsdWF0ZSBhbmQgb25lRXZhbHVhdGUuCisgICAgICAgIChXZWJDb3JlOjp2aWV3TW9kZUV2YWx1
YXRlKTogU2ltcGxpZmllZCBsb2dpYyB3aXRoIGZld2VyIGxvY2FsIHZhcmlhYmxlcyBhbmQgdGhl
IG5hbWUgImtleXdvcmQiLgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9QbGF5YWJsZUlubGluZUV2
YWx1YXRlKTogVXNlIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhvdmVyRXZhbHVhdGUp
OiBTaW1wbGlmeSB1c2luZyBrZXl3b3JkLgorICAgICAgICAoV2ViQ29yZTo6YW55SG92ZXJFdmFs
dWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckV2YWx1
YXRlKTogU2ltcGxpZnkgdXNpbmcga2V5d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OmFueVBvaW50
ZXJFdmFsdWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTog
QWRkZWQuIEhlbHBlciBmb3IgYnVpbGRpbmcgdXAgdGhlIG1lZGlhIHF1ZXJ5IGZ1bmN0aW9uIG1h
cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogTW92
ZWQgY29kZSB0byBidWlsZCB0aGUgZnVuY3Rpb24gbWFwIGluIGhlcmUgaW4KKyAgICAgICAgYSBs
YW1iZGEsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBhIHNlcGFyYXRlIGdsb2JhbCBmdW5jdGlv
bi4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bmVlZGVkIGluY2x1ZGVzLiBTaW1wbGlmaWVkIGNvbW1lbnRzIGFuZAorICAg
ICAgICBtb2Rlcm5pemVkIHRoZWlyIHN0eWxlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlF
eHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcik6
IFJlbmFtZWQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgdGhpcyBkb2VzLiBVcGRhdGVkCisgICAg
ICAgIHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSB0ZSBuZXcgZmVhdHVyZSBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
SW50ZWdlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoTm9u
TmVnYXRpdmVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlk
V2l0aFplcm9Pck9uZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBc3BlY3RSYXRpb0Zl
YXR1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aG91dFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJX
aXRoVW5pdCk6IEFkZGVkLiBIZWxwZXIgdGhhdCBjYWxscyBtdWx0aXBsZSBmdW5jdGlvbnMgYWJv
dmUuCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzU2xhc2gpOiBBZGRlZC4gSGVscGVyIHRvIG1ha2UgYXNwZWN0
IHJhdGlvIGNvZGUgYmVsb3cgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
c2l0aXZlSW50ZWdlclZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOiBSZWFycmFuZ2VkIGNvZGUgdG8gYmUg
bXVjaCBsZXNzIHdvcmR5IGFuZAorICAgICAgICB0byBub3QgdXNlIGN1cnJlbnQvbmV4dC4KKwor
ICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6IFVzZSBwcmFnbWEgb25jZS4gUmVuYW1lZCBj
bGFzcyB0byBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi4gUmVtb3ZlZAorICAgICAgICB0aGUgaXNWaWV3
cG9ydERlcGVuZGVudCBmdW5jdGlvbiwgbm93IHBhcnQgb2YgTWVkaWFRdWVyeUV2YWx1YXRvci4g
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3Qp
OiBNYXJrZWQgdGhpcyBpbmxpbmUuIFVzZSBhIHJlZmVyZW5jZSBhbmQgYSBSZWYmJgorICAgICAg
ICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dDo6Y3JlYXRlKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcik6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZSBhbmQgdXNl
IHJlbGVhc2VOb25OdWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q6OnJlbW92
ZUxpc3RlbmVyKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUxpc3Q6Om1hdGNoZXMpOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlMaXN0Lmg6IFVzZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCB0eXBlcyB0byB1c2UgcmVm
ZXJlbmNlcywgUmVmUHRyJiYgYW5kIFJlZiYmLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1
ZXJ5TWF0Y2hlcik6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSk6
IFVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRl
KTogVGFrZSBhIHJlZmVyZW5jZS4gVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEp
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVy
eU1hdGNoZXI6OmFkZExpc3RlbmVyKTogVXNlIFJlZiYmIGFuZCByZWZlcmVuY2UgZm9yIGFyZ3Vt
ZW50cy4gU2ltcGxpZnkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVy
OjpyZW1vdmVMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKTogTW92ZWQgdGhlIGxvZ2ljIGZvciBldmFsdWF0
aW5nIGVhY2ggcXVlcnkgaGVyZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmg6IFVz
ZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCBjcmVhdGUgdG8gdGFrZSBhIHJlZmVyZW5jZS4gVGlnaHRl
bmVkIGFyZ3VtZW50CisgICAgICAgIHR5cGVzIGZvciBhZGRMaXN0ZW5lciBhbmQgcmVtb3ZlTGlz
dGVuZXIuIE1hZGUgdGhlIHByaXZhdGUgTGlzdGVuZXIgYSBzaW1wbGUgc3RydWN0IHJhdGhlciB0
aGFuIGEKKyAgICAgICAgY2xhc3MuIEluaXRpYWxpemVkIG1fZXZhbHVhdGlvblJvdW5kLgorCisg
ICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
Q2hpbGRSdWxlcyk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gTWVkaWFRdWVyeUV2YWx1YXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGl0dG8uCisK
KyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0
Y2gpOiBVcGRhdGVkIHRvIHVzZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGluIGEgc2ltcGxlciB3YXku
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGVuZ3RoKTogVXNlIGEgcmVmZXJlbmNlIGFuZCBz
aW1wbGVyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOiBDaGFuZ2VkIGFyZ3VtZW50
cyB0byB0YWtlIGEgRG9jdW1lbnQgaW5zdGVhZCBvZiBib3RoIGEKKyAgICAgICAgUmVuZGVyVmll
dyBhbmQgYSBGcmFtZS4KKworICAgICAgICAqIGNzcy9Tb3VyY2VTaXplTGlzdC5oOiBVc2UgI3By
YWdtYSBvbmNlLiBDaGFuZ2UgcGFyc2VTaXplc0F0dHJpYnV0ZSB0byB0YWtlIGEgRG9jdW1lbnQu
CisKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZU1lZGlhOjptYXRjaE1lZGl1bSk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6IFVzZSBhIE1lZGlhUXVlcnlFdmFs
dWF0b3IgaW5zdGVhZCBvZiBhIHVuaXF1ZV9wdHIKKyAgICAgICAgdG8gb25lLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KTogVXNlIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZgorICAgICAgICBwb250ZXJzLCBhbmQgdXNlIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlS
ZXN1bHQgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKTogVXNlIGEgbW9k
ZXJuIGZvciBsb29wLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogVXNlIGEgTWVk
aWFRdWVyeUV2YWx1YXRvciBpbnN0ZWFkIG9mIGEgdW5pcXVlX3B0ciB0byBvbmUuCisgICAgICAg
IFVzZSBhIHZlY3RvciBvZiBNZWRpYVF1ZXJ5UmVzdWx0IGluc3RlYWQgb2YgYSB2ZWN0b3Igb2Yg
dW5pcXVlX3B0ci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IFJlbW92ZWQgYSBzdHJheSBzcGFjZSAo
dW5yZWxhdGVkIHRvCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXRjaCkuCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gdGhlCisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgY2xhc3MuIEFsc28gdXNl
IGF1dG8gYSBiaXQgbW9yZSBhbmQgZWxpbWluYXRlZCBhIGRvdWJsZSBoYXNoIHRhYmxlCisgICAg
ICAgIGxvb2t1cCBpbiBjb2RlIHRoYXQgdXNlZCBoYXNBdHRyaWJ1dGUgZm9sbG93ZWQgYnkgZmFz
dEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNlbGVj
dEltYWdlU291cmNlKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBwYXJzZVNpemVzQXR0cmlidXRl
LgorCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNv
dXJjZUNoaWxkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgor
CisgICAgICAgICogaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGh0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmg6IFVzZSAjcHJhZ21hIG9uY2UuIENoYW5n
ZWQgdmlld3BvcnQgZGVwZW5kZW50IG1lZGlhIHF1ZXJ5IHJlc3VsdHMKKyAgICAgICAgdmVjdG9y
IHRvIGJlIGEgdmVjdG9yIG9mIHJlc3VsdHMsIG5vdCBvZiB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZXMp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHBhcnNlU2l6ZXNBdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxvYWRTY2FubmVyOjpTdGFydFRhZ1NjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFBdHRyaWJ1dGVNYXRjaGVzKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBQbGF0Zm9ybVNjcmVl
bi5oLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCk6IFNpbXBsaWZpZWQgY29kZSBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3IgY2hh
bmdlcyB0byBQbGF0Zm9ybVNjcmVlbk1hYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVNjcmVlbi5oOiBVc2UgI3ByYWdtYSBvbmNlLiBVc2UgdXNpbmcgaW5zdGFkIG9m
IHR5cGVkZWYuIFB1dCB0aGUgdHlwZWRlZgorICAgICAgICBmb3IgUGxhdGZvcm1EaXNwbGF5SUQg
aW5zaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUgdHlwZWRlZiBmb3IgQ29s
b3JQcm9maWxlLgorICAgICAgICBSZW5hbWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBmaW5kIGEgc2Ny
ZWVuIHRvIGp1c3QgInNjcmVlbiIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQpOiBNb3ZlZCBp
bml0aWFsaXphdGlvbgorICAgICAgICBvZiBib29sZWFucyB0byB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOiBVc2UgcHJhZ21hIG9uY2UuIFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgZGlzcGxheSBJRCBkYXRhIG1lbWJlciB0byBiZSBhbiBP
cHRpb25hbCBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICBwYWlyZWQgd2l0aCBhbm90aGVy
IGRhdGEgbWVtYmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clVwZGF0ZXIuaDogVXNlIHByYWdtYSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YK
KyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oOiBVc2UgcHJhZ21hIG9uY2UuIE1vdmVkIENvbG9yUHJvZmls
ZSBoZXJlIGZyb20KKyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaCwgc2luY2UgaXQncyBub3QgdXNl
ZCB0aGVyZS4gYW5kIGlzIHVzZWQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5oOiBVc2UgcGFybWEgb25jZS4gQ2hhbmdlZCByZXV0cm4gdHlw
ZSBvZiB0aGUKKyAgICAgICAgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gdG8gTlNQb2ludC4gVHdlYWtl
ZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBv
aW50KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBOU1BvaW50IGFuZCBzbyByZW1vdmVkIHRoZSBl
eHBsaWNpdAorICAgICAgICBjb252ZXJzaW9uIHRvIEludFBvaW50LgorICAgICAgICAoV2ViQ29y
ZTo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gTlNQb2ludC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOiBNb3ZlZCBjb252ZXJzaW9uIHRvCisgICAgICAgIEludFBvaW50IGlu
IGhlcmUuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsIGluZGVudGluZyBzdHlsZSBhbmQganVzdCBp
bmRlbnRlZCBub3JtYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1
aWxkZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJRCk6IFJlbmFtZWQgZnJvbSBkaXNwbGF5
SURGcm9tU2NyZWVuIGFuZCBkaXNwbGF5RnJvbVdpZGdldCBzaW5jZSB0aGlzCisgICAgICAgIGlz
IEMrKyBhbmQgd2UgaGF2ZSBvdmVybG9hZGluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFy
Z3VtZW50cy4gQWRkZWQgYSBudWxsIGNoZWNrCisgICAgICAgIG9mIHRoZSBob3cgZGlud28gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0U2NyZWVuKTogQWRkZWQuIEhlbHBlciB1c2Vk
IGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6d2luZG93KTogQWRkZWQuIEhlbHBlciB1c2VkIGJl
bG93LgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKTogUmVuYW1lZCBmcm9tIHNjcmVlbkZvcldp
ZGdldCBhbmQgc2NyZWVuRnJvbVdpbmRvdyBhbmQgcmVtb3ZlZCB0aGUKKyAgICAgICAgdW5uZWVk
ZWQgd2luZG93IGFyZ3VtZW50IGZyb20gdGhlIHdpZGdldCB2ZXJzaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGgpOiBTaW1wbGlmaWVkLCB1c2luZyBuZXcgaGVscGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOiBUd2Vha2VkIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5IYXNJbnZlcnRlZENvbG9ycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6IFNpbXBsaWZpZWQgdXNpbmcgbmV3IGVscGVycy4KKyAgICAgICAgKFdl
YkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcik6IFN0cmVhbWxpbmVkIHVzaW5nIGZld2VyIGxvY2Fs
IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgdXNpbmcgYXV0byBmb3IgdHlwZXMgb2YgdGhlIHJlc3Vs
dHMgb2YgYWRvcHRDRi4KKyAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNwYWNlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6dG9EZXZpY2VTcGFj
ZSk6IERpdHRvLgorCiAyMDE2LTA1LTI1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIEFTU0VSVCBpbiBXZWJDb3JlOjpUZXh0VHJhY2tMaXN0OjpyZW1v
dmUgd2hlbiBydW5uaW5nIG1lZGlhL3RyYWNrL3RyYWNrLXJlbW92ZS10cmFjay5odG1sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9D
aGFuZ2VMb2cKaW5kZXggMTQ5N2MwNDY2ZGU1OTM0ZjNiODYyMWRlMzc5OTVkNWI1YzIxNmRmYy4u
ODFhMTAyNjRkMGViYmZmZDI2YzlkZmI2NWE2YTkyM2U4NjRlNjA2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE0IEBACisyMDE2LTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBNZWRpYSBxdWVyaWVzIGFuZCBwbGF0Zm9ybSBzY3JlZW4gbW9kZXJu
aXphdGlvbiBhbmQgc3RyZWFtbGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTgwNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAgICAgICgtW1dlYkZy
YW1lIF9kcmFnU291cmNlRW5kZWRBdDpvcGVyYXRpb246XSk6IFVwZGF0ZWQgdG8gdXNlIHRoZSBu
ZXcgdmVyc2lvbiBvZgorICAgICAgICBnbG9iYWxQb2ludCwgd2hpY2ggcmV0dXJucyBhbiBOU1Bv
aW50LgorCiAyMDE2LTA1LTI0ICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAg
ICAgICBDYW5kaWRhdGVzIHNob3VsZCB3b3JrIHdpdGggaW5wdXQgbWV0aG9kcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmlu
ZGV4IDg4ZTJjNDJmMDZlZjY5ZDk2MjdiODRhMGJjODk0ZDM5N2M0Yzc0NzcuLmU5MjEyNjc1OWVh
NGI0ODcxNWFhYTc4NDEzMWE2OTI5ZWNjY2Q4ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBA
QAorMjAxNi0wNS0yNSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAg
TWVkaWEgcXVlcmllcyBhbmQgcGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVh
bWxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTU4MDY3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbToKKyAgICAgICAgKFdlYktpdDo6c2NyZWVu
Rm9yV2luZG93KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6ZmxpcFNjcmVlblBvaW50KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6Z2xvYmFsUG9pbnQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViS2l0OjpnbG9iYWxQb2ludEZvckV2ZW50KTogVXNlIGdsb2JhbFBvaW50IGZ1bmN0aW9u
IGZyb20gV2ViQ29yZSBzbyB3ZSBkb24ndCBuZWVkCisgICAgICAgIGNvcGllcyBvZiBldmVyeXRo
aW5nIGluIGhlcmUuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW06
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjp3aW5kb3dEaWRDaGFuZ2VTY3JlZW4pOiBS
ZW1vdmVkIHVubmVlZGVkIHR5cGUgY2FzdC4KKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6
OmRyYWdnZWRJbWFnZSk6IEFkZGVkIHR5cGUgY2FzdCBzaW5jZSBnbG9iYWxQb2ludCBub3cgcmV0
dXJucyBhbgorICAgICAgICBOU1BvaW50IHJhdGhlciB0aGFuIGFuIEludFBvaW50LgorCisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOiBVc2UgcHJhZ21hIG9uY2UuIEFkZCBhIFdl
YkNvcmUgcHJlZml4IHRvIGEgdXNlIG9mCisgICAgICAgIFBsYXRmb3JtRGlzcGxheUlELCBzaW5j
ZSB0aGF0IGlzIG5vdyBpbnNpZGUgdGhlIFdlYkNvcmUgbmFtZXNwYWNlLgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50Lmg6IERpdHRvLgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVz
aE1vbml0b3IuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmg6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJUcmVlRHJhd2luZ0FyZWEuaDogRGl0dG8uCisKIDIwMTYtMDUtMjUgIEZ1amlpIEhpcm9ub3Jp
ICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1VuaXhdIFBvdGVudGlhbCBi
dWZmZXIgb3ZlcnJ1biBvZiBtX2ZpbGVEZXNjcmlwdG9ycyBpbiByZWFkQnl0ZXNGcm9tU29ja2V0
IG9mIENvbm5lY3Rpb25Vbml4LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRl
eCA1MDg2OWMyMzEyMzYxYzI3ZmQxNjRjZGQ0MDQ4YWQ0ODQzMTIwOTY2Li5mNDc0NWUxOTE0YzU1
MzI0ZDhmYjBjNTg0NDUxNTg5MDUwZDQ2M2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RP
TS5tbQpAQCAtNzYyLDcgKzc2Miw5IEBAIC0gKEJPT0wpaXNGb2N1c2VkCiBAZW5kCiAKICNpZiBQ
TEFURk9STShJT1MpCisKIEBpbXBsZW1lbnRhdGlvbiBET01IVE1MTGlua0VsZW1lbnQgKFdlYlBy
aXZhdGUpCisKIC0gKEJPT0wpX21lZGlhUXVlcnlNYXRjaGVzRm9yT3JpZW50YXRpb246KGludClv
cmllbnRhdGlvbgogewogICAgIERvY3VtZW50JiBkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxM
aW5rRWxlbWVudCo+KGNvcmUoc2VsZikpLT5kb2N1bWVudCgpOwpAQCAtNzkwLDE4ICs3OTIsMTkg
QEAgLSAoQk9PTClfbWVkaWFRdWVyeU1hdGNoZXNGb3JPcmllbnRhdGlvbjooaW50KW9yaWVudGF0
aW9uCiAKIC0gKEJPT0wpX21lZGlhUXVlcnlNYXRjaGVzCiB7Ci0gICAgSFRNTExpbmtFbGVtZW50
KiBsaW5rID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oY29yZShzZWxmKSk7Ci0gICAg
U3RyaW5nIG1lZGlhID0gbGluay0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWVkaWFBdHRyKTsK
KyAgICBIVE1MTGlua0VsZW1lbnQmIGxpbmsgPSAqc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50
Kj4oY29yZShzZWxmKSk7CisKKyAgICBhdXRvJiBtZWRpYSA9IGxpbmsuZmFzdEdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6Om1lZGlhQXR0cik7CiAgICAgaWYgKG1lZGlhLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbGluay0+ZG9jdW1lbnQo
KTsKIAotICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJ5U2V0ID0gTWVkaWFRdWVy
eVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtZWRpYSk7Ci0gICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3JlZW4iLCBkb2N1bWVudC5mcmFtZSgpLCBkb2N1
bWVudC5yZW5kZXJWaWV3KCkgPyAmZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpIDogMCk7
Ci0KLSAgICByZXR1cm4gc2NyZWVuRXZhbC5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOworICAg
IERvY3VtZW50JiBkb2N1bWVudCA9IGxpbmsuZG9jdW1lbnQoKTsKKyAgICBhdXRvIG1lZGlhUXVl
cnlTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1l
ZGlhKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJzY3JlZW4iLCBkb2N1bWVu
dCwgZG9jdW1lbnQucmVuZGVyVmlldygpID8gJmRvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUo
KSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYVF1ZXJ5U2V0LmdldCgpKTsKIH0KKwogQGVuZAor
CiAjZW5kaWYKIAogLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4gYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTR3JhbW1hci55LmluCmluZGV4IGY1YjBkMTc1MzE4NGQ4OGNhNzFjZjcxMzEyMTU3N2Mx
ZDMwYTdlOWMuLjRiN2YxODNlODdjNmZiMGI2YjUzZDZhN2M0MGUxMTM0MjQ5MzIxZGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueS5pbgpAQCAtMzcsOSArMzcsOSBAQAogICAgIE1lZGlhUXVl
cnlTZXQqIG1lZGlhTGlzdDsKICAgICBNZWRpYVF1ZXJ5KiBtZWRpYVF1ZXJ5OwogICAgIE1lZGlh
UXVlcnk6OlJlc3RyaWN0b3IgbWVkaWFRdWVyeVJlc3RyaWN0b3I7Ci0gICAgTWVkaWFRdWVyeUV4
cCogbWVkaWFRdWVyeUV4cDsKKyAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiogbWVkaWFRdWVyeUV4
cHJlc3Npb247CiAgICAgVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4qIHNvdXJjZVNpemVM
aXN0OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+KiBtZWRpYVF1
ZXJ5RXhwTGlzdDsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+KiBtZWRpYVF1ZXJ5
RXhwcmVzc2lvbkxpc3Q7CiAgICAgU3R5bGVLZXlmcmFtZSoga2V5ZnJhbWU7CiAgICAgVmVjdG9y
PFJlZlB0cjxTdHlsZUtleWZyYW1lPj4qIGtleWZyYW1lUnVsZUxpc3Q7CiAgICAgQ1NTUHJvcGVy
dHlJRCBpZDsKQEAgLTI3MSwyMCArMjcxLDIwIEBAIHN0YXRpYyBib29sIHNlbGVjdG9yTGlzdERv
ZXNOb3RNYXRjaEFueVBzZXVkb0VsZW1lbnQoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0CiAK
ICV0eXBlIDxtZWRpYVF1ZXJ5UmVzdHJpY3Rvcj4gbWF5YmVfbWVkaWFfcmVzdHJpY3RvcgogCi0l
dHlwZSA8bWVkaWFRdWVyeUV4cD4gbWVkaWFfcXVlcnlfZXhwIGJhc2VfbWVkaWFfcXVlcnlfZXhw
Ci0lZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHAgYmFzZV9tZWRpYV9x
dWVyeV9leHAKKyV0eXBlIDxtZWRpYVF1ZXJ5RXhwcmVzc2lvbj4gbWVkaWFfcXVlcnlfZXhwcmVz
c2lvbiBiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQk
OyB9IG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb24gYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uCiAK
ICV0eXBlIDxzb3VyY2VTaXplTGlzdD4gc291cmNlX3NpemVfbGlzdAogJWRlc3RydWN0b3IgeyBk
ZWxldGUgJCQ7IH0gc291cmNlX3NpemVfbGlzdAogCi0ldHlwZSA8bWVkaWFRdWVyeUV4cD4gbWF5
YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cAotJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gbWF5
YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cAorJXR5cGUgPG1lZGlhUXVlcnlFeHByZXNzaW9uPiBt
YXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbgorJWRlc3RydWN0b3IgeyBkZWxldGUg
JCQ7IH0gbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KIAogJXR5cGUgPHZhbHVl
PiBzb3VyY2Vfc2l6ZV9sZW5ndGgKICVkZXN0cnVjdG9yIHsgZGVzdHJveSgkJCk7IH0gc291cmNl
X3NpemVfbGVuZ3RoCiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwTGlzdD4gbWVkaWFfcXVlcnlfZXhw
X2xpc3QgbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cF9saXN0Ci0lZGVzdHJ1Y3RvciB7IGRlbGV0
ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xp
c3QKKyV0eXBlIDxtZWRpYVF1ZXJ5RXhwcmVzc2lvbkxpc3Q+IG1lZGlhX3F1ZXJ5X2V4cHJlc3Np
b25fbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0CislZGVzdHJ1Y3Rv
ciB7IGRlbGV0ZSAkJDsgfSBtZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgbWF5YmVfYW5kX21l
ZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdAogCiAldHlwZSA8c3RyaW5nPiBrZXlmcmFtZV9uYW1l
CiAKQEAgLTU3Niw1OSArNTc2LDYzIEBAIHdlYmtpdF9zb3VyY2Vfc2l6ZV9saXN0OgogICAgIDsK
IAogc291cmNlX3NpemVfbGlzdDoKLSAgICBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwIHNv
dXJjZV9zaXplX2xlbmd0aCB7CisgICAgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Np
b24gc291cmNlX3NpemVfbGVuZ3RoIHsKICAgICAgICAgJCQgPSBuZXcgVmVjdG9yPENTU1BhcnNl
cjo6U291cmNlU2l6ZT47Ci0gICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zb3VyY2VTaXplKHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkMSksICQyKSk7CisgICAgICAgICQkLT5hcHBl
bmQocGFyc2VyLT5zb3VyY2VTaXplKFdURk1vdmUoKiQxKSwgJDIpKTsKKyAgICAgICAgZGVsZXRl
ICQxOwogICAgIH0KLSAgICB8IHNvdXJjZV9zaXplX2xpc3QgbWF5YmVfc3BhY2UgJywnIG1heWJl
X3NwYWNlIG1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHAgc291cmNlX3NpemVfbGVuZ3RoIHsK
KyAgICB8IHNvdXJjZV9zaXplX2xpc3QgbWF5YmVfc3BhY2UgJywnIG1heWJlX3NwYWNlIG1heWJl
X3NvdXJjZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIHNvdXJjZV9zaXplX2xlbmd0aCB7CiAgICAg
ICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQocGFyc2VyLT5zb3VyY2VTaXplKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkNSksICQ2KSk7CisgICAgICAgICQkLT5hcHBlbmQo
cGFyc2VyLT5zb3VyY2VTaXplKFdURk1vdmUoKiQ1KSwgJDYpKTsKKyAgICAgICAgZGVsZXRlICQ1
OwogICAgIH0KICAgICA7CiAKLW1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHA6CittYXliZV9z
b3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbjoKICAgICAvKiBlbXB0eSAqLyB7Ci0gICAgICAg
ICQkID0gbmV3IE1lZGlhUXVlcnlFeHA7CisgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHBy
ZXNzaW9uOwogICAgIH0KLSAgICB8IGJhc2VfbWVkaWFfcXVlcnlfZXhwIG1heWJlX3NwYWNlOwor
ICAgIHwgYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIG1heWJlX3NwYWNlOwogCiBzb3VyY2Vf
c2l6ZV9sZW5ndGg6IHVuYXJ5X3Rlcm0gfCBjYWxjX2Z1bmN0aW9uOwogCi1iYXNlX21lZGlhX3F1
ZXJ5X2V4cDogJygnIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX3Zh
bHVlICcpJyB7CitiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb246ICcoJyBtYXliZV9zcGFjZSBJ
REVOVCBtYXliZV9zcGFjZSBtYXliZV9tZWRpYV92YWx1ZSAnKScgewogICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyVmFsdWVMaXN0PiBtZWRpYVZhbHVlKCQ1KTsKICAgICAgICAgJDMu
Y29udmVydFRvQVNDSUlMb3dlcmNhc2VJblBsYWNlKCk7Ci0gICAgICAgICQkID0gbmV3IE1lZGlh
UXVlcnlFeHAoJDMsIG1lZGlhVmFsdWUuZ2V0KCkpOworICAgICAgICAkJCA9IG5ldyBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbigkMywgbWVkaWFWYWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIDsKIAotbWVk
aWFfcXVlcnlfZXhwOgotICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5YmVfc3BhY2UgYmFz
ZV9tZWRpYV9xdWVyeV9leHAgbWF5YmVfc3BhY2UgeworbWVkaWFfcXVlcnlfZXhwcmVzc2lvbjoK
KyAgICBtYXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlIGJhc2VfbWVkaWFfcXVlcnlf
ZXhwcmVzc2lvbiBtYXliZV9zcGFjZSB7CiAgICAgICAgIGlmICgkMSAhPSBNZWRpYVF1ZXJ5OjpO
b25lKSB7CiAgICAgICAgICAgICAvLyBJZiByZXN0cmljdG9yIGlzIHNwZWNpZmllZCwgbWVkaWEg
cXVlcnkgZXhwcmVzc2lvbiBpcyBpbnZhbGlkLgogICAgICAgICAgICAgLy8gQ3JlYXRlIGVtcHR5
IG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb24gYW5kIGNvbnRpbnVlIHBhcnNpbmcgbWVkaWEgcXVlcnku
CiAgICAgICAgICAgICBkZWxldGUgJDM7Ci0gICAgICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5
RXhwOworICAgICAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cHJlc3Npb247CiAgICAgICAg
IH0gZWxzZQogICAgICAgICAgICAgJCQgPSAkMzsKICAgICB9CiAgICAgOwogCi1tZWRpYV9xdWVy
eV9leHBfbGlzdDoKLSAgICBtZWRpYV9xdWVyeV9leHAgewotICAgICAgICAkJCA9IG5ldyBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+PjsKLSAgICAgICAgJCQtPmFwcGVuZChz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4oJDEpKTsKK21lZGlhX3F1ZXJ5X2V4cHJlc3Np
b25fbGlzdDoKKyAgICBtZWRpYV9xdWVyeV9leHByZXNzaW9uIHsKKyAgICAgICAgJCQgPSBuZXcg
VmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPjsKKyAgICAgICAgJCQtPmFwcGVuZChXVEZNb3Zl
KCokMSkpOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQotICAgIHwgbWVkaWFfcXVlcnlfZXhw
X2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4cCB7
CisgICAgfCBtZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgbWF5YmVfc3BhY2UgTUVESUFfQU5E
IG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb24gewogICAgICAgICAkJCA9ICQxOwot
ICAgICAgICAkJC0+YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkNSkpOwor
ICAgICAgICAkJC0+YXBwZW5kKFdURk1vdmUoKiQ1KSk7CisgICAgICAgIGRlbGV0ZSAkNTsKICAg
ICB9CiAgICAgOwogCi1tYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3Q6CittYXliZV9hbmRf
bWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0OgogICAgIC8qZW1wdHkqLyB7Ci0gICAgICAgICQk
ID0gbmV3IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+OworICAgICAgICAk
JCA9IG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+OwogICAgIH0KLSAgICB8IE1FRElB
X0FORCBtYXliZV9zcGFjZSBtZWRpYV9xdWVyeV9leHBfbGlzdCB7CisgICAgfCBNRURJQV9BTkQg
bWF5YmVfc3BhY2UgbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0IHsKICAgICAgICAgJCQgPSAk
MzsKICAgICB9CiAgICAgOwpAQCAtNjQ2LDEzICs2NTAsMTUgQEAgbWF5YmVfbWVkaWFfcmVzdHJp
Y3RvcjoKICAgICA7CiAKIG1lZGlhX3F1ZXJ5OgotICAgIG1lZGlhX3F1ZXJ5X2V4cF9saXN0IHsK
LSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwgc3Rk
Ojp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigkMSkp
OworICAgIG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCB7CisgICAgICAgICQkID0gbmV3IE1l
ZGlhUXVlcnkoTWVkaWFRdWVyeTo6Tm9uZSwgImFsbCIsIFdURk1vdmUoKiQxKSk7CisgICAgICAg
IGRlbGV0ZSAkMTsKICAgICB9CiAgICAgfAotICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5
YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cF9saXN0
IHsKKyAgICBtYXliZV9tZWRpYV9yZXN0cmljdG9yIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3Nw
YWNlIG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QgewogICAgICAgICAkMy5j
b252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFR
dWVyeSgkMSwgJDMsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnlFeHA+Pj4oJDUpKTsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeSgkMSwgJDMsIFdU
Rk1vdmUoKiQ1KSk7CisgICAgICAgIGRlbGV0ZSAkNTsKICAgICB9CiAgICAgOwogCkBAIC02NjEs
MTYgKzY2NywxNyBAQCBtYXliZV9tZWRpYV9saXN0OiAvKiBlbXB0eSAqLyB7ICQkID0gJk1lZGlh
UXVlcnlTZXQ6OmNyZWF0ZSgpLmxlYWtSZWYoKTsgfSB8IG1lZAogbWVkaWFfbGlzdDoKICAgICBt
ZWRpYV9xdWVyeSB7CiAgICAgICAgICQkID0gJk1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpLmxlYWtS
ZWYoKTsKLSAgICAgICAgJCQtPmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnk+KCQxKSk7CisgICAgICAgICQkLT5hZGRNZWRpYVF1ZXJ5KFdURk1vdmUoKiQxKSk7CisgICAg
ICAgIGRlbGV0ZSAkMTsKICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0TWVkaWFMaW5lKCokJCk7
CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCAnLCcgbWF5YmVfc3BhY2UgbWVkaWFfcXVlcnkgewog
ICAgICAgICAkJCA9ICQxOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gbWVk
aWFRdWVyeSgkNCk7CiAgICAgICAgIGlmICgkJCkgewotICAgICAgICAgICAgJCQtPmFkZE1lZGlh
UXVlcnkoV1RGTW92ZShtZWRpYVF1ZXJ5KSk7CisgICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVy
eShXVEZNb3ZlKCokNCkpOwogICAgICAgICAgICAgcGFyc2VyLT51cGRhdGVMYXN0TWVkaWFMaW5l
KCokJCk7CiAgICAgICAgIH0KKyAgICAgICAgZGVsZXRlICQ0OwogICAgIH0KICAgICB8IG1lZGlh
X2xpc3QgZXJyb3IgewogICAgICAgICAkJCA9IG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9y
dFJ1bGUuaAppbmRleCA1YzVlZjkzMDI2YjcyYWFmNmY5YTFkYWI4Y2NkNjZmOTgwNGZiMjdkLi40
NTIzZWM1NWNmNGY0YzdmY2Y0ODQwZWQ1ZjYxZGQwZDkxNjEwN2MxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NJbXBvcnRSdWxlLmgKQEAgLTE5LDI2ICsxOSwyMCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBDU1NJbXBvcnRSdWxlX2gKLSNkZWZpbmUgQ1NTSW1w
b3J0UnVsZV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1J1bGUuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNoZWRDU1NTdHlsZVNoZWV0OwogY2xhc3MgTWVkaWFM
aXN0OwotY2xhc3MgTWVkaWFRdWVyeVNldDsKIGNsYXNzIFN0eWxlUnVsZUltcG9ydDsKIAogY2xh
c3MgQ1NTSW1wb3J0UnVsZSBmaW5hbCA6IHB1YmxpYyBDU1NSdWxlIHsKIHB1YmxpYzoKICAgICBz
dGF0aWMgUmVmPENTU0ltcG9ydFJ1bGU+IGNyZWF0ZShTdHlsZVJ1bGVJbXBvcnQmIHJ1bGUsIENT
U1N0eWxlU2hlZXQqIHNoZWV0KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IENTU0ltcG9ydFJ1bGUo
cnVsZSwgc2hlZXQpKTsgfQotICAgIAotICAgIHZpcnR1YWwgfkNTU0ltcG9ydFJ1bGUoKTsKIAot
ICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZWF0dGFjaChT
dHlsZVJ1bGVCYXNlJikgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZSgpOwog
CiAgICAgU3RyaW5nIGhyZWYoKSBjb25zdDsKICAgICBNZWRpYUxpc3QmIG1lZGlhKCkgY29uc3Q7
CkBAIC00Nyw3ICs0MSw5IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgQ1NTSW1wb3J0UnVsZShT
dHlsZVJ1bGVJbXBvcnQmLCBDU1NTdHlsZVNoZWV0Kik7CiAKLSAgICBDU1NSdWxlOjpUeXBlIHR5
cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJTVBPUlRfUlVMRTsgfQorICAgIENTU1J1bGU6
OlR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIElNUE9SVF9SVUxFOyB9CisgICAgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJh
c2UmKSBmaW5hbDsKIAogICAgIFJlZjxTdHlsZVJ1bGVJbXBvcnQ+IG1faW1wb3J0UnVsZTsKICAg
ICBtdXRhYmxlIFJlZlB0cjxNZWRpYUxpc3Q+IG1fbWVkaWFDU1NPTVdyYXBwZXI7CkBAIC01Nyw1
ICs1MywzIEBAIHByaXZhdGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTX1JVTEUoQ1NTSW1wb3J0UnVsZSwgQ1NTUnVsZTo6SU1QT1JUX1JVTEUp
Ci0KLSNlbmRpZiAvLyBDU1NJbXBvcnRSdWxlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5k
ZXggMjJhMTMxNTFjYjhkNjgwM2U0YTQ1YzA1NDgyMmY0MDkzYmQwOThiNS4uYThlNGI3ZmY5MmEw
N2U4ZWQ1NDYwYWFmYmVkOWUzZTNhOGMwZDNiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAK
QEAgLTE1MjksMTkgKzE1MjksMjAgQEAgVmVjdG9yPENTU1BhcnNlcjo6U291cmNlU2l6ZT4gQ1NT
UGFyc2VyOjpwYXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcgc3RyaW5nKQogCiAvLyBGSVhN
RSgxNDEyODkpOiBUaGUgZm9sbG93aW5nIHR3byBjb25zdHJ1Y3RvcnMgYXJlIG9ubHkgbmVlZGVk
IGJlY2F1c2Ugb2YgYSBidWcgaW4gTVNWQyAyMDEzIChhbmQgcHJpb3IpLgogLy8gV2Ugc2hvdWxk
IHJlbW92ZSB0aGlzIGNvZGUgYXMgc29vbiBhcyBhIFZpc3VhbCBTdHVkaW8gdXBkYXRlIHRoYXQg
Zml4ZXMgdGhpcyBwcm9ibGVtIGlzIHJlbGVhc2VkLgorCiBDU1NQYXJzZXI6OlNvdXJjZVNpemU6
OlNvdXJjZVNpemUoQ1NTUGFyc2VyOjpTb3VyY2VTaXplJiYgb3JpZ2luYWwpCiAgICAgOiBleHBy
ZXNzaW9uKFdURk1vdmUob3JpZ2luYWwuZXhwcmVzc2lvbikpCi0gICAgLCBsZW5ndGgob3JpZ2lu
YWwubGVuZ3RoKQorICAgICwgbGVuZ3RoKFdURk1vdmUob3JpZ2luYWwubGVuZ3RoKSkKIHsKIH0K
IAotQ1NTUGFyc2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIG9yaWdFeHAsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSkKLSAgICA6IGV4
cHJlc3Npb24oV1RGTW92ZShvcmlnRXhwKSkKK0NTU1BhcnNlcjo6U291cmNlU2l6ZTo6U291cmNl
U2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmIGV4cHJlc3Npb24sIFJlZjxDU1NWYWx1ZT4mJiB2
YWx1ZSkKKyAgICA6IGV4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKICAgICAsIGxlbmd0
aChXVEZNb3ZlKHZhbHVlKSkKIHsKIH0KIAotQ1NTUGFyc2VyOjpTb3VyY2VTaXplIENTU1BhcnNl
cjo6c291cmNlU2l6ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHByZXNzaW9u
LCBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUpCitDU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NT
UGFyc2VyOjpzb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVzc2lvbiwgQ1NT
UGFyc2VyVmFsdWUmIHBhcnNlclZhbHVlKQogewogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7
CiAgICAgaWYgKGlzQ2FsY3VsYXRpb24ocGFyc2VyVmFsdWUpKSB7CkBAIC0xNTU0LDcgKzE1NTUs
NyBAQCBDU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NTUGFyc2VyOjpzb3VyY2VTaXplKHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYmIGV4cAogICAgIGRlc3Ryb3kocGFyc2VyVmFsdWUpOwog
ICAgIC8vIEZJWE1FOiBDYWxsaW5nIHRoZSBjb25zdHJ1Y3RvciBleHBsaWNpdGx5IGhlcmUgdG8g
d29yayBhcm91bmQgYW4gTVNWQyBidWcuCiAgICAgLy8gRm9yIG90aGVyIGNvbXBpbGVycywgd2Ug
ZGlkIG5vdCBuZWVkIHRvIGRlZmluZSB0aGUgY29uc3RydWN0b3JzIGFuZCB3ZSBjb3VsZCB1c2Ug
YWdncmVnYXRlIGluaXRpYWxpemF0aW9uIHN5bnRheC4KLSAgICByZXR1cm4gU291cmNlU2l6ZShX
VEZNb3ZlKGV4cHJlc3Npb24pLCBXVEZNb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIFNvdXJjZVNp
emUoV1RGTW92ZShleHByZXNzaW9uKSwgdmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBmaWx0ZXJQcm9wZXJ0aWVzKGJvb2wgaW1wb3J0YW50LCBjb25zdCBQ
YXJzZWRQcm9wZXJ0eVZlY3RvciYgaW5wdXQsIFZlY3RvcjxDU1NQcm9wZXJ0eSwgMjU2PiYgb3V0
cHV0LCBzaXplX3QmIHVudXNlZEVudHJpZXMsIHN0ZDo6Yml0c2V0PG51bUNTU1Byb3BlcnRpZXM+
JiBzZWVuUHJvcGVydGllcywgSGFzaFNldDxBdG9taWNTdHJpbmc+JiBzZWVuQ3VzdG9tUHJvcGVy
dGllcykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCAzMGFkYTg1MWVjOTViOTM1N2IxYTI0ZWI4
MzM1YzVjYTI2MjBiMmQxLi4xMmM4ZTZhZWM2ZGFiM2M1ZWIyZTRlZjA1MzI1NzM2MWNhN2M1ODNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC02Niw3ICs2Niw3IEBAIGNsYXNzIENTU1Zhcmlh
YmxlRGVwZW5kZW50VmFsdWU7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFz
cyBJbW11dGFibGVTdHlsZVByb3BlcnRpZXM7Ci1jbGFzcyBNZWRpYVF1ZXJ5RXhwOworY2xhc3Mg
TWVkaWFRdWVyeUV4cHJlc3Npb247CiBjbGFzcyBNZWRpYVF1ZXJ5U2V0OwogY2xhc3MgTXV0YWJs
ZVN0eWxlUHJvcGVydGllczsKIGNsYXNzIFNWR0NvbG9yOwpAQCAtMTY4LDE0ICsxNjgsMTQgQEAg
cHVibGljOgogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VCYWNrZ3JvdW5kQ29s
b3IoKTsKIAogICAgIHN0cnVjdCBTb3VyY2VTaXplIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+IGV4cHJlc3Npb247Ci0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gbGVu
Z3RoOworICAgICAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgICAgICBS
ZWY8Q1NTVmFsdWU+IGxlbmd0aDsKIAogICAgICAgICBTb3VyY2VTaXplKFNvdXJjZVNpemUmJik7
Ci0gICAgICAgIFNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYsIFJl
ZlB0cjxDU1NWYWx1ZT4mJik7CisgICAgICAgIFNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Np
b24mJiwgUmVmPENTU1ZhbHVlPiYmKTsKICAgICB9OwogICAgIFZlY3RvcjxTb3VyY2VTaXplPiBw
YXJzZVNpemVzQXR0cmlidXRlKFN0cmluZ1ZpZXcpOwotICAgIFNvdXJjZVNpemUgc291cmNlU2l6
ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiwgQ1NTUGFyc2VyVmFsdWUmKTsKKyAg
ICBTb3VyY2VTaXplIHNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJlc3Npb24mJiwgQ1NTUGFyc2Vy
VmFsdWUmKTsKIAogICAgIGJvb2wgcGFyc2VGaWxsSW1hZ2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jiwg
UmVmUHRyPENTU1ZhbHVlPiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9j
dW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxlU2V0cy5j
cHAKaW5kZXggOWNjMDhkZWI3ZTA5N2MwYzlmMWZlYTgzOTMxMDMxMzY2OGI1YmNkMi4uYzQ4ZTlj
OWI5YTAxODYwZjc0N2M2MGY0ZGUyMTZhOTA5MDEwYWM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9E
b2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIERvY3VtZW50UnVsZVNl
dHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NTU3R5bGVT
aGVldAogICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBpbnNlcnRp
b25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBkYXRlZC4K
ICAgICBmb3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAgQVNTRVJU
KCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVkaWFRdWVy
aWVzKCkgJiYgIW1lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVy
KSkKKyAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5ldmFs
dWF0ZSgqY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQoY3NzU2hl
ZXQtPmNvbnRlbnRzKCksICptZWRpdW0sIHJlc29sdmVyKTsKICAgICAgICAgaW5zcGVjdG9yQ1NT
T01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldC5nZXQoKSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcAppbmRleCA4NWEyZGI1NmRm
NWI0ZGYyYzU4NjQ5MzRmNmYyZTY3MzRkNjAyY2UxLi4xODQzMGM5MGMxNGY3ZTFiMzZkYmQzOWFl
MTBiMzkzOTRjYjM3NmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0
dXJlTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5j
cHAKQEAgLTMwLDggKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBNZWRp
YUZlYXR1cmVOYW1lcyB7CiAKLSNkZWZpbmUgREVGSU5FX01FRElBRkVBVFVSRV9HTE9CQUwobmFt
ZSwgc3RyKSBcCi0gICAgREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsIG5hbWUjI01lZGlhRmVh
dHVyZSwgc3RyKQorI2RlZmluZSBERUZJTkVfTUVESUFGRUFUVVJFX0dMT0JBTChuYW1lLCBzdHJp
bmcpIERFRklORV9HTE9CQUwoQXRvbWljU3RyaW5nLCBuYW1lKQogQ1NTX01FRElBUVVFUllfTkFN
RVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMKQogI3Vu
ZGVmIERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMCiAKQEAgLTM5LDEwICszOCw5IEBAIHZvaWQg
aW5pdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAgaWYgKCFpbml0aWFs
aXplZCkgewotICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUgdGhlIGds
b2JhbHMuCi0KKyAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUg
Z2xvYmFscy4KICAgICAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7Ci0jZGVmaW5lIElOSVRJQUxJ
WkVfR0xPQkFMKG5hbWUsIHN0cikgbmV3IChOb3ROdWxsLCAodm9pZCopJm5hbWUjI01lZGlhRmVh
dHVyZSkgQXRvbWljU3RyaW5nKHN0ciwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJh
bCk7CisjZGVmaW5lIElOSVRJQUxJWkVfR0xPQkFMKG5hbWUsIHN0cmluZykgbmV3IChOb3ROdWxs
LCAodm9pZCopJm5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcsIEF0b21pY1N0cmluZzo6Q29uc3Ry
dWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9N
RURJQUZFQVRVUkUoSU5JVElBTElaRV9HTE9CQUwpCiAjdW5kZWYgSU5JVElBTElaRV9HTE9CQUwK
ICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhRmVhdHVyZU5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJl
TmFtZXMuaAppbmRleCBiNWNhMjUwZDcxN2QyMTI0YzczZGY2ZjE2MmY0YzAzYTY1MGMzMGY5Li42
Mjk3MWMwMmZmMmNjY2RmYTM0ZjI1NTYwN2VjOTQ4ZDU0MDE5MGQ5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFGZWF0dXJlTmFtZXMuaApAQCAtMTcsODAgKzE3LDc4IEBACiAgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgTWVkaWFGZWF0dXJlTmFtZXNfaAot
I2RlZmluZSBNZWRpYUZlYXR1cmVOYW1lc19oCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KKyNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgbmFtZXNw
YWNlIE1lZGlhRmVhdHVyZU5hbWVzIHsKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotI2RlZmluZSBDU1NfTUVESUFR
VUVSWV9WSUVXX01PREUobWFjcm8pIG1hY3JvKHZpZXdfbW9kZSwgIi13ZWJraXQtdmlldy1tb2Rl
IikKKyNkZWZpbmUgQ1NTX01FRElBUVVFUllfVklFV19NT0RFKG1hY3JvKSBtYWNybyh2aWV3TW9k
ZSwgIi13ZWJraXQtdmlldy1tb2RlIikKICNlbHNlCiAjZGVmaW5lIENTU19NRURJQVFVRVJZX1ZJ
RVdfTU9ERShtYWNybykKICNlbmRpZgogCiAjZGVmaW5lIENTU19NRURJQVFVRVJZX05BTUVTX0ZP
Ul9FQUNIX01FRElBRkVBVFVSRShtYWNybykgXAotICAgIG1hY3JvKGFueV9ob3ZlciwgImFueS1o
b3ZlciIpIFwKLSAgICBtYWNybyhhbnlfcG9pbnRlciwgImFueS1wb2ludGVyIikgXAorICAgIG1h
Y3JvKGFuaW1hdGlvbiwgIi13ZWJraXQtYW5pbWF0aW9uIikgXAorICAgIG1hY3JvKGFueUhvdmVy
LCAiYW55LWhvdmVyIikgXAorICAgIG1hY3JvKGFueVBvaW50ZXIsICJhbnktcG9pbnRlciIpIFwK
KyAgICBtYWNybyhhc3BlY3RSYXRpbywgImFzcGVjdC1yYXRpbyIpIFwKICAgICBtYWNybyhjb2xv
ciwgImNvbG9yIikgXAotICAgIG1hY3JvKGNvbG9yX2luZGV4LCAiY29sb3ItaW5kZXgiKSBcCi0g
ICAgbWFjcm8oY29sb3JfZ2FtdXQsICJjb2xvci1nYW11dCIpIFwKKyAgICBtYWNybyhjb2xvckdh
bXV0LCAiY29sb3ItZ2FtdXQiKSBcCisgICAgbWFjcm8oY29sb3JJbmRleCwgImNvbG9yLWluZGV4
IikgXAorICAgIG1hY3JvKGRldmljZUFzcGVjdFJhdGlvLCAiZGV2aWNlLWFzcGVjdC1yYXRpbyIp
IFwKKyAgICBtYWNybyhkZXZpY2VIZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAorICAgIG1hY3Jv
KGRldmljZVBpeGVsUmF0aW8sICItd2Via2l0LWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAgICBt
YWNybyhkZXZpY2VXaWR0aCwgImRldmljZS13aWR0aCIpIFwKICAgICBtYWNybyhncmlkLCAiZ3Jp
ZCIpIFwKLSAgICBtYWNybyhtb25vY2hyb21lLCAibW9ub2Nocm9tZSIpIFwKICAgICBtYWNybyho
ZWlnaHQsICJoZWlnaHQiKSBcCiAgICAgbWFjcm8oaG92ZXIsICJob3ZlciIpIFwKLSAgICBtYWNy
byh3aWR0aCwgIndpZHRoIikgXAorICAgIG1hY3JvKGludmVydGVkQ29sb3JzLCAiaW52ZXJ0ZWQt
Y29sb3JzIikgXAorICAgIG1hY3JvKG1heEFzcGVjdFJhdGlvLCAibWF4LWFzcGVjdC1yYXRpbyIp
IFwKKyAgICBtYWNybyhtYXhDb2xvciwgIm1heC1jb2xvciIpIFwKKyAgICBtYWNybyhtYXhDb2xv
ckluZGV4LCAibWF4LWNvbG9yLWluZGV4IikgXAorICAgIG1hY3JvKG1heERldmljZUFzcGVjdFJh
dGlvLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisgICAgbWFjcm8obWF4RGV2aWNlSGVp
Z2h0LCAibWF4LWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8obWF4RGV2aWNlUGl4ZWxSYXRp
bywgIi13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAgICBtYWNybyhtYXhEZXZp
Y2VXaWR0aCwgIm1heC1kZXZpY2Utd2lkdGgiKSBcCisgICAgbWFjcm8obWF4SGVpZ2h0LCAibWF4
LWhlaWdodCIpIFwKKyAgICBtYWNybyhtYXhNb25vY2hyb21lLCAibWF4LW1vbm9jaHJvbWUiKSBc
CisgICAgbWFjcm8obWF4UmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9uIikgXAorICAgIG1hY3Jv
KG1heFdpZHRoLCAibWF4LXdpZHRoIikgXAorICAgIG1hY3JvKG1pbkFzcGVjdFJhdGlvLCAibWlu
LWFzcGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtaW5Db2xvciwgIm1pbi1jb2xvciIpIFwKKyAg
ICBtYWNybyhtaW5Db2xvckluZGV4LCAibWluLWNvbG9yLWluZGV4IikgXAorICAgIG1hY3JvKG1p
bkRldmljZUFzcGVjdFJhdGlvLCAibWluLWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisgICAgbWFj
cm8obWluRGV2aWNlSGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8obWlu
RGV2aWNlUGl4ZWxSYXRpbywgIi13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAg
ICBtYWNybyhtaW5EZXZpY2VXaWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCisgICAgbWFjcm8o
bWluSGVpZ2h0LCAibWluLWhlaWdodCIpIFwKKyAgICBtYWNybyhtaW5Nb25vY2hyb21lLCAibWlu
LW1vbm9jaHJvbWUiKSBcCisgICAgbWFjcm8obWluUmVzb2x1dGlvbiwgIm1pbi1yZXNvbHV0aW9u
IikgXAorICAgIG1hY3JvKG1pbldpZHRoLCAibWluLXdpZHRoIikgXAorICAgIG1hY3JvKG1vbm9j
aHJvbWUsICJtb25vY2hyb21lIikgXAogICAgIG1hY3JvKG9yaWVudGF0aW9uLCAib3JpZW50YXRp
b24iKSBcCi0gICAgbWFjcm8oYXNwZWN0X3JhdGlvLCAiYXNwZWN0LXJhdGlvIikgXAotICAgIG1h
Y3JvKGRldmljZV9hc3BlY3RfcmF0aW8sICJkZXZpY2UtYXNwZWN0LXJhdGlvIikgXAotICAgIG1h
Y3JvKGRldmljZV9waXhlbF9yYXRpbywgIi13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvIikgXAot
ICAgIG1hY3JvKGRldmljZV9oZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAotICAgIG1hY3JvKGRl
dmljZV93aWR0aCwgImRldmljZS13aWR0aCIpIFwKLSAgICBtYWNybyhpbnZlcnRlZF9jb2xvcnMs
ICJpbnZlcnRlZC1jb2xvcnMiKSBcCi0gICAgbWFjcm8obWF4X2NvbG9yLCAibWF4LWNvbG9yIikg
XAotICAgIG1hY3JvKG1heF9jb2xvcl9pbmRleCwgIm1heC1jb2xvci1pbmRleCIpIFwKLSAgICBt
YWNybyhtYXhfYXNwZWN0X3JhdGlvLCAibWF4LWFzcGVjdC1yYXRpbyIpIFwKLSAgICBtYWNybyht
YXhfZGV2aWNlX2FzcGVjdF9yYXRpbywgIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvIikgXAotICAg
IG1hY3JvKG1heF9kZXZpY2VfcGl4ZWxfcmF0aW8sICItd2Via2l0LW1heC1kZXZpY2UtcGl4ZWwt
cmF0aW8iKSBcCi0gICAgbWFjcm8obWF4X2RldmljZV9oZWlnaHQsICJtYXgtZGV2aWNlLWhlaWdo
dCIpIFwKLSAgICBtYWNybyhtYXhfZGV2aWNlX3dpZHRoLCAibWF4LWRldmljZS13aWR0aCIpIFwK
LSAgICBtYWNybyhtYXhfaGVpZ2h0LCAibWF4LWhlaWdodCIpIFwKLSAgICBtYWNybyhtYXhfbW9u
b2Nocm9tZSwgIm1heC1tb25vY2hyb21lIikgXAotICAgIG1hY3JvKG1heF93aWR0aCwgIm1heC13
aWR0aCIpIFwKLSAgICBtYWNybyhtYXhfcmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9uIikgXAot
ICAgIG1hY3JvKG1pbl9jb2xvciwgIm1pbi1jb2xvciIpIFwKLSAgICBtYWNybyhtaW5fY29sb3Jf
aW5kZXgsICJtaW4tY29sb3ItaW5kZXgiKSBcCi0gICAgbWFjcm8obWluX2FzcGVjdF9yYXRpbywg
Im1pbi1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8obWluX2RldmljZV9hc3BlY3RfcmF0aW8s
ICJtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyIpIFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX3BpeGVs
X3JhdGlvLCAiLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIikgXAotICAgIG1hY3JvKG1p
bl9kZXZpY2VfaGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCi0gICAgbWFjcm8obWluX2Rl
dmljZV93aWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCi0gICAgbWFjcm8obWluX2hlaWdodCwg
Im1pbi1oZWlnaHQiKSBcCi0gICAgbWFjcm8obWluX21vbm9jaHJvbWUsICJtaW4tbW9ub2Nocm9t
ZSIpIFwKLSAgICBtYWNybyhtaW5fd2lkdGgsICJtaW4td2lkdGgiKSBcCi0gICAgbWFjcm8obWlu
X3Jlc29sdXRpb24sICJtaW4tcmVzb2x1dGlvbiIpIFwKICAgICBtYWNybyhwb2ludGVyLCAicG9p
bnRlciIpIFwKICAgICBtYWNybyhyZXNvbHV0aW9uLCAicmVzb2x1dGlvbiIpIFwKLSAgICBtYWNy
byh0cmFuc2Zvcm1fMmQsICItd2Via2l0LXRyYW5zZm9ybS0yZCIpIFwKLSAgICBtYWNybyh0cmFu
c2Zvcm1fM2QsICItd2Via2l0LXRyYW5zZm9ybS0zZCIpIFwKKyAgICBtYWNybyh0cmFuc2Zvcm0y
ZCwgIi13ZWJraXQtdHJhbnNmb3JtLTJkIikgXAorICAgIG1hY3JvKHRyYW5zZm9ybTNkLCAiLXdl
YmtpdC10cmFuc2Zvcm0tM2QiKSBcCiAgICAgbWFjcm8odHJhbnNpdGlvbiwgIi13ZWJraXQtdHJh
bnNpdGlvbiIpIFwKLSAgICBtYWNybyhhbmltYXRpb24sICItd2Via2l0LWFuaW1hdGlvbiIpIFwK
LSAgICBtYWNybyh2aWRlb19wbGF5YWJsZV9pbmxpbmUsICItd2Via2l0LXZpZGVvLXBsYXlhYmxl
LWlubGluZSIpIFwKKyAgICBtYWNybyh2aWRlb1BsYXlhYmxlSW5saW5lLCAiLXdlYmtpdC12aWRl
by1wbGF5YWJsZS1pbmxpbmUiKSBcCisgICAgbWFjcm8od2lkdGgsICJ3aWR0aCIpIFwKICAgICBD
U1NfTUVESUFRVUVSWV9WSUVXX01PREUobWFjcm8pCiAKIC8vIGVuZCBvZiBtYWNybwogCituYW1l
c3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMgeworCiAjaWZuZGVm
IENTU19NRURJQVFVRVJZX05BTUVTX0hJREVfR0xPQkFMUwotICAgICNkZWZpbmUgQ1NTX01FRElB
UVVFUllfTkFNRVNfREVDTEFSRShuYW1lLCBzdHIpIGV4dGVybiBjb25zdCBBdG9taWNTdHJpbmcg
bmFtZSMjTWVkaWFGZWF0dXJlOworI2RlZmluZSBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJF
KG5hbWUsIHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lOwogICAgIENTU19N
RURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShDU1NfTUVESUFRVUVSWV9OQU1F
U19ERUNMQVJFKQotICAgICN1bmRlZiBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJFCisjdW5k
ZWYgQ1NTX01FRElBUVVFUllfTkFNRVNfREVDTEFSRQogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBp
bml0KCk7CisgICAgdm9pZCBpbml0KCk7CiAKLSAgICB9IC8vIG5hbWVzcGFjZSBNZWRpYUZlYXR1
cmVOYW1lcworfSAvLyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIE1lZGlhRmVhdHVyZU5hbWVzX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
TGlzdC5jcHAKaW5kZXggMDFmODg2Mjc3OTk0NjY5ODViZWRiZWQ3NTI1OWMzZWYxZDczYTI2Ny4u
ZjJjNjEzZDU3MDFhOTY1Yzc5YmViNDc5Nzc0OTRkZTg1NzM5MzU3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiTWVkaWFMaXN0LmgiCiAKQEAgLTI2LDkgKzI3LDggQEAKICNpbmNsdWRlICJET01XaW5kb3cu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNp
bmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgog
I2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KQEAgLTc0
LDI4ICs3NCwyNyBAQCBNZWRpYVF1ZXJ5U2V0OjpNZWRpYVF1ZXJ5U2V0KGNvbnN0IFN0cmluZyYg
bWVkaWFTdHJpbmcsIGJvb2wgZmFsbGJhY2tUb0Rlc2NyaXB0bwogICAgICwgbV9sYXN0TGluZSgw
KQogewogICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlKG1lZGlhU3RyaW5nKTsKKwogICAgIC8vIEZJ
WE1FOiBwYXJzaW5nIGNhbiBmYWlsLiBUaGUgcHJvYmxlbSB3aXRoIGZhaWxpbmcgY29uc3RydWN0
b3IgaXMgdGhhdAogICAgIC8vIHdlIHdvdWxkIG5lZWQgYWRkaXRpb25hbCBmbGFnIHNheWluZyBN
ZWRpYUxpc3QgaXMgbm90IHZhbGlkCiAgICAgLy8gUGFyc2UgY2FuIGZhaWwgb25seSB3aGVuIGZh
bGxiYWNrVG9EZXNjcmlwdG9yID09IGZhbHNlLCBpLmUgd2hlbiBIVE1MNCBtZWRpYSBkZXNjcmlw
dG9yCiAgICAgLy8gZm9yd2FyZC1jb21wYXRpYmxlIHN5bnRheCBpcyBub3QgaW4gdXNlLgogICAg
IC8vIERPTUltcGxlbWVudGF0aW9uQ1NTIHNlZW1zIHRvIG1hbmRhdGUgdGhhdCBtZWRpYSBkZXNj
cmlwdG9ycyBhcmUgdXNlZAotICAgIC8vIGZvciBib3RoIGh0bWwgYW5kIHN2ZywgZXZlbiB0aG91
Z2ggc3ZnOnN0eWxlIGRvZXNuJ3QgdXNlIG1lZGlhIGRlc2NyaXB0b3JzCisgICAgLy8gZm9yIGJv
dGggSFRNTCBhbmQgU1ZHLCBldmVuIHRob3VnaCBzdmc6c3R5bGUgZG9lc24ndCB1c2UgbWVkaWEg
ZGVzY3JpcHRvcnMKICAgICAvLyBDdXJyZW50bHkgdGhlIG9ubHkgcGxhY2VzIHdoZXJlIHBhcnNp
bmcgY2FuIGZhaWwgYXJlCiAgICAgLy8gY3JlYXRpbmcgPHN2ZzpzdHlsZT4sIGNyZWF0aW5nIGNz
cyBtZWRpYSAvIGltcG9ydCBydWxlcyBmcm9tIGpzCi0gICAgCisKICAgICAvLyBGSVhNRTogVGhp
cyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgIHBh
cnNlKCJpbnZhbGlkIik7CiB9CiAKIE1lZGlhUXVlcnlTZXQ6Ok1lZGlhUXVlcnlTZXQoY29uc3Qg
TWVkaWFRdWVyeVNldCYgbykKLSAgICA6IFJlZkNvdW50ZWQ8TWVkaWFRdWVyeVNldD4oKQorICAg
IDogUmVmQ291bnRlZCgpCiAgICAgLCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKG8ubV9mYWxsYmFj
a1RvRGVzY3JpcHRvcikKICAgICAsIG1fbGFzdExpbmUoby5tX2xhc3RMaW5lKQotICAgICwgbV9x
dWVyaWVzKG8ubV9xdWVyaWVzLnNpemUoKSkKKyAgICAsIG1fcXVlcmllcyhvLm1fcXVlcmllcykK
IHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9xdWVyaWVzLnNpemUoKTsgKytpKQot
ICAgICAgICBtX3F1ZXJpZXNbaV0gPSBvLm1fcXVlcmllc1tpXS0+Y29weSgpOwogfQogCiBNZWRp
YVF1ZXJ5U2V0Ojp+TWVkaWFRdWVyeVNldCgpCkBAIC0xMDksNDYgKzEwOCw1MSBAQCBzdGF0aWMg
U3RyaW5nIHBhcnNlTWVkaWFEZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIC8v
IFVTIEFTQ0lJIGxldHRlciBbYS16QS1aXSAoSVNPIDEwNjQ2IGhleCA0MS01YSwgNjEtN2EpLCBk
aWdpdCBbMC05XSAoaGV4IDMwLTM5KSwKICAgICAvLyBvciBoeXBoZW4gKGhleCAyZCkuIgogICAg
IHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBpID0gMDsK
LSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGMg
PSBzdHJpbmdbaV07Ci0gICAgICAgIGlmICghICgoYyA+PSAnYScgJiYgYyA8PSAneicpCi0gICAg
ICAgICAgICAgICB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpCi0gICAgICAgICAgICAgICB8fCAo
YyA+PSAnMScgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICAgICB8fCAoYyA9PSAnLScpKSkKKyAg
ICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAg
ICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgaWYgKCEoaXNBU0NJSUFscGhh
bnVtZXJpYyhjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PSAnLScpKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIHJldHVybiBzdHJpbmcubGVmdChpKTsKIH0KIAorT3B0aW9uYWw8TWVk
aWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZShDU1NQYXJzZXImIHBhcnNlciwg
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBpZiAoYXV0byBxdWVyeSA9IHBhcnNl
ci5wYXJzZU1lZGlhUXVlcnkocXVlcnlTdHJpbmcpKQorICAgICAgICByZXR1cm4gV1RGTW92ZSgq
cXVlcnkpOworICAgIGlmICghbV9mYWxsYmFja1RvRGVzY3JpcHRvcikKKyAgICAgICAgcmV0dXJu
IE51bGxvcHQ7CisgICAgcmV0dXJuIE1lZGlhUXVlcnkgeyBNZWRpYVF1ZXJ5OjpOb25lLCBwYXJz
ZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyksIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lv
bj4geyB9IH07Cit9CisKK09wdGlvbmFsPE1lZGlhUXVlcnk+IE1lZGlhUXVlcnlTZXQ6OmludGVy
bmFsUGFyc2UoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU1NQYXJzZXIgcGFy
c2VyKENTU1N0cmljdE1vZGUpOworICAgIHJldHVybiBpbnRlcm5hbFBhcnNlKHBhcnNlciwgcXVl
cnlTdHJpbmcpOworfQorCiBib29sIE1lZGlhUXVlcnlTZXQ6OnBhcnNlKGNvbnN0IFN0cmluZyYg
bWVkaWFTdHJpbmcpCiB7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2RlKTsKICAg
ICAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+PiByZXN1bHQ7CisgICAg
VmVjdG9yPE1lZGlhUXVlcnk+IHJlc3VsdDsKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0OwogICAg
IG1lZGlhU3RyaW5nLnNwbGl0KCcsJywgbGlzdCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9IGxpc3RbaV0u
c3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgZm9yIChhdXRvJiBsaXN0U3RyaW5nIDogbGlzdCkgewor
ICAgICAgICBTdHJpbmcgbWVkaXVtID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2Vz
KGxpc3RTdHJpbmcpOwogICAgICAgICBpZiAobWVkaXVtLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgaWYgKCFtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5ID0gcGFyc2VyLnBhcnNlTWVkaWFRdWVyeSht
ZWRpdW0pOwotICAgICAgICBpZiAoIW1lZGlhUXVlcnkpIHsKLSAgICAgICAgICAgIGlmICghbV9m
YWxsYmFja1RvRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdG9yID0gcGFyc2VNZWRpYURlc2NyaXB0b3IobWVk
aXVtKTsKLSAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0b3IuaXNOdWxsKCkpCisgICAgICAg
ICAgICBpZiAobV9mYWxsYmFja1RvRGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIG1lZGlhUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+
KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGlhRGVzY3JpcHRvciwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZSBpZiAoYXV0byBxdWVyeSA9IGludGVybmFsUGFyc2UocGFyc2VyLCBtZWRpdW0pKSB7Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUocXVlcnkudmFsdWUoKSkpOworICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KG1lZGlhUXVlcnkpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAvLyAiLCws
LCIgZmFsbHMgc3RyYWlnaHQgdGhyb3VnaCwgYnV0IGlzIG5vdCB2YWxpZCB1bmxlc3MgZmFsbGJh
Y2sKICAgICBpZiAoIW1fZmFsbGJhY2tUb0Rlc2NyaXB0b3IgJiYgbGlzdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBtZWRpYVN0cmluZy5zdHJpcFdo
aXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBzdHJpcExl
YWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobWVkaWFTdHJpbmcpOwogICAgICAgICBpZiAoIXN0
cmlwcGVkTWVkaWFTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KQEAgLTE1OCw0MCArMTYyLDI0IEBAIGJvb2wgTWVkaWFRdWVyeVNldDo6cGFyc2UoY29u
c3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIAogYm9vbCBNZWRpYVF1ZXJ5U2V0OjphZGQoY29uc3Qg
U3RyaW5nJiBxdWVyeVN0cmluZykKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1v
ZGUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlZFF1ZXJ5ID0gcGFy
c2VyLnBhcnNlTWVkaWFRdWVyeShxdWVyeVN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRRdWVyeSAm
JiBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKSB7Ci0gICAgICAgIFN0cmluZyBtZWRpdW0gPSBwYXJz
ZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyk7Ci0gICAgICAgIGlmICghbWVkaXVtLmlzTnVs
bCgpKQotICAgICAgICAgICAgcGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVl
cnk+KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAgIGF1dG8g
cGFyc2VkUXVlcnkgPSBpbnRlcm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAoIXBhcnNl
ZFF1ZXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3F1ZXJpZXMuYXBwZW5kKFdU
Rk1vdmUocGFyc2VkUXVlcnkpKTsKKyAgICBtX3F1ZXJpZXMuYXBwZW5kKFdURk1vdmUocGFyc2Vk
UXVlcnkudmFsdWUoKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nVG9SZW1vdmUpCitib29sIE1lZGlh
UXVlcnlTZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQogewotICAgIENTU1Bh
cnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFR
dWVyeT4gcGFyc2VkUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5KHF1ZXJ5U3RyaW5nVG9S
ZW1vdmUpOwotICAgIGlmICghcGFyc2VkUXVlcnkgJiYgbV9mYWxsYmFja1RvRGVzY3JpcHRvcikg
ewotICAgICAgICBTdHJpbmcgbWVkaXVtID0gcGFyc2VNZWRpYURlc2NyaXB0b3IocXVlcnlTdHJp
bmdUb1JlbW92ZSk7Ci0gICAgICAgIGlmICghbWVkaXVtLmlzTnVsbCgpKQotICAgICAgICAgICAg
cGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+KE1lZGlhUXVlcnk6Ok5v
bmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAgIGF1dG8gcGFyc2VkUXVlcnkgPSBpbnRl
cm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAoIXBhcnNlZFF1ZXJ5KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgcmV0dXJuIG1fcXVlcmllcy5yZW1vdmVGaXJzdE1hdGNo
aW5nKFsmcGFyc2VkUXVlcnldKGF1dG8mIHF1ZXJ5KSB7Ci0gICAgICAgIHJldHVybiAqcXVlcnkg
PT0gKnBhcnNlZFF1ZXJ5OworICAgICAgICByZXR1cm4gcXVlcnkgPT0gcGFyc2VkUXVlcnkudmFs
dWUoKTsKICAgICB9KTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5U2V0OjphZGRNZWRpYVF1ZXJ5KHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KQordm9pZCBNZWRpYVF1ZXJ5U2V0
OjphZGRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkmJiBtZWRpYVF1ZXJ5KQogewogICAgIG1fcXVlcmll
cy5hcHBlbmQoV1RGTW92ZShtZWRpYVF1ZXJ5KSk7CiB9CkBAIC0xOTksMTQgKzE4NywxMiBAQCB2
b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnk+IG1lZGlhUXVlcnkpCiBTdHJpbmcgTWVkaWFRdWVyeVNldDo6bWVkaWFUZXh0KCkgY29uc3QK
IHsKICAgICBTdHJpbmdCdWlsZGVyIHRleHQ7Ci0gICAgCi0gICAgYm9vbCBmaXJzdCA9IHRydWU7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFmaXJzdCkKKyAgICBib29sIG5lZWRDb21tYSA9IGZhbHNlOworICAgIGZvciAo
YXV0byYgcXVlcnkgOiBtX3F1ZXJpZXMpIHsKKyAgICAgICAgaWYgKG5lZWRDb21tYSkKICAgICAg
ICAgICAgIHRleHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgdGV4dC5hcHBlbmQobV9xdWVyaWVzW2ldLT5jc3NU
ZXh0KCkpOworICAgICAgICB0ZXh0LmFwcGVuZChxdWVyeS5jc3NUZXh0KCkpOworICAgICAgICBu
ZWVkQ29tbWEgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gdGV4dC50b1N0cmluZygpOwogfQpA
QCAtMjE0LDEzICsyMDAsMTEgQEAgU3RyaW5nIE1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCgpIGNv
bnN0CiBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMsIENT
U1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0KQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVkaWFRdWVy
aWVzKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFNoZWV0KQotICAgICwgbV9wYXJl
bnRSdWxlKDApCiB7CiB9CiAKIE1lZGlhTGlzdDo6TWVkaWFMaXN0KE1lZGlhUXVlcnlTZXQqIG1l
ZGlhUXVlcmllcywgQ1NTUnVsZSogcGFyZW50UnVsZSkKICAgICA6IG1fbWVkaWFRdWVyaWVzKG1l
ZGlhUXVlcmllcykKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQogICAgICwgbV9wYXJlbnRS
dWxlKHBhcmVudFJ1bGUpCiB7CiB9CkBAIC0yMzIsOSArMjE2LDcgQEAgTWVkaWFMaXN0Ojp+TWVk
aWFMaXN0KCkKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiB2YWx1
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9u
U2NvcGUgbXV0YXRpb25TY29wZShtX3BhcmVudFJ1bGUpOwotCi0gICAgYm9vbCBzdWNjZXNzID0g
bV9tZWRpYVF1ZXJpZXMtPnBhcnNlKHZhbHVlKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICBp
ZiAoIW1fbWVkaWFRdWVyaWVzLT5wYXJzZSh2YWx1ZSkpIHsKICAgICAgICAgZWMgPSBTWU5UQVhf
RVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ2LDcgKzIyOCw3IEBAIFN0cmluZyBN
ZWRpYUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgYXV0byYgcXVlcmll
cyA9IG1fbWVkaWFRdWVyaWVzLT5xdWVyeVZlY3RvcigpOwogICAgIGlmIChpbmRleCA8IHF1ZXJp
ZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gcXVlcmllc1tpbmRleF0tPmNzc1RleHQoKTsKKyAg
ICAgICAgcmV0dXJuIHF1ZXJpZXNbaW5kZXhdLmNzc1RleHQoKTsKICAgICByZXR1cm4gU3RyaW5n
KCk7CiB9CiAKQEAgLTI4NCwxMSArMjY2LDkgQEAgdm9pZCBNZWRpYUxpc3Q6OnJlYXR0YWNoKE1l
ZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcykKIH0KIAogI2lmIEVOQUJMRShSRVNPTFVUSU9OX01F
RElBX1FVRVJZKQotc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25z
b2xlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzZXJpYWxpemVkRXhwcmVzc2lv
biwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQotewotICAgIEFTU0VSVChkb2N1bWVu
dCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKIAorc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5p
bmdNZXNzYWdlVG9Db25zb2xlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzZXJp
YWxpemVkRXhwcmVzc2lvbiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQorewogICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhUXVlcnlNZXNzYWdlKEFTQ0lJTGl0
ZXJhbCgiQ29uc2lkZXIgdXNpbmcgJ2RwcHgnIHVuaXRzIGluc3RlYWQgb2YgJyVyZXBsYWNlbWVu
dFVuaXRzJScsIGFzIGluIENTUyAnJXJlcGxhY2VtZW50VW5pdHMlJyBtZWFucyBkb3RzLXBlci1D
U1MtJWxlbmd0aFVuaXQlLCBub3QgZG90cy1wZXItcGh5c2ljYWwtJWxlbmd0aFVuaXQlLCBzbyBk
b2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgJyVyZXBsYWNlbWVudFVuaXRzJScgb2Yg
YSBzY3JlZW4uIEluIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb246ICIpKTsKICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVZhbHVlRFBJKEFTQ0lJTGl0ZXJhbCgiZHBpIikpOwog
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhVmFsdWVEUENNKEFTQ0lJTGl0
ZXJhbCgiZHBjbSIpKTsKQEAgLTI5NiwxNiArMjc2LDE2IEBAIHN0YXRpYyB2b2lkIGFkZFJlc29s
dXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IFN0
cmluCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbGVuZ3RoVW5pdENlbnRpbWV0
ZXIoQVNDSUlMaXRlcmFsKCJjZW50aW1ldGVyIikpOwogCiAgICAgU3RyaW5nIG1lc3NhZ2U7Ci0g
ICAgaWYgKHZhbHVlLT5pc0RvdHNQZXJJbmNoKCkpCi0gICAgICAgIG1lc3NhZ2UgPSBTdHJpbmco
bWVkaWFRdWVyeU1lc3NhZ2UpLnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFs
dWVEUEkpLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRJbmNoKTsKLSAgICBlbHNl
IGlmICh2YWx1ZS0+aXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICBtZXNzYWdlID0gU3Ry
aW5nKG1lZGlhUXVlcnlNZXNzYWdlKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRp
YVZhbHVlRFBDTSkucmVwbGFjZSgiJWxlbmd0aFVuaXQlIiwgbGVuZ3RoVW5pdENlbnRpbWV0ZXIp
OworICAgIGlmICh2YWx1ZS5pc0RvdHNQZXJJbmNoKCkpCisgICAgICAgIG1lc3NhZ2UgPSBtZWRp
YVF1ZXJ5TWVzc2FnZS5nZXQoKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRpYVZh
bHVlRFBJKS5yZXBsYWNlKCIlbGVuZ3RoVW5pdCUiLCBsZW5ndGhVbml0SW5jaCk7CisgICAgZWxz
ZSBpZiAodmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQorICAgICAgICBtZXNzYWdlID0gbWVk
aWFRdWVyeU1lc3NhZ2UuZ2V0KCkucmVwbGFjZSgiJXJlcGxhY2VtZW50VW5pdHMlIiwgbWVkaWFW
YWx1ZURQQ00pLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRDZW50aW1ldGVyKTsK
ICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgbWVzc2FnZS5h
cHBlbmQoc2VyaWFsaXplZEV4cHJlc3Npb24pOwogCi0gICAgZG9jdW1lbnQtPmFkZENvbnNvbGVN
ZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywgTWVzc2FnZUxldmVsOjpEZWJ1ZywgbWVzc2FnZSk7
CisgICAgZG9jdW1lbnQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6Q1NTLCBNZXNz
YWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlKTsKIH0KIAogdm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2Fy
bmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFRdWVyeVNldCogbWVk
aWFRdWVyeVNldCkKQEAgLTMxMywzMSArMjkzLDIzIEBAIHZvaWQgcmVwb3J0TWVkaWFRdWVyeVdh
cm5pbmdJZk5lZWRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IE1lZGlhUXVlcnlTZXQqIG1l
CiAgICAgaWYgKCFtZWRpYVF1ZXJ5U2V0IHx8ICFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgYXV0byYgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyeVNldC0+cXVlcnlWZWN0b3IoKTsK
LSAgICBjb25zdCBzaXplX3QgcXVlcnlDb3VudCA9IG1lZGlhUXVlcmllcy5zaXplKCk7Ci0KLSAg
ICBpZiAoIXF1ZXJ5Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgcXVlcnlDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1lZGlhUXVlcnkqIHF1
ZXJ5ID0gbWVkaWFRdWVyaWVzW2ldLmdldCgpOwotICAgICAgICBTdHJpbmcgbWVkaWFUeXBlID0g
cXVlcnktPm1lZGlhVHlwZSgpOwotICAgICAgICBpZiAoIXF1ZXJ5LT5pZ25vcmVkKCkgJiYgIWVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInByaW50IikpIHsKLSAgICAg
ICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV4cHJlc3Npb25zLnNpemUoKTsgKytqKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwID0gZXhwcmVzc2lvbnMuYXQo
aikuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cC0+bWVkaWFGZWF0dXJlKCkgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwgZXhwLT5tZWRpYUZlYXR1
cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwg
ZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3Jlc29sdXRpb25N
ZWRpYUZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1ZhbHVlID0g
IGV4cC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPihjc3NWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZh
bHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqY3NzVmFs
dWUpOworICAgIGZvciAoYXV0byYgcXVlcnkgOiBtZWRpYVF1ZXJ5U2V0LT5xdWVyeVZlY3Rvcigp
KSB7CisgICAgICAgIGlmICghcXVlcnktPmlnbm9yZWQoKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UocXVlcnkubWVkaWFUeXBlKCksICJwcmludCIpKSB7CisgICAgICAgICAgICBh
dXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGV4cHJlc3Npb24gOiBleHByZXNzaW9ucykgeworICAgICAgICAgICAgICAgIGlmIChl
eHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
IHx8IGV4cHJlc3Npb24ubWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFJl
c29sdXRpb24gfHwgZXhwZXhwcmVzc2lvbi5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluUmVzb3V0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHZhbHVlID0g
ZXhwcmVzc2lvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJJbmNoKCkgfHwgcHJp
bWl0aXZlVmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkZFJlc29sdXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwgbWVk
aWFRdWVyeVNldC0+bWVkaWFUZXh0KCksICZwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25zb2xlKCpkb2N1
bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksIHByaW1pdGl2ZVZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIH0KKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAppbmRleCA3
MzEwMzQwMGI0NjdjYmI0ZWY1YTgwNWU0MmM5MDIyYTBmZTkwNzNhLi5kNzM2NWNkYjE5NzI2NDIz
NGFhNGI4YzY3YjcyOWQwMjU3ZTNlMGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCkBAIC0xOCwy
NSArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5k
ZWYgTWVkaWFMaXN0X2gKLSNkZWZpbmUgTWVkaWFMaXN0X2gKKyNwcmFnbWEgb25jZQogCi0jaW5j
bHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUGFyc2VyOwog
Y2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsKLWNs
YXNzIE1lZGlhTGlzdDsKIGNsYXNzIE1lZGlhUXVlcnk7CiAKK3VzaW5nIEV4Y2VwdGlvbkNvZGUg
PSBpbnQ7CisKIGNsYXNzIE1lZGlhUXVlcnlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVF1
ZXJ5U2V0PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxNZWRpYVF1ZXJ5U2V0PiBjcmVhdGUo
KQpAQCAtNTIsMTggKzUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFRdWVyeVNldChtZWRpYVN0cmluZywgdHJ1ZSkpOwogICAgIH0KICAgICB+TWVkaWFR
dWVyeVNldCgpOwotICAgIAorCiAgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmKTsKICAgICBi
b29sIGFkZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHJlbW92ZShjb25zdCBTdHJpbmcmKTsK
IAotICAgIHZvaWQgYWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4pOwor
ICAgIHZvaWQgYWRkTWVkaWFRdWVyeShNZWRpYVF1ZXJ5JiYpOworCisgICAgY29uc3QgVmVjdG9y
PE1lZGlhUXVlcnk+JiBxdWVyeVZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcmllczsgfQog
Ci0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5Pj4mIHF1ZXJ5VmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9xdWVyaWVzOyB9Ci0gICAgCiAgICAgaW50IGxhc3RMaW5l
KCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZTsgfQogICAgIHZvaWQgc2V0TGFzdExpbmUoaW50
IGxhc3RMaW5lKSB7IG1fbGFzdExpbmUgPSBsYXN0TGluZTsgfQotICAgIAorCiAgICAgU3RyaW5n
IG1lZGlhVGV4dCgpIGNvbnN0OwogCiAgICAgUmVmPE1lZGlhUXVlcnlTZXQ+IGNvcHkoKSBjb25z
dCB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlTZXQoKnRoaXMpKTsgfQpAQCAtNzIs
MTAgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgTWVkaWFRdWVyeVNldCgpOwogICAgIE1lZGlhUXVl
cnlTZXQoY29uc3QgU3RyaW5nJiBtZWRpYVF1ZXJ5LCBib29sIGZhbGxiYWNrVG9EZXNjcmlwdGlv
bik7CiAgICAgTWVkaWFRdWVyeVNldChjb25zdCBNZWRpYVF1ZXJ5U2V0Jik7Ci0gICAgCisKKyAg
ICBPcHRpb25hbDxNZWRpYVF1ZXJ5PiBpbnRlcm5hbFBhcnNlKENTU1BhcnNlciYsIGNvbnN0IFN0
cmluZyYpOworICAgIE9wdGlvbmFsPE1lZGlhUXVlcnk+IGludGVybmFsUGFyc2UoY29uc3QgU3Ry
aW5nJik7CisKICAgICB1bnNpZ25lZCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yIDogMTsgLy8gdHJ1
ZSBpZiBmYWlsZWQgbWVkaWEgcXVlcnkgcGFyc2luZyBzaG91bGQgZmFsbGJhY2sgdG8gbWVkaWEg
ZGVzY3JpcHRpb24gcGFyc2luZy4KICAgICBzaWduZWQgbV9sYXN0TGluZSA6IDMxOwotICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+IG1fcXVlcmllczsKKyAgICBWZWN0b3I8
TWVkaWFRdWVyeT4gbV9xdWVyaWVzOwogfTsKIAogY2xhc3MgTWVkaWFMaXN0IDogcHVibGljIFJl
ZkNvdW50ZWQ8TWVkaWFMaXN0PiB7CkBAIC05OSwxMSArMTAwLDEwIEBAIHB1YmxpYzoKICAgICBT
dHJpbmcgbWVkaWFUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMtPm1lZGlhVGV4
dCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29k
ZSYpOwogCi0gICAgLy8gTm90IHBhcnQgb2YgQ1NTT00uCiAgICAgQ1NTUnVsZSogcGFyZW50UnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsgfQogICAgIENTU1N0eWxlU2hlZXQqIHBh
cmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlU2hlZXQ7IH0KLSAg
ICB2b2lkIGNsZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVl
dCk7IG1fcGFyZW50U3R5bGVTaGVldCA9IDA7IH0KLSAgICB2b2lkIGNsZWFyUGFyZW50UnVsZSgp
IHsgQVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IDA7IH0KKyAgICB2b2lkIGNs
ZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVldCk7IG1fcGFy
ZW50U3R5bGVTaGVldCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIGNsZWFyUGFyZW50UnVsZSgpIHsg
QVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IG51bGxwdHI7IH0KICAgICBjb25z
dCBNZWRpYVF1ZXJ5U2V0KiBxdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMu
Z2V0KCk7IH0KIAogICAgIHZvaWQgcmVhdHRhY2goTWVkaWFRdWVyeVNldCopOwpAQCAtMTE0LDE1
ICsxMTQsMTUgQEAgcHJpdmF0ZToKICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1J1
bGUqIHBhcmVudFJ1bGUpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVy
aWVzOwotICAgIENTU1N0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKLSAgICBDU1NSdWxl
KiBtX3BhcmVudFJ1bGU7CisgICAgQ1NTU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0IHsg
bnVsbHB0ciB9OworICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZSB7IG51bGxwdHIgfTsKIH07CiAK
ICNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKKwogLy8gQWRkcyBtZXNzYWdlIHRv
IGluc3BlY3RvciBjb25zb2xlIHdoZW5ldmVyIGRwaSBvciBkcGNtIHZhbHVlcyBhcmUgdXNlZCBm
b3IgInNjcmVlbiIgbWVkaWEuCiB2b2lkIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQo
RG9jdW1lbnQqLCBjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7CisKICNlbmRpZgogCiB9IC8vIG5hbWVz
cGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAppbmRleCA0YTI1YTExYjli
ZDY2ZTJhNjMzMmQ0Y2I4MGYzNGI1NTc3NGI0NWYxLi4xM2Q3NzU2OTZlNDdhOTUwMzkzYTlmZTNl
ODdmNmZjMjMzOTY4Zjg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCkBAIC0yOSw3ICsy
OSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeS5oIgogCi0j
aW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxk
ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzcsODYgKzM2LDYyIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxpemUt
YS1tZWRpYS1xdWVyeQogU3RyaW5nIE1lZGlhUXVlcnk6OnNlcmlhbGl6ZSgpIGNvbnN0CiB7Ci0g
ICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgaWYgKCFtX2lnbm9yZWQpIHsKLSAgICAgICAg
c3dpdGNoIChtX3Jlc3RyaWN0b3IpIHsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpPbmx5Ogot
ICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm9ubHkgIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb3Q6Ci0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgibm90ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TWVkaWFRdWVyeTo6Tm9uZToKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fZXhwcmVzc2lvbnMtPmlzRW1wdHkoKSkgewotICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChtX21lZGlhVHlwZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9tZWRpYVR5cGUgIT0gImFsbCIgfHwgbV9yZXN0
cmljdG9yICE9IE5vbmUpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9tZWRpYVR5cGUp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiBhbmQgIik7Ci0gICAgICAgIH0K
KyAgICBpZiAobV9pZ25vcmVkKSB7CisgICAgICAgIC8vIElmIHF1ZXJ5IGlzIGludmFsaWQsIHNl
cmlhbGl6ZWQgdGV4dCBzaG91bGQgdHVybiBpbnRvICJub3QgYWxsIi4KKyAgICAgICAgcmV0dXJu
IEFTQ0lJTGl0ZXJhbCgibm90IGFsbCIpOworICAgIH0KIAotICAgICAgICByZXN1bHQuYXBwZW5k
KG1fZXhwcmVzc2lvbnMtPmF0KDApLT5zZXJpYWxpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90
IGkgPSAxOyBpIDwgbV9leHByZXNzaW9ucy0+c2l6ZSgpOyArK2kpIHsKKyAgICBib29sIHNob3Vs
ZE9taXRNZWRpYVR5cGUgPSBmYWxzZTsKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBz
d2l0Y2ggKG1fcmVzdHJpY3RvcikgeworICAgIGNhc2UgTWVkaWFRdWVyeTo6T25seToKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm9ubHkgIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTWVkaWFRdWVyeTo6Tm90OgorICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgibm90ICIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUXVlcnk6Ok5vbmU6CisgICAgICAgIHNo
b3VsZE9taXRNZWRpYVR5cGUgPSAhbV9leHByZXNzaW9ucy5pc0VtcHR5KCkgJiYgbV9tZWRpYVR5
cGUgPT0gImFsbCI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBib29sIG5lZWRzQW5kID0g
ZmFsc2U7CisgICAgaWYgKCFzaG91bGRPbWl0TWVkaWFUeXBlKSB7CisgICAgICAgIHJlc3VsdC5h
cHBlbmQobV9tZWRpYVR5cGUpOworICAgICAgICBuZWVkc0FuZCA9IHRydWU7CisgICAgfQorICAg
IGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IG1fZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgaWYgKG5l
ZWRzQW5kKQogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIiBhbmQgIik7Ci0gICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKG1fZXhwcmVzc2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSk7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAvLyBJZiBxdWVyeSBpcyBpbnZhbGlk
LCBzZXJpYWxpemVkIHRleHQgc2hvdWxkIHR1cm4gaW50byAibm90IGFsbCIuCi0gICAgICAgIHJl
c3VsdC5hcHBlbmRMaXRlcmFsKCJub3QgYWxsIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZXhw
cmVzc2lvbi5zZXJpYWxpemUoKSk7CisgICAgICAgIG5lZWRzQW5kID0gdHJ1ZTsKICAgICB9CiAg
ICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogfQogCi1NZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5
KFJlc3RyaWN0b3IgciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHN0ZDo6dW5pcXVlX3B0cjxF
eHByZXNzaW9uVmVjdG9yPiBleHBycykKLSAgICA6IG1fcmVzdHJpY3RvcihyKQorTWVkaWFRdWVy
eTo6TWVkaWFRdWVyeShSZXN0cmljdG9yIHJlc3RyaWN0b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlLCBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+JiYgZXhwcmVzc2lvbnMpCisgICAgOiBt
X3Jlc3RyaWN0b3IocmVzdHJpY3RvcikKICAgICAsIG1fbWVkaWFUeXBlKG1lZGlhVHlwZS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpKQotICAgICwgbV9leHByZXNzaW9ucyhXVEZNb3ZlKGV4cHJz
KSkKLSAgICAsIG1faWdub3JlZChmYWxzZSkKKyAgICAsIG1fZXhwcmVzc2lvbnMoV1RGTW92ZShl
eHByZXNzaW9ucykpCiB7Ci0gICAgaWYgKCFtX2V4cHJlc3Npb25zKSB7Ci0gICAgICAgIG1fZXhw
cmVzc2lvbnMgPSBzdGQ6Om1ha2VfdW5pcXVlPEV4cHJlc3Npb25WZWN0b3I+KCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBzdGQ6OnNvcnQobV9leHByZXNzaW9ucy0+YmVnaW4oKSwg
bV9leHByZXNzaW9ucy0+ZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8mIGIpIHsKLSAgICAgICAgcmV0
dXJuIGNvZGVQb2ludENvbXBhcmUoYS0+c2VyaWFsaXplKCksIGItPnNlcmlhbGl6ZSgpKSA8IDA7
CisgICAgc3RkOjpzb3J0KG1fZXhwcmVzc2lvbnMuYmVnaW4oKSwgbV9leHByZXNzaW9ucy5lbmQo
KSwgW10oYXV0byYgYSwgYXV0byYgYikgeworICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFy
ZShhLnNlcmlhbGl6ZSgpLCBiLnNlcmlhbGl6ZSgpKSA8IDA7CiAgICAgfSk7CiAKLSAgICAvLyBy
ZW1vdmUgYWxsIGR1cGxpY2F0ZWQgZXhwcmVzc2lvbnMKKyAgICAvLyBSZW1vdmUgYWxsIGR1cGxp
Y2F0ZWQgZXhwcmVzc2lvbnMuCiAgICAgU3RyaW5nIGtleTsKLSAgICBmb3IgKGludCBpID0gbV9l
eHByZXNzaW9ucy0+c2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICBmb3IgKGludCBpID0g
bV9leHByZXNzaW9ucy5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewogCi0gICAgICAgIC8vIGlm
IG5vdCBhbGwgb2YgdGhlIGV4cHJlc3Npb25zIGlzIHZhbGlkIHRoZSBtZWRpYSBxdWVyeSBtdXN0
IGJlIGlnbm9yZWQuCisgICAgICAgIC8vIElmIGFueSBleHByZXNzaW9uIGlzIGludmFsaWQgdGhl
IG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdub3JlZC4KICAgICAgICAgaWYgKCFtX2lnbm9yZWQpCi0g
ICAgICAgICAgICBtX2lnbm9yZWQgPSAhbV9leHByZXNzaW9ucy0+YXQoaSktPmlzVmFsaWQoKTsK
KyAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25zW2ldLmlzVmFsaWQoKTsKIAot
ICAgICAgICBpZiAobV9leHByZXNzaW9ucy0+YXQoaSktPnNlcmlhbGl6ZSgpID09IGtleSkKLSAg
ICAgICAgICAgIG1fZXhwcmVzc2lvbnMtPnJlbW92ZShpKTsKKyAgICAgICAgaWYgKG1fZXhwcmVz
c2lvbnNbaV0uc2VyaWFsaXplKCkgPT0ga2V5KQorICAgICAgICAgICAgbV9leHByZXNzaW9ucy5y
ZW1vdmUoaSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtleSA9IG1fZXhwcmVzc2lvbnMt
PmF0KGkpLT5zZXJpYWxpemUoKTsKKyAgICAgICAgICAgIGtleSA9IG1fZXhwcmVzc2lvbnNbaV0u
c2VyaWFsaXplKCk7CiAgICAgfQogfQogCi1NZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KGNvbnN0IE1l
ZGlhUXVlcnkmIG8pCi0gICAgOiBtX3Jlc3RyaWN0b3Ioby5tX3Jlc3RyaWN0b3IpCi0gICAgLCBt
X21lZGlhVHlwZShvLm1fbWVkaWFUeXBlKQotICAgICwgbV9leHByZXNzaW9ucyhzdGQ6Om1ha2Vf
dW5pcXVlPEV4cHJlc3Npb25WZWN0b3I+KG8ubV9leHByZXNzaW9ucy0+c2l6ZSgpKSkKLSAgICAs
IG1faWdub3JlZChvLm1faWdub3JlZCkKLSAgICAsIG1fc2VyaWFsaXphdGlvbkNhY2hlKG8ubV9z
ZXJpYWxpemF0aW9uQ2FjaGUpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fZXhw
cmVzc2lvbnMtPnNpemUoKTsgKytpKQotICAgICAgICAoKm1fZXhwcmVzc2lvbnMpW2ldID0gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXhwPigqby5tX2V4cHJlc3Npb25zLT5hdChpKSk7Ci19
Ci0KLU1lZGlhUXVlcnk6On5NZWRpYVF1ZXJ5KCkKLXsKLX0KLQogLy8gaHR0cDovL2Rldi53My5v
cmcvY3Nzd2cvY3Nzb20vI2NvbXBhcmUtbWVkaWEtcXVlcmllcwogYm9vbCBNZWRpYVF1ZXJ5Ojpv
cGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90aGVyKSBjb25zdAogewpAQCAtMTI0LDExICs5
OSwxMCBAQCBib29sIE1lZGlhUXVlcnk6Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3Ro
ZXIpIGNvbnN0CiB9CiAKIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNzZXJpYWxp
emUtYS1saXN0LW9mLW1lZGlhLXF1ZXJpZXMKLVN0cmluZyBNZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkg
Y29uc3QKK2NvbnN0IFN0cmluZyYgTWVkaWFRdWVyeTo6Y3NzVGV4dCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fc2VyaWFsaXphdGlvbkNhY2hlLmlzTnVsbCgpKQotICAgICAgICBjb25zdF9jYXN0PE1l
ZGlhUXVlcnkqPih0aGlzKS0+bV9zZXJpYWxpemF0aW9uQ2FjaGUgPSBzZXJpYWxpemUoKTsKLQor
ICAgICAgICBtX3NlcmlhbGl6YXRpb25DYWNoZSA9IHNlcmlhbGl6ZSgpOwogICAgIHJldHVybiBt
X3NlcmlhbGl6YXRpb25DYWNoZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKaW5kZXggNWY5
ZmExZjEzOGNlNTFjZDg4ZmVkMGUwOWY5YWUxMTZiNTU4Y2MyMS4uMjA5ODRkMzU2M2VmYWVhMzEz
NGU4YWZjZmMzNzVkZWU4ZGViMmYyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCkBAIC0yNiw0
OSArMjYsMzcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5X2gK
LSNkZWZpbmUgTWVkaWFRdWVyeV9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgPG1lbW9yeT4K
KyNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJp
bmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgTWVkaWFRdWVyeUV4cDsKIAogY2xh
c3MgTWVkaWFRdWVyeSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0g
ICAgZW51bSBSZXN0cmljdG9yIHsKLSAgICAgICAgT25seSwgTm90LCBOb25lCi0gICAgfTsKKyAg
ICBlbnVtIFJlc3RyaWN0b3IgeyBPbmx5LCBOb3QsIE5vbmUgfTsKIAotICAgIHR5cGVkZWYgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4gRXhwcmVzc2lvblZlY3RvcjsKLQot
ICAgIE1lZGlhUXVlcnkoUmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIHN0ZDo6
dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+Pj4gZXhwcnMp
OwotICAgIE1lZGlhUXVlcnkoY29uc3QgTWVkaWFRdWVyeSYpOwotICAgIH5NZWRpYVF1ZXJ5KCk7
CisgICAgTWVkaWFRdWVyeShSZXN0cmljdG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgVmVj
dG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiYmKTsKIAogICAgIFJlc3RyaWN0b3IgcmVzdHJpY3Rv
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmVzdHJpY3RvcjsgfQotICAgIGNvbnN0IFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+JiBleHByZXNzaW9ucygpIGNvbnN0IHsgcmV0dXJu
ICptX2V4cHJlc3Npb25zOyB9Ci0gICAgU3RyaW5nIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbWVkaWFUeXBlOyB9Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90
aGVyKSBjb25zdDsKLSAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworICAgIGNvbnN0IFZlY3Rv
cjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4mIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gbV9l
eHByZXNzaW9uczsgfQorICAgIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9tZWRpYVR5cGU7IH0KICAgICBib29sIGlnbm9yZWQoKSBjb25zdCB7IHJldHVybiBtX2ln
bm9yZWQ7IH0KIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBjb3B5KCkgY29uc3Qg
eyByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5PigqdGhpcyk7IH0KKyAgICBjb25z
dCBTdHJpbmcmIGNzc1RleHQoKSBjb25zdDsKIAotIHByaXZhdGU6Ci0gICAgUmVzdHJpY3RvciBt
X3Jlc3RyaWN0b3I7Ci0gICAgU3RyaW5nIG1fbWVkaWFUeXBlOwotICAgIHN0ZDo6dW5pcXVlX3B0
cjxFeHByZXNzaW9uVmVjdG9yPiBtX2V4cHJlc3Npb25zOwotICAgIGJvb2wgbV9pZ25vcmVkOwot
ICAgIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNoZTsKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwogCitwcml2YXRlOgogICAgIFN0cmluZyBzZXJp
YWxpemUoKSBjb25zdDsKKworICAgIFJlc3RyaWN0b3IgbV9yZXN0cmljdG9yOworICAgIFN0cmlu
ZyBtX21lZGlhVHlwZTsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+IG1fZXhwcmVz
c2lvbnM7CisgICAgYm9vbCBtX2lnbm9yZWQgeyBmYWxzZSB9OworICAgIG11dGFibGUgU3RyaW5n
IG1fc2VyaWFsaXphdGlvbkNhY2hlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKaW5kZXggZmRjZTg5YWUz
MGMyNzYxNmY5MWM5NTg3ZjdmYTIxZGE1ZGFjNjY2ZC4uY2VmMDlmNDQ3YTYzYWYzODM4ZWE3NTZj
NTNlMWFjZjMxY2U4Yjg2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVh
dG9yLmNwcApAQCAtNDEsNyArNDEsNiBAQAogI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgi
CiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeS5oIgotI2luY2x1
ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJOb2RlUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTU4LDQyICs1Nyw0
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBNZWRpYUZlYXR1
cmVOYW1lczsKLQogZW51bSBNZWRpYUZlYXR1cmVQcmVmaXggeyBNaW5QcmVmaXgsIE1heFByZWZp
eCwgTm9QcmVmaXggfTsKIAotdHlwZWRlZiBib29sICgqRXZhbEZ1bmMpKENTU1ZhbHVlKiwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4
KTsKLXR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgRXZhbEZ1bmM+IEZ1bmN0aW9u
TWFwOwotc3RhdGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rpb25NYXA7Cit0eXBlZGVmIGJvb2wgKCpN
ZWRpYVF1ZXJ5RnVuY3Rpb24pKENTU1ZhbHVlKiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4KTsKK3R5cGVkZWYgSGFzaE1hcDxBdG9t
aWNTdHJpbmdJbXBsKiwgTWVkaWFRdWVyeUZ1bmN0aW9uPiBNZWRpYVF1ZXJ5RnVuY3Rpb25NYXA7
CiAKLS8qCi0gKiBGSVhNRTogZm9sbG93aW5nIG1lZGlhIGZlYXR1cmVzIGFyZSBub3QgaW1wbGVt
ZW50ZWQ6IHNjYW4KLSAqCi0gKiBzY2FuOiBUaGUgInNjYW4iIG1lZGlhIGZlYXR1cmUgZGVzY3Jp
YmVzIHRoZSBzY2FubmluZyBwcm9jZXNzIG9mCi0gKiB0diBvdXRwdXQgZGV2aWNlcy4gSXQncyB1
bmtub3duIGhvdyB0byByZXRyaWV2ZSB0aGlzIGluZm9ybWF0aW9uIGZyb20KLSAqIHRoZSBwbGF0
Zm9ybQotICovCitzdGF0aWMgYm9vbCBpc1ZpZXdwb3J0RGVwZW5kZW50KGNvbnN0IEF0b21pY1N0
cmluZyYgbWVkaWFGZWF0dXJlKQoreworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OndpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluV2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptaW5IZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptYXhXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heEhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om9yaWVudGF0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5Bc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heEFzcGVjdFJhdGlvOworfQogCiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpN
ZWRpYVF1ZXJ5RXZhbHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQotICAgIDogbV9leHBS
ZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQorICAgIDogbV9mYWxsYmFja1Jlc3VsdChtZWRpYUZl
YXR1cmVSZXN1bHQpCiB7CiB9CiAKIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFs
dWF0b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVS
ZXN1bHQpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKLSAgICAsIG1fZXhw
UmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKKyAgICAsIG1fZmFsbGJhY2tSZXN1bHQobWVkaWFG
ZWF0dXJlUmVzdWx0KQogewogfQogCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZh
bHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZyYW1lKiBmcmFtZSwgY29u
c3QgUmVuZGVyU3R5bGUqIHN0eWxlKQorTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2
YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBEb2N1bWVudCYgZG9jdW1l
bnQsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHlsZSkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVk
TWVkaWFUeXBlKQotICAgICwgbV9mcmFtZShmcmFtZSkKKyAgICAsIG1fZnJhbWUoZG9jdW1lbnQu
ZnJhbWUoKSkKICAgICAsIG1fc3R5bGUoc3R5bGUpCi0gICAgLCBtX2V4cFJlc3VsdChmYWxzZSkg
Ly8gZG9lc24ndCBtYXR0ZXIgd2hlbiB3ZSBoYXZlIG1fZnJhbWUgYW5kIG1fc3R5bGUKLXsKLX0K
LQotTWVkaWFRdWVyeUV2YWx1YXRvcjo6fk1lZGlhUXVlcnlFdmFsdWF0b3IoKQogewogfQogCkBA
IC0xMTgsODIgKzExNSw3NCBAQCBzdGF0aWMgYm9vbCBhcHBseVJlc3RyaWN0b3IoTWVkaWFRdWVy
eTo6UmVzdHJpY3RvciByLCBib29sIHZhbHVlKQogICAgIHJldHVybiByID09IE1lZGlhUXVlcnk6
Ok5vdCA/ICF2YWx1ZSA6IHZhbHVlOwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2
YWwoY29uc3QgTWVkaWFRdWVyeVNldCogcXVlcnlTZXQsIFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVz
b2x2ZXIpIGNvbnN0Citib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25z
dAogewotICAgIGlmICghcXVlcnlTZXQpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0
byYgcXVlcmllcyA9IHF1ZXJ5U2V0LT5xdWVyeVZlY3RvcigpOworICAgIGF1dG8mIHF1ZXJpZXMg
PSBxdWVyeVNldC5xdWVyeVZlY3RvcigpOwogICAgIGlmICghcXVlcmllcy5zaXplKCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOyAvLyBlbXB0eSBxdWVyeSBsaXN0IGV2YWx1YXRlcyB0byB0cnVlCiAK
ICAgICAvLyBpdGVyYXRlIG92ZXIgcXVlcmllcywgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRv
IHRydWUgKE9SIHNlbWFudGljcykKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcXVlcmllcy5zaXplKCkgJiYgIXJlc3VsdDsgKytpKSB7Ci0gICAg
ICAgIE1lZGlhUXVlcnkqIHF1ZXJ5ID0gcXVlcmllc1tpXS5nZXQoKTsKKyAgICAgICAgYXV0byYg
cXVlcnkgPSBxdWVyaWVzW2ldOwogCi0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpIHx8ICgh
cXVlcnktPmV4cHJlc3Npb25zKCkuc2l6ZSgpICYmIHF1ZXJ5LT5tZWRpYVR5cGUoKS5pc0VtcHR5
KCkpKQorICAgICAgICBpZiAocXVlcnkuaWdub3JlZCgpIHx8ICghcXVlcnkuZXhwcmVzc2lvbnMo
KS5zaXplKCkgJiYgcXVlcnkubWVkaWFUeXBlKCkuaXNFbXB0eSgpKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS0+bWVkaWFUeXBlKCkp
KSB7Ci0gICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LT5leHByZXNzaW9ucygp
OwotICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdoIGV4cHJlc3Npb25zLCBzdG9wIGlmIGFu
eSBvZiB0aGVtIGV2YWwgdG8gZmFsc2UKLSAgICAgICAgICAgIC8vIChBTkQgc2VtYW50aWNzKQor
ICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkpKSB7CisgICAgICAg
ICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7CisgICAgICAgICAg
ICAvLyBpdGVyYXRlIHRocm91Z2ggZXhwcmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZh
bCB0byBmYWxzZSAoQU5EIHNlbWFudGljcykKICAgICAgICAgICAgIHNpemVfdCBqID0gMDsKICAg
ICAgICAgICAgIGZvciAoOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAg
ICAgICAgICBib29sIGV4cHJSZXN1bHQgPSBldmFsKGV4cHJlc3Npb25zLmF0KGopLmdldCgpKTsK
LSAgICAgICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlciAmJiBleHByZXNzaW9ucy5hdChqKS0+
aXNWaWV3cG9ydERlcGVuZGVudCgpKQotICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LT5hZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoZXhwcmVzc2lvbnMuYXQoaiku
Z2V0KCksIGV4cHJSZXN1bHQpOwotICAgICAgICAgICAgICAgIGlmICghZXhwclJlc3VsdCkKKyAg
ICAgICAgICAgICAgICBib29sIGV4cHJlc3Npb25SZXN1bHQgPSBldmFsdWF0ZShleHByZXNzaW9u
c1tqXSk7CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIgJiYgaXNWaWV3cG9ydERl
cGVuZGVudChleHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAgICAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXItPmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChl
eHByZXNzaW9uc1tqXSwgZXhwcmVzc2lvblJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFl
eHByZXNzaW9uUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgLy8gYXNzdW1lIHRydWUgaWYgd2UgYXJlIGF0IHRoZSBlbmQgb2Yg
dGhlIGxpc3QsCiAgICAgICAgICAgICAvLyBvdGhlcndpc2UgYXNzdW1lIGZhbHNlCi0gICAgICAg
ICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwgZXhwcmVz
c2lvbnMuc2l6ZSgpID09IGopOworICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9y
KHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZXhwcmVzc2lvbnMuc2l6ZSgpID09IGopOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS0+cmVzdHJp
Y3RvcigpLCBmYWxzZSk7CisgICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVl
cnkucmVzdHJpY3RvcigpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsQ2hlY2tpbmdWaWV3cG9ydERlcGVuZGVu
dFJlc3VsdHMoY29uc3QgTWVkaWFRdWVyeVNldCogcXVlcnlTZXQsIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+JiByZXN1bHRzKQorYm9vbCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNldCwgVmVjdG9yPE1lZGlh
UXVlcnlSZXN1bHQ+JiByZXN1bHRzKSBjb25zdAogewotICAgIGlmICghcXVlcnlTZXQpCi0gICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgYXV0byYgcXVlcmllcyA9IHF1ZXJ5U2V0LT5xdWVyeVZl
Y3RvcigpOworICAgIGF1dG8mIHF1ZXJpZXMgPSBxdWVyeVNldC5xdWVyeVZlY3RvcigpOwogICAg
IGlmICghcXVlcmllcy5zaXplKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1ZXJpZXMuc2l6ZSgp
ICYmICFyZXN1bHQ7ICsraSkgewotICAgICAgICBNZWRpYVF1ZXJ5KiBxdWVyeSA9IHF1ZXJpZXNb
aV0uZ2V0KCk7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gcXVlcmllc1tpXTsKIAotICAgICAgICBp
ZiAocXVlcnktPmlnbm9yZWQoKSkKKyAgICAgICAgaWYgKHF1ZXJ5Lmlnbm9yZWQoKSkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS0+bWVk
aWFUeXBlKCkpKSB7Ci0gICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LT5leHBy
ZXNzaW9ucygpOworICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnkubWVkaWFUeXBlKCkp
KSB7CisgICAgICAgICAgICBhdXRvJiBleHByZXNzaW9ucyA9IHF1ZXJ5LmV4cHJlc3Npb25zKCk7
CiAgICAgICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgICAgICBmb3IgKDsgaiA8IGV4cHJl
c3Npb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBleHByUmVzdWx0ID0g
ZXZhbChleHByZXNzaW9ucy5hdChqKS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cHJl
c3Npb25zLmF0KGopLT5pc1ZpZXdwb3J0RGVwZW5kZW50KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJlc3VsdHMuYXBwZW5kKHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeVJlc3VsdD4oKmV4cHJl
c3Npb25zLmF0KGopLCBleHByUmVzdWx0KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFleHByUmVz
dWx0KQorICAgICAgICAgICAgICAgIGJvb2wgZXhwcmVzc2lvblJlc3VsdCA9IGV2YWx1YXRlKGV4
cHJlc3Npb25zW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAoaXNWaWV3cG9ydERlcGVuZGVudChl
eHByZXNzaW9uc1tqXS5tZWRpYUZlYXR1cmUoKSkpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dHMuYXBwZW5kKHsgZXhwcmVzc2lvbnNbal0sIGV4cHJlc3Npb25SZXN1bHQgfSk7CisgICAgICAg
ICAgICAgICAgaWYgKCFleHByZXNzaW9uUmVzdWx0KQogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3Rvcihx
dWVyeS0+cmVzdHJpY3RvcigpLCBleHByZXNzaW9ucy5zaXplKCkgPT0gaik7CisgICAgICAgICAg
ICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVzdHJpY3RvcigpLCBleHByZXNzaW9u
cy5zaXplKCkgPT0gaik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBw
bHlSZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGZhbHNlKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGZhbHNlKTsKICAgICB9
CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotYm9vbCBj
b21wYXJlVmFsdWUoVCBhLCBUIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lIFU+IGJvb2wgY29tcGFyZVZhbHVlKFQgYSwgVSBiLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCiB7CiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgTWluUHJlZml4
OgpAQCAtMjA4LDQ1ICsxOTcsNDkgQEAgYm9vbCBjb21wYXJlVmFsdWUoVCBhLCBUIGIsIE1lZGlh
RmVhdHVyZVByZWZpeCBvcCkKIAogc3RhdGljIGJvb2wgY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUo
Q1NTVmFsdWUqIHZhbHVlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKIHsKLSAgICBpZiAoaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKSkgewotICAg
ICAgICBDU1NBc3BlY3RSYXRpb1ZhbHVlJiBhc3BlY3RSYXRpbyA9IGRvd25jYXN0PENTU0FzcGVj
dFJhdGlvVmFsdWU+KCp2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlVmFsdWUod2lkdGgg
KiBzdGF0aWNfY2FzdDxpbnQ+KGFzcGVjdFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSksIGhlaWdo
dCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8ubnVtZXJhdG9yVmFsdWUoKSksIG9wKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpczxDU1NBc3BlY3RSYXRpb1Zh
bHVlPih2YWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvJiBhc3BlY3RSYXRp
byA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSk7CisgICAgcmV0dXJuIGNv
bXBhcmVWYWx1ZSh3aWR0aCAqIGFzcGVjdFJhdGlvLmRlbm9taW5hdG9yVmFsdWUoKSwgaGVpZ2h0
ICogYXNwZWN0UmF0aW8ubnVtZXJhdG9yVmFsdWUoKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBu
dW1iZXJWYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGZsb2F0JiByZXN1bHQpCitzdGF0aWMgT3B0aW9u
YWw8ZG91YmxlPiBkb3VibGVWYWx1ZShDU1NWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgcmVzdWx0ID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05V
TUJFUik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpIHx8ICFkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKnZhbHVlKS5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsK
KyAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0RG91Ymxl
VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogfQogCi1zdGF0aWMgYm9vbCBj
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0
aWMgYm9vbCB6ZXJvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCiB7Ci0gICAgaW50IGJpdHNQZXJDb21wb25lbnQgPSBzY3JlZW5EZXB0aFBlckNvbXBvbmVu
dChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwotICAgIGZsb2F0IG51bWJlcjsK
LSAgICBpZiAodmFsdWUpCi0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVy
KSAmJiBjb21wYXJlVmFsdWUoYml0c1BlckNvbXBvbmVudCwgc3RhdGljX2Nhc3Q8aW50PihudW1i
ZXIpLCBvcCk7Ci0KLSAgICByZXR1cm4gYml0c1BlckNvbXBvbmVudCAhPSAwOworICAgIGF1dG8g
bnVtZXJpY1ZhbHVlID0gZG91YmxlVmFsdWUodmFsdWUpOworICAgIHJldHVybiBudW1lcmljVmFs
dWUgJiYgY29tcGFyZVZhbHVlKDAsIG51bWVyaWNWYWx1ZS52YWx1ZSgpLCBvcCk7CiB9CiAKLXN0
YXRpYyBib29sIGNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKK3N0YXRpYyBib29sIG9uZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgTWVkaWFGZWF0
dXJlUHJlZml4IG9wKQogewotICAgIC8vIEZJWE1FOiBJdCdzIHVua25vd24gaG93IHRvIHJldHJp
ZXZlIHRoZSBpbmZvcm1hdGlvbiBpZiB0aGUgZGlzcGxheSBtb2RlIGlzIGluZGV4ZWQKLSAgICAv
LyBBc3N1bWUgd2UgZG9uJ3Qgc3VwcG9ydCBpbmRleGVkIGRpc3BsYXkuCiAgICAgaWYgKCF2YWx1
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRv
IG51bWVyaWNWYWx1ZSA9IGRvdWJsZVZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbnVtZXJpY1Zh
bHVlICYmIGNvbXBhcmVWYWx1ZSgxLCBudW1lcmljVmFsdWUudmFsdWUoKSwgb3ApOworfQogCi0g
ICAgZmxvYXQgbnVtYmVyOwotICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAm
JiBjb21wYXJlVmFsdWUoMCwgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7CitzdGF0aWMg
Ym9vbCBjb2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQoreworICAg
IGludCBiaXRzUGVyQ29tcG9uZW50ID0gc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoZnJhbWUubWFp
bkZyYW1lKCkudmlldygpKTsKKyAgICBhdXRvIG51bWVyaWNWYWx1ZSA9IGRvdWJsZVZhbHVlKHZh
bHVlKTsKKyAgICBpZiAoIW51bWVyaWNWYWx1ZSkKKyAgICAgICAgcmV0dXJuIGJpdHNQZXJDb21w
b25lbnQ7CisgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZShiaXRzUGVyQ29tcG9uZW50LCBudW1lcmlj
VmFsdWUudmFsdWUoKSwgb3ApOworfQorCitzdGF0aWMgYm9vbCBjb2xvckluZGV4RXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUm
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCit7CisgICAgLy8gQWx3YXlzIHJldHVybiBmYWxzZSBm
b3IgaW5kZXhlZCBkaXNwbGF5LgorICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsK
IH0KIAotc3RhdGljIGJvb2wgY29sb3JfZ2FtdXRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgY29sb3JHYW11dEV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjU1LDEyICsyNDgsMTAgQEAgc3RhdGljIGJvb2wgY29sb3JfZ2FtdXRNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXIKICAgICBj
YXNlIENTU1ZhbHVlU3JnYjoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgY2FzZSBDU1NWYWx1
ZVAzOgotICAgICAgICAvLyBGSVhNRTogRm9yIHRoZSBtb21lbnQgd2UnbGwganVzdCBhc3N1bWUg
YW4gImV4dGVuZGVkCi0gICAgICAgIC8vIGNvbG9yIiBkaXNwbGF5IGlzIGF0IGxlYXN0IGFzIGdv
b2QgYXMgUDMuCi0gICAgICAgIHJldHVybiBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKTsKKyAgICAgICAgLy8gRklYTUU6IEZvciB0
aGUgbW9tZW50IHdlIGp1c3QgYXNzdW1lIGFueSAiZXh0ZW5kZWQgY29sb3IiIGRpc3BsYXkgaXMg
YXQgbGVhc3QgYXMgZ29vZCBhcyBQMy4KKyAgICAgICAgcmV0dXJuIHNjcmVlblN1cHBvcnRzRXh0
ZW5kZWRDb2xvcihmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpOwogICAgIGNhc2UgQ1NTVmFsdWVS
ZWMyMDIwOgotICAgICAgICAvLyBGSVhNRTogQXQgc29tZSBwb2ludCB3ZSBzaG91bGQgc3RhcnQg
ZGV0ZWN0aW5nIGRpc3BsYXlzIHRoYXQKLSAgICAgICAgLy8gc3VwcG9ydCBtb3JlIGNvbG9ycy4K
KyAgICAgICAgLy8gRklYTUU6IEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHN0YXJ0IGRldGVjdGlu
ZyBkaXNwbGF5cyB0aGF0IHN1cHBvcnQgbW9yZSBjb2xvcnMuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI2OCw5
MCArMjU5LDgyIEBAIHN0YXRpYyBib29sIGNvbG9yX2dhbXV0TWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyCiAgICAgfQogfQogCi1zdGF0aWMg
Ym9vbCBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIG1vbm9jaHJvbWVFdmFsdWF0ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAoIXNj
cmVlbklzTW9ub2Nocm9tZShmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpKSB7Ci0g
ICAgICAgIGlmICh2YWx1ZSkgewotICAgICAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZSgwLCBz
dGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBvcCk7CisgICAgaWYgKCFzY3JlZW5Jc01vbm9jaHJvbWUo
ZnJhbWUubWFpbkZyYW1lKCkudmlldygpKSkKKyAgICAgICAgcmV0dXJuIHplcm9FdmFsdWF0ZSh2
YWx1ZSwgb3ApOworICAgIHJldHVybiBjb2xvckV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgaW52ZXJ0ZWRfY29sb3JzTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
LCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIGludmVydGVkQ29sb3Jz
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgYm9vbCBpc0ludmVydGVkID0g
c2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKTsKLQogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJl
dHVybiBpc0ludmVydGVkOwotCi0gICAgY29uc3QgQ1NTVmFsdWVJRCBpZCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKLSAgICByZXR1cm4gKGlzSW52
ZXJ0ZWQgJiYgaWQgPT0gQ1NTVmFsdWVJbnZlcnRlZCkgfHwgKCFpc0ludmVydGVkICYmIGlkID09
IENTU1ZhbHVlTm9uZSk7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpLmdldFZhbHVlSUQoKSA9PSAoaXNJbnZlcnRlZCA/IENTU1ZhbHVlSW52ZXJ0ZWQgOiBD
U1NWYWx1ZU5vbmUpOwogfQogCi1zdGF0aWMgYm9vbCBvcmllbnRhdGlvbk1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBvcmllbnRhdGlvbkV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYs
IEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIEZyYW1lVmlldyogdmll
dyA9IGZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwog
ICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaW50IHdpZHRoID0g
dmlldy0+bGF5b3V0V2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0
KCk7Ci0gICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgY29u
c3QgQ1NTVmFsdWVJRCBpZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dFZhbHVlSUQoKTsKLSAgICAgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSAvLyBTcXVhcmUgdmlld3Bv
cnQgaXMgcG9ydHJhaXQuCi0gICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVMYW5kc2NhcGUgPT0g
aWQ7Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZVBvcnRyYWl0ID09IGlkOworICAgIGF1dG8gd2lk
dGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOworICAgIGF1dG8gaGVpZ2h0ID0gdmlldy0+bGF5b3V0
SGVpZ2h0KCk7CisKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKKyAg
ICAgICAgLy8gRXhwcmVzc2lvbiAob3JpZW50YXRpb24pIGV2YWx1YXRlcyB0byB0cnVlIGlmIHdp
ZHRoIGFuZCBoZWlnaHQgPj0gMC4KKyAgICAgICAgcmV0dXJuIGhlaWdodCA+PSAwICYmIHdpZHRo
ID49IDA7CiAgICAgfQogCi0gICAgLy8gRXhwcmVzc2lvbiAob3JpZW50YXRpb24pIGV2YWx1YXRl
cyB0byB0cnVlIGlmIHdpZHRoIGFuZCBoZWlnaHQgPj0gMC4KLSAgICByZXR1cm4gaGVpZ2h0ID49
IDAgJiYgd2lkdGggPj0gMDsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CisgICAgaWYgKHdpZHRoID4gaGVpZ2h0KSAv
LyBTcXVhcmUgdmlld3BvcnQgaXMgcG9ydHJhaXQuCisgICAgICAgIHJldHVybiBrZXl3b3JkID09
IENTU1ZhbHVlTGFuZHNjYXBlOworICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlUG9ydHJh
aXQ7CiB9CiAKLXN0YXRpYyBib29sIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBhc3BlY3RSYXRpb0V2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIEZyYW1lVmlldyogdmlldyA9
IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQorICAgIC8vICh7LG1pbi0sbWF4LX1hc3Bl
Y3QtcmF0aW8pCisgICAgLy8gYXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGl0cyBhc3BlY3Qg
cmF0aW8gaXMgbm9uLXplcm8KKyAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
IAotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVl
KHZhbHVlLCB2aWV3LT5sYXlvdXRXaWR0aCgpLCB2aWV3LT5sYXlvdXRIZWlnaHQoKSwgb3ApOwor
ICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgLy8gKHssbWluLSxtYXgtfWFzcGVjdC1yYXRpbykKLSAg
ICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgaXRzIGFzcGVjdCByYXRpbyBpcyBub24t
emVybwotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1
ZSh2YWx1ZSwgdmlldy0+bGF5b3V0V2lkdGgoKSwgdmlldy0+bGF5b3V0SGVpZ2h0KCksIG9wKTsK
IH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VBc3BlY3RSYXRp
b0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICh2YWx1
ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1h
aW5GcmFtZSgpLnZpZXcoKSk7Ci0gICAgICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1
ZSh2YWx1ZSwgc3RhdGljX2Nhc3Q8aW50PihzZy53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihz
Zy5oZWlnaHQoKSksIG9wKTsKLSAgICB9Ci0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLWFz
cGVjdC1yYXRpbykKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgaXRzIGFzcGVj
dCByYXRpbyBpcyBub24temVybwotICAgIHJldHVybiB0cnVlOworICAgIGlmICghdmFsdWUpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgYXV0byBzaXplID0gc2NyZWVuUmVjdChmcmFtZS5t
YWluRnJhbWUoKS52aWV3KCkpLnNpemUoKTsKKyAgICByZXR1cm4gY29tcGFyZUFzcGVjdFJhdGlv
VmFsdWUodmFsdWUsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgb3ApOwogfQogCi1zdGF0
aWMgYm9vbCBldmFsUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZXZhbHVhdGVSZXNvbHV0aW9uKENTU1Zh
bHVlKiB2YWx1ZSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7CiAgICAg
Ly8gRklYTUU6IFBvc3NpYmxlIGhhbmRsZSBvdGhlciBtZWRpYSB0eXBlcyB0aGFuICdzY3JlZW4n
IGFuZCAncHJpbnQnLgotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSAwOworCiAgICAg
Ly8gVGhpcyBjaGVja3MgdGhlIGFjdHVhbCBtZWRpYSB0eXBlIGFwcGxpZWQgdG8gdGhlIGRvY3Vt
ZW50LCBhbmQgd2Uga25vdwogICAgIC8vIHRoaXMgbWV0aG9kIG9ubHkgZ290IGNhbGxlZCBpZiB0
aGlzIG1lZGlhIHR5cGUgbWF0Y2hlcyB0aGUgb25lIGRlZmluZWQKICAgICAvLyBpbiB0aGUgcXVl
cnkuIFRodXMsIGlmIGlmIHRoZSBkb2N1bWVudCdzIG1lZGlhIHR5cGUgaXMgInByaW50IiwgdGhl
CiAgICAgLy8gbWVkaWEgdHlwZSBvZiB0aGUgcXVlcnkgd2lsbCBlaXRoZXIgYmUgInByaW50IiBv
ciAiYWxsIi4KICAgICBTdHJpbmcgbWVkaWFUeXBlID0gdmlldy0+bWVkaWFUeXBlKCk7CiAgICAg
aWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInNjcmVlbiIpKQot
ICAgICAgICBkZXZpY2VTY2FsZUZhY3RvciA9IGZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFj
dG9yKCk7CisgICAgICAgIGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUucGFnZSgpID8gZnJhbWUu
cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpIDogMTsKICAgICBlbHNlIGlmIChlcXVhbExldHRl
cnNJZ25vcmluZ0FTQ0lJQ2FzZShtZWRpYVR5cGUsICJwcmludCIpKSB7CiAgICAgICAgIC8vIFRo
ZSByZXNvbHV0aW9uIG9mIGltYWdlcyB3aGlsZSBwcmludGluZyBzaG91bGQgbm90IGRlcGVuZCBv
biB0aGUgZHBpCiAgICAgICAgIC8vIG9mIHRoZSBzY3JlZW4uIFVudGlsIHdlIHN1cHBvcnQgcHJv
cGVyIHdheXMgb2YgcXVlcnlpbmcgdGhpcyBpbmZvCkBAIC0zNjIsMjIgKzM0NSwyMiBAQCBzdGF0
aWMgYm9vbCBldmFsUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQogICAgIGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiAhIWRl
dmljZVNjYWxlRmFjdG9yOwogCi0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiByZXNvbHV0aW9uID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAgYXV0byYgcmVzb2x1dGlvbiA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgIHJldHVybiBjb21wYXJlVmFsdWUo
ZGV2aWNlU2NhbGVGYWN0b3IsIHJlc29sdXRpb24uaXNOdW1iZXIoKSA/IHJlc29sdXRpb24uZ2V0
RmxvYXRWYWx1ZSgpIDogcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVl
OjpDU1NfRFBQWCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSAqdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29s
IGRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
IHsKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5pc051bWJlcigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKKyAg
ICByZXR1cm4gKCF2YWx1ZSB8fCAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkpICYmIGV2YWx1YXRl
UmVzb2x1dGlvbih2YWx1ZSwgZnJhbWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x1dGlv
bk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMg
Ym9vbCByZXNvbHV0aW9uRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7
CiAjaWYgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgcmV0dXJuICghdmFsdWUg
fHwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSZXNvbHV0aW9uKCkpICYm
IGV2YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKS5pc1Jlc29sdXRpb24oKSkpICYmIGV2YWx1YXRlUmVzb2x1dGlvbih2YWx1
ZSwgZnJhbWUsIG9wKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICAgICBVTlVT
RURfUEFSQU0oZnJhbWUpOwpAQCAtMzg2LDIyICszNjksMTcgQEAgc3RhdGljIGJvb2wgcmVzb2x1
dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnMKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBncmlkTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGdyaWRFdmFsdWF0ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVh
dHVyZVByZWZpeCBvcCkKIHsKLSAgICAvLyBpZiBvdXRwdXQgZGV2aWNlIGlzIGJpdG1hcCwgZ3Jp
ZDogMCA9PSB0cnVlCi0gICAgLy8gYXNzdW1lIHdlIGhhdmUgYml0bWFwIGRldmljZQotICAgIGZs
b2F0IG51bWJlcjsKLSAgICBpZiAodmFsdWUgJiYgbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikp
Ci0gICAgICAgIHJldHVybiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCAw
LCBvcCk7Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUs
IG9wKTsKIH0KIAogc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGJv
b2wgc3RyaWN0LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgaW50JiByZXN1bHQpCiB7Ci0gICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KSkKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuaXNOdW1iZXIoKSkgewogICAgICAgICByZXN1bHQgPSBwcmltaXRpdmVWYWx1ZS5n
ZXRJbnRWYWx1ZSgpOwpAQCAtNDE2LDI3MSArMzk0LDIyNyBAQCBzdGF0aWMgYm9vbCBjb21wdXRl
TGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgYm9vbCBzdHJpY3QsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVycwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGJvb2wgZGV2aWNlX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCitzdGF0aWMgYm9vbCBkZXZpY2VIZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAg
RmxvYXRSZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3
KCkpOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBsb25nIGhlaWdodCA9IHNnLmhlaWdo
dCgpOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZh
bHVlKHN0YXRpY19jYXN0PGludD4oaGVpZ2h0KSwgbGVuZ3RoLCBvcCk7Ci0gICAgfQogICAgIC8v
ICh7LG1pbi0sbWF4LX1kZXZpY2UtaGVpZ2h0KQogICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZlIGEg
ZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXZhbHVl
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpbnQgbGVuZ3RoOworICAgIGF1dG8gaGVpZ2h0
ID0gc2NyZWVuUmVjdChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpLmhlaWdodCgpOworICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0
aCwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wg
ZGV2aWNlV2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRSZWN0IHNnID0gc2Ny
ZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwotICAgICAgICBpbnQg
bGVuZ3RoOwotICAgICAgICBsb25nIHdpZHRoID0gc2cud2lkdGgoKTsKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCks
IGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KHdpZHRoKSwgbGVuZ3RoLCBvcCk7Ci0gICAgfQogICAgIC8vICh7LG1pbi0sbWF4LX1kZXZpY2Ut
d2lkdGgpCiAgICAgLy8gYXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVy
bwotICAgIHJldHVybiB0cnVlOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGludCBsZW5ndGg7CisgICAgYXV0byB3aWR0aCA9IHNjcmVlblJlY3QoZnJhbWUubWFp
bkZyYW1lKCkudmlldygpKS53aWR0aCgpOworICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVl
LCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRhLCBsZW5n
dGgpICYmIGNvbXBhcmVWYWx1ZSh3aWR0aCwgbGVuZ3RoLCBvcCk7CiB9CiAKLXN0YXRpYyBib29s
IGhlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBoZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYg
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBm
cmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICBp
ZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZSkgewotICAg
ICAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0KCk7Ci0gICAgICAgIGlmIChSZW5k
ZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKLSAg
ICAgICAgICAgIGhlaWdodCA9IGFkanVzdEZvckFic29sdXRlWm9vbShoZWlnaHQsICpyZW5kZXJW
aWV3KTsKLSAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgo
dmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRh
LCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0aCwgb3ApOwotICAgIH0KLQot
ICAgIHJldHVybiB2aWV3LT5sYXlvdXRIZWlnaHQoKSAhPSAwOworICAgIGludCBoZWlnaHQgPSB2
aWV3LT5sYXlvdXRIZWlnaHQoKTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gaGVp
Z2h0OworICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuZG9jdW1lbnQoKS0+cmVuZGVy
VmlldygpKQorICAgICAgICBoZWlnaHQgPSBhZGp1c3RGb3JBYnNvbHV0ZVpvb20oaGVpZ2h0LCAq
cmVuZGVyVmlldyk7CisgICAgaW50IGxlbmd0aDsKKyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2
YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoaGVpZ2h0LCBsZW5ndGgsIG9wKTsKIH0KIAotc3RhdGlj
IGJvb2wgd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgd2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcg
PSBmcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAg
ICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh2YWx1ZSkgewot
ICAgICAgICBpbnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOwotICAgICAgICBpZiAoUmVu
ZGVyVmlldyogcmVuZGVyVmlldyA9IGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCi0g
ICAgICAgICAgICB3aWR0aCA9IGFkanVzdEZvckFic29sdXRlWm9vbSh3aWR0aCwgKnJlbmRlclZp
ZXcpOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2
YWx1ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEs
IGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9wKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdmlldy0+bGF5b3V0V2lkdGgoKSAhPSAwOworICAgIGludCB3aWR0aCA9IHZpZXct
PmxheW91dFdpZHRoKCk7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHdpZHRoOwor
ICAgIGlmIChhdXRvKiByZW5kZXJWaWV3ID0gZnJhbWUuZG9jdW1lbnQoKS0+cmVuZGVyVmlldygp
KQorICAgICAgICB3aWR0aCA9IGFkanVzdEZvckFic29sdXRlWm9vbSh3aWR0aCwgKnJlbmRlclZp
ZXcpOworICAgIGludCBsZW5ndGg7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFm
cmFtZS5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkg
JiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9wKTsKIH0KIAotLy8gcmVzdCBvZiB0aGUg
ZnVuY3Rpb25zIGFyZSB0cmFtcG9saW5lcyB3aGljaCBzZXQgdGhlIHByZWZpeCBhY2NvcmRpbmcg
dG8gdGhlIG1lZGlhIGZlYXR1cmUgZXhwcmVzc2lvbiB1c2VkCi0KLXN0YXRpYyBib29sIG1pbl9j
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Db2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4g
Y29sb3JFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtYXhfY29sb3JNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
KiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4Q29sb3JFdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1
cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1h
eFByZWZpeCk7CisgICAgcmV0dXJuIGNvbG9yRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2NvbG9yX2luZGV4TWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
K3N0YXRpYyBib29sIG1pbkNvbG9ySW5kZXhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gY29sb3JfaW5kZXhNZWRpYUZlYXR1
cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0
dXJuIGNvbG9ySW5kZXhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5Q
cmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWF4Q29sb3JJbmRleEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewotICAgIHJldHVybiBjb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JJbmRl
eEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAK
LXN0YXRpYyBib29sIG1pbl9tb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbk1vbm9jaHJvbWVF
dmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAg
ICByZXR1cm4gbW9ub2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gbW9ub2Nocm9tZUV2YWx1YXRlKHZhbHVl
LCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1h
eF9tb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heE1vbm9jaHJvbWVFdmFsdWF0ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gbW9ub2No
cm9tZU1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJl
Zml4KTsKKyAgICByZXR1cm4gbW9ub2Nocm9tZUV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQorc3RhdGljIGJvb2wgbWluQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gYXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAg
IHJldHVybiBhc3BlY3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgbWF4QXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZh
bCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBh
c3BlY3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZp
eCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
RXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBi
b29sIG1pbkRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7Cisg
ICAgcmV0dXJuIGRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9hc3BlY3Rf
cmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgbWF4RGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNl
X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZSh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBt
aW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkRldmljZVBpeGVsUmF0aW9F
dmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAg
ICByZXR1cm4gZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VQaXhlbFJhdGlv
RXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAot
c3RhdGljIGJvb2wgbWF4X2RldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZp
Y2VQaXhlbFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
dmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2
aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFBy
ZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluSGVp
Z2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
Ci0gICAgcmV0dXJuIGhlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gaGVpZ2h0RXZhbHVhdGUodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2hl
aWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhIZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gaGVpZ2h0TWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVy
biBoZWlnaHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtaW5fd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluV2lkdGhFdmFs
dWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1pblByZWZpeCk7CisgICAgcmV0dXJuIHdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3dpZHRoTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0
YXRpYyBib29sIG1heFdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHdpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiB3aWR0aEV2YWx1
YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRp
YyBib29sIG1pbl9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkRldmljZUhlaWdodEV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAg
IHJldHVybiBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRh
dGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VIZWlnaHRFdmFsdWF0ZSh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9v
bCBtYXhfZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZpY2VIZWlnaHRFdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1
cm4gZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlSGVpZ2h0RXZhbHVhdGUodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWlu
X2RldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5EZXZpY2VXaWR0aEV2YWx1YXRlKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZp
Y2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1p
blByZWZpeCk7CisgICAgcmV0dXJuIGRldmljZVdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNp
b25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV93
aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZpY2VXaWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2Vfd2lkdGhN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7
CisgICAgcmV0dXJuIGRldmljZVdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX3Jlc29sdXRpb25NZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3Rh
dGljIGJvb2wgbWluUmVzb2x1dGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZh
bCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBy
ZXNvbHV0aW9uRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4
KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4UmVz
b2x1dGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewotICAgIHJldHVybiByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiByZXNvbHV0aW9uRXZhbHVh
dGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGlj
IGJvb2wgYW5pbWF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
K3N0YXRpYyBib29sIGFuaW1hdGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQog
ewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJldHVy
biBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMSwgc3RhdGljX2Nh
c3Q8aW50PihudW1iZXIpLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2l0aW9uTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5z
aXRpb25FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUp
IHsKLSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFs
dWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDEsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwg
b3ApOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb25lRXZhbHVhdGUodmFs
dWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgdHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSos
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5zZm9ybTJkRXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUm
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZs
b2F0IG51bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYm
IGNvbXBhcmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9uZUV2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAK
LXN0YXRpYyBib29sIHRyYW5zZm9ybV8zZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB0cmFuc2Zvcm0zZEV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGJvb2wgcmV0dXJuVmFsdWVJZk5vUGFyYW1l
dGVyOwotICAgIGludCBoYXZlM2RSZW5kZXJpbmc7Ci0KICNpZiBFTkFCTEUoM0RfVFJBTlNGT1JN
UykKLSAgICBib29sIHRocmVlREVuYWJsZWQgPSBmYWxzZTsKLSAgICBpZiAoUmVuZGVyVmlldyog
dmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgdGhyZWVERW5hYmxlZCA9
IHZpZXctPmNvbXBvc2l0b3IoKS5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKTsKLQotICAgIHJldHVy
blZhbHVlSWZOb1BhcmFtZXRlciA9IHRocmVlREVuYWJsZWQ7Ci0gICAgaGF2ZTNkUmVuZGVyaW5n
ID0gdGhyZWVERW5hYmxlZCA/IDEgOiAwOworICAgIGF1dG8qIHZpZXcgPSBmcmFtZS5jb250ZW50
UmVuZGVyZXIoKTsKKyAgICByZXR1cm4gdmlldyAmJiB2aWV3LT5jb21wb3NpdG9yKCkuY2FuUmVu
ZGVyM0RUcmFuc2Zvcm1zKCkgPyBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApIDogemVyb0V2YWx1YXRl
KHZhbHVlLCBvcCk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7Ci0gICAgcmV0dXJu
VmFsdWVJZk5vUGFyYW1ldGVyID0gZmFsc2U7Ci0gICAgaGF2ZTNkUmVuZGVyaW5nID0gMDsKKyAg
ICByZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CiAjZW5kaWYKLQotICAgIGlmICh2YWx1
ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2
YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoaGF2ZTNkUmVuZGVyaW5nLCBzdGF0aWNfY2Fz
dDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJldHVyblZhbHVlSWZOb1Bh
cmFtZXRlcjsKIH0KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotc3RhdGljIGJv
b2wgdmlld19tb2RlTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKKworc3RhdGljIGJvb2wgdmlld01vZGVFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBvcCkKIHsKLSAgICBVTlVTRURfUEFSQU0ob3ApOwogICAgIGlmICghdmFsdWUpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogCi0gICAgY29uc3QgaW50IHZpZXdNb2RlQ1NTS2V5d29yZElEID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwotICAgIGNv
bnN0IFBhZ2U6OlZpZXdNb2RlIHZpZXdNb2RlID0gZnJhbWUtPnBhZ2UoKS0+dmlld01vZGUoKTsK
LSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwotICAgIHN3aXRjaCAodmlld01vZGUpIHsKKyAgICBh
dXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1
ZUlEKCk7CisKKyAgICBzd2l0Y2ggKGZyYW1lLnBhZ2UoKS0+dmlld01vZGUoKSkgewogICAgIGNh
c2UgUGFnZTo6Vmlld01vZGVXaW5kb3dlZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NL
ZXl3b3JkSUQgPT0gQ1NTVmFsdWVXaW5kb3dlZDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBrZXl3b3JkID09IENTU1ZhbHVlV2luZG93ZWQ7CiAgICAgY2FzZSBQYWdlOjpWaWV3TW9k
ZUZsb2F0aW5nOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NW
YWx1ZUZsb2F0aW5nOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0g
Q1NTVmFsdWVGbG9hdGluZzsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlRnVsbHNjcmVlbjoKLSAg
ICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVGdWxsc2NyZWVu
OwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVGdWxs
c2NyZWVuOwogICAgIGNhc2UgUGFnZTo6Vmlld01vZGVNYXhpbWl6ZWQ6Ci0gICAgICAgIHJlc3Vs
dCA9IHZpZXdNb2RlQ1NTS2V5d29yZElEID09IENTU1ZhbHVlTWF4aW1pemVkOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVNYXhpbWl6ZWQ7CiAgICAg
Y2FzZSBQYWdlOjpWaWV3TW9kZU1pbmltaXplZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVD
U1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVNaW5pbWl6ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZU1pbmltaXplZDsKICAgICBkZWZhdWx0OgotICAg
ICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJlc3VsdDsKKyAgICByZXR1cm4gZmFsc2U7CiB9CisKICNlbmRpZiAvLyBFTkFCTEUoVklFV19N
T0RFX0NTU19NRURJQSkKIAotc3RhdGljIGJvb2wgdmlkZW9fcGxheWFibGVfaW5saW5lTWVkaWFG
ZWF0dXJlRXZhbChDU1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIHZpZGVvUGxheWFi
bGVJbmxpbmVFdmFsdWF0ZShDU1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZnJh
bWUtPnNldHRpbmdzKCkuYWxsb3dzSW5saW5lTWVkaWFQbGF5YmFjaygpOworICAgIHJldHVybiBm
cmFtZS5zZXR0aW5ncygpLmFsbG93c0lubGluZU1lZGlhUGxheWJhY2soKTsKIH0KIAotc3RhdGlj
IGJvb2wgaG92ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgaG92ZXJFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICBpZiAoIWlz
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQpA
QCAtNjkwLDcwICs2MjQsNjUgQEAgc3RhdGljIGJvb2wgaG92ZXJNZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGEKICNlbmRpZgogICAg
IH0KIAotICAgIGludCBob3ZlckNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAjaWYgRU5BQkxFKFRPVUNI
X0VWRU5UUykKLSAgICByZXR1cm4gaG92ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVOb25lOwor
ICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlTm9uZTsKICNlbHNlCi0gICAgcmV0dXJuIGhv
dmVyQ1NTS2V5d29yZElEID09IENTU1ZhbHVlSG92ZXI7CisgICAgcmV0dXJuIGtleXdvcmQgPT0g
Q1NTVmFsdWVIb3ZlcjsKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBhbnlfaG92ZXJNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggcHJlZml4KQorc3RhdGljIGJvb2wgYW55SG92ZXJFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IHByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gaG92ZXJNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhLCBmcmFtZSwgcHJlZml4KTsKKyAgICByZXR1cm4gaG92ZXJFdmFsdWF0ZSh2YWx1ZSwgY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgZnJhbWUsIHByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29s
IHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJv
b2wgcG9pbnRlckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4KQogewogICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
bnQgcG9pbnRlckNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFs
dWUpLmdldFZhbHVlSUQoKTsKKyAgICBhdXRvIGtleXdvcmQgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
LSAgICByZXR1cm4gcG9pbnRlckNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZUNvYXJzZTsKKyAgICBy
ZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUNvYXJzZTsKICNlbHNlCi0gICAgcmV0dXJuIHBvaW50
ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVGaW5lOworICAgIHJldHVybiBrZXl3b3JkID09IENT
U1ZhbHVlRmluZTsKICNlbmRpZgogfQogCi1zdGF0aWMgYm9vbCBhbnlfcG9pbnRlck1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVBy
ZWZpeCBwcmVmaXgpCitzdGF0aWMgYm9vbCBhbnlQb2ludGVyRXZhbHVhdGUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBwcmVmaXgpCiB7Ci0gICAg
cmV0dXJuIHBvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLCBmcmFtZSwgcHJlZml4KTsKKyAgICByZXR1cm4gcG9pbnRlckV2YWx1YXRlKHZhbHVl
LCBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBmcmFtZSwgcHJlZml4KTsKIH0KIAotc3RhdGlj
IHZvaWQgY3JlYXRlRnVuY3Rpb25NYXAoKQorLy8gVXNlIHRoaXMgZnVuY3Rpb24gaW5zdGVhZCBv
ZiBjYWxsaW5nIGFkZCBkaXJlY3RseSB0byBhdm9pZCBpbmxpbmluZy4KK3N0YXRpYyB2b2lkIGFk
ZChNZWRpYVF1ZXJ5RnVuY3Rpb25NYXAmIG1hcCwgQXRvbWljU3RyaW5nSW1wbCoga2V5LCBNZWRp
YVF1ZXJ5RnVuY3Rpb24gdmFsdWUpCiB7Ci0gICAgLy8gQ3JlYXRlIHRoZSB0YWJsZS4KLSAgICBn
RnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7Ci0jZGVmaW5lIEFERF9UT19GVU5DVElPTk1B
UChuYW1lLCBzdHIpICBcCi0gICAgZ0Z1bmN0aW9uTWFwLT5zZXQobmFtZSMjTWVkaWFGZWF0dXJl
LmltcGwoKSwgbmFtZSMjTWVkaWFGZWF0dXJlRXZhbCk7Ci0gICAgQ1NTX01FRElBUVVFUllfTkFN
RVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKEFERF9UT19GVU5DVElPTk1BUCk7Ci0jdW5kZWYgQURE
X1RPX0ZVTkNUSU9OTUFQCisgICAgbWFwLmFkZChrZXksIHZhbHVlKTsKIH0KIAotYm9vbCBNZWRp
YVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAqIGV4cHIpIGNvbnN0Citi
b29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlFeHByZXNz
aW9uJiBleHByZXNzaW9uKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSB8fCAhbV9mcmFtZS0+
dmlldygpIHx8ICFtX3N0eWxlKQotICAgICAgICByZXR1cm4gbV9leHBSZXN1bHQ7CisgICAgICAg
IHJldHVybiBtX2ZhbGxiYWNrUmVzdWx0OwogCi0gICAgaWYgKCFleHByLT5pc1ZhbGlkKCkpCisg
ICAgaWYgKCFleHByZXNzaW9uLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgaWYgKCFnRnVuY3Rpb25NYXApCi0gICAgICAgIGNyZWF0ZUZ1bmN0aW9uTWFwKCk7Ci0KLSAg
ICAvLyBjYWxsIHRoZSBtZWRpYSBmZWF0dXJlIGV2YWx1YXRpb24gZnVuY3Rpb24uIEFzc3VtZSBu
byBwcmVmaXgKLSAgICAvLyBhbmQgbGV0IHRyYW1wb2xpbmUgZnVuY3Rpb25zIG92ZXJyaWRlIHRo
ZSBwcmVmaXggaWYgcHJlZml4IGlzCi0gICAgLy8gdXNlZAotICAgIEV2YWxGdW5jIGZ1bmMgPSBn
RnVuY3Rpb25NYXAtPmdldChleHByLT5tZWRpYUZlYXR1cmUoKS5pbXBsKCkpOwotICAgIGlmIChm
dW5jKSB7Ci0gICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEo
bV9zdHlsZSwKLSAgICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVu
dCgpLT5yZW5kZXJTdHlsZSgpLAotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyVmlldygpLCAxLCBmYWxzZSk7Ci0gICAgICAgIHJldHVybiBmdW5jKGV4cHItPnZhbHVlKCks
IGNvbnZlcnNpb25EYXRhLCBtX2ZyYW1lLCBOb1ByZWZpeCk7Ci0gICAgfQorICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxNZWRpYVF1ZXJ5RnVuY3Rpb25NYXA+IG1hcCA9IFtdIHsKKyAgICAgICAg
TWVkaWFRdWVyeUZ1bmN0aW9uTWFwIG1hcDsKKyNkZWZpbmUgQUREX1RPX0ZVTkNUSU9OTUFQKG5h
bWUsIHN0cikgYWRkKG1hcCwgTWVkaWFGZWF0dXJlTmFtZXM6Om5hbWUuaW1wbCgpLCBuYW1lIyNF
dmFsdWF0ZSk7CisgICAgICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVB
VFVSRShBRERfVE9fRlVOQ1RJT05NQVApOworI3VuZGVmIEFERF9UT19GVU5DVElPTk1BUAorICAg
ICAgICByZXR1cm4gbWFwOworICAgIH0oKTsKIAotICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRv
IGZ1bmN0aW9uID0gbWFwLmdldCgpLmdldChleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmltcGwo
KSk7CisgICAgaWYgKCFmdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRG9j
dW1lbnQmIGRvY3VtZW50ID0gKm1fZnJhbWUtPmRvY3VtZW50KCk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKGV4cHJlc3Npb24udmFsdWUoKSwgeyBtX3N0eWxlLCBkb2N1bWVudC5kb2N1bWVudEVsZW1l
bnQoKS0+cmVuZGVyU3R5bGUoKSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCAxLCBmYWxzZSB9LCAq
bV9mcmFtZSwgTm9QcmVmaXgpOwogfQogCiB9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKaW5kZXggMDdkMTE0MTAyMjBhMWJlM2MyZDRkZTNiMDdk
NTcwMDNhZTYwNGE2Zi4uNjJjNWFlOTI5YjZkNjlhMjNlZGU2MjkxMmE0MTIwODg3NWJlMmIxNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCkBAIC0yNSw4MyArMjUs
NTYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5RXZhbHVhdG9y
X2gKLSNkZWZpbmUgTWVkaWFRdWVyeUV2YWx1YXRvcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIk1lZGlhUXVlcnlFeHAuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEZyYW1lOwotY2xh
c3MgTWVkaWFRdWVyeUV4cDsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBSZW5kZXJTdHls
ZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKLWNsYXNzIE1lZGlhUXVlcnlSZXN1bHQgewotICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUXVlcnlSZXN1bHQpOyBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlF
eHAmIGV4cHIsIGJvb2wgcmVzdWx0KQotICAgICAgICA6IG1fZXhwcmVzc2lvbihleHByKQotICAg
ICAgICAsIG1fcmVzdWx0KHJlc3VsdCkKLSAgICB7Ci0gICAgfQotCi0gICAgTWVkaWFRdWVyeUV4
cCBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3Jlc3VsdDsKK3N0cnVjdCBNZWRpYVF1ZXJ5UmVz
dWx0IHsKKyAgICBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiBleHByZXNzaW9uOworICAgIGJvb2wgcmVz
dWx0OwogfTsKIAotLyoqCi0gKiBDbGFzcyB0aGF0IGV2YWx1YXRlcyBjc3MgbWVkaWEgcXVlcmll
cyBhcyBkZWZpbmVkIGluCi0gKiBDU1MzIE1vZHVsZSAiTWVkaWEgUXVlcmllcyIgKGh0dHA6Ly93
d3cudzMub3JnL1RSL2NzczMtbWVkaWFxdWVyaWVzLykKLSAqIFNwZWNpYWwgY29uc3RydWN0b3Jz
IGFyZSBuZWVkZWQsIGlmIHNpbXBsZSBtZWRpYSBxdWVyaWVzIGFyZSB0byBiZQotICogZXZhbHVh
dGVkIHdpdGhvdXQga25vd2xlZGdlIG9mIHRoZSBtZWRpdW0gZmVhdHVyZXMuIFRoaXMgY2FuIGhh
cHBlbgotICogZm9yIGV4YW1wbGUgd2hlbiBwYXJzaW5nIFVBIHN0eWxlc2hlZXRzLCBpZiBldmFs
dWF0aW9uIGlzIGRvbmUKLSAqIHJpZ2h0IGFmdGVyIHBhcnNpbmcuCi0gKgotICogdGhlIGJvb2xl
YW4gcGFyYW1ldGVyIGlzIHVzZWQgdG8gYXBwcm94aW1hdGUgcmVzdWx0cyBvZiBldmFsdWF0aW9u
LCBpZgotICogdGhlIGRldmljZSBjaGFyYWN0ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4gVGhpcyBj
YW4gYmUgdXNlZCB0byBwcnVuZSB0aGUgbG9hZGluZwotICogb2Ygc3R5bGVzaGVldHMgdG8gb25s
eSB0aG9zZSB3aGljaCBhcmUgcHJvYmFibGUgdG8gbWF0Y2guCi0gKi8KKy8vIFNvbWUgb2YgdGhl
IGNvbnN0cnVjdG9ycyBhcmUgdXNlZCBmb3IgY2FzZXMgd2hlcmUgdGhlIGRldmljZSBjaGFyYWN0
ZXJpc3RpY3MgYXJlIG5vdCBrbm93bi4KKy8vIFRoZXNlICBjYW4gYmUgdXNlZCB0byBwcnVuZSB0
aGUgbG9hZGluZyBvZiBzdHlsZXNoZWV0cyB0byBvbmx5IHRob3NlIHdoaWNoIGFyZSBub3QgYWxy
ZWFkeSBrbm93biB0byBub3QgbWF0Y2guCisKIGNsYXNzIE1lZGlhUXVlcnlFdmFsdWF0b3Igewot
ICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShNZWRpYVF1ZXJ5RXZhbHVhdG9yKTsgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgLyoqIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNo
IGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0gICAgICogIEV2YWx1YXRvciBy
ZXR1cm5zIHRydWUgZm9yICJhbGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJl
UmVzdWx0Ci0gICAgICogIGZvciBhbnkgbWVkaWEgZmVhdHVyZXMKLSAgICAgKi8KKyAgICAvLyBD
cmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmll
cy4KKyAgICAvLyBFdmFsdWF0b3IgcmV0dXJucyB0cnVlIGZvciAiYWxsIiwgYW5kIHJldHVybnMg
dmFsdWUgb2YgXG1lZGlhRmVhdHVyZVJlc3VsdCBmb3IgYW55IG1lZGlhIGZlYXR1cmVzLgogICAg
IGV4cGxpY2l0IE1lZGlhUXVlcnlFdmFsdWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBm
YWxzZSk7CiAKLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkg
c2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAgICAgKiAgRXZhbHVhdG9yICByZXR1cm5zIHRydWUgZm9y
IGFjY2VwdGVkTWVkaWFUeXBlIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYWZlYXR1cmVSZXN1
bHQKLSAgICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwotICAgICAqLworICAgIC8vIENyZWF0
ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzLgor
ICAgIC8vIEV2YWx1YXRvciByZXR1cm5zIHRydWUgZm9yIGFjY2VwdGVkTWVkaWFUeXBlIGFuZCBy
ZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQgZm9yIGFueSBtZWRpYSBmZWF0dXJl
cy4KICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5
cGUsIGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0ID0gZmFsc2UpOwogCi0gICAgLyoqIENyZWF0ZXMg
ZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMKLSAgICAgKi8KLSAg
ICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5cGUsIEZy
YW1lKiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKLQotICAgIH5NZWRpYVF1ZXJ5RXZhbHVhdG9yKCk7
CisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVl
cmllcy4KKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRp
YVR5cGUsIERvY3VtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqKTsKIAogICAgIGJvb2wgbWVkaWFU
eXBlTWF0Y2goY29uc3QgU3RyaW5nJiBtZWRpYVR5cGVUb01hdGNoKSBjb25zdDsKICAgICBib29s
IG1lZGlhVHlwZU1hdGNoU3BlY2lmaWMoY29uc3QgY2hhciogbWVkaWFUeXBlVG9NYXRjaCkgY29u
c3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVyaWVzICovCi0gICAg
Ym9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlTZXQqLCBTdHlsZVJlc29sdmVyKiA9IDApIGNvbnN0
OworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcy4KKyAgICBib29sIGV2
YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmLCBTdHlsZVJlc29sdmVyKiA9IG51bGxwdHIpIGNv
bnN0OworCisgICAgLy8gRXZhbHVhdGVzIG1lZGlhIHF1ZXJ5IHN1YmV4cHJlc3Npb24sIGllICJh
bmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFydC4KKyAgICBib29sIGV2YWx1YXRlKGNvbnN0
IE1lZGlhUXVlcnlFeHByZXNzaW9uJikgY29uc3Q7CiAKLSAgICAvKiogRXZhbHVhdGVzIG1lZGlh
IHF1ZXJ5IHN1YmV4cHJlc3Npb24sIGllICJhbmQgKG1lZGlhLWZlYXR1cmU6IHZhbHVlKSIgcGFy
dCAqLwotICAgIGJvb2wgZXZhbChjb25zdCBNZWRpYVF1ZXJ5RXhwKikgY29uc3Q7Ci0gICAgCi0g
ICAgLyogRXZhbHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVyaWVzIGFuZCBmaWxscyBpbiBhIHZl
Y3RvciB3aXRoIGFueSB2aWV3cG9ydC1kZXBlbmRlbnQgcmVzdWx0cyBmb3VuZC4gKi8KLSAgICBi
b29sIGV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhjb25zdCBNZWRpYVF1ZXJ5
U2V0KiwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4mKTsKKyAgICAv
LyBFdmFsdWF0ZXMgYSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMgYW5kIGZpbGxzIGluIGEgdmVjdG9y
IHdpdGggYW55IHZpZXdwb3J0LWRlcGVuZGVudCByZXN1bHRzIGZvdW5kLgorICAgIGJvb2wgZXZh
bHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYsIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiYpIGNv
bnN0OwogCiBwcml2YXRlOgogICAgIFN0cmluZyBtX21lZGlhVHlwZTsKICAgICBGcmFtZSogbV9m
cmFtZSB7IG51bGxwdHIgfTsgLy8gbm90IG93bmVkCiAgICAgY29uc3QgUmVuZGVyU3R5bGUqIG1f
c3R5bGUgeyBudWxscHRyIH07Ci0gICAgYm9vbCBtX2V4cFJlc3VsdDsKKyAgICBib29sIG1fZmFs
bGJhY2tSZXN1bHQgeyBmYWxzZSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UKLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCmluZGV4IGU4ZGE3ODA0NTk2OTVhODFhNzI1ZWFm
MTJiNTU2ZGMwMDY1ZWY2NTMuLjU5ZTE1YTM4YjIxYjc4ZDM0Yjg0NDExODNhOTVmZTc4NDgxY2Vi
NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKQEAgLTMyLDIwMSArMzIsMTg2
IEBACiAjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1l
cy5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhDU1NWYWx1ZUlEKGNvbnN0
IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUp
CitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcihjb25zdCBB
dG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQog
ewotICAgIGlmICghdmFsdWUtPmlkKQorICAgIGlmICghdmFsdWUuaWQpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
Om9yaWVudGF0aW9uTWVkaWFGZWF0dXJlCisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb24KICNpZiBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJ
QSkKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWV3X21v
ZGVNZWRpYUZlYXR1cmUKLSNlbmRpZiAvLyBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJQSkKLSAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcl9nYW11dE1l
ZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmFueV9ob3Zlck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmFueV9wb2ludGVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aG92ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjppbnZlcnRlZF9jb2xvcnNNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpwb2lu
dGVyTWVkaWFGZWF0dXJlOworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OnZpZXdNb2RlCisjZW5kaWYKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpjb2xvckdhbXV0CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6YW55SG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjphbnlQb2ludGVyCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6aG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjppbnZlcnRlZENvbG9ycworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnBvaW50ZXI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJl
V2l0aFZhbGlkUG9zaXRpdmVMZW5naHRPck51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlh
RmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29s
IGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1iZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIShDU1NQcmltaXRpdmVWYWx1ZTo6aXNMZW5ndGgodmFsdWUtPnVuaXQpIHx8IHZhbHVl
LT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB8fCB2YWx1ZS0+ZlZhbHVl
IDwgMCkKKyAgICBpZiAoIShDU1NQcmltaXRpdmVWYWx1ZTo6aXNMZW5ndGgodmFsdWUudW5pdCkg
fHwgdmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUikgfHwgdmFsdWUu
ZlZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2hlaWdodE1lZGlhRmVhdHVy
ZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9oZWln
aHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjp3aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9oZWlnaHRNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhf
ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2Rl
dmljZV93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4SGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluSGVpZ2h0CisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbldpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlSGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlSGVpZ2h0CisgICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluRGV2aWNlSGVpZ2h0CisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlV2lkdGgKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhEZXZpY2VXaWR0aAor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkRldmljZVdp
ZHRoOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhWYWxpZERlbnNpdHkoY29u
c3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1
ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhEZW5zaXR5KGNvbnN0IEF0
b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgaWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNSZXNvbHV0aW9uKHZhbHVlLT51bml0KSB8
fCB2YWx1ZS0+ZlZhbHVlIDw9IDApCisgICAgaWYgKCFDU1NQcmltaXRpdmVWYWx1ZTo6aXNSZXNv
bHV0aW9uKHZhbHVlLnVuaXQpIHx8IHZhbHVlLmZWYWx1ZSA8PSAwKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpy
ZXNvbHV0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZTsK
KyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4UmVzb2x1
dGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pblJl
c29sdXRpb247CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aFBvc2l0aXZlSW50
ZWdlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0
aXZlSW50ZWdlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFy
c2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmICghdmFsdWUtPmlzSW50IHx8IHZhbHVlLT5mVmFs
dWUgPCAwKQorICAgIGlmICghdmFsdWUuaXNJbnQgfHwgdmFsdWUuZlZhbHVlIDwgMCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6Y29sb3JNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjptYXhfY29sb3JNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fY29sb3JNZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcl9pbmRleE1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1h
eF9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9tb25vY2hyb21lTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X21v
bm9jaHJvbWVNZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6Y29sb3IKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhDb2xvcgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1pbkNvbG9yCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6Y29sb3JJbmRleAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1heENvbG9ySW5kZXgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptaW5Db2xvckluZGV4CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWluTW9ub2Nocm9tZQorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om1heE1vbm9jaHJvbWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9v
bCBmZWF0dXJlV2l0aFBvc2l0aXZlTnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNG
ZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVOdW1iZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRp
YUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAodmFsdWUt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgfHwgdmFsdWUtPmZWYWx1ZSA8
IDApCisgICAgaWYgKHZhbHVlLnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIg
fHwgdmFsdWUuZlZhbHVlIDwgMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzJkTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNm
b3JtXzNkTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6dHJhbnNpdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFuaW1hdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1h
eF9kZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJl
OworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zZm9y
bTJkCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNm
b3JtM2QKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2l0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5p
bWF0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2
aWNlUGl4ZWxSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heERldmljZVBpeGVsUmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptaW5EZXZpY2VQaXhlbFJhdGlvOwogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgZmVhdHVyZVdpdGhaZXJvT3JPbmUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUs
IGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1
cmVWYWxpZFdpdGhaZXJvT3JPbmUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNv
bnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlLT5pc0ludCB8fCAh
KHZhbHVlLT5mVmFsdWUgPT0gMSB8fCAhdmFsdWUtPmZWYWx1ZSkpCisgICAgaWYgKCF2YWx1ZS5p
c0ludCB8fCAhKHZhbHVlLmZWYWx1ZSA9PSAxIHx8ICF2YWx1ZS5mVmFsdWUpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpncmlkTWVkaWFGZWF0dXJlOworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmdyaWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aEFz
cGVjdFJhdGlvKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlKQorc3RhdGljIGlubGlu
ZSBib29sIGlzQXNwZWN0UmF0aW9GZWF0dXJlKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlKQogewotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fYXNwZWN0X3JhdGlvTWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4
X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2RldmljZV9hc3Bl
Y3RfcmF0aW9NZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpkZXZpY2VBc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4QXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5EZXZpY2VBc3BlY3RSYXRpbworICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heERldmljZUFzcGVj
dFJhdGlvOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhvdXRWYWx1ZShjb25z
dCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1
cmVWYWxpZFdpdGhvdXRWYWx1ZShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkKIHsK
ICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IGFyZSBwcmVmaXhlZCBieSBtaW4vbWF4IGNhbm5v
dCBiZSB1c2VkIHdpdGhvdXQgYSB2YWx1ZS4KLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjphbnlfaG92ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlfcG9pbnRlck1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1vbm9jaHJvbWVNZWRp
YUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpj
b2xvck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmNvbG9yX2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6Z3JpZE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmRldmljZV93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2Fz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmhvdmVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzJkTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtXzNkTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNp
dGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmFuaW1hdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6OmludmVydGVkX2NvbG9yc01lZGlhRmVhdHVyZQorICAgIHJldHVy
biBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueUhvdmVyCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55UG9pbnRlcgorICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1vbm9jaHJvbWUKKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcgorICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9ySW5kZXgKKyAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpncmlkCisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VXaWR0aAorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0aW9uCisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VBc3BlY3RSYXRpbworICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhvdmVyCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtMmQKKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm0zZAorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zaXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbmltYXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjppbnZlcnRlZENvbG9ycwog
I2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZQotI2VuZGlmIC8vIEVO
QUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnBvaW50ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9u
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6dmlkZW9fcGxheWFibGVfaW5saW5lTWVkaWFGZWF0dXJlOworICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZXdNb2RlCisjZW5kaWYKKyAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpwb2ludGVyCisgICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlUGl4ZWxSYXRpbworICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWRlb1BsYXlhYmxlSW5s
aW5lOwogfQogCi1NZWRpYVF1ZXJ5RXhwOjpNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbWVkaWFGZWF0dXJlLCBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJXaXRoVW5pdChjb25zdCBBdG9taWNT
dHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAg
IHJldHVybiBpc0ZlYXR1cmVWYWxpZFdpdGhEZW5zaXR5KG1lZGlhRmVhdHVyZSwgdmFsdWUpIHx8
IGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1iZXIobWVkaWFGZWF0dXJl
LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOdW1i
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVl
JiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVJbnRl
Z2VyKG1lZGlhRmVhdHVyZSwgdmFsdWUpIHx8IGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
TnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpIHx8IGlzRmVhdHVyZVZhbGlkV2l0aFplcm9Pck9u
ZShtZWRpYUZlYXR1cmUsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzU2xhc2go
Q1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS51bml0ID09IENTU1Bh
cnNlclZhbHVlOjpPcGVyYXRvciAmJiB2YWx1ZS5pVmFsdWUgPT0gJy8nOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNQb3NpdGl2ZUludGVnZXJWYWx1ZShDU1NQYXJzZXJWYWx1ZSYgdmFsdWUp
Cit7CisgICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIgJiYgdmFsdWUuZlZhbHVlID4gMCAmJiB2YWx1ZS5pc0ludDsKK30KKworTWVkaWFRdWVyeUV4
cHJlc3Npb246Ok1lZGlhUXVlcnlFeHByZXNzaW9uKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFG
ZWF0dXJlLCBDU1NQYXJzZXJWYWx1ZUxpc3QqIHZhbHVlTGlzdCkKICAgICA6IG1fbWVkaWFGZWF0
dXJlKG1lZGlhRmVhdHVyZSkKIHsKLSAgICAvLyBJbml0aWFsaXplIG1lZGlhIHF1ZXJ5IGV4cHJl
c3Npb24gdGhhdCBtdXN0IGhhdmUgMSBvciBtb3JlIHZhbHVlcy4KLSAgICBpZiAodmFsdWVMaXN0
KSB7Ci0gICAgICAgIGlmICh2YWx1ZUxpc3QtPnNpemUoKSA9PSAxKSB7Ci0gICAgICAgICAgICBD
U1NQYXJzZXJWYWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLQotICAgICAgICAg
ICAgLy8gTWVkaWEgZmVhdHVyZXMgdGhhdCB1c2UgQ1NTVmFsdWVJRHMuCi0gICAgICAgICAgICBp
ZiAoZmVhdHVyZVdpdGhDU1NWYWx1ZUlEKG1lZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1
ZS0+aWQpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3QgaGF2ZSBu
b24tbmVnYXRpdmUgPGRlbnNpdHk+LCBpZS4gZHBweCwgZHBpIG9yIGRwY20uCi0gICAgICAgICAg
ICBlbHNlIGlmIChmZWF0dXJlV2l0aFZhbGlkRGVuc2l0eShtZWRpYUZlYXR1cmUsIHZhbHVlKSkK
LSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwot
Ci0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3QgaGF2ZSBub24tbmVnYXRp
dmUgPGxlbmdodD4gb3IgbnVtYmVyIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBpZiAoZmVhdHVy
ZVdpdGhWYWxpZFBvc2l0aXZlTGVuZ2h0T3JOdW1iZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0g
ICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUt
PmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLQot
ICAgICAgICAgICAgLy8gTWVkaWEgZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0aXZl
IGludGVnZXIgdmFsdWUuCi0gICAgICAgICAgICBlbHNlIGlmIChmZWF0dXJlV2l0aFBvc2l0aXZl
SW50ZWdlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgbXVz
dCBoYXZlIG5vbi1uZWdhdGl2ZSBudW1iZXIgdmFsdWUuCi0gICAgICAgICAgICBlbHNlIGlmIChm
ZWF0dXJlV2l0aFBvc2l0aXZlTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAgICAgICAgLy8gTWVkaWEg
ZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgKDB8MSkgdmFsdWUuCi0gICAgICAgICAgICBlbHNlIGlm
IChmZWF0dXJlV2l0aFplcm9Pck9uZShtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAg
ICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7Ci0KLSAgICAgICAgICAgIG1faXNWYWxpZCA9
IG1fdmFsdWU7Ci0gICAgICAgIH0gZWxzZSBpZiAodmFsdWVMaXN0LT5zaXplKCkgPT0gMyAmJiBm
ZWF0dXJlV2l0aEFzcGVjdFJhdGlvKG1lZGlhRmVhdHVyZSkpIHsKLSAgICAgICAgICAgIC8vIENy
ZWF0ZSBsaXN0IG9mIHZhbHVlcy4KLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSBhY2NlcHRzIG9u
bHkgPGludGVnZXI+LzxpbnRlZ2VyPi4KLSAgICAgICAgICAgIC8vIEFwcGxpY2FibGUgdG8gZGV2
aWNlLWFzcGVjdC1yYXRpbyBhbmQgYXNwZWMtcmF0aW8uCi0gICAgICAgICAgICBib29sIGlzVmFs
aWQgPSB0cnVlOwotICAgICAgICAgICAgZmxvYXQgbnVtZXJhdG9yVmFsdWUgPSAwOwotICAgICAg
ICAgICAgZmxvYXQgZGVub21pbmF0b3JWYWx1ZSA9IDA7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBh
c3BlY3QtcmF0aW8gbXVzdCBiZSA8aW50ZWdlcj4gKHdoaXRlc3BhY2UpPyAvICh3aGl0ZXNwYWNl
KT8gPGludGVnZXI+LgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDM7ICsr
aSwgdmFsdWVMaXN0LT5uZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBjb25zdCBDU1NQYXJzZXJW
YWx1ZSogdmFsdWUgPSB2YWx1ZUxpc3QtPmN1cnJlbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAo
aSAhPSAxICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYm
IHZhbHVlLT5mVmFsdWUgPiAwICYmIHZhbHVlLT5pc0ludCkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgICAgICAgICBudW1lcmF0b3JWYWx1ZSA9IHZhbHVl
LT5mVmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGRlbm9taW5hdG9yVmFsdWUgPSB2YWx1ZS0+ZlZhbHVlOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaSA9PSAxICYmIHZhbHVlLT51bml0ID09IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciAmJiB2YWx1ZS0+aVZhbHVlID09ICcvJykKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaXNWYWxpZCkKLSAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gQ1NTQXNwZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG51bWVyYXRvclZhbHVlLCBkZW5v
bWluYXRvclZhbHVlKTsKLQotICAgICAgICAgICAgbV9pc1ZhbGlkID0gbV92YWx1ZTsKKyAgICBp
ZiAoIXZhbHVlTGlzdCkgeworICAgICAgICBpZiAoaXNGZWF0dXJlVmFsaWRXaXRob3V0VmFsdWUo
bWVkaWFGZWF0dXJlKSkKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgfSBlbHNl
IGlmICh2YWx1ZUxpc3QtPnNpemUoKSA9PSAxKSB7CisgICAgICAgIGF1dG8mIHZhbHVlID0gKnZh
bHVlTGlzdC0+dmFsdWVBdCgwKTsKKyAgICAgICAgaWYgKGlzRmVhdHVyZVZhbGlkV2l0aElkZW50
aWZpZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcih2YWx1ZS5pZCk7CisgICAgICAgICAgICBt
X2lzVmFsaWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGlzRmVhdHVyZVZhbGlkV2l0aE51
bWJlcldpdGhVbml0KG1lZGlhRmVhdHVyZSwgdmFsdWUpIHx8IGlzRmVhdHVyZVZhbGlkV2l0aE5v
bk5lZ2F0aXZlTGVuZ3RoT3JOdW1iZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkpIHsKKyAgICAgICAg
ICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLmZWYWx1ZSwgKENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLnVuaXQpOworICAgICAgICAgICAgbV9p
c1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhOdW1i
ZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gd2Ug
bWVyZ2UgdGhpcyB3aXRoIHRoZSBjYXNlIGFib3ZlPworICAgICAgICAgICAgbV92YWx1ZSA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUuZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX05VTUJFUik7CisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmICh2YWx1ZUxpc3QtPnNpemUoKSA9PSAzICYmIGlzQXNwZWN0UmF0aW9GZWF0
dXJlKG1lZGlhRmVhdHVyZSkpIHsKKyAgICAgICAgYXV0byYgbnVtZXJhdG9yID0gKnZhbHVlTGlz
dC0+dmFsdWVBdCgwKTsKKyAgICAgICAgYXV0byYgc2xhc2ggPSAqdmFsdWVMaXN0LT52YWx1ZUF0
KDEpOworICAgICAgICBhdXRvJiBkZW5vbWluYXRvciA9ICp2YWx1ZUxpc3QtPnZhbHVlQXQoMik7
CisgICAgICAgIGlmIChpc1Bvc2l0aXZlSW50ZWdlclZhbHVlKG51bWVyYXRvcikgJiYgaXNTbGFz
aChzbGFzaCkgJiYgaXNQb3NpdGl2ZUludGVnZXJWYWx1ZShkZW5vbWluYXRvcikpIHsKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobnVtZXJhdG9yLmZW
YWx1ZSwgZGVub21pbmF0b3IuZlZhbHVlKTsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7
CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGZlYXR1cmVXaXRob3V0VmFsdWUobWVkaWFGZWF0
dXJlKSkKLSAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICB9CiB9CiAKLVN0cmluZyBNZWRp
YVF1ZXJ5RXhwOjpzZXJpYWxpemUoKSBjb25zdAorU3RyaW5nIE1lZGlhUXVlcnlFeHByZXNzaW9u
OjpzZXJpYWxpemUoKSBjb25zdAogewogICAgIGlmICghbV9zZXJpYWxpemF0aW9uQ2FjaGUuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiBtX3NlcmlhbGl6YXRpb25DYWNoZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV4cC5oCmluZGV4IDdjMzgzOTc1NTk1ZmRhODE4ZjFkNmQ1MDljMzYyMmEyMDAz
ZDIzMjQuLjJiNGU3MWNjODBhYzQ4OWU0YTg1NTQ5MGQzMTQ3MDMzOTRiY2VjNmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlFeHAuaApAQCAtMjUsMzIgKzI1LDI5IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgTWVkaWFRdWVyeUV4cF9oCi0jZGVmaW5lIE1lZGlhUXVlcnlFeHBf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJDU1NWYWx1ZS5oIgotI2luY2x1ZGUgIk1lZGlh
RmVhdHVyZU5hbWVzLmgiCiAjaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0
b21pY1N0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENTU1BhcnNlclZh
bHVlTGlzdDsKIAotY2xhc3MgTWVkaWFRdWVyeUV4cCB7CisvLyBGSVhNRTogUmVuYW1lIHRoZSBm
aWxlIHRvIG1hdGNoIHRoaXMgY2xhc3MncyBuYW1lLgorY2xhc3MgTWVkaWFRdWVyeUV4cHJlc3Np
b24gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGV4cGxpY2l0
IE1lZGlhUXVlcnlFeHAoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUgPSBlbXB0eUF0
b20sIENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVzID0gbnVsbHB0cik7CisgICAgZXhwbGljaXQg
TWVkaWFRdWVyeUV4cHJlc3Npb24oY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUgPSBl
bXB0eUF0b20sIENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVzID0gbnVsbHB0cik7CiAKICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSgpIGNvbnN0OwogICAgIENTU1ZhbHVlKiB2
YWx1ZSgpIGNvbnN0OwogCiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1Zp
ZXdwb3J0RGVwZW5kZW50KCkgY29uc3Q7CiAKICAgICBTdHJpbmcgc2VyaWFsaXplKCkgY29uc3Q7
CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeUV4cCYpIGNvbnN0OworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYpIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIEF0b21pY1N0cmluZyBtX21lZGlhRmVhdHVyZTsKQEAgLTU5LDQyICs1Niwy
NSBAQCBwcml2YXRlOgogICAgIG11dGFibGUgU3RyaW5nIG1fc2VyaWFsaXphdGlvbkNhY2hlOwog
fTsKIAotaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgTWVkaWFRdWVyeUV4cDo6bWVkaWFGZWF0
dXJlKCkgY29uc3QKK2lubGluZSBjb25zdCBBdG9taWNTdHJpbmcmIE1lZGlhUXVlcnlFeHByZXNz
aW9uOjptZWRpYUZlYXR1cmUoKSBjb25zdAogewogICAgIHJldHVybiBtX21lZGlhRmVhdHVyZTsK
IH0KIAotaW5saW5lIENTU1ZhbHVlKiBNZWRpYVF1ZXJ5RXhwOjp2YWx1ZSgpIGNvbnN0Citpbmxp
bmUgQ1NTVmFsdWUqIE1lZGlhUXVlcnlFeHByZXNzaW9uOjp2YWx1ZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7CiB9CiAKLWlubGluZSBib29sIE1lZGlhUXVlcnlFeHA6Om9w
ZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeUV4cCYgb3RoZXIpIGNvbnN0CitpbmxpbmUgYm9vbCBN
ZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6b3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lv
biYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChvdGhlci5tX21lZGlhRmVhdHVyZSA9PSBt
X21lZGlhRmVhdHVyZSkKLSAgICAgICAgJiYgKCghb3RoZXIubV92YWx1ZSAmJiAhbV92YWx1ZSkK
LSAgICAgICAgICAgIHx8IChvdGhlci5tX3ZhbHVlICYmIG1fdmFsdWUgJiYgb3RoZXIubV92YWx1
ZS0+ZXF1YWxzKCptX3ZhbHVlKSkpOworICAgIHJldHVybiBvdGhlci5tX21lZGlhRmVhdHVyZSA9
PSBtX21lZGlhRmVhdHVyZQorICAgICAgICAmJiAoKCFtX3ZhbHVlICYmICFvdGhlci5tX3ZhbHVl
KSB8fCAobV92YWx1ZSAmJiBvdGhlci5tX3ZhbHVlICYmICptX3ZhbHVlID09ICpvdGhlci5tX3Zh
bHVlKSk7CiB9CiAKLWlubGluZSBib29sIE1lZGlhUXVlcnlFeHA6OmlzVmFsaWQoKSBjb25zdAor
aW5saW5lIGJvb2wgTWVkaWFRdWVyeUV4cHJlc3Npb246OmlzVmFsaWQoKSBjb25zdAogewogICAg
IHJldHVybiBtX2lzVmFsaWQ7CiB9CiAKLWlubGluZSBib29sIE1lZGlhUXVlcnlFeHA6OmlzVmll
d3BvcnREZXBlbmRlbnQoKSBjb25zdAotewotICAgIHJldHVybiBtX21lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6d2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3dpZHRoTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5f
aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAg
fHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0aW9uTWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjph
c3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9hc3BlY3RfcmF0aW9NZWRp
YUZlYXR1cmU7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5TGlzdC5jcHAKaW5kZXggN2I0ZmQwMmRkNTRiNzRkNDAxNzJlMzA0YjIwY2RkYWM3
OWIwYmU3ZS4uNDAxMGMyOWM3YTdkOTNhZjI0ZTRhNTYyYzE2NWU5ODZiYTMxNWRlOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuY3BwCkBAIC0yNywxOCArMjcsMTggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8TWVkaWFRdWVyeUxpc3Q+IE1lZGlhUXVlcnlMaXN0Ojpj
cmVhdGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gdmVjdG9yLCBQYXNzUmVmUHRyPE1l
ZGlhUXVlcnlTZXQ+IG1lZGlhLCBib29sIG1hdGNoZXMpCitpbmxpbmUgTWVkaWFRdWVyeUxpc3Q6
Ok1lZGlhUXVlcnlMaXN0KE1lZGlhUXVlcnlNYXRjaGVyJiBtYXRjaGVyLCBSZWY8TWVkaWFRdWVy
eVNldD4mJiBtZWRpYSwgYm9vbCBtYXRjaGVzKQorICAgIDogbV9tYXRjaGVyKG1hdGNoZXIpCisg
ICAgLCBtX21lZGlhKFdURk1vdmUobWVkaWEpKQorICAgICwgbV9ldmFsdWF0aW9uUm91bmQobV9t
YXRjaGVyLT5ldmFsdWF0aW9uUm91bmQoKSkKKyAgICAsIG1fY2hhbmdlUm91bmQobV9ldmFsdWF0
aW9uUm91bmQgLSAxKSAvLyBBbnkgdmFsdWUgdGhhdCBpcyBub3QgdGhlIHNhbWUgYXMgbV9ldmFs
dWF0aW9uUm91bmQgd291bGQgZG8uCisgICAgLCBtX21hdGNoZXMobWF0Y2hlcykKIHsKLSAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVF1ZXJ5TGlzdCh2ZWN0b3IsIG1lZGlhLCBtYXRjaGVz
KSk7CiB9CiAKLU1lZGlhUXVlcnlMaXN0OjpNZWRpYVF1ZXJ5TGlzdChQYXNzUmVmUHRyPE1lZGlh
UXVlcnlNYXRjaGVyPiB2ZWN0b3IsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIGJv
b2wgbWF0Y2hlcykKLSAgICA6IG1fbWF0Y2hlcih2ZWN0b3IpCi0gICAgLCBtX21lZGlhKG1lZGlh
KQotICAgICwgbV9ldmFsdWF0aW9uUm91bmQobV9tYXRjaGVyLT5ldmFsdWF0aW9uUm91bmQoKSkK
LSAgICAsIG1fY2hhbmdlUm91bmQobV9ldmFsdWF0aW9uUm91bmQgLSAxKSAvLyBtX2V2YWx1YXRp
b25Sb3VuZCBhbmQgbV9jaGFuZ2VSb3VuZCBpbml0aWFsIHZhbHVlcyBtdXN0IGJlIGRpZmZlcmVu
dC4KLSAgICAsIG1fbWF0Y2hlcyhtYXRjaGVzKQorUmVmPE1lZGlhUXVlcnlMaXN0PiBNZWRpYVF1
ZXJ5TGlzdDo6Y3JlYXRlKE1lZGlhUXVlcnlNYXRjaGVyJiBtYXRjaGVyLCBSZWY8TWVkaWFRdWVy
eVNldD4mJiBtZWRpYSwgYm9vbCBtYXRjaGVzKQogeworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE1lZGlhUXVlcnlMaXN0KG1hdGNoZXIsIFdURk1vdmUobWVkaWEpLCBtYXRjaGVzKSk7CiB9CiAK
IE1lZGlhUXVlcnlMaXN0Ojp+TWVkaWFRdWVyeUxpc3QoKQpAQCAtNTAsMjYgKzUwLDI2IEBAIFN0
cmluZyBNZWRpYVF1ZXJ5TGlzdDo6bWVkaWEoKSBjb25zdAogICAgIHJldHVybiBtX21lZGlhLT5t
ZWRpYVRleHQoKTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5TGlzdDo6YWRkTGlzdGVuZXIoUGFzc1Jl
ZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcikKK3ZvaWQgTWVkaWFRdWVyeUxp
c3Q6OmFkZExpc3RlbmVyKFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmIGxpc3RlbmVy
KQogewogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fbWF0Y2hl
ci0+YWRkTGlzdGVuZXIobGlzdGVuZXIsIHRoaXMpOworICAgIG1fbWF0Y2hlci0+YWRkTGlzdGVu
ZXIobGlzdGVuZXIucmVsZWFzZU5vbk51bGwoKSwgKnRoaXMpOwogfQogCi12b2lkIE1lZGlhUXVl
cnlMaXN0OjpyZW1vdmVMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+
IGxpc3RlbmVyKQordm9pZCBNZWRpYVF1ZXJ5TGlzdDo6cmVtb3ZlTGlzdGVuZXIoUmVmUHRyPE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYgbGlzdGVuZXIpCiB7CiAgICAgaWYgKCFsaXN0ZW5lcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9tYXRjaGVyLT5yZW1vdmVMaXN0ZW5lcihsaXN0ZW5l
ci5nZXQoKSwgdGhpcyk7CisgICAgbV9tYXRjaGVyLT5yZW1vdmVMaXN0ZW5lcigqbGlzdGVuZXIs
ICp0aGlzKTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5TGlzdDo6ZXZhbHVhdGUoTWVkaWFRdWVyeUV2
YWx1YXRvciogZXZhbHVhdG9yLCBib29sJiBub3RpZmljYXRpb25OZWVkZWQpCit2b2lkIE1lZGlh
UXVlcnlMaXN0OjpldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBldmFsdWF0b3IsIGJvb2wm
IG5vdGlmaWNhdGlvbk5lZWRlZCkKIHsKLSAgICBpZiAobV9ldmFsdWF0aW9uUm91bmQgIT0gbV9t
YXRjaGVyLT5ldmFsdWF0aW9uUm91bmQoKSAmJiBldmFsdWF0b3IpCi0gICAgICAgIHNldE1hdGNo
ZXMoZXZhbHVhdG9yLT5ldmFsKG1fbWVkaWEuZ2V0KCkpKTsKKyAgICBpZiAobV9ldmFsdWF0aW9u
Um91bmQgIT0gbV9tYXRjaGVyLT5ldmFsdWF0aW9uUm91bmQoKSkKKyAgICAgICAgc2V0TWF0Y2hl
cyhldmFsdWF0b3IuZXZhbHVhdGUobV9tZWRpYS5nZXQoKSkpOwogICAgIG5vdGlmaWNhdGlvbk5l
ZWRlZCA9IG1fY2hhbmdlUm91bmQgPT0gbV9tYXRjaGVyLT5ldmFsdWF0aW9uUm91bmQoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuaAppbmRleCA2OWFmYTc2YjBlMDZiMDI4NDQ0
Nzk0Y2VjMWYwOWJlODE2YmE1Njg5Li5mMzkyOTBkMjgyZDUwNTE4YmJiNTI4MDk3YjgyM2Q3NTU1
ZGM0YzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuaApAQCAtMTcsOCArMTcsNyBA
QAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgTWVkaWFR
dWVyeUxpc3RfaAotI2RlZmluZSBNZWRpYVF1ZXJ5TGlzdF9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTM4
LDI4ICszNywyNyBAQCBjbGFzcyBNZWRpYVF1ZXJ5U2V0OwogCiBjbGFzcyBNZWRpYVF1ZXJ5TGlz
dCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhUXVlcnlMaXN0PiB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxNZWRpYVF1ZXJ5TGlzdD4gY3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNo
ZXI+LCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+LCBib29sKTsKKyAgICBzdGF0aWMgUmVmPE1l
ZGlhUXVlcnlMaXN0PiBjcmVhdGUoTWVkaWFRdWVyeU1hdGNoZXImLCBSZWY8TWVkaWFRdWVyeVNl
dD4mJiwgYm9vbCk7CiAgICAgfk1lZGlhUXVlcnlMaXN0KCk7CiAKICAgICBTdHJpbmcgbWVkaWEo
KSBjb25zdDsKICAgICBib29sIG1hdGNoZXMoKTsKIAotICAgIHZvaWQgYWRkTGlzdGVuZXIoUGFz
c1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPik7Ci0gICAgdm9pZCByZW1vdmVMaXN0ZW5l
cihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KTsKKyAgICB2b2lkIGFkZExpc3Rl
bmVyKFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmKTsKKyAgICB2b2lkIHJlbW92ZUxp
c3RlbmVyKFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYmKTsKIAotICAgIHZvaWQgZXZh
bHVhdGUoTWVkaWFRdWVyeUV2YWx1YXRvciosIGJvb2wmIG5vdGlmaWNhdGlvbk5lZWRlZCk7Cisg
ICAgdm9pZCBldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yJiwgYm9vbCYgbm90aWZpY2F0aW9u
TmVlZGVkKTsKIAogcHJpdmF0ZToKLSAgICBNZWRpYVF1ZXJ5TGlzdChQYXNzUmVmUHRyPE1lZGlh
UXVlcnlNYXRjaGVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiwgYm9vbCBtYXRjaGVzKTsK
KyAgICBNZWRpYVF1ZXJ5TGlzdChNZWRpYVF1ZXJ5TWF0Y2hlciYsIFJlZjxNZWRpYVF1ZXJ5U2V0
PiYmLCBib29sIG1hdGNoZXMpOworCiAgICAgdm9pZCBzZXRNYXRjaGVzKGJvb2wpOwogCi0gICAg
UmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiBtX21hdGNoZXI7Ci0gICAgUmVmUHRyPE1lZGlhUXVl
cnlTZXQ+IG1fbWVkaWE7CisgICAgUmVmPE1lZGlhUXVlcnlNYXRjaGVyPiBtX21hdGNoZXI7Cisg
ICAgUmVmPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWE7CiAgICAgdW5zaWduZWQgbV9ldmFsdWF0aW9u
Um91bmQ7IC8vIEluZGljYXRlcyBpZiB0aGUgcXVlcnkgaGFzIGJlZW4gZXZhbHVhdGVkIGFmdGVy
IHRoZSBsYXN0IHN0eWxlIHNlbGVjdG9yIGNoYW5nZS4KICAgICB1bnNpZ25lZCBtX2NoYW5nZVJv
dW5kOyAvLyBVc2VkIHRvIGtub3cgaWYgdGhlIHF1ZXJ5IGhhcyBjaGFuZ2VkIGluIHRoZSBsYXN0
IHN0eWxlIHNlbGVjdG9yIGNoYW5nZS4KICAgICBib29sIG1fbWF0Y2hlczsKIH07CiAKIH0KLQot
I2VuZGlmIC8vIE1lZGlhUXVlcnlMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1h
dGNoZXIuY3BwCmluZGV4IDE2MGM3ZDM2MjhlZDI3MmEwNjFkZWNiY2E0NjU3MTFmMTI1OTg0ODcu
LmQ4Yjg3ODc0NWZiMTVkMmRhNzNkMDZkNDgxYjVmMGRlZTQ5NThiNDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcApAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUg
Ik1lZGlhUXVlcnlNYXRjaGVyLmgiCiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUg
IkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIk1lZGlhTGlzdC5oIgpAQCAtMzMsMzEgKzMyLDExIEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotTWVkaWFRdWVyeU1hdGNoZXI6Okxpc3RlbmVyOjpMaXN0ZW5lcihQYXNzUmVm
UHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyLCBQYXNzUmVmUHRyPE1lZGlhUXVl
cnlMaXN0PiBxdWVyeSkKLSAgICA6IG1fbGlzdGVuZXIobGlzdGVuZXIpCi0gICAgLCBtX3F1ZXJ5
KHF1ZXJ5KQorTWVkaWFRdWVyeU1hdGNoZXI6Ok1lZGlhUXVlcnlNYXRjaGVyKERvY3VtZW50JiBk
b2N1bWVudCkKKyAgICA6IG1fZG9jdW1lbnQoJmRvY3VtZW50KQogewogfQogCi1NZWRpYVF1ZXJ5
TWF0Y2hlcjo6TGlzdGVuZXI6On5MaXN0ZW5lcigpCi17Ci19Ci0KLXZvaWQgTWVkaWFRdWVyeU1h
dGNoZXI6Okxpc3RlbmVyOjpldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBldmFsdWF0b3Ip
Ci17Ci0gICAgYm9vbCBub3RpZnk7Ci0gICAgbV9xdWVyeS0+ZXZhbHVhdGUoZXZhbHVhdG9yLCBu
b3RpZnkpOwotICAgIGlmIChub3RpZnkpCi0gICAgICAgIG1fbGlzdGVuZXItPnF1ZXJ5Q2hhbmdl
ZChtX3F1ZXJ5LmdldCgpKTsKLX0KLQotTWVkaWFRdWVyeU1hdGNoZXI6Ok1lZGlhUXVlcnlNYXRj
aGVyKERvY3VtZW50KiBkb2N1bWVudCkKLSAgICA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpCi0gICAg
LCBtX2V2YWx1YXRpb25Sb3VuZCgxKQotewotICAgIEFTU0VSVChtX2RvY3VtZW50KTsKLX0KLQog
TWVkaWFRdWVyeU1hdGNoZXI6On5NZWRpYVF1ZXJ5TWF0Y2hlcigpCiB7CiB9CkBAIC02NSw3ICs0
NCw3IEBAIE1lZGlhUXVlcnlNYXRjaGVyOjp+TWVkaWFRdWVyeU1hdGNoZXIoKQogdm9pZCBNZWRp
YVF1ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQoKQogewogICAgIG1fbGlzdGVuZXJzLmNs
ZWFyKCk7Ci0gICAgbV9kb2N1bWVudCA9IDA7CisgICAgbV9kb2N1bWVudCA9IG51bGxwdHI7CiB9
CiAKIFN0cmluZyBNZWRpYVF1ZXJ5TWF0Y2hlcjo6bWVkaWFUeXBlKCkgY29uc3QKQEAgLTgxLDIz
ICs2MCwxOSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IE1lZGlhUXVlcnlNYXRjaGVy
Ojpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSgpCiAgICAgaWYgKCFtX2RvY3VtZW50IHx8
ICFtX2RvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIEVs
ZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpOwor
ICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IG1fZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgp
OwogICAgIGlmICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAog
ICAgIHJldHVybiBtX2RvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVt
ZW50KCpkb2N1bWVudEVsZW1lbnQsIG1fZG9jdW1lbnQtPnJlbmRlclN0eWxlKCksIE1hdGNoT25s
eVVzZXJBZ2VudFJ1bGVzKS5yZW5kZXJTdHlsZTsKIH0KIAotYm9vbCBNZWRpYVF1ZXJ5TWF0Y2hl
cjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCogbWVkaWEpCitib29sIE1lZGlhUXVlcnlN
YXRjaGVyOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBtZWRpYSkKIHsKLSAgICBpZiAo
IW1lZGlhKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KICAgICBhdXRvIHN0eWxlID0gZG9jdW1l
bnRFbGVtZW50VXNlckFnZW50U3R5bGUoKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IobWVkaWFUeXBlKCks
IG1fZG9jdW1lbnQtPmZyYW1lKCksIHN0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZXZhbHVhdG9y
LmV2YWwobWVkaWEpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgbWVkaWFUeXBl
KCksICptX2RvY3VtZW50LCBzdHlsZS5nZXQoKSB9LmV2YWx1YXRlKG1lZGlhKTsKIH0KIAogUmVm
UHRyPE1lZGlhUXVlcnlMaXN0PiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6bWF0Y2hNZWRpYShjb25zdCBT
dHJpbmcmIHF1ZXJ5KQpAQCAtMTA1LDM0ICs4MCwzMiBAQCBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+
IE1lZGlhUXVlcnlNYXRjaGVyOjptYXRjaE1lZGlhKGNvbnN0IFN0cmluZyYgcXVlcnkpCiAgICAg
aWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFJlZlB0cjxN
ZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZShxdWVyeSk7CisgICAg
YXV0byBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZShxdWVyeSk7CiAjaWYgRU5BQkxFKFJF
U09MVVRJT05fTUVESUFfUVVFUlkpCiAgICAgLy8gQWRkIHdhcm5pbmcgbWVzc2FnZSB0byBpbnNw
ZWN0b3Igd2hlbmV2ZXIgZHBpL2RwY20gdmFsdWVzIGFyZSB1c2VkIGZvciAic2NyZWVuIiBtZWRp
YS4KICAgICByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKG1fZG9jdW1lbnQsIG1lZGlh
LmdldCgpKTsKICNlbmRpZgotICAgIHJldHVybiBNZWRpYVF1ZXJ5TGlzdDo6Y3JlYXRlKHRoaXMs
IG1lZGlhLCBldmFsdWF0ZShtZWRpYS5nZXQoKSkpOworICAgIGJvb2wgcmVzdWx0ID0gZXZhbHVh
dGUobWVkaWEuZ2V0KCkpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5TGlzdDo6Y3JlYXRlKCp0aGlz
LCBXVEZNb3ZlKG1lZGlhKSwgcmVzdWx0KTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6
YWRkTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lciwg
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gcXVlcnkpCit2b2lkIE1lZGlhUXVlcnlNYXRjaGVy
OjphZGRMaXN0ZW5lcihSZWY8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiBsaXN0ZW5lciwgTWVk
aWFRdWVyeUxpc3QmIHF1ZXJ5KQogewogICAgIGlmICghbV9kb2N1bWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3RlbmVycy5zaXplKCk7ICsr
aSkgewotICAgICAgICBpZiAoKm1fbGlzdGVuZXJzW2ldLT5saXN0ZW5lcigpID09ICpsaXN0ZW5l
ciAmJiBtX2xpc3RlbmVyc1tpXS0+cXVlcnkoKSA9PSBxdWVyeSkKKyAgICBmb3IgKGF1dG8mIGV4
aXN0aW5nTGlzdGVuZXIgOiBtX2xpc3RlbmVycykgeworICAgICAgICBpZiAoZXhpc3RpbmdMaXN0
ZW5lci5saXN0ZW5lci5nZXQoKSA9PSBsaXN0ZW5lci5nZXQoKSAmJiBleGlzdGluZ0xpc3RlbmVy
LnF1ZXJ5LnB0cigpID09ICZxdWVyeSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBtX2xpc3RlbmVycy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxMaXN0ZW5lcj4obGlzdGVuZXIs
IHF1ZXJ5KSk7CisgICAgbV9saXN0ZW5lcnMuYXBwZW5kKExpc3RlbmVyIHsgV1RGTW92ZShsaXN0
ZW5lciksIHF1ZXJ5IH0pOwogfQogCi12b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpyZW1vdmVMaXN0
ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBsaXN0ZW5lciwgTWVkaWFRdWVyeUxpc3QqIHF1
ZXJ5KQordm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6cmVtb3ZlTGlzdGVuZXIoTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciYgbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0JiBxdWVyeSkKIHsKLSAgICBpZiAo
IW1fZG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fbGlzdGVuZXJzLnJlbW92ZUZp
cnN0TWF0Y2hpbmcoW2xpc3RlbmVyLCBxdWVyeV0oYXV0byYgY3VycmVudCkgewotICAgICAgICBy
ZXR1cm4gKmN1cnJlbnQtPmxpc3RlbmVyKCkgPT0gKmxpc3RlbmVyICYmIGN1cnJlbnQtPnF1ZXJ5
KCkgPT0gcXVlcnk7CisgICAgbV9saXN0ZW5lcnMucmVtb3ZlRmlyc3RNYXRjaGluZyhbJmxpc3Rl
bmVyLCAmcXVlcnldKGF1dG8mIGV4aXN0aW5nTGlzdGVuZXIpIHsKKyAgICAgICAgcmV0dXJuIGV4
aXN0aW5nTGlzdGVuZXIubGlzdGVuZXIuZ2V0KCkgPT0gbGlzdGVuZXIgJiYgZXhpc3RpbmdMaXN0
ZW5lci5xdWVyeS5wdHIoKSA9PSAmcXVlcnk7CiAgICAgfSk7CiB9CiAKQEAgLTE0NSw5ICsxMTgs
MTQgQEAgdm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6c3R5bGVSZXNvbHZlckNoYW5nZWQoKQogICAg
IGF1dG8gc3R5bGUgPSBkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSgpOwogICAgIGlmICgh
c3R5bGUpCiAgICAgICAgIHJldHVybjsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRv
cihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwgc3R5bGUuZ2V0KCkpOwotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9saXN0ZW5lcnMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1f
bGlzdGVuZXJzW2ldLT5ldmFsdWF0ZSgmZXZhbHVhdG9yKTsKKworICAgIE1lZGlhUXVlcnlFdmFs
dWF0b3IgZXZhbHVhdG9yIHsgbWVkaWFUeXBlKCksICptX2RvY3VtZW50LCBzdHlsZS5nZXQoKSB9
OworICAgIGZvciAoYXV0byYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycykgeworICAgICAgICBib29s
IG5vdGlmeTsKKyAgICAgICAgbGlzdGVuZXIucXVlcnktPmV2YWx1YXRlKGV2YWx1YXRvciwgbm90
aWZ5KTsKKyAgICAgICAgaWYgKG5vdGlmeSkKKyAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbmVy
LT5xdWVyeUNoYW5nZWQobGlzdGVuZXIucXVlcnkucHRyKCkpOworICAgIH0KIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlNYXRjaGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuaAppbmRl
eCBiNzc3M2QzOGU4MmVkOTQ1MDUzNDUzYzIzODFhMWY0ODM0MGY0ZDAwLi40NjQ4ZWU2ZmM0N2Ez
ZTU2MTE3NzJiOGMxOGZjM2UwMTRjYzMzOGU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeU1hdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eU1hdGNoZXIuaApAQCAtMTcsOCArMTcsNyBAQAogICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgogICovCiAKLSNpZm5kZWYgTWVkaWFRdWVyeU1hdGNoZXJfaAotI2RlZmluZSBNZWRpYVF1
ZXJ5TWF0Y2hlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgpAQCAtMzcsNTMgKzM2LDQzIEBAIGNsYXNzIFJlbmRlclN0eWxlOwog
Ly8gTWVkaWFRdWVyeU1hdGNoZXIgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGtlZXBpbmcgYSB2
ZWN0b3Igb2YgcGFpcnMKIC8vIE1lZGlhUXVlcnlMaXN0IHggTWVkaWFRdWVyeUxpc3RMaXN0ZW5l
ci4gSXQgaXMgcmVzcG9uc2libGUgZm9yIGV2YWx1YXRpbmcgdGhlIHF1ZXJpZXMKIC8vIHdoZW5l
dmVyIGl0IGlzIG5lZWRlZCBhbmQgdG8gY2FsbCB0aGUgbGlzdGVuZXJzIGlmIHRoZSBjb3JyZXNw
b25kaW5nIHF1ZXJ5IGhhcyBjaGFuZ2VkLgotLy8gVGhlIGxpc3RlbmVycyBtdXN0IGJlIGNhbGxl
ZCBpbiB0aGUgdmVyeSBzYW1lIG9yZGVyIGluIHdoaWNoIHRoZXkgaGF2ZSBiZWVuIGFkZGVkLgor
Ly8gVGhlIGxpc3RlbmVycyBtdXN0IGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhl
eSB3ZXJlIGFkZGVkLgogCiBjbGFzcyBNZWRpYVF1ZXJ5TWF0Y2hlciA6IHB1YmxpYyBSZWZDb3Vu
dGVkPE1lZGlhUXVlcnlNYXRjaGVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxNZWRpYVF1
ZXJ5TWF0Y2hlcj4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBNZWRpYVF1ZXJ5TWF0Y2hlcihkb2N1bWVudCkpOyB9CisgICAgc3RhdGljIFJlZjxNZWRp
YVF1ZXJ5TWF0Y2hlcj4gY3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBNZWRpYVF1ZXJ5TWF0Y2hlcihkb2N1bWVudCkpOyB9CiAgICAgfk1lZGlhUXVlcnlN
YXRjaGVyKCk7CisKICAgICB2b2lkIGRvY3VtZW50RGVzdHJveWVkKCk7CiAKLSAgICB2b2lkIGFk
ZExpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIFBhc3NSZWZQdHI8
TWVkaWFRdWVyeUxpc3Q+KTsKLSAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXIqLCBNZWRpYVF1ZXJ5TGlzdCopOworICAgIHZvaWQgYWRkTGlzdGVuZXIoUmVmPE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYsIE1lZGlhUXVlcnlMaXN0Jik7CisgICAgdm9pZCByZW1v
dmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiwgTWVkaWFRdWVyeUxpc3QmKTsKIAog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gbWF0Y2hNZWRpYShjb25zdCBTdHJpbmcmKTsKIAog
ICAgIHVuc2lnbmVkIGV2YWx1YXRpb25Sb3VuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZXZhbHVhdGlv
blJvdW5kOyB9Ci0gICAgdm9pZCBzdHlsZVJlc29sdmVyQ2hhbmdlZCgpOwotICAgIGJvb2wgZXZh
bHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCopOwotCi1wcml2YXRlOgotICAgIGNsYXNzIExpc3Rl
bmVyIHsKLSAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgcHVibGljOgotICAg
ICAgICBMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCBQYXNzUmVm
UHRyPE1lZGlhUXVlcnlMaXN0Pik7Ci0gICAgICAgIH5MaXN0ZW5lcigpOwogCi0gICAgICAgIHZv
aWQgZXZhbHVhdGUoTWVkaWFRdWVyeUV2YWx1YXRvciopOworICAgIHZvaWQgc3R5bGVSZXNvbHZl
ckNoYW5nZWQoKTsKIAotICAgICAgICBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBsaXN0ZW5lcigp
IHsgcmV0dXJuIG1fbGlzdGVuZXIuZ2V0KCk7IH0KLSAgICAgICAgTWVkaWFRdWVyeUxpc3QqIHF1
ZXJ5KCkgeyByZXR1cm4gbV9xdWVyeS5nZXQoKTsgfQorICAgIGJvb2wgZXZhbHVhdGUoY29uc3Qg
TWVkaWFRdWVyeVNldCYpOwogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmUHRyPE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXI+IG1fbGlzdGVuZXI7Ci0gICAgICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlz
dD4gbV9xdWVyeTsKK3ByaXZhdGU6CisgICAgc3RydWN0IExpc3RlbmVyIHsKKyAgICAgICAgUmVm
PE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyOworICAgICAgICBSZWY8TWVkaWFRdWVy
eUxpc3Q+IHF1ZXJ5OwogICAgIH07CiAKLSAgICBNZWRpYVF1ZXJ5TWF0Y2hlcihEb2N1bWVudCop
OworICAgIGV4cGxpY2l0IE1lZGlhUXVlcnlNYXRjaGVyKERvY3VtZW50Jik7CiAgICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSgpIGNv
bnN0OwogICAgIFN0cmluZyBtZWRpYVR5cGUoKSBjb25zdDsKIAogICAgIERvY3VtZW50KiBtX2Rv
Y3VtZW50OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TGlzdGVuZXI+PiBtX2xpc3RlbmVy
czsKKyAgICBWZWN0b3I8TGlzdGVuZXI+IG1fbGlzdGVuZXJzOwogCiAgICAgLy8gVGhpcyB2YWx1
ZSBpcyBpbmNyZW1lbnRlZCBhdCBzdHlsZSBzZWxlY3RvciBjaGFuZ2VzLgogICAgIC8vIEl0IGlz
IHVzZWQgdG8gYXZvaWQgZXZhbHVhdGluZyBxdWVyaWVzIG1vcmUgdGhlbiBvbmNlIGFuZCB0byBt
YWtlIHN1cmUKICAgICAvLyB0aGF0IGEgbWVkaWEgcXVlcnkgcmVzdWx0IGNoYW5nZSBpcyBub3Rp
ZmllZCBleGFjdGx5IG9uY2UuCi0gICAgdW5zaWduZWQgbV9ldmFsdWF0aW9uUm91bmQ7CisgICAg
dW5zaWduZWQgbV9ldmFsdWF0aW9uUm91bmQgeyAxIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCi0KLSNlbmRpZiAvLyBNZWRpYVF1ZXJ5TWF0Y2hlcl9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5j
cHAKaW5kZXggNzViMjVkYjBkOWRjMzZhNmViYzg4NTEwMGYyMTdmMDQ1OWM5MjIyNy4uNDRhYzYy
YmE1ZGIzYjg3ZGYzYjBhYjVhNzFiMTM2ZDIxOWE4NmQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL1J1bGVTZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNw
cApAQCAtMzM3LDcgKzMzNyw3IEBAIHZvaWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVsZXMsIGNvbnN0IE1lCiAgICAgICAgICAg
ICBhZGRQYWdlUnVsZShkb3duY2FzdDxTdHlsZVJ1bGVQYWdlPihydWxlLmdldCgpKSk7CiAgICAg
ICAgIGVsc2UgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPigqcnVsZSkpIHsKICAgICAgICAgICAgIGF1
dG8mIG1lZGlhUnVsZSA9IGRvd25jYXN0PFN0eWxlUnVsZU1lZGlhPigqcnVsZSk7Ci0gICAgICAg
ICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwobWVkaWFS
dWxlLm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKQorICAgICAgICAgICAgaWYgKCghbWVkaWFS
dWxlLm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsdWF0ZSgqbWVkaWFSdWxlLm1lZGlhUXVl
cmllcygpLCByZXNvbHZlcikpKQogICAgICAgICAgICAgICAgIGFkZENoaWxkUnVsZXMobWVkaWFS
dWxlLmNoaWxkUnVsZXMoKSwgbWVkaXVtLCByZXNvbHZlciwgaGFzRG9jdW1lbnRTZWN1cml0eU9y
aWdpbiwgaXNJbml0aWF0aW5nRWxlbWVudEluVXNlckFnZW50U2hhZG93VHJlZSwgYWRkUnVsZUZs
YWdzKTsKICAgICAgICAgfSBlbHNlIGlmIChpczxTdHlsZVJ1bGVGb250RmFjZT4oKnJ1bGUpICYm
IHJlc29sdmVyKSB7CiAgICAgICAgICAgICAvLyBBZGQgdGhpcyBmb250IGZhY2UgdG8gb3VyIHNl
dC4KQEAgLTM2Myw3ICszNjMsNyBAQCB2b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4mIHJ1bGVzLCBjb25zdCBNZQogdm9pZCBSdWxl
U2V0OjphZGRSdWxlc0Zyb21TaGVldChTdHlsZVNoZWV0Q29udGVudHMmIHNoZWV0LCBjb25zdCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpdW0sIFN0eWxlUmVzb2x2ZXIqIHJlc29sdmVyKQogewog
ICAgIGZvciAoYXV0byYgcnVsZSA6IHNoZWV0LmltcG9ydFJ1bGVzKCkpIHsKLSAgICAgICAgaWYg
KHJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAoIXJ1bGUtPm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5l
dmFsKHJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpKQorICAgICAgICBpZiAocnVsZS0+
c3R5bGVTaGVldCgpICYmICghcnVsZS0+bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWx1YXRl
KCpydWxlLT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKICAgICAgICAgICAgIGFkZFJ1bGVz
RnJvbVNoZWV0KCpydWxlLT5zdHlsZVNoZWV0KCksIG1lZGl1bSwgcmVzb2x2ZXIpOwogICAgIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKaW5kZXggNzQxNzUxZjMwZDQ0MjZi
MzhjYTNhMGUwN2JiNTFlZGJmZmE3NDEzOS4uZDlmNTI0NzU5ZjlkMTNiYTNhZDA1MGQzMGE5MTE2
Yzc2OGUxZmUzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCkBAIC0yNCw1
OCArMjQsNDcgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCi0jaW5jbHVkZSAiTWVk
aWFRdWVyeS5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgbWF0Y2goc3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgZXhwcmVzc2lvbiwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBGcmFtZSogZnJhbWUpCitzdGF0aWMgYm9vbCBtYXRjaChjb25zdCBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBEb2N1
bWVudCYgZG9jdW1lbnQpCiB7Ci0gICAgaWYgKGV4cHJlc3Npb24tPm1lZGlhRmVhdHVyZSgpLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvIGV4cExpc3QgPSBzdGQ6
Om1ha2VfdW5pcXVlPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigpOwot
ICAgIGV4cExpc3QtPmFwcGVuZChXVEZNb3ZlKGV4cHJlc3Npb24pKTsKLQotICAgIFJlZlB0cjxN
ZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJ5U2V0ID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCk7Ci0g
ICAgbWVkaWFRdWVyeVNldC0+YWRkTWVkaWFRdWVyeShzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVl
cnk+KE1lZGlhUXVlcnk6Ok5vbmUsICJhbGwiLCBXVEZNb3ZlKGV4cExpc3QpKSk7Ci0KLSAgICBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCAm
c3R5bGUpOwotICAgIHJldHVybiBtZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWwobWVkaWFRdWVyeVNl
dC5nZXQoKSk7CisgICAgcmV0dXJuIGV4cHJlc3Npb24ubWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgp
IHx8IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyAic2NyZWVuIiwgZG9jdW1lbnQsICZzdHlsZSB9LmV2
YWx1YXRlKGV4cHJlc3Npb24pOwogfQogCi1zdGF0aWMgZmxvYXQgZGVmYXVsdExlbmd0aChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitzdGF0aWMgZmxvYXQgZGVm
YXVsdExlbmd0aChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcmIHJlbmRlcmVy
KQogewotICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihDU1NQcmltaXRpdmVWYWx1ZTo6Y29tcHV0
ZU5vbkNhbGNMZW5ndGhEb3VibGUoQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmc3R5bGUsICZz
dHlsZSwgdmlldyksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CisgICAgcmV0
dXJuIGNsYW1wVG88ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0
aERvdWJsZSh7ICZzdHlsZSwgJnN0eWxlLCAmcmVuZGVyZXIgfSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19WVywgMTAwLjApKTsKIH0KIAotc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5ndGgoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcqIHZpZXcpCitz
dGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSYgdmFsdWUsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUmVuZGVyVmlldyYgcmVuZGVyZXIpCiB7Ci0gICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgdmlldyk7CisgICAgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSgmc3R5bGUsICZzdHlsZSwgJnJl
bmRlcmVyKTsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewotICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKKyAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKQotICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMZW5n
dGgoc3R5bGUsIHZpZXcpOworICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgoc3R5bGUs
IHJlbmRlcmVyKTsKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKTsKICAgICB9CiAgICAgaWYgKGlzPENTU0NhbGNWYWx1ZT4o
dmFsdWUpKQotICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY1ZhbHVlPigqdmFsdWUpLmNv
bXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7Ci0gICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgo
c3R5bGUsIHZpZXcpOworICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY1ZhbHVlPih2YWx1
ZSkuY29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKKyAgICByZXR1cm4gZGVmYXVsdExl
bmd0aChzdHlsZSwgcmVuZGVyZXIpOwogfQogCi1mbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKFN0
cmluZ1ZpZXcgc2l6ZXNBdHRyaWJ1dGUsIFJlbmRlclZpZXcqIHZpZXcsIEZyYW1lKiBmcmFtZSkK
K2Zsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoRG9jdW1lbnQmIGRvY3VtZW50LCBTdHJpbmdWaWV3
IHNpemVzQXR0cmlidXRlKQogewotICAgIGlmICghdmlldykKKyAgICBhdXRvKiByZW5kZXJlciA9
IGRvY3VtZW50LnJlbmRlclZpZXcoKTsKKyAgICBpZiAoIXJlbmRlcmVyKQogICAgICAgICByZXR1
cm4gMDsKLSAgICBhdXRvJiBzdHlsZSA9IHZpZXctPnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUg
PSByZW5kZXJlci0+c3R5bGUoKTsKICAgICBmb3IgKGF1dG8mIHNvdXJjZVNpemUgOiBDU1NQYXJz
ZXIoQ1NTU3RyaWN0TW9kZSkucGFyc2VTaXplc0F0dHJpYnV0ZShzaXplc0F0dHJpYnV0ZSkpIHsK
LSAgICAgICAgaWYgKG1hdGNoKFdURk1vdmUoc291cmNlU2l6ZS5leHByZXNzaW9uKSwgc3R5bGUs
IGZyYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVu
Z3RoLmdldCgpLCBzdHlsZSwgdmlldyk7CisgICAgICAgIGlmIChtYXRjaChzb3VyY2VTaXplLmV4
cHJlc3Npb24sIHN0eWxlLCBkb2N1bWVudCkpCisgICAgICAgICAgICByZXR1cm4gY29tcHV0ZUxl
bmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsICpyZW5kZXJlcik7CiAgICAgfQot
ICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCB2aWV3KTsKKyAgICByZXR1cm4gZGVmYXVs
dExlbmd0aChzdHlsZSwgKnJlbmRlcmVyKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuaAppbmRleCBlMWFlZjk3MGZlZmEwZWIxMmFlMWI1
ZjNjNWU0ZTQ2YzAzNzY2N2QxLi5hYjcxNjRlNjNiYTA4ZTgyY2M4Mzc4ZjI5YmUxNDUyNGJkOTUx
MjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuaApAQCAtMTgsMTggKzE4LDE0IEBA
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIFNvdXJjZVNp
emVMaXN0X2gKLSNkZWZpbmUgU291cmNlU2l6ZUxpc3RfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIEZyYW1l
OwotY2xhc3MgUmVuZGVyVmlldzsKK2NsYXNzIERvY3VtZW50OwogCi1mbG9hdCBwYXJzZVNpemVz
QXR0cmlidXRlKFN0cmluZ1ZpZXcgc2l6ZXNBdHRyaWJ1dGUsIFJlbmRlclZpZXcqLCBGcmFtZSop
OworZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShEb2N1bWVudCYsIFN0cmluZ1ZpZXcgc2l6ZXNB
dHRyaWJ1dGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTb3VyY2VT
aXplTGlzdF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKaW5kZXggMzRkZThjYmExMjZkMTQ3
MjQ3ZGQ4ZGE4NWY0NmVhYmM5YjA1ZGU1OC4uN2NkZDI3MTdjMzEyYmU3NTIzNzMwZWEwNzdhY2M2
NGZlNjY3YmFlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcApAQCAtNjMsMTIgKzYzLDEx
IEBAIGJvb2wgU3R5bGVNZWRpYTo6bWF0Y2hNZWRpdW0oY29uc3QgU3RyaW5nJiBxdWVyeSkgY29u
c3QKIAogICAgIGF1dG8gcm9vdFN0eWxlID0gZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2ZXIo
KS5zdHlsZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgZG9jdW1lbnQtPnJlbmRlclN0eWxl
KCksIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKS5yZW5kZXJTdHlsZTsKIAotICAgIFJlZlB0cjxN
ZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpOworICAgIGF1dG8g
bWVkaWEgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKTsKICAgICBpZiAoIW1lZGlhLT5wYXJzZShx
dWVyeSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Ig
c2NyZWVuRXZhbCh0eXBlKCksIG1fZnJhbWUsIHJvb3RTdHlsZS5nZXQoKSk7Ci0gICAgcmV0dXJu
IHNjcmVlbkV2YWwuZXZhbChtZWRpYS5nZXQoKSk7CisgICAgcmV0dXJuIE1lZGlhUXVlcnlFdmFs
dWF0b3IgeyB0eXBlKCksICpkb2N1bWVudCwgcm9vdFN0eWxlLmdldCgpIH0uZXZhbHVhdGUobWVk
aWEuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKaW5kZXggOGY2ZGFmZjQ3Njk2NjdhMmIzNjMwZThiZTg1OWUzMzEyMTM2
MTM0ZC4uZDg4MWMxNWFhMWY5ODA4MDIwNmRhNGRiYzNmMGFmN2ZhYmU5NTg1ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtMjcwLDE5ICsyNzAsMTkgQEAgU3R5bGVSZXNv
bHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAgICAgLy8gaXMgYWx3YXlz
IGZyb20gdGhlIGRvY3VtZW50IHRoYXQgb3ducyB0aGUgc3R5bGUgc2VsZWN0b3IKICAgICBGcmFt
ZVZpZXcqIHZpZXcgPSBtX2RvY3VtZW50LnZpZXcoKTsKICAgICBpZiAodmlldykKLSAgICAgICAg
bV9tZWRpdW0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KHZpZXctPm1l
ZGlhVHlwZSgpKTsKKyAgICAgICAgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yID0gTWVkaWFRdWVyeUV2
YWx1YXRvciB7IHZpZXctPm1lZGlhVHlwZSgpIH07CiAgICAgZWxzZQotICAgICAgICBtX21lZGl1
bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4oImFsbCIpOworICAgICAg
ICBtX21lZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgImFsbCIgfTsK
IAogICAgIGlmIChyb290KQogICAgICAgICBtX3Jvb3REZWZhdWx0U3R5bGUgPSBzdHlsZUZvckVs
ZW1lbnQoKnJvb3QsIG1fZG9jdW1lbnQucmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50
UnVsZXMpLnJlbmRlclN0eWxlOwogCiAgICAgaWYgKG1fcm9vdERlZmF1bHRTdHlsZSAmJiB2aWV3
KQotICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeUV2YWx1YXRv
cj4odmlldy0+bWVkaWFUeXBlKCksICZ2aWV3LT5mcmFtZSgpLCBtX3Jvb3REZWZhdWx0U3R5bGUu
Z2V0KCkpOworICAgICAgICBtX21lZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVh
dG9yIHsgdmlldy0+bWVkaWFUeXBlKCksIG1fZG9jdW1lbnQsIG1fcm9vdERlZmF1bHRTdHlsZS5n
ZXQoKSB9OwogCiAgICAgbV9ydWxlU2V0cy5yZXNldEF1dGhvclN0eWxlKCk7CiAKLSAgICBtX3J1
bGVTZXRzLmluaXRVc2VyU3R5bGUobV9kb2N1bWVudC5leHRlbnNpb25TdHlsZVNoZWV0cygpLCAq
bV9tZWRpdW0sICp0aGlzKTsKKyAgICBtX3J1bGVTZXRzLmluaXRVc2VyU3R5bGUobV9kb2N1bWVu
dC5leHRlbnNpb25TdHlsZVNoZWV0cygpLCBtX21lZGlhUXVlcnlFdmFsdWF0b3IsICp0aGlzKTsK
IAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgaWYgKG1fZG9jdW1lbnQuc3ZnRXh0ZW5zaW9u
cygpKSB7CkBAIC0yOTUsNyArMjk1LDcgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihE
b2N1bWVudCYgZG9jdW1lbnQpCiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0Pj4mIHN0eWxlU2hlZXRz
KQogewotICAgIG1fcnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoc3R5bGVTaGVldHMs
IG1fbWVkaXVtLmdldCgpLCBtX2luc3BlY3RvckNTU09NV3JhcHBlcnMsIHRoaXMpOworICAgIG1f
cnVsZVNldHMuYXBwZW5kQXV0aG9yU3R5bGVTaGVldHMoc3R5bGVTaGVldHMsICZtX21lZGlhUXVl
cnlFdmFsdWF0b3IsIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVycywgdGhpcyk7CiAgICAgaWYgKGF1
dG8gcmVuZGVyVmlldyA9IGRvY3VtZW50KCkucmVuZGVyVmlldygpKQogICAgICAgICByZW5kZXJW
aWV3LT5zdHlsZSgpLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZkb2N1bWVudCgpLmZvbnRTZWxlY3Rv
cigpKTsKIApAQCAtNDE5LDcgKzQxOSw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAg
ICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgbV9z
dGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAgICBjb2xsZWN0b3Iuc2V0UmVnaW9uRm9yU3R5bGlu
ZyhyZWdpb25Gb3JTdHlsaW5nKTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVkaXVtLmdl
dCgpKTsKKyAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKCZtX21lZGlhUXVlcnlFdmFsdWF0b3IpOwog
CiAgICAgaWYgKG1hdGNoaW5nQmVoYXZpb3IgPT0gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpCiAg
ICAgICAgIGNvbGxlY3Rvci5tYXRjaFVBUnVsZXMoKTsKQEAgLTU4Miw3ICs1ODIsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlRm9yRWxl
bWVudChjb25zdCBFbGVtZW50JgogICAgIC8vIENoZWNrIFVBLCB1c2VyIGFuZCBhdXRob3IgcnVs
ZXMuCiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNl
dHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAgY29sbGVjdG9yLnNldFBzZXVkb1N0
eWxlUmVxdWVzdChwc2V1ZG9TdHlsZVJlcXVlc3QpOwotICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0o
bV9tZWRpdW0uZ2V0KCkpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2
YWx1YXRvcik7CiAgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOwogCiAgICAgaWYgKG1fbWF0
Y2hBdXRob3JBbmRVc2VyU3R5bGVzKSB7CkBAIC0xMDg2LDcgKzEwODYsNyBAQCBWZWN0b3I8UmVm
UHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVzb2x2ZXI6OnBzZXVkb1N0eWxlUnVsZXNGb3JFbGVtZW50
KGNvbnN0IEVsZW1lbgogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3RvcigqZWxlbWVu
dCwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAgICBjb2xsZWN0b3Iu
c2V0TW9kZShTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OkNvbGxlY3RpbmdSdWxlcyk7CiAgICAgY29s
bGVjdG9yLnNldFBzZXVkb1N0eWxlUmVxdWVzdChQc2V1ZG9TdHlsZVJlcXVlc3QocHNldWRvSWQp
KTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVkaXVtLmdldCgpKTsKKyAgICBjb2xsZWN0
b3Iuc2V0TWVkaXVtKCZtX21lZGlhUXVlcnlFdmFsdWF0b3IpOwogCiAgICAgaWYgKHJ1bGVzVG9J
bmNsdWRlICYgVUFBbmRVc2VyQ1NTUnVsZXMpIHsKICAgICAgICAgLy8gRmlyc3Qgd2UgbWF0Y2gg
cnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KQEAgLTE4NzgsMTYgKzE4NzgsMTUgQEAg
Q29sb3IgU3R5bGVSZXNvbHZlcjo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHZhbHVlLCBib28KICAgICB9CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAq
IGV4cHIsIGJvb2wgcmVzdWx0KQordm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIGJvb2wgcmVzdWx0KQogewotICAgIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVz
dWx0cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5UmVzdWx0PigqZXhwciwgcmVz
dWx0KSk7CisgICAgbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChN
ZWRpYVF1ZXJ5UmVzdWx0IHsgZXhwcmVzc2lvbiwgcmVzdWx0IH0pOwogfQogCiBib29sIFN0eWxl
UmVzb2x2ZXI6Omhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0
CiB7Ci0gICAgdW5zaWduZWQgcyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
cy5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHM7IGkrKykgewotICAgICAg
ICBpZiAobV9tZWRpdW0tPmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0
c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dHNbaV0tPm1fcmVzdWx0KQorICAgIGZvciAoYXV0byYgcmVzdWx0IDogbV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzKSB7CisgICAgICAgIGlmIChtX21lZGlhUXVlcnlFdmFsdWF0
b3IuZXZhbHVhdGUocmVzdWx0LmV4cHJlc3Npb24pICE9IHJlc3VsdC5yZXN1bHQpCiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKaW5kZXggMmYwNjRlNjBjY2RmNDcwMTY0MTQ2MmFiYzQ3M2JkZjMxYWM1
MDdmMC4uNjNhNmQ4ZDFlZTE2OGM5YTBlMzYxOTRmYWYzODViNjE3NDU4NWRkNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU3R5bGVSZXNvbHZlci5oCkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIERv
Y3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgeyByZXR1cm4gbV9ydWxlU2V0czsgfQogICAgIGNv
bnN0IERvY3VtZW50UnVsZVNldHMmIHJ1bGVTZXRzKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlU2V0
czsgfQogCi0gICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRv
cigpIGNvbnN0IHsgcmV0dXJuICptX21lZGl1bTsgfQorICAgIGNvbnN0IE1lZGlhUXVlcnlFdmFs
dWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUXVlcnlF
dmFsdWF0b3I7IH0KIAogICAgIHZvaWQgc2V0T3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZShS
ZW5kZXJTdHlsZSogc3R5bGUpIHsgbV9vdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlID0gc3R5
bGU7IH0KIApAQCAtMjAxLDcgKzIwMSw3IEBAIHB1YmxpYzoKICAgICBWaWV3cG9ydFN0eWxlUmVz
b2x2ZXIqIHZpZXdwb3J0U3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fdmlld3BvcnRTdHlsZVJl
c29sdmVyLmdldCgpOyB9CiAjZW5kaWYKIAotICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHAqLCBib29sIHJlc3VsdCk7CisgICAg
dm9pZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVy
eUV4cHJlc3Npb24mLCBib29sIHJlc3VsdCk7CiAgICAgYm9vbCBoYXNWaWV3cG9ydERlcGVuZGVu
dE1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuICFtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHMuaXNFbXB0eSgpOyB9CiAgICAgYm9vbCBoYXNNZWRpYVF1ZXJpZXNBZmZlY3Rl
ZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdDsKIApAQCAtNTE3LDcgKzUxNyw3IEBAIHByaXZhdGU6
CiAKICAgICBUaW1lciBtX21hdGNoZWRQcm9wZXJ0aWVzQ2FjaGVTd2VlcFRpbWVyOwogCi0gICAg
c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFdmFsdWF0b3I+IG1fbWVkaXVtOworICAgIE1lZGlh
UXVlcnlFdmFsdWF0b3IgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gbV9yb290RGVmYXVsdFN0eWxlOwogCiAgICAgRG9jdW1lbnQmIG1fZG9j
dW1lbnQ7CkBAIC01MjYsNyArNTI2LDcgQEAgcHJpdmF0ZToKIAogICAgIFJlbmRlclN0eWxlKiBt
X292ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUgeyBudWxscHRyIH07CiAKLSAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHM7CisgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1bHQ+IG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxl
UmVzb2x2ZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA2ZjMzZjIzNGRiNzgxY2ViNmNk
MTgzZGY1ZGZmYTQ4NDA5MTZkNDc1Li5kMDYwNzU1MWU2MjNkMjE0NmU5NWE5MDVjOTljNTRmNzdm
NDhlMzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTgwMiw3ICs4MDIsNyBAQCB2b2lk
IERvY3VtZW50OjpjbGVhclNlbGVjdG9yUXVlcnlDYWNoZSgpCiBNZWRpYVF1ZXJ5TWF0Y2hlciYg
RG9jdW1lbnQ6Om1lZGlhUXVlcnlNYXRjaGVyKCkKIHsKICAgICBpZiAoIW1fbWVkaWFRdWVyeU1h
dGNoZXIpCi0gICAgICAgIG1fbWVkaWFRdWVyeU1hdGNoZXIgPSBNZWRpYVF1ZXJ5TWF0Y2hlcjo6
Y3JlYXRlKHRoaXMpOworICAgICAgICBtX21lZGlhUXVlcnlNYXRjaGVyID0gTWVkaWFRdWVyeU1h
dGNoZXI6OmNyZWF0ZSgqdGhpcyk7CiAgICAgcmV0dXJuICptX21lZGlhUXVlcnlNYXRjaGVyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCmluZGV4
IGFlNDFmNzNiYmFjNGRmNTgwY2M3NmYzNGRlYzY1OTg0MmUzMjIxOTEuLjlmYzQyNmQxYjgzOGUy
ZDNlMjFkODMyZDQ3YmI2MjE4OWVhMTk5YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Jbmxp
bmVTdHlsZVNoZWV0T3duZXIuY3BwCkBAIC0xNTAsNyArMTUwLDcgQEAgdm9pZCBJbmxpbmVTdHls
ZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
dGV4dCkKIAogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbChBU0NJSUxpdGVyYWwo
InNjcmVlbiIpLCB0cnVlKTsKICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHByaW50RXZhbChBU0NJ
SUxpdGVyYWwoInByaW50IiksIHRydWUpOwotICAgIGlmICghc2NyZWVuRXZhbC5ldmFsKG1lZGlh
UXVlcmllcy5nZXQoKSkgJiYgIXByaW50RXZhbC5ldmFsKG1lZGlhUXVlcmllcy5nZXQoKSkpCisg
ICAgaWYgKCFzY3JlZW5FdmFsLmV2YWx1YXRlKCptZWRpYVF1ZXJpZXMpICYmICFwcmludEV2YWwu
ZXZhbHVhdGUoKm1lZGlhUXVlcmllcykpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dGhvclN0
eWxlU2hlZXRzRm9yRWxlbWVudChlbGVtZW50KS5hZGRQZW5kaW5nU2hlZXQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAppbmRleCA4NTVjYWYxZWYzMjY4OTQwN2FkNzli
ZTgzZTc0MTRkOWIxYTdiYjlkLi4yZGZmMDQyNjNlZDZmOTY5ODQzZmM5M2M0NzU2NDY2OTg0ODJl
NWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0xMjY2LDcg
KzEyNjYsNyBAQCB2b2lkIFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3I6OmFkdmFuY2Uo
KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gRXhpdCBlbXB0eSBjb250YWluZXJz
IGFzIHdlIHBhc3Mgb3ZlciB0aGVtIG9yIGNvbnRhaW5lcnMKICAgICAgICAgICAgIC8vIHdoZXJl
IFtjb250YWluZXIsIDBdIGlzIHdoZXJlIHdlIHN0YXJ0ZWQgaXRlcmF0aW5nLgotICAgICAgICAg
ICAgaWYgKCFtX2hhbmRsZWROb2RlICYmIGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9k
ZSkgICYmIG1fbm9kZS0+cGFyZW50Tm9kZSgpICYmICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAo
bV9ub2RlID09IG1fZW5kQ29udGFpbmVyICYmICFtX2VuZE9mZnNldCkpKSB7CisgICAgICAgICAg
ICBpZiAoIW1faGFuZGxlZE5vZGUgJiYgY2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqbV9ub2Rl
KSAmJiBtX25vZGUtPnBhcmVudE5vZGUoKSAmJiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwgKG1f
bm9kZSA9PSBtX2VuZENvbnRhaW5lciAmJiAhbV9lbmRPZmZzZXQpKSkgewogICAgICAgICAgICAg
ICAgIGV4aXROb2RlKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fcG9zaXRpb25Ob2RlKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG1faGFuZGxlZE5vZGUgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggOTEzNjA5NDlhZjQ3NjQ5NGY1MjQyZTVkM2Yy
N2VhY2Y5MzZhNDJhYi4uYjBmNjFhN2UxYWQ5ODYwNzZhMThkMWU0ZTVmMGQ1NzIwYTE1NmU0MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0xNTMsMjcgKzE1
MywzMSBAQCBJbWFnZUNhbmRpZGF0ZSBIVE1MSW1hZ2VFbGVtZW50OjpiZXN0Rml0U291cmNlRnJv
bVBpY3R1cmVFbGVtZW50KCkKICAgICAgICAgaWYgKCFpczxIVE1MU291cmNlRWxlbWVudD4oKmNo
aWxkKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBhdXRvJiBzb3VyY2UgPSBkb3du
Y2FzdDxIVE1MU291cmNlRWxlbWVudD4oKmNoaWxkKTsKKwogICAgICAgICBhdXRvJiBzcmNzZXQg
PSBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZShzcmNzZXRBdHRyKTsKICAgICAgICAgaWYgKHNyY3Nl
dC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHNvdXJjZS5o
YXNBdHRyaWJ1dGUodHlwZUF0dHIpKSB7Ci0gICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHNvdXJj
ZS5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKS5zdHJpbmcoKTsKLSAgICAgICAgICAgIGludCBp
bmRleE9mU2VtaWNvbG9uID0gdHlwZS5maW5kKCc7Jyk7Ci0gICAgICAgICAgICBpZiAoaW5kZXhP
ZlNlbWljb2xvbiA+PSAwKQotICAgICAgICAgICAgICAgIHR5cGUudHJ1bmNhdGUoaW5kZXhPZlNl
bWljb2xvbik7CisKKyAgICAgICAgYXV0byYgdHlwZUF0dHJpYnV0ZSA9IHNvdXJjZS5mYXN0R2V0
QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlLmlzTnVsbCgp
KSB7CisgICAgICAgICAgICBTdHJpbmcgdHlwZSA9IHR5cGVBdHRyaWJ1dGUuc3RyaW5nKCk7Cisg
ICAgICAgICAgICB0eXBlLnRydW5jYXRlKHR5cGUuZmluZCgnOycpKTsKICAgICAgICAgICAgIHR5
cGUgPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModHlwZSk7CiAgICAgICAgICAg
ICBpZiAoIXR5cGUuaXNFbXB0eSgpICYmICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGUodHlwZSkgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHR5cGUs
ICJpbWFnZS9zdmcreG1sIikpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
LSAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQoKS5wcmludGlu
ZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCgpLmZyYW1lKCksIGRvY3VtZW50KCku
ZG9jdW1lbnRFbGVtZW50KCkgPyBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLT5jb21wdXRl
ZFN0eWxlKCkgOiBudWxscHRyKTsKLSAgICAgICAgYm9vbCBldmFsdWF0aW9uID0gZXZhbHVhdG9y
LmV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhzb3VyY2UubWVkaWFRdWVyeVNl
dCgpLCBwaWN0dXJlLT52aWV3cG9ydERlcGVuZGVudFJlc3VsdHMoKSk7CisKKyAgICAgICAgYXV0
byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAg
ICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IgeyBkb2N1bWVudCgpLnByaW50aW5nKCkg
PyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50KCksIGRvY3VtZW50RWxlbWVudCA/IGRvY3Vt
ZW50RWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpIDogbnVsbHB0ciB9OworICAgICAgICBhdXRvKiBx
dWVyaWVzID0gc291cmNlLm1lZGlhUXVlcnlTZXQoKTsKKyAgICAgICAgYXV0byBldmFsdWF0aW9u
ID0gIXF1ZXJpZXMgfHwgZXZhbHVhdG9yLmV2YWx1YXRlKCpxdWVyaWVzLCBwaWN0dXJlLT52aWV3
cG9ydERlcGVuZGVudFJlc3VsdHMoKSk7CiAgICAgICAgIGlmIChwaWN0dXJlLT5oYXNWaWV3cG9y
dERlcGVuZGVudFJlc3VsdHMoKSkKICAgICAgICAgICAgIGRvY3VtZW50KCkuYWRkVmlld3BvcnRE
ZXBlbmRlbnRQaWN0dXJlKCpwaWN0dXJlKTsKICAgICAgICAgaWYgKCFldmFsdWF0aW9uKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNlU2l6
ZXNBdHRyaWJ1dGUoc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSwg
ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIGRvY3VtZW50KCkuZnJhbWUoKSk7Ci0gICAgICAgIElt
YWdlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMo
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBudWxsQXRvbSwgc291cmNlLmZhc3RHZXRB
dHRyaWJ1dGUoc3Jjc2V0QXR0ciksIHNvdXJjZVNpemUpOworICAgICAgICBhdXRvIHNvdXJjZVNp
emUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRvY3VtZW50KCksIHNvdXJjZS5mYXN0R2V0QXR0cmli
dXRlKHNpemVzQXR0cikuc3RyaW5nKCkpOworICAgICAgICBhdXRvIGNhbmRpZGF0ZSA9IGJlc3RG
aXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
LCBudWxsQXRvbSwgc3Jjc2V0LCBzb3VyY2VTaXplKTsKICAgICAgICAgaWYgKCFjYW5kaWRhdGUu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICB9CkBAIC0xODYs
NyArMTkwLDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpzZWxlY3RJbWFnZVNvdXJjZSgpCiAg
ICAgSW1hZ2VDYW5kaWRhdGUgY2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxl
bWVudCgpOwogICAgIGlmIChjYW5kaWRhdGUuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIElmIHdl
IGRvbid0IGhhdmUgYSA8cGljdHVyZT4gb3IgZGlkbid0IGZpbmQgYSBzb3VyY2UsIHRoZW4gd2Ug
dXNlIG91ciBvd24gYXR0cmlidXRlcy4KLSAgICAgICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNl
U2l6ZXNBdHRyaWJ1dGUoZmFzdEdldEF0dHJpYnV0ZShzaXplc0F0dHIpLnN0cmluZygpLCBkb2N1
bWVudCgpLnJlbmRlclZpZXcoKSwgZG9jdW1lbnQoKS5mcmFtZSgpKTsKKyAgICAgICAgZmxvYXQg
c291cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoZG9jdW1lbnQoKSwgZmFzdEdldEF0dHJp
YnV0ZShzaXplc0F0dHIpLnN0cmluZygpKTsKICAgICAgICAgY2FuZGlkYXRlID0gYmVzdEZpdFNv
dXJjZUZvckltYWdlQXR0cmlidXRlcyhkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIGZh
c3RHZXRBdHRyaWJ1dGUoc3JjQXR0ciksIGZhc3RHZXRBdHRyaWJ1dGUoc3Jjc2V0QXR0ciksIHNv
dXJjZVNpemUpOwogICAgIH0KICAgICBzZXRCZXN0Rml0VVJMQW5kRFBSRnJvbUltYWdlQ2FuZGlk
YXRlKGNhbmRpZGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKaW5k
ZXggYjQwMTQyZmFhYmNhYWQyYTQxNDU2MjY5MzU4MWEyNDk2NjEyMDRjMy4uODAxYjQ5YmYyMzUz
NWE1OGU1OWI1YWM3YWFkZDM4YzFlMTc4MmIwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcApAQCAtMjQxLDggKzI0MSw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50Ojpw
cm9jZXNzKCkKICAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLmhhc0xpdmluZ1JlbmRlclRyZWUo
KSkKICAgICAgICAgICAgICAgICBkb2N1bWVudFN0eWxlID0gU3R5bGU6OnJlc29sdmVGb3JEb2N1
bWVudChkb2N1bWVudCgpKTsKICAgICAgICAgICAgIGF1dG8gbWVkaWEgPSBNZWRpYVF1ZXJ5U2V0
OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1fbWVkaWEpOwotICAgICAgICAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3KCkt
Pm1lZGlhVHlwZSgpLCBkb2N1bWVudCgpLmZyYW1lKCksIGRvY3VtZW50U3R5bGUgPyAmKmRvY3Vt
ZW50U3R5bGUgOiBudWxscHRyKTsKLSAgICAgICAgICAgIG1lZGlhUXVlcnlNYXRjaGVzID0gZXZh
bHVhdG9yLmV2YWwobWVkaWEucHRyKCkpOworICAgICAgICAgICAgbWVkaWFRdWVyeU1hdGNoZXMg
PSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgZG9jdW1lbnQoKS5mcmFtZSgpLT52aWV3KCktPm1lZGlh
VHlwZSgpLCBkb2N1bWVudCgpLCBkb2N1bWVudFN0eWxlID8gJipkb2N1bWVudFN0eWxlIDogbnVs
bHB0ciB9LmV2YWx1YXRlKG1lZGlhLmdldCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIERv
bid0IGhvbGQgdXAgcmVuZGVyIHRyZWUgY29uc3RydWN0aW9uIGFuZCBzY3JpcHQgZXhlY3V0aW9u
IG9uIHN0eWxlc2hlZXRzCkBAIC0zNjEsNyArMzYwLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OnNldENTU1N0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiBocmVmLCBjb25zdCBVUkwmIGJhc2VVUkws
IGMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZjxTdHlsZVNoZWV0Q29udGVudHM+
IHN0eWxlU2hlZXQoU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoaHJlZiwgcGFyc2VyQ29udGV4
dCkpOworICAgIGF1dG8gc3R5bGVTaGVldCA9IFN0eWxlU2hlZXRDb250ZW50czo6Y3JlYXRlKGhy
ZWYsIHBhcnNlckNvbnRleHQpOwogICAgIG1fc2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUo
c3R5bGVTaGVldC5jb3B5UmVmKCksIHRoaXMpOwogICAgIG1fc2hlZXQtPnNldE1lZGlhUXVlcmll
cyhNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KG1fbWVkaWEp
KTsKICAgICBtX3NoZWV0LT5zZXRUaXRsZSh0aXRsZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4IGVmNmM5OGEzZWNkNjM2Mzk1NDRiYTk0NDhkOTUyMDE5
NzUwZGM1YWYuLjM5YjJmNzYwYWNhYWE1OTViMDc0ZGNjODRiNWZmZThkYzE3ZTgyNWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApAQCAtNDE3NiwxMyArNDE3Niwx
MiBAQCBVUkwgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKENvbnRlbnRU
eXBlKiBjb250ZW50VHlwZSwgU3RyaW5nKiBrZQogICAgICAgICAgICAgZ290byBjaGVja19hZ2Fp
bjsKICAgICAgICAgCiAgICAgICAgIGlmIChzb3VyY2UtPmZhc3RIYXNBdHRyaWJ1dGUobWVkaWFB
dHRyKSkgewotICAgICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3Jl
ZW4iLCBkb2N1bWVudCgpLmZyYW1lKCksIHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUo
KSA6IG51bGxwdHIpOwotICAgICAgICAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0g
c291cmNlLT5tZWRpYVF1ZXJ5U2V0KCk7CisgICAgICAgICAgICBhdXRvIG1lZGlhID0gc291cmNl
LT5tZWRpYVF1ZXJ5U2V0KCk7CiAjaWYgIUxPR19ESVNBQkxFRAogICAgICAgICAgICAgaWYgKHNo
b3VsZExvZykKICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50Ojpz
ZWxlY3ROZXh0U291cmNlQ2hpbGQoJXApIC0gJ21lZGlhJyBpcyAlcyIsIHRoaXMsIHNvdXJjZS0+
bWVkaWEoKS51dGY4KCkuZGF0YSgpKTsKICNlbmRpZgotICAgICAgICAgICAgaWYgKCFzY3JlZW5F
dmFsLmV2YWwobWVkaWEuZ2V0KCkpKSAKKyAgICAgICAgICAgIGlmIChtZWRpYSAmJiAhTWVkaWFR
dWVyeUV2YWx1YXRvciB7ICJzY3JlZW4iLCBkb2N1bWVudCgpLCByZW5kZXJlcigpID8gJnJlbmRl
cmVyKCktPnN0eWxlKCkgOiBudWxscHRyIH0uZXZhbHVhdGUoKm1lZGlhKSkKICAgICAgICAgICAg
ICAgICBnb3RvIGNoZWNrX2FnYWluOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBpY3R1cmVFbGVtZW50LmNwcAppbmRleCBlMmYyNjBjODRlY2E0YjVkYjExNDg1MDg0NTU4
ZWRjMjFkODYxZjk5Li43MDI0NDE4ZjQyNWQ5NDAwN2QwZTY5ZjZiNzQ2YzdiOWExZTgxYmMzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwCkBAIC01NywxNiAr
NTcsMTYgQEAgUmVmPEhUTUxQaWN0dXJlRWxlbWVudD4gSFRNTFBpY3R1cmVFbGVtZW50OjpjcmVh
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwKIAogdm9pZCBIVE1MUGljdHVyZUVsZW1l
bnQ6OnNvdXJjZXNDaGFuZ2VkKCkKIHsKLSAgICBmb3IgKGF1dG8mIGltYWdlRWxlbWVudCA6IGNo
aWxkcmVuT2ZUeXBlPEhUTUxJbWFnZUVsZW1lbnQ+KCp0aGlzKSkKLSAgICAgICAgaW1hZ2VFbGVt
ZW50LnNlbGVjdEltYWdlU291cmNlKCk7CisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogY2hpbGRy
ZW5PZlR5cGU8SFRNTEltYWdlRWxlbWVudD4oKnRoaXMpKQorICAgICAgICBlbGVtZW50LnNlbGVj
dEltYWdlU291cmNlKCk7CiB9CiAKLWJvb2wgSFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENo
YW5nZUFmZmVjdGVkUGljdHVyZSgpCitib29sIEhUTUxQaWN0dXJlRWxlbWVudDo6dmlld3BvcnRD
aGFuZ2VBZmZlY3RlZFBpY3R1cmUoKSBjb25zdAogewotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Ig
ZXZhbHVhdG9yKGRvY3VtZW50KCkucHJpbnRpbmcoKSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9j
dW1lbnQoKS5mcmFtZSgpLCBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpIDogbnVsbHB0cik7Ci0gICAgdW5z
aWduZWQgbnVtUmVzdWx0cyA9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5z
aXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVJlc3VsdHM7IGkrKykgewot
ICAgICAgICBpZiAoZXZhbHVhdG9yLmV2YWwoJm1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5
UmVzdWx0c1tpXS0+bV9leHByZXNzaW9uKSAhPSBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHNbaV0tPm1fcmVzdWx0KQorICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3Vt
ZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0
b3IgeyBkb2N1bWVudCgpLnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50
KCksIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgpIDog
bnVsbHB0ciB9OworICAgIGZvciAoYXV0byYgcmVzdWx0IDogbV92aWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcnlSZXN1bHRzKSB7CisgICAgICAgIGlmIChldmFsdWF0b3IuZXZhbHVhdGUocmVzdWx0
LmV4cHJlc3Npb24pICE9IHJlc3VsdC5yZXN1bHQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGljdHVyZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVF
bGVtZW50LmgKaW5kZXggYWJkNDdjMGE5YjMwNmZhYzQ2N2Q1NjFiNjViNTQ4NzY5ODk2NTRhZi4u
ZmI1MTM2ZjdjN2MzYzQ5ZDEzODM1YTBhNjdhNmE2YzQ1ZTA0ODAxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIEhUTUxQaWN0dXJlRWxlbWVudF9oCi0jZGVmaW5lIEhUTUxQ
aWN0dXJlRWxlbWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkhUTUxFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2YWx1YXRvci5oIgpAQCAtMzQsMjggKzMzLDI1IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxQaWN0dXJlRWxlbWVudCBmaW5hbCA6IHB1Ymxp
YyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxIVE1MUGljdHVyZUVsZW1l
bnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKLSAgICB+SFRNTFBp
Y3R1cmVFbGVtZW50KCk7CisgICAgdmlydHVhbCB+SFRNTFBpY3R1cmVFbGVtZW50KCk7CiAKICAg
ICB2b2lkIHNvdXJjZXNDaGFuZ2VkKCk7CiAKICAgICB2b2lkIGNsZWFyVmlld3BvcnREZXBlbmRl
bnRSZXN1bHRzKCkgeyBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuY2xlYXIo
KTsgfQogICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkgY29uc3QgeyByZXR1
cm4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsgfQotICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+JiB2aWV3cG9ydERlcGVuZGVu
dFJlc3VsdHMoKSB7IHJldHVybiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7
IH0KKyAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdD4mIHZpZXdwb3J0RGVwZW5kZW50UmVzdWx0
cygpIHsgcmV0dXJuIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsgfQogCi0g
ICAgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpOwotICAg
IAotICAgIGJvb2wgdmlld3BvcnRDaGFuZ2VBZmZlY3RlZFBpY3R1cmUoKTsKKyAgICBib29sIHZp
ZXdwb3J0Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCkgY29uc3Q7CiAKICAgICBXZWFrUHRyPEhUTUxQ
aWN0dXJlRWxlbWVudD4gY3JlYXRlV2Vha1B0cigpIHsgcmV0dXJuIG1fd2Vha0ZhY3RvcnkuY3Jl
YXRlV2Vha1B0cigpOyB9CiAKIHByaXZhdGU6CiAgICAgSFRNTFBpY3R1cmVFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYpOwotICAgIAotICAgIFdlYWtQdHJGYWN0b3J5PEhU
TUxQaWN0dXJlRWxlbWVudD4gbV93ZWFrRmFjdG9yeSB7IHRoaXMgfTsKLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFR
dWVyeVJlc3VsdHM7CiAKKyAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBv
bGREb2N1bWVudCkgZmluYWw7CisKKyAgICBXZWFrUHRyRmFjdG9yeTxIVE1MUGljdHVyZUVsZW1l
bnQ+IG1fd2Vha0ZhY3RvcnkgeyB0aGlzIH07CisgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1bHQ+
IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEhUTUxQaWN0dXJlRWxlbWVudF9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAppbmRleCBiYWMy
OGQ0NzQ2MGM4ZDdhMmMyOGZjNzYxMjhlMmVkYWM2ZTM2ZDFiLi5iYTZhMjE1MDE1YTljMzdhMDAy
MzQ1ZjZhNWY1MmU3MzYxY2M5MmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKQEAgLTExOCw3ICsxMTgsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmIChtX3RhZ0lkID09IFRhZ0lkOjpTb3VyY2Ug
JiYgIXBpY3R1cmVTdGF0ZS5pc0VtcHR5KCkgJiYgIXBpY3R1cmVTdGF0ZS5sYXN0KCkgJiYgbV9t
ZWRpYU1hdGNoZWQgJiYgIW1fc3JjU2V0QXR0cmlidXRlLmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUobV9zaXplc0F0dHJpYnV0
ZSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCBkb2N1bWVudC5mcmFtZSgpKTsKKyAgICAgICAgICAg
IGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRvY3VtZW50LCBtX3NpemVz
QXR0cmlidXRlKTsKICAgICAgICAgICAgIEltYWdlQ2FuZGlkYXRlIGltYWdlQ2FuZGlkYXRlID0g
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhtX2RldmljZVNjYWxlRmFjdG9yLCBtX3Vy
bFRvTG9hZCwgbV9zcmNTZXRBdHRyaWJ1dGUsIHNvdXJjZVNpemUpOwogICAgICAgICAgICAgaWYg
KCFpbWFnZUNhbmRpZGF0ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBwaWN0dXJlU3Rh
dGUubGFzdCgpID0gdHJ1ZTsKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgICAgIAog
ICAgICAgICAvLyBSZXNvbHZlIGJldHdlZW4gc3JjIGFuZCBzcmNTZXQgaWYgd2UgaGF2ZSB0aGVt
IGFuZCB0aGUgdGFnIGlzIGltZy4KICAgICAgICAgaWYgKG1fdGFnSWQgPT0gVGFnSWQ6OkltZyAm
JiAhbV9zcmNTZXRBdHRyaWJ1dGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBzb3Vy
Y2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShtX3NpemVzQXR0cmlidXRlLCBkb2N1bWVudC5y
ZW5kZXJWaWV3KCksIGRvY3VtZW50LmZyYW1lKCkpOworICAgICAgICAgICAgZmxvYXQgc291cmNl
U2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoZG9jdW1lbnQsIG1fc2l6ZXNBdHRyaWJ1dGUpOwog
ICAgICAgICAgICAgSW1hZ2VDYW5kaWRhdGUgaW1hZ2VDYW5kaWRhdGUgPSBiZXN0Rml0U291cmNl
Rm9ySW1hZ2VBdHRyaWJ1dGVzKG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fdXJsVG9Mb2FkLCBtX3Ny
Y1NldEF0dHJpYnV0ZSwgc291cmNlU2l6ZSk7CiAgICAgICAgICAgICBzZXRVcmxUb0xvYWQoaW1h
Z2VDYW5kaWRhdGUuc3RyaW5nLnRvU3RyaW5nKCksIHRydWUpOwogICAgICAgICB9CkBAIC0xOTgs
MTAgKzE5OCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobWF0
Y2goYXR0cmlidXRlTmFtZSwgbWVkaWFBdHRyKSAmJiBtX21lZGlhQXR0cmlidXRlLmlzTnVsbCgp
KSB7CiAgICAgICAgICAgICAgICAgbV9tZWRpYUF0dHJpYnV0ZSA9IGF0dHJpYnV0ZVZhbHVlOwot
ICAgICAgICAgICAgICAgIFJlZjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVNldCA9IE1lZGlhUXVlcnlT
ZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOwotICAg
ICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+IHZp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7Ci0gICAgICAgICAgICAgICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQucHJpbnRpbmcoKSA/ICJwcmludCIgOiAi
c2NyZWVuIiwgZG9jdW1lbnQuZnJhbWUoKSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCkgPyBk
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpIDogbnVsbHB0cik7Ci0g
ICAgICAgICAgICAgICAgbV9tZWRpYU1hdGNoZWQgPSBldmFsdWF0b3IuZXZhbENoZWNraW5nVmll
d3BvcnREZXBlbmRlbnRSZXN1bHRzKG1lZGlhU2V0LnB0cigpLCB2aWV3cG9ydERlcGVuZGVudE1l
ZGlhUXVlcnlSZXN1bHRzKTsKKyAgICAgICAgICAgICAgICBhdXRvIG1lZGlhU2V0ID0gTWVkaWFR
dWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7
CisgICAgICAgICAgICAgICAgYXV0byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1l
bnRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgbV9tZWRpYU1hdGNoZWQgPSBNZWRpYVF1ZXJ5
RXZhbHVhdG9yIHsgZG9jdW1lbnQucHJpbnRpbmcoKSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9j
dW1lbnQsIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC0+Y29tcHV0ZWRTdHlsZSgp
IDogbnVsbHB0ciB9LmV2YWx1YXRlKG1lZGlhU2V0LmdldCgpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFRhZ0lkOjpTY3JpcHQ6CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcAppbmRl
eCAyMjZhOWViYjNlMWM0MGRhYzgwZjYyYThhMWVjNjA2ZGMyYzExMjE4Li5hMTVjYjJkOTRhN2Zm
OWRmYTI3MGVmN2JmMTYzZTUxZDJlZjVlNjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKQEAgLTU4LDE4ICs1OCwxNyBA
QCB2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZChQcmVsb2FkUmVxdWVzdFN0cmVh
bSByZXF1ZXN0cykKICAgICAgICAgcHJlbG9hZChXVEZNb3ZlKHJlcXVlc3QpKTsKIH0KIAotc3Rh
dGljIGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKEZyYW1lKiBmcmFtZSwgY29uc3QgUmVuZGVy
U3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQorc3RhdGlj
IGJvb2wgbWVkaWFBdHRyaWJ1dGVNYXRjaGVzKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHJlbmRlclN0eWxlLCBjb25zdCBTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlKQogewot
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0Ojpj
cmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIG1lZGlhUXVlcnlFdmFsdWF0b3IoInNjcmVlbiIsIGZyYW1lLCByZW5k
ZXJTdHlsZSk7Ci0gICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFsdWF0b3IuZXZhbChtZWRpYVF1ZXJp
ZXMuZ2V0KCkpOworICAgIGF1dG8gbWVkaWFRdWVyaWVzID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRl
QWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7CisgICAgcmV0dXJuIE1l
ZGlhUXVlcnlFdmFsdWF0b3IgeyAic2NyZWVuIiwgZG9jdW1lbnQsIHJlbmRlclN0eWxlIH0uZXZh
bHVhdGUobWVkaWFRdWVyaWVzLmdldCgpKTsKIH0KIAogdm9pZCBIVE1MUmVzb3VyY2VQcmVsb2Fk
ZXI6OnByZWxvYWQoc3RkOjp1bmlxdWVfcHRyPFByZWxvYWRSZXF1ZXN0PiBwcmVsb2FkKQogewog
ICAgIEFTU0VSVChtX2RvY3VtZW50LmZyYW1lKCkpOwogICAgIEFTU0VSVChtX2RvY3VtZW50LnJl
bmRlclZpZXcoKSk7Ci0gICAgaWYgKCFwcmVsb2FkLT5tZWRpYSgpLmlzRW1wdHkoKSAmJiAhbWVk
aWFBdHRyaWJ1dGVNYXRjaGVzKG1fZG9jdW1lbnQuZnJhbWUoKSwgJm1fZG9jdW1lbnQucmVuZGVy
VmlldygpLT5zdHlsZSgpLCBwcmVsb2FkLT5tZWRpYSgpKSkKKyAgICBpZiAoIXByZWxvYWQtPm1l
ZGlhKCkuaXNFbXB0eSgpICYmICFtZWRpYUF0dHJpYnV0ZU1hdGNoZXMobV9kb2N1bWVudCwgJm1f
ZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpLCBwcmVsb2FkLT5tZWRpYSgpKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QgPSBwcmVsb2Fk
LT5yZXNvdXJjZVJlcXVlc3QobV9kb2N1bWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVdpbmRvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAK
aW5kZXggZmVmZGI1ODBhZmM1YTFjNjRhYjcxZGM3NTc4OWQyOTE5OWJiNjA5Mi4uZmIzMDRiNGQ1
MzgzMWM1M2QxNjEwODcwODA1ZmNhMjk3ZTFmNDk3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9ET01XaW5kb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93
LmNwcApAQCAtNzksNyArNzksNiBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUg
IlBhZ2VUcmFuc2l0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgotI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VMb2FkSW5mby5oIgogI2lu
Y2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTY2hlZHVsZWRBY3Rp
b24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1h
Yy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQppbmRleCA3
MDAyM2IxY2I4NTk1YTJiNGUwZDM1NjVlYzJjNmFiY2NjZDI3NWIzLi5jNDg4NDU3ZTI4YmU1NGI5
M2Y5M2ZjMDc3ZDNlYjM4NTc0NDI1NjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L21hYy9FdmVudEhhbmRsZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZl
bnRIYW5kbGVyTWFjLm1tCkBAIC0xMTc1LDEwICsxMTc1LDggQEAgSW50UG9pbnQgRXZlbnRIYW5k
bGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9uQXV0b3Njcm9sbCgpIGNvbnN0
CiAgICAgaWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gbV9sYXN0S25vd25Nb3VzZVBvc2l0aW9u
OwogCi0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvckRpc3BsYXlJRChwYWdlLT5jaHJv
bWUoKS5kaXNwbGF5SUQoKSk7Ci0gICAgSW50U2l6ZSBhdXRvc2Nyb2xsQWRqdXN0bWVudEZhY3Rv
ciA9IGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yRm9yU2NyZWVuQm91bmRhcmllcyhtX2xhc3RL
bm93bk1vdXNlR2xvYmFsUG9zaXRpb24sIHRvVXNlclNwYWNlKHNjcmVlbi5mcmFtZSwgbmlsKSk7
Ci0KLSAgICByZXR1cm4gbV9sYXN0S25vd25Nb3VzZVBvc2l0aW9uICsgYXV0b3Njcm9sbEFkanVz
dG1lbnRGYWN0b3I7CisgICAgYXV0byBmcmFtZSA9IHRvVXNlclNwYWNlKHNjcmVlbihwYWdlLT5j
aHJvbWUoKS5kaXNwbGF5SUQoKSkuZnJhbWUsIG5pbCk7CisgICAgcmV0dXJuIG1fbGFzdEtub3du
TW91c2VQb3NpdGlvbiArIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yRm9yU2NyZWVuQm91bmRh
cmllcyhtX2xhc3RLbm93bk1vdXNlR2xvYmFsUG9zaXRpb24sIGZyYW1lKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKaW5kZXggMGQ4MDczNmE1YmIyZTBk
MzEzODJhMmI5NDVjNmU4NmQzMjZkM2M4NS4uZTI4ZmYxOTk1MGRkYTU0ZTA5MDZkOTgwYWJjNDUy
YWIzNzIyNjFkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1T
Y3JlZW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCkBA
IC0yMywxMCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFBsYXRmb3Jt
U2NyZWVuX2gKLSNkZWZpbmUgUGxhdGZvcm1TY3JlZW5faAotCi0jaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI3ByYWdtYSBvbmNlCiAKICNpZiBQTEFURk9STShNQUMpCiBPQkpDX0NMQVNTIE5TU2Ny
ZWVuOwpAQCAtNDQsNDQgKzQxLDQ0IEBAIHR5cGVkZWYgc3RydWN0IF9OU1BvaW50IE5TUG9pbnQ7
CiBPQkpDX0NMQVNTIFVJU2NyZWVuOwogI2VuZGlmCiAKLXR5cGVkZWYgdWludDMyX3QgUGxhdGZv
cm1EaXNwbGF5SUQ7Ci0KLXR5cGVkZWYgV1RGOjpWZWN0b3I8Y2hhcj4gQ29sb3JQcm9maWxlOwot
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBGbG9hdFJlY3Q7Ci0gICAgY2xhc3Mg
RmxvYXRTaXplOwotICAgIGNsYXNzIFdpZGdldDsKK2NsYXNzIEZsb2F0UmVjdDsKK2NsYXNzIEZs
b2F0U2l6ZTsKK2NsYXNzIFdpZGdldDsKIAotICAgIGludCBzY3JlZW5EZXB0aChXaWRnZXQqKTsK
LSAgICBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0Kik7Ci0gICAgYm9vbCBzY3Jl
ZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kik7Cit1c2luZyBQbGF0Zm9ybURpc3BsYXlJRCA9IHVpbnQz
Ml90OwogCi0gICAgYm9vbCBzY3JlZW5IYXNJbnZlcnRlZENvbG9ycygpOworaW50IHNjcmVlbkRl
cHRoKFdpZGdldCopOworaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopOworYm9v
bCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kik7CiAKLSAgICBGbG9hdFJlY3Qgc2NyZWVuUmVj
dChXaWRnZXQqKTsKLSAgICBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsK
K2Jvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIGJv
b2wgc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKFdpZGdldCogd2lkZ2V0ID0gbnVsbHB0cik7
CitGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKTsKK0Zsb2F0UmVjdCBzY3JlZW5BdmFpbGFi
bGVSZWN0KFdpZGdldCopOworCitXRUJDT1JFX0VYUE9SVCBib29sIHNjcmVlblN1cHBvcnRzRXh0
ZW5kZWRDb2xvcihXaWRnZXQqID0gbnVsbHB0cik7CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAg
TlNTY3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAqKTsKLSAgICBOU1NjcmVlbiAqc2Ny
ZWVuRm9yRGlzcGxheUlEKFBsYXRmb3JtRGlzcGxheUlEKTsKIAotICAgIFdFQkNPUkVfRVhQT1JU
IEZsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25zdCBOU1JlY3QmLCBOU1dpbmRvdyAqZGVzdGluYXRp
b24pOwotICAgIFdFQkNPUkVfRVhQT1JUIE5TUmVjdCB0b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0
UmVjdCYsIE5TV2luZG93ICpzb3VyY2UpOworTlNTY3JlZW4gKnNjcmVlbihOU1dpbmRvdyAqKTsK
K05TU2NyZWVuICpzY3JlZW4oUGxhdGZvcm1EaXNwbGF5SUQpOworCitXRUJDT1JFX0VYUE9SVCBG
bG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9u
KTsKK1dFQkNPUkVfRVhQT1JUIE5TUmVjdCB0b0RldmljZVNwYWNlKGNvbnN0IEZsb2F0UmVjdCYs
IE5TV2luZG93ICpzb3VyY2UpOworCitOU1BvaW50IGZsaXBTY3JlZW5Qb2ludChjb25zdCBOU1Bv
aW50JiwgTlNTY3JlZW4gKik7CiAKLSAgICBOU1BvaW50IGZsaXBTY3JlZW5Qb2ludChjb25zdCBO
U1BvaW50JiwgTlNTY3JlZW4gKik7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBm
bG9hdCBzY3JlZW5QUElGYWN0b3IoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2Ny
ZWVuU2l6ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBhdmFpbGFibGVTY3JlZW5T
aXplKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgc2NyZWVuU2NhbGVGYWN0b3IoVUlTY3Jl
ZW4gKiA9IG51bGxwdHIpOworCitmbG9hdCBzY3JlZW5QUElGYWN0b3IoKTsKK1dFQkNPUkVfRVhQ
T1JUIEZsb2F0U2l6ZSBzY3JlZW5TaXplKCk7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgYXZh
aWxhYmxlU2NyZWVuU2l6ZSgpOworV0VCQ09SRV9FWFBPUlQgZmxvYXQgc2NyZWVuU2NhbGVGYWN0
b3IoVUlTY3JlZW4gKiA9IG51bGxwdHIpOworCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYgLy8gUGxhdGZvcm1TY3JlZW5faApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5jcHAKaW5kZXggYzEwMWJlZjg5YmM2YjYwODA5ZjVkZDE0M2U0NWVhMzU2MjQxOTAxNS4u
YjUxZDY4YWM2MTg3NGFlMjI0NDMwMTQ4NGUxMDFmNzgxMDQ3YWMwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVz
aE1vbml0b3JDbGllbnQuY3BwCkBAIC0zNCw4ICszNCw2IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudDo6RGlzcGxheVJlZnJlc2hNb25pdG9yQ2xp
ZW50KCkKLSAgICA6IG1fc2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9kaXNwbGF5SURJc1NldChm
YWxzZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAppbmRleCAzMGRhZmYzYTY0
NjhkN2MzY2I5YmY4Zjc4YjUwMDA4NDg2NmM3NmQ1Li4yOTkzZDFkMDIwOTkzNTZmMTUzYTEwODAw
M2EwMTQ2NTFiMjhmMTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaApAQCAtMjMsMTgg
KzIzLDE3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaWZuZGVmIERpc3BsYXlSZWZyZXNo
TW9uaXRvckNsaWVudF9oCi0jZGVmaW5lIERpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudF9oCisj
cHJhZ21hIG9uY2UKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCiAKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRGlzcGxheVJlZnJlc2hNb25pdG9yOwotY2xhc3MgRGlzcGxheVJlZnJlc2hNb25p
dG9yTWFuYWdlcjsKIAogY2xhc3MgRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50IHsKIHB1Ymxp
YzoKQEAgLTQ2LDEzICs0NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgUmVmUHRyPERpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFBsYXRmb3JtRGlz
cGxheUlEKSBjb25zdCA9IDA7CiAKLSAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoKSBj
b25zdCB7IHJldHVybiBtX2Rpc3BsYXlJRDsgfQotICAgIGJvb2wgaGFzRGlzcGxheUlEKCkgY29u
c3QgeyByZXR1cm4gbV9kaXNwbGF5SURJc1NldDsgfQotICAgIHZvaWQgc2V0RGlzcGxheUlEKFBs
YXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKLSAgICB7Ci0gICAgICAgIG1fZGlzcGxheUlEID0g
ZGlzcGxheUlEOwotICAgICAgICBtX2Rpc3BsYXlJRElzU2V0ID0gdHJ1ZTsKLSAgICB9CisgICAg
UGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQu
dmFsdWUoKTsgfQorICAgIGJvb2wgaGFzRGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gISFtX2Rp
c3BsYXlJRDsgfQorICAgIHZvaWQgc2V0RGlzcGxheUlEKFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRCkgeyBtX2Rpc3BsYXlJRCA9IGRpc3BsYXlJRDsgfQogCiAgICAgdm9pZCBzZXRJc1NjaGVk
dWxlZChib29sIGlzU2NoZWR1bGVkKSB7IG1fc2NoZWR1bGVkID0gaXNTY2hlZHVsZWQ7IH0KICAg
ICBib29sIGlzU2NoZWR1bGVkKCkgY29uc3QgeyByZXR1cm4gbV9zY2hlZHVsZWQ7IH0KQEAgLTYw
LDEzICs1NSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBmaXJlRGlzcGxheVJlZnJlc2hJZk5lZWRl
ZChkb3VibGUgdGltZXN0YW1wKTsKIAogcHJpdmF0ZToKLSAgICBib29sIG1fc2NoZWR1bGVkOwot
ICAgIGJvb2wgbV9kaXNwbGF5SURJc1NldDsKLSAgICBQbGF0Zm9ybURpc3BsYXlJRCBtX2Rpc3Bs
YXlJRDsKKyAgICBib29sIG1fc2NoZWR1bGVkIHsgZmFsc2UgfTsKKyAgICBPcHRpb25hbDxQbGF0
Zm9ybURpc3BsYXlJRD4gbV9kaXNwbGF5SUQ7CiB9OwogCiB9CiAKICNlbmRpZiAvLyBVU0UoUkVR
VUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRl
ci5oCmluZGV4IDgxNTIwM2Y5NWRhNWFhNGViYjcyZmM5YmNkMzgyZmJkMDNkYjUzZjIuLmI2ZmNi
YTQzYTFkYjM2OWE1NzgxMGQ2NjIwMjNlMmQzYzAwM2FiYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuaApAQCAt
MjMsMTEgKzIzLDkgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIEdyYXBoaWNzTGF5ZXJVcGRhdGVyX2gKLSNkZWZpbmUgR3JhcGhpY3NMYXllclVw
ZGF0ZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJEaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTY4LDUgKzY2LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKLQotI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJVcGRhdGVyX2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXgg
NWFiYjBhY2NlMzhiOTBmZDhkY2I0MTVjNWQ4ZDU3MjBmODEzOWNhZi4uZDE2ZjQ4NDM1MjZhYmM5
YzdkN2ZhNGU5YmFjYWZhNmE4MWVmYzk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI2LDggKzI2LDcgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbWFnZURlY29kZXJfaAotI2RlZmluZSBJ
bWFnZURlY29kZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VTb3VyY2UuaCIKQEAgLTQxLDYgKzQwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCit1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CisKICAgICAvLyBJbWFn
ZUZyYW1lIHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YS4gIFRoaXMgYnVmZmVyIGlz
IHdoYXQgYWxsCiAgICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50by4KICAg
ICBjbGFzcyBJbWFnZUZyYW1lIHsKQEAgLTQxMSw1ICs0MTIsMyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgK
aW5kZXggOGEwZTliYzBlZWYxOTU1NDg2NDdjZGJkODEyM2QzZjgwMWQ0MWJjNy4uMjQ2MDQxNzcw
MzU3YjczN2M5NTI1MjgwNWY0YjhkZmY0ZDg5NTUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgKQEAgLTIzLDggKzIz
LDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjX2gKLSNkZWZpbmUgUGxhdGZvcm1FdmVudEZhY3RvcnlN
YWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTQwLDE2ICszOSwxNSBAQCBwdWJs
aWM6CiB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18pCi0vLyBG
SVhNRTogVGhpcyBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZS4KLVdFQkNPUkVfRVhQT1JUIElu
dFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRvdyAq
KTsKIAotLy8gRklYTUU6IFdlYktpdDIgaGFzIGEgbG90IG9mIGNvZGUgY29weS9wYXN0ZWQgZnJv
bSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYyBpbiBXZWJFdmVudEZhY3RvcnkuIEl0IHNob3VsZCBi
ZSBjYXJlZnVsbHkgc2hhcmVkIHdpdGggV2ViQ29yZS4KLVdFQkNPUkVfRVhQT1JUIGludCB3aW5k
b3dzS2V5Q29kZUZvcktleUV2ZW50KE5TRXZlbnQqKTsKLVdFQkNPUkVfRVhQT1JUIFN0cmluZyBr
ZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoTlNFdmVudCopOwotV0VCQ09SRV9FWFBPUlQgZG91Ymxl
IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKE5TRXZlbnQqKTsKKy8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBpbiB0aGlzIGhlYWRlci4KK1dFQkNPUkVfRVhQT1JU
IE5TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93
ICopOworCisvLyBGSVhNRTogV2ViS2l0MiBoYXMgYSBsb3Qgb2YgY29kZSBjb3BpZWQgYW5kIHBh
c3RlZCBmcm9tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjIGluIFdlYkV2ZW50RmFjdG9yeS4gTW9y
ZSBvZiBpdCBzaG91bGQgYmUgc2hhcmVkIHdpdGggV2ViQ29yZS4KK1dFQkNPUkVfRVhQT1JUIGlu
dCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KE5TRXZlbnQgKik7CitXRUJDT1JFX0VYUE9SVCBT
dHJpbmcga2V5SWRlbnRpZmllckZvcktleUV2ZW50KE5TRXZlbnQgKik7CitXRUJDT1JFX0VYUE9S
VCBkb3VibGUgZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoTlNFdmVudCAqKTsKIAogI2VuZGlmCiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2
ZW50RmFjdG9yeU1hYy5tbQppbmRleCBlMjIyNGUwYmJkYTRiNzk0ZjE0ZDA5YjBlZDUzNTU1OTA0
MTVhMTlmLi5hNzQ3NDczY2QxNTA3MjVjM2JiMjNkMjJkNjVkY2I3MTZlZDM4YzYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLm1tCkBAIC0zOCwxNSArMzgsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnRQ
b2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5kb3cgKndp
bmRvdykKK05TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5T
V2luZG93ICp3aW5kb3cpCiB7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0g
ICAgcmV0dXJuIEludFBvaW50KGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRCYXNlVG9T
Y3JlZW46d2luZG93UG9pbnRdLCBzY3JlZW5Gb3JXaW5kb3cod2luZG93KSkpOworICAgIHJldHVy
biBmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50
XSwgc2NyZWVuKHdpbmRvdykpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogfQogCi1z
dGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKK3N0YXRp
YyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAgICAgc3dp
dGNoIChbZXZlbnQgdHlwZV0pIHsKICNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01BQ19PU19Y
X1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCkBAIC03MCw3ICs3MCw3IEBAIHN0YXRpYyBJ
bnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHBvcAogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFBvaW50KFtldmVudCBs
b2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOwogICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisgICAgICAgICAgICByZXR1cm4geyAwLCAwIH07
CiAgICAgfQogfQogCkBAIC00ODUsNyArNDg1LDcgQEAgcHVibGljOgogCiAgICAgICAgIC8vIFBs
YXRmb3JtTW91c2VFdmVudAogICAgICAgICBtX3Bvc2l0aW9uID0gcG9pbnRGb3JFdmVudChldmVu
dCwgd2luZG93Vmlldyk7Ci0gICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQb2ludEZv
ckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KGdsb2Jh
bFBvaW50Rm9yRXZlbnQoZXZlbnQpKTsKICAgICAgICAgbV9idXR0b24gPSBtb3VzZUJ1dHRvbkZv
ckV2ZW50KGV2ZW50KTsKICAgICAgICAgbV9jbGlja0NvdW50ID0gY2xpY2tDb3VudEZvckV2ZW50
KGV2ZW50KTsKIApAQCAtNTE0LDE0ICs1MTQsMTQgQEAgcHVibGljOgogICAgIFBsYXRmb3JtV2hl
ZWxFdmVudEJ1aWxkZXIoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykKICAgICB7
CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAgbV90eXBlICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBQbGF0Zm9ybUV2ZW50OjpXaGVlbDsKLSAgICAgICAgbV9tb2RpZmll
cnMgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7Ci0g
ICAgICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRUaW1lU3Rh
bXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50OjpXaGVl
bDsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7CisgICAg
ICAgIG1fdGltZXN0YW1wID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOwogCiAgICAg
ICAgIC8vIFBsYXRmb3JtV2hlZWxFdmVudAotICAgICAgICBtX3Bvc2l0aW9uICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOwotICAgICAg
ICBtX2dsb2JhbFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICA9IGdsb2JhbFBvaW50Rm9yRXZl
bnQoZXZlbnQpOwotICAgICAgICBtX2dyYW51bGFyaXR5ICAgICAgICAgICAgICAgICAgICAgICA9
IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworICAgICAgICBtX3Bvc2l0aW9uID0gcG9pbnRGb3JF
dmVudChldmVudCwgd2luZG93Vmlldyk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBJbnRQ
b2ludChnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KSk7CisgICAgICAgIG1fZ3JhbnVsYXJpdHkg
PSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKIAogICAgICAgICBCT09MIGNvbnRpbnVvdXM7CiAg
ICAgICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVudCwgJm1fZGVsdGFYLCAmbV9kZWx0YVks
ICZjb250aW51b3VzKTsKQEAgLTUzNSwxMCArNTM1LDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1BlckxpbmVT
dGVwKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9waGFzZSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPSBwaGFzZUZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb21lbnR1bVBoYXNl
ICAgICAgICAgICAgICAgICAgICAgPSBtb21lbnR1bVBoYXNlRm9yRXZlbnQoZXZlbnQpOwotICAg
ICAgICBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgICAgICAgICA9IGNvbnRpbnVvdXM7Ci0g
ICAgICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlICAgICAgID0gW2V2ZW50IGlzRGly
ZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlXTsKKyAgICAgICAgbV9waGFzZSA9IHBoYXNlRm9yRXZl
bnQoZXZlbnQpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSBtb21lbnR1bVBoYXNlRm9yRXZl
bnQoZXZlbnQpOworICAgICAgICBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBjb250aW51
b3VzOworICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9IFtldmVudCBpc0Rp
cmVjdGlvbkludmVydGVkRnJvbURldmljZV07CiAgICAgfQogfTsKIApAQCAtNTUzLDIzICs1NTMs
MjMgQEAgcHVibGljOgogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoTlNFdmVudCAq
ZXZlbnQpCiAgICAgewogICAgICAgICAvLyBQbGF0Zm9ybUV2ZW50Ci0gICAgICAgIG1fdHlwZSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaXNLZXlVcEV2ZW50KGV2ZW50KSA/IFBsYXRm
b3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKLSAgICAgICAgbV9tb2Rp
ZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRUaW1l
U3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAgICBtX3R5cGUgPSBpc0tleVVwRXZlbnQoZXZl
bnQpID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOworICAg
ICAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV90
aW1lc3RhbXAgPSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CiAKICAgICAgICAgLy8g
UGxhdGZvcm1LZXlib2FyZEV2ZW50Ci0gICAgICAgIG1fdGV4dCAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gdGV4dEZyb21FdmVudChldmVudCk7Ci0gICAgICAgIG1fdW5tb2RpZmllZFRl
eHQgICAgICAgICAgICAgICAgICAgID0gdW5tb2RpZmllZFRleHRGcm9tRXZlbnQoZXZlbnQpOwot
ICAgICAgICBtX2tleUlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICA9IGtleUlkZW50aWZp
ZXJGb3JLZXlFdmVudChldmVudCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlICAg
ICAgICAgICAgID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudCk7Ci0gICAgICAgIG1f
bmF0aXZlVmlydHVhbEtleUNvZGUgICAgICAgICAgICAgID0gW2V2ZW50IGtleUNvZGVdOwotICAg
ICAgICBtX21hY0NoYXJDb2RlICAgICAgICAgICAgICAgICAgICAgICA9IHdrR2V0TlNFdmVudEtl
eUNoYXIoZXZlbnQpOworICAgICAgICBtX3RleHQgPSB0ZXh0RnJvbUV2ZW50KGV2ZW50KTsKKyAg
ICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KGV2ZW50KTsK
KyAgICAgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvcktleUV2ZW50KGV2ZW50
KTsKKyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktl
eUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSA9IFtldmVudCBr
ZXlDb2RlXTsKKyAgICAgICAgbV9tYWNDaGFyQ29kZSA9IHdrR2V0TlNFdmVudEtleUNoYXIoZXZl
bnQpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25v
c3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgICAgICBtX2F1dG9S
ZXBlYXQgICAgICAgICAgICAgICAgICAgICAgICA9IChbZXZlbnQgdHlwZV0gIT0gTlNGbGFnc0No
YW5nZWQpICYmIFtldmVudCBpc0FSZXBlYXRdOworICAgICAgICBtX2F1dG9SZXBlYXQgPSBbZXZl
bnQgdHlwZV0gIT0gTlNGbGFnc0NoYW5nZWQgJiYgW2V2ZW50IGlzQVJlcGVhdF07CiAjcHJhZ21h
IGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIG1faXNLZXlwYWQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gaXNLZXlwYWRFdmVudChldmVudCk7Ci0gICAgICAgIG1faXNTeXN0ZW1LZXkg
ICAgICAgICAgICAgICAgICAgICAgID0gZmFsc2U7IC8vIFN5c3RlbUtleSBpcyBhbHdheXMgZmFs
c2Ugb24gdGhlIE1hYy4KKyAgICAgICAgbV9pc0tleXBhZCA9IGlzS2V5cGFkRXZlbnQoZXZlbnQp
OworICAgICAgICBtX2lzU3lzdGVtS2V5ID0gZmFsc2U7IC8vIFN5c3RlbUtleSBpcyBhbHdheXMg
ZmFsc2Ugb24gdGhlIE1hYy4KIAogICAgICAgICAvLyBBbHdheXMgdXNlIDEzIGZvciBFbnRlci9S
ZXR1cm4gLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNoYXJhY3Rl
ciBmb3IgRW50ZXIuCiAgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9PSBWS19S
RVRVUk4pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9y
bVNjcmVlbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVl
bk1hYy5tbQppbmRleCBmZTExZWRlMTI1M2Y1NDQzMmJkZGQyMjUwZjI1ZDNlYzhhNTAxOTQ5Li44
NjlkNjVlMmFkMjRmZDc0YTEzYmRmYTc2MzA0OGMyMzVmYWM2YTlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCkBAIC0zMCw3ICszMCw2
IEBACiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgogI2ltcG9y
dCAiSG9zdFdpbmRvdy5oIgotCiAjaW1wb3J0IDxDb2xvclN5bmMvQ29sb3JTeW5jLmg+CiAKIGV4
dGVybiAiQyIgewpAQCAtNDAsMTAyICszOSw5OSBAQCBib29sIENHRGlzcGxheVVzZXNGb3JjZVRv
R3JheSh2b2lkKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlERnJvbVNjcmVlbihOU1NjcmVlbiAqc2NyZWVuKQotewotICAgIHJldHVy
biAoUGxhdGZvcm1EaXNwbGF5SUQpW1tbc2NyZWVuIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RG
b3JLZXk6QCJOU1NjcmVlbk51bWJlciJdIGludFZhbHVlXTsKLX0KLQogLy8gVGhlc2UgZnVuY3Rp
b25zIHNjYWxlIGJldHdlZW4gc2NyZWVuIGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJlY2F1c2UgSmF2
YVNjcmlwdC9ET00gb3BlcmF0aW9ucwogLy8gYXNzdW1lIHRoYXQgdGhlIHNjcmVlbiBhbmQgdGhl
IHBhZ2Ugc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAKLXN0YXRpYyBQbGF0Zm9y
bURpc3BsYXlJRCBkaXNwbGF5RnJvbVdpZGdldChXaWRnZXQqIHdpZGdldCkKK3N0YXRpYyBQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoTlNTY3JlZW4gKnNjcmVlbikKK3sKKyAgICByZXR1cm4g
W1tbc2NyZWVuIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6QCJOU1NjcmVlbk51bWJl
ciJdIGludFZhbHVlXTsKK30KKworc3RhdGljIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRChX
aWRnZXQqIHdpZGdldCkKIHsKICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3aWRnZXQtPnJvb3QoKTsKKyAgICBhdXRvKiB2aWV3ID0g
d2lkZ2V0LT5yb290KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiB2aWV3LT5ob3N0V2luZG93KCktPmRpc3BsYXlJRCgpOworICAgIGF1dG8qIGhvc3RX
aW5kb3cgPSB2aWV3LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBob3N0V2luZG93LT5kaXNwbGF5SUQoKTsKIH0KIAot
c3RhdGljIE5TU2NyZWVuICpzY3JlZW5Gb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQsIE5TV2luZG93
ICp3aW5kb3cpCisvLyBTY3JlZW4gY29udGFpbmluZyB0aGUgbWVudWJhci4KK3N0YXRpYyBOU1Nj
cmVlbiAqZmlyc3RTY3JlZW4oKQogewotICAgIC8vIFdpZGdldCBpcyBpbiBhbiBOU1dpbmRvdywg
dXNlIGl0cyBzY3JlZW4uCi0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgcmV0dXJuIHNjcmVlbkZv
cldpbmRvdyh3aW5kb3cpOworICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVu
c107CisgICAgaWYgKCFbc2NyZWVucyBjb3VudF0pCisgICAgICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIFtzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF07Cit9CiAKLSAgICAvLyBEaWRuJ3QgZ2V0
IGFuIE5TV2luZG93OyBwcm9iYWJseSBXZWJLaXQyLiBUcnkgdXNpbmcgdGhlIFdpZGdldCdzIGRp
c3BsYXkgSUQuCi0gICAgaWYgKE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JEaXNwbGF5SUQo
ZGlzcGxheUZyb21XaWRnZXQod2lkZ2V0KSkpCi0gICAgICAgIHJldHVybiBzY3JlZW47CitzdGF0
aWMgTlNXaW5kb3cgKndpbmRvdyhXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCkK
KyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgp
LndpbmRvdzsKK30KIAotICAgIC8vIFdpZGdldCdzIHdpbmRvdyBpcyBvZmZzY3JlZW4sIG9yIG5v
IHNjcmVlbnMuIEZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc2NyZWVuIGlmIGF2YWlsYWJsZS4KLSAg
ICByZXR1cm4gc2NyZWVuRm9yV2luZG93KG5pbCk7CitzdGF0aWMgTlNTY3JlZW4gKnNjcmVlbihX
aWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBJZiB0aGUgd2lkZ2V0IGlzIGluIGEgd2luZG93LCB1
c2UgdGhhdCwgb3RoZXJ3aXNlIHVzZSB0aGUgZGlzcGxheSBJRCBmcm9tIHRoZSBob3N0IHdpbmRv
dy4KKyAgICAvLyBGaXJzdCBjYXNlIGlzIGZvciB3aGVuIHRoZSBOU1dpbmRvdyBpcyBpbiB0aGUg
c2FtZSBwcm9jZXNzLCBzZWNvbmQgY2FzZSBmb3Igd2hlbiBpdCdzIG5vdC4KKyAgICBpZiAoYXV0
byBzY3JlZW5Gcm9tV2luZG93ID0gd2luZG93KHdpZGdldCkuc2NyZWVuKQorICAgICAgICByZXR1
cm4gc2NyZWVuRnJvbVdpbmRvdzsKKyAgICByZXR1cm4gc2NyZWVuKGRpc3BsYXlJRCh3aWRnZXQp
KTsKIH0KIAogaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQogewotICAgIE5TV2luZG93
ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRvd10gOiBu
aWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldpZGdldCh3aWRnZXQsIHdpbmRv
dyk7Ci0gICAgcmV0dXJuIE5TQml0c1BlclBpeGVsRnJvbURlcHRoKHNjcmVlbi5kZXB0aCk7Cisg
ICAgcmV0dXJuIE5TQml0c1BlclBpeGVsRnJvbURlcHRoKHNjcmVlbih3aWRnZXQpLmRlcHRoKTsK
IH0KIAogaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQogewotICAg
IE5TV2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdp
bmRvd10gOiBuaWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldpZGdldCh3aWRn
ZXQsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIE5TQml0c1BlclNhbXBsZUZyb21EZXB0aChzY3JlZW4u
ZGVwdGgpOworICAgIHJldHVybiBOU0JpdHNQZXJTYW1wbGVGcm9tRGVwdGgoc2NyZWVuKHdpZGdl
dCkuZGVwdGgpOwogfQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKQogewotICAg
IC8vIEF0IHRoZSBtb21lbnQgdGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0
dGluZywKLSAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBzY3JlZW4gd2UncmUg
dXNpbmcuCisgICAgLy8gVGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0dGlu
Zywgc2FtZSBvbiBhbGwgc2NyZWVucy4KICAgICByZXR1cm4gQ0dEaXNwbGF5VXNlc0ZvcmNlVG9H
cmF5KCk7CiB9CiAKIGJvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKQogewotICAgIC8vIEF0
IHRoZSBtb21lbnQgdGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0dGluZywK
LSAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBzY3JlZW4gd2UncmUgdXNpbmcu
CisgICAgLy8gVGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0dGluZywgc2Ft
ZSBvbiBhbGwgc2NyZWVucy4KICAgICByZXR1cm4gQ0dEaXNwbGF5VXNlc0ludmVydGVkUG9sYXJp
dHkoKTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAg
TlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2lu
ZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lkZ2V0KHdpZGdl
dCwgd2luZG93KTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbiBmcmFtZV0sIHdpbmRv
dyk7CisgICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW4od2lkZ2V0KSBmcmFtZV0sIHdpbmRv
dyh3aWRnZXQpKTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3
aWRnZXQpCiB7Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRm
b3JtV2lkZ2V0KCkgd2luZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVu
Rm9yV2lkZ2V0KHdpZGdldCwgd2luZG93KTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVl
biB2aXNpYmxlRnJhbWVdLCB3aW5kb3cpOworICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVu
KHdpZGdldCkgdmlzaWJsZUZyYW1lXSwgd2luZG93KHdpZGdldCkpOwogfQogCi1OU1NjcmVlbiAq
c2NyZWVuRm9yV2luZG93KE5TV2luZG93ICp3aW5kb3cpCitOU1NjcmVlbiAqc2NyZWVuKE5TV2lu
ZG93ICp3aW5kb3cpCiB7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IFt3aW5kb3cgc2NyZWVuXTsg
Ly8gbmlsIGlmIHRoZSB3aW5kb3cgaXMgb2ZmLXNjcmVlbgotICAgIGlmIChzY3JlZW4pCi0gICAg
ICAgIHJldHVybiBzY3JlZW47Ci0KLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVuIHNj
cmVlbnNdOwotICAgIGlmIChbc2NyZWVucyBjb3VudF0gPiAwKQotICAgICAgICByZXR1cm4gW3Nj
cmVlbnMgb2JqZWN0QXRJbmRleDowXTsgLy8gc2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1lbnViYXIK
LQotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFt3aW5kb3cgc2NyZWVuXSA/IDogZmlyc3RT
Y3JlZW4oKTsKIH0KIAotTlNTY3JlZW4gKnNjcmVlbkZvckRpc3BsYXlJRChQbGF0Zm9ybURpc3Bs
YXlJRCBkaXNwbGF5SUQpCitOU1NjcmVlbiAqc2NyZWVuKFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRCkKIHsKICAgICBmb3IgKE5TU2NyZWVuICpzY3JlZW4gaW4gW05TU2NyZWVuIHNjcmVlbnNd
KSB7Ci0gICAgICAgIGlmIChkaXNwbGF5SURGcm9tU2NyZWVuKHNjcmVlbikgPT0gZGlzcGxheUlE
KQorICAgICAgICBpZiAoV2ViQ29yZTo6ZGlzcGxheUlEKHNjcmVlbikgPT0gZGlzcGxheUlEKQog
ICAgICAgICAgICAgcmV0dXJuIHNjcmVlbjsKICAgICB9Ci0gICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gZmlyc3RTY3JlZW4oKTsKIH0KIAogYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29s
b3IoV2lkZ2V0KiB3aWRnZXQpCkBAIC0xNDcsMTkgKzE0MywxNCBAQCBib29sIHNjcmVlblN1cHBv
cnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCkKICAgICBpZiAoIXdpZGdldCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFt3aWRnZXQtPnBsYXRm
b3JtV2lkZ2V0KCkgd2luZG93XTsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lk
Z2V0KHdpZGdldCwgd2luZG93KTsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFjZSA9IHNj
cmVlbi5jb2xvclNwYWNlLkNHQ29sb3JTcGFjZTsKKyAgICBhdXRvIGNvbG9yU3BhY2UgPSBzY3Jl
ZW4od2lkZ2V0KS5jb2xvclNwYWNlLkNHQ29sb3JTcGFjZTsKIAogI2lmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCiAgICAgcmV0dXJuIENHQ29sb3JTcGFjZUlzV2lk
ZUdhbXV0UkdCKGNvbG9yU3BhY2UpOwogI2Vsc2UKLSAgICBib29sIGlzV2lkZUdhbXV0ID0gZmFs
c2U7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaWNjRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNw
YWNlQ29weUlDQ1Byb2ZpbGUoY29sb3JTcGFjZSkpOwotICAgIFJldGFpblB0cjxDb2xvclN5bmNQ
cm9maWxlUmVmPiBwcm9maWxlID0gYWRvcHRDRihDb2xvclN5bmNQcm9maWxlQ3JlYXRlKGljY0Rh
dGEuZ2V0KCksIE5VTEwpKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgaXNXaWRlR2FtdXQg
PSBDb2xvclN5bmNQcm9maWxlSXNXaWRlR2FtdXQocHJvZmlsZS5nZXQoKSk7Ci0gICAgcmV0dXJu
IGlzV2lkZUdhbXV0OworICAgIGF1dG8gaWNjRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNwYWNlQ29w
eUlDQ1Byb2ZpbGUoY29sb3JTcGFjZSkpOworICAgIGF1dG8gcHJvZmlsZSA9IGFkb3B0Q0YoQ29s
b3JTeW5jUHJvZmlsZUNyZWF0ZShpY2NEYXRhLmdldCgpLCBudWxscHRyKSk7CisgICAgcmV0dXJu
IHByb2ZpbGUgJiYgQ29sb3JTeW5jUHJvZmlsZUlzV2lkZUdhbXV0KHByb2ZpbGUuZ2V0KCkpOwog
I2VuZGlmCiAjZW5kaWYKIH0KQEAgLTE2NywxNCArMTU4LDE0IEBAIGJvb2wgc2NyZWVuU3VwcG9y
dHNFeHRlbmRlZENvbG9yKFdpZGdldCogd2lkZ2V0KQogRmxvYXRSZWN0IHRvVXNlclNwYWNlKGNv
bnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQogewogICAgIEZsb2F0UmVj
dCB1c2VyUmVjdCA9IHJlY3Q7Ci0gICAgdXNlclJlY3Quc2V0WShOU01heFkoW3NjcmVlbkZvcldp
bmRvdyhkZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55KCkgKyB1c2VyUmVjdC5oZWln
aHQoKSkpOyAvLyBmbGlwCisgICAgdXNlclJlY3Quc2V0WShOU01heFkoW3NjcmVlbihkZXN0aW5h
dGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55KCkgKyB1c2VyUmVjdC5oZWlnaHQoKSkpOyAvLyBm
bGlwCiAgICAgcmV0dXJuIHVzZXJSZWN0OwogfQogCiBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCiB7CiAgICAgRmxvYXRSZWN0IGRl
dmljZVJlY3QgPSByZWN0OwotICAgIGRldmljZVJlY3Quc2V0WShOU01heFkoW3NjcmVlbkZvcldp
bmRvdyhzb3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBkZXZpY2VSZWN0LmhlaWdo
dCgpKSk7IC8vIGZsaXAKKyAgICBkZXZpY2VSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW4oc291cmNl
KSBmcmFtZV0pIC0gKGRldmljZVJlY3QueSgpICsgZGV2aWNlUmVjdC5oZWlnaHQoKSkpOyAvLyBm
bGlwCiAgICAgcmV0dXJuIGRldmljZVJlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dl
YkZyYW1lLm1tCmluZGV4IDdkZmMwNWE2YmNkZjFlM2ZmN2MzMDk2NWRjODk1YzdmZjNmMWM1YzAu
LmIwZGNkOWE5YWE2YWVmZjRjZGY2YWRkZTA0ZWY3Y2YyOWFlNDE4NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dlYktpdC9t
YWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTc2LDcgKzk3Niw3IEBAIC0gKHZvaWQpX2RyYWdT
b3VyY2VFbmRlZEF0OihOU1BvaW50KXdpbmRvd0xvYyBvcGVyYXRpb246KE5TRHJhZ09wZXJhdGlv
bilvcGVyYXRpCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAgICAgLy8gRklYTUU6
IFRoZXNlIGFyZSBmYWtlIG1vZGlmaWVyIGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxkIGJlIHJl
YWwgb25lcyBpbnN0ZWFkLgotICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChJbnRQb2ludCh3
aW5kb3dMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFt2aWV3LT5wbGF0Zm9ybVdpZGdldCgp
IHdpbmRvd10pLAorICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChJbnRQb2ludCh3aW5kb3dM
b2MpLCBJbnRQb2ludChnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFt2aWV3LT5wbGF0Zm9ybVdpZGdl
dCgpIHdpbmRvd10pKSwKICAgICAgICAgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6TW91c2VN
b3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1lKCksIFdlYkNv
cmU6OkZvcmNlQXRDbGljayk7CiAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZXZlbnRIYW5kbGVy
KCkuZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlvbik7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5t
bSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCmluZGV4IGNl
YmJjMjY5MDFiZTc5M2E4OGJhY2JmOWM5MmM3ZDUzOTI3ODA3ZGMuLmNmNzc0MjdmNTRlZjRmMTkw
YTM2YjVjNjg5NDI3NmMwNTQ0MmU2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
V2ViRXZlbnRGYWN0b3J5Lm1tCkBAIC0xMzcsMzQgKzEzNyw2IEBAIHN0YXRpYyBpbnQgY2xpY2tD
b3VudEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBv
cAogfQogCi1zdGF0aWMgTlNTY3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAqd2luZG93
KQotewotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBbd2luZG93IHNjcmVlbl07IC8vIG5pbCBpZiB0
aGUgd2luZG93IGlzIG9mZi1zY3JlZW4KLSAgICBpZiAoc2NyZWVuKQotICAgICAgICByZXR1cm4g
c2NyZWVuOwotICAgIAotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2NyZWVuc107
Ci0gICAgaWYgKFtzY3JlZW5zIGNvdW50XSA+IDApCi0gICAgICAgIHJldHVybiBbc2NyZWVucyBv
YmplY3RBdEluZGV4OjBdOyAvLyBzY3JlZW4gY29udGFpbmluZyB0aGUgbWVudWJhcgotICAgIAot
ICAgIHJldHVybiBuaWw7Ci19Ci0KLXN0YXRpYyBOU1BvaW50IGZsaXBTY3JlZW5Qb2ludChjb25z
dCBOU1BvaW50JiBzY3JlZW5Qb2ludCwgTlNTY3JlZW4gKnNjcmVlbikKLXsKLSAgICBOU1BvaW50
IGZsaXBwZWRQb2ludCA9IHNjcmVlblBvaW50OwotICAgIGZsaXBwZWRQb2ludC55ID0gTlNNYXhZ
KFtzY3JlZW4gZnJhbWVdKSAtIGZsaXBwZWRQb2ludC55OwotICAgIHJldHVybiBmbGlwcGVkUG9p
bnQ7Ci19Ci0KLXN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRv
d1BvaW50LCBOU1dpbmRvdyAqd2luZG93KQotewotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1
c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFy
YXRpb25zIgotICAgIHJldHVybiBmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0QmFzZVRv
U2NyZWVuOndpbmRvd1BvaW50XSwgc2NyZWVuRm9yV2luZG93KHdpbmRvdykpOwotI3ByYWdtYSBj
bGFuZyBkaWFnbm9zdGljIHBvcAotfQotCiBzdGF0aWMgTlNQb2ludCBnbG9iYWxQb2ludEZvckV2
ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7CkBAIC0x
ODcsNyArMTU5LDcgQEAgc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50
ICpldmVudCkKICAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgogICAgIGNhc2UgTlNTY3JvbGxXaGVl
bDoKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAgICAgcmV0dXJuIGdsb2JhbFBv
aW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOworICAgICAgICBy
ZXR1cm4gV2ViQ29yZTo6Z2xvYmFsUG9pbnQoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbZXZl
bnQgd2luZG93XSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5TWmVyb1BvaW50Owog
ICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpp
bmRleCBmMGY0NjNkMzE2NGFhM2FiMGQ0ZTg4MjkyMDJjYzM1YTVhMDIzM2RiLi5iMjIxZDIyMmFj
ZTE2NjZmYmQ3YzZjZjJhNjk1YWMyYzg3MzhmMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC0xMDg5LDcgKzEwODksNyBAQCB2b2lkIFdl
YlZpZXdJbXBsOjp3aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcyhDR0Zsb2F0IG9sZEJh
Y2tpbmdTY2FsZUZhY3Rvcgogdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hhbmdlU2NyZWVu
KCkKIHsKICAgICBOU1dpbmRvdyAqd2luZG93ID0gbV90YXJnZXRXaW5kb3dGb3JNb3ZlUHJlcGFy
YXRpb24gPyBtX3RhcmdldFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbiA6IG1fdmlldy53aW5kb3c7
Ci0gICAgbV9wYWdlLT53aW5kb3dTY3JlZW5EaWRDaGFuZ2UoKFBsYXRmb3JtRGlzcGxheUlEKVtb
W1t3aW5kb3cgc2NyZWVuXSBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5OkAiTlNTY3Jl
ZW5OdW1iZXIiXSBpbnRWYWx1ZV0pOworICAgIG1fcGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdl
KFtbW1t3aW5kb3cgc2NyZWVuXSBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5OkAiTlNT
Y3JlZW5OdW1iZXIiXSBpbnRWYWx1ZV0pOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjp3aW5kb3dE
aWRDaGFuZ2VMYXllckhvc3RpbmcoKQpAQCAtMjc3OCw3ICsyNzc4LDcgQEAgdm9pZCBXZWJWaWV3
SW1wbDo6ZHJhZ2dlZEltYWdlKE5TSW1hZ2UgKmltYWdlLCBDR1BvaW50IGVuZFBvaW50LCBOU0Ry
YWdPcGVyYXRpb24KICAgICAvLyBQcmV2ZW50IHF1ZXVlZCBtb3VzZURyYWdnZWQgZXZlbnRzIGZy
b20gY29taW5nIGFmdGVyIHRoZSBkcmFnIGFuZCBmYWtlIG1vdXNlVXAgZXZlbnQuCiAgICAgbV9p
Z25vcmVzTW91c2VEcmFnZ2VkRXZlbnRzID0gdHJ1ZTsKIAotICAgIG1fcGFnZS0+ZHJhZ0VuZGVk
KFdlYkNvcmU6OkludFBvaW50KHdpbmRvd01vdXNlTG9jKSwgV2ViQ29yZTo6Z2xvYmFsUG9pbnQo
d2luZG93TW91c2VMb2MsIG1fdmlldy53aW5kb3cpLCBvcGVyYXRpb24pOworICAgIG1fcGFnZS0+
ZHJhZ0VuZGVkKFdlYkNvcmU6OkludFBvaW50KHdpbmRvd01vdXNlTG9jKSwgV2ViQ29yZTo6SW50
UG9pbnQoV2ViQ29yZTo6Z2xvYmFsUG9pbnQod2luZG93TW91c2VMb2MsIG1fdmlldy53aW5kb3cp
KSwgb3BlcmF0aW9uKTsKIH0KIAogc3RhdGljIFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlvbkZsYWdz
IGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFnKE5TVmlldyAqdmlldywgaWQgPE5TRHJhZ2dpbmdJbmZv
PiBkcmFnZ2luZ0luZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2Vi
UGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5k
ZXggMWY5ZGMwNDBjN2M4Y2NjNWMxZTBmNTkzNTM2MTIzMzVlZmFmZTI5Mi4uYjNmOGRmOWJlN2Q2
Y2EyOWJkZTAzNGFjNDI1ZmVlZDQ3YjcyMDJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9X
ZWJQYWdlUHJveHkuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUGFnZVByb3h5X2gKLSNkZWZpbmUgV2ViUGFn
ZVByb3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVk
ZSAiQVBJU2Vzc2lvbi5oIgpAQCAtNjY2LDcgKzY2NSw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBk
ZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50cmluc2ljRGV2aWNlU2Nh
bGVGYWN0b3IoZmxvYXQpOwogICAgIHZvaWQgc2V0Q3VzdG9tRGV2aWNlU2NhbGVGYWN0b3IoZmxv
YXQpOwotICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxheUlEKTsK
KyAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJ
RCk7CiAKICAgICB2b2lkIHNldFVzZUZpeGVkTGF5b3V0KGJvb2wpOwogICAgIHZvaWQgc2V0Rml4
ZWRMYXlvdXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKQEAgLTE4MzEsNSArMTgzMCwz
IEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdl
YlBhZ2VQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBkYTY2YzNhNTcyMGE3NTliNTQx
OTZiYzU4OWI5MzhhNDE1N2Y5Zjg4Li5iM2EwODE5NDQxMjQzYWJjZWI5ZDRiNTMzYWJjY2MxZDA5
ZjI5NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTI0LDggKzI0LDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkNocm9tZUNsaWVu
dF9oCi0jZGVmaW5lIFdlYkNocm9tZUNsaWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUg
IldlYkZyYW1lLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWVDbGllbnQuaD4KQEAgLTIxMCw3
ICsyMDksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90dGxpbmco
V2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsKIAogI2lm
IFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgUmVmUHRy
PFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAKICAgICBD
b21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2VycygpIGNvbnN0
IG92ZXJyaWRlCkBAIC0zNDYsNSArMzQ1LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQ2hyb21lQ2xpZW50X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNw
bGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaAppbmRleCA4YzVhNWM5
NWRlNjI3ZTBlNzI4MzViYzRkMTI4NzI5N2ZjMTA2MDUwLi4zMmI3ZjVhYTE3YTMwNjM4YzJiZDBi
MDgxNDhjY2ZkMDdkODY4ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJl
ZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcl9o
Ci0jZGVmaW5lIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcl9oCisjcHJhZ21h
IG9uY2UKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1Ip
CiAKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFJlbW90ZUxh
eWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvciA6IHB1YmxpYyBXZWJDb3JlOjpEaXNwbGF5UmVm
cmVzaE1vbml0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlTGF5ZXJUcmVlRGlz
cGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGUoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBS
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYgZHJhd2luZ0FyZWEpCisgICAgc3RhdGljIFJlZjxS
ZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZShXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJiBkcmF3
aW5nQXJlYSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90ZUxheWVy
VHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQsIGRyYXdpbmdBcmVhKSk7CiAgICAg
fQpAQCAtNDcsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRVcGRhdGVMYXllcnMoKTsK
IAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1v
bml0b3IoUGxhdGZvcm1EaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJik7Cisg
ICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6
OlBsYXRmb3JtRGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYpOwogCiAgICAg
V2Vha1B0cjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4gbV9kcmF3aW5nQXJlYTsKIH07CkBA
IC01NSw1ICs1NCwzIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZiAvLyBVU0UoUkVRVUVTVF9BTklN
QVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCi0jZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVl
RGlzcGxheVJlZnJlc2hNb25pdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggOWQ4M2UwNjQ2NzQ2YjJhMjhmN2QwYTc3YmY5MTVj
NGExZGRjM2RmYy4uZTRjNzNjNzI1NmE4YTQ5MTNhMmRkMjVkNWIxMTVlNjg3NWVkOTdlOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAg
LTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIERyYXdpbmdBcmVhX2gKLSNkZWZpbmUgRHJhd2luZ0FyZWFfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlICJMYXllclRyZWVD
b250ZXh0LmgiCkBAIC0xMTEsNyArMTEwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaEltbWVkaWF0ZWx5KCkgPSAwOwogCiAjaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICB2aXJ0dWFsIFJl
ZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCk7CisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29y
ZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfTVVMVElQUk9DRVNTKQpAQCAtMTgyLDUgKzE4MSwzIEBAIHByaXZhdGU6CiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6RHJhd2luZ0FyZWEmIGFyZWEpIHsgcmV0dXJu
IGFyZWEudHlwZSgpID09IFdlYktpdDo6QXJlYVR5cGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQotCi0jZW5kaWYgLy8gRHJhd2luZ0FyZWFfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCmluZGV4IGRlM2NjMjg3NDljNTY2MGMzOTQ5NjM5Yjg5YjAwZWYwNWRl
OGU1ODIuLmI1YjZlNWJlYmE5OWU1NWE2OTE4NzVlNDZmZjQyOWViYjY0MDNiNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhX2gKLSNkZWZpbmUgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJDQVJlbW90ZS5oIgpAQCAtNzQsNyArNzMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBh
ZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQodWludDY0X3QgY2FsbGJhY2tJRCkgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
cihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsRGVz
dHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3Iq
KTsKIAogICAgIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdl
YkNvcmU6OkZyYW1lVmlldyopIG92ZXJyaWRlOwpAQCAtMTc5LDUgKzE3OCwzIEBAIHByaXZhdGU6
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19EUkFXSU5H
X0FSRUEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEsIERyYXdpbmdBcmVhVHlwZVJlbW90ZUxh
eWVyVHJlZSkKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279860</attachid>
            <date>2016-05-25 20:12:16 -0700</date>
            <delta_ts>2016-05-25 21:38:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158067-20160525201325.patch</filename>
            <type>text/plain</type>
            <size>209186</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDExCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTExN2E4YTQzN2NjYjE1
NzNiN2I2YTQwOGRjOGU3ZWFhZmM4Y2RhNC4uNGZkYTA2M2E1OGFmMGRmNDM2ZmM2ZDA0YTE3Mjg3
Y2U3YTI4YTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMSBAQAorMjAxNi0wNS0yNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWEgcXVlcmllcyBhbmQg
cGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVhbWxpbmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NSFRNTExpbmtFbGVtZW50IF9tZWRpYVF1ZXJ5TWF0Y2hlc10p
OiBVc2UgcmVmZXJlbmNlcywgdXNlIGZhc3RHZXRBdHRyaWJ1dGUsCisgICAgICAgIHBhc3MgYSBk
b2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUgdG8gdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRvciBh
bmQgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55LmluOiBVc2UgImV4cHJlc3Npb24iIGluc3RlYWQgb2YgImV4cCIg
Zm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb25zLgorICAgICAgICBVcGRhdGUgdmVjdG9ycyBhbmQg
YXJndW1lbnRzIHRvIG1vdmUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiB1c2lu
ZyB1bmlxdWVfcHRyLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDogVXNlIHByYWdt
YSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBN
YWRlIG1vcmUgb3ZlcnJpZGVzIHByaXZhdGUgYW5kIG1hcmtlZCB0aGVtIGZpbmFsLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OlNv
dXJjZVNpemU6OlNvdXJjZVNpemUpOiBBZGRlZCBtaXNzaW5nIFdURk1vdmUgdG8gYXZvaWQgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50IGNodXJuLiBDaGFuZ2VkIHR5cGUgb2YgZXhwcmVzc2lvbiB0
byBubyBsb25nZXIgdXNlIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNvdXJjZVNpemUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDogQ2hhbmdl
ZCBTb3VyY2VTaXplOjpleHByZXNzaW9uIHRvIG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAg
ICAgICAgQWxzbyBjaGFuZ2VkIFNvdXJjZVNpemU6Omxlbmd0aCB0byBiZSBSZWYgaW5zdGVhZCBv
ZiBSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUZlYXR1cmVOYW1lczo6aW5pdCk6IFN0cmVhbWxpbmVkIGEgYml0LiBSZW1vdmVkICJNZWRpYUZl
YXR1cmUiIHN1ZmZpeCBmcm9tCisgICAgICAgIG5hbWVzIG9mIG1lZGlhIGZlYXR1cmUgc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5oOiBVc2UgcHJhZ21hIG9uY2Uu
IENoYW5nZWQgbWVkaWEgZmVhdHVyZSBuYW1lIGdsb2JhbHMKKyAgICAgICAgdG8gdXNlIG5vcm1h
bCBXZWJLaXQgbmFtaW5nIHN0eWxlIGluc3RlYWQgb2YgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVy
c2NvcmVzLgorICAgICAgICBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkuIFJlbW92ZWQgIk1lZGlhRmVh
dHVyZSIgc3VmZml4IGZyb20gbmFtZXMgb2YgbWVkaWEgZmVhdHVyZSBzdHJpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjpNZWRpYVF1ZXJ5U2V0KTogU2ltcGxpZmllZCBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHRoZSBx
dWVyaWVzCisgICAgICAgIHZlY3RvciBjYW4gbm93IGJlIGNvcGllZCBub3JtYWxseS4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTWVkaWFEZXNjcmlwdG9yKTogTm9ybWFsaXplZCB0eXBlcyBhbmQg
Y2hhbmdlZCB0byB1c2UgaXNBU0NJSUFscGhhbnVtZXJpYy4KKyAgICAgICAgVGhlIG9sZCBjb2Rl
IHdhcyBub3QgaGFuZGxpbmcgJzAnIHRoZSB3YXkgdGhlIGNvbW1lbnQgc2FpZCBpdCBkaWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKTogQWRkZWQuIEhl
bHBlciBmdW5jdGlvbiB0byBjdXQgZG93biBvbiByZWR1bmRhbnQKKyAgICAgICAgY29kZSBpbiBm
dW5jdGlvbnMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6
IFVzZSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMgaW5zdGVhZCBvZgorICAgICAg
ICBzdHJpcFdoaXRlU3BhY2UuIFN0cmVhbWxpbmVkIGxvZ2ljIHVzaW5nIGhlbHBlciBmdW5jdGlv
bi4gVXBkYXRlZCB0byB1c2UgYSB2ZWN0b3Igb2YKKyAgICAgICAgcXVlcmllcyBpbnN0ZWFkIG9m
IGEgdmVjdG9yIG9mIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjphZGQpOiBVc2UgaW50ZXJuYWxQYXJzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6YWRk
TWVkaWFRdWVyeSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBub3QgYmUgdW5pcXVlX3B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCk6IFVzZSBtb2Rlcm4g
Zm9yIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6Ok1lZGlhTGlzdCk6IEluaXRp
YWxpemUgcG9pbnRlcnMgdG8gbnVsbCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgICAgICBy
YXRoZXIgdGhhbiBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dCk6IFJlbW92ZWQgdW5oZWxwZnVsIGxvY2FsIHZhcmlhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjppdGVtKTogVXBkYXRlZCBzaW5jZSBxdWVyaWVz
IG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZXMgdG8gcmVm
ZXJlbmNlcworICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdpdGggYXNzZXJ0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQpOiBVcGRhdGVk
IHRvIG1vZGVybml6ZS4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogVXNlIHByYWdtYSBv
bmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgQ2hhbmdlZCB2ZWN0b3IgdG8gY29udGFpbiBtZWRpYSBxdWVyaWVzIGluc3RlYWQg
b2YgdW5pcXVlX3B0ci4gVXNlIG51bGxwdHIgaW5zdGVhZCBvZiAwLgorICAgICAgICBJbml0aWFs
aXplIHBvaW50ZXJzIHRvIG51bGwgaGVyZS4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogRGVsZXRlZCBub3ctdW5uZWVkZWQgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4g
Qm90aCBhcmUKKyAgICAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCB3aXRob3V0IHVzIHdyaXRpbmcg
dGhlbSBleHBsaWNpdGx5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6c2VyaWFsaXpl
KTogUmV3cm90ZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
TWVkaWFRdWVyeSk6IFVwZGF0ZXMgc2luY2UgZXhwcmVzc2lvbnMgYXJlIG5vIGxvbmdlciB1bmlx
dWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IENoYW5nZWQg
cmV0dXJuIHR5cGUgdG8gcmVmZXJlbmNlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDog
VXNlIHByYWdtYSBvbmNlLiBBZGRlZCBpbmNsdWRlIHNpbmNlIHRoaXMgbm93IGluY2x1ZGVzIG1l
ZGlhIHF1ZXJ5CisgICAgICAgIGV4cHJlc3Npb25zLCBub3QganVzdCB1bmlxdWVfcHRyLiBEZWxl
dGVkIHRoZSB1bm5lZWRlZCBjb3B5IGZ1bmN0aW9uLgorCisgICAgICAgICogY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydERlcGVuZGVudCk6
IE1vdmVkIHRoaXMgaGVyZS4gSXQgdXNlZCB0byBiZSBhIG1lbWJlciBmdW5jdGlvbiBvZgorICAg
ICAgICBNZWRpYVF1ZXJ5RXhwLCBidXQgdGhpcyBmaWxlIGhhcyBhIGxvdCBtb3JlIGZ1bmN0aW9u
cyBhYm91dCBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaG93CisgICAgICAgIHRoZXkgYXJlIGV2YWx1
YXRlZCwgc28gaXQgcmVhbGx5IGJlbG9uZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOiBDaGFuZ2VkIGNvbnN0cnVjdG9y
IHRvIHRha2UgYQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUuIEluaXRpYWxp
emUgdGhlIGZhbGxiYWNrIHJlc3VsdCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogQ2hhbmdlZCB0aGUgYXJn
dW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVWYWx1
ZSk6IE1hZGUgYm90aCBvZiB0aGUgYXJndW1lbnRzIHNlcGFyYXRlIHRlbXBsYXRlIHR5cGVzLiBU
aGlzCisgICAgICAgIGhlbHBzIHVzIGNvbXBhcmUgYW4gaW50ZWdlciB0byBhIGRvdWJsZSB3aXRo
b3V0IGxvdHMgb2YgdHlwZSBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVBc3BlY3RS
YXRpb1ZhbHVlKTogQ2hhbmdlZCB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBnb3Qgcmlk
IG9mCisgICAgICAgIHRoZSBjYXN0cyB0byBpbnQgc28gd2Ugd2lsbCBkbyB0aGUgd29yayBpbiBk
b3VibGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVZhbHVlKTogUmVwbGFjZWQg
dGhlIG9sZCBudW1iZXJWYWx1ZSBmdW5jdGlvbiB3aXRoIHRoaXMuIFNpbmNlIHZhbHVlcworICAg
ICAgICBhcmUgc3RvcmVkIGFzIGRvdWJsZXMsIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGRvdWJs
ZSByYXRoZXIgdGhhbiBmbG9hdC4KKyAgICAgICAgKFdlYkNvcmU6Onplcm9FdmFsdWF0ZSk6IEFk
ZGVkLiBIZWxwZnVsIGZvciB0aGUgbWFueSBmdW5jdGlvbnMgdGhhdCBqdXN0IG5lZWQgdG8KKyAg
ICAgICAgZXZhbHVhdGUgYXMgMC4KKyAgICAgICAgKFdlYkNvcmU6Om9uZUV2YWx1YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2xvckV2YWx1YXRlKTogUmVuYW1lZCB0aGlzIGFuZCBh
bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8g
dXNlIHRoZSBuZXcgZG91YmxlVmFsdWUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckluZGV4RXZhbHVhdGUpOiBVc2UgemVyb0V2YWx1YXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JHYW11dEV2YWx1YXRlKTogTm8gbG9uZ2VyIHVzZSBwYWdlIGp1c3QgdG8gZ2V0IGZyb20gdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBtYWluIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6bW9u
b2Nocm9tZUV2YWx1YXRlKTogU2ltcGxpZnkgbG9naWMgdXNpbmcgemVyb0V2YWx1YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZSk6IFVzZSBhdXRvIGZvciB0aGUg
a2V5d29yZDsgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkV2
YWx1YXRlKTogVXNlIGVhcmx5IHJldHVybiBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmFzcGVj
dFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUFzcGVjdFJh
dGlvRXZhbHVhdGUpOiBTaW1wbGlmaWVkIGxvZ2ljIGFuZCByZW1vdmVkIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpldmFsdWF0ZVJlc29sdXRpb24pOiBBZGRlZCBhIGNvdXBsZSBudWxs
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IFJl
bmFtZWQuIEFkZGVkIG1pc3NpbmcgdHlwZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z3JpZEV2YWx1YXRlKTog
VXNlIHplcm9FdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBBZGRl
ZCBhIG51bGwgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VIZWlnaHRFdmFsdWF0ZSk6
IFVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VXaWR0aEV2YWx1YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6d2lkdGhFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
bWluQ29sb3JFdmFsdWF0ZSk6IFVwZGF0ZWQgbmFtZSBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6
bWF4Q29sb3JFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWluQ29sb3JJbmRl
eEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhDb2xvckluZGV4RXZhbHVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk1vbm9jaHJvbWVFdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4TW9ub2Nocm9tZUV2YWx1YXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjptaW5Bc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjptYXhBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptYXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6bWluSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1heEhlaWdo
dEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW5XaWR0aEV2YWx1YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhXaWR0aEV2YWx1YXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjptaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6bWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1pbkRldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1h
eERldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pblJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4UmVzb2x1dGlvbkV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25FdmFsdWF0ZSk6IFVz
ZSBvbmVFdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25FdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtMmRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtM2RFdmFsdWF0ZSk6IFNpbXBsaWZ5IHVzaW5nIHplcm9F
dmFsdWF0ZSBhbmQgb25lRXZhbHVhdGUuCisgICAgICAgIChXZWJDb3JlOjp2aWV3TW9kZUV2YWx1
YXRlKTogU2ltcGxpZmllZCBsb2dpYyB3aXRoIGZld2VyIGxvY2FsIHZhcmlhYmxlcyBhbmQgdGhl
IG5hbWUgImtleXdvcmQiLgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9QbGF5YWJsZUlubGluZUV2
YWx1YXRlKTogVXNlIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhvdmVyRXZhbHVhdGUp
OiBTaW1wbGlmeSB1c2luZyBrZXl3b3JkLgorICAgICAgICAoV2ViQ29yZTo6YW55SG92ZXJFdmFs
dWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckV2YWx1
YXRlKTogU2ltcGxpZnkgdXNpbmcga2V5d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OmFueVBvaW50
ZXJFdmFsdWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTog
QWRkZWQuIEhlbHBlciBmb3IgYnVpbGRpbmcgdXAgdGhlIG1lZGlhIHF1ZXJ5IGZ1bmN0aW9uIG1h
cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogTW92
ZWQgY29kZSB0byBidWlsZCB0aGUgZnVuY3Rpb24gbWFwIGluIGhlcmUgaW4KKyAgICAgICAgYSBs
YW1iZGEsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBhIHNlcGFyYXRlIGdsb2JhbCBmdW5jdGlv
bi4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bmVlZGVkIGluY2x1ZGVzLiBTaW1wbGlmaWVkIGNvbW1lbnRzIGFuZAorICAg
ICAgICBtb2Rlcm5pemVkIHRoZWlyIHN0eWxlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlF
eHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcik6
IFJlbmFtZWQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgdGhpcyBkb2VzLiBVcGRhdGVkCisgICAg
ICAgIHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSB0ZSBuZXcgZmVhdHVyZSBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
SW50ZWdlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoTm9u
TmVnYXRpdmVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlk
V2l0aFplcm9Pck9uZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBc3BlY3RSYXRpb0Zl
YXR1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aG91dFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJX
aXRoVW5pdCk6IEFkZGVkLiBIZWxwZXIgdGhhdCBjYWxscyBtdWx0aXBsZSBmdW5jdGlvbnMgYWJv
dmUuCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzU2xhc2gpOiBBZGRlZC4gSGVscGVyIHRvIG1ha2UgYXNwZWN0
IHJhdGlvIGNvZGUgYmVsb3cgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
c2l0aXZlSW50ZWdlclZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOiBSZWFycmFuZ2VkIGNvZGUgdG8gYmUg
bXVjaCBsZXNzIHdvcmR5IGFuZAorICAgICAgICB0byBub3QgdXNlIGN1cnJlbnQvbmV4dC4KKwor
ICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6IFVzZSBwcmFnbWEgb25jZS4gUmVuYW1lZCBj
bGFzcyB0byBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi4gUmVtb3ZlZAorICAgICAgICB0aGUgaXNWaWV3
cG9ydERlcGVuZGVudCBmdW5jdGlvbiwgbm93IHBhcnQgb2YgTWVkaWFRdWVyeUV2YWx1YXRvci4g
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3Qp
OiBNYXJrZWQgdGhpcyBpbmxpbmUuIFVzZSBhIHJlZmVyZW5jZSBhbmQgYSBSZWYmJgorICAgICAg
ICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dDo6Y3JlYXRlKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcik6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZSBhbmQgdXNl
IHJlbGVhc2VOb25OdWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q6OnJlbW92
ZUxpc3RlbmVyKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUxpc3Q6Om1hdGNoZXMpOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlMaXN0Lmg6IFVzZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCB0eXBlcyB0byB1c2UgcmVm
ZXJlbmNlcywgUmVmUHRyJiYgYW5kIFJlZiYmLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1
ZXJ5TWF0Y2hlcik6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSk6
IFVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRl
KTogVGFrZSBhIHJlZmVyZW5jZS4gVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEp
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVy
eU1hdGNoZXI6OmFkZExpc3RlbmVyKTogVXNlIFJlZiYmIGFuZCByZWZlcmVuY2UgZm9yIGFyZ3Vt
ZW50cy4gU2ltcGxpZnkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVy
OjpyZW1vdmVMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKTogTW92ZWQgdGhlIGxvZ2ljIGZvciBldmFsdWF0
aW5nIGVhY2ggcXVlcnkgaGVyZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmg6IFVz
ZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCBjcmVhdGUgdG8gdGFrZSBhIHJlZmVyZW5jZS4gVGlnaHRl
bmVkIGFyZ3VtZW50CisgICAgICAgIHR5cGVzIGZvciBhZGRMaXN0ZW5lciBhbmQgcmVtb3ZlTGlz
dGVuZXIuIE1hZGUgdGhlIHByaXZhdGUgTGlzdGVuZXIgYSBzaW1wbGUgc3RydWN0IHJhdGhlciB0
aGFuIGEKKyAgICAgICAgY2xhc3MuIEluaXRpYWxpemVkIG1fZXZhbHVhdGlvblJvdW5kLgorCisg
ICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
Q2hpbGRSdWxlcyk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gTWVkaWFRdWVyeUV2YWx1YXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGl0dG8uCisK
KyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0
Y2gpOiBVcGRhdGVkIHRvIHVzZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGluIGEgc2ltcGxlciB3YXku
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGVuZ3RoKTogVXNlIGEgcmVmZXJlbmNlIGFuZCBz
aW1wbGVyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOiBDaGFuZ2VkIGFyZ3VtZW50
cyB0byB0YWtlIGEgRG9jdW1lbnQgaW5zdGVhZCBvZiBib3RoIGEKKyAgICAgICAgUmVuZGVyVmll
dyBhbmQgYSBGcmFtZS4KKworICAgICAgICAqIGNzcy9Tb3VyY2VTaXplTGlzdC5oOiBVc2UgI3By
YWdtYSBvbmNlLiBDaGFuZ2UgcGFyc2VTaXplc0F0dHJpYnV0ZSB0byB0YWtlIGEgRG9jdW1lbnQu
CisKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZU1lZGlhOjptYXRjaE1lZGl1bSk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6IFVzZSBhIE1lZGlhUXVlcnlFdmFs
dWF0b3IgaW5zdGVhZCBvZiBhIHVuaXF1ZV9wdHIKKyAgICAgICAgdG8gb25lLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KTogVXNlIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZgorICAgICAgICBwb250ZXJzLCBhbmQgdXNlIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlS
ZXN1bHQgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKTogVXNlIGEgbW9k
ZXJuIGZvciBsb29wLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogVXNlIGEgTWVk
aWFRdWVyeUV2YWx1YXRvciBpbnN0ZWFkIG9mIGEgdW5pcXVlX3B0ciB0byBvbmUuCisgICAgICAg
IFVzZSBhIHZlY3RvciBvZiBNZWRpYVF1ZXJ5UmVzdWx0IGluc3RlYWQgb2YgYSB2ZWN0b3Igb2Yg
dW5pcXVlX3B0ci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IFJlbW92ZWQgYSBzdHJheSBzcGFjZSAo
dW5yZWxhdGVkIHRvCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXRjaCkuCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gdGhlCisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgY2xhc3MuIEFsc28gdXNl
IGF1dG8gYSBiaXQgbW9yZSBhbmQgZWxpbWluYXRlZCBhIGRvdWJsZSBoYXNoIHRhYmxlCisgICAg
ICAgIGxvb2t1cCBpbiBjb2RlIHRoYXQgdXNlZCBoYXNBdHRyaWJ1dGUgZm9sbG93ZWQgYnkgZmFz
dEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNlbGVj
dEltYWdlU291cmNlKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBwYXJzZVNpemVzQXR0cmlidXRl
LgorCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNv
dXJjZUNoaWxkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgor
CisgICAgICAgICogaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGh0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmg6IFVzZSAjcHJhZ21hIG9uY2UuIENoYW5n
ZWQgdmlld3BvcnQgZGVwZW5kZW50IG1lZGlhIHF1ZXJ5IHJlc3VsdHMKKyAgICAgICAgdmVjdG9y
IHRvIGJlIGEgdmVjdG9yIG9mIHJlc3VsdHMsIG5vdCBvZiB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZXMp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHBhcnNlU2l6ZXNBdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxvYWRTY2FubmVyOjpTdGFydFRhZ1NjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFBdHRyaWJ1dGVNYXRjaGVzKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBQbGF0Zm9ybVNjcmVl
bi5oLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCk6IFNpbXBsaWZpZWQgY29kZSBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3IgY2hh
bmdlcyB0byBQbGF0Zm9ybVNjcmVlbk1hYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVNjcmVlbi5oOiBVc2UgI3ByYWdtYSBvbmNlLiBVc2UgdXNpbmcgaW5zdGFkIG9m
IHR5cGVkZWYuIFB1dCB0aGUgdHlwZWRlZgorICAgICAgICBmb3IgUGxhdGZvcm1EaXNwbGF5SUQg
aW5zaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUgdHlwZWRlZiBmb3IgQ29s
b3JQcm9maWxlLgorICAgICAgICBSZW5hbWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBmaW5kIGEgc2Ny
ZWVuIHRvIGp1c3QgInNjcmVlbiIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQpOiBNb3ZlZCBp
bml0aWFsaXphdGlvbgorICAgICAgICBvZiBib29sZWFucyB0byB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOiBVc2UgcHJhZ21hIG9uY2UuIFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgZGlzcGxheSBJRCBkYXRhIG1lbWJlciB0byBiZSBhbiBP
cHRpb25hbCBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICBwYWlyZWQgd2l0aCBhbm90aGVy
IGRhdGEgbWVtYmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clVwZGF0ZXIuaDogVXNlIHByYWdtYSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YK
KyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oOiBVc2UgcHJhZ21hIG9uY2UuIE1vdmVkIENvbG9yUHJvZmls
ZSBoZXJlIGZyb20KKyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaCwgc2luY2UgaXQncyBub3QgdXNl
ZCB0aGVyZS4gYW5kIGlzIHVzZWQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5oOiBVc2UgcGFybWEgb25jZS4gQ2hhbmdlZCByZXV0cm4gdHlw
ZSBvZiB0aGUKKyAgICAgICAgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gdG8gTlNQb2ludC4gVHdlYWtl
ZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBv
aW50KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBOU1BvaW50IGFuZCBzbyByZW1vdmVkIHRoZSBl
eHBsaWNpdAorICAgICAgICBjb252ZXJzaW9uIHRvIEludFBvaW50LgorICAgICAgICAoV2ViQ29y
ZTo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gTlNQb2ludC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOiBNb3ZlZCBjb252ZXJzaW9uIHRvCisgICAgICAgIEludFBvaW50IGlu
IGhlcmUuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsIGluZGVudGluZyBzdHlsZSBhbmQganVzdCBp
bmRlbnRlZCBub3JtYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1
aWxkZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJRCk6IFJlbmFtZWQgZnJvbSBkaXNwbGF5
SURGcm9tU2NyZWVuIGFuZCBkaXNwbGF5RnJvbVdpZGdldCBzaW5jZSB0aGlzCisgICAgICAgIGlz
IEMrKyBhbmQgd2UgaGF2ZSBvdmVybG9hZGluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFy
Z3VtZW50cy4gQWRkZWQgYSBudWxsIGNoZWNrCisgICAgICAgIG9mIHRoZSBob3cgZGlud28gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0U2NyZWVuKTogQWRkZWQuIEhlbHBlciB1c2Vk
IGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6d2luZG93KTogQWRkZWQuIEhlbHBlciB1c2VkIGJl
bG93LgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKTogUmVuYW1lZCBmcm9tIHNjcmVlbkZvcldp
ZGdldCBhbmQgc2NyZWVuRnJvbVdpbmRvdyBhbmQgcmVtb3ZlZCB0aGUKKyAgICAgICAgdW5uZWVk
ZWQgd2luZG93IGFyZ3VtZW50IGZyb20gdGhlIHdpZGdldCB2ZXJzaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGgpOiBTaW1wbGlmaWVkLCB1c2luZyBuZXcgaGVscGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOiBUd2Vha2VkIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5IYXNJbnZlcnRlZENvbG9ycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6IFNpbXBsaWZpZWQgdXNpbmcgbmV3IGVscGVycy4KKyAgICAgICAgKFdl
YkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcik6IFN0cmVhbWxpbmVkIHVzaW5nIGZld2VyIGxvY2Fs
IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgdXNpbmcgYXV0byBmb3IgdHlwZXMgb2YgdGhlIHJlc3Vs
dHMgb2YgYWRvcHRDRi4KKyAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNwYWNlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6dG9EZXZpY2VTcGFj
ZSk6IERpdHRvLgorCiAyMDE2LTA1LTI1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgVXNlIEhhc2hNYXA6OmFkZCgpIGluc3RlYWQgb2YgSGFzaE1hcDo6c2V0KCkg
aW4gTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAxNDk3
YzA0NjZkZTU5MzRmM2I4NjIxZGUzNzk5NWQ1YjVjMjE2ZGZjLi44MWExMDI2NGQwZWJiZmZkMjZj
OWRmYjY1YTZhOTIzZTg2NGU2MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTYtMDUtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1l
ZGlhIHF1ZXJpZXMgYW5kIHBsYXRmb3JtIHNjcmVlbiBtb2Rlcm5pemF0aW9uIGFuZCBzdHJlYW1s
aW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODA2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYWdTb3VyY2VFbmRl
ZEF0Om9wZXJhdGlvbjpdKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mCisgICAg
ICAgIGdsb2JhbFBvaW50LCB3aGljaCByZXR1cm5zIGFuIE5TUG9pbnQuCisKIDIwMTYtMDUtMjQg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIENhbmRpZGF0ZXMgc2hv
dWxkIHdvcmsgd2l0aCBpbnB1dCBtZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjAwNWRkODM5MzkzNzU4
N2Q5MGRlZjZlNTExM2JlYWQ4MGIzMDM3My4uMjliZjI4MGQ4NDBiNTU0NmI1MGI5MmZmMTk2Zjg4
ZmRhODVkNmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE2LTA1LTI1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYSBxdWVyaWVzIGFuZCBw
bGF0Zm9ybSBzY3JlZW4gbW9kZXJuaXphdGlvbiBhbmQgc3RyZWFtbGluaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZl
bnRGYWN0b3J5Lm1tOgorICAgICAgICAoV2ViS2l0OjpzY3JlZW5Gb3JXaW5kb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpmbGlwU2NyZWVuUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpnbG9iYWxQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Omdsb2JhbFBv
aW50Rm9yRXZlbnQpOiBVc2UgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gZnJvbSBXZWJDb3JlIHNvIHdl
IGRvbid0IG5lZWQKKyAgICAgICAgY29waWVzIG9mIGV2ZXJ5dGhpbmcgaW4gaGVyZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVlbik6IFJlbW92ZWQgdW5uZWVkZWQgdHlw
ZSBjYXN0LgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ2dlZEltYWdlKTogQWRk
ZWQgdHlwZSBjYXN0IHNpbmNlIGdsb2JhbFBvaW50IG5vdyByZXR1cm5zIGFuCisgICAgICAgIE5T
UG9pbnQgcmF0aGVyIHRoYW4gYW4gSW50UG9pbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6IFVzZSBwcmFnbWEgb25jZS4gQWRkIGEgV2ViQ29yZSBwcmVmaXggdG8gYSB1
c2Ugb2YKKyAgICAgICAgUGxhdGZvcm1EaXNwbGF5SUQsIHNpbmNlIHRoYXQgaXMgbm93IGluc2lk
ZSB0aGUgV2ViQ29yZSBuYW1lc3BhY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oOiBEaXR0by4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDogRGl0dG8uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5o
OiBEaXR0by4KKwogMjAxNi0wNS0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBGbGFzaGluZXNzIGFuZCBqdW1waW5lc3Mgd2hlbiBlbnRlcmluZyBmdWxsc2Ny
ZWVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDUwODY5YzIzMTIzNjFjMjdm
ZDE2NGNkZDQwNDhhZDQ4NDMxMjA5NjYuLmY0NzQ1ZTE5MTRjNTUzMjRkOGZiMGM1ODQ0NTE1ODkw
NTBkNDYzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC03NjIsNyArNzYy
LDkgQEAgLSAoQk9PTClpc0ZvY3VzZWQKIEBlbmQKIAogI2lmIFBMQVRGT1JNKElPUykKKwogQGlt
cGxlbWVudGF0aW9uIERPTUhUTUxMaW5rRWxlbWVudCAoV2ViUHJpdmF0ZSkKKwogLSAoQk9PTClf
bWVkaWFRdWVyeU1hdGNoZXNGb3JPcmllbnRhdGlvbjooaW50KW9yaWVudGF0aW9uCiB7CiAgICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oY29yZShz
ZWxmKSktPmRvY3VtZW50KCk7CkBAIC03OTAsMTggKzc5MiwxOSBAQCAtIChCT09MKV9tZWRpYVF1
ZXJ5TWF0Y2hlc0Zvck9yaWVudGF0aW9uOihpbnQpb3JpZW50YXRpb24KIAogLSAoQk9PTClfbWVk
aWFRdWVyeU1hdGNoZXMKIHsKLSAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmsgPSBzdGF0aWNfY2Fz
dDxIVE1MTGlua0VsZW1lbnQqPihjb3JlKHNlbGYpKTsKLSAgICBTdHJpbmcgbWVkaWEgPSBsaW5r
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZWRpYUF0dHIpOworICAgIEhUTUxMaW5rRWxlbWVu
dCYgbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihjb3JlKHNlbGYpKTsKKwor
ICAgIGF1dG8mIG1lZGlhID0gbGluay5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWVkaWFB
dHRyKTsKICAgICBpZiAobWVkaWEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBsaW5rLT5kb2N1bWVudCgpOwogCi0gICAgUmVmUHRyPE1l
ZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcnlTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2lu
Z0Rlc2NyaXB0aW9uU3ludGF4KG1lZGlhKTsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVl
bkV2YWwoInNjcmVlbiIsIGRvY3VtZW50LmZyYW1lKCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSA/
ICZkb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0eWxlKCkgOiAwKTsKLQotICAgIHJldHVybiBzY3Jl
ZW5FdmFsLmV2YWwobWVkaWFRdWVyeVNldC5nZXQoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gbGluay5kb2N1bWVudCgpOworICAgIGF1dG8gbWVkaWFRdWVyeVNldCA9IE1lZGlhUXVlcnlT
ZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobWVkaWEpOworICAgIHJldHVybiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIsIGRvY3VtZW50LCBkb2N1bWVudC5yZW5kZXJW
aWV3KCkgPyAmZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpIDogbnVsbHB0ciB9LmV2YWx1
YXRlKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQorCiBAZW5kCisKICNlbmRpZgogCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4K
aW5kZXggZjViMGQxNzUzMTg0ZDg4Y2E3MWNmNzEzMTIxNTc3YzFkMzBhN2U5Yy4uNGI3ZjE4M2U4
N2M2ZmIwYjZiNTNkNmE3YzQwZTExMzQyNDkzMjFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55LmluCkBAIC0zNyw5ICszNyw5IEBACiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0Owog
ICAgIE1lZGlhUXVlcnkqIG1lZGlhUXVlcnk7CiAgICAgTWVkaWFRdWVyeTo6UmVzdHJpY3RvciBt
ZWRpYVF1ZXJ5UmVzdHJpY3RvcjsKLSAgICBNZWRpYVF1ZXJ5RXhwKiBtZWRpYVF1ZXJ5RXhwOwor
ICAgIE1lZGlhUXVlcnlFeHByZXNzaW9uKiBtZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKICAgICBWZWN0
b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiogc291cmNlU2l6ZUxpc3Q7Ci0gICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4qIG1lZGlhUXVlcnlFeHBMaXN0OworICAgIFZl
Y3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4qIG1lZGlhUXVlcnlFeHByZXNzaW9uTGlzdDsKICAg
ICBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJh
bWU+Pioga2V5ZnJhbWVSdWxlTGlzdDsKICAgICBDU1NQcm9wZXJ0eUlEIGlkOwpAQCAtMjcxLDIw
ICsyNzEsMjAgQEAgc3RhdGljIGJvb2wgc2VsZWN0b3JMaXN0RG9lc05vdE1hdGNoQW55UHNldWRv
RWxlbWVudChjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHQKIAogJXR5cGUgPG1lZGlhUXVlcnlS
ZXN0cmljdG9yPiBtYXliZV9tZWRpYV9yZXN0cmljdG9yCiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhw
PiBtZWRpYV9xdWVyeV9leHAgYmFzZV9tZWRpYV9xdWVyeV9leHAKLSVkZXN0cnVjdG9yIHsgZGVs
ZXRlICQkOyB9IG1lZGlhX3F1ZXJ5X2V4cCBiYXNlX21lZGlhX3F1ZXJ5X2V4cAorJXR5cGUgPG1l
ZGlhUXVlcnlFeHByZXNzaW9uPiBtZWRpYV9xdWVyeV9leHByZXNzaW9uIGJhc2VfbWVkaWFfcXVl
cnlfZXhwcmVzc2lvbgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gbWVkaWFfcXVlcnlfZXhw
cmVzc2lvbiBiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KIAogJXR5cGUgPHNvdXJjZVNpemVM
aXN0PiBzb3VyY2Vfc2l6ZV9saXN0CiAlZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBzb3VyY2Vf
c2l6ZV9saXN0CiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwPiBtYXliZV9zb3VyY2VfbWVkaWFfcXVl
cnlfZXhwCi0lZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2VfbWVkaWFfcXVl
cnlfZXhwCisldHlwZSA8bWVkaWFRdWVyeUV4cHJlc3Npb24+IG1heWJlX3NvdXJjZV9tZWRpYV9x
dWVyeV9leHByZXNzaW9uCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2Vf
bWVkaWFfcXVlcnlfZXhwcmVzc2lvbgogCiAldHlwZSA8dmFsdWU+IHNvdXJjZV9zaXplX2xlbmd0
aAogJWRlc3RydWN0b3IgeyBkZXN0cm95KCQkKTsgfSBzb3VyY2Vfc2l6ZV9sZW5ndGgKIAotJXR5
cGUgPG1lZGlhUXVlcnlFeHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVk
aWFfcXVlcnlfZXhwX2xpc3QKLSVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlhX3F1ZXJ5
X2V4cF9saXN0IG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdAorJXR5cGUgPG1lZGlhUXVl
cnlFeHByZXNzaW9uTGlzdD4gbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0IG1heWJlX2FuZF9t
ZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1l
ZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwcmVzc2lv
bl9saXN0CiAKICV0eXBlIDxzdHJpbmc+IGtleWZyYW1lX25hbWUKIApAQCAtNTc2LDU5ICs1NzYs
NjMgQEAgd2Via2l0X3NvdXJjZV9zaXplX2xpc3Q6CiAgICAgOwogCiBzb3VyY2Vfc2l6ZV9saXN0
OgotICAgIG1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHAgc291cmNlX3NpemVfbGVuZ3RoIHsK
KyAgICBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbiBzb3VyY2Vfc2l6ZV9sZW5n
dGggewogICAgICAgICAkJCA9IG5ldyBWZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPjsKLSAg
ICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnlFeHA+KCQxKSwgJDIpKTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNp
emUoV1RGTW92ZSgqJDEpLCAkMikpOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQotICAgIHwg
c291cmNlX3NpemVfbGlzdCBtYXliZV9zcGFjZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNl
X21lZGlhX3F1ZXJ5X2V4cCBzb3VyY2Vfc2l6ZV9sZW5ndGggeworICAgIHwgc291cmNlX3NpemVf
bGlzdCBtYXliZV9zcGFjZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5
X2V4cHJlc3Npb24gc291cmNlX3NpemVfbGVuZ3RoIHsKICAgICAgICAgJCQgPSAkMTsKLSAgICAg
ICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnlFeHA+KCQ1KSwgJDYpKTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUo
V1RGTW92ZSgqJDUpLCAkNikpOworICAgICAgICBkZWxldGUgJDU7CiAgICAgfQogICAgIDsKIAot
bWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cDoKK21heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9l
eHByZXNzaW9uOgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVy
eUV4cDsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cHJlc3Npb247CiAgICAgfQotICAg
IHwgYmFzZV9tZWRpYV9xdWVyeV9leHAgbWF5YmVfc3BhY2U7CisgICAgfCBiYXNlX21lZGlhX3F1
ZXJ5X2V4cHJlc3Npb24gbWF5YmVfc3BhY2U7CiAKIHNvdXJjZV9zaXplX2xlbmd0aDogdW5hcnlf
dGVybSB8IGNhbGNfZnVuY3Rpb247CiAKLWJhc2VfbWVkaWFfcXVlcnlfZXhwOiAnKCcgbWF5YmVf
c3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfdmFsdWUgJyknIHsKK2Jhc2VfbWVk
aWFfcXVlcnlfZXhwcmVzc2lvbjogJygnIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1h
eWJlX21lZGlhX3ZhbHVlICcpJyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJW
YWx1ZUxpc3Q+IG1lZGlhVmFsdWUoJDUpOwogICAgICAgICAkMy5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2UoKTsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cCgkMywgbWVkaWFW
YWx1ZS5nZXQoKSk7CisgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHByZXNzaW9uKCQzLCBt
ZWRpYVZhbHVlLmdldCgpKTsKICAgICB9CiAgICAgOwogCi1tZWRpYV9xdWVyeV9leHA6Ci0gICAg
bWF5YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSBiYXNlX21lZGlhX3F1ZXJ5X2V4cCBt
YXliZV9zcGFjZSB7CittZWRpYV9xdWVyeV9leHByZXNzaW9uOgorICAgIG1heWJlX21lZGlhX3Jl
c3RyaWN0b3IgbWF5YmVfc3BhY2UgYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIG1heWJlX3Nw
YWNlIHsKICAgICAgICAgaWYgKCQxICE9IE1lZGlhUXVlcnk6Ok5vbmUpIHsKICAgICAgICAgICAg
IC8vIElmIHJlc3RyaWN0b3IgaXMgc3BlY2lmaWVkLCBtZWRpYSBxdWVyeSBleHByZXNzaW9uIGlz
IGludmFsaWQuCiAgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgbWVkaWEgcXVlcnkgZXhwcmVz
c2lvbiBhbmQgY29udGludWUgcGFyc2luZyBtZWRpYSBxdWVyeS4KICAgICAgICAgICAgIGRlbGV0
ZSAkMzsKLSAgICAgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHA7CisgICAgICAgICAgICAk
JCA9IG5ldyBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAkJCA9ICQzOwogICAgIH0KICAgICA7CiAKLW1lZGlhX3F1ZXJ5X2V4cF9saXN0OgotICAgIG1l
ZGlhX3F1ZXJ5X2V4cCB7Ci0gICAgICAgICQkID0gbmV3IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFRdWVyeUV4cD4+OwotICAgICAgICAkJC0+YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPigkMSkpOworbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0OgorICAgIG1lZGlh
X3F1ZXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4
cHJlc3Npb24+OworICAgICAgICAkJC0+YXBwZW5kKFdURk1vdmUoKiQxKSk7CisgICAgICAgIGRl
bGV0ZSAkMTsKICAgICB9Ci0gICAgfCBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9zcGFjZSBN
RURJQV9BTkQgbWF5YmVfc3BhY2UgbWVkaWFfcXVlcnlfZXhwIHsKKyAgICB8IG1lZGlhX3F1ZXJ5
X2V4cHJlc3Npb25fbGlzdCBtYXliZV9zcGFjZSBNRURJQV9BTkQgbWF5YmVfc3BhY2UgbWVkaWFf
cXVlcnlfZXhwcmVzc2lvbiB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQo
c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+KCQ1KSk7CisgICAgICAgICQkLT5hcHBlbmQo
V1RGTW92ZSgqJDUpKTsKKyAgICAgICAgZGVsZXRlICQ1OwogICAgIH0KICAgICA7CiAKLW1heWJl
X2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdDoKK21heWJlX2FuZF9tZWRpYV9xdWVyeV9leHByZXNz
aW9uX2xpc3Q6CiAgICAgLyplbXB0eSovIHsKLSAgICAgICAgJCQgPSBuZXcgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj47CisgICAgICAgICQkID0gbmV3IFZlY3RvcjxNZWRp
YVF1ZXJ5RXhwcmVzc2lvbj47CiAgICAgfQotICAgIHwgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1l
ZGlhX3F1ZXJ5X2V4cF9saXN0IHsKKyAgICB8IE1FRElBX0FORCBtYXliZV9zcGFjZSBtZWRpYV9x
dWVyeV9leHByZXNzaW9uX2xpc3QgewogICAgICAgICAkJCA9ICQzOwogICAgIH0KICAgICA7CkBA
IC02NDYsMTMgKzY1MCwxNSBAQCBtYXliZV9tZWRpYV9yZXN0cmljdG9yOgogICAgIDsKIAogbWVk
aWFfcXVlcnk6Ci0gICAgbWVkaWFfcXVlcnlfZXhwX2xpc3QgewotICAgICAgICAkJCA9IG5ldyBN
ZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsICJhbGwiLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4+KCQxKSk7CisgICAgbWVkaWFfcXVlcnlf
ZXhwcmVzc2lvbl9saXN0IHsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5
OjpOb25lLCAiYWxsIiwgV1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAgIH0K
ICAgICB8Ci0gICAgbWF5YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSBJREVOVCBtYXli
ZV9zcGFjZSBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3QgeworICAgIG1heWJlX21lZGlh
X3Jlc3RyaWN0b3IgbWF5YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfYW5kX21lZGlh
X3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCB7CiAgICAgICAgICQzLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpOwotICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KCQxLCAkMywgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigkNSkpOwor
ICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KCQxLCAkMywgV1RGTW92ZSgqJDUpKTsKKyAgICAg
ICAgZGVsZXRlICQ1OwogICAgIH0KICAgICA7CiAKQEAgLTY2MSwxNiArNjY3LDE3IEBAIG1heWJl
X21lZGlhX2xpc3Q6IC8qIGVtcHR5ICovIHsgJCQgPSAmTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCku
bGVha1JlZigpOyB9IHwgbWVkCiBtZWRpYV9saXN0OgogICAgIG1lZGlhX3F1ZXJ5IHsKICAgICAg
ICAgJCQgPSAmTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAkJC0+
YWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4oJDEpKTsKKyAgICAgICAg
JCQtPmFkZE1lZGlhUXVlcnkoV1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAg
ICAgICBwYXJzZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICB9CiAgICAgfCBtZWRp
YV9saXN0ICcsJyBtYXliZV9zcGFjZSBtZWRpYV9xdWVyeSB7CiAgICAgICAgICQkID0gJDE7Ci0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KCQ0KTsKICAgICAg
ICAgaWYgKCQkKSB7Ci0gICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVyeShXVEZNb3ZlKG1lZGlh
UXVlcnkpKTsKKyAgICAgICAgICAgICQkLT5hZGRNZWRpYVF1ZXJ5KFdURk1vdmUoKiQ0KSk7CiAg
ICAgICAgICAgICBwYXJzZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICAgICAgfQor
ICAgICAgICBkZWxldGUgJDQ7CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCBlcnJvciB7CiAgICAg
ICAgICQkID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBv
cnRSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCmluZGV4IDVjNWVm
OTMwMjZiNzJhYWY2ZjlhMWRhYjhjY2Q2NmY5ODA0ZmIyN2QuLjQ1MjNlYzU1Y2Y0ZjRjN2ZjZjQ4
NDBlZDVmNjFkZDBkOTE2MTA3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bXBvcnRSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaApAQCAt
MTksMjYgKzE5LDIwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0j
aWZuZGVmIENTU0ltcG9ydFJ1bGVfaAotI2RlZmluZSBDU1NJbXBvcnRSdWxlX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBNZWRpYUxpc3Q7Ci1jbGFzcyBNZWRpYVF1
ZXJ5U2V0OwogY2xhc3MgU3R5bGVSdWxlSW1wb3J0OwogCiBjbGFzcyBDU1NJbXBvcnRSdWxlIGZp
bmFsIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q1NTSW1wb3J0
UnVsZT4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCYgcnVsZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9Ci0g
ICAgCi0gICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZSgpOwogCi0gICAgU3RyaW5nIGNzc1RleHQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlKCk7CiAKICAgICBTdHJpbmcgaHJlZigp
IGNvbnN0OwogICAgIE1lZGlhTGlzdCYgbWVkaWEoKSBjb25zdDsKQEAgLTQ3LDcgKzQxLDkgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCYsIENT
U1N0eWxlU2hlZXQqKTsKIAotICAgIENTU1J1bGU6OlR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIElNUE9SVF9SVUxFOyB9CisgICAgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSU1QT1JUX1JVTEU7IH0KKyAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSYpIGZpbmFsOwogCiAgICAg
UmVmPFN0eWxlUnVsZUltcG9ydD4gbV9pbXBvcnRSdWxlOwogICAgIG11dGFibGUgUmVmUHRyPE1l
ZGlhTGlzdD4gbV9tZWRpYUNTU09NV3JhcHBlcjsKQEAgLTU3LDUgKzUzLDMgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfUlVM
RShDU1NJbXBvcnRSdWxlLCBDU1NSdWxlOjpJTVBPUlRfUlVMRSkKLQotI2VuZGlmIC8vIENTU0lt
cG9ydFJ1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAzNDY0ZDFiY2ExNjkzYTI1
NjFlMjI2MzMxY2ExNzdmY2U0MjQ1NTk0Li4yMmFlZDQxN2EyOTM0MjMzOGJjNmQzMzkzMzQzY2Ex
NTA2NjhmZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTUyOSwxOSArMTUyOSwy
MCBAQCBWZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiBDU1NQYXJzZXI6OnBhcnNlU2l6ZXNB
dHRyaWJ1dGUoU3RyaW5nVmlldyBzdHJpbmcpCiAKIC8vIEZJWE1FKDE0MTI4OSk6IFRoZSBmb2xs
b3dpbmcgdHdvIGNvbnN0cnVjdG9ycyBhcmUgb25seSBuZWVkZWQgYmVjYXVzZSBvZiBhIGJ1ZyBp
biBNU1ZDIDIwMTMgKGFuZCBwcmlvcikuCiAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgY29kZSBh
cyBzb29uIGFzIGEgVmlzdWFsIFN0dWRpbyB1cGRhdGUgdGhhdCBmaXhlcyB0aGlzIHByb2JsZW0g
aXMgcmVsZWFzZWQuCisKIENTU1BhcnNlcjo6U291cmNlU2l6ZTo6U291cmNlU2l6ZShDU1NQYXJz
ZXI6OlNvdXJjZVNpemUmJiBvcmlnaW5hbCkKICAgICA6IGV4cHJlc3Npb24oV1RGTW92ZShvcmln
aW5hbC5leHByZXNzaW9uKSkKLSAgICAsIGxlbmd0aChvcmlnaW5hbC5sZW5ndGgpCisgICAgLCBs
ZW5ndGgoV1RGTW92ZShvcmlnaW5hbC5sZW5ndGgpKQogewogfQogCi1DU1NQYXJzZXI6OlNvdXJj
ZVNpemU6OlNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgb3JpZ0V4
cCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKG9y
aWdFeHApKQorQ1NTUGFyc2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHBy
ZXNzaW9uJiYgZXhwcmVzc2lvbiwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlKQorICAgIDogZXhwcmVz
c2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQogICAgICwgbGVuZ3RoKFdURk1vdmUodmFsdWUpKQog
ewogfQogCi1DU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NTUGFyc2VyOjpzb3VyY2VTaXplKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIENTU1BhcnNlclZhbHVlJiBw
YXJzZXJWYWx1ZSkKK0NTU1BhcnNlcjo6U291cmNlU2l6ZSBDU1NQYXJzZXI6OnNvdXJjZVNpemUo
TWVkaWFRdWVyeUV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBDU1NQYXJzZXJWYWx1ZSYgcGFyc2Vy
VmFsdWUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKICAgICBpZiAoaXNDYWxjdWxh
dGlvbihwYXJzZXJWYWx1ZSkpIHsKQEAgLTE1NTQsNyArMTU1NSw3IEBAIENTU1BhcnNlcjo6U291
cmNlU2l6ZSBDU1NQYXJzZXI6OnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlF
eHA+JiYgZXhwCiAgICAgZGVzdHJveShwYXJzZXJWYWx1ZSk7CiAgICAgLy8gRklYTUU6IENhbGxp
bmcgdGhlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgaGVyZSB0byB3b3JrIGFyb3VuZCBhbiBNU1ZD
IGJ1Zy4KICAgICAvLyBGb3Igb3RoZXIgY29tcGlsZXJzLCB3ZSBkaWQgbm90IG5lZWQgdG8gZGVm
aW5lIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIHdlIGNvdWxkIHVzZSBhZ2dyZWdhdGUgaW5pdGlhbGl6
YXRpb24gc3ludGF4LgotICAgIHJldHVybiBTb3VyY2VTaXplKFdURk1vdmUoZXhwcmVzc2lvbiks
IFdURk1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gU291cmNlU2l6ZShXVEZNb3ZlKGV4cHJlc3Np
b24pLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZp
bHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IFBhcnNlZFByb3BlcnR5VmVjdG9y
JiBpbnB1dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVfdCYgdW51c2Vk
RW50cmllcywgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCmluZGV4IDMwYWRhODUxZWM5NWI5MzU3YjFhMjRlYjgzMzVjNWNhMjYyMGIyZDEuLjEy
YzhlNmFlYzZkYWIzYzVlYjJlNGVmMDUzMjU3MzYxY2E3YzU4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0YWJsZVN0eWxlUHJv
cGVydGllczsKLWNsYXNzIE1lZGlhUXVlcnlFeHA7CitjbGFzcyBNZWRpYVF1ZXJ5RXhwcmVzc2lv
bjsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwog
Y2xhc3MgU1ZHQ29sb3I7CkBAIC0xNjgsMTQgKzE2OCwxNCBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUJhY2tncm91bmRDb2xvcigpOwogCiAgICAgc3RydWN0
IFNvdXJjZVNpemUgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4gZXhw
cmVzc2lvbjsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBsZW5ndGg7CisgICAgICAgIE1lZGlh
UXVlcnlFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgICAgIFJlZjxDU1NWYWx1ZT4gbGVuZ3Ro
OwogCiAgICAgICAgIFNvdXJjZVNpemUoU291cmNlU2l6ZSYmKTsKLSAgICAgICAgU291cmNlU2l6
ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiwgUmVmUHRyPENTU1ZhbHVlPiYmKTsK
KyAgICAgICAgU291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+
JiYpOwogICAgIH07CiAgICAgVmVjdG9yPFNvdXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUo
U3RyaW5nVmlldyk7Ci0gICAgU291cmNlU2l6ZSBzb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXhwPiYmLCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFNvdXJjZVNpemUgc291cmNl
U2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAgYm9v
bCBwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAppbmRleCA5Y2MwOGRlYjdl
MDk3YzBjOWYxZmVhODM5MzEwMzEzNjY4YjViY2QyLi5jNDhlOWM5YjlhMDE4NjBmNzQ3YzYwZjRk
ZTIxNmE5MDkwMTBhYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRS
dWxlU2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3Bw
CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgRG9jdW1lbnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0CiAgICAgLy8gbmVlZHMg
dG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9y
ZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIGZvciAoYXV0byYgY3Nz
U2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5kaXNhYmxl
ZCgpKTsKLSAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5l
dmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKQorICAgICAgICBpZiAoY3Nz
U2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtZWRpdW0tPmV2YWx1YXRlKCpjc3NTaGVldC0+bWVk
aWFRdWVyaWVzKCksIHJlc29sdmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBt
X2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldC0+Y29udGVudHMoKSwgKm1l
ZGl1bSwgcmVzb2x2ZXIpOwogICAgICAgICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RG
cm9tU3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFGZWF0dXJlTmFtZXMuY3BwCmluZGV4IDg1YTJkYjU2ZGY1YjRkZjJjNTg2NDkzNGY2ZjJl
NjczNGQ2MDJjZTEuLjE4NDMwYzkwYzE0ZjdlMWIzNmRiZDM5YWUxMGIzOTM5NGNiMzc2YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcApAQCAtMzAsOCArMzAsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzIHsKIAot
I2RlZmluZSBERUZJTkVfTUVESUFGRUFUVVJFX0dMT0JBTChuYW1lLCBzdHIpIFwKLSAgICBERUZJ
TkVfR0xPQkFMKEF0b21pY1N0cmluZywgbmFtZSMjTWVkaWFGZWF0dXJlLCBzdHIpCisjZGVmaW5l
IERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMKG5hbWUsIHN0cmluZykgREVGSU5FX0dMT0JBTChB
dG9taWNTdHJpbmcsIG5hbWUpCiBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZF
QVRVUkUoREVGSU5FX01FRElBRkVBVFVSRV9HTE9CQUwpCiAjdW5kZWYgREVGSU5FX01FRElBRkVB
VFVSRV9HTE9CQUwKIApAQCAtMzksMTAgKzM4LDkgQEAgdm9pZCBpbml0KCkKIHsKICAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgLy8g
VXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KLQorICAgICAgICAv
LyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgogICAgICAgICBB
dG9taWNTdHJpbmc6OmluaXQoKTsKLSNkZWZpbmUgSU5JVElBTElaRV9HTE9CQUwobmFtZSwgc3Ry
KSBuZXcgKE5vdE51bGwsICh2b2lkKikmbmFtZSMjTWVkaWFGZWF0dXJlKSBBdG9taWNTdHJpbmco
c3RyLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyNkZWZpbmUgSU5JVElB
TElaRV9HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKE5vdE51bGwsICh2b2lkKikmbmFtZSkgQXRv
bWljU3RyaW5nKHN0cmluZywgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShJTklUSUFM
SVpFX0dMT0JBTCkKICN1bmRlZiBJTklUSUFMSVpFX0dMT0JBTAogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFt
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5oCmluZGV4IGI1Y2Ey
NTBkNzE3ZDIxMjRjNzNkZjZmMTYyZjRjMDNhNjUwYzMwZjkuLjYyOTcxYzAyZmYyY2NjZGZhMzRm
MjU1NjA3ZWM5NDhkNTQwMTkwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YUZlYXR1cmVOYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1l
cy5oCkBAIC0xNyw4MCArMTcsNzggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICoKICAqLwotI2lmbmRlZiBNZWRpYUZlYXR1cmVOYW1lc19oCi0jZGVmaW5lIE1lZGlhRmVhdHVy
ZU5hbWVzX2gKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI3ByYWdtYSBv
bmNlCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFt
ZXMgeworI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKFZJ
RVdfTU9ERV9DU1NfTUVESUEpCi0jZGVmaW5lIENTU19NRURJQVFVRVJZX1ZJRVdfTU9ERShtYWNy
bykgbWFjcm8odmlld19tb2RlLCAiLXdlYmtpdC12aWV3LW1vZGUiKQorI2RlZmluZSBDU1NfTUVE
SUFRVUVSWV9WSUVXX01PREUobWFjcm8pIG1hY3JvKHZpZXdNb2RlLCAiLXdlYmtpdC12aWV3LW1v
ZGUiKQogI2Vsc2UKICNkZWZpbmUgQ1NTX01FRElBUVVFUllfVklFV19NT0RFKG1hY3JvKQogI2Vu
ZGlmCiAKICNkZWZpbmUgQ1NTX01FRElBUVVFUllfTkFNRVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJF
KG1hY3JvKSBcCi0gICAgbWFjcm8oYW55X2hvdmVyLCAiYW55LWhvdmVyIikgXAotICAgIG1hY3Jv
KGFueV9wb2ludGVyLCAiYW55LXBvaW50ZXIiKSBcCisgICAgbWFjcm8oYW5pbWF0aW9uLCAiLXdl
YmtpdC1hbmltYXRpb24iKSBcCisgICAgbWFjcm8oYW55SG92ZXIsICJhbnktaG92ZXIiKSBcCisg
ICAgbWFjcm8oYW55UG9pbnRlciwgImFueS1wb2ludGVyIikgXAorICAgIG1hY3JvKGFzcGVjdFJh
dGlvLCAiYXNwZWN0LXJhdGlvIikgXAogICAgIG1hY3JvKGNvbG9yLCAiY29sb3IiKSBcCi0gICAg
bWFjcm8oY29sb3JfaW5kZXgsICJjb2xvci1pbmRleCIpIFwKLSAgICBtYWNybyhjb2xvcl9nYW11
dCwgImNvbG9yLWdhbXV0IikgXAorICAgIG1hY3JvKGNvbG9yR2FtdXQsICJjb2xvci1nYW11dCIp
IFwKKyAgICBtYWNybyhjb2xvckluZGV4LCAiY29sb3ItaW5kZXgiKSBcCisgICAgbWFjcm8oZGV2
aWNlQXNwZWN0UmF0aW8sICJkZXZpY2UtYXNwZWN0LXJhdGlvIikgXAorICAgIG1hY3JvKGRldmlj
ZUhlaWdodCwgImRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8oZGV2aWNlUGl4ZWxSYXRpbywg
Ii13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKGRldmljZVdpZHRoLCAi
ZGV2aWNlLXdpZHRoIikgXAogICAgIG1hY3JvKGdyaWQsICJncmlkIikgXAotICAgIG1hY3JvKG1v
bm9jaHJvbWUsICJtb25vY2hyb21lIikgXAogICAgIG1hY3JvKGhlaWdodCwgImhlaWdodCIpIFwK
ICAgICBtYWNybyhob3ZlciwgImhvdmVyIikgXAotICAgIG1hY3JvKHdpZHRoLCAid2lkdGgiKSBc
CisgICAgbWFjcm8oaW52ZXJ0ZWRDb2xvcnMsICJpbnZlcnRlZC1jb2xvcnMiKSBcCisgICAgbWFj
cm8obWF4QXNwZWN0UmF0aW8sICJtYXgtYXNwZWN0LXJhdGlvIikgXAorICAgIG1hY3JvKG1heENv
bG9yLCAibWF4LWNvbG9yIikgXAorICAgIG1hY3JvKG1heENvbG9ySW5kZXgsICJtYXgtY29sb3It
aW5kZXgiKSBcCisgICAgbWFjcm8obWF4RGV2aWNlQXNwZWN0UmF0aW8sICJtYXgtZGV2aWNlLWFz
cGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtYXhEZXZpY2VIZWlnaHQsICJtYXgtZGV2aWNlLWhl
aWdodCIpIFwKKyAgICBtYWNybyhtYXhEZXZpY2VQaXhlbFJhdGlvLCAiLXdlYmtpdC1tYXgtZGV2
aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKG1heERldmljZVdpZHRoLCAibWF4LWRldmlj
ZS13aWR0aCIpIFwKKyAgICBtYWNybyhtYXhIZWlnaHQsICJtYXgtaGVpZ2h0IikgXAorICAgIG1h
Y3JvKG1heE1vbm9jaHJvbWUsICJtYXgtbW9ub2Nocm9tZSIpIFwKKyAgICBtYWNybyhtYXhSZXNv
bHV0aW9uLCAibWF4LXJlc29sdXRpb24iKSBcCisgICAgbWFjcm8obWF4V2lkdGgsICJtYXgtd2lk
dGgiKSBcCisgICAgbWFjcm8obWluQXNwZWN0UmF0aW8sICJtaW4tYXNwZWN0LXJhdGlvIikgXAor
ICAgIG1hY3JvKG1pbkNvbG9yLCAibWluLWNvbG9yIikgXAorICAgIG1hY3JvKG1pbkNvbG9ySW5k
ZXgsICJtaW4tY29sb3ItaW5kZXgiKSBcCisgICAgbWFjcm8obWluRGV2aWNlQXNwZWN0UmF0aW8s
ICJtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtaW5EZXZpY2VIZWlnaHQs
ICJtaW4tZGV2aWNlLWhlaWdodCIpIFwKKyAgICBtYWNybyhtaW5EZXZpY2VQaXhlbFJhdGlvLCAi
LXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKG1pbkRldmljZVdp
ZHRoLCAibWluLWRldmljZS13aWR0aCIpIFwKKyAgICBtYWNybyhtaW5IZWlnaHQsICJtaW4taGVp
Z2h0IikgXAorICAgIG1hY3JvKG1pbk1vbm9jaHJvbWUsICJtaW4tbW9ub2Nocm9tZSIpIFwKKyAg
ICBtYWNybyhtaW5SZXNvbHV0aW9uLCAibWluLXJlc29sdXRpb24iKSBcCisgICAgbWFjcm8obWlu
V2lkdGgsICJtaW4td2lkdGgiKSBcCisgICAgbWFjcm8obW9ub2Nocm9tZSwgIm1vbm9jaHJvbWUi
KSBcCiAgICAgbWFjcm8ob3JpZW50YXRpb24sICJvcmllbnRhdGlvbiIpIFwKLSAgICBtYWNybyhh
c3BlY3RfcmF0aW8sICJhc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX2FzcGVjdF9y
YXRpbywgImRldmljZS1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX3BpeGVsX3Jh
dGlvLCAiLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX2hl
aWdodCwgImRldmljZS1oZWlnaHQiKSBcCi0gICAgbWFjcm8oZGV2aWNlX3dpZHRoLCAiZGV2aWNl
LXdpZHRoIikgXAotICAgIG1hY3JvKGludmVydGVkX2NvbG9ycywgImludmVydGVkLWNvbG9ycyIp
IFwKLSAgICBtYWNybyhtYXhfY29sb3IsICJtYXgtY29sb3IiKSBcCi0gICAgbWFjcm8obWF4X2Nv
bG9yX2luZGV4LCAibWF4LWNvbG9yLWluZGV4IikgXAotICAgIG1hY3JvKG1heF9hc3BlY3RfcmF0
aW8sICJtYXgtYXNwZWN0LXJhdGlvIikgXAotICAgIG1hY3JvKG1heF9kZXZpY2VfYXNwZWN0X3Jh
dGlvLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8obWF4X2RldmljZV9w
aXhlbF9yYXRpbywgIi13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbyIpIFwKLSAgICBtYWNy
byhtYXhfZGV2aWNlX2hlaWdodCwgIm1heC1kZXZpY2UtaGVpZ2h0IikgXAotICAgIG1hY3JvKG1h
eF9kZXZpY2Vfd2lkdGgsICJtYXgtZGV2aWNlLXdpZHRoIikgXAotICAgIG1hY3JvKG1heF9oZWln
aHQsICJtYXgtaGVpZ2h0IikgXAotICAgIG1hY3JvKG1heF9tb25vY2hyb21lLCAibWF4LW1vbm9j
aHJvbWUiKSBcCi0gICAgbWFjcm8obWF4X3dpZHRoLCAibWF4LXdpZHRoIikgXAotICAgIG1hY3Jv
KG1heF9yZXNvbHV0aW9uLCAibWF4LXJlc29sdXRpb24iKSBcCi0gICAgbWFjcm8obWluX2NvbG9y
LCAibWluLWNvbG9yIikgXAotICAgIG1hY3JvKG1pbl9jb2xvcl9pbmRleCwgIm1pbi1jb2xvci1p
bmRleCIpIFwKLSAgICBtYWNybyhtaW5fYXNwZWN0X3JhdGlvLCAibWluLWFzcGVjdC1yYXRpbyIp
IFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX2FzcGVjdF9yYXRpbywgIm1pbi1kZXZpY2UtYXNwZWN0
LXJhdGlvIikgXAotICAgIG1hY3JvKG1pbl9kZXZpY2VfcGl4ZWxfcmF0aW8sICItd2Via2l0LW1p
bi1kZXZpY2UtcGl4ZWwtcmF0aW8iKSBcCi0gICAgbWFjcm8obWluX2RldmljZV9oZWlnaHQsICJt
aW4tZGV2aWNlLWhlaWdodCIpIFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX3dpZHRoLCAibWluLWRl
dmljZS13aWR0aCIpIFwKLSAgICBtYWNybyhtaW5faGVpZ2h0LCAibWluLWhlaWdodCIpIFwKLSAg
ICBtYWNybyhtaW5fbW9ub2Nocm9tZSwgIm1pbi1tb25vY2hyb21lIikgXAotICAgIG1hY3JvKG1p
bl93aWR0aCwgIm1pbi13aWR0aCIpIFwKLSAgICBtYWNybyhtaW5fcmVzb2x1dGlvbiwgIm1pbi1y
ZXNvbHV0aW9uIikgXAogICAgIG1hY3JvKHBvaW50ZXIsICJwb2ludGVyIikgXAogICAgIG1hY3Jv
KHJlc29sdXRpb24sICJyZXNvbHV0aW9uIikgXAotICAgIG1hY3JvKHRyYW5zZm9ybV8yZCwgIi13
ZWJraXQtdHJhbnNmb3JtLTJkIikgXAotICAgIG1hY3JvKHRyYW5zZm9ybV8zZCwgIi13ZWJraXQt
dHJhbnNmb3JtLTNkIikgXAorICAgIG1hY3JvKHRyYW5zZm9ybTJkLCAiLXdlYmtpdC10cmFuc2Zv
cm0tMmQiKSBcCisgICAgbWFjcm8odHJhbnNmb3JtM2QsICItd2Via2l0LXRyYW5zZm9ybS0zZCIp
IFwKICAgICBtYWNybyh0cmFuc2l0aW9uLCAiLXdlYmtpdC10cmFuc2l0aW9uIikgXAotICAgIG1h
Y3JvKGFuaW1hdGlvbiwgIi13ZWJraXQtYW5pbWF0aW9uIikgXAotICAgIG1hY3JvKHZpZGVvX3Bs
YXlhYmxlX2lubGluZSwgIi13ZWJraXQtdmlkZW8tcGxheWFibGUtaW5saW5lIikgXAorICAgIG1h
Y3JvKHZpZGVvUGxheWFibGVJbmxpbmUsICItd2Via2l0LXZpZGVvLXBsYXlhYmxlLWlubGluZSIp
IFwKKyAgICBtYWNybyh3aWR0aCwgIndpZHRoIikgXAogICAgIENTU19NRURJQVFVRVJZX1ZJRVdf
TU9ERShtYWNybykKIAogLy8gZW5kIG9mIG1hY3JvCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBNZWRpYUZlYXR1cmVOYW1lcyB7CisKICNpZm5kZWYgQ1NTX01FRElBUVVFUllfTkFN
RVNfSElERV9HTE9CQUxTCi0gICAgI2RlZmluZSBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJF
KG5hbWUsIHN0cikgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lIyNNZWRpYUZlYXR1cmU7
CisjZGVmaW5lIENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUobmFtZSwgc3RyaW5nKSBleHRl
cm4gY29uc3QgQXRvbWljU3RyaW5nIG5hbWU7CiAgICAgQ1NTX01FRElBUVVFUllfTkFNRVNfRk9S
X0VBQ0hfTUVESUFGRUFUVVJFKENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUpCi0gICAgI3Vu
ZGVmIENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUKKyN1bmRlZiBDU1NfTUVESUFRVUVSWV9O
QU1FU19ERUNMQVJFCiAjZW5kaWYKIAotICAgICAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIGlu
aXQoKTsKIAotICAgIH0gLy8gbmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzCit9IC8vIG5hbWVz
cGFjZSBNZWRpYUZlYXR1cmVOYW1lcwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gTWVkaWFGZWF0dXJlTmFtZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCAwMWY4
ODYyNzc5OTQ2Njk4NWJlZGJlZDc1MjU5YzNlZjFkNzNhMjY3Li5iOTIzNTgzMzVlOTI4YTdkZjMz
NTQ0MjVhNTE4ZTg1NTFmOWMxZmI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMTcs
NiArMTcsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKIApA
QCAtMjYsOSArMjcsOSBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlh
UXVlcnkuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNzQsMjggKzc1LDI3IEBAIE1lZGlh
UXVlcnlTZXQ6Ok1lZGlhUXVlcnlTZXQoY29uc3QgU3RyaW5nJiBtZWRpYVN0cmluZywgYm9vbCBm
YWxsYmFja1RvRGVzY3JpcHRvCiAgICAgLCBtX2xhc3RMaW5lKDApCiB7CiAgICAgYm9vbCBzdWNj
ZXNzID0gcGFyc2UobWVkaWFTdHJpbmcpOworCiAgICAgLy8gRklYTUU6IHBhcnNpbmcgY2FuIGZh
aWwuIFRoZSBwcm9ibGVtIHdpdGggZmFpbGluZyBjb25zdHJ1Y3RvciBpcyB0aGF0CiAgICAgLy8g
d2Ugd291bGQgbmVlZCBhZGRpdGlvbmFsIGZsYWcgc2F5aW5nIE1lZGlhTGlzdCBpcyBub3QgdmFs
aWQKICAgICAvLyBQYXJzZSBjYW4gZmFpbCBvbmx5IHdoZW4gZmFsbGJhY2tUb0Rlc2NyaXB0b3Ig
PT0gZmFsc2UsIGkuZSB3aGVuIEhUTUw0IG1lZGlhIGRlc2NyaXB0b3IKICAgICAvLyBmb3J3YXJk
LWNvbXBhdGlibGUgc3ludGF4IGlzIG5vdCBpbiB1c2UuCiAgICAgLy8gRE9NSW1wbGVtZW50YXRp
b25DU1Mgc2VlbXMgdG8gbWFuZGF0ZSB0aGF0IG1lZGlhIGRlc2NyaXB0b3JzIGFyZSB1c2VkCi0g
ICAgLy8gZm9yIGJvdGggaHRtbCBhbmQgc3ZnLCBldmVuIHRob3VnaCBzdmc6c3R5bGUgZG9lc24n
dCB1c2UgbWVkaWEgZGVzY3JpcHRvcnMKKyAgICAvLyBmb3IgYm90aCBIVE1MIGFuZCBTVkcsIGV2
ZW4gdGhvdWdoIHN2ZzpzdHlsZSBkb2Vzbid0IHVzZSBtZWRpYSBkZXNjcmlwdG9ycwogICAgIC8v
IEN1cnJlbnRseSB0aGUgb25seSBwbGFjZXMgd2hlcmUgcGFyc2luZyBjYW4gZmFpbCBhcmUKICAg
ICAvLyBjcmVhdGluZyA8c3ZnOnN0eWxlPiwgY3JlYXRpbmcgY3NzIG1lZGlhIC8gaW1wb3J0IHJ1
bGVzIGZyb20ganMKLSAgICAKKwogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgbWFrZSBtdWNo
IHNlbnNlLgogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcGFyc2UoImludmFsaWQiKTsKIH0K
IAogTWVkaWFRdWVyeVNldDo6TWVkaWFRdWVyeVNldChjb25zdCBNZWRpYVF1ZXJ5U2V0JiBvKQot
ICAgIDogUmVmQ291bnRlZDxNZWRpYVF1ZXJ5U2V0PigpCisgICAgOiBSZWZDb3VudGVkKCkKICAg
ICAsIG1fZmFsbGJhY2tUb0Rlc2NyaXB0b3Ioby5tX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQogICAg
ICwgbV9sYXN0TGluZShvLm1fbGFzdExpbmUpCi0gICAgLCBtX3F1ZXJpZXMoby5tX3F1ZXJpZXMu
c2l6ZSgpKQorICAgICwgbV9xdWVyaWVzKG8ubV9xdWVyaWVzKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcXVlcmllc1tp
XSA9IG8ubV9xdWVyaWVzW2ldLT5jb3B5KCk7CiB9CiAKIE1lZGlhUXVlcnlTZXQ6On5NZWRpYVF1
ZXJ5U2V0KCkKQEAgLTEwOSw0NiArMTA5LDUxIEBAIHN0YXRpYyBTdHJpbmcgcGFyc2VNZWRpYURl
c2NyaXB0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgLy8gVVMgQVNDSUkgbGV0dGVyIFth
LXpBLVpdIChJU08gMTA2NDYgaGV4IDQxLTVhLCA2MS03YSksIGRpZ2l0IFswLTldIChoZXggMzAt
MzkpLAogICAgIC8vIG9yIGh5cGhlbiAoaGV4IDJkKS4iCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYyA9IHN0cmluZ1tpXTsKLSAgICAg
ICAgaWYgKCEgKChjID49ICdhJyAmJiBjIDw9ICd6JykKLSAgICAgICAgICAgICAgIHx8IChjID49
ICdBJyAmJiBjIDw9ICdaJykKLSAgICAgICAgICAgICAgIHx8IChjID49ICcxJyAmJiBjIDw9ICc5
JykKLSAgICAgICAgICAgICAgIHx8IChjID09ICctJykpKQorICAgIHVuc2lnbmVkIGk7CisgICAg
Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0g
c3RyaW5nW2ldOworICAgICAgICBpZiAoIShpc0FTQ0lJQWxwaGFudW1lcmljKGNoYXJhY3Rlcikg
fHwgY2hhcmFjdGVyID09ICctJykpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0
dXJuIHN0cmluZy5sZWZ0KGkpOwogfQogCitPcHRpb25hbDxNZWRpYVF1ZXJ5PiBNZWRpYVF1ZXJ5
U2V0OjppbnRlcm5hbFBhcnNlKENTU1BhcnNlciYgcGFyc2VyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
U3RyaW5nKQoreworICAgIGlmIChhdXRvIHF1ZXJ5ID0gcGFyc2VyLnBhcnNlTWVkaWFRdWVyeShx
dWVyeVN0cmluZykpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKCpxdWVyeSk7CisgICAgaWYgKCFt
X2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1
cm4gTWVkaWFRdWVyeSB7IE1lZGlhUXVlcnk6Ok5vbmUsIHBhcnNlTWVkaWFEZXNjcmlwdG9yKHF1
ZXJ5U3RyaW5nKSwgVmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiB7IH0gfTsKK30KKworT3B0
aW9uYWw8TWVkaWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZShjb25zdCBTdHJp
bmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7
CisgICAgcmV0dXJuIGludGVybmFsUGFyc2UocGFyc2VyLCBxdWVyeVN0cmluZyk7Cit9CisKIGJv
b2wgTWVkaWFRdWVyeVNldDo6cGFyc2UoY29uc3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIHsKICAg
ICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1vZGUpOwogICAgIAotICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+IHJlc3VsdDsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeT4g
cmVzdWx0OwogICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CiAgICAgbWVkaWFTdHJpbmcuc3BsaXQo
JywnLCBsaXN0KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsr
aSkgewotICAgICAgICBTdHJpbmcgbWVkaXVtID0gbGlzdFtpXS5zdHJpcFdoaXRlU3BhY2UoKTsK
KyAgICBmb3IgKGF1dG8mIGxpc3RTdHJpbmcgOiBsaXN0KSB7CisgICAgICAgIFN0cmluZyBtZWRp
dW0gPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlzdFN0cmluZyk7CiAgICAg
ICAgIGlmIChtZWRpdW0uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmFsbGJhY2tU
b0Rlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+
IG1lZGlhUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5KG1lZGl1bSk7Ci0gICAgICAgIGlm
ICghbWVkaWFRdWVyeSkgewotICAgICAgICAgICAgaWYgKCFtX2ZhbGxiYWNrVG9EZXNjcmlwdG9y
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFN0cmluZyBtZWRp
YURlc2NyaXB0b3IgPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihtZWRpdW0pOwotICAgICAgICAgICAg
aWYgKG1lZGlhRGVzY3JpcHRvci5pc051bGwoKSkKKyAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNr
VG9EZXNjcmlwdG9yKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWVk
aWFRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwg
bWVkaWFEZXNjcmlwdG9yLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChhdXRvIHF1ZXJ5
ID0gaW50ZXJuYWxQYXJzZShwYXJzZXIsIG1lZGl1bSkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV1RGTW92ZShxdWVyeS52YWx1ZSgpKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUobWVkaWFRdWVyeSkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vICIsLCwsIiBmYWxscyBzdHJhaWdodCB0
aHJvdWdoLCBidXQgaXMgbm90IHZhbGlkIHVubGVzcyBmYWxsYmFjawogICAgIGlmICghbV9mYWxs
YmFja1RvRGVzY3JpcHRvciAmJiBsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBTdHJpbmcgc3Ry
aXBwZWRNZWRpYVN0cmluZyA9IG1lZGlhU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAg
ICBTdHJpbmcgc3RyaXBwZWRNZWRpYVN0cmluZyA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhtZWRpYVN0cmluZyk7CiAgICAgICAgIGlmICghc3RyaXBwZWRNZWRpYVN0cmluZy5p
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTU4LDQwICsx
NjMsMjQgQEAgYm9vbCBNZWRpYVF1ZXJ5U2V0OjpwYXJzZShjb25zdCBTdHJpbmcmIG1lZGlhU3Ry
aW5nKQogCiBib29sIE1lZGlhUXVlcnlTZXQ6OmFkZChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5n
KQogewotICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VkUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5
KHF1ZXJ5U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZFF1ZXJ5ICYmIG1fZmFsbGJhY2tUb0Rlc2Ny
aXB0b3IpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9IHBhcnNlTWVkaWFEZXNjcmlwdG9yKHF1
ZXJ5U3RyaW5nKTsKLSAgICAgICAgaWYgKCFtZWRpdW0uaXNOdWxsKCkpCi0gICAgICAgICAgICBw
YXJzZWRRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9u
ZSwgbWVkaXVtLCBudWxscHRyKTsKLSAgICB9CisgICAgYXV0byBwYXJzZWRRdWVyeSA9IGludGVy
bmFsUGFyc2UocXVlcnlTdHJpbmcpOwogICAgIGlmICghcGFyc2VkUXVlcnkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fcXVlcmllcy5hcHBlbmQoV1RGTW92ZShwYXJzZWRRdWVyeSkp
OworICAgIG1fcXVlcmllcy5hcHBlbmQoV1RGTW92ZShwYXJzZWRRdWVyeS52YWx1ZSgpKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeVNldDo6cmVtb3ZlKGNvbnN0IFN0
cmluZyYgcXVlcnlTdHJpbmdUb1JlbW92ZSkKK2Jvb2wgTWVkaWFRdWVyeVNldDo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgcXVlcnlTdHJpbmcpCiB7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJp
Y3RNb2RlKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBwYXJzZWRRdWVyeSA9
IHBhcnNlci5wYXJzZU1lZGlhUXVlcnkocXVlcnlTdHJpbmdUb1JlbW92ZSk7Ci0gICAgaWYgKCFw
YXJzZWRRdWVyeSAmJiBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKSB7Ci0gICAgICAgIFN0cmluZyBt
ZWRpdW0gPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZ1RvUmVtb3ZlKTsKLSAgICAg
ICAgaWYgKCFtZWRpdW0uaXNOdWxsKCkpCi0gICAgICAgICAgICBwYXJzZWRRdWVyeSA9IHN0ZDo6
bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwgbWVkaXVtLCBudWxscHRy
KTsKLSAgICB9CisgICAgYXV0byBwYXJzZWRRdWVyeSA9IGludGVybmFsUGFyc2UocXVlcnlTdHJp
bmcpOwogICAgIGlmICghcGFyc2VkUXVlcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
ICAgICByZXR1cm4gbV9xdWVyaWVzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZwYXJzZWRRdWVyeV0o
YXV0byYgcXVlcnkpIHsKLSAgICAgICAgcmV0dXJuICpxdWVyeSA9PSAqcGFyc2VkUXVlcnk7Cisg
ICAgICAgIHJldHVybiBxdWVyeSA9PSBwYXJzZWRRdWVyeS52YWx1ZSgpOwogICAgIH0pOwogfQog
Ci12b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnk+IG1lZGlhUXVlcnkpCit2b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoTWVk
aWFRdWVyeSYmIG1lZGlhUXVlcnkpCiB7CiAgICAgbV9xdWVyaWVzLmFwcGVuZChXVEZNb3ZlKG1l
ZGlhUXVlcnkpKTsKIH0KQEAgLTE5OSwxNCArMTg4LDEyIEBAIHZvaWQgTWVkaWFRdWVyeVNldDo6
YWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gbWVkaWFRdWVyeSkKIFN0
cmluZyBNZWRpYVF1ZXJ5U2V0OjptZWRpYVRleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxk
ZXIgdGV4dDsKLSAgICAKLSAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcXVlcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWZpcnN0KQor
ICAgIGJvb2wgbmVlZENvbW1hID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBxdWVyeSA6IG1fcXVl
cmllcykgeworICAgICAgICBpZiAobmVlZENvbW1hKQogICAgICAgICAgICAgdGV4dC5hcHBlbmRM
aXRlcmFsKCIsICIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwot
ICAgICAgICB0ZXh0LmFwcGVuZChtX3F1ZXJpZXNbaV0tPmNzc1RleHQoKSk7CisgICAgICAgIHRl
eHQuYXBwZW5kKHF1ZXJ5LmNzc1RleHQoKSk7CisgICAgICAgIG5lZWRDb21tYSA9IHRydWU7CiAg
ICAgfQogICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7CiB9CkBAIC0yMTQsMTMgKzIwMSwxMSBA
QCBTdHJpbmcgTWVkaWFRdWVyeVNldDo6bWVkaWFUZXh0KCkgY29uc3QKIE1lZGlhTGlzdDo6TWVk
aWFMaXN0KE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcywgQ1NTU3R5bGVTaGVldCogcGFyZW50
U2hlZXQpCiAgICAgOiBtX21lZGlhUXVlcmllcyhtZWRpYVF1ZXJpZXMpCiAgICAgLCBtX3BhcmVu
dFN0eWxlU2hlZXQocGFyZW50U2hlZXQpCi0gICAgLCBtX3BhcmVudFJ1bGUoMCkKIHsKIH0KIAog
TWVkaWFMaXN0OjpNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCogbWVkaWFRdWVyaWVzLCBDU1NSdWxl
KiBwYXJlbnRSdWxlKQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVkaWFRdWVyaWVzKQotICAgICwg
bV9wYXJlbnRTdHlsZVNoZWV0KDApCiAgICAgLCBtX3BhcmVudFJ1bGUocGFyZW50UnVsZSkKIHsK
IH0KQEAgLTIzMiw5ICsyMTcsNyBAQCBNZWRpYUxpc3Q6On5NZWRpYUxpc3QoKQogdm9pZCBNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3Bl
KG1fcGFyZW50UnVsZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cGFy
c2UodmFsdWUpOwotICAgIGlmICghc3VjY2VzcykgeworICAgIGlmICghbV9tZWRpYVF1ZXJpZXMt
PnBhcnNlKHZhbHVlKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNDYsNyArMjI5LDcgQEAgU3RyaW5nIE1lZGlhTGlzdDo6aXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QKIHsKICAgICBhdXRvJiBxdWVyaWVzID0gbV9tZWRpYVF1ZXJpZXMt
PnF1ZXJ5VmVjdG9yKCk7CiAgICAgaWYgKGluZGV4IDwgcXVlcmllcy5zaXplKCkpCi0gICAgICAg
IHJldHVybiBxdWVyaWVzW2luZGV4XS0+Y3NzVGV4dCgpOworICAgICAgICByZXR1cm4gcXVlcmll
c1tpbmRleF0uY3NzVGV4dCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtMjg0LDEx
ICsyNjcsOSBAQCB2b2lkIE1lZGlhTGlzdDo6cmVhdHRhY2goTWVkaWFRdWVyeVNldCogbWVkaWFR
dWVyaWVzKQogfQogCiAjaWYgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi1zdGF0aWMg
dm9pZCBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHNlcmlhbGl6ZWRFeHByZXNzaW9uLCBjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBBU1NFUlQodmFs
dWUpOwogCitzdGF0aWMgdm9pZCBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHNlcmlhbGl6ZWRFeHByZXNzaW9uLCBj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCit7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gbWVkaWFRdWVyeU1lc3NhZ2UoQVNDSUlMaXRlcmFsKCJDb25zaWRlciB1c2lu
ZyAnZHBweCcgdW5pdHMgaW5zdGVhZCBvZiAnJXJlcGxhY2VtZW50VW5pdHMlJywgYXMgaW4gQ1NT
ICclcmVwbGFjZW1lbnRVbml0cyUnIG1lYW5zIGRvdHMtcGVyLUNTUy0lbGVuZ3RoVW5pdCUsIG5v
dCBkb3RzLXBlci1waHlzaWNhbC0lbGVuZ3RoVW5pdCUsIHNvIGRvZXMgbm90IGNvcnJlc3BvbmQg
dG8gdGhlIGFjdHVhbCAnJXJlcGxhY2VtZW50VW5pdHMlJyBvZiBhIHNjcmVlbi4gSW4gbWVkaWEg
cXVlcnkgZXhwcmVzc2lvbjogIikpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IG1lZGlhVmFsdWVEUEkoQVNDSUlMaXRlcmFsKCJkcGkiKSk7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gbWVkaWFWYWx1ZURQQ00oQVNDSUlMaXRlcmFsKCJkcGNtIikpOwpAQCAt
Mjk2LDE2ICsyNzcsMTYgQEAgc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdl
VG9Db25zb2xlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW4KICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBsZW5ndGhVbml0Q2VudGltZXRlcihBU0NJSUxpdGVyYWwoImNl
bnRpbWV0ZXIiKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAodmFsdWUtPmlzRG90
c1BlckluY2goKSkKLSAgICAgICAgbWVzc2FnZSA9IFN0cmluZyhtZWRpYVF1ZXJ5TWVzc2FnZSku
cmVwbGFjZSgiJXJlcGxhY2VtZW50VW5pdHMlIiwgbWVkaWFWYWx1ZURQSSkucmVwbGFjZSgiJWxl
bmd0aFVuaXQlIiwgbGVuZ3RoVW5pdEluY2gpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5pc0RvdHNQ
ZXJDZW50aW1ldGVyKCkpCi0gICAgICAgIG1lc3NhZ2UgPSBTdHJpbmcobWVkaWFRdWVyeU1lc3Nh
Z2UpLnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFsdWVEUENNKS5yZXBsYWNl
KCIlbGVuZ3RoVW5pdCUiLCBsZW5ndGhVbml0Q2VudGltZXRlcik7CisgICAgaWYgKHZhbHVlLmlz
RG90c1BlckluY2goKSkKKyAgICAgICAgbWVzc2FnZSA9IG1lZGlhUXVlcnlNZXNzYWdlLmdldCgp
LnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFsdWVEUEkpLnJlcGxhY2UoIiVs
ZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRJbmNoKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdHNQ
ZXJDZW50aW1ldGVyKCkpCisgICAgICAgIG1lc3NhZ2UgPSBtZWRpYVF1ZXJ5TWVzc2FnZS5nZXQo
KS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRpYVZhbHVlRFBDTSkucmVwbGFjZSgi
JWxlbmd0aFVuaXQlIiwgbGVuZ3RoVW5pdENlbnRpbWV0ZXIpOwogICAgIGVsc2UKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBtZXNzYWdlLmFwcGVuZChzZXJpYWxpemVkRXhw
cmVzc2lvbik7CiAKLSAgICBkb2N1bWVudC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6Q1NTLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlKTsKKyAgICBkb2N1bWVudC5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpDU1MsIE1lc3NhZ2VMZXZlbDo6RGVidWcsIG1l
c3NhZ2UpOwogfQogCiB2b2lkIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJ5U2V0KQpAQCAtMzEz
LDMxICsyOTQsMjMgQEAgdm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFRdWVyeVNldCogbWUKICAgICBpZiAoIW1lZGlhUXVl
cnlTZXQgfHwgIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBtZWRpYVF1
ZXJpZXMgPSBtZWRpYVF1ZXJ5U2V0LT5xdWVyeVZlY3RvcigpOwotICAgIGNvbnN0IHNpemVfdCBx
dWVyeUNvdW50ID0gbWVkaWFRdWVyaWVzLnNpemUoKTsKLQotICAgIGlmICghcXVlcnlDb3VudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVyeUNvdW50
OyArK2kpIHsKLSAgICAgICAgY29uc3QgTWVkaWFRdWVyeSogcXVlcnkgPSBtZWRpYVF1ZXJpZXNb
aV0uZ2V0KCk7Ci0gICAgICAgIFN0cmluZyBtZWRpYVR5cGUgPSBxdWVyeS0+bWVkaWFUeXBlKCk7
Ci0gICAgICAgIGlmICghcXVlcnktPmlnbm9yZWQoKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobWVkaWFUeXBlLCAicHJpbnQiKSkgewotICAgICAgICAgICAgYXV0byYgZXhwcmVz
c2lvbnMgPSBxdWVyeS0+ZXhwcmVzc2lvbnMoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBNZWRpYVF1ZXJ5RXhwKiBleHAgPSBleHByZXNzaW9ucy5hdChqKS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVz
b2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhfcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgp
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewotICAg
ICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgZm9yIChhdXRv
JiBxdWVyeSA6IG1lZGlhUXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCkpIHsKKyAgICAgICAgaWYgKCFx
dWVyeS5pZ25vcmVkKCkgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHF1ZXJ5Lm1l
ZGlhVHlwZSgpLCAicHJpbnQiKSkgeworICAgICAgICAgICAgYXV0byYgZXhwcmVzc2lvbnMgPSBx
dWVyeS5leHByZXNzaW9ucygpOworICAgICAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDog
ZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5tZWRpYUZlYXR1
cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbiB8fCBleHByZXNzaW9uLm1lZGlh
RmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhSZXNvbHV0aW9uIHx8IGV4cGV4cHJl
c3Npb24ubWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pblJlc291dGlvbikg
eworICAgICAgICAgICAgICAgICAgICBhdXRvKiB2YWx1ZSA9IGV4cHJlc3Npb24udmFsdWUoKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNEb3RzUGVySW5jaCgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRG90c1Bl
ckNlbnRpbWV0ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSZXNvbHV0aW9u
V2FybmluZ01lc3NhZ2VUb0NvbnNvbGUoZG9jdW1lbnQsIG1lZGlhUXVlcnlTZXQtPm1lZGlhVGV4
dCgpLCAmcHJpbWl0aXZlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJl
c29sdXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSgqZG9jdW1lbnQsIG1lZGlhUXVlcnlTZXQt
Pm1lZGlhVGV4dCgpLCBwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CisKICNl
bmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgKaW5kZXggNzMxMDM0MDBiNDY3Y2JiNGVmNWE4
MDVlNDJjOTAyMmEwZmU5MDczYS4uZDczNjVjZGIxOTcyNjQyMzRhYTRiOGM2N2I3MjlkMDI1N2Uz
ZTBhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaApAQCAtMTgsMjUgKzE4LDIzIEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIE1lZGlhTGlzdF9oCi0jZGVm
aW5lIE1lZGlhTGlzdF9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU1BhcnNlcjsKIGNsYXNzIENTU1J1bGU7CiBjbGFz
cyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBNZWRpYUxpc3Q7CiBjbGFz
cyBNZWRpYVF1ZXJ5OwogCit1c2luZyBFeGNlcHRpb25Db2RlID0gaW50OworCiBjbGFzcyBNZWRp
YVF1ZXJ5U2V0IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFRdWVyeVNldD4gewogcHVibGljOgog
ICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeVNldD4gY3JlYXRlKCkKQEAgLTUyLDE4ICs1MCwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlTZXQobWVk
aWFTdHJpbmcsIHRydWUpKTsKICAgICB9CiAgICAgfk1lZGlhUXVlcnlTZXQoKTsKLSAgICAKKwog
ICAgIGJvb2wgcGFyc2UoY29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBhZGQoY29uc3QgU3RyaW5n
Jik7CiAgICAgYm9vbCByZW1vdmUoY29uc3QgU3RyaW5nJik7CiAKLSAgICB2b2lkIGFkZE1lZGlh
UXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+KTsKKyAgICB2b2lkIGFkZE1lZGlhUXVl
cnkoTWVkaWFRdWVyeSYmKTsKKworICAgIGNvbnN0IFZlY3RvcjxNZWRpYVF1ZXJ5PiYgcXVlcnlW
ZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3F1ZXJpZXM7IH0KIAotICAgIGNvbnN0IFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+JiBxdWVyeVZlY3RvcigpIGNvbnN0IHsgcmV0dXJu
IG1fcXVlcmllczsgfQotICAgIAogICAgIGludCBsYXN0TGluZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdExpbmU7IH0KICAgICB2b2lkIHNldExhc3RMaW5lKGludCBsYXN0TGluZSkgeyBtX2xhc3RM
aW5lID0gbGFzdExpbmU7IH0KLSAgICAKKwogICAgIFN0cmluZyBtZWRpYVRleHQoKSBjb25zdDsK
IAogICAgIFJlZjxNZWRpYVF1ZXJ5U2V0PiBjb3B5KCkgY29uc3QgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBNZWRpYVF1ZXJ5U2V0KCp0aGlzKSk7IH0KQEAgLTcyLDEwICs3MCwxMyBAQCBwcml2YXRl
OgogICAgIE1lZGlhUXVlcnlTZXQoKTsKICAgICBNZWRpYVF1ZXJ5U2V0KGNvbnN0IFN0cmluZyYg
bWVkaWFRdWVyeSwgYm9vbCBmYWxsYmFja1RvRGVzY3JpcHRpb24pOwogICAgIE1lZGlhUXVlcnlT
ZXQoY29uc3QgTWVkaWFRdWVyeVNldCYpOwotICAgIAorCisgICAgT3B0aW9uYWw8TWVkaWFRdWVy
eT4gaW50ZXJuYWxQYXJzZShDU1NQYXJzZXImLCBjb25zdCBTdHJpbmcmKTsKKyAgICBPcHRpb25h
bDxNZWRpYVF1ZXJ5PiBpbnRlcm5hbFBhcnNlKGNvbnN0IFN0cmluZyYpOworCiAgICAgdW5zaWdu
ZWQgbV9mYWxsYmFja1RvRGVzY3JpcHRvciA6IDE7IC8vIHRydWUgaWYgZmFpbGVkIG1lZGlhIHF1
ZXJ5IHBhcnNpbmcgc2hvdWxkIGZhbGxiYWNrIHRvIG1lZGlhIGRlc2NyaXB0aW9uIHBhcnNpbmcu
CiAgICAgc2lnbmVkIG1fbGFzdExpbmUgOiAzMTsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnk+PiBtX3F1ZXJpZXM7CisgICAgVmVjdG9yPE1lZGlhUXVlcnk+IG1fcXVlcmll
czsKIH07CiAKIGNsYXNzIE1lZGlhTGlzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhTGlzdD4g
ewpAQCAtOTksMTEgKzEwMCwxMCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIG1lZGlhVGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLT5tZWRpYVRleHQoKTsgfQogICAgIHZvaWQgc2V0
TWVkaWFUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAotICAgIC8vIE5vdCBw
YXJ0IG9mIENTU09NLgogICAgIENTU1J1bGUqIHBhcmVudFJ1bGUoKSBjb25zdCB7IHJldHVybiBt
X3BhcmVudFJ1bGU7IH0KICAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZVNoZWV0OyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudFN0
eWxlU2hlZXQoKSB7IEFTU0VSVChtX3BhcmVudFN0eWxlU2hlZXQpOyBtX3BhcmVudFN0eWxlU2hl
ZXQgPSAwOyB9Ci0gICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVChtX3BhcmVudFJ1
bGUpOyBtX3BhcmVudFJ1bGUgPSAwOyB9CisgICAgdm9pZCBjbGVhclBhcmVudFN0eWxlU2hlZXQo
KSB7IEFTU0VSVChtX3BhcmVudFN0eWxlU2hlZXQpOyBtX3BhcmVudFN0eWxlU2hlZXQgPSBudWxs
cHRyOyB9CisgICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVChtX3BhcmVudFJ1bGUp
OyBtX3BhcmVudFJ1bGUgPSBudWxscHRyOyB9CiAgICAgY29uc3QgTWVkaWFRdWVyeVNldCogcXVl
cmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAKICAgICB2b2lk
IHJlYXR0YWNoKE1lZGlhUXVlcnlTZXQqKTsKQEAgLTExNCwxNSArMTE0LDE1IEBAIHByaXZhdGU6
CiAgICAgTWVkaWFMaXN0KE1lZGlhUXVlcnlTZXQqLCBDU1NSdWxlKiBwYXJlbnRSdWxlKTsKIAog
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKLSAgICBDU1NTdHlsZVNo
ZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQ7Ci0gICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOworICAg
IENTU1N0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldCB7IG51bGxwdHIgfTsKKyAgICBDU1NS
dWxlKiBtX3BhcmVudFJ1bGUgeyBudWxscHRyIH07CiB9OwogCiAjaWYgRU5BQkxFKFJFU09MVVRJ
T05fTUVESUFfUVVFUlkpCisKIC8vIEFkZHMgbWVzc2FnZSB0byBpbnNwZWN0b3IgY29uc29sZSB3
aGVuZXZlciBkcGkgb3IgZHBjbSB2YWx1ZXMgYXJlIHVzZWQgZm9yICJzY3JlZW4iIG1lZGlhLgog
dm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiwgY29uc3QgTWVk
aWFRdWVyeVNldCopOworCiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeS5jcHAKaW5kZXggNGEyNWExMWI5YmQ2NmUyYTYzMzJkNGNiODBmMzRi
NTU3NzRiNDVmMS4uMTNkNzc1Njk2ZTQ3YTk1MDM5M2E5ZmUzZTg3ZjZmYzIzMzk2OGY4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnkuaCIKIAotI2luY2x1ZGUgIk1lZGlhUXVlcnlF
eHAuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTM3LDg2ICszNiw2MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBodHRw
Oi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jc2VyaWFsaXplLWEtbWVkaWEtcXVlcnkKIFN0cmlu
ZyBNZWRpYVF1ZXJ5OjpzZXJpYWxpemUoKSBjb25zdAogewotICAgIFN0cmluZ0J1aWxkZXIgcmVz
dWx0OwotICAgIGlmICghbV9pZ25vcmVkKSB7Ci0gICAgICAgIHN3aXRjaCAobV9yZXN0cmljdG9y
KSB7Ci0gICAgICAgIGNhc2UgTWVkaWFRdWVyeTo6T25seToKLSAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCJvbmx5ICIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
TWVkaWFRdWVyeTo6Tm90OgotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vdCAi
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhUXVlcnk6Ok5vbmU6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX2V4cHJlc3Npb25z
LT5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9tZWRpYVR5cGUpOwot
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fbWVkaWFUeXBlICE9ICJhbGwiIHx8IG1fcmVzdHJpY3RvciAhPSBOb25lKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fbWVkaWFUeXBlKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmRMaXRlcmFsKCIgYW5kICIpOwotICAgICAgICB9CisgICAgaWYgKG1faWdub3JlZCkg
eworICAgICAgICAvLyBJZiBxdWVyeSBpcyBpbnZhbGlkLCBzZXJpYWxpemVkIHRleHQgc2hvdWxk
IHR1cm4gaW50byAibm90IGFsbCIuCisgICAgICAgIHJldHVybiBBU0NJSUxpdGVyYWwoIm5vdCBh
bGwiKTsKKyAgICB9CiAKLSAgICAgICAgcmVzdWx0LmFwcGVuZChtX2V4cHJlc3Npb25zLT5hdCgw
KS0+c2VyaWFsaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fZXhwcmVz
c2lvbnMtPnNpemUoKTsgKytpKSB7CisgICAgYm9vbCBzaG91bGRPbWl0TWVkaWFUeXBlID0gZmFs
c2U7CisgICAgU3RyaW5nQnVpbGRlciByZXN1bHQ7CisgICAgc3dpdGNoIChtX3Jlc3RyaWN0b3Ip
IHsKKyAgICBjYXNlIE1lZGlhUXVlcnk6Ok9ubHk6CisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRl
cmFsKCJvbmx5ICIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE1lZGlhUXVlcnk6Ok5vdDoK
KyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vdCAiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb25lOgorICAgICAgICBzaG91bGRPbWl0TWVkaWFUeXBlID0g
IW1fZXhwcmVzc2lvbnMuaXNFbXB0eSgpICYmIG1fbWVkaWFUeXBlID09ICJhbGwiOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgYm9vbCBuZWVkc0FuZCA9IGZhbHNlOworICAgIGlmICghc2hv
dWxkT21pdE1lZGlhVHlwZSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKG1fbWVkaWFUeXBlKTsK
KyAgICAgICAgbmVlZHNBbmQgPSB0cnVlOworICAgIH0KKyAgICBmb3IgKGF1dG8mIGV4cHJlc3Np
b24gOiBtX2V4cHJlc3Npb25zKSB7CisgICAgICAgIGlmIChuZWVkc0FuZCkKICAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmRMaXRlcmFsKCIgYW5kICIpOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChtX2V4cHJlc3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCkpOwotICAgICAgICB9Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gSWYgcXVlcnkgaXMgaW52YWxpZCwgc2VyaWFsaXplZCB0ZXh0IHNo
b3VsZCB0dXJuIGludG8gIm5vdCBhbGwiLgotICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgi
bm90IGFsbCIpOworICAgICAgICByZXN1bHQuYXBwZW5kKGV4cHJlc3Npb24uc2VyaWFsaXplKCkp
OworICAgICAgICBuZWVkc0FuZCA9IHRydWU7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKIH0KIAotTWVkaWFRdWVyeTo6TWVkaWFRdWVyeShSZXN0cmljdG9yIHIsIGNvbnN0
IFN0cmluZyYgbWVkaWFUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvblZlY3Rvcj4gZXhw
cnMpCi0gICAgOiBtX3Jlc3RyaWN0b3IocikKK01lZGlhUXVlcnk6Ok1lZGlhUXVlcnkoUmVzdHJp
Y3RvciByZXN0cmljdG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgVmVjdG9yPE1lZGlhUXVl
cnlFeHByZXNzaW9uPiYmIGV4cHJlc3Npb25zKQorICAgIDogbV9yZXN0cmljdG9yKHJlc3RyaWN0
b3IpCiAgICAgLCBtX21lZGlhVHlwZShtZWRpYVR5cGUuY29udmVydFRvQVNDSUlMb3dlcmNhc2Uo
KSkKLSAgICAsIG1fZXhwcmVzc2lvbnMoV1RGTW92ZShleHBycykpCi0gICAgLCBtX2lnbm9yZWQo
ZmFsc2UpCisgICAgLCBtX2V4cHJlc3Npb25zKFdURk1vdmUoZXhwcmVzc2lvbnMpKQogewotICAg
IGlmICghbV9leHByZXNzaW9ucykgewotICAgICAgICBtX2V4cHJlc3Npb25zID0gc3RkOjptYWtl
X3VuaXF1ZTxFeHByZXNzaW9uVmVjdG9yPigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgc3RkOjpzb3J0KG1fZXhwcmVzc2lvbnMtPmJlZ2luKCksIG1fZXhwcmVzc2lvbnMtPmVuZCgp
LCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7Ci0gICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJl
KGEtPnNlcmlhbGl6ZSgpLCBiLT5zZXJpYWxpemUoKSkgPCAwOworICAgIHN0ZDo6c29ydChtX2V4
cHJlc3Npb25zLmJlZ2luKCksIG1fZXhwcmVzc2lvbnMuZW5kKCksIFtdKGF1dG8mIGEsIGF1dG8m
IGIpIHsKKyAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmUoYS5zZXJpYWxpemUoKSwgYi5z
ZXJpYWxpemUoKSkgPCAwOwogICAgIH0pOwogCi0gICAgLy8gcmVtb3ZlIGFsbCBkdXBsaWNhdGVk
IGV4cHJlc3Npb25zCisgICAgLy8gUmVtb3ZlIGFsbCBkdXBsaWNhdGVkIGV4cHJlc3Npb25zLgog
ICAgIFN0cmluZyBrZXk7Ci0gICAgZm9yIChpbnQgaSA9IG1fZXhwcmVzc2lvbnMtPnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CisgICAgZm9yIChpbnQgaSA9IG1fZXhwcmVzc2lvbnMuc2l6ZSgp
IC0gMTsgaSA+PSAwOyAtLWkpIHsKIAotICAgICAgICAvLyBpZiBub3QgYWxsIG9mIHRoZSBleHBy
ZXNzaW9ucyBpcyB2YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgorICAgICAg
ICAvLyBJZiBhbnkgZXhwcmVzc2lvbiBpcyBpbnZhbGlkIHRoZSBtZWRpYSBxdWVyeSBtdXN0IGJl
IGlnbm9yZWQuCiAgICAgICAgIGlmICghbV9pZ25vcmVkKQotICAgICAgICAgICAgbV9pZ25vcmVk
ID0gIW1fZXhwcmVzc2lvbnMtPmF0KGkpLT5pc1ZhbGlkKCk7CisgICAgICAgICAgICBtX2lnbm9y
ZWQgPSAhbV9leHByZXNzaW9uc1tpXS5pc1ZhbGlkKCk7CiAKLSAgICAgICAgaWYgKG1fZXhwcmVz
c2lvbnMtPmF0KGkpLT5zZXJpYWxpemUoKSA9PSBrZXkpCi0gICAgICAgICAgICBtX2V4cHJlc3Np
b25zLT5yZW1vdmUoaSk7CisgICAgICAgIGlmIChtX2V4cHJlc3Npb25zW2ldLnNlcmlhbGl6ZSgp
ID09IGtleSkKKyAgICAgICAgICAgIG1fZXhwcmVzc2lvbnMucmVtb3ZlKGkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBrZXkgPSBtX2V4cHJlc3Npb25zLT5hdChpKS0+c2VyaWFsaXplKCk7
CisgICAgICAgICAgICBrZXkgPSBtX2V4cHJlc3Npb25zW2ldLnNlcmlhbGl6ZSgpOwogICAgIH0K
IH0KIAotTWVkaWFRdWVyeTo6TWVkaWFRdWVyeShjb25zdCBNZWRpYVF1ZXJ5JiBvKQotICAgIDog
bV9yZXN0cmljdG9yKG8ubV9yZXN0cmljdG9yKQotICAgICwgbV9tZWRpYVR5cGUoby5tX21lZGlh
VHlwZSkKLSAgICAsIG1fZXhwcmVzc2lvbnMoc3RkOjptYWtlX3VuaXF1ZTxFeHByZXNzaW9uVmVj
dG9yPihvLm1fZXhwcmVzc2lvbnMtPnNpemUoKSkpCi0gICAgLCBtX2lnbm9yZWQoby5tX2lnbm9y
ZWQpCi0gICAgLCBtX3NlcmlhbGl6YXRpb25DYWNoZShvLm1fc2VyaWFsaXphdGlvbkNhY2hlKQot
ewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2V4cHJlc3Npb25zLT5zaXplKCk7ICsr
aSkKLSAgICAgICAgKCptX2V4cHJlc3Npb25zKVtpXSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFR
dWVyeUV4cD4oKm8ubV9leHByZXNzaW9ucy0+YXQoaSkpOwotfQotCi1NZWRpYVF1ZXJ5Ojp+TWVk
aWFRdWVyeSgpCi17Ci19Ci0KIC8vIGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNjb21w
YXJlLW1lZGlhLXF1ZXJpZXMKIGJvb2wgTWVkaWFRdWVyeTo6b3BlcmF0b3I9PShjb25zdCBNZWRp
YVF1ZXJ5JiBvdGhlcikgY29uc3QKIHsKQEAgLTEyNCwxMSArOTksMTAgQEAgYm9vbCBNZWRpYVF1
ZXJ5OjpvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90aGVyKSBjb25zdAogfQogCiAvLyBo
dHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jc2VyaWFsaXplLWEtbGlzdC1vZi1tZWRpYS1x
dWVyaWVzCi1TdHJpbmcgTWVkaWFRdWVyeTo6Y3NzVGV4dCgpIGNvbnN0Citjb25zdCBTdHJpbmcm
IE1lZGlhUXVlcnk6OmNzc1RleHQoKSBjb25zdAogewogICAgIGlmIChtX3NlcmlhbGl6YXRpb25D
YWNoZS5pc051bGwoKSkKLSAgICAgICAgY29uc3RfY2FzdDxNZWRpYVF1ZXJ5Kj4odGhpcyktPm1f
c2VyaWFsaXphdGlvbkNhY2hlID0gc2VyaWFsaXplKCk7Ci0KKyAgICAgICAgbV9zZXJpYWxpemF0
aW9uQ2FjaGUgPSBzZXJpYWxpemUoKTsKICAgICByZXR1cm4gbV9zZXJpYWxpemF0aW9uQ2FjaGU7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCmluZGV4IDVmOWZhMWYxMzhjZTUxY2Q4OGZlZDBl
MDlmOWFlMTE2YjU1OGNjMjEuLjIwOTg0ZDM1NjNlZmFlYTMxMzRlOGFmY2ZjMzc1ZGVlOGRlYjJm
MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuaApAQCAtMjYsNDkgKzI2LDM3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgTWVkaWFRdWVyeV9oCi0jZGVmaW5lIE1lZGlhUXVlcnlf
aAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSAiTWVkaWFRdWVy
eUV4cC5oIgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKLWNsYXNzIE1lZGlhUXVlcnlFeHA7CiAKIGNsYXNzIE1lZGlhUXVlcnkgewogICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIGVudW0gUmVzdHJpY3RvciB7
Ci0gICAgICAgIE9ubHksIE5vdCwgTm9uZQotICAgIH07CisgICAgZW51bSBSZXN0cmljdG9yIHsg
T25seSwgTm90LCBOb25lIH07CiAKLSAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFRdWVyeUV4cD4+IEV4cHJlc3Npb25WZWN0b3I7Ci0KLSAgICBNZWRpYVF1ZXJ5KFJlc3Ry
aWN0b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4+IGV4cHJzKTsKLSAgICBNZWRpYVF1ZXJ5KGNv
bnN0IE1lZGlhUXVlcnkmKTsKLSAgICB+TWVkaWFRdWVyeSgpOworICAgIE1lZGlhUXVlcnkoUmVz
dHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwcmVz
c2lvbj4mJik7CiAKICAgICBSZXN0cmljdG9yIHJlc3RyaWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3Jlc3RyaWN0b3I7IH0KLSAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnlFeHA+PiYgZXhwcmVzc2lvbnMoKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uczsgfQot
ICAgIFN0cmluZyBtZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3Q7Ci0gICAgU3Ry
aW5nIGNzc1RleHQoKSBjb25zdDsKKyAgICBjb25zdCBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Np
b24+JiBleHByZXNzaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbnM7IH0KKyAgICBj
b25zdCBTdHJpbmcmIG1lZGlhVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CiAg
ICAgYm9vbCBpZ25vcmVkKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVkOyB9CiAKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gY29weSgpIGNvbnN0IHsgcmV0dXJuIHN0ZDo6bWFrZV91
bmlxdWU8TWVkaWFRdWVyeT4oKnRoaXMpOyB9CisgICAgY29uc3QgU3RyaW5nJiBjc3NUZXh0KCkg
Y29uc3Q7CiAKLSBwcml2YXRlOgotICAgIFJlc3RyaWN0b3IgbV9yZXN0cmljdG9yOwotICAgIFN0
cmluZyBtX21lZGlhVHlwZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RXhwcmVzc2lvblZlY3Rvcj4g
bV9leHByZXNzaW9uczsKLSAgICBib29sIG1faWdub3JlZDsKLSAgICBTdHJpbmcgbV9zZXJpYWxp
emF0aW9uQ2FjaGU7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnkmIG90aGVy
KSBjb25zdDsKIAorcHJpdmF0ZToKICAgICBTdHJpbmcgc2VyaWFsaXplKCkgY29uc3Q7CisKKyAg
ICBSZXN0cmljdG9yIG1fcmVzdHJpY3RvcjsKKyAgICBTdHJpbmcgbV9tZWRpYVR5cGU7CisgICAg
VmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiBtX2V4cHJlc3Npb25zOworICAgIGJvb2wgbV9p
Z25vcmVkIHsgZmFsc2UgfTsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNo
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuY3BwCmluZGV4IGZkY2U4OWFlMzBjMjc2MTZmOTFjOTU4N2Y3ZmEy
MWRhNWRhYzY2NmQuLjM0MTY2MzhjMjY5NDRmNTBmOTJhZjEyY2M5YWYxZjI2OTZlY2UxOWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKQEAgLTQxLDcgKzQx
LDYgQEAKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlhTGlz
dC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnkuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgi
CiAjaW5jbHVkZSAiTm9kZVJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01OCw0MiArNTcsNDAgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXM7Ci0KIGVudW0gTWVk
aWFGZWF0dXJlUHJlZml4IHsgTWluUHJlZml4LCBNYXhQcmVmaXgsIE5vUHJlZml4IH07CiAKLXR5
cGVkZWYgYm9vbCAoKkV2YWxGdW5jKShDU1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmLCBGcmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCk7Ci10eXBlZGVmIEhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIEV2YWxGdW5jPiBGdW5jdGlvbk1hcDsKLXN0YXRpYyBGdW5jdGlv
bk1hcCogZ0Z1bmN0aW9uTWFwOwordHlwZWRlZiBib29sICgqTWVkaWFRdWVyeUZ1bmN0aW9uKShD
U1NWYWx1ZSosIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlh
RmVhdHVyZVByZWZpeCk7Cit0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIE1lZGlh
UXVlcnlGdW5jdGlvbj4gTWVkaWFRdWVyeUZ1bmN0aW9uTWFwOwogCi0vKgotICogRklYTUU6IGZv
bGxvd2luZyBtZWRpYSBmZWF0dXJlcyBhcmUgbm90IGltcGxlbWVudGVkOiBzY2FuCi0gKgotICog
c2NhbjogVGhlICJzY2FuIiBtZWRpYSBmZWF0dXJlIGRlc2NyaWJlcyB0aGUgc2Nhbm5pbmcgcHJv
Y2VzcyBvZgotICogdHYgb3V0cHV0IGRldmljZXMuIEl0J3MgdW5rbm93biBob3cgdG8gcmV0cmll
dmUgdGhpcyBpbmZvcm1hdGlvbiBmcm9tCi0gKiB0aGUgcGxhdGZvcm0KLSAqLworc3RhdGljIGJv
b2wgaXNWaWV3cG9ydERlcGVuZGVudChjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkK
K3sKKyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aAor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhlaWdodAorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbldpZHRoCisgICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluSGVpZ2h0CisgICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4V2lkdGgKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhIZWlnaHQKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbgorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFzcGVjdFJhdGlvCisg
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluQXNwZWN0UmF0
aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhBc3Bl
Y3RSYXRpbzsKK30KIAogTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihi
b29sIG1lZGlhRmVhdHVyZVJlc3VsdCkKLSAgICA6IG1fZXhwUmVzdWx0KG1lZGlhRmVhdHVyZVJl
c3VsdCkKKyAgICA6IG1fZmFsbGJhY2tSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQogewogfQog
CiBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYg
YWNjZXB0ZWRNZWRpYVR5cGUsIGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0KQogICAgIDogbV9tZWRp
YVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCi0gICAgLCBtX2V4cFJlc3VsdChtZWRpYUZlYXR1cmVS
ZXN1bHQpCisgICAgLCBtX2ZhbGxiYWNrUmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKIHsKIH0K
IAotTWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcm
IGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkKK01lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5n
JiBhY2NlcHRlZE1lZGlhVHlwZSwgRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCiAgICAgOiBtX21lZGlhVHlwZShhY2NlcHRlZE1lZGlhVHlwZSkKLSAgICAsIG1f
ZnJhbWUoZnJhbWUpCisgICAgLCBtX2ZyYW1lKGRvY3VtZW50LmZyYW1lKCkpCiAgICAgLCBtX3N0
eWxlKHN0eWxlKQotICAgICwgbV9leHBSZXN1bHQoZmFsc2UpIC8vIGRvZXNuJ3QgbWF0dGVyIHdo
ZW4gd2UgaGF2ZSBtX2ZyYW1lIGFuZCBtX3N0eWxlCi17Ci19Ci0KLU1lZGlhUXVlcnlFdmFsdWF0
b3I6On5NZWRpYVF1ZXJ5RXZhbHVhdG9yKCkKIHsKIH0KIApAQCAtMTE4LDgyICsxMTUsNzQgQEAg
c3RhdGljIGJvb2wgYXBwbHlSZXN0cmljdG9yKE1lZGlhUXVlcnk6OlJlc3RyaWN0b3IgciwgYm9v
bCB2YWx1ZSkKICAgICByZXR1cm4gciA9PSBNZWRpYVF1ZXJ5OjpOb3QgPyAhdmFsdWUgOiB2YWx1
ZTsKIH0KIAotYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsKGNvbnN0IE1lZGlhUXVlcnlT
ZXQqIHF1ZXJ5U2V0LCBTdHlsZVJlc29sdmVyKiBzdHlsZVJlc29sdmVyKSBjb25zdAorYm9vbCBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiBxdWVyeVNl
dCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QKIHsKLSAgICBpZiAoIXF1ZXJ5
U2V0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGF1dG8mIHF1ZXJpZXMgPSBxdWVyeVNl
dC0+cXVlcnlWZWN0b3IoKTsKKyAgICBhdXRvJiBxdWVyaWVzID0gcXVlcnlTZXQucXVlcnlWZWN0
b3IoKTsKICAgICBpZiAoIXF1ZXJpZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
ZW1wdHkgcXVlcnkgbGlzdCBldmFsdWF0ZXMgdG8gdHJ1ZQogCiAgICAgLy8gaXRlcmF0ZSBvdmVy
IHF1ZXJpZXMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0byB0cnVlIChPUiBzZW1hbnRpY3Mp
CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1
ZXJpZXMuc2l6ZSgpICYmICFyZXN1bHQ7ICsraSkgewotICAgICAgICBNZWRpYVF1ZXJ5KiBxdWVy
eSA9IHF1ZXJpZXNbaV0uZ2V0KCk7CisgICAgICAgIGF1dG8mIHF1ZXJ5ID0gcXVlcmllc1tpXTsK
IAotICAgICAgICBpZiAocXVlcnktPmlnbm9yZWQoKSB8fCAoIXF1ZXJ5LT5leHByZXNzaW9ucygp
LnNpemUoKSAmJiBxdWVyeS0+bWVkaWFUeXBlKCkuaXNFbXB0eSgpKSkKKyAgICAgICAgaWYgKHF1
ZXJ5Lmlnbm9yZWQoKSB8fCAoIXF1ZXJ5LmV4cHJlc3Npb25zKCkuc2l6ZSgpICYmIHF1ZXJ5Lm1l
ZGlhVHlwZSgpLmlzRW1wdHkoKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBp
ZiAobWVkaWFUeXBlTWF0Y2gocXVlcnktPm1lZGlhVHlwZSgpKSkgewotICAgICAgICAgICAgYXV0
byYgZXhwcmVzc2lvbnMgPSBxdWVyeS0+ZXhwcmVzc2lvbnMoKTsKLSAgICAgICAgICAgIC8vIGl0
ZXJhdGUgdGhyb3VnaCBleHByZXNzaW9ucywgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIGZh
bHNlCi0gICAgICAgICAgICAvLyAoQU5EIHNlbWFudGljcykKKyAgICAgICAgaWYgKG1lZGlhVHlw
ZU1hdGNoKHF1ZXJ5Lm1lZGlhVHlwZSgpKSkgeworICAgICAgICAgICAgYXV0byYgZXhwcmVzc2lv
bnMgPSBxdWVyeS5leHByZXNzaW9ucygpOworICAgICAgICAgICAgLy8gaXRlcmF0ZSB0aHJvdWdo
IGV4cHJlc3Npb25zLCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2YWwgdG8gZmFsc2UgKEFORCBzZW1h
bnRpY3MpCiAgICAgICAgICAgICBzaXplX3QgaiA9IDA7CiAgICAgICAgICAgICBmb3IgKDsgaiA8
IGV4cHJlc3Npb25zLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgYm9vbCBleHByUmVz
dWx0ID0gZXZhbChleHByZXNzaW9ucy5hdChqKS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXIgJiYgZXhwcmVzc2lvbnMuYXQoaiktPmlzVmlld3BvcnREZXBlbmRlbnQo
KSkKLSAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+YWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGV4cHJlc3Npb25zLmF0KGopLmdldCgpLCBleHByUmVzdWx0KTsK
LSAgICAgICAgICAgICAgICBpZiAoIWV4cHJSZXN1bHQpCisgICAgICAgICAgICAgICAgYm9vbCBl
eHByZXNzaW9uUmVzdWx0ID0gZXZhbHVhdGUoZXhwcmVzc2lvbnNbal0pOworICAgICAgICAgICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyICYmIGlzVmlld3BvcnREZXBlbmRlbnQoZXhwcmVzc2lvbnNb
al0ubWVkaWFGZWF0dXJlKCkpKQorICAgICAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLT5h
ZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoZXhwcmVzc2lvbnNbal0sIGV4cHJl
c3Npb25SZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICghZXhwcmVzc2lvblJlc3VsdCkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8v
IGFzc3VtZSB0cnVlIGlmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LAogICAgICAgICAg
ICAgLy8gb3RoZXJ3aXNlIGFzc3VtZSBmYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlS
ZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUoKSA9PSBqKTsK
KyAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCks
IGV4cHJlc3Npb25zLnNpemUoKSA9PSBqKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBy
ZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwgZmFsc2UpOworICAg
ICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZmFs
c2UpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2
YWx1YXRvcjo6ZXZhbENoZWNraW5nVmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKGNvbnN0IE1lZGlh
UXVlcnlTZXQqIHF1ZXJ5U2V0LCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1
bHQ+PiYgcmVzdWx0cykKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3Qg
TWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiYgcmVzdWx0
cykgY29uc3QKIHsKLSAgICBpZiAoIXF1ZXJ5U2V0KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGF1dG8mIHF1ZXJpZXMgPSBxdWVyeVNldC0+cXVlcnlWZWN0b3IoKTsKKyAgICBhdXRvJiBx
dWVyaWVzID0gcXVlcnlTZXQucXVlcnlWZWN0b3IoKTsKICAgICBpZiAoIXF1ZXJpZXMuc2l6ZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVyaWVzLnNpemUoKSAmJiAhcmVzdWx0OyArK2kpIHsK
LSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkgPSBxdWVyaWVzW2ldLmdldCgpOworICAgICAgICBh
dXRvJiBxdWVyeSA9IHF1ZXJpZXNbaV07CiAKLSAgICAgICAgaWYgKHF1ZXJ5LT5pZ25vcmVkKCkp
CisgICAgICAgIGlmIChxdWVyeS5pZ25vcmVkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAot
ICAgICAgICBpZiAobWVkaWFUeXBlTWF0Y2gocXVlcnktPm1lZGlhVHlwZSgpKSkgewotICAgICAg
ICAgICAgYXV0byYgZXhwcmVzc2lvbnMgPSBxdWVyeS0+ZXhwcmVzc2lvbnMoKTsKKyAgICAgICAg
aWYgKG1lZGlhVHlwZU1hdGNoKHF1ZXJ5Lm1lZGlhVHlwZSgpKSkgeworICAgICAgICAgICAgYXV0
byYgZXhwcmVzc2lvbnMgPSBxdWVyeS5leHByZXNzaW9ucygpOwogICAgICAgICAgICAgc2l6ZV90
IGogPSAwOwogICAgICAgICAgICAgZm9yICg7IGogPCBleHByZXNzaW9ucy5zaXplKCk7ICsraikg
ewotICAgICAgICAgICAgICAgIGJvb2wgZXhwclJlc3VsdCA9IGV2YWwoZXhwcmVzc2lvbnMuYXQo
aikuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9ucy5hdChqKS0+aXNWaWV3
cG9ydERlcGVuZGVudCgpKQotICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlSZXN1bHQ+KCpleHByZXNzaW9ucy5hdChqKSwgZXhwclJl
c3VsdCkpOwotICAgICAgICAgICAgICAgIGlmICghZXhwclJlc3VsdCkKKyAgICAgICAgICAgICAg
ICBib29sIGV4cHJlc3Npb25SZXN1bHQgPSBldmFsdWF0ZShleHByZXNzaW9uc1tqXSk7CisgICAg
ICAgICAgICAgICAgaWYgKGlzVmlld3BvcnREZXBlbmRlbnQoZXhwcmVzc2lvbnNbal0ubWVkaWFG
ZWF0dXJlKCkpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7IGV4cHJlc3Np
b25zW2pdLCBleHByZXNzaW9uUmVzdWx0IH0pOworICAgICAgICAgICAgICAgIGlmICghZXhwcmVz
c2lvblJlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwg
ZXhwcmVzc2lvbnMuc2l6ZSgpID09IGopOworICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0
cmljdG9yKHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZXhwcmVzc2lvbnMuc2l6ZSgpID09IGopOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS0+
cmVzdHJpY3RvcigpLCBmYWxzZSk7CisgICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0
b3IocXVlcnkucmVzdHJpY3RvcigpLCBmYWxzZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWJvb2wgY29tcGFyZVZhbHVlKFQgYSwgVCBi
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBV
PiBib29sIGNvbXBhcmVWYWx1ZShUIGEsIFUgYiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewog
ICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIE1pblByZWZpeDoKQEAgLTIwOCw0NSArMTk3LDQ5
IEBAIGJvb2wgY29tcGFyZVZhbHVlKFQgYSwgVCBiLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAK
IHN0YXRpYyBib29sIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKGlz
PENTU0FzcGVjdFJhdGlvVmFsdWU+KCp2YWx1ZSkpIHsKLSAgICAgICAgQ1NTQXNwZWN0UmF0aW9W
YWx1ZSYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPigqdmFsdWUp
OwotICAgICAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogc3RhdGljX2Nhc3Q8aW50Pihh
c3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCkpLCBoZWlnaHQgKiBzdGF0aWNfY2FzdDxpbnQ+
KGFzcGVjdFJhdGlvLm51bWVyYXRvclZhbHVlKCkpLCBvcCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghaXM8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4odmFsdWUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byYgYXNwZWN0UmF0aW8gPSBkb3duY2FzdDxDU1NBc3Bl
Y3RSYXRpb1ZhbHVlPigqdmFsdWUpOworICAgIHJldHVybiBjb21wYXJlVmFsdWUod2lkdGggKiBh
c3BlY3RSYXRpby5kZW5vbWluYXRvclZhbHVlKCksIGhlaWdodCAqIGFzcGVjdFJhdGlvLm51bWVy
YXRvclZhbHVlKCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgbnVtYmVyVmFsdWUoQ1NTVmFsdWUq
IHZhbHVlLCBmbG9hdCYgcmVzdWx0KQorc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gZG91YmxlVmFs
dWUoQ1NTVmFsdWUqIHZhbHVlKQogewotICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc051bWJlcigpKSB7
Ci0gICAgICAgIHJlc3VsdCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdl
dEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSB8fCAhZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSku
aXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgcmV0dXJuIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldERvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKIH0KIAotc3RhdGljIGJvb2wgY29sb3JNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1l
KiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgemVyb0V2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGludCBiaXRz
UGVyQ29tcG9uZW50ID0gc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoZnJhbWUtPnBhZ2UoKS0+bWFp
bkZyYW1lKCkudmlldygpKTsKLSAgICBmbG9hdCBudW1iZXI7Ci0gICAgaWYgKHZhbHVlKQotICAg
ICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKGJp
dHNQZXJDb21wb25lbnQsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOwotCi0gICAgcmV0
dXJuIGJpdHNQZXJDb21wb25lbnQgIT0gMDsKKyAgICBhdXRvIG51bWVyaWNWYWx1ZSA9IGRvdWJs
ZVZhbHVlKHZhbHVlKTsKKyAgICByZXR1cm4gbnVtZXJpY1ZhbHVlICYmIGNvbXBhcmVWYWx1ZSgw
LCBudW1lcmljVmFsdWUudmFsdWUoKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBjb2xvcl9pbmRl
eE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBv
bmVFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAg
ICAvLyBGSVhNRTogSXQncyB1bmtub3duIGhvdyB0byByZXRyaWV2ZSB0aGUgaW5mb3JtYXRpb24g
aWYgdGhlIGRpc3BsYXkgbW9kZSBpcyBpbmRleGVkCi0gICAgLy8gQXNzdW1lIHdlIGRvbid0IHN1
cHBvcnQgaW5kZXhlZCBkaXNwbGF5LgogICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBudW1lcmljVmFsdWUgPSBkb3Vi
bGVWYWx1ZSh2YWx1ZSk7CisgICAgcmV0dXJuIG51bWVyaWNWYWx1ZSAmJiBjb21wYXJlVmFsdWUo
MSwgbnVtZXJpY1ZhbHVlLnZhbHVlKCksIG9wKTsKK30KIAotICAgIGZsb2F0IG51bWJlcjsKLSAg
ICByZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDAsIHN0
YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOworc3RhdGljIGJvb2wgY29sb3JFdmFsdWF0ZShD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYg
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3sKKyAgICBpbnQgYml0c1BlckNvbXBvbmVu
dCA9IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSk7Cisg
ICAgYXV0byBudW1lcmljVmFsdWUgPSBkb3VibGVWYWx1ZSh2YWx1ZSk7CisgICAgaWYgKCFudW1l
cmljVmFsdWUpCisgICAgICAgIHJldHVybiBiaXRzUGVyQ29tcG9uZW50OworICAgIHJldHVybiBj
b21wYXJlVmFsdWUoYml0c1BlckNvbXBvbmVudCwgbnVtZXJpY1ZhbHVlLnZhbHVlKCksIG9wKTsK
K30KKworc3RhdGljIGJvb2wgY29sb3JJbmRleEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQoreworICAgIC8vIEFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIGluZGV4ZWQgZGlzcGxheS4K
KyAgICByZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGNv
bG9yX2dhbXV0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0
YXRpYyBib29sIGNvbG9yR2FtdXRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
IHsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1NSwxMiArMjQ4
LDEwIEBAIHN0YXRpYyBib29sIGNvbG9yX2dhbXV0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyCiAgICAgY2FzZSBDU1NWYWx1ZVNyZ2I6CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIGNhc2UgQ1NTVmFsdWVQMzoKLSAgICAgICAgLy8gRklY
TUU6IEZvciB0aGUgbW9tZW50IHdlJ2xsIGp1c3QgYXNzdW1lIGFuICJleHRlbmRlZAotICAgICAg
ICAvLyBjb2xvciIgZGlzcGxheSBpcyBhdCBsZWFzdCBhcyBnb29kIGFzIFAzLgotICAgICAgICBy
ZXR1cm4gc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKGZyYW1lLT5wYWdlKCktPm1haW5GcmFt
ZSgpLnZpZXcoKSk7CisgICAgICAgIC8vIEZJWE1FOiBGb3IgdGhlIG1vbWVudCB3ZSBqdXN0IGFz
c3VtZSBhbnkgImV4dGVuZGVkIGNvbG9yIiBkaXNwbGF5IGlzIGF0IGxlYXN0IGFzIGdvb2QgYXMg
UDMuCisgICAgICAgIHJldHVybiBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoZnJhbWUubWFp
bkZyYW1lKCkudmlldygpKTsKICAgICBjYXNlIENTU1ZhbHVlUmVjMjAyMDoKLSAgICAgICAgLy8g
RklYTUU6IEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHN0YXJ0IGRldGVjdGluZyBkaXNwbGF5cyB0
aGF0Ci0gICAgICAgIC8vIHN1cHBvcnQgbW9yZSBjb2xvcnMuCisgICAgICAgIC8vIEZJWE1FOiBB
dCBzb21lIHBvaW50IHdlIHNob3VsZCBzdGFydCBkZXRlY3RpbmcgZGlzcGxheXMgdGhhdCBzdXBw
b3J0IG1vcmUgY29sb3JzLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNjgsOTAgKzI1OSw4MiBAQCBzdGF0aWMg
Ym9vbCBjb2xvcl9nYW11dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcgogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgbW9ub2Nocm9tZU1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3Ap
CitzdGF0aWMgYm9vbCBtb25vY2hyb21lRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKCFzY3JlZW5Jc01vbm9jaHJvbWUoZnJh
bWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKSkgewotICAgICAgICBpZiAodmFsdWUpIHsK
LSAgICAgICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgICAgIHJldHVybiBudW1iZXJWYWx1
ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMCwgc3RhdGljX2Nhc3Q8aW50PihudW1i
ZXIpLCBvcCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgb3ApOworICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lKGZyYW1lLm1haW5GcmFtZSgpLnZp
ZXcoKSkpCisgICAgICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsKKyAgICByZXR1
cm4gY29sb3JFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBvcCk7CiB9CiAK
LXN0YXRpYyBib29sIGludmVydGVkX2NvbG9yc01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBpbnZlcnRlZENvbG9yc0V2YWx1YXRlKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0
dXJlUHJlZml4KQogewogICAgIGJvb2wgaXNJbnZlcnRlZCA9IHNjcmVlbkhhc0ludmVydGVkQ29s
b3JzKCk7Ci0KICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gaXNJbnZlcnRlZDsKLQot
ICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKS5nZXRWYWx1ZUlEKCk7Ci0gICAgcmV0dXJuIChpc0ludmVydGVkICYmIGlkID09IENTU1Zh
bHVlSW52ZXJ0ZWQpIHx8ICghaXNJbnZlcnRlZCAmJiBpZCA9PSBDU1NWYWx1ZU5vbmUpOworICAg
IHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCkg
PT0gKGlzSW52ZXJ0ZWQgPyBDU1NWYWx1ZUludmVydGVkIDogQ1NTVmFsdWVOb25lKTsKIH0KIAot
c3RhdGljIGJvb2wgb3JpZW50YXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0
dXJlUHJlZml4KQorc3RhdGljIGJvb2wgb3JpZW50YXRpb25FdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwor
ICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIGludCB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRoKCk7
Ci0gICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwotICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIGNvbnN0IENTU1ZhbHVlSUQgaWQgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7Ci0gICAgICAg
IGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdwb3J0IGlzIHBvcnRyYWl0LgotICAg
ICAgICAgICAgcmV0dXJuIENTU1ZhbHVlTGFuZHNjYXBlID09IGlkOwotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVQb3J0cmFpdCA9PSBpZDsKKyAgICBhdXRvIHdpZHRoID0gdmlldy0+bGF5b3V0V2lk
dGgoKTsKKyAgICBhdXRvIGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOworCisgICAgaWYg
KCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CisgICAgICAgIC8vIEV4cHJlc3Npb24g
KG9yaWVudGF0aW9uKSBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB3aWR0aCBhbmQgaGVpZ2h0ID49IDAu
CisgICAgICAgIHJldHVybiBoZWlnaHQgPj0gMCAmJiB3aWR0aCA+PSAwOwogICAgIH0KIAotICAg
IC8vIEV4cHJlc3Npb24gKG9yaWVudGF0aW9uKSBldmFsdWF0ZXMgdG8gdHJ1ZSBpZiB3aWR0aCBh
bmQgaGVpZ2h0ID49IDAuCi0gICAgcmV0dXJuIGhlaWdodCA+PSAwICYmIHdpZHRoID49IDA7Cisg
ICAgYXV0byBrZXl3b3JkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0
VmFsdWVJRCgpOworICAgIGlmICh3aWR0aCA+IGhlaWdodCkgLy8gU3F1YXJlIHZpZXdwb3J0IGlz
IHBvcnRyYWl0LgorICAgICAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUxhbmRzY2FwZTsK
KyAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZVBvcnRyYWl0OwogfQogCi1zdGF0aWMgYm9v
bCBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQorc3RhdGljIGJvb2wgYXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOwotICAg
IGlmICghdmlldykKKyAgICAvLyAoeyxtaW4tLG1heC19YXNwZWN0LXJhdGlvKQorICAgIC8vIGFz
c3VtZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBpdHMgYXNwZWN0IHJhdGlvIGlzIG5vbi16ZXJvCisg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAodmFsdWUpCi0g
ICAgICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZSh2YWx1ZSwgdmlldy0+bGF5b3V0
V2lkdGgoKSwgdmlldy0+bGF5b3V0SGVpZ2h0KCksIG9wKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcg
PSBmcmFtZS52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIC8vICh7LG1pbi0sbWF4LX1hc3BlY3QtcmF0aW8pCi0gICAgLy8gYXNzdW1lIGlmIHdlIGhh
dmUgYSBkZXZpY2UsIGl0cyBhc3BlY3QgcmF0aW8gaXMgbm9uLXplcm8KLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUodmFsdWUsIHZpZXctPmxheW91
dFdpZHRoKCksIHZpZXctPmxheW91dEhlaWdodCgpLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGRl
dmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQorc3RhdGljIGJvb2wgZGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgRmxvYXRS
ZWN0IHNnID0gc2NyZWVuUmVjdChmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOwot
ICAgICAgICByZXR1cm4gY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUodmFsdWUsIHN0YXRpY19jYXN0
PGludD4oc2cud2lkdGgoKSksIHN0YXRpY19jYXN0PGludD4oc2cuaGVpZ2h0KCkpLCBvcCk7Ci0g
ICAgfQotCiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS1hc3BlY3QtcmF0aW8pCiAgICAgLy8g
YXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGl0cyBhc3BlY3QgcmF0aW8gaXMgbm9uLXplcm8K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGF1dG8gc2l6ZSA9IHNjcmVlblJlY3QoZnJhbWUubWFpbkZyYW1lKCkudmlldygpKS5z
aXplKCk7CisgICAgcmV0dXJuIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVlKHZhbHVlLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgZXZhbFJlc29sdXRp
b24oQ1NTVmFsdWUqIHZhbHVlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
K3N0YXRpYyBib29sIGV2YWx1YXRlUmVzb2x1dGlvbihDU1NWYWx1ZSogdmFsdWUsIEZyYW1lJiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogICAgIC8vIEZJWE1FOiBQb3NzaWJsZSBo
YW5kbGUgb3RoZXIgbWVkaWEgdHlwZXMgdGhhbiAnc2NyZWVuJyBhbmQgJ3ByaW50Jy4KLSAgICBG
cmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIEZyYW1lVmlldyogdmlldyA9IGZy
YW1lLnZpZXcoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gMDsKKwogICAgIC8vIFRoaXMgY2hlY2tzIHRoZSBh
Y3R1YWwgbWVkaWEgdHlwZSBhcHBsaWVkIHRvIHRoZSBkb2N1bWVudCwgYW5kIHdlIGtub3cKICAg
ICAvLyB0aGlzIG1ldGhvZCBvbmx5IGdvdCBjYWxsZWQgaWYgdGhpcyBtZWRpYSB0eXBlIG1hdGNo
ZXMgdGhlIG9uZSBkZWZpbmVkCiAgICAgLy8gaW4gdGhlIHF1ZXJ5LiBUaHVzLCBpZiBpZiB0aGUg
ZG9jdW1lbnQncyBtZWRpYSB0eXBlIGlzICJwcmludCIsIHRoZQogICAgIC8vIG1lZGlhIHR5cGUg
b2YgdGhlIHF1ZXJ5IHdpbGwgZWl0aGVyIGJlICJwcmludCIgb3IgImFsbCIuCiAgICAgU3RyaW5n
IG1lZGlhVHlwZSA9IHZpZXctPm1lZGlhVHlwZSgpOwogICAgIGlmIChlcXVhbExldHRlcnNJZ25v
cmluZ0FTQ0lJQ2FzZShtZWRpYVR5cGUsICJzY3JlZW4iKSkKLSAgICAgICAgZGV2aWNlU2NhbGVG
YWN0b3IgPSBmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBkZXZp
Y2VTY2FsZUZhY3RvciA9IGZyYW1lLnBhZ2UoKSA/IGZyYW1lLnBhZ2UoKS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKSA6IDE7CiAgICAgZWxzZSBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2Uo
bWVkaWFUeXBlLCAicHJpbnQiKSkgewogICAgICAgICAvLyBUaGUgcmVzb2x1dGlvbiBvZiBpbWFn
ZXMgd2hpbGUgcHJpbnRpbmcgc2hvdWxkIG5vdCBkZXBlbmQgb24gdGhlIGRwaQogICAgICAgICAv
LyBvZiB0aGUgc2NyZWVuLiBVbnRpbCB3ZSBzdXBwb3J0IHByb3BlciB3YXlzIG9mIHF1ZXJ5aW5n
IHRoaXMgaW5mbwpAQCAtMzYyLDIyICszNDUsMjIgQEAgc3RhdGljIGJvb2wgZXZhbFJlc29sdXRp
b24oQ1NTVmFsdWUqIHZhbHVlLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkK
ICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gISFkZXZpY2VTY2FsZUZhY3RvcjsKIAot
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgcmVzb2x1dGlvbiA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
dmFsdWUpOworICAgIGF1dG8mIHJlc29sdXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKTsKICAgICByZXR1cm4gY29tcGFyZVZhbHVlKGRldmljZVNjYWxlRmFjdG9yLCBy
ZXNvbHV0aW9uLmlzTnVtYmVyKCkgPyByZXNvbHV0aW9uLmdldEZsb2F0VmFsdWUoKSA6IHJlc29s
dXRpb24uZ2V0RmxvYXRWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpLCBvcCk7CiB9
CiAKLXN0YXRpYyBib29sIGRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUgKnZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VQaXhlbFJhdGlvRXZh
bHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwg
RnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgcmV0dXJuICghdmFs
dWUgfHwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkgJiYg
ZXZhbFJlc29sdXRpb24odmFsdWUsIGZyYW1lLCBvcCk7CisgICAgcmV0dXJuICghdmFsdWUgfHwg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpKSAmJiBldmFsdWF0ZVJlc29sdXRpb24odmFsdWUsIGZy
YW1lLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIHJlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFsKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgcmVzb2x1dGlvbkV2YWx1
YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZy
YW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewogI2lmIEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpLmlzUmVzb2x1dGlvbigpKSAmJiBldmFsUmVzb2x1dGlvbih2YWx1
ZSwgZnJhbWUsIG9wKTsKKyAgICByZXR1cm4gKCF2YWx1ZSB8fCAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNSZXNv
bHV0aW9uKCkpKSAmJiBldmFsdWF0ZVJlc29sdXRpb24odmFsdWUsIGZyYW1lLCBvcCk7CiAjZWxz
ZQogICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAgICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKQEAg
LTM4NiwyMiArMzY5LDE3IEBAIHN0YXRpYyBib29sIHJlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzCiAjZW5kaWYKIH0KIAot
c3RhdGljIGJvb2wgZ3JpZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3Ap
CitzdGF0aWMgYm9vbCBncmlkRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0g
ICAgLy8gaWYgb3V0cHV0IGRldmljZSBpcyBiaXRtYXAsIGdyaWQ6IDAgPT0gdHJ1ZQotICAgIC8v
IGFzc3VtZSB3ZSBoYXZlIGJpdG1hcCBkZXZpY2UKLSAgICBmbG9hdCBudW1iZXI7Ci0gICAgaWYg
KHZhbHVlICYmIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpKQotICAgICAgICByZXR1cm4gY29t
cGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgMCwgb3ApOwotICAgIHJldHVybiBm
YWxzZTsKKyAgICByZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAKIHN0YXRpYyBi
b29sIGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBib29sIHN0cmljdCwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIGludCYgcmVzdWx0KQogewot
ICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkpCisgICAgaWYgKCFpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBDU1NQ
cmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKTsKKyAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqdmFsdWUpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkp
IHsKICAgICAgICAgcmVzdWx0ID0gcHJpbWl0aXZlVmFsdWUuZ2V0SW50VmFsdWUoKTsKQEAgLTQx
NiwyNzEgKzM5NCwyMjcgQEAgc3RhdGljIGJvb2wgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFs
dWUsIGJvb2wgc3RyaWN0LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnMKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZGV2
aWNlSGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVl
blJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKTsKLSAgICAgICAgaW50IGxl
bmd0aDsKLSAgICAgICAgbG9uZyBoZWlnaHQgPSBzZy5oZWlnaHQoKTsKLSAgICAgICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCks
IGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+
KGhlaWdodCksIGxlbmd0aCwgb3ApOwotICAgIH0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNl
LWhlaWdodCkKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgYXNzdW1lIG5vbi16
ZXJvCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgaW50IGxlbmd0aDsKKyAgICBhdXRvIGhlaWdodCA9IHNjcmVlblJlY3QoZnJhbWUu
bWFpbkZyYW1lKCkudmlldygpKS5oZWlnaHQoKTsKKyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2
YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoaGVpZ2h0LCBsZW5ndGgsIG9wKTsKIH0KIAotc3RhdGlj
IGJvb2wgZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZVdpZHRoRXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYg
KHZhbHVlKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2Uo
KS0+bWFpbkZyYW1lKCkudmlldygpKTsKLSAgICAgICAgaW50IGxlbmd0aDsKLSAgICAgICAgbG9u
ZyB3aWR0aCA9IHNnLndpZHRoKCk7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVl
LCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVu
Z3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCksIGxlbmd0aCwgb3Ap
OwotICAgIH0KICAgICAvLyAoeyxtaW4tLG1heC19ZGV2aWNlLXdpZHRoKQogICAgIC8vIGFzc3Vt
ZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBhc3N1bWUgbm9uLXplcm8KLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpbnQgbGVuZ3RoOwor
ICAgIGF1dG8gd2lkdGggPSBzY3JlZW5SZWN0KGZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSkud2lk
dGgoKTsKKyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCkt
PmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUo
d2lkdGgsIGxlbmd0aCwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBoZWlnaHRNZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGlj
IGJvb2wgaGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBG
cmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaW50IGhlaWdodCA9IHZp
ZXctPmxheW91dEhlaWdodCgpOwotICAgICAgICBpZiAoUmVuZGVyVmlldyogcmVuZGVyVmlldyA9
IGZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCi0gICAgICAgICAgICBoZWlnaHQgPSBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20oaGVpZ2h0LCAqcmVuZGVyVmlldyk7Ci0gICAgICAgIGludCBs
ZW5ndGg7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3Vt
ZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJl
VmFsdWUoaGVpZ2h0LCBsZW5ndGgsIG9wKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdmlldy0+bGF5
b3V0SGVpZ2h0KCkgIT0gMDsKKyAgICBpbnQgaGVpZ2h0ID0gdmlldy0+bGF5b3V0SGVpZ2h0KCk7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGhlaWdodDsKKyAgICBpZiAoYXV0byog
cmVuZGVyVmlldyA9IGZyYW1lLmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKKyAgICAgICAgaGVp
Z2h0ID0gYWRqdXN0Rm9yQWJzb2x1dGVab29tKGhlaWdodCwgKnJlbmRlclZpZXcpOworICAgIGlu
dCBsZW5ndGg7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZh
bHVlKGhlaWdodCwgbGVuZ3RoLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIHdpZHRoTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0
YXRpYyBib29sIHdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaW50IHdpZHRoID0g
dmlldy0+bGF5b3V0V2lkdGgoKTsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcg
PSBmcmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKQotICAgICAgICAgICAgd2lkdGggPSBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20od2lkdGgsICpyZW5kZXJWaWV3KTsKLSAgICAgICAgaW50IGxl
bmd0aDsKLSAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS0+ZG9jdW1l
bnQoKS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVW
YWx1ZSh3aWR0aCwgbGVuZ3RoLCBvcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpZXctPmxheW91
dFdpZHRoKCkgIT0gMDsKKyAgICBpbnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB3aWR0aDsKKyAgICBpZiAoYXV0byogcmVuZGVy
VmlldyA9IGZyYW1lLmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKKyAgICAgICAgd2lkdGggPSBh
ZGp1c3RGb3JBYnNvbHV0ZVpvb20od2lkdGgsICpyZW5kZXJWaWV3KTsKKyAgICBpbnQgbGVuZ3Ro
OworICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5R
dWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZSh3aWR0
aCwgbGVuZ3RoLCBvcCk7CiB9CiAKLS8vIHJlc3Qgb2YgdGhlIGZ1bmN0aW9ucyBhcmUgdHJhbXBv
bGluZXMgd2hpY2ggc2V0IHRoZSBwcmVmaXggYWNjb3JkaW5nIHRvIHRoZSBtZWRpYSBmZWF0dXJl
IGV4cHJlc3Npb24gdXNlZAotCi1zdGF0aWMgYm9vbCBtaW5fY29sb3JNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWluQ29sb3JFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZp
eCkKIHsKLSAgICByZXR1cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9u
RGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGNvbG9yRXZhbHVhdGUodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4
X2NvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKK3N0YXRpYyBib29sIG1heENvbG9yRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVy
biBjb2xvckV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7
CiB9CiAKLXN0YXRpYyBib29sIG1pbl9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Db2xv
ckluZGV4RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIGNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBjb2xvckluZGV4RXZhbHVh
dGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGlj
IGJvb2wgbWF4X2NvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heENvbG9ySW5kZXhFdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1
cm4gY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJh
bWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIGNvbG9ySW5kZXhFdmFsdWF0ZSh2YWx1ZSwgY29u
dmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fbW9u
b2Nocm9tZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Nb25vY2hyb21lRXZhbHVhdGUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJh
bWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIG1vbm9jaHJvbWVN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7
CisgICAgcmV0dXJuIG1vbm9jaHJvbWVFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZy
YW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfbW9ub2Nocm9tZU1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0
aWMgYm9vbCBtYXhNb25vY2hyb21lRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIG1vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFs
KHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIG1v
bm9jaHJvbWVFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtaW5fYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkFz
cGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXgpCiB7Ci0gICAgcmV0dXJuIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gYXNwZWN0UmF0aW9F
dmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1z
dGF0aWMgYm9vbCBtYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heEFzcGVjdFJhdGlv
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0g
ICAgcmV0dXJuIGFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gYXNwZWN0UmF0aW9FdmFsdWF0ZSh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9v
bCBtaW5fZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5EZXZpY2VBc3BlY3RS
YXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQog
ewotICAgIHJldHVybiBkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VBc3Bl
Y3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7
CiB9CiAKLXN0YXRpYyBib29sIG1heF9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29s
IG1heERldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZl
YXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAg
cmV0dXJuIGRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9waXhlbF9yYXRp
b01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXgpCitzdGF0aWMgYm9vbCBtaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJh
bWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9waXhl
bF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWlu
UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252
ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9kZXZp
Y2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4RGV2aWNlUGl4ZWxSYXRpb0V2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVy
biBkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIGRldmljZVBpeGVsUmF0aW9FdmFsdWF0
ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMg
Ym9vbCBtaW5faGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkhlaWdodEV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEs
IEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBoZWlnaHRN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7
CisgICAgcmV0dXJuIGhlaWdodEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9oZWlnaHRNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWF4SGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXgpCiB7Ci0gICAgcmV0dXJuIGhlaWdodE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNp
b25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gaGVpZ2h0RXZhbHVhdGUodmFs
dWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wg
bWluX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVh
dHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbldpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUm
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHdpZHRoTWVkaWFGZWF0
dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJl
dHVybiB3aWR0aEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZp
eCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhXaWR0aEV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAg
IHJldHVybiB3aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gd2lkdGhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lv
bkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX2hl
aWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX2hlaWdo
dE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4
KTsKKyAgICByZXR1cm4gZGV2aWNlSGVpZ2h0RXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2RldmljZV9oZWlnaHRN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQorc3RhdGljIGJvb2wgbWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9oZWlnaHRNZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7Cisg
ICAgcmV0dXJuIGRldmljZUhlaWdodEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJh
bWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2Vfd2lkdGhNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3Rh
dGljIGJvb2wgbWluRGV2aWNlV2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVy
biBkZXZpY2VXaWR0aEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblBy
ZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWF4RGV2aWNlV2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbCh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VX
aWR0aEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9
CiAKLXN0YXRpYyBib29sIG1pbl9yZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pblJlc29sdXRp
b25FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsK
LSAgICByZXR1cm4gcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gcmVzb2x1dGlvbkV2YWx1YXRlKHZh
bHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29s
IG1heF9yZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heFJlc29sdXRpb25FdmFsdWF0ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gcmVz
b2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4
UHJlZml4KTsKKyAgICByZXR1cm4gcmVzb2x1dGlvbkV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9u
RGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIGFuaW1hdGlvbk1lZGlh
RmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBhbmltYXRp
b25FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAodmFsdWUpIHsK
LSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUs
IG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDEsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3Ap
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb25lRXZhbHVhdGUodmFsdWUs
IG9wKTsKIH0KIAotc3RhdGljIGJvb2wgdHJhbnNpdGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRp
YUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB0cmFuc2l0aW9uRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRp
YUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZsb2F0IG51
bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBh
cmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIG9uZUV2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAKLXN0YXRp
YyBib29sIHRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCitzdGF0aWMgYm9vbCB0cmFuc2Zvcm0yZEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQogewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAg
IHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMSwgc3Rh
dGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IHJldHVybiBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2Zv
cm1fM2RNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3Rh
dGljIGJvb2wgdHJhbnNmb3JtM2RFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKIHsKLSAgICBib29sIHJldHVyblZhbHVlSWZOb1BhcmFtZXRlcjsKLSAgICBpbnQgaGF2ZTNk
UmVuZGVyaW5nOwotCiAjaWYgRU5BQkxFKDNEX1RSQU5TRk9STVMpCi0gICAgYm9vbCB0aHJlZURF
bmFibGVkID0gZmFsc2U7Ci0gICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBmcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCkpCi0gICAgICAgIHRocmVlREVuYWJsZWQgPSB2aWV3LT5jb21wb3NpdG9yKCku
Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCk7Ci0KLSAgICByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXIg
PSB0aHJlZURFbmFibGVkOwotICAgIGhhdmUzZFJlbmRlcmluZyA9IHRocmVlREVuYWJsZWQgPyAx
IDogMDsKKyAgICBhdXRvKiB2aWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCk7CisgICAgcmV0
dXJuIHZpZXcgJiYgdmlldy0+Y29tcG9zaXRvcigpLmNhblJlbmRlcjNEVHJhbnNmb3JtcygpID8g
b25lRXZhbHVhdGUodmFsdWUsIG9wKSA6IHplcm9FdmFsdWF0ZSh2YWx1ZSwgb3ApOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0oZnJhbWUpOwotICAgIHJldHVyblZhbHVlSWZOb1BhcmFtZXRlciA9
IGZhbHNlOwotICAgIGhhdmUzZFJlbmRlcmluZyA9IDA7CisgICAgcmV0dXJuIHplcm9FdmFsdWF0
ZSh2YWx1ZSwgb3ApOwogI2VuZGlmCi0KLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgZmxvYXQg
bnVtYmVyOwotICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29t
cGFyZVZhbHVlKGhhdmUzZFJlbmRlcmluZywgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7
Ci0gICAgfQotICAgIHJldHVybiByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7CiB9CiAKICNpZiBF
TkFCTEUoVklFV19NT0RFX0NTU19NRURJQSkKLXN0YXRpYyBib29sIHZpZXdfbW9kZU1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCisKK3N0YXRpYyBib29sIHZp
ZXdNb2RlRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgVU5VU0VE
X1BBUkFNKG9wKTsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGNvbnN0IGludCB2aWV3TW9kZUNTU0tleXdvcmRJRCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKLSAgICBjb25zdCBQYWdlOjpWaWV3TW9kZSB2aWV3
TW9kZSA9IGZyYW1lLT5wYWdlKCktPnZpZXdNb2RlKCk7Ci0gICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKLSAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7CisgICAgYXV0byBrZXl3b3JkID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworCisgICAgc3dpdGNoIChm
cmFtZS5wYWdlKCktPnZpZXdNb2RlKCkpIHsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlV2luZG93
ZWQ6Ci0gICAgICAgIHJlc3VsdCA9IHZpZXdNb2RlQ1NTS2V5d29yZElEID09IENTU1ZhbHVlV2lu
ZG93ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1
ZVdpbmRvd2VkOwogICAgIGNhc2UgUGFnZTo6Vmlld01vZGVGbG9hdGluZzoKLSAgICAgICAgcmVz
dWx0ID0gdmlld01vZGVDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVGbG9hdGluZzsKLSAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlRmxvYXRpbmc7CiAgICAg
Y2FzZSBQYWdlOjpWaWV3TW9kZUZ1bGxzY3JlZW46Ci0gICAgICAgIHJlc3VsdCA9IHZpZXdNb2Rl
Q1NTS2V5d29yZElEID09IENTU1ZhbHVlRnVsbHNjcmVlbjsKLSAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlRnVsbHNjcmVlbjsKICAgICBjYXNlIFBhZ2U6
OlZpZXdNb2RlTWF4aW1pemVkOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJ
RCA9PSBDU1NWYWx1ZU1heGltaXplZDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBr
ZXl3b3JkID09IENTU1ZhbHVlTWF4aW1pemVkOwogICAgIGNhc2UgUGFnZTo6Vmlld01vZGVNaW5p
bWl6ZWQ6Ci0gICAgICAgIHJlc3VsdCA9IHZpZXdNb2RlQ1NTS2V5d29yZElEID09IENTU1ZhbHVl
TWluaW1pemVkOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NT
VmFsdWVNaW5pbWl6ZWQ7CiAgICAgZGVmYXVsdDoKLSAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGZh
bHNlOwogfQorCiAjZW5kaWYgLy8gRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCiAKLXN0YXRp
YyBib29sIHZpZGVvX3BsYXlhYmxlX2lubGluZU1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCitzdGF0aWMgYm9vbCB2aWRlb1BsYXlhYmxlSW5saW5lRXZhbHVhdGUoQ1NTVmFs
dWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZXR0aW5ncygpLmFsbG93c0lu
bGluZU1lZGlhUGxheWJhY2soKTsKKyAgICByZXR1cm4gZnJhbWUuc2V0dGluZ3MoKS5hbGxvd3NJ
bmxpbmVNZWRpYVBsYXliYWNrKCk7CiB9CiAKLXN0YXRpYyBib29sIGhvdmVyTWVkaWFGZWF0dXJl
RXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBG
cmFtZSosIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIGhvdmVyRXZhbHVhdGUoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBN
ZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKSB7CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKQEAgLTY5MCw3MCArNjI0LDY1IEBAIHN0
YXRpYyBib29sIGhvdmVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhCiAjZW5kaWYKICAgICB9CiAKLSAgICBpbnQgaG92ZXJDU1NL
ZXl3b3JkSUQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlE
KCk7CisgICAgYXV0byBrZXl3b3JkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuZ2V0VmFsdWVJRCgpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgcmV0dXJuIGhv
dmVyQ1NTS2V5d29yZElEID09IENTU1ZhbHVlTm9uZTsKKyAgICByZXR1cm4ga2V5d29yZCA9PSBD
U1NWYWx1ZU5vbmU7CiAjZWxzZQotICAgIHJldHVybiBob3ZlckNTU0tleXdvcmRJRCA9PSBDU1NW
YWx1ZUhvdmVyOworICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlSG92ZXI7CiAjZW5kaWYK
IH0KIAotc3RhdGljIGJvb2wgYW55X2hvdmVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IHByZWZpeCkKK3N0YXRpYyBi
b29sIGFueUhvdmVyRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCBwcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGhvdmVyTWVkaWFGZWF0dXJl
RXZhbCh2YWx1ZSwgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgZnJhbWUsIHByZWZpeCk7Cisg
ICAgcmV0dXJuIGhvdmVyRXZhbHVhdGUodmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEs
IGZyYW1lLCBwcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBwb2ludGVyTWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFt
ZSosIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIHBvaW50ZXJFdmFsdWF0ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1l
ZGlhRmVhdHVyZVByZWZpeCkKIHsKICAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaW50IHBvaW50ZXJDU1NLZXl3b3JkSUQg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7CisgICAg
YXV0byBrZXl3b3JkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFs
dWVJRCgpOwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgcmV0dXJuIHBvaW50ZXJDU1NL
ZXl3b3JkSUQgPT0gQ1NTVmFsdWVDb2Fyc2U7CisgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFs
dWVDb2Fyc2U7CiAjZWxzZQotICAgIHJldHVybiBwb2ludGVyQ1NTS2V5d29yZElEID09IENTU1Zh
bHVlRmluZTsKKyAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUZpbmU7CiAjZW5kaWYKIH0K
IAotc3RhdGljIGJvb2wgYW55X3BvaW50ZXJNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggcHJlZml4KQorc3RhdGljIGJv
b2wgYW55UG9pbnRlckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXggcHJlZml4KQogewotICAgIHJldHVybiBwb2ludGVyTWVkaWFGZWF0
dXJlRXZhbCh2YWx1ZSwgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgZnJhbWUsIHByZWZpeCk7
CisgICAgcmV0dXJuIHBvaW50ZXJFdmFsdWF0ZSh2YWx1ZSwgY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSwgZnJhbWUsIHByZWZpeCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNyZWF0ZUZ1bmN0aW9uTWFw
KCkKKy8vIFVzZSB0aGlzIGZ1bmN0aW9uIGluc3RlYWQgb2YgY2FsbGluZyBhZGQgZGlyZWN0bHkg
dG8gYXZvaWQgaW5saW5pbmcuCitzdGF0aWMgdm9pZCBhZGQoTWVkaWFRdWVyeUZ1bmN0aW9uTWFw
JiBtYXAsIEF0b21pY1N0cmluZ0ltcGwqIGtleSwgTWVkaWFRdWVyeUZ1bmN0aW9uIHZhbHVlKQog
ewotICAgIC8vIENyZWF0ZSB0aGUgdGFibGUuCi0gICAgZ0Z1bmN0aW9uTWFwID0gbmV3IEZ1bmN0
aW9uTWFwOwotI2RlZmluZSBBRERfVE9fRlVOQ1RJT05NQVAobmFtZSwgc3RyKSAgXAotICAgIGdG
dW5jdGlvbk1hcC0+c2V0KG5hbWUjI01lZGlhRmVhdHVyZS5pbXBsKCksIG5hbWUjI01lZGlhRmVh
dHVyZUV2YWwpOwotICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVS
RShBRERfVE9fRlVOQ1RJT05NQVApOwotI3VuZGVmIEFERF9UT19GVU5DVElPTk1BUAorICAgIG1h
cC5hZGQoa2V5LCB2YWx1ZSk7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChj
b25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByKSBjb25zdAorYm9vbCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
OjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYgZXhwcmVzc2lvbikgY29uc3QK
IHsKICAgICBpZiAoIW1fZnJhbWUgfHwgIW1fZnJhbWUtPnZpZXcoKSB8fCAhbV9zdHlsZSkKLSAg
ICAgICAgcmV0dXJuIG1fZXhwUmVzdWx0OworICAgICAgICByZXR1cm4gbV9mYWxsYmFja1Jlc3Vs
dDsKIAotICAgIGlmICghZXhwci0+aXNWYWxpZCgpKQorICAgIGlmICghZXhwcmVzc2lvbi5pc1Zh
bGlkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICghZ0Z1bmN0aW9uTWFwKQot
ICAgICAgICBjcmVhdGVGdW5jdGlvbk1hcCgpOwotCi0gICAgLy8gY2FsbCB0aGUgbWVkaWEgZmVh
dHVyZSBldmFsdWF0aW9uIGZ1bmN0aW9uLiBBc3N1bWUgbm8gcHJlZml4Ci0gICAgLy8gYW5kIGxl
dCB0cmFtcG9saW5lIGZ1bmN0aW9ucyBvdmVycmlkZSB0aGUgcHJlZml4IGlmIHByZWZpeCBpcwot
ICAgIC8vIHVzZWQKLSAgICBFdmFsRnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQoZXhwci0+
bWVkaWFGZWF0dXJlKCkuaW1wbCgpKTsKLSAgICBpZiAoZnVuYykgewotICAgICAgICBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKG1fc3R5bGUsCi0gICAgICAgICAgICBt
X2ZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKS0+cmVuZGVyU3R5bGUoKSwKLSAg
ICAgICAgICAgIG1fZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSwgMSwgZmFsc2UpOwot
ICAgICAgICByZXR1cm4gZnVuYyhleHByLT52YWx1ZSgpLCBjb252ZXJzaW9uRGF0YSwgbV9mcmFt
ZSwgTm9QcmVmaXgpOwotICAgIH0KKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8TWVkaWFRdWVy
eUZ1bmN0aW9uTWFwPiBtYXAgPSBbXSB7CisgICAgICAgIE1lZGlhUXVlcnlGdW5jdGlvbk1hcCBt
YXA7CisjZGVmaW5lIEFERF9UT19GVU5DVElPTk1BUChuYW1lLCBzdHIpIGFkZChtYXAsIE1lZGlh
RmVhdHVyZU5hbWVzOjpuYW1lLmltcGwoKSwgbmFtZSMjRXZhbHVhdGUpOworICAgICAgICBDU1Nf
TUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZFQVRVUkUoQUREX1RPX0ZVTkNUSU9OTUFQ
KTsKKyN1bmRlZiBBRERfVE9fRlVOQ1RJT05NQVAKKyAgICAgICAgcmV0dXJuIG1hcDsKKyAgICB9
KCk7CiAKLSAgICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBmdW5jdGlvbiA9IG1hcC5nZXQoKS5n
ZXQoZXhwcmVzc2lvbi5tZWRpYUZlYXR1cmUoKS5pbXBsKCkpOworICAgIGlmICghZnVuY3Rpb24p
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIERvY3VtZW50JiBkb2N1bWVudCA9ICptX2Zy
YW1lLT5kb2N1bWVudCgpOworICAgIHJldHVybiBmdW5jdGlvbihleHByZXNzaW9uLnZhbHVlKCks
IHsgbV9zdHlsZSwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCksIGRv
Y3VtZW50LnJlbmRlclZpZXcoKSwgMSwgZmFsc2UgfSwgKm1fZnJhbWUsIE5vUHJlZml4KTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5o
CmluZGV4IDA3ZDExNDEwMjIwYTFiZTNjMmQ0ZGUzYjA3ZDU3MDAzYWU2MDRhNmYuLjYyYzVhZTky
OWI2ZDY5YTIzZWRlNjI5MTJhNDEyMDg4NzViZTJiMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFdmFsdWF0b3IuaApAQCAtMjUsODMgKzI1LDU2IEBACiAgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgog
ICovCiAKLSNpZm5kZWYgTWVkaWFRdWVyeUV2YWx1YXRvcl9oCi0jZGVmaW5lIE1lZGlhUXVlcnlF
dmFsdWF0b3JfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCi0j
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBGcmFtZTsKLWNsYXNzIE1lZGlhUXVlcnlFeHA7CiBjbGFz
cyBNZWRpYVF1ZXJ5U2V0OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZVJlc29sdmVy
OwogCi1jbGFzcyBNZWRpYVF1ZXJ5UmVzdWx0IHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShN
ZWRpYVF1ZXJ5UmVzdWx0KTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwJiBleHByLCBib29sIHJlc3VsdCkK
LSAgICAgICAgOiBtX2V4cHJlc3Npb24oZXhwcikKLSAgICAgICAgLCBtX3Jlc3VsdChyZXN1bHQp
Ci0gICAgewotICAgIH0KLQotICAgIE1lZGlhUXVlcnlFeHAgbV9leHByZXNzaW9uOwotICAgIGJv
b2wgbV9yZXN1bHQ7CitzdHJ1Y3QgTWVkaWFRdWVyeVJlc3VsdCB7CisgICAgTWVkaWFRdWVyeUV4
cHJlc3Npb24gZXhwcmVzc2lvbjsKKyAgICBib29sIHJlc3VsdDsKIH07CiAKLS8qKgotICogQ2xh
c3MgdGhhdCBldmFsdWF0ZXMgY3NzIG1lZGlhIHF1ZXJpZXMgYXMgZGVmaW5lZCBpbgotICogQ1NT
MyBNb2R1bGUgIk1lZGlhIFF1ZXJpZXMiIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLW1lZGlh
cXVlcmllcy8pCi0gKiBTcGVjaWFsIGNvbnN0cnVjdG9ycyBhcmUgbmVlZGVkLCBpZiBzaW1wbGUg
bWVkaWEgcXVlcmllcyBhcmUgdG8gYmUKLSAqIGV2YWx1YXRlZCB3aXRob3V0IGtub3dsZWRnZSBv
ZiB0aGUgbWVkaXVtIGZlYXR1cmVzLiBUaGlzIGNhbiBoYXBwZW4KLSAqIGZvciBleGFtcGxlIHdo
ZW4gcGFyc2luZyBVQSBzdHlsZXNoZWV0cywgaWYgZXZhbHVhdGlvbiBpcyBkb25lCi0gKiByaWdo
dCBhZnRlciBwYXJzaW5nLgotICoKLSAqIHRoZSBib29sZWFuIHBhcmFtZXRlciBpcyB1c2VkIHRv
IGFwcHJveGltYXRlIHJlc3VsdHMgb2YgZXZhbHVhdGlvbiwgaWYKLSAqIHRoZSBkZXZpY2UgY2hh
cmFjdGVyaXN0aWNzIGFyZSBub3Qga25vd24uIFRoaXMgY2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhl
IGxvYWRpbmcKLSAqIG9mIHN0eWxlc2hlZXRzIHRvIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIHByb2Jh
YmxlIHRvIG1hdGNoLgotICovCisvLyBTb21lIG9mIHRoZSBjb25zdHJ1Y3RvcnMgYXJlIHVzZWQg
Zm9yIGNhc2VzIHdoZXJlIHRoZSBkZXZpY2UgY2hhcmFjdGVyaXN0aWNzIGFyZSBub3Qga25vd24u
CisvLyBUaGVzZSAgY2FuIGJlIHVzZWQgdG8gcHJ1bmUgdGhlIGxvYWRpbmcgb2Ygc3R5bGVzaGVl
dHMgdG8gb25seSB0aG9zZSB3aGljaCBhcmUgbm90IGFscmVhZHkga25vd24gdG8gbm90IG1hdGNo
LgorCiBjbGFzcyBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsKLSAgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoTWVkaWFRdWVyeUV2YWx1YXRvcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGlj
OgotICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUg
bWVkaWEgcXVlcmllcwotICAgICAqICBFdmFsdWF0b3IgcmV0dXJucyB0cnVlIGZvciAiYWxsIiwg
YW5kIHJldHVybnMgdmFsdWUgb2YgXG1lZGlhRmVhdHVyZVJlc3VsdAotICAgICAqICBmb3IgYW55
IG1lZGlhIGZlYXR1cmVzCi0gICAgICovCisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2gg
ZXZhbHVhdGVzIG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMuCisgICAgLy8gRXZhbHVhdG9yIHJl
dHVybnMgdHJ1ZSBmb3IgImFsbCIsIGFuZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVS
ZXN1bHQgZm9yIGFueSBtZWRpYSBmZWF0dXJlcy4KICAgICBleHBsaWNpdCBNZWRpYVF1ZXJ5RXZh
bHVhdG9yKGJvb2wgbWVkaWFGZWF0dXJlUmVzdWx0ID0gZmFsc2UpOwogCi0gICAgLyoqIENyZWF0
ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzCi0g
ICAgICogIEV2YWx1YXRvciAgcmV0dXJucyB0cnVlIGZvciBhY2NlcHRlZE1lZGlhVHlwZSBhbmQg
cmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFmZWF0dXJlUmVzdWx0Ci0gICAgICogIGZvciBhbnkgbWVk
aWEgZmVhdHVyZXMKLSAgICAgKi8KKyAgICAvLyBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFs
dWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmllcy4KKyAgICAvLyBFdmFsdWF0b3IgcmV0dXJu
cyB0cnVlIGZvciBhY2NlcHRlZE1lZGlhVHlwZSBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFG
ZWF0dXJlUmVzdWx0IGZvciBhbnkgbWVkaWEgZmVhdHVyZXMuCiAgICAgTWVkaWFRdWVyeUV2YWx1
YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVyZVJl
c3VsdCA9IGZhbHNlKTsKIAotICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzCi0gICAgICovCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvcihj
b25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBGcmFtZSosIGNvbnN0IFJlbmRlclN0eWxl
Kik7Ci0KLSAgICB+TWVkaWFRdWVyeUV2YWx1YXRvcigpOworICAgIC8vIENyZWF0ZXMgZXZhbHVh
dG9yIHdoaWNoIGV2YWx1YXRlcyBmdWxsIG1lZGlhIHF1ZXJpZXMuCisgICAgTWVkaWFRdWVyeUV2
YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBlLCBEb2N1bWVudCYsIGNvbnN0
IFJlbmRlclN0eWxlKik7CiAKICAgICBib29sIG1lZGlhVHlwZU1hdGNoKGNvbnN0IFN0cmluZyYg
bWVkaWFUeXBlVG9NYXRjaCkgY29uc3Q7CiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaFNwZWNpZmlj
KGNvbnN0IGNoYXIqIG1lZGlhVHlwZVRvTWF0Y2gpIGNvbnN0OwogCi0gICAgLyoqIEV2YWx1YXRl
cyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcyAqLwotICAgIGJvb2wgZXZhbChjb25zdCBNZWRpYVF1
ZXJ5U2V0KiwgU3R5bGVSZXNvbHZlciogPSAwKSBjb25zdDsKKyAgICAvLyBFdmFsdWF0ZXMgYSBs
aXN0IG9mIG1lZGlhIHF1ZXJpZXMuCisgICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5
U2V0JiwgU3R5bGVSZXNvbHZlciogPSBudWxscHRyKSBjb25zdDsKKworICAgIC8vIEV2YWx1YXRl
cyBtZWRpYSBxdWVyeSBzdWJleHByZXNzaW9uLCBpZSAiYW5kIChtZWRpYS1mZWF0dXJlOiB2YWx1
ZSkiIHBhcnQuCisgICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYp
IGNvbnN0OwogCi0gICAgLyoqIEV2YWx1YXRlcyBtZWRpYSBxdWVyeSBzdWJleHByZXNzaW9uLCBp
ZSAiYW5kIChtZWRpYS1mZWF0dXJlOiB2YWx1ZSkiIHBhcnQgKi8KLSAgICBib29sIGV2YWwoY29u
c3QgTWVkaWFRdWVyeUV4cCopIGNvbnN0OwotICAgIAotICAgIC8qIEV2YWx1YXRlcyBhIGxpc3Qg
b2YgbWVkaWEgcXVlcmllcyBhbmQgZmlsbHMgaW4gYSB2ZWN0b3Igd2l0aCBhbnkgdmlld3BvcnQt
ZGVwZW5kZW50IHJlc3VsdHMgZm91bmQuICovCi0gICAgYm9vbCBldmFsQ2hlY2tpbmdWaWV3cG9y
dERlcGVuZGVudFJlc3VsdHMoY29uc3QgTWVkaWFRdWVyeVNldCosIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+Jik7CisgICAgLy8gRXZhbHVhdGVzIGEgbGlzdCBvZiBt
ZWRpYSBxdWVyaWVzIGFuZCBmaWxscyBpbiBhIHZlY3RvciB3aXRoIGFueSB2aWV3cG9ydC1kZXBl
bmRlbnQgcmVzdWx0cyBmb3VuZC4KKyAgICBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlT
ZXQmLCBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdD4mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBT
dHJpbmcgbV9tZWRpYVR5cGU7CiAgICAgRnJhbWUqIG1fZnJhbWUgeyBudWxscHRyIH07IC8vIG5v
dCBvd25lZAogICAgIGNvbnN0IFJlbmRlclN0eWxlKiBtX3N0eWxlIHsgbnVsbHB0ciB9OwotICAg
IGJvb2wgbV9leHBSZXN1bHQ7CisgICAgYm9vbCBtX2ZhbGxiYWNrUmVzdWx0IHsgZmFsc2UgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhw
LmNwcAppbmRleCBlOGRhNzgwNDU5Njk1YTgxYTcyNWVhZjEyYjU1NmRjMDA2NWVmNjUzLi41OWUx
NWEzOGIyMWI3OGQzNGI4NDQxMTgzYTk1ZmU3ODQ4MWNlYjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFeHAuY3BwCkBAIC0zMiwyMDEgKzMyLDE4NiBAQAogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVM
aXN0LmgiCisjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGlu
ZSBib29sIGZlYXR1cmVXaXRoQ1NTVmFsdWVJRChjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVh
dHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlz
RmVhdHVyZVZhbGlkV2l0aElkZW50aWZpZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1
cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIXZhbHVlLT5pZCkK
KyAgICBpZiAoIXZhbHVlLmlkKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4g
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVy
ZQorICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om9yaWVudGF0
aW9uCiAjaWYgRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCi0gICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlld19tb2RlTWVkaWFGZWF0dXJlCi0jZW5kaWYg
Ly8gRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JfZ2FtdXRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlfaG92ZXJNZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlfcG9pbnRl
ck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmhvdmVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6aW52ZXJ0ZWRfY29sb3JzTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlck1lZGlhRmVhdHVyZTsKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWV3TW9kZQorI2VuZGlm
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JHYW11
dAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueUhvdmVy
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55UG9pbnRl
cgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmhvdmVyCisg
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aW52ZXJ0ZWRDb2xv
cnMKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpwb2ludGVy
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhWYWxpZFBvc2l0aXZlTGVuZ2h0
T3JOdW1iZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNl
clZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25O
ZWdhdGl2ZUxlbmd0aE9yTnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBj
b25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCEoQ1NTUHJpbWl0aXZlVmFs
dWU6OmlzTGVuZ3RoKHZhbHVlLT51bml0KSB8fCB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUikgfHwgdmFsdWUtPmZWYWx1ZSA8IDApCisgICAgaWYgKCEoQ1NTUHJp
bWl0aXZlVmFsdWU6OmlzTGVuZ3RoKHZhbHVlLnVuaXQpIHx8IHZhbHVlLnVuaXQgPT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpIHx8IHZhbHVlLmZWYWx1ZSA8IDApCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmhlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heF9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5faGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGhNZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfd2lkdGhN
ZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptaW5fd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2RldmljZV9oZWlnaHRNZWRpYUZlYXR1
cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fZGV2
aWNlX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmRldmljZV93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9kZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fZGV2aWNl
X3dpZHRoTWVkaWFGZWF0dXJlOworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OmhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1heEhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1pbkhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OndpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6bWF4V2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptaW5XaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmRldmljZUhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heERldmljZUhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6Om1pbkRldmljZUhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmRldmljZVdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlV2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5EZXZpY2VXaWR0aDsKIH0KIAotc3RhdGljIGlubGlu
ZSBib29sIGZlYXR1cmVXaXRoVmFsaWREZW5zaXR5KGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFG
ZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wg
aXNGZWF0dXJlVmFsaWRXaXRoRGVuc2l0eShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVy
ZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmICghQ1NTUHJpbWl0aXZl
VmFsdWU6OmlzUmVzb2x1dGlvbih2YWx1ZS0+dW5pdCkgfHwgdmFsdWUtPmZWYWx1ZSA8PSAwKQor
ICAgIGlmICghQ1NTUHJpbWl0aXZlVmFsdWU6OmlzUmVzb2x1dGlvbih2YWx1ZS51bml0KSB8fCB2
YWx1ZS5mVmFsdWUgPD0gMCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZQot
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9yZXNvbHV0
aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluX3Jlc29sdXRpb25NZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFJlc29sdXRpb24KKyAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5SZXNvbHV0aW9uOwogfQogCi1zdGF0aWMg
aW5saW5lIGJvb2wgZmVhdHVyZVdpdGhQb3NpdGl2ZUludGVnZXIoY29uc3QgQXRvbWljU3RyaW5n
JiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxp
bmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZUludGVnZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBpZiAoIXZhbHVlLT5pc0ludCB8fCB2YWx1ZS0+ZlZhbHVlIDwgMCkKKyAgICBpZiAoIXZhbHVl
LmlzSW50IHx8IHZhbHVlLmZWYWx1ZSA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2Nv
bG9yTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluX2NvbG9yTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JfaW5kZXhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfY29sb3JfaW5kZXhNZWRpYUZlYXR1
cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fY29s
b3JfaW5kZXhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptaW5fbW9ub2Nocm9tZU1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9tb25vY2hyb21lTWVkaWFGZWF0dXJlOwor
ICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yCisgICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4Q29sb3IKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5Db2xvcgorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9ySW5kZXgKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhDb2xvckluZGV4Cisg
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluQ29sb3JJbmRl
eAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbk1vbm9j
aHJvbWUKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhN
b25vY2hyb21lOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhQb3NpdGl2ZU51
bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0
aXZlTnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKHZhbHVlLT51bml0ICE9IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSIHx8IHZhbHVlLT5mVmFsdWUgPCAwKQorICAgIGlmICh2YWx1ZS51bml0
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSIHx8IHZhbHVlLmZWYWx1ZSA8IDApCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnRyYW5zZm9ybV8yZE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zZm9ybV8zZE1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zaXRpb25NZWRp
YUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjph
bmltYXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjpkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
bWluX2RldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZTsKKyAgICByZXR1cm4gbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm0yZAorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zZm9ybTNkCisgICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNpdGlvbgorICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFuaW1hdGlvbgorICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZVBpeGVsUmF0aW8KKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhEZXZpY2VQaXhlbFJhdGlv
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluRGV2aWNl
UGl4ZWxSYXRpbzsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVXaXRoWmVyb09yT25l
KGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSog
dmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoWmVyb09yT25lKGNv
bnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNJbnQgfHwgISh2YWx1ZS0+ZlZhbHVlID09IDEgfHwg
IXZhbHVlLT5mVmFsdWUpKQorICAgIGlmICghdmFsdWUuaXNJbnQgfHwgISh2YWx1ZS5mVmFsdWUg
PT0gMSB8fCAhdmFsdWUuZlZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0
dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Z3JpZE1lZGlhRmVhdHVyZTsK
KyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpncmlkOwogfQog
Ci1zdGF0aWMgaW5saW5lIGJvb2wgZmVhdHVyZVdpdGhBc3BlY3RSYXRpbyhjb25zdCBBdG9taWNT
dHJpbmcmIG1lZGlhRmVhdHVyZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0FzcGVjdFJhdGlvRmVh
dHVyZShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSkKIHsKLSAgICByZXR1cm4gbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VfYXNw
ZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1
cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fZGV2
aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6Om1heF9kZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlOwor
ICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFzcGVjdFJhdGlv
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlQXNw
ZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpt
aW5Bc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1heEFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6bWluRGV2aWNlQXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09
IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhEZXZpY2VBc3BlY3RSYXRpbzsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGZlYXR1cmVXaXRob3V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZl
YXR1cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRob3V0VmFsdWUoY29u
c3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUpCiB7CiAgICAgLy8gTWVkaWEgZmVhdHVyZXMg
dGhhdCBhcmUgcHJlZml4ZWQgYnkgbWluL21heCBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IGEgdmFs
dWUuCi0gICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55X2hv
dmVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6YW55X3BvaW50ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09
IE1lZGlhRmVhdHVyZU5hbWVzOjptb25vY2hyb21lTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JNZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcl9pbmRleE1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Omdy
aWRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpoZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjp3aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2Vfd2lkdGhNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmll
bnRhdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OmFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUK
LSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpob3Zlck1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRy
YW5zZm9ybV8yZE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnRyYW5zZm9ybV8zZE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zaXRpb25NZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbmltYXRpb25NZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjppbnZl
cnRlZF9jb2xvcnNNZWRpYUZlYXR1cmUKKyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjphbnlIb3ZlcgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmFueVBvaW50ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptb25vY2hyb21lCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6Y29sb3IKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjpjb2xvckluZGV4CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6Z3JpZAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OndpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
ZGV2aWNlSGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6ZGV2aWNlV2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpvcmllbnRhdGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6ZGV2aWNlQXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjpob3ZlcgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnRyYW5zZm9ybTJkCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtM2QKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2l0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6YW5pbWF0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6aW52ZXJ0ZWRDb2xvcnMKICNpZiBFTkFCTEUoVklFV19NT0RFX0NT
U19NRURJQSkKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2
aWV3X21vZGVNZWRpYUZlYXR1cmUKLSNlbmRpZiAvLyBFTkFCTEUoVklFV19NT0RFX0NTU19NRURJ
QSkKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpwb2ludGVy
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6ZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZGVvX3BsYXlhYmxlX2lubGlu
ZU1lZGlhRmVhdHVyZTsKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjp2aWV3TW9kZQorI2VuZGlmCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6cG9pbnRlcgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OmRldmljZVBpeGVsUmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjpyZXNvbHV0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6dmlkZW9QbGF5YWJsZUlubGluZTsKIH0KIAotTWVkaWFRdWVyeUV4
cDo6TWVkaWFRdWVyeUV4cChjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgQ1NTUGFy
c2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFs
aWRXaXRoTnVtYmVyV2l0aFVuaXQoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNv
bnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaXNGZWF0dXJlVmFsaWRX
aXRoRGVuc2l0eShtZWRpYUZlYXR1cmUsIHZhbHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25O
ZWdhdGl2ZUxlbmd0aE9yTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpOworfQorCitzdGF0aWMg
aW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYg
bWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJu
IGlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlSW50ZWdlcihtZWRpYUZlYXR1cmUsIHZhbHVl
KSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZU51bWJlcihtZWRpYUZlYXR1cmUsIHZh
bHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhaZXJvT3JPbmUobWVkaWFGZWF0dXJlLCB2YWx1ZSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1NsYXNoKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYg
dmFsdWUuaVZhbHVlID09ICcvJzsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzUG9zaXRpdmVJ
bnRlZ2VyVmFsdWUoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiB2YWx1ZS51
bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYmIHZhbHVlLmZWYWx1ZSA+IDAg
JiYgdmFsdWUuaXNJbnQ7Cit9CisKK01lZGlhUXVlcnlFeHByZXNzaW9uOjpNZWRpYVF1ZXJ5RXhw
cmVzc2lvbihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgQ1NTUGFyc2VyVmFsdWVM
aXN0KiB2YWx1ZUxpc3QpCiAgICAgOiBtX21lZGlhRmVhdHVyZShtZWRpYUZlYXR1cmUpCiB7Ci0g
ICAgLy8gSW5pdGlhbGl6ZSBtZWRpYSBxdWVyeSBleHByZXNzaW9uIHRoYXQgbXVzdCBoYXZlIDEg
b3IgbW9yZSB2YWx1ZXMuCi0gICAgaWYgKHZhbHVlTGlzdCkgewotICAgICAgICBpZiAodmFsdWVM
aXN0LT5zaXplKCkgPT0gMSkgewotICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0g
dmFsdWVMaXN0LT5jdXJyZW50KCk7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRo
YXQgdXNlIENTU1ZhbHVlSURzLgotICAgICAgICAgICAgaWYgKGZlYXR1cmVXaXRoQ1NTVmFsdWVJ
RChtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIodmFsdWUtPmlkKTsKLQotICAgICAgICAgICAg
Ly8gTWVkaWEgZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0aXZlIDxkZW5zaXR5Piwg
aWUuIGRwcHgsIGRwaSBvciBkcGNtLgotICAgICAgICAgICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhW
YWxpZERlbnNpdHkobWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1
ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKLQotICAgICAgICAgICAgLy8gTWVkaWEg
ZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0aXZlIDxsZW5naHQ+IG9yIG51bWJlciB2
YWx1ZS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoVmFsaWRQb3NpdGl2ZUxlbmdo
dE9yTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZl
YXR1cmVzIHRoYXQgbXVzdCBoYXZlIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlLgotICAgICAg
ICAgICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhQb3NpdGl2ZUludGVnZXIobWVkaWFGZWF0dXJlLCB2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotCi0gICAg
ICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3QgaGF2ZSBub24tbmVnYXRpdmUgbnVt
YmVyIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhQb3NpdGl2ZU51bWJl
cihtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUik7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgbXVzdCBoYXZl
ICgwfDEpIHZhbHVlLgotICAgICAgICAgICAgZWxzZSBpZiAoZmVhdHVyZVdpdGhaZXJvT3JPbmUo
bWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOwotCi0gICAgICAgICAgICBtX2lzVmFsaWQgPSBtX3ZhbHVlOwotICAgICAgICB9IGVs
c2UgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09IDMgJiYgZmVhdHVyZVdpdGhBc3BlY3RSYXRpbyht
ZWRpYUZlYXR1cmUpKSB7Ci0gICAgICAgICAgICAvLyBDcmVhdGUgbGlzdCBvZiB2YWx1ZXMuCi0g
ICAgICAgICAgICAvLyBDdXJyZW50bHkgYWNjZXB0cyBvbmx5IDxpbnRlZ2VyPi88aW50ZWdlcj4u
Ci0gICAgICAgICAgICAvLyBBcHBsaWNhYmxlIHRvIGRldmljZS1hc3BlY3QtcmF0aW8gYW5kIGFz
cGVjLXJhdGlvLgotICAgICAgICAgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAg
IGZsb2F0IG51bWVyYXRvclZhbHVlID0gMDsKLSAgICAgICAgICAgIGZsb2F0IGRlbm9taW5hdG9y
VmFsdWUgPSAwOwotCi0gICAgICAgICAgICAvLyBUaGUgYXNwZWN0LXJhdGlvIG11c3QgYmUgPGlu
dGVnZXI+ICh3aGl0ZXNwYWNlKT8gLyAod2hpdGVzcGFjZSk/IDxpbnRlZ2VyPi4KLSAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAzOyArK2ksIHZhbHVlTGlzdC0+bmV4dCgpKSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlID0gdmFsdWVMaXN0
LT5jdXJyZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGkgIT0gMSAmJiB2YWx1ZS0+dW5pdCA9
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS0+ZlZhbHVlID4gMCAmJiB2
YWx1ZS0+aXNJbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtZXJhdG9yVmFsdWUgPSB2YWx1ZS0+ZlZhbHVlOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBkZW5vbWluYXRvclZhbHVlID0g
dmFsdWUtPmZWYWx1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT0gMSAmJiB2YWx1
ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAn
LycpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaWYgKGlzVmFsaWQpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU0FzcGVjdFJhdGlv
VmFsdWU6OmNyZWF0ZShudW1lcmF0b3JWYWx1ZSwgZGVub21pbmF0b3JWYWx1ZSk7Ci0KLSAgICAg
ICAgICAgIG1faXNWYWxpZCA9IG1fdmFsdWU7CisgICAgaWYgKCF2YWx1ZUxpc3QpIHsKKyAgICAg
ICAgaWYgKGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKG1lZGlhRmVhdHVyZSkpCisgICAgICAg
ICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgIH0gZWxzZSBpZiAodmFsdWVMaXN0LT5zaXplKCkg
PT0gMSkgeworICAgICAgICBhdXRvJiB2YWx1ZSA9ICp2YWx1ZUxpc3QtPnZhbHVlQXQoMCk7Cisg
ICAgICAgIGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhJZGVudGlmaWVyKG1lZGlhRmVhdHVyZSwgdmFs
dWUpKSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlk
ZW50aWZpZXIodmFsdWUuaWQpOworICAgICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJXaXRoVW5pdChtZWRpYUZlYXR1
cmUsIHZhbHVlKSB8fCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZUxlbmd0aE9yTnVtYmVy
KG1lZGlhRmVhdHVyZSwgdmFsdWUpKSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKSB2YWx1ZS51bml0KTsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoaXNGZWF0dXJlVmFsaWRXaXRoTnVtYmVyKG1lZGlhRmVhdHVyZSwgdmFsdWUp
KSB7CisgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIHdlIG1lcmdlIHRoaXMgd2l0aCB0aGUgY2Fz
ZSBhYm92ZT8KKyAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOworICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAodmFsdWVMaXN0
LT5zaXplKCkgPT0gMyAmJiBpc0FzcGVjdFJhdGlvRmVhdHVyZShtZWRpYUZlYXR1cmUpKSB7Cisg
ICAgICAgIGF1dG8mIG51bWVyYXRvciA9ICp2YWx1ZUxpc3QtPnZhbHVlQXQoMCk7CisgICAgICAg
IGF1dG8mIHNsYXNoID0gKnZhbHVlTGlzdC0+dmFsdWVBdCgxKTsKKyAgICAgICAgYXV0byYgZGVu
b21pbmF0b3IgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDIpOworICAgICAgICBpZiAoaXNQb3NpdGl2
ZUludGVnZXJWYWx1ZShudW1lcmF0b3IpICYmIGlzU2xhc2goc2xhc2gpICYmIGlzUG9zaXRpdmVJ
bnRlZ2VyVmFsdWUoZGVub21pbmF0b3IpKSB7CisgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTQXNw
ZWN0UmF0aW9WYWx1ZTo6Y3JlYXRlKG51bWVyYXRvci5mVmFsdWUsIGRlbm9taW5hdG9yLmZWYWx1
ZSk7CisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOwogICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChmZWF0dXJlV2l0aG91dFZhbHVlKG1lZGlhRmVhdHVyZSkpCi0gICAgICAgIG1faXNWYWxp
ZCA9IHRydWU7CisgICAgfQogfQogCi1TdHJpbmcgTWVkaWFRdWVyeUV4cDo6c2VyaWFsaXplKCkg
Y29uc3QKK1N0cmluZyBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6c2VyaWFsaXplKCkgY29uc3QKIHsK
ICAgICBpZiAoIW1fc2VyaWFsaXphdGlvbkNhY2hlLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4g
bV9zZXJpYWxpemF0aW9uQ2FjaGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFRdWVyeUV4cC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuaAppbmRleCA3
YzM4Mzk3NTU5NWZkYTgxOGYxZDZkNTA5YzM2MjJhMjAwM2QyMzI0Li4yYjRlNzFjYzgwYWM0ODll
NGE4NTU0OTBkMzE0NzAzMzk0YmNlYzZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUV4cC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgK
QEAgLTI1LDMyICsyNSwyOSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1lZGlh
UXVlcnlFeHBfaAotI2RlZmluZSBNZWRpYVF1ZXJ5RXhwX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSAiQ1NTVmFsdWUuaCIKLSNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1
ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NQYXJzZXJWYWx1ZUxpc3Q7CiAKLWNsYXNzIE1lZGlh
UXVlcnlFeHAgeworLy8gRklYTUU6IFJlbmFtZSB0aGUgZmlsZSB0byBtYXRjaCB0aGlzIGNsYXNz
J3MgbmFtZS4KK2NsYXNzIE1lZGlhUXVlcnlFeHByZXNzaW9uIHsKICAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBNZWRpYVF1ZXJ5RXhwKGNvbnN0IEF0
b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlID0gZW1wdHlBdG9tLCBDU1NQYXJzZXJWYWx1ZUxpc3Qq
IHZhbHVlcyA9IG51bGxwdHIpOworICAgIGV4cGxpY2l0IE1lZGlhUXVlcnlFeHByZXNzaW9uKGNv
bnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlID0gZW1wdHlBdG9tLCBDU1NQYXJzZXJWYWx1
ZUxpc3QqIHZhbHVlcyA9IG51bGxwdHIpOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtZWRp
YUZlYXR1cmUoKSBjb25zdDsKICAgICBDU1NWYWx1ZSogdmFsdWUoKSBjb25zdDsKIAogICAgIGJv
b2wgaXNWYWxpZCgpIGNvbnN0OwotICAgIGJvb2wgaXNWaWV3cG9ydERlcGVuZGVudCgpIGNvbnN0
OwogCiAgICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNvbnN0OwogCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IE1lZGlhUXVlcnlFeHAmKSBjb25zdDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
TWVkaWFRdWVyeUV4cHJlc3Npb24mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBBdG9taWNTdHJp
bmcgbV9tZWRpYUZlYXR1cmU7CkBAIC01OSw0MiArNTYsMjUgQEAgcHJpdmF0ZToKICAgICBtdXRh
YmxlIFN0cmluZyBtX3NlcmlhbGl6YXRpb25DYWNoZTsKIH07CiAKLWlubGluZSBjb25zdCBBdG9t
aWNTdHJpbmcmIE1lZGlhUXVlcnlFeHA6Om1lZGlhRmVhdHVyZSgpIGNvbnN0CitpbmxpbmUgY29u
c3QgQXRvbWljU3RyaW5nJiBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6bWVkaWFGZWF0dXJlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gbV9tZWRpYUZlYXR1cmU7CiB9CiAKLWlubGluZSBDU1NWYWx1ZSog
TWVkaWFRdWVyeUV4cDo6dmFsdWUoKSBjb25zdAoraW5saW5lIENTU1ZhbHVlKiBNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6dmFsdWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3ZhbHVlLmdldCgpOwog
fQogCi1pbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwOjpvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVl
cnlFeHAmIG90aGVyKSBjb25zdAoraW5saW5lIGJvb2wgTWVkaWFRdWVyeUV4cHJlc3Npb246Om9w
ZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIG90aGVyKSBjb25zdAogewotICAg
IHJldHVybiAob3RoZXIubV9tZWRpYUZlYXR1cmUgPT0gbV9tZWRpYUZlYXR1cmUpCi0gICAgICAg
ICYmICgoIW90aGVyLm1fdmFsdWUgJiYgIW1fdmFsdWUpCi0gICAgICAgICAgICB8fCAob3RoZXIu
bV92YWx1ZSAmJiBtX3ZhbHVlICYmIG90aGVyLm1fdmFsdWUtPmVxdWFscygqbV92YWx1ZSkpKTsK
KyAgICByZXR1cm4gb3RoZXIubV9tZWRpYUZlYXR1cmUgPT0gbV9tZWRpYUZlYXR1cmUKKyAgICAg
ICAgJiYgKCghbV92YWx1ZSAmJiAhb3RoZXIubV92YWx1ZSkgfHwgKG1fdmFsdWUgJiYgb3RoZXIu
bV92YWx1ZSAmJiAqbV92YWx1ZSA9PSAqb3RoZXIubV92YWx1ZSkpOwogfQogCi1pbmxpbmUgYm9v
bCBNZWRpYVF1ZXJ5RXhwOjppc1ZhbGlkKCkgY29uc3QKK2lubGluZSBib29sIE1lZGlhUXVlcnlF
eHByZXNzaW9uOjppc1ZhbGlkKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9pc1ZhbGlkOwogfQog
Ci1pbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwOjppc1ZpZXdwb3J0RGVwZW5kZW50KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRo
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpoZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1pbl93aWR0aE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2hlaWdodE1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3dpZHRoTWVk
aWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fYXNw
ZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlOwotfQotCiB9IC8vIG5h
bWVzcGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuY3BwCmluZGV4
IDdiNGZkMDJkZDU0Yjc0ZDQwMTcyZTMwNGIyMGNkZGFjNzliMGJlN2UuLjQwMTBjMjljN2E3ZDkz
YWYyNGU0YTU2MmMxNjVlOTg2YmEzMTVkZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYVF1ZXJ5TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlM
aXN0LmNwcApAQCAtMjcsMTggKzI3LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVm
PE1lZGlhUXVlcnlMaXN0PiBNZWRpYVF1ZXJ5TGlzdDo6Y3JlYXRlKFBhc3NSZWZQdHI8TWVkaWFR
dWVyeU1hdGNoZXI+IHZlY3RvciwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgYm9v
bCBtYXRjaGVzKQoraW5saW5lIE1lZGlhUXVlcnlMaXN0OjpNZWRpYVF1ZXJ5TGlzdChNZWRpYVF1
ZXJ5TWF0Y2hlciYgbWF0Y2hlciwgUmVmPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEsIGJvb2wgbWF0
Y2hlcykKKyAgICA6IG1fbWF0Y2hlcihtYXRjaGVyKQorICAgICwgbV9tZWRpYShXVEZNb3ZlKG1l
ZGlhKSkKKyAgICAsIG1fZXZhbHVhdGlvblJvdW5kKG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5k
KCkpCisgICAgLCBtX2NoYW5nZVJvdW5kKG1fZXZhbHVhdGlvblJvdW5kIC0gMSkgLy8gQW55IHZh
bHVlIHRoYXQgaXMgbm90IHRoZSBzYW1lIGFzIG1fZXZhbHVhdGlvblJvdW5kIHdvdWxkIGRvLgor
ICAgICwgbV9tYXRjaGVzKG1hdGNoZXMpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVk
aWFRdWVyeUxpc3QodmVjdG9yLCBtZWRpYSwgbWF0Y2hlcykpOwogfQogCi1NZWRpYVF1ZXJ5TGlz
dDo6TWVkaWFRdWVyeUxpc3QoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gdmVjdG9yLCBQ
YXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhLCBib29sIG1hdGNoZXMpCi0gICAgOiBtX21h
dGNoZXIodmVjdG9yKQotICAgICwgbV9tZWRpYShtZWRpYSkKLSAgICAsIG1fZXZhbHVhdGlvblJv
dW5kKG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCkpCi0gICAgLCBtX2NoYW5nZVJvdW5kKG1f
ZXZhbHVhdGlvblJvdW5kIC0gMSkgLy8gbV9ldmFsdWF0aW9uUm91bmQgYW5kIG1fY2hhbmdlUm91
bmQgaW5pdGlhbCB2YWx1ZXMgbXVzdCBiZSBkaWZmZXJlbnQuCi0gICAgLCBtX21hdGNoZXMobWF0
Y2hlcykKK1JlZjxNZWRpYVF1ZXJ5TGlzdD4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZShNZWRpYVF1
ZXJ5TWF0Y2hlciYgbWF0Y2hlciwgUmVmPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEsIGJvb2wgbWF0
Y2hlcykKIHsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVF1ZXJ5TGlzdChtYXRjaGVy
LCBXVEZNb3ZlKG1lZGlhKSwgbWF0Y2hlcykpOwogfQogCiBNZWRpYVF1ZXJ5TGlzdDo6fk1lZGlh
UXVlcnlMaXN0KCkKQEAgLTUwLDI2ICs1MCwyNiBAQCBTdHJpbmcgTWVkaWFRdWVyeUxpc3Q6Om1l
ZGlhKCkgY29uc3QKICAgICByZXR1cm4gbV9tZWRpYS0+bWVkaWFUZXh0KCk7CiB9CiAKLXZvaWQg
TWVkaWFRdWVyeUxpc3Q6OmFkZExpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lcj4gbGlzdGVuZXIpCit2b2lkIE1lZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcihSZWZQdHI8
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiBsaXN0ZW5lcikKIHsKICAgICBpZiAoIWxpc3RlbmVy
KQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21hdGNoZXItPmFkZExpc3RlbmVyKGxpc3RlbmVy
LCB0aGlzKTsKKyAgICBtX21hdGNoZXItPmFkZExpc3RlbmVyKGxpc3RlbmVyLnJlbGVhc2VOb25O
dWxsKCksICp0aGlzKTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5TGlzdDo6cmVtb3ZlTGlzdGVuZXIo
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBsaXN0ZW5lcikKK3ZvaWQgTWVkaWFR
dWVyeUxpc3Q6OnJlbW92ZUxpc3RlbmVyKFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYm
IGxpc3RlbmVyKQogewogICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IG1fbWF0Y2hlci0+cmVtb3ZlTGlzdGVuZXIobGlzdGVuZXIuZ2V0KCksIHRoaXMpOworICAgIG1f
bWF0Y2hlci0+cmVtb3ZlTGlzdGVuZXIoKmxpc3RlbmVyLCAqdGhpcyk7CiB9CiAKLXZvaWQgTWVk
aWFRdWVyeUxpc3Q6OmV2YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0b3IqIGV2YWx1YXRvciwgYm9v
bCYgbm90aWZpY2F0aW9uTmVlZGVkKQordm9pZCBNZWRpYVF1ZXJ5TGlzdDo6ZXZhbHVhdGUoTWVk
aWFRdWVyeUV2YWx1YXRvciYgZXZhbHVhdG9yLCBib29sJiBub3RpZmljYXRpb25OZWVkZWQpCiB7
Ci0gICAgaWYgKG1fZXZhbHVhdGlvblJvdW5kICE9IG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5k
KCkgJiYgZXZhbHVhdG9yKQotICAgICAgICBzZXRNYXRjaGVzKGV2YWx1YXRvci0+ZXZhbChtX21l
ZGlhLmdldCgpKSk7CisgICAgaWYgKG1fZXZhbHVhdGlvblJvdW5kICE9IG1fbWF0Y2hlci0+ZXZh
bHVhdGlvblJvdW5kKCkpCisgICAgICAgIHNldE1hdGNoZXMoZXZhbHVhdG9yLmV2YWx1YXRlKG1f
bWVkaWEuZ2V0KCkpKTsKICAgICBub3RpZmljYXRpb25OZWVkZWQgPSBtX2NoYW5nZVJvdW5kID09
IG1fbWF0Y2hlci0+ZXZhbHVhdGlvblJvdW5kKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlMaXN0LmgKaW5kZXggNjlhZmE3NmIwZTA2YjAyODQ0NDc5NGNlYzFmMDliZTgxNmJhNTY4OS4u
ZjM5MjkwZDI4MmQ1MDUxOGJiYjUyODA5N2I4MjNkNzU1NWRjNGM5MiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhUXVlcnlMaXN0LmgKQEAgLTE3LDggKzE3LDcgQEAKICAqICBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIE1lZGlhUXVlcnlMaXN0X2gKLSNkZWZpbmUgTWVk
aWFRdWVyeUxpc3RfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CkBAIC0zOCwyOCArMzcsMjcgQEAgY2xhc3MgTWVk
aWFRdWVyeVNldDsKIAogY2xhc3MgTWVkaWFRdWVyeUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxN
ZWRpYVF1ZXJ5TGlzdD4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeUxpc3Q+
IGNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1
ZXJ5U2V0PiwgYm9vbCk7CisgICAgc3RhdGljIFJlZjxNZWRpYVF1ZXJ5TGlzdD4gY3JlYXRlKE1l
ZGlhUXVlcnlNYXRjaGVyJiwgUmVmPE1lZGlhUXVlcnlTZXQ+JiYsIGJvb2wpOwogICAgIH5NZWRp
YVF1ZXJ5TGlzdCgpOwogCiAgICAgU3RyaW5nIG1lZGlhKCkgY29uc3Q7CiAgICAgYm9vbCBtYXRj
aGVzKCk7CiAKLSAgICB2b2lkIGFkZExpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcj4pOwotICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyPik7CisgICAgdm9pZCBhZGRMaXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4mJik7CisgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcj4mJik7CiAKLSAgICB2b2lkIGV2YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0
b3IqLCBib29sJiBub3RpZmljYXRpb25OZWVkZWQpOworICAgIHZvaWQgZXZhbHVhdGUoTWVkaWFR
dWVyeUV2YWx1YXRvciYsIGJvb2wmIG5vdGlmaWNhdGlvbk5lZWRlZCk7CiAKIHByaXZhdGU6Ci0g
ICAgTWVkaWFRdWVyeUxpc3QoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4sIFBhc3NSZWZQ
dHI8TWVkaWFRdWVyeVNldD4sIGJvb2wgbWF0Y2hlcyk7CisgICAgTWVkaWFRdWVyeUxpc3QoTWVk
aWFRdWVyeU1hdGNoZXImLCBSZWY8TWVkaWFRdWVyeVNldD4mJiwgYm9vbCBtYXRjaGVzKTsKKwog
ICAgIHZvaWQgc2V0TWF0Y2hlcyhib29sKTsKIAotICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hl
cj4gbV9tYXRjaGVyOwotICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhOworICAgIFJl
ZjxNZWRpYVF1ZXJ5TWF0Y2hlcj4gbV9tYXRjaGVyOworICAgIFJlZjxNZWRpYVF1ZXJ5U2V0PiBt
X21lZGlhOwogICAgIHVuc2lnbmVkIG1fZXZhbHVhdGlvblJvdW5kOyAvLyBJbmRpY2F0ZXMgaWYg
dGhlIHF1ZXJ5IGhhcyBiZWVuIGV2YWx1YXRlZCBhZnRlciB0aGUgbGFzdCBzdHlsZSBzZWxlY3Rv
ciBjaGFuZ2UuCiAgICAgdW5zaWduZWQgbV9jaGFuZ2VSb3VuZDsgLy8gVXNlZCB0byBrbm93IGlm
IHRoZSBxdWVyeSBoYXMgY2hhbmdlZCBpbiB0aGUgbGFzdCBzdHlsZSBzZWxlY3RvciBjaGFuZ2Uu
CiAgICAgYm9vbCBtX21hdGNoZXM7CiB9OwogCiB9Ci0KLSNlbmRpZiAvLyBNZWRpYVF1ZXJ5TGlz
dF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAppbmRleCAxNjBjN2Qz
NjI4ZWQyNzJhMDYxZGVjYmNhNDY1NzExZjEyNTk4NDg3Li5kOGI4Nzg3NDVmYjE1ZDJkYTczZDA2
ZDQ4MWI1ZjBkZWU0OTU4YjQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeU1hdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hl
ci5jcHAKQEAgLTIxLDcgKzIxLDYgQEAKICNpbmNsdWRlICJNZWRpYVF1ZXJ5TWF0Y2hlci5oIgog
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIK
QEAgLTMzLDMxICszMiwxMSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU1lZGlhUXVlcnlN
YXRjaGVyOjpMaXN0ZW5lcjo6TGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3Rl
bmVyPiBsaXN0ZW5lciwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gcXVlcnkpCi0gICAgOiBt
X2xpc3RlbmVyKGxpc3RlbmVyKQotICAgICwgbV9xdWVyeShxdWVyeSkKK01lZGlhUXVlcnlNYXRj
aGVyOjpNZWRpYVF1ZXJ5TWF0Y2hlcihEb2N1bWVudCYgZG9jdW1lbnQpCisgICAgOiBtX2RvY3Vt
ZW50KCZkb2N1bWVudCkKIHsKIH0KIAotTWVkaWFRdWVyeU1hdGNoZXI6Okxpc3RlbmVyOjp+TGlz
dGVuZXIoKQotewotfQotCi12b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpMaXN0ZW5lcjo6ZXZhbHVh
dGUoTWVkaWFRdWVyeUV2YWx1YXRvciogZXZhbHVhdG9yKQotewotICAgIGJvb2wgbm90aWZ5Owot
ICAgIG1fcXVlcnktPmV2YWx1YXRlKGV2YWx1YXRvciwgbm90aWZ5KTsKLSAgICBpZiAobm90aWZ5
KQotICAgICAgICBtX2xpc3RlbmVyLT5xdWVyeUNoYW5nZWQobV9xdWVyeS5nZXQoKSk7Ci19Ci0K
LU1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1ZXJ5TWF0Y2hlcihEb2N1bWVudCogZG9jdW1lbnQp
Ci0gICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQotICAgICwgbV9ldmFsdWF0aW9uUm91bmQoMSkK
LXsKLSAgICBBU1NFUlQobV9kb2N1bWVudCk7Ci19Ci0KIE1lZGlhUXVlcnlNYXRjaGVyOjp+TWVk
aWFRdWVyeU1hdGNoZXIoKQogewogfQpAQCAtNjUsNyArNDQsNyBAQCBNZWRpYVF1ZXJ5TWF0Y2hl
cjo6fk1lZGlhUXVlcnlNYXRjaGVyKCkKIHZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OmRvY3VtZW50
RGVzdHJveWVkKCkKIHsKICAgICBtX2xpc3RlbmVycy5jbGVhcigpOwotICAgIG1fZG9jdW1lbnQg
PSAwOworICAgIG1fZG9jdW1lbnQgPSBudWxscHRyOwogfQogCiBTdHJpbmcgTWVkaWFRdWVyeU1h
dGNoZXI6Om1lZGlhVHlwZSgpIGNvbnN0CkBAIC04MSwyMyArNjAsMTkgQEAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnRFbGVtZW50VXNlckFn
ZW50U3R5bGUoKQogICAgIGlmICghbV9kb2N1bWVudCB8fCAhbV9kb2N1bWVudC0+ZnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQg
PSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBhdXRvKiBkb2N1bWVudEVsZW1l
bnQgPSBtX2RvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxl
bWVudCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gbV9kb2N1bWVudC0+
ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50LCBt
X2RvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVy
U3R5bGU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKGNvbnN0IE1lZGlh
UXVlcnlTZXQqIG1lZGlhKQorYm9vbCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6ZXZhbHVhdGUoY29uc3Qg
TWVkaWFRdWVyeVNldCYgbWVkaWEpCiB7Ci0gICAgaWYgKCFtZWRpYSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCiAgICAgYXV0byBzdHlsZSA9IGRvY3VtZW50RWxlbWVudFVzZXJBZ2VudFN0eWxl
KCk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IgZXZhbHVhdG9yKG1lZGlhVHlwZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgpLCBz
dHlsZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGV2YWx1YXRvci5ldmFsKG1lZGlhKTsKKyAgICByZXR1
cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7IG1lZGlhVHlwZSgpLCAqbV9kb2N1bWVudCwgc3R5bGUu
Z2V0KCkgfS5ldmFsdWF0ZShtZWRpYSk7CiB9CiAKIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gTWVk
aWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEoY29uc3QgU3RyaW5nJiBxdWVyeSkKQEAgLTEwNSwz
NCArODAsMzIgQEAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6bWF0
Y2hNZWRpYShjb25zdCBTdHJpbmcmIHF1ZXJ5KQogICAgIGlmICghbV9kb2N1bWVudCkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBN
ZWRpYVF1ZXJ5U2V0OjpjcmVhdGUocXVlcnkpOworICAgIGF1dG8gbWVkaWEgPSBNZWRpYVF1ZXJ5
U2V0OjpjcmVhdGUocXVlcnkpOwogI2lmIEVOQUJMRShSRVNPTFVUSU9OX01FRElBX1FVRVJZKQog
ICAgIC8vIEFkZCB3YXJuaW5nIG1lc3NhZ2UgdG8gaW5zcGVjdG9yIHdoZW5ldmVyIGRwaS9kcGNt
IHZhbHVlcyBhcmUgdXNlZCBmb3IgInNjcmVlbiIgbWVkaWEuCiAgICAgcmVwb3J0TWVkaWFRdWVy
eVdhcm5pbmdJZk5lZWRlZChtX2RvY3VtZW50LCBtZWRpYS5nZXQoKSk7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZSh0aGlzLCBtZWRpYSwgZXZhbHVhdGUobWVkaWEu
Z2V0KCkpKTsKKyAgICBib29sIHJlc3VsdCA9IGV2YWx1YXRlKG1lZGlhLmdldCgpKTsKKyAgICBy
ZXR1cm4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShtZWRpYSksIHJlc3Vs
dCk7CiB9CiAKLXZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OmFkZExpc3RlbmVyKFBhc3NSZWZQdHI8
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxp
c3Q+IHF1ZXJ5KQordm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6YWRkTGlzdGVuZXIoUmVmPE1lZGlh
UXVlcnlMaXN0TGlzdGVuZXI+JiYgbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0JiBxdWVyeSkKIHsK
ICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9saXN0ZW5lcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCptX2xp
c3RlbmVyc1tpXS0+bGlzdGVuZXIoKSA9PSAqbGlzdGVuZXIgJiYgbV9saXN0ZW5lcnNbaV0tPnF1
ZXJ5KCkgPT0gcXVlcnkpCisgICAgZm9yIChhdXRvJiBleGlzdGluZ0xpc3RlbmVyIDogbV9saXN0
ZW5lcnMpIHsKKyAgICAgICAgaWYgKGV4aXN0aW5nTGlzdGVuZXIubGlzdGVuZXIuZ2V0KCkgPT0g
bGlzdGVuZXIuZ2V0KCkgJiYgZXhpc3RpbmdMaXN0ZW5lci5xdWVyeS5wdHIoKSA9PSAmcXVlcnkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9saXN0ZW5lcnMuYXBwZW5kKHN0
ZDo6bWFrZV91bmlxdWU8TGlzdGVuZXI+KGxpc3RlbmVyLCBxdWVyeSkpOworICAgIG1fbGlzdGVu
ZXJzLmFwcGVuZChMaXN0ZW5lciB7IFdURk1vdmUobGlzdGVuZXIpLCBxdWVyeSB9KTsKIH0KIAot
dm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6cmVtb3ZlTGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogbGlzdGVuZXIsIE1lZGlhUXVlcnlMaXN0KiBxdWVyeSkKK3ZvaWQgTWVkaWFRdWVyeU1h
dGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXImIGxpc3RlbmVyLCBN
ZWRpYVF1ZXJ5TGlzdCYgcXVlcnkpCiB7Ci0gICAgaWYgKCFtX2RvY3VtZW50KQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2xpc3RlbmVycy5yZW1vdmVGaXJzdE1hdGNoaW5nKFtsaXN0ZW5lciwg
cXVlcnldKGF1dG8mIGN1cnJlbnQpIHsKLSAgICAgICAgcmV0dXJuICpjdXJyZW50LT5saXN0ZW5l
cigpID09ICpsaXN0ZW5lciAmJiBjdXJyZW50LT5xdWVyeSgpID09IHF1ZXJ5OworICAgIG1fbGlz
dGVuZXJzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZsaXN0ZW5lciwgJnF1ZXJ5XShhdXRvJiBleGlz
dGluZ0xpc3RlbmVyKSB7CisgICAgICAgIHJldHVybiBleGlzdGluZ0xpc3RlbmVyLmxpc3RlbmVy
LmdldCgpID09IGxpc3RlbmVyICYmIGV4aXN0aW5nTGlzdGVuZXIucXVlcnkucHRyKCkgPT0gJnF1
ZXJ5OwogICAgIH0pOwogfQogCkBAIC0xNDUsOSArMTE4LDE0IEBAIHZvaWQgTWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKCkKICAgICBhdXRvIHN0eWxlID0gZG9jdW1lbnRF
bGVtZW50VXNlckFnZW50U3R5bGUoKTsKICAgICBpZiAoIXN0eWxlKQogICAgICAgICByZXR1cm47
Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IobWVkaWFUeXBlKCksIG1fZG9jdW1l
bnQtPmZyYW1lKCksIHN0eWxlLmdldCgpKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
bGlzdGVuZXJzLnNpemUoKTsgKytpKQotICAgICAgICBtX2xpc3RlbmVyc1tpXS0+ZXZhbHVhdGUo
JmV2YWx1YXRvcik7CisKKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvciB7IG1lZGlh
VHlwZSgpLCAqbV9kb2N1bWVudCwgc3R5bGUuZ2V0KCkgfTsKKyAgICBmb3IgKGF1dG8mIGxpc3Rl
bmVyIDogbV9saXN0ZW5lcnMpIHsKKyAgICAgICAgYm9vbCBub3RpZnk7CisgICAgICAgIGxpc3Rl
bmVyLnF1ZXJ5LT5ldmFsdWF0ZShldmFsdWF0b3IsIG5vdGlmeSk7CisgICAgICAgIGlmIChub3Rp
ZnkpCisgICAgICAgICAgICBsaXN0ZW5lci5saXN0ZW5lci0+cXVlcnlDaGFuZ2VkKGxpc3RlbmVy
LnF1ZXJ5LnB0cigpKTsKKyAgICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgKaW5kZXggYjc3NzNkMzhlODJlZDk0NTA1MzQ1
M2MyMzgxYTFmNDgzNDBmNGQwMC4uNDY0OGVlNmZjNDdhM2U1NjExNzcyYjhjMThmYzNlMDE0Y2Mz
MzhlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmgKQEAgLTE3LDggKzE3
LDcgQEAKICAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIE1l
ZGlhUXVlcnlNYXRjaGVyX2gKLSNkZWZpbmUgTWVkaWFRdWVyeU1hdGNoZXJfaAorI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KQEAgLTM3
LDUzICszNiw0MyBAQCBjbGFzcyBSZW5kZXJTdHlsZTsKIC8vIE1lZGlhUXVlcnlNYXRjaGVyIGNs
YXNzIGlzIHJlc3BvbnNpYmxlIGZvciBrZWVwaW5nIGEgdmVjdG9yIG9mIHBhaXJzCiAvLyBNZWRp
YVF1ZXJ5TGlzdCB4IE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuIEl0IGlzIHJlc3BvbnNpYmxlIGZv
ciBldmFsdWF0aW5nIHRoZSBxdWVyaWVzCiAvLyB3aGVuZXZlciBpdCBpcyBuZWVkZWQgYW5kIHRv
IGNhbGwgdGhlIGxpc3RlbmVycyBpZiB0aGUgY29ycmVzcG9uZGluZyBxdWVyeSBoYXMgY2hhbmdl
ZC4KLS8vIFRoZSBsaXN0ZW5lcnMgbXVzdCBiZSBjYWxsZWQgaW4gdGhlIHZlcnkgc2FtZSBvcmRl
ciBpbiB3aGljaCB0aGV5IGhhdmUgYmVlbiBhZGRlZC4KKy8vIFRoZSBsaXN0ZW5lcnMgbXVzdCBi
ZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSBhZGRlZC4KIAogY2xhc3Mg
TWVkaWFRdWVyeU1hdGNoZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYVF1ZXJ5TWF0Y2hlcj4g
ewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeU1hdGNoZXI+IGNyZWF0ZShEb2N1
bWVudCogZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFRdWVyeU1hdGNoZXIo
ZG9jdW1lbnQpKTsgfQorICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeU1hdGNoZXI+IGNyZWF0ZShE
b2N1bWVudCYgZG9jdW1lbnQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFRdWVyeU1hdGNo
ZXIoZG9jdW1lbnQpKTsgfQogICAgIH5NZWRpYVF1ZXJ5TWF0Y2hlcigpOworCiAgICAgdm9pZCBk
b2N1bWVudERlc3Ryb3llZCgpOwogCi0gICAgdm9pZCBhZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+LCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0Pik7Ci0gICAg
dm9pZCByZW1vdmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiwgTWVkaWFRdWVyeUxp
c3QqKTsKKyAgICB2b2lkIGFkZExpc3RlbmVyKFJlZjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiYm
LCBNZWRpYVF1ZXJ5TGlzdCYpOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoTWVkaWFRdWVyeUxp
c3RMaXN0ZW5lciYsIE1lZGlhUXVlcnlMaXN0Jik7CiAKICAgICBSZWZQdHI8TWVkaWFRdWVyeUxp
c3Q+IG1hdGNoTWVkaWEoY29uc3QgU3RyaW5nJik7CiAKICAgICB1bnNpZ25lZCBldmFsdWF0aW9u
Um91bmQoKSBjb25zdCB7IHJldHVybiBtX2V2YWx1YXRpb25Sb3VuZDsgfQotICAgIHZvaWQgc3R5
bGVSZXNvbHZlckNoYW5nZWQoKTsKLSAgICBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlT
ZXQqKTsKLQotcHJpdmF0ZToKLSAgICBjbGFzcyBMaXN0ZW5lciB7Ci0gICAgICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotICAgIHB1YmxpYzoKLSAgICAgICAgTGlzdGVuZXIoUGFzc1JlZlB0
cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4pOwot
ICAgICAgICB+TGlzdGVuZXIoKTsKIAotICAgICAgICB2b2lkIGV2YWx1YXRlKE1lZGlhUXVlcnlF
dmFsdWF0b3IqKTsKKyAgICB2b2lkIHN0eWxlUmVzb2x2ZXJDaGFuZ2VkKCk7CiAKLSAgICAgICAg
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogbGlzdGVuZXIoKSB7IHJldHVybiBtX2xpc3RlbmVyLmdl
dCgpOyB9Ci0gICAgICAgIE1lZGlhUXVlcnlMaXN0KiBxdWVyeSgpIHsgcmV0dXJuIG1fcXVlcnku
Z2V0KCk7IH0KKyAgICBib29sIGV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmKTsKIAotICAg
IHByaXZhdGU6Ci0gICAgICAgIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBtX2xpc3Rl
bmVyOwotICAgICAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IG1fcXVlcnk7Citwcml2YXRlOgor
ICAgIHN0cnVjdCBMaXN0ZW5lciB7CisgICAgICAgIFJlZjxNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
PiBsaXN0ZW5lcjsKKyAgICAgICAgUmVmPE1lZGlhUXVlcnlMaXN0PiBxdWVyeTsKICAgICB9Owog
Ci0gICAgTWVkaWFRdWVyeU1hdGNoZXIoRG9jdW1lbnQqKTsKKyAgICBleHBsaWNpdCBNZWRpYVF1
ZXJ5TWF0Y2hlcihEb2N1bWVudCYpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
ZG9jdW1lbnRFbGVtZW50VXNlckFnZW50U3R5bGUoKSBjb25zdDsKICAgICBTdHJpbmcgbWVkaWFU
eXBlKCkgY29uc3Q7CiAKICAgICBEb2N1bWVudCogbV9kb2N1bWVudDsKLSAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPExpc3RlbmVyPj4gbV9saXN0ZW5lcnM7CisgICAgVmVjdG9yPExpc3RlbmVy
PiBtX2xpc3RlbmVyczsKIAogICAgIC8vIFRoaXMgdmFsdWUgaXMgaW5jcmVtZW50ZWQgYXQgc3R5
bGUgc2VsZWN0b3IgY2hhbmdlcy4KICAgICAvLyBJdCBpcyB1c2VkIHRvIGF2b2lkIGV2YWx1YXRp
bmcgcXVlcmllcyBtb3JlIHRoZW4gb25jZSBhbmQgdG8gbWFrZSBzdXJlCiAgICAgLy8gdGhhdCBh
IG1lZGlhIHF1ZXJ5IHJlc3VsdCBjaGFuZ2UgaXMgbm90aWZpZWQgZXhhY3RseSBvbmNlLgotICAg
IHVuc2lnbmVkIG1fZXZhbHVhdGlvblJvdW5kOworICAgIHVuc2lnbmVkIG1fZXZhbHVhdGlvblJv
dW5kIHsgMSB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gTWVk
aWFRdWVyeU1hdGNoZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCmluZGV4IDc1YjI1ZGIwZDlkYzM2
YTZlYmM4ODUxMDBmMjE3ZjA0NTljOTIyMjcuLjQ0YWM2MmJhNWRiM2I4N2RmM2IwYWI1YTcxYjEz
NmQyMTlhODZkNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKQEAgLTMzNyw3ICszMzcsNyBAQCB2
b2lkIFJ1bGVTZXQ6OmFkZENoaWxkUnVsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVC
YXNlPj4mIHJ1bGVzLCBjb25zdCBNZQogICAgICAgICAgICAgYWRkUGFnZVJ1bGUoZG93bmNhc3Q8
U3R5bGVSdWxlUGFnZT4ocnVsZS5nZXQoKSkpOwogICAgICAgICBlbHNlIGlmIChpczxTdHlsZVJ1
bGVNZWRpYT4oKnJ1bGUpKSB7CiAgICAgICAgICAgICBhdXRvJiBtZWRpYVJ1bGUgPSBkb3duY2Fz
dDxTdHlsZVJ1bGVNZWRpYT4oKnJ1bGUpOwotICAgICAgICAgICAgaWYgKCghbWVkaWFSdWxlLm1l
ZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsKG1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSwgcmVz
b2x2ZXIpKSkKKyAgICAgICAgICAgIGlmICgoIW1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSB8fCBt
ZWRpdW0uZXZhbHVhdGUoKm1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKSkKICAg
ICAgICAgICAgICAgICBhZGRDaGlsZFJ1bGVzKG1lZGlhUnVsZS5jaGlsZFJ1bGVzKCksIG1lZGl1
bSwgcmVzb2x2ZXIsIGhhc0RvY3VtZW50U2VjdXJpdHlPcmlnaW4sIGlzSW5pdGlhdGluZ0VsZW1l
bnRJblVzZXJBZ2VudFNoYWRvd1RyZWUsIGFkZFJ1bGVGbGFncyk7CiAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8U3R5bGVSdWxlRm9udEZhY2U+KCpydWxlKSAmJiByZXNvbHZlcikgewogICAgICAgICAg
ICAgLy8gQWRkIHRoaXMgZm9udCBmYWNlIHRvIG91ciBzZXQuCkBAIC0zNjMsNyArMzYzLDcgQEAg
dm9pZCBSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
QmFzZT4+JiBydWxlcywgY29uc3QgTWUKIHZvaWQgUnVsZVNldDo6YWRkUnVsZXNGcm9tU2hlZXQo
U3R5bGVTaGVldENvbnRlbnRzJiBzaGVldCwgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVk
aXVtLCBTdHlsZVJlc29sdmVyKiByZXNvbHZlcikKIHsKICAgICBmb3IgKGF1dG8mIHJ1bGUgOiBz
aGVldC5pbXBvcnRSdWxlcygpKSB7Ci0gICAgICAgIGlmIChydWxlLT5zdHlsZVNoZWV0KCkgJiYg
KCFydWxlLT5tZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChydWxlLT5tZWRpYVF1ZXJpZXMo
KSwgcmVzb2x2ZXIpKSkKKyAgICAgICAgaWYgKHJ1bGUtPnN0eWxlU2hlZXQoKSAmJiAoIXJ1bGUt
Pm1lZGlhUXVlcmllcygpIHx8IG1lZGl1bS5ldmFsdWF0ZSgqcnVsZS0+bWVkaWFRdWVyaWVzKCks
IHJlc29sdmVyKSkpCiAgICAgICAgICAgICBhZGRSdWxlc0Zyb21TaGVldCgqcnVsZS0+c3R5bGVT
aGVldCgpLCBtZWRpdW0sIHJlc29sdmVyKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU291cmNl
U2l6ZUxpc3QuY3BwCmluZGV4IDc0MTc1MWYzMGQ0NDI2YjM4Y2EzYTBlMDdiYjUxZWRiZmZhNzQx
MzkuLmQ5ZjUyNDc1OWY5ZDEzYmEzYWQwNTBkMzBhOTExNmM3NjhlMWZlMzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1NvdXJjZVNpemVMaXN0LmNwcApAQCAtMjQsNTggKzI0LDQ3IEBACiAjaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2lu
Y2x1ZGUgIk1lZGlhTGlzdC5oIgotI2luY2x1ZGUgIk1lZGlhUXVlcnkuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXN0YXRpYyBib29sIG1hdGNoKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5
RXhwPiYmIGV4cHJlc3Npb24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRnJhbWUqIGZyYW1l
KQorc3RhdGljIGJvb2wgbWF0Y2goY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Np
b24sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRG9jdW1lbnQmIGRvY3VtZW50KQogewotICAg
IGlmIChleHByZXNzaW9uLT5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgYXV0byBleHBMaXN0ID0gc3RkOjptYWtlX3VuaXF1ZTxWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+Pj4oKTsKLSAgICBleHBMaXN0LT5hcHBlbmQoV1RG
TW92ZShleHByZXNzaW9uKSk7Ci0KLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVy
eVNldCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpOwotICAgIG1lZGlhUXVlcnlTZXQtPmFkZE1l
ZGlhUXVlcnkoc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5PihNZWRpYVF1ZXJ5OjpOb25lLCAi
YWxsIiwgV1RGTW92ZShleHBMaXN0KSkpOwotCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBtZWRp
YVF1ZXJ5RXZhbHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwgJnN0eWxlKTsKLSAgICByZXR1cm4gbWVk
aWFRdWVyeUV2YWx1YXRvci5ldmFsKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOworICAgIHJldHVybiBl
eHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpLmlzRW1wdHkoKSB8fCBNZWRpYVF1ZXJ5RXZhbHVhdG9y
IHsgInNjcmVlbiIsIGRvY3VtZW50LCAmc3R5bGUgfS5ldmFsdWF0ZShleHByZXNzaW9uKTsKIH0K
IAotc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBS
ZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGRlZmF1bHRMZW5ndGgoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3JiByZW5kZXJlcikKIHsKLSAgICByZXR1cm4gY2xhbXBU
bzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsIHZpZXcpLCBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1ZXLCAxMDAuMCkpOworICAgIHJldHVybiBjbGFtcFRvPGZsb2F0PihDU1NQ
cmltaXRpdmVWYWx1ZTo6Y29tcHV0ZU5vbkNhbGNMZW5ndGhEb3VibGUoeyAmc3R5bGUsICZzdHls
ZSwgJnJlbmRlcmVyIH0sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVlcsIDEwMC4wKSk7CiB9CiAK
LXN0YXRpYyBmbG9hdCBjb21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3KiB2aWV3KQorc3RhdGljIGZsb2F0IGNvbXB1dGVMZW5n
dGgoQ1NTVmFsdWUmIHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFJlbmRlclZpZXcm
IHJlbmRlcmVyKQogewotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRh
dGEoJnN0eWxlLCAmc3R5bGUsIHZpZXcpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y29udmVyc2lvbkRhdGEoJnN0eWxlLCAmc3R5bGUsICZyZW5kZXJlcik7CiAgICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKLSAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
ICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgo
KSkKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCB2aWV3KTsKKyAgICAg
ICAgICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCByZW5kZXJlcik7CiAgICAgICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSk7
CiAgICAgfQogICAgIGlmIChpczxDU1NDYWxjVmFsdWU+KHZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGRvd25jYXN0PENTU0NhbGNWYWx1ZT4oKnZhbHVlKS5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lv
bkRhdGEpOwotICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCB2aWV3KTsKKyAgICAgICAg
cmV0dXJuIGRvd25jYXN0PENTU0NhbGNWYWx1ZT4odmFsdWUpLmNvbXB1dGVMZW5ndGhQeChjb252
ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgoc3R5bGUsIHJlbmRlcmVyKTsK
IH0KIAotZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNpemVzQXR0cmlidXRl
LCBSZW5kZXJWaWV3KiB2aWV3LCBGcmFtZSogZnJhbWUpCitmbG9hdCBwYXJzZVNpemVzQXR0cmli
dXRlKERvY3VtZW50JiBkb2N1bWVudCwgU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0ZSkKIHsKLSAg
ICBpZiAoIXZpZXcpCisgICAgYXV0byogcmVuZGVyZXIgPSBkb2N1bWVudC5yZW5kZXJWaWV3KCk7
CisgICAgaWYgKCFyZW5kZXJlcikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgYXV0byYgc3R5bGUg
PSB2aWV3LT5zdHlsZSgpOworICAgIGF1dG8mIHN0eWxlID0gcmVuZGVyZXItPnN0eWxlKCk7CiAg
ICAgZm9yIChhdXRvJiBzb3VyY2VTaXplIDogQ1NTUGFyc2VyKENTU1N0cmljdE1vZGUpLnBhcnNl
U2l6ZXNBdHRyaWJ1dGUoc2l6ZXNBdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGlmIChtYXRjaChXVEZN
b3ZlKHNvdXJjZVNpemUuZXhwcmVzc2lvbiksIHN0eWxlLCBmcmFtZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gY29tcHV0ZUxlbmd0aChzb3VyY2VTaXplLmxlbmd0aC5nZXQoKSwgc3R5bGUsIHZpZXcp
OworICAgICAgICBpZiAobWF0Y2goc291cmNlU2l6ZS5leHByZXNzaW9uLCBzdHlsZSwgZG9jdW1l
bnQpKQorICAgICAgICAgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgoc291cmNlU2l6ZS5sZW5ndGgu
Z2V0KCksIHN0eWxlLCAqcmVuZGVyZXIpOwogICAgIH0KLSAgICByZXR1cm4gZGVmYXVsdExlbmd0
aChzdHlsZSwgdmlldyk7CisgICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgoc3R5bGUsICpyZW5kZXJl
cik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVM
aXN0LmgKaW5kZXggZTFhZWY5NzBmZWZhMGViMTJhZTFiNWYzYzVlNGU0NmMwMzc2NjdkMS4uYWI3
MTY0ZTYzYmEwOGU4MmNjODM3OGYyOWJlMTQ1MjRiZDk1MTIzMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1Nv
dXJjZVNpemVMaXN0LmgKQEAgLTE4LDE4ICsxOCwxNCBAQAogICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBTb3VyY2VTaXplTGlzdF9oCi0jZGVmaW5lIFNvdXJj
ZVNpemVMaXN0X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBGcmFtZTsKLWNsYXNzIFJlbmRlclZpZXc7Citj
bGFzcyBEb2N1bWVudDsKIAotZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShTdHJpbmdWaWV3IHNp
emVzQXR0cmlidXRlLCBSZW5kZXJWaWV3KiwgRnJhbWUqKTsKK2Zsb2F0IHBhcnNlU2l6ZXNBdHRy
aWJ1dGUoRG9jdW1lbnQmLCBTdHJpbmdWaWV3IHNpemVzQXR0cmlidXRlKTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU291cmNlU2l6ZUxpc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVkaWEuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0
eWxlTWVkaWEuY3BwCmluZGV4IDM0ZGU4Y2JhMTI2ZDE0NzI0N2RkOGRhODVmNDZlYWJjOWIwNWRl
NTguLjdjZGQyNzE3YzMxMmJlNzUyMzczMGVhMDc3YWNjNjRmZTY2N2JhZWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVNZWRpYS5jcHAKQEAgLTYzLDEyICs2MywxMSBAQCBib29sIFN0eWxlTWVkaWE6Om1h
dGNoTWVkaXVtKGNvbnN0IFN0cmluZyYgcXVlcnkpIGNvbnN0CiAKICAgICBhdXRvIHJvb3RTdHls
ZSA9IGRvY3VtZW50LT5lbnN1cmVTdHlsZVJlc29sdmVyKCkuc3R5bGVGb3JFbGVtZW50KCpkb2N1
bWVudEVsZW1lbnQsIGRvY3VtZW50LT5yZW5kZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRS
dWxlcykucmVuZGVyU3R5bGU7CiAKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBN
ZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKTsKKyAgICBhdXRvIG1lZGlhID0gTWVkaWFRdWVyeVNldDo6
Y3JlYXRlKCk7CiAgICAgaWYgKCFtZWRpYS0+cGFyc2UocXVlcnkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwodHlwZSgpLCBtX2Zy
YW1lLCByb290U3R5bGUuZ2V0KCkpOwotICAgIHJldHVybiBzY3JlZW5FdmFsLmV2YWwobWVkaWEu
Z2V0KCkpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgdHlwZSgpLCAqZG9jdW1l
bnQsIHJvb3RTdHlsZS5nZXQoKSB9LmV2YWx1YXRlKG1lZGlhLmdldCgpKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVz
b2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDhm
NmRhZmY0NzY5NjY3YTJiMzYzMGU4YmU4NTllMzMxMjEzNjEzNGQuLmQ4ODFjMTVhYTFmOTgwODAy
MDZkYTRkYmMzZjBhZjdmYWJlOTU4NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAKQEAgLTI3MCwxOSArMjcwLDE5IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9j
dW1lbnQmIGRvY3VtZW50KQogICAgIC8vIGlzIGFsd2F5cyBmcm9tIHRoZSBkb2N1bWVudCB0aGF0
IG93bnMgdGhlIHN0eWxlIHNlbGVjdG9yCiAgICAgRnJhbWVWaWV3KiB2aWV3ID0gbV9kb2N1bWVu
dC52aWV3KCk7CiAgICAgaWYgKHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gc3RkOjptYWtlX3Vu
aXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPih2aWV3LT5tZWRpYVR5cGUoKSk7CisgICAgICAgIG1f
bWVkaWFRdWVyeUV2YWx1YXRvciA9IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5
cGUoKSB9OwogICAgIGVsc2UKLSAgICAgICAgbV9tZWRpdW0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1l
ZGlhUXVlcnlFdmFsdWF0b3I+KCJhbGwiKTsKKyAgICAgICAgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9y
ID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJhbGwiIH07CiAKICAgICBpZiAocm9vdCkKICAgICAg
ICAgbV9yb290RGVmYXVsdFN0eWxlID0gc3R5bGVGb3JFbGVtZW50KCpyb290LCBtX2RvY3VtZW50
LnJlbmRlclN0eWxlKCksIE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKS5yZW5kZXJTdHlsZTsKIAog
ICAgIGlmIChtX3Jvb3REZWZhdWx0U3R5bGUgJiYgdmlldykKLSAgICAgICAgbV9tZWRpdW0gPSBz
dGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFdmFsdWF0b3I+KHZpZXctPm1lZGlhVHlwZSgpLCAm
dmlldy0+ZnJhbWUoKSwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpKTsKKyAgICAgICAgbV9tZWRp
YVF1ZXJ5RXZhbHVhdG9yID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7IHZpZXctPm1lZGlhVHlwZSgp
LCBtX2RvY3VtZW50LCBtX3Jvb3REZWZhdWx0U3R5bGUuZ2V0KCkgfTsKIAogICAgIG1fcnVsZVNl
dHMucmVzZXRBdXRob3JTdHlsZSgpOwogCi0gICAgbV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKG1f
ZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMoKSwgKm1fbWVkaXVtLCAqdGhpcyk7CisgICAg
bV9ydWxlU2V0cy5pbml0VXNlclN0eWxlKG1fZG9jdW1lbnQuZXh0ZW5zaW9uU3R5bGVTaGVldHMo
KSwgbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLCAqdGhpcyk7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQogICAgIGlmIChtX2RvY3VtZW50LnN2Z0V4dGVuc2lvbnMoKSkgewpAQCAtMjk1LDcgKzI5NSw3
IEBAIFN0eWxlUmVzb2x2ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogCiB2
b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8Q1NTU3R5bGVTaGVldD4+JiBzdHlsZVNoZWV0cykKIHsKLSAgICBtX3J1bGVTZXRzLmFw
cGVuZEF1dGhvclN0eWxlU2hlZXRzKHN0eWxlU2hlZXRzLCBtX21lZGl1bS5nZXQoKSwgbV9pbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzLCB0aGlzKTsKKyAgICBtX3J1bGVTZXRzLmFwcGVuZEF1dGhvclN0
eWxlU2hlZXRzKHN0eWxlU2hlZXRzLCAmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLCBtX2luc3BlY3Rv
ckNTU09NV3JhcHBlcnMsIHRoaXMpOwogICAgIGlmIChhdXRvIHJlbmRlclZpZXcgPSBkb2N1bWVu
dCgpLnJlbmRlclZpZXcoKSkKICAgICAgICAgcmVuZGVyVmlldy0+c3R5bGUoKS5mb250Q2FzY2Fk
ZSgpLnVwZGF0ZSgmZG9jdW1lbnQoKS5mb250U2VsZWN0b3IoKSk7CiAKQEAgLTQxOSw3ICs0MTks
NyBAQCBFbGVtZW50U3R5bGUgU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JFbGVtZW50KGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlcgogCiAgICAgRWxlbWVudFJ1bGVDb2xsZWN0b3Ig
Y29sbGVjdG9yKGVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUuc2VsZWN0b3JGaWx0ZXIoKSk7
CiAgICAgY29sbGVjdG9yLnNldFJlZ2lvbkZvclN0eWxpbmcocmVnaW9uRm9yU3R5bGluZyk7Ci0g
ICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgY29sbGVjdG9yLnNl
dE1lZGl1bSgmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKIAogICAgIGlmIChtYXRjaGluZ0JlaGF2
aW9yID09IE1hdGNoT25seVVzZXJBZ2VudFJ1bGVzKQogICAgICAgICBjb2xsZWN0b3IubWF0Y2hV
QVJ1bGVzKCk7CkBAIC01ODIsNyArNTgyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiBTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZUZvckVsZW1lbnQoY29uc3QgRWxlbWVudCYKICAg
ICAvLyBDaGVjayBVQSwgdXNlciBhbmQgYXV0aG9yIHJ1bGVzLgogICAgIEVsZW1lbnRSdWxlQ29s
bGVjdG9yIGNvbGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmls
dGVyKCkpOwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJlcXVlc3QocHNldWRvU3R5bGVS
ZXF1ZXN0KTsKLSAgICBjb2xsZWN0b3Iuc2V0TWVkaXVtKG1fbWVkaXVtLmdldCgpKTsKKyAgICBj
b2xsZWN0b3Iuc2V0TWVkaXVtKCZtX21lZGlhUXVlcnlFdmFsdWF0b3IpOwogICAgIGNvbGxlY3Rv
ci5tYXRjaFVBUnVsZXMoKTsKIAogICAgIGlmIChtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcykg
ewpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJl
c29sdmVyOjpwc2V1ZG9TdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW4KICAgICBFbGVt
ZW50UnVsZUNvbGxlY3RvciBjb2xsZWN0b3IoKmVsZW1lbnQsIG1fcnVsZVNldHMsIG1fc3RhdGUu
c2VsZWN0b3JGaWx0ZXIoKSk7CiAgICAgY29sbGVjdG9yLnNldE1vZGUoU2VsZWN0b3JDaGVja2Vy
OjpNb2RlOjpDb2xsZWN0aW5nUnVsZXMpOwogICAgIGNvbGxlY3Rvci5zZXRQc2V1ZG9TdHlsZVJl
cXVlc3QoUHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb0lkKSk7Ci0gICAgY29sbGVjdG9yLnNldE1l
ZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgY29sbGVjdG9yLnNldE1lZGl1bSgmbV9tZWRpYVF1
ZXJ5RXZhbHVhdG9yKTsKIAogICAgIGlmIChydWxlc1RvSW5jbHVkZSAmIFVBQW5kVXNlckNTU1J1
bGVzKSB7CiAgICAgICAgIC8vIEZpcnN0IHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHVzZXIgYWdl
bnQgc2hlZXQuCkBAIC0xODc4LDE2ICsxODc4LDE1IEBAIENvbG9yIFN0eWxlUmVzb2x2ZXI6OmNv
bG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9v
CiAgICAgfQogfQogCi12b2lkIFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwKiBleHByLCBib29sIHJlc3VsdCkKK3Zv
aWQgU3R5bGVSZXNvbHZlcjo6YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGNv
bnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBleHByZXNzaW9uLCBib29sIHJlc3VsdCkKIHsKLSAg
ICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKHN0ZDo6bWFrZV91
bmlxdWU8TWVkaWFRdWVyeVJlc3VsdD4oKmV4cHIsIHJlc3VsdCkpOworICAgIG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5hcHBlbmQoTWVkaWFRdWVyeVJlc3VsdCB7IGV4cHJl
c3Npb24sIHJlc3VsdCB9KTsKIH0KIAogYm9vbCBTdHlsZVJlc29sdmVyOjpoYXNNZWRpYVF1ZXJp
ZXNBZmZlY3RlZEJ5Vmlld3BvcnRDaGFuZ2UoKSBjb25zdAogewotICAgIHVuc2lnbmVkIHMgPSBt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBzOyBpKyspIHsKLSAgICAgICAgaWYgKG1fbWVkaXVtLT5ldmFsKCZt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikgIT0g
bV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKKyAgICBm
b3IgKGF1dG8mIHJlc3VsdCA6IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cykg
eworICAgICAgICBpZiAobV9tZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHBy
ZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4IDJm
MDY0ZTYwY2NkZjQ3MDE2NDE0NjJhYmM0NzNiZGYzMWFjNTA3ZjAuLjYzYTZkOGQxZWUxNjhjOWEw
ZTM2MTk0ZmFmMzg1YjYxNzQ1ODVkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApA
QCAtMTU1LDcgKzE1NSw3IEBAIHB1YmxpYzoKICAgICBEb2N1bWVudFJ1bGVTZXRzJiBydWxlU2V0
cygpIHsgcmV0dXJuIG1fcnVsZVNldHM7IH0KICAgICBjb25zdCBEb2N1bWVudFJ1bGVTZXRzJiBy
dWxlU2V0cygpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZVNldHM7IH0KIAotICAgIGNvbnN0IE1lZGlh
UXVlcnlFdmFsdWF0b3ImIG1lZGlhUXVlcnlFdmFsdWF0b3IoKSBjb25zdCB7IHJldHVybiAqbV9t
ZWRpdW07IH0KKyAgICBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZhbHVh
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yOyB9CiAKICAgICB2b2lk
IHNldE92ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUoUmVuZGVyU3R5bGUqIHN0eWxlKSB7IG1f
b3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSA9IHN0eWxlOyB9CiAKQEAgLTIwMSw3ICsyMDEs
NyBAQCBwdWJsaWM6CiAgICAgVmlld3BvcnRTdHlsZVJlc29sdmVyKiB2aWV3cG9ydFN0eWxlUmVz
b2x2ZXIoKSB7IHJldHVybiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlci5nZXQoKTsgfQogI2VuZGlm
CiAKLSAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBN
ZWRpYVF1ZXJ5RXhwKiwgYm9vbCByZXN1bHQpOworICAgIHZvaWQgYWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiwgYm9vbCByZXN1
bHQpOwogICAgIGJvb2wgaGFzVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJpZXMoKSBjb25zdCB7
IHJldHVybiAhbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmlzRW1wdHkoKTsg
fQogICAgIGJvb2wgaGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29u
c3Q7CiAKQEAgLTUxNyw3ICs1MTcsNyBAQCBwcml2YXRlOgogCiAgICAgVGltZXIgbV9tYXRjaGVk
UHJvcGVydGllc0NhY2hlU3dlZXBUaW1lcjsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1
ZXJ5RXZhbHVhdG9yPiBtX21lZGl1bTsKKyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIG1fbWVkaWFR
dWVyeUV2YWx1YXRvcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fcm9vdERl
ZmF1bHRTdHlsZTsKIAogICAgIERvY3VtZW50JiBtX2RvY3VtZW50OwpAQCAtNTI2LDcgKzUyNiw3
IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJTdHlsZSogbV9vdmVycmlkZURvY3VtZW50RWxlbWVu
dFN0eWxlIHsgbnVsbHB0ciB9OwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1
ZXJ5UmVzdWx0Pj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOworICAgIFZl
Y3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dHM7CiAKICNpZiBFTkFCTEUoQ1NTX0RFVklDRV9BREFQVEFUSU9OKQogICAgIFJlZlB0cjxWaWV3
cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRTdHlsZVJlc29sdmVyOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKaW5kZXggNmYzM2YyMzRkYjc4MWNlYjZjZDE4M2RmNWRmZmE0ODQwOTE2ZDQ3NS4u
ZDA2MDc1NTFlNjIzZDIxNDZlOTVhOTA1Yzk5YzU0Zjc3ZjQ4ZTM0YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCkBAIC04MDIsNyArODAyLDcgQEAgdm9pZCBEb2N1bWVudDo6Y2xlYXJTZWxlY3Rv
clF1ZXJ5Q2FjaGUoKQogTWVkaWFRdWVyeU1hdGNoZXImIERvY3VtZW50OjptZWRpYVF1ZXJ5TWF0
Y2hlcigpCiB7CiAgICAgaWYgKCFtX21lZGlhUXVlcnlNYXRjaGVyKQotICAgICAgICBtX21lZGlh
UXVlcnlNYXRjaGVyID0gTWVkaWFRdWVyeU1hdGNoZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAg
bV9tZWRpYVF1ZXJ5TWF0Y2hlciA9IE1lZGlhUXVlcnlNYXRjaGVyOjpjcmVhdGUoKnRoaXMpOwog
ICAgIHJldHVybiAqbV9tZWRpYVF1ZXJ5TWF0Y2hlcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAppbmRleCBhZTQxZjczYmJhYzRkZjU4MGNjNzZm
MzRkZWM2NTk4NDJlMzIyMTkxLi45ZmM0MjZkMWI4MzhlMmQzZTIxZDgzMmQ0N2JiNjIxODllYTE5
OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcApA
QCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVl
dChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCiAKICAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yIHNjcmVlbkV2YWwoQVNDSUlMaXRlcmFsKCJzY3JlZW4iKSwgdHJ1ZSk7CiAgICAg
TWVkaWFRdWVyeUV2YWx1YXRvciBwcmludEV2YWwoQVNDSUlMaXRlcmFsKCJwcmludCIpLCB0cnVl
KTsKLSAgICBpZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpICYmICFwcmlu
dEV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKQorICAgIGlmICghc2NyZWVuRXZhbC5ldmFs
dWF0ZSgqbWVkaWFRdWVyaWVzKSAmJiAhcHJpbnRFdmFsLmV2YWx1YXRlKCptZWRpYVF1ZXJpZXMp
KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRob3JTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxl
bWVudCkuYWRkUGVuZGluZ1NoZWV0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRv
ci5jcHAKaW5kZXggODU1Y2FmMWVmMzI2ODk0MDdhZDc5YmU4M2U3NDE0ZDliMWE3YmI5ZC4uMmRm
ZjA0MjYzZWQ2Zjk2OTg0M2ZjOTNjNDc1NjQ2Njk4NDgyZTViMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dEl0ZXJhdG9yLmNwcApAQCAtMTI2Niw3ICsxMjY2LDcgQEAgdm9pZCBTaW1wbGlm
aWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIEV4aXQgZW1wdHkgY29udGFpbmVycyBhcyB3ZSBwYXNzIG92ZXIgdGhlbSBv
ciBjb250YWluZXJzCiAgICAgICAgICAgICAvLyB3aGVyZSBbY29udGFpbmVyLCAwXSBpcyB3aGVy
ZSB3ZSBzdGFydGVkIGl0ZXJhdGluZy4KLSAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAm
JiBjYW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCptX25vZGUpICAmJiBtX25vZGUtPnBhcmVudE5v
ZGUoKSAmJiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwgKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5l
ciAmJiAhbV9lbmRPZmZzZXQpKSkgeworICAgICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlICYm
IGNhbkhhdmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9kZSkgJiYgbV9ub2RlLT5wYXJlbnROb2Rl
KCkgJiYgKCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIg
JiYgIW1fZW5kT2Zmc2V0KSkpIHsKICAgICAgICAgICAgICAgICBleGl0Tm9kZSgpOwogICAgICAg
ICAgICAgICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgewogICAgICAgICAgICAgICAgICAgICBtX2hh
bmRsZWROb2RlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3Bw
CmluZGV4IDkxMzYwOTQ5YWY0NzY0OTRmNTI0MmU1ZDNmMjdlYWNmOTM2YTQyYWIuLmIwZjYxYTdl
MWFkOTg2MDc2YTE4ZDFlNGU1ZjBkNTcyMGExNTZlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSW1hZ2VFbGVtZW50LmNwcApAQCAtMTUzLDI3ICsxNTMsMzEgQEAgSW1hZ2VDYW5kaWRhdGUg
SFRNTEltYWdlRWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCgpCiAgICAg
ICAgIGlmICghaXM8SFRNTFNvdXJjZUVsZW1lbnQ+KCpjaGlsZCkpCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgYXV0byYgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+
KCpjaGlsZCk7CisKICAgICAgICAgYXV0byYgc3Jjc2V0ID0gc291cmNlLmZhc3RHZXRBdHRyaWJ1
dGUoc3Jjc2V0QXR0cik7CiAgICAgICAgIGlmIChzcmNzZXQuaXNFbXB0eSgpKQogICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIGlmIChzb3VyY2UuaGFzQXR0cmlidXRlKHR5cGVBdHRyKSkg
ewotICAgICAgICAgICAgU3RyaW5nIHR5cGUgPSBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZSh0eXBl
QXR0cikuc3RyaW5nKCk7Ci0gICAgICAgICAgICBpbnQgaW5kZXhPZlNlbWljb2xvbiA9IHR5cGUu
ZmluZCgnOycpOwotICAgICAgICAgICAgaWYgKGluZGV4T2ZTZW1pY29sb24gPj0gMCkKLSAgICAg
ICAgICAgICAgICB0eXBlLnRydW5jYXRlKGluZGV4T2ZTZW1pY29sb24pOworCisgICAgICAgIGF1
dG8mIHR5cGVBdHRyaWJ1dGUgPSBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Cisg
ICAgICAgIGlmICghdHlwZUF0dHJpYnV0ZS5pc051bGwoKSkgeworICAgICAgICAgICAgU3RyaW5n
IHR5cGUgPSB0eXBlQXR0cmlidXRlLnN0cmluZygpOworICAgICAgICAgICAgdHlwZS50cnVuY2F0
ZSh0eXBlLmZpbmQoJzsnKSk7CiAgICAgICAgICAgICB0eXBlID0gc3RyaXBMZWFkaW5nQW5kVHJh
aWxpbmdIVE1MU3BhY2VzKHR5cGUpOwogICAgICAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHkoKSAm
JiAhTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpICYmICFl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlLCAiaW1hZ2Uvc3ZnK3htbCIpKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIE1lZGlhUXVlcnlFdmFs
dWF0b3IgZXZhbHVhdG9yKGRvY3VtZW50KCkucHJpbnRpbmcoKSA/ICJwcmludCIgOiAic2NyZWVu
IiwgZG9jdW1lbnQoKS5mcmFtZSgpLCBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID8gZG9j
dW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpIDogbnVsbHB0cik7Ci0g
ICAgICAgIGJvb2wgZXZhbHVhdGlvbiA9IGV2YWx1YXRvci5ldmFsQ2hlY2tpbmdWaWV3cG9ydERl
cGVuZGVudFJlc3VsdHMoc291cmNlLm1lZGlhUXVlcnlTZXQoKSwgcGljdHVyZS0+dmlld3BvcnRE
ZXBlbmRlbnRSZXN1bHRzKCkpOworCisgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRv
Y3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Ig
ZXZhbHVhdG9yIHsgZG9jdW1lbnQoKS5wcmludGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBk
b2N1bWVudCgpLCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5
bGUoKSA6IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byogcXVlcmllcyA9IHNvdXJjZS5tZWRpYVF1
ZXJ5U2V0KCk7CisgICAgICAgIGF1dG8gZXZhbHVhdGlvbiA9ICFxdWVyaWVzIHx8IGV2YWx1YXRv
ci5ldmFsdWF0ZSgqcXVlcmllcywgcGljdHVyZS0+dmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkp
OwogICAgICAgICBpZiAocGljdHVyZS0+aGFzVmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkpCiAg
ICAgICAgICAgICBkb2N1bWVudCgpLmFkZFZpZXdwb3J0RGVwZW5kZW50UGljdHVyZSgqcGljdHVy
ZSk7CiAgICAgICAgIGlmICghZXZhbHVhdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0g
ICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKHNvdXJjZS5mYXN0
R2V0QXR0cmlidXRlKHNpemVzQXR0cikuc3RyaW5nKCksIGRvY3VtZW50KCkucmVuZGVyVmlldygp
LCBkb2N1bWVudCgpLmZyYW1lKCkpOwotICAgICAgICBJbWFnZUNhbmRpZGF0ZSBjYW5kaWRhdGUg
PSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSwgbnVsbEF0b20sIHNvdXJjZS5mYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpLCBz
b3VyY2VTaXplKTsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0
ZShkb2N1bWVudCgpLCBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZShzaXplc0F0dHIpLnN0cmluZygp
KTsKKyAgICAgICAgYXV0byBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1
dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbnVsbEF0b20sIHNyY3NldCwgc291
cmNlU2l6ZSk7CiAgICAgICAgIGlmICghY2FuZGlkYXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybiBjYW5kaWRhdGU7CiAgICAgfQpAQCAtMTg2LDcgKzE5MCw3IEBAIHZvaWQgSFRNTElt
YWdlRWxlbWVudDo6c2VsZWN0SW1hZ2VTb3VyY2UoKQogICAgIEltYWdlQ2FuZGlkYXRlIGNhbmRp
ZGF0ZSA9IGJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVsZW1lbnQoKTsKICAgICBpZiAoY2FuZGlk
YXRlLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgPHBpY3R1cmU+
IG9yIGRpZG4ndCBmaW5kIGEgc291cmNlLCB0aGVuIHdlIHVzZSBvdXIgb3duIGF0dHJpYnV0ZXMu
Ci0gICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGZhc3RHZXRB
dHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSwgZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIGRv
Y3VtZW50KCkuZnJhbWUoKSk7CisgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVz
QXR0cmlidXRlKGRvY3VtZW50KCksIGZhc3RHZXRBdHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmco
KSk7CiAgICAgICAgIGNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMo
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIp
LCBmYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpLCBzb3VyY2VTaXplKTsKICAgICB9CiAgICAg
c2V0QmVzdEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCmluZGV4IGI0MDE0MmZhYWJjYWFkMmE0MTQ1
NjI2OTM1ODFhMjQ5NjYxMjA0YzMuLjgwMWI0OWJmMjM1MzVhNThlNTliNWFjN2FhZGQzOGMxZTE3
ODJiMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKQEAgLTI0MSw4
ICsyNDEsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgICAgICBp
ZiAoZG9jdW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVlKCkpCiAgICAgICAgICAgICAgICAgZG9j
dW1lbnRTdHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAg
ICAgICAgICBhdXRvIG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlw
dGlvblN5bnRheChtX21lZGlhKTsKLSAgICAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZh
bHVhdG9yKGRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQo
KS5mcmFtZSgpLCBkb2N1bWVudFN0eWxlID8gJipkb2N1bWVudFN0eWxlIDogbnVsbHB0cik7Ci0g
ICAgICAgICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IGV2YWx1YXRvci5ldmFsKG1lZGlhLnB0cigp
KTsKKyAgICAgICAgICAgIG1lZGlhUXVlcnlNYXRjaGVzID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7
IGRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQoKSwgZG9j
dW1lbnRTdHlsZSA/ICYqZG9jdW1lbnRTdHlsZSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYS5n
ZXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEb24ndCBob2xkIHVwIHJlbmRlciB0cmVl
IGNvbnN0cnVjdGlvbiBhbmQgc2NyaXB0IGV4ZWN1dGlvbiBvbiBzdHlsZXNoZWV0cwpAQCAtMzYx
LDcgKzM2MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0
IFN0cmluZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJMLCBjCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBSZWY8U3R5bGVTaGVldENvbnRlbnRzPiBzdHlsZVNoZWV0KFN0eWxlU2hlZXRD
b250ZW50czo6Y3JlYXRlKGhyZWYsIHBhcnNlckNvbnRleHQpKTsKKyAgICBhdXRvIHN0eWxlU2hl
ZXQgPSBTdHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZShocmVmLCBwYXJzZXJDb250ZXh0KTsKICAg
ICBtX3NoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQuY29weVJlZigpLCB0
aGlzKTsKICAgICBtX3NoZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRl
QWxsb3dpbmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKSk7CiAgICAgbV9zaGVldC0+c2V0VGl0
bGUodGl0bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRl
eCBlZjZjOThhM2VjZDYzNjM5NTQ0YmE5NDQ4ZDk1MjAxOTc1MGRjNWFmLi4zOWIyZjc2MGFjYWFh
NTk1YjA3NGRjYzg0YjVmZmU4ZGMxN2U4MjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5jcHAKQEAgLTQxNzYsMTMgKzQxNzYsMTIgQEAgVVJMIEhUTUxNZWRpYUVsZW1l
bnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmlu
Zyoga2UKICAgICAgICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CiAgICAgICAgIAogICAgICAgICBp
ZiAoc291cmNlLT5mYXN0SGFzQXR0cmlidXRlKG1lZGlhQXR0cikpIHsKLSAgICAgICAgICAgIE1l
ZGlhUXVlcnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2NyZWVuIiwgZG9jdW1lbnQoKS5mcmFtZSgp
LCByZW5kZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyKTsKLSAgICAgICAg
ICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9IHNvdXJjZS0+bWVkaWFRdWVyeVNldCgp
OworICAgICAgICAgICAgYXV0byBtZWRpYSA9IHNvdXJjZS0+bWVkaWFRdWVyeVNldCgpOwogI2lm
ICFMT0dfRElTQUJMRUQKICAgICAgICAgICAgIGlmIChzaG91bGRMb2cpCiAgICAgICAgICAgICAg
ICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKCVw
KSAtICdtZWRpYScgaXMgJXMiLCB0aGlzLCBzb3VyY2UtPm1lZGlhKCkudXRmOCgpLmRhdGEoKSk7
CiAjZW5kaWYKLSAgICAgICAgICAgIGlmICghc2NyZWVuRXZhbC5ldmFsKG1lZGlhLmdldCgpKSkg
CisgICAgICAgICAgICBpZiAobWVkaWEgJiYgIU1lZGlhUXVlcnlFdmFsdWF0b3IgeyAic2NyZWVu
IiwgZG9jdW1lbnQoKSwgcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0
ciB9LmV2YWx1YXRlKCptZWRpYSkpCiAgICAgICAgICAgICAgICAgZ290byBjaGVja19hZ2FpbjsK
ICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJl
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5jcHAK
aW5kZXggZTJmMjYwYzg0ZWNhNGI1ZGIxMTQ4NTA4NDU1OGVkYzIxZDg2MWY5OS4uNzAyNDQxOGY0
MjVkOTQwMDdkMGU2OWY2Yjc0NmM3YjlhMWU4MWJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFBpY3R1cmVFbGVtZW50LmNwcApAQCAtNTcsMTYgKzU3LDE2IEBAIFJlZjxIVE1MUGljdHVy
ZUVsZW1lbnQ+IEhUTUxQaWN0dXJlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsCiAKIHZvaWQgSFRNTFBpY3R1cmVFbGVtZW50Ojpzb3VyY2VzQ2hhbmdlZCgpCiB7
Ci0gICAgZm9yIChhdXRvJiBpbWFnZUVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MSW1hZ2VF
bGVtZW50PigqdGhpcykpCi0gICAgICAgIGltYWdlRWxlbWVudC5zZWxlY3RJbWFnZVNvdXJjZSgp
OworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxJbWFnZUVsZW1l
bnQ+KCp0aGlzKSkKKyAgICAgICAgZWxlbWVudC5zZWxlY3RJbWFnZVNvdXJjZSgpOwogfQogCi1i
b29sIEhUTUxQaWN0dXJlRWxlbWVudDo6dmlld3BvcnRDaGFuZ2VBZmZlY3RlZFBpY3R1cmUoKQor
Ym9vbCBIVE1MUGljdHVyZUVsZW1lbnQ6OnZpZXdwb3J0Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCkg
Y29uc3QKIHsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvcihkb2N1bWVudCgpLnBy
aW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50KCkuZnJhbWUoKSwgZG9jdW1l
bnQoKS5kb2N1bWVudEVsZW1lbnQoKSA/IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPmNv
bXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwotICAgIHVuc2lnbmVkIG51bVJlc3VsdHMgPSBtX3Zp
ZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBudW1SZXN1bHRzOyBpKyspIHsKLSAgICAgICAgaWYgKGV2YWx1YXRvci5l
dmFsKCZtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lv
bikgIT0gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkK
KyAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgp
OworICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yIHsgZG9jdW1lbnQoKS5wcmludGlu
ZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCgpLCBkb2N1bWVudEVsZW1lbnQgPyBk
b2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIgfTsKKyAgICBmb3IgKGF1
dG8mIHJlc3VsdCA6IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cykgeworICAg
ICAgICBpZiAoZXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQu
cmVzdWx0KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxz
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5oCmluZGV4IGFiZDQ3YzBh
OWIzMDZmYWM0NjdkNTYxYjY1YjU0ODc2OTg5NjU0YWYuLmZiNTEzNmY3YzdjM2M0OWQxMzgzNWEw
YTY3YTZhNmM0NWUwNDgwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBp
Y3R1cmVFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1l
bnQuaApAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBI
VE1MUGljdHVyZUVsZW1lbnRfaAotI2RlZmluZSBIVE1MUGljdHVyZUVsZW1lbnRfaAorI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlF
dmFsdWF0b3IuaCIKQEAgLTM0LDI4ICszMywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBIVE1MUGljdHVyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGlj
OgogICAgIHN0YXRpYyBSZWY8SFRNTFBpY3R1cmVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50Jik7Ci0gICAgfkhUTUxQaWN0dXJlRWxlbWVudCgpOworICAgIHZp
cnR1YWwgfkhUTUxQaWN0dXJlRWxlbWVudCgpOwogCiAgICAgdm9pZCBzb3VyY2VzQ2hhbmdlZCgp
OwogCiAgICAgdm9pZCBjbGVhclZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpIHsgbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmNsZWFyKCk7IH0KICAgICBib29sIGhhc1ZpZXdw
b3J0RGVwZW5kZW50UmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnREZXBlbmRlbnRN
ZWRpYVF1ZXJ5UmVzdWx0cy5zaXplKCk7IH0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1l
ZGlhUXVlcnlSZXN1bHQ+PiYgdmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkgeyByZXR1cm4gbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOyB9CisgICAgVmVjdG9yPE1lZGlhUXVl
cnlSZXN1bHQ+JiB2aWV3cG9ydERlcGVuZGVudFJlc3VsdHMoKSB7IHJldHVybiBtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHM7IH0KIAotICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9j
dW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KTsKLSAgICAKLSAgICBib29sIHZpZXdwb3J0Q2hh
bmdlQWZmZWN0ZWRQaWN0dXJlKCk7CisgICAgYm9vbCB2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGlj
dHVyZSgpIGNvbnN0OwogCiAgICAgV2Vha1B0cjxIVE1MUGljdHVyZUVsZW1lbnQ+IGNyZWF0ZVdl
YWtQdHIoKSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiBwcml2
YXRlOgogICAgIEhUTUxQaWN0dXJlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQmKTsKLSAgICAKLSAgICBXZWFrUHRyRmFjdG9yeTxIVE1MUGljdHVyZUVsZW1lbnQ+IG1fd2Vh
a0ZhY3RvcnkgeyB0aGlzIH07Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5
UmVzdWx0Pj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCisgICAgdm9p
ZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpIGZpbmFsOworCisg
ICAgV2Vha1B0ckZhY3Rvcnk8SFRNTFBpY3R1cmVFbGVtZW50PiBtX3dlYWtGYWN0b3J5IHsgdGhp
cyB9OworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAv
LyBIVE1MUGljdHVyZUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggYmFjMjhkNDc0NjBjOGQ3YTJjMjhmYzc2MTI4
ZTJlZGFjNmUzNmQxYi4uYmE2YTIxNTAxNWE5YzM3YTAwMjM0NWY2YTVmNTJlNzM2MWNjOTJhOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIu
Y3BwCkBAIC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAg
ICAgICBpZiAobV90YWdJZCA9PSBUYWdJZDo6U291cmNlICYmICFwaWN0dXJlU3RhdGUuaXNFbXB0
eSgpICYmICFwaWN0dXJlU3RhdGUubGFzdCgpICYmIG1fbWVkaWFNYXRjaGVkICYmICFtX3NyY1Nl
dEF0dHJpYnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBw
YXJzZVNpemVzQXR0cmlidXRlKG1fc2l6ZXNBdHRyaWJ1dGUsIGRvY3VtZW50LnJlbmRlclZpZXco
KSwgZG9jdW1lbnQuZnJhbWUoKSk7CisgICAgICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFy
c2VTaXplc0F0dHJpYnV0ZShkb2N1bWVudCwgbV9zaXplc0F0dHJpYnV0ZSk7CiAgICAgICAgICAg
ICBJbWFnZUNhbmRpZGF0ZSBpbWFnZUNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0
dHJpYnV0ZXMobV9kZXZpY2VTY2FsZUZhY3RvciwgbV91cmxUb0xvYWQsIG1fc3JjU2V0QXR0cmli
dXRlLCBzb3VyY2VTaXplKTsKICAgICAgICAgICAgIGlmICghaW1hZ2VDYW5kaWRhdGUuaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICAgICAgcGljdHVyZVN0YXRlLmxhc3QoKSA9IHRydWU7CkBAIC0x
MjgsNyArMTI4LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gUmVzb2x2ZSBiZXR3
ZWVuIHNyYyBhbmQgc3JjU2V0IGlmIHdlIGhhdmUgdGhlbSBhbmQgdGhlIHRhZyBpcyBpbWcuCiAg
ICAgICAgIGlmIChtX3RhZ0lkID09IFRhZ0lkOjpJbWcgJiYgIW1fc3JjU2V0QXR0cmlidXRlLmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRy
aWJ1dGUobV9zaXplc0F0dHJpYnV0ZSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCBkb2N1bWVudC5m
cmFtZSgpKTsKKyAgICAgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmli
dXRlKGRvY3VtZW50LCBtX3NpemVzQXR0cmlidXRlKTsKICAgICAgICAgICAgIEltYWdlQ2FuZGlk
YXRlIGltYWdlQ2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhtX2Rl
dmljZVNjYWxlRmFjdG9yLCBtX3VybFRvTG9hZCwgbV9zcmNTZXRBdHRyaWJ1dGUsIHNvdXJjZVNp
emUpOwogICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKGltYWdlQ2FuZGlkYXRlLnN0cmluZy50b1N0
cmluZygpLCB0cnVlKTsKICAgICAgICAgfQpAQCAtMTk4LDEwICsxOTgsOSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKG1hdGNoKGF0dHJpYnV0ZU5hbWUsIG1lZGlh
QXR0cikgJiYgbV9tZWRpYUF0dHJpYnV0ZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIG1f
bWVkaWFBdHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZTsKLSAgICAgICAgICAgICAgICBSZWY8TWVk
aWFRdWVyeVNldD4gbWVkaWFTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2Ny
aXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiB2aWV3cG9ydERlcGVuZGVudE1lZGlhUXVl
cnlSZXN1bHRzOwotICAgICAgICAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9y
KGRvY3VtZW50LnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50LmZyYW1l
KCksIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50
KCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgICAgIG1fbWVkaWFN
YXRjaGVkID0gZXZhbHVhdG9yLmV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyht
ZWRpYVNldC5wdHIoKSwgdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAg
ICAgICAgICAgICAgYXV0byBtZWRpYVNldCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5n
RGVzY3JpcHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOworICAgICAgICAgICAgICAgIGF1dG8q
IGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAg
ICAgICAgIG1fbWVkaWFNYXRjaGVkID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7IGRvY3VtZW50LnBy
aW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50LCBkb2N1bWVudEVsZW1lbnQg
PyBkb2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIgfS5ldmFsdWF0ZSht
ZWRpYVNldC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBUYWdJZDo6U2NyaXB0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAKaW5kZXggMjI2YTllYmIzZTFjNDBkYWM4MGY2
MmE4YTFlYzYwNmRjMmMxMTIxOC4uYTE1Y2IyZDk0YTdmZjlkZmEyNzBlZjdiZjE2M2U1MWQyZWY1
ZTY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3Vy
Y2VQcmVsb2FkZXIuY3BwCkBAIC01OCwxOCArNTgsMTcgQEAgdm9pZCBIVE1MUmVzb3VyY2VQcmVs
b2FkZXI6OnByZWxvYWQoUHJlbG9hZFJlcXVlc3RTdHJlYW0gcmVxdWVzdHMpCiAgICAgICAgIHBy
ZWxvYWQoV1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKLXN0YXRpYyBib29sIG1lZGlhQXR0cmlidXRl
TWF0Y2hlcyhGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgY29u
c3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKK3N0YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0
Y2hlcyhEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwg
Y29uc3QgU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKIHsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNl
dD4gbWVkaWFRdWVyaWVzID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlv
blN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBtZWRpYVF1
ZXJ5RXZhbHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwgcmVuZGVyU3R5bGUpOwotICAgIHJldHVybiBt
ZWRpYVF1ZXJ5RXZhbHVhdG9yLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKTsKKyAgICBhdXRvIG1l
ZGlhUXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50
YXgoYXR0cmlidXRlVmFsdWUpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNj
cmVlbiIsIGRvY3VtZW50LCByZW5kZXJTdHlsZSB9LmV2YWx1YXRlKG1lZGlhUXVlcmllcy5nZXQo
KSk7CiB9CiAKIHZvaWQgSFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKHN0ZDo6dW5pcXVl
X3B0cjxQcmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudC5m
cmFtZSgpKTsKICAgICBBU1NFUlQobV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpOwotICAgIGlmICgh
cHJlbG9hZC0+bWVkaWEoKS5pc0VtcHR5KCkgJiYgIW1lZGlhQXR0cmlidXRlTWF0Y2hlcyhtX2Rv
Y3VtZW50LmZyYW1lKCksICZtX2RvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUoKSwgcHJlbG9h
ZC0+bWVkaWEoKSkpCisgICAgaWYgKCFwcmVsb2FkLT5tZWRpYSgpLmlzRW1wdHkoKSAmJiAhbWVk
aWFBdHRyaWJ1dGVNYXRjaGVzKG1fZG9jdW1lbnQsICZtX2RvY3VtZW50LnJlbmRlclZpZXcoKS0+
c3R5bGUoKSwgcHJlbG9hZC0+bWVkaWEoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENhY2hl
ZFJlc291cmNlUmVxdWVzdCByZXF1ZXN0ID0gcHJlbG9hZC0+cmVzb3VyY2VSZXF1ZXN0KG1fZG9j
dW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGZlZmRiNTgwYWZjNWExYzY0
YWI3MWRjNzU3ODlkMjkxOTliYjYwOTIuLmZiMzA0YjRkNTM4MzFjNTNkMTYxMDg3MDgwNWZjYTI5
N2UxZjQ5NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTc5LDcgKzc5LDYgQEAK
ICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50Lmgi
CiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgog
I2luY2x1ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZl
YXR1cmVzLmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNzAwMjNiMWNiODU5NWEyYjRlMGQzNTY1
ZWMyYzZhYmNjY2QyNzViMy4uYzQ4ODQ1N2UyOGJlNTRiOTNmOTNmYzA3N2QzZWIzODU3NDQyNTY1
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtMTE3
NSwxMCArMTE3NSw4IEBAIEludFBvaW50IEV2ZW50SGFuZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3Np
dGlvbkZvclNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25zdAogICAgIGlmICghcGFnZSkKICAgICAg
ICAgcmV0dXJuIG1fbGFzdEtub3duTW91c2VQb3NpdGlvbjsKIAotICAgIE5TU2NyZWVuICpzY3Jl
ZW4gPSBzY3JlZW5Gb3JEaXNwbGF5SUQocGFnZS0+Y2hyb21lKCkuZGlzcGxheUlEKCkpOwotICAg
IEludFNpemUgYXV0b3Njcm9sbEFkanVzdG1lbnRGYWN0b3IgPSBhdXRvc2Nyb2xsQWRqdXN0bWVu
dEZhY3RvckZvclNjcmVlbkJvdW5kYXJpZXMobV9sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9u
LCB0b1VzZXJTcGFjZShzY3JlZW4uZnJhbWUsIG5pbCkpOwotCi0gICAgcmV0dXJuIG1fbGFzdEtu
b3duTW91c2VQb3NpdGlvbiArIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yOworICAgIGF1dG8g
ZnJhbWUgPSB0b1VzZXJTcGFjZShzY3JlZW4ocGFnZS0+Y2hyb21lKCkuZGlzcGxheUlEKCkpLmZy
YW1lLCBuaWwpOworICAgIHJldHVybiBtX2xhc3RLbm93bk1vdXNlUG9zaXRpb24gKyBhdXRvc2Ny
b2xsQWRqdXN0bWVudEZhY3RvckZvclNjcmVlbkJvdW5kYXJpZXMobV9sYXN0S25vd25Nb3VzZUds
b2JhbFBvc2l0aW9uLCBmcmFtZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVNjcmVlbi5oCmluZGV4IDBkODA3MzZhNWJiMmUwZDMxMzgyYTJiOTQ1YzZlODZkMzI2ZDNj
ODUuLmUyOGZmMTk5NTBkZGE1NGUwOTA2ZDk4MGFiYzQ1MmFiMzcyMjYxZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaApAQCAtMjMsMTAgKzIzLDcgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybVNjcmVlbl9oCi0jZGVmaW5lIFBsYXRm
b3JtU2NyZWVuX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNwcmFnbWEgb25jZQogCiAj
aWYgUExBVEZPUk0oTUFDKQogT0JKQ19DTEFTUyBOU1NjcmVlbjsKQEAgLTQ0LDQ0ICs0MSw0NCBA
QCB0eXBlZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogT0JKQ19DTEFTUyBVSVNjcmVlbjsK
ICNlbmRpZgogCi10eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtRGlzcGxheUlEOwotCi10eXBlZGVm
IFdURjo6VmVjdG9yPGNoYXI+IENvbG9yUHJvZmlsZTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci0gICAgY2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBX
aWRnZXQ7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBXaWRnZXQ7
CiAKLSAgICBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7Ci0gICAgaW50IHNjcmVlbkRlcHRoUGVy
Q29tcG9uZW50KFdpZGdldCopOwotICAgIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCop
OwordXNpbmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKIAotICAgIGJvb2wgc2NyZWVu
SGFzSW52ZXJ0ZWRDb2xvcnMoKTsKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqKTsKK2ludCBzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqKTsKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdp
ZGdldCopOwogCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAgRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7Citib29sIHNjcmVlbkhhc0ludmVydGVk
Q29sb3JzKCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcmVlblN1cHBvcnRzRXh0ZW5k
ZWRDb2xvcihXaWRnZXQqIHdpZGdldCA9IG51bGxwdHIpOworRmxvYXRSZWN0IHNjcmVlblJlY3Qo
V2lkZ2V0Kik7CitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKKworV0VC
Q09SRV9FWFBPUlQgYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoV2lkZ2V0KiA9IG51
bGxwdHIpOwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5k
b3coTlNXaW5kb3cgKik7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbkZvckRpc3BsYXlJRChQbGF0Zm9y
bURpc3BsYXlJRCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdG9Vc2VyU3BhY2Uo
Y29uc3QgTlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBOU1JlY3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNl
KTsKK05TU2NyZWVuICpzY3JlZW4oTlNXaW5kb3cgKik7CitOU1NjcmVlbiAqc2NyZWVuKFBsYXRm
b3JtRGlzcGxheUlEKTsKKworV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHRvVXNlclNwYWNlKGNv
bnN0IE5TUmVjdCYsIE5TV2luZG93ICpkZXN0aW5hdGlvbik7CitXRUJDT1JFX0VYUE9SVCBOU1Jl
Y3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKKwor
TlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQb2ludCYsIE5TU2NyZWVuICopOwogCi0g
ICAgTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQb2ludCYsIE5TU2NyZWVuICopOwog
I2VuZGlmCiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgZmxvYXQgc2NyZWVuUFBJRmFjdG9yKCk7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjcmVlblNpemUoKTsKLSAgICBXRUJDT1JF
X0VYUE9SVCBGbG9hdFNpemUgYXZhaWxhYmxlU2NyZWVuU2l6ZSgpOwotICAgIFdFQkNPUkVfRVhQ
T1JUIGZsb2F0IHNjcmVlblNjYWxlRmFjdG9yKFVJU2NyZWVuICogPSBudWxscHRyKTsKKworZmxv
YXQgc2NyZWVuUFBJRmFjdG9yKCk7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NyZWVuU2l6
ZSgpOworV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIGF2YWlsYWJsZVNjcmVlblNpemUoKTsKK1dF
QkNPUkVfRVhQT1JUIGZsb2F0IHNjcmVlblNjYWxlRmFjdG9yKFVJU2NyZWVuICogPSBudWxscHRy
KTsKKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsYXRm
b3JtU2NyZWVuX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCmluZGV4IGMxMDFiZWY4
OWJjNmI2MDgwOWY1ZGQxNDNlNDVlYTM1NjI0MTkwMTUuLmI1MWQ2OGFjNjE4NzRhZTIyNDQzMDE0
ODRlMTAxZjc4MTA0N2FjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcApAQCAt
MzQsOCArMzQsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEaXNwbGF5UmVmcmVzaE1vbml0
b3JDbGllbnQ6OkRpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCgpCi0gICAgOiBtX3NjaGVkdWxl
ZChmYWxzZSkKLSAgICAsIG1fZGlzcGxheUlESXNTZXQoZmFsc2UpCiB7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJl
c2hNb25pdG9yQ2xpZW50LmgKaW5kZXggMzBkYWZmM2E2NDY4ZDdjM2NiOWJmOGY3OGI1MDAwODQ4
NjZjNzZkNS4uMjk5M2QxZDAyMDk5MzU2ZjE1M2ExMDgwMDNhMDE0NjUxYjI4ZjE5NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxh
eVJlZnJlc2hNb25pdG9yQ2xpZW50LmgKQEAgLTIzLDE4ICsyMywxNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnRfaAotI2RlZmlu
ZSBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBVU0Uo
UkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogCiAjaW5jbHVkZSAiUGxh
dGZvcm1TY3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9P
cHRpb25hbC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERpc3BsYXlSZWZyZXNo
TW9uaXRvcjsKLWNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI7CiAKIGNsYXNzIERp
c3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCB7CiBwdWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgPSAwOwogCi0g
ICAgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5
SUQ7IH0KLSAgICBib29sIGhhc0Rpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlE
SXNTZXQ7IH0KLSAgICB2b2lkIHNldERpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQpCi0gICAgewotICAgICAgICBtX2Rpc3BsYXlJRCA9IGRpc3BsYXlJRDsKLSAgICAgICAgbV9k
aXNwbGF5SURJc1NldCA9IHRydWU7Ci0gICAgfQorICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlELnZhbHVlKCk7IH0KKyAgICBib29sIGhh
c0Rpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuICEhbV9kaXNwbGF5SUQ7IH0KKyAgICB2b2lkIHNl
dERpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIHsgbV9kaXNwbGF5SUQgPSBk
aXNwbGF5SUQ7IH0KIAogICAgIHZvaWQgc2V0SXNTY2hlZHVsZWQoYm9vbCBpc1NjaGVkdWxlZCkg
eyBtX3NjaGVkdWxlZCA9IGlzU2NoZWR1bGVkOyB9CiAgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2NoZWR1bGVkOyB9CkBAIC02MCwxMyArNTUsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgZmlyZURpc3BsYXlSZWZyZXNoSWZOZWVkZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAK
IHByaXZhdGU6Ci0gICAgYm9vbCBtX3NjaGVkdWxlZDsKLSAgICBib29sIG1fZGlzcGxheUlESXNT
ZXQ7Ci0gICAgUGxhdGZvcm1EaXNwbGF5SUQgbV9kaXNwbGF5SUQ7CisgICAgYm9vbCBtX3NjaGVk
dWxlZCB7IGZhbHNlIH07CisgICAgT3B0aW9uYWw8UGxhdGZvcm1EaXNwbGF5SUQ+IG1fZGlzcGxh
eUlEOwogfTsKIAogfQogCiAjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJ
U1BMQVlfTU9OSVRPUikKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuaAppbmRleCA4MTUyMDNmOTVkYTVh
YTRlYmI3MmZjOWJjZDM4MmZiZDAzZGI1M2YyLi41ZDdlNTFmZGZhYzg0YTVjZWFiNThkMTNmMDg0
MmRkYWJmNDgyNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0xheWVyVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEdyYXBoaWNzTGF5ZXJV
cGRhdGVyX2gKLSNkZWZpbmUgR3JhcGhpY3NMYXllclVwZGF0ZXJfaAorI3ByYWdtYSBvbmNlCiAK
ICNpbmNsdWRlICJEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVNjcmVlbi5oIgpAQCAtNjgsNSArNjcsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gR3JhcGhpY3NMYXllclVwZGF0ZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAppbmRleCA1YWJiMGFjY2UzOGI5MGZkOGRjYjQxNWM1ZDhkNTcyMGY4MTM5Y2FmLi5kMTZmNDg0
MzUyNmFiYzljN2Q3ZmE0ZTliYWNhZmE2YTgxZWZjOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMjYsOCAr
MjYsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEltYWdlRGVjb2Rlcl9oCi0j
ZGVmaW5lIEltYWdlRGVjb2Rlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkludFJlY3Qu
aCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgpAQCAtNDEsNiArNDAsOCBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3VzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKKwogICAg
IC8vIEltYWdlRnJhbWUgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBi
dWZmZXIgaXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBp
bnRvLgogICAgIGNsYXNzIEltYWdlRnJhbWUgewpAQCAtNDExLDUgKzQxMiwzIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0
b3J5TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWMuaAppbmRleCA4YTBlOWJjMGVlZjE5NTU0ODY0N2NkYmQ4MTIzZDNmODAxZDQxYmM3Li4y
NDYwNDE3NzAzNTdiNzM3Yzk1MjUyODA1ZjRiOGRmZjRkODk1NTJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaApAQCAt
MjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgUGxhdGZvcm1FdmVudEZhY3RvcnlNYWNfaAotI2RlZmluZSBQbGF0Zm9ybUV2ZW50
RmFjdG9yeU1hY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRF
dmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtNDAsMTYgKzM5LDE1
IEBAIHB1YmxpYzoKIH07CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgZGVmaW5lZChfX09CSkNf
XykKLS8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLgotV0VCQ09SRV9F
WFBPUlQgSW50UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5T
V2luZG93ICopOwogCi0vLyBGSVhNRTogV2ViS2l0MiBoYXMgYSBsb3Qgb2YgY29kZSBjb3B5L3Bh
c3RlZCBmcm9tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjIGluIFdlYkV2ZW50RmFjdG9yeS4gSXQg
c2hvdWxkIGJlIGNhcmVmdWxseSBzaGFyZWQgd2l0aCBXZWJDb3JlLgotV0VCQ09SRV9FWFBPUlQg
aW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoTlNFdmVudCopOwotV0VCQ09SRV9FWFBPUlQg
U3RyaW5nIGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChOU0V2ZW50Kik7Ci1XRUJDT1JFX0VYUE9S
VCBkb3VibGUgZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoTlNFdmVudCopOworLy8gRklYTUU6IFRo
aXMgZnVuY3Rpb24gZG9lc24ndCByZWFsbHkgYmVsb25nIGluIHRoaXMgaGVhZGVyLgorV0VCQ09S
RV9FWFBPUlQgTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwg
TlNXaW5kb3cgKik7CisKKy8vIEZJWE1FOiBXZWJLaXQyIGhhcyBhIGxvdCBvZiBjb2RlIGNvcGll
ZCBhbmQgcGFzdGVkIGZyb20gUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMgaW4gV2ViRXZlbnRGYWN0
b3J5LiBNb3JlIG9mIGl0IHNob3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJDb3JlLgorV0VCQ09SRV9F
WFBPUlQgaW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoTlNFdmVudCAqKTsKK1dFQkNPUkVf
RVhQT1JUIFN0cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoTlNFdmVudCAqKTsKK1dFQkNP
UkVfRVhQT1JUIGRvdWJsZSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChOU0V2ZW50ICopOwogCiAj
ZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtRXZlbnRGYWN0b3J5TWFjLm1tCmluZGV4IGUyMjI0ZTBiYmRhNGI3OTRmMTRkMDliMGVk
NTM1NTU5MDQxNWExOWYuLmE3NDc0NzNjZDE1MDcyNWMzYmIyM2QyMmQ2NWRjYjcxNmVkMzhjNjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFj
dG9yeU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVu
dEZhY3RvcnlNYWMubW0KQEAgLTM4LDE1ICszOCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dp
bmRvdyAqd2luZG93KQorTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQ
b2ludCwgTlNXaW5kb3cgKndpbmRvdykKIHsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNo
CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0
aW9ucyIKLSAgICByZXR1cm4gSW50UG9pbnQoZmxpcFNjcmVlblBvaW50KFt3aW5kb3cgY29udmVy
dEJhc2VUb1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cpKSk7Cisg
ICAgcmV0dXJuIGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRCYXNlVG9TY3JlZW46d2lu
ZG93UG9pbnRdLCBzY3JlZW4od2luZG93KSk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9w
CiB9CiAKLXN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50
KQorc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKIHsK
ICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgewogI2lmIGRlZmluZWQoX19MUDY0X18pICYmIF9f
TUFDX09TX1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKQEAgLTcwLDcgKzcwLDcgQEAg
c3RhdGljIEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiAjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsUG9pbnQo
W2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbZXZlbnQgd2luZG93XSk7CiAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKKyAgICAgICAgICAgIHJldHVybiB7
IDAsIDAgfTsKICAgICB9CiB9CiAKQEAgLTQ4NSw3ICs0ODUsNyBAQCBwdWJsaWM6CiAKICAgICAg
ICAgLy8gUGxhdGZvcm1Nb3VzZUV2ZW50CiAgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2
ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2Jh
bFBvaW50Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9p
bnQoZ2xvYmFsUG9pbnRGb3JFdmVudChldmVudCkpOwogICAgICAgICBtX2J1dHRvbiA9IG1vdXNl
QnV0dG9uRm9yRXZlbnQoZXZlbnQpOwogICAgICAgICBtX2NsaWNrQ291bnQgPSBjbGlja0NvdW50
Rm9yRXZlbnQoZXZlbnQpOwogCkBAIC01MTQsMTQgKzUxNCwxNCBAQCBwdWJsaWM6CiAgICAgUGxh
dGZvcm1XaGVlbEV2ZW50QnVpbGRlcihOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3
KQogICAgIHsKICAgICAgICAgLy8gUGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IFBsYXRmb3JtRXZlbnQ6OldoZWVsOwotICAgICAgICBt
X21vZGlmaWVycyAgICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2
ZW50KTsKLSAgICAgICAgbV90aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBldmVu
dFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CisgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZl
bnQ6OldoZWVsOworICAgICAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50
KTsKKyAgICAgICAgbV90aW1lc3RhbXAgPSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7
CiAKICAgICAgICAgLy8gUGxhdGZvcm1XaGVlbEV2ZW50Ci0gICAgICAgIG1fcG9zaXRpb24gICAg
ICAgICAgICAgICAgICAgICAgICAgID0gcG9pbnRGb3JFdmVudChldmVudCwgd2luZG93Vmlldyk7
Ci0gICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gICAgICAgICAgICAgICAgICAgID0gZ2xvYmFsUG9p
bnRGb3JFdmVudChldmVudCk7Ci0gICAgICAgIG1fZ3JhbnVsYXJpdHkgICAgICAgICAgICAgICAg
ICAgICAgID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgICAgIG1fcG9zaXRpb24gPSBw
b2ludEZvckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlv
biA9IEludFBvaW50KGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgbV9ncmFu
dWxhcml0eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwogCiAgICAgICAgIEJPT0wgY29udGlu
dW91czsKICAgICAgICAgd2tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmbV9kZWx0YVgsICZt
X2RlbHRhWSwgJmNvbnRpbnVvdXMpOwpAQCAtNTM1LDEwICs1MzUsMTAgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxz
UGVyTGluZVN0ZXAoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX3BoYXNlICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IHBoYXNlRm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX21vbWVu
dHVtUGhhc2UgICAgICAgICAgICAgICAgICAgICA9IG1vbWVudHVtUGhhc2VGb3JFdmVudChldmVu
dCk7Ci0gICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyAgICAgICAgID0gY29udGlu
dW91czsKLSAgICAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgICAgICAgPSBbZXZl
bnQgaXNEaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2VdOworICAgICAgICBtX3BoYXNlID0gcGhh
c2VGb3JFdmVudChldmVudCk7CisgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9IG1vbWVudHVtUGhh
c2VGb3JFdmVudChldmVudCk7CisgICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9
IGNvbnRpbnVvdXM7CisgICAgICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gW2V2
ZW50IGlzRGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlXTsKICAgICB9CiB9OwogCkBAIC01NTMs
MjMgKzU1MywyMyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihO
U0V2ZW50ICpldmVudCkKICAgICB7CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAg
bV90eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpc0tleVVwRXZlbnQoZXZlbnQp
ID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotICAgICAg
ICBtX21vZGlmaWVycyAgICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50
KGV2ZW50KTsKLSAgICAgICAgbV90aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBl
dmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CisgICAgICAgIG1fdHlwZSA9IGlzS2V5VXBF
dmVudChldmVudCkgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURv
d247CisgICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAg
ICAgICBtX3RpbWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKIAogICAg
ICAgICAvLyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQKLSAgICAgICAgbV90ZXh0ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSB0ZXh0RnJvbUV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV91bm1v
ZGlmaWVkVGV4dCAgICAgICAgICAgICAgICAgICAgPSB1bm1vZGlmaWVkVGV4dEZyb21FdmVudChl
dmVudCk7Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgID0ga2V5
SWRlbnRpZmllckZvcktleUV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV93aW5kb3dzVmlydHVhbEtl
eUNvZGUgICAgICAgICAgICAgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50KTsKLSAg
ICAgICAgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgICAgICAgPSBbZXZlbnQga2V5Q29k
ZV07Ci0gICAgICAgIG1fbWFjQ2hhckNvZGUgICAgICAgICAgICAgICAgICAgICAgID0gd2tHZXRO
U0V2ZW50S2V5Q2hhcihldmVudCk7CisgICAgICAgIG1fdGV4dCA9IHRleHRGcm9tRXZlbnQoZXZl
bnQpOworICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gdW5tb2RpZmllZFRleHRGcm9tRXZlbnQo
ZXZlbnQpOworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yS2V5RXZl
bnQoZXZlbnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlD
b2RlRm9yS2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0g
W2V2ZW50IGtleUNvZGVdOworICAgICAgICBtX21hY0NoYXJDb2RlID0gd2tHZXROU0V2ZW50S2V5
Q2hhcihldmVudCk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAg
IG1fYXV0b1JlcGVhdCAgICAgICAgICAgICAgICAgICAgICAgID0gKFtldmVudCB0eXBlXSAhPSBO
U0ZsYWdzQ2hhbmdlZCkgJiYgW2V2ZW50IGlzQVJlcGVhdF07CisgICAgICAgIG1fYXV0b1JlcGVh
dCA9IFtldmVudCB0eXBlXSAhPSBOU0ZsYWdzQ2hhbmdlZCAmJiBbZXZlbnQgaXNBUmVwZWF0XTsK
ICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAgICAgbV9pc0tleXBhZCAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSBpc0tleXBhZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9pc1N5
c3RlbUtleSAgICAgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsgLy8gU3lzdGVtS2V5IGlzIGFs
d2F5cyBmYWxzZSBvbiB0aGUgTWFjLgorICAgICAgICBtX2lzS2V5cGFkID0gaXNLZXlwYWRFdmVu
dChldmVudCk7CisgICAgICAgIG1faXNTeXN0ZW1LZXkgPSBmYWxzZTsgLy8gU3lzdGVtS2V5IGlz
IGFsd2F5cyBmYWxzZSBvbiB0aGUgTWFjLgogCiAgICAgICAgIC8vIEFsd2F5cyB1c2UgMTMgZm9y
IEVudGVyL1JldHVybiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQg
Y2hhcmFjdGVyIGZvciBFbnRlci4KICAgICAgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2Rl
ID09IFZLX1JFVFVSTikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L1BsYXRmb3JtU2NyZWVuTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRm
b3JtU2NyZWVuTWFjLm1tCmluZGV4IGZlMTFlZGUxMjUzZjU0NDMyYmRkZDIyNTBmMjVkM2VjOGE1
MDE5NDkuLjg2OWQ2NWUyYWQyNGZkNzRhMTNiZGZhNzYzMDQ4YzIzNWZhYzZhOWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KQEAgLTMw
LDcgKzMwLDYgQEAKICNpbXBvcnQgIkZsb2F0UmVjdC5oIgogI2ltcG9ydCAiRnJhbWVWaWV3Lmgi
CiAjaW1wb3J0ICJIb3N0V2luZG93LmgiCi0KICNpbXBvcnQgPENvbG9yU3luYy9Db2xvclN5bmMu
aD4KIAogZXh0ZXJuICJDIiB7CkBAIC00MCwxMDIgKzM5LDk5IEBAIGJvb2wgQ0dEaXNwbGF5VXNl
c0ZvcmNlVG9HcmF5KHZvaWQpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQbGF0
Zm9ybURpc3BsYXlJRCBkaXNwbGF5SURGcm9tU2NyZWVuKE5TU2NyZWVuICpzY3JlZW4pCi17Ci0g
ICAgcmV0dXJuIChQbGF0Zm9ybURpc3BsYXlJRClbW1tzY3JlZW4gZGV2aWNlRGVzY3JpcHRpb25d
IG9iamVjdEZvcktleTpAIk5TU2NyZWVuTnVtYmVyIl0gaW50VmFsdWVdOwotfQotCiAvLyBUaGVz
ZSBmdW5jdGlvbnMgc2NhbGUgYmV0d2VlbiBzY3JlZW4gYW5kIHBhZ2UgY29vcmRpbmF0ZXMgYmVj
YXVzZSBKYXZhU2NyaXB0L0RPTSBvcGVyYXRpb25zCiAvLyBhc3N1bWUgdGhhdCB0aGUgc2NyZWVu
IGFuZCB0aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4KIAotc3RhdGlj
IFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlGcm9tV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQorc3Rh
dGljIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRChOU1NjcmVlbiAqc2NyZWVuKQoreworICAg
IHJldHVybiBbW1tzY3JlZW4gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5TU2Ny
ZWVuTnVtYmVyIl0gaW50VmFsdWVdOworfQorCitzdGF0aWMgUGxhdGZvcm1EaXNwbGF5SUQgZGlz
cGxheUlEKFdpZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIEZyYW1lVmlldyogdmlldyA9IHdpZGdldC0+cm9vdCgpOworICAgIGF1dG8q
IHZpZXcgPSB3aWRnZXQtPnJvb3QoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgcmV0dXJuIHZpZXctPmhvc3RXaW5kb3coKS0+ZGlzcGxheUlEKCk7CisgICAgYXV0
byogaG9zdFdpbmRvdyA9IHZpZXctPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cp
CisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgp
OwogfQogCi1zdGF0aWMgTlNTY3JlZW4gKnNjcmVlbkZvcldpZGdldChXaWRnZXQqIHdpZGdldCwg
TlNXaW5kb3cgKndpbmRvdykKKy8vIFNjcmVlbiBjb250YWluaW5nIHRoZSBtZW51YmFyLgorc3Rh
dGljIE5TU2NyZWVuICpmaXJzdFNjcmVlbigpCiB7Ci0gICAgLy8gV2lkZ2V0IGlzIGluIGFuIE5T
V2luZG93LCB1c2UgaXRzIHNjcmVlbi4KLSAgICBpZiAod2luZG93KQotICAgICAgICByZXR1cm4g
c2NyZWVuRm9yV2luZG93KHdpbmRvdyk7CisgICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVl
biBzY3JlZW5zXTsKKyAgICBpZiAoIVtzY3JlZW5zIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICByZXR1cm4gW3NjcmVlbnMgb2JqZWN0QXRJbmRleDowXTsKK30KIAotICAgIC8vIERp
ZG4ndCBnZXQgYW4gTlNXaW5kb3c7IHByb2JhYmx5IFdlYktpdDIuIFRyeSB1c2luZyB0aGUgV2lk
Z2V0J3MgZGlzcGxheSBJRC4KLSAgICBpZiAoTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvckRp
c3BsYXlJRChkaXNwbGF5RnJvbVdpZGdldCh3aWRnZXQpKSkKLSAgICAgICAgcmV0dXJuIHNjcmVl
bjsKK3N0YXRpYyBOU1dpbmRvdyAqd2luZG93KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICgh
d2lkZ2V0KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB3aWRnZXQtPnBsYXRmb3Jt
V2lkZ2V0KCkud2luZG93OworfQogCi0gICAgLy8gV2lkZ2V0J3Mgd2luZG93IGlzIG9mZnNjcmVl
biwgb3Igbm8gc2NyZWVucy4gRmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzY3JlZW4gaWYgYXZhaWxh
YmxlLgotICAgIHJldHVybiBzY3JlZW5Gb3JXaW5kb3cobmlsKTsKK3N0YXRpYyBOU1NjcmVlbiAq
c2NyZWVuKFdpZGdldCogd2lkZ2V0KQoreworICAgIC8vIElmIHRoZSB3aWRnZXQgaXMgaW4gYSB3
aW5kb3csIHVzZSB0aGF0LCBvdGhlcndpc2UgdXNlIHRoZSBkaXNwbGF5IElEIGZyb20gdGhlIGhv
c3Qgd2luZG93LgorICAgIC8vIEZpcnN0IGNhc2UgaXMgZm9yIHdoZW4gdGhlIE5TV2luZG93IGlz
IGluIHRoZSBzYW1lIHByb2Nlc3MsIHNlY29uZCBjYXNlIGZvciB3aGVuIGl0J3Mgbm90LgorICAg
IGlmIChhdXRvIHNjcmVlbkZyb21XaW5kb3cgPSB3aW5kb3cod2lkZ2V0KS5zY3JlZW4pCisgICAg
ICAgIHJldHVybiBzY3JlZW5Gcm9tV2luZG93OworICAgIHJldHVybiBzY3JlZW4oZGlzcGxheUlE
KHdpZGdldCkpOwogfQogCiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAg
TlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2lu
ZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lkZ2V0KHdpZGdl
dCwgd2luZG93KTsKLSAgICByZXR1cm4gTlNCaXRzUGVyUGl4ZWxGcm9tRGVwdGgoc2NyZWVuLmRl
cHRoKTsKKyAgICByZXR1cm4gTlNCaXRzUGVyUGl4ZWxGcm9tRGVwdGgoc2NyZWVuKHdpZGdldCku
ZGVwdGgpOwogfQogCiBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQp
CiB7Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lk
Z2V0KCkgd2luZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lk
Z2V0KHdpZGdldCwgd2luZG93KTsKLSAgICByZXR1cm4gTlNCaXRzUGVyU2FtcGxlRnJvbURlcHRo
KHNjcmVlbi5kZXB0aCk7CisgICAgcmV0dXJuIE5TQml0c1BlclNhbXBsZUZyb21EZXB0aChzY3Jl
ZW4od2lkZ2V0KS5kZXB0aCk7CiB9CiAKIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCop
CiB7Ci0gICAgLy8gQXQgdGhlIG1vbWVudCB0aGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJp
bGl0eSBzZXR0aW5nLAotICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHNjcmVl
biB3ZSdyZSB1c2luZy4KKyAgICAvLyBUaGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0
eSBzZXR0aW5nLCBzYW1lIG9uIGFsbCBzY3JlZW5zLgogICAgIHJldHVybiBDR0Rpc3BsYXlVc2Vz
Rm9yY2VUb0dyYXkoKTsKIH0KIAogYm9vbCBzY3JlZW5IYXNJbnZlcnRlZENvbG9ycygpCiB7Ci0g
ICAgLy8gQXQgdGhlIG1vbWVudCB0aGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBz
ZXR0aW5nLAotICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHNjcmVlbiB3ZSdy
ZSB1c2luZy4KKyAgICAvLyBUaGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBzZXR0
aW5nLCBzYW1lIG9uIGFsbCBzY3JlZW5zLgogICAgIHJldHVybiBDR0Rpc3BsYXlVc2VzSW52ZXJ0
ZWRQb2xhcml0eSgpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkK
IHsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRn
ZXQoKSB3aW5kb3ddIDogbmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JXaWRn
ZXQod2lkZ2V0LCB3aW5kb3cpOwotICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuIGZyYW1l
XSwgd2luZG93KTsKKyAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbih3aWRnZXQpIGZyYW1l
XSwgd2luZG93KHdpZGdldCkpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChX
aWRnZXQqIHdpZGdldCkKIHsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdl
dC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddIDogbmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4g
PSBzY3JlZW5Gb3JXaWRnZXQod2lkZ2V0LCB3aW5kb3cpOwotICAgIHJldHVybiB0b1VzZXJTcGFj
ZShbc2NyZWVuIHZpc2libGVGcmFtZV0sIHdpbmRvdyk7CisgICAgcmV0dXJuIHRvVXNlclNwYWNl
KFtzY3JlZW4od2lkZ2V0KSB2aXNpYmxlRnJhbWVdLCB3aW5kb3cod2lkZ2V0KSk7CiB9CiAKLU5T
U2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKndpbmRvdykKK05TU2NyZWVuICpzY3Jl
ZW4oTlNXaW5kb3cgKndpbmRvdykKIHsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gW3dpbmRvdyBz
Y3JlZW5dOyAvLyBuaWwgaWYgdGhlIHdpbmRvdyBpcyBvZmYtc2NyZWVuCi0gICAgaWYgKHNjcmVl
bikKLSAgICAgICAgcmV0dXJuIHNjcmVlbjsKLQotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNT
Y3JlZW4gc2NyZWVuc107Ci0gICAgaWYgKFtzY3JlZW5zIGNvdW50XSA+IDApCi0gICAgICAgIHJl
dHVybiBbc2NyZWVucyBvYmplY3RBdEluZGV4OjBdOyAvLyBzY3JlZW4gY29udGFpbmluZyB0aGUg
bWVudWJhcgotCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW3dpbmRvdyBzY3JlZW5dID8g
OiBmaXJzdFNjcmVlbigpOwogfQogCi1OU1NjcmVlbiAqc2NyZWVuRm9yRGlzcGxheUlEKFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlJRCkKK05TU2NyZWVuICpzY3JlZW4oUGxhdGZvcm1EaXNwbGF5
SUQgZGlzcGxheUlEKQogewogICAgIGZvciAoTlNTY3JlZW4gKnNjcmVlbiBpbiBbTlNTY3JlZW4g
c2NyZWVuc10pIHsKLSAgICAgICAgaWYgKGRpc3BsYXlJREZyb21TY3JlZW4oc2NyZWVuKSA9PSBk
aXNwbGF5SUQpCisgICAgICAgIGlmIChXZWJDb3JlOjpkaXNwbGF5SUQoc2NyZWVuKSA9PSBkaXNw
bGF5SUQpCiAgICAgICAgICAgICByZXR1cm4gc2NyZWVuOwogICAgIH0KLSAgICByZXR1cm4gbmls
OworICAgIHJldHVybiBmaXJzdFNjcmVlbigpOwogfQogCiBib29sIHNjcmVlblN1cHBvcnRzRXh0
ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCkKQEAgLTE0NywxOSArMTQzLDE0IEBAIGJvb2wgc2Ny
ZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKFdpZGdldCogd2lkZ2V0KQogICAgIGlmICghd2lkZ2V0
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gW3dpZGdl
dC0+cGxhdGZvcm1XaWRnZXQoKSB3aW5kb3ddOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3Jl
ZW5Gb3JXaWRnZXQod2lkZ2V0LCB3aW5kb3cpOwotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNw
YWNlID0gc2NyZWVuLmNvbG9yU3BhY2UuQ0dDb2xvclNwYWNlOworICAgIGF1dG8gY29sb3JTcGFj
ZSA9IHNjcmVlbih3aWRnZXQpLmNvbG9yU3BhY2UuQ0dDb2xvclNwYWNlOwogCiAjaWYgX19NQUNf
T1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDEyMDAKICAgICByZXR1cm4gQ0dDb2xvclNw
YWNlSXNXaWRlR2FtdXRSR0IoY29sb3JTcGFjZSk7CiAjZWxzZQotICAgIGJvb2wgaXNXaWRlR2Ft
dXQgPSBmYWxzZTsKLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBpY2NEYXRhID0gYWRvcHRDRihD
R0NvbG9yU3BhY2VDb3B5SUNDUHJvZmlsZShjb2xvclNwYWNlKSk7Ci0gICAgUmV0YWluUHRyPENv
bG9yU3luY1Byb2ZpbGVSZWY+IHByb2ZpbGUgPSBhZG9wdENGKENvbG9yU3luY1Byb2ZpbGVDcmVh
dGUoaWNjRGF0YS5nZXQoKSwgTlVMTCkpOwotICAgIGlmIChwcm9maWxlKQotICAgICAgICBpc1dp
ZGVHYW11dCA9IENvbG9yU3luY1Byb2ZpbGVJc1dpZGVHYW11dChwcm9maWxlLmdldCgpKTsKLSAg
ICByZXR1cm4gaXNXaWRlR2FtdXQ7CisgICAgYXV0byBpY2NEYXRhID0gYWRvcHRDRihDR0NvbG9y
U3BhY2VDb3B5SUNDUHJvZmlsZShjb2xvclNwYWNlKSk7CisgICAgYXV0byBwcm9maWxlID0gYWRv
cHRDRihDb2xvclN5bmNQcm9maWxlQ3JlYXRlKGljY0RhdGEuZ2V0KCksIG51bGxwdHIpKTsKKyAg
ICByZXR1cm4gcHJvZmlsZSAmJiBDb2xvclN5bmNQcm9maWxlSXNXaWRlR2FtdXQocHJvZmlsZS5n
ZXQoKSk7CiAjZW5kaWYKICNlbmRpZgogfQpAQCAtMTY3LDE0ICsxNTgsMTQgQEAgYm9vbCBzY3Jl
ZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoV2lkZ2V0KiB3aWRnZXQpCiBGbG9hdFJlY3QgdG9Vc2Vy
U3BhY2UoY29uc3QgTlNSZWN0JiByZWN0LCBOU1dpbmRvdyAqZGVzdGluYXRpb24pCiB7CiAgICAg
RmxvYXRSZWN0IHVzZXJSZWN0ID0gcmVjdDsKLSAgICB1c2VyUmVjdC5zZXRZKE5TTWF4WShbc2Ny
ZWVuRm9yV2luZG93KGRlc3RpbmF0aW9uKSBmcmFtZV0pIC0gKHVzZXJSZWN0LnkoKSArIHVzZXJS
ZWN0LmhlaWdodCgpKSk7IC8vIGZsaXAKKyAgICB1c2VyUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVu
KGRlc3RpbmF0aW9uKSBmcmFtZV0pIC0gKHVzZXJSZWN0LnkoKSArIHVzZXJSZWN0LmhlaWdodCgp
KSk7IC8vIGZsaXAKICAgICByZXR1cm4gdXNlclJlY3Q7CiB9CiAKIE5TUmVjdCB0b0RldmljZVNw
YWNlKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgTlNXaW5kb3cgKnNvdXJjZSkKIHsKICAgICBGbG9h
dFJlY3QgZGV2aWNlUmVjdCA9IHJlY3Q7Ci0gICAgZGV2aWNlUmVjdC5zZXRZKE5TTWF4WShbc2Ny
ZWVuRm9yV2luZG93KHNvdXJjZSkgZnJhbWVdKSAtIChkZXZpY2VSZWN0LnkoKSArIGRldmljZVJl
Y3QuaGVpZ2h0KCkpKTsgLy8gZmxpcAorICAgIGRldmljZVJlY3Quc2V0WShOU01heFkoW3NjcmVl
bihzb3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBkZXZpY2VSZWN0LmhlaWdodCgp
KSk7IC8vIGZsaXAKICAgICByZXR1cm4gZGV2aWNlUmVjdDsKIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0KaW5kZXggN2RmYzA1YTZiY2RmMWUzZmY3YzMwOTY1ZGM4OTVjN2Zm
M2YxYzVjMC4uYjBkY2Q5YTlhYTZhZWZmNGNkZjZhZGRlMDRlZjdjZjI5YWU0MTg3NiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05NzYsNyArOTc2LDcgQEAgLSAodm9p
ZClfZHJhZ1NvdXJjZUVuZGVkQXQ6KE5TUG9pbnQpd2luZG93TG9jIG9wZXJhdGlvbjooTlNEcmFn
T3BlcmF0aW9uKW9wZXJhdGkKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybjsKICAgICAv
LyBGSVhNRTogVGhlc2UgYXJlIGZha2UgbW9kaWZpZXIga2V5cyBoZXJlLCBidXQgdGhleSBzaG91
bGQgYmUgcmVhbCBvbmVzIGluc3RlYWQuCi0gICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KElu
dFBvaW50KHdpbmRvd0xvYyksIGdsb2JhbFBvaW50KHdpbmRvd0xvYywgW3ZpZXctPnBsYXRmb3Jt
V2lkZ2V0KCkgd2luZG93XSksCisgICAgUGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KEludFBvaW50
KHdpbmRvd0xvYyksIEludFBvaW50KGdsb2JhbFBvaW50KHdpbmRvd0xvYywgW3ZpZXctPnBsYXRm
b3JtV2lkZ2V0KCkgd2luZG93XSkpLAogICAgICAgICBMZWZ0QnV0dG9uLCBQbGF0Zm9ybUV2ZW50
OjpNb3VzZU1vdmVkLCAwLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgY3VycmVudFRpbWUo
KSwgV2ViQ29yZTo6Rm9yY2VBdENsaWNrKTsKICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5ldmVu
dEhhbmRsZXIoKS5kcmFnU291cmNlRW5kZWRBdChldmVudCwgKERyYWdPcGVyYXRpb24pb3BlcmF0
aW9uKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRG
YWN0b3J5Lm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0K
aW5kZXggY2ViYmMyNjkwMWJlNzkzYTg4YmFjYmY5YzkyYzdkNTM5Mjc4MDdkYy4uY2Y3NzQyN2Y1
NGVmNGYxOTBhMzZiNWM2ODk0Mjc2YzA1NDQyZTY2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0KKysrIGIvU291cmNlL1dlYktpdDIvU2hh
cmVkL21hYy9XZWJFdmVudEZhY3RvcnkubW0KQEAgLTEzNywzNCArMTM3LDYgQEAgc3RhdGljIGlu
dCBjbGlja0NvdW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiAjcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcG9wCiB9CiAKLXN0YXRpYyBOU1NjcmVlbiAqc2NyZWVuRm9yV2luZG93KE5TV2luZG93
ICp3aW5kb3cpCi17Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IFt3aW5kb3cgc2NyZWVuXTsgLy8g
bmlsIGlmIHRoZSB3aW5kb3cgaXMgb2ZmLXNjcmVlbgotICAgIGlmIChzY3JlZW4pCi0gICAgICAg
IHJldHVybiBzY3JlZW47Ci0gICAgCi0gICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBz
Y3JlZW5zXTsKLSAgICBpZiAoW3NjcmVlbnMgY291bnRdID4gMCkKLSAgICAgICAgcmV0dXJuIFtz
Y3JlZW5zIG9iamVjdEF0SW5kZXg6MF07IC8vIHNjcmVlbiBjb250YWluaW5nIHRoZSBtZW51YmFy
Ci0gICAgCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotc3RhdGljIE5TUG9pbnQgZmxpcFNjcmVlblBv
aW50KGNvbnN0IE5TUG9pbnQmIHNjcmVlblBvaW50LCBOU1NjcmVlbiAqc2NyZWVuKQotewotICAg
IE5TUG9pbnQgZmxpcHBlZFBvaW50ID0gc2NyZWVuUG9pbnQ7Ci0gICAgZmxpcHBlZFBvaW50Lnkg
PSBOU01heFkoW3NjcmVlbiBmcmFtZV0pIC0gZmxpcHBlZFBvaW50Lnk7Ci0gICAgcmV0dXJuIGZs
aXBwZWRQb2ludDsKLX0KLQotc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2lu
dCYgd2luZG93UG9pbnQsIE5TV2luZG93ICp3aW5kb3cpCi17Ci0jcHJhZ21hIGNsYW5nIGRpYWdu
b3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiCi0gICAgcmV0dXJuIGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZl
cnRCYXNlVG9TY3JlZW46d2luZG93UG9pbnRdLCBzY3JlZW5Gb3JXaW5kb3cod2luZG93KSk7Ci0j
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi19Ci0KIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBv
aW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAgICAgc3dpdGNoIChbZXZlbnQgdHlwZV0p
IHsKQEAgLTE4Nyw3ICsxNTksNyBAQCBzdGF0aWMgTlNQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50
KE5TRXZlbnQgKmV2ZW50KQogICAgIGNhc2UgTlNSaWdodE1vdXNlVXA6CiAgICAgY2FzZSBOU1Nj
cm9sbFdoZWVsOgogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotICAgICAgICByZXR1cm4g
Z2xvYmFsUG9pbnQoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3ddLCBbZXZlbnQgd2luZG93XSk7Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpnbG9iYWxQb2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRv
d10sIFtldmVudCB3aW5kb3ddKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gTlNaZXJv
UG9pbnQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJ
bXBsLm1tCmluZGV4IGYwZjQ2M2QzMTY0YWEzYWIwZDRlODgyOTIwMmNjMzVhNWEwMjMzZGIuLmIy
MjFkMjIyYWNlMTY2NmZiZDdjNmNmMmE2OTVhYzJjODczOGYxZTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KQEAgLTEwODksNyArMTA4OSw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZUJhY2tpbmdQcm9wZXJ0aWVzKENHRmxv
YXQgb2xkQmFja2luZ1NjYWxlRmFjdG9yCiB2b2lkIFdlYlZpZXdJbXBsOjp3aW5kb3dEaWRDaGFu
Z2VTY3JlZW4oKQogewogICAgIE5TV2luZG93ICp3aW5kb3cgPSBtX3RhcmdldFdpbmRvd0Zvck1v
dmVQcmVwYXJhdGlvbiA/IG1fdGFyZ2V0V2luZG93Rm9yTW92ZVByZXBhcmF0aW9uIDogbV92aWV3
LndpbmRvdzsKLSAgICBtX3BhZ2UtPndpbmRvd1NjcmVlbkRpZENoYW5nZSgoUGxhdGZvcm1EaXNw
bGF5SUQpW1tbW3dpbmRvdyBzY3JlZW5dIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6
QCJOU1NjcmVlbk51bWJlciJdIGludFZhbHVlXSk7CisgICAgbV9wYWdlLT53aW5kb3dTY3JlZW5E
aWRDaGFuZ2UoW1tbW3dpbmRvdyBzY3JlZW5dIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JL
ZXk6QCJOU1NjcmVlbk51bWJlciJdIGludFZhbHVlXSk7CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6
OndpbmRvd0RpZENoYW5nZUxheWVySG9zdGluZygpCkBAIC0yNzc4LDcgKzI3NzgsNyBAQCB2b2lk
IFdlYlZpZXdJbXBsOjpkcmFnZ2VkSW1hZ2UoTlNJbWFnZSAqaW1hZ2UsIENHUG9pbnQgZW5kUG9p
bnQsIE5TRHJhZ09wZXJhdGlvbgogICAgIC8vIFByZXZlbnQgcXVldWVkIG1vdXNlRHJhZ2dlZCBl
dmVudHMgZnJvbSBjb21pbmcgYWZ0ZXIgdGhlIGRyYWcgYW5kIGZha2UgbW91c2VVcCBldmVudC4K
ICAgICBtX2lnbm9yZXNNb3VzZURyYWdnZWRFdmVudHMgPSB0cnVlOwogCi0gICAgbV9wYWdlLT5k
cmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQod2luZG93TW91c2VMb2MpLCBXZWJDb3JlOjpnbG9i
YWxQb2ludCh3aW5kb3dNb3VzZUxvYywgbV92aWV3LndpbmRvdyksIG9wZXJhdGlvbik7CisgICAg
bV9wYWdlLT5kcmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQod2luZG93TW91c2VMb2MpLCBXZWJD
b3JlOjpJbnRQb2ludChXZWJDb3JlOjpnbG9iYWxQb2ludCh3aW5kb3dNb3VzZUxvYywgbV92aWV3
LndpbmRvdykpLCBvcGVyYXRpb24pOwogfQogCiBzdGF0aWMgV2ViQ29yZTo6RHJhZ0FwcGxpY2F0
aW9uRmxhZ3MgYXBwbGljYXRpb25GbGFnc0ZvckRyYWcoTlNWaWV3ICp2aWV3LCBpZCA8TlNEcmFn
Z2luZ0luZm8+IGRyYWdnaW5nSW5mbykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuaAppbmRleCAxZjlkYzA0MGM3YzhjY2M1YzFlMGY1OTM1MzYxMjMzNWVmYWZlMjkyLi5iM2Y4
ZGY5YmU3ZDZjYTI5YmRlMDM0YWM0MjVmZWVkNDdiNzIwMmViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJQYWdlUHJveHlfaAotI2RlZmlu
ZSBXZWJQYWdlUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIK
ICNpbmNsdWRlICJBUElTZXNzaW9uLmgiCkBAIC02NjYsNyArNjY1LDcgQEAgcHVibGljOgogICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJbnRyaW5zaWNE
ZXZpY2VTY2FsZUZhY3RvcihmbG9hdCk7CiAgICAgdm9pZCBzZXRDdXN0b21EZXZpY2VTY2FsZUZh
Y3RvcihmbG9hdCk7Ci0gICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoUGxhdGZvcm1EaXNw
bGF5SUQpOworICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFdlYkNvcmU6OlBsYXRmb3Jt
RGlzcGxheUlEKTsKIAogICAgIHZvaWQgc2V0VXNlRml4ZWRMYXlvdXQoYm9vbCk7CiAgICAgdm9p
ZCBzZXRGaXhlZExheW91dFNpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpOwpAQCAtMTgzMSw1
ICsxODMwLDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gV2ViUGFnZVByb3h5X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCmluZGV4IGRhNjZjM2E1NzIw
YTc1OWI1NDE5NmJjNTg5YjkzOGE0MTU3ZjlmODguLmIzYTA4MTk0NDEyNDNhYmNlYjlkNGI1MzNh
YmNjYzFkMDlmMjk1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaApAQCAtMjQsOCArMjQsNyBAQAog
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViQ2hy
b21lQ2xpZW50X2gKLSNkZWZpbmUgV2ViQ2hyb21lQ2xpZW50X2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiV2ViRnJhbWUuaCIKICNpbmNsdWRlIDxXZWJDb3JlL0Nocm9tZUNsaWVudC5oPgpA
QCAtMjEwLDcgKzIwOSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBhZGp1c3RMYXllckZsdXNoVGhy
b3R0bGluZyhXZWJDb3JlOjpMYXllckZsdXNoVGhyb3R0bGVTdGF0ZTo6RmxhZ3MpIG92ZXJyaWRl
OwogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAg
ICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYK
IAogICAgIENvbXBvc2l0aW5nVHJpZ2dlckZsYWdzIGFsbG93ZWRDb21wb3NpdGluZ1RyaWdnZXJz
KCkgY29uc3Qgb3ZlcnJpZGUKQEAgLTM0Niw1ICszNDUsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJDaHJvbWVDbGllbnRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVy
VHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oCmluZGV4
IDhjNWE1Yzk1ZGU2MjdlMGU3MjgzNWJjNGQxMjg3Mjk3ZmMxMDYwNTAuLjMyYjdmNWFhMTdhMzA2
MzhjMmJkMGIwODE0OGNjZmQwN2Q4NjhkYjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0
b3IuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvUmVtb3Rl
TGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hN
b25pdG9yX2gKLSNkZWZpbmUgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yX2gK
KyNwcmFnbWEgb25jZQogCiAjaWYgVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKIApAQCAtMzUsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3Mg
UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yIDogcHVibGljIFdlYkNvcmU6OkRp
c3BsYXlSZWZyZXNoTW9uaXRvciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxSZW1vdGVMYXll
clRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZShQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJiBkcmF3aW5nQXJlYSkKKyAgICBzdGF0
aWMgUmVmPFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlKFdlYkNv
cmU6OlBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCwgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEmIGRyYXdpbmdBcmVhKQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVt
b3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKGRpc3BsYXlJRCwgZHJhd2luZ0FyZWEp
KTsKICAgICB9CkBAIC00Nyw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRpZFVwZGF0ZUxh
eWVycygpOwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZURpc3BsYXlS
ZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCwgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWEmKTsKKyAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3Io
V2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhJik7
CiAKICAgICBXZWFrUHRyPFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhPiBtX2RyYXdpbmdBcmVh
OwogfTsKQEAgLTU1LDUgKzU0LDMgQEAgcHJpdmF0ZToKIH0KIAogI2VuZGlmIC8vIFVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0KLSNlbmRpZiAvLyBSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3JfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCA5ZDgzZTA2NDY3NDZiMmEyOGY3ZDBh
NzdiZjkxNWM0YTFkZGMzZGZjLi5iNDMyYmJkNjgwNDRlYzZkNGZhZDI5NjFmZTFkYjE0M2VkNTJk
ODE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgogICovCiAKLSNpZm5kZWYgRHJhd2luZ0FyZWFfaAotI2RlZmluZSBEcmF3aW5nQXJlYV9oCisj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhSW5mby5oIgogI2luY2x1ZGUgIkxh
eWVyVHJlZUNvbnRleHQuaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9UeXBlQ2Fz
dHMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogY2xhc3Mg
Q29ubmVjdGlvbjsKQEAgLTExMSw3ICsxMTEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IHNjaGVkdWxlQ29tcG9zaXRpbmdMYXllckZsdXNoSW1tZWRpYXRlbHkoKSA9IDA7CiAKICNpZiBV
U0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIHZpcnR1YWwg
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKTsKKyAgICB2aXJ0dWFsIFJlZlB0cjxXZWJDb3Jl
OjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJD
b3JlOjpQbGF0Zm9ybURpc3BsYXlJRCk7CiAjZW5kaWYKIAogI2lmIFVTRShDT09SRElOQVRFRF9H
UkFQSElDU19NVUxUSVBST0NFU1MpCkBAIC0xODIsNSArMTgyLDMgQEAgcHJpdmF0ZToKIFNQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViS2l0OjpUb1ZhbHVlVHlwZU5hbWUpIFwKICAgICBz
dGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViS2l0OjpEcmF3aW5nQXJlYSYgYXJlYSkgeyByZXR1
cm4gYXJlYS50eXBlKCkgPT0gV2ViS2l0OjpBcmVhVHlwZTsgfSBcCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0VORCgpCi0KLSNlbmRpZiAvLyBEcmF3aW5nQXJlYV9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLmgKaW5kZXggZGUzY2MyODc0OWM1NjYwYzM5NDk2MzliODliMDBlZjA1
ZGU4ZTU4Mi4uYjViNmU1YmViYTk5ZTU1YTY5MTg3NWU0NmZmNDI5ZWJiNjQwM2I0ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFfaAotI2RlZmluZSBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYV9oCisj
cHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkRyYXdpbmdBcmVhLmgiCiAjaW5jbHVkZSAiR3JhcGhp
Y3NMYXllckNBUmVtb3RlLmgiCkBAIC03NCw3ICs3Myw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRCh1aW50NjRfdCBjYWxsYmFja0lEKSBvdmVycmlkZTsK
IAotICAgIFJlZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3Bs
YXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgb3ZlcnJpZGU7CisgICAgUmVmUHRy
PFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25p
dG9yKFdlYkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlkZTsKICAgICB2b2lkIHdpbGxE
ZXN0cm95RGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRv
ciopOwogCiAgICAgYm9vbCBzaG91bGRVc2VUaWxlZEJhY2tpbmdGb3JGcmFtZVZpZXcoY29uc3Qg
V2ViQ29yZTo6RnJhbWVWaWV3Kikgb3ZlcnJpZGU7CkBAIC0xNzksNSArMTc4LDMgQEAgcHJpdmF0
ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0RSQVdJ
TkdfQVJFQShSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSwgRHJhd2luZ0FyZWFUeXBlUmVtb3Rl
TGF5ZXJUcmVlKQotCi0jZW5kaWYgLy8gUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279863</attachid>
            <date>2016-05-25 21:11:11 -0700</date>
            <delta_ts>2016-05-26 09:07:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158067-20160525211219.patch</filename>
            <type>text/plain</type>
            <size>209184</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTExN2E4YTQzN2NjYjE1
NzNiN2I2YTQwOGRjOGU3ZWFhZmM4Y2RhNC4uNGZkYTA2M2E1OGFmMGRmNDM2ZmM2ZDA0YTE3Mjg3
Y2U3YTI4YTM4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMSBAQAorMjAxNi0wNS0yNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWEgcXVlcmllcyBhbmQg
cGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVhbWxpbmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NSFRNTExpbmtFbGVtZW50IF9tZWRpYVF1ZXJ5TWF0Y2hlc10p
OiBVc2UgcmVmZXJlbmNlcywgdXNlIGZhc3RHZXRBdHRyaWJ1dGUsCisgICAgICAgIHBhc3MgYSBk
b2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUgdG8gdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRvciBh
bmQgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55LmluOiBVc2UgImV4cHJlc3Npb24iIGluc3RlYWQgb2YgImV4cCIg
Zm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb25zLgorICAgICAgICBVcGRhdGUgdmVjdG9ycyBhbmQg
YXJndW1lbnRzIHRvIG1vdmUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiB1c2lu
ZyB1bmlxdWVfcHRyLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDogVXNlIHByYWdt
YSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBN
YWRlIG1vcmUgb3ZlcnJpZGVzIHByaXZhdGUgYW5kIG1hcmtlZCB0aGVtIGZpbmFsLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OlNv
dXJjZVNpemU6OlNvdXJjZVNpemUpOiBBZGRlZCBtaXNzaW5nIFdURk1vdmUgdG8gYXZvaWQgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50IGNodXJuLiBDaGFuZ2VkIHR5cGUgb2YgZXhwcmVzc2lvbiB0
byBubyBsb25nZXIgdXNlIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNvdXJjZVNpemUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDogQ2hhbmdl
ZCBTb3VyY2VTaXplOjpleHByZXNzaW9uIHRvIG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAg
ICAgICAgQWxzbyBjaGFuZ2VkIFNvdXJjZVNpemU6Omxlbmd0aCB0byBiZSBSZWYgaW5zdGVhZCBv
ZiBSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUZlYXR1cmVOYW1lczo6aW5pdCk6IFN0cmVhbWxpbmVkIGEgYml0LiBSZW1vdmVkICJNZWRpYUZl
YXR1cmUiIHN1ZmZpeCBmcm9tCisgICAgICAgIG5hbWVzIG9mIG1lZGlhIGZlYXR1cmUgc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5oOiBVc2UgcHJhZ21hIG9uY2Uu
IENoYW5nZWQgbWVkaWEgZmVhdHVyZSBuYW1lIGdsb2JhbHMKKyAgICAgICAgdG8gdXNlIG5vcm1h
bCBXZWJLaXQgbmFtaW5nIHN0eWxlIGluc3RlYWQgb2YgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVy
c2NvcmVzLgorICAgICAgICBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkuIFJlbW92ZWQgIk1lZGlhRmVh
dHVyZSIgc3VmZml4IGZyb20gbmFtZXMgb2YgbWVkaWEgZmVhdHVyZSBzdHJpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjpNZWRpYVF1ZXJ5U2V0KTogU2ltcGxpZmllZCBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHRoZSBx
dWVyaWVzCisgICAgICAgIHZlY3RvciBjYW4gbm93IGJlIGNvcGllZCBub3JtYWxseS4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTWVkaWFEZXNjcmlwdG9yKTogTm9ybWFsaXplZCB0eXBlcyBhbmQg
Y2hhbmdlZCB0byB1c2UgaXNBU0NJSUFscGhhbnVtZXJpYy4KKyAgICAgICAgVGhlIG9sZCBjb2Rl
IHdhcyBub3QgaGFuZGxpbmcgJzAnIHRoZSB3YXkgdGhlIGNvbW1lbnQgc2FpZCBpdCBkaWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKTogQWRkZWQuIEhl
bHBlciBmdW5jdGlvbiB0byBjdXQgZG93biBvbiByZWR1bmRhbnQKKyAgICAgICAgY29kZSBpbiBm
dW5jdGlvbnMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6
IFVzZSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMgaW5zdGVhZCBvZgorICAgICAg
ICBzdHJpcFdoaXRlU3BhY2UuIFN0cmVhbWxpbmVkIGxvZ2ljIHVzaW5nIGhlbHBlciBmdW5jdGlv
bi4gVXBkYXRlZCB0byB1c2UgYSB2ZWN0b3Igb2YKKyAgICAgICAgcXVlcmllcyBpbnN0ZWFkIG9m
IGEgdmVjdG9yIG9mIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjphZGQpOiBVc2UgaW50ZXJuYWxQYXJzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6YWRk
TWVkaWFRdWVyeSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBub3QgYmUgdW5pcXVlX3B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCk6IFVzZSBtb2Rlcm4g
Zm9yIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6Ok1lZGlhTGlzdCk6IEluaXRp
YWxpemUgcG9pbnRlcnMgdG8gbnVsbCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgICAgICBy
YXRoZXIgdGhhbiBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dCk6IFJlbW92ZWQgdW5oZWxwZnVsIGxvY2FsIHZhcmlhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjppdGVtKTogVXBkYXRlZCBzaW5jZSBxdWVyaWVz
IG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZXMgdG8gcmVm
ZXJlbmNlcworICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdpdGggYXNzZXJ0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQpOiBVcGRhdGVk
IHRvIG1vZGVybml6ZS4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogVXNlIHByYWdtYSBv
bmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgQ2hhbmdlZCB2ZWN0b3IgdG8gY29udGFpbiBtZWRpYSBxdWVyaWVzIGluc3RlYWQg
b2YgdW5pcXVlX3B0ci4gVXNlIG51bGxwdHIgaW5zdGVhZCBvZiAwLgorICAgICAgICBJbml0aWFs
aXplIHBvaW50ZXJzIHRvIG51bGwgaGVyZS4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogRGVsZXRlZCBub3ctdW5uZWVkZWQgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4g
Qm90aCBhcmUKKyAgICAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCB3aXRob3V0IHVzIHdyaXRpbmcg
dGhlbSBleHBsaWNpdGx5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6c2VyaWFsaXpl
KTogUmV3cm90ZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
TWVkaWFRdWVyeSk6IFVwZGF0ZXMgc2luY2UgZXhwcmVzc2lvbnMgYXJlIG5vIGxvbmdlciB1bmlx
dWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IENoYW5nZWQg
cmV0dXJuIHR5cGUgdG8gcmVmZXJlbmNlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDog
VXNlIHByYWdtYSBvbmNlLiBBZGRlZCBpbmNsdWRlIHNpbmNlIHRoaXMgbm93IGluY2x1ZGVzIG1l
ZGlhIHF1ZXJ5CisgICAgICAgIGV4cHJlc3Npb25zLCBub3QganVzdCB1bmlxdWVfcHRyLiBEZWxl
dGVkIHRoZSB1bm5lZWRlZCBjb3B5IGZ1bmN0aW9uLgorCisgICAgICAgICogY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydERlcGVuZGVudCk6
IE1vdmVkIHRoaXMgaGVyZS4gSXQgdXNlZCB0byBiZSBhIG1lbWJlciBmdW5jdGlvbiBvZgorICAg
ICAgICBNZWRpYVF1ZXJ5RXhwLCBidXQgdGhpcyBmaWxlIGhhcyBhIGxvdCBtb3JlIGZ1bmN0aW9u
cyBhYm91dCBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaG93CisgICAgICAgIHRoZXkgYXJlIGV2YWx1
YXRlZCwgc28gaXQgcmVhbGx5IGJlbG9uZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOiBDaGFuZ2VkIGNvbnN0cnVjdG9y
IHRvIHRha2UgYQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUuIEluaXRpYWxp
emUgdGhlIGZhbGxiYWNrIHJlc3VsdCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogQ2hhbmdlZCB0aGUgYXJn
dW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVWYWx1
ZSk6IE1hZGUgYm90aCBvZiB0aGUgYXJndW1lbnRzIHNlcGFyYXRlIHRlbXBsYXRlIHR5cGVzLiBU
aGlzCisgICAgICAgIGhlbHBzIHVzIGNvbXBhcmUgYW4gaW50ZWdlciB0byBhIGRvdWJsZSB3aXRo
b3V0IGxvdHMgb2YgdHlwZSBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVBc3BlY3RS
YXRpb1ZhbHVlKTogQ2hhbmdlZCB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBnb3Qgcmlk
IG9mCisgICAgICAgIHRoZSBjYXN0cyB0byBpbnQgc28gd2Ugd2lsbCBkbyB0aGUgd29yayBpbiBk
b3VibGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVZhbHVlKTogUmVwbGFjZWQg
dGhlIG9sZCBudW1iZXJWYWx1ZSBmdW5jdGlvbiB3aXRoIHRoaXMuIFNpbmNlIHZhbHVlcworICAg
ICAgICBhcmUgc3RvcmVkIGFzIGRvdWJsZXMsIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGRvdWJs
ZSByYXRoZXIgdGhhbiBmbG9hdC4KKyAgICAgICAgKFdlYkNvcmU6Onplcm9FdmFsdWF0ZSk6IEFk
ZGVkLiBIZWxwZnVsIGZvciB0aGUgbWFueSBmdW5jdGlvbnMgdGhhdCBqdXN0IG5lZWQgdG8KKyAg
ICAgICAgZXZhbHVhdGUgYXMgMC4KKyAgICAgICAgKFdlYkNvcmU6Om9uZUV2YWx1YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2xvckV2YWx1YXRlKTogUmVuYW1lZCB0aGlzIGFuZCBh
bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8g
dXNlIHRoZSBuZXcgZG91YmxlVmFsdWUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckluZGV4RXZhbHVhdGUpOiBVc2UgemVyb0V2YWx1YXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JHYW11dEV2YWx1YXRlKTogTm8gbG9uZ2VyIHVzZSBwYWdlIGp1c3QgdG8gZ2V0IGZyb20gdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBtYWluIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6bW9u
b2Nocm9tZUV2YWx1YXRlKTogU2ltcGxpZnkgbG9naWMgdXNpbmcgemVyb0V2YWx1YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZSk6IFVzZSBhdXRvIGZvciB0aGUg
a2V5d29yZDsgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkV2
YWx1YXRlKTogVXNlIGVhcmx5IHJldHVybiBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmFzcGVj
dFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUFzcGVjdFJh
dGlvRXZhbHVhdGUpOiBTaW1wbGlmaWVkIGxvZ2ljIGFuZCByZW1vdmVkIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpldmFsdWF0ZVJlc29sdXRpb24pOiBBZGRlZCBhIGNvdXBsZSBudWxs
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IFJl
bmFtZWQuIEFkZGVkIG1pc3NpbmcgdHlwZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z3JpZEV2YWx1YXRlKTog
VXNlIHplcm9FdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBBZGRl
ZCBhIG51bGwgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VIZWlnaHRFdmFsdWF0ZSk6
IFVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VXaWR0aEV2YWx1YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6d2lkdGhFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
bWluQ29sb3JFdmFsdWF0ZSk6IFVwZGF0ZWQgbmFtZSBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6
bWF4Q29sb3JFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWluQ29sb3JJbmRl
eEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhDb2xvckluZGV4RXZhbHVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk1vbm9jaHJvbWVFdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4TW9ub2Nocm9tZUV2YWx1YXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjptaW5Bc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjptYXhBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptYXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6bWluSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1heEhlaWdo
dEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW5XaWR0aEV2YWx1YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhXaWR0aEV2YWx1YXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjptaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6bWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1pbkRldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1h
eERldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pblJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4UmVzb2x1dGlvbkV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25FdmFsdWF0ZSk6IFVz
ZSBvbmVFdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25FdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtMmRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtM2RFdmFsdWF0ZSk6IFNpbXBsaWZ5IHVzaW5nIHplcm9F
dmFsdWF0ZSBhbmQgb25lRXZhbHVhdGUuCisgICAgICAgIChXZWJDb3JlOjp2aWV3TW9kZUV2YWx1
YXRlKTogU2ltcGxpZmllZCBsb2dpYyB3aXRoIGZld2VyIGxvY2FsIHZhcmlhYmxlcyBhbmQgdGhl
IG5hbWUgImtleXdvcmQiLgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9QbGF5YWJsZUlubGluZUV2
YWx1YXRlKTogVXNlIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhvdmVyRXZhbHVhdGUp
OiBTaW1wbGlmeSB1c2luZyBrZXl3b3JkLgorICAgICAgICAoV2ViQ29yZTo6YW55SG92ZXJFdmFs
dWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckV2YWx1
YXRlKTogU2ltcGxpZnkgdXNpbmcga2V5d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OmFueVBvaW50
ZXJFdmFsdWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTog
QWRkZWQuIEhlbHBlciBmb3IgYnVpbGRpbmcgdXAgdGhlIG1lZGlhIHF1ZXJ5IGZ1bmN0aW9uIG1h
cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogTW92
ZWQgY29kZSB0byBidWlsZCB0aGUgZnVuY3Rpb24gbWFwIGluIGhlcmUgaW4KKyAgICAgICAgYSBs
YW1iZGEsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBhIHNlcGFyYXRlIGdsb2JhbCBmdW5jdGlv
bi4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bmVlZGVkIGluY2x1ZGVzLiBTaW1wbGlmaWVkIGNvbW1lbnRzIGFuZAorICAg
ICAgICBtb2Rlcm5pemVkIHRoZWlyIHN0eWxlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlF
eHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcik6
IFJlbmFtZWQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgdGhpcyBkb2VzLiBVcGRhdGVkCisgICAg
ICAgIHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSB0ZSBuZXcgZmVhdHVyZSBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
SW50ZWdlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoTm9u
TmVnYXRpdmVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlk
V2l0aFplcm9Pck9uZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBc3BlY3RSYXRpb0Zl
YXR1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aG91dFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJX
aXRoVW5pdCk6IEFkZGVkLiBIZWxwZXIgdGhhdCBjYWxscyBtdWx0aXBsZSBmdW5jdGlvbnMgYWJv
dmUuCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzU2xhc2gpOiBBZGRlZC4gSGVscGVyIHRvIG1ha2UgYXNwZWN0
IHJhdGlvIGNvZGUgYmVsb3cgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
c2l0aXZlSW50ZWdlclZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOiBSZWFycmFuZ2VkIGNvZGUgdG8gYmUg
bXVjaCBsZXNzIHdvcmR5IGFuZAorICAgICAgICB0byBub3QgdXNlIGN1cnJlbnQvbmV4dC4KKwor
ICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6IFVzZSBwcmFnbWEgb25jZS4gUmVuYW1lZCBj
bGFzcyB0byBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi4gUmVtb3ZlZAorICAgICAgICB0aGUgaXNWaWV3
cG9ydERlcGVuZGVudCBmdW5jdGlvbiwgbm93IHBhcnQgb2YgTWVkaWFRdWVyeUV2YWx1YXRvci4g
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3Qp
OiBNYXJrZWQgdGhpcyBpbmxpbmUuIFVzZSBhIHJlZmVyZW5jZSBhbmQgYSBSZWYmJgorICAgICAg
ICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dDo6Y3JlYXRlKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcik6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZSBhbmQgdXNl
IHJlbGVhc2VOb25OdWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q6OnJlbW92
ZUxpc3RlbmVyKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUxpc3Q6Om1hdGNoZXMpOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlMaXN0Lmg6IFVzZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCB0eXBlcyB0byB1c2UgcmVm
ZXJlbmNlcywgUmVmUHRyJiYgYW5kIFJlZiYmLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1
ZXJ5TWF0Y2hlcik6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSk6
IFVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRl
KTogVGFrZSBhIHJlZmVyZW5jZS4gVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEp
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVy
eU1hdGNoZXI6OmFkZExpc3RlbmVyKTogVXNlIFJlZiYmIGFuZCByZWZlcmVuY2UgZm9yIGFyZ3Vt
ZW50cy4gU2ltcGxpZnkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVy
OjpyZW1vdmVMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKTogTW92ZWQgdGhlIGxvZ2ljIGZvciBldmFsdWF0
aW5nIGVhY2ggcXVlcnkgaGVyZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmg6IFVz
ZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCBjcmVhdGUgdG8gdGFrZSBhIHJlZmVyZW5jZS4gVGlnaHRl
bmVkIGFyZ3VtZW50CisgICAgICAgIHR5cGVzIGZvciBhZGRMaXN0ZW5lciBhbmQgcmVtb3ZlTGlz
dGVuZXIuIE1hZGUgdGhlIHByaXZhdGUgTGlzdGVuZXIgYSBzaW1wbGUgc3RydWN0IHJhdGhlciB0
aGFuIGEKKyAgICAgICAgY2xhc3MuIEluaXRpYWxpemVkIG1fZXZhbHVhdGlvblJvdW5kLgorCisg
ICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
Q2hpbGRSdWxlcyk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gTWVkaWFRdWVyeUV2YWx1YXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGl0dG8uCisK
KyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0
Y2gpOiBVcGRhdGVkIHRvIHVzZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGluIGEgc2ltcGxlciB3YXku
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGVuZ3RoKTogVXNlIGEgcmVmZXJlbmNlIGFuZCBz
aW1wbGVyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOiBDaGFuZ2VkIGFyZ3VtZW50
cyB0byB0YWtlIGEgRG9jdW1lbnQgaW5zdGVhZCBvZiBib3RoIGEKKyAgICAgICAgUmVuZGVyVmll
dyBhbmQgYSBGcmFtZS4KKworICAgICAgICAqIGNzcy9Tb3VyY2VTaXplTGlzdC5oOiBVc2UgI3By
YWdtYSBvbmNlLiBDaGFuZ2UgcGFyc2VTaXplc0F0dHJpYnV0ZSB0byB0YWtlIGEgRG9jdW1lbnQu
CisKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZU1lZGlhOjptYXRjaE1lZGl1bSk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6IFVzZSBhIE1lZGlhUXVlcnlFdmFs
dWF0b3IgaW5zdGVhZCBvZiBhIHVuaXF1ZV9wdHIKKyAgICAgICAgdG8gb25lLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KTogVXNlIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZgorICAgICAgICBwb250ZXJzLCBhbmQgdXNlIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlS
ZXN1bHQgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKTogVXNlIGEgbW9k
ZXJuIGZvciBsb29wLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogVXNlIGEgTWVk
aWFRdWVyeUV2YWx1YXRvciBpbnN0ZWFkIG9mIGEgdW5pcXVlX3B0ciB0byBvbmUuCisgICAgICAg
IFVzZSBhIHZlY3RvciBvZiBNZWRpYVF1ZXJ5UmVzdWx0IGluc3RlYWQgb2YgYSB2ZWN0b3Igb2Yg
dW5pcXVlX3B0ci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IFJlbW92ZWQgYSBzdHJheSBzcGFjZSAo
dW5yZWxhdGVkIHRvCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXRjaCkuCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gdGhlCisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgY2xhc3MuIEFsc28gdXNl
IGF1dG8gYSBiaXQgbW9yZSBhbmQgZWxpbWluYXRlZCBhIGRvdWJsZSBoYXNoIHRhYmxlCisgICAg
ICAgIGxvb2t1cCBpbiBjb2RlIHRoYXQgdXNlZCBoYXNBdHRyaWJ1dGUgZm9sbG93ZWQgYnkgZmFz
dEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNlbGVj
dEltYWdlU291cmNlKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBwYXJzZVNpemVzQXR0cmlidXRl
LgorCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNv
dXJjZUNoaWxkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgor
CisgICAgICAgICogaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGh0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmg6IFVzZSAjcHJhZ21hIG9uY2UuIENoYW5n
ZWQgdmlld3BvcnQgZGVwZW5kZW50IG1lZGlhIHF1ZXJ5IHJlc3VsdHMKKyAgICAgICAgdmVjdG9y
IHRvIGJlIGEgdmVjdG9yIG9mIHJlc3VsdHMsIG5vdCBvZiB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZXMp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHBhcnNlU2l6ZXNBdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxvYWRTY2FubmVyOjpTdGFydFRhZ1NjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFBdHRyaWJ1dGVNYXRjaGVzKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBQbGF0Zm9ybVNjcmVl
bi5oLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCk6IFNpbXBsaWZpZWQgY29kZSBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3IgY2hh
bmdlcyB0byBQbGF0Zm9ybVNjcmVlbk1hYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVNjcmVlbi5oOiBVc2UgI3ByYWdtYSBvbmNlLiBVc2UgdXNpbmcgaW5zdGFkIG9m
IHR5cGVkZWYuIFB1dCB0aGUgdHlwZWRlZgorICAgICAgICBmb3IgUGxhdGZvcm1EaXNwbGF5SUQg
aW5zaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUgdHlwZWRlZiBmb3IgQ29s
b3JQcm9maWxlLgorICAgICAgICBSZW5hbWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBmaW5kIGEgc2Ny
ZWVuIHRvIGp1c3QgInNjcmVlbiIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQpOiBNb3ZlZCBp
bml0aWFsaXphdGlvbgorICAgICAgICBvZiBib29sZWFucyB0byB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOiBVc2UgcHJhZ21hIG9uY2UuIFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgZGlzcGxheSBJRCBkYXRhIG1lbWJlciB0byBiZSBhbiBP
cHRpb25hbCBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICBwYWlyZWQgd2l0aCBhbm90aGVy
IGRhdGEgbWVtYmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clVwZGF0ZXIuaDogVXNlIHByYWdtYSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YK
KyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oOiBVc2UgcHJhZ21hIG9uY2UuIE1vdmVkIENvbG9yUHJvZmls
ZSBoZXJlIGZyb20KKyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaCwgc2luY2UgaXQncyBub3QgdXNl
ZCB0aGVyZS4gYW5kIGlzIHVzZWQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5oOiBVc2UgcGFybWEgb25jZS4gQ2hhbmdlZCByZXV0cm4gdHlw
ZSBvZiB0aGUKKyAgICAgICAgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gdG8gTlNQb2ludC4gVHdlYWtl
ZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBv
aW50KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBOU1BvaW50IGFuZCBzbyByZW1vdmVkIHRoZSBl
eHBsaWNpdAorICAgICAgICBjb252ZXJzaW9uIHRvIEludFBvaW50LgorICAgICAgICAoV2ViQ29y
ZTo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gTlNQb2ludC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOiBNb3ZlZCBjb252ZXJzaW9uIHRvCisgICAgICAgIEludFBvaW50IGlu
IGhlcmUuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsIGluZGVudGluZyBzdHlsZSBhbmQganVzdCBp
bmRlbnRlZCBub3JtYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1
aWxkZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJRCk6IFJlbmFtZWQgZnJvbSBkaXNwbGF5
SURGcm9tU2NyZWVuIGFuZCBkaXNwbGF5RnJvbVdpZGdldCBzaW5jZSB0aGlzCisgICAgICAgIGlz
IEMrKyBhbmQgd2UgaGF2ZSBvdmVybG9hZGluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFy
Z3VtZW50cy4gQWRkZWQgYSBudWxsIGNoZWNrCisgICAgICAgIG9mIHRoZSBob3cgZGlud28gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0U2NyZWVuKTogQWRkZWQuIEhlbHBlciB1c2Vk
IGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6d2luZG93KTogQWRkZWQuIEhlbHBlciB1c2VkIGJl
bG93LgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKTogUmVuYW1lZCBmcm9tIHNjcmVlbkZvcldp
ZGdldCBhbmQgc2NyZWVuRnJvbVdpbmRvdyBhbmQgcmVtb3ZlZCB0aGUKKyAgICAgICAgdW5uZWVk
ZWQgd2luZG93IGFyZ3VtZW50IGZyb20gdGhlIHdpZGdldCB2ZXJzaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGgpOiBTaW1wbGlmaWVkLCB1c2luZyBuZXcgaGVscGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOiBUd2Vha2VkIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5IYXNJbnZlcnRlZENvbG9ycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6IFNpbXBsaWZpZWQgdXNpbmcgbmV3IGVscGVycy4KKyAgICAgICAgKFdl
YkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcik6IFN0cmVhbWxpbmVkIHVzaW5nIGZld2VyIGxvY2Fs
IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgdXNpbmcgYXV0byBmb3IgdHlwZXMgb2YgdGhlIHJlc3Vs
dHMgb2YgYWRvcHRDRi4KKyAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNwYWNlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6dG9EZXZpY2VTcGFj
ZSk6IERpdHRvLgorCiAyMDE2LTA1LTI1ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+
CiAKICAgICAgICAgVXNlIEhhc2hNYXA6OmFkZCgpIGluc3RlYWQgb2YgSGFzaE1hcDo6c2V0KCkg
aW4gTm9kZTo6ZW5zdXJlRXZlbnRUYXJnZXREYXRhKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAxNDk3
YzA0NjZkZTU5MzRmM2I4NjIxZGUzNzk5NWQ1YjVjMjE2ZGZjLi44MWExMDI2NGQwZWJiZmZkMjZj
OWRmYjY1YTZhOTIzZTg2NGU2MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFu
Z2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTYtMDUtMjUgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1l
ZGlhIHF1ZXJpZXMgYW5kIHBsYXRmb3JtIHNjcmVlbiBtb2Rlcm5pemF0aW9uIGFuZCBzdHJlYW1s
aW5pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
ODA2NworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYWdTb3VyY2VFbmRl
ZEF0Om9wZXJhdGlvbjpdKTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mCisgICAg
ICAgIGdsb2JhbFBvaW50LCB3aGljaCByZXR1cm5zIGFuIE5TUG9pbnQuCisKIDIwMTYtMDUtMjQg
IEJldGggRGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIENhbmRpZGF0ZXMgc2hv
dWxkIHdvcmsgd2l0aCBpbnB1dCBtZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjAwNWRkODM5MzkzNzU4
N2Q5MGRlZjZlNTExM2JlYWQ4MGIzMDM3My4uMjliZjI4MGQ4NDBiNTU0NmI1MGI5MmZmMTk2Zjg4
ZmRhODVkNmQ2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE2LTA1LTI1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYSBxdWVyaWVzIGFuZCBw
bGF0Zm9ybSBzY3JlZW4gbW9kZXJuaXphdGlvbiBhbmQgc3RyZWFtbGluaW5nCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwNjcKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZl
bnRGYWN0b3J5Lm1tOgorICAgICAgICAoV2ViS2l0OjpzY3JlZW5Gb3JXaW5kb3cpOiBEZWxldGVk
LgorICAgICAgICAoV2ViS2l0OjpmbGlwU2NyZWVuUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViS2l0OjpnbG9iYWxQb2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Omdsb2JhbFBv
aW50Rm9yRXZlbnQpOiBVc2UgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gZnJvbSBXZWJDb3JlIHNvIHdl
IGRvbid0IG5lZWQKKyAgICAgICAgY29waWVzIG9mIGV2ZXJ5dGhpbmcgaW4gaGVyZS4KKworICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6
V2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVlbik6IFJlbW92ZWQgdW5uZWVkZWQgdHlw
ZSBjYXN0LgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ2dlZEltYWdlKTogQWRk
ZWQgdHlwZSBjYXN0IHNpbmNlIGdsb2JhbFBvaW50IG5vdyByZXR1cm5zIGFuCisgICAgICAgIE5T
UG9pbnQgcmF0aGVyIHRoYW4gYW4gSW50UG9pbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2Vi
UGFnZVByb3h5Lmg6IFVzZSBwcmFnbWEgb25jZS4gQWRkIGEgV2ViQ29yZSBwcmVmaXggdG8gYSB1
c2Ugb2YKKyAgICAgICAgUGxhdGZvcm1EaXNwbGF5SUQsIHNpbmNlIHRoYXQgaXMgbm93IGluc2lk
ZSB0aGUgV2ViQ29yZSBuYW1lc3BhY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oOiBEaXR0by4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDogRGl0dG8uCisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5o
OiBEaXR0by4KKwogMjAxNi0wNS0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBGbGFzaGluZXNzIGFuZCBqdW1waW5lc3Mgd2hlbiBlbnRlcmluZyBmdWxsc2Ny
ZWVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDUwODY5YzIzMTIzNjFjMjdm
ZDE2NGNkZDQwNDhhZDQ4NDMxMjA5NjYuLmY0NzQ1ZTE5MTRjNTUzMjRkOGZiMGM1ODQ0NTE1ODkw
NTBkNDYzYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC03NjIsNyArNzYy
LDkgQEAgLSAoQk9PTClpc0ZvY3VzZWQKIEBlbmQKIAogI2lmIFBMQVRGT1JNKElPUykKKwogQGlt
cGxlbWVudGF0aW9uIERPTUhUTUxMaW5rRWxlbWVudCAoV2ViUHJpdmF0ZSkKKwogLSAoQk9PTClf
bWVkaWFRdWVyeU1hdGNoZXNGb3JPcmllbnRhdGlvbjooaW50KW9yaWVudGF0aW9uCiB7CiAgICAg
RG9jdW1lbnQmIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oY29yZShz
ZWxmKSktPmRvY3VtZW50KCk7CkBAIC03OTAsMTggKzc5MiwxOSBAQCAtIChCT09MKV9tZWRpYVF1
ZXJ5TWF0Y2hlc0Zvck9yaWVudGF0aW9uOihpbnQpb3JpZW50YXRpb24KIAogLSAoQk9PTClfbWVk
aWFRdWVyeU1hdGNoZXMKIHsKLSAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmsgPSBzdGF0aWNfY2Fz
dDxIVE1MTGlua0VsZW1lbnQqPihjb3JlKHNlbGYpKTsKLSAgICBTdHJpbmcgbWVkaWEgPSBsaW5r
LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjptZWRpYUF0dHIpOworICAgIEhUTUxMaW5rRWxlbWVu
dCYgbGluayA9ICpzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihjb3JlKHNlbGYpKTsKKwor
ICAgIGF1dG8mIG1lZGlhID0gbGluay5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWVkaWFB
dHRyKTsKICAgICBpZiAobWVkaWEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBsaW5rLT5kb2N1bWVudCgpOwogCi0gICAgUmVmUHRyPE1l
ZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcnlTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2lu
Z0Rlc2NyaXB0aW9uU3ludGF4KG1lZGlhKTsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVl
bkV2YWwoInNjcmVlbiIsIGRvY3VtZW50LmZyYW1lKCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSA/
ICZkb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0eWxlKCkgOiAwKTsKLQotICAgIHJldHVybiBzY3Jl
ZW5FdmFsLmV2YWwobWVkaWFRdWVyeVNldC5nZXQoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gbGluay5kb2N1bWVudCgpOworICAgIGF1dG8gbWVkaWFRdWVyeVNldCA9IE1lZGlhUXVlcnlT
ZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgobWVkaWEpOworICAgIHJldHVybiBN
ZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIsIGRvY3VtZW50LCBkb2N1bWVudC5yZW5kZXJW
aWV3KCkgPyAmZG9jdW1lbnQucmVuZGVyVmlldygpLT5zdHlsZSgpIDogbnVsbHB0ciB9LmV2YWx1
YXRlKG1lZGlhUXVlcnlTZXQuZ2V0KCkpOwogfQorCiBAZW5kCisKICNlbmRpZgogCiAvLy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueS5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4K
aW5kZXggZjViMGQxNzUzMTg0ZDg4Y2E3MWNmNzEzMTIxNTc3YzFkMzBhN2U5Yy4uNGI3ZjE4M2U4
N2M2ZmIwYjZiNTNkNmE3YzQwZTExMzQyNDkzMjFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYW1tYXIueS5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1h
ci55LmluCkBAIC0zNyw5ICszNyw5IEBACiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0Owog
ICAgIE1lZGlhUXVlcnkqIG1lZGlhUXVlcnk7CiAgICAgTWVkaWFRdWVyeTo6UmVzdHJpY3RvciBt
ZWRpYVF1ZXJ5UmVzdHJpY3RvcjsKLSAgICBNZWRpYVF1ZXJ5RXhwKiBtZWRpYVF1ZXJ5RXhwOwor
ICAgIE1lZGlhUXVlcnlFeHByZXNzaW9uKiBtZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKICAgICBWZWN0
b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiogc291cmNlU2l6ZUxpc3Q7Ci0gICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4qIG1lZGlhUXVlcnlFeHBMaXN0OworICAgIFZl
Y3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4qIG1lZGlhUXVlcnlFeHByZXNzaW9uTGlzdDsKICAg
ICBTdHlsZUtleWZyYW1lKiBrZXlmcmFtZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJh
bWU+Pioga2V5ZnJhbWVSdWxlTGlzdDsKICAgICBDU1NQcm9wZXJ0eUlEIGlkOwpAQCAtMjcxLDIw
ICsyNzEsMjAgQEAgc3RhdGljIGJvb2wgc2VsZWN0b3JMaXN0RG9lc05vdE1hdGNoQW55UHNldWRv
RWxlbWVudChjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHQKIAogJXR5cGUgPG1lZGlhUXVlcnlS
ZXN0cmljdG9yPiBtYXliZV9tZWRpYV9yZXN0cmljdG9yCiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhw
PiBtZWRpYV9xdWVyeV9leHAgYmFzZV9tZWRpYV9xdWVyeV9leHAKLSVkZXN0cnVjdG9yIHsgZGVs
ZXRlICQkOyB9IG1lZGlhX3F1ZXJ5X2V4cCBiYXNlX21lZGlhX3F1ZXJ5X2V4cAorJXR5cGUgPG1l
ZGlhUXVlcnlFeHByZXNzaW9uPiBtZWRpYV9xdWVyeV9leHByZXNzaW9uIGJhc2VfbWVkaWFfcXVl
cnlfZXhwcmVzc2lvbgorJWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gbWVkaWFfcXVlcnlfZXhw
cmVzc2lvbiBiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24KIAogJXR5cGUgPHNvdXJjZVNpemVM
aXN0PiBzb3VyY2Vfc2l6ZV9saXN0CiAlZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBzb3VyY2Vf
c2l6ZV9saXN0CiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwPiBtYXliZV9zb3VyY2VfbWVkaWFfcXVl
cnlfZXhwCi0lZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2VfbWVkaWFfcXVl
cnlfZXhwCisldHlwZSA8bWVkaWFRdWVyeUV4cHJlc3Npb24+IG1heWJlX3NvdXJjZV9tZWRpYV9x
dWVyeV9leHByZXNzaW9uCislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2Vf
bWVkaWFfcXVlcnlfZXhwcmVzc2lvbgogCiAldHlwZSA8dmFsdWU+IHNvdXJjZV9zaXplX2xlbmd0
aAogJWRlc3RydWN0b3IgeyBkZXN0cm95KCQkKTsgfSBzb3VyY2Vfc2l6ZV9sZW5ndGgKIAotJXR5
cGUgPG1lZGlhUXVlcnlFeHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVk
aWFfcXVlcnlfZXhwX2xpc3QKLSVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlhX3F1ZXJ5
X2V4cF9saXN0IG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdAorJXR5cGUgPG1lZGlhUXVl
cnlFeHByZXNzaW9uTGlzdD4gbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0IG1heWJlX2FuZF9t
ZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1l
ZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwcmVzc2lv
bl9saXN0CiAKICV0eXBlIDxzdHJpbmc+IGtleWZyYW1lX25hbWUKIApAQCAtNTc2LDU5ICs1NzYs
NjMgQEAgd2Via2l0X3NvdXJjZV9zaXplX2xpc3Q6CiAgICAgOwogCiBzb3VyY2Vfc2l6ZV9saXN0
OgotICAgIG1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHAgc291cmNlX3NpemVfbGVuZ3RoIHsK
KyAgICBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbiBzb3VyY2Vfc2l6ZV9sZW5n
dGggewogICAgICAgICAkJCA9IG5ldyBWZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPjsKLSAg
ICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnlFeHA+KCQxKSwgJDIpKTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNp
emUoV1RGTW92ZSgqJDEpLCAkMikpOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQotICAgIHwg
c291cmNlX3NpemVfbGlzdCBtYXliZV9zcGFjZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNl
X21lZGlhX3F1ZXJ5X2V4cCBzb3VyY2Vfc2l6ZV9sZW5ndGggeworICAgIHwgc291cmNlX3NpemVf
bGlzdCBtYXliZV9zcGFjZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5
X2V4cHJlc3Npb24gc291cmNlX3NpemVfbGVuZ3RoIHsKICAgICAgICAgJCQgPSAkMTsKLSAgICAg
ICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnlFeHA+KCQ1KSwgJDYpKTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUo
V1RGTW92ZSgqJDUpLCAkNikpOworICAgICAgICBkZWxldGUgJDU7CiAgICAgfQogICAgIDsKIAot
bWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cDoKK21heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9l
eHByZXNzaW9uOgogICAgIC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVy
eUV4cDsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cHJlc3Npb247CiAgICAgfQotICAg
IHwgYmFzZV9tZWRpYV9xdWVyeV9leHAgbWF5YmVfc3BhY2U7CisgICAgfCBiYXNlX21lZGlhX3F1
ZXJ5X2V4cHJlc3Npb24gbWF5YmVfc3BhY2U7CiAKIHNvdXJjZV9zaXplX2xlbmd0aDogdW5hcnlf
dGVybSB8IGNhbGNfZnVuY3Rpb247CiAKLWJhc2VfbWVkaWFfcXVlcnlfZXhwOiAnKCcgbWF5YmVf
c3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfbWVkaWFfdmFsdWUgJyknIHsKK2Jhc2VfbWVk
aWFfcXVlcnlfZXhwcmVzc2lvbjogJygnIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1h
eWJlX21lZGlhX3ZhbHVlICcpJyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJW
YWx1ZUxpc3Q+IG1lZGlhVmFsdWUoJDUpOwogICAgICAgICAkMy5jb252ZXJ0VG9BU0NJSUxvd2Vy
Y2FzZUluUGxhY2UoKTsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cCgkMywgbWVkaWFW
YWx1ZS5nZXQoKSk7CisgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHByZXNzaW9uKCQzLCBt
ZWRpYVZhbHVlLmdldCgpKTsKICAgICB9CiAgICAgOwogCi1tZWRpYV9xdWVyeV9leHA6Ci0gICAg
bWF5YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSBiYXNlX21lZGlhX3F1ZXJ5X2V4cCBt
YXliZV9zcGFjZSB7CittZWRpYV9xdWVyeV9leHByZXNzaW9uOgorICAgIG1heWJlX21lZGlhX3Jl
c3RyaWN0b3IgbWF5YmVfc3BhY2UgYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIG1heWJlX3Nw
YWNlIHsKICAgICAgICAgaWYgKCQxICE9IE1lZGlhUXVlcnk6Ok5vbmUpIHsKICAgICAgICAgICAg
IC8vIElmIHJlc3RyaWN0b3IgaXMgc3BlY2lmaWVkLCBtZWRpYSBxdWVyeSBleHByZXNzaW9uIGlz
IGludmFsaWQuCiAgICAgICAgICAgICAvLyBDcmVhdGUgZW1wdHkgbWVkaWEgcXVlcnkgZXhwcmVz
c2lvbiBhbmQgY29udGludWUgcGFyc2luZyBtZWRpYSBxdWVyeS4KICAgICAgICAgICAgIGRlbGV0
ZSAkMzsKLSAgICAgICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHA7CisgICAgICAgICAgICAk
JCA9IG5ldyBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAkJCA9ICQzOwogICAgIH0KICAgICA7CiAKLW1lZGlhX3F1ZXJ5X2V4cF9saXN0OgotICAgIG1l
ZGlhX3F1ZXJ5X2V4cCB7Ci0gICAgICAgICQkID0gbmV3IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFRdWVyeUV4cD4+OwotICAgICAgICAkJC0+YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPigkMSkpOworbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0OgorICAgIG1lZGlh
X3F1ZXJ5X2V4cHJlc3Npb24geworICAgICAgICAkJCA9IG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4
cHJlc3Npb24+OworICAgICAgICAkJC0+YXBwZW5kKFdURk1vdmUoKiQxKSk7CisgICAgICAgIGRl
bGV0ZSAkMTsKICAgICB9Ci0gICAgfCBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9zcGFjZSBN
RURJQV9BTkQgbWF5YmVfc3BhY2UgbWVkaWFfcXVlcnlfZXhwIHsKKyAgICB8IG1lZGlhX3F1ZXJ5
X2V4cHJlc3Npb25fbGlzdCBtYXliZV9zcGFjZSBNRURJQV9BTkQgbWF5YmVfc3BhY2UgbWVkaWFf
cXVlcnlfZXhwcmVzc2lvbiB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQo
c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+KCQ1KSk7CisgICAgICAgICQkLT5hcHBlbmQo
V1RGTW92ZSgqJDUpKTsKKyAgICAgICAgZGVsZXRlICQ1OwogICAgIH0KICAgICA7CiAKLW1heWJl
X2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdDoKK21heWJlX2FuZF9tZWRpYV9xdWVyeV9leHByZXNz
aW9uX2xpc3Q6CiAgICAgLyplbXB0eSovIHsKLSAgICAgICAgJCQgPSBuZXcgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj47CisgICAgICAgICQkID0gbmV3IFZlY3RvcjxNZWRp
YVF1ZXJ5RXhwcmVzc2lvbj47CiAgICAgfQotICAgIHwgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1l
ZGlhX3F1ZXJ5X2V4cF9saXN0IHsKKyAgICB8IE1FRElBX0FORCBtYXliZV9zcGFjZSBtZWRpYV9x
dWVyeV9leHByZXNzaW9uX2xpc3QgewogICAgICAgICAkJCA9ICQzOwogICAgIH0KICAgICA7CkBA
IC02NDYsMTMgKzY1MCwxNSBAQCBtYXliZV9tZWRpYV9yZXN0cmljdG9yOgogICAgIDsKIAogbWVk
aWFfcXVlcnk6Ci0gICAgbWVkaWFfcXVlcnlfZXhwX2xpc3QgewotICAgICAgICAkJCA9IG5ldyBN
ZWRpYVF1ZXJ5KE1lZGlhUXVlcnk6Ok5vbmUsICJhbGwiLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4+KCQxKSk7CisgICAgbWVkaWFfcXVlcnlf
ZXhwcmVzc2lvbl9saXN0IHsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5
OjpOb25lLCAiYWxsIiwgV1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAgIH0K
ICAgICB8Ci0gICAgbWF5YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSBJREVOVCBtYXli
ZV9zcGFjZSBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xpc3QgeworICAgIG1heWJlX21lZGlh
X3Jlc3RyaWN0b3IgbWF5YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfYW5kX21lZGlh
X3F1ZXJ5X2V4cHJlc3Npb25fbGlzdCB7CiAgICAgICAgICQzLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlSW5QbGFjZSgpOwotICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KCQxLCAkMywgc3RkOjp1
bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigkNSkpOwor
ICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KCQxLCAkMywgV1RGTW92ZSgqJDUpKTsKKyAgICAg
ICAgZGVsZXRlICQ1OwogICAgIH0KICAgICA7CiAKQEAgLTY2MSwxNiArNjY3LDE3IEBAIG1heWJl
X21lZGlhX2xpc3Q6IC8qIGVtcHR5ICovIHsgJCQgPSAmTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCku
bGVha1JlZigpOyB9IHwgbWVkCiBtZWRpYV9saXN0OgogICAgIG1lZGlhX3F1ZXJ5IHsKICAgICAg
ICAgJCQgPSAmTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAkJC0+
YWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4oJDEpKTsKKyAgICAgICAg
JCQtPmFkZE1lZGlhUXVlcnkoV1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAg
ICAgICBwYXJzZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICB9CiAgICAgfCBtZWRp
YV9saXN0ICcsJyBtYXliZV9zcGFjZSBtZWRpYV9xdWVyeSB7CiAgICAgICAgICQkID0gJDE7Ci0g
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KCQ0KTsKICAgICAg
ICAgaWYgKCQkKSB7Ci0gICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVyeShXVEZNb3ZlKG1lZGlh
UXVlcnkpKTsKKyAgICAgICAgICAgICQkLT5hZGRNZWRpYVF1ZXJ5KFdURk1vdmUoKiQ0KSk7CiAg
ICAgICAgICAgICBwYXJzZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICAgICAgfQor
ICAgICAgICBkZWxldGUgJDQ7CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCBlcnJvciB7CiAgICAg
ICAgICQkID0gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBv
cnRSdWxlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCmluZGV4IDVjNWVm
OTMwMjZiNzJhYWY2ZjlhMWRhYjhjY2Q2NmY5ODA0ZmIyN2QuLjQ1MjNlYzU1Y2Y0ZjRjN2ZjZjQ4
NDBlZDVmNjFkZDBkOTE2MTA3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJ
bXBvcnRSdWxlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaApAQCAt
MTksMjYgKzE5LDIwIEBACiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0j
aWZuZGVmIENTU0ltcG9ydFJ1bGVfaAotI2RlZmluZSBDU1NJbXBvcnRSdWxlX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQ1NTUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENhY2hlZENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBNZWRpYUxpc3Q7Ci1jbGFzcyBNZWRpYVF1
ZXJ5U2V0OwogY2xhc3MgU3R5bGVSdWxlSW1wb3J0OwogCiBjbGFzcyBDU1NJbXBvcnRSdWxlIGZp
bmFsIDogcHVibGljIENTU1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q1NTSW1wb3J0
UnVsZT4gY3JlYXRlKFN0eWxlUnVsZUltcG9ydCYgcnVsZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9Ci0g
ICAgCi0gICAgdmlydHVhbCB+Q1NTSW1wb3J0UnVsZSgpOwogCi0gICAgU3RyaW5nIGNzc1RleHQo
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UmKSBvdmVy
cmlkZTsKKyAgICB2aXJ0dWFsIH5DU1NJbXBvcnRSdWxlKCk7CiAKICAgICBTdHJpbmcgaHJlZigp
IGNvbnN0OwogICAgIE1lZGlhTGlzdCYgbWVkaWEoKSBjb25zdDsKQEAgLTQ3LDcgKzQxLDkgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCYsIENT
U1N0eWxlU2hlZXQqKTsKIAotICAgIENTU1J1bGU6OlR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIElNUE9SVF9SVUxFOyB9CisgICAgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gSU1QT1JUX1JVTEU7IH0KKyAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0
IGZpbmFsOworICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSYpIGZpbmFsOwogCiAgICAg
UmVmPFN0eWxlUnVsZUltcG9ydD4gbV9pbXBvcnRSdWxlOwogICAgIG11dGFibGUgUmVmUHRyPE1l
ZGlhTGlzdD4gbV9tZWRpYUNTU09NV3JhcHBlcjsKQEAgLTU3LDUgKzUzLDMgQEAgcHJpdmF0ZToK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfUlVM
RShDU1NJbXBvcnRSdWxlLCBDU1NSdWxlOjpJTVBPUlRfUlVMRSkKLQotI2VuZGlmIC8vIENTU0lt
cG9ydFJ1bGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAzNDY0ZDFiY2ExNjkzYTI1
NjFlMjI2MzMxY2ExNzdmY2U0MjQ1NTk0Li4yMmFlZDQxN2EyOTM0MjMzOGJjNmQzMzkzMzQzY2Ex
NTA2NjhmZmJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTUyOSwxOSArMTUyOSwy
MCBAQCBWZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPiBDU1NQYXJzZXI6OnBhcnNlU2l6ZXNB
dHRyaWJ1dGUoU3RyaW5nVmlldyBzdHJpbmcpCiAKIC8vIEZJWE1FKDE0MTI4OSk6IFRoZSBmb2xs
b3dpbmcgdHdvIGNvbnN0cnVjdG9ycyBhcmUgb25seSBuZWVkZWQgYmVjYXVzZSBvZiBhIGJ1ZyBp
biBNU1ZDIDIwMTMgKGFuZCBwcmlvcikuCiAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgY29kZSBh
cyBzb29uIGFzIGEgVmlzdWFsIFN0dWRpbyB1cGRhdGUgdGhhdCBmaXhlcyB0aGlzIHByb2JsZW0g
aXMgcmVsZWFzZWQuCisKIENTU1BhcnNlcjo6U291cmNlU2l6ZTo6U291cmNlU2l6ZShDU1NQYXJz
ZXI6OlNvdXJjZVNpemUmJiBvcmlnaW5hbCkKICAgICA6IGV4cHJlc3Npb24oV1RGTW92ZShvcmln
aW5hbC5leHByZXNzaW9uKSkKLSAgICAsIGxlbmd0aChvcmlnaW5hbC5sZW5ndGgpCisgICAgLCBs
ZW5ndGgoV1RGTW92ZShvcmlnaW5hbC5sZW5ndGgpKQogewogfQogCi1DU1NQYXJzZXI6OlNvdXJj
ZVNpemU6OlNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgb3JpZ0V4
cCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKG9y
aWdFeHApKQorQ1NTUGFyc2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHBy
ZXNzaW9uJiYgZXhwcmVzc2lvbiwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlKQorICAgIDogZXhwcmVz
c2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQogICAgICwgbGVuZ3RoKFdURk1vdmUodmFsdWUpKQog
ewogfQogCi1DU1NQYXJzZXI6OlNvdXJjZVNpemUgQ1NTUGFyc2VyOjpzb3VyY2VTaXplKHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIENTU1BhcnNlclZhbHVlJiBw
YXJzZXJWYWx1ZSkKK0NTU1BhcnNlcjo6U291cmNlU2l6ZSBDU1NQYXJzZXI6OnNvdXJjZVNpemUo
TWVkaWFRdWVyeUV4cHJlc3Npb24mJiBleHByZXNzaW9uLCBDU1NQYXJzZXJWYWx1ZSYgcGFyc2Vy
VmFsdWUpCiB7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKICAgICBpZiAoaXNDYWxjdWxh
dGlvbihwYXJzZXJWYWx1ZSkpIHsKQEAgLTE1NTQsNyArMTU1NSw3IEBAIENTU1BhcnNlcjo6U291
cmNlU2l6ZSBDU1NQYXJzZXI6OnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlF
eHA+JiYgZXhwCiAgICAgZGVzdHJveShwYXJzZXJWYWx1ZSk7CiAgICAgLy8gRklYTUU6IENhbGxp
bmcgdGhlIGNvbnN0cnVjdG9yIGV4cGxpY2l0bHkgaGVyZSB0byB3b3JrIGFyb3VuZCBhbiBNU1ZD
IGJ1Zy4KICAgICAvLyBGb3Igb3RoZXIgY29tcGlsZXJzLCB3ZSBkaWQgbm90IG5lZWQgdG8gZGVm
aW5lIHRoZSBjb25zdHJ1Y3RvcnMgYW5kIHdlIGNvdWxkIHVzZSBhZ2dyZWdhdGUgaW5pdGlhbGl6
YXRpb24gc3ludGF4LgotICAgIHJldHVybiBTb3VyY2VTaXplKFdURk1vdmUoZXhwcmVzc2lvbiks
IFdURk1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gU291cmNlU2l6ZShXVEZNb3ZlKGV4cHJlc3Np
b24pLCB2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZp
bHRlclByb3BlcnRpZXMoYm9vbCBpbXBvcnRhbnQsIGNvbnN0IFBhcnNlZFByb3BlcnR5VmVjdG9y
JiBpbnB1dCwgVmVjdG9yPENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVfdCYgdW51c2Vk
RW50cmllcywgc3RkOjpiaXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzLCBI
YXNoU2V0PEF0b21pY1N0cmluZz4mIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCmluZGV4IDMwYWRhODUxZWM5NWI5MzU3YjFhMjRlYjgzMzVjNWNhMjYyMGIyZDEuLjEy
YzhlNmFlYzZkYWIzYzVlYjJlNGVmMDUzMjU3MzYxY2E3YzU4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKQEAgLTY2LDcgKzY2LDcgQEAgY2xhc3MgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0YWJsZVN0eWxlUHJv
cGVydGllczsKLWNsYXNzIE1lZGlhUXVlcnlFeHA7CitjbGFzcyBNZWRpYVF1ZXJ5RXhwcmVzc2lv
bjsKIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiBjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwog
Y2xhc3MgU1ZHQ29sb3I7CkBAIC0xNjgsMTQgKzE2OCwxNCBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUJhY2tncm91bmRDb2xvcigpOwogCiAgICAgc3RydWN0
IFNvdXJjZVNpemUgewotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4gZXhw
cmVzc2lvbjsKLSAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBsZW5ndGg7CisgICAgICAgIE1lZGlh
UXVlcnlFeHByZXNzaW9uIGV4cHJlc3Npb247CisgICAgICAgIFJlZjxDU1NWYWx1ZT4gbGVuZ3Ro
OwogCiAgICAgICAgIFNvdXJjZVNpemUoU291cmNlU2l6ZSYmKTsKLSAgICAgICAgU291cmNlU2l6
ZShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiwgUmVmUHRyPENTU1ZhbHVlPiYmKTsK
KyAgICAgICAgU291cmNlU2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+
JiYpOwogICAgIH07CiAgICAgVmVjdG9yPFNvdXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUo
U3RyaW5nVmlldyk7Ci0gICAgU291cmNlU2l6ZSBzb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXhwPiYmLCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFNvdXJjZVNpemUgc291cmNl
U2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAgYm9v
bCBwYXJzZUZpbGxJbWFnZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcAppbmRleCA5Y2MwOGRlYjdl
MDk3YzBjOWYxZmVhODM5MzEwMzEzNjY4YjViY2QyLi5jNDhlOWM5YjlhMDE4NjBmNzQ3YzYwZjRk
ZTIxNmE5MDkwMTBhYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRS
dWxlU2V0cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3Bw
CkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgRG9jdW1lbnRSdWxlU2V0czo6YXBwZW5kQXV0aG9yU3R5
bGVTaGVldHMoY29uc3QgVmVjdG9yPFJlZlB0cjxDU1NTdHlsZVNoZWV0CiAgICAgLy8gbmVlZHMg
dG8gYmUgcmVjb25zdHJ1Y3RlZC4gVG8gaGFuZGxlIGluc2VydGlvbnMgdG9vIHRoZSBydWxlIG9y
ZGVyIG51bWJlcnMgd291bGQgbmVlZCB0byBiZSB1cGRhdGVkLgogICAgIGZvciAoYXV0byYgY3Nz
U2hlZXQgOiBzdHlsZVNoZWV0cykgewogICAgICAgICBBU1NFUlQoIWNzc1NoZWV0LT5kaXNhYmxl
ZCgpKTsKLSAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVtLT5l
dmFsKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSwgcmVzb2x2ZXIpKQorICAgICAgICBpZiAoY3Nz
U2hlZXQtPm1lZGlhUXVlcmllcygpICYmICFtZWRpdW0tPmV2YWx1YXRlKCpjc3NTaGVldC0+bWVk
aWFRdWVyaWVzKCksIHJlc29sdmVyKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBt
X2F1dGhvclN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChjc3NTaGVldC0+Y29udGVudHMoKSwgKm1l
ZGl1bSwgcmVzb2x2ZXIpOwogICAgICAgICBpbnNwZWN0b3JDU1NPTVdyYXBwZXJzLmNvbGxlY3RG
cm9tU3R5bGVTaGVldElmTmVlZGVkKGNzc1NoZWV0LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFGZWF0dXJlTmFtZXMuY3BwCmluZGV4IDg1YTJkYjU2ZGY1YjRkZjJjNTg2NDkzNGY2ZjJl
NjczNGQ2MDJjZTEuLjE4NDMwYzkwYzE0ZjdlMWIzNmRiZDM5YWUxMGIzOTM5NGNiMzc2YzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcApAQCAtMzAsOCArMzAsNyBA
QAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzIHsKIAot
I2RlZmluZSBERUZJTkVfTUVESUFGRUFUVVJFX0dMT0JBTChuYW1lLCBzdHIpIFwKLSAgICBERUZJ
TkVfR0xPQkFMKEF0b21pY1N0cmluZywgbmFtZSMjTWVkaWFGZWF0dXJlLCBzdHIpCisjZGVmaW5l
IERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMKG5hbWUsIHN0cmluZykgREVGSU5FX0dMT0JBTChB
dG9taWNTdHJpbmcsIG5hbWUpCiBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZF
QVRVUkUoREVGSU5FX01FRElBRkVBVFVSRV9HTE9CQUwpCiAjdW5kZWYgREVGSU5FX01FRElBRkVB
VFVSRV9HTE9CQUwKIApAQCAtMzksMTAgKzM4LDkgQEAgdm9pZCBpbml0KCkKIHsKICAgICBzdGF0
aWMgYm9vbCBpbml0aWFsaXplZDsKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgLy8g
VXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6ZSB0aGUgZ2xvYmFscy4KLQorICAgICAgICAv
LyBVc2UgcGxhY2VtZW50IG5ldyB0byBpbml0aWFsaXplIHRoZSBnbG9iYWxzLgogICAgICAgICBB
dG9taWNTdHJpbmc6OmluaXQoKTsKLSNkZWZpbmUgSU5JVElBTElaRV9HTE9CQUwobmFtZSwgc3Ry
KSBuZXcgKE5vdE51bGwsICh2b2lkKikmbmFtZSMjTWVkaWFGZWF0dXJlKSBBdG9taWNTdHJpbmco
c3RyLCBBdG9taWNTdHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKKyNkZWZpbmUgSU5JVElB
TElaRV9HTE9CQUwobmFtZSwgc3RyaW5nKSBuZXcgKE5vdE51bGwsICh2b2lkKikmbmFtZSkgQXRv
bWljU3RyaW5nKHN0cmluZywgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7CiAg
ICAgICAgIENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShJTklUSUFM
SVpFX0dMT0JBTCkKICN1bmRlZiBJTklUSUFMSVpFX0dMT0JBTAogICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFt
ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1lcy5oCmluZGV4IGI1Y2Ey
NTBkNzE3ZDIxMjRjNzNkZjZmMTYyZjRjMDNhNjUwYzMwZjkuLjYyOTcxYzAyZmYyY2NjZGZhMzRm
MjU1NjA3ZWM5NDhkNTQwMTkwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YUZlYXR1cmVOYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVOYW1l
cy5oCkBAIC0xNyw4MCArMTcsNzggQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICoKICAqLwotI2lmbmRlZiBNZWRpYUZlYXR1cmVOYW1lc19oCi0jZGVmaW5lIE1lZGlhRmVhdHVy
ZU5hbWVzX2gKIAotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgorI3ByYWdtYSBv
bmNlCiAKLW5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFt
ZXMgeworI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21pY1N0cmluZy5oPgogCiAjaWYgRU5BQkxFKFZJ
RVdfTU9ERV9DU1NfTUVESUEpCi0jZGVmaW5lIENTU19NRURJQVFVRVJZX1ZJRVdfTU9ERShtYWNy
bykgbWFjcm8odmlld19tb2RlLCAiLXdlYmtpdC12aWV3LW1vZGUiKQorI2RlZmluZSBDU1NfTUVE
SUFRVUVSWV9WSUVXX01PREUobWFjcm8pIG1hY3JvKHZpZXdNb2RlLCAiLXdlYmtpdC12aWV3LW1v
ZGUiKQogI2Vsc2UKICNkZWZpbmUgQ1NTX01FRElBUVVFUllfVklFV19NT0RFKG1hY3JvKQogI2Vu
ZGlmCiAKICNkZWZpbmUgQ1NTX01FRElBUVVFUllfTkFNRVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJF
KG1hY3JvKSBcCi0gICAgbWFjcm8oYW55X2hvdmVyLCAiYW55LWhvdmVyIikgXAotICAgIG1hY3Jv
KGFueV9wb2ludGVyLCAiYW55LXBvaW50ZXIiKSBcCisgICAgbWFjcm8oYW5pbWF0aW9uLCAiLXdl
YmtpdC1hbmltYXRpb24iKSBcCisgICAgbWFjcm8oYW55SG92ZXIsICJhbnktaG92ZXIiKSBcCisg
ICAgbWFjcm8oYW55UG9pbnRlciwgImFueS1wb2ludGVyIikgXAorICAgIG1hY3JvKGFzcGVjdFJh
dGlvLCAiYXNwZWN0LXJhdGlvIikgXAogICAgIG1hY3JvKGNvbG9yLCAiY29sb3IiKSBcCi0gICAg
bWFjcm8oY29sb3JfaW5kZXgsICJjb2xvci1pbmRleCIpIFwKLSAgICBtYWNybyhjb2xvcl9nYW11
dCwgImNvbG9yLWdhbXV0IikgXAorICAgIG1hY3JvKGNvbG9yR2FtdXQsICJjb2xvci1nYW11dCIp
IFwKKyAgICBtYWNybyhjb2xvckluZGV4LCAiY29sb3ItaW5kZXgiKSBcCisgICAgbWFjcm8oZGV2
aWNlQXNwZWN0UmF0aW8sICJkZXZpY2UtYXNwZWN0LXJhdGlvIikgXAorICAgIG1hY3JvKGRldmlj
ZUhlaWdodCwgImRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8oZGV2aWNlUGl4ZWxSYXRpbywg
Ii13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKGRldmljZVdpZHRoLCAi
ZGV2aWNlLXdpZHRoIikgXAogICAgIG1hY3JvKGdyaWQsICJncmlkIikgXAotICAgIG1hY3JvKG1v
bm9jaHJvbWUsICJtb25vY2hyb21lIikgXAogICAgIG1hY3JvKGhlaWdodCwgImhlaWdodCIpIFwK
ICAgICBtYWNybyhob3ZlciwgImhvdmVyIikgXAotICAgIG1hY3JvKHdpZHRoLCAid2lkdGgiKSBc
CisgICAgbWFjcm8oaW52ZXJ0ZWRDb2xvcnMsICJpbnZlcnRlZC1jb2xvcnMiKSBcCisgICAgbWFj
cm8obWF4QXNwZWN0UmF0aW8sICJtYXgtYXNwZWN0LXJhdGlvIikgXAorICAgIG1hY3JvKG1heENv
bG9yLCAibWF4LWNvbG9yIikgXAorICAgIG1hY3JvKG1heENvbG9ySW5kZXgsICJtYXgtY29sb3It
aW5kZXgiKSBcCisgICAgbWFjcm8obWF4RGV2aWNlQXNwZWN0UmF0aW8sICJtYXgtZGV2aWNlLWFz
cGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtYXhEZXZpY2VIZWlnaHQsICJtYXgtZGV2aWNlLWhl
aWdodCIpIFwKKyAgICBtYWNybyhtYXhEZXZpY2VQaXhlbFJhdGlvLCAiLXdlYmtpdC1tYXgtZGV2
aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKG1heERldmljZVdpZHRoLCAibWF4LWRldmlj
ZS13aWR0aCIpIFwKKyAgICBtYWNybyhtYXhIZWlnaHQsICJtYXgtaGVpZ2h0IikgXAorICAgIG1h
Y3JvKG1heE1vbm9jaHJvbWUsICJtYXgtbW9ub2Nocm9tZSIpIFwKKyAgICBtYWNybyhtYXhSZXNv
bHV0aW9uLCAibWF4LXJlc29sdXRpb24iKSBcCisgICAgbWFjcm8obWF4V2lkdGgsICJtYXgtd2lk
dGgiKSBcCisgICAgbWFjcm8obWluQXNwZWN0UmF0aW8sICJtaW4tYXNwZWN0LXJhdGlvIikgXAor
ICAgIG1hY3JvKG1pbkNvbG9yLCAibWluLWNvbG9yIikgXAorICAgIG1hY3JvKG1pbkNvbG9ySW5k
ZXgsICJtaW4tY29sb3ItaW5kZXgiKSBcCisgICAgbWFjcm8obWluRGV2aWNlQXNwZWN0UmF0aW8s
ICJtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtaW5EZXZpY2VIZWlnaHQs
ICJtaW4tZGV2aWNlLWhlaWdodCIpIFwKKyAgICBtYWNybyhtaW5EZXZpY2VQaXhlbFJhdGlvLCAi
LXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIikgXAorICAgIG1hY3JvKG1pbkRldmljZVdp
ZHRoLCAibWluLWRldmljZS13aWR0aCIpIFwKKyAgICBtYWNybyhtaW5IZWlnaHQsICJtaW4taGVp
Z2h0IikgXAorICAgIG1hY3JvKG1pbk1vbm9jaHJvbWUsICJtaW4tbW9ub2Nocm9tZSIpIFwKKyAg
ICBtYWNybyhtaW5SZXNvbHV0aW9uLCAibWluLXJlc29sdXRpb24iKSBcCisgICAgbWFjcm8obWlu
V2lkdGgsICJtaW4td2lkdGgiKSBcCisgICAgbWFjcm8obW9ub2Nocm9tZSwgIm1vbm9jaHJvbWUi
KSBcCiAgICAgbWFjcm8ob3JpZW50YXRpb24sICJvcmllbnRhdGlvbiIpIFwKLSAgICBtYWNybyhh
c3BlY3RfcmF0aW8sICJhc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX2FzcGVjdF9y
YXRpbywgImRldmljZS1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX3BpeGVsX3Jh
dGlvLCAiLXdlYmtpdC1kZXZpY2UtcGl4ZWwtcmF0aW8iKSBcCi0gICAgbWFjcm8oZGV2aWNlX2hl
aWdodCwgImRldmljZS1oZWlnaHQiKSBcCi0gICAgbWFjcm8oZGV2aWNlX3dpZHRoLCAiZGV2aWNl
LXdpZHRoIikgXAotICAgIG1hY3JvKGludmVydGVkX2NvbG9ycywgImludmVydGVkLWNvbG9ycyIp
IFwKLSAgICBtYWNybyhtYXhfY29sb3IsICJtYXgtY29sb3IiKSBcCi0gICAgbWFjcm8obWF4X2Nv
bG9yX2luZGV4LCAibWF4LWNvbG9yLWluZGV4IikgXAotICAgIG1hY3JvKG1heF9hc3BlY3RfcmF0
aW8sICJtYXgtYXNwZWN0LXJhdGlvIikgXAotICAgIG1hY3JvKG1heF9kZXZpY2VfYXNwZWN0X3Jh
dGlvLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8obWF4X2RldmljZV9w
aXhlbF9yYXRpbywgIi13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbyIpIFwKLSAgICBtYWNy
byhtYXhfZGV2aWNlX2hlaWdodCwgIm1heC1kZXZpY2UtaGVpZ2h0IikgXAotICAgIG1hY3JvKG1h
eF9kZXZpY2Vfd2lkdGgsICJtYXgtZGV2aWNlLXdpZHRoIikgXAotICAgIG1hY3JvKG1heF9oZWln
aHQsICJtYXgtaGVpZ2h0IikgXAotICAgIG1hY3JvKG1heF9tb25vY2hyb21lLCAibWF4LW1vbm9j
aHJvbWUiKSBcCi0gICAgbWFjcm8obWF4X3dpZHRoLCAibWF4LXdpZHRoIikgXAotICAgIG1hY3Jv
KG1heF9yZXNvbHV0aW9uLCAibWF4LXJlc29sdXRpb24iKSBcCi0gICAgbWFjcm8obWluX2NvbG9y
LCAibWluLWNvbG9yIikgXAotICAgIG1hY3JvKG1pbl9jb2xvcl9pbmRleCwgIm1pbi1jb2xvci1p
bmRleCIpIFwKLSAgICBtYWNybyhtaW5fYXNwZWN0X3JhdGlvLCAibWluLWFzcGVjdC1yYXRpbyIp
IFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX2FzcGVjdF9yYXRpbywgIm1pbi1kZXZpY2UtYXNwZWN0
LXJhdGlvIikgXAotICAgIG1hY3JvKG1pbl9kZXZpY2VfcGl4ZWxfcmF0aW8sICItd2Via2l0LW1p
bi1kZXZpY2UtcGl4ZWwtcmF0aW8iKSBcCi0gICAgbWFjcm8obWluX2RldmljZV9oZWlnaHQsICJt
aW4tZGV2aWNlLWhlaWdodCIpIFwKLSAgICBtYWNybyhtaW5fZGV2aWNlX3dpZHRoLCAibWluLWRl
dmljZS13aWR0aCIpIFwKLSAgICBtYWNybyhtaW5faGVpZ2h0LCAibWluLWhlaWdodCIpIFwKLSAg
ICBtYWNybyhtaW5fbW9ub2Nocm9tZSwgIm1pbi1tb25vY2hyb21lIikgXAotICAgIG1hY3JvKG1p
bl93aWR0aCwgIm1pbi13aWR0aCIpIFwKLSAgICBtYWNybyhtaW5fcmVzb2x1dGlvbiwgIm1pbi1y
ZXNvbHV0aW9uIikgXAogICAgIG1hY3JvKHBvaW50ZXIsICJwb2ludGVyIikgXAogICAgIG1hY3Jv
KHJlc29sdXRpb24sICJyZXNvbHV0aW9uIikgXAotICAgIG1hY3JvKHRyYW5zZm9ybV8yZCwgIi13
ZWJraXQtdHJhbnNmb3JtLTJkIikgXAotICAgIG1hY3JvKHRyYW5zZm9ybV8zZCwgIi13ZWJraXQt
dHJhbnNmb3JtLTNkIikgXAorICAgIG1hY3JvKHRyYW5zZm9ybTJkLCAiLXdlYmtpdC10cmFuc2Zv
cm0tMmQiKSBcCisgICAgbWFjcm8odHJhbnNmb3JtM2QsICItd2Via2l0LXRyYW5zZm9ybS0zZCIp
IFwKICAgICBtYWNybyh0cmFuc2l0aW9uLCAiLXdlYmtpdC10cmFuc2l0aW9uIikgXAotICAgIG1h
Y3JvKGFuaW1hdGlvbiwgIi13ZWJraXQtYW5pbWF0aW9uIikgXAotICAgIG1hY3JvKHZpZGVvX3Bs
YXlhYmxlX2lubGluZSwgIi13ZWJraXQtdmlkZW8tcGxheWFibGUtaW5saW5lIikgXAorICAgIG1h
Y3JvKHZpZGVvUGxheWFibGVJbmxpbmUsICItd2Via2l0LXZpZGVvLXBsYXlhYmxlLWlubGluZSIp
IFwKKyAgICBtYWNybyh3aWR0aCwgIndpZHRoIikgXAogICAgIENTU19NRURJQVFVRVJZX1ZJRVdf
TU9ERShtYWNybykKIAogLy8gZW5kIG9mIG1hY3JvCiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25h
bWVzcGFjZSBNZWRpYUZlYXR1cmVOYW1lcyB7CisKICNpZm5kZWYgQ1NTX01FRElBUVVFUllfTkFN
RVNfSElERV9HTE9CQUxTCi0gICAgI2RlZmluZSBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJF
KG5hbWUsIHN0cikgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lIyNNZWRpYUZlYXR1cmU7
CisjZGVmaW5lIENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUobmFtZSwgc3RyaW5nKSBleHRl
cm4gY29uc3QgQXRvbWljU3RyaW5nIG5hbWU7CiAgICAgQ1NTX01FRElBUVVFUllfTkFNRVNfRk9S
X0VBQ0hfTUVESUFGRUFUVVJFKENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUpCi0gICAgI3Vu
ZGVmIENTU19NRURJQVFVRVJZX05BTUVTX0RFQ0xBUkUKKyN1bmRlZiBDU1NfTUVESUFRVUVSWV9O
QU1FU19ERUNMQVJFCiAjZW5kaWYKIAotICAgICAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIGlu
aXQoKTsKIAotICAgIH0gLy8gbmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzCit9IC8vIG5hbWVz
cGFjZSBNZWRpYUZlYXR1cmVOYW1lcwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gTWVkaWFGZWF0dXJlTmFtZXNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAppbmRleCAwMWY4
ODYyNzc5OTQ2Njk4NWJlZGJlZDc1MjU5YzNlZjFkNzNhMjY3Li4yZmU5ZDk2MzcxODA2Njc0YTk3
YTdiMWJlNzVjM2NiNDUyM2RiNTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcApAQCAtMTcs
NiArMTcsNyBAQAogICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgogICovCisKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKIApA
QCAtMjYsOSArMjcsOSBAQAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxQYXJzZXJJ
ZGlvbXMuaCIKICNpbmNsdWRlICJNZWRpYUZlYXR1cmVOYW1lcy5oIgogI2luY2x1ZGUgIk1lZGlh
UXVlcnkuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSAiU2NyaXB0YWJs
ZURvY3VtZW50UGFyc2VyLmgiCiAjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CiAjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtNzQsMjggKzc1LDI3IEBAIE1lZGlh
UXVlcnlTZXQ6Ok1lZGlhUXVlcnlTZXQoY29uc3QgU3RyaW5nJiBtZWRpYVN0cmluZywgYm9vbCBm
YWxsYmFja1RvRGVzY3JpcHRvCiAgICAgLCBtX2xhc3RMaW5lKDApCiB7CiAgICAgYm9vbCBzdWNj
ZXNzID0gcGFyc2UobWVkaWFTdHJpbmcpOworCiAgICAgLy8gRklYTUU6IHBhcnNpbmcgY2FuIGZh
aWwuIFRoZSBwcm9ibGVtIHdpdGggZmFpbGluZyBjb25zdHJ1Y3RvciBpcyB0aGF0CiAgICAgLy8g
d2Ugd291bGQgbmVlZCBhZGRpdGlvbmFsIGZsYWcgc2F5aW5nIE1lZGlhTGlzdCBpcyBub3QgdmFs
aWQKICAgICAvLyBQYXJzZSBjYW4gZmFpbCBvbmx5IHdoZW4gZmFsbGJhY2tUb0Rlc2NyaXB0b3Ig
PT0gZmFsc2UsIGkuZSB3aGVuIEhUTUw0IG1lZGlhIGRlc2NyaXB0b3IKICAgICAvLyBmb3J3YXJk
LWNvbXBhdGlibGUgc3ludGF4IGlzIG5vdCBpbiB1c2UuCiAgICAgLy8gRE9NSW1wbGVtZW50YXRp
b25DU1Mgc2VlbXMgdG8gbWFuZGF0ZSB0aGF0IG1lZGlhIGRlc2NyaXB0b3JzIGFyZSB1c2VkCi0g
ICAgLy8gZm9yIGJvdGggaHRtbCBhbmQgc3ZnLCBldmVuIHRob3VnaCBzdmc6c3R5bGUgZG9lc24n
dCB1c2UgbWVkaWEgZGVzY3JpcHRvcnMKKyAgICAvLyBmb3IgYm90aCBIVE1MIGFuZCBTVkcsIGV2
ZW4gdGhvdWdoIHN2ZzpzdHlsZSBkb2Vzbid0IHVzZSBtZWRpYSBkZXNjcmlwdG9ycwogICAgIC8v
IEN1cnJlbnRseSB0aGUgb25seSBwbGFjZXMgd2hlcmUgcGFyc2luZyBjYW4gZmFpbCBhcmUKICAg
ICAvLyBjcmVhdGluZyA8c3ZnOnN0eWxlPiwgY3JlYXRpbmcgY3NzIG1lZGlhIC8gaW1wb3J0IHJ1
bGVzIGZyb20ganMKLSAgICAKKwogICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3QgbWFrZSBtdWNo
IHNlbnNlLgogICAgIGlmICghc3VjY2VzcykKICAgICAgICAgcGFyc2UoImludmFsaWQiKTsKIH0K
IAogTWVkaWFRdWVyeVNldDo6TWVkaWFRdWVyeVNldChjb25zdCBNZWRpYVF1ZXJ5U2V0JiBvKQot
ICAgIDogUmVmQ291bnRlZDxNZWRpYVF1ZXJ5U2V0PigpCisgICAgOiBSZWZDb3VudGVkKCkKICAg
ICAsIG1fZmFsbGJhY2tUb0Rlc2NyaXB0b3Ioby5tX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQogICAg
ICwgbV9sYXN0TGluZShvLm1fbGFzdExpbmUpCi0gICAgLCBtX3F1ZXJpZXMoby5tX3F1ZXJpZXMu
c2l6ZSgpKQorICAgICwgbV9xdWVyaWVzKG8ubV9xdWVyaWVzKQogewotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIG1fcXVlcmllc1tp
XSA9IG8ubV9xdWVyaWVzW2ldLT5jb3B5KCk7CiB9CiAKIE1lZGlhUXVlcnlTZXQ6On5NZWRpYVF1
ZXJ5U2V0KCkKQEAgLTEwOSw0NiArMTA5LDUxIEBAIHN0YXRpYyBTdHJpbmcgcGFyc2VNZWRpYURl
c2NyaXB0b3IoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAgICAgLy8gVVMgQVNDSUkgbGV0dGVyIFth
LXpBLVpdIChJU08gMTA2NDYgaGV4IDQxLTVhLCA2MS03YSksIGRpZ2l0IFswLTldIChoZXggMzAt
MzkpLAogICAgIC8vIG9yIGh5cGhlbiAoaGV4IDJkKS4iCiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
c3RyaW5nLmxlbmd0aCgpOwotICAgIHVuc2lnbmVkIGkgPSAwOwotICAgIGZvciAoOyBpIDwgbGVu
Z3RoOyArK2kpIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgYyA9IHN0cmluZ1tpXTsKLSAgICAg
ICAgaWYgKCEgKChjID49ICdhJyAmJiBjIDw9ICd6JykKLSAgICAgICAgICAgICAgIHx8IChjID49
ICdBJyAmJiBjIDw9ICdaJykKLSAgICAgICAgICAgICAgIHx8IChjID49ICcxJyAmJiBjIDw9ICc5
JykKLSAgICAgICAgICAgICAgIHx8IChjID09ICctJykpKQorICAgIHVuc2lnbmVkIGk7CisgICAg
Zm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgIGF1dG8gY2hhcmFjdGVyID0g
c3RyaW5nW2ldOworICAgICAgICBpZiAoIShpc0FTQ0lJQWxwaGFudW1lcmljKGNoYXJhY3Rlcikg
fHwgY2hhcmFjdGVyID09ICctJykpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0
dXJuIHN0cmluZy5sZWZ0KGkpOwogfQogCitPcHRpb25hbDxNZWRpYVF1ZXJ5PiBNZWRpYVF1ZXJ5
U2V0OjppbnRlcm5hbFBhcnNlKENTU1BhcnNlciYgcGFyc2VyLCBjb25zdCBTdHJpbmcmIHF1ZXJ5
U3RyaW5nKQoreworICAgIGlmIChhdXRvIHF1ZXJ5ID0gcGFyc2VyLnBhcnNlTWVkaWFRdWVyeShx
dWVyeVN0cmluZykpCisgICAgICAgIHJldHVybiBXVEZNb3ZlKCpxdWVyeSk7CisgICAgaWYgKCFt
X2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQorICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICByZXR1
cm4gTWVkaWFRdWVyeSB7IE1lZGlhUXVlcnk6Ok5vbmUsIHBhcnNlTWVkaWFEZXNjcmlwdG9yKHF1
ZXJ5U3RyaW5nKSwgVmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiB7IH0gfTsKK30KKworT3B0
aW9uYWw8TWVkaWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZShjb25zdCBTdHJp
bmcmIHF1ZXJ5U3RyaW5nKQoreworICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7
CisgICAgcmV0dXJuIGludGVybmFsUGFyc2UocGFyc2VyLCBxdWVyeVN0cmluZyk7Cit9CisKIGJv
b2wgTWVkaWFRdWVyeVNldDo6cGFyc2UoY29uc3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIHsKICAg
ICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0cmljdE1vZGUpOwogICAgIAotICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+IHJlc3VsdDsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeT4g
cmVzdWx0OwogICAgIFZlY3RvcjxTdHJpbmc+IGxpc3Q7CiAgICAgbWVkaWFTdHJpbmcuc3BsaXQo
JywnLCBsaXN0KTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7ICsr
aSkgewotICAgICAgICBTdHJpbmcgbWVkaXVtID0gbGlzdFtpXS5zdHJpcFdoaXRlU3BhY2UoKTsK
KyAgICBmb3IgKGF1dG8mIGxpc3RTdHJpbmcgOiBsaXN0KSB7CisgICAgICAgIFN0cmluZyBtZWRp
dW0gPSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobGlzdFN0cmluZyk7CiAgICAg
ICAgIGlmIChtZWRpdW0uaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmFsbGJhY2tU
b0Rlc2NyaXB0b3IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+
IG1lZGlhUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5KG1lZGl1bSk7Ci0gICAgICAgIGlm
ICghbWVkaWFRdWVyeSkgewotICAgICAgICAgICAgaWYgKCFtX2ZhbGxiYWNrVG9EZXNjcmlwdG9y
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIFN0cmluZyBtZWRp
YURlc2NyaXB0b3IgPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihtZWRpdW0pOwotICAgICAgICAgICAg
aWYgKG1lZGlhRGVzY3JpcHRvci5pc051bGwoKSkKKyAgICAgICAgICAgIGlmIChtX2ZhbGxiYWNr
VG9EZXNjcmlwdG9yKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbWVk
aWFRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwg
bWVkaWFEZXNjcmlwdG9yLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChhdXRvIHF1ZXJ5
ID0gaW50ZXJuYWxQYXJzZShwYXJzZXIsIG1lZGl1bSkpIHsKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQoV1RGTW92ZShxdWVyeS52YWx1ZSgpKSk7CisgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUobWVkaWFRdWVyeSkpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIC8vICIsLCwsIiBmYWxscyBzdHJhaWdodCB0
aHJvdWdoLCBidXQgaXMgbm90IHZhbGlkIHVubGVzcyBmYWxsYmFjawogICAgIGlmICghbV9mYWxs
YmFja1RvRGVzY3JpcHRvciAmJiBsaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBTdHJpbmcgc3Ry
aXBwZWRNZWRpYVN0cmluZyA9IG1lZGlhU3RyaW5nLnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAg
ICBTdHJpbmcgc3RyaXBwZWRNZWRpYVN0cmluZyA9IHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyhtZWRpYVN0cmluZyk7CiAgICAgICAgIGlmICghc3RyaXBwZWRNZWRpYVN0cmluZy5p
c0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTU4LDQwICsx
NjMsMjQgQEAgYm9vbCBNZWRpYVF1ZXJ5U2V0OjpwYXJzZShjb25zdCBTdHJpbmcmIG1lZGlhU3Ry
aW5nKQogCiBib29sIE1lZGlhUXVlcnlTZXQ6OmFkZChjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5n
KQogewotICAgIENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8TWVkaWFRdWVyeT4gcGFyc2VkUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5
KHF1ZXJ5U3RyaW5nKTsKLSAgICBpZiAoIXBhcnNlZFF1ZXJ5ICYmIG1fZmFsbGJhY2tUb0Rlc2Ny
aXB0b3IpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9IHBhcnNlTWVkaWFEZXNjcmlwdG9yKHF1
ZXJ5U3RyaW5nKTsKLSAgICAgICAgaWYgKCFtZWRpdW0uaXNOdWxsKCkpCi0gICAgICAgICAgICBw
YXJzZWRRdWVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9u
ZSwgbWVkaXVtLCBudWxscHRyKTsKLSAgICB9CisgICAgYXV0byBwYXJzZWRRdWVyeSA9IGludGVy
bmFsUGFyc2UocXVlcnlTdHJpbmcpOwogICAgIGlmICghcGFyc2VkUXVlcnkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIG1fcXVlcmllcy5hcHBlbmQoV1RGTW92ZShwYXJzZWRRdWVyeSkp
OworICAgIG1fcXVlcmllcy5hcHBlbmQoV1RGTW92ZShwYXJzZWRRdWVyeS52YWx1ZSgpKSk7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgTWVkaWFRdWVyeVNldDo6cmVtb3ZlKGNvbnN0IFN0
cmluZyYgcXVlcnlTdHJpbmdUb1JlbW92ZSkKK2Jvb2wgTWVkaWFRdWVyeVNldDo6cmVtb3ZlKGNv
bnN0IFN0cmluZyYgcXVlcnlTdHJpbmcpCiB7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJp
Y3RNb2RlKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBwYXJzZWRRdWVyeSA9
IHBhcnNlci5wYXJzZU1lZGlhUXVlcnkocXVlcnlTdHJpbmdUb1JlbW92ZSk7Ci0gICAgaWYgKCFw
YXJzZWRRdWVyeSAmJiBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKSB7Ci0gICAgICAgIFN0cmluZyBt
ZWRpdW0gPSBwYXJzZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZ1RvUmVtb3ZlKTsKLSAgICAg
ICAgaWYgKCFtZWRpdW0uaXNOdWxsKCkpCi0gICAgICAgICAgICBwYXJzZWRRdWVyeSA9IHN0ZDo6
bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwgbWVkaXVtLCBudWxscHRy
KTsKLSAgICB9CisgICAgYXV0byBwYXJzZWRRdWVyeSA9IGludGVybmFsUGFyc2UocXVlcnlTdHJp
bmcpOwogICAgIGlmICghcGFyc2VkUXVlcnkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAK
ICAgICByZXR1cm4gbV9xdWVyaWVzLnJlbW92ZUZpcnN0TWF0Y2hpbmcoWyZwYXJzZWRRdWVyeV0o
YXV0byYgcXVlcnkpIHsKLSAgICAgICAgcmV0dXJuICpxdWVyeSA9PSAqcGFyc2VkUXVlcnk7Cisg
ICAgICAgIHJldHVybiBxdWVyeSA9PSBwYXJzZWRRdWVyeS52YWx1ZSgpOwogICAgIH0pOwogfQog
Ci12b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnk+IG1lZGlhUXVlcnkpCit2b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoTWVk
aWFRdWVyeSYmIG1lZGlhUXVlcnkpCiB7CiAgICAgbV9xdWVyaWVzLmFwcGVuZChXVEZNb3ZlKG1l
ZGlhUXVlcnkpKTsKIH0KQEAgLTE5OSwxNCArMTg4LDEyIEBAIHZvaWQgTWVkaWFRdWVyeVNldDo6
YWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4gbWVkaWFRdWVyeSkKIFN0
cmluZyBNZWRpYVF1ZXJ5U2V0OjptZWRpYVRleHQoKSBjb25zdAogewogICAgIFN0cmluZ0J1aWxk
ZXIgdGV4dDsKLSAgICAKLSAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fcXVlcmllcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWZpcnN0KQor
ICAgIGJvb2wgbmVlZENvbW1hID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBxdWVyeSA6IG1fcXVl
cmllcykgeworICAgICAgICBpZiAobmVlZENvbW1hKQogICAgICAgICAgICAgdGV4dC5hcHBlbmRM
aXRlcmFsKCIsICIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwot
ICAgICAgICB0ZXh0LmFwcGVuZChtX3F1ZXJpZXNbaV0tPmNzc1RleHQoKSk7CisgICAgICAgIHRl
eHQuYXBwZW5kKHF1ZXJ5LmNzc1RleHQoKSk7CisgICAgICAgIG5lZWRDb21tYSA9IHRydWU7CiAg
ICAgfQogICAgIHJldHVybiB0ZXh0LnRvU3RyaW5nKCk7CiB9CkBAIC0yMTQsMTMgKzIwMSwxMSBA
QCBTdHJpbmcgTWVkaWFRdWVyeVNldDo6bWVkaWFUZXh0KCkgY29uc3QKIE1lZGlhTGlzdDo6TWVk
aWFMaXN0KE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcywgQ1NTU3R5bGVTaGVldCogcGFyZW50
U2hlZXQpCiAgICAgOiBtX21lZGlhUXVlcmllcyhtZWRpYVF1ZXJpZXMpCiAgICAgLCBtX3BhcmVu
dFN0eWxlU2hlZXQocGFyZW50U2hlZXQpCi0gICAgLCBtX3BhcmVudFJ1bGUoMCkKIHsKIH0KIAog
TWVkaWFMaXN0OjpNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCogbWVkaWFRdWVyaWVzLCBDU1NSdWxl
KiBwYXJlbnRSdWxlKQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVkaWFRdWVyaWVzKQotICAgICwg
bV9wYXJlbnRTdHlsZVNoZWV0KDApCiAgICAgLCBtX3BhcmVudFJ1bGUocGFyZW50UnVsZSkKIHsK
IH0KQEAgLTIzMiw5ICsyMTcsNyBAQCBNZWRpYUxpc3Q6On5NZWRpYUxpc3QoKQogdm9pZCBNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3Bl
KG1fcGFyZW50UnVsZSk7Ci0KLSAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cGFy
c2UodmFsdWUpOwotICAgIGlmICghc3VjY2VzcykgeworICAgIGlmICghbV9tZWRpYVF1ZXJpZXMt
PnBhcnNlKHZhbHVlKSkgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0yNDYsNyArMjI5LDcgQEAgU3RyaW5nIE1lZGlhTGlzdDo6aXRlbSh1bnNp
Z25lZCBpbmRleCkgY29uc3QKIHsKICAgICBhdXRvJiBxdWVyaWVzID0gbV9tZWRpYVF1ZXJpZXMt
PnF1ZXJ5VmVjdG9yKCk7CiAgICAgaWYgKGluZGV4IDwgcXVlcmllcy5zaXplKCkpCi0gICAgICAg
IHJldHVybiBxdWVyaWVzW2luZGV4XS0+Y3NzVGV4dCgpOworICAgICAgICByZXR1cm4gcXVlcmll
c1tpbmRleF0uY3NzVGV4dCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIApAQCAtMjg0LDEx
ICsyNjcsOSBAQCB2b2lkIE1lZGlhTGlzdDo6cmVhdHRhY2goTWVkaWFRdWVyeVNldCogbWVkaWFR
dWVyaWVzKQogfQogCiAjaWYgRU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi1zdGF0aWMg
dm9pZCBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBTdHJpbmcmIHNlcmlhbGl6ZWRFeHByZXNzaW9uLCBjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSogdmFsdWUpCi17Ci0gICAgQVNTRVJUKGRvY3VtZW50KTsKLSAgICBBU1NFUlQodmFs
dWUpOwogCitzdGF0aWMgdm9pZCBhZGRSZXNvbHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUo
RG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIHNlcmlhbGl6ZWRFeHByZXNzaW9uLCBj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCit7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPFN0cmluZz4gbWVkaWFRdWVyeU1lc3NhZ2UoQVNDSUlMaXRlcmFsKCJDb25zaWRlciB1c2lu
ZyAnZHBweCcgdW5pdHMgaW5zdGVhZCBvZiAnJXJlcGxhY2VtZW50VW5pdHMlJywgYXMgaW4gQ1NT
ICclcmVwbGFjZW1lbnRVbml0cyUnIG1lYW5zIGRvdHMtcGVyLUNTUy0lbGVuZ3RoVW5pdCUsIG5v
dCBkb3RzLXBlci1waHlzaWNhbC0lbGVuZ3RoVW5pdCUsIHNvIGRvZXMgbm90IGNvcnJlc3BvbmQg
dG8gdGhlIGFjdHVhbCAnJXJlcGxhY2VtZW50VW5pdHMlJyBvZiBhIHNjcmVlbi4gSW4gbWVkaWEg
cXVlcnkgZXhwcmVzc2lvbjogIikpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+
IG1lZGlhVmFsdWVEUEkoQVNDSUlMaXRlcmFsKCJkcGkiKSk7CiAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPFN0cmluZz4gbWVkaWFWYWx1ZURQQ00oQVNDSUlMaXRlcmFsKCJkcGNtIikpOwpAQCAt
Mjk2LDE2ICsyNzcsMTYgQEAgc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdl
VG9Db25zb2xlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW4KICAgICBzdGF0aWMgTmV2
ZXJEZXN0cm95ZWQ8U3RyaW5nPiBsZW5ndGhVbml0Q2VudGltZXRlcihBU0NJSUxpdGVyYWwoImNl
bnRpbWV0ZXIiKSk7CiAKICAgICBTdHJpbmcgbWVzc2FnZTsKLSAgICBpZiAodmFsdWUtPmlzRG90
c1BlckluY2goKSkKLSAgICAgICAgbWVzc2FnZSA9IFN0cmluZyhtZWRpYVF1ZXJ5TWVzc2FnZSku
cmVwbGFjZSgiJXJlcGxhY2VtZW50VW5pdHMlIiwgbWVkaWFWYWx1ZURQSSkucmVwbGFjZSgiJWxl
bmd0aFVuaXQlIiwgbGVuZ3RoVW5pdEluY2gpOwotICAgIGVsc2UgaWYgKHZhbHVlLT5pc0RvdHNQ
ZXJDZW50aW1ldGVyKCkpCi0gICAgICAgIG1lc3NhZ2UgPSBTdHJpbmcobWVkaWFRdWVyeU1lc3Nh
Z2UpLnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFsdWVEUENNKS5yZXBsYWNl
KCIlbGVuZ3RoVW5pdCUiLCBsZW5ndGhVbml0Q2VudGltZXRlcik7CisgICAgaWYgKHZhbHVlLmlz
RG90c1BlckluY2goKSkKKyAgICAgICAgbWVzc2FnZSA9IG1lZGlhUXVlcnlNZXNzYWdlLmdldCgp
LnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1lZGlhVmFsdWVEUEkpLnJlcGxhY2UoIiVs
ZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRJbmNoKTsKKyAgICBlbHNlIGlmICh2YWx1ZS5pc0RvdHNQ
ZXJDZW50aW1ldGVyKCkpCisgICAgICAgIG1lc3NhZ2UgPSBtZWRpYVF1ZXJ5TWVzc2FnZS5nZXQo
KS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBtZWRpYVZhbHVlRFBDTSkucmVwbGFjZSgi
JWxlbmd0aFVuaXQlIiwgbGVuZ3RoVW5pdENlbnRpbWV0ZXIpOwogICAgIGVsc2UKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICBtZXNzYWdlLmFwcGVuZChzZXJpYWxpemVkRXhw
cmVzc2lvbik7CiAKLSAgICBkb2N1bWVudC0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJj
ZTo6Q1NTLCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlKTsKKyAgICBkb2N1bWVudC5hZGRD
b25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpDU1MsIE1lc3NhZ2VMZXZlbDo6RGVidWcsIG1l
c3NhZ2UpOwogfQogCiB2b2lkIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJ5U2V0KQpAQCAtMzEz
LDMxICsyOTQsMjMgQEAgdm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFRdWVyeVNldCogbWUKICAgICBpZiAoIW1lZGlhUXVl
cnlTZXQgfHwgIWRvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBtZWRpYVF1
ZXJpZXMgPSBtZWRpYVF1ZXJ5U2V0LT5xdWVyeVZlY3RvcigpOwotICAgIGNvbnN0IHNpemVfdCBx
dWVyeUNvdW50ID0gbWVkaWFRdWVyaWVzLnNpemUoKTsKLQotICAgIGlmICghcXVlcnlDb3VudCkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVyeUNvdW50
OyArK2kpIHsKLSAgICAgICAgY29uc3QgTWVkaWFRdWVyeSogcXVlcnkgPSBtZWRpYVF1ZXJpZXNb
aV0uZ2V0KCk7Ci0gICAgICAgIFN0cmluZyBtZWRpYVR5cGUgPSBxdWVyeS0+bWVkaWFUeXBlKCk7
Ci0gICAgICAgIGlmICghcXVlcnktPmlnbm9yZWQoKSAmJiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdB
U0NJSUNhc2UobWVkaWFUeXBlLCAicHJpbnQiKSkgewotICAgICAgICAgICAgYXV0byYgZXhwcmVz
c2lvbnMgPSBxdWVyeS0+ZXhwcmVzc2lvbnMoKTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGog
PSAwOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAgICBjb25z
dCBNZWRpYVF1ZXJ5RXhwKiBleHAgPSBleHByZXNzaW9ucy5hdChqKS5nZXQoKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVz
b2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhfcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSB8fCBleHAtPm1lZGlhRmVhdHVyZSgp
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZSkgewotICAg
ICAgICAgICAgICAgICAgICBDU1NWYWx1ZSogY3NzVmFsdWUgPSAgZXhwLT52YWx1ZSgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KGNzc1ZhbHVlKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpjc3NWYWx1ZSk7CisgICAgZm9yIChhdXRv
JiBxdWVyeSA6IG1lZGlhUXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCkpIHsKKyAgICAgICAgaWYgKCFx
dWVyeS5pZ25vcmVkKCkgJiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHF1ZXJ5Lm1l
ZGlhVHlwZSgpLCAicHJpbnQiKSkgeworICAgICAgICAgICAgYXV0byYgZXhwcmVzc2lvbnMgPSBx
dWVyeS5leHByZXNzaW9ucygpOworICAgICAgICAgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDog
ZXhwcmVzc2lvbnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbi5tZWRpYUZlYXR1
cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbiB8fCBleHByZXNzaW9uLm1lZGlh
RmVhdHVyZSgpID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhSZXNvbHV0aW9uIHx8IGV4cHJlc3Np
b24ubWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pblJlc29sdXRpb24pIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byogdmFsdWUgPSBleHByZXNzaW9uLnZhbHVlKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzRG90c1BlckluY2goKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJD
ZW50aW1ldGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldh
cm5pbmdNZXNzYWdlVG9Db25zb2xlKGRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5tZWRpYVRleHQo
KSwgJnByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRSZXNv
bHV0aW9uV2FybmluZ01lc3NhZ2VUb0NvbnNvbGUoKmRvY3VtZW50LCBtZWRpYVF1ZXJ5U2V0LT5t
ZWRpYVRleHQoKSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQorCiAjZW5k
aWYKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oIGIvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCmluZGV4IDczMTAzNDAwYjQ2N2NiYjRlZjVhODA1
ZTQyYzkwMjJhMGZlOTA3M2EuLmQ3MzY1Y2RiMTk3MjY0MjM0YWE0YjhjNjdiNzI5ZDAyNTdlM2Uw
YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmgKQEAgLTE4LDI1ICsxOCwyMyBAQAogICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBNZWRpYUxpc3RfaAotI2RlZmlu
ZSBNZWRpYUxpc3RfaAorI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NQYXJzZXI7CiBjbGFzcyBDU1NSdWxlOwogY2xhc3Mg
Q1NTU3R5bGVTaGVldDsKIGNsYXNzIERvY3VtZW50OwotY2xhc3MgTWVkaWFMaXN0OwogY2xhc3Mg
TWVkaWFRdWVyeTsKIAordXNpbmcgRXhjZXB0aW9uQ29kZSA9IGludDsKKwogY2xhc3MgTWVkaWFR
dWVyeVNldCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhUXVlcnlTZXQ+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlTZXQ+IGNyZWF0ZSgpCkBAIC01MiwxOCArNTAsMTggQEAg
cHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBNZWRpYVF1ZXJ5U2V0KG1lZGlh
U3RyaW5nLCB0cnVlKSk7CiAgICAgfQogICAgIH5NZWRpYVF1ZXJ5U2V0KCk7Ci0gICAgCisKICAg
ICBib29sIHBhcnNlKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgYWRkKGNvbnN0IFN0cmluZyYp
OwogICAgIGJvb2wgcmVtb3ZlKGNvbnN0IFN0cmluZyYpOwogCi0gICAgdm9pZCBhZGRNZWRpYVF1
ZXJ5KHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5Pik7CisgICAgdm9pZCBhZGRNZWRpYVF1ZXJ5
KE1lZGlhUXVlcnkmJik7CisKKyAgICBjb25zdCBWZWN0b3I8TWVkaWFRdWVyeT4mIHF1ZXJ5VmVj
dG9yKCkgY29uc3QgeyByZXR1cm4gbV9xdWVyaWVzOyB9CiAKLSAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+PiYgcXVlcnlWZWN0b3IoKSBjb25zdCB7IHJldHVybiBt
X3F1ZXJpZXM7IH0KLSAgICAKICAgICBpbnQgbGFzdExpbmUoKSBjb25zdCB7IHJldHVybiBtX2xh
c3RMaW5lOyB9CiAgICAgdm9pZCBzZXRMYXN0TGluZShpbnQgbGFzdExpbmUpIHsgbV9sYXN0TGlu
ZSA9IGxhc3RMaW5lOyB9Ci0gICAgCisKICAgICBTdHJpbmcgbWVkaWFUZXh0KCkgY29uc3Q7CiAK
ICAgICBSZWY8TWVkaWFRdWVyeVNldD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgTWVkaWFRdWVyeVNldCgqdGhpcykpOyB9CkBAIC03MiwxMCArNzAsMTMgQEAgcHJpdmF0ZToK
ICAgICBNZWRpYVF1ZXJ5U2V0KCk7CiAgICAgTWVkaWFRdWVyeVNldChjb25zdCBTdHJpbmcmIG1l
ZGlhUXVlcnksIGJvb2wgZmFsbGJhY2tUb0Rlc2NyaXB0aW9uKTsKICAgICBNZWRpYVF1ZXJ5U2V0
KGNvbnN0IE1lZGlhUXVlcnlTZXQmKTsKLSAgICAKKworICAgIE9wdGlvbmFsPE1lZGlhUXVlcnk+
IGludGVybmFsUGFyc2UoQ1NTUGFyc2VyJiwgY29uc3QgU3RyaW5nJik7CisgICAgT3B0aW9uYWw8
TWVkaWFRdWVyeT4gaW50ZXJuYWxQYXJzZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHVuc2lnbmVk
IG1fZmFsbGJhY2tUb0Rlc2NyaXB0b3IgOiAxOyAvLyB0cnVlIGlmIGZhaWxlZCBtZWRpYSBxdWVy
eSBwYXJzaW5nIHNob3VsZCBmYWxsYmFjayB0byBtZWRpYSBkZXNjcmlwdGlvbiBwYXJzaW5nLgog
ICAgIHNpZ25lZCBtX2xhc3RMaW5lIDogMzE7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5Pj4gbV9xdWVyaWVzOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5PiBtX3F1ZXJpZXM7
CiB9OwogCiBjbGFzcyBNZWRpYUxpc3QgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYUxpc3Q+IHsK
QEAgLTk5LDExICsxMDAsMTAgQEAgcHVibGljOgogICAgIFN0cmluZyBtZWRpYVRleHQoKSBjb25z
dCB7IHJldHVybiBtX21lZGlhUXVlcmllcy0+bWVkaWFUZXh0KCk7IH0KICAgICB2b2lkIHNldE1l
ZGlhVGV4dChjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CiAKLSAgICAvLyBOb3QgcGFy
dCBvZiBDU1NPTS4KICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnRSdWxlOyB9CiAgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0
IHsgcmV0dXJuIG1fcGFyZW50U3R5bGVTaGVldDsgfQotICAgIHZvaWQgY2xlYXJQYXJlbnRTdHls
ZVNoZWV0KCkgeyBBU1NFUlQobV9wYXJlbnRTdHlsZVNoZWV0KTsgbV9wYXJlbnRTdHlsZVNoZWV0
ID0gMDsgfQotICAgIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NFUlQobV9wYXJlbnRSdWxl
KTsgbV9wYXJlbnRSdWxlID0gMDsgfQorICAgIHZvaWQgY2xlYXJQYXJlbnRTdHlsZVNoZWV0KCkg
eyBBU1NFUlQobV9wYXJlbnRTdHlsZVNoZWV0KTsgbV9wYXJlbnRTdHlsZVNoZWV0ID0gbnVsbHB0
cjsgfQorICAgIHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NFUlQobV9wYXJlbnRSdWxlKTsg
bV9wYXJlbnRSdWxlID0gbnVsbHB0cjsgfQogICAgIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHF1ZXJp
ZXMoKSBjb25zdCB7IHJldHVybiBtX21lZGlhUXVlcmllcy5nZXQoKTsgfQogCiAgICAgdm9pZCBy
ZWF0dGFjaChNZWRpYVF1ZXJ5U2V0Kik7CkBAIC0xMTQsMTUgKzExNCwxNSBAQCBwcml2YXRlOgog
ICAgIE1lZGlhTGlzdChNZWRpYVF1ZXJ5U2V0KiwgQ1NTUnVsZSogcGFyZW50UnVsZSk7CiAKICAg
ICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9tZWRpYVF1ZXJpZXM7Ci0gICAgQ1NTU3R5bGVTaGVl
dCogbV9wYXJlbnRTdHlsZVNoZWV0OwotICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKKyAgICBD
U1NTdHlsZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQgeyBudWxscHRyIH07CisgICAgQ1NTUnVs
ZSogbV9wYXJlbnRSdWxlIHsgbnVsbHB0ciB9OwogfTsKIAogI2lmIEVOQUJMRShSRVNPTFVUSU9O
X01FRElBX1FVRVJZKQorCiAvLyBBZGRzIG1lc3NhZ2UgdG8gaW5zcGVjdG9yIGNvbnNvbGUgd2hl
bmV2ZXIgZHBpIG9yIGRwY20gdmFsdWVzIGFyZSB1c2VkIGZvciAic2NyZWVuIiBtZWRpYS4KIHZv
aWQgcmVwb3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZChEb2N1bWVudCosIGNvbnN0IE1lZGlh
UXVlcnlTZXQqKTsKKwogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnkuY3BwCmluZGV4IDRhMjVhMTFiOWJkNjZlMmE2MzMyZDRjYjgwZjM0YjU1
Nzc0YjQ1ZjEuLjEzZDc3NTY5NmU0N2E5NTAzOTNhOWZlM2U4N2Y2ZmMyMzM5NjhmODcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCiAKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhw
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNyw4NiArMzYsNjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gaHR0cDov
L2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3NlcmlhbGl6ZS1hLW1lZGlhLXF1ZXJ5CiBTdHJpbmcg
TWVkaWFRdWVyeTo6c2VyaWFsaXplKCkgY29uc3QKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3Vs
dDsKLSAgICBpZiAoIW1faWdub3JlZCkgewotICAgICAgICBzd2l0Y2ggKG1fcmVzdHJpY3Rvcikg
ewotICAgICAgICBjYXNlIE1lZGlhUXVlcnk6Ok9ubHk6Ci0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kTGl0ZXJhbCgib25seSAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1l
ZGlhUXVlcnk6Ok5vdDoKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJub3QgIik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb25lOgotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9leHByZXNzaW9ucy0+
aXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fbWVkaWFUeXBlKTsKLSAg
ICAgICAgICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IGlmIChtX21lZGlhVHlwZSAhPSAiYWxsIiB8fCBtX3Jlc3RyaWN0b3IgIT0gTm9uZSkgewotICAg
ICAgICAgICAgcmVzdWx0LmFwcGVuZChtX21lZGlhVHlwZSk7Ci0gICAgICAgICAgICByZXN1bHQu
YXBwZW5kTGl0ZXJhbCgiIGFuZCAiKTsKLSAgICAgICAgfQorICAgIGlmIChtX2lnbm9yZWQpIHsK
KyAgICAgICAgLy8gSWYgcXVlcnkgaXMgaW52YWxpZCwgc2VyaWFsaXplZCB0ZXh0IHNob3VsZCB0
dXJuIGludG8gIm5vdCBhbGwiLgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub3QgYWxs
Iik7CisgICAgfQogCi0gICAgICAgIHJlc3VsdC5hcHBlbmQobV9leHByZXNzaW9ucy0+YXQoMCkt
PnNlcmlhbGl6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX2V4cHJlc3Np
b25zLT5zaXplKCk7ICsraSkgeworICAgIGJvb2wgc2hvdWxkT21pdE1lZGlhVHlwZSA9IGZhbHNl
OworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIHN3aXRjaCAobV9yZXN0cmljdG9yKSB7
CisgICAgY2FzZSBNZWRpYVF1ZXJ5OjpPbmx5OgorICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJh
bCgib25seSAiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb3Q6Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJub3QgIik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgTWVkaWFRdWVyeTo6Tm9uZToKKyAgICAgICAgc2hvdWxkT21pdE1lZGlhVHlwZSA9ICFt
X2V4cHJlc3Npb25zLmlzRW1wdHkoKSAmJiBtX21lZGlhVHlwZSA9PSAiYWxsIjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGJvb2wgbmVlZHNBbmQgPSBmYWxzZTsKKyAgICBpZiAoIXNob3Vs
ZE9taXRNZWRpYVR5cGUpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX21lZGlhVHlwZSk7Cisg
ICAgICAgIG5lZWRzQW5kID0gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9u
IDogbV9leHByZXNzaW9ucykgeworICAgICAgICBpZiAobmVlZHNBbmQpCiAgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kTGl0ZXJhbCgiIGFuZCAiKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bV9leHByZXNzaW9ucy0+YXQoaSktPnNlcmlhbGl6ZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIElmIHF1ZXJ5IGlzIGludmFsaWQsIHNlcmlhbGl6ZWQgdGV4dCBzaG91
bGQgdHVybiBpbnRvICJub3QgYWxsIi4KLSAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5v
dCBhbGwiKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChleHByZXNzaW9uLnNlcmlhbGl6ZSgpKTsK
KyAgICAgICAgbmVlZHNBbmQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0LnRvU3Ry
aW5nKCk7CiB9CiAKLU1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkoUmVzdHJpY3RvciByLCBjb25zdCBT
dHJpbmcmIG1lZGlhVHlwZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb25WZWN0b3I+IGV4cHJz
KQotICAgIDogbV9yZXN0cmljdG9yKHIpCitNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0
b3IgcmVzdHJpY3RvciwgY29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwcmVzc2lvbj4mJiBleHByZXNzaW9ucykKKyAgICA6IG1fcmVzdHJpY3RvcihyZXN0cmljdG9y
KQogICAgICwgbV9tZWRpYVR5cGUobWVkaWFUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkp
Ci0gICAgLCBtX2V4cHJlc3Npb25zKFdURk1vdmUoZXhwcnMpKQotICAgICwgbV9pZ25vcmVkKGZh
bHNlKQorICAgICwgbV9leHByZXNzaW9ucyhXVEZNb3ZlKGV4cHJlc3Npb25zKSkKIHsKLSAgICBp
ZiAoIW1fZXhwcmVzc2lvbnMpIHsKLSAgICAgICAgbV9leHByZXNzaW9ucyA9IHN0ZDo6bWFrZV91
bmlxdWU8RXhwcmVzc2lvblZlY3Rvcj4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHN0ZDo6c29ydChtX2V4cHJlc3Npb25zLT5iZWdpbigpLCBtX2V4cHJlc3Npb25zLT5lbmQoKSwg
W10oYXV0byYgYSwgYXV0byYgYikgewotICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShh
LT5zZXJpYWxpemUoKSwgYi0+c2VyaWFsaXplKCkpIDwgMDsKKyAgICBzdGQ6OnNvcnQobV9leHBy
ZXNzaW9ucy5iZWdpbigpLCBtX2V4cHJlc3Npb25zLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBi
KSB7CisgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlKGEuc2VyaWFsaXplKCksIGIuc2Vy
aWFsaXplKCkpIDwgMDsKICAgICB9KTsKIAotICAgIC8vIHJlbW92ZSBhbGwgZHVwbGljYXRlZCBl
eHByZXNzaW9ucworICAgIC8vIFJlbW92ZSBhbGwgZHVwbGljYXRlZCBleHByZXNzaW9ucy4KICAg
ICBTdHJpbmcga2V5OwotICAgIGZvciAoaW50IGkgPSBtX2V4cHJlc3Npb25zLT5zaXplKCkgLSAx
OyBpID49IDA7IC0taSkgeworICAgIGZvciAoaW50IGkgPSBtX2V4cHJlc3Npb25zLnNpemUoKSAt
IDE7IGkgPj0gMDsgLS1pKSB7CiAKLSAgICAgICAgLy8gaWYgbm90IGFsbCBvZiB0aGUgZXhwcmVz
c2lvbnMgaXMgdmFsaWQgdGhlIG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdub3JlZC4KKyAgICAgICAg
Ly8gSWYgYW55IGV4cHJlc3Npb24gaXMgaW52YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBp
Z25vcmVkLgogICAgICAgICBpZiAoIW1faWdub3JlZCkKLSAgICAgICAgICAgIG1faWdub3JlZCA9
ICFtX2V4cHJlc3Npb25zLT5hdChpKS0+aXNWYWxpZCgpOworICAgICAgICAgICAgbV9pZ25vcmVk
ID0gIW1fZXhwcmVzc2lvbnNbaV0uaXNWYWxpZCgpOwogCi0gICAgICAgIGlmIChtX2V4cHJlc3Np
b25zLT5hdChpKS0+c2VyaWFsaXplKCkgPT0ga2V5KQotICAgICAgICAgICAgbV9leHByZXNzaW9u
cy0+cmVtb3ZlKGkpOworICAgICAgICBpZiAobV9leHByZXNzaW9uc1tpXS5zZXJpYWxpemUoKSA9
PSBrZXkpCisgICAgICAgICAgICBtX2V4cHJlc3Npb25zLnJlbW92ZShpKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAga2V5ID0gbV9leHByZXNzaW9ucy0+YXQoaSktPnNlcmlhbGl6ZSgpOwor
ICAgICAgICAgICAga2V5ID0gbV9leHByZXNzaW9uc1tpXS5zZXJpYWxpemUoKTsKICAgICB9CiB9
CiAKLU1lZGlhUXVlcnk6Ok1lZGlhUXVlcnkoY29uc3QgTWVkaWFRdWVyeSYgbykKLSAgICA6IG1f
cmVzdHJpY3RvcihvLm1fcmVzdHJpY3RvcikKLSAgICAsIG1fbWVkaWFUeXBlKG8ubV9tZWRpYVR5
cGUpCi0gICAgLCBtX2V4cHJlc3Npb25zKHN0ZDo6bWFrZV91bmlxdWU8RXhwcmVzc2lvblZlY3Rv
cj4oby5tX2V4cHJlc3Npb25zLT5zaXplKCkpKQotICAgICwgbV9pZ25vcmVkKG8ubV9pZ25vcmVk
KQotICAgICwgbV9zZXJpYWxpemF0aW9uQ2FjaGUoby5tX3NlcmlhbGl6YXRpb25DYWNoZSkKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9leHByZXNzaW9ucy0+c2l6ZSgpOyArK2kp
Ci0gICAgICAgICgqbV9leHByZXNzaW9ucylbaV0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVl
cnlFeHA+KCpvLm1fZXhwcmVzc2lvbnMtPmF0KGkpKTsKLX0KLQotTWVkaWFRdWVyeTo6fk1lZGlh
UXVlcnkoKQotewotfQotCiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jY29tcGFy
ZS1tZWRpYS1xdWVyaWVzCiBib29sIE1lZGlhUXVlcnk6Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFR
dWVyeSYgb3RoZXIpIGNvbnN0CiB7CkBAIC0xMjQsMTEgKzk5LDEwIEBAIGJvb2wgTWVkaWFRdWVy
eTo6b3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3QKIH0KIAogLy8gaHR0
cDovL2Rldi53My5vcmcvY3Nzd2cvY3Nzb20vI3NlcmlhbGl6ZS1hLWxpc3Qtb2YtbWVkaWEtcXVl
cmllcwotU3RyaW5nIE1lZGlhUXVlcnk6OmNzc1RleHQoKSBjb25zdAorY29uc3QgU3RyaW5nJiBN
ZWRpYVF1ZXJ5Ojpjc3NUZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV9zZXJpYWxpemF0aW9uQ2Fj
aGUuaXNOdWxsKCkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8TWVkaWFRdWVyeSo+KHRoaXMpLT5tX3Nl
cmlhbGl6YXRpb25DYWNoZSA9IHNlcmlhbGl6ZSgpOwotCisgICAgICAgIG1fc2VyaWFsaXphdGlv
bkNhY2hlID0gc2VyaWFsaXplKCk7CiAgICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNhY2hlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhUXVlcnkuaAppbmRleCA1ZjlmYTFmMTM4Y2U1MWNkODhmZWQwZTA5
ZjlhZTExNmI1NThjYzIxLi4yMDk4NGQzNTYzZWZhZWEzMTM0ZThhZmNmYzM3NWRlZThkZWIyZjI4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmgKQEAgLTI2LDQ5ICsyNiwzNyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIE1lZGlhUXVlcnlfaAotI2RlZmluZSBNZWRpYVF1ZXJ5X2gK
KyNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgIk1lZGlhUXVlcnlF
eHAuaCIKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
SGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci1jbGFzcyBNZWRpYVF1ZXJ5RXhwOwogCiBjbGFzcyBNZWRpYVF1ZXJ5IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBlbnVtIFJlc3RyaWN0b3Igewot
ICAgICAgICBPbmx5LCBOb3QsIE5vbmUKLSAgICB9OworICAgIGVudW0gUmVzdHJpY3RvciB7IE9u
bHksIE5vdCwgTm9uZSB9OwogCi0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1l
ZGlhUXVlcnlFeHA+PiBFeHByZXNzaW9uVmVjdG9yOwotCi0gICAgTWVkaWFRdWVyeShSZXN0cmlj
dG9yLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlwZSwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PiBleHBycyk7Ci0gICAgTWVkaWFRdWVyeShjb25z
dCBNZWRpYVF1ZXJ5Jik7Ci0gICAgfk1lZGlhUXVlcnkoKTsKKyAgICBNZWRpYVF1ZXJ5KFJlc3Ry
aWN0b3IsIGNvbnN0IFN0cmluZyYgbWVkaWFUeXBlLCBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Np
b24+JiYpOwogCiAgICAgUmVzdHJpY3RvciByZXN0cmljdG9yKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXN0cmljdG9yOyB9Ci0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5
RXhwPj4mIGV4cHJlc3Npb25zKCkgY29uc3QgeyByZXR1cm4gKm1fZXhwcmVzc2lvbnM7IH0KLSAg
ICBTdHJpbmcgbWVkaWFUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KLSAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwotICAgIFN0cmlu
ZyBjc3NUZXh0KCkgY29uc3Q7CisgICAgY29uc3QgVmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9u
PiYgZXhwcmVzc2lvbnMoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb25zOyB9CisgICAgY29u
c3QgU3RyaW5nJiBtZWRpYVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQogICAg
IGJvb2wgaWdub3JlZCgpIGNvbnN0IHsgcmV0dXJuIG1faWdub3JlZDsgfQogCi0gICAgc3RkOjp1
bmlxdWVfcHRyPE1lZGlhUXVlcnk+IGNvcHkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPE1lZGlhUXVlcnk+KCp0aGlzKTsgfQorICAgIGNvbnN0IFN0cmluZyYgY3NzVGV4dCgpIGNv
bnN0OwogCi0gcHJpdmF0ZToKLSAgICBSZXN0cmljdG9yIG1fcmVzdHJpY3RvcjsKLSAgICBTdHJp
bmcgbV9tZWRpYVR5cGU7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb25WZWN0b3I+IG1f
ZXhwcmVzc2lvbnM7Ci0gICAgYm9vbCBtX2lnbm9yZWQ7Ci0gICAgU3RyaW5nIG1fc2VyaWFsaXph
dGlvbkNhY2hlOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikg
Y29uc3Q7CiAKK3ByaXZhdGU6CiAgICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNvbnN0OworCisgICAg
UmVzdHJpY3RvciBtX3Jlc3RyaWN0b3I7CisgICAgU3RyaW5nIG1fbWVkaWFUeXBlOworICAgIFZl
Y3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4gbV9leHByZXNzaW9uczsKKyAgICBib29sIG1faWdu
b3JlZCB7IGZhbHNlIH07CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zZXJpYWxpemF0aW9uQ2FjaGU7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXZhbHVhdG9yLmNwcAppbmRleCBmZGNlODlhZTMwYzI3NjE2ZjkxYzk1ODdmN2ZhMjFk
YTVkYWM2NjZkLi4zNDE2NjM4YzI2OTQ0ZjUwZjkyYWYxMmNjOWFmMWYyNjk2ZWNlMTliIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC00MSw3ICs0MSw2
IEBACiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3Qu
aCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgog
I2luY2x1ZGUgIk5vZGVSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVNjcmVlbi5oIgpAQCAtNTgsNDIgKzU3LDQwIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzOwotCiBlbnVtIE1lZGlh
RmVhdHVyZVByZWZpeCB7IE1pblByZWZpeCwgTWF4UHJlZml4LCBOb1ByZWZpeCB9OwogCi10eXBl
ZGVmIGJvb2wgKCpFdmFsRnVuYykoQ1NTVmFsdWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwotdHlwZWRlZiBIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7Ci1zdGF0aWMgRnVuY3Rpb25N
YXAqIGdGdW5jdGlvbk1hcDsKK3R5cGVkZWYgYm9vbCAoKk1lZGlhUXVlcnlGdW5jdGlvbikoQ1NT
VmFsdWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRpYUZl
YXR1cmVQcmVmaXgpOwordHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNZWRpYVF1
ZXJ5RnVuY3Rpb24+IE1lZGlhUXVlcnlGdW5jdGlvbk1hcDsKIAotLyoKLSAqIEZJWE1FOiBmb2xs
b3dpbmcgbWVkaWEgZmVhdHVyZXMgYXJlIG5vdCBpbXBsZW1lbnRlZDogc2NhbgotICoKLSAqIHNj
YW46IFRoZSAic2NhbiIgbWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nl
c3Mgb2YKLSAqIHR2IG91dHB1dCBkZXZpY2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZl
IHRoaXMgaW5mb3JtYXRpb24gZnJvbQotICogdGhlIHBsYXRmb3JtCi0gKi8KK3N0YXRpYyBib29s
IGlzVmlld3BvcnREZXBlbmRlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUpCit7
CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHQKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5XaWR0aAorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkhlaWdodAorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFdpZHRoCisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4SGVpZ2h0CisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb24KKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RSYXRpbworICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkFzcGVjdFJhdGlv
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4QXNwZWN0
UmF0aW87Cit9CiAKIE1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoYm9v
bCBtZWRpYUZlYXR1cmVSZXN1bHQpCi0gICAgOiBtX2V4cFJlc3VsdChtZWRpYUZlYXR1cmVSZXN1
bHQpCisgICAgOiBtX2ZhbGxiYWNrUmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKIHsKIH0KIAog
TWVkaWFRdWVyeUV2YWx1YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFj
Y2VwdGVkTWVkaWFUeXBlLCBib29sIG1lZGlhRmVhdHVyZVJlc3VsdCkKICAgICA6IG1fbWVkaWFU
eXBlKGFjY2VwdGVkTWVkaWFUeXBlKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJlUmVz
dWx0KQorICAgICwgbV9mYWxsYmFja1Jlc3VsdChtZWRpYUZlYXR1cmVSZXN1bHQpCiB7CiB9CiAK
LU1lZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5nJiBh
Y2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUp
CitNZWRpYVF1ZXJ5RXZhbHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYg
YWNjZXB0ZWRNZWRpYVR5cGUsIERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUq
IHN0eWxlKQogICAgIDogbV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCi0gICAgLCBtX2Zy
YW1lKGZyYW1lKQorICAgICwgbV9mcmFtZShkb2N1bWVudC5mcmFtZSgpKQogICAgICwgbV9zdHls
ZShzdHlsZSkKLSAgICAsIG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVu
IHdlIGhhdmUgbV9mcmFtZSBhbmQgbV9zdHlsZQotewotfQotCi1NZWRpYVF1ZXJ5RXZhbHVhdG9y
Ojp+TWVkaWFRdWVyeUV2YWx1YXRvcigpCiB7CiB9CiAKQEAgLTExOCw4MiArMTE1LDc0IEBAIHN0
YXRpYyBib29sIGFwcGx5UmVzdHJpY3RvcihNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yIHIsIGJvb2wg
dmFsdWUpCiAgICAgcmV0dXJuIHIgPT0gTWVkaWFRdWVyeTo6Tm90ID8gIXZhbHVlIDogdmFsdWU7
CiB9CiAKLWJvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5U2V0
KiBxdWVyeVNldCwgU3R5bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QKK2Jvb2wgTWVk
aWFRdWVyeUV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQs
IFN0eWxlUmVzb2x2ZXIqIHN0eWxlUmVzb2x2ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFxdWVyeVNl
dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvJiBxdWVyaWVzID0gcXVlcnlTZXQt
PnF1ZXJ5VmVjdG9yKCk7CisgICAgYXV0byYgcXVlcmllcyA9IHF1ZXJ5U2V0LnF1ZXJ5VmVjdG9y
KCk7CiAgICAgaWYgKCFxdWVyaWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGVt
cHR5IHF1ZXJ5IGxpc3QgZXZhbHVhdGVzIHRvIHRydWUKIAogICAgIC8vIGl0ZXJhdGUgb3ZlciBx
dWVyaWVzLCBzdG9wIGlmIGFueSBvZiB0aGVtIGV2YWwgdG8gdHJ1ZSAoT1Igc2VtYW50aWNzKQog
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVy
aWVzLnNpemUoKSAmJiAhcmVzdWx0OyArK2kpIHsKLSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkg
PSBxdWVyaWVzW2ldLmdldCgpOworICAgICAgICBhdXRvJiBxdWVyeSA9IHF1ZXJpZXNbaV07CiAK
LSAgICAgICAgaWYgKHF1ZXJ5LT5pZ25vcmVkKCkgfHwgKCFxdWVyeS0+ZXhwcmVzc2lvbnMoKS5z
aXplKCkgJiYgcXVlcnktPm1lZGlhVHlwZSgpLmlzRW1wdHkoKSkpCisgICAgICAgIGlmIChxdWVy
eS5pZ25vcmVkKCkgfHwgKCFxdWVyeS5leHByZXNzaW9ucygpLnNpemUoKSAmJiBxdWVyeS5tZWRp
YVR5cGUoKS5pc0VtcHR5KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYg
KG1lZGlhVHlwZU1hdGNoKHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAgICAgIGF1dG8m
IGV4cHJlc3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAgICAgICAvLyBpdGVy
YXRlIHRocm91Z2ggZXhwcmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0byBmYWxz
ZQotICAgICAgICAgICAgLy8gKEFORCBzZW1hbnRpY3MpCisgICAgICAgIGlmIChtZWRpYVR5cGVN
YXRjaChxdWVyeS5tZWRpYVR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25z
ID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBl
eHByZXNzaW9ucywgc3RvcCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIGZhbHNlIChBTkQgc2VtYW50
aWNzKQogICAgICAgICAgICAgc2l6ZV90IGogPSAwOwogICAgICAgICAgICAgZm9yICg7IGogPCBl
eHByZXNzaW9ucy5zaXplKCk7ICsraikgewotICAgICAgICAgICAgICAgIGJvb2wgZXhwclJlc3Vs
dCA9IGV2YWwoZXhwcmVzc2lvbnMuYXQoaikuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChz
dHlsZVJlc29sdmVyICYmIGV4cHJlc3Npb25zLmF0KGopLT5pc1ZpZXdwb3J0RGVwZW5kZW50KCkp
Ci0gICAgICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXItPmFkZFZpZXdwb3J0RGVwZW5kZW50
TWVkaWFRdWVyeVJlc3VsdChleHByZXNzaW9ucy5hdChqKS5nZXQoKSwgZXhwclJlc3VsdCk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFleHByUmVzdWx0KQorICAgICAgICAgICAgICAgIGJvb2wgZXhw
cmVzc2lvblJlc3VsdCA9IGV2YWx1YXRlKGV4cHJlc3Npb25zW2pdKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc3R5bGVSZXNvbHZlciAmJiBpc1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pd
Lm1lZGlhRmVhdHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+YWRk
Vmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KGV4cHJlc3Npb25zW2pdLCBleHByZXNz
aW9uUmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25SZXN1bHQpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBh
c3N1bWUgdHJ1ZSBpZiB3ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwKICAgICAgICAgICAg
IC8vIG90aGVyd2lzZSBhc3N1bWUgZmFsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVz
dHJpY3RvcihxdWVyeS0+cmVzdHJpY3RvcigpLCBleHByZXNzaW9ucy5zaXplKCkgPT0gaik7Cisg
ICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVzdHJpY3RvcigpLCBl
eHByZXNzaW9ucy5zaXplKCkgPT0gaik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVz
dWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGZhbHNlKTsKKyAgICAg
ICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGZhbHNl
KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFs
dWF0b3I6OmV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBxdWVyeVNldCwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0
Pj4mIHJlc3VsdHMpCitib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQmIHF1ZXJ5U2V0LCBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdD4mIHJlc3VsdHMp
IGNvbnN0CiB7Ci0gICAgaWYgKCFxdWVyeVNldCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAg
ICBhdXRvJiBxdWVyaWVzID0gcXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCk7CisgICAgYXV0byYgcXVl
cmllcyA9IHF1ZXJ5U2V0LnF1ZXJ5VmVjdG9yKCk7CiAgICAgaWYgKCFxdWVyaWVzLnNpemUoKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcXVlcmllcy5zaXplKCkgJiYgIXJlc3VsdDsgKytpKSB7Ci0g
ICAgICAgIE1lZGlhUXVlcnkqIHF1ZXJ5ID0gcXVlcmllc1tpXS5nZXQoKTsKKyAgICAgICAgYXV0
byYgcXVlcnkgPSBxdWVyaWVzW2ldOwogCi0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpKQor
ICAgICAgICBpZiAocXVlcnkuaWdub3JlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaWYgKG1lZGlhVHlwZU1hdGNoKHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAg
ICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7CisgICAgICAgIGlm
IChtZWRpYVR5cGVNYXRjaChxdWVyeS5tZWRpYVR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8m
IGV4cHJlc3Npb25zID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKICAgICAgICAgICAgIHNpemVfdCBq
ID0gMDsKICAgICAgICAgICAgIGZvciAoOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsK
LSAgICAgICAgICAgICAgICBib29sIGV4cHJSZXN1bHQgPSBldmFsKGV4cHJlc3Npb25zLmF0KGop
LmdldCgpKTsKLSAgICAgICAgICAgICAgICBpZiAoZXhwcmVzc2lvbnMuYXQoaiktPmlzVmlld3Bv
cnREZXBlbmRlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc3RkOjpt
YWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5UmVzdWx0PigqZXhwcmVzc2lvbnMuYXQoaiksIGV4cHJSZXN1
bHQpKTsKLSAgICAgICAgICAgICAgICBpZiAoIWV4cHJSZXN1bHQpCisgICAgICAgICAgICAgICAg
Ym9vbCBleHByZXNzaW9uUmVzdWx0ID0gZXZhbHVhdGUoZXhwcmVzc2lvbnNbal0pOworICAgICAg
ICAgICAgICAgIGlmIChpc1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVh
dHVyZSgpKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBleHByZXNzaW9u
c1tqXSwgZXhwcmVzc2lvblJlc3VsdCB9KTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Np
b25SZXN1bHQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGV4
cHJlc3Npb25zLnNpemUoKSA9PSBqKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJp
Y3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUoKSA9PSBqKTsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJl
c3RyaWN0b3IoKSwgZmFsc2UpOworICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9y
KHF1ZXJ5LnJlc3RyaWN0b3IoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1ib29sIGNvbXBhcmVWYWx1ZShUIGEsIFQgYiwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4g
Ym9vbCBjb21wYXJlVmFsdWUoVCBhLCBVIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAg
ICBzd2l0Y2ggKG9wKSB7CiAgICAgY2FzZSBNaW5QcmVmaXg6CkBAIC0yMDgsNDUgKzE5Nyw0OSBA
QCBib29sIGNvbXBhcmVWYWx1ZShUIGEsIFQgYiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogCiBz
dGF0aWMgYm9vbCBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGludCB3
aWR0aCwgaW50IGhlaWdodCwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmIChpczxD
U1NBc3BlY3RSYXRpb1ZhbHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFs
dWUmIGFzcGVjdFJhdGlvID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKTsK
LSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZSh3aWR0aCAqIHN0YXRpY19jYXN0PGludD4oYXNw
ZWN0UmF0aW8uZGVub21pbmF0b3JWYWx1ZSgpKSwgaGVpZ2h0ICogc3RhdGljX2Nhc3Q8aW50Pihh
c3BlY3RSYXRpby5udW1lcmF0b3JWYWx1ZSgpKSwgb3ApOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIWlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KHZhbHVlKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGF1dG8mIGFzcGVjdFJhdGlvID0gZG93bmNhc3Q8Q1NTQXNwZWN0
UmF0aW9WYWx1ZT4oKnZhbHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogYXNw
ZWN0UmF0aW8uZGVub21pbmF0b3JWYWx1ZSgpLCBoZWlnaHQgKiBhc3BlY3RSYXRpby5udW1lcmF0
b3JWYWx1ZSgpLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2
YWx1ZSwgZmxvYXQmIHJlc3VsdCkKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IGRvdWJsZVZhbHVl
KENTU1ZhbHVlKiB2YWx1ZSkKIHsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkgewot
ICAgICAgICByZXN1bHQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRG
bG9hdFZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkgfHwgIWRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybiBOdWxsb3B0OworICAgIHJldHVybiBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUik7CiB9CiAKLXN0YXRpYyBib29sIGNvbG9yTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHplcm9FdmFsdWF0ZShD
U1NWYWx1ZSogdmFsdWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpbnQgYml0c1Bl
ckNvbXBvbmVudCA9IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KGZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKSk7Ci0gICAgZmxvYXQgbnVtYmVyOwotICAgIGlmICh2YWx1ZSkKLSAgICAg
ICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZShiaXRz
UGVyQ29tcG9uZW50LCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLQotICAgIHJldHVy
biBiaXRzUGVyQ29tcG9uZW50ICE9IDA7CisgICAgYXV0byBudW1lcmljVmFsdWUgPSBkb3VibGVW
YWx1ZSh2YWx1ZSk7CisgICAgcmV0dXJuIG51bWVyaWNWYWx1ZSAmJiBjb21wYXJlVmFsdWUoMCwg
bnVtZXJpY1ZhbHVlLnZhbHVlKCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgY29sb3JfaW5kZXhN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgb25l
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAg
Ly8gRklYTUU6IEl0J3MgdW5rbm93biBob3cgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGlm
IHRoZSBkaXNwbGF5IG1vZGUgaXMgaW5kZXhlZAotICAgIC8vIEFzc3VtZSB3ZSBkb24ndCBzdXBw
b3J0IGluZGV4ZWQgZGlzcGxheS4KICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGF1dG8gbnVtZXJpY1ZhbHVlID0gZG91Ymxl
VmFsdWUodmFsdWUpOworICAgIHJldHVybiBudW1lcmljVmFsdWUgJiYgY29tcGFyZVZhbHVlKDEs
IG51bWVyaWNWYWx1ZS52YWx1ZSgpLCBvcCk7Cit9CiAKLSAgICBmbG9hdCBudW1iZXI7Ci0gICAg
cmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZSgwLCBzdGF0
aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKK3N0YXRpYyBib29sIGNvbG9yRXZhbHVhdGUoQ1NT
VmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZy
YW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCit7CisgICAgaW50IGJpdHNQZXJDb21wb25lbnQg
PSBzY3JlZW5EZXB0aFBlckNvbXBvbmVudChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpOworICAg
IGF1dG8gbnVtZXJpY1ZhbHVlID0gZG91YmxlVmFsdWUodmFsdWUpOworICAgIGlmICghbnVtZXJp
Y1ZhbHVlKQorICAgICAgICByZXR1cm4gYml0c1BlckNvbXBvbmVudDsKKyAgICByZXR1cm4gY29t
cGFyZVZhbHVlKGJpdHNQZXJDb21wb25lbnQsIG51bWVyaWNWYWx1ZS52YWx1ZSgpLCBvcCk7Cit9
CisKK3N0YXRpYyBib29sIGNvbG9ySW5kZXhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKK3sKKyAgICAvLyBBbHdheXMgcmV0dXJuIGZhbHNlIGZvciBpbmRleGVkIGRpc3BsYXkuCisg
ICAgcmV0dXJuIHplcm9FdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBjb2xv
cl9nYW11dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0
aWMgYm9vbCBjb2xvckdhbXV0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTUsMTIgKzI0OCwx
MCBAQCBzdGF0aWMgYm9vbCBjb2xvcl9nYW11dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcgogICAgIGNhc2UgQ1NTVmFsdWVTcmdiOgogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICBjYXNlIENTU1ZhbHVlUDM6Ci0gICAgICAgIC8vIEZJWE1F
OiBGb3IgdGhlIG1vbWVudCB3ZSdsbCBqdXN0IGFzc3VtZSBhbiAiZXh0ZW5kZWQKLSAgICAgICAg
Ly8gY29sb3IiIGRpc3BsYXkgaXMgYXQgbGVhc3QgYXMgZ29vZCBhcyBQMy4KLSAgICAgICAgcmV0
dXJuIHNjcmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcihmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUo
KS52aWV3KCkpOworICAgICAgICAvLyBGSVhNRTogRm9yIHRoZSBtb21lbnQgd2UganVzdCBhc3N1
bWUgYW55ICJleHRlbmRlZCBjb2xvciIgZGlzcGxheSBpcyBhdCBsZWFzdCBhcyBnb29kIGFzIFAz
LgorICAgICAgICByZXR1cm4gc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKGZyYW1lLm1haW5G
cmFtZSgpLnZpZXcoKSk7CiAgICAgY2FzZSBDU1NWYWx1ZVJlYzIwMjA6Ci0gICAgICAgIC8vIEZJ
WE1FOiBBdCBzb21lIHBvaW50IHdlIHNob3VsZCBzdGFydCBkZXRlY3RpbmcgZGlzcGxheXMgdGhh
dAotICAgICAgICAvLyBzdXBwb3J0IG1vcmUgY29sb3JzLgorICAgICAgICAvLyBGSVhNRTogQXQg
c29tZSBwb2ludCB3ZSBzaG91bGQgc3RhcnQgZGV0ZWN0aW5nIGRpc3BsYXlzIHRoYXQgc3VwcG9y
dCBtb3JlIGNvbG9ycy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjY4LDkwICsyNTksODIgQEAgc3RhdGljIGJv
b2wgY29sb3JfZ2FtdXRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXIKICAgICB9CiB9CiAKLXN0YXRpYyBib29sIG1vbm9jaHJvbWVNZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQor
c3RhdGljIGJvb2wgbW9ub2Nocm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lKGZyYW1l
LT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKSkpIHsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0g
ICAgICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUo
dmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDAsIHN0YXRpY19jYXN0PGludD4obnVtYmVy
KSwgb3ApOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY29sb3JNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IG9wKTsKKyAgICBpZiAoIXNjcmVlbklzTW9ub2Nocm9tZShmcmFtZS5tYWluRnJhbWUoKS52aWV3
KCkpKQorICAgICAgICByZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CisgICAgcmV0dXJu
IGNvbG9yRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgb3ApOwogfQogCi1z
dGF0aWMgYm9vbCBpbnZlcnRlZF9jb2xvcnNNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgaW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKIHsKICAgICBib29sIGlzSW52ZXJ0ZWQgPSBzY3JlZW5IYXNJbnZlcnRlZENvbG9y
cygpOwotCiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGlzSW52ZXJ0ZWQ7Ci0KLSAg
ICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1
ZSkuZ2V0VmFsdWVJRCgpOwotICAgIHJldHVybiAoaXNJbnZlcnRlZCAmJiBpZCA9PSBDU1NWYWx1
ZUludmVydGVkKSB8fCAoIWlzSW52ZXJ0ZWQgJiYgaWQgPT0gQ1NTVmFsdWVOb25lKTsKKyAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09
IChpc0ludmVydGVkID8gQ1NTVmFsdWVJbnZlcnRlZCA6IENTU1ZhbHVlTm9uZSk7CiB9CiAKLXN0
YXRpYyBib29sIG9yaWVudGF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCkKK3N0YXRpYyBib29sIG9yaWVudGF0aW9uRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpbnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOwot
ICAgIGludCBoZWlnaHQgPSB2aWV3LT5sYXlvdXRIZWlnaHQoKTsKLSAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkgewotICAgICAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwotICAgICAgICBp
ZiAod2lkdGggPiBoZWlnaHQpIC8vIFNxdWFyZSB2aWV3cG9ydCBpcyBwb3J0cmFpdC4KLSAgICAg
ICAgICAgIHJldHVybiBDU1NWYWx1ZUxhbmRzY2FwZSA9PSBpZDsKLSAgICAgICAgcmV0dXJuIENT
U1ZhbHVlUG9ydHJhaXQgPT0gaWQ7CisgICAgYXV0byB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRo
KCk7CisgICAgYXV0byBoZWlnaHQgPSB2aWV3LT5sYXlvdXRIZWlnaHQoKTsKKworICAgIGlmICgh
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICAvLyBFeHByZXNzaW9uIChv
cmllbnRhdGlvbikgZXZhbHVhdGVzIHRvIHRydWUgaWYgd2lkdGggYW5kIGhlaWdodCA+PSAwLgor
ICAgICAgICByZXR1cm4gaGVpZ2h0ID49IDAgJiYgd2lkdGggPj0gMDsKICAgICB9CiAKLSAgICAv
LyBFeHByZXNzaW9uIChvcmllbnRhdGlvbikgZXZhbHVhdGVzIHRvIHRydWUgaWYgd2lkdGggYW5k
IGhlaWdodCA+PSAwLgotICAgIHJldHVybiBoZWlnaHQgPj0gMCAmJiB3aWR0aCA+PSAwOworICAg
IGF1dG8ga2V5d29yZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZh
bHVlSUQoKTsKKyAgICBpZiAod2lkdGggPiBoZWlnaHQpIC8vIFNxdWFyZSB2aWV3cG9ydCBpcyBw
b3J0cmFpdC4KKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVMYW5kc2NhcGU7Cisg
ICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVQb3J0cmFpdDsKIH0KIAotc3RhdGljIGJvb2wg
YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKK3N0YXRpYyBib29sIGFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXggb3ApCiB7Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBp
ZiAoIXZpZXcpCisgICAgLy8gKHssbWluLSxtYXgtfWFzcGVjdC1yYXRpbykKKyAgICAvLyBhc3N1
bWUgaWYgd2UgaGF2ZSBhIGRldmljZSwgaXRzIGFzcGVjdCByYXRpbyBpcyBub24temVybworICAg
IGlmICghdmFsdWUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHZhbHVlKQotICAg
ICAgICByZXR1cm4gY29tcGFyZUFzcGVjdFJhdGlvVmFsdWUodmFsdWUsIHZpZXctPmxheW91dFdp
ZHRoKCksIHZpZXctPmxheW91dEhlaWdodCgpLCBvcCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWUudmlldygpOworICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICAvLyAoeyxtaW4tLG1heC19YXNwZWN0LXJhdGlvKQotICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZl
IGEgZGV2aWNlLCBpdHMgYXNwZWN0IHJhdGlvIGlzIG5vbi16ZXJvCi0gICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVlKHZhbHVlLCB2aWV3LT5sYXlvdXRX
aWR0aCgpLCB2aWV3LT5sYXlvdXRIZWlnaHQoKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBkZXZp
Y2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZp
eCBvcCkKK3N0YXRpYyBib29sIGRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIEZsb2F0UmVj
dCBzZyA9IHNjcmVlblJlY3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKTsKLSAg
ICAgICAgcmV0dXJuIGNvbXBhcmVBc3BlY3RSYXRpb1ZhbHVlKHZhbHVlLCBzdGF0aWNfY2FzdDxp
bnQ+KHNnLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSwgb3ApOwotICAg
IH0KLQogICAgIC8vICh7LG1pbi0sbWF4LX1kZXZpY2UtYXNwZWN0LXJhdGlvKQogICAgIC8vIGFz
c3VtZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBpdHMgYXNwZWN0IHJhdGlvIGlzIG5vbi16ZXJvCi0g
ICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBhdXRvIHNpemUgPSBzY3JlZW5SZWN0KGZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSkuc2l6
ZSgpOworICAgIHJldHVybiBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZSh2YWx1ZSwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9u
KENTU1ZhbHVlKiB2YWx1ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitz
dGF0aWMgYm9vbCBldmFsdWF0ZVJlc29sdXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBGcmFtZSYgZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICAvLyBGSVhNRTogUG9zc2libGUgaGFu
ZGxlIG90aGVyIG1lZGlhIHR5cGVzIHRoYW4gJ3NjcmVlbicgYW5kICdwcmludCcuCi0gICAgRnJh
bWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFt
ZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IDA7CisKICAgICAvLyBUaGlzIGNoZWNrcyB0aGUgYWN0
dWFsIG1lZGlhIHR5cGUgYXBwbGllZCB0byB0aGUgZG9jdW1lbnQsIGFuZCB3ZSBrbm93CiAgICAg
Ly8gdGhpcyBtZXRob2Qgb25seSBnb3QgY2FsbGVkIGlmIHRoaXMgbWVkaWEgdHlwZSBtYXRjaGVz
IHRoZSBvbmUgZGVmaW5lZAogICAgIC8vIGluIHRoZSBxdWVyeS4gVGh1cywgaWYgaWYgdGhlIGRv
Y3VtZW50J3MgbWVkaWEgdHlwZSBpcyAicHJpbnQiLCB0aGUKICAgICAvLyBtZWRpYSB0eXBlIG9m
IHRoZSBxdWVyeSB3aWxsIGVpdGhlciBiZSAicHJpbnQiIG9yICJhbGwiLgogICAgIFN0cmluZyBt
ZWRpYVR5cGUgPSB2aWV3LT5tZWRpYVR5cGUoKTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3Jp
bmdBU0NJSUNhc2UobWVkaWFUeXBlLCAic2NyZWVuIikpCi0gICAgICAgIGRldmljZVNjYWxlRmFj
dG9yID0gZnJhbWUtPnBhZ2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgZGV2aWNl
U2NhbGVGYWN0b3IgPSBmcmFtZS5wYWdlKCkgPyBmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFj
dG9yKCkgOiAxOwogICAgIGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1l
ZGlhVHlwZSwgInByaW50IikpIHsKICAgICAgICAgLy8gVGhlIHJlc29sdXRpb24gb2YgaW1hZ2Vz
IHdoaWxlIHByaW50aW5nIHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBkcGkKICAgICAgICAgLy8g
b2YgdGhlIHNjcmVlbi4gVW50aWwgd2Ugc3VwcG9ydCBwcm9wZXIgd2F5cyBvZiBxdWVyeWluZyB0
aGlzIGluZm8KQEAgLTM2MiwyMiArMzQ1LDIyIEBAIHN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9u
KENTU1ZhbHVlKiB2YWx1ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAg
ICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuICEhZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHJlc29sdXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZh
bHVlKTsKKyAgICBhdXRvJiByZXNvbHV0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CiAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZShkZXZpY2VTY2FsZUZhY3RvciwgcmVz
b2x1dGlvbi5pc051bWJlcigpID8gcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKCkgOiByZXNvbHV0
aW9uLmdldEZsb2F0VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKSwgb3ApOwogfQog
Ci1zdGF0aWMgYm9vbCBkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
ICp2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZGV2aWNlUGl4ZWxSYXRpb0V2YWx1
YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZy
YW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIHJldHVybiAoIXZhbHVl
IHx8IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2
YWxSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IChp
czxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKS5pc051bWJlcigpKSkgJiYgZXZhbHVhdGVSZXNvbHV0aW9uKHZhbHVlLCBmcmFt
ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHJlc29sdXRpb25FdmFsdWF0
ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFt
ZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICNpZiBFTkFCTEUoUkVTT0xVVElP
Tl9NRURJQV9RVUVSWSkKLSAgICByZXR1cm4gKCF2YWx1ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKS5pc1Jlc29sdXRpb24oKSkgJiYgZXZhbFJlc29sdXRpb24odmFsdWUs
IGZyYW1lLCBvcCk7CisgICAgcmV0dXJuICghdmFsdWUgfHwgKGlzPENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUmVzb2x1
dGlvbigpKSkgJiYgZXZhbHVhdGVSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOwogI2Vsc2UK
ICAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CkBAIC0z
ODYsMjIgKzM2OSwxNyBAQCBzdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVycwogI2VuZGlmCiB9CiAKLXN0
YXRpYyBib29sIGdyaWRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQor
c3RhdGljIGJvb2wgZ3JpZEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAg
IC8vIGlmIG91dHB1dCBkZXZpY2UgaXMgYml0bWFwLCBncmlkOiAwID09IHRydWUKLSAgICAvLyBh
c3N1bWUgd2UgaGF2ZSBiaXRtYXAgZGV2aWNlCi0gICAgZmxvYXQgbnVtYmVyOwotICAgIGlmICh2
YWx1ZSAmJiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSkKLSAgICAgICAgcmV0dXJuIGNvbXBh
cmVWYWx1ZShzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIDAsIG9wKTsKLSAgICByZXR1cm4gZmFs
c2U7CisgICAgcmV0dXJuIHplcm9FdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCiBzdGF0aWMgYm9v
bCBjb21wdXRlTGVuZ3RoKENTU1ZhbHVlKiB2YWx1ZSwgYm9vbCBzdHJpY3QsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBpbnQmIHJlc3VsdCkKIHsKLSAg
ICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KCp2YWx1ZSk7CisgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnZhbHVlKTsKIAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7
CiAgICAgICAgIHJlc3VsdCA9IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CkBAIC00MTYs
MjcxICszOTQsMjI3IEBAIHN0YXRpYyBib29sIGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVl
LCBib29sIHN0cmljdCwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmlj
ZUhlaWdodEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQogewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5S
ZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKSk7Ci0gICAgICAgIGludCBsZW5n
dGg7Ci0gICAgICAgIGxvbmcgaGVpZ2h0ID0gc2cuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBj
b21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBj
b252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50Piho
ZWlnaHQpLCBsZW5ndGgsIG9wKTsKLSAgICB9CiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS1o
ZWlnaHQpCiAgICAgLy8gYXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVy
bwotICAgIHJldHVybiB0cnVlOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGludCBsZW5ndGg7CisgICAgYXV0byBoZWlnaHQgPSBzY3JlZW5SZWN0KGZyYW1lLm1h
aW5GcmFtZSgpLnZpZXcoKSkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFs
dWUsICFmcmFtZS5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxl
bmd0aCkgJiYgY29tcGFyZVZhbHVlKGhlaWdodCwgbGVuZ3RoLCBvcCk7CiB9CiAKLXN0YXRpYyBi
b29sIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBN
ZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VXaWR0aEV2YWx1YXRlKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICh2
YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCkt
Pm1haW5GcmFtZSgpLnZpZXcoKSk7Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIGxvbmcg
d2lkdGggPSBzZy53aWR0aCgpOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwg
IWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0
aCkgJiYgY29tcGFyZVZhbHVlKHN0YXRpY19jYXN0PGludD4od2lkdGgpLCBsZW5ndGgsIG9wKTsK
LSAgICB9CiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS13aWR0aCkKICAgICAvLyBhc3N1bWUg
aWYgd2UgaGF2ZSBhIGRldmljZSwgYXNzdW1lIG5vbi16ZXJvCi0gICAgcmV0dXJuIHRydWU7Cisg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW50IGxlbmd0aDsKKyAg
ICBhdXRvIHdpZHRoID0gc2NyZWVuUmVjdChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpLndpZHRo
KCk7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS5kb2N1bWVudCgpLT5p
blF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHdp
ZHRoLCBsZW5ndGgsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZh
bChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBi
b29sIGhlaWdodEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQogewotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgRnJh
bWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGludCBoZWlnaHQgPSB2aWV3
LT5sYXlvdXRIZWlnaHQoKTsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBm
cmFtZS0+ZG9jdW1lbnQoKS0+cmVuZGVyVmlldygpKQotICAgICAgICAgICAgaGVpZ2h0ID0gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKGhlaWdodCwgKnJlbmRlclZpZXcpOwotICAgICAgICBpbnQgbGVu
Z3RoOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZh
bHVlKGhlaWdodCwgbGVuZ3RoLCBvcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpZXctPmxheW91
dEhlaWdodCgpICE9IDA7CisgICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOwor
ICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiBoZWlnaHQ7CisgICAgaWYgKGF1dG8qIHJl
bmRlclZpZXcgPSBmcmFtZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgICAgIGhlaWdo
dCA9IGFkanVzdEZvckFic29sdXRlWm9vbShoZWlnaHQsICpyZW5kZXJWaWV3KTsKKyAgICBpbnQg
bGVuZ3RoOworICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUuZG9jdW1lbnQo
KS0+aW5RdWlya3NNb2RlKCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1
ZShoZWlnaHQsIGxlbmd0aCwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB3aWR0aE1lZGlhRmVhdHVy
ZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0
aWMgYm9vbCB3aWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4IG9wKQogewotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAg
RnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGludCB3aWR0aCA9IHZp
ZXctPmxheW91dFdpZHRoKCk7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0g
ZnJhbWUtPmRvY3VtZW50KCktPnJlbmRlclZpZXcoKSkKLSAgICAgICAgICAgIHdpZHRoID0gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKHdpZHRoLCAqcmVuZGVyVmlldyk7Ci0gICAgICAgIGludCBsZW5n
dGg7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50
KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFs
dWUod2lkdGgsIGxlbmd0aCwgb3ApOwotICAgIH0KLQotICAgIHJldHVybiB2aWV3LT5sYXlvdXRX
aWR0aCgpICE9IDA7CisgICAgaW50IHdpZHRoID0gdmlldy0+bGF5b3V0V2lkdGgoKTsKKyAgICBp
ZiAoIXZhbHVlKQorICAgICAgICByZXR1cm4gd2lkdGg7CisgICAgaWYgKGF1dG8qIHJlbmRlclZp
ZXcgPSBmcmFtZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgICAgIHdpZHRoID0gYWRq
dXN0Rm9yQWJzb2x1dGVab29tKHdpZHRoLCAqcmVuZGVyVmlldyk7CisgICAgaW50IGxlbmd0aDsK
KyAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCktPmluUXVp
cmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUod2lkdGgs
IGxlbmd0aCwgb3ApOwogfQogCi0vLyByZXN0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIHRyYW1wb2xp
bmVzIHdoaWNoIHNldCB0aGUgcHJlZml4IGFjY29yZGluZyB0byB0aGUgbWVkaWEgZmVhdHVyZSBl
eHByZXNzaW9uIHVzZWQKLQotc3RhdGljIGJvb2wgbWluX2NvbG9yTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1p
bkNvbG9yRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRh
dGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBjb2xvckV2YWx1YXRlKHZhbHVlLCBj
b252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9j
b2xvck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhDb2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4g
Y29sb3JFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtaW5fY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEs
IEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluQ29sb3JJ
bmRleEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQog
ewotICAgIHJldHVybiBjb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNp
b25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JJbmRleEV2YWx1YXRl
KHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBi
b29sIG1heF9jb2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhDb2xvckluZGV4RXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJu
IGNvbG9yX2luZGV4TWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1l
LCBNYXhQcmVmaXgpOworICAgIHJldHVybiBjb2xvckluZGV4RXZhbHVhdGUodmFsdWUsIGNvbnZl
cnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX21vbm9j
aHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgbWluTW9ub2Nocm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBtb25vY2hyb21lTWVk
aWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwor
ICAgIHJldHVybiBtb25vY2hyb21lRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X21vbm9jaHJvbWVNZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgbWF4TW9ub2Nocm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBtb25v
Y2hyb21lRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsK
IH0KIAotc3RhdGljIGJvb2wgbWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Bc3Bl
Y3RSYXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewotICAgIHJldHVybiBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252
ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGFzcGVjdFJhdGlvRXZh
bHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3Rh
dGljIGJvb2wgbWF4X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhBc3BlY3RSYXRpb0V2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAg
IHJldHVybiBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIGFzcGVjdFJhdGlvRXZhbHVhdGUodmFs
dWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wg
bWluX2RldmljZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluRGV2aWNlQXNwZWN0UmF0
aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsK
LSAgICByZXR1cm4gZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlQXNwZWN0
UmF0aW9FdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBt
YXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0
dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJl
dHVybiBkZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJh
bWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2VfcGl4ZWxfcmF0aW9N
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQorc3RhdGljIGJvb2wgbWluRGV2aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1
ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1l
JiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2VfcGl4ZWxf
cmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblBy
ZWZpeCk7CisgICAgcmV0dXJuIGRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSh2YWx1ZSwgY29udmVy
c2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNl
X3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZShD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4g
ZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEs
IGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUo
dmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJv
b2wgbWluX2hlaWdodE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5IZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBG
cmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gaGVpZ2h0TWVk
aWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwor
ICAgIHJldHVybiBoZWlnaHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBN
aW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1h
eEhlaWdodEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewotICAgIHJldHVybiBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9u
RGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0dXJuIGhlaWdodEV2YWx1YXRlKHZhbHVl
LCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1p
bl93aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5XaWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiB3aWR0aE1lZGlhRmVhdHVy
ZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1
cm4gd2lkdGhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgp
OwogfQogCi1zdGF0aWMgYm9vbCBtYXhfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZy
YW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4V2lkdGhFdmFs
dWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICBy
ZXR1cm4gd2lkdGhNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUs
IE1heFByZWZpeCk7CisgICAgcmV0dXJuIHdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9oZWln
aHRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4KQorc3RhdGljIGJvb2wgbWluRGV2aWNlSGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUm
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9oZWlnaHRN
ZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7
CisgICAgcmV0dXJuIGRldmljZUhlaWdodEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwg
ZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9kZXZpY2VfaGVpZ2h0TWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
K3N0YXRpYyBib29sIG1heERldmljZUhlaWdodEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2VfaGVpZ2h0TWVkaWFG
ZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAg
IHJldHVybiBkZXZpY2VIZWlnaHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1l
LCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX3dpZHRoTWVkaWFGZWF0
dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRp
YyBib29sIG1pbkRldmljZVdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4g
ZGV2aWNlV2lkdGhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVm
aXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1h
eERldmljZVdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUs
IGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlV2lk
dGhFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQog
Ci1zdGF0aWMgYm9vbCBtaW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJh
bWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5SZXNvbHV0aW9u
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0g
ICAgcmV0dXJuIHJlc29sdXRpb25NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIHJlc29sdXRpb25FdmFsdWF0ZSh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBt
YXhfcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhSZXNvbHV0aW9uRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHJlc29s
dXRpb25NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFBy
ZWZpeCk7CisgICAgcmV0dXJuIHJlc29sdXRpb25FdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRh
dGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBhbmltYXRpb25NZWRpYUZl
YXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgYW5pbWF0aW9u
RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0g
ICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBu
dW1iZXIpICYmIGNvbXBhcmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIG9uZUV2YWx1YXRlKHZhbHVlLCBv
cCk7CiB9CiAKLXN0YXRpYyBib29sIHRyYW5zaXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgdHJhbnNpdGlvbkV2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFG
ZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBmbG9hdCBudW1i
ZXI7Ci0gICAgICAgIHJldHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJl
VmFsdWUoMSwgc3RhdGljX2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMg
Ym9vbCB0cmFuc2Zvcm1fMmRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9w
KQorc3RhdGljIGJvb2wgdHJhbnNmb3JtMmRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBv
cCkKIHsKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICBy
ZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDEsIHN0YXRp
Y19jYXN0PGludD4obnVtYmVyKSwgb3ApOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBy
ZXR1cm4gb25lRXZhbHVhdGUodmFsdWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgdHJhbnNmb3Jt
XzNkTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRp
YyBib29sIHRyYW5zZm9ybTNkRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3Ap
CiB7Ci0gICAgYm9vbCByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7Ci0gICAgaW50IGhhdmUzZFJl
bmRlcmluZzsKLQogI2lmIEVOQUJMRSgzRF9UUkFOU0ZPUk1TKQotICAgIGJvb2wgdGhyZWVERW5h
YmxlZCA9IGZhbHNlOwotICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRlbnRS
ZW5kZXJlcigpKQotICAgICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRvcigpLmNh
blJlbmRlcjNEVHJhbnNmb3JtcygpOwotCi0gICAgcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyID0g
dGhyZWVERW5hYmxlZDsKLSAgICBoYXZlM2RSZW5kZXJpbmcgPSB0aHJlZURFbmFibGVkID8gMSA6
IDA7CisgICAgYXV0byogdmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpOworICAgIHJldHVy
biB2aWV3ICYmIHZpZXctPmNvbXBvc2l0b3IoKS5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSA/IG9u
ZUV2YWx1YXRlKHZhbHVlLCBvcCkgOiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsKICNlbHNlCiAg
ICAgVU5VU0VEX1BBUkFNKGZyYW1lKTsKLSAgICByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXIgPSBm
YWxzZTsKLSAgICBoYXZlM2RSZW5kZXJpbmcgPSAwOworICAgIHJldHVybiB6ZXJvRXZhbHVhdGUo
dmFsdWUsIG9wKTsKICNlbmRpZgotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZsb2F0IG51
bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBh
cmVWYWx1ZShoYXZlM2RSZW5kZXJpbmcsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOwot
ICAgIH0KLSAgICByZXR1cm4gcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyOwogfQogCiAjaWYgRU5B
QkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCi1zdGF0aWMgYm9vbCB2aWV3X21vZGVNZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYs
IEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorCitzdGF0aWMgYm9vbCB2aWV3
TW9kZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIFVOVVNFRF9Q
QVJBTShvcCk7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBj
b25zdCBpbnQgdmlld01vZGVDU1NLZXl3b3JkSUQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKS5nZXRWYWx1ZUlEKCk7Ci0gICAgY29uc3QgUGFnZTo6Vmlld01vZGUgdmlld01v
ZGUgPSBmcmFtZS0+cGFnZSgpLT52aWV3TW9kZSgpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7
Ci0gICAgc3dpdGNoICh2aWV3TW9kZSkgeworICAgIGF1dG8ga2V5d29yZCA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKworICAgIHN3aXRjaCAoZnJh
bWUucGFnZSgpLT52aWV3TW9kZSgpKSB7CiAgICAgY2FzZSBQYWdlOjpWaWV3TW9kZVdpbmRvd2Vk
OgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZVdpbmRv
d2VkOwotICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVX
aW5kb3dlZDsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlRmxvYXRpbmc6Ci0gICAgICAgIHJlc3Vs
dCA9IHZpZXdNb2RlQ1NTS2V5d29yZElEID09IENTU1ZhbHVlRmxvYXRpbmc7Ci0gICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUZsb2F0aW5nOwogICAgIGNh
c2UgUGFnZTo6Vmlld01vZGVGdWxsc2NyZWVuOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNT
U0tleXdvcmRJRCA9PSBDU1NWYWx1ZUZ1bGxzY3JlZW47Ci0gICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUZ1bGxzY3JlZW47CiAgICAgY2FzZSBQYWdlOjpW
aWV3TW9kZU1heGltaXplZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NLZXl3b3JkSUQg
PT0gQ1NTVmFsdWVNYXhpbWl6ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4ga2V5
d29yZCA9PSBDU1NWYWx1ZU1heGltaXplZDsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlTWluaW1p
emVkOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZU1p
bmltaXplZDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBrZXl3b3JkID09IENTU1Zh
bHVlTWluaW1pemVkOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBmYWxz
ZTsKIH0KKwogI2VuZGlmIC8vIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQogCi1zdGF0aWMg
Ym9vbCB2aWRlb19wbGF5YWJsZV9pbmxpbmVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQorc3RhdGljIGJvb2wgdmlkZW9QbGF5YWJsZUlubGluZUV2YWx1YXRlKENTU1ZhbHVl
KiwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBmcmFtZS0+c2V0dGluZ3MoKS5hbGxvd3NJbmxp
bmVNZWRpYVBsYXliYWNrKCk7CisgICAgcmV0dXJuIGZyYW1lLnNldHRpbmdzKCkuYWxsb3dzSW5s
aW5lTWVkaWFQbGF5YmFjaygpOwogfQogCi1zdGF0aWMgYm9vbCBob3Zlck1lZGlhRmVhdHVyZUV2
YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJh
bWUqLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBob3ZlckV2YWx1YXRlKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVk
aWFGZWF0dXJlUHJlZml4KQogewogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSkgewogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCkBAIC02OTAsNzAgKzYyNCw2NSBAQCBzdGF0
aWMgYm9vbCBob3Zlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYQogI2VuZGlmCiAgICAgfQogCi0gICAgaW50IGhvdmVyQ1NTS2V5
d29yZElEID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgp
OworICAgIGF1dG8ga2V5d29yZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUp
LmdldFZhbHVlSUQoKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHJldHVybiBob3Zl
ckNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZU5vbmU7CisgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NT
VmFsdWVOb25lOwogI2Vsc2UKLSAgICByZXR1cm4gaG92ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFs
dWVIb3ZlcjsKKyAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUhvdmVyOwogI2VuZGlmCiB9
CiAKLXN0YXRpYyBib29sIGFueV9ob3Zlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBwcmVmaXgpCitzdGF0aWMgYm9v
bCBhbnlIb3ZlckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXggcHJlZml4KQogewotICAgIHJldHVybiBob3Zlck1lZGlhRmVhdHVyZUV2
YWwodmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIGZyYW1lLCBwcmVmaXgpOworICAg
IHJldHVybiBob3ZlckV2YWx1YXRlKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBm
cmFtZSwgcHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgcG9pbnRlck1lZGlhRmVhdHVyZUV2YWwo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUq
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBwb2ludGVyRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIGludCBwb2ludGVyQ1NTS2V5d29yZElEID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworICAgIGF1
dG8ga2V5d29yZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVl
SUQoKTsKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHJldHVybiBwb2ludGVyQ1NTS2V5
d29yZElEID09IENTU1ZhbHVlQ29hcnNlOworICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVl
Q29hcnNlOwogI2Vsc2UKLSAgICByZXR1cm4gcG9pbnRlckNTU0tleXdvcmRJRCA9PSBDU1NWYWx1
ZUZpbmU7CisgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVGaW5lOwogI2VuZGlmCiB9CiAK
LXN0YXRpYyBib29sIGFueV9wb2ludGVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IHByZWZpeCkKK3N0YXRpYyBib29s
IGFueVBvaW50ZXJFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IHByZWZpeCkKIHsKLSAgICByZXR1cm4gcG9pbnRlck1lZGlhRmVhdHVy
ZUV2YWwodmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIGZyYW1lLCBwcmVmaXgpOwor
ICAgIHJldHVybiBwb2ludGVyRXZhbHVhdGUodmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEsIGZyYW1lLCBwcmVmaXgpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlvbk1hcCgp
CisvLyBVc2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgYWRkIGRpcmVjdGx5IHRv
IGF2b2lkIGlubGluaW5nLgorc3RhdGljIHZvaWQgYWRkKE1lZGlhUXVlcnlGdW5jdGlvbk1hcCYg
bWFwLCBBdG9taWNTdHJpbmdJbXBsKiBrZXksIE1lZGlhUXVlcnlGdW5jdGlvbiB2YWx1ZSkKIHsK
LSAgICAvLyBDcmVhdGUgdGhlIHRhYmxlLgotICAgIGdGdW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlv
bk1hcDsKLSNkZWZpbmUgQUREX1RPX0ZVTkNUSU9OTUFQKG5hbWUsIHN0cikgIFwKLSAgICBnRnVu
Y3Rpb25NYXAtPnNldChuYW1lIyNNZWRpYUZlYXR1cmUuaW1wbCgpLCBuYW1lIyNNZWRpYUZlYXR1
cmVFdmFsKTsKLSAgICBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZFQVRVUkUo
QUREX1RPX0ZVTkNUSU9OTUFQKTsKLSN1bmRlZiBBRERfVE9fRlVOQ1RJT05NQVAKKyAgICBtYXAu
YWRkKGtleSwgdmFsdWUpOwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29u
c3QgTWVkaWFRdWVyeUV4cCogZXhwcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6
ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0CiB7
CiAgICAgaWYgKCFtX2ZyYW1lIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fc3R5bGUpCi0gICAg
ICAgIHJldHVybiBtX2V4cFJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fZmFsbGJhY2tSZXN1bHQ7
CiAKLSAgICBpZiAoIWV4cHItPmlzVmFsaWQoKSkKKyAgICBpZiAoIWV4cHJlc3Npb24uaXNWYWxp
ZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWdGdW5jdGlvbk1hcCkKLSAg
ICAgICAgY3JlYXRlRnVuY3Rpb25NYXAoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1lZGlhIGZlYXR1
cmUgZXZhbHVhdGlvbiBmdW5jdGlvbi4gQXNzdW1lIG5vIHByZWZpeAotICAgIC8vIGFuZCBsZXQg
dHJhbXBvbGluZSBmdW5jdGlvbnMgb3ZlcnJpZGUgdGhlIHByZWZpeCBpZiBwcmVmaXggaXMKLSAg
ICAvLyB1c2VkCi0gICAgRXZhbEZ1bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KGV4cHItPm1l
ZGlhRmVhdHVyZSgpLmltcGwoKSk7Ci0gICAgaWYgKGZ1bmMpIHsKLSAgICAgICAgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YShtX3N0eWxlLAotICAgICAgICAgICAgbV9m
cmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCksCi0gICAg
ICAgICAgICBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCksIDEsIGZhbHNlKTsKLSAg
ICAgICAgcmV0dXJuIGZ1bmMoZXhwci0+dmFsdWUoKSwgY29udmVyc2lvbkRhdGEsIG1fZnJhbWUs
IE5vUHJlZml4KTsKLSAgICB9CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lZGlhUXVlcnlG
dW5jdGlvbk1hcD4gbWFwID0gW10geworICAgICAgICBNZWRpYVF1ZXJ5RnVuY3Rpb25NYXAgbWFw
OworI2RlZmluZSBBRERfVE9fRlVOQ1RJT05NQVAobmFtZSwgc3RyKSBhZGQobWFwLCBNZWRpYUZl
YXR1cmVOYW1lczo6bmFtZS5pbXBsKCksIG5hbWUjI0V2YWx1YXRlKTsKKyAgICAgICAgQ1NTX01F
RElBUVVFUllfTkFNRVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKEFERF9UT19GVU5DVElPTk1BUCk7
CisjdW5kZWYgQUREX1RPX0ZVTkNUSU9OTUFQCisgICAgICAgIHJldHVybiBtYXA7CisgICAgfSgp
OwogCi0gICAgcmV0dXJuIGZhbHNlOworICAgIGF1dG8gZnVuY3Rpb24gPSBtYXAuZ2V0KCkuZ2V0
KGV4cHJlc3Npb24ubWVkaWFGZWF0dXJlKCkuaW1wbCgpKTsKKyAgICBpZiAoIWZ1bmN0aW9uKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSAqbV9mcmFt
ZS0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oZXhwcmVzc2lvbi52YWx1ZSgpLCB7
IG1fc3R5bGUsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCBkb2N1
bWVudC5yZW5kZXJWaWV3KCksIDEsIGZhbHNlIH0sICptX2ZyYW1lLCBOb1ByZWZpeCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaApp
bmRleCAwN2QxMTQxMDIyMGExYmUzYzJkNGRlM2IwN2Q1NzAwM2FlNjA0YTZmLi42MmM1YWU5Mjli
NmQ2OWEyM2VkZTYyOTEyYTQxMjA4ODc1YmUyYjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXZhbHVhdG9yLmgKQEAgLTI1LDgzICsyNSw1NiBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi0jaWZuZGVmIE1lZGlhUXVlcnlFdmFsdWF0b3JfaAotI2RlZmluZSBNZWRpYVF1ZXJ5RXZh
bHVhdG9yX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgotI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIERvY3VtZW50OwogY2xhc3MgRnJhbWU7Ci1jbGFzcyBNZWRpYVF1ZXJ5RXhwOwogY2xhc3Mg
TWVkaWFRdWVyeVNldDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsK
IAotY2xhc3MgTWVkaWFRdWVyeVJlc3VsdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVk
aWFRdWVyeVJlc3VsdCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE1l
ZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwciwgYm9vbCByZXN1bHQpCi0g
ICAgICAgIDogbV9leHByZXNzaW9uKGV4cHIpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQot
ICAgIHsKLSAgICB9Ci0KLSAgICBNZWRpYVF1ZXJ5RXhwIG1fZXhwcmVzc2lvbjsKLSAgICBib29s
IG1fcmVzdWx0Oworc3RydWN0IE1lZGlhUXVlcnlSZXN1bHQgeworICAgIE1lZGlhUXVlcnlFeHBy
ZXNzaW9uIGV4cHJlc3Npb247CisgICAgYm9vbCByZXN1bHQ7CiB9OwogCi0vKioKLSAqIENsYXNz
IHRoYXQgZXZhbHVhdGVzIGNzcyBtZWRpYSBxdWVyaWVzIGFzIGRlZmluZWQgaW4KLSAqIENTUzMg
TW9kdWxlICJNZWRpYSBRdWVyaWVzIiAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1
ZXJpZXMvKQotICogU3BlY2lhbCBjb25zdHJ1Y3RvcnMgYXJlIG5lZWRlZCwgaWYgc2ltcGxlIG1l
ZGlhIHF1ZXJpZXMgYXJlIHRvIGJlCi0gKiBldmFsdWF0ZWQgd2l0aG91dCBrbm93bGVkZ2Ugb2Yg
dGhlIG1lZGl1bSBmZWF0dXJlcy4gVGhpcyBjYW4gaGFwcGVuCi0gKiBmb3IgZXhhbXBsZSB3aGVu
IHBhcnNpbmcgVUEgc3R5bGVzaGVldHMsIGlmIGV2YWx1YXRpb24gaXMgZG9uZQotICogcmlnaHQg
YWZ0ZXIgcGFyc2luZy4KLSAqCi0gKiB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBh
cHByb3hpbWF0ZSByZXN1bHRzIG9mIGV2YWx1YXRpb24sIGlmCi0gKiB0aGUgZGV2aWNlIGNoYXJh
Y3RlcmlzdGljcyBhcmUgbm90IGtub3duLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHBydW5lIHRoZSBs
b2FkaW5nCi0gKiBvZiBzdHlsZXNoZWV0cyB0byBvbmx5IHRob3NlIHdoaWNoIGFyZSBwcm9iYWJs
ZSB0byBtYXRjaC4KLSAqLworLy8gU29tZSBvZiB0aGUgY29uc3RydWN0b3JzIGFyZSB1c2VkIGZv
ciBjYXNlcyB3aGVyZSB0aGUgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBhcmUgbm90IGtub3duLgor
Ly8gVGhlc2UgIGNhbiBiZSB1c2VkIHRvIHBydW5lIHRoZSBsb2FkaW5nIG9mIHN0eWxlc2hlZXRz
IHRvIG9ubHkgdGhvc2Ugd2hpY2ggYXJlIG5vdCBhbHJlYWR5IGtub3duIHRvIG5vdCBtYXRjaC4K
KwogY2xhc3MgTWVkaWFRdWVyeUV2YWx1YXRvciB7Ci0gICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KE1lZGlhUXVlcnlFdmFsdWF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoK
LSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2ltcGxlIG1l
ZGlhIHF1ZXJpZXMKLSAgICAgKiAgRXZhbHVhdG9yIHJldHVybnMgdHJ1ZSBmb3IgImFsbCIsIGFu
ZCByZXR1cm5zIHZhbHVlIG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQKLSAgICAgKiAgZm9yIGFueSBt
ZWRpYSBmZWF0dXJlcwotICAgICAqLworICAgIC8vIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2
YWx1YXRlcyBvbmx5IHNpbXBsZSBtZWRpYSBxdWVyaWVzLgorICAgIC8vIEV2YWx1YXRvciByZXR1
cm5zIHRydWUgZm9yICJhbGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJlUmVz
dWx0IGZvciBhbnkgbWVkaWEgZmVhdHVyZXMuCiAgICAgZXhwbGljaXQgTWVkaWFRdWVyeUV2YWx1
YXRvcihib29sIG1lZGlhRmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsKIAotICAgIC8qKiBDcmVhdGVz
IGV2YWx1YXRvciB3aGljaCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmllcwotICAg
ICAqICBFdmFsdWF0b3IgIHJldHVybnMgdHJ1ZSBmb3IgYWNjZXB0ZWRNZWRpYVR5cGUgYW5kIHJl
dHVybnMgdmFsdWUgb2YgXG1lZGlhZmVhdHVyZVJlc3VsdAotICAgICAqICBmb3IgYW55IG1lZGlh
IGZlYXR1cmVzCi0gICAgICovCisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVh
dGVzIG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMuCisgICAgLy8gRXZhbHVhdG9yIHJldHVybnMg
dHJ1ZSBmb3IgYWNjZXB0ZWRNZWRpYVR5cGUgYW5kIHJldHVybnMgdmFsdWUgb2YgXG1lZGlhRmVh
dHVyZVJlc3VsdCBmb3IgYW55IG1lZGlhIGZlYXR1cmVzLgogICAgIE1lZGlhUXVlcnlFdmFsdWF0
b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1
bHQgPSBmYWxzZSk7CiAKLSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVz
IGZ1bGwgbWVkaWEgcXVlcmllcwotICAgICAqLwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29u
c3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRnJhbWUqLCBjb25zdCBSZW5kZXJTdHlsZSop
OwotCi0gICAgfk1lZGlhUXVlcnlFdmFsdWF0b3IoKTsKKyAgICAvLyBDcmVhdGVzIGV2YWx1YXRv
ciB3aGljaCBldmFsdWF0ZXMgZnVsbCBtZWRpYSBxdWVyaWVzLgorICAgIE1lZGlhUXVlcnlFdmFs
dWF0b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRG9jdW1lbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSopOwogCiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaChjb25zdCBTdHJpbmcmIG1l
ZGlhVHlwZVRvTWF0Y2gpIGNvbnN0OwogICAgIGJvb2wgbWVkaWFUeXBlTWF0Y2hTcGVjaWZpYyhj
b25zdCBjaGFyKiBtZWRpYVR5cGVUb01hdGNoKSBjb25zdDsKIAotICAgIC8qKiBFdmFsdWF0ZXMg
YSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMgKi8KLSAgICBib29sIGV2YWwoY29uc3QgTWVkaWFRdWVy
eVNldCosIFN0eWxlUmVzb2x2ZXIqID0gMCkgY29uc3Q7CisgICAgLy8gRXZhbHVhdGVzIGEgbGlz
dCBvZiBtZWRpYSBxdWVyaWVzLgorICAgIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNl
dCYsIFN0eWxlUmVzb2x2ZXIqID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICAvLyBFdmFsdWF0ZXMg
bWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEtZmVhdHVyZTogdmFsdWUp
IiBwYXJ0LgorICAgIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mKSBj
b25zdDsKIAotICAgIC8qKiBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUg
ImFuZCAobWVkaWEtZmVhdHVyZTogdmFsdWUpIiBwYXJ0ICovCi0gICAgYm9vbCBldmFsKGNvbnN0
IE1lZGlhUXVlcnlFeHAqKSBjb25zdDsKLSAgICAKLSAgICAvKiBFdmFsdWF0ZXMgYSBsaXN0IG9m
IG1lZGlhIHF1ZXJpZXMgYW5kIGZpbGxzIGluIGEgdmVjdG9yIHdpdGggYW55IHZpZXdwb3J0LWRl
cGVuZGVudCByZXN1bHRzIGZvdW5kLiAqLwotICAgIGJvb2wgZXZhbENoZWNraW5nVmlld3BvcnRE
ZXBlbmRlbnRSZXN1bHRzKGNvbnN0IE1lZGlhUXVlcnlTZXQqLCBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiYpOworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVk
aWEgcXVlcmllcyBhbmQgZmlsbHMgaW4gYSB2ZWN0b3Igd2l0aCBhbnkgdmlld3BvcnQtZGVwZW5k
ZW50IHJlc3VsdHMgZm91bmQuCisgICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0
JiwgVmVjdG9yPE1lZGlhUXVlcnlSZXN1bHQ+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3Ry
aW5nIG1fbWVkaWFUeXBlOwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qg
b3duZWQKICAgICBjb25zdCBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKLSAgICBi
b29sIG1fZXhwUmVzdWx0OworICAgIGJvb2wgbV9mYWxsYmFja1Jlc3VsdCB7IGZhbHNlIH07CiB9
OwogCiB9IC8vIG5hbWVzcGFjZQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFRdWVyeUV4cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5j
cHAKaW5kZXggZThkYTc4MDQ1OTY5NWE4MWE3MjVlYWYxMmI1NTZkYzAwNjVlZjY1My4uNTllMTVh
MzhiMjFiNzhkMzRiODQ0MTE4M2E5NWZlNzg0ODFjZWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YVF1ZXJ5RXhwLmNwcApAQCAtMzIsMjAxICszMiwxODYgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIu
aCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlz
dC5oIgorI2luY2x1ZGUgIk1lZGlhRmVhdHVyZU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBmZWF0dXJlV2l0aENTU1ZhbHVlSUQoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1
cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0Zl
YXR1cmVWYWxpZFdpdGhJZGVudGlmaWVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJl
LCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aWQpCisg
ICAgaWYgKCF2YWx1ZS5pZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmUK
KyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlv
bgogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZQotI2VuZGlmIC8v
IEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0g
TWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yX2dhbXV0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55X2hvdmVyTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55X3BvaW50ZXJN
ZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
Ojpob3Zlck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OmludmVydGVkX2NvbG9yc01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnBvaW50ZXJNZWRpYUZlYXR1cmU7CisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlld01vZGUKKyNlbmRpZgor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yR2FtdXQK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlIb3Zlcgor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueVBvaW50ZXIK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpob3ZlcgorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmludmVydGVkQ29sb3Jz
CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlcjsK
IH0KIAotc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVXaXRoVmFsaWRQb3NpdGl2ZUxlbmdodE9y
TnVtYmVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJW
YWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVn
YXRpdmVMZW5ndGhPck51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29u
c3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmICghKENTU1ByaW1pdGl2ZVZhbHVl
Ojppc0xlbmd0aCh2YWx1ZS0+dW5pdCkgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIpIHx8IHZhbHVlLT5mVmFsdWUgPCAwKQorICAgIGlmICghKENTU1ByaW1p
dGl2ZVZhbHVlOjppc0xlbmd0aCh2YWx1ZS51bml0KSB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSB8fCB2YWx1ZS5mVmFsdWUgPCAwKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjpoZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8
fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3dpZHRoTWVk
aWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
bWluX3dpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6ZGV2aWNlX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2Rldmlj
ZV9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjpkZXZpY2Vfd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2RldmljZV93
aWR0aE1lZGlhRmVhdHVyZTsKKyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjpoZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptYXhIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjptaW5IZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjp3aWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
Om1heFdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
bWluV2lkdGgKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpk
ZXZpY2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptYXhEZXZpY2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5EZXZpY2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpkZXZpY2VXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6Om1heERldmljZVdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluRGV2aWNlV2lkdGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
Ym9vbCBmZWF0dXJlV2l0aFZhbGlkRGVuc2l0eShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVh
dHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlz
RmVhdHVyZVZhbGlkV2l0aERlbnNpdHkoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUs
IGNvbnN0IENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIUNTU1ByaW1pdGl2ZVZh
bHVlOjppc1Jlc29sdXRpb24odmFsdWUtPnVuaXQpIHx8IHZhbHVlLT5mVmFsdWUgPD0gMCkKKyAg
ICBpZiAoIUNTU1ByaW1pdGl2ZVZhbHVlOjppc1Jlc29sdXRpb24odmFsdWUudW5pdCkgfHwgdmFs
dWUuZlZhbHVlIDw9IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVzb2x1dGlv
bk1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1pbl9yZXNvbHV0aW9uTWVkaWFGZWF0dXJlOworICAgIHJldHVybiBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhSZXNvbHV0aW9uCisgICAgICAgIHx8IG1lZGlhRmVh
dHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluUmVzb2x1dGlvbjsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGZlYXR1cmVXaXRoUG9zaXRpdmVJbnRlZ2VyKGNvbnN0IEF0b21pY1N0cmluZyYg
bWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IEF0b21pY1N0
cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
aWYgKCF2YWx1ZS0+aXNJbnQgfHwgdmFsdWUtPmZWYWx1ZSA8IDApCisgICAgaWYgKCF2YWx1ZS5p
c0ludCB8fCB2YWx1ZS5mVmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvck1lZGlhRmVhdHVy
ZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9jb2xv
ck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6Om1pbl9jb2xvck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmNvbG9yX2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2NvbG9yX2luZGV4TWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2NvbG9y
X2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6bWluX21vbm9jaHJvbWVNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfbW9ub2Nocm9tZU1lZGlhRmVhdHVyZTsKKyAg
ICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcgorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heENvbG9yCisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluQ29sb3IKKyAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvckluZGV4CisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4Q29sb3JJbmRleAorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkNvbG9ySW5kZXgK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5Nb25vY2hy
b21lCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4TW9u
b2Nocm9tZTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZlYXR1cmVXaXRoUG9zaXRpdmVOdW1i
ZXIoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVl
KiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2
ZU51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2Vy
VmFsdWUmIHZhbHVlKQogewotICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX05VTUJFUiB8fCB2YWx1ZS0+ZlZhbHVlIDwgMCkKKyAgICBpZiAodmFsdWUudW5pdCAh
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiB8fCB2YWx1ZS5mVmFsdWUgPCAwKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2Zvcm1fMmRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2l0aW9uTWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5p
bWF0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6ZGV2aWNlX3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2RldmljZV9waXhlbF9yYXRpb01lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1p
bl9kZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dHJhbnNmb3JtMmQKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm0zZAorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRyYW5zaXRpb24KKyAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbmltYXRpb24KKyAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VQaXhlbFJhdGlvCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlUGl4ZWxSYXRpbwor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkRldmljZVBp
eGVsUmF0aW87CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aFplcm9Pck9uZShj
b25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aFplcm9Pck9uZShjb25z
dCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
KQogewotICAgIGlmICghdmFsdWUtPmlzSW50IHx8ICEodmFsdWUtPmZWYWx1ZSA9PSAxIHx8ICF2
YWx1ZS0+ZlZhbHVlKSkKKyAgICBpZiAoIXZhbHVlLmlzSW50IHx8ICEodmFsdWUuZlZhbHVlID09
IDEgfHwgIXZhbHVlLmZWYWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVy
biBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmdyaWRNZWRpYUZlYXR1cmU7Cisg
ICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Z3JpZDsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGZlYXR1cmVXaXRoQXNwZWN0UmF0aW8oY29uc3QgQXRvbWljU3Ry
aW5nJiBtZWRpYUZlYXR1cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBc3BlY3RSYXRpb0ZlYXR1
cmUoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUpCiB7Ci0gICAgcmV0dXJuIG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2FzcGVj
dF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6Om1pbl9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJl
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2Rldmlj
ZV9hc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1l
ZGlhRmVhdHVyZU5hbWVzOjptYXhfZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZTsKKyAg
ICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RSYXRpbwor
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZUFzcGVj
dFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWlu
QXNwZWN0UmF0aW8KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptYXhBc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6Om1pbkRldmljZUFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlQXNwZWN0UmF0aW87CiB9CiAKLXN0YXRpYyBpbmxp
bmUgYm9vbCBmZWF0dXJlV2l0aG91dFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0
IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlKQogewogICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRo
YXQgYXJlIHByZWZpeGVkIGJ5IG1pbi9tYXggY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHZhbHVl
LgotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueV9ob3Zl
ck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmFueV9wb2ludGVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6bW9ub2Nocm9tZU1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yTWVkaWFGZWF0dXJlCi0gICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JfaW5kZXhNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpncmlk
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6d2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09
IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50
YXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjphc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aG92ZXJNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2Zvcm1fMmRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2l0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5pbWF0aW9uTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aW52ZXJ0
ZWRfY29sb3JzTWVkaWFGZWF0dXJlCisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6YW55SG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjphbnlQb2ludGVyCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bW9ub2Nocm9tZQorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OmNvbG9yCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6Y29sb3JJbmRleAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OmdyaWQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpoZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
Ojp3aWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRl
dmljZUhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmRldmljZVdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6b3JpZW50YXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjphc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OmRldmljZUFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6aG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2Zvcm0yZAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnRyYW5zZm9ybTNkCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6dHJhbnNpdGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmFuaW1hdGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmludmVydGVkQ29sb3JzCiAjaWYgRU5BQkxFKFZJRVdfTU9ERV9DU1Nf
TUVESUEpCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmll
d19tb2RlTWVkaWFGZWF0dXJlCi0jZW5kaWYgLy8gRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEp
Ci0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlck1l
ZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmRldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwg
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWRlb19wbGF5YWJsZV9pbmxpbmVN
ZWRpYUZlYXR1cmU7CisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6dmlld01vZGUKKyNlbmRpZgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OnBvaW50ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjpkZXZpY2VQaXhlbFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6cmVzb2x1dGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnZpZGVvUGxheWFibGVJbmxpbmU7CiB9CiAKLU1lZGlhUXVlcnlFeHA6
Ok1lZGlhUXVlcnlFeHAoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIENTU1BhcnNl
clZhbHVlTGlzdCogdmFsdWVMaXN0KQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlk
V2l0aE51bWJlcldpdGhVbml0KGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25z
dCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIGlzRmVhdHVyZVZhbGlkV2l0
aERlbnNpdHkobWVkaWFGZWF0dXJlLCB2YWx1ZSkgfHwgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVn
YXRpdmVMZW5ndGhPck51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKTsKK30KKworc3RhdGljIGlu
bGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aE51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1l
ZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiBp
c0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZUludGVnZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkg
fHwgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVOdW1iZXIobWVkaWFGZWF0dXJlLCB2YWx1
ZSkgfHwgaXNGZWF0dXJlVmFsaWRXaXRoWmVyb09yT25lKG1lZGlhRmVhdHVyZSwgdmFsdWUpOwor
fQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTbGFzaChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7
CisgICAgcmV0dXJuIHZhbHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZh
bHVlLmlWYWx1ZSA9PSAnLyc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aXZlSW50
ZWdlclZhbHVlKENTU1BhcnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUudW5p
dCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS5mVmFsdWUgPiAwICYm
IHZhbHVlLmlzSW50OworfQorCitNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJl
c3Npb24oY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIENTU1BhcnNlclZhbHVlTGlz
dCogdmFsdWVMaXN0KQogICAgIDogbV9tZWRpYUZlYXR1cmUobWVkaWFGZWF0dXJlKQogewotICAg
IC8vIEluaXRpYWxpemUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbiB0aGF0IG11c3QgaGF2ZSAxIG9y
IG1vcmUgdmFsdWVzLgotICAgIGlmICh2YWx1ZUxpc3QpIHsKLSAgICAgICAgaWYgKHZhbHVlTGlz
dC0+c2l6ZSgpID09IDEpIHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZh
bHVlTGlzdC0+Y3VycmVudCgpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0
IHVzZSBDU1NWYWx1ZUlEcy4KLSAgICAgICAgICAgIGlmIChmZWF0dXJlV2l0aENTU1ZhbHVlSUQo
bWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0KLSAgICAgICAgICAgIC8v
IE1lZGlhIGZlYXR1cmVzIHRoYXQgbXVzdCBoYXZlIG5vbi1uZWdhdGl2ZSA8ZGVuc2l0eT4sIGll
LiBkcHB4LCBkcGkgb3IgZHBjbS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoVmFs
aWREZW5zaXR5KG1lZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZl
YXR1cmVzIHRoYXQgbXVzdCBoYXZlIG5vbi1uZWdhdGl2ZSA8bGVuZ2h0PiBvciBudW1iZXIgdmFs
dWUuCi0gICAgICAgICAgICBlbHNlIGlmIChmZWF0dXJlV2l0aFZhbGlkUG9zaXRpdmVMZW5naHRP
ck51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0
dXJlcyB0aGF0IG11c3QgaGF2ZSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZS4KLSAgICAgICAg
ICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSwgdmFs
dWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAg
ICAgICAgLy8gTWVkaWEgZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0aXZlIG51bWJl
ciB2YWx1ZS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoUG9zaXRpdmVOdW1iZXIo
bWVkaWFGZWF0dXJlLCB2YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19O
VU1CRVIpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3QgaGF2ZSAo
MHwxKSB2YWx1ZS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoWmVyb09yT25lKG1l
ZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKTsKLQotICAgICAgICAgICAgbV9pc1ZhbGlkID0gbV92YWx1ZTsKLSAgICAgICAgfSBlbHNl
IGlmICh2YWx1ZUxpc3QtPnNpemUoKSA9PSAzICYmIGZlYXR1cmVXaXRoQXNwZWN0UmF0aW8obWVk
aWFGZWF0dXJlKSkgewotICAgICAgICAgICAgLy8gQ3JlYXRlIGxpc3Qgb2YgdmFsdWVzLgotICAg
ICAgICAgICAgLy8gQ3VycmVudGx5IGFjY2VwdHMgb25seSA8aW50ZWdlcj4vPGludGVnZXI+Lgot
ICAgICAgICAgICAgLy8gQXBwbGljYWJsZSB0byBkZXZpY2UtYXNwZWN0LXJhdGlvIGFuZCBhc3Bl
Yy1yYXRpby4KLSAgICAgICAgICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBm
bG9hdCBudW1lcmF0b3JWYWx1ZSA9IDA7Ci0gICAgICAgICAgICBmbG9hdCBkZW5vbWluYXRvclZh
bHVlID0gMDsKLQotICAgICAgICAgICAgLy8gVGhlIGFzcGVjdC1yYXRpbyBtdXN0IGJlIDxpbnRl
Z2VyPiAod2hpdGVzcGFjZSk/IC8gKHdoaXRlc3BhY2UpPyA8aW50ZWdlcj4uCi0gICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMzsgKytpLCB2YWx1ZUxpc3QtPm5leHQoKSkgewot
ICAgICAgICAgICAgICAgIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+
Y3VycmVudCgpOwotICAgICAgICAgICAgICAgIGlmIChpICE9IDEgJiYgdmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPmZWYWx1ZSA+IDAgJiYgdmFs
dWUtPmlzSW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG51bWVyYXRvclZhbHVlID0gdmFsdWUtPmZWYWx1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3JWYWx1ZSA9IHZh
bHVlLT5mVmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IDEgJiYgdmFsdWUt
PnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJy8n
KQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChpc1ZhbGlkKQotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NBc3BlY3RSYXRpb1Zh
bHVlOjpjcmVhdGUobnVtZXJhdG9yVmFsdWUsIGRlbm9taW5hdG9yVmFsdWUpOwotCi0gICAgICAg
ICAgICBtX2lzVmFsaWQgPSBtX3ZhbHVlOworICAgIGlmICghdmFsdWVMaXN0KSB7CisgICAgICAg
IGlmIChpc0ZlYXR1cmVWYWxpZFdpdGhvdXRWYWx1ZShtZWRpYUZlYXR1cmUpKQorICAgICAgICAg
ICAgbV9pc1ZhbGlkID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09
IDEpIHsKKyAgICAgICAgYXV0byYgdmFsdWUgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDApOworICAg
ICAgICBpZiAoaXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcihtZWRpYUZlYXR1cmUsIHZhbHVl
KSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVu
dGlmaWVyKHZhbHVlLmlkKTsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgICAg
IH0gZWxzZSBpZiAoaXNGZWF0dXJlVmFsaWRXaXRoTnVtYmVyV2l0aFVuaXQobWVkaWFGZWF0dXJl
LCB2YWx1ZSkgfHwgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVMZW5ndGhPck51bWJlciht
ZWRpYUZlYXR1cmUsIHZhbHVlKSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUodmFsdWUuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cykgdmFsdWUudW5pdCk7CisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgICAgICB9
IGVsc2UgaWYgKGlzRmVhdHVyZVZhbGlkV2l0aE51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkg
eworICAgICAgICAgICAgLy8gRklYTUU6IENhbiB3ZSBtZXJnZSB0aGlzIHdpdGggdGhlIGNhc2Ug
YWJvdmU/CisgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZS5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAg
IG1faXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+
c2l6ZSgpID09IDMgJiYgaXNBc3BlY3RSYXRpb0ZlYXR1cmUobWVkaWFGZWF0dXJlKSkgeworICAg
ICAgICBhdXRvJiBudW1lcmF0b3IgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDApOworICAgICAgICBh
dXRvJiBzbGFzaCA9ICp2YWx1ZUxpc3QtPnZhbHVlQXQoMSk7CisgICAgICAgIGF1dG8mIGRlbm9t
aW5hdG9yID0gKnZhbHVlTGlzdC0+dmFsdWVBdCgyKTsKKyAgICAgICAgaWYgKGlzUG9zaXRpdmVJ
bnRlZ2VyVmFsdWUobnVtZXJhdG9yKSAmJiBpc1NsYXNoKHNsYXNoKSAmJiBpc1Bvc2l0aXZlSW50
ZWdlclZhbHVlKGRlbm9taW5hdG9yKSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IENTU0FzcGVj
dFJhdGlvVmFsdWU6OmNyZWF0ZShudW1lcmF0b3IuZlZhbHVlLCBkZW5vbWluYXRvci5mVmFsdWUp
OworICAgICAgICAgICAgbV9pc1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBp
ZiAoZmVhdHVyZVdpdGhvdXRWYWx1ZShtZWRpYUZlYXR1cmUpKQotICAgICAgICBtX2lzVmFsaWQg
PSB0cnVlOworICAgIH0KIH0KIAotU3RyaW5nIE1lZGlhUXVlcnlFeHA6OnNlcmlhbGl6ZSgpIGNv
bnN0CitTdHJpbmcgTWVkaWFRdWVyeUV4cHJlc3Npb246OnNlcmlhbGl6ZSgpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3NlcmlhbGl6YXRpb25DYWNoZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG1f
c2VyaWFsaXphdGlvbkNhY2hlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFeHAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKaW5kZXggN2Mz
ODM5NzU1OTVmZGE4MThmMWQ2ZDUwOWMzNjIyYTIwMDNkMjMyNC4uMmI0ZTcxY2M4MGFjNDg5ZTRh
ODU1NDkwZDMxNDcwMzM5NGJjZWM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnlFeHAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCkBA
IC0yNSwzMiArMjUsMjkgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1
ZXJ5RXhwX2gKLSNkZWZpbmUgTWVkaWFRdWVyeUV4cF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkNTU1ZhbHVlLmgiCi0jaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRl
IDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUGFyc2VyVmFsdWVMaXN0OwogCi1jbGFzcyBNZWRpYVF1
ZXJ5RXhwIHsKKy8vIEZJWE1FOiBSZW5hbWUgdGhlIGZpbGUgdG8gbWF0Y2ggdGhpcyBjbGFzcydz
IG5hbWUuCitjbGFzcyBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgTWVkaWFRdWVyeUV4cChjb25zdCBBdG9t
aWNTdHJpbmcmIG1lZGlhRmVhdHVyZSA9IGVtcHR5QXRvbSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2
YWx1ZXMgPSBudWxscHRyKTsKKyAgICBleHBsaWNpdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbihjb25z
dCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSA9IGVtcHR5QXRvbSwgQ1NTUGFyc2VyVmFsdWVM
aXN0KiB2YWx1ZXMgPSBudWxscHRyKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFG
ZWF0dXJlKCkgY29uc3Q7CiAgICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3Q7CiAKICAgICBib29s
IGlzVmFsaWQoKSBjb25zdDsKLSAgICBib29sIGlzVmlld3BvcnREZXBlbmRlbnQoKSBjb25zdDsK
IAogICAgIFN0cmluZyBzZXJpYWxpemUoKSBjb25zdDsKIAotICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBNZWRpYVF1ZXJ5RXhwJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1l
ZGlhUXVlcnlFeHByZXNzaW9uJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5n
IG1fbWVkaWFGZWF0dXJlOwpAQCAtNTksNDIgKzU2LDI1IEBAIHByaXZhdGU6CiAgICAgbXV0YWJs
ZSBTdHJpbmcgbV9zZXJpYWxpemF0aW9uQ2FjaGU7CiB9OwogCi1pbmxpbmUgY29uc3QgQXRvbWlj
U3RyaW5nJiBNZWRpYVF1ZXJ5RXhwOjptZWRpYUZlYXR1cmUoKSBjb25zdAoraW5saW5lIGNvbnN0
IEF0b21pY1N0cmluZyYgTWVkaWFRdWVyeUV4cHJlc3Npb246Om1lZGlhRmVhdHVyZSgpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIG1fbWVkaWFGZWF0dXJlOwogfQogCi1pbmxpbmUgQ1NTVmFsdWUqIE1l
ZGlhUXVlcnlFeHA6OnZhbHVlKCkgY29uc3QKK2lubGluZSBDU1NWYWx1ZSogTWVkaWFRdWVyeUV4
cHJlc3Npb246OnZhbHVlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92YWx1ZS5nZXQoKTsKIH0K
IAotaW5saW5lIGJvb2wgTWVkaWFRdWVyeUV4cDo6b3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5
RXhwJiBvdGhlcikgY29uc3QKK2lubGluZSBib29sIE1lZGlhUXVlcnlFeHByZXNzaW9uOjpvcGVy
YXRvcj09KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKIHsKLSAgICBy
ZXR1cm4gKG90aGVyLm1fbWVkaWFGZWF0dXJlID09IG1fbWVkaWFGZWF0dXJlKQotICAgICAgICAm
JiAoKCFvdGhlci5tX3ZhbHVlICYmICFtX3ZhbHVlKQotICAgICAgICAgICAgfHwgKG90aGVyLm1f
dmFsdWUgJiYgbV92YWx1ZSAmJiBvdGhlci5tX3ZhbHVlLT5lcXVhbHMoKm1fdmFsdWUpKSk7Cisg
ICAgcmV0dXJuIG90aGVyLm1fbWVkaWFGZWF0dXJlID09IG1fbWVkaWFGZWF0dXJlCisgICAgICAg
ICYmICgoIW1fdmFsdWUgJiYgIW90aGVyLm1fdmFsdWUpIHx8IChtX3ZhbHVlICYmIG90aGVyLm1f
dmFsdWUgJiYgKm1fdmFsdWUgPT0gKm90aGVyLm1fdmFsdWUpKTsKIH0KIAotaW5saW5lIGJvb2wg
TWVkaWFRdWVyeUV4cDo6aXNWYWxpZCgpIGNvbnN0CitpbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhw
cmVzc2lvbjo6aXNWYWxpZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAot
aW5saW5lIGJvb2wgTWVkaWFRdWVyeUV4cDo6aXNWaWV3cG9ydERlcGVuZGVudCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aE1l
ZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptaW5fd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAg
ICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
bWF4X2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQot
ICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2FzcGVj
dF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWF4X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZTsKLX0KLQogfSAvLyBuYW1l
c3BhY2UKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmNwcAppbmRleCA3
YjRmZDAyZGQ1NGI3NGQ0MDE3MmUzMDRiMjBjZGRhYzc5YjBiZTdlLi40MDEwYzI5YzdhN2Q5M2Fm
MjRlNGE1NjJjMTY1ZTk4NmJhMzE1ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFRdWVyeUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHAKQEAgLTI3LDE4ICsyNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxN
ZWRpYVF1ZXJ5TGlzdD4gTWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhUXVl
cnlNYXRjaGVyPiB2ZWN0b3IsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIGJvb2wg
bWF0Y2hlcykKK2lubGluZSBNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3QoTWVkaWFRdWVy
eU1hdGNoZXImIG1hdGNoZXIsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBib29sIG1hdGNo
ZXMpCisgICAgOiBtX21hdGNoZXIobWF0Y2hlcikKKyAgICAsIG1fbWVkaWEoV1RGTW92ZShtZWRp
YSkpCisgICAgLCBtX2V2YWx1YXRpb25Sb3VuZChtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgp
KQorICAgICwgbV9jaGFuZ2VSb3VuZChtX2V2YWx1YXRpb25Sb3VuZCAtIDEpIC8vIEFueSB2YWx1
ZSB0aGF0IGlzIG5vdCB0aGUgc2FtZSBhcyBtX2V2YWx1YXRpb25Sb3VuZCB3b3VsZCBkby4KKyAg
ICAsIG1fbWF0Y2hlcyhtYXRjaGVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlh
UXVlcnlMaXN0KHZlY3RvciwgbWVkaWEsIG1hdGNoZXMpKTsKIH0KIAotTWVkaWFRdWVyeUxpc3Q6
Ok1lZGlhUXVlcnlMaXN0KFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+IHZlY3RvciwgUGFz
c1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSwgYm9vbCBtYXRjaGVzKQotICAgIDogbV9tYXRj
aGVyKHZlY3RvcikKLSAgICAsIG1fbWVkaWEobWVkaWEpCi0gICAgLCBtX2V2YWx1YXRpb25Sb3Vu
ZChtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgpKQotICAgICwgbV9jaGFuZ2VSb3VuZChtX2V2
YWx1YXRpb25Sb3VuZCAtIDEpIC8vIG1fZXZhbHVhdGlvblJvdW5kIGFuZCBtX2NoYW5nZVJvdW5k
IGluaXRpYWwgdmFsdWVzIG11c3QgYmUgZGlmZmVyZW50LgotICAgICwgbV9tYXRjaGVzKG1hdGNo
ZXMpCitSZWY8TWVkaWFRdWVyeUxpc3Q+IE1lZGlhUXVlcnlMaXN0OjpjcmVhdGUoTWVkaWFRdWVy
eU1hdGNoZXImIG1hdGNoZXIsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBib29sIG1hdGNo
ZXMpCiB7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFRdWVyeUxpc3QobWF0Y2hlciwg
V1RGTW92ZShtZWRpYSksIG1hdGNoZXMpKTsKIH0KIAogTWVkaWFRdWVyeUxpc3Q6On5NZWRpYVF1
ZXJ5TGlzdCgpCkBAIC01MCwyNiArNTAsMjYgQEAgU3RyaW5nIE1lZGlhUXVlcnlMaXN0OjptZWRp
YSgpIGNvbnN0CiAgICAgcmV0dXJuIG1fbWVkaWEtPm1lZGlhVGV4dCgpOwogfQogCi12b2lkIE1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI+IGxpc3RlbmVyKQordm9pZCBNZWRpYVF1ZXJ5TGlzdDo6YWRkTGlzdGVuZXIoUmVmUHRyPE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYgbGlzdGVuZXIpCiB7CiAgICAgaWYgKCFsaXN0ZW5lcikK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9tYXRjaGVyLT5hZGRMaXN0ZW5lcihsaXN0ZW5lciwg
dGhpcyk7CisgICAgbV9tYXRjaGVyLT5hZGRMaXN0ZW5lcihsaXN0ZW5lci5yZWxlYXNlTm9uTnVs
bCgpLCAqdGhpcyk7CiB9CiAKLXZvaWQgTWVkaWFRdWVyeUxpc3Q6OnJlbW92ZUxpc3RlbmVyKFBh
c3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIpCit2b2lkIE1lZGlhUXVl
cnlMaXN0OjpyZW1vdmVMaXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiBs
aXN0ZW5lcikKIHsKICAgICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X21hdGNoZXItPnJlbW92ZUxpc3RlbmVyKGxpc3RlbmVyLmdldCgpLCB0aGlzKTsKKyAgICBtX21h
dGNoZXItPnJlbW92ZUxpc3RlbmVyKCpsaXN0ZW5lciwgKnRoaXMpOwogfQogCi12b2lkIE1lZGlh
UXVlcnlMaXN0OjpldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBldmFsdWF0b3IsIGJvb2wm
IG5vdGlmaWNhdGlvbk5lZWRlZCkKK3ZvaWQgTWVkaWFRdWVyeUxpc3Q6OmV2YWx1YXRlKE1lZGlh
UXVlcnlFdmFsdWF0b3ImIGV2YWx1YXRvciwgYm9vbCYgbm90aWZpY2F0aW9uTmVlZGVkKQogewot
ICAgIGlmIChtX2V2YWx1YXRpb25Sb3VuZCAhPSBtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgp
ICYmIGV2YWx1YXRvcikKLSAgICAgICAgc2V0TWF0Y2hlcyhldmFsdWF0b3ItPmV2YWwobV9tZWRp
YS5nZXQoKSkpOworICAgIGlmIChtX2V2YWx1YXRpb25Sb3VuZCAhPSBtX21hdGNoZXItPmV2YWx1
YXRpb25Sb3VuZCgpKQorICAgICAgICBzZXRNYXRjaGVzKGV2YWx1YXRvci5ldmFsdWF0ZShtX21l
ZGlhLmdldCgpKSk7CiAgICAgbm90aWZpY2F0aW9uTmVlZGVkID0gbV9jaGFuZ2VSb3VuZCA9PSBt
X21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5
TGlzdC5oCmluZGV4IDY5YWZhNzZiMGUwNmIwMjg0NDQ3OTRjZWMxZjA5YmU4MTZiYTU2ODkuLmYz
OTI5MGQyODJkNTA1MThiYmI1MjgwOTdiODIzZDc1NTVkYzRjOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5TGlzdC5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5TGlzdF9oCi0jZGVmaW5lIE1lZGlh
UXVlcnlMaXN0X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzgsMjggKzM3LDI3IEBAIGNsYXNzIE1lZGlh
UXVlcnlTZXQ7CiAKIGNsYXNzIE1lZGlhUXVlcnlMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8TWVk
aWFRdWVyeUxpc3Q+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlMaXN0PiBj
cmVhdGUoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4sIFBhc3NSZWZQdHI8TWVkaWFRdWVy
eVNldD4sIGJvb2wpOworICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeUxpc3Q+IGNyZWF0ZShNZWRp
YVF1ZXJ5TWF0Y2hlciYsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmLCBib29sKTsKICAgICB+TWVkaWFR
dWVyeUxpc3QoKTsKIAogICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwogICAgIGJvb2wgbWF0Y2hl
cygpOwogCi0gICAgdm9pZCBhZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI+KTsKLSAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcj4pOworICAgIHZvaWQgYWRkTGlzdGVuZXIoUmVmUHRyPE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI+JiYpOworICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoUmVmUHRyPE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI+JiYpOwogCi0gICAgdm9pZCBldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9y
KiwgYm9vbCYgbm90aWZpY2F0aW9uTmVlZGVkKTsKKyAgICB2b2lkIGV2YWx1YXRlKE1lZGlhUXVl
cnlFdmFsdWF0b3ImLCBib29sJiBub3RpZmljYXRpb25OZWVkZWQpOwogCiBwcml2YXRlOgotICAg
IE1lZGlhUXVlcnlMaXN0KFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+LCBQYXNzUmVmUHRy
PE1lZGlhUXVlcnlTZXQ+LCBib29sIG1hdGNoZXMpOworICAgIE1lZGlhUXVlcnlMaXN0KE1lZGlh
UXVlcnlNYXRjaGVyJiwgUmVmPE1lZGlhUXVlcnlTZXQ+JiYsIGJvb2wgbWF0Y2hlcyk7CisKICAg
ICB2b2lkIHNldE1hdGNoZXMoYm9vbCk7CiAKLSAgICBSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+
IG1fbWF0Y2hlcjsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9tZWRpYTsKKyAgICBSZWY8
TWVkaWFRdWVyeU1hdGNoZXI+IG1fbWF0Y2hlcjsKKyAgICBSZWY8TWVkaWFRdWVyeVNldD4gbV9t
ZWRpYTsKICAgICB1bnNpZ25lZCBtX2V2YWx1YXRpb25Sb3VuZDsgLy8gSW5kaWNhdGVzIGlmIHRo
ZSBxdWVyeSBoYXMgYmVlbiBldmFsdWF0ZWQgYWZ0ZXIgdGhlIGxhc3Qgc3R5bGUgc2VsZWN0b3Ig
Y2hhbmdlLgogICAgIHVuc2lnbmVkIG1fY2hhbmdlUm91bmQ7IC8vIFVzZWQgdG8ga25vdyBpZiB0
aGUgcXVlcnkgaGFzIGNoYW5nZWQgaW4gdGhlIGxhc3Qgc3R5bGUgc2VsZWN0b3IgY2hhbmdlLgog
ICAgIGJvb2wgbV9tYXRjaGVzOwogfTsKIAogfQotCi0jZW5kaWYgLy8gTWVkaWFRdWVyeUxpc3Rf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKaW5kZXggMTYwYzdkMzYy
OGVkMjcyYTA2MWRlY2JjYTQ2NTcxMWYxMjU5ODQ4Ny4uZDhiODc4NzQ1ZmIxNWQyZGE3M2QwNmQ0
ODFiNWYwZGVlNDk1OGI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVl
cnlNYXRjaGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIu
Y3BwCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAiTWVkaWFRdWVyeU1hdGNoZXIuaCIKIAog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBA
IC0zMywzMSArMzIsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVF1ZXJ5TWF0
Y2hlcjo6TGlzdGVuZXI6Okxpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5l
cj4gbGlzdGVuZXIsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IHF1ZXJ5KQotICAgIDogbV9s
aXN0ZW5lcihsaXN0ZW5lcikKLSAgICAsIG1fcXVlcnkocXVlcnkpCitNZWRpYVF1ZXJ5TWF0Y2hl
cjo6TWVkaWFRdWVyeU1hdGNoZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVu
dCgmZG9jdW1lbnQpCiB7CiB9CiAKLU1lZGlhUXVlcnlNYXRjaGVyOjpMaXN0ZW5lcjo6fkxpc3Rl
bmVyKCkKLXsKLX0KLQotdm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6TGlzdGVuZXI6OmV2YWx1YXRl
KE1lZGlhUXVlcnlFdmFsdWF0b3IqIGV2YWx1YXRvcikKLXsKLSAgICBib29sIG5vdGlmeTsKLSAg
ICBtX3F1ZXJ5LT5ldmFsdWF0ZShldmFsdWF0b3IsIG5vdGlmeSk7Ci0gICAgaWYgKG5vdGlmeSkK
LSAgICAgICAgbV9saXN0ZW5lci0+cXVlcnlDaGFuZ2VkKG1fcXVlcnkuZ2V0KCkpOwotfQotCi1N
ZWRpYVF1ZXJ5TWF0Y2hlcjo6TWVkaWFRdWVyeU1hdGNoZXIoRG9jdW1lbnQqIGRvY3VtZW50KQot
ICAgIDogbV9kb2N1bWVudChkb2N1bWVudCkKLSAgICAsIG1fZXZhbHVhdGlvblJvdW5kKDEpCi17
Ci0gICAgQVNTRVJUKG1fZG9jdW1lbnQpOwotfQotCiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6fk1lZGlh
UXVlcnlNYXRjaGVyKCkKIHsKIH0KQEAgLTY1LDcgKzQ0LDcgQEAgTWVkaWFRdWVyeU1hdGNoZXI6
On5NZWRpYVF1ZXJ5TWF0Y2hlcigpCiB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudERl
c3Ryb3llZCgpCiB7CiAgICAgbV9saXN0ZW5lcnMuY2xlYXIoKTsKLSAgICBtX2RvY3VtZW50ID0g
MDsKKyAgICBtX2RvY3VtZW50ID0gbnVsbHB0cjsKIH0KIAogU3RyaW5nIE1lZGlhUXVlcnlNYXRj
aGVyOjptZWRpYVR5cGUoKSBjb25zdApAQCAtODEsMjMgKzYwLDE5IEBAIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gTWVkaWFRdWVyeU1hdGNoZXI6OmRvY3VtZW50RWxlbWVudFVzZXJBZ2Vu
dFN0eWxlKCkKICAgICBpZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmZyYW1lKCkpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgRWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0g
bV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnRFbGVtZW50
ID0gbV9kb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1l
bnQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVu
c3VyZVN0eWxlUmVzb2x2ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgbV9k
b2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0
eWxlOwogfQogCi1ib29sIE1lZGlhUXVlcnlNYXRjaGVyOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1
ZXJ5U2V0KiBtZWRpYSkKK2Jvb2wgTWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKGNvbnN0IE1l
ZGlhUXVlcnlTZXQmIG1lZGlhKQogewotICAgIGlmICghbWVkaWEpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQogICAgIGF1dG8gc3R5bGUgPSBkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSgp
OwogICAgIGlmICghc3R5bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBNZWRpYVF1ZXJ5
RXZhbHVhdG9yIGV2YWx1YXRvcihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwgc3R5
bGUuZ2V0KCkpOwotICAgIHJldHVybiBldmFsdWF0b3IuZXZhbChtZWRpYSk7CisgICAgcmV0dXJu
IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyBtZWRpYVR5cGUoKSwgKm1fZG9jdW1lbnQsIHN0eWxlLmdl
dCgpIH0uZXZhbHVhdGUobWVkaWEpOwogfQogCiBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IE1lZGlh
UXVlcnlNYXRjaGVyOjptYXRjaE1lZGlhKGNvbnN0IFN0cmluZyYgcXVlcnkpCkBAIC0xMDUsMzQg
KzgwLDMyIEBAIFJlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4gTWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNo
TWVkaWEoY29uc3QgU3RyaW5nJiBxdWVyeSkKICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVk
aWFRdWVyeVNldDo6Y3JlYXRlKHF1ZXJ5KTsKKyAgICBhdXRvIG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKHF1ZXJ5KTsKICNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKICAg
ICAvLyBBZGQgd2FybmluZyBtZXNzYWdlIHRvIGluc3BlY3RvciB3aGVuZXZlciBkcGkvZHBjbSB2
YWx1ZXMgYXJlIHVzZWQgZm9yICJzY3JlZW4iIG1lZGlhLgogICAgIHJlcG9ydE1lZGlhUXVlcnlX
YXJuaW5nSWZOZWVkZWQobV9kb2N1bWVudCwgbWVkaWEuZ2V0KCkpOwogI2VuZGlmCi0gICAgcmV0
dXJuIE1lZGlhUXVlcnlMaXN0OjpjcmVhdGUodGhpcywgbWVkaWEsIGV2YWx1YXRlKG1lZGlhLmdl
dCgpKSk7CisgICAgYm9vbCByZXN1bHQgPSBldmFsdWF0ZShtZWRpYS5nZXQoKSk7CisgICAgcmV0
dXJuIE1lZGlhUXVlcnlMaXN0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUobWVkaWEpLCByZXN1bHQp
OwogfQogCi12b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjphZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0
PiBxdWVyeSkKK3ZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OmFkZExpc3RlbmVyKFJlZjxNZWRpYVF1
ZXJ5TGlzdExpc3RlbmVyPiYmIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5TGlzdCYgcXVlcnkpCiB7CiAg
ICAgaWYgKCFtX2RvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fbGlzdGVuZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgqbV9saXN0
ZW5lcnNbaV0tPmxpc3RlbmVyKCkgPT0gKmxpc3RlbmVyICYmIG1fbGlzdGVuZXJzW2ldLT5xdWVy
eSgpID09IHF1ZXJ5KQorICAgIGZvciAoYXV0byYgZXhpc3RpbmdMaXN0ZW5lciA6IG1fbGlzdGVu
ZXJzKSB7CisgICAgICAgIGlmIChleGlzdGluZ0xpc3RlbmVyLmxpc3RlbmVyLmdldCgpID09IGxp
c3RlbmVyLmdldCgpICYmIGV4aXN0aW5nTGlzdGVuZXIucXVlcnkucHRyKCkgPT0gJnF1ZXJ5KQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbGlzdGVuZXJzLmFwcGVuZChzdGQ6
Om1ha2VfdW5pcXVlPExpc3RlbmVyPihsaXN0ZW5lciwgcXVlcnkpKTsKKyAgICBtX2xpc3RlbmVy
cy5hcHBlbmQoTGlzdGVuZXIgeyBXVEZNb3ZlKGxpc3RlbmVyKSwgcXVlcnkgfSk7CiB9CiAKLXZv
aWQgTWVkaWFRdWVyeU1hdGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIqIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5TGlzdCogcXVlcnkpCit2b2lkIE1lZGlhUXVlcnlNYXRj
aGVyOjpyZW1vdmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBsaXN0ZW5lciwgTWVk
aWFRdWVyeUxpc3QmIHF1ZXJ5KQogewotICAgIGlmICghbV9kb2N1bWVudCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9saXN0ZW5lcnMucmVtb3ZlRmlyc3RNYXRjaGluZyhbbGlzdGVuZXIsIHF1
ZXJ5XShhdXRvJiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAqY3VycmVudC0+bGlzdGVuZXIo
KSA9PSAqbGlzdGVuZXIgJiYgY3VycmVudC0+cXVlcnkoKSA9PSBxdWVyeTsKKyAgICBtX2xpc3Rl
bmVycy5yZW1vdmVGaXJzdE1hdGNoaW5nKFsmbGlzdGVuZXIsICZxdWVyeV0oYXV0byYgZXhpc3Rp
bmdMaXN0ZW5lcikgeworICAgICAgICByZXR1cm4gZXhpc3RpbmdMaXN0ZW5lci5saXN0ZW5lci5n
ZXQoKSA9PSBsaXN0ZW5lciAmJiBleGlzdGluZ0xpc3RlbmVyLnF1ZXJ5LnB0cigpID09ICZxdWVy
eTsKICAgICB9KTsKIH0KIApAQCAtMTQ1LDkgKzExOCwxNCBAQCB2b2lkIE1lZGlhUXVlcnlNYXRj
aGVyOjpzdHlsZVJlc29sdmVyQ2hhbmdlZCgpCiAgICAgYXV0byBzdHlsZSA9IGRvY3VtZW50RWxl
bWVudFVzZXJBZ2VudFN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKG1lZGlhVHlwZSgpLCBtX2RvY3VtZW50
LT5mcmFtZSgpLCBzdHlsZS5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xp
c3RlbmVycy5zaXplKCk7ICsraSkKLSAgICAgICAgbV9saXN0ZW5lcnNbaV0tPmV2YWx1YXRlKCZl
dmFsdWF0b3IpOworCisgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IgeyBtZWRpYVR5
cGUoKSwgKm1fZG9jdW1lbnQsIHN0eWxlLmdldCgpIH07CisgICAgZm9yIChhdXRvJiBsaXN0ZW5l
ciA6IG1fbGlzdGVuZXJzKSB7CisgICAgICAgIGJvb2wgbm90aWZ5OworICAgICAgICBsaXN0ZW5l
ci5xdWVyeS0+ZXZhbHVhdGUoZXZhbHVhdG9yLCBub3RpZnkpOworICAgICAgICBpZiAobm90aWZ5
KQorICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXItPnF1ZXJ5Q2hhbmdlZChsaXN0ZW5lci5x
dWVyeS5wdHIoKSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oCmluZGV4IGI3NzczZDM4ZTgyZWQ5NDUwNTM0NTNj
MjM4MWExZjQ4MzQwZjRkMDAuLjQ2NDhlZTZmYzQ3YTNlNTYxMTc3MmI4YzE4ZmMzZTAxNGNjMzM4
ZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oCkBAIC0xNyw4ICsxNyw3
IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBNZWRp
YVF1ZXJ5TWF0Y2hlcl9oCi0jZGVmaW5lIE1lZGlhUXVlcnlNYXRjaGVyX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0zNyw1
MyArMzYsNDMgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiAvLyBNZWRpYVF1ZXJ5TWF0Y2hlciBjbGFz
cyBpcyByZXNwb25zaWJsZSBmb3Iga2VlcGluZyBhIHZlY3RvciBvZiBwYWlycwogLy8gTWVkaWFR
dWVyeUxpc3QgeCBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLiBJdCBpcyByZXNwb25zaWJsZSBmb3Ig
ZXZhbHVhdGluZyB0aGUgcXVlcmllcwogLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkIGFuZCB0byBj
YWxsIHRoZSBsaXN0ZW5lcnMgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcXVlcnkgaGFzIGNoYW5nZWQu
Ci0vLyBUaGUgbGlzdGVuZXJzIG11c3QgYmUgY2FsbGVkIGluIHRoZSB2ZXJ5IHNhbWUgb3JkZXIg
aW4gd2hpY2ggdGhleSBoYXZlIGJlZW4gYWRkZWQuCisvLyBUaGUgbGlzdGVuZXJzIG11c3QgYmUg
Y2FsbGVkIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCiAKIGNsYXNzIE1l
ZGlhUXVlcnlNYXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFRdWVyeU1hdGNoZXI+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlNYXRjaGVyPiBjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlNYXRjaGVyKGRv
Y3VtZW50KSk7IH0KKyAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlNYXRjaGVyPiBjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlNYXRjaGVy
KGRvY3VtZW50KSk7IH0KICAgICB+TWVkaWFRdWVyeU1hdGNoZXIoKTsKKwogICAgIHZvaWQgZG9j
dW1lbnREZXN0cm95ZWQoKTsKIAotICAgIHZvaWQgYWRkTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4pOwotICAgIHZv
aWQgcmVtb3ZlTGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciosIE1lZGlhUXVlcnlMaXN0
Kik7CisgICAgdm9pZCBhZGRMaXN0ZW5lcihSZWY8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiwg
TWVkaWFRdWVyeUxpc3QmKTsKKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXImLCBNZWRpYVF1ZXJ5TGlzdCYpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0
PiBtYXRjaE1lZGlhKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZXZhbHVhdGlvblJv
dW5kKCkgY29uc3QgeyByZXR1cm4gbV9ldmFsdWF0aW9uUm91bmQ7IH0KLSAgICB2b2lkIHN0eWxl
UmVzb2x2ZXJDaGFuZ2VkKCk7Ci0gICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0
Kik7Ci0KLXByaXZhdGU6Ci0gICAgY2xhc3MgTGlzdGVuZXIgewotICAgICAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExpc3RlbmVyKFBhc3NSZWZQdHI8
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4sIFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+KTsKLSAg
ICAgICAgfkxpc3RlbmVyKCk7CiAKLSAgICAgICAgdm9pZCBldmFsdWF0ZShNZWRpYVF1ZXJ5RXZh
bHVhdG9yKik7CisgICAgdm9pZCBzdHlsZVJlc29sdmVyQ2hhbmdlZCgpOwogCi0gICAgICAgIE1l
ZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQo
KTsgfQotICAgICAgICBNZWRpYVF1ZXJ5TGlzdCogcXVlcnkoKSB7IHJldHVybiBtX3F1ZXJ5Lmdl
dCgpOyB9CisgICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0Jik7CiAKLSAgICBw
cml2YXRlOgotICAgICAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbV9saXN0ZW5l
cjsKLSAgICAgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBtX3F1ZXJ5OworcHJpdmF0ZToKKyAg
ICBzdHJ1Y3QgTGlzdGVuZXIgeworICAgICAgICBSZWY8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4g
bGlzdGVuZXI7CisgICAgICAgIFJlZjxNZWRpYVF1ZXJ5TGlzdD4gcXVlcnk7CiAgICAgfTsKIAot
ICAgIE1lZGlhUXVlcnlNYXRjaGVyKERvY3VtZW50Kik7CisgICAgZXhwbGljaXQgTWVkaWFRdWVy
eU1hdGNoZXIoRG9jdW1lbnQmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRv
Y3VtZW50RWxlbWVudFVzZXJBZ2VudFN0eWxlKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lZGlhVHlw
ZSgpIGNvbnN0OwogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxMaXN0ZW5lcj4+IG1fbGlzdGVuZXJzOworICAgIFZlY3RvcjxMaXN0ZW5lcj4g
bV9saXN0ZW5lcnM7CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGF0IHN0eWxl
IHNlbGVjdG9yIGNoYW5nZXMuCiAgICAgLy8gSXQgaXMgdXNlZCB0byBhdm9pZCBldmFsdWF0aW5n
IHF1ZXJpZXMgbW9yZSB0aGVuIG9uY2UgYW5kIHRvIG1ha2Ugc3VyZQogICAgIC8vIHRoYXQgYSBt
ZWRpYSBxdWVyeSByZXN1bHQgY2hhbmdlIGlzIG5vdGlmaWVkIGV4YWN0bHkgb25jZS4KLSAgICB1
bnNpZ25lZCBtX2V2YWx1YXRpb25Sb3VuZDsKKyAgICB1bnNpZ25lZCBtX2V2YWx1YXRpb25Sb3Vu
ZCB7IDEgfTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE1lZGlh
UXVlcnlNYXRjaGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAppbmRleCA3NWIyNWRiMGQ5ZGMzNmE2
ZWJjODg1MTAwZjIxN2YwNDU5YzkyMjI3Li40NGFjNjJiYTVkYjNiODdkZjNiMGFiNWE3MWIxMzZk
MjE5YTg2ZDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9p
ZCBSdWxlU2V0OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4+JiBydWxlcywgY29uc3QgTWUKICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0
eWxlUnVsZVBhZ2U+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgZWxzZSBpZiAoaXM8U3R5bGVSdWxl
TWVkaWE+KCpydWxlKSkgewogICAgICAgICAgICAgYXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8
U3R5bGVSdWxlTWVkaWE+KCpydWxlKTsKLSAgICAgICAgICAgIGlmICgoIW1lZGlhUnVsZS5tZWRp
YVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbChtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksIHJlc29s
dmVyKSkpCisgICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkgfHwgbWVk
aXVtLmV2YWx1YXRlKCptZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCiAgICAg
ICAgICAgICAgICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpLCBtZWRpdW0s
IHJlc29sdmVyLCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBpc0luaXRpYXRpbmdFbGVtZW50
SW5Vc2VyQWdlbnRTaGFkb3dUcmVlLCBhZGRSdWxlRmxhZ3MpOwogICAgICAgICB9IGVsc2UgaWYg
KGlzPFN0eWxlUnVsZUZvbnRGYWNlPigqcnVsZSkgJiYgcmVzb2x2ZXIpIHsKICAgICAgICAgICAg
IC8vIEFkZCB0aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgpAQCAtMzYzLDcgKzM2Myw3IEBAIHZv
aWQgUnVsZVNldDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJh
c2U+PiYgcnVsZXMsIGNvbnN0IE1lCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0
eWxlU2hlZXRDb250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1
bSwgU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogc2hl
ZXQuaW1wb3J0UnVsZXMoKSkgewotICAgICAgICBpZiAocnVsZS0+c3R5bGVTaGVldCgpICYmICgh
cnVsZS0+bWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwocnVsZS0+bWVkaWFRdWVyaWVzKCks
IHJlc29sdmVyKSkpCisgICAgICAgIGlmIChydWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFydWxlLT5t
ZWRpYVF1ZXJpZXMoKSB8fCBtZWRpdW0uZXZhbHVhdGUoKnJ1bGUtPm1lZGlhUXVlcmllcygpLCBy
ZXNvbHZlcikpKQogICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoKnJ1bGUtPnN0eWxlU2hl
ZXQoKSwgbWVkaXVtLCByZXNvbHZlcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNp
emVMaXN0LmNwcAppbmRleCA3NDE3NTFmMzBkNDQyNmIzOGNhM2EwZTA3YmI1MWVkYmZmYTc0MTM5
Li5kOWY1MjQ3NTlmOWQxM2JhM2FkMDUwZDMwYTkxMTZjNzY4ZTFmZTM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Tb3VyY2VTaXplTGlzdC5jcHAKQEAgLTI0LDU4ICsyNCw0NyBAQAogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNs
dWRlICJNZWRpYUxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCiAjaW5jbHVkZSAiTWVk
aWFRdWVyeUV2YWx1YXRvci5oIgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRl
ICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4
cD4mJiBleHByZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkK
K3N0YXRpYyBib29sIG1hdGNoKGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBleHByZXNzaW9u
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBp
ZiAoZXhwcmVzc2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGF1dG8gZXhwTGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4+KCk7Ci0gICAgZXhwTGlzdC0+YXBwZW5kKFdURk1v
dmUoZXhwcmVzc2lvbikpOwotCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcnlT
ZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGUoKTsKLSAgICBtZWRpYVF1ZXJ5U2V0LT5hZGRNZWRp
YVF1ZXJ5KHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwgImFs
bCIsIFdURk1vdmUoZXhwTGlzdCkpKTsKLQotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFR
dWVyeUV2YWx1YXRvcigic2NyZWVuIiwgZnJhbWUsICZzdHlsZSk7Ci0gICAgcmV0dXJuIG1lZGlh
UXVlcnlFdmFsdWF0b3IuZXZhbChtZWRpYVF1ZXJ5U2V0LmdldCgpKTsKKyAgICByZXR1cm4gZXhw
cmVzc2lvbi5tZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkgfHwgTWVkaWFRdWVyeUV2YWx1YXRvciB7
ICJzY3JlZW4iLCBkb2N1bWVudCwgJnN0eWxlIH0uZXZhbHVhdGUoZXhwcmVzc2lvbik7CiB9CiAK
LXN0YXRpYyBmbG9hdCBkZWZhdWx0TGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVu
ZGVyVmlldyogdmlldykKK3N0YXRpYyBmbG9hdCBkZWZhdWx0TGVuZ3RoKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUmVuZGVyVmlldyYgcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGNsYW1wVG88
ZmxvYXQ+KENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3KSwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19WVywgMTAwLjApKTsKKyAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oQ1NTUHJp
bWl0aXZlVmFsdWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKHsgJnN0eWxlLCAmc3R5bGUs
ICZyZW5kZXJlciB9LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXLCAxMDAuMCkpOwogfQogCi1z
dGF0aWMgZmxvYXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgUmVuZGVyVmlldyogdmlldykKK3N0YXRpYyBmbG9hdCBjb21wdXRlTGVuZ3Ro
KENTU1ZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3JiBy
ZW5kZXJlcikKIHsKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRh
KCZzdHlsZSwgJnN0eWxlLCB2aWV3KTsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNv
bnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCAmcmVuZGVyZXIpOwogICAgIGlmIChpczxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAg
ICBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkp
Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgdmlldyk7CisgICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgcmVuZGVyZXIpOwogICAgICAgICByZXR1
cm4gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwog
ICAgIH0KICAgICBpZiAoaXM8Q1NTQ2FsY1ZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NDYWxjVmFsdWU+KCp2YWx1ZSkuY29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25E
YXRhKTsKLSAgICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgdmlldyk7CisgICAgICAgIHJl
dHVybiBkb3duY2FzdDxDU1NDYWxjVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVuZ3RoUHgoY29udmVy
c2lvbkRhdGEpOworICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCByZW5kZXJlcik7CiB9
CiAKLWZsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0ZSwg
UmVuZGVyVmlldyogdmlldywgRnJhbWUqIGZyYW1lKQorZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0
ZShEb2N1bWVudCYgZG9jdW1lbnQsIFN0cmluZ1ZpZXcgc2l6ZXNBdHRyaWJ1dGUpCiB7Ci0gICAg
aWYgKCF2aWV3KQorICAgIGF1dG8qIHJlbmRlcmVyID0gZG9jdW1lbnQucmVuZGVyVmlldygpOwor
ICAgIGlmICghcmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIGF1dG8mIHN0eWxlID0g
dmlldy0+c3R5bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAg
IGZvciAoYXV0byYgc291cmNlU2l6ZSA6IENTU1BhcnNlcihDU1NTdHJpY3RNb2RlKS5wYXJzZVNp
emVzQXR0cmlidXRlKHNpemVzQXR0cmlidXRlKSkgewotICAgICAgICBpZiAobWF0Y2goV1RGTW92
ZShzb3VyY2VTaXplLmV4cHJlc3Npb24pLCBzdHlsZSwgZnJhbWUpKQotICAgICAgICAgICAgcmV0
dXJuIGNvbXB1dGVMZW5ndGgoc291cmNlU2l6ZS5sZW5ndGguZ2V0KCksIHN0eWxlLCB2aWV3KTsK
KyAgICAgICAgaWYgKG1hdGNoKHNvdXJjZVNpemUuZXhwcmVzc2lvbiwgc3R5bGUsIGRvY3VtZW50
KSkKKyAgICAgICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdl
dCgpLCBzdHlsZSwgKnJlbmRlcmVyKTsKICAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgo
c3R5bGUsIHZpZXcpOworICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCAqcmVuZGVyZXIp
OwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvU291cmNlU2l6ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlz
dC5oCmluZGV4IGUxYWVmOTcwZmVmYTBlYjEyYWUxYjVmM2M1ZTRlNDZjMDM3NjY3ZDEuLmFiNzE2
NGU2M2JhMDhlODJjYzgzNzhmMjliZTE0NTI0YmQ5NTEyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3Vy
Y2VTaXplTGlzdC5oCkBAIC0xOCwxOCArMTgsMTQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgogICovCiAKLSNpZm5kZWYgU291cmNlU2l6ZUxpc3RfaAotI2RlZmluZSBTb3VyY2VT
aXplTGlzdF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7Ci1jbGFzcyBSZW5kZXJWaWV3OworY2xh
c3MgRG9jdW1lbnQ7CiAKLWZsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzaXpl
c0F0dHJpYnV0ZSwgUmVuZGVyVmlldyosIEZyYW1lKik7CitmbG9hdCBwYXJzZVNpemVzQXR0cmli
dXRlKERvY3VtZW50JiwgU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0ZSk7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFNvdXJjZVNpemVMaXN0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZU1lZGlhLmNwcAppbmRleCAzNGRlOGNiYTEyNmQxNDcyNDdkZDhkYTg1ZjQ2ZWFiYzliMDVkZTU4
Li43Y2RkMjcxN2MzMTJiZTc1MjM3MzBlYTA3N2FjYzY0ZmU2NjdiYWVlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlTWVkaWEuY3BwCkBAIC02MywxMiArNjMsMTEgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRj
aE1lZGl1bShjb25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAogCiAgICAgYXV0byByb290U3R5bGUg
PSBkb2N1bWVudC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1l
bnRFbGVtZW50LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVs
ZXMpLnJlbmRlclN0eWxlOwogCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVk
aWFRdWVyeVNldDo6Y3JlYXRlKCk7CisgICAgYXV0byBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNy
ZWF0ZSgpOwogICAgIGlmICghbWVkaWEtPnBhcnNlKHF1ZXJ5KSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKHR5cGUoKSwgbV9mcmFt
ZSwgcm9vdFN0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gc2NyZWVuRXZhbC5ldmFsKG1lZGlhLmdl
dCgpKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7IHR5cGUoKSwgKmRvY3VtZW50
LCByb290U3R5bGUuZ2V0KCkgfS5ldmFsdWF0ZShtZWRpYS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA4ZjZk
YWZmNDc2OTY2N2EyYjM2MzBlOGJlODU5ZTMzMTIxMzYxMzRkLi5kODgxYzE1YWExZjk4MDgwMjA2
ZGE0ZGJjM2YwYWY3ZmFiZTk1ODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC0yNzAsMTkgKzI3MCwxOSBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3Vt
ZW50JiBkb2N1bWVudCkKICAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhhdCBv
d25zIHRoZSBzdHlsZSBzZWxlY3RvcgogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZG9jdW1lbnQu
dmlldygpOwogICAgIGlmICh2aWV3KQotICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlx
dWU8TWVkaWFRdWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCkpOworICAgICAgICBtX21l
ZGlhUXVlcnlFdmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgdmlldy0+bWVkaWFUeXBl
KCkgfTsKICAgICBlbHNlCi0gICAgICAgIG1fbWVkaXVtID0gc3RkOjptYWtlX3VuaXF1ZTxNZWRp
YVF1ZXJ5RXZhbHVhdG9yPigiYWxsIik7CisgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1YXRvciA9
IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyAiYWxsIiB9OwogCiAgICAgaWYgKHJvb3QpCiAgICAgICAg
IG1fcm9vdERlZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgqcm9vdCwgbV9kb2N1bWVudC5y
ZW5kZXJTdHlsZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKICAg
ICBpZiAobV9yb290RGVmYXVsdFN0eWxlICYmIHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gc3Rk
OjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPih2aWV3LT5tZWRpYVR5cGUoKSwgJnZp
ZXctPmZyYW1lKCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSk7CisgICAgICAgIG1fbWVkaWFR
dWVyeUV2YWx1YXRvciA9IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5cGUoKSwg
bV9kb2N1bWVudCwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpIH07CiAKICAgICBtX3J1bGVTZXRz
LnJlc2V0QXV0aG9yU3R5bGUoKTsKIAotICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShtX2Rv
Y3VtZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCksICptX21lZGl1bSwgKnRoaXMpOworICAgIG1f
cnVsZVNldHMuaW5pdFVzZXJTdHlsZShtX2RvY3VtZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCks
IG1fbWVkaWFRdWVyeUV2YWx1YXRvciwgKnRoaXMpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykK
ICAgICBpZiAobV9kb2N1bWVudC5zdmdFeHRlbnNpb25zKCkpIHsKQEAgLTI5NSw3ICsyOTUsNyBA
QCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVudCkKIAogdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVm
UHRyPENTU1N0eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMpCiB7Ci0gICAgbV9ydWxlU2V0cy5hcHBl
bmRBdXRob3JTdHlsZVNoZWV0cyhzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVj
dG9yQ1NTT01XcmFwcGVycywgdGhpcyk7CisgICAgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHls
ZVNoZWV0cyhzdHlsZVNoZWV0cywgJm1fbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9pbnNwZWN0b3JD
U1NPTVdyYXBwZXJzLCB0aGlzKTsKICAgICBpZiAoYXV0byByZW5kZXJWaWV3ID0gZG9jdW1lbnQo
KS5yZW5kZXJWaWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udENhc2NhZGUo
KS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogCkBAIC00MTksNyArNDE5LDcg
QEAgRWxlbWVudFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXIKIAogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNv
bGxlY3RvcihlbGVtZW50LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmlsdGVyKCkpOwog
ICAgIGNvbGxlY3Rvci5zZXRSZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpOwotICAg
IGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOworICAgIGNvbGxlY3Rvci5zZXRN
ZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBpZiAobWF0Y2hpbmdCZWhhdmlv
ciA9PSBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykKICAgICAgICAgY29sbGVjdG9yLm1hdGNoVUFS
dWxlcygpOwpAQCAtNTgyLDcgKzU4Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmCiAgICAg
Ly8gQ2hlY2sgVUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KICAgICBFbGVtZW50UnVsZUNvbGxl
Y3RvciBjb2xsZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRl
cigpKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb1N0eWxlUmVx
dWVzdCk7Ci0gICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgY29s
bGVjdG9yLnNldE1lZGl1bSgmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICBjb2xsZWN0b3Iu
bWF0Y2hVQVJ1bGVzKCk7CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsK
QEAgLTEwODYsNyArMTA4Niw3IEBAIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVuCiAgICAgRWxlbWVu
dFJ1bGVDb2xsZWN0b3IgY29sbGVjdG9yKCplbGVtZW50LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNl
bGVjdG9yRmlsdGVyKCkpOwogICAgIGNvbGxlY3Rvci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6
TW9kZTo6Q29sbGVjdGluZ1J1bGVzKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1
ZXN0KFBzZXVkb1N0eWxlUmVxdWVzdChwc2V1ZG9JZCkpOwotICAgIGNvbGxlY3Rvci5zZXRNZWRp
dW0obV9tZWRpdW0uZ2V0KCkpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVy
eUV2YWx1YXRvcik7CiAKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxl
cykgewogICAgICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50
IHNoZWV0LgpAQCAtMTg3OCwxNiArMTg3OCwxNSBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvbwog
ICAgIH0KIH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit2b2lk
IFN0eWxlUmVzb2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25z
dCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXN1bHQpCiB7Ci0gICAg
bV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPE1lZGlhUXVlcnlSZXN1bHQ+KCpleHByLCByZXN1bHQpKTsKKyAgICBtX3ZpZXdwb3J0RGVw
ZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1bHQgeyBleHByZXNz
aW9uLCByZXN1bHQgfSk7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVz
QWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzID0gbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlmIChtX21lZGl1bS0+ZXZhbCgmbV92
aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24pICE9IG1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCisgICAgZm9y
IChhdXRvJiByZXN1bHQgOiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpIHsK
KyAgICAgICAgaWYgKG1fbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZShyZXN1bHQuZXhwcmVz
c2lvbikgIT0gcmVzdWx0LnJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyZjA2
NGU2MGNjZGY0NzAxNjQxNDYyYWJjNDczYmRmMzFhYzUwN2YwLi42M2E2ZDhkMWVlMTY4YzlhMGUz
NjE5NGZhZjM4NWI2MTc0NTg1ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAg
LTE1NSw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMo
KSB7IHJldHVybiBtX3J1bGVTZXRzOyB9CiAgICAgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVs
ZVNldHMoKSBjb25zdCB7IHJldHVybiBtX3J1bGVTZXRzOyB9CiAKLSAgICBjb25zdCBNZWRpYVF1
ZXJ5RXZhbHVhdG9yJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fbWVk
aXVtOyB9CisgICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRv
cigpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyeUV2YWx1YXRvcjsgfQogCiAgICAgdm9pZCBz
ZXRPdmVycmlkZURvY3VtZW50RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyBtX292
ZXJyaWRlRG9jdW1lbnRFbGVtZW50U3R5bGUgPSBzdHlsZTsgfQogCkBAIC0yMDEsNyArMjAxLDcg
QEAgcHVibGljOgogICAgIFZpZXdwb3J0U3R5bGVSZXNvbHZlciogdmlld3BvcnRTdHlsZVJlc29s
dmVyKCkgeyByZXR1cm4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIuZ2V0KCk7IH0KICNlbmRpZgog
Ci0gICAgdm9pZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVk
aWFRdWVyeUV4cCosIGJvb2wgcmVzdWx0KTsKKyAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50
TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYsIGJvb2wgcmVzdWx0
KTsKICAgICBib29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5pc0VtcHR5KCk7IH0K
ICAgICBib29sIGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0
OwogCkBAIC01MTcsNyArNTE3LDcgQEAgcHJpdmF0ZToKIAogICAgIFRpbWVyIG1fbWF0Y2hlZFBy
b3BlcnRpZXNDYWNoZVN3ZWVwVGltZXI7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVy
eUV2YWx1YXRvcj4gbV9tZWRpdW07CisgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBtX21lZGlhUXVl
cnlFdmFsdWF0b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZh
dWx0U3R5bGU7CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKQEAgLTUyNiw3ICs1MjYsNyBA
QCBwcml2YXRlOgogCiAgICAgUmVuZGVyU3R5bGUqIG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRT
dHlsZSB7IG51bGxwdHIgfTsKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVy
eVJlc3VsdD4+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKKyAgICBWZWN0
b3I8TWVkaWFRdWVyeVJlc3VsdD4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRz
OwogCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICBSZWZQdHI8Vmlld3Bv
cnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDZmMzNmMjM0ZGI3ODFjZWI2Y2QxODNkZjVkZmZhNDg0MDkxNmQ0NzUuLmQw
NjA3NTUxZTYyM2QyMTQ2ZTk1YTkwNWM5OWM1NGY3N2Y0OGUzNGMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtODAyLDcgKzgwMiw3IEBAIHZvaWQgRG9jdW1lbnQ6OmNsZWFyU2VsZWN0b3JR
dWVyeUNhY2hlKCkKIE1lZGlhUXVlcnlNYXRjaGVyJiBEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNo
ZXIoKQogewogICAgIGlmICghbV9tZWRpYVF1ZXJ5TWF0Y2hlcikKLSAgICAgICAgbV9tZWRpYVF1
ZXJ5TWF0Y2hlciA9IE1lZGlhUXVlcnlNYXRjaGVyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIG1f
bWVkaWFRdWVyeU1hdGNoZXIgPSBNZWRpYVF1ZXJ5TWF0Y2hlcjo6Y3JlYXRlKCp0aGlzKTsKICAg
ICByZXR1cm4gKm1fbWVkaWFRdWVyeU1hdGNoZXI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9JbmxpbmVTdHlsZVNoZWV0T3duZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9t
L0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAKaW5kZXggYWU0MWY3M2JiYWM0ZGY1ODBjYzc2ZjM0
ZGVjNjU5ODQyZTMyMjE5MS4uOWZjNDI2ZDFiODM4ZTJkM2UyMWQ4MzJkNDdiYjYyMTg5ZWExOTli
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAKQEAg
LTE1MCw3ICsxNTAsNyBAQCB2b2lkIElubGluZVN0eWxlU2hlZXRPd25lcjo6Y3JlYXRlU2hlZXQo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogCiAgICAgTWVkaWFRdWVyeUV2
YWx1YXRvciBzY3JlZW5FdmFsKEFTQ0lJTGl0ZXJhbCgic2NyZWVuIiksIHRydWUpOwogICAgIE1l
ZGlhUXVlcnlFdmFsdWF0b3IgcHJpbnRFdmFsKEFTQ0lJTGl0ZXJhbCgicHJpbnQiKSwgdHJ1ZSk7
Ci0gICAgaWYgKCFzY3JlZW5FdmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSAmJiAhcHJpbnRF
dmFsLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKSkKKyAgICBpZiAoIXNjcmVlbkV2YWwuZXZhbHVh
dGUoKm1lZGlhUXVlcmllcykgJiYgIXByaW50RXZhbC5ldmFsdWF0ZSgqbWVkaWFRdWVyaWVzKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0aG9yU3R5bGVTaGVldHNGb3JFbGVtZW50KGVsZW1l
bnQpLmFkZFBlbmRpbmdTaGVldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCmluZGV4IDg1NWNhZjFlZjMyNjg5NDA3YWQ3OWJlODNlNzQxNGQ5YjFhN2JiOWQuLjJkZmYw
NDI2M2VkNmY5Njk4NDNmYzkzYzQ3NTY0NjY5ODQ4MmU1YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTEyNjYsNyArMTI2Niw3IEBAIHZvaWQgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSgpCiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBFeGl0IGVtcHR5IGNvbnRhaW5lcnMgYXMgd2UgcGFzcyBvdmVyIHRoZW0gb3Ig
Y29udGFpbmVycwogICAgICAgICAgICAgLy8gd2hlcmUgW2NvbnRhaW5lciwgMF0gaXMgd2hlcmUg
d2Ugc3RhcnRlZCBpdGVyYXRpbmcuCi0gICAgICAgICAgICBpZiAoIW1faGFuZGxlZE5vZGUgJiYg
Y2FuSGF2ZUNoaWxkcmVuRm9yRWRpdGluZygqbV9ub2RlKSAgJiYgbV9ub2RlLT5wYXJlbnROb2Rl
KCkgJiYgKCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIg
JiYgIW1fZW5kT2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiBj
YW5IYXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCptX25vZGUpICYmIG1fbm9kZS0+cGFyZW50Tm9kZSgp
ICYmICghbV9ub2RlLT5sYXN0Q2hpbGQoKSB8fCAobV9ub2RlID09IG1fZW5kQ29udGFpbmVyICYm
ICFtX2VuZE9mZnNldCkpKSB7CiAgICAgICAgICAgICAgICAgZXhpdE5vZGUoKTsKICAgICAgICAg
ICAgICAgICBpZiAobV9wb3NpdGlvbk5vZGUpIHsKICAgICAgICAgICAgICAgICAgICAgbV9oYW5k
bGVkTm9kZSA9IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcApp
bmRleCA5MTM2MDk0OWFmNDc2NDk0ZjUyNDJlNWQzZjI3ZWFjZjkzNmE0MmFiLi5iMGY2MWE3ZTFh
ZDk4NjA3NmExOGQxZTRlNWYwZDU3MjBhMTU2ZTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEltYWdlRWxlbWVudC5jcHAKQEAgLTE1MywyNyArMTUzLDMxIEBAIEltYWdlQ2FuZGlkYXRlIEhU
TUxJbWFnZUVsZW1lbnQ6OmJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVsZW1lbnQoKQogICAgICAg
ICBpZiAoIWlzPEhUTUxTb3VyY2VFbGVtZW50PigqY2hpbGQpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIGF1dG8mIHNvdXJjZSA9IGRvd25jYXN0PEhUTUxTb3VyY2VFbGVtZW50Pigq
Y2hpbGQpOworCiAgICAgICAgIGF1dG8mIHNyY3NldCA9IHNvdXJjZS5mYXN0R2V0QXR0cmlidXRl
KHNyY3NldEF0dHIpOwogICAgICAgICBpZiAoc3Jjc2V0LmlzRW1wdHkoKSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoc291cmNlLmhhc0F0dHJpYnV0ZSh0eXBlQXR0cikpIHsK
LSAgICAgICAgICAgIFN0cmluZyB0eXBlID0gc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0
dHIpLnN0cmluZygpOwotICAgICAgICAgICAgaW50IGluZGV4T2ZTZW1pY29sb24gPSB0eXBlLmZp
bmQoJzsnKTsKLSAgICAgICAgICAgIGlmIChpbmRleE9mU2VtaWNvbG9uID49IDApCi0gICAgICAg
ICAgICAgICAgdHlwZS50cnVuY2F0ZShpbmRleE9mU2VtaWNvbG9uKTsKKworICAgICAgICBhdXRv
JiB0eXBlQXR0cmlidXRlID0gc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAg
ICAgICBpZiAoIXR5cGVBdHRyaWJ1dGUuaXNOdWxsKCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB0
eXBlID0gdHlwZUF0dHJpYnV0ZS5zdHJpbmcoKTsKKyAgICAgICAgICAgIHR5cGUudHJ1bmNhdGUo
dHlwZS5maW5kKCc7JykpOwogICAgICAgICAgICAgdHlwZSA9IHN0cmlwTGVhZGluZ0FuZFRyYWls
aW5nSFRNTFNwYWNlcyh0eXBlKTsKICAgICAgICAgICAgIGlmICghdHlwZS5pc0VtcHR5KCkgJiYg
IU1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSh0eXBlKSAmJiAhZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodHlwZSwgImltYWdlL3N2Zyt4bWwiKSkKICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVh
dG9yIGV2YWx1YXRvcihkb2N1bWVudCgpLnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIs
IGRvY3VtZW50KCkuZnJhbWUoKSwgZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKSA/IGRvY3Vt
ZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwotICAg
ICAgICBib29sIGV2YWx1YXRpb24gPSBldmFsdWF0b3IuZXZhbENoZWNraW5nVmlld3BvcnREZXBl
bmRlbnRSZXN1bHRzKHNvdXJjZS5tZWRpYVF1ZXJ5U2V0KCksIHBpY3R1cmUtPnZpZXdwb3J0RGVw
ZW5kZW50UmVzdWx0cygpKTsKKworICAgICAgICBhdXRvKiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1
bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2
YWx1YXRvciB7IGRvY3VtZW50KCkucHJpbnRpbmcoKSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9j
dW1lbnQoKSwgZG9jdW1lbnRFbGVtZW50ID8gZG9jdW1lbnRFbGVtZW50LT5jb21wdXRlZFN0eWxl
KCkgOiBudWxscHRyIH07CisgICAgICAgIGF1dG8qIHF1ZXJpZXMgPSBzb3VyY2UubWVkaWFRdWVy
eVNldCgpOworICAgICAgICBhdXRvIGV2YWx1YXRpb24gPSAhcXVlcmllcyB8fCBldmFsdWF0b3Iu
ZXZhbHVhdGUoKnF1ZXJpZXMsIHBpY3R1cmUtPnZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpKTsK
ICAgICAgICAgaWYgKHBpY3R1cmUtPmhhc1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpKQogICAg
ICAgICAgICAgZG9jdW1lbnQoKS5hZGRWaWV3cG9ydERlcGVuZGVudFBpY3R1cmUoKnBpY3R1cmUp
OwogICAgICAgICBpZiAoIWV2YWx1YXRpb24pCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAg
ICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShzb3VyY2UuZmFzdEdl
dEF0dHJpYnV0ZShzaXplc0F0dHIpLnN0cmluZygpLCBkb2N1bWVudCgpLnJlbmRlclZpZXcoKSwg
ZG9jdW1lbnQoKS5mcmFtZSgpKTsKLSAgICAgICAgSW1hZ2VDYW5kaWRhdGUgY2FuZGlkYXRlID0g
YmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhkb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCksIG51bGxBdG9tLCBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZShzcmNzZXRBdHRyKSwgc291
cmNlU2l6ZSk7CisgICAgICAgIGF1dG8gc291cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUo
ZG9jdW1lbnQoKSwgc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSk7
CisgICAgICAgIGF1dG8gY2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRl
cyhkb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCksIG51bGxBdG9tLCBzcmNzZXQsIHNvdXJj
ZVNpemUpOwogICAgICAgICBpZiAoIWNhbmRpZGF0ZS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm4gY2FuZGlkYXRlOwogICAgIH0KQEAgLTE4Niw3ICsxOTAsNyBAQCB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNlbGVjdEltYWdlU291cmNlKCkKICAgICBJbWFnZUNhbmRpZGF0ZSBjYW5kaWRh
dGUgPSBiZXN0Rml0U291cmNlRnJvbVBpY3R1cmVFbGVtZW50KCk7CiAgICAgaWYgKGNhbmRpZGF0
ZS5pc0VtcHR5KCkpIHsKICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIDxwaWN0dXJlPiBv
ciBkaWRuJ3QgZmluZCBhIHNvdXJjZSwgdGhlbiB3ZSB1c2Ugb3VyIG93biBhdHRyaWJ1dGVzLgot
ICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShmYXN0R2V0QXR0
cmlidXRlKHNpemVzQXR0cikuc3RyaW5nKCksIGRvY3VtZW50KCkucmVuZGVyVmlldygpLCBkb2N1
bWVudCgpLmZyYW1lKCkpOworICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0
dHJpYnV0ZShkb2N1bWVudCgpLCBmYXN0R2V0QXR0cmlidXRlKHNpemVzQXR0cikuc3RyaW5nKCkp
OwogICAgICAgICBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSwg
ZmFzdEdldEF0dHJpYnV0ZShzcmNzZXRBdHRyKSwgc291cmNlU2l6ZSk7CiAgICAgfQogICAgIHNl
dEJlc3RGaXRVUkxBbmREUFJGcm9tSW1hZ2VDYW5kaWRhdGUoY2FuZGlkYXRlKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAppbmRleCBiNDAxNDJmYWFiY2FhZDJhNDE0NTYy
NjkzNTgxYTI0OTY2MTIwNGMzLi44MDFiNDliZjIzNTM1YTU4ZTU5YjVhYzdhYWRkMzhjMWUxNzgy
YjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCkBAIC0yNDEsOCAr
MjQxLDcgQEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogICAgICAgICAgICAgaWYg
KGRvY3VtZW50KCkuaGFzTGl2aW5nUmVuZGVyVHJlZSgpKQogICAgICAgICAgICAgICAgIGRvY3Vt
ZW50U3R5bGUgPSBTdHlsZTo6cmVzb2x2ZUZvckRvY3VtZW50KGRvY3VtZW50KCkpOwogICAgICAg
ICAgICAgYXV0byBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRp
b25TeW50YXgobV9tZWRpYSk7Ci0gICAgICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1
YXRvcihkb2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+bWVkaWFUeXBlKCksIGRvY3VtZW50KCku
ZnJhbWUoKSwgZG9jdW1lbnRTdHlsZSA/ICYqZG9jdW1lbnRTdHlsZSA6IG51bGxwdHIpOwotICAg
ICAgICAgICAgbWVkaWFRdWVyeU1hdGNoZXMgPSBldmFsdWF0b3IuZXZhbChtZWRpYS5wdHIoKSk7
CisgICAgICAgICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyBk
b2N1bWVudCgpLmZyYW1lKCktPnZpZXcoKS0+bWVkaWFUeXBlKCksIGRvY3VtZW50KCksIGRvY3Vt
ZW50U3R5bGUgPyAmKmRvY3VtZW50U3R5bGUgOiBudWxscHRyIH0uZXZhbHVhdGUobWVkaWEuZ2V0
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRG9uJ3QgaG9sZCB1cCByZW5kZXIgdHJlZSBj
b25zdHJ1Y3Rpb24gYW5kIHNjcmlwdCBleGVjdXRpb24gb24gc3R5bGVzaGVldHMKQEAgLTM2MSw3
ICszNjAsNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6c2V0Q1NTU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIGhyZWYsIGNvbnN0IFVSTCYgYmFzZVVSTCwgYwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgUmVmPFN0eWxlU2hlZXRDb250ZW50cz4gc3R5bGVTaGVldChTdHlsZVNoZWV0Q29u
dGVudHM6OmNyZWF0ZShocmVmLCBwYXJzZXJDb250ZXh0KSk7CisgICAgYXV0byBzdHlsZVNoZWV0
ID0gU3R5bGVTaGVldENvbnRlbnRzOjpjcmVhdGUoaHJlZiwgcGFyc2VyQ29udGV4dCk7CiAgICAg
bV9zaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZShzdHlsZVNoZWV0LmNvcHlSZWYoKSwgdGhp
cyk7CiAgICAgbV9zaGVldC0+c2V0TWVkaWFRdWVyaWVzKE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFs
bG93aW5nRGVzY3JpcHRpb25TeW50YXgobV9tZWRpYSkpOwogICAgIG1fc2hlZXQtPnNldFRpdGxl
KHRpdGxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5kZXgg
ZWY2Yzk4YTNlY2Q2MzYzOTU0NGJhOTQ0OGQ5NTIwMTk3NTBkYzVhZi4uMzliMmY3NjBhY2FhYTU5
NWIwNzRkY2M4NGI1ZmZlOGRjMTdlODI1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwCkBAIC00MTc2LDEzICs0MTc2LDEyIEBAIFVSTCBIVE1MTWVkaWFFbGVtZW50
OjpzZWxlY3ROZXh0U291cmNlQ2hpbGQoQ29udGVudFR5cGUqIGNvbnRlbnRUeXBlLCBTdHJpbmcq
IGtlCiAgICAgICAgICAgICBnb3RvIGNoZWNrX2FnYWluOwogICAgICAgICAKICAgICAgICAgaWYg
KHNvdXJjZS0+ZmFzdEhhc0F0dHJpYnV0ZShtZWRpYUF0dHIpKSB7Ci0gICAgICAgICAgICBNZWRp
YVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIGRvY3VtZW50KCkuZnJhbWUoKSwg
cmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0cik7Ci0gICAgICAgICAg
ICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEgPSBzb3VyY2UtPm1lZGlhUXVlcnlTZXQoKTsK
KyAgICAgICAgICAgIGF1dG8gbWVkaWEgPSBzb3VyY2UtPm1lZGlhUXVlcnlTZXQoKTsKICNpZiAh
TE9HX0RJU0FCTEVECiAgICAgICAgICAgICBpZiAoc2hvdWxkTG9nKQogICAgICAgICAgICAgICAg
IExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZCglcCkg
LSAnbWVkaWEnIGlzICVzIiwgdGhpcywgc291cmNlLT5tZWRpYSgpLnV0ZjgoKS5kYXRhKCkpOwog
I2VuZGlmCi0gICAgICAgICAgICBpZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRpYS5nZXQoKSkpIAor
ICAgICAgICAgICAgaWYgKG1lZGlhICYmICFNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIs
IGRvY3VtZW50KCksIHJlbmRlcmVyKCkgPyAmcmVuZGVyZXIoKS0+c3R5bGUoKSA6IG51bGxwdHIg
fS5ldmFsdWF0ZSgqbWVkaWEpKQogICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CiAg
ICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwCmlu
ZGV4IGUyZjI2MGM4NGVjYTRiNWRiMTE0ODUwODQ1NThlZGMyMWQ4NjFmOTkuLjcwMjQ0MThmNDI1
ZDk0MDA3ZDBlNjlmNmI3NDZjN2I5YTFlODFiYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQaWN0dXJlRWxlbWVudC5jcHAKQEAgLTU3LDE2ICs1NywxNiBAQCBSZWY8SFRNTFBpY3R1cmVF
bGVtZW50PiBIVE1MUGljdHVyZUVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLAogCiB2b2lkIEhUTUxQaWN0dXJlRWxlbWVudDo6c291cmNlc0NoYW5nZWQoKQogewot
ICAgIGZvciAoYXV0byYgaW1hZ2VFbGVtZW50IDogY2hpbGRyZW5PZlR5cGU8SFRNTEltYWdlRWxl
bWVudD4oKnRoaXMpKQotICAgICAgICBpbWFnZUVsZW1lbnQuc2VsZWN0SW1hZ2VTb3VyY2UoKTsK
KyAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MSW1hZ2VFbGVtZW50
PigqdGhpcykpCisgICAgICAgIGVsZW1lbnQuc2VsZWN0SW1hZ2VTb3VyY2UoKTsKIH0KIAotYm9v
bCBIVE1MUGljdHVyZUVsZW1lbnQ6OnZpZXdwb3J0Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCkKK2Jv
b2wgSFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSgpIGNv
bnN0CiB7Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IoZG9jdW1lbnQoKS5wcmlu
dGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCgpLmZyYW1lKCksIGRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCkgPyBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpLT5jb21w
dXRlZFN0eWxlKCkgOiBudWxscHRyKTsKLSAgICB1bnNpZ25lZCBudW1SZXN1bHRzID0gbV92aWV3
cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbnVtUmVzdWx0czsgaSsrKSB7Ci0gICAgICAgIGlmIChldmFsdWF0b3IuZXZh
bCgmbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24p
ICE9IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCisg
ICAgYXV0byogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1lbnQoKTsK
KyAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvciB7IGRvY3VtZW50KCkucHJpbnRpbmco
KSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9jdW1lbnQoKSwgZG9jdW1lbnRFbGVtZW50ID8gZG9j
dW1lbnRFbGVtZW50LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyIH07CisgICAgZm9yIChhdXRv
JiByZXN1bHQgOiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpIHsKKyAgICAg
ICAgaWYgKGV2YWx1YXRvci5ldmFsdWF0ZShyZXN1bHQuZXhwcmVzc2lvbikgIT0gcmVzdWx0LnJl
c3VsdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuaAppbmRleCBhYmQ0N2MwYTli
MzA2ZmFjNDY3ZDU2MWI2NWI1NDg3Njk4OTY1NGFmLi5mYjUxMzZmN2M3YzNjNDlkMTM4MzVhMGE2
N2E2YTZjNDVlMDQ4MDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0
dXJlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50
LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgSFRN
TFBpY3R1cmVFbGVtZW50X2gKLSNkZWZpbmUgSFRNTFBpY3R1cmVFbGVtZW50X2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZh
bHVhdG9yLmgiCkBAIC0zNCwyOCArMzMsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
SFRNTFBpY3R1cmVFbGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUmVmPEhUTUxQaWN0dXJlRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwotICAgIH5IVE1MUGljdHVyZUVsZW1lbnQoKTsKKyAgICB2aXJ0
dWFsIH5IVE1MUGljdHVyZUVsZW1lbnQoKTsKIAogICAgIHZvaWQgc291cmNlc0NoYW5nZWQoKTsK
IAogICAgIHZvaWQgY2xlYXJWaWV3cG9ydERlcGVuZGVudFJlc3VsdHMoKSB7IG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5jbGVhcigpOyB9CiAgICAgYm9vbCBoYXNWaWV3cG9y
dERlcGVuZGVudFJlc3VsdHMoKSBjb25zdCB7IHJldHVybiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHMuc2l6ZSgpOyB9Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5UmVzdWx0Pj4mIHZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpIHsgcmV0dXJuIG1fdmll
d3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsgfQorICAgIFZlY3RvcjxNZWRpYVF1ZXJ5
UmVzdWx0PiYgdmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkgeyByZXR1cm4gbV92aWV3cG9ydERl
cGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOyB9CiAKLSAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50KiBvbGREb2N1bWVudCk7Ci0gICAgCi0gICAgYm9vbCB2aWV3cG9ydENoYW5n
ZUFmZmVjdGVkUGljdHVyZSgpOworICAgIGJvb2wgdmlld3BvcnRDaGFuZ2VBZmZlY3RlZFBpY3R1
cmUoKSBjb25zdDsKIAogICAgIFdlYWtQdHI8SFRNTFBpY3R1cmVFbGVtZW50PiBjcmVhdGVXZWFr
UHRyKCkgeyByZXR1cm4gbV93ZWFrRmFjdG9yeS5jcmVhdGVXZWFrUHRyKCk7IH0KIAogcHJpdmF0
ZToKICAgICBIVE1MUGljdHVyZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Jik7Ci0gICAgCi0gICAgV2Vha1B0ckZhY3Rvcnk8SFRNTFBpY3R1cmVFbGVtZW50PiBtX3dlYWtG
YWN0b3J5IHsgdGhpcyB9OwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeVJl
c3VsdD4+IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKIAorICAgIHZvaWQg
ZGlkTW92ZVRvTmV3RG9jdW1lbnQoRG9jdW1lbnQqIG9sZERvY3VtZW50KSBmaW5hbDsKKworICAg
IFdlYWtQdHJGYWN0b3J5PEhUTUxQaWN0dXJlRWxlbWVudD4gbV93ZWFrRmFjdG9yeSB7IHRoaXMg
fTsKKyAgICBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdD4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlh
UXVlcnlSZXN1bHRzOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8g
SFRNTFBpY3R1cmVFbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MUHJlbG9hZFNjYW5uZXIuY3BwCmluZGV4IGJhYzI4ZDQ3NDYwYzhkN2EyYzI4ZmM3NjEyOGUy
ZWRhYzZlMzZkMWIuLmJhNmEyMTUwMTVhOWMzN2EwMDIzNDVmNmE1ZjUyZTczNjFjYzkyYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQcmVsb2FkU2Nhbm5lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNw
cApAQCAtMTE4LDcgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgICAgICAKICAgICAg
ICAgaWYgKG1fdGFnSWQgPT0gVGFnSWQ6OlNvdXJjZSAmJiAhcGljdHVyZVN0YXRlLmlzRW1wdHko
KSAmJiAhcGljdHVyZVN0YXRlLmxhc3QoKSAmJiBtX21lZGlhTWF0Y2hlZCAmJiAhbV9zcmNTZXRB
dHRyaWJ1dGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFy
c2VTaXplc0F0dHJpYnV0ZShtX3NpemVzQXR0cmlidXRlLCBkb2N1bWVudC5yZW5kZXJWaWV3KCks
IGRvY3VtZW50LmZyYW1lKCkpOworICAgICAgICAgICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNl
U2l6ZXNBdHRyaWJ1dGUoZG9jdW1lbnQsIG1fc2l6ZXNBdHRyaWJ1dGUpOwogICAgICAgICAgICAg
SW1hZ2VDYW5kaWRhdGUgaW1hZ2VDYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRy
aWJ1dGVzKG1fZGV2aWNlU2NhbGVGYWN0b3IsIG1fdXJsVG9Mb2FkLCBtX3NyY1NldEF0dHJpYnV0
ZSwgc291cmNlU2l6ZSk7CiAgICAgICAgICAgICBpZiAoIWltYWdlQ2FuZGlkYXRlLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgICAgIHBpY3R1cmVTdGF0ZS5sYXN0KCkgPSB0cnVlOwpAQCAtMTI4
LDcgKzEyOCw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIC8vIFJlc29sdmUgYmV0d2Vl
biBzcmMgYW5kIHNyY1NldCBpZiB3ZSBoYXZlIHRoZW0gYW5kIHRoZSB0YWcgaXMgaW1nLgogICAg
ICAgICBpZiAobV90YWdJZCA9PSBUYWdJZDo6SW1nICYmICFtX3NyY1NldEF0dHJpYnV0ZS5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmli
dXRlKG1fc2l6ZXNBdHRyaWJ1dGUsIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgZG9jdW1lbnQuZnJh
bWUoKSk7CisgICAgICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0
ZShkb2N1bWVudCwgbV9zaXplc0F0dHJpYnV0ZSk7CiAgICAgICAgICAgICBJbWFnZUNhbmRpZGF0
ZSBpbWFnZUNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMobV9kZXZp
Y2VTY2FsZUZhY3RvciwgbV91cmxUb0xvYWQsIG1fc3JjU2V0QXR0cmlidXRlLCBzb3VyY2VTaXpl
KTsKICAgICAgICAgICAgIHNldFVybFRvTG9hZChpbWFnZUNhbmRpZGF0ZS5zdHJpbmcudG9TdHJp
bmcoKSwgdHJ1ZSk7CiAgICAgICAgIH0KQEAgLTE5OCwxMCArMTk4LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChtYXRjaChhdHRyaWJ1dGVOYW1lLCBtZWRpYUF0
dHIpICYmIG1fbWVkaWFBdHRyaWJ1dGUuaXNOdWxsKCkpIHsKICAgICAgICAgICAgICAgICBtX21l
ZGlhQXR0cmlidXRlID0gYXR0cmlidXRlVmFsdWU7Ci0gICAgICAgICAgICAgICAgUmVmPE1lZGlh
UXVlcnlTZXQ+IG1lZGlhU2V0ID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlw
dGlvblN5bnRheChhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4gdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5
UmVzdWx0czsKLSAgICAgICAgICAgICAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvcihk
b2N1bWVudC5wcmludGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudC5mcmFtZSgp
LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgp
LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyKTsKLSAgICAgICAgICAgICAgICBtX21lZGlhTWF0
Y2hlZCA9IGV2YWx1YXRvci5ldmFsQ2hlY2tpbmdWaWV3cG9ydERlcGVuZGVudFJlc3VsdHMobWVk
aWFTZXQucHRyKCksIHZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpOworICAgICAg
ICAgICAgICAgIGF1dG8gbWVkaWFTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rl
c2NyaXB0aW9uU3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBk
b2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICAgICAgICAg
ICAgICBtX21lZGlhTWF0Y2hlZCA9IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyBkb2N1bWVudC5wcmlu
dGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCwgZG9jdW1lbnRFbGVtZW50ID8g
ZG9jdW1lbnRFbGVtZW50LT5jb21wdXRlZFN0eWxlKCkgOiBudWxscHRyIH0uZXZhbHVhdGUobWVk
aWFTZXQuZ2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgVGFnSWQ6OlNjcmlwdDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxSZXNvdXJjZVByZWxvYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUmVzb3VyY2VQcmVsb2FkZXIuY3BwCmluZGV4IDIyNmE5ZWJiM2UxYzQwZGFjODBmNjJh
OGExZWM2MDZkYzJjMTEyMTguLmExNWNiMmQ5NGE3ZmY5ZGZhMjcwZWY3YmYxNjNlNTFkMmVmNWU2
OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxSZXNvdXJjZVBy
ZWxvYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNl
UHJlbG9hZGVyLmNwcApAQCAtNTgsMTggKzU4LDE3IEBAIHZvaWQgSFRNTFJlc291cmNlUHJlbG9h
ZGVyOjpwcmVsb2FkKFByZWxvYWRSZXF1ZXN0U3RyZWFtIHJlcXVlc3RzKQogICAgICAgICBwcmVs
b2FkKFdURk1vdmUocmVxdWVzdCkpOwogfQogCi1zdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1h
dGNoZXMoRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNvbnN0
IFN0cmluZyYgYXR0cmlidXRlVmFsdWUpCitzdGF0aWMgYm9vbCBtZWRpYUF0dHJpYnV0ZU1hdGNo
ZXMoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcmVuZGVyU3R5bGUsIGNv
bnN0IFN0cmluZyYgYXR0cmlidXRlVmFsdWUpCiB7Ci0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+
IG1lZGlhUXVlcmllcyA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25T
eW50YXgoYXR0cmlidXRlVmFsdWUpOwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVy
eUV2YWx1YXRvcigic2NyZWVuIiwgZnJhbWUsIHJlbmRlclN0eWxlKTsKLSAgICByZXR1cm4gbWVk
aWFRdWVyeUV2YWx1YXRvci5ldmFsKG1lZGlhUXVlcmllcy5nZXQoKSk7CisgICAgYXV0byBtZWRp
YVF1ZXJpZXMgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3ludGF4
KGF0dHJpYnV0ZVZhbHVlKTsKKyAgICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJzY3Jl
ZW4iLCBkb2N1bWVudCwgcmVuZGVyU3R5bGUgfS5ldmFsdWF0ZShtZWRpYVF1ZXJpZXMuZ2V0KCkp
OwogfQogCiB2b2lkIEhUTUxSZXNvdXJjZVByZWxvYWRlcjo6cHJlbG9hZChzdGQ6OnVuaXF1ZV9w
dHI8UHJlbG9hZFJlcXVlc3Q+IHByZWxvYWQpCiB7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQuZnJh
bWUoKSk7CiAgICAgQVNTRVJUKG1fZG9jdW1lbnQucmVuZGVyVmlldygpKTsKLSAgICBpZiAoIXBy
ZWxvYWQtPm1lZGlhKCkuaXNFbXB0eSgpICYmICFtZWRpYUF0dHJpYnV0ZU1hdGNoZXMobV9kb2N1
bWVudC5mcmFtZSgpLCAmbV9kb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0eWxlKCksIHByZWxvYWQt
Pm1lZGlhKCkpKQorICAgIGlmICghcHJlbG9hZC0+bWVkaWEoKS5pc0VtcHR5KCkgJiYgIW1lZGlh
QXR0cmlidXRlTWF0Y2hlcyhtX2RvY3VtZW50LCAmbV9kb2N1bWVudC5yZW5kZXJWaWV3KCktPnN0
eWxlKCksIHByZWxvYWQtPm1lZGlhKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBDYWNoZWRS
ZXNvdXJjZVJlcXVlc3QgcmVxdWVzdCA9IHByZWxvYWQtPnJlc291cmNlUmVxdWVzdChtX2RvY3Vt
ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAppbmRleCBmZWZkYjU4MGFmYzVhMWM2NGFi
NzFkYzc1Nzg5ZDI5MTk5YmI2MDkyLi5mYjMwNGI0ZDUzODMxYzUzZDE2MTA4NzA4MDVmY2EyOTdl
MWY0OTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCkBAIC03OSw3ICs3OSw2IEBACiAj
aW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFnZVRyYW5zaXRpb25FdmVudC5oIgog
I2luY2x1ZGUgIlBlcmZvcm1hbmNlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNp
bmNsdWRlICJSZXNvdXJjZUxvYWRJbmZvLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgogI2luY2x1ZGUgIlNjaGVkdWxlZEFjdGlvbi5oIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCmluZGV4IDcwMDIzYjFjYjg1OTVhMmI0ZTBkMzU2NWVj
MmM2YWJjY2NkMjc1YjMuLmM0ODg0NTdlMjhiZTU0YjkzZjkzZmMwNzdkM2ViMzg1NzQ0MjU2NWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0KQEAgLTExNzUs
MTAgKzExNzUsOCBAQCBJbnRQb2ludCBFdmVudEhhbmRsZXI6OmVmZmVjdGl2ZU1vdXNlUG9zaXRp
b25Gb3JTZWxlY3Rpb25BdXRvc2Nyb2xsKCkgY29uc3QKICAgICBpZiAoIXBhZ2UpCiAgICAgICAg
IHJldHVybiBtX2xhc3RLbm93bk1vdXNlUG9zaXRpb247CiAKLSAgICBOU1NjcmVlbiAqc2NyZWVu
ID0gc2NyZWVuRm9yRGlzcGxheUlEKHBhZ2UtPmNocm9tZSgpLmRpc3BsYXlJRCgpKTsKLSAgICBJ
bnRTaXplIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yID0gYXV0b3Njcm9sbEFkanVzdG1lbnRG
YWN0b3JGb3JTY3JlZW5Cb3VuZGFyaWVzKG1fbGFzdEtub3duTW91c2VHbG9iYWxQb3NpdGlvbiwg
dG9Vc2VyU3BhY2Uoc2NyZWVuLmZyYW1lLCBuaWwpKTsKLQotICAgIHJldHVybiBtX2xhc3RLbm93
bk1vdXNlUG9zaXRpb24gKyBhdXRvc2Nyb2xsQWRqdXN0bWVudEZhY3RvcjsKKyAgICBhdXRvIGZy
YW1lID0gdG9Vc2VyU3BhY2Uoc2NyZWVuKHBhZ2UtPmNocm9tZSgpLmRpc3BsYXlJRCgpKS5mcmFt
ZSwgbmlsKTsKKyAgICByZXR1cm4gbV9sYXN0S25vd25Nb3VzZVBvc2l0aW9uICsgYXV0b3Njcm9s
bEFkanVzdG1lbnRGYWN0b3JGb3JTY3JlZW5Cb3VuZGFyaWVzKG1fbGFzdEtub3duTW91c2VHbG9i
YWxQb3NpdGlvbiwgZnJhbWUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGxhdGZv
cm1TY3JlZW4uaAppbmRleCAwZDgwNzM2YTViYjJlMGQzMTM4MmEyYjk0NWM2ZTg2ZDMyNmQzYzg1
Li5lMjhmZjE5OTUwZGRhNTRlMDkwNmQ5ODBhYmM0NTJhYjM3MjI2MWRiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNjcmVlbi5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKQEAgLTIzLDEwICsyMyw3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgogICovCiAKLSNpZm5kZWYgUGxhdGZvcm1TY3JlZW5faAotI2RlZmluZSBQbGF0Zm9y
bVNjcmVlbl9oCi0KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisjcHJhZ21hIG9uY2UKIAogI2lm
IFBMQVRGT1JNKE1BQykKIE9CSkNfQ0xBU1MgTlNTY3JlZW47CkBAIC00NCw0NCArNDEsNDQgQEAg
dHlwZWRlZiBzdHJ1Y3QgX05TUG9pbnQgTlNQb2ludDsKIE9CSkNfQ0xBU1MgVUlTY3JlZW47CiAj
ZW5kaWYKIAotdHlwZWRlZiB1aW50MzJfdCBQbGF0Zm9ybURpc3BsYXlJRDsKLQotdHlwZWRlZiBX
VEY6OlZlY3RvcjxjaGFyPiBDb2xvclByb2ZpbGU7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
ICAgIGNsYXNzIEZsb2F0UmVjdDsKLSAgICBjbGFzcyBGbG9hdFNpemU7Ci0gICAgY2xhc3MgV2lk
Z2V0OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRmxvYXRTaXplOworY2xhc3MgV2lkZ2V0Owog
Ci0gICAgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwotICAgIGludCBzY3JlZW5EZXB0aFBlckNv
bXBvbmVudChXaWRnZXQqKTsKLSAgICBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsK
K3VzaW5nIFBsYXRmb3JtRGlzcGxheUlEID0gdWludDMyX3Q7CiAKLSAgICBib29sIHNjcmVlbkhh
c0ludmVydGVkQ29sb3JzKCk7CitpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7CitpbnQgc2NyZWVu
RGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0Kik7Citib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRn
ZXQqKTsKIAotICAgIEZsb2F0UmVjdCBzY3JlZW5SZWN0KFdpZGdldCopOwotICAgIEZsb2F0UmVj
dCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCopOworYm9vbCBzY3JlZW5IYXNJbnZlcnRlZENv
bG9ycygpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVk
Q29sb3IoV2lkZ2V0KiB3aWRnZXQgPSBudWxscHRyKTsKK0Zsb2F0UmVjdCBzY3JlZW5SZWN0KFdp
ZGdldCopOworRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CisKK1dFQkNP
UkVfRVhQT1JUIGJvb2wgc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKFdpZGdldCogPSBudWxs
cHRyKTsKIAogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU1NjcmVlbiAqc2NyZWVuRm9yV2luZG93
KE5TV2luZG93ICopOwotICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JEaXNwbGF5SUQoUGxhdGZvcm1E
aXNwbGF5SUQpOwogCi0gICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHRvVXNlclNwYWNlKGNv
bnN0IE5TUmVjdCYsIE5TV2luZG93ICpkZXN0aW5hdGlvbik7Ci0gICAgV0VCQ09SRV9FWFBPUlQg
TlNSZWN0IHRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgTlNXaW5kb3cgKnNvdXJjZSk7
CitOU1NjcmVlbiAqc2NyZWVuKE5TV2luZG93ICopOworTlNTY3JlZW4gKnNjcmVlbihQbGF0Zm9y
bURpc3BsYXlJRCk7CisKK1dFQkNPUkVfRVhQT1JUIEZsb2F0UmVjdCB0b1VzZXJTcGFjZShjb25z
dCBOU1JlY3QmLCBOU1dpbmRvdyAqZGVzdGluYXRpb24pOworV0VCQ09SRV9FWFBPUlQgTlNSZWN0
IHRvRGV2aWNlU3BhY2UoY29uc3QgRmxvYXRSZWN0JiwgTlNXaW5kb3cgKnNvdXJjZSk7CisKK05T
UG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5TUG9pbnQmLCBOU1NjcmVlbiAqKTsKIAotICAg
IE5TUG9pbnQgZmxpcFNjcmVlblBvaW50KGNvbnN0IE5TUG9pbnQmLCBOU1NjcmVlbiAqKTsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oSU9TKQotICAgIGZsb2F0IHNjcmVlblBQSUZhY3RvcigpOwot
ICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBzY3JlZW5TaXplKCk7Ci0gICAgV0VCQ09SRV9F
WFBPUlQgRmxvYXRTaXplIGF2YWlsYWJsZVNjcmVlblNpemUoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBmbG9hdCBzY3JlZW5TY2FsZUZhY3RvcihVSVNjcmVlbiAqID0gbnVsbHB0cik7CisKK2Zsb2F0
IHNjcmVlblBQSUZhY3RvcigpOworV0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjcmVlblNpemUo
KTsKK1dFQkNPUkVfRVhQT1JUIEZsb2F0U2l6ZSBhdmFpbGFibGVTY3JlZW5TaXplKCk7CitXRUJD
T1JFX0VYUE9SVCBmbG9hdCBzY3JlZW5TY2FsZUZhY3RvcihVSVNjcmVlbiAqID0gbnVsbHB0cik7
CisKICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBQbGF0Zm9y
bVNjcmVlbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9E
aXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcAppbmRleCBjMTAxYmVmODli
YzZiNjA4MDlmNWRkMTQzZTQ1ZWEzNTYyNDE5MDE1Li5iNTFkNjhhYzYxODc0YWUyMjQ0MzAxNDg0
ZTEwMWY3ODEwNDdhYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAKQEAgLTM0
LDggKzM0LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogRGlzcGxheVJlZnJlc2hNb25pdG9y
Q2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQoKQotICAgIDogbV9zY2hlZHVsZWQo
ZmFsc2UpCi0gICAgLCBtX2Rpc3BsYXlJRElzU2V0KGZhbHNlKQogewogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNo
TW9uaXRvckNsaWVudC5oCmluZGV4IDMwZGFmZjNhNjQ2OGQ3YzNjYjliZjhmNzhiNTAwMDg0ODY2
Yzc2ZDUuLjI5OTNkMWQwMjA5OTM1NmYxNTNhMTA4MDAzYTAxNDY1MWIyOGYxOTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRv
ckNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlS
ZWZyZXNoTW9uaXRvckNsaWVudC5oCkBAIC0yMywxOCArMjMsMTcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAogICovCiAKLSNpZm5kZWYgRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50X2gKLSNkZWZpbmUg
RGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50X2gKKyNwcmFnbWEgb25jZQogCiAjaWYgVVNFKFJF
UVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKIAogI2luY2x1ZGUgIlBsYXRm
b3JtU2NyZWVuLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvT3B0
aW9uYWwuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBEaXNwbGF5UmVmcmVzaE1v
bml0b3I7Ci1jbGFzcyBEaXNwbGF5UmVmcmVzaE1vbml0b3JNYW5hZ2VyOwogCiBjbGFzcyBEaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQgewogcHVibGljOgpAQCAtNDYsMTMgKzQ1LDkgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCBSZWZQdHI8RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVE
aXNwbGF5UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0ID0gMDsKIAotICAg
IFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlE
OyB9Ci0gICAgYm9vbCBoYXNEaXNwbGF5SUQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlJRElz
U2V0OyB9Ci0gICAgdm9pZCBzZXREaXNwbGF5SUQoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlE
KQotICAgIHsKLSAgICAgICAgbV9kaXNwbGF5SUQgPSBkaXNwbGF5SUQ7Ci0gICAgICAgIG1fZGlz
cGxheUlESXNTZXQgPSB0cnVlOwotICAgIH0KKyAgICBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5
SUQoKSBjb25zdCB7IHJldHVybiBtX2Rpc3BsYXlJRC52YWx1ZSgpOyB9CisgICAgYm9vbCBoYXNE
aXNwbGF5SUQoKSBjb25zdCB7IHJldHVybiAhIW1fZGlzcGxheUlEOyB9CisgICAgdm9pZCBzZXRE
aXNwbGF5SUQoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKSB7IG1fZGlzcGxheUlEID0gZGlz
cGxheUlEOyB9CiAKICAgICB2b2lkIHNldElzU2NoZWR1bGVkKGJvb2wgaXNTY2hlZHVsZWQpIHsg
bV9zY2hlZHVsZWQgPSBpc1NjaGVkdWxlZDsgfQogICAgIGJvb2wgaXNTY2hlZHVsZWQoKSBjb25z
dCB7IHJldHVybiBtX3NjaGVkdWxlZDsgfQpAQCAtNjAsMTMgKzU1LDEwIEBAIHB1YmxpYzoKICAg
ICB2b2lkIGZpcmVEaXNwbGF5UmVmcmVzaElmTmVlZGVkKGRvdWJsZSB0aW1lc3RhbXApOwogCiBw
cml2YXRlOgotICAgIGJvb2wgbV9zY2hlZHVsZWQ7Ci0gICAgYm9vbCBtX2Rpc3BsYXlJRElzU2V0
OwotICAgIFBsYXRmb3JtRGlzcGxheUlEIG1fZGlzcGxheUlEOworICAgIGJvb2wgbV9zY2hlZHVs
ZWQgeyBmYWxzZSB9OworICAgIE9wdGlvbmFsPFBsYXRmb3JtRGlzcGxheUlEPiBtX2Rpc3BsYXlJ
RDsKIH07CiAKIH0KIAogI2VuZGlmIC8vIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQ
TEFZX01PTklUT1IpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmgKaW5kZXggODE1MjAzZjk1ZGE1YWE0
ZWJiNzJmYzliY2QzODJmYmQwM2RiNTNmMi4uNWQ3ZTUxZmRmYWM4NGE1Y2VhYjU4ZDEzZjA4NDJk
ZGFiZjQ4MjQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NMYXllclVwZGF0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBHcmFwaGljc0xheWVyVXBk
YXRlcl9oCi0jZGVmaW5lIEdyYXBoaWNzTGF5ZXJVcGRhdGVyX2gKKyNwcmFnbWEgb25jZQogCiAj
aW5jbHVkZSAiRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TY3JlZW4uaCIKQEAgLTY4LDUgKzY3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJVcGRhdGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgK
aW5kZXggNWFiYjBhY2NlMzhiOTBmZDhkY2I0MTVjNWQ4ZDU3MjBmODEzOWNhZi4uZDE2ZjQ4NDM1
MjZhYmM5YzdkN2ZhNGU5YmFjYWZhNmE4MWVmYzk1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI2LDggKzI2
LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBJbWFnZURlY29kZXJfaAotI2Rl
ZmluZSBJbWFnZURlY29kZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKQEAgLTQxLDYgKzQwLDggQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCit1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CisKICAgICAv
LyBJbWFnZUZyYW1lIHJlcHJlc2VudHMgdGhlIGRlY29kZWQgaW1hZ2UgZGF0YS4gIFRoaXMgYnVm
ZmVyIGlzIHdoYXQgYWxsCiAgICAgLy8gZGVjb2RlcnMgd3JpdGUgYSBzaW5nbGUgZnJhbWUgaW50
by4KICAgICBjbGFzcyBJbWFnZUZyYW1lIHsKQEAgLTQxMSw1ICs0MTIsMyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9y
eU1hYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5
TWFjLmgKaW5kZXggOGEwZTliYzBlZWYxOTU1NDg2NDdjZGJkODEyM2QzZjgwMWQ0MWJjNy4uMjQ2
MDQxNzcwMzU3YjczN2M5NTI1MjgwNWY0YjhkZmY0ZDg5NTUyYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFjLmgKQEAgLTIz
LDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjX2gKLSNkZWZpbmUgUGxhdGZvcm1FdmVudEZh
Y3RvcnlNYWNfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZl
bnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTQwLDE2ICszOSwxNSBA
QCBwdWJsaWM6CiB9OwogCiAjaWYgUExBVEZPUk0oQ09DT0EpICYmIGRlZmluZWQoX19PQkpDX18p
Ci0vLyBGSVhNRTogVGhpcyBkb2Vzbid0IHJlYWxseSBiZWxvbmcgaGVyZS4KLVdFQkNPUkVfRVhQ
T1JUIEludFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dp
bmRvdyAqKTsKIAotLy8gRklYTUU6IFdlYktpdDIgaGFzIGEgbG90IG9mIGNvZGUgY29weS9wYXN0
ZWQgZnJvbSBQbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYyBpbiBXZWJFdmVudEZhY3RvcnkuIEl0IHNo
b3VsZCBiZSBjYXJlZnVsbHkgc2hhcmVkIHdpdGggV2ViQ29yZS4KLVdFQkNPUkVfRVhQT1JUIGlu
dCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KE5TRXZlbnQqKTsKLVdFQkNPUkVfRVhQT1JUIFN0
cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoTlNFdmVudCopOwotV0VCQ09SRV9FWFBPUlQg
ZG91YmxlIGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKE5TRXZlbnQqKTsKKy8vIEZJWE1FOiBUaGlz
IGZ1bmN0aW9uIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBpbiB0aGlzIGhlYWRlci4KK1dFQkNPUkVf
RVhQT1JUIE5TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5T
V2luZG93ICopOworCisvLyBGSVhNRTogV2ViS2l0MiBoYXMgYSBsb3Qgb2YgY29kZSBjb3BpZWQg
YW5kIHBhc3RlZCBmcm9tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjIGluIFdlYkV2ZW50RmFjdG9y
eS4gTW9yZSBvZiBpdCBzaG91bGQgYmUgc2hhcmVkIHdpdGggV2ViQ29yZS4KK1dFQkNPUkVfRVhQ
T1JUIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KE5TRXZlbnQgKik7CitXRUJDT1JFX0VY
UE9SVCBTdHJpbmcga2V5SWRlbnRpZmllckZvcktleUV2ZW50KE5TRXZlbnQgKik7CitXRUJDT1JF
X0VYUE9SVCBkb3VibGUgZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoTlNFdmVudCAqKTsKIAogI2Vu
ZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbQppbmRleCBlMjIyNGUwYmJkYTRiNzk0ZjE0ZDA5YjBlZDUz
NTU1OTA0MTVhMTlmLi5hNzQ3NDczY2QxNTA3MjVjM2JiMjNkMjJkNjVkY2I3MTZlZDM4YzYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRG
YWN0b3J5TWFjLm1tCkBAIC0zOCwxNSArMzgsMTUgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1JbnRQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5k
b3cgKndpbmRvdykKK05TUG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9p
bnQsIE5TV2luZG93ICp3aW5kb3cpCiB7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAog
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMiCi0gICAgcmV0dXJuIEludFBvaW50KGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRC
YXNlVG9TY3JlZW46d2luZG93UG9pbnRdLCBzY3JlZW5Gb3JXaW5kb3cod2luZG93KSkpOworICAg
IHJldHVybiBmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0QmFzZVRvU2NyZWVuOndpbmRv
d1BvaW50XSwgc2NyZWVuKHdpbmRvdykpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAog
fQogCi1zdGF0aWMgSW50UG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkK
K3N0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiB7CiAg
ICAgc3dpdGNoIChbZXZlbnQgdHlwZV0pIHsKICNpZiBkZWZpbmVkKF9fTFA2NF9fKSAmJiBfX01B
Q19PU19YX1ZFUlNJT05fTUFYX0FMTE9XRUQgPj0gMTAxMDAzCkBAIC03MCw3ICs3MCw3IEBAIHN0
YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAogICAgICAgICAgICAgcmV0dXJuIGdsb2JhbFBvaW50KFtl
dmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOwogICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIEludFBvaW50KCk7CisgICAgICAgICAgICByZXR1cm4geyAw
LCAwIH07CiAgICAgfQogfQogCkBAIC00ODUsNyArNDg1LDcgQEAgcHVibGljOgogCiAgICAgICAg
IC8vIFBsYXRmb3JtTW91c2VFdmVudAogICAgICAgICBtX3Bvc2l0aW9uID0gcG9pbnRGb3JFdmVu
dChldmVudCwgd2luZG93Vmlldyk7Ci0gICAgICAgIG1fZ2xvYmFsUG9zaXRpb24gPSBnbG9iYWxQ
b2ludEZvckV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50
KGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpKTsKICAgICAgICAgbV9idXR0b24gPSBtb3VzZUJ1
dHRvbkZvckV2ZW50KGV2ZW50KTsKICAgICAgICAgbV9jbGlja0NvdW50ID0gY2xpY2tDb3VudEZv
ckV2ZW50KGV2ZW50KTsKIApAQCAtNTE0LDE0ICs1MTQsMTQgQEAgcHVibGljOgogICAgIFBsYXRm
b3JtV2hlZWxFdmVudEJ1aWxkZXIoTlNFdmVudCAqZXZlbnQsIE5TVmlldyAqd2luZG93VmlldykK
ICAgICB7CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAgbV90eXBlICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSBQbGF0Zm9ybUV2ZW50OjpXaGVlbDsKLSAgICAgICAgbV9t
b2RpZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChldmVu
dCk7Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gZXZlbnRU
aW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAgICBtX3R5cGUgPSBQbGF0Zm9ybUV2ZW50
OjpXaGVlbDsKKyAgICAgICAgbV9tb2RpZmllcnMgPSBtb2RpZmllcnNGb3JFdmVudChldmVudCk7
CisgICAgICAgIG1fdGltZXN0YW1wID0gZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOwog
CiAgICAgICAgIC8vIFBsYXRmb3JtV2hlZWxFdmVudAotICAgICAgICBtX3Bvc2l0aW9uICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IHBvaW50Rm9yRXZlbnQoZXZlbnQsIHdpbmRvd1ZpZXcpOwot
ICAgICAgICBtX2dsb2JhbFBvc2l0aW9uICAgICAgICAgICAgICAgICAgICA9IGdsb2JhbFBvaW50
Rm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX2dyYW51bGFyaXR5ICAgICAgICAgICAgICAgICAg
ICAgICA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OworICAgICAgICBtX3Bvc2l0aW9uID0gcG9p
bnRGb3JFdmVudChldmVudCwgd2luZG93Vmlldyk7CisgICAgICAgIG1fZ2xvYmFsUG9zaXRpb24g
PSBJbnRQb2ludChnbG9iYWxQb2ludEZvckV2ZW50KGV2ZW50KSk7CisgICAgICAgIG1fZ3JhbnVs
YXJpdHkgPSBTY3JvbGxCeVBpeGVsV2hlZWxFdmVudDsKIAogICAgICAgICBCT09MIGNvbnRpbnVv
dXM7CiAgICAgICAgIHdrR2V0V2hlZWxFdmVudERlbHRhcyhldmVudCwgJm1fZGVsdGFYLCAmbV9k
ZWx0YVksICZjb250aW51b3VzKTsKQEAgLTUzNSwxMCArNTM1LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIG1fZGVsdGFZICo9IHN0YXRpY19jYXN0PGZsb2F0PihTY3JvbGxiYXI6OnBpeGVsc1Bl
ckxpbmVTdGVwKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9waGFzZSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgPSBwaGFzZUZvckV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9tb21lbnR1
bVBoYXNlICAgICAgICAgICAgICAgICAgICAgPSBtb21lbnR1bVBoYXNlRm9yRXZlbnQoZXZlbnQp
OwotICAgICAgICBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgICAgICAgICA9IGNvbnRpbnVv
dXM7Ci0gICAgICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlICAgICAgID0gW2V2ZW50
IGlzRGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlXTsKKyAgICAgICAgbV9waGFzZSA9IHBoYXNl
Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX21vbWVudHVtUGhhc2UgPSBtb21lbnR1bVBoYXNl
Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2hhc1ByZWNpc2VTY3JvbGxpbmdEZWx0YXMgPSBj
b250aW51b3VzOworICAgICAgICBtX2RpcmVjdGlvbkludmVydGVkRnJvbURldmljZSA9IFtldmVu
dCBpc0RpcmVjdGlvbkludmVydGVkRnJvbURldmljZV07CiAgICAgfQogfTsKIApAQCAtNTUzLDIz
ICs1NTMsMjMgQEAgcHVibGljOgogICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXIoTlNF
dmVudCAqZXZlbnQpCiAgICAgewogICAgICAgICAvLyBQbGF0Zm9ybUV2ZW50Ci0gICAgICAgIG1f
dHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaXNLZXlVcEV2ZW50KGV2ZW50KSA/
IFBsYXRmb3JtRXZlbnQ6OktleVVwIDogUGxhdGZvcm1FdmVudDo6S2V5RG93bjsKLSAgICAgICAg
bV9tb2RpZmllcnMgICAgICAgICAgICAgICAgICAgICAgICAgPSBtb2RpZmllcnNGb3JFdmVudChl
dmVudCk7Ci0gICAgICAgIG1fdGltZXN0YW1wICAgICAgICAgICAgICAgICAgICAgICAgID0gZXZl
bnRUaW1lU3RhbXBTaW5jZTE5NzAoZXZlbnQpOworICAgICAgICBtX3R5cGUgPSBpc0tleVVwRXZl
bnQoZXZlbnQpID8gUGxhdGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3du
OworICAgICAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAgICAg
ICAgbV90aW1lc3RhbXAgPSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CiAKICAgICAg
ICAgLy8gUGxhdGZvcm1LZXlib2FyZEV2ZW50Ci0gICAgICAgIG1fdGV4dCAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gdGV4dEZyb21FdmVudChldmVudCk7Ci0gICAgICAgIG1fdW5tb2Rp
ZmllZFRleHQgICAgICAgICAgICAgICAgICAgID0gdW5tb2RpZmllZFRleHRGcm9tRXZlbnQoZXZl
bnQpOwotICAgICAgICBtX2tleUlkZW50aWZpZXIgICAgICAgICAgICAgICAgICAgICA9IGtleUlk
ZW50aWZpZXJGb3JLZXlFdmVudChldmVudCk7Ci0gICAgICAgIG1fd2luZG93c1ZpcnR1YWxLZXlD
b2RlICAgICAgICAgICAgID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudCk7Ci0gICAg
ICAgIG1fbmF0aXZlVmlydHVhbEtleUNvZGUgICAgICAgICAgICAgID0gW2V2ZW50IGtleUNvZGVd
OwotICAgICAgICBtX21hY0NoYXJDb2RlICAgICAgICAgICAgICAgICAgICAgICA9IHdrR2V0TlNF
dmVudEtleUNoYXIoZXZlbnQpOworICAgICAgICBtX3RleHQgPSB0ZXh0RnJvbUV2ZW50KGV2ZW50
KTsKKyAgICAgICAgbV91bm1vZGlmaWVkVGV4dCA9IHVubW9kaWZpZWRUZXh0RnJvbUV2ZW50KGV2
ZW50KTsKKyAgICAgICAgbV9rZXlJZGVudGlmaWVyID0ga2V5SWRlbnRpZmllckZvcktleUV2ZW50
KGV2ZW50KTsKKyAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUgPSB3aW5kb3dzS2V5Q29k
ZUZvcktleUV2ZW50KGV2ZW50KTsKKyAgICAgICAgbV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSA9IFtl
dmVudCBrZXlDb2RlXTsKKyAgICAgICAgbV9tYWNDaGFyQ29kZSA9IHdrR2V0TlNFdmVudEtleUNo
YXIoZXZlbnQpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgICAgICBt
X2F1dG9SZXBlYXQgICAgICAgICAgICAgICAgICAgICAgICA9IChbZXZlbnQgdHlwZV0gIT0gTlNG
bGFnc0NoYW5nZWQpICYmIFtldmVudCBpc0FSZXBlYXRdOworICAgICAgICBtX2F1dG9SZXBlYXQg
PSBbZXZlbnQgdHlwZV0gIT0gTlNGbGFnc0NoYW5nZWQgJiYgW2V2ZW50IGlzQVJlcGVhdF07CiAj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIG1faXNLZXlwYWQgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gaXNLZXlwYWRFdmVudChldmVudCk7Ci0gICAgICAgIG1faXNTeXN0
ZW1LZXkgICAgICAgICAgICAgICAgICAgICAgID0gZmFsc2U7IC8vIFN5c3RlbUtleSBpcyBhbHdh
eXMgZmFsc2Ugb24gdGhlIE1hYy4KKyAgICAgICAgbV9pc0tleXBhZCA9IGlzS2V5cGFkRXZlbnQo
ZXZlbnQpOworICAgICAgICBtX2lzU3lzdGVtS2V5ID0gZmFsc2U7IC8vIFN5c3RlbUtleSBpcyBh
bHdheXMgZmFsc2Ugb24gdGhlIE1hYy4KIAogICAgICAgICAvLyBBbHdheXMgdXNlIDEzIGZvciBF
bnRlci9SZXR1cm4gLS0gd2UgZG9uJ3Qgd2FudCB0byB1c2UgQXBwS2l0J3MgZGlmZmVyZW50IGNo
YXJhY3RlciBmb3IgRW50ZXIuCiAgICAgICAgIGlmIChtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9
PSBWS19SRVRVUk4pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9Q
bGF0Zm9ybVNjcmVlbk1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9y
bVNjcmVlbk1hYy5tbQppbmRleCBmZTExZWRlMTI1M2Y1NDQzMmJkZGQyMjUwZjI1ZDNlYzhhNTAx
OTQ5Li44NjlkNjVlMmFkMjRmZDc0YTEzYmRmYTc2MzA0OGMyMzVmYWM2YTlhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2NyZWVuTWFjLm1tCkBAIC0zMCw3
ICszMCw2IEBACiAjaW1wb3J0ICJGbG9hdFJlY3QuaCIKICNpbXBvcnQgIkZyYW1lVmlldy5oIgog
I2ltcG9ydCAiSG9zdFdpbmRvdy5oIgotCiAjaW1wb3J0IDxDb2xvclN5bmMvQ29sb3JTeW5jLmg+
CiAKIGV4dGVybiAiQyIgewpAQCAtNDAsMTAyICszOSw5OSBAQCBib29sIENHRGlzcGxheVVzZXNG
b3JjZVRvR3JheSh2b2lkKTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUGxhdGZv
cm1EaXNwbGF5SUQgZGlzcGxheUlERnJvbVNjcmVlbihOU1NjcmVlbiAqc2NyZWVuKQotewotICAg
IHJldHVybiAoUGxhdGZvcm1EaXNwbGF5SUQpW1tbc2NyZWVuIGRldmljZURlc2NyaXB0aW9uXSBv
YmplY3RGb3JLZXk6QCJOU1NjcmVlbk51bWJlciJdIGludFZhbHVlXTsKLX0KLQogLy8gVGhlc2Ug
ZnVuY3Rpb25zIHNjYWxlIGJldHdlZW4gc2NyZWVuIGFuZCBwYWdlIGNvb3JkaW5hdGVzIGJlY2F1
c2UgSmF2YVNjcmlwdC9ET00gb3BlcmF0aW9ucwogLy8gYXNzdW1lIHRoYXQgdGhlIHNjcmVlbiBh
bmQgdGhlIHBhZ2Ugc2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzeXN0ZW0uCiAKLXN0YXRpYyBQ
bGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5RnJvbVdpZGdldChXaWRnZXQqIHdpZGdldCkKK3N0YXRp
YyBQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQoTlNTY3JlZW4gKnNjcmVlbikKK3sKKyAgICBy
ZXR1cm4gW1tbc2NyZWVuIGRldmljZURlc2NyaXB0aW9uXSBvYmplY3RGb3JLZXk6QCJOU1NjcmVl
bk51bWJlciJdIGludFZhbHVlXTsKK30KKworc3RhdGljIFBsYXRmb3JtRGlzcGxheUlEIGRpc3Bs
YXlJRChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBpZiAoIXdpZGdldCkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBGcmFtZVZpZXcqIHZpZXcgPSB3aWRnZXQtPnJvb3QoKTsKKyAgICBhdXRvKiB2
aWV3ID0gd2lkZ2V0LT5yb290KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIHJldHVybiB2aWV3LT5ob3N0V2luZG93KCktPmRpc3BsYXlJRCgpOworICAgIGF1dG8q
IGhvc3RXaW5kb3cgPSB2aWV3LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBob3N0V2luZG93LT5kaXNwbGF5SUQoKTsK
IH0KIAotc3RhdGljIE5TU2NyZWVuICpzY3JlZW5Gb3JXaWRnZXQoV2lkZ2V0KiB3aWRnZXQsIE5T
V2luZG93ICp3aW5kb3cpCisvLyBTY3JlZW4gY29udGFpbmluZyB0aGUgbWVudWJhci4KK3N0YXRp
YyBOU1NjcmVlbiAqZmlyc3RTY3JlZW4oKQogewotICAgIC8vIFdpZGdldCBpcyBpbiBhbiBOU1dp
bmRvdywgdXNlIGl0cyBzY3JlZW4uCi0gICAgaWYgKHdpbmRvdykKLSAgICAgICAgcmV0dXJuIHNj
cmVlbkZvcldpbmRvdyh3aW5kb3cpOworICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4g
c2NyZWVuc107CisgICAgaWYgKCFbc2NyZWVucyBjb3VudF0pCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgcmV0dXJuIFtzY3JlZW5zIG9iamVjdEF0SW5kZXg6MF07Cit9CiAKLSAgICAvLyBEaWRu
J3QgZ2V0IGFuIE5TV2luZG93OyBwcm9iYWJseSBXZWJLaXQyLiBUcnkgdXNpbmcgdGhlIFdpZGdl
dCdzIGRpc3BsYXkgSUQuCi0gICAgaWYgKE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JEaXNw
bGF5SUQoZGlzcGxheUZyb21XaWRnZXQod2lkZ2V0KSkpCi0gICAgICAgIHJldHVybiBzY3JlZW47
CitzdGF0aWMgTlNXaW5kb3cgKndpbmRvdyhXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdp
ZGdldCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gd2lkZ2V0LT5wbGF0Zm9ybVdp
ZGdldCgpLndpbmRvdzsKK30KIAotICAgIC8vIFdpZGdldCdzIHdpbmRvdyBpcyBvZmZzY3JlZW4s
IG9yIG5vIHNjcmVlbnMuIEZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc2NyZWVuIGlmIGF2YWlsYWJs
ZS4KLSAgICByZXR1cm4gc2NyZWVuRm9yV2luZG93KG5pbCk7CitzdGF0aWMgTlNTY3JlZW4gKnNj
cmVlbihXaWRnZXQqIHdpZGdldCkKK3sKKyAgICAvLyBJZiB0aGUgd2lkZ2V0IGlzIGluIGEgd2lu
ZG93LCB1c2UgdGhhdCwgb3RoZXJ3aXNlIHVzZSB0aGUgZGlzcGxheSBJRCBmcm9tIHRoZSBob3N0
IHdpbmRvdy4KKyAgICAvLyBGaXJzdCBjYXNlIGlzIGZvciB3aGVuIHRoZSBOU1dpbmRvdyBpcyBp
biB0aGUgc2FtZSBwcm9jZXNzLCBzZWNvbmQgY2FzZSBmb3Igd2hlbiBpdCdzIG5vdC4KKyAgICBp
ZiAoYXV0byBzY3JlZW5Gcm9tV2luZG93ID0gd2luZG93KHdpZGdldCkuc2NyZWVuKQorICAgICAg
ICByZXR1cm4gc2NyZWVuRnJvbVdpbmRvdzsKKyAgICByZXR1cm4gc2NyZWVuKGRpc3BsYXlJRCh3
aWRnZXQpKTsKIH0KIAogaW50IHNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQogewotICAgIE5T
V2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdldCgpIHdpbmRv
d10gOiBuaWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldpZGdldCh3aWRnZXQs
IHdpbmRvdyk7Ci0gICAgcmV0dXJuIE5TQml0c1BlclBpeGVsRnJvbURlcHRoKHNjcmVlbi5kZXB0
aCk7CisgICAgcmV0dXJuIE5TQml0c1BlclBpeGVsRnJvbURlcHRoKHNjcmVlbih3aWRnZXQpLmRl
cHRoKTsKIH0KIAogaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQog
ewotICAgIE5TV2luZG93ICp3aW5kb3cgPSB3aWRnZXQgPyBbd2lkZ2V0LT5wbGF0Zm9ybVdpZGdl
dCgpIHdpbmRvd10gOiBuaWw7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldpZGdl
dCh3aWRnZXQsIHdpbmRvdyk7Ci0gICAgcmV0dXJuIE5TQml0c1BlclNhbXBsZUZyb21EZXB0aChz
Y3JlZW4uZGVwdGgpOworICAgIHJldHVybiBOU0JpdHNQZXJTYW1wbGVGcm9tRGVwdGgoc2NyZWVu
KHdpZGdldCkuZGVwdGgpOwogfQogCiBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKQog
ewotICAgIC8vIEF0IHRoZSBtb21lbnQgdGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxp
dHkgc2V0dGluZywKLSAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBzY3JlZW4g
d2UncmUgdXNpbmcuCisgICAgLy8gVGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkg
c2V0dGluZywgc2FtZSBvbiBhbGwgc2NyZWVucy4KICAgICByZXR1cm4gQ0dEaXNwbGF5VXNlc0Zv
cmNlVG9HcmF5KCk7CiB9CiAKIGJvb2wgc2NyZWVuSGFzSW52ZXJ0ZWRDb2xvcnMoKQogewotICAg
IC8vIEF0IHRoZSBtb21lbnQgdGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0
dGluZywKLSAgICAvLyBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoZSBzY3JlZW4gd2UncmUg
dXNpbmcuCisgICAgLy8gVGhpcyBpcyBhIHN5c3RlbS13aWRlIGFjY2Vzc2liaWxpdHkgc2V0dGlu
Zywgc2FtZSBvbiBhbGwgc2NyZWVucy4KICAgICByZXR1cm4gQ0dEaXNwbGF5VXNlc0ludmVydGVk
UG9sYXJpdHkoKTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7
Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0
KCkgd2luZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lkZ2V0
KHdpZGdldCwgd2luZG93KTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbiBmcmFtZV0s
IHdpbmRvdyk7CisgICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3JlZW4od2lkZ2V0KSBmcmFtZV0s
IHdpbmRvdyh3aWRnZXQpKTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lk
Z2V0KiB3aWRnZXQpCiB7Ci0gICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQt
PnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0g
c2NyZWVuRm9yV2lkZ2V0KHdpZGdldCwgd2luZG93KTsKLSAgICByZXR1cm4gdG9Vc2VyU3BhY2Uo
W3NjcmVlbiB2aXNpYmxlRnJhbWVdLCB3aW5kb3cpOworICAgIHJldHVybiB0b1VzZXJTcGFjZShb
c2NyZWVuKHdpZGdldCkgdmlzaWJsZUZyYW1lXSwgd2luZG93KHdpZGdldCkpOwogfQogCi1OU1Nj
cmVlbiAqc2NyZWVuRm9yV2luZG93KE5TV2luZG93ICp3aW5kb3cpCitOU1NjcmVlbiAqc2NyZWVu
KE5TV2luZG93ICp3aW5kb3cpCiB7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IFt3aW5kb3cgc2Ny
ZWVuXTsgLy8gbmlsIGlmIHRoZSB3aW5kb3cgaXMgb2ZmLXNjcmVlbgotICAgIGlmIChzY3JlZW4p
Ci0gICAgICAgIHJldHVybiBzY3JlZW47Ci0KLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2Ny
ZWVuIHNjcmVlbnNdOwotICAgIGlmIChbc2NyZWVucyBjb3VudF0gPiAwKQotICAgICAgICByZXR1
cm4gW3NjcmVlbnMgb2JqZWN0QXRJbmRleDowXTsgLy8gc2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1l
bnViYXIKLQotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIFt3aW5kb3cgc2NyZWVuXSA/IDog
Zmlyc3RTY3JlZW4oKTsKIH0KIAotTlNTY3JlZW4gKnNjcmVlbkZvckRpc3BsYXlJRChQbGF0Zm9y
bURpc3BsYXlJRCBkaXNwbGF5SUQpCitOU1NjcmVlbiAqc2NyZWVuKFBsYXRmb3JtRGlzcGxheUlE
IGRpc3BsYXlJRCkKIHsKICAgICBmb3IgKE5TU2NyZWVuICpzY3JlZW4gaW4gW05TU2NyZWVuIHNj
cmVlbnNdKSB7Ci0gICAgICAgIGlmIChkaXNwbGF5SURGcm9tU2NyZWVuKHNjcmVlbikgPT0gZGlz
cGxheUlEKQorICAgICAgICBpZiAoV2ViQ29yZTo6ZGlzcGxheUlEKHNjcmVlbikgPT0gZGlzcGxh
eUlEKQogICAgICAgICAgICAgcmV0dXJuIHNjcmVlbjsKICAgICB9Ci0gICAgcmV0dXJuIG5pbDsK
KyAgICByZXR1cm4gZmlyc3RTY3JlZW4oKTsKIH0KIAogYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVu
ZGVkQ29sb3IoV2lkZ2V0KiB3aWRnZXQpCkBAIC0xNDcsMTkgKzE0MywxNCBAQCBib29sIHNjcmVl
blN1cHBvcnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCkKICAgICBpZiAoIXdpZGdldCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgTlNXaW5kb3cgKndpbmRvdyA9IFt3aWRnZXQt
PnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XTsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVu
Rm9yV2lkZ2V0KHdpZGdldCwgd2luZG93KTsKLSAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IHNjcmVlbi5jb2xvclNwYWNlLkNHQ29sb3JTcGFjZTsKKyAgICBhdXRvIGNvbG9yU3BhY2Ug
PSBzY3JlZW4od2lkZ2V0KS5jb2xvclNwYWNlLkNHQ29sb3JTcGFjZTsKIAogI2lmIF9fTUFDX09T
X1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPj0gMTAxMjAwCiAgICAgcmV0dXJuIENHQ29sb3JTcGFj
ZUlzV2lkZUdhbXV0UkdCKGNvbG9yU3BhY2UpOwogI2Vsc2UKLSAgICBib29sIGlzV2lkZUdhbXV0
ID0gZmFsc2U7Ci0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gaWNjRGF0YSA9IGFkb3B0Q0YoQ0dD
b2xvclNwYWNlQ29weUlDQ1Byb2ZpbGUoY29sb3JTcGFjZSkpOwotICAgIFJldGFpblB0cjxDb2xv
clN5bmNQcm9maWxlUmVmPiBwcm9maWxlID0gYWRvcHRDRihDb2xvclN5bmNQcm9maWxlQ3JlYXRl
KGljY0RhdGEuZ2V0KCksIE5VTEwpKTsKLSAgICBpZiAocHJvZmlsZSkKLSAgICAgICAgaXNXaWRl
R2FtdXQgPSBDb2xvclN5bmNQcm9maWxlSXNXaWRlR2FtdXQocHJvZmlsZS5nZXQoKSk7Ci0gICAg
cmV0dXJuIGlzV2lkZUdhbXV0OworICAgIGF1dG8gaWNjRGF0YSA9IGFkb3B0Q0YoQ0dDb2xvclNw
YWNlQ29weUlDQ1Byb2ZpbGUoY29sb3JTcGFjZSkpOworICAgIGF1dG8gcHJvZmlsZSA9IGFkb3B0
Q0YoQ29sb3JTeW5jUHJvZmlsZUNyZWF0ZShpY2NEYXRhLmdldCgpLCBudWxscHRyKSk7CisgICAg
cmV0dXJuIHByb2ZpbGUgJiYgQ29sb3JTeW5jUHJvZmlsZUlzV2lkZUdhbXV0KHByb2ZpbGUuZ2V0
KCkpOwogI2VuZGlmCiAjZW5kaWYKIH0KQEAgLTE2NywxNCArMTU4LDE0IEBAIGJvb2wgc2NyZWVu
U3VwcG9ydHNFeHRlbmRlZENvbG9yKFdpZGdldCogd2lkZ2V0KQogRmxvYXRSZWN0IHRvVXNlclNw
YWNlKGNvbnN0IE5TUmVjdCYgcmVjdCwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKQogewogICAgIEZs
b2F0UmVjdCB1c2VyUmVjdCA9IHJlY3Q7Ci0gICAgdXNlclJlY3Quc2V0WShOU01heFkoW3NjcmVl
bkZvcldpbmRvdyhkZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55KCkgKyB1c2VyUmVj
dC5oZWlnaHQoKSkpOyAvLyBmbGlwCisgICAgdXNlclJlY3Quc2V0WShOU01heFkoW3NjcmVlbihk
ZXN0aW5hdGlvbikgZnJhbWVdKSAtICh1c2VyUmVjdC55KCkgKyB1c2VyUmVjdC5oZWlnaHQoKSkp
OyAvLyBmbGlwCiAgICAgcmV0dXJuIHVzZXJSZWN0OwogfQogCiBOU1JlY3QgdG9EZXZpY2VTcGFj
ZShjb25zdCBGbG9hdFJlY3QmIHJlY3QsIE5TV2luZG93ICpzb3VyY2UpCiB7CiAgICAgRmxvYXRS
ZWN0IGRldmljZVJlY3QgPSByZWN0OwotICAgIGRldmljZVJlY3Quc2V0WShOU01heFkoW3NjcmVl
bkZvcldpbmRvdyhzb3VyY2UpIGZyYW1lXSkgLSAoZGV2aWNlUmVjdC55KCkgKyBkZXZpY2VSZWN0
LmhlaWdodCgpKSk7IC8vIGZsaXAKKyAgICBkZXZpY2VSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW4o
c291cmNlKSBmcmFtZV0pIC0gKGRldmljZVJlY3QueSgpICsgZGV2aWNlUmVjdC5oZWlnaHQoKSkp
OyAvLyBmbGlwCiAgICAgcmV0dXJuIGRldmljZVJlY3Q7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYkZyYW1lLm1tCmluZGV4IDdkZmMwNWE2YmNkZjFlM2ZmN2MzMDk2NWRjODk1YzdmZjNm
MWM1YzAuLmIwZGNkOWE5YWE2YWVmZjRjZGY2YWRkZTA0ZWY3Y2YyOWFlNDE4NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQpAQCAtOTc2LDcgKzk3Niw3IEBAIC0gKHZvaWQp
X2RyYWdTb3VyY2VFbmRlZEF0OihOU1BvaW50KXdpbmRvd0xvYyBvcGVyYXRpb246KE5TRHJhZ09w
ZXJhdGlvbilvcGVyYXRpCiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm47CiAgICAgLy8g
RklYTUU6IFRoZXNlIGFyZSBmYWtlIG1vZGlmaWVyIGtleXMgaGVyZSwgYnV0IHRoZXkgc2hvdWxk
IGJlIHJlYWwgb25lcyBpbnN0ZWFkLgotICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChJbnRQ
b2ludCh3aW5kb3dMb2MpLCBnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFt2aWV3LT5wbGF0Zm9ybVdp
ZGdldCgpIHdpbmRvd10pLAorICAgIFBsYXRmb3JtTW91c2VFdmVudCBldmVudChJbnRQb2ludCh3
aW5kb3dMb2MpLCBJbnRQb2ludChnbG9iYWxQb2ludCh3aW5kb3dMb2MsIFt2aWV3LT5wbGF0Zm9y
bVdpZGdldCgpIHdpbmRvd10pKSwKICAgICAgICAgTGVmdEJ1dHRvbiwgUGxhdGZvcm1FdmVudDo6
TW91c2VNb3ZlZCwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGN1cnJlbnRUaW1lKCks
IFdlYkNvcmU6OkZvcmNlQXRDbGljayk7CiAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZXZlbnRI
YW5kbGVyKCkuZHJhZ1NvdXJjZUVuZGVkQXQoZXZlbnQsIChEcmFnT3BlcmF0aW9uKW9wZXJhdGlv
bik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFj
dG9yeS5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCmlu
ZGV4IGNlYmJjMjY5MDFiZTc5M2E4OGJhY2JmOWM5MmM3ZDUzOTI3ODA3ZGMuLmNmNzc0MjdmNTRl
ZjRmMTkwYTM2YjVjNjg5NDI3NmMwNTQ0MmU2NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1NoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tCkBAIC0xMzcsMzQgKzEzNyw2IEBAIHN0YXRpYyBpbnQg
Y2xpY2tDb3VudEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHBvcAogfQogCi1zdGF0aWMgTlNTY3JlZW4gKnNjcmVlbkZvcldpbmRvdyhOU1dpbmRvdyAq
d2luZG93KQotewotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBbd2luZG93IHNjcmVlbl07IC8vIG5p
bCBpZiB0aGUgd2luZG93IGlzIG9mZi1zY3JlZW4KLSAgICBpZiAoc2NyZWVuKQotICAgICAgICBy
ZXR1cm4gc2NyZWVuOwotICAgIAotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4gc2Ny
ZWVuc107Ci0gICAgaWYgKFtzY3JlZW5zIGNvdW50XSA+IDApCi0gICAgICAgIHJldHVybiBbc2Ny
ZWVucyBvYmplY3RBdEluZGV4OjBdOyAvLyBzY3JlZW4gY29udGFpbmluZyB0aGUgbWVudWJhcgot
ICAgIAotICAgIHJldHVybiBuaWw7Ci19Ci0KLXN0YXRpYyBOU1BvaW50IGZsaXBTY3JlZW5Qb2lu
dChjb25zdCBOU1BvaW50JiBzY3JlZW5Qb2ludCwgTlNTY3JlZW4gKnNjcmVlbikKLXsKLSAgICBO
U1BvaW50IGZsaXBwZWRQb2ludCA9IHNjcmVlblBvaW50OwotICAgIGZsaXBwZWRQb2ludC55ID0g
TlNNYXhZKFtzY3JlZW4gZnJhbWVdKSAtIGZsaXBwZWRQb2ludC55OwotICAgIHJldHVybiBmbGlw
cGVkUG9pbnQ7Ci19Ci0KLXN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQm
IHdpbmRvd1BvaW50LCBOU1dpbmRvdyAqd2luZG93KQotewotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQt
ZGVjbGFyYXRpb25zIgotICAgIHJldHVybiBmbGlwU2NyZWVuUG9pbnQoW3dpbmRvdyBjb252ZXJ0
QmFzZVRvU2NyZWVuOndpbmRvd1BvaW50XSwgc2NyZWVuRm9yV2luZG93KHdpbmRvdykpOwotI3By
YWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotfQotCiBzdGF0aWMgTlNQb2ludCBnbG9iYWxQb2lu
dEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQogewogICAgIHN3aXRjaCAoW2V2ZW50IHR5cGVdKSB7
CkBAIC0xODcsNyArMTU5LDcgQEAgc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChO
U0V2ZW50ICpldmVudCkKICAgICBjYXNlIE5TUmlnaHRNb3VzZVVwOgogICAgIGNhc2UgTlNTY3Jv
bGxXaGVlbDoKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAgICAgcmV0dXJuIGds
b2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2ZW50IHdpbmRvd10pOworICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Z2xvYmFsUG9pbnQoW2V2ZW50IGxvY2F0aW9uSW5XaW5kb3dd
LCBbZXZlbnQgd2luZG93XSk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIE5TWmVyb1Bv
aW50OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5tbQppbmRleCBmMGY0NjNkMzE2NGFhM2FiMGQ0ZTg4MjkyMDJjYzM1YTVhMDIzM2RiLi5iMjIx
ZDIyMmFjZTE2NjZmYmQ3YzZjZjJhNjk1YWMyYzg3MzhmMWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCkBAIC0xMDg5LDcgKzEwODksNyBAQCB2
b2lkIFdlYlZpZXdJbXBsOjp3aW5kb3dEaWRDaGFuZ2VCYWNraW5nUHJvcGVydGllcyhDR0Zsb2F0
IG9sZEJhY2tpbmdTY2FsZUZhY3Rvcgogdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hhbmdl
U2NyZWVuKCkKIHsKICAgICBOU1dpbmRvdyAqd2luZG93ID0gbV90YXJnZXRXaW5kb3dGb3JNb3Zl
UHJlcGFyYXRpb24gPyBtX3RhcmdldFdpbmRvd0Zvck1vdmVQcmVwYXJhdGlvbiA6IG1fdmlldy53
aW5kb3c7Ci0gICAgbV9wYWdlLT53aW5kb3dTY3JlZW5EaWRDaGFuZ2UoKFBsYXRmb3JtRGlzcGxh
eUlEKVtbW1t3aW5kb3cgc2NyZWVuXSBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5OkAi
TlNTY3JlZW5OdW1iZXIiXSBpbnRWYWx1ZV0pOworICAgIG1fcGFnZS0+d2luZG93U2NyZWVuRGlk
Q2hhbmdlKFtbW1t3aW5kb3cgc2NyZWVuXSBkZXZpY2VEZXNjcmlwdGlvbl0gb2JqZWN0Rm9yS2V5
OkAiTlNTY3JlZW5OdW1iZXIiXSBpbnRWYWx1ZV0pOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjp3
aW5kb3dEaWRDaGFuZ2VMYXllckhvc3RpbmcoKQpAQCAtMjc3OCw3ICsyNzc4LDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6ZHJhZ2dlZEltYWdlKE5TSW1hZ2UgKmltYWdlLCBDR1BvaW50IGVuZFBvaW50
LCBOU0RyYWdPcGVyYXRpb24KICAgICAvLyBQcmV2ZW50IHF1ZXVlZCBtb3VzZURyYWdnZWQgZXZl
bnRzIGZyb20gY29taW5nIGFmdGVyIHRoZSBkcmFnIGFuZCBmYWtlIG1vdXNlVXAgZXZlbnQuCiAg
ICAgbV9pZ25vcmVzTW91c2VEcmFnZ2VkRXZlbnRzID0gdHJ1ZTsKIAotICAgIG1fcGFnZS0+ZHJh
Z0VuZGVkKFdlYkNvcmU6OkludFBvaW50KHdpbmRvd01vdXNlTG9jKSwgV2ViQ29yZTo6Z2xvYmFs
UG9pbnQod2luZG93TW91c2VMb2MsIG1fdmlldy53aW5kb3cpLCBvcGVyYXRpb24pOworICAgIG1f
cGFnZS0+ZHJhZ0VuZGVkKFdlYkNvcmU6OkludFBvaW50KHdpbmRvd01vdXNlTG9jKSwgV2ViQ29y
ZTo6SW50UG9pbnQoV2ViQ29yZTo6Z2xvYmFsUG9pbnQod2luZG93TW91c2VMb2MsIG1fdmlldy53
aW5kb3cpKSwgb3BlcmF0aW9uKTsKIH0KIAogc3RhdGljIFdlYkNvcmU6OkRyYWdBcHBsaWNhdGlv
bkZsYWdzIGFwcGxpY2F0aW9uRmxhZ3NGb3JEcmFnKE5TVmlldyAqdmlldywgaWQgPE5TRHJhZ2dp
bmdJbmZvPiBkcmFnZ2luZ0luZm8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKaW5kZXggMWY5ZGMwNDBjN2M4Y2NjNWMxZTBmNTkzNTM2MTIzMzVlZmFmZTI5Mi4uYjNmOGRm
OWJlN2Q2Y2EyOWJkZTAzNGFjNDI1ZmVlZDQ3YjcyMDJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUGFnZVByb3h5X2gKLSNkZWZpbmUg
V2ViUGFnZVByb3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAj
aW5jbHVkZSAiQVBJU2Vzc2lvbi5oIgpAQCAtNjY2LDcgKzY2NSw3IEBAIHB1YmxpYzoKICAgICBm
bG9hdCBkZXZpY2VTY2FsZUZhY3RvcigpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50cmluc2ljRGV2
aWNlU2NhbGVGYWN0b3IoZmxvYXQpOwogICAgIHZvaWQgc2V0Q3VzdG9tRGV2aWNlU2NhbGVGYWN0
b3IoZmxvYXQpOwotICAgIHZvaWQgd2luZG93U2NyZWVuRGlkQ2hhbmdlKFBsYXRmb3JtRGlzcGxh
eUlEKTsKKyAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShXZWJDb3JlOjpQbGF0Zm9ybURp
c3BsYXlJRCk7CiAKICAgICB2b2lkIHNldFVzZUZpeGVkTGF5b3V0KGJvb2wpOwogICAgIHZvaWQg
c2V0Rml4ZWRMYXlvdXRTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKTsKQEAgLTE4MzEsNSAr
MTgzMCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlm
IC8vIFdlYlBhZ2VQcm94eV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaAppbmRleCBkYTY2YzNhNTcyMGE3
NTliNTQxOTZiYzU4OWI5MzhhNDE1N2Y5Zjg4Li5iM2EwODE5NDQxMjQzYWJjZWI5ZDRiNTMzYWJj
Y2MxZDA5ZjI5NTg5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKQEAgLTI0LDggKzI0LDcgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkNocm9t
ZUNsaWVudF9oCi0jZGVmaW5lIFdlYkNocm9tZUNsaWVudF9oCisjcHJhZ21hIG9uY2UKIAogI2lu
Y2x1ZGUgIldlYkZyYW1lLmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9DaHJvbWVDbGllbnQuaD4KQEAg
LTIxMCw3ICsyMDksNyBAQCBwcml2YXRlOgogICAgIGJvb2wgYWRqdXN0TGF5ZXJGbHVzaFRocm90
dGxpbmcoV2ViQ29yZTo6TGF5ZXJGbHVzaFRocm90dGxlU3RhdGU6OkZsYWdzKSBvdmVycmlkZTsK
IAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAg
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCiAK
ICAgICBDb21wb3NpdGluZ1RyaWdnZXJGbGFncyBhbGxvd2VkQ29tcG9zaXRpbmdUcmlnZ2Vycygp
IGNvbnN0IG92ZXJyaWRlCkBAIC0zNDYsNSArMzQ1LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYgLy8gV2ViQ2hyb21lQ2xpZW50X2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRy
ZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9Db2NvYS9SZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaAppbmRleCA4
YzVhNWM5NWRlNjI3ZTBlNzI4MzViYzRkMTI4NzI5N2ZjMTA2MDUwLi4zMmI3ZjVhYTE3YTMwNjM4
YzJiZDBiMDgxNDhjY2ZkMDdkODY4ZGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9y
LmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90ZUxh
eWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKICAqLwogCi0jaWZuZGVmIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9u
aXRvcl9oCi0jZGVmaW5lIFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcl9oCisj
cHJhZ21hIG9uY2UKIAogI2lmIFVTRShSRVFVRVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01P
TklUT1IpCiAKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFJl
bW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvciA6IHB1YmxpYyBXZWJDb3JlOjpEaXNw
bGF5UmVmcmVzaE1vbml0b3IgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVtb3RlTGF5ZXJU
cmVlRGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGUoUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxh
eUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYgZHJhd2luZ0FyZWEpCisgICAgc3RhdGlj
IFJlZjxSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZShXZWJDb3Jl
OjpQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
JiBkcmF3aW5nQXJlYSkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJlbW90
ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcihkaXNwbGF5SUQsIGRyYXdpbmdBcmVhKSk7
CiAgICAgfQpAQCAtNDcsNyArNDYsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkaWRVcGRhdGVMYXll
cnMoKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVm
cmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQsIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
Jik7CisgICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYpOwog
CiAgICAgV2Vha1B0cjxSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYT4gbV9kcmF3aW5nQXJlYTsK
IH07CkBAIC01NSw1ICs1NCwzIEBAIHByaXZhdGU6CiB9CiAKICNlbmRpZiAvLyBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotCi0jZW5kaWYgLy8gUmVtb3RlTGF5
ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggOWQ4M2UwNjQ2NzQ2YjJhMjhmN2QwYTc3
YmY5MTVjNGExZGRjM2RmYy4uYjQzMmJiZDY4MDQ0ZWM2ZDRmYWQyOTYxZmUxZGIxNDNlZDUyZDgx
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdB
cmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVh
LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi0jaWZuZGVmIERyYXdpbmdBcmVhX2gKLSNkZWZpbmUgRHJhd2luZ0FyZWFfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYUluZm8uaCIKICNpbmNsdWRlICJMYXll
clRyZWVDb250ZXh0LmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3Rz
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgSVBDIHsKIGNsYXNzIENv
bm5lY3Rpb247CkBAIC0xMTEsNyArMTExLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBz
Y2hlZHVsZUNvbXBvc2l0aW5nTGF5ZXJGbHVzaEltbWVkaWF0ZWx5KCkgPSAwOwogCiAjaWYgVVNF
KFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLSAgICB2aXJ0dWFsIFJl
ZlB0cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNo
TW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCk7CisgICAgdmlydHVhbCBSZWZQdHI8V2ViQ29yZTo6
RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29y
ZTo6UGxhdGZvcm1EaXNwbGF5SUQpOwogI2VuZGlmCiAKICNpZiBVU0UoQ09PUkRJTkFURURfR1JB
UEhJQ1NfTVVMVElQUk9DRVNTKQpAQCAtMTgyLDUgKzE4MiwzIEBAIHByaXZhdGU6CiBTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYktpdDo6VG9WYWx1ZVR5cGVOYW1lKSBcCiAgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYktpdDo6RHJhd2luZ0FyZWEmIGFyZWEpIHsgcmV0dXJu
IGFyZWEudHlwZSgpID09IFdlYktpdDo6QXJlYVR5cGU7IH0gXAogU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQotCi0jZW5kaWYgLy8gRHJhd2luZ0FyZWFfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJl
YS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oCmluZGV4IGRlM2NjMjg3NDljNTY2MGMzOTQ5NjM5Yjg5YjAwZWYwNWRl
OGU1ODIuLmI1YjZlNWJlYmE5OWU1NWE2OTE4NzVlNDZmZjQyOWViYjY0MDNiNGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFJlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhX2gKLSNkZWZpbmUgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJEcmF3aW5nQXJlYS5oIgogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXJDQVJlbW90ZS5oIgpAQCAtNzQsNyArNzMsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBh
ZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQodWludDY0X3QgY2FsbGJhY2tJRCkgb3ZlcnJpZGU7CiAK
LSAgICBSZWZQdHI8V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5
UmVmcmVzaE1vbml0b3IoUGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOworICAgIFJlZlB0cjxX
ZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9uaXRv
cihXZWJDb3JlOjpQbGF0Zm9ybURpc3BsYXlJRCkgb3ZlcnJpZGU7CiAgICAgdm9pZCB3aWxsRGVz
dHJveURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3Iq
KTsKIAogICAgIGJvb2wgc2hvdWxkVXNlVGlsZWRCYWNraW5nRm9yRnJhbWVWaWV3KGNvbnN0IFdl
YkNvcmU6OkZyYW1lVmlldyopIG92ZXJyaWRlOwpAQCAtMTc5LDUgKzE3OCwzIEBAIHByaXZhdGU6
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19EUkFXSU5H
X0FSRUEoUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEsIERyYXdpbmdBcmVhVHlwZVJlbW90ZUxh
eWVyVHJlZSkKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279889</attachid>
            <date>2016-05-26 09:07:40 -0700</date>
            <delta_ts>2016-05-26 17:04:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-158067-20160526090849.patch</filename>
            <type>text/plain</type>
            <size>212029</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxNDE4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTJiNjllZTAyNTA3MzE5
MWRhZDI4ZjZlYTBkMmQwZGFhOGRlZGUyOS4uMzRkZDI3NmM0NjRkOWZiMDI5NWE4NDY2NTFkMDI5
NjM1NjY4NGIwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyMSBAQAorMjAxNi0wNS0yNSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgTWVkaWEgcXVlcmllcyBhbmQg
cGxhdGZvcm0gc2NyZWVuIG1vZGVybml6YXRpb24gYW5kIHN0cmVhbWxpbmluZworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4MDY3CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL0RP
TS5tbToKKyAgICAgICAgKC1bRE9NSFRNTExpbmtFbGVtZW50IF9tZWRpYVF1ZXJ5TWF0Y2hlc10p
OiBVc2UgcmVmZXJlbmNlcywgdXNlIGZhc3RHZXRBdHRyaWJ1dGUsCisgICAgICAgIHBhc3MgYSBk
b2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUgdG8gdGhlIG1lZGlhIHF1ZXJ5IGV2YWx1YXRvciBh
bmQgYSByZWZlcmVuY2UgaW5zdGVhZAorICAgICAgICBvZiBhIHBvaW50ZXIuCisKKyAgICAgICAg
KiBjc3MvQ1NTR3JhbW1hci55LmluOiBVc2UgImV4cHJlc3Npb24iIGluc3RlYWQgb2YgImV4cCIg
Zm9yIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb25zLgorICAgICAgICBVcGRhdGUgdmVjdG9ycyBhbmQg
YXJndW1lbnRzIHRvIG1vdmUgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiB1c2lu
ZyB1bmlxdWVfcHRyLgorCisgICAgICAgICogY3NzL0NTU0ltcG9ydFJ1bGUuaDogVXNlIHByYWdt
YSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAgICAgICBN
YWRlIG1vcmUgb3ZlcnJpZGVzIHByaXZhdGUgYW5kIG1hcmtlZCB0aGVtIGZpbmFsLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OlNv
dXJjZVNpemU6OlNvdXJjZVNpemUpOiBBZGRlZCBtaXNzaW5nIFdURk1vdmUgdG8gYXZvaWQgcmVm
ZXJlbmNlCisgICAgICAgIGNvdW50IGNodXJuLiBDaGFuZ2VkIHR5cGUgb2YgZXhwcmVzc2lvbiB0
byBubyBsb25nZXIgdXNlIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6
OnNvdXJjZVNpemUpOiBEaXR0by4KKworICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDogQ2hhbmdl
ZCBTb3VyY2VTaXplOjpleHByZXNzaW9uIHRvIG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAg
ICAgICAgQWxzbyBjaGFuZ2VkIFNvdXJjZVNpemU6Omxlbmd0aCB0byBiZSBSZWYgaW5zdGVhZCBv
ZiBSZWZQdHIuCisKKyAgICAgICAgKiBjc3MvRG9jdW1lbnRSdWxlU2V0cy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpEb2N1bWVudFJ1bGVTZXRzOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUZlYXR1cmVOYW1lczo6aW5pdCk6IFN0cmVhbWxpbmVkIGEgYml0LiBSZW1vdmVkICJNZWRpYUZl
YXR1cmUiIHN1ZmZpeCBmcm9tCisgICAgICAgIG5hbWVzIG9mIG1lZGlhIGZlYXR1cmUgc3RyaW5n
cy4KKworICAgICAgICAqIGNzcy9NZWRpYUZlYXR1cmVOYW1lcy5oOiBVc2UgcHJhZ21hIG9uY2Uu
IENoYW5nZWQgbWVkaWEgZmVhdHVyZSBuYW1lIGdsb2JhbHMKKyAgICAgICAgdG8gdXNlIG5vcm1h
bCBXZWJLaXQgbmFtaW5nIHN0eWxlIGluc3RlYWQgb2YgYWxsIGxvd2VyY2FzZSB3aXRoIHVuZGVy
c2NvcmVzLgorICAgICAgICBTb3J0ZWQgYWxwaGFiZXRpY2FsbHkuIFJlbW92ZWQgIk1lZGlhRmVh
dHVyZSIgc3VmZml4IGZyb20gbmFtZXMgb2YgbWVkaWEgZmVhdHVyZSBzdHJpbmdzLgorCisgICAg
ICAgICogY3NzL01lZGlhTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjpNZWRpYVF1ZXJ5U2V0KTogU2ltcGxpZmllZCBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHRoZSBx
dWVyaWVzCisgICAgICAgIHZlY3RvciBjYW4gbm93IGJlIGNvcGllZCBub3JtYWxseS4KKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlTWVkaWFEZXNjcmlwdG9yKTogTm9ybWFsaXplZCB0eXBlcyBhbmQg
Y2hhbmdlZCB0byB1c2UgaXNBU0NJSUFscGhhbnVtZXJpYy4KKyAgICAgICAgVGhlIG9sZCBjb2Rl
IHdhcyBub3QgaGFuZGxpbmcgJzAnIHRoZSB3YXkgdGhlIGNvbW1lbnQgc2FpZCBpdCBkaWQuCisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjppbnRlcm5hbFBhcnNlKTogQWRkZWQuIEhl
bHBlciBmdW5jdGlvbiB0byBjdXQgZG93biBvbiByZWR1bmRhbnQKKyAgICAgICAgY29kZSBpbiBm
dW5jdGlvbnMgYmVsb3cuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0OjpwYXJzZSk6
IFVzZSBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMgaW5zdGVhZCBvZgorICAgICAg
ICBzdHJpcFdoaXRlU3BhY2UuIFN0cmVhbWxpbmVkIGxvZ2ljIHVzaW5nIGhlbHBlciBmdW5jdGlv
bi4gVXBkYXRlZCB0byB1c2UgYSB2ZWN0b3Igb2YKKyAgICAgICAgcXVlcmllcyBpbnN0ZWFkIG9m
IGEgdmVjdG9yIG9mIHVuaXF1ZV9wdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5U2V0
OjphZGQpOiBVc2UgaW50ZXJuYWxQYXJzZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlT
ZXQ6OnJlbW92ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeVNldDo6YWRk
TWVkaWFRdWVyeSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZSB0byBub3QgYmUgdW5pcXVlX3B0ci4K
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4dCk6IFVzZSBtb2Rlcm4g
Zm9yIGxvb3AuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6Ok1lZGlhTGlzdCk6IEluaXRp
YWxpemUgcG9pbnRlcnMgdG8gbnVsbCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbgorICAgICAgICBy
YXRoZXIgdGhhbiBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dCk6IFJlbW92ZWQgdW5oZWxwZnVsIGxvY2FsIHZhcmlhYmxlLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjppdGVtKTogVXBkYXRlZCBzaW5jZSBxdWVyaWVz
IG5vIGxvbmdlciB1c2UgdW5pcXVlX3B0ci4KKyAgICAgICAgKFdlYkNvcmU6OmFkZFJlc29sdXRp
b25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZSk6IENoYW5nZWQgYXJndW1lbnQgdHlwZXMgdG8gcmVm
ZXJlbmNlcworICAgICAgICBpbnN0ZWFkIG9mIHBvaW50ZXJzIHdpdGggYXNzZXJ0aW9ucy4KKyAg
ICAgICAgKFdlYkNvcmU6OnJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQpOiBVcGRhdGVk
IHRvIG1vZGVybml6ZS4KKworICAgICAgICAqIGNzcy9NZWRpYUxpc3QuaDogVXNlIHByYWdtYSBv
bmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGVzIGFuZCBmb3J3YXJkIGRlY2xhcmF0aW9ucy4K
KyAgICAgICAgQ2hhbmdlZCB2ZWN0b3IgdG8gY29udGFpbiBtZWRpYSBxdWVyaWVzIGluc3RlYWQg
b2YgdW5pcXVlX3B0ci4gVXNlIG51bGxwdHIgaW5zdGVhZCBvZiAwLgorICAgICAgICBJbml0aWFs
aXplIHBvaW50ZXJzIHRvIG51bGwgaGVyZS4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5LmNw
cDogRGVsZXRlZCBub3ctdW5uZWVkZWQgY29weSBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3Rvci4g
Qm90aCBhcmUKKyAgICAgICAgY29ycmVjdGx5IGdlbmVyYXRlZCB3aXRob3V0IHVzIHdyaXRpbmcg
dGhlbSBleHBsaWNpdGx5LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6c2VyaWFsaXpl
KTogUmV3cm90ZSB0byBzdHJlYW1saW5lLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6
TWVkaWFRdWVyeSk6IFVwZGF0ZXMgc2luY2UgZXhwcmVzc2lvbnMgYXJlIG5vIGxvbmdlciB1bmlx
dWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeTo6Y3NzVGV4dCk6IENoYW5nZWQg
cmV0dXJuIHR5cGUgdG8gcmVmZXJlbmNlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnkuaDog
VXNlIHByYWdtYSBvbmNlLiBBZGRlZCBpbmNsdWRlIHNpbmNlIHRoaXMgbm93IGluY2x1ZGVzIG1l
ZGlhIHF1ZXJ5CisgICAgICAgIGV4cHJlc3Npb25zLCBub3QganVzdCB1bmlxdWVfcHRyLiBEZWxl
dGVkIHRoZSB1bm5lZWRlZCBjb3B5IGZ1bmN0aW9uLgorCisgICAgICAgICogY3NzL01lZGlhUXVl
cnlFdmFsdWF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWaWV3cG9ydERlcGVuZGVudCk6
IE1vdmVkIHRoaXMgaGVyZS4gSXQgdXNlZCB0byBiZSBhIG1lbWJlciBmdW5jdGlvbiBvZgorICAg
ICAgICBNZWRpYVF1ZXJ5RXhwLCBidXQgdGhpcyBmaWxlIGhhcyBhIGxvdCBtb3JlIGZ1bmN0aW9u
cyBhYm91dCBzcGVjaWZpYyBmZWF0dXJlcyBhbmQgaG93CisgICAgICAgIHRoZXkgYXJlIGV2YWx1
YXRlZCwgc28gaXQgcmVhbGx5IGJlbG9uZ3MgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IpOiBDaGFuZ2VkIGNvbnN0cnVjdG9y
IHRvIHRha2UgYQorICAgICAgICBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgZnJhbWUuIEluaXRpYWxp
emUgdGhlIGZhbGxiYWNrIHJlc3VsdCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogQ2hhbmdlZCB0aGUgYXJn
dW1lbnQgdHlwZSB0byBhIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVWYWx1
ZSk6IE1hZGUgYm90aCBvZiB0aGUgYXJndW1lbnRzIHNlcGFyYXRlIHRlbXBsYXRlIHR5cGVzLiBU
aGlzCisgICAgICAgIGhlbHBzIHVzIGNvbXBhcmUgYW4gaW50ZWdlciB0byBhIGRvdWJsZSB3aXRo
b3V0IGxvdHMgb2YgdHlwZSBjYXN0cy4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXBhcmVBc3BlY3RS
YXRpb1ZhbHVlKTogQ2hhbmdlZCB0byB1c2UgZWFybHkgcmV0dXJuIHN0eWxlIGFuZCBnb3Qgcmlk
IG9mCisgICAgICAgIHRoZSBjYXN0cyB0byBpbnQgc28gd2Ugd2lsbCBkbyB0aGUgd29yayBpbiBk
b3VibGUgaW5zdGVhZC4KKyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZVZhbHVlKTogUmVwbGFjZWQg
dGhlIG9sZCBudW1iZXJWYWx1ZSBmdW5jdGlvbiB3aXRoIHRoaXMuIFNpbmNlIHZhbHVlcworICAg
ICAgICBhcmUgc3RvcmVkIGFzIGRvdWJsZXMsIGl0J3MgbXVjaCBiZXR0ZXIgdG8gdXNlIGRvdWJs
ZSByYXRoZXIgdGhhbiBmbG9hdC4KKyAgICAgICAgKFdlYkNvcmU6Onplcm9FdmFsdWF0ZSk6IEFk
ZGVkLiBIZWxwZnVsIGZvciB0aGUgbWFueSBmdW5jdGlvbnMgdGhhdCBqdXN0IG5lZWQgdG8KKyAg
ICAgICAgZXZhbHVhdGUgYXMgMC4KKyAgICAgICAgKFdlYkNvcmU6Om9uZUV2YWx1YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2xvckV2YWx1YXRlKTogUmVuYW1lZCB0aGlzIGFuZCBh
bGwgdGhlIGZ1bmN0aW9ucyBiZWxvdy4gU2ltcGxpZmllZCB0aGUgbG9naWMKKyAgICAgICAgdG8g
dXNlIHRoZSBuZXcgZG91YmxlVmFsdWUgZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckluZGV4RXZhbHVhdGUpOiBVc2UgemVyb0V2YWx1YXRlLgorICAgICAgICAoV2ViQ29yZTo6Y29s
b3JHYW11dEV2YWx1YXRlKTogTm8gbG9uZ2VyIHVzZSBwYWdlIGp1c3QgdG8gZ2V0IGZyb20gdGhl
IGZyYW1lIHRvIHRoZQorICAgICAgICBtYWluIGZyYW1lLgorICAgICAgICAoV2ViQ29yZTo6bW9u
b2Nocm9tZUV2YWx1YXRlKTogU2ltcGxpZnkgbG9naWMgdXNpbmcgemVyb0V2YWx1YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6aW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZSk6IFVzZSBhdXRvIGZvciB0aGUg
a2V5d29yZDsgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjpvcmllbnRhdGlvbkV2
YWx1YXRlKTogVXNlIGVhcmx5IHJldHVybiBzdHlsZS4KKyAgICAgICAgKFdlYkNvcmU6OmFzcGVj
dFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZUFzcGVjdFJh
dGlvRXZhbHVhdGUpOiBTaW1wbGlmaWVkIGxvZ2ljIGFuZCByZW1vdmVkIHR5cGUgY2FzdHMuCisg
ICAgICAgIChXZWJDb3JlOjpldmFsdWF0ZVJlc29sdXRpb24pOiBBZGRlZCBhIGNvdXBsZSBudWxs
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OmRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IFJl
bmFtZWQuIEFkZGVkIG1pc3NpbmcgdHlwZSBjaGVjay4KKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Z3JpZEV2YWx1YXRlKTog
VXNlIHplcm9FdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBBZGRl
ZCBhIG51bGwgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VIZWlnaHRFdmFsdWF0ZSk6
IFVzZSBlYXJseSByZXR1cm4uCisgICAgICAgIChXZWJDb3JlOjpkZXZpY2VXaWR0aEV2YWx1YXRl
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpoZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6d2lkdGhFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
bWluQ29sb3JFdmFsdWF0ZSk6IFVwZGF0ZWQgbmFtZSBvbmx5LgorICAgICAgICAoV2ViQ29yZTo6
bWF4Q29sb3JFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWluQ29sb3JJbmRl
eEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhDb2xvckluZGV4RXZhbHVh
dGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pbk1vbm9jaHJvbWVFdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4TW9ub2Nocm9tZUV2YWx1YXRlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjptaW5Bc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjptYXhBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptYXhEZXZpY2VBc3BlY3RSYXRpb0V2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjptaW5EZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6bWluSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1heEhlaWdo
dEV2YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptaW5XaWR0aEV2YWx1YXRlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjptYXhXaWR0aEV2YWx1YXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjptaW5EZXZpY2VIZWlnaHRFdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6bWF4RGV2aWNlSGVpZ2h0RXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6Om1pbkRldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1h
eERldmljZVdpZHRoRXZhbHVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Om1pblJlc29s
dXRpb25FdmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6bWF4UmVzb2x1dGlvbkV2
YWx1YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjphbmltYXRpb25FdmFsdWF0ZSk6IFVz
ZSBvbmVFdmFsdWF0ZS4KKyAgICAgICAgKFdlYkNvcmU6OnRyYW5zaXRpb25FdmFsdWF0ZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtMmRFdmFsdWF0ZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6dHJhbnNmb3JtM2RFdmFsdWF0ZSk6IFNpbXBsaWZ5IHVzaW5nIHplcm9F
dmFsdWF0ZSBhbmQgb25lRXZhbHVhdGUuCisgICAgICAgIChXZWJDb3JlOjp2aWV3TW9kZUV2YWx1
YXRlKTogU2ltcGxpZmllZCBsb2dpYyB3aXRoIGZld2VyIGxvY2FsIHZhcmlhYmxlcyBhbmQgdGhl
IG5hbWUgImtleXdvcmQiLgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9QbGF5YWJsZUlubGluZUV2
YWx1YXRlKTogVXNlIHJlZmVyZW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OmhvdmVyRXZhbHVhdGUp
OiBTaW1wbGlmeSB1c2luZyBrZXl3b3JkLgorICAgICAgICAoV2ViQ29yZTo6YW55SG92ZXJFdmFs
dWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6cG9pbnRlckV2YWx1
YXRlKTogU2ltcGxpZnkgdXNpbmcga2V5d29yZC4KKyAgICAgICAgKFdlYkNvcmU6OmFueVBvaW50
ZXJFdmFsdWF0ZSk6IEp1c3QgdXBkYXRlZCBuYW1lLgorICAgICAgICAoV2ViQ29yZTo6YWRkKTog
QWRkZWQuIEhlbHBlciBmb3IgYnVpbGRpbmcgdXAgdGhlIG1lZGlhIHF1ZXJ5IGZ1bmN0aW9uIG1h
cC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKTogTW92
ZWQgY29kZSB0byBidWlsZCB0aGUgZnVuY3Rpb24gbWFwIGluIGhlcmUgaW4KKyAgICAgICAgYSBs
YW1iZGEsIHJhdGhlciB0aGFuIGhhdmluZyBpdCBpbiBhIHNlcGFyYXRlIGdsb2JhbCBmdW5jdGlv
bi4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9yLmg6IFVzZSBwcmFnbWEgb25j
ZS4gUmVtb3ZlZCB1bmVlZGVkIGluY2x1ZGVzLiBTaW1wbGlmaWVkIGNvbW1lbnRzIGFuZAorICAg
ICAgICBtb2Rlcm5pemVkIHRoZWlyIHN0eWxlLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlF
eHAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoSWRlbnRpZmllcik6
IFJlbmFtZWQgdG8gbWFrZSBpdCBjbGVhcmVyIHdoYXQgdGhpcyBkb2VzLiBVcGRhdGVkCisgICAg
ICAgIHRvIHRha2UgYSByZWZlcmVuY2UgYW5kIHVzZSB0ZSBuZXcgZmVhdHVyZSBuYW1lcy4KKyAg
ICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZlTGVuZ3RoT3JOdW1i
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aE5vbk5lZ2F0aXZl
SW50ZWdlcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNGZWF0dXJlVmFsaWRXaXRoTm9u
TmVnYXRpdmVOdW1iZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlk
V2l0aFplcm9Pck9uZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6aXNBc3BlY3RSYXRpb0Zl
YXR1cmUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmlzRmVhdHVyZVZhbGlkV2l0aG91dFZh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXJX
aXRoVW5pdCk6IEFkZGVkLiBIZWxwZXIgdGhhdCBjYWxscyBtdWx0aXBsZSBmdW5jdGlvbnMgYWJv
dmUuCisgICAgICAgIChXZWJDb3JlOjppc0ZlYXR1cmVWYWxpZFdpdGhOdW1iZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OmlzU2xhc2gpOiBBZGRlZC4gSGVscGVyIHRvIG1ha2UgYXNwZWN0
IHJhdGlvIGNvZGUgYmVsb3cgZWFzaWVyIHRvIHJlYWQuCisgICAgICAgIChXZWJDb3JlOjppc1Bv
c2l0aXZlSW50ZWdlclZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5
RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24pOiBSZWFycmFuZ2VkIGNvZGUgdG8gYmUg
bXVjaCBsZXNzIHdvcmR5IGFuZAorICAgICAgICB0byBub3QgdXNlIGN1cnJlbnQvbmV4dC4KKwor
ICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5RXhwLmg6IFVzZSBwcmFnbWEgb25jZS4gUmVuYW1lZCBj
bGFzcyB0byBNZWRpYVF1ZXJ5RXhwcmVzc2lvbi4gUmVtb3ZlZAorICAgICAgICB0aGUgaXNWaWV3
cG9ydERlcGVuZGVudCBmdW5jdGlvbiwgbm93IHBhcnQgb2YgTWVkaWFRdWVyeUV2YWx1YXRvci4g
UmVtb3ZlZCB1bm5lZWRlZCBpbmNsdWRlcy4KKworICAgICAgICAqIGNzcy9NZWRpYVF1ZXJ5TGlz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3Qp
OiBNYXJrZWQgdGhpcyBpbmxpbmUuIFVzZSBhIHJlZmVyZW5jZSBhbmQgYSBSZWYmJgorICAgICAg
ICBpbnN0ZWFkIG9mIFBhc3NSZWZQdHIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1ZXJ5TGlz
dDo6Y3JlYXRlKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjphZGRMaXN0ZW5lcik6IFVwZGF0ZWQgYXJndW1lbnQgdHlwZSBhbmQgdXNl
IHJlbGVhc2VOb25OdWxsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeUxpc3Q6OnJlbW92
ZUxpc3RlbmVyKTogVXBkYXRlZCBhcmd1bWVudCB0eXBlcy4KKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhUXVlcnlMaXN0OjpldmFsdWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFR
dWVyeUxpc3Q6Om1hdGNoZXMpOiBNb3JlIG9mIHRoZSBzYW1lLgorCisgICAgICAgICogY3NzL01l
ZGlhUXVlcnlMaXN0Lmg6IFVzZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCB0eXBlcyB0byB1c2UgcmVm
ZXJlbmNlcywgUmVmUHRyJiYgYW5kIFJlZiYmLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlN
YXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpNZWRpYVF1
ZXJ5TWF0Y2hlcik6IFRha2UgYSByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVF1
ZXJ5TWF0Y2hlcjo6ZG9jdW1lbnREZXN0cm95ZWQpOiBVc2UgbnVsbHB0ci4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSk6
IFVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRl
KTogVGFrZSBhIHJlZmVyZW5jZS4gVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEp
OiBVcGRhdGVkIGZvciBhYm92ZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVy
eU1hdGNoZXI6OmFkZExpc3RlbmVyKTogVXNlIFJlZiYmIGFuZCByZWZlcmVuY2UgZm9yIGFyZ3Vt
ZW50cy4gU2ltcGxpZnkgY29kZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUXVlcnlNYXRjaGVy
OjpyZW1vdmVMaXN0ZW5lcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFRdWVyeU1h
dGNoZXI6OnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKTogTW92ZWQgdGhlIGxvZ2ljIGZvciBldmFsdWF0
aW5nIGVhY2ggcXVlcnkgaGVyZS4KKyAgICAgICAgVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAgICogY3NzL01lZGlhUXVlcnlNYXRjaGVyLmg6IFVz
ZSBwcmFnbWEgb25jZS4gQ2hhbmdlZCBjcmVhdGUgdG8gdGFrZSBhIHJlZmVyZW5jZS4gVGlnaHRl
bmVkIGFyZ3VtZW50CisgICAgICAgIHR5cGVzIGZvciBhZGRMaXN0ZW5lciBhbmQgcmVtb3ZlTGlz
dGVuZXIuIE1hZGUgdGhlIHByaXZhdGUgTGlzdGVuZXIgYSBzaW1wbGUgc3RydWN0IHJhdGhlciB0
aGFuIGEKKyAgICAgICAgY2xhc3MuIEluaXRpYWxpemVkIG1fZXZhbHVhdGlvblJvdW5kLgorCisg
ICAgICAgICogY3NzL1J1bGVTZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVsZVNldDo6YWRk
Q2hpbGRSdWxlcyk6IFVwZGF0ZWQgZm9yIGNoYW5nZXMgdG8gTWVkaWFRdWVyeUV2YWx1YXRvci4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KTogRGl0dG8uCisK
KyAgICAgICAgKiBjc3MvU291cmNlU2l6ZUxpc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWF0
Y2gpOiBVcGRhdGVkIHRvIHVzZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGluIGEgc2ltcGxlciB3YXku
CisgICAgICAgIChXZWJDb3JlOjpkZWZhdWx0TGVuZ3RoKTogVXNlIGEgcmVmZXJlbmNlIGFuZCBz
aW1wbGVyIHN5bnRheC4KKyAgICAgICAgKFdlYkNvcmU6OmNvbXB1dGVMZW5ndGgpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUpOiBDaGFuZ2VkIGFyZ3VtZW50
cyB0byB0YWtlIGEgRG9jdW1lbnQgaW5zdGVhZCBvZiBib3RoIGEKKyAgICAgICAgUmVuZGVyVmll
dyBhbmQgYSBGcmFtZS4KKworICAgICAgICAqIGNzcy9Tb3VyY2VTaXplTGlzdC5oOiBVc2UgI3By
YWdtYSBvbmNlLiBDaGFuZ2UgcGFyc2VTaXplc0F0dHJpYnV0ZSB0byB0YWtlIGEgRG9jdW1lbnQu
CisKKyAgICAgICAgKiBjc3MvU3R5bGVNZWRpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZU1lZGlhOjptYXRjaE1lZGl1bSk6IFVwZGF0ZSBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZh
bHVhdG9yLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcik6IFVzZSBhIE1lZGlhUXVlcnlFdmFs
dWF0b3IgaW5zdGVhZCBvZiBhIHVuaXF1ZV9wdHIKKyAgICAgICAgdG8gb25lLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6YXBwZW5kQXV0aG9yU3R5bGVTaGVldHMpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwc2V1ZG9TdHlsZVJ1
bGVzRm9yRWxlbWVudCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
YWRkVmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0KTogVXNlIHJlZmVyZW5jZXMgaW5z
dGVhZCBvZgorICAgICAgICBwb250ZXJzLCBhbmQgdXNlIGEgdmVjdG9yIG9mIE1lZGlhUXVlcnlS
ZXN1bHQgaW5zdGVhZCBvZiB1bmlxdWVfcHRyLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRCeVZpZXdwb3J0Q2hhbmdlKTogVXNlIGEgbW9k
ZXJuIGZvciBsb29wLgorCisgICAgICAgICogY3NzL1N0eWxlUmVzb2x2ZXIuaDogVXNlIGEgTWVk
aWFRdWVyeUV2YWx1YXRvciBpbnN0ZWFkIG9mIGEgdW5pcXVlX3B0ciB0byBvbmUuCisgICAgICAg
IFVzZSBhIHZlY3RvciBvZiBNZWRpYVF1ZXJ5UmVzdWx0IGluc3RlYWQgb2YgYSB2ZWN0b3Igb2Yg
dW5pcXVlX3B0ci4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6bWVkaWFRdWVyeU1hdGNoZXIpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3Rl
YWQgb2YgYSBwb2ludGVyLgorCisgICAgICAgICogZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVTdHlsZVNoZWV0T3duZXI6OmNyZWF0ZVNoZWV0
KTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorCisgICAgICAg
ICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvcjo6YWR2YW5jZSk6IFJlbW92ZWQgYSBzdHJheSBzcGFjZSAo
dW5yZWxhdGVkIHRvCisgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXRjaCkuCisKKyAgICAgICAg
KiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdl
RWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCk6IFVwZGF0ZWQgZm9yIGNo
YW5nZXMgdG8gdGhlCisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgY2xhc3MuIEFsc28gdXNl
IGF1dG8gYSBiaXQgbW9yZSBhbmQgZWxpbWluYXRlZCBhIGRvdWJsZSBoYXNoIHRhYmxlCisgICAg
ICAgIGxvb2t1cCBpbiBjb2RlIHRoYXQgdXNlZCBoYXNBdHRyaWJ1dGUgZm9sbG93ZWQgYnkgZmFz
dEdldEF0dHJpYnV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OnNlbGVj
dEltYWdlU291cmNlKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBwYXJzZVNpemVzQXR0cmlidXRl
LgorCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50Ojpwcm9jZXNzKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRp
YVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpzZXRD
U1NTdHlsZVNoZWV0KTogVXNlIGF1dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNv
dXJjZUNoaWxkKTogVXBkYXRlZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgor
CisgICAgICAgICogaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFBpY3R1cmVFbGVtZW50Ojp2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSk6IFVw
ZGF0ZWQgZm9yIGNoYW5nZXMgdG8KKyAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvci4KKworICAg
ICAgICAqIGh0bWwvSFRNTFBpY3R1cmVFbGVtZW50Lmg6IFVzZSAjcHJhZ21hIG9uY2UuIENoYW5n
ZWQgdmlld3BvcnQgZGVwZW5kZW50IG1lZGlhIHF1ZXJ5IHJlc3VsdHMKKyAgICAgICAgdmVjdG9y
IHRvIGJlIGEgdmVjdG9yIG9mIHJlc3VsdHMsIG5vdCBvZiB1bmlxdWVfcHRyLgorCisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRva2VuUHJlbG9hZFNjYW5uZXI6OlN0YXJ0VGFnU2Nhbm5lcjo6cHJvY2Vzc0F0dHJpYnV0ZXMp
OiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIHBhcnNlU2l6ZXNBdHRyaWJ1dGUuCisg
ICAgICAgIChXZWJDb3JlOjpUb2tlblByZWxvYWRTY2FubmVyOjpTdGFydFRhZ1NjYW5uZXI6OnBy
b2Nlc3NBdHRyaWJ1dGUpOiBVcGRhdGVkIGZvciBjaGFuZ2VzIHRvCisgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3IuCisKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVsb2Fk
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFBdHRyaWJ1dGVNYXRjaGVzKTogVXBkYXRl
ZCBmb3IgY2hhbmdlcyB0byBNZWRpYVF1ZXJ5RXZhbHVhdG9yLgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKTogRGl0dG8uCisKKyAgICAgICAgKiBwYWdl
L0RPTVdpbmRvdy5jcHA6IFJlbW92ZWQgdW5uZWVkZWQgaW5jbHVkZSBvZiBQbGF0Zm9ybVNjcmVl
bi5oLgorCisgICAgICAgICogcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6RXZlbnRIYW5kbGVyOjplZmZlY3RpdmVNb3VzZVBvc2l0aW9uRm9yU2VsZWN0aW9u
QXV0b3Njcm9sbCk6IFNpbXBsaWZpZWQgY29kZSBhbmQKKyAgICAgICAgdXBkYXRlZCBmb3IgY2hh
bmdlcyB0byBQbGF0Zm9ybVNjcmVlbk1hYyBmdW5jdGlvbnMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9QbGF0Zm9ybVNjcmVlbi5oOiBVc2UgI3ByYWdtYSBvbmNlLiBVc2UgdXNpbmcgaW5zdGFkIG9m
IHR5cGVkZWYuIFB1dCB0aGUgdHlwZWRlZgorICAgICAgICBmb3IgUGxhdGZvcm1EaXNwbGF5SUQg
aW5zaWRlIHRoZSBXZWJDb3JlIG5hbWVzcGFjZS4gUmVtb3ZlZCB0aGUgdHlwZWRlZiBmb3IgQ29s
b3JQcm9maWxlLgorICAgICAgICBSZW5hbWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBmaW5kIGEgc2Ny
ZWVuIHRvIGp1c3QgInNjcmVlbiIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9EaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yQ2xpZW50OjpEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQpOiBNb3ZlZCBp
bml0aWFsaXphdGlvbgorICAgICAgICBvZiBib29sZWFucyB0byB0aGUgY2xhc3MgZGVmaW5pdGlv
bi4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNs
aWVudC5oOiBVc2UgcHJhZ21hIG9uY2UuIFJlbW92ZWQgdW5uZWVkZWQKKyAgICAgICAgZm9yd2Fy
ZCBkZWNsYXJhdGlvbnMuIENoYW5nZWQgZGlzcGxheSBJRCBkYXRhIG1lbWJlciB0byBiZSBhbiBP
cHRpb25hbCBpbnN0ZWFkIG9mIGEgYm9vbGVhbgorICAgICAgICBwYWlyZWQgd2l0aCBhbm90aGVy
IGRhdGEgbWVtYmVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
clVwZGF0ZXIuaDogVXNlIHByYWdtYSBvbmNlLiBSZW1vdmVkIHVubmVlZGVkIGluY2x1ZGUgb2YK
KyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaC4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oOiBVc2UgcHJhZ21hIG9uY2UuIE1vdmVkIENvbG9yUHJvZmls
ZSBoZXJlIGZyb20KKyAgICAgICAgUGxhdGZvcm1TY3JlZW4uaCwgc2luY2UgaXQncyBub3QgdXNl
ZCB0aGVyZS4gYW5kIGlzIHVzZWQgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0
Zm9ybUV2ZW50RmFjdG9yeU1hYy5oOiBVc2UgcGFybWEgb25jZS4gQ2hhbmdlZCByZXV0cm4gdHlw
ZSBvZiB0aGUKKyAgICAgICAgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gdG8gTlNQb2ludC4gVHdlYWtl
ZCBjb21tZW50cyBhbmQgZm9ybWF0dGluZyBhIGJpdC4KKworICAgICAgICAqIHBsYXRmb3JtL21h
Yy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFBv
aW50KTogQ2hhbmdlZCByZXR1cm4gdHlwZSB0byBOU1BvaW50IGFuZCBzbyByZW1vdmVkIHRoZSBl
eHBsaWNpdAorICAgICAgICBjb252ZXJzaW9uIHRvIEludFBvaW50LgorICAgICAgICAoV2ViQ29y
ZTo6Z2xvYmFsUG9pbnRGb3JFdmVudCk6IENoYW5nZWQgcmV0dXJuIHR5cGUgdG8gTlNQb2ludC4K
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudEJ1aWxkZXI6OlBsYXRmb3JtTW91
c2VFdmVudEJ1aWxkZXIpOiBNb3ZlZCBjb252ZXJzaW9uIHRvCisgICAgICAgIEludFBvaW50IGlu
IGhlcmUuIEFsc28gZ290IHJpZCBvZiBzcGVjaWFsIGluZGVudGluZyBzdHlsZSBhbmQganVzdCBp
bmRlbnRlZCBub3JtYWxseS4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudEJ1
aWxkZXI6OlBsYXRmb3JtV2hlZWxFdmVudEJ1aWxkZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1aWxkZXI6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudEJ1
aWxkZXIpOiBEaXR0by4KKworICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmRpc3BsYXlJRCk6IFJlbmFtZWQgZnJvbSBkaXNwbGF5
SURGcm9tU2NyZWVuIGFuZCBkaXNwbGF5RnJvbVdpZGdldCBzaW5jZSB0aGlzCisgICAgICAgIGlz
IEMrKyBhbmQgd2UgaGF2ZSBvdmVybG9hZGluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIG9mIGFy
Z3VtZW50cy4gQWRkZWQgYSBudWxsIGNoZWNrCisgICAgICAgIG9mIHRoZSBob3cgZGlud28gcG9p
bnRlci4KKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0U2NyZWVuKTogQWRkZWQuIEhlbHBlciB1c2Vk
IGJlbG93LgorICAgICAgICAoV2ViQ29yZTo6d2luZG93KTogQWRkZWQuIEhlbHBlciB1c2VkIGJl
bG93LgorICAgICAgICAoV2ViQ29yZTo6c2NyZWVuKTogUmVuYW1lZCBmcm9tIHNjcmVlbkZvcldp
ZGdldCBhbmQgc2NyZWVuRnJvbVdpbmRvdyBhbmQgcmVtb3ZlZCB0aGUKKyAgICAgICAgdW5uZWVk
ZWQgd2luZG93IGFyZ3VtZW50IGZyb20gdGhlIHdpZGdldCB2ZXJzaW9uLgorICAgICAgICAoV2Vi
Q29yZTo6c2NyZWVuRGVwdGgpOiBTaW1wbGlmaWVkLCB1c2luZyBuZXcgaGVscGVycy4KKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOiBUd2Vha2VkIGNvbW1lbnQuCisgICAgICAgIChX
ZWJDb3JlOjpzY3JlZW5IYXNJbnZlcnRlZENvbG9ycyk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6c2NyZWVuUmVjdCk6IFNpbXBsaWZpZWQgdXNpbmcgbmV3IGVscGVycy4KKyAgICAgICAgKFdl
YkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xvcik6IFN0cmVhbWxpbmVkIHVzaW5nIGZld2VyIGxvY2Fs
IHZhcmlhYmxlcyBhbmQKKyAgICAgICAgdXNpbmcgYXV0byBmb3IgdHlwZXMgb2YgdGhlIHJlc3Vs
dHMgb2YgYWRvcHRDRi4KKyAgICAgICAgKFdlYkNvcmU6OnRvVXNlclNwYWNlKTogVXBkYXRlZCBm
b3IgZnVuY3Rpb24gbmFtZSBjaGFuZ2VzLgorICAgICAgICAoV2ViQ29yZTo6dG9EZXZpY2VTcGFj
ZSk6IERpdHRvLgorCiAyMDE2LTA1LTI2ICBGcmVkZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNv
bT4KIAogICAgICAgICBTbWFsbCBpbXByb3ZlbWVudHMgdG8gUmVuZGVyQm94L0xheW91dFVuaXQg
Y2FzdGluZyBpbiBNYXRoTUwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwppbmRleCAxNDk3YzA0NjZkZTU5MzRmM2I4
NjIxZGUzNzk5NWQ1YjVjMjE2ZGZjLi44MWExMDI2NGQwZWJiZmZkMjZjOWRmYjY1YTZhOTIzZTg2
NGU2MDZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDUtMjUgIERh
cmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1lZGlhIHF1ZXJpZXMgYW5k
IHBsYXRmb3JtIHNjcmVlbiBtb2Rlcm5pemF0aW9uIGFuZCBzdHJlYW1saW5pbmcKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODA2NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFt
ZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2RyYWdTb3VyY2VFbmRlZEF0Om9wZXJhdGlvbjpd
KTogVXBkYXRlZCB0byB1c2UgdGhlIG5ldyB2ZXJzaW9uIG9mCisgICAgICAgIGdsb2JhbFBvaW50
LCB3aGljaCByZXR1cm5zIGFuIE5TUG9pbnQuCisKIDIwMTYtMDUtMjQgIEJldGggRGFraW4gIDxi
ZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIENhbmRpZGF0ZXMgc2hvdWxkIHdvcmsgd2l0aCBp
bnB1dCBtZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMjAwNWRkODM5MzkzNzU4N2Q5MGRlZjZlNTExM2Jl
YWQ4MGIzMDM3My4uMjliZjI4MGQ4NDBiNTU0NmI1MGI5MmZmMTk2Zjg4ZmRhODVkNmQ2YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI5IEBACisyMDE2LTA1LTI1ICBEYXJpbiBBZGxlciAgPGRhcmlu
QGFwcGxlLmNvbT4KKworICAgICAgICBNZWRpYSBxdWVyaWVzIGFuZCBwbGF0Zm9ybSBzY3JlZW4g
bW9kZXJuaXphdGlvbiBhbmQgc3RyZWFtbGluaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTgwNjcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvV2ViRXZlbnRGYWN0b3J5Lm1tOgor
ICAgICAgICAoV2ViS2l0OjpzY3JlZW5Gb3JXaW5kb3cpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
S2l0OjpmbGlwU2NyZWVuUG9pbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0OjpnbG9iYWxQ
b2ludCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJLaXQ6Omdsb2JhbFBvaW50Rm9yRXZlbnQpOiBV
c2UgZ2xvYmFsUG9pbnQgZnVuY3Rpb24gZnJvbSBXZWJDb3JlIHNvIHdlIGRvbid0IG5lZWQKKyAg
ICAgICAgY29waWVzIG9mIGV2ZXJ5dGhpbmcgaW4gaGVyZS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9Db2NvYS9XZWJWaWV3SW1wbC5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6Ondp
bmRvd0RpZENoYW5nZVNjcmVlbik6IFJlbW92ZWQgdW5uZWVkZWQgdHlwZSBjYXN0LgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6ZHJhZ2dlZEltYWdlKTogQWRkZWQgdHlwZSBjYXN0IHNp
bmNlIGdsb2JhbFBvaW50IG5vdyByZXR1cm5zIGFuCisgICAgICAgIE5TUG9pbnQgcmF0aGVyIHRo
YW4gYW4gSW50UG9pbnQuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6IFVz
ZSBwcmFnbWEgb25jZS4gQWRkIGEgV2ViQ29yZSBwcmVmaXggdG8gYSB1c2Ugb2YKKyAgICAgICAg
UGxhdGZvcm1EaXNwbGF5SUQsIHNpbmNlIHRoYXQgaXMgbm93IGluc2lkZSB0aGUgV2ViQ29yZSBu
YW1lc3BhY2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVD
bGllbnQuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1JlbW90
ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oOiBEaXR0by4KKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaDogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oOiBEaXR0by4KKwogMjAx
Ni0wNS0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBGbGFz
aGluZXNzIGFuZCBqdW1waW5lc3Mgd2hlbiBlbnRlcmluZyBmdWxsc2NyZWVuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDUwODY5YzIzMTIzNjFjMjdmZDE2NGNkZDQwNDhhZDQ4
NDMxMjA5NjYuLmY0NzQ1ZTE5MTRjNTUzMjRkOGZiMGM1ODQ0NTE1ODkwNTBkNDYzYjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC03NjIsNyArNzYyLDkgQEAgLSAoQk9PTClp
c0ZvY3VzZWQKIEBlbmQKIAogI2lmIFBMQVRGT1JNKElPUykKKwogQGltcGxlbWVudGF0aW9uIERP
TUhUTUxMaW5rRWxlbWVudCAoV2ViUHJpdmF0ZSkKKwogLSAoQk9PTClfbWVkaWFRdWVyeU1hdGNo
ZXNGb3JPcmllbnRhdGlvbjooaW50KW9yaWVudGF0aW9uCiB7CiAgICAgRG9jdW1lbnQmIGRvY3Vt
ZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oY29yZShzZWxmKSktPmRvY3VtZW50
KCk7CkBAIC03OTAsMTggKzc5MiwxOSBAQCAtIChCT09MKV9tZWRpYVF1ZXJ5TWF0Y2hlc0Zvck9y
aWVudGF0aW9uOihpbnQpb3JpZW50YXRpb24KIAogLSAoQk9PTClfbWVkaWFRdWVyeU1hdGNoZXMK
IHsKLSAgICBIVE1MTGlua0VsZW1lbnQqIGxpbmsgPSBzdGF0aWNfY2FzdDxIVE1MTGlua0VsZW1l
bnQqPihjb3JlKHNlbGYpKTsKLSAgICBTdHJpbmcgbWVkaWEgPSBsaW5rLT5nZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjptZWRpYUF0dHIpOworICAgIEhUTUxMaW5rRWxlbWVudCYgbGluayA9ICpzdGF0
aWNfY2FzdDxIVE1MTGlua0VsZW1lbnQqPihjb3JlKHNlbGYpKTsKKworICAgIGF1dG8mIG1lZGlh
ID0gbGluay5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bWVkaWFBdHRyKTsKICAgICBpZiAo
bWVkaWEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBEb2N1bWVudCYgZG9j
dW1lbnQgPSBsaW5rLT5kb2N1bWVudCgpOwogCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1l
ZGlhUXVlcnlTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9uU3lu
dGF4KG1lZGlhKTsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIs
IGRvY3VtZW50LmZyYW1lKCksIGRvY3VtZW50LnJlbmRlclZpZXcoKSA/ICZkb2N1bWVudC5yZW5k
ZXJWaWV3KCktPnN0eWxlKCkgOiAwKTsKLQotICAgIHJldHVybiBzY3JlZW5FdmFsLmV2YWwobWVk
aWFRdWVyeVNldC5nZXQoKSk7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gbGluay5kb2N1bWVu
dCgpOworICAgIGF1dG8gbWVkaWFRdWVyeVNldCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93
aW5nRGVzY3JpcHRpb25TeW50YXgobWVkaWEpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZhbHVh
dG9yIHsgInNjcmVlbiIsIGRvY3VtZW50LCBkb2N1bWVudC5yZW5kZXJWaWV3KCkgPyAmZG9jdW1l
bnQucmVuZGVyVmlldygpLT5zdHlsZSgpIDogbnVsbHB0ciB9LmV2YWx1YXRlKG1lZGlhUXVlcnlT
ZXQuZ2V0KCkpOwogfQorCiBAZW5kCisKICNlbmRpZgogCiAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIu
eS5pbiBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkuaW4KaW5kZXggZjViMGQxNzUz
MTg0ZDg4Y2E3MWNmNzEzMTIxNTc3YzFkMzBhN2U5Yy4uNGI3ZjE4M2U4N2M2ZmIwYjZiNTNkNmE3
YzQwZTExMzQyNDkzMjFkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYW1t
YXIueS5pbgorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCkBAIC0zNyw5
ICszNyw5IEBACiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFMaXN0OwogICAgIE1lZGlhUXVlcnkq
IG1lZGlhUXVlcnk7CiAgICAgTWVkaWFRdWVyeTo6UmVzdHJpY3RvciBtZWRpYVF1ZXJ5UmVzdHJp
Y3RvcjsKLSAgICBNZWRpYVF1ZXJ5RXhwKiBtZWRpYVF1ZXJ5RXhwOworICAgIE1lZGlhUXVlcnlF
eHByZXNzaW9uKiBtZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKICAgICBWZWN0b3I8Q1NTUGFyc2VyOjpT
b3VyY2VTaXplPiogc291cmNlU2l6ZUxpc3Q7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxN
ZWRpYVF1ZXJ5RXhwPj4qIG1lZGlhUXVlcnlFeHBMaXN0OworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwcmVzc2lvbj4qIG1lZGlhUXVlcnlFeHByZXNzaW9uTGlzdDsKICAgICBTdHlsZUtleWZyYW1l
KiBrZXlmcmFtZTsKICAgICBWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pioga2V5ZnJhbWVS
dWxlTGlzdDsKICAgICBDU1NQcm9wZXJ0eUlEIGlkOwpAQCAtMjcxLDIwICsyNzEsMjAgQEAgc3Rh
dGljIGJvb2wgc2VsZWN0b3JMaXN0RG9lc05vdE1hdGNoQW55UHNldWRvRWxlbWVudChjb25zdCBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHQKIAogJXR5cGUgPG1lZGlhUXVlcnlSZXN0cmljdG9yPiBtYXli
ZV9tZWRpYV9yZXN0cmljdG9yCiAKLSV0eXBlIDxtZWRpYVF1ZXJ5RXhwPiBtZWRpYV9xdWVyeV9l
eHAgYmFzZV9tZWRpYV9xdWVyeV9leHAKLSVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlh
X3F1ZXJ5X2V4cCBiYXNlX21lZGlhX3F1ZXJ5X2V4cAorJXR5cGUgPG1lZGlhUXVlcnlFeHByZXNz
aW9uPiBtZWRpYV9xdWVyeV9leHByZXNzaW9uIGJhc2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbgor
JWRlc3RydWN0b3IgeyBkZWxldGUgJCQ7IH0gbWVkaWFfcXVlcnlfZXhwcmVzc2lvbiBiYXNlX21l
ZGlhX3F1ZXJ5X2V4cHJlc3Npb24KIAogJXR5cGUgPHNvdXJjZVNpemVMaXN0PiBzb3VyY2Vfc2l6
ZV9saXN0CiAlZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBzb3VyY2Vfc2l6ZV9saXN0CiAKLSV0
eXBlIDxtZWRpYVF1ZXJ5RXhwPiBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwCi0lZGVzdHJ1
Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhwCisldHlwZSA8
bWVkaWFRdWVyeUV4cHJlc3Npb24+IG1heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHByZXNzaW9u
CislZGVzdHJ1Y3RvciB7IGRlbGV0ZSAkJDsgfSBtYXliZV9zb3VyY2VfbWVkaWFfcXVlcnlfZXhw
cmVzc2lvbgogCiAldHlwZSA8dmFsdWU+IHNvdXJjZV9zaXplX2xlbmd0aAogJWRlc3RydWN0b3Ig
eyBkZXN0cm95KCQkKTsgfSBzb3VyY2Vfc2l6ZV9sZW5ndGgKIAotJXR5cGUgPG1lZGlhUXVlcnlF
eHBMaXN0PiBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwX2xp
c3QKLSVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlhX3F1ZXJ5X2V4cF9saXN0IG1heWJl
X2FuZF9tZWRpYV9xdWVyeV9leHBfbGlzdAorJXR5cGUgPG1lZGlhUXVlcnlFeHByZXNzaW9uTGlz
dD4gbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0IG1heWJlX2FuZF9tZWRpYV9xdWVyeV9leHBy
ZXNzaW9uX2xpc3QKKyVkZXN0cnVjdG9yIHsgZGVsZXRlICQkOyB9IG1lZGlhX3F1ZXJ5X2V4cHJl
c3Npb25fbGlzdCBtYXliZV9hbmRfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0CiAKICV0eXBl
IDxzdHJpbmc+IGtleWZyYW1lX25hbWUKIApAQCAtNTc2LDU5ICs1NzYsNjMgQEAgd2Via2l0X3Nv
dXJjZV9zaXplX2xpc3Q6CiAgICAgOwogCiBzb3VyY2Vfc2l6ZV9saXN0OgotICAgIG1heWJlX3Nv
dXJjZV9tZWRpYV9xdWVyeV9leHAgc291cmNlX3NpemVfbGVuZ3RoIHsKKyAgICBtYXliZV9zb3Vy
Y2VfbWVkaWFfcXVlcnlfZXhwcmVzc2lvbiBzb3VyY2Vfc2l6ZV9sZW5ndGggewogICAgICAgICAk
JCA9IG5ldyBWZWN0b3I8Q1NTUGFyc2VyOjpTb3VyY2VTaXplPjsKLSAgICAgICAgJCQtPmFwcGVu
ZChwYXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+KCQxKSwg
JDIpKTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoV1RGTW92ZSgqJDEp
LCAkMikpOworICAgICAgICBkZWxldGUgJDE7CiAgICAgfQotICAgIHwgc291cmNlX3NpemVfbGlz
dCBtYXliZV9zcGFjZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4
cCBzb3VyY2Vfc2l6ZV9sZW5ndGggeworICAgIHwgc291cmNlX3NpemVfbGlzdCBtYXliZV9zcGFj
ZSAnLCcgbWF5YmVfc3BhY2UgbWF5YmVfc291cmNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24gc291
cmNlX3NpemVfbGVuZ3RoIHsKICAgICAgICAgJCQgPSAkMTsKLSAgICAgICAgJCQtPmFwcGVuZChw
YXJzZXItPnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+KCQ1KSwgJDYp
KTsKKyAgICAgICAgJCQtPmFwcGVuZChwYXJzZXItPnNvdXJjZVNpemUoV1RGTW92ZSgqJDUpLCAk
NikpOworICAgICAgICBkZWxldGUgJDU7CiAgICAgfQogICAgIDsKIAotbWF5YmVfc291cmNlX21l
ZGlhX3F1ZXJ5X2V4cDoKK21heWJlX3NvdXJjZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uOgogICAg
IC8qIGVtcHR5ICovIHsKLSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cDsKKyAgICAgICAg
JCQgPSBuZXcgTWVkaWFRdWVyeUV4cHJlc3Npb247CiAgICAgfQotICAgIHwgYmFzZV9tZWRpYV9x
dWVyeV9leHAgbWF5YmVfc3BhY2U7CisgICAgfCBiYXNlX21lZGlhX3F1ZXJ5X2V4cHJlc3Npb24g
bWF5YmVfc3BhY2U7CiAKIHNvdXJjZV9zaXplX2xlbmd0aDogdW5hcnlfdGVybSB8IGNhbGNfZnVu
Y3Rpb247CiAKLWJhc2VfbWVkaWFfcXVlcnlfZXhwOiAnKCcgbWF5YmVfc3BhY2UgSURFTlQgbWF5
YmVfc3BhY2UgbWF5YmVfbWVkaWFfdmFsdWUgJyknIHsKK2Jhc2VfbWVkaWFfcXVlcnlfZXhwcmVz
c2lvbjogJygnIG1heWJlX3NwYWNlIElERU5UIG1heWJlX3NwYWNlIG1heWJlX21lZGlhX3ZhbHVl
ICcpJyB7CiAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJWYWx1ZUxpc3Q+IG1lZGlh
VmFsdWUoJDUpOwogICAgICAgICAkMy5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZUluUGxhY2UoKTsK
LSAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeUV4cCgkMywgbWVkaWFWYWx1ZS5nZXQoKSk7Cisg
ICAgICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHByZXNzaW9uKCQzLCBtZWRpYVZhbHVlLmdldCgp
KTsKICAgICB9CiAgICAgOwogCi1tZWRpYV9xdWVyeV9leHA6Ci0gICAgbWF5YmVfbWVkaWFfcmVz
dHJpY3RvciBtYXliZV9zcGFjZSBiYXNlX21lZGlhX3F1ZXJ5X2V4cCBtYXliZV9zcGFjZSB7Citt
ZWRpYV9xdWVyeV9leHByZXNzaW9uOgorICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5YmVf
c3BhY2UgYmFzZV9tZWRpYV9xdWVyeV9leHByZXNzaW9uIG1heWJlX3NwYWNlIHsKICAgICAgICAg
aWYgKCQxICE9IE1lZGlhUXVlcnk6Ok5vbmUpIHsKICAgICAgICAgICAgIC8vIElmIHJlc3RyaWN0
b3IgaXMgc3BlY2lmaWVkLCBtZWRpYSBxdWVyeSBleHByZXNzaW9uIGlzIGludmFsaWQuCiAgICAg
ICAgICAgICAvLyBDcmVhdGUgZW1wdHkgbWVkaWEgcXVlcnkgZXhwcmVzc2lvbiBhbmQgY29udGlu
dWUgcGFyc2luZyBtZWRpYSBxdWVyeS4KICAgICAgICAgICAgIGRlbGV0ZSAkMzsKLSAgICAgICAg
ICAgICQkID0gbmV3IE1lZGlhUXVlcnlFeHA7CisgICAgICAgICAgICAkJCA9IG5ldyBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbjsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAkJCA9ICQzOwogICAg
IH0KICAgICA7CiAKLW1lZGlhX3F1ZXJ5X2V4cF9saXN0OgotICAgIG1lZGlhX3F1ZXJ5X2V4cCB7
Ci0gICAgICAgICQkID0gbmV3IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+
OwotICAgICAgICAkJC0+YXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPigkMSkp
OworbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0OgorICAgIG1lZGlhX3F1ZXJ5X2V4cHJlc3Np
b24geworICAgICAgICAkJCA9IG5ldyBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+OworICAg
ICAgICAkJC0+YXBwZW5kKFdURk1vdmUoKiQxKSk7CisgICAgICAgIGRlbGV0ZSAkMTsKICAgICB9
Ci0gICAgfCBtZWRpYV9xdWVyeV9leHBfbGlzdCBtYXliZV9zcGFjZSBNRURJQV9BTkQgbWF5YmVf
c3BhY2UgbWVkaWFfcXVlcnlfZXhwIHsKKyAgICB8IG1lZGlhX3F1ZXJ5X2V4cHJlc3Npb25fbGlz
dCBtYXliZV9zcGFjZSBNRURJQV9BTkQgbWF5YmVfc3BhY2UgbWVkaWFfcXVlcnlfZXhwcmVzc2lv
biB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgICQkLT5hcHBlbmQoc3RkOjp1bmlxdWVfcHRy
PE1lZGlhUXVlcnlFeHA+KCQ1KSk7CisgICAgICAgICQkLT5hcHBlbmQoV1RGTW92ZSgqJDUpKTsK
KyAgICAgICAgZGVsZXRlICQ1OwogICAgIH0KICAgICA7CiAKLW1heWJlX2FuZF9tZWRpYV9xdWVy
eV9leHBfbGlzdDoKK21heWJlX2FuZF9tZWRpYV9xdWVyeV9leHByZXNzaW9uX2xpc3Q6CiAgICAg
LyplbXB0eSovIHsKLSAgICAgICAgJCQgPSBuZXcgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPj47CisgICAgICAgICQkID0gbmV3IFZlY3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lv
bj47CiAgICAgfQotICAgIHwgTUVESUFfQU5EIG1heWJlX3NwYWNlIG1lZGlhX3F1ZXJ5X2V4cF9s
aXN0IHsKKyAgICB8IE1FRElBX0FORCBtYXliZV9zcGFjZSBtZWRpYV9xdWVyeV9leHByZXNzaW9u
X2xpc3QgewogICAgICAgICAkJCA9ICQzOwogICAgIH0KICAgICA7CkBAIC02NDYsMTMgKzY1MCwx
NSBAQCBtYXliZV9tZWRpYV9yZXN0cmljdG9yOgogICAgIDsKIAogbWVkaWFfcXVlcnk6Ci0gICAg
bWVkaWFfcXVlcnlfZXhwX2xpc3QgewotICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KE1lZGlh
UXVlcnk6Ok5vbmUsICJhbGwiLCBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxNZWRpYVF1ZXJ5RXhwPj4+KCQxKSk7CisgICAgbWVkaWFfcXVlcnlfZXhwcmVzc2lvbl9saXN0
IHsKKyAgICAgICAgJCQgPSBuZXcgTWVkaWFRdWVyeShNZWRpYVF1ZXJ5OjpOb25lLCAiYWxsIiwg
V1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAgIH0KICAgICB8Ci0gICAgbWF5
YmVfbWVkaWFfcmVzdHJpY3RvciBtYXliZV9zcGFjZSBJREVOVCBtYXliZV9zcGFjZSBtYXliZV9h
bmRfbWVkaWFfcXVlcnlfZXhwX2xpc3QgeworICAgIG1heWJlX21lZGlhX3Jlc3RyaWN0b3IgbWF5
YmVfc3BhY2UgSURFTlQgbWF5YmVfc3BhY2UgbWF5YmVfYW5kX21lZGlhX3F1ZXJ5X2V4cHJlc3Np
b25fbGlzdCB7CiAgICAgICAgICQzLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlSW5QbGFjZSgpOwot
ICAgICAgICAkJCA9IG5ldyBNZWRpYVF1ZXJ5KCQxLCAkMywgc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4+PigkNSkpOworICAgICAgICAkJCA9IG5l
dyBNZWRpYVF1ZXJ5KCQxLCAkMywgV1RGTW92ZSgqJDUpKTsKKyAgICAgICAgZGVsZXRlICQ1Owog
ICAgIH0KICAgICA7CiAKQEAgLTY2MSwxNiArNjY3LDE3IEBAIG1heWJlX21lZGlhX2xpc3Q6IC8q
IGVtcHR5ICovIHsgJCQgPSAmTWVkaWFRdWVyeVNldDo6Y3JlYXRlKCkubGVha1JlZigpOyB9IHwg
bWVkCiBtZWRpYV9saXN0OgogICAgIG1lZGlhX3F1ZXJ5IHsKICAgICAgICAgJCQgPSAmTWVkaWFR
dWVyeVNldDo6Y3JlYXRlKCkubGVha1JlZigpOwotICAgICAgICAkJC0+YWRkTWVkaWFRdWVyeShz
dGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4oJDEpKTsKKyAgICAgICAgJCQtPmFkZE1lZGlhUXVl
cnkoV1RGTW92ZSgqJDEpKTsKKyAgICAgICAgZGVsZXRlICQxOwogICAgICAgICBwYXJzZXItPnVw
ZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICB9CiAgICAgfCBtZWRpYV9saXN0ICcsJyBtYXli
ZV9zcGFjZSBtZWRpYV9xdWVyeSB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KCQ0KTsKICAgICAgICAgaWYgKCQkKSB7Ci0g
ICAgICAgICAgICAkJC0+YWRkTWVkaWFRdWVyeShXVEZNb3ZlKG1lZGlhUXVlcnkpKTsKKyAgICAg
ICAgICAgICQkLT5hZGRNZWRpYVF1ZXJ5KFdURk1vdmUoKiQ0KSk7CiAgICAgICAgICAgICBwYXJz
ZXItPnVwZGF0ZUxhc3RNZWRpYUxpbmUoKiQkKTsKICAgICAgICAgfQorICAgICAgICBkZWxldGUg
JDQ7CiAgICAgfQogICAgIHwgbWVkaWFfbGlzdCBlcnJvciB7CiAgICAgICAgICQkID0gbnVsbHB0
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTSW1wb3J0UnVsZS5oCmluZGV4IDVjNWVmOTMwMjZiNzJhYWY2Zjlh
MWRhYjhjY2Q2NmY5ODA0ZmIyN2QuLjQ1MjNlYzU1Y2Y0ZjRjN2ZjZjQ4NDBlZDVmNjFkZDBkOTE2
MTA3YzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NJbXBvcnRSdWxlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0ltcG9ydFJ1bGUuaApAQCAtMTksMjYgKzE5LDIwIEBA
CiAgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIENTU0ltcG9y
dFJ1bGVfaAotI2RlZmluZSBDU1NJbXBvcnRSdWxlX2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQ1NTUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENhY2hlZENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBNZWRpYUxpc3Q7Ci1jbGFzcyBNZWRpYVF1ZXJ5U2V0OwogY2xhc3Mg
U3R5bGVSdWxlSW1wb3J0OwogCiBjbGFzcyBDU1NJbXBvcnRSdWxlIGZpbmFsIDogcHVibGljIENT
U1J1bGUgewogcHVibGljOgogICAgIHN0YXRpYyBSZWY8Q1NTSW1wb3J0UnVsZT4gY3JlYXRlKFN0
eWxlUnVsZUltcG9ydCYgcnVsZSwgQ1NTU3R5bGVTaGVldCogc2hlZXQpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgQ1NTSW1wb3J0UnVsZShydWxlLCBzaGVldCkpOyB9Ci0gICAgCi0gICAgdmlydHVh
bCB+Q1NTSW1wb3J0UnVsZSgpOwogCi0gICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUJhc2UmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIH5DU1NJbXBvcnRSdWxlKCk7CiAKICAgICBTdHJpbmcgaHJlZigpIGNvbnN0OwogICAgIE1l
ZGlhTGlzdCYgbWVkaWEoKSBjb25zdDsKQEAgLTQ3LDcgKzQxLDkgQEAgcHVibGljOgogcHJpdmF0
ZToKICAgICBDU1NJbXBvcnRSdWxlKFN0eWxlUnVsZUltcG9ydCYsIENTU1N0eWxlU2hlZXQqKTsK
IAotICAgIENTU1J1bGU6OlR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIElNUE9S
VF9SVUxFOyB9CisgICAgQ1NTUnVsZTo6VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
SU1QT1JUX1JVTEU7IH0KKyAgICBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0IGZpbmFsOworICAgIHZv
aWQgcmVhdHRhY2goU3R5bGVSdWxlQmFzZSYpIGZpbmFsOwogCiAgICAgUmVmPFN0eWxlUnVsZUlt
cG9ydD4gbV9pbXBvcnRSdWxlOwogICAgIG11dGFibGUgUmVmUHRyPE1lZGlhTGlzdD4gbV9tZWRp
YUNTU09NV3JhcHBlcjsKQEAgLTU3LDUgKzUzLDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfUlVMRShDU1NJbXBvcnRSdWxl
LCBDU1NSdWxlOjpJTVBPUlRfUlVMRSkKLQotI2VuZGlmIC8vIENTU0ltcG9ydFJ1bGVfaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCAzNDY0ZDFiY2ExNjkzYTI1NjFlMjI2MzMxY2ExNzdm
Y2U0MjQ1NTk0Li4yMmFlZDQxN2EyOTM0MjMzOGJjNmQzMzkzMzQzY2ExNTA2NjhmZmJkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTUyOSwxOSArMTUyOSwyMCBAQCBWZWN0b3I8Q1NT
UGFyc2VyOjpTb3VyY2VTaXplPiBDU1NQYXJzZXI6OnBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5n
VmlldyBzdHJpbmcpCiAKIC8vIEZJWE1FKDE0MTI4OSk6IFRoZSBmb2xsb3dpbmcgdHdvIGNvbnN0
cnVjdG9ycyBhcmUgb25seSBuZWVkZWQgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBNU1ZDIDIwMTMgKGFu
ZCBwcmlvcikuCiAvLyBXZSBzaG91bGQgcmVtb3ZlIHRoaXMgY29kZSBhcyBzb29uIGFzIGEgVmlz
dWFsIFN0dWRpbyB1cGRhdGUgdGhhdCBmaXhlcyB0aGlzIHByb2JsZW0gaXMgcmVsZWFzZWQuCisK
IENTU1BhcnNlcjo6U291cmNlU2l6ZTo6U291cmNlU2l6ZShDU1NQYXJzZXI6OlNvdXJjZVNpemUm
JiBvcmlnaW5hbCkKICAgICA6IGV4cHJlc3Npb24oV1RGTW92ZShvcmlnaW5hbC5leHByZXNzaW9u
KSkKLSAgICAsIGxlbmd0aChvcmlnaW5hbC5sZW5ndGgpCisgICAgLCBsZW5ndGgoV1RGTW92ZShv
cmlnaW5hbC5sZW5ndGgpKQogewogfQogCi1DU1NQYXJzZXI6OlNvdXJjZVNpemU6OlNvdXJjZVNp
emUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgb3JpZ0V4cCwgUmVmUHRyPENTU1Zh
bHVlPiYmIHZhbHVlKQotICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKG9yaWdFeHApKQorQ1NTUGFy
c2VyOjpTb3VyY2VTaXplOjpTb3VyY2VTaXplKE1lZGlhUXVlcnlFeHByZXNzaW9uJiYgZXhwcmVz
c2lvbiwgUmVmPENTU1ZhbHVlPiYmIHZhbHVlKQorICAgIDogZXhwcmVzc2lvbihXVEZNb3ZlKGV4
cHJlc3Npb24pKQogICAgICwgbGVuZ3RoKFdURk1vdmUodmFsdWUpKQogewogfQogCi1DU1NQYXJz
ZXI6OlNvdXJjZVNpemUgQ1NTUGFyc2VyOjpzb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxNZWRp
YVF1ZXJ5RXhwPiYmIGV4cHJlc3Npb24sIENTU1BhcnNlclZhbHVlJiBwYXJzZXJWYWx1ZSkKK0NT
U1BhcnNlcjo6U291cmNlU2l6ZSBDU1NQYXJzZXI6OnNvdXJjZVNpemUoTWVkaWFRdWVyeUV4cHJl
c3Npb24mJiBleHByZXNzaW9uLCBDU1NQYXJzZXJWYWx1ZSYgcGFyc2VyVmFsdWUpCiB7CiAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTsKICAgICBpZiAoaXNDYWxjdWxhdGlvbihwYXJzZXJWYWx1
ZSkpIHsKQEAgLTE1NTQsNyArMTU1NSw3IEBAIENTU1BhcnNlcjo6U291cmNlU2l6ZSBDU1NQYXJz
ZXI6OnNvdXJjZVNpemUoc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+JiYgZXhwCiAgICAg
ZGVzdHJveShwYXJzZXJWYWx1ZSk7CiAgICAgLy8gRklYTUU6IENhbGxpbmcgdGhlIGNvbnN0cnVj
dG9yIGV4cGxpY2l0bHkgaGVyZSB0byB3b3JrIGFyb3VuZCBhbiBNU1ZDIGJ1Zy4KICAgICAvLyBG
b3Igb3RoZXIgY29tcGlsZXJzLCB3ZSBkaWQgbm90IG5lZWQgdG8gZGVmaW5lIHRoZSBjb25zdHJ1
Y3RvcnMgYW5kIHdlIGNvdWxkIHVzZSBhZ2dyZWdhdGUgaW5pdGlhbGl6YXRpb24gc3ludGF4Lgot
ICAgIHJldHVybiBTb3VyY2VTaXplKFdURk1vdmUoZXhwcmVzc2lvbiksIFdURk1vdmUodmFsdWUp
KTsKKyAgICByZXR1cm4gU291cmNlU2l6ZShXVEZNb3ZlKGV4cHJlc3Npb24pLCB2YWx1ZS5yZWxl
YXNlTm9uTnVsbCgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZpbHRlclByb3BlcnRpZXMo
Ym9vbCBpbXBvcnRhbnQsIGNvbnN0IFBhcnNlZFByb3BlcnR5VmVjdG9yJiBpbnB1dCwgVmVjdG9y
PENTU1Byb3BlcnR5LCAyNTY+JiBvdXRwdXQsIHNpemVfdCYgdW51c2VkRW50cmllcywgc3RkOjpi
aXRzZXQ8bnVtQ1NTUHJvcGVydGllcz4mIHNlZW5Qcm9wZXJ0aWVzLCBIYXNoU2V0PEF0b21pY1N0
cmluZz4mIHNlZW5DdXN0b21Qcm9wZXJ0aWVzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IDMw
YWRhODUxZWM5NWI5MzU3YjFhMjRlYjgzMzVjNWNhMjYyMGIyZDEuLjEyYzhlNmFlYzZkYWIzYzVl
YjJlNGVmMDUzMjU3MzYxY2E3YzU4M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTY2LDcg
KzY2LDcgQEAgY2xhc3MgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZTsKIGNsYXNzIERvY3VtZW50
OwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEltbXV0YWJsZVN0eWxlUHJvcGVydGllczsKLWNsYXNz
IE1lZGlhUXVlcnlFeHA7CitjbGFzcyBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjsKIGNsYXNzIE1lZGlh
UXVlcnlTZXQ7CiBjbGFzcyBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOwogY2xhc3MgU1ZHQ29sb3I7
CkBAIC0xNjgsMTQgKzE2OCwxNCBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBwYXJzZUJhY2tncm91bmRDb2xvcigpOwogCiAgICAgc3RydWN0IFNvdXJjZVNpemUgewot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4gZXhwcmVzc2lvbjsKLSAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiBsZW5ndGg7CisgICAgICAgIE1lZGlhUXVlcnlFeHByZXNzaW9u
IGV4cHJlc3Npb247CisgICAgICAgIFJlZjxDU1NWYWx1ZT4gbGVuZ3RoOwogCiAgICAgICAgIFNv
dXJjZVNpemUoU291cmNlU2l6ZSYmKTsKLSAgICAgICAgU291cmNlU2l6ZShzdGQ6OnVuaXF1ZV9w
dHI8TWVkaWFRdWVyeUV4cD4mJiwgUmVmUHRyPENTU1ZhbHVlPiYmKTsKKyAgICAgICAgU291cmNl
U2l6ZShNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYmLCBSZWY8Q1NTVmFsdWU+JiYpOwogICAgIH07CiAg
ICAgVmVjdG9yPFNvdXJjZVNpemU+IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyk7Ci0g
ICAgU291cmNlU2l6ZSBzb3VyY2VTaXplKHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPiYm
LCBDU1NQYXJzZXJWYWx1ZSYpOworICAgIFNvdXJjZVNpemUgc291cmNlU2l6ZShNZWRpYVF1ZXJ5
RXhwcmVzc2lvbiYmLCBDU1NQYXJzZXJWYWx1ZSYpOwogCiAgICAgYm9vbCBwYXJzZUZpbGxJbWFn
ZShDU1NQYXJzZXJWYWx1ZUxpc3QmLCBSZWZQdHI8Q1NTVmFsdWU+Jik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVNoZWV0LmNwcAppbmRleCAwOWM4NzQ1YzNjMzU5MDBjZjYxODI3NTAzZGI4OWI2
NTVkYmVkMjk1Li44ZjZhMzBhZGEwMjNjNTAxZGU1OTYxNzVlNDdlNjg2NTNmMzg2MjVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuY3BwCkBAIC0yMjcsMTEgKzIyNyw3IEBAIHZvaWQg
Q1NTU3R5bGVTaGVldDo6c2V0TWVkaWFRdWVyaWVzKFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlh
UXVlcmllcykKICAgICBtX21lZGlhUXVlcmllcyA9IFdURk1vdmUobWVkaWFRdWVyaWVzKTsKICAg
ICBpZiAobV9tZWRpYUNTU09NV3JhcHBlciAmJiBtX21lZGlhUXVlcmllcykKICAgICAgICAgbV9t
ZWRpYUNTU09NV3JhcHBlci0+cmVhdHRhY2gobV9tZWRpYVF1ZXJpZXMuZ2V0KCkpOwotCi0jaWYg
RU5BQkxFKFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgLy8gQWRkIHdhcm5pbmcgbWVzc2Fn
ZSB0byBpbnNwZWN0b3Igd2hlbmV2ZXIgZHBpL2RwY20gdmFsdWVzIGFyZSB1c2VkIGZvciAic2Ny
ZWVuIiBtZWRpYS4KICAgICByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKG93bmVyRG9j
dW1lbnQoKSwgbV9tZWRpYVF1ZXJpZXMuZ2V0KCkpOwotI2VuZGlmCiB9CiAKIHVuc2lnbmVkIENT
U1N0eWxlU2hlZXQ6Omxlbmd0aCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvRG9jdW1lbnRSdWxlU2V0cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRG9jdW1lbnRSdWxl
U2V0cy5jcHAKaW5kZXggOWNjMDhkZWI3ZTA5N2MwYzlmMWZlYTgzOTMxMDMxMzY2OGI1YmNkMi4u
YzQ4ZTljOWI5YTAxODYwZjc0N2M2MGY0ZGUyMTZhOTA5MDEwYWM3NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL0RvY3VtZW50UnVsZVNldHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9Eb2N1bWVudFJ1bGVTZXRzLmNwcApAQCAtODgsNyArODgsNyBAQCB2b2lkIERvY3VtZW50
UnVsZVNldHM6OmFwcGVuZEF1dGhvclN0eWxlU2hlZXRzKGNvbnN0IFZlY3RvcjxSZWZQdHI8Q1NT
U3R5bGVTaGVldAogICAgIC8vIG5lZWRzIHRvIGJlIHJlY29uc3RydWN0ZWQuIFRvIGhhbmRsZSBp
bnNlcnRpb25zIHRvbyB0aGUgcnVsZSBvcmRlciBudW1iZXJzIHdvdWxkIG5lZWQgdG8gYmUgdXBk
YXRlZC4KICAgICBmb3IgKGF1dG8mIGNzc1NoZWV0IDogc3R5bGVTaGVldHMpIHsKICAgICAgICAg
QVNTRVJUKCFjc3NTaGVldC0+ZGlzYWJsZWQoKSk7Ci0gICAgICAgIGlmIChjc3NTaGVldC0+bWVk
aWFRdWVyaWVzKCkgJiYgIW1lZGl1bS0+ZXZhbChjc3NTaGVldC0+bWVkaWFRdWVyaWVzKCksIHJl
c29sdmVyKSkKKyAgICAgICAgaWYgKGNzc1NoZWV0LT5tZWRpYVF1ZXJpZXMoKSAmJiAhbWVkaXVt
LT5ldmFsdWF0ZSgqY3NzU2hlZXQtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikpCiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgbV9hdXRob3JTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQo
Y3NzU2hlZXQtPmNvbnRlbnRzKCksICptZWRpdW0sIHJlc29sdmVyKTsKICAgICAgICAgaW5zcGVj
dG9yQ1NTT01XcmFwcGVycy5jb2xsZWN0RnJvbVN0eWxlU2hlZXRJZk5lZWRlZChjc3NTaGVldC5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmNwcAppbmRleCA4NWEy
ZGI1NmRmNWI0ZGYyYzU4NjQ5MzRmNmYyZTY3MzRkNjAyY2UxLi4xODQzMGM5MGMxNGY3ZTFiMzZk
YmQzOWFlMTBiMzkzOTRjYjM3NmM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVk
aWFGZWF0dXJlTmFtZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUZlYXR1cmVO
YW1lcy5jcHAKQEAgLTMwLDggKzMwLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFj
ZSBNZWRpYUZlYXR1cmVOYW1lcyB7CiAKLSNkZWZpbmUgREVGSU5FX01FRElBRkVBVFVSRV9HTE9C
QUwobmFtZSwgc3RyKSBcCi0gICAgREVGSU5FX0dMT0JBTChBdG9taWNTdHJpbmcsIG5hbWUjI01l
ZGlhRmVhdHVyZSwgc3RyKQorI2RlZmluZSBERUZJTkVfTUVESUFGRUFUVVJFX0dMT0JBTChuYW1l
LCBzdHJpbmcpIERFRklORV9HTE9CQUwoQXRvbWljU3RyaW5nLCBuYW1lKQogQ1NTX01FRElBUVVF
UllfTkFNRVNfRk9SX0VBQ0hfTUVESUFGRUFUVVJFKERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFM
KQogI3VuZGVmIERFRklORV9NRURJQUZFQVRVUkVfR0xPQkFMCiAKQEAgLTM5LDEwICszOCw5IEBA
IHZvaWQgaW5pdCgpCiB7CiAgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAgICAgaWYgKCFp
bml0aWFsaXplZCkgewotICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3IHRvIGluaXRpYWxpemUg
dGhlIGdsb2JhbHMuCi0KKyAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXcgdG8gaW5pdGlhbGl6
ZSB0aGUgZ2xvYmFscy4KICAgICAgICAgQXRvbWljU3RyaW5nOjppbml0KCk7Ci0jZGVmaW5lIElO
SVRJQUxJWkVfR0xPQkFMKG5hbWUsIHN0cikgbmV3IChOb3ROdWxsLCAodm9pZCopJm5hbWUjI01l
ZGlhRmVhdHVyZSkgQXRvbWljU3RyaW5nKHN0ciwgQXRvbWljU3RyaW5nOjpDb25zdHJ1Y3RGcm9t
TGl0ZXJhbCk7CisjZGVmaW5lIElOSVRJQUxJWkVfR0xPQkFMKG5hbWUsIHN0cmluZykgbmV3IChO
b3ROdWxsLCAodm9pZCopJm5hbWUpIEF0b21pY1N0cmluZyhzdHJpbmcsIEF0b21pY1N0cmluZzo6
Q29uc3RydWN0RnJvbUxpdGVyYWwpOwogICAgICAgICBDU1NfTUVESUFRVUVSWV9OQU1FU19GT1Jf
RUFDSF9NRURJQUZFQVRVUkUoSU5JVElBTElaRV9HTE9CQUwpCiAjdW5kZWYgSU5JVElBTElaRV9H
TE9CQUwKICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhRmVhdHVyZU5hbWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFG
ZWF0dXJlTmFtZXMuaAppbmRleCBiNWNhMjUwZDcxN2QyMTI0YzczZGY2ZjE2MmY0YzAzYTY1MGMz
MGY5Li42Mjk3MWMwMmZmMmNjY2RmYTM0ZjI1NTYwN2VjOTQ4ZDU0MDE5MGQ5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvTWVkaWFGZWF0dXJlTmFtZXMuaApAQCAtMTcsODAgKzE3LDc4IEBACiAgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqCiAgKi8KLSNpZm5kZWYgTWVkaWFGZWF0dXJlTmFt
ZXNfaAotI2RlZmluZSBNZWRpYUZlYXR1cmVOYW1lc19oCiAKLSNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9taWNTdHJpbmcuaD4KKyNwcmFnbWEgb25jZQogCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAg
bmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzIHsKKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNT
dHJpbmcuaD4KIAogI2lmIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQotI2RlZmluZSBDU1Nf
TUVESUFRVUVSWV9WSUVXX01PREUobWFjcm8pIG1hY3JvKHZpZXdfbW9kZSwgIi13ZWJraXQtdmll
dy1tb2RlIikKKyNkZWZpbmUgQ1NTX01FRElBUVVFUllfVklFV19NT0RFKG1hY3JvKSBtYWNybyh2
aWV3TW9kZSwgIi13ZWJraXQtdmlldy1tb2RlIikKICNlbHNlCiAjZGVmaW5lIENTU19NRURJQVFV
RVJZX1ZJRVdfTU9ERShtYWNybykKICNlbmRpZgogCiAjZGVmaW5lIENTU19NRURJQVFVRVJZX05B
TUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShtYWNybykgXAotICAgIG1hY3JvKGFueV9ob3Zlciwg
ImFueS1ob3ZlciIpIFwKLSAgICBtYWNybyhhbnlfcG9pbnRlciwgImFueS1wb2ludGVyIikgXAor
ICAgIG1hY3JvKGFuaW1hdGlvbiwgIi13ZWJraXQtYW5pbWF0aW9uIikgXAorICAgIG1hY3JvKGFu
eUhvdmVyLCAiYW55LWhvdmVyIikgXAorICAgIG1hY3JvKGFueVBvaW50ZXIsICJhbnktcG9pbnRl
ciIpIFwKKyAgICBtYWNybyhhc3BlY3RSYXRpbywgImFzcGVjdC1yYXRpbyIpIFwKICAgICBtYWNy
byhjb2xvciwgImNvbG9yIikgXAotICAgIG1hY3JvKGNvbG9yX2luZGV4LCAiY29sb3ItaW5kZXgi
KSBcCi0gICAgbWFjcm8oY29sb3JfZ2FtdXQsICJjb2xvci1nYW11dCIpIFwKKyAgICBtYWNybyhj
b2xvckdhbXV0LCAiY29sb3ItZ2FtdXQiKSBcCisgICAgbWFjcm8oY29sb3JJbmRleCwgImNvbG9y
LWluZGV4IikgXAorICAgIG1hY3JvKGRldmljZUFzcGVjdFJhdGlvLCAiZGV2aWNlLWFzcGVjdC1y
YXRpbyIpIFwKKyAgICBtYWNybyhkZXZpY2VIZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAorICAg
IG1hY3JvKGRldmljZVBpeGVsUmF0aW8sICItd2Via2l0LWRldmljZS1waXhlbC1yYXRpbyIpIFwK
KyAgICBtYWNybyhkZXZpY2VXaWR0aCwgImRldmljZS13aWR0aCIpIFwKICAgICBtYWNybyhncmlk
LCAiZ3JpZCIpIFwKLSAgICBtYWNybyhtb25vY2hyb21lLCAibW9ub2Nocm9tZSIpIFwKICAgICBt
YWNybyhoZWlnaHQsICJoZWlnaHQiKSBcCiAgICAgbWFjcm8oaG92ZXIsICJob3ZlciIpIFwKLSAg
ICBtYWNybyh3aWR0aCwgIndpZHRoIikgXAorICAgIG1hY3JvKGludmVydGVkQ29sb3JzLCAiaW52
ZXJ0ZWQtY29sb3JzIikgXAorICAgIG1hY3JvKG1heEFzcGVjdFJhdGlvLCAibWF4LWFzcGVjdC1y
YXRpbyIpIFwKKyAgICBtYWNybyhtYXhDb2xvciwgIm1heC1jb2xvciIpIFwKKyAgICBtYWNybyht
YXhDb2xvckluZGV4LCAibWF4LWNvbG9yLWluZGV4IikgXAorICAgIG1hY3JvKG1heERldmljZUFz
cGVjdFJhdGlvLCAibWF4LWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisgICAgbWFjcm8obWF4RGV2
aWNlSGVpZ2h0LCAibWF4LWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFjcm8obWF4RGV2aWNlUGl4
ZWxSYXRpbywgIi13ZWJraXQtbWF4LWRldmljZS1waXhlbC1yYXRpbyIpIFwKKyAgICBtYWNybyht
YXhEZXZpY2VXaWR0aCwgIm1heC1kZXZpY2Utd2lkdGgiKSBcCisgICAgbWFjcm8obWF4SGVpZ2h0
LCAibWF4LWhlaWdodCIpIFwKKyAgICBtYWNybyhtYXhNb25vY2hyb21lLCAibWF4LW1vbm9jaHJv
bWUiKSBcCisgICAgbWFjcm8obWF4UmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9uIikgXAorICAg
IG1hY3JvKG1heFdpZHRoLCAibWF4LXdpZHRoIikgXAorICAgIG1hY3JvKG1pbkFzcGVjdFJhdGlv
LCAibWluLWFzcGVjdC1yYXRpbyIpIFwKKyAgICBtYWNybyhtaW5Db2xvciwgIm1pbi1jb2xvciIp
IFwKKyAgICBtYWNybyhtaW5Db2xvckluZGV4LCAibWluLWNvbG9yLWluZGV4IikgXAorICAgIG1h
Y3JvKG1pbkRldmljZUFzcGVjdFJhdGlvLCAibWluLWRldmljZS1hc3BlY3QtcmF0aW8iKSBcCisg
ICAgbWFjcm8obWluRGV2aWNlSGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCisgICAgbWFj
cm8obWluRGV2aWNlUGl4ZWxSYXRpbywgIi13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbyIp
IFwKKyAgICBtYWNybyhtaW5EZXZpY2VXaWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCisgICAg
bWFjcm8obWluSGVpZ2h0LCAibWluLWhlaWdodCIpIFwKKyAgICBtYWNybyhtaW5Nb25vY2hyb21l
LCAibWluLW1vbm9jaHJvbWUiKSBcCisgICAgbWFjcm8obWluUmVzb2x1dGlvbiwgIm1pbi1yZXNv
bHV0aW9uIikgXAorICAgIG1hY3JvKG1pbldpZHRoLCAibWluLXdpZHRoIikgXAorICAgIG1hY3Jv
KG1vbm9jaHJvbWUsICJtb25vY2hyb21lIikgXAogICAgIG1hY3JvKG9yaWVudGF0aW9uLCAib3Jp
ZW50YXRpb24iKSBcCi0gICAgbWFjcm8oYXNwZWN0X3JhdGlvLCAiYXNwZWN0LXJhdGlvIikgXAot
ICAgIG1hY3JvKGRldmljZV9hc3BlY3RfcmF0aW8sICJkZXZpY2UtYXNwZWN0LXJhdGlvIikgXAot
ICAgIG1hY3JvKGRldmljZV9waXhlbF9yYXRpbywgIi13ZWJraXQtZGV2aWNlLXBpeGVsLXJhdGlv
IikgXAotICAgIG1hY3JvKGRldmljZV9oZWlnaHQsICJkZXZpY2UtaGVpZ2h0IikgXAotICAgIG1h
Y3JvKGRldmljZV93aWR0aCwgImRldmljZS13aWR0aCIpIFwKLSAgICBtYWNybyhpbnZlcnRlZF9j
b2xvcnMsICJpbnZlcnRlZC1jb2xvcnMiKSBcCi0gICAgbWFjcm8obWF4X2NvbG9yLCAibWF4LWNv
bG9yIikgXAotICAgIG1hY3JvKG1heF9jb2xvcl9pbmRleCwgIm1heC1jb2xvci1pbmRleCIpIFwK
LSAgICBtYWNybyhtYXhfYXNwZWN0X3JhdGlvLCAibWF4LWFzcGVjdC1yYXRpbyIpIFwKLSAgICBt
YWNybyhtYXhfZGV2aWNlX2FzcGVjdF9yYXRpbywgIm1heC1kZXZpY2UtYXNwZWN0LXJhdGlvIikg
XAotICAgIG1hY3JvKG1heF9kZXZpY2VfcGl4ZWxfcmF0aW8sICItd2Via2l0LW1heC1kZXZpY2Ut
cGl4ZWwtcmF0aW8iKSBcCi0gICAgbWFjcm8obWF4X2RldmljZV9oZWlnaHQsICJtYXgtZGV2aWNl
LWhlaWdodCIpIFwKLSAgICBtYWNybyhtYXhfZGV2aWNlX3dpZHRoLCAibWF4LWRldmljZS13aWR0
aCIpIFwKLSAgICBtYWNybyhtYXhfaGVpZ2h0LCAibWF4LWhlaWdodCIpIFwKLSAgICBtYWNybyht
YXhfbW9ub2Nocm9tZSwgIm1heC1tb25vY2hyb21lIikgXAotICAgIG1hY3JvKG1heF93aWR0aCwg
Im1heC13aWR0aCIpIFwKLSAgICBtYWNybyhtYXhfcmVzb2x1dGlvbiwgIm1heC1yZXNvbHV0aW9u
IikgXAotICAgIG1hY3JvKG1pbl9jb2xvciwgIm1pbi1jb2xvciIpIFwKLSAgICBtYWNybyhtaW5f
Y29sb3JfaW5kZXgsICJtaW4tY29sb3ItaW5kZXgiKSBcCi0gICAgbWFjcm8obWluX2FzcGVjdF9y
YXRpbywgIm1pbi1hc3BlY3QtcmF0aW8iKSBcCi0gICAgbWFjcm8obWluX2RldmljZV9hc3BlY3Rf
cmF0aW8sICJtaW4tZGV2aWNlLWFzcGVjdC1yYXRpbyIpIFwKLSAgICBtYWNybyhtaW5fZGV2aWNl
X3BpeGVsX3JhdGlvLCAiLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvIikgXAotICAgIG1h
Y3JvKG1pbl9kZXZpY2VfaGVpZ2h0LCAibWluLWRldmljZS1oZWlnaHQiKSBcCi0gICAgbWFjcm8o
bWluX2RldmljZV93aWR0aCwgIm1pbi1kZXZpY2Utd2lkdGgiKSBcCi0gICAgbWFjcm8obWluX2hl
aWdodCwgIm1pbi1oZWlnaHQiKSBcCi0gICAgbWFjcm8obWluX21vbm9jaHJvbWUsICJtaW4tbW9u
b2Nocm9tZSIpIFwKLSAgICBtYWNybyhtaW5fd2lkdGgsICJtaW4td2lkdGgiKSBcCi0gICAgbWFj
cm8obWluX3Jlc29sdXRpb24sICJtaW4tcmVzb2x1dGlvbiIpIFwKICAgICBtYWNybyhwb2ludGVy
LCAicG9pbnRlciIpIFwKICAgICBtYWNybyhyZXNvbHV0aW9uLCAicmVzb2x1dGlvbiIpIFwKLSAg
ICBtYWNybyh0cmFuc2Zvcm1fMmQsICItd2Via2l0LXRyYW5zZm9ybS0yZCIpIFwKLSAgICBtYWNy
byh0cmFuc2Zvcm1fM2QsICItd2Via2l0LXRyYW5zZm9ybS0zZCIpIFwKKyAgICBtYWNybyh0cmFu
c2Zvcm0yZCwgIi13ZWJraXQtdHJhbnNmb3JtLTJkIikgXAorICAgIG1hY3JvKHRyYW5zZm9ybTNk
LCAiLXdlYmtpdC10cmFuc2Zvcm0tM2QiKSBcCiAgICAgbWFjcm8odHJhbnNpdGlvbiwgIi13ZWJr
aXQtdHJhbnNpdGlvbiIpIFwKLSAgICBtYWNybyhhbmltYXRpb24sICItd2Via2l0LWFuaW1hdGlv
biIpIFwKLSAgICBtYWNybyh2aWRlb19wbGF5YWJsZV9pbmxpbmUsICItd2Via2l0LXZpZGVvLXBs
YXlhYmxlLWlubGluZSIpIFwKKyAgICBtYWNybyh2aWRlb1BsYXlhYmxlSW5saW5lLCAiLXdlYmtp
dC12aWRlby1wbGF5YWJsZS1pbmxpbmUiKSBcCisgICAgbWFjcm8od2lkdGgsICJ3aWR0aCIpIFwK
ICAgICBDU1NfTUVESUFRVUVSWV9WSUVXX01PREUobWFjcm8pCiAKIC8vIGVuZCBvZiBtYWNybwog
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMgeworCiAj
aWZuZGVmIENTU19NRURJQVFVRVJZX05BTUVTX0hJREVfR0xPQkFMUwotICAgICNkZWZpbmUgQ1NT
X01FRElBUVVFUllfTkFNRVNfREVDTEFSRShuYW1lLCBzdHIpIGV4dGVybiBjb25zdCBBdG9taWNT
dHJpbmcgbmFtZSMjTWVkaWFGZWF0dXJlOworI2RlZmluZSBDU1NfTUVESUFRVUVSWV9OQU1FU19E
RUNMQVJFKG5hbWUsIHN0cmluZykgZXh0ZXJuIGNvbnN0IEF0b21pY1N0cmluZyBuYW1lOwogICAg
IENTU19NRURJQVFVRVJZX05BTUVTX0ZPUl9FQUNIX01FRElBRkVBVFVSRShDU1NfTUVESUFRVUVS
WV9OQU1FU19ERUNMQVJFKQotICAgICN1bmRlZiBDU1NfTUVESUFRVUVSWV9OQU1FU19ERUNMQVJF
CisjdW5kZWYgQ1NTX01FRElBUVVFUllfTkFNRVNfREVDTEFSRQogI2VuZGlmCiAKLSAgICAgICAg
dm9pZCBpbml0KCk7CisgICAgdm9pZCBpbml0KCk7CiAKLSAgICB9IC8vIG5hbWVzcGFjZSBNZWRp
YUZlYXR1cmVOYW1lcworfSAvLyBuYW1lc3BhY2UgTWVkaWFGZWF0dXJlTmFtZXMKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE1lZGlhRmVhdHVyZU5hbWVzX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L01lZGlhTGlzdC5jcHAKaW5kZXggMDFmODg2Mjc3OTk0NjY5ODViZWRiZWQ3NTI1OWMzZWYxZDcz
YTI2Ny4uMmZlOWQ5NjM3MTgwNjY3NGE5N2E3YjFiZTc1YzNjYjQ1MjNkYjUxOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhTGlzdC5jcHAKQEAgLTE3LDYgKzE3LDcgQEAKICAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCiAgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KICAqLworCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTWVkaWFMaXN0LmgiCiAKQEAgLTI2LDkgKzI3LDkgQEAKICNpbmNsdWRlICJET01X
aW5kb3cuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiTWVkaWFGZWF0dXJl
TmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4
cC5oIgogI2luY2x1ZGUgIlNjcmlwdGFibGVEb2N1bWVudFBhcnNlci5oIgogI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
QEAgLTc0LDI4ICs3NSwyNyBAQCBNZWRpYVF1ZXJ5U2V0OjpNZWRpYVF1ZXJ5U2V0KGNvbnN0IFN0
cmluZyYgbWVkaWFTdHJpbmcsIGJvb2wgZmFsbGJhY2tUb0Rlc2NyaXB0bwogICAgICwgbV9sYXN0
TGluZSgwKQogewogICAgIGJvb2wgc3VjY2VzcyA9IHBhcnNlKG1lZGlhU3RyaW5nKTsKKwogICAg
IC8vIEZJWE1FOiBwYXJzaW5nIGNhbiBmYWlsLiBUaGUgcHJvYmxlbSB3aXRoIGZhaWxpbmcgY29u
c3RydWN0b3IgaXMgdGhhdAogICAgIC8vIHdlIHdvdWxkIG5lZWQgYWRkaXRpb25hbCBmbGFnIHNh
eWluZyBNZWRpYUxpc3QgaXMgbm90IHZhbGlkCiAgICAgLy8gUGFyc2UgY2FuIGZhaWwgb25seSB3
aGVuIGZhbGxiYWNrVG9EZXNjcmlwdG9yID09IGZhbHNlLCBpLmUgd2hlbiBIVE1MNCBtZWRpYSBk
ZXNjcmlwdG9yCiAgICAgLy8gZm9yd2FyZC1jb21wYXRpYmxlIHN5bnRheCBpcyBub3QgaW4gdXNl
LgogICAgIC8vIERPTUltcGxlbWVudGF0aW9uQ1NTIHNlZW1zIHRvIG1hbmRhdGUgdGhhdCBtZWRp
YSBkZXNjcmlwdG9ycyBhcmUgdXNlZAotICAgIC8vIGZvciBib3RoIGh0bWwgYW5kIHN2ZywgZXZl
biB0aG91Z2ggc3ZnOnN0eWxlIGRvZXNuJ3QgdXNlIG1lZGlhIGRlc2NyaXB0b3JzCisgICAgLy8g
Zm9yIGJvdGggSFRNTCBhbmQgU1ZHLCBldmVuIHRob3VnaCBzdmc6c3R5bGUgZG9lc24ndCB1c2Ug
bWVkaWEgZGVzY3JpcHRvcnMKICAgICAvLyBDdXJyZW50bHkgdGhlIG9ubHkgcGxhY2VzIHdoZXJl
IHBhcnNpbmcgY2FuIGZhaWwgYXJlCiAgICAgLy8gY3JlYXRpbmcgPHN2ZzpzdHlsZT4sIGNyZWF0
aW5nIGNzcyBtZWRpYSAvIGltcG9ydCBydWxlcyBmcm9tIGpzCi0gICAgCisKICAgICAvLyBGSVhN
RTogVGhpcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4KICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAg
ICAgIHBhcnNlKCJpbnZhbGlkIik7CiB9CiAKIE1lZGlhUXVlcnlTZXQ6Ok1lZGlhUXVlcnlTZXQo
Y29uc3QgTWVkaWFRdWVyeVNldCYgbykKLSAgICA6IFJlZkNvdW50ZWQ8TWVkaWFRdWVyeVNldD4o
KQorICAgIDogUmVmQ291bnRlZCgpCiAgICAgLCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKG8ubV9m
YWxsYmFja1RvRGVzY3JpcHRvcikKICAgICAsIG1fbGFzdExpbmUoby5tX2xhc3RMaW5lKQotICAg
ICwgbV9xdWVyaWVzKG8ubV9xdWVyaWVzLnNpemUoKSkKKyAgICAsIG1fcXVlcmllcyhvLm1fcXVl
cmllcykKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9xdWVyaWVzLnNpemUoKTsg
KytpKQotICAgICAgICBtX3F1ZXJpZXNbaV0gPSBvLm1fcXVlcmllc1tpXS0+Y29weSgpOwogfQog
CiBNZWRpYVF1ZXJ5U2V0Ojp+TWVkaWFRdWVyeVNldCgpCkBAIC0xMDksNDYgKzEwOSw1MSBAQCBz
dGF0aWMgU3RyaW5nIHBhcnNlTWVkaWFEZXNjcmlwdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ICAgIC8vIFVTIEFTQ0lJIGxldHRlciBbYS16QS1aXSAoSVNPIDEwNjQ2IGhleCA0MS01YSwgNjEt
N2EpLCBkaWdpdCBbMC05XSAoaGV4IDMwLTM5KSwKICAgICAvLyBvciBoeXBoZW4gKGhleCAyZCku
IgogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICB1bnNpZ25lZCBp
ID0gMDsKLSAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIHVuc2lnbmVkIHNo
b3J0IGMgPSBzdHJpbmdbaV07Ci0gICAgICAgIGlmICghICgoYyA+PSAnYScgJiYgYyA8PSAneicp
Ci0gICAgICAgICAgICAgICB8fCAoYyA+PSAnQScgJiYgYyA8PSAnWicpCi0gICAgICAgICAgICAg
ICB8fCAoYyA+PSAnMScgJiYgYyA8PSAnOScpCi0gICAgICAgICAgICAgICB8fCAoYyA9PSAnLScp
KSkKKyAgICB1bnNpZ25lZCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBhdXRvIGNoYXJhY3RlciA9IHN0cmluZ1tpXTsKKyAgICAgICAgaWYgKCEoaXNBU0NJ
SUFscGhhbnVtZXJpYyhjaGFyYWN0ZXIpIHx8IGNoYXJhY3RlciA9PSAnLScpKQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBzdHJpbmcubGVmdChpKTsKIH0KIAorT3B0aW9u
YWw8TWVkaWFRdWVyeT4gTWVkaWFRdWVyeVNldDo6aW50ZXJuYWxQYXJzZShDU1NQYXJzZXImIHBh
cnNlciwgY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBpZiAoYXV0byBxdWVyeSA9
IHBhcnNlci5wYXJzZU1lZGlhUXVlcnkocXVlcnlTdHJpbmcpKQorICAgICAgICByZXR1cm4gV1RG
TW92ZSgqcXVlcnkpOworICAgIGlmICghbV9mYWxsYmFja1RvRGVzY3JpcHRvcikKKyAgICAgICAg
cmV0dXJuIE51bGxvcHQ7CisgICAgcmV0dXJuIE1lZGlhUXVlcnkgeyBNZWRpYVF1ZXJ5OjpOb25l
LCBwYXJzZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyksIFZlY3RvcjxNZWRpYVF1ZXJ5RXhw
cmVzc2lvbj4geyB9IH07Cit9CisKK09wdGlvbmFsPE1lZGlhUXVlcnk+IE1lZGlhUXVlcnlTZXQ6
OmludGVybmFsUGFyc2UoY29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKK3sKKyAgICBDU1NQYXJz
ZXIgcGFyc2VyKENTU1N0cmljdE1vZGUpOworICAgIHJldHVybiBpbnRlcm5hbFBhcnNlKHBhcnNl
ciwgcXVlcnlTdHJpbmcpOworfQorCiBib29sIE1lZGlhUXVlcnlTZXQ6OnBhcnNlKGNvbnN0IFN0
cmluZyYgbWVkaWFTdHJpbmcpCiB7CiAgICAgQ1NTUGFyc2VyIHBhcnNlcihDU1NTdHJpY3RNb2Rl
KTsKICAgICAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+PiByZXN1bHQ7
CisgICAgVmVjdG9yPE1lZGlhUXVlcnk+IHJlc3VsdDsKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0
OwogICAgIG1lZGlhU3RyaW5nLnNwbGl0KCcsJywgbGlzdCk7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxpc3Quc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgU3RyaW5nIG1lZGl1bSA9IGxp
c3RbaV0uc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgZm9yIChhdXRvJiBsaXN0U3RyaW5nIDogbGlz
dCkgeworICAgICAgICBTdHJpbmcgbWVkaXVtID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1M
U3BhY2VzKGxpc3RTdHJpbmcpOwogICAgICAgICBpZiAobWVkaXVtLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgaWYgKCFtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5ID0gcGFyc2VyLnBhcnNlTWVkaWFR
dWVyeShtZWRpdW0pOwotICAgICAgICBpZiAoIW1lZGlhUXVlcnkpIHsKLSAgICAgICAgICAgIGlm
ICghbV9mYWxsYmFja1RvRGVzY3JpcHRvcikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICBTdHJpbmcgbWVkaWFEZXNjcmlwdG9yID0gcGFyc2VNZWRpYURlc2NyaXB0
b3IobWVkaXVtKTsKLSAgICAgICAgICAgIGlmIChtZWRpYURlc2NyaXB0b3IuaXNOdWxsKCkpCisg
ICAgICAgICAgICBpZiAobV9mYWxsYmFja1RvRGVzY3JpcHRvcikKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG1lZGlhUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlh
UXVlcnk+KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGlhRGVzY3JpcHRvciwgbnVsbHB0cik7CisgICAg
ICAgIH0gZWxzZSBpZiAoYXV0byBxdWVyeSA9IGludGVybmFsUGFyc2UocGFyc2VyLCBtZWRpdW0p
KSB7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKFdURk1vdmUocXVlcnkudmFsdWUoKSkpOwor
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmVzdWx0LmFwcGVuZChX
VEZNb3ZlKG1lZGlhUXVlcnkpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAv
LyAiLCwsLCIgZmFsbHMgc3RyYWlnaHQgdGhyb3VnaCwgYnV0IGlzIG5vdCB2YWxpZCB1bmxlc3Mg
ZmFsbGJhY2sKICAgICBpZiAoIW1fZmFsbGJhY2tUb0Rlc2NyaXB0b3IgJiYgbGlzdC5pc0VtcHR5
KCkpIHsKLSAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBtZWRpYVN0cmluZy5z
dHJpcFdoaXRlU3BhY2UoKTsKKyAgICAgICAgU3RyaW5nIHN0cmlwcGVkTWVkaWFTdHJpbmcgPSBz
dHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMobWVkaWFTdHJpbmcpOwogICAgICAgICBp
ZiAoIXN0cmlwcGVkTWVkaWFTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KQEAgLTE1OCw0MCArMTYzLDI0IEBAIGJvb2wgTWVkaWFRdWVyeVNldDo6cGFy
c2UoY29uc3QgU3RyaW5nJiBtZWRpYVN0cmluZykKIAogYm9vbCBNZWRpYVF1ZXJ5U2V0OjphZGQo
Y29uc3QgU3RyaW5nJiBxdWVyeVN0cmluZykKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKENTU1N0
cmljdE1vZGUpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlZFF1ZXJ5
ID0gcGFyc2VyLnBhcnNlTWVkaWFRdWVyeShxdWVyeVN0cmluZyk7Ci0gICAgaWYgKCFwYXJzZWRR
dWVyeSAmJiBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yKSB7Ci0gICAgICAgIFN0cmluZyBtZWRpdW0g
PSBwYXJzZU1lZGlhRGVzY3JpcHRvcihxdWVyeVN0cmluZyk7Ci0gICAgICAgIGlmICghbWVkaXVt
LmlzTnVsbCgpKQotICAgICAgICAgICAgcGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1l
ZGlhUXVlcnk+KE1lZGlhUXVlcnk6Ok5vbmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAg
IGF1dG8gcGFyc2VkUXVlcnkgPSBpbnRlcm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAo
IXBhcnNlZFF1ZXJ5KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBtX3F1ZXJpZXMuYXBw
ZW5kKFdURk1vdmUocGFyc2VkUXVlcnkpKTsKKyAgICBtX3F1ZXJpZXMuYXBwZW5kKFdURk1vdmUo
cGFyc2VkUXVlcnkudmFsdWUoKSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIE1lZGlh
UXVlcnlTZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nVG9SZW1vdmUpCitib29s
IE1lZGlhUXVlcnlTZXQ6OnJlbW92ZShjb25zdCBTdHJpbmcmIHF1ZXJ5U3RyaW5nKQogewotICAg
IENTU1BhcnNlciBwYXJzZXIoQ1NTU3RyaWN0TW9kZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
TWVkaWFRdWVyeT4gcGFyc2VkUXVlcnkgPSBwYXJzZXIucGFyc2VNZWRpYVF1ZXJ5KHF1ZXJ5U3Ry
aW5nVG9SZW1vdmUpOwotICAgIGlmICghcGFyc2VkUXVlcnkgJiYgbV9mYWxsYmFja1RvRGVzY3Jp
cHRvcikgewotICAgICAgICBTdHJpbmcgbWVkaXVtID0gcGFyc2VNZWRpYURlc2NyaXB0b3IocXVl
cnlTdHJpbmdUb1JlbW92ZSk7Ci0gICAgICAgIGlmICghbWVkaXVtLmlzTnVsbCgpKQotICAgICAg
ICAgICAgcGFyc2VkUXVlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+KE1lZGlhUXVl
cnk6Ok5vbmUsIG1lZGl1bSwgbnVsbHB0cik7Ci0gICAgfQorICAgIGF1dG8gcGFyc2VkUXVlcnkg
PSBpbnRlcm5hbFBhcnNlKHF1ZXJ5U3RyaW5nKTsKICAgICBpZiAoIXBhcnNlZFF1ZXJ5KQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCiAgICAgcmV0dXJuIG1fcXVlcmllcy5yZW1vdmVGaXJz
dE1hdGNoaW5nKFsmcGFyc2VkUXVlcnldKGF1dG8mIHF1ZXJ5KSB7Ci0gICAgICAgIHJldHVybiAq
cXVlcnkgPT0gKnBhcnNlZFF1ZXJ5OworICAgICAgICByZXR1cm4gcXVlcnkgPT0gcGFyc2VkUXVl
cnkudmFsdWUoKTsKICAgICB9KTsKIH0KIAotdm9pZCBNZWRpYVF1ZXJ5U2V0OjphZGRNZWRpYVF1
ZXJ5KHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5PiBtZWRpYVF1ZXJ5KQordm9pZCBNZWRpYVF1
ZXJ5U2V0OjphZGRNZWRpYVF1ZXJ5KE1lZGlhUXVlcnkmJiBtZWRpYVF1ZXJ5KQogewogICAgIG1f
cXVlcmllcy5hcHBlbmQoV1RGTW92ZShtZWRpYVF1ZXJ5KSk7CiB9CkBAIC0xOTksMTQgKzE4OCwx
MiBAQCB2b2lkIE1lZGlhUXVlcnlTZXQ6OmFkZE1lZGlhUXVlcnkoc3RkOjp1bmlxdWVfcHRyPE1l
ZGlhUXVlcnk+IG1lZGlhUXVlcnkpCiBTdHJpbmcgTWVkaWFRdWVyeVNldDo6bWVkaWFUZXh0KCkg
Y29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIHRleHQ7Ci0gICAgCi0gICAgYm9vbCBmaXJzdCA9
IHRydWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3F1ZXJpZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaWYgKCFmaXJzdCkKKyAgICBib29sIG5lZWRDb21tYSA9IGZhbHNlOworICAg
IGZvciAoYXV0byYgcXVlcnkgOiBtX3F1ZXJpZXMpIHsKKyAgICAgICAgaWYgKG5lZWRDb21tYSkK
ICAgICAgICAgICAgIHRleHQuYXBwZW5kTGl0ZXJhbCgiLCAiKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgdGV4dC5hcHBlbmQobV9xdWVyaWVzW2ld
LT5jc3NUZXh0KCkpOworICAgICAgICB0ZXh0LmFwcGVuZChxdWVyeS5jc3NUZXh0KCkpOworICAg
ICAgICBuZWVkQ29tbWEgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gdGV4dC50b1N0cmluZygp
OwogfQpAQCAtMjE0LDEzICsyMDEsMTEgQEAgU3RyaW5nIE1lZGlhUXVlcnlTZXQ6Om1lZGlhVGV4
dCgpIGNvbnN0CiBNZWRpYUxpc3Q6Ok1lZGlhTGlzdChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJp
ZXMsIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0KQogICAgIDogbV9tZWRpYVF1ZXJpZXMobWVk
aWFRdWVyaWVzKQogICAgICwgbV9wYXJlbnRTdHlsZVNoZWV0KHBhcmVudFNoZWV0KQotICAgICwg
bV9wYXJlbnRSdWxlKDApCiB7CiB9CiAKIE1lZGlhTGlzdDo6TWVkaWFMaXN0KE1lZGlhUXVlcnlT
ZXQqIG1lZGlhUXVlcmllcywgQ1NTUnVsZSogcGFyZW50UnVsZSkKICAgICA6IG1fbWVkaWFRdWVy
aWVzKG1lZGlhUXVlcmllcykKLSAgICAsIG1fcGFyZW50U3R5bGVTaGVldCgwKQogICAgICwgbV9w
YXJlbnRSdWxlKHBhcmVudFJ1bGUpCiB7CiB9CkBAIC0yMzIsOSArMjE3LDcgQEAgTWVkaWFMaXN0
Ojp+TWVkaWFMaXN0KCkKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5n
JiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11
dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZShtX3BhcmVudFJ1bGUpOwotCi0gICAgYm9vbCBzdWNj
ZXNzID0gbV9tZWRpYVF1ZXJpZXMtPnBhcnNlKHZhbHVlKTsKLSAgICBpZiAoIXN1Y2Nlc3MpIHsK
KyAgICBpZiAoIW1fbWVkaWFRdWVyaWVzLT5wYXJzZSh2YWx1ZSkpIHsKICAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ2LDcgKzIyOSw3IEBAIFN0
cmluZyBNZWRpYUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgYXV0byYg
cXVlcmllcyA9IG1fbWVkaWFRdWVyaWVzLT5xdWVyeVZlY3RvcigpOwogICAgIGlmIChpbmRleCA8
IHF1ZXJpZXMuc2l6ZSgpKQotICAgICAgICByZXR1cm4gcXVlcmllc1tpbmRleF0tPmNzc1RleHQo
KTsKKyAgICAgICAgcmV0dXJuIHF1ZXJpZXNbaW5kZXhdLmNzc1RleHQoKTsKICAgICByZXR1cm4g
U3RyaW5nKCk7CiB9CiAKQEAgLTI4NCwxMSArMjY3LDkgQEAgdm9pZCBNZWRpYUxpc3Q6OnJlYXR0
YWNoKE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcykKIH0KIAogI2lmIEVOQUJMRShSRVNPTFVU
SU9OX01FRElBX1FVRVJZKQotc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdl
VG9Db25zb2xlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nJiBzZXJpYWxpemVkRXhw
cmVzc2lvbiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlKQotewotICAgIEFTU0VSVChk
b2N1bWVudCk7Ci0gICAgQVNTRVJUKHZhbHVlKTsKIAorc3RhdGljIHZvaWQgYWRkUmVzb2x1dGlv
bldhcm5pbmdNZXNzYWdlVG9Db25zb2xlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgU3RyaW5n
JiBzZXJpYWxpemVkRXhwcmVzc2lvbiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQor
ewogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhUXVlcnlNZXNzYWdlKEFT
Q0lJTGl0ZXJhbCgiQ29uc2lkZXIgdXNpbmcgJ2RwcHgnIHVuaXRzIGluc3RlYWQgb2YgJyVyZXBs
YWNlbWVudFVuaXRzJScsIGFzIGluIENTUyAnJXJlcGxhY2VtZW50VW5pdHMlJyBtZWFucyBkb3Rz
LXBlci1DU1MtJWxlbmd0aFVuaXQlLCBub3QgZG90cy1wZXItcGh5c2ljYWwtJWxlbmd0aFVuaXQl
LCBzbyBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgJyVyZXBsYWNlbWVudFVuaXRz
JScgb2YgYSBzY3JlZW4uIEluIG1lZGlhIHF1ZXJ5IGV4cHJlc3Npb246ICIpKTsKICAgICBzdGF0
aWMgTmV2ZXJEZXN0cm95ZWQ8U3RyaW5nPiBtZWRpYVZhbHVlRFBJKEFTQ0lJTGl0ZXJhbCgiZHBp
IikpOwogICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTdHJpbmc+IG1lZGlhVmFsdWVEUENNKEFT
Q0lJTGl0ZXJhbCgiZHBjbSIpKTsKQEAgLTI5NiwxNiArMjc3LDE2IEBAIHN0YXRpYyB2b2lkIGFk
ZFJlc29sdXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IFN0cmluCiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFN0cmluZz4gbGVuZ3RoVW5pdENl
bnRpbWV0ZXIoQVNDSUlMaXRlcmFsKCJjZW50aW1ldGVyIikpOwogCiAgICAgU3RyaW5nIG1lc3Nh
Z2U7Ci0gICAgaWYgKHZhbHVlLT5pc0RvdHNQZXJJbmNoKCkpCi0gICAgICAgIG1lc3NhZ2UgPSBT
dHJpbmcobWVkaWFRdWVyeU1lc3NhZ2UpLnJlcGxhY2UoIiVyZXBsYWNlbWVudFVuaXRzJSIsIG1l
ZGlhVmFsdWVEUEkpLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRJbmNoKTsKLSAg
ICBlbHNlIGlmICh2YWx1ZS0+aXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICBtZXNzYWdl
ID0gU3RyaW5nKG1lZGlhUXVlcnlNZXNzYWdlKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUi
LCBtZWRpYVZhbHVlRFBDTSkucmVwbGFjZSgiJWxlbmd0aFVuaXQlIiwgbGVuZ3RoVW5pdENlbnRp
bWV0ZXIpOworICAgIGlmICh2YWx1ZS5pc0RvdHNQZXJJbmNoKCkpCisgICAgICAgIG1lc3NhZ2Ug
PSBtZWRpYVF1ZXJ5TWVzc2FnZS5nZXQoKS5yZXBsYWNlKCIlcmVwbGFjZW1lbnRVbml0cyUiLCBt
ZWRpYVZhbHVlRFBJKS5yZXBsYWNlKCIlbGVuZ3RoVW5pdCUiLCBsZW5ndGhVbml0SW5jaCk7Cisg
ICAgZWxzZSBpZiAodmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQorICAgICAgICBtZXNzYWdl
ID0gbWVkaWFRdWVyeU1lc3NhZ2UuZ2V0KCkucmVwbGFjZSgiJXJlcGxhY2VtZW50VW5pdHMlIiwg
bWVkaWFWYWx1ZURQQ00pLnJlcGxhY2UoIiVsZW5ndGhVbml0JSIsIGxlbmd0aFVuaXRDZW50aW1l
dGVyKTsKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgbWVz
c2FnZS5hcHBlbmQoc2VyaWFsaXplZEV4cHJlc3Npb24pOwogCi0gICAgZG9jdW1lbnQtPmFkZENv
bnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkNTUywgTWVzc2FnZUxldmVsOjpEZWJ1ZywgbWVz
c2FnZSk7CisgICAgZG9jdW1lbnQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6Q1NT
LCBNZXNzYWdlTGV2ZWw6OkRlYnVnLCBtZXNzYWdlKTsKIH0KIAogdm9pZCByZXBvcnRNZWRpYVF1
ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgTWVkaWFRdWVyeVNl
dCogbWVkaWFRdWVyeVNldCkKQEAgLTMxMywzMSArMjk0LDIzIEBAIHZvaWQgcmVwb3J0TWVkaWFR
dWVyeVdhcm5pbmdJZk5lZWRlZChEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IE1lZGlhUXVlcnlT
ZXQqIG1lCiAgICAgaWYgKCFtZWRpYVF1ZXJ5U2V0IHx8ICFkb2N1bWVudCkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byYgbWVkaWFRdWVyaWVzID0gbWVkaWFRdWVyeVNldC0+cXVlcnlWZWN0
b3IoKTsKLSAgICBjb25zdCBzaXplX3QgcXVlcnlDb3VudCA9IG1lZGlhUXVlcmllcy5zaXplKCk7
Ci0KLSAgICBpZiAoIXF1ZXJ5Q291bnQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgcXVlcnlDb3VudDsgKytpKSB7Ci0gICAgICAgIGNvbnN0IE1lZGlhUXVl
cnkqIHF1ZXJ5ID0gbWVkaWFRdWVyaWVzW2ldLmdldCgpOwotICAgICAgICBTdHJpbmcgbWVkaWFU
eXBlID0gcXVlcnktPm1lZGlhVHlwZSgpOwotICAgICAgICBpZiAoIXF1ZXJ5LT5pZ25vcmVkKCkg
JiYgIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInByaW50IikpIHsK
LSAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7Ci0g
ICAgICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IGV4cHJlc3Npb25zLnNpemUoKTsgKytq
KSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwID0gZXhwcmVzc2lv
bnMuYXQoaikuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGV4cC0+bWVkaWFGZWF0dXJlKCkg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUgfHwgZXhwLT5tZWRp
YUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3Jlc29sdXRpb25NZWRpYUZlYXR1
cmUgfHwgZXhwLT5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3Jlc29s
dXRpb25NZWRpYUZlYXR1cmUpIHsKLSAgICAgICAgICAgICAgICAgICAgQ1NTVmFsdWUqIGNzc1Zh
bHVlID0gIGV4cC0+dmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPihjc3NWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIENTU1ByaW1p
dGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigq
Y3NzVmFsdWUpOworICAgIGZvciAoYXV0byYgcXVlcnkgOiBtZWRpYVF1ZXJ5U2V0LT5xdWVyeVZl
Y3RvcigpKSB7CisgICAgICAgIGlmICghcXVlcnkuaWdub3JlZCgpICYmICFlcXVhbExldHRlcnNJ
Z25vcmluZ0FTQ0lJQ2FzZShxdWVyeS5tZWRpYVR5cGUoKSwgInByaW50IikpIHsKKyAgICAgICAg
ICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnkuZXhwcmVzc2lvbnMoKTsKKyAgICAgICAgICAg
IGZvciAoYXV0byYgZXhwcmVzc2lvbiA6IGV4cHJlc3Npb25zKSB7CisgICAgICAgICAgICAgICAg
aWYgKGV4cHJlc3Npb24ubWVkaWFGZWF0dXJlKCkgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnJlc29s
dXRpb24gfHwgZXhwcmVzc2lvbi5tZWRpYUZlYXR1cmUoKSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
bWF4UmVzb2x1dGlvbiB8fCBleHByZXNzaW9uLm1lZGlhRmVhdHVyZSgpID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptaW5SZXNvbHV0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8qIHZhbHVl
ID0gZXhwcmVzc2lvbi52YWx1ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0RvdHNQZXJJbmNoKCkgfHwg
cHJpbWl0aXZlVmFsdWUuaXNEb3RzUGVyQ2VudGltZXRlcigpKQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFkZFJlc29sdXRpb25XYXJuaW5nTWVzc2FnZVRvQ29uc29sZShkb2N1bWVudCwg
bWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksICZwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYWRkUmVzb2x1dGlvbldhcm5pbmdNZXNzYWdlVG9Db25zb2xlKCpk
b2N1bWVudCwgbWVkaWFRdWVyeVNldC0+bWVkaWFUZXh0KCksIHByaW1pdGl2ZVZhbHVlKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KIH0KKwogI2VuZGlmCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9NZWRpYUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAppbmRl
eCA3MzEwMzQwMGI0NjdjYmI0ZWY1YTgwNWU0MmM5MDIyYTBmZTkwNzNhLi5kYTc2NTUwY2VkMDE3
ZWFjZTU0NjU3MTYzNzY1Njk2NDI0ZmQ0NjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvTWVkaWFMaXN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCkBAIC0x
OCwyNSArMTgsMjMgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNp
Zm5kZWYgTWVkaWFMaXN0X2gKLSNkZWZpbmUgTWVkaWFMaXN0X2gKKyNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ1NTUGFyc2Vy
OwogY2xhc3MgQ1NTUnVsZTsKIGNsYXNzIENTU1N0eWxlU2hlZXQ7CiBjbGFzcyBEb2N1bWVudDsK
LWNsYXNzIE1lZGlhTGlzdDsKIGNsYXNzIE1lZGlhUXVlcnk7CiAKK3VzaW5nIEV4Y2VwdGlvbkNv
ZGUgPSBpbnQ7CisKIGNsYXNzIE1lZGlhUXVlcnlTZXQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZWRp
YVF1ZXJ5U2V0PiB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFJlZjxNZWRpYVF1ZXJ5U2V0PiBjcmVh
dGUoKQpAQCAtNTIsMTggKzUwLDE4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFRdWVyeVNldChtZWRpYVN0cmluZywgdHJ1ZSkpOwogICAgIH0KICAgICB+TWVk
aWFRdWVyeVNldCgpOwotICAgIAorCiAgICAgYm9vbCBwYXJzZShjb25zdCBTdHJpbmcmKTsKICAg
ICBib29sIGFkZChjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHJlbW92ZShjb25zdCBTdHJpbmcm
KTsKIAotICAgIHZvaWQgYWRkTWVkaWFRdWVyeShzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4p
OworICAgIHZvaWQgYWRkTWVkaWFRdWVyeShNZWRpYVF1ZXJ5JiYpOworCisgICAgY29uc3QgVmVj
dG9yPE1lZGlhUXVlcnk+JiBxdWVyeVZlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fcXVlcmllczsg
fQogCi0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5Pj4mIHF1ZXJ5
VmVjdG9yKCkgY29uc3QgeyByZXR1cm4gbV9xdWVyaWVzOyB9Ci0gICAgCiAgICAgaW50IGxhc3RM
aW5lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0TGluZTsgfQogICAgIHZvaWQgc2V0TGFzdExpbmUo
aW50IGxhc3RMaW5lKSB7IG1fbGFzdExpbmUgPSBsYXN0TGluZTsgfQotICAgIAorCiAgICAgU3Ry
aW5nIG1lZGlhVGV4dCgpIGNvbnN0OwogCiAgICAgUmVmPE1lZGlhUXVlcnlTZXQ+IGNvcHkoKSBj
b25zdCB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlTZXQoKnRoaXMpKTsgfQpAQCAt
NzIsMTAgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgTWVkaWFRdWVyeVNldCgpOwogICAgIE1lZGlh
UXVlcnlTZXQoY29uc3QgU3RyaW5nJiBtZWRpYVF1ZXJ5LCBib29sIGZhbGxiYWNrVG9EZXNjcmlw
dGlvbik7CiAgICAgTWVkaWFRdWVyeVNldChjb25zdCBNZWRpYVF1ZXJ5U2V0Jik7Ci0gICAgCisK
KyAgICBPcHRpb25hbDxNZWRpYVF1ZXJ5PiBpbnRlcm5hbFBhcnNlKENTU1BhcnNlciYsIGNvbnN0
IFN0cmluZyYpOworICAgIE9wdGlvbmFsPE1lZGlhUXVlcnk+IGludGVybmFsUGFyc2UoY29uc3Qg
U3RyaW5nJik7CisKICAgICB1bnNpZ25lZCBtX2ZhbGxiYWNrVG9EZXNjcmlwdG9yIDogMTsgLy8g
dHJ1ZSBpZiBmYWlsZWQgbWVkaWEgcXVlcnkgcGFyc2luZyBzaG91bGQgZmFsbGJhY2sgdG8gbWVk
aWEgZGVzY3JpcHRpb24gcGFyc2luZy4KICAgICBzaWduZWQgbV9sYXN0TGluZSA6IDMxOwotICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeT4+IG1fcXVlcmllczsKKyAgICBWZWN0
b3I8TWVkaWFRdWVyeT4gbV9xdWVyaWVzOwogfTsKIAogY2xhc3MgTWVkaWFMaXN0IDogcHVibGlj
IFJlZkNvdW50ZWQ8TWVkaWFMaXN0PiB7CkBAIC05OSwxMSArMTAwLDEwIEBAIHB1YmxpYzoKICAg
ICBTdHJpbmcgbWVkaWFUZXh0KCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJpZXMtPm1lZGlh
VGV4dCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVRleHQoY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9u
Q29kZSYpOwogCi0gICAgLy8gTm90IHBhcnQgb2YgQ1NTT00uCiAgICAgQ1NTUnVsZSogcGFyZW50
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50UnVsZTsgfQogICAgIENTU1N0eWxlU2hlZXQq
IHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlU2hlZXQ7IH0K
LSAgICB2b2lkIGNsZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVT
aGVldCk7IG1fcGFyZW50U3R5bGVTaGVldCA9IDA7IH0KLSAgICB2b2lkIGNsZWFyUGFyZW50UnVs
ZSgpIHsgQVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IDA7IH0KKyAgICB2b2lk
IGNsZWFyUGFyZW50U3R5bGVTaGVldCgpIHsgQVNTRVJUKG1fcGFyZW50U3R5bGVTaGVldCk7IG1f
cGFyZW50U3R5bGVTaGVldCA9IG51bGxwdHI7IH0KKyAgICB2b2lkIGNsZWFyUGFyZW50UnVsZSgp
IHsgQVNTRVJUKG1fcGFyZW50UnVsZSk7IG1fcGFyZW50UnVsZSA9IG51bGxwdHI7IH0KICAgICBj
b25zdCBNZWRpYVF1ZXJ5U2V0KiBxdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVF1ZXJp
ZXMuZ2V0KCk7IH0KIAogICAgIHZvaWQgcmVhdHRhY2goTWVkaWFRdWVyeVNldCopOwpAQCAtMTE0
LDE1ICsxMTQsMjAgQEAgcHJpdmF0ZToKICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENT
U1J1bGUqIHBhcmVudFJ1bGUpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFR
dWVyaWVzOwotICAgIENTU1N0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKLSAgICBDU1NS
dWxlKiBtX3BhcmVudFJ1bGU7CisgICAgQ1NTU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0
IHsgbnVsbHB0ciB9OworICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZSB7IG51bGxwdHIgfTsKIH07
CiAKLSNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKIC8vIEFkZHMgbWVzc2FnZSB0
byBpbnNwZWN0b3IgY29uc29sZSB3aGVuZXZlciBkcGkgb3IgZHBjbSB2YWx1ZXMgYXJlIHVzZWQg
Zm9yICJzY3JlZW4iIG1lZGlhLgorLy8gRklYTUU6IFNlZW1zIHN0cmFuZ2UgdG8gaGF2ZSB0aGlz
IGhlcmUgaW4gdGhpcyBmaWxlLCBhbmQgdW5jbGVhciBleGFjdGx5IHdobyBzaG91bGQgY2FsbCB0
aGlzIGFuZCB3aGVuLgogdm9pZCByZXBvcnRNZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3Vt
ZW50KiwgY29uc3QgTWVkaWFRdWVyeVNldCopOwotI2VuZGlmCiAKLX0gLy8gbmFtZXNwYWNlCisj
aWYgIUVOQUJMRShSRVNPTFVUSU9OX01FRElBX1FVRVJZKQorCitpbmxpbmUgdm9pZCByZXBvcnRN
ZWRpYVF1ZXJ5V2FybmluZ0lmTmVlZGVkKERvY3VtZW50KiwgY29uc3QgTWVkaWFRdWVyeVNldCop
Cit7Cit9CiAKICNlbmRpZgorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhUXVlcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnku
Y3BwCmluZGV4IDRhMjVhMTFiOWJkNjZlMmE2MzMyZDRjYjgwZjM0YjU1Nzc0YjQ1ZjEuLjEzZDc3
NTY5NmU0N2E5NTAzOTNhOWZlM2U4N2Y2ZmMyMzM5NjhmODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeS5jcHAKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNZWRpYVF1ZXJ5LmgiCiAKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5RXhwLmgiCiAjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNyw4
NiArMzYsNjIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gaHR0cDovL2Rldi53My5vcmcvY3Nz
d2cvY3Nzb20vI3NlcmlhbGl6ZS1hLW1lZGlhLXF1ZXJ5CiBTdHJpbmcgTWVkaWFRdWVyeTo6c2Vy
aWFsaXplKCkgY29uc3QKIHsKLSAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKLSAgICBpZiAoIW1f
aWdub3JlZCkgewotICAgICAgICBzd2l0Y2ggKG1fcmVzdHJpY3RvcikgewotICAgICAgICBjYXNl
IE1lZGlhUXVlcnk6Ok9ubHk6Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgib25s
eSAiKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIE1lZGlhUXVlcnk6Ok5vdDoK
LSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFsKCJub3QgIik7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb25lOgotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAobV9leHByZXNzaW9ucy0+aXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKG1fbWVkaWFUeXBlKTsKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQudG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChtX21lZGlhVHlw
ZSAhPSAiYWxsIiB8fCBtX3Jlc3RyaWN0b3IgIT0gTm9uZSkgewotICAgICAgICAgICAgcmVzdWx0
LmFwcGVuZChtX21lZGlhVHlwZSk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgi
IGFuZCAiKTsKLSAgICAgICAgfQorICAgIGlmIChtX2lnbm9yZWQpIHsKKyAgICAgICAgLy8gSWYg
cXVlcnkgaXMgaW52YWxpZCwgc2VyaWFsaXplZCB0ZXh0IHNob3VsZCB0dXJuIGludG8gIm5vdCBh
bGwiLgorICAgICAgICByZXR1cm4gQVNDSUlMaXRlcmFsKCJub3QgYWxsIik7CisgICAgfQogCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQobV9leHByZXNzaW9ucy0+YXQoMCktPnNlcmlhbGl6ZSgpKTsK
LSAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX2V4cHJlc3Npb25zLT5zaXplKCk7ICsr
aSkgeworICAgIGJvb2wgc2hvdWxkT21pdE1lZGlhVHlwZSA9IGZhbHNlOworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIHN3aXRjaCAobV9yZXN0cmljdG9yKSB7CisgICAgY2FzZSBNZWRp
YVF1ZXJ5OjpPbmx5OgorICAgICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbCgib25seSAiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBNZWRpYVF1ZXJ5OjpOb3Q6CisgICAgICAgIHJlc3VsdC5h
cHBlbmRMaXRlcmFsKCJub3QgIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTWVkaWFRdWVy
eTo6Tm9uZToKKyAgICAgICAgc2hvdWxkT21pdE1lZGlhVHlwZSA9ICFtX2V4cHJlc3Npb25zLmlz
RW1wdHkoKSAmJiBtX21lZGlhVHlwZSA9PSAiYWxsIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGJvb2wgbmVlZHNBbmQgPSBmYWxzZTsKKyAgICBpZiAoIXNob3VsZE9taXRNZWRpYVR5cGUp
IHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChtX21lZGlhVHlwZSk7CisgICAgICAgIG5lZWRzQW5k
ID0gdHJ1ZTsKKyAgICB9CisgICAgZm9yIChhdXRvJiBleHByZXNzaW9uIDogbV9leHByZXNzaW9u
cykgeworICAgICAgICBpZiAobmVlZHNBbmQpCiAgICAgICAgICAgICByZXN1bHQuYXBwZW5kTGl0
ZXJhbCgiIGFuZCAiKTsKLSAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobV9leHByZXNzaW9ucy0+
YXQoaSktPnNlcmlhbGl6ZSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8v
IElmIHF1ZXJ5IGlzIGludmFsaWQsIHNlcmlhbGl6ZWQgdGV4dCBzaG91bGQgdHVybiBpbnRvICJu
b3QgYWxsIi4KLSAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVyYWwoIm5vdCBhbGwiKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChleHByZXNzaW9uLnNlcmlhbGl6ZSgpKTsKKyAgICAgICAgbmVlZHNB
bmQgPSB0cnVlOwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiB9CiAKLU1l
ZGlhUXVlcnk6Ok1lZGlhUXVlcnkoUmVzdHJpY3RvciByLCBjb25zdCBTdHJpbmcmIG1lZGlhVHlw
ZSwgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb25WZWN0b3I+IGV4cHJzKQotICAgIDogbV9yZXN0
cmljdG9yKHIpCitNZWRpYVF1ZXJ5OjpNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IgcmVzdHJpY3Rvciwg
Y29uc3QgU3RyaW5nJiBtZWRpYVR5cGUsIFZlY3RvcjxNZWRpYVF1ZXJ5RXhwcmVzc2lvbj4mJiBl
eHByZXNzaW9ucykKKyAgICA6IG1fcmVzdHJpY3RvcihyZXN0cmljdG9yKQogICAgICwgbV9tZWRp
YVR5cGUobWVkaWFUeXBlLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkpCi0gICAgLCBtX2V4cHJl
c3Npb25zKFdURk1vdmUoZXhwcnMpKQotICAgICwgbV9pZ25vcmVkKGZhbHNlKQorICAgICwgbV9l
eHByZXNzaW9ucyhXVEZNb3ZlKGV4cHJlc3Npb25zKSkKIHsKLSAgICBpZiAoIW1fZXhwcmVzc2lv
bnMpIHsKLSAgICAgICAgbV9leHByZXNzaW9ucyA9IHN0ZDo6bWFrZV91bmlxdWU8RXhwcmVzc2lv
blZlY3Rvcj4oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHN0ZDo6c29ydChtX2V4
cHJlc3Npb25zLT5iZWdpbigpLCBtX2V4cHJlc3Npb25zLT5lbmQoKSwgW10oYXV0byYgYSwgYXV0
byYgYikgewotICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZShhLT5zZXJpYWxpemUoKSwg
Yi0+c2VyaWFsaXplKCkpIDwgMDsKKyAgICBzdGQ6OnNvcnQobV9leHByZXNzaW9ucy5iZWdpbigp
LCBtX2V4cHJlc3Npb25zLmVuZCgpLCBbXShhdXRvJiBhLCBhdXRvJiBiKSB7CisgICAgICAgIHJl
dHVybiBjb2RlUG9pbnRDb21wYXJlKGEuc2VyaWFsaXplKCksIGIuc2VyaWFsaXplKCkpIDwgMDsK
ICAgICB9KTsKIAotICAgIC8vIHJlbW92ZSBhbGwgZHVwbGljYXRlZCBleHByZXNzaW9ucworICAg
IC8vIFJlbW92ZSBhbGwgZHVwbGljYXRlZCBleHByZXNzaW9ucy4KICAgICBTdHJpbmcga2V5Owot
ICAgIGZvciAoaW50IGkgPSBtX2V4cHJlc3Npb25zLT5zaXplKCkgLSAxOyBpID49IDA7IC0taSkg
eworICAgIGZvciAoaW50IGkgPSBtX2V4cHJlc3Npb25zLnNpemUoKSAtIDE7IGkgPj0gMDsgLS1p
KSB7CiAKLSAgICAgICAgLy8gaWYgbm90IGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgaXMgdmFsaWQg
dGhlIG1lZGlhIHF1ZXJ5IG11c3QgYmUgaWdub3JlZC4KKyAgICAgICAgLy8gSWYgYW55IGV4cHJl
c3Npb24gaXMgaW52YWxpZCB0aGUgbWVkaWEgcXVlcnkgbXVzdCBiZSBpZ25vcmVkLgogICAgICAg
ICBpZiAoIW1faWdub3JlZCkKLSAgICAgICAgICAgIG1faWdub3JlZCA9ICFtX2V4cHJlc3Npb25z
LT5hdChpKS0+aXNWYWxpZCgpOworICAgICAgICAgICAgbV9pZ25vcmVkID0gIW1fZXhwcmVzc2lv
bnNbaV0uaXNWYWxpZCgpOwogCi0gICAgICAgIGlmIChtX2V4cHJlc3Npb25zLT5hdChpKS0+c2Vy
aWFsaXplKCkgPT0ga2V5KQotICAgICAgICAgICAgbV9leHByZXNzaW9ucy0+cmVtb3ZlKGkpOwor
ICAgICAgICBpZiAobV9leHByZXNzaW9uc1tpXS5zZXJpYWxpemUoKSA9PSBrZXkpCisgICAgICAg
ICAgICBtX2V4cHJlc3Npb25zLnJlbW92ZShpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
a2V5ID0gbV9leHByZXNzaW9ucy0+YXQoaSktPnNlcmlhbGl6ZSgpOworICAgICAgICAgICAga2V5
ID0gbV9leHByZXNzaW9uc1tpXS5zZXJpYWxpemUoKTsKICAgICB9CiB9CiAKLU1lZGlhUXVlcnk6
Ok1lZGlhUXVlcnkoY29uc3QgTWVkaWFRdWVyeSYgbykKLSAgICA6IG1fcmVzdHJpY3RvcihvLm1f
cmVzdHJpY3RvcikKLSAgICAsIG1fbWVkaWFUeXBlKG8ubV9tZWRpYVR5cGUpCi0gICAgLCBtX2V4
cHJlc3Npb25zKHN0ZDo6bWFrZV91bmlxdWU8RXhwcmVzc2lvblZlY3Rvcj4oby5tX2V4cHJlc3Np
b25zLT5zaXplKCkpKQotICAgICwgbV9pZ25vcmVkKG8ubV9pZ25vcmVkKQotICAgICwgbV9zZXJp
YWxpemF0aW9uQ2FjaGUoby5tX3NlcmlhbGl6YXRpb25DYWNoZSkKLXsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9leHByZXNzaW9ucy0+c2l6ZSgpOyArK2kpCi0gICAgICAgICgqbV9l
eHByZXNzaW9ucylbaV0gPSBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnlFeHA+KCpvLm1fZXhw
cmVzc2lvbnMtPmF0KGkpKTsKLX0KLQotTWVkaWFRdWVyeTo6fk1lZGlhUXVlcnkoKQotewotfQot
CiAvLyBodHRwOi8vZGV2LnczLm9yZy9jc3N3Zy9jc3NvbS8jY29tcGFyZS1tZWRpYS1xdWVyaWVz
CiBib29sIE1lZGlhUXVlcnk6Om9wZXJhdG9yPT0oY29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNv
bnN0CiB7CkBAIC0xMjQsMTEgKzk5LDEwIEBAIGJvb2wgTWVkaWFRdWVyeTo6b3BlcmF0b3I9PShj
b25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3QKIH0KIAogLy8gaHR0cDovL2Rldi53My5vcmcv
Y3Nzd2cvY3Nzb20vI3NlcmlhbGl6ZS1hLWxpc3Qtb2YtbWVkaWEtcXVlcmllcwotU3RyaW5nIE1l
ZGlhUXVlcnk6OmNzc1RleHQoKSBjb25zdAorY29uc3QgU3RyaW5nJiBNZWRpYVF1ZXJ5Ojpjc3NU
ZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV9zZXJpYWxpemF0aW9uQ2FjaGUuaXNOdWxsKCkpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8TWVkaWFRdWVyeSo+KHRoaXMpLT5tX3NlcmlhbGl6YXRpb25DYWNo
ZSA9IHNlcmlhbGl6ZSgpOwotCisgICAgICAgIG1fc2VyaWFsaXphdGlvbkNhY2hlID0gc2VyaWFs
aXplKCk7CiAgICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNhY2hlOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL01l
ZGlhUXVlcnkuaAppbmRleCA1ZjlmYTFmMTM4Y2U1MWNkODhmZWQwZTA5ZjlhZTExNmI1NThjYzIx
Li4yMDk4NGQzNTYzZWZhZWEzMTM0ZThhZmNmYzM3NWRlZThkZWIyZjI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5LmgKQEAgLTI2LDQ5ICsyNiwzNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIE1lZGlhUXVlcnlfaAotI2RlZmluZSBNZWRpYVF1ZXJ5X2gKKyNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBN
ZWRpYVF1ZXJ5RXhwOwogCiBjbGFzcyBNZWRpYVF1ZXJ5IHsKICAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKIHB1YmxpYzoKLSAgICBlbnVtIFJlc3RyaWN0b3IgewotICAgICAgICBPbmx5LCBO
b3QsIE5vbmUKLSAgICB9OworICAgIGVudW0gUmVzdHJpY3RvciB7IE9ubHksIE5vdCwgTm9uZSB9
OwogCi0gICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlFeHA+PiBF
eHByZXNzaW9uVmVjdG9yOwotCi0gICAgTWVkaWFRdWVyeShSZXN0cmljdG9yLCBjb25zdCBTdHJp
bmcmIG1lZGlhVHlwZSwgc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVk
aWFRdWVyeUV4cD4+PiBleHBycyk7Ci0gICAgTWVkaWFRdWVyeShjb25zdCBNZWRpYVF1ZXJ5Jik7
Ci0gICAgfk1lZGlhUXVlcnkoKTsKKyAgICBNZWRpYVF1ZXJ5KFJlc3RyaWN0b3IsIGNvbnN0IFN0
cmluZyYgbWVkaWFUeXBlLCBWZWN0b3I8TWVkaWFRdWVyeUV4cHJlc3Npb24+JiYpOwogCiAgICAg
UmVzdHJpY3RvciByZXN0cmljdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZXN0cmljdG9yOyB9Ci0g
ICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5RXhwPj4mIGV4cHJlc3Np
b25zKCkgY29uc3QgeyByZXR1cm4gKm1fZXhwcmVzc2lvbnM7IH0KLSAgICBTdHJpbmcgbWVkaWFU
eXBlKCkgY29uc3QgeyByZXR1cm4gbV9tZWRpYVR5cGU7IH0KLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgTWVkaWFRdWVyeSYgb3RoZXIpIGNvbnN0OwotICAgIFN0cmluZyBjc3NUZXh0KCkgY29u
c3Q7CisgICAgY29uc3QgVmVjdG9yPE1lZGlhUXVlcnlFeHByZXNzaW9uPiYgZXhwcmVzc2lvbnMo
KSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb25zOyB9CisgICAgY29uc3QgU3RyaW5nJiBtZWRp
YVR5cGUoKSBjb25zdCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQogICAgIGJvb2wgaWdub3JlZCgp
IGNvbnN0IHsgcmV0dXJuIG1faWdub3JlZDsgfQogCi0gICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlh
UXVlcnk+IGNvcHkoKSBjb25zdCB7IHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPE1lZGlhUXVlcnk+
KCp0aGlzKTsgfQorICAgIGNvbnN0IFN0cmluZyYgY3NzVGV4dCgpIGNvbnN0OwogCi0gcHJpdmF0
ZToKLSAgICBSZXN0cmljdG9yIG1fcmVzdHJpY3RvcjsKLSAgICBTdHJpbmcgbV9tZWRpYVR5cGU7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEV4cHJlc3Npb25WZWN0b3I+IG1fZXhwcmVzc2lvbnM7Ci0g
ICAgYm9vbCBtX2lnbm9yZWQ7Ci0gICAgU3RyaW5nIG1fc2VyaWFsaXphdGlvbkNhY2hlOworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5JiBvdGhlcikgY29uc3Q7CiAKK3ByaXZh
dGU6CiAgICAgU3RyaW5nIHNlcmlhbGl6ZSgpIGNvbnN0OworCisgICAgUmVzdHJpY3RvciBtX3Jl
c3RyaWN0b3I7CisgICAgU3RyaW5nIG1fbWVkaWFUeXBlOworICAgIFZlY3RvcjxNZWRpYVF1ZXJ5
RXhwcmVzc2lvbj4gbV9leHByZXNzaW9uczsKKyAgICBib29sIG1faWdub3JlZCB7IGZhbHNlIH07
CisgICAgbXV0YWJsZSBTdHJpbmcgbV9zZXJpYWxpemF0aW9uQ2FjaGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1
ZXJ5RXZhbHVhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9y
LmNwcAppbmRleCBmZGNlODlhZTMwYzI3NjE2ZjkxYzk1ODdmN2ZhMjFkYTVkYWM2NjZkLi4zNDE2
NjM4YzI2OTQ0ZjUwZjkyYWYxMmNjOWFmMWYyNjk2ZWNlMTliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuY3BwCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSAi
TWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRlICJNZWRpYUxpc3QuaCIKICNpbmNsdWRlICJN
ZWRpYVF1ZXJ5LmgiCi0jaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgogI2luY2x1ZGUgIk5vZGVS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNjcmVl
bi5oIgpAQCAtNTgsNDIgKzU3LDQwIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcg
bmFtZXNwYWNlIE1lZGlhRmVhdHVyZU5hbWVzOwotCiBlbnVtIE1lZGlhRmVhdHVyZVByZWZpeCB7
IE1pblByZWZpeCwgTWF4UHJlZml4LCBOb1ByZWZpeCB9OwogCi10eXBlZGVmIGJvb2wgKCpFdmFs
RnVuYykoQ1NTVmFsdWUqLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUq
LCBNZWRpYUZlYXR1cmVQcmVmaXgpOwotdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwq
LCBFdmFsRnVuYz4gRnVuY3Rpb25NYXA7Ci1zdGF0aWMgRnVuY3Rpb25NYXAqIGdGdW5jdGlvbk1h
cDsKK3R5cGVkZWYgYm9vbCAoKk1lZGlhUXVlcnlGdW5jdGlvbikoQ1NTVmFsdWUqLCBjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXgpOwor
dHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmluZ0ltcGwqLCBNZWRpYVF1ZXJ5RnVuY3Rpb24+IE1l
ZGlhUXVlcnlGdW5jdGlvbk1hcDsKIAotLyoKLSAqIEZJWE1FOiBmb2xsb3dpbmcgbWVkaWEgZmVh
dHVyZXMgYXJlIG5vdCBpbXBsZW1lbnRlZDogc2NhbgotICoKLSAqIHNjYW46IFRoZSAic2NhbiIg
bWVkaWEgZmVhdHVyZSBkZXNjcmliZXMgdGhlIHNjYW5uaW5nIHByb2Nlc3Mgb2YKLSAqIHR2IG91
dHB1dCBkZXZpY2VzLiBJdCdzIHVua25vd24gaG93IHRvIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRp
b24gZnJvbQotICogdGhlIHBsYXRmb3JtCi0gKi8KK3N0YXRpYyBib29sIGlzVmlld3BvcnREZXBl
bmRlbnQoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUpCit7CisgICAgcmV0dXJuIG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lkdGgKKyAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5XaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkhlaWdodAorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4SGVpZ2h0CisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4QXNwZWN0UmF0aW87Cit9CiAKIE1l
ZGlhUXVlcnlFdmFsdWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoYm9vbCBtZWRpYUZlYXR1cmVS
ZXN1bHQpCi0gICAgOiBtX2V4cFJlc3VsdChtZWRpYUZlYXR1cmVSZXN1bHQpCisgICAgOiBtX2Zh
bGxiYWNrUmVzdWx0KG1lZGlhRmVhdHVyZVJlc3VsdCkKIHsKIH0KIAogTWVkaWFRdWVyeUV2YWx1
YXRvcjo6TWVkaWFRdWVyeUV2YWx1YXRvcihjb25zdCBTdHJpbmcmIGFjY2VwdGVkTWVkaWFUeXBl
LCBib29sIG1lZGlhRmVhdHVyZVJlc3VsdCkKICAgICA6IG1fbWVkaWFUeXBlKGFjY2VwdGVkTWVk
aWFUeXBlKQotICAgICwgbV9leHBSZXN1bHQobWVkaWFGZWF0dXJlUmVzdWx0KQorICAgICwgbV9m
YWxsYmFja1Jlc3VsdChtZWRpYUZlYXR1cmVSZXN1bHQpCiB7CiB9CiAKLU1lZGlhUXVlcnlFdmFs
dWF0b3I6Ok1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5nJiBhY2NlcHRlZE1lZGlhVHlw
ZSwgRnJhbWUqIGZyYW1lLCBjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCitNZWRpYVF1ZXJ5RXZh
bHVhdG9yOjpNZWRpYVF1ZXJ5RXZhbHVhdG9yKGNvbnN0IFN0cmluZyYgYWNjZXB0ZWRNZWRpYVR5
cGUsIERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIHN0eWxlKQogICAgIDog
bV9tZWRpYVR5cGUoYWNjZXB0ZWRNZWRpYVR5cGUpCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQorICAg
ICwgbV9mcmFtZShkb2N1bWVudC5mcmFtZSgpKQogICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICAs
IG1fZXhwUmVzdWx0KGZhbHNlKSAvLyBkb2Vzbid0IG1hdHRlciB3aGVuIHdlIGhhdmUgbV9mcmFt
ZSBhbmQgbV9zdHlsZQotewotfQotCi1NZWRpYVF1ZXJ5RXZhbHVhdG9yOjp+TWVkaWFRdWVyeUV2
YWx1YXRvcigpCiB7CiB9CiAKQEAgLTExOCw4MiArMTE1LDc0IEBAIHN0YXRpYyBib29sIGFwcGx5
UmVzdHJpY3RvcihNZWRpYVF1ZXJ5OjpSZXN0cmljdG9yIHIsIGJvb2wgdmFsdWUpCiAgICAgcmV0
dXJuIHIgPT0gTWVkaWFRdWVyeTo6Tm90ID8gIXZhbHVlIDogdmFsdWU7CiB9CiAKLWJvb2wgTWVk
aWFRdWVyeUV2YWx1YXRvcjo6ZXZhbChjb25zdCBNZWRpYVF1ZXJ5U2V0KiBxdWVyeVNldCwgU3R5
bGVSZXNvbHZlciogc3R5bGVSZXNvbHZlcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRv
cjo6ZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYgcXVlcnlTZXQsIFN0eWxlUmVzb2x2ZXIq
IHN0eWxlUmVzb2x2ZXIpIGNvbnN0CiB7Ci0gICAgaWYgKCFxdWVyeVNldCkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0KLSAgICBhdXRvJiBxdWVyaWVzID0gcXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCk7
CisgICAgYXV0byYgcXVlcmllcyA9IHF1ZXJ5U2V0LnF1ZXJ5VmVjdG9yKCk7CiAgICAgaWYgKCFx
dWVyaWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGVtcHR5IHF1ZXJ5IGxpc3Qg
ZXZhbHVhdGVzIHRvIHRydWUKIAogICAgIC8vIGl0ZXJhdGUgb3ZlciBxdWVyaWVzLCBzdG9wIGlm
IGFueSBvZiB0aGVtIGV2YWwgdG8gdHJ1ZSAoT1Igc2VtYW50aWNzKQogICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBxdWVyaWVzLnNpemUoKSAmJiAh
cmVzdWx0OyArK2kpIHsKLSAgICAgICAgTWVkaWFRdWVyeSogcXVlcnkgPSBxdWVyaWVzW2ldLmdl
dCgpOworICAgICAgICBhdXRvJiBxdWVyeSA9IHF1ZXJpZXNbaV07CiAKLSAgICAgICAgaWYgKHF1
ZXJ5LT5pZ25vcmVkKCkgfHwgKCFxdWVyeS0+ZXhwcmVzc2lvbnMoKS5zaXplKCkgJiYgcXVlcnkt
Pm1lZGlhVHlwZSgpLmlzRW1wdHkoKSkpCisgICAgICAgIGlmIChxdWVyeS5pZ25vcmVkKCkgfHwg
KCFxdWVyeS5leHByZXNzaW9ucygpLnNpemUoKSAmJiBxdWVyeS5tZWRpYVR5cGUoKS5pc0VtcHR5
KCkpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlhVHlwZU1hdGNo
KHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0g
cXVlcnktPmV4cHJlc3Npb25zKCk7Ci0gICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggZXhw
cmVzc2lvbnMsIHN0b3AgaWYgYW55IG9mIHRoZW0gZXZhbCB0byBmYWxzZQotICAgICAgICAgICAg
Ly8gKEFORCBzZW1hbnRpY3MpCisgICAgICAgIGlmIChtZWRpYVR5cGVNYXRjaChxdWVyeS5tZWRp
YVR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0gcXVlcnkuZXhwcmVz
c2lvbnMoKTsKKyAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBleHByZXNzaW9ucywgc3Rv
cCBpZiBhbnkgb2YgdGhlbSBldmFsIHRvIGZhbHNlIChBTkQgc2VtYW50aWNzKQogICAgICAgICAg
ICAgc2l6ZV90IGogPSAwOwogICAgICAgICAgICAgZm9yICg7IGogPCBleHByZXNzaW9ucy5zaXpl
KCk7ICsraikgewotICAgICAgICAgICAgICAgIGJvb2wgZXhwclJlc3VsdCA9IGV2YWwoZXhwcmVz
c2lvbnMuYXQoaikuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGlmIChzdHlsZVJlc29sdmVyICYm
IGV4cHJlc3Npb25zLmF0KGopLT5pc1ZpZXdwb3J0RGVwZW5kZW50KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXItPmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3Vs
dChleHByZXNzaW9ucy5hdChqKS5nZXQoKSwgZXhwclJlc3VsdCk7Ci0gICAgICAgICAgICAgICAg
aWYgKCFleHByUmVzdWx0KQorICAgICAgICAgICAgICAgIGJvb2wgZXhwcmVzc2lvblJlc3VsdCA9
IGV2YWx1YXRlKGV4cHJlc3Npb25zW2pdKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGVSZXNv
bHZlciAmJiBpc1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgp
KSkKKyAgICAgICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci0+YWRkVmlld3BvcnREZXBlbmRl
bnRNZWRpYVF1ZXJ5UmVzdWx0KGV4cHJlc3Npb25zW2pdLCBleHByZXNzaW9uUmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25SZXN1bHQpCiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBhc3N1bWUgdHJ1ZSBpZiB3
ZSBhcmUgYXQgdGhlIGVuZCBvZiB0aGUgbGlzdCwKICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBh
c3N1bWUgZmFsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS0+
cmVzdHJpY3RvcigpLCBleHByZXNzaW9ucy5zaXplKCkgPT0gaik7CisgICAgICAgICAgICByZXN1
bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnkucmVzdHJpY3RvcigpLCBleHByZXNzaW9ucy5zaXpl
KCkgPT0gaik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0
cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGZhbHNlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0cmljdG9yKCksIGZhbHNlKTsKICAgICB9CiAKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWxDaGVj
a2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhjb25zdCBNZWRpYVF1ZXJ5U2V0KiBxdWVyeVNl
dCwgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0Pj4mIHJlc3VsdHMpCiti
b29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIHF1
ZXJ5U2V0LCBWZWN0b3I8TWVkaWFRdWVyeVJlc3VsdD4mIHJlc3VsdHMpIGNvbnN0CiB7Ci0gICAg
aWYgKCFxdWVyeVNldCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBhdXRvJiBxdWVyaWVz
ID0gcXVlcnlTZXQtPnF1ZXJ5VmVjdG9yKCk7CisgICAgYXV0byYgcXVlcmllcyA9IHF1ZXJ5U2V0
LnF1ZXJ5VmVjdG9yKCk7CiAgICAgaWYgKCFxdWVyaWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcXVlcmllcy5zaXplKCkgJiYgIXJlc3VsdDsgKytpKSB7Ci0gICAgICAgIE1lZGlhUXVl
cnkqIHF1ZXJ5ID0gcXVlcmllc1tpXS5nZXQoKTsKKyAgICAgICAgYXV0byYgcXVlcnkgPSBxdWVy
aWVzW2ldOwogCi0gICAgICAgIGlmIChxdWVyeS0+aWdub3JlZCgpKQorICAgICAgICBpZiAocXVl
cnkuaWdub3JlZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKG1lZGlh
VHlwZU1hdGNoKHF1ZXJ5LT5tZWRpYVR5cGUoKSkpIHsKLSAgICAgICAgICAgIGF1dG8mIGV4cHJl
c3Npb25zID0gcXVlcnktPmV4cHJlc3Npb25zKCk7CisgICAgICAgIGlmIChtZWRpYVR5cGVNYXRj
aChxdWVyeS5tZWRpYVR5cGUoKSkpIHsKKyAgICAgICAgICAgIGF1dG8mIGV4cHJlc3Npb25zID0g
cXVlcnkuZXhwcmVzc2lvbnMoKTsKICAgICAgICAgICAgIHNpemVfdCBqID0gMDsKICAgICAgICAg
ICAgIGZvciAoOyBqIDwgZXhwcmVzc2lvbnMuc2l6ZSgpOyArK2opIHsKLSAgICAgICAgICAgICAg
ICBib29sIGV4cHJSZXN1bHQgPSBldmFsKGV4cHJlc3Npb25zLmF0KGopLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZXhwcmVzc2lvbnMuYXQoaiktPmlzVmlld3BvcnREZXBlbmRlbnQoKSkK
LSAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc3RkOjptYWtlX3VuaXF1ZTxNZWRp
YVF1ZXJ5UmVzdWx0PigqZXhwcmVzc2lvbnMuYXQoaiksIGV4cHJSZXN1bHQpKTsKLSAgICAgICAg
ICAgICAgICBpZiAoIWV4cHJSZXN1bHQpCisgICAgICAgICAgICAgICAgYm9vbCBleHByZXNzaW9u
UmVzdWx0ID0gZXZhbHVhdGUoZXhwcmVzc2lvbnNbal0pOworICAgICAgICAgICAgICAgIGlmIChp
c1ZpZXdwb3J0RGVwZW5kZW50KGV4cHJlc3Npb25zW2pdLm1lZGlhRmVhdHVyZSgpKSkKKyAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoeyBleHByZXNzaW9uc1tqXSwgZXhwcmVzc2lv
blJlc3VsdCB9KTsKKyAgICAgICAgICAgICAgICBpZiAoIWV4cHJlc3Npb25SZXN1bHQpCiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVzdWx0
ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LT5yZXN0cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUo
KSA9PSBqKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGFwcGx5UmVzdHJpY3RvcihxdWVyeS5yZXN0
cmljdG9yKCksIGV4cHJlc3Npb25zLnNpemUoKSA9PSBqKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICByZXN1bHQgPSBhcHBseVJlc3RyaWN0b3IocXVlcnktPnJlc3RyaWN0b3IoKSwgZmFs
c2UpOworICAgICAgICAgICAgcmVzdWx0ID0gYXBwbHlSZXN0cmljdG9yKHF1ZXJ5LnJlc3RyaWN0
b3IoKSwgZmFsc2UpOwogICAgIH0KIAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLXRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1ib29sIGNvbXBhcmVWYWx1ZShUIGEsIFQgYiwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVT4gYm9vbCBjb21wYXJlVmFs
dWUoVCBhLCBVIGIsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKICAgICBzd2l0Y2ggKG9wKSB7
CiAgICAgY2FzZSBNaW5QcmVmaXg6CkBAIC0yMDgsNDUgKzE5Nyw0OSBAQCBib29sIGNvbXBhcmVW
YWx1ZShUIGEsIFQgYiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogCiBzdGF0aWMgYm9vbCBjb21w
YXJlQXNwZWN0UmF0aW9WYWx1ZShDU1NWYWx1ZSogdmFsdWUsIGludCB3aWR0aCwgaW50IGhlaWdo
dCwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmIChpczxDU1NBc3BlY3RSYXRpb1Zh
bHVlPigqdmFsdWUpKSB7Ci0gICAgICAgIENTU0FzcGVjdFJhdGlvVmFsdWUmIGFzcGVjdFJhdGlv
ID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZhbHVlKTsKLSAgICAgICAgcmV0dXJu
IGNvbXBhcmVWYWx1ZSh3aWR0aCAqIHN0YXRpY19jYXN0PGludD4oYXNwZWN0UmF0aW8uZGVub21p
bmF0b3JWYWx1ZSgpKSwgaGVpZ2h0ICogc3RhdGljX2Nhc3Q8aW50Pihhc3BlY3RSYXRpby5udW1l
cmF0b3JWYWx1ZSgpKSwgb3ApOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWlzPENTU0FzcGVjdFJhdGlvVmFsdWU+KHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGF1dG8mIGFzcGVjdFJhdGlvID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1ZT4oKnZh
bHVlKTsKKyAgICByZXR1cm4gY29tcGFyZVZhbHVlKHdpZHRoICogYXNwZWN0UmF0aW8uZGVub21p
bmF0b3JWYWx1ZSgpLCBoZWlnaHQgKiBhc3BlY3RSYXRpby5udW1lcmF0b3JWYWx1ZSgpLCBvcCk7
CiB9CiAKLXN0YXRpYyBib29sIG51bWJlclZhbHVlKENTU1ZhbHVlKiB2YWx1ZSwgZmxvYXQmIHJl
c3VsdCkKK3N0YXRpYyBPcHRpb25hbDxkb3VibGU+IGRvdWJsZVZhbHVlKENTU1ZhbHVlKiB2YWx1
ZSkKIHsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkgJiYgZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuaXNOdW1iZXIoKSkgewotICAgICAgICByZXN1bHQg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRGbG9hdFZhbHVlKENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkg
fHwgIWRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpCisgICAg
ICAgIHJldHVybiBOdWxsb3B0OworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKnZhbHVlKS5nZXREb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7
CiB9CiAKLXN0YXRpYyBib29sIGNvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVh
dHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHplcm9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpbnQgYml0c1BlckNvbXBvbmVudCA9IHNj
cmVlbkRlcHRoUGVyQ29tcG9uZW50KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZpZXcoKSk7
Ci0gICAgZmxvYXQgbnVtYmVyOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIG51bWJl
clZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZShiaXRzUGVyQ29tcG9uZW50LCBz
dGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLQotICAgIHJldHVybiBiaXRzUGVyQ29tcG9u
ZW50ICE9IDA7CisgICAgYXV0byBudW1lcmljVmFsdWUgPSBkb3VibGVWYWx1ZSh2YWx1ZSk7Cisg
ICAgcmV0dXJuIG51bWVyaWNWYWx1ZSAmJiBjb21wYXJlVmFsdWUoMCwgbnVtZXJpY1ZhbHVlLnZh
bHVlKCksIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1l
KiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgb25lRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgLy8gRklYTUU6IEl0J3Mg
dW5rbm93biBob3cgdG8gcmV0cmlldmUgdGhlIGluZm9ybWF0aW9uIGlmIHRoZSBkaXNwbGF5IG1v
ZGUgaXMgaW5kZXhlZAotICAgIC8vIEFzc3VtZSB3ZSBkb24ndCBzdXBwb3J0IGluZGV4ZWQgZGlz
cGxheS4KICAgICBpZiAoIXZhbHVlKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGF1dG8gbnVtZXJpY1ZhbHVlID0gZG91YmxlVmFsdWUodmFsdWUpOwor
ICAgIHJldHVybiBudW1lcmljVmFsdWUgJiYgY29tcGFyZVZhbHVlKDEsIG51bWVyaWNWYWx1ZS52
YWx1ZSgpLCBvcCk7Cit9CiAKLSAgICBmbG9hdCBudW1iZXI7Ci0gICAgcmV0dXJuIG51bWJlclZh
bHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZSgwLCBzdGF0aWNfY2FzdDxpbnQ+KG51
bWJlciksIG9wKTsKK3N0YXRpYyBib29sIGNvbG9yRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1
cmVQcmVmaXggb3ApCit7CisgICAgaW50IGJpdHNQZXJDb21wb25lbnQgPSBzY3JlZW5EZXB0aFBl
ckNvbXBvbmVudChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpOworICAgIGF1dG8gbnVtZXJpY1Zh
bHVlID0gZG91YmxlVmFsdWUodmFsdWUpOworICAgIGlmICghbnVtZXJpY1ZhbHVlKQorICAgICAg
ICByZXR1cm4gYml0c1BlckNvbXBvbmVudDsKKyAgICByZXR1cm4gY29tcGFyZVZhbHVlKGJpdHNQ
ZXJDb21wb25lbnQsIG51bWVyaWNWYWx1ZS52YWx1ZSgpLCBvcCk7Cit9CisKK3N0YXRpYyBib29s
IGNvbG9ySW5kZXhFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3sKKyAgICAvLyBB
bHdheXMgcmV0dXJuIGZhbHNlIGZvciBpbmRleGVkIGRpc3BsYXkuCisgICAgcmV0dXJuIHplcm9F
dmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBjb2xvcl9nYW11dE1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBjb2xvckdh
bXV0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7CiAgICAgaWYgKCF2YWx1
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTUsMTIgKzI0OCwxMCBAQCBzdGF0aWMgYm9v
bCBjb2xvcl9nYW11dE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcgogICAgIGNhc2UgQ1NTVmFsdWVTcmdiOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBjYXNlIENTU1ZhbHVlUDM6Ci0gICAgICAgIC8vIEZJWE1FOiBGb3IgdGhlIG1vbWVu
dCB3ZSdsbCBqdXN0IGFzc3VtZSBhbiAiZXh0ZW5kZWQKLSAgICAgICAgLy8gY29sb3IiIGRpc3Bs
YXkgaXMgYXQgbGVhc3QgYXMgZ29vZCBhcyBQMy4KLSAgICAgICAgcmV0dXJuIHNjcmVlblN1cHBv
cnRzRXh0ZW5kZWRDb2xvcihmcmFtZS0+cGFnZSgpLT5tYWluRnJhbWUoKS52aWV3KCkpOworICAg
ICAgICAvLyBGSVhNRTogRm9yIHRoZSBtb21lbnQgd2UganVzdCBhc3N1bWUgYW55ICJleHRlbmRl
ZCBjb2xvciIgZGlzcGxheSBpcyBhdCBsZWFzdCBhcyBnb29kIGFzIFAzLgorICAgICAgICByZXR1
cm4gc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKGZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSk7
CiAgICAgY2FzZSBDU1NWYWx1ZVJlYzIwMjA6Ci0gICAgICAgIC8vIEZJWE1FOiBBdCBzb21lIHBv
aW50IHdlIHNob3VsZCBzdGFydCBkZXRlY3RpbmcgZGlzcGxheXMgdGhhdAotICAgICAgICAvLyBz
dXBwb3J0IG1vcmUgY29sb3JzLgorICAgICAgICAvLyBGSVhNRTogQXQgc29tZSBwb2ludCB3ZSBz
aG91bGQgc3RhcnQgZGV0ZWN0aW5nIGRpc3BsYXlzIHRoYXQgc3VwcG9ydCBtb3JlIGNvbG9ycy4K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjY4LDkwICsyNTksODIgQEAgc3RhdGljIGJvb2wgY29sb3JfZ2FtdXRN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXIK
ICAgICB9CiB9CiAKLXN0YXRpYyBib29sIG1vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgbW9u
b2Nocm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
IG9wKQogewotICAgIGlmICghc2NyZWVuSXNNb25vY2hyb21lKGZyYW1lLT5wYWdlKCktPm1haW5G
cmFtZSgpLnZpZXcoKSkpIHsKLSAgICAgICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgICAgICBmbG9h
dCBudW1iZXI7Ci0gICAgICAgICAgICByZXR1cm4gbnVtYmVyVmFsdWUodmFsdWUsIG51bWJlcikg
JiYgY29tcGFyZVZhbHVlKDAsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sb3JNZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIG9wKTsKKyAgICBpZiAo
IXNjcmVlbklzTW9ub2Nocm9tZShmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpKQorICAgICAgICBy
ZXR1cm4gemVyb0V2YWx1YXRlKHZhbHVlLCBvcCk7CisgICAgcmV0dXJuIGNvbG9yRXZhbHVhdGUo
dmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBpbnZl
cnRlZF9jb2xvcnNNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgaW52ZXJ0ZWRDb2xvcnNFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKICAg
ICBib29sIGlzSW52ZXJ0ZWQgPSBzY3JlZW5IYXNJbnZlcnRlZENvbG9ycygpOwotCiAgICAgaWYg
KCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIGlzSW52ZXJ0ZWQ7Ci0KLSAgICBjb25zdCBDU1NWYWx1
ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgp
OwotICAgIHJldHVybiAoaXNJbnZlcnRlZCAmJiBpZCA9PSBDU1NWYWx1ZUludmVydGVkKSB8fCAo
IWlzSW52ZXJ0ZWQgJiYgaWQgPT0gQ1NTVmFsdWVOb25lKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpID09IChpc0ludmVydGVkID8g
Q1NTVmFsdWVJbnZlcnRlZCA6IENTU1ZhbHVlTm9uZSk7CiB9CiAKLXN0YXRpYyBib29sIG9yaWVu
dGF0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRp
YyBib29sIG9yaWVudGF0aW9uRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7
Ci0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHZp
ZXcgPSBmcmFtZS52aWV3KCk7CiAgICAgaWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpbnQgd2lkdGggPSB2aWV3LT5sYXlvdXRXaWR0aCgpOwotICAgIGludCBoZWlnaHQg
PSB2aWV3LT5sYXlvdXRIZWlnaHQoKTsKLSAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSkgewotICAgICAgICBjb25zdCBDU1NWYWx1ZUlEIGlkID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOwotICAgICAgICBpZiAod2lkdGggPiBoZWln
aHQpIC8vIFNxdWFyZSB2aWV3cG9ydCBpcyBwb3J0cmFpdC4KLSAgICAgICAgICAgIHJldHVybiBD
U1NWYWx1ZUxhbmRzY2FwZSA9PSBpZDsKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlUG9ydHJhaXQg
PT0gaWQ7CisgICAgYXV0byB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRoKCk7CisgICAgYXV0byBo
ZWlnaHQgPSB2aWV3LT5sYXlvdXRIZWlnaHQoKTsKKworICAgIGlmICghaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKSkgeworICAgICAgICAvLyBFeHByZXNzaW9uIChvcmllbnRhdGlvbikgZXZh
bHVhdGVzIHRvIHRydWUgaWYgd2lkdGggYW5kIGhlaWdodCA+PSAwLgorICAgICAgICByZXR1cm4g
aGVpZ2h0ID49IDAgJiYgd2lkdGggPj0gMDsKICAgICB9CiAKLSAgICAvLyBFeHByZXNzaW9uIChv
cmllbnRhdGlvbikgZXZhbHVhdGVzIHRvIHRydWUgaWYgd2lkdGggYW5kIGhlaWdodCA+PSAwLgot
ICAgIHJldHVybiBoZWlnaHQgPj0gMCAmJiB3aWR0aCA+PSAwOworICAgIGF1dG8ga2V5d29yZCA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKyAgICBp
ZiAod2lkdGggPiBoZWlnaHQpIC8vIFNxdWFyZSB2aWV3cG9ydCBpcyBwb3J0cmFpdC4KKyAgICAg
ICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVMYW5kc2NhcGU7CisgICAgcmV0dXJuIGtleXdv
cmQgPT0gQ1NTVmFsdWVQb3J0cmFpdDsKIH0KIAotc3RhdGljIGJvb2wgYXNwZWN0X3JhdGlvTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29s
IGFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0g
ICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKLSAgICBpZiAoIXZpZXcpCisgICAg
Ly8gKHssbWluLSxtYXgtfWFzcGVjdC1yYXRpbykKKyAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBh
IGRldmljZSwgaXRzIGFzcGVjdCByYXRpbyBpcyBub24temVybworICAgIGlmICghdmFsdWUpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKHZhbHVlKQotICAgICAgICByZXR1cm4gY29t
cGFyZUFzcGVjdFJhdGlvVmFsdWUodmFsdWUsIHZpZXctPmxheW91dFdpZHRoKCksIHZpZXctPmxh
eW91dEhlaWdodCgpLCBvcCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUudmlldygpOwor
ICAgIGlmICghdmlldykKKyAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAvLyAoeyxtaW4tLG1h
eC19YXNwZWN0LXJhdGlvKQotICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZlIGEgZGV2aWNlLCBpdHMg
YXNwZWN0IHJhdGlvIGlzIG5vbi16ZXJvCi0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGNv
bXBhcmVBc3BlY3RSYXRpb1ZhbHVlKHZhbHVlLCB2aWV3LT5sYXlvdXRXaWR0aCgpLCB2aWV3LT5s
YXlvdXRIZWlnaHQoKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBkZXZpY2VfYXNwZWN0X3JhdGlv
TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBi
b29sIGRldmljZUFzcGVjdFJhdGlvRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgg
b3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBzZyA9IHNjcmVlblJl
Y3QoZnJhbWUtPnBhZ2UoKS0+bWFpbkZyYW1lKCkudmlldygpKTsKLSAgICAgICAgcmV0dXJuIGNv
bXBhcmVBc3BlY3RSYXRpb1ZhbHVlKHZhbHVlLCBzdGF0aWNfY2FzdDxpbnQ+KHNnLndpZHRoKCkp
LCBzdGF0aWNfY2FzdDxpbnQ+KHNnLmhlaWdodCgpKSwgb3ApOwotICAgIH0KLQogICAgIC8vICh7
LG1pbi0sbWF4LX1kZXZpY2UtYXNwZWN0LXJhdGlvKQogICAgIC8vIGFzc3VtZSBpZiB3ZSBoYXZl
IGEgZGV2aWNlLCBpdHMgYXNwZWN0IHJhdGlvIGlzIG5vbi16ZXJvCi0gICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIHNpemUg
PSBzY3JlZW5SZWN0KGZyYW1lLm1haW5GcmFtZSgpLnZpZXcoKSkuc2l6ZSgpOworICAgIHJldHVy
biBjb21wYXJlQXNwZWN0UmF0aW9WYWx1ZSh2YWx1ZSwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1
ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCBldmFs
dWF0ZVJlc29sdXRpb24oQ1NTVmFsdWUqIHZhbHVlLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKIHsKICAgICAvLyBGSVhNRTogUG9zc2libGUgaGFuZGxlIG90aGVyIG1lZGlh
IHR5cGVzIHRoYW4gJ3NjcmVlbicgYW5kICdwcmludCcuCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWUtPnZpZXcoKTsKKyAgICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS52aWV3KCk7CiAgICAg
aWYgKCF2aWV3KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IDA7CisKICAgICAvLyBUaGlzIGNoZWNrcyB0aGUgYWN0dWFsIG1lZGlhIHR5cGUg
YXBwbGllZCB0byB0aGUgZG9jdW1lbnQsIGFuZCB3ZSBrbm93CiAgICAgLy8gdGhpcyBtZXRob2Qg
b25seSBnb3QgY2FsbGVkIGlmIHRoaXMgbWVkaWEgdHlwZSBtYXRjaGVzIHRoZSBvbmUgZGVmaW5l
ZAogICAgIC8vIGluIHRoZSBxdWVyeS4gVGh1cywgaWYgaWYgdGhlIGRvY3VtZW50J3MgbWVkaWEg
dHlwZSBpcyAicHJpbnQiLCB0aGUKICAgICAvLyBtZWRpYSB0eXBlIG9mIHRoZSBxdWVyeSB3aWxs
IGVpdGhlciBiZSAicHJpbnQiIG9yICJhbGwiLgogICAgIFN0cmluZyBtZWRpYVR5cGUgPSB2aWV3
LT5tZWRpYVR5cGUoKTsKICAgICBpZiAoZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UobWVk
aWFUeXBlLCAic2NyZWVuIikpCi0gICAgICAgIGRldmljZVNjYWxlRmFjdG9yID0gZnJhbWUtPnBh
Z2UoKS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgZGV2aWNlU2NhbGVGYWN0b3IgPSBm
cmFtZS5wYWdlKCkgPyBmcmFtZS5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkgOiAxOwogICAg
IGVsc2UgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKG1lZGlhVHlwZSwgInByaW50
IikpIHsKICAgICAgICAgLy8gVGhlIHJlc29sdXRpb24gb2YgaW1hZ2VzIHdoaWxlIHByaW50aW5n
IHNob3VsZCBub3QgZGVwZW5kIG9uIHRoZSBkcGkKICAgICAgICAgLy8gb2YgdGhlIHNjcmVlbi4g
VW50aWwgd2Ugc3VwcG9ydCBwcm9wZXIgd2F5cyBvZiBxdWVyeWluZyB0aGlzIGluZm8KQEAgLTM2
MiwyMiArMzQ1LDIyIEBAIHN0YXRpYyBib29sIGV2YWxSZXNvbHV0aW9uKENTU1ZhbHVlKiB2YWx1
ZSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiAgICAgaWYgKCF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuICEhZGV2aWNlU2NhbGVGYWN0b3I7CiAKLSAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHJl
c29sdXRpb24gPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKTsKKyAgICBhdXRv
JiByZXNvbHV0aW9uID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CiAgICAg
cmV0dXJuIGNvbXBhcmVWYWx1ZShkZXZpY2VTY2FsZUZhY3RvciwgcmVzb2x1dGlvbi5pc051bWJl
cigpID8gcmVzb2x1dGlvbi5nZXRGbG9hdFZhbHVlKCkgOiByZXNvbHV0aW9uLmdldEZsb2F0VmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCBk
ZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlICp2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJl
Zml4IG9wKQorc3RhdGljIGJvb2wgZGV2aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2
YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIHJldHVybiAoIXZhbHVlIHx8IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzTnVtYmVyKCkpICYmIGV2YWxSZXNvbHV0aW9uKHZh
bHVlLCBmcmFtZSwgb3ApOworICAgIHJldHVybiAoIXZhbHVlIHx8IChpczxDU1NQcmltaXRpdmVW
YWx1ZT4oKnZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5pc051
bWJlcigpKSkgJiYgZXZhbHVhdGVSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOwogfQogCi1z
dGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVy
ZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHJlc29sdXRpb25FdmFsdWF0ZShDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBGcmFtZSYgZnJhbWUsIE1lZGlh
RmVhdHVyZVByZWZpeCBvcCkKIHsKICNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkK
LSAgICByZXR1cm4gKCF2YWx1ZSB8fCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KS5pc1Jlc29sdXRpb24oKSkgJiYgZXZhbFJlc29sdXRpb24odmFsdWUsIGZyYW1lLCBvcCk7Cisg
ICAgcmV0dXJuICghdmFsdWUgfHwgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpICYmIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmlzUmVzb2x1dGlvbigpKSkgJiYgZXZh
bHVhdGVSZXNvbHV0aW9uKHZhbHVlLCBmcmFtZSwgb3ApOwogI2Vsc2UKICAgICBVTlVTRURfUEFS
QU0odmFsdWUpOwogICAgIFVOVVNFRF9QQVJBTShmcmFtZSk7CkBAIC0zODYsMjIgKzM2OSwxNyBA
QCBzdGF0aWMgYm9vbCByZXNvbHV0aW9uTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVycwogI2VuZGlmCiB9CiAKLXN0YXRpYyBib29sIGdyaWRN
ZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgZ3Jp
ZEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIC8vIGlmIG91dHB1dCBk
ZXZpY2UgaXMgYml0bWFwLCBncmlkOiAwID09IHRydWUKLSAgICAvLyBhc3N1bWUgd2UgaGF2ZSBi
aXRtYXAgZGV2aWNlCi0gICAgZmxvYXQgbnVtYmVyOwotICAgIGlmICh2YWx1ZSAmJiBudW1iZXJW
YWx1ZSh2YWx1ZSwgbnVtYmVyKSkKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVWYWx1ZShzdGF0aWNf
Y2FzdDxpbnQ+KG51bWJlciksIDAsIG9wKTsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJu
IHplcm9FdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCiBzdGF0aWMgYm9vbCBjb21wdXRlTGVuZ3Ro
KENTU1ZhbHVlKiB2YWx1ZSwgYm9vbCBzdHJpY3QsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBpbnQmIHJlc3VsdCkKIHsKLSAgICBpZiAoIWlzPENTU1By
aW1pdGl2ZVZhbHVlPigqdmFsdWUpKQorICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSk7CisgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVl
KTsKIAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7CiAgICAgICAgIHJlc3Vs
dCA9IHByaW1pdGl2ZVZhbHVlLmdldEludFZhbHVlKCk7CkBAIC00MTYsMjcxICszOTQsMjI3IEBA
IHN0YXRpYyBib29sIGNvbXB1dGVMZW5ndGgoQ1NTVmFsdWUqIHZhbHVlLCBib29sIHN0cmljdCwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMg
Ym9vbCBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUs
IE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGRldmljZUhlaWdodEV2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlm
ICh2YWx1ZSkgewotICAgICAgICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdl
KCktPm1haW5GcmFtZSgpLnZpZXcoKSk7Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIGxv
bmcgaGVpZ2h0ID0gc2cuaGVpZ2h0KCk7Ci0gICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHZh
bHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252ZXJzaW9uRGF0YSwg
bGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUoc3RhdGljX2Nhc3Q8aW50PihoZWlnaHQpLCBsZW5ndGgs
IG9wKTsKLSAgICB9CiAgICAgLy8gKHssbWluLSxtYXgtfWRldmljZS1oZWlnaHQpCiAgICAgLy8g
YXNzdW1lIGlmIHdlIGhhdmUgYSBkZXZpY2UsIGFzc3VtZSBub24temVybwotICAgIHJldHVybiB0
cnVlOworICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGludCBsZW5n
dGg7CisgICAgYXV0byBoZWlnaHQgPSBzY3JlZW5SZWN0KGZyYW1lLm1haW5GcmFtZSgpLnZpZXco
KSkuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS5kb2N1
bWVudCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFy
ZVZhbHVlKGhlaWdodCwgbGVuZ3RoLCBvcCk7CiB9CiAKLXN0YXRpYyBib29sIGRldmljZV93aWR0
aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVm
aXggb3ApCitzdGF0aWMgYm9vbCBkZXZpY2VXaWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwg
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAgIGlmICh2YWx1ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgc2cgPSBzY3JlZW5SZWN0KGZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpLnZp
ZXcoKSk7Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIGxvbmcgd2lkdGggPSBzZy53aWR0
aCgpOwotICAgICAgICByZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVu
dCgpLT5pblF1aXJrc01vZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZh
bHVlKHN0YXRpY19jYXN0PGludD4od2lkdGgpLCBsZW5ndGgsIG9wKTsKLSAgICB9CiAgICAgLy8g
KHssbWluLSxtYXgtfWRldmljZS13aWR0aCkKICAgICAvLyBhc3N1bWUgaWYgd2UgaGF2ZSBhIGRl
dmljZSwgYXNzdW1lIG5vbi16ZXJvCi0gICAgcmV0dXJuIHRydWU7CisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW50IGxlbmd0aDsKKyAgICBhdXRvIHdpZHRoID0g
c2NyZWVuUmVjdChmcmFtZS5tYWluRnJhbWUoKS52aWV3KCkpLndpZHRoKCk7CisgICAgcmV0dXJu
IGNvbXB1dGVMZW5ndGgodmFsdWUsICFmcmFtZS5kb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSwg
Y29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKHdpZHRoLCBsZW5ndGgsIG9w
KTsKIH0KIAotc3RhdGljIGJvb2wgaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFs
dWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFt
ZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIGhlaWdodEV2YWx1
YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewotICAg
IEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3ID0g
ZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGludCBoZWlnaHQgPSB2aWV3LT5sYXlvdXRIZWlnaHQo
KTsKLSAgICAgICAgaWYgKFJlbmRlclZpZXcqIHJlbmRlclZpZXcgPSBmcmFtZS0+ZG9jdW1lbnQo
KS0+cmVuZGVyVmlldygpKQotICAgICAgICAgICAgaGVpZ2h0ID0gYWRqdXN0Rm9yQWJzb2x1dGVa
b29tKGhlaWdodCwgKnJlbmRlclZpZXcpOwotICAgICAgICBpbnQgbGVuZ3RoOwotICAgICAgICBy
ZXR1cm4gY29tcHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLT5kb2N1bWVudCgpLT5pblF1aXJrc01v
ZGUoKSwgY29udmVyc2lvbkRhdGEsIGxlbmd0aCkgJiYgY29tcGFyZVZhbHVlKGhlaWdodCwgbGVu
Z3RoLCBvcCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHZpZXctPmxheW91dEhlaWdodCgpICE9IDA7
CisgICAgaW50IGhlaWdodCA9IHZpZXctPmxheW91dEhlaWdodCgpOworICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybiBoZWlnaHQ7CisgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFt
ZS5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgICAgIGhlaWdodCA9IGFkanVzdEZvckFi
c29sdXRlWm9vbShoZWlnaHQsICpyZW5kZXJWaWV3KTsKKyAgICBpbnQgbGVuZ3RoOworICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUuZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCksIGNvbnZlcnNpb25EYXRhLCBsZW5ndGgpICYmIGNvbXBhcmVWYWx1ZShoZWlnaHQsIGxlbmd0
aCwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB3aWR0aE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUq
IHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwg
RnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCitzdGF0aWMgYm9vbCB3aWR0aEV2
YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQogewot
ICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgRnJhbWVWaWV3KiB2aWV3
ID0gZnJhbWUudmlldygpOwogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGludCB3aWR0aCA9IHZpZXctPmxheW91dFdpZHRo
KCk7Ci0gICAgICAgIGlmIChSZW5kZXJWaWV3KiByZW5kZXJWaWV3ID0gZnJhbWUtPmRvY3VtZW50
KCktPnJlbmRlclZpZXcoKSkKLSAgICAgICAgICAgIHdpZHRoID0gYWRqdXN0Rm9yQWJzb2x1dGVa
b29tKHdpZHRoLCAqcmVuZGVyVmlldyk7Ci0gICAgICAgIGludCBsZW5ndGg7Ci0gICAgICAgIHJl
dHVybiBjb21wdXRlTGVuZ3RoKHZhbHVlLCAhZnJhbWUtPmRvY3VtZW50KCktPmluUXVpcmtzTW9k
ZSgpLCBjb252ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUod2lkdGgsIGxlbmd0
aCwgb3ApOwotICAgIH0KLQotICAgIHJldHVybiB2aWV3LT5sYXlvdXRXaWR0aCgpICE9IDA7Cisg
ICAgaW50IHdpZHRoID0gdmlldy0+bGF5b3V0V2lkdGgoKTsKKyAgICBpZiAoIXZhbHVlKQorICAg
ICAgICByZXR1cm4gd2lkdGg7CisgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5kb2N1
bWVudCgpLT5yZW5kZXJWaWV3KCkpCisgICAgICAgIHdpZHRoID0gYWRqdXN0Rm9yQWJzb2x1dGVa
b29tKHdpZHRoLCAqcmVuZGVyVmlldyk7CisgICAgaW50IGxlbmd0aDsKKyAgICByZXR1cm4gY29t
cHV0ZUxlbmd0aCh2YWx1ZSwgIWZyYW1lLmRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpLCBjb252
ZXJzaW9uRGF0YSwgbGVuZ3RoKSAmJiBjb21wYXJlVmFsdWUod2lkdGgsIGxlbmd0aCwgb3ApOwog
fQogCi0vLyByZXN0IG9mIHRoZSBmdW5jdGlvbnMgYXJlIHRyYW1wb2xpbmVzIHdoaWNoIHNldCB0
aGUgcHJlZml4IGFjY29yZGluZyB0byB0aGUgbWVkaWEgZmVhdHVyZSBleHByZXNzaW9uIHVzZWQK
LQotc3RhdGljIGJvb2wgbWluX2NvbG9yTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkNvbG9yRXZhbHVhdGUo
Q1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJu
IGNvbG9yTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5Q
cmVmaXgpOworICAgIHJldHVybiBjb2xvckV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwg
ZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9jb2xvck1lZGlhRmVhdHVy
ZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMg
Ym9vbCBtYXhDb2xvckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewotICAgIHJldHVybiBjb2xvck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZl
cnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JFdmFsdWF0ZSh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9v
bCBtaW5fY29sb3JfaW5kZXhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluQ29sb3JJbmRleEV2YWx1YXRlKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBj
b2xvcl9pbmRleE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwg
TWluUHJlZml4KTsKKyAgICByZXR1cm4gY29sb3JJbmRleEV2YWx1YXRlKHZhbHVlLCBjb252ZXJz
aW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9jb2xvcl9p
bmRleE1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBtYXhDb2xvckluZGV4RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUm
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGNvbG9yX2luZGV4TWVk
aWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwor
ICAgIHJldHVybiBjb2xvckluZGV4RXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFt
ZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX21vbm9jaHJvbWVNZWRpYUZlYXR1
cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgbWluTW9ub2Nocm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBtb25v
Y2hyb21lRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsK
IH0KIAotc3RhdGljIGJvb2wgbWF4X21vbm9jaHJvbWVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEs
IEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4TW9ub2No
cm9tZUV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQog
ewotICAgIHJldHVybiBtb25vY2hyb21lTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lv
bkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBtb25vY2hyb21lRXZhbHVhdGUo
dmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJv
b2wgbWluX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5Bc3BlY3RSYXRpb0V2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVy
biBhc3BlY3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJh
bWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGFzcGVjdFJhdGlvRXZhbHVhdGUodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWF4X2Fz
cGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhBc3BlY3RSYXRpb0V2YWx1YXRlKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEs
IEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBhc3BlY3Rf
cmF0aW9NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFBy
ZWZpeCk7CisgICAgcmV0dXJuIGFzcGVjdFJhdGlvRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25E
YXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9hc3Bl
Y3RfcmF0aW9NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0
dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWluRGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZShDU1NW
YWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhLCBGcmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2
aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBm
cmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlQXNwZWN0UmF0aW9FdmFsdWF0ZSh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9v
bCBtYXhfZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUq
IGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtYXhEZXZpY2VBc3BlY3RS
YXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQog
ewotICAgIHJldHVybiBkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwg
Y29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VBc3Bl
Y3RSYXRpb0V2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7
CiB9CiAKLXN0YXRpYyBib29sIG1pbl9kZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1cmVFdmFs
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wg
bWluRGV2aWNlUGl4ZWxSYXRpb0V2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFG
ZWF0dXJlUHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2VfcGl4ZWxfcmF0aW9NZWRpYUZlYXR1
cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0
dXJuIGRldmljZVBpeGVsUmF0aW9FdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1l
LCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfZGV2aWNlX3BpeGVsX3JhdGlvTWVk
aWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkK
K3N0YXRpYyBib29sIG1heERldmljZVBpeGVsUmF0aW9FdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYg
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gZGV2aWNlX3BpeGVsX3Jh
dGlvTWVkaWFGZWF0dXJlRXZhbCh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVm
aXgpOworICAgIHJldHVybiBkZXZpY2VQaXhlbFJhdGlvRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNp
b25EYXRhLCBmcmFtZSwgTWF4UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2hlaWdodE1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CitzdGF0aWMgYm9vbCBtaW5IZWlnaHRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSYgZnJhbWUsIE1l
ZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2
YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOworICAgIHJldHVybiBoZWln
aHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQog
Ci1zdGF0aWMgYm9vbCBtYXhfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heEhlaWdodEV2YWx1YXRl
KENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIHJldHVy
biBoZWlnaHRNZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1h
eFByZWZpeCk7CisgICAgcmV0dXJuIGhlaWdodEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0
YSwgZnJhbWUsIE1heFByZWZpeCk7CiB9CiAKLXN0YXRpYyBib29sIG1pbl93aWR0aE1lZGlhRmVh
dHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCitzdGF0
aWMgYm9vbCBtaW5XaWR0aEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0
dXJlUHJlZml4KQogewotICAgIHJldHVybiB3aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNv
bnZlcnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gd2lkdGhFdmFsdWF0
ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMg
Ym9vbCBtYXhfd2lkdGhNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVk
aWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJvb2wgbWF4V2lkdGhFdmFsdWF0ZShDU1NWYWx1ZSog
dmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBG
cmFtZSYgZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKIHsKLSAgICByZXR1cm4gd2lkdGhNZWRp
YUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7Cisg
ICAgcmV0dXJuIHdpZHRoRXZhbHVhdGUodmFsdWUsIGNvbnZlcnNpb25EYXRhLCBmcmFtZSwgTWF4
UHJlZml4KTsKIH0KIAotc3RhdGljIGJvb2wgbWluX2RldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVF
dmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29u
dmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGljIGJv
b2wgbWluRGV2aWNlSGVpZ2h0RXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZl
YXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIGRldmljZV9oZWlnaHRNZWRpYUZlYXR1cmVFdmFs
KHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZpeCk7CisgICAgcmV0dXJuIGRl
dmljZUhlaWdodEV2YWx1YXRlKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblByZWZp
eCk7CiB9CiAKLXN0YXRpYyBib29sIG1heF9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbChD
U1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhLCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1h
eERldmljZUhlaWdodEV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJl
UHJlZml4KQogewotICAgIHJldHVybiBkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlRXZhbCh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOworICAgIHJldHVybiBkZXZpY2VI
ZWlnaHRFdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwog
fQogCi1zdGF0aWMgYm9vbCBtaW5fZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1
ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
LCBGcmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1pbkRldmlj
ZVdpZHRoRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7Ci0gICAgcmV0dXJuIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZl
cnNpb25EYXRhLCBmcmFtZSwgTWluUHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlV2lkdGhFdmFs
dWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0
aWMgYm9vbCBtYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUs
IGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhLCBGcmFtZSog
ZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCkKK3N0YXRpYyBib29sIG1heERldmljZVdpZHRoRXZh
bHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAg
cmV0dXJuIGRldmljZV93aWR0aE1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNvbnZlcnNpb25EYXRh
LCBmcmFtZSwgTWF4UHJlZml4KTsKKyAgICByZXR1cm4gZGV2aWNlV2lkdGhFdmFsdWF0ZSh2YWx1
ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBt
aW5fcmVzb2x1dGlvbk1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRp
YUZlYXR1cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBtaW5SZXNvbHV0aW9uRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHJlc29s
dXRpb25NZWRpYUZlYXR1cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1pblBy
ZWZpeCk7CisgICAgcmV0dXJuIHJlc29sdXRpb25FdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRh
dGEsIGZyYW1lLCBNaW5QcmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBtYXhfcmVzb2x1dGlvbk1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUqIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CitzdGF0aWMgYm9vbCBtYXhSZXNvbHV0aW9uRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1l
LCBNZWRpYUZlYXR1cmVQcmVmaXgpCiB7Ci0gICAgcmV0dXJuIHJlc29sdXRpb25NZWRpYUZlYXR1
cmVFdmFsKHZhbHVlLCBjb252ZXJzaW9uRGF0YSwgZnJhbWUsIE1heFByZWZpeCk7CisgICAgcmV0
dXJuIHJlc29sdXRpb25FdmFsdWF0ZSh2YWx1ZSwgY29udmVyc2lvbkRhdGEsIGZyYW1lLCBNYXhQ
cmVmaXgpOwogfQogCi1zdGF0aWMgYm9vbCBhbmltYXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1Zh
bHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVk
aWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wgYW5pbWF0aW9uRXZhbHVhdGUoQ1NTVmFs
dWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRp
YUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZsb2F0IG51
bWJlcjsKLSAgICAgICAgcmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBh
cmVWYWx1ZSgxLCBzdGF0aWNfY2FzdDxpbnQ+KG51bWJlciksIG9wKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIG9uZUV2YWx1YXRlKHZhbHVlLCBvcCk7CiB9CiAKLXN0YXRp
YyBib29sIHRyYW5zaXRpb25NZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9w
KQorc3RhdGljIGJvb2wgdHJhbnNpdGlvbkV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4IG9w
KQogewotICAgIGlmICh2YWx1ZSkgewotICAgICAgICBmbG9hdCBudW1iZXI7Ci0gICAgICAgIHJl
dHVybiBudW1iZXJWYWx1ZSh2YWx1ZSwgbnVtYmVyKSAmJiBjb21wYXJlVmFsdWUoMSwgc3RhdGlj
X2Nhc3Q8aW50PihudW1iZXIpLCBvcCk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJl
dHVybiBvbmVFdmFsdWF0ZSh2YWx1ZSwgb3ApOwogfQogCi1zdGF0aWMgYm9vbCB0cmFuc2Zvcm1f
MmRNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYsIEZyYW1lKiwgTWVkaWFGZWF0dXJlUHJlZml4IG9wKQorc3RhdGljIGJvb2wg
dHJhbnNmb3JtMmRFdmFsdWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmLCBGcmFtZSYsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKIHsKLSAgICBpZiAo
dmFsdWUpIHsKLSAgICAgICAgZmxvYXQgbnVtYmVyOwotICAgICAgICByZXR1cm4gbnVtYmVyVmFs
dWUodmFsdWUsIG51bWJlcikgJiYgY29tcGFyZVZhbHVlKDEsIHN0YXRpY19jYXN0PGludD4obnVt
YmVyKSwgb3ApOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gb25lRXZhbHVh
dGUodmFsdWUsIG9wKTsKIH0KIAotc3RhdGljIGJvb2wgdHJhbnNmb3JtXzNkTWVkaWFGZWF0dXJl
RXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmLCBG
cmFtZSogZnJhbWUsIE1lZGlhRmVhdHVyZVByZWZpeCBvcCkKK3N0YXRpYyBib29sIHRyYW5zZm9y
bTNkRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJiwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXggb3ApCiB7Ci0gICAgYm9vbCBy
ZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXI7Ci0gICAgaW50IGhhdmUzZFJlbmRlcmluZzsKLQogI2lm
IEVOQUJMRSgzRF9UUkFOU0ZPUk1TKQotICAgIGJvb2wgdGhyZWVERW5hYmxlZCA9IGZhbHNlOwot
ICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKQotICAg
ICAgICB0aHJlZURFbmFibGVkID0gdmlldy0+Y29tcG9zaXRvcigpLmNhblJlbmRlcjNEVHJhbnNm
b3JtcygpOwotCi0gICAgcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyID0gdGhyZWVERW5hYmxlZDsK
LSAgICBoYXZlM2RSZW5kZXJpbmcgPSB0aHJlZURFbmFibGVkID8gMSA6IDA7CisgICAgYXV0byog
dmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpOworICAgIHJldHVybiB2aWV3ICYmIHZpZXct
PmNvbXBvc2l0b3IoKS5jYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSA/IG9uZUV2YWx1YXRlKHZhbHVl
LCBvcCkgOiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGZyYW1lKTsKLSAgICByZXR1cm5WYWx1ZUlmTm9QYXJhbWV0ZXIgPSBmYWxzZTsKLSAgICBoYXZl
M2RSZW5kZXJpbmcgPSAwOworICAgIHJldHVybiB6ZXJvRXZhbHVhdGUodmFsdWUsIG9wKTsKICNl
bmRpZgotCi0gICAgaWYgKHZhbHVlKSB7Ci0gICAgICAgIGZsb2F0IG51bWJlcjsKLSAgICAgICAg
cmV0dXJuIG51bWJlclZhbHVlKHZhbHVlLCBudW1iZXIpICYmIGNvbXBhcmVWYWx1ZShoYXZlM2RS
ZW5kZXJpbmcsIHN0YXRpY19jYXN0PGludD4obnVtYmVyKSwgb3ApOwotICAgIH0KLSAgICByZXR1
cm4gcmV0dXJuVmFsdWVJZk5vUGFyYW1ldGVyOwogfQogCiAjaWYgRU5BQkxFKFZJRVdfTU9ERV9D
U1NfTUVESUEpCi1zdGF0aWMgYm9vbCB2aWV3X21vZGVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVl
KiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwg
TWVkaWFGZWF0dXJlUHJlZml4IG9wKQorCitzdGF0aWMgYm9vbCB2aWV3TW9kZUV2YWx1YXRlKENT
U1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBm
cmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQogewotICAgIFVOVVNFRF9QQVJBTShvcCk7CiAgICAg
aWYgKCF2YWx1ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBjb25zdCBpbnQgdmlld01v
ZGVDU1NLZXl3b3JkSUQgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnZhbHVlKS5nZXRW
YWx1ZUlEKCk7Ci0gICAgY29uc3QgUGFnZTo6Vmlld01vZGUgdmlld01vZGUgPSBmcmFtZS0+cGFn
ZSgpLT52aWV3TW9kZSgpOwotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgc3dpdGNoICh2
aWV3TW9kZSkgeworICAgIGF1dG8ga2V5d29yZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
PigqdmFsdWUpLmdldFZhbHVlSUQoKTsKKworICAgIHN3aXRjaCAoZnJhbWUucGFnZSgpLT52aWV3
TW9kZSgpKSB7CiAgICAgY2FzZSBQYWdlOjpWaWV3TW9kZVdpbmRvd2VkOgotICAgICAgICByZXN1
bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZVdpbmRvd2VkOwotICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVXaW5kb3dlZDsKICAgICBj
YXNlIFBhZ2U6OlZpZXdNb2RlRmxvYXRpbmc6Ci0gICAgICAgIHJlc3VsdCA9IHZpZXdNb2RlQ1NT
S2V5d29yZElEID09IENTU1ZhbHVlRmxvYXRpbmc7Ci0gICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUZsb2F0aW5nOwogICAgIGNhc2UgUGFnZTo6Vmlld01v
ZGVGdWxsc2NyZWVuOgotICAgICAgICByZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBD
U1NWYWx1ZUZ1bGxzY3JlZW47Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4ga2V5d29y
ZCA9PSBDU1NWYWx1ZUZ1bGxzY3JlZW47CiAgICAgY2FzZSBQYWdlOjpWaWV3TW9kZU1heGltaXpl
ZDoKLSAgICAgICAgcmVzdWx0ID0gdmlld01vZGVDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVNYXhp
bWl6ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1
ZU1heGltaXplZDsKICAgICBjYXNlIFBhZ2U6OlZpZXdNb2RlTWluaW1pemVkOgotICAgICAgICBy
ZXN1bHQgPSB2aWV3TW9kZUNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZU1pbmltaXplZDsKLSAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlTWluaW1pemVkOwog
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBmYWxzZTsKIH0KKwogI2VuZGlm
IC8vIEVOQUJMRShWSUVXX01PREVfQ1NTX01FRElBKQogCi1zdGF0aWMgYm9vbCB2aWRlb19wbGF5
YWJsZV9pbmxpbmVNZWRpYUZlYXR1cmVFdmFsKENTU1ZhbHVlKiwgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYsIEZyYW1lKiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQorc3RhdGlj
IGJvb2wgdmlkZW9QbGF5YWJsZUlubGluZUV2YWx1YXRlKENTU1ZhbHVlKiwgY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4KQog
ewotICAgIHJldHVybiBmcmFtZS0+c2V0dGluZ3MoKS5hbGxvd3NJbmxpbmVNZWRpYVBsYXliYWNr
KCk7CisgICAgcmV0dXJuIGZyYW1lLnNldHRpbmdzKCkuYWxsb3dzSW5saW5lTWVkaWFQbGF5YmFj
aygpOwogfQogCi1zdGF0aWMgYm9vbCBob3Zlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZh
bHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1
cmVQcmVmaXgpCitzdGF0aWMgYm9vbCBob3ZlckV2YWx1YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYsIEZyYW1lJiwgTWVkaWFGZWF0dXJlUHJlZml4
KQogewogICAgIGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCkBAIC02OTAsNzAgKzYyNCw2NSBAQCBzdGF0aWMgYm9vbCBob3Zlck1l
ZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYQogI2VuZGlmCiAgICAgfQogCi0gICAgaW50IGhvdmVyQ1NTS2V5d29yZElEID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworICAgIGF1dG8ga2V5
d29yZCA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHJldHVybiBob3ZlckNTU0tleXdvcmRJRCA9
PSBDU1NWYWx1ZU5vbmU7CisgICAgcmV0dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVOb25lOwogI2Vs
c2UKLSAgICByZXR1cm4gaG92ZXJDU1NLZXl3b3JkSUQgPT0gQ1NTVmFsdWVIb3ZlcjsKKyAgICBy
ZXR1cm4ga2V5d29yZCA9PSBDU1NWYWx1ZUhvdmVyOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBib29s
IGFueV9ob3Zlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVlLCBjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBGcmFtZSogZnJh
bWUsIE1lZGlhRmVhdHVyZVByZWZpeCBwcmVmaXgpCitzdGF0aWMgYm9vbCBhbnlIb3ZlckV2YWx1
YXRlKENTU1ZhbHVlKiB2YWx1ZSwgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSwgRnJhbWUmIGZyYW1lLCBNZWRpYUZlYXR1cmVQcmVmaXgg
cHJlZml4KQogewotICAgIHJldHVybiBob3Zlck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEsIGZyYW1lLCBwcmVmaXgpOworICAgIHJldHVybiBob3ZlckV2
YWx1YXRlKHZhbHVlLCBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhLCBmcmFtZSwgcHJlZml4KTsK
IH0KIAotc3RhdGljIGJvb2wgcG9pbnRlck1lZGlhRmVhdHVyZUV2YWwoQ1NTVmFsdWUqIHZhbHVl
LCBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUqLCBNZWRpYUZlYXR1cmVQ
cmVmaXgpCitzdGF0aWMgYm9vbCBwb2ludGVyRXZhbHVhdGUoQ1NTVmFsdWUqIHZhbHVlLCBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiwgRnJhbWUmLCBNZWRpYUZlYXR1cmVQcmVmaXgp
CiB7CiAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKIAotICAgIGludCBwb2ludGVyQ1NTS2V5d29yZElEID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCp2YWx1ZSkuZ2V0VmFsdWVJRCgpOworICAgIGF1dG8ga2V5d29yZCA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpLmdldFZhbHVlSUQoKTsKICNpZiBFTkFC
TEUoVE9VQ0hfRVZFTlRTKQotICAgIHJldHVybiBwb2ludGVyQ1NTS2V5d29yZElEID09IENTU1Zh
bHVlQ29hcnNlOworICAgIHJldHVybiBrZXl3b3JkID09IENTU1ZhbHVlQ29hcnNlOwogI2Vsc2UK
LSAgICByZXR1cm4gcG9pbnRlckNTU0tleXdvcmRJRCA9PSBDU1NWYWx1ZUZpbmU7CisgICAgcmV0
dXJuIGtleXdvcmQgPT0gQ1NTVmFsdWVGaW5lOwogI2VuZGlmCiB9CiAKLXN0YXRpYyBib29sIGFu
eV9wb2ludGVyTWVkaWFGZWF0dXJlRXZhbChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIEZyYW1lKiBmcmFt
ZSwgTWVkaWFGZWF0dXJlUHJlZml4IHByZWZpeCkKK3N0YXRpYyBib29sIGFueVBvaW50ZXJFdmFs
dWF0ZShDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIEZyYW1lJiBmcmFtZSwgTWVkaWFGZWF0dXJlUHJlZml4
IHByZWZpeCkKIHsKLSAgICByZXR1cm4gcG9pbnRlck1lZGlhRmVhdHVyZUV2YWwodmFsdWUsIGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIGZyYW1lLCBwcmVmaXgpOworICAgIHJldHVybiBwb2lu
dGVyRXZhbHVhdGUodmFsdWUsIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEsIGZyYW1lLCBwcmVm
aXgpOwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVGdW5jdGlvbk1hcCgpCisvLyBVc2UgdGhpcyBm
dW5jdGlvbiBpbnN0ZWFkIG9mIGNhbGxpbmcgYWRkIGRpcmVjdGx5IHRvIGF2b2lkIGlubGluaW5n
Lgorc3RhdGljIHZvaWQgYWRkKE1lZGlhUXVlcnlGdW5jdGlvbk1hcCYgbWFwLCBBdG9taWNTdHJp
bmdJbXBsKiBrZXksIE1lZGlhUXVlcnlGdW5jdGlvbiB2YWx1ZSkKIHsKLSAgICAvLyBDcmVhdGUg
dGhlIHRhYmxlLgotICAgIGdGdW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlvbk1hcDsKLSNkZWZpbmUg
QUREX1RPX0ZVTkNUSU9OTUFQKG5hbWUsIHN0cikgIFwKLSAgICBnRnVuY3Rpb25NYXAtPnNldChu
YW1lIyNNZWRpYUZlYXR1cmUuaW1wbCgpLCBuYW1lIyNNZWRpYUZlYXR1cmVFdmFsKTsKLSAgICBD
U1NfTUVESUFRVUVSWV9OQU1FU19GT1JfRUFDSF9NRURJQUZFQVRVUkUoQUREX1RPX0ZVTkNUSU9O
TUFQKTsKLSN1bmRlZiBBRERfVE9fRlVOQ1RJT05NQVAKKyAgICBtYXAuYWRkKGtleSwgdmFsdWUp
OwogfQogCi1ib29sIE1lZGlhUXVlcnlFdmFsdWF0b3I6OmV2YWwoY29uc3QgTWVkaWFRdWVyeUV4
cCogZXhwcikgY29uc3QKK2Jvb2wgTWVkaWFRdWVyeUV2YWx1YXRvcjo6ZXZhbHVhdGUoY29uc3Qg
TWVkaWFRdWVyeUV4cHJlc3Npb24mIGV4cHJlc3Npb24pIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Zy
YW1lIHx8ICFtX2ZyYW1lLT52aWV3KCkgfHwgIW1fc3R5bGUpCi0gICAgICAgIHJldHVybiBtX2V4
cFJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1fZmFsbGJhY2tSZXN1bHQ7CiAKLSAgICBpZiAoIWV4
cHItPmlzVmFsaWQoKSkKKyAgICBpZiAoIWV4cHJlc3Npb24uaXNWYWxpZCgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAoIWdGdW5jdGlvbk1hcCkKLSAgICAgICAgY3JlYXRlRnVu
Y3Rpb25NYXAoKTsKLQotICAgIC8vIGNhbGwgdGhlIG1lZGlhIGZlYXR1cmUgZXZhbHVhdGlvbiBm
dW5jdGlvbi4gQXNzdW1lIG5vIHByZWZpeAotICAgIC8vIGFuZCBsZXQgdHJhbXBvbGluZSBmdW5j
dGlvbnMgb3ZlcnJpZGUgdGhlIHByZWZpeCBpZiBwcmVmaXggaXMKLSAgICAvLyB1c2VkCi0gICAg
RXZhbEZ1bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KGV4cHItPm1lZGlhRmVhdHVyZSgpLmlt
cGwoKSk7Ci0gICAgaWYgKGZ1bmMpIHsKLSAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSBjb252ZXJzaW9uRGF0YShtX3N0eWxlLAotICAgICAgICAgICAgbV9mcmFtZS0+ZG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCktPnJlbmRlclN0eWxlKCksCi0gICAgICAgICAgICBtX2ZyYW1l
LT5kb2N1bWVudCgpLT5yZW5kZXJWaWV3KCksIDEsIGZhbHNlKTsKLSAgICAgICAgcmV0dXJuIGZ1
bmMoZXhwci0+dmFsdWUoKSwgY29udmVyc2lvbkRhdGEsIG1fZnJhbWUsIE5vUHJlZml4KTsKLSAg
ICB9CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPE1lZGlhUXVlcnlGdW5jdGlvbk1hcD4gbWFw
ID0gW10geworICAgICAgICBNZWRpYVF1ZXJ5RnVuY3Rpb25NYXAgbWFwOworI2RlZmluZSBBRERf
VE9fRlVOQ1RJT05NQVAobmFtZSwgc3RyKSBhZGQobWFwLCBNZWRpYUZlYXR1cmVOYW1lczo6bmFt
ZS5pbXBsKCksIG5hbWUjI0V2YWx1YXRlKTsKKyAgICAgICAgQ1NTX01FRElBUVVFUllfTkFNRVNf
Rk9SX0VBQ0hfTUVESUFGRUFUVVJFKEFERF9UT19GVU5DVElPTk1BUCk7CisjdW5kZWYgQUREX1RP
X0ZVTkNUSU9OTUFQCisgICAgICAgIHJldHVybiBtYXA7CisgICAgfSgpOwogCi0gICAgcmV0dXJu
IGZhbHNlOworICAgIGF1dG8gZnVuY3Rpb24gPSBtYXAuZ2V0KCkuZ2V0KGV4cHJlc3Npb24ubWVk
aWFGZWF0dXJlKCkuaW1wbCgpKTsKKyAgICBpZiAoIWZ1bmN0aW9uKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSAqbV9mcmFtZS0+ZG9jdW1lbnQoKTsK
KyAgICByZXR1cm4gZnVuY3Rpb24oZXhwcmVzc2lvbi52YWx1ZSgpLCB7IG1fc3R5bGUsIGRvY3Vt
ZW50LmRvY3VtZW50RWxlbWVudCgpLT5yZW5kZXJTdHlsZSgpLCBkb2N1bWVudC5yZW5kZXJWaWV3
KCksIDEsIGZhbHNlIH0sICptX2ZyYW1lLCBOb1ByZWZpeCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV2YWx1YXRvci5oIGIv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFdmFsdWF0b3IuaAppbmRleCAwN2QxMTQxMDIy
MGExYmUzYzJkNGRlM2IwN2Q1NzAwM2FlNjA0YTZmLi42MmM1YWU5MjliNmQ2OWEyM2VkZTYyOTEy
YTQxMjA4ODc1YmUyYjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVy
eUV2YWx1YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXZhbHVhdG9y
LmgKQEAgLTI1LDgzICsyNSw1NiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIE1l
ZGlhUXVlcnlFdmFsdWF0b3JfaAotI2RlZmluZSBNZWRpYVF1ZXJ5RXZhbHVhdG9yX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV4cC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRnJhbWU7Ci1jbGFzcyBNZWRpYVF1ZXJ5RXhwOwogY2xhc3MgTWVkaWFRdWVyeVNldDsK
IGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAotY2xhc3MgTWVkaWFR
dWVyeVJlc3VsdCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWVkaWFRdWVyeVJlc3VsdCk7
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIE1lZGlhUXVlcnlSZXN1bHQo
Y29uc3QgTWVkaWFRdWVyeUV4cCYgZXhwciwgYm9vbCByZXN1bHQpCi0gICAgICAgIDogbV9leHBy
ZXNzaW9uKGV4cHIpCi0gICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQotICAgIHsKLSAgICB9Ci0K
LSAgICBNZWRpYVF1ZXJ5RXhwIG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fcmVzdWx0Oworc3Ry
dWN0IE1lZGlhUXVlcnlSZXN1bHQgeworICAgIE1lZGlhUXVlcnlFeHByZXNzaW9uIGV4cHJlc3Np
b247CisgICAgYm9vbCByZXN1bHQ7CiB9OwogCi0vKioKLSAqIENsYXNzIHRoYXQgZXZhbHVhdGVz
IGNzcyBtZWRpYSBxdWVyaWVzIGFzIGRlZmluZWQgaW4KLSAqIENTUzMgTW9kdWxlICJNZWRpYSBR
dWVyaWVzIiAoaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1tZWRpYXF1ZXJpZXMvKQotICogU3Bl
Y2lhbCBjb25zdHJ1Y3RvcnMgYXJlIG5lZWRlZCwgaWYgc2ltcGxlIG1lZGlhIHF1ZXJpZXMgYXJl
IHRvIGJlCi0gKiBldmFsdWF0ZWQgd2l0aG91dCBrbm93bGVkZ2Ugb2YgdGhlIG1lZGl1bSBmZWF0
dXJlcy4gVGhpcyBjYW4gaGFwcGVuCi0gKiBmb3IgZXhhbXBsZSB3aGVuIHBhcnNpbmcgVUEgc3R5
bGVzaGVldHMsIGlmIGV2YWx1YXRpb24gaXMgZG9uZQotICogcmlnaHQgYWZ0ZXIgcGFyc2luZy4K
LSAqCi0gKiB0aGUgYm9vbGVhbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBhcHByb3hpbWF0ZSByZXN1
bHRzIG9mIGV2YWx1YXRpb24sIGlmCi0gKiB0aGUgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBhcmUg
bm90IGtub3duLiBUaGlzIGNhbiBiZSB1c2VkIHRvIHBydW5lIHRoZSBsb2FkaW5nCi0gKiBvZiBz
dHlsZXNoZWV0cyB0byBvbmx5IHRob3NlIHdoaWNoIGFyZSBwcm9iYWJsZSB0byBtYXRjaC4KLSAq
LworLy8gU29tZSBvZiB0aGUgY29uc3RydWN0b3JzIGFyZSB1c2VkIGZvciBjYXNlcyB3aGVyZSB0
aGUgZGV2aWNlIGNoYXJhY3RlcmlzdGljcyBhcmUgbm90IGtub3duLgorLy8gVGhlc2UgIGNhbiBi
ZSB1c2VkIHRvIHBydW5lIHRoZSBsb2FkaW5nIG9mIHN0eWxlc2hlZXRzIHRvIG9ubHkgdGhvc2Ug
d2hpY2ggYXJlIG5vdCBhbHJlYWR5IGtub3duIHRvIG5vdCBtYXRjaC4KKwogY2xhc3MgTWVkaWFR
dWVyeUV2YWx1YXRvciB7Ci0gICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1lZGlhUXVlcnlFdmFs
dWF0b3IpOyBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICAvKiogQ3JlYXRl
cyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2ltcGxlIG1lZGlhIHF1ZXJpZXMKLSAg
ICAgKiAgRXZhbHVhdG9yIHJldHVybnMgdHJ1ZSBmb3IgImFsbCIsIGFuZCByZXR1cm5zIHZhbHVl
IG9mIFxtZWRpYUZlYXR1cmVSZXN1bHQKLSAgICAgKiAgZm9yIGFueSBtZWRpYSBmZWF0dXJlcwot
ICAgICAqLworICAgIC8vIENyZWF0ZXMgZXZhbHVhdG9yIHdoaWNoIGV2YWx1YXRlcyBvbmx5IHNp
bXBsZSBtZWRpYSBxdWVyaWVzLgorICAgIC8vIEV2YWx1YXRvciByZXR1cm5zIHRydWUgZm9yICJh
bGwiLCBhbmQgcmV0dXJucyB2YWx1ZSBvZiBcbWVkaWFGZWF0dXJlUmVzdWx0IGZvciBhbnkgbWVk
aWEgZmVhdHVyZXMuCiAgICAgZXhwbGljaXQgTWVkaWFRdWVyeUV2YWx1YXRvcihib29sIG1lZGlh
RmVhdHVyZVJlc3VsdCA9IGZhbHNlKTsKIAotICAgIC8qKiBDcmVhdGVzIGV2YWx1YXRvciB3aGlj
aCBldmFsdWF0ZXMgb25seSBzaW1wbGUgbWVkaWEgcXVlcmllcwotICAgICAqICBFdmFsdWF0b3Ig
IHJldHVybnMgdHJ1ZSBmb3IgYWNjZXB0ZWRNZWRpYVR5cGUgYW5kIHJldHVybnMgdmFsdWUgb2Yg
XG1lZGlhZmVhdHVyZVJlc3VsdAotICAgICAqICBmb3IgYW55IG1lZGlhIGZlYXR1cmVzCi0gICAg
ICovCisgICAgLy8gQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIG9ubHkgc2ltcGxl
IG1lZGlhIHF1ZXJpZXMuCisgICAgLy8gRXZhbHVhdG9yIHJldHVybnMgdHJ1ZSBmb3IgYWNjZXB0
ZWRNZWRpYVR5cGUgYW5kIHJldHVybnMgdmFsdWUgb2YgXG1lZGlhRmVhdHVyZVJlc3VsdCBmb3Ig
YW55IG1lZGlhIGZlYXR1cmVzLgogICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5n
JiBhY2NlcHRlZE1lZGlhVHlwZSwgYm9vbCBtZWRpYUZlYXR1cmVSZXN1bHQgPSBmYWxzZSk7CiAK
LSAgICAvKiogQ3JlYXRlcyBldmFsdWF0b3Igd2hpY2ggZXZhbHVhdGVzIGZ1bGwgbWVkaWEgcXVl
cmllcwotICAgICAqLwotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3RyaW5nJiBhY2Nl
cHRlZE1lZGlhVHlwZSwgRnJhbWUqLCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgfk1lZGlh
UXVlcnlFdmFsdWF0b3IoKTsKKyAgICAvLyBDcmVhdGVzIGV2YWx1YXRvciB3aGljaCBldmFsdWF0
ZXMgZnVsbCBtZWRpYSBxdWVyaWVzLgorICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IoY29uc3QgU3Ry
aW5nJiBhY2NlcHRlZE1lZGlhVHlwZSwgRG9jdW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSopOwog
CiAgICAgYm9vbCBtZWRpYVR5cGVNYXRjaChjb25zdCBTdHJpbmcmIG1lZGlhVHlwZVRvTWF0Y2gp
IGNvbnN0OwogICAgIGJvb2wgbWVkaWFUeXBlTWF0Y2hTcGVjaWZpYyhjb25zdCBjaGFyKiBtZWRp
YVR5cGVUb01hdGNoKSBjb25zdDsKIAotICAgIC8qKiBFdmFsdWF0ZXMgYSBsaXN0IG9mIG1lZGlh
IHF1ZXJpZXMgKi8KLSAgICBib29sIGV2YWwoY29uc3QgTWVkaWFRdWVyeVNldCosIFN0eWxlUmVz
b2x2ZXIqID0gMCkgY29uc3Q7CisgICAgLy8gRXZhbHVhdGVzIGEgbGlzdCBvZiBtZWRpYSBxdWVy
aWVzLgorICAgIGJvb2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeVNldCYsIFN0eWxlUmVzb2x2
ZXIqID0gbnVsbHB0cikgY29uc3Q7CisKKyAgICAvLyBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3Vi
ZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEtZmVhdHVyZTogdmFsdWUpIiBwYXJ0LgorICAgIGJv
b2wgZXZhbHVhdGUoY29uc3QgTWVkaWFRdWVyeUV4cHJlc3Npb24mKSBjb25zdDsKIAotICAgIC8q
KiBFdmFsdWF0ZXMgbWVkaWEgcXVlcnkgc3ViZXhwcmVzc2lvbiwgaWUgImFuZCAobWVkaWEtZmVh
dHVyZTogdmFsdWUpIiBwYXJ0ICovCi0gICAgYm9vbCBldmFsKGNvbnN0IE1lZGlhUXVlcnlFeHAq
KSBjb25zdDsKLSAgICAKLSAgICAvKiBFdmFsdWF0ZXMgYSBsaXN0IG9mIG1lZGlhIHF1ZXJpZXMg
YW5kIGZpbGxzIGluIGEgdmVjdG9yIHdpdGggYW55IHZpZXdwb3J0LWRlcGVuZGVudCByZXN1bHRz
IGZvdW5kLiAqLwotICAgIGJvb2wgZXZhbENoZWNraW5nVmlld3BvcnREZXBlbmRlbnRSZXN1bHRz
KGNvbnN0IE1lZGlhUXVlcnlTZXQqLCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnlS
ZXN1bHQ+PiYpOworICAgIC8vIEV2YWx1YXRlcyBhIGxpc3Qgb2YgbWVkaWEgcXVlcmllcyBhbmQg
ZmlsbHMgaW4gYSB2ZWN0b3Igd2l0aCBhbnkgdmlld3BvcnQtZGVwZW5kZW50IHJlc3VsdHMgZm91
bmQuCisgICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0JiwgVmVjdG9yPE1lZGlh
UXVlcnlSZXN1bHQ+JikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fbWVkaWFUeXBl
OwogICAgIEZyYW1lKiBtX2ZyYW1lIHsgbnVsbHB0ciB9OyAvLyBub3Qgb3duZWQKICAgICBjb25z
dCBSZW5kZXJTdHlsZSogbV9zdHlsZSB7IG51bGxwdHIgfTsKLSAgICBib29sIG1fZXhwUmVzdWx0
OworICAgIGJvb2wgbV9mYWxsYmFja1Jlc3VsdCB7IGZhbHNlIH07CiB9OwogCiB9IC8vIG5hbWVz
cGFjZQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4
cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5jcHAKaW5kZXggZThkYTc4
MDQ1OTY5NWE4MWE3MjVlYWYxMmI1NTZkYzAwNjVlZjY1My4uNTllMTVhMzhiMjFiNzhkMzRiODQ0
MTE4M2E5NWZlNzg0ODFjZWI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlh
UXVlcnlFeHAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmNwcApA
QCAtMzIsMjAxICszMiwxODYgQEAKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgorI2luY2x1ZGUg
Ik1lZGlhRmVhdHVyZU5hbWVzLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0
aENTU1ZhbHVlSUQoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1Bh
cnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhJ
ZGVudGlmaWVyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJz
ZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aWQpCisgICAgaWYgKCF2YWx1ZS5p
ZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb25NZWRpYUZlYXR1cmUKKyAgICByZXR1cm4gbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpvcmllbnRhdGlvbgogI2lmIEVOQUJMRShW
SUVXX01PREVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0
dXJlTmFtZXM6OnZpZXdfbW9kZU1lZGlhRmVhdHVyZQotI2VuZGlmIC8vIEVOQUJMRShWSUVXX01P
REVfQ1NTX01FRElBKQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFt
ZXM6OmNvbG9yX2dhbXV0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBN
ZWRpYUZlYXR1cmVOYW1lczo6YW55X2hvdmVyTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55X3BvaW50ZXJNZWRpYUZlYXR1cmUKLSAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpob3Zlck1lZGlhRmVh
dHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmludmVy
dGVkX2NvbG9yc01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnBvaW50ZXJNZWRpYUZlYXR1cmU7CisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlld01vZGUKKyNlbmRpZgorICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNvbG9yR2FtdXQKKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlIb3ZlcgorICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueVBvaW50ZXIKKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpob3ZlcgorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmludmVydGVkQ29sb3JzCisgICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlcjsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIGZlYXR1cmVXaXRoVmFsaWRQb3NpdGl2ZUxlbmdodE9yTnVtYmVyKGNvbnN0IEF0
b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitz
dGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVMZW5ndGhPck51
bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFs
dWUmIHZhbHVlKQogewotICAgIGlmICghKENTU1ByaW1pdGl2ZVZhbHVlOjppc0xlbmd0aCh2YWx1
ZS0+dW5pdCkgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIp
IHx8IHZhbHVlLT5mVmFsdWUgPCAwKQorICAgIGlmICghKENTU1ByaW1pdGl2ZVZhbHVlOjppc0xl
bmd0aCh2YWx1ZS51bml0KSB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
TlVNQkVSKSB8fCB2YWx1ZS5mVmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHRNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhf
aGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6bWluX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OndpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X3dpZHRoTWVkaWFGZWF0dXJlCi0gICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX3dpZHRoTWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2
aWNlX2hlaWdodE1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1heF9kZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2RldmljZV9oZWlnaHRNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZp
Y2Vfd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2RldmljZV93aWR0aE1lZGlhRmVhdHVy
ZTsKKyAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHQK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhIZWlnaHQK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5IZWlnaHQK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aAorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heFdpZHRoCisgICAg
ICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluV2lkdGgKKyAgICAg
ICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VIZWlnaHQKKyAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhEZXZpY2VIZWln
aHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5EZXZp
Y2VIZWlnaHQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpk
ZXZpY2VXaWR0aAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
Om1heERldmljZVdpZHRoCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVO
YW1lczo6bWluRGV2aWNlV2lkdGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0
aFZhbGlkRGVuc2l0eShjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NT
UGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0
aERlbnNpdHkoY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNl
clZhbHVlJiB2YWx1ZSkKIHsKLSAgICBpZiAoIUNTU1ByaW1pdGl2ZVZhbHVlOjppc1Jlc29sdXRp
b24odmFsdWUtPnVuaXQpIHx8IHZhbHVlLT5mVmFsdWUgPD0gMCkKKyAgICBpZiAoIUNTU1ByaW1p
dGl2ZVZhbHVlOjppc1Jlc29sdXRpb24odmFsdWUudW5pdCkgfHwgdmFsdWUuZlZhbHVlIDw9IDAp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhfcmVzb2x1dGlvbk1lZGlhRmVhdHVyZQot
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9yZXNvbHV0
aW9uTWVkaWFGZWF0dXJlOworICAgIHJldHVybiBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OnJlc29sdXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjptYXhSZXNvbHV0aW9uCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZl
YXR1cmVOYW1lczo6bWluUmVzb2x1dGlvbjsKIH0KIAotc3RhdGljIGlubGluZSBib29sIGZlYXR1
cmVXaXRoUG9zaXRpdmVJbnRlZ2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBj
b25zdCBDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNGZWF0dXJl
VmFsaWRXaXRoTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0
dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgaWYgKCF2YWx1ZS0+aXNJ
bnQgfHwgdmFsdWUtPmZWYWx1ZSA8IDApCisgICAgaWYgKCF2YWx1ZS5pc0ludCB8fCB2YWx1ZS5m
VmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvck1lZGlhRmVhdHVyZQotICAgICAgICB8fCBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF9jb2xvck1lZGlhRmVhdHVyZQot
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9jb2xvck1l
ZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmNvbG9yX2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWF4X2NvbG9yX2luZGV4TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2NvbG9yX2luZGV4TWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX21v
bm9jaHJvbWVNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjptYXhfbW9ub2Nocm9tZU1lZGlhRmVhdHVyZTsKKyAgICByZXR1cm4gbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvcgorICAgICAgICB8fCBtZWRpYUZlYXR1
cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heENvbG9yCisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluQ29sb3IKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJl
ID09IE1lZGlhRmVhdHVyZU5hbWVzOjpjb2xvckluZGV4CisgICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4Q29sb3JJbmRleAorICAgICAgICB8fCBtZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkNvbG9ySW5kZXgKKyAgICAgICAgfHwgbWVk
aWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptaW5Nb25vY2hyb21lCisgICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4TW9ub2Nocm9tZTsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIGZlYXR1cmVXaXRoUG9zaXRpdmVOdW1iZXIoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUsIGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSkKK3N0YXRp
YyBpbmxpbmUgYm9vbCBpc0ZlYXR1cmVWYWxpZFdpdGhOb25OZWdhdGl2ZU51bWJlcihjb25zdCBB
dG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQog
ewotICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiB8
fCB2YWx1ZS0+ZlZhbHVlIDwgMCkKKyAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUiB8fCB2YWx1ZS5mVmFsdWUgPCAwKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2Zvcm1fMmRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2Zvcm1fM2RNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0
dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2l0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5pbWF0aW9uTWVkaWFGZWF0
dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNl
X3BpeGVsX3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6bWF4X2RldmljZV9waXhlbF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9kZXZpY2VfcGl4ZWxf
cmF0aW9NZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1
cmVOYW1lczo6dHJhbnNmb3JtMmQKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2Zvcm0zZAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6OnRyYW5zaXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjphbmltYXRpb24KKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjpkZXZpY2VQaXhlbFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4RGV2aWNlUGl4ZWxSYXRpbworICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkRldmljZVBpeGVsUmF0aW87CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJlV2l0aFplcm9Pck9uZShjb25zdCBBdG9taWNTdHJp
bmcmIG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQorc3RhdGljIGlu
bGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aFplcm9Pck9uZShjb25zdCBBdG9taWNTdHJpbmcm
IG1lZGlhRmVhdHVyZSwgY29uc3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQogewotICAgIGlmICgh
dmFsdWUtPmlzSW50IHx8ICEodmFsdWUtPmZWYWx1ZSA9PSAxIHx8ICF2YWx1ZS0+ZlZhbHVlKSkK
KyAgICBpZiAoIXZhbHVlLmlzSW50IHx8ICEodmFsdWUuZlZhbHVlID09IDEgfHwgIXZhbHVlLmZW
YWx1ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBtZWRpYUZlYXR1cmUg
PT0gTWVkaWFGZWF0dXJlTmFtZXM6OmdyaWRNZWRpYUZlYXR1cmU7CisgICAgcmV0dXJuIG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Z3JpZDsKIH0KIAotc3RhdGljIGlubGluZSBi
b29sIGZlYXR1cmVXaXRoQXNwZWN0UmF0aW8oY29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1
cmUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNBc3BlY3RSYXRpb0ZlYXR1cmUoY29uc3QgQXRvbWlj
U3RyaW5nJiBtZWRpYUZlYXR1cmUpCiB7Ci0gICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRp
YUZlYXR1cmVOYW1lczo6YXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVh
dHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbl9h
c3BlY3RfcmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlh
RmVhdHVyZU5hbWVzOjptYXhfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2RldmljZV9hc3BlY3RfcmF0aW9N
ZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVz
OjptYXhfZGV2aWNlX2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZTsKKyAgICByZXR1cm4gbWVkaWFG
ZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RSYXRpbworICAgICAgICB8fCBtZWRp
YUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZUFzcGVjdFJhdGlvCisgICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluQXNwZWN0UmF0aW8KKyAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjptYXhBc3BlY3RSYXRp
bworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1pbkRldmlj
ZUFzcGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6bWF4RGV2aWNlQXNwZWN0UmF0aW87CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmZWF0dXJl
V2l0aG91dFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlKQorc3RhdGljIGlu
bGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aG91dFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYg
bWVkaWFGZWF0dXJlKQogewogICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgYXJlIHByZWZpeGVk
IGJ5IG1pbi9tYXggY2Fubm90IGJlIHVzZWQgd2l0aG91dCBhIHZhbHVlLgotICAgIHJldHVybiBt
ZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueV9ob3Zlck1lZGlhRmVhdHVyZQot
ICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmFueV9wb2ludGVy
TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1l
czo6bW9ub2Nocm9tZU1lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmNvbG9yTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JfaW5kZXhNZWRpYUZlYXR1cmUKLSAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpncmlkTWVkaWFGZWF0dXJlCi0g
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0TWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6d2lk
dGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5h
bWVzOjpkZXZpY2VfaGVpZ2h0TWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9
PSBNZWRpYUZlYXR1cmVOYW1lczo6ZGV2aWNlX3dpZHRoTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb25NZWRpYUZlYXR1
cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3Rf
cmF0aW9NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVy
ZU5hbWVzOjpkZXZpY2VfYXNwZWN0X3JhdGlvTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlh
RmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aG92ZXJNZWRpYUZlYXR1cmUKLSAgICAgICAg
fHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFuc2Zvcm1fMmRNZWRpYUZl
YXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2Zvcm1fM2RNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVh
dHVyZU5hbWVzOjp0cmFuc2l0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8IG1lZGlhRmVhdHVy
ZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW5pbWF0aW9uTWVkaWFGZWF0dXJlCi0gICAgICAgIHx8
IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aW52ZXJ0ZWRfY29sb3JzTWVkaWFG
ZWF0dXJlCisgICAgcmV0dXJuIG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6YW55
SG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphbnlQ
b2ludGVyCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bW9u
b2Nocm9tZQorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmNv
bG9yCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6Y29sb3JJ
bmRleAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmdyaWQK
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpoZWlnaHQKKyAg
ICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aAorICAgICAg
ICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZUhlaWdodAorICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZVdpZHRoCisg
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6b3JpZW50YXRpb24K
KyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjphc3BlY3RSYXRp
bworICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZUFz
cGVjdFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
aG92ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp0cmFu
c2Zvcm0yZAorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnRy
YW5zZm9ybTNkCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
dHJhbnNpdGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmFuaW1hdGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OmludmVydGVkQ29sb3JzCiAjaWYgRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCi0gICAgICAg
IHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlld19tb2RlTWVkaWFGZWF0
dXJlCi0jZW5kaWYgLy8gRU5BQkxFKFZJRVdfTU9ERV9DU1NfTUVESUEpCi0gICAgICAgIHx8IG1l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6cG9pbnRlck1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OmRldmljZV9waXhlbF9y
YXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJl
TmFtZXM6OnJlc29sdXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09
IE1lZGlhRmVhdHVyZU5hbWVzOjp2aWRlb19wbGF5YWJsZV9pbmxpbmVNZWRpYUZlYXR1cmU7Cisg
ICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6dmlld01vZGUKKyNl
bmRpZgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6OnBvaW50
ZXIKKyAgICAgICAgfHwgbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpkZXZpY2VQ
aXhlbFJhdGlvCisgICAgICAgIHx8IG1lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
cmVzb2x1dGlvbgorICAgICAgICB8fCBtZWRpYUZlYXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6
OnZpZGVvUGxheWFibGVJbmxpbmU7CiB9CiAKLU1lZGlhUXVlcnlFeHA6Ok1lZGlhUXVlcnlFeHAo
Y29uc3QgQXRvbWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIENTU1BhcnNlclZhbHVlTGlzdCogdmFs
dWVMaXN0KQorc3RhdGljIGlubGluZSBib29sIGlzRmVhdHVyZVZhbGlkV2l0aE51bWJlcldpdGhV
bml0KGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlLCBjb25zdCBDU1NQYXJzZXJWYWx1
ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIGlzRmVhdHVyZVZhbGlkV2l0aERlbnNpdHkobWVkaWFG
ZWF0dXJlLCB2YWx1ZSkgfHwgaXNGZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVMZW5ndGhPck51
bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzRmVh
dHVyZVZhbGlkV2l0aE51bWJlcihjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlhRmVhdHVyZSwgY29u
c3QgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiBpc0ZlYXR1cmVWYWxpZFdp
dGhOb25OZWdhdGl2ZUludGVnZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkgfHwgaXNGZWF0dXJlVmFs
aWRXaXRoTm9uTmVnYXRpdmVOdW1iZXIobWVkaWFGZWF0dXJlLCB2YWx1ZSkgfHwgaXNGZWF0dXJl
VmFsaWRXaXRoWmVyb09yT25lKG1lZGlhRmVhdHVyZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5s
aW5lIGJvb2wgaXNTbGFzaChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCit7CisgICAgcmV0dXJuIHZh
bHVlLnVuaXQgPT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLmlWYWx1ZSA9PSAn
Lyc7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1Bvc2l0aXZlSW50ZWdlclZhbHVlKENTU1Bh
cnNlclZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUudW5pdCA9PSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX05VTUJFUiAmJiB2YWx1ZS5mVmFsdWUgPiAwICYmIHZhbHVlLmlzSW50Owor
fQorCitNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6TWVkaWFRdWVyeUV4cHJlc3Npb24oY29uc3QgQXRv
bWljU3RyaW5nJiBtZWRpYUZlYXR1cmUsIENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0KQog
ICAgIDogbV9tZWRpYUZlYXR1cmUobWVkaWFGZWF0dXJlKQogewotICAgIC8vIEluaXRpYWxpemUg
bWVkaWEgcXVlcnkgZXhwcmVzc2lvbiB0aGF0IG11c3QgaGF2ZSAxIG9yIG1vcmUgdmFsdWVzLgot
ICAgIGlmICh2YWx1ZUxpc3QpIHsKLSAgICAgICAgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09IDEp
IHsKLSAgICAgICAgICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVu
dCgpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IHVzZSBDU1NWYWx1ZUlE
cy4KLSAgICAgICAgICAgIGlmIChmZWF0dXJlV2l0aENTU1ZhbHVlSUQobWVkaWFGZWF0dXJlLCB2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVz
IHRoYXQgbXVzdCBoYXZlIG5vbi1uZWdhdGl2ZSA8ZGVuc2l0eT4sIGllLiBkcHB4LCBkcGkgb3Ig
ZHBjbS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoVmFsaWREZW5zaXR5KG1lZGlh
RmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
KSB2YWx1ZS0+dW5pdCk7Ci0KLSAgICAgICAgICAgIC8vIE1lZGlhIGZlYXR1cmVzIHRoYXQgbXVz
dCBoYXZlIG5vbi1uZWdhdGl2ZSA8bGVuZ2h0PiBvciBudW1iZXIgdmFsdWUuCi0gICAgICAgICAg
ICBlbHNlIGlmIChmZWF0dXJlV2l0aFZhbGlkUG9zaXRpdmVMZW5naHRPck51bWJlcihtZWRpYUZl
YXR1cmUsIHZhbHVlKSkKLSAgICAgICAgICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykg
dmFsdWUtPnVuaXQpOwotCi0gICAgICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3Qg
aGF2ZSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZS4KLSAgICAgICAgICAgIGVsc2UgaWYgKGZl
YXR1cmVXaXRoUG9zaXRpdmVJbnRlZ2VyKG1lZGlhRmVhdHVyZSwgdmFsdWUpKQotICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAgICAgICAgLy8gTWVkaWEg
ZmVhdHVyZXMgdGhhdCBtdXN0IGhhdmUgbm9uLW5lZ2F0aXZlIG51bWJlciB2YWx1ZS4KLSAgICAg
ICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoUG9zaXRpdmVOdW1iZXIobWVkaWFGZWF0dXJlLCB2
YWx1ZSkpCi0gICAgICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwotCi0gICAg
ICAgICAgICAvLyBNZWRpYSBmZWF0dXJlcyB0aGF0IG11c3QgaGF2ZSAoMHwxKSB2YWx1ZS4KLSAg
ICAgICAgICAgIGVsc2UgaWYgKGZlYXR1cmVXaXRoWmVyb09yT25lKG1lZGlhRmVhdHVyZSwgdmFs
dWUpKQotICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKLQotICAgICAg
ICAgICAgbV9pc1ZhbGlkID0gbV92YWx1ZTsKLSAgICAgICAgfSBlbHNlIGlmICh2YWx1ZUxpc3Qt
PnNpemUoKSA9PSAzICYmIGZlYXR1cmVXaXRoQXNwZWN0UmF0aW8obWVkaWFGZWF0dXJlKSkgewot
ICAgICAgICAgICAgLy8gQ3JlYXRlIGxpc3Qgb2YgdmFsdWVzLgotICAgICAgICAgICAgLy8gQ3Vy
cmVudGx5IGFjY2VwdHMgb25seSA8aW50ZWdlcj4vPGludGVnZXI+LgotICAgICAgICAgICAgLy8g
QXBwbGljYWJsZSB0byBkZXZpY2UtYXNwZWN0LXJhdGlvIGFuZCBhc3BlYy1yYXRpby4KLSAgICAg
ICAgICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICBmbG9hdCBudW1lcmF0b3JW
YWx1ZSA9IDA7Ci0gICAgICAgICAgICBmbG9hdCBkZW5vbWluYXRvclZhbHVlID0gMDsKLQotICAg
ICAgICAgICAgLy8gVGhlIGFzcGVjdC1yYXRpbyBtdXN0IGJlIDxpbnRlZ2VyPiAod2hpdGVzcGFj
ZSk/IC8gKHdoaXRlc3BhY2UpPyA8aW50ZWdlcj4uCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgMzsgKytpLCB2YWx1ZUxpc3QtPm5leHQoKSkgewotICAgICAgICAgICAgICAg
IGNvbnN0IENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IHZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
ICAgICAgICAgICAgIGlmIChpICE9IDEgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPmZWYWx1ZSA+IDAgJiYgdmFsdWUtPmlzSW50KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghaSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG51bWVy
YXRvclZhbHVlID0gdmFsdWUtPmZWYWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgZGVub21pbmF0b3JWYWx1ZSA9IHZhbHVlLT5mVmFsdWU7Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpID09IDEgJiYgdmFsdWUtPnVuaXQgPT0gQ1NTUGFy
c2VyVmFsdWU6Ok9wZXJhdG9yICYmIHZhbHVlLT5pVmFsdWUgPT0gJy8nKQotICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgaXNWYWxpZCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpc1ZhbGlkKQot
ICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBDU1NBc3BlY3RSYXRpb1ZhbHVlOjpjcmVhdGUobnVt
ZXJhdG9yVmFsdWUsIGRlbm9taW5hdG9yVmFsdWUpOwotCi0gICAgICAgICAgICBtX2lzVmFsaWQg
PSBtX3ZhbHVlOworICAgIGlmICghdmFsdWVMaXN0KSB7CisgICAgICAgIGlmIChpc0ZlYXR1cmVW
YWxpZFdpdGhvdXRWYWx1ZShtZWRpYUZlYXR1cmUpKQorICAgICAgICAgICAgbV9pc1ZhbGlkID0g
dHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09IDEpIHsKKyAgICAgICAg
YXV0byYgdmFsdWUgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDApOworICAgICAgICBpZiAoaXNGZWF0
dXJlVmFsaWRXaXRoSWRlbnRpZmllcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkgeworICAgICAgICAg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLmlk
KTsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoaXNG
ZWF0dXJlVmFsaWRXaXRoTnVtYmVyV2l0aFVuaXQobWVkaWFGZWF0dXJlLCB2YWx1ZSkgfHwgaXNG
ZWF0dXJlVmFsaWRXaXRoTm9uTmVnYXRpdmVMZW5ndGhPck51bWJlcihtZWRpYUZlYXR1cmUsIHZh
bHVlKSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
dmFsdWUuZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUudW5pdCk7
CisgICAgICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgICAgICB9IGVsc2UgaWYgKGlzRmVh
dHVyZVZhbGlkV2l0aE51bWJlcihtZWRpYUZlYXR1cmUsIHZhbHVlKSkgeworICAgICAgICAgICAg
Ly8gRklYTUU6IENhbiB3ZSBtZXJnZSB0aGlzIHdpdGggdGhlIGNhc2UgYWJvdmU/CisgICAgICAg
ICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS5mVmFsdWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgIG1faXNWYWxpZCA9IHRy
dWU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHZhbHVlTGlzdC0+c2l6ZSgpID09IDMgJiYg
aXNBc3BlY3RSYXRpb0ZlYXR1cmUobWVkaWFGZWF0dXJlKSkgeworICAgICAgICBhdXRvJiBudW1l
cmF0b3IgPSAqdmFsdWVMaXN0LT52YWx1ZUF0KDApOworICAgICAgICBhdXRvJiBzbGFzaCA9ICp2
YWx1ZUxpc3QtPnZhbHVlQXQoMSk7CisgICAgICAgIGF1dG8mIGRlbm9taW5hdG9yID0gKnZhbHVl
TGlzdC0+dmFsdWVBdCgyKTsKKyAgICAgICAgaWYgKGlzUG9zaXRpdmVJbnRlZ2VyVmFsdWUobnVt
ZXJhdG9yKSAmJiBpc1NsYXNoKHNsYXNoKSAmJiBpc1Bvc2l0aXZlSW50ZWdlclZhbHVlKGRlbm9t
aW5hdG9yKSkgeworICAgICAgICAgICAgbV92YWx1ZSA9IENTU0FzcGVjdFJhdGlvVmFsdWU6OmNy
ZWF0ZShudW1lcmF0b3IuZlZhbHVlLCBkZW5vbWluYXRvci5mVmFsdWUpOworICAgICAgICAgICAg
bV9pc1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoZmVhdHVyZVdpdGhv
dXRWYWx1ZShtZWRpYUZlYXR1cmUpKQotICAgICAgICBtX2lzVmFsaWQgPSB0cnVlOworICAgIH0K
IH0KIAotU3RyaW5nIE1lZGlhUXVlcnlFeHA6OnNlcmlhbGl6ZSgpIGNvbnN0CitTdHJpbmcgTWVk
aWFRdWVyeUV4cHJlc3Npb246OnNlcmlhbGl6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFtX3Nlcmlh
bGl6YXRpb25DYWNoZS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG1fc2VyaWFsaXphdGlvbkNh
Y2hlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5RXhwLmgKaW5kZXggN2MzODM5NzU1OTVmZGE4MThm
MWQ2ZDUwOWMzNjIyYTIwMDNkMjMyNC4uMmI0ZTcxY2M4MGFjNDg5ZTRhODU1NDkwZDMxNDcwMzM5
NGJjZWM2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlFeHAuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUV4cC5oCkBAIC0yNSwzMiArMjUsMjkg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5RXhwX2gKLSNkZWZp
bmUgTWVkaWFRdWVyeUV4cF9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNTU1ZhbHVlLmgi
Ci0jaW5jbHVkZSAiTWVkaWFGZWF0dXJlTmFtZXMuaCIKICNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvQXRvbWljU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQ1NTUGFyc2VyVmFsdWVMaXN0OwogCi1jbGFzcyBNZWRpYVF1ZXJ5RXhwIHsKKy8vIEZJ
WE1FOiBSZW5hbWUgdGhlIGZpbGUgdG8gbWF0Y2ggdGhpcyBjbGFzcydzIG5hbWUuCitjbGFzcyBN
ZWRpYVF1ZXJ5RXhwcmVzc2lvbiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgTWVkaWFRdWVyeUV4cChjb25zdCBBdG9taWNTdHJpbmcmIG1lZGlh
RmVhdHVyZSA9IGVtcHR5QXRvbSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZXMgPSBudWxscHRy
KTsKKyAgICBleHBsaWNpdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbihjb25zdCBBdG9taWNTdHJpbmcm
IG1lZGlhRmVhdHVyZSA9IGVtcHR5QXRvbSwgQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZXMgPSBu
dWxscHRyKTsKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWVkaWFGZWF0dXJlKCkgY29uc3Q7
CiAgICAgQ1NTVmFsdWUqIHZhbHVlKCkgY29uc3Q7CiAKICAgICBib29sIGlzVmFsaWQoKSBjb25z
dDsKLSAgICBib29sIGlzVmlld3BvcnREZXBlbmRlbnQoKSBjb25zdDsKIAogICAgIFN0cmluZyBz
ZXJpYWxpemUoKSBjb25zdDsKIAotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5
RXhwJikgY29uc3Q7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1lZGlhUXVlcnlFeHByZXNz
aW9uJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQXRvbWljU3RyaW5nIG1fbWVkaWFGZWF0dXJl
OwpAQCAtNTksNDIgKzU2LDI1IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBTdHJpbmcgbV9zZXJp
YWxpemF0aW9uQ2FjaGU7CiB9OwogCi1pbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBNZWRpYVF1
ZXJ5RXhwOjptZWRpYUZlYXR1cmUoKSBjb25zdAoraW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYg
TWVkaWFRdWVyeUV4cHJlc3Npb246Om1lZGlhRmVhdHVyZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IG1fbWVkaWFGZWF0dXJlOwogfQogCi1pbmxpbmUgQ1NTVmFsdWUqIE1lZGlhUXVlcnlFeHA6OnZh
bHVlKCkgY29uc3QKK2lubGluZSBDU1NWYWx1ZSogTWVkaWFRdWVyeUV4cHJlc3Npb246OnZhbHVl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV92YWx1ZS5nZXQoKTsKIH0KIAotaW5saW5lIGJvb2wg
TWVkaWFRdWVyeUV4cDo6b3BlcmF0b3I9PShjb25zdCBNZWRpYVF1ZXJ5RXhwJiBvdGhlcikgY29u
c3QKK2lubGluZSBib29sIE1lZGlhUXVlcnlFeHByZXNzaW9uOjpvcGVyYXRvcj09KGNvbnN0IE1l
ZGlhUXVlcnlFeHByZXNzaW9uJiBvdGhlcikgY29uc3QKIHsKLSAgICByZXR1cm4gKG90aGVyLm1f
bWVkaWFGZWF0dXJlID09IG1fbWVkaWFGZWF0dXJlKQotICAgICAgICAmJiAoKCFvdGhlci5tX3Zh
bHVlICYmICFtX3ZhbHVlKQotICAgICAgICAgICAgfHwgKG90aGVyLm1fdmFsdWUgJiYgbV92YWx1
ZSAmJiBvdGhlci5tX3ZhbHVlLT5lcXVhbHMoKm1fdmFsdWUpKSk7CisgICAgcmV0dXJuIG90aGVy
Lm1fbWVkaWFGZWF0dXJlID09IG1fbWVkaWFGZWF0dXJlCisgICAgICAgICYmICgoIW1fdmFsdWUg
JiYgIW90aGVyLm1fdmFsdWUpIHx8IChtX3ZhbHVlICYmIG90aGVyLm1fdmFsdWUgJiYgKm1fdmFs
dWUgPT0gKm90aGVyLm1fdmFsdWUpKTsKIH0KIAotaW5saW5lIGJvb2wgTWVkaWFRdWVyeUV4cDo6
aXNWYWxpZCgpIGNvbnN0CitpbmxpbmUgYm9vbCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbjo6aXNWYWxp
ZCgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1faXNWYWxpZDsKIH0KIAotaW5saW5lIGJvb2wgTWVk
aWFRdWVyeUV4cDo6aXNWaWV3cG9ydERlcGVuZGVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
bWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjp3aWR0aE1lZGlhRmVhdHVyZQotICAg
ICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6aGVpZ2h0TWVkaWFG
ZWF0dXJlCi0gICAgICAgIHx8IG1fbWVkaWFGZWF0dXJlID09IE1lZGlhRmVhdHVyZU5hbWVzOjpt
aW5fd2lkdGhNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVkaWFG
ZWF0dXJlTmFtZXM6Om1pbl9oZWlnaHRNZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZl
YXR1cmUgPT0gTWVkaWFGZWF0dXJlTmFtZXM6Om1heF93aWR0aE1lZGlhRmVhdHVyZQotICAgICAg
ICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4X2hlaWdodE1lZGlh
RmVhdHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6
b3JpZW50YXRpb25NZWRpYUZlYXR1cmUKLSAgICAgICAgfHwgbV9tZWRpYUZlYXR1cmUgPT0gTWVk
aWFGZWF0dXJlTmFtZXM6OmFzcGVjdF9yYXRpb01lZGlhRmVhdHVyZQotICAgICAgICB8fCBtX21l
ZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWluX2FzcGVjdF9yYXRpb01lZGlhRmVh
dHVyZQotICAgICAgICB8fCBtX21lZGlhRmVhdHVyZSA9PSBNZWRpYUZlYXR1cmVOYW1lczo6bWF4
X2FzcGVjdF9yYXRpb01lZGlhRmVhdHVyZTsKLX0KLQogfSAvLyBuYW1lc3BhY2UKLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3QuY3BwIGIvU291
cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlMaXN0LmNwcAppbmRleCA3YjRmZDAyZGQ1NGI3NGQ0
MDE3MmUzMDRiMjBjZGRhYzc5YjBiZTdlLi40MDEwYzI5YzdhN2Q5M2FmMjRlNGE1NjJjMTY1ZTk4
NmJhMzE1ZGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeUxpc3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5jcHAKQEAgLTI3LDE4
ICsyNywxOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlZjxNZWRpYVF1ZXJ5TGlzdD4g
TWVkaWFRdWVyeUxpc3Q6OmNyZWF0ZShQYXNzUmVmUHRyPE1lZGlhUXVlcnlNYXRjaGVyPiB2ZWN0
b3IsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEsIGJvb2wgbWF0Y2hlcykKK2lubGlu
ZSBNZWRpYVF1ZXJ5TGlzdDo6TWVkaWFRdWVyeUxpc3QoTWVkaWFRdWVyeU1hdGNoZXImIG1hdGNo
ZXIsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBib29sIG1hdGNoZXMpCisgICAgOiBtX21h
dGNoZXIobWF0Y2hlcikKKyAgICAsIG1fbWVkaWEoV1RGTW92ZShtZWRpYSkpCisgICAgLCBtX2V2
YWx1YXRpb25Sb3VuZChtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgpKQorICAgICwgbV9jaGFu
Z2VSb3VuZChtX2V2YWx1YXRpb25Sb3VuZCAtIDEpIC8vIEFueSB2YWx1ZSB0aGF0IGlzIG5vdCB0
aGUgc2FtZSBhcyBtX2V2YWx1YXRpb25Sb3VuZCB3b3VsZCBkby4KKyAgICAsIG1fbWF0Y2hlcyht
YXRjaGVzKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlMaXN0KHZlY3Rv
ciwgbWVkaWEsIG1hdGNoZXMpKTsKIH0KIAotTWVkaWFRdWVyeUxpc3Q6Ok1lZGlhUXVlcnlMaXN0
KFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+IHZlY3RvciwgUGFzc1JlZlB0cjxNZWRpYVF1
ZXJ5U2V0PiBtZWRpYSwgYm9vbCBtYXRjaGVzKQotICAgIDogbV9tYXRjaGVyKHZlY3RvcikKLSAg
ICAsIG1fbWVkaWEobWVkaWEpCi0gICAgLCBtX2V2YWx1YXRpb25Sb3VuZChtX21hdGNoZXItPmV2
YWx1YXRpb25Sb3VuZCgpKQotICAgICwgbV9jaGFuZ2VSb3VuZChtX2V2YWx1YXRpb25Sb3VuZCAt
IDEpIC8vIG1fZXZhbHVhdGlvblJvdW5kIGFuZCBtX2NoYW5nZVJvdW5kIGluaXRpYWwgdmFsdWVz
IG11c3QgYmUgZGlmZmVyZW50LgotICAgICwgbV9tYXRjaGVzKG1hdGNoZXMpCitSZWY8TWVkaWFR
dWVyeUxpc3Q+IE1lZGlhUXVlcnlMaXN0OjpjcmVhdGUoTWVkaWFRdWVyeU1hdGNoZXImIG1hdGNo
ZXIsIFJlZjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhLCBib29sIG1hdGNoZXMpCiB7CisgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgTWVkaWFRdWVyeUxpc3QobWF0Y2hlciwgV1RGTW92ZShtZWRpYSks
IG1hdGNoZXMpKTsKIH0KIAogTWVkaWFRdWVyeUxpc3Q6On5NZWRpYVF1ZXJ5TGlzdCgpCkBAIC01
MCwyNiArNTAsMjYgQEAgU3RyaW5nIE1lZGlhUXVlcnlMaXN0OjptZWRpYSgpIGNvbnN0CiAgICAg
cmV0dXJuIG1fbWVkaWEtPm1lZGlhVGV4dCgpOwogfQogCi12b2lkIE1lZGlhUXVlcnlMaXN0Ojph
ZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+IGxpc3RlbmVyKQor
dm9pZCBNZWRpYVF1ZXJ5TGlzdDo6YWRkTGlzdGVuZXIoUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXI+JiYgbGlzdGVuZXIpCiB7CiAgICAgaWYgKCFsaXN0ZW5lcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9tYXRjaGVyLT5hZGRMaXN0ZW5lcihsaXN0ZW5lciwgdGhpcyk7CisgICAgbV9t
YXRjaGVyLT5hZGRMaXN0ZW5lcihsaXN0ZW5lci5yZWxlYXNlTm9uTnVsbCgpLCAqdGhpcyk7CiB9
CiAKLXZvaWQgTWVkaWFRdWVyeUxpc3Q6OnJlbW92ZUxpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFR
dWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIpCit2b2lkIE1lZGlhUXVlcnlMaXN0OjpyZW1vdmVM
aXN0ZW5lcihSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiBsaXN0ZW5lcikKIHsKICAg
ICBpZiAoIWxpc3RlbmVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX21hdGNoZXItPnJlbW92
ZUxpc3RlbmVyKGxpc3RlbmVyLmdldCgpLCB0aGlzKTsKKyAgICBtX21hdGNoZXItPnJlbW92ZUxp
c3RlbmVyKCpsaXN0ZW5lciwgKnRoaXMpOwogfQogCi12b2lkIE1lZGlhUXVlcnlMaXN0OjpldmFs
dWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yKiBldmFsdWF0b3IsIGJvb2wmIG5vdGlmaWNhdGlvbk5l
ZWRlZCkKK3ZvaWQgTWVkaWFRdWVyeUxpc3Q6OmV2YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0b3Im
IGV2YWx1YXRvciwgYm9vbCYgbm90aWZpY2F0aW9uTmVlZGVkKQogewotICAgIGlmIChtX2V2YWx1
YXRpb25Sb3VuZCAhPSBtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgpICYmIGV2YWx1YXRvcikK
LSAgICAgICAgc2V0TWF0Y2hlcyhldmFsdWF0b3ItPmV2YWwobV9tZWRpYS5nZXQoKSkpOworICAg
IGlmIChtX2V2YWx1YXRpb25Sb3VuZCAhPSBtX21hdGNoZXItPmV2YWx1YXRpb25Sb3VuZCgpKQor
ICAgICAgICBzZXRNYXRjaGVzKGV2YWx1YXRvci5ldmFsdWF0ZShtX21lZGlhLmdldCgpKSk7CiAg
ICAgbm90aWZpY2F0aW9uTmVlZGVkID0gbV9jaGFuZ2VSb3VuZCA9PSBtX21hdGNoZXItPmV2YWx1
YXRpb25Sb3VuZCgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFR
dWVyeUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5oCmluZGV4IDY5
YWZhNzZiMGUwNmIwMjg0NDQ3OTRjZWMxZjA5YmU4MTZiYTU2ODkuLmYzOTI5MGQyODJkNTA1MThi
YmI1MjgwOTdiODIzZDc1NTVkYzRjOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5TGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TGlzdC5o
CkBAIC0xNyw4ICsxNyw3IEBACiAgKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8K
IAotI2lmbmRlZiBNZWRpYVF1ZXJ5TGlzdF9oCi0jZGVmaW5lIE1lZGlhUXVlcnlMaXN0X2gKKyNw
cmFnbWEgb25jZQogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgpAQCAtMzgsMjggKzM3LDI3IEBAIGNsYXNzIE1lZGlhUXVlcnlTZXQ7CiAKIGNs
YXNzIE1lZGlhUXVlcnlMaXN0IDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFRdWVyeUxpc3Q+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlMaXN0PiBjcmVhdGUoUGFzc1JlZlB0
cjxNZWRpYVF1ZXJ5TWF0Y2hlcj4sIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4sIGJvb2wpOwor
ICAgIHN0YXRpYyBSZWY8TWVkaWFRdWVyeUxpc3Q+IGNyZWF0ZShNZWRpYVF1ZXJ5TWF0Y2hlciYs
IFJlZjxNZWRpYVF1ZXJ5U2V0PiYmLCBib29sKTsKICAgICB+TWVkaWFRdWVyeUxpc3QoKTsKIAog
ICAgIFN0cmluZyBtZWRpYSgpIGNvbnN0OwogICAgIGJvb2wgbWF0Y2hlcygpOwogCi0gICAgdm9p
ZCBhZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+KTsKLSAgICB2
b2lkIHJlbW92ZUxpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4pOwor
ICAgIHZvaWQgYWRkTGlzdGVuZXIoUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYpOwor
ICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoUmVmUHRyPE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+JiYp
OwogCi0gICAgdm9pZCBldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yKiwgYm9vbCYgbm90aWZp
Y2F0aW9uTmVlZGVkKTsKKyAgICB2b2lkIGV2YWx1YXRlKE1lZGlhUXVlcnlFdmFsdWF0b3ImLCBi
b29sJiBub3RpZmljYXRpb25OZWVkZWQpOwogCiBwcml2YXRlOgotICAgIE1lZGlhUXVlcnlMaXN0
KFBhc3NSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+LCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+
LCBib29sIG1hdGNoZXMpOworICAgIE1lZGlhUXVlcnlMaXN0KE1lZGlhUXVlcnlNYXRjaGVyJiwg
UmVmPE1lZGlhUXVlcnlTZXQ+JiYsIGJvb2wgbWF0Y2hlcyk7CisKICAgICB2b2lkIHNldE1hdGNo
ZXMoYm9vbCk7CiAKLSAgICBSZWZQdHI8TWVkaWFRdWVyeU1hdGNoZXI+IG1fbWF0Y2hlcjsKLSAg
ICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9tZWRpYTsKKyAgICBSZWY8TWVkaWFRdWVyeU1hdGNo
ZXI+IG1fbWF0Y2hlcjsKKyAgICBSZWY8TWVkaWFRdWVyeVNldD4gbV9tZWRpYTsKICAgICB1bnNp
Z25lZCBtX2V2YWx1YXRpb25Sb3VuZDsgLy8gSW5kaWNhdGVzIGlmIHRoZSBxdWVyeSBoYXMgYmVl
biBldmFsdWF0ZWQgYWZ0ZXIgdGhlIGxhc3Qgc3R5bGUgc2VsZWN0b3IgY2hhbmdlLgogICAgIHVu
c2lnbmVkIG1fY2hhbmdlUm91bmQ7IC8vIFVzZWQgdG8ga25vdyBpZiB0aGUgcXVlcnkgaGFzIGNo
YW5nZWQgaW4gdGhlIGxhc3Qgc3R5bGUgc2VsZWN0b3IgY2hhbmdlLgogICAgIGJvb2wgbV9tYXRj
aGVzOwogfTsKIAogfQotCi0jZW5kaWYgLy8gTWVkaWFRdWVyeUxpc3RfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5jcHAKaW5kZXggMTYwYzdkMzYyOGVkMjcyYTA2MWRlY2Jj
YTQ2NTcxMWYxMjU5ODQ4Ny4uYzY2NTlmMWE1ZmVjYzA0Y2VlYzA5MDFjNzQ3ODlhYTRkMzM3Yzc2
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL01lZGlhUXVlcnlNYXRjaGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuY3BwCkBAIC0yMSw3ICsy
MSw2IEBACiAjaW5jbHVkZSAiTWVkaWFRdWVyeU1hdGNoZXIuaCIKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTWVkaWFMaXN0LmgiCkBAIC0zMywzMSArMzIsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1NZWRpYVF1ZXJ5TWF0Y2hlcjo6TGlzdGVuZXI6
Okxpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXIsIFBh
c3NSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IHF1ZXJ5KQotICAgIDogbV9saXN0ZW5lcihsaXN0ZW5l
cikKLSAgICAsIG1fcXVlcnkocXVlcnkpCitNZWRpYVF1ZXJ5TWF0Y2hlcjo6TWVkaWFRdWVyeU1h
dGNoZXIoRG9jdW1lbnQmIGRvY3VtZW50KQorICAgIDogbV9kb2N1bWVudCgmZG9jdW1lbnQpCiB7
CiB9CiAKLU1lZGlhUXVlcnlNYXRjaGVyOjpMaXN0ZW5lcjo6fkxpc3RlbmVyKCkKLXsKLX0KLQot
dm9pZCBNZWRpYVF1ZXJ5TWF0Y2hlcjo6TGlzdGVuZXI6OmV2YWx1YXRlKE1lZGlhUXVlcnlFdmFs
dWF0b3IqIGV2YWx1YXRvcikKLXsKLSAgICBib29sIG5vdGlmeTsKLSAgICBtX3F1ZXJ5LT5ldmFs
dWF0ZShldmFsdWF0b3IsIG5vdGlmeSk7Ci0gICAgaWYgKG5vdGlmeSkKLSAgICAgICAgbV9saXN0
ZW5lci0+cXVlcnlDaGFuZ2VkKG1fcXVlcnkuZ2V0KCkpOwotfQotCi1NZWRpYVF1ZXJ5TWF0Y2hl
cjo6TWVkaWFRdWVyeU1hdGNoZXIoRG9jdW1lbnQqIGRvY3VtZW50KQotICAgIDogbV9kb2N1bWVu
dChkb2N1bWVudCkKLSAgICAsIG1fZXZhbHVhdGlvblJvdW5kKDEpCi17Ci0gICAgQVNTRVJUKG1f
ZG9jdW1lbnQpOwotfQotCiBNZWRpYVF1ZXJ5TWF0Y2hlcjo6fk1lZGlhUXVlcnlNYXRjaGVyKCkK
IHsKIH0KQEAgLTY1LDcgKzQ0LDcgQEAgTWVkaWFRdWVyeU1hdGNoZXI6On5NZWRpYVF1ZXJ5TWF0
Y2hlcigpCiB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpkb2N1bWVudERlc3Ryb3llZCgpCiB7CiAg
ICAgbV9saXN0ZW5lcnMuY2xlYXIoKTsKLSAgICBtX2RvY3VtZW50ID0gMDsKKyAgICBtX2RvY3Vt
ZW50ID0gbnVsbHB0cjsKIH0KIAogU3RyaW5nIE1lZGlhUXVlcnlNYXRjaGVyOjptZWRpYVR5cGUo
KSBjb25zdApAQCAtODEsMjMgKzYwLDE5IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
TWVkaWFRdWVyeU1hdGNoZXI6OmRvY3VtZW50RWxlbWVudFVzZXJBZ2VudFN0eWxlKCkKICAgICBp
ZiAoIW1fZG9jdW1lbnQgfHwgIW1fZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBu
dWxscHRyOwogCi0gICAgRWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC0+ZG9j
dW1lbnRFbGVtZW50KCk7CisgICAgYXV0byogZG9jdW1lbnRFbGVtZW50ID0gbV9kb2N1bWVudC0+
ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogCiAgICAgcmV0dXJuIG1fZG9jdW1lbnQtPmVuc3VyZVN0eWxlUmVzb2x2
ZXIoKS5zdHlsZUZvckVsZW1lbnQoKmRvY3VtZW50RWxlbWVudCwgbV9kb2N1bWVudC0+cmVuZGVy
U3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRlclN0eWxlOwogfQogCi1ib29s
IE1lZGlhUXVlcnlNYXRjaGVyOjpldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0KiBtZWRpYSkK
K2Jvb2wgTWVkaWFRdWVyeU1hdGNoZXI6OmV2YWx1YXRlKGNvbnN0IE1lZGlhUXVlcnlTZXQmIG1l
ZGlhKQogewotICAgIGlmICghbWVkaWEpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQogICAgIGF1
dG8gc3R5bGUgPSBkb2N1bWVudEVsZW1lbnRVc2VyQWdlbnRTdHlsZSgpOwogICAgIGlmICghc3R5
bGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1
YXRvcihtZWRpYVR5cGUoKSwgbV9kb2N1bWVudC0+ZnJhbWUoKSwgc3R5bGUuZ2V0KCkpOwotICAg
IHJldHVybiBldmFsdWF0b3IuZXZhbChtZWRpYSk7CisgICAgcmV0dXJuIE1lZGlhUXVlcnlFdmFs
dWF0b3IgeyBtZWRpYVR5cGUoKSwgKm1fZG9jdW1lbnQsIHN0eWxlLmdldCgpIH0uZXZhbHVhdGUo
bWVkaWEpOwogfQogCiBSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+IE1lZGlhUXVlcnlNYXRjaGVyOjpt
YXRjaE1lZGlhKGNvbnN0IFN0cmluZyYgcXVlcnkpCkBAIC0xMDUsMzQgKzgwLDI5IEBAIFJlZlB0
cjxNZWRpYVF1ZXJ5TGlzdD4gTWVkaWFRdWVyeU1hdGNoZXI6Om1hdGNoTWVkaWEoY29uc3QgU3Ry
aW5nJiBxdWVyeSkKICAgICBpZiAoIW1fZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3Jl
YXRlKHF1ZXJ5KTsKLSNpZiBFTkFCTEUoUkVTT0xVVElPTl9NRURJQV9RVUVSWSkKLSAgICAvLyBB
ZGQgd2FybmluZyBtZXNzYWdlIHRvIGluc3BlY3RvciB3aGVuZXZlciBkcGkvZHBjbSB2YWx1ZXMg
YXJlIHVzZWQgZm9yICJzY3JlZW4iIG1lZGlhLgotICAgIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5n
SWZOZWVkZWQobV9kb2N1bWVudCwgbWVkaWEuZ2V0KCkpOwotI2VuZGlmCi0gICAgcmV0dXJuIE1l
ZGlhUXVlcnlMaXN0OjpjcmVhdGUodGhpcywgbWVkaWEsIGV2YWx1YXRlKG1lZGlhLmdldCgpKSk7
CisgICAgYXV0byBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZShxdWVyeSk7CisgICAgcmVw
b3J0TWVkaWFRdWVyeVdhcm5pbmdJZk5lZWRlZChtX2RvY3VtZW50LCBtZWRpYS5wdHIoKSk7Cisg
ICAgYm9vbCByZXN1bHQgPSBldmFsdWF0ZShtZWRpYS5nZXQoKSk7CisgICAgcmV0dXJuIE1lZGlh
UXVlcnlMaXN0OjpjcmVhdGUoKnRoaXMsIFdURk1vdmUobWVkaWEpLCByZXN1bHQpOwogfQogCi12
b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjphZGRMaXN0ZW5lcihQYXNzUmVmUHRyPE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXI+IGxpc3RlbmVyLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBxdWVyeSkK
K3ZvaWQgTWVkaWFRdWVyeU1hdGNoZXI6OmFkZExpc3RlbmVyKFJlZjxNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyPiYmIGxpc3RlbmVyLCBNZWRpYVF1ZXJ5TGlzdCYgcXVlcnkpCiB7CiAgICAgaWYgKCFt
X2RvY3VtZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fbGlzdGVuZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICgqbV9saXN0ZW5lcnNbaV0t
Pmxpc3RlbmVyKCkgPT0gKmxpc3RlbmVyICYmIG1fbGlzdGVuZXJzW2ldLT5xdWVyeSgpID09IHF1
ZXJ5KQorICAgIGZvciAoYXV0byYgZXhpc3RpbmdMaXN0ZW5lciA6IG1fbGlzdGVuZXJzKSB7Cisg
ICAgICAgIGlmIChleGlzdGluZ0xpc3RlbmVyLmxpc3RlbmVyLmdldCgpID09IGxpc3RlbmVyLmdl
dCgpICYmIGV4aXN0aW5nTGlzdGVuZXIucXVlcnkucHRyKCkgPT0gJnF1ZXJ5KQogICAgICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fbGlzdGVuZXJzLmFwcGVuZChzdGQ6Om1ha2VfdW5p
cXVlPExpc3RlbmVyPihsaXN0ZW5lciwgcXVlcnkpKTsKKyAgICBtX2xpc3RlbmVycy5hcHBlbmQo
TGlzdGVuZXIgeyBXVEZNb3ZlKGxpc3RlbmVyKSwgcXVlcnkgfSk7CiB9CiAKLXZvaWQgTWVkaWFR
dWVyeU1hdGNoZXI6OnJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGxpc3Rl
bmVyLCBNZWRpYVF1ZXJ5TGlzdCogcXVlcnkpCit2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpyZW1v
dmVMaXN0ZW5lcihNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyJiBsaXN0ZW5lciwgTWVkaWFRdWVyeUxp
c3QmIHF1ZXJ5KQogewotICAgIGlmICghbV9kb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9saXN0ZW5lcnMucmVtb3ZlRmlyc3RNYXRjaGluZyhbbGlzdGVuZXIsIHF1ZXJ5XShhdXRv
JiBjdXJyZW50KSB7Ci0gICAgICAgIHJldHVybiAqY3VycmVudC0+bGlzdGVuZXIoKSA9PSAqbGlz
dGVuZXIgJiYgY3VycmVudC0+cXVlcnkoKSA9PSBxdWVyeTsKKyAgICBtX2xpc3RlbmVycy5yZW1v
dmVGaXJzdE1hdGNoaW5nKFsmbGlzdGVuZXIsICZxdWVyeV0oYXV0byYgZXhpc3RpbmdMaXN0ZW5l
cikgeworICAgICAgICByZXR1cm4gZXhpc3RpbmdMaXN0ZW5lci5saXN0ZW5lci5nZXQoKSA9PSBs
aXN0ZW5lciAmJiBleGlzdGluZ0xpc3RlbmVyLnF1ZXJ5LnB0cigpID09ICZxdWVyeTsKICAgICB9
KTsKIH0KIApAQCAtMTQ1LDkgKzExNSwxNCBAQCB2b2lkIE1lZGlhUXVlcnlNYXRjaGVyOjpzdHls
ZVJlc29sdmVyQ2hhbmdlZCgpCiAgICAgYXV0byBzdHlsZSA9IGRvY3VtZW50RWxlbWVudFVzZXJB
Z2VudFN0eWxlKCk7CiAgICAgaWYgKCFzdHlsZSkKICAgICAgICAgcmV0dXJuOwotICAgIE1lZGlh
UXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKG1lZGlhVHlwZSgpLCBtX2RvY3VtZW50LT5mcmFtZSgp
LCBzdHlsZS5nZXQoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2xpc3RlbmVycy5z
aXplKCk7ICsraSkKLSAgICAgICAgbV9saXN0ZW5lcnNbaV0tPmV2YWx1YXRlKCZldmFsdWF0b3Ip
OworCisgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBldmFsdWF0b3IgeyBtZWRpYVR5cGUoKSwgKm1f
ZG9jdW1lbnQsIHN0eWxlLmdldCgpIH07CisgICAgZm9yIChhdXRvJiBsaXN0ZW5lciA6IG1fbGlz
dGVuZXJzKSB7CisgICAgICAgIGJvb2wgbm90aWZ5OworICAgICAgICBsaXN0ZW5lci5xdWVyeS0+
ZXZhbHVhdGUoZXZhbHVhdG9yLCBub3RpZnkpOworICAgICAgICBpZiAobm90aWZ5KQorICAgICAg
ICAgICAgbGlzdGVuZXIubGlzdGVuZXItPnF1ZXJ5Q2hhbmdlZChsaXN0ZW5lci5xdWVyeS5wdHIo
KSk7CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFRdWVyeU1hdGNoZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9N
ZWRpYVF1ZXJ5TWF0Y2hlci5oCmluZGV4IGI3NzczZDM4ZTgyZWQ5NDUwNTM0NTNjMjM4MWExZjQ4
MzQwZjRkMDAuLjQ2NDhlZTZmYzQ3YTNlNTYxMTc3MmI4YzE4ZmMzZTAxNGNjMzM4ZTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYVF1ZXJ5TWF0Y2hlci5oCkBAIC0xNyw4ICsxNyw3IEBACiAgKiAg
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAotI2lmbmRlZiBNZWRpYVF1ZXJ5TWF0
Y2hlcl9oCi0jZGVmaW5lIE1lZGlhUXVlcnlNYXRjaGVyX2gKKyNwcmFnbWEgb25jZQogCiAjaW5j
bHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CkBAIC0zNyw1MyArMzYsNDMg
QEAgY2xhc3MgUmVuZGVyU3R5bGU7CiAvLyBNZWRpYVF1ZXJ5TWF0Y2hlciBjbGFzcyBpcyByZXNw
b25zaWJsZSBmb3Iga2VlcGluZyBhIHZlY3RvciBvZiBwYWlycwogLy8gTWVkaWFRdWVyeUxpc3Qg
eCBNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLiBJdCBpcyByZXNwb25zaWJsZSBmb3IgZXZhbHVhdGlu
ZyB0aGUgcXVlcmllcwogLy8gd2hlbmV2ZXIgaXQgaXMgbmVlZGVkIGFuZCB0byBjYWxsIHRoZSBs
aXN0ZW5lcnMgaWYgdGhlIGNvcnJlc3BvbmRpbmcgcXVlcnkgaGFzIGNoYW5nZWQuCi0vLyBUaGUg
bGlzdGVuZXJzIG11c3QgYmUgY2FsbGVkIGluIHRoZSB2ZXJ5IHNhbWUgb3JkZXIgaW4gd2hpY2gg
dGhleSBoYXZlIGJlZW4gYWRkZWQuCisvLyBUaGUgbGlzdGVuZXJzIG11c3QgYmUgY2FsbGVkIGlu
IHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCiAKIGNsYXNzIE1lZGlhUXVlcnlN
YXRjaGVyIDogcHVibGljIFJlZkNvdW50ZWQ8TWVkaWFRdWVyeU1hdGNoZXI+IHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlNYXRjaGVyPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3Vt
ZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlNYXRjaGVyKGRvY3VtZW50KSk7
IH0KKyAgICBzdGF0aWMgUmVmPE1lZGlhUXVlcnlNYXRjaGVyPiBjcmVhdGUoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7IHJldHVybiBhZG9wdFJlZigqbmV3IE1lZGlhUXVlcnlNYXRjaGVyKGRvY3VtZW50
KSk7IH0KICAgICB+TWVkaWFRdWVyeU1hdGNoZXIoKTsKKwogICAgIHZvaWQgZG9jdW1lbnREZXN0
cm95ZWQoKTsKIAotICAgIHZvaWQgYWRkTGlzdGVuZXIoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyPiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5TGlzdD4pOwotICAgIHZvaWQgcmVtb3Zl
TGlzdGVuZXIoTWVkaWFRdWVyeUxpc3RMaXN0ZW5lciosIE1lZGlhUXVlcnlMaXN0Kik7CisgICAg
dm9pZCBhZGRMaXN0ZW5lcihSZWY8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4mJiwgTWVkaWFRdWVy
eUxpc3QmKTsKKyAgICB2b2lkIHJlbW92ZUxpc3RlbmVyKE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIm
LCBNZWRpYVF1ZXJ5TGlzdCYpOwogCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBtYXRjaE1l
ZGlhKGNvbnN0IFN0cmluZyYpOwogCiAgICAgdW5zaWduZWQgZXZhbHVhdGlvblJvdW5kKCkgY29u
c3QgeyByZXR1cm4gbV9ldmFsdWF0aW9uUm91bmQ7IH0KLSAgICB2b2lkIHN0eWxlUmVzb2x2ZXJD
aGFuZ2VkKCk7Ci0gICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0Kik7Ci0KLXBy
aXZhdGU6Ci0gICAgY2xhc3MgTGlzdGVuZXIgewotICAgICAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIExpc3RlbmVyKFBhc3NSZWZQdHI8TWVkaWFRdWVy
eUxpc3RMaXN0ZW5lcj4sIFBhc3NSZWZQdHI8TWVkaWFRdWVyeUxpc3Q+KTsKLSAgICAgICAgfkxp
c3RlbmVyKCk7CiAKLSAgICAgICAgdm9pZCBldmFsdWF0ZShNZWRpYVF1ZXJ5RXZhbHVhdG9yKik7
CisgICAgdm9pZCBzdHlsZVJlc29sdmVyQ2hhbmdlZCgpOwogCi0gICAgICAgIE1lZGlhUXVlcnlM
aXN0TGlzdGVuZXIqIGxpc3RlbmVyKCkgeyByZXR1cm4gbV9saXN0ZW5lci5nZXQoKTsgfQotICAg
ICAgICBNZWRpYVF1ZXJ5TGlzdCogcXVlcnkoKSB7IHJldHVybiBtX3F1ZXJ5LmdldCgpOyB9Cisg
ICAgYm9vbCBldmFsdWF0ZShjb25zdCBNZWRpYVF1ZXJ5U2V0Jik7CiAKLSAgICBwcml2YXRlOgot
ICAgICAgICBSZWZQdHI8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbV9saXN0ZW5lcjsKLSAgICAg
ICAgUmVmUHRyPE1lZGlhUXVlcnlMaXN0PiBtX3F1ZXJ5OworcHJpdmF0ZToKKyAgICBzdHJ1Y3Qg
TGlzdGVuZXIgeworICAgICAgICBSZWY8TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gbGlzdGVuZXI7
CisgICAgICAgIFJlZjxNZWRpYVF1ZXJ5TGlzdD4gcXVlcnk7CiAgICAgfTsKIAotICAgIE1lZGlh
UXVlcnlNYXRjaGVyKERvY3VtZW50Kik7CisgICAgZXhwbGljaXQgTWVkaWFRdWVyeU1hdGNoZXIo
RG9jdW1lbnQmKTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGRvY3VtZW50RWxl
bWVudFVzZXJBZ2VudFN0eWxlKCkgY29uc3Q7CiAgICAgU3RyaW5nIG1lZGlhVHlwZSgpIGNvbnN0
OwogCiAgICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxMaXN0ZW5lcj4+IG1fbGlzdGVuZXJzOworICAgIFZlY3RvcjxMaXN0ZW5lcj4gbV9saXN0ZW5l
cnM7CiAKICAgICAvLyBUaGlzIHZhbHVlIGlzIGluY3JlbWVudGVkIGF0IHN0eWxlIHNlbGVjdG9y
IGNoYW5nZXMuCiAgICAgLy8gSXQgaXMgdXNlZCB0byBhdm9pZCBldmFsdWF0aW5nIHF1ZXJpZXMg
bW9yZSB0aGVuIG9uY2UgYW5kIHRvIG1ha2Ugc3VyZQogICAgIC8vIHRoYXQgYSBtZWRpYSBxdWVy
eSByZXN1bHQgY2hhbmdlIGlzIG5vdGlmaWVkIGV4YWN0bHkgb25jZS4KLSAgICB1bnNpZ25lZCBt
X2V2YWx1YXRpb25Sb3VuZDsKKyAgICB1bnNpZ25lZCBtX2V2YWx1YXRpb25Sb3VuZCB7IDEgfTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIE1lZGlhUXVlcnlNYXRj
aGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9SdWxlU2V0LmNwcAppbmRleCA3NWIyNWRiMGQ5ZGMzNmE2ZWJjODg1MTAw
ZjIxN2YwNDU5YzkyMjI3Li40NGFjNjJiYTVkYjNiODdkZjNiMGFiNWE3MWIxMzZkMjE5YTg2ZDc2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvUnVsZVNldC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvY3NzL1J1bGVTZXQuY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBSdWxlU2V0
OjphZGRDaGlsZFJ1bGVzKGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlQmFzZT4+JiBydWxl
cywgY29uc3QgTWUKICAgICAgICAgICAgIGFkZFBhZ2VSdWxlKGRvd25jYXN0PFN0eWxlUnVsZVBh
Z2U+KHJ1bGUuZ2V0KCkpKTsKICAgICAgICAgZWxzZSBpZiAoaXM8U3R5bGVSdWxlTWVkaWE+KCpy
dWxlKSkgewogICAgICAgICAgICAgYXV0byYgbWVkaWFSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxl
TWVkaWE+KCpydWxlKTsKLSAgICAgICAgICAgIGlmICgoIW1lZGlhUnVsZS5tZWRpYVF1ZXJpZXMo
KSB8fCBtZWRpdW0uZXZhbChtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCisg
ICAgICAgICAgICBpZiAoKCFtZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWx1
YXRlKCptZWRpYVJ1bGUubWVkaWFRdWVyaWVzKCksIHJlc29sdmVyKSkpCiAgICAgICAgICAgICAg
ICAgYWRkQ2hpbGRSdWxlcyhtZWRpYVJ1bGUuY2hpbGRSdWxlcygpLCBtZWRpdW0sIHJlc29sdmVy
LCBoYXNEb2N1bWVudFNlY3VyaXR5T3JpZ2luLCBpc0luaXRpYXRpbmdFbGVtZW50SW5Vc2VyQWdl
bnRTaGFkb3dUcmVlLCBhZGRSdWxlRmxhZ3MpOwogICAgICAgICB9IGVsc2UgaWYgKGlzPFN0eWxl
UnVsZUZvbnRGYWNlPigqcnVsZSkgJiYgcmVzb2x2ZXIpIHsKICAgICAgICAgICAgIC8vIEFkZCB0
aGlzIGZvbnQgZmFjZSB0byBvdXIgc2V0LgpAQCAtMzYzLDcgKzM2Myw3IEBAIHZvaWQgUnVsZVNl
dDo6YWRkQ2hpbGRSdWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgcnVs
ZXMsIGNvbnN0IE1lCiB2b2lkIFJ1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0KFN0eWxlU2hlZXRD
b250ZW50cyYgc2hlZXQsIGNvbnN0IE1lZGlhUXVlcnlFdmFsdWF0b3ImIG1lZGl1bSwgU3R5bGVS
ZXNvbHZlciogcmVzb2x2ZXIpCiB7CiAgICAgZm9yIChhdXRvJiBydWxlIDogc2hlZXQuaW1wb3J0
UnVsZXMoKSkgewotICAgICAgICBpZiAocnVsZS0+c3R5bGVTaGVldCgpICYmICghcnVsZS0+bWVk
aWFRdWVyaWVzKCkgfHwgbWVkaXVtLmV2YWwocnVsZS0+bWVkaWFRdWVyaWVzKCksIHJlc29sdmVy
KSkpCisgICAgICAgIGlmIChydWxlLT5zdHlsZVNoZWV0KCkgJiYgKCFydWxlLT5tZWRpYVF1ZXJp
ZXMoKSB8fCBtZWRpdW0uZXZhbHVhdGUoKnJ1bGUtPm1lZGlhUXVlcmllcygpLCByZXNvbHZlcikp
KQogICAgICAgICAgICAgYWRkUnVsZXNGcm9tU2hlZXQoKnJ1bGUtPnN0eWxlU2hlZXQoKSwgbWVk
aXVtLCByZXNvbHZlcik7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U291cmNlU2l6ZUxpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NvdXJjZVNpemVMaXN0LmNw
cAppbmRleCA3NDE3NTFmMzBkNDQyNmIzOGNhM2EwZTA3YmI1MWVkYmZmYTc0MTM5Li5kOWY1MjQ3
NTlmOWQxM2JhM2FkMDUwZDMwYTkxMTZjNzY4ZTFmZTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU291cmNlU2l6ZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3Vy
Y2VTaXplTGlzdC5jcHAKQEAgLTI0LDU4ICsyNCw0NyBAQAogI2luY2x1ZGUgIkNTU1BhcnNlci5o
IgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJNZWRp
YUxpc3QuaCIKLSNpbmNsdWRlICJNZWRpYVF1ZXJ5LmgiCiAjaW5jbHVkZSAiTWVkaWFRdWVyeUV2
YWx1YXRvci5oIgotI2luY2x1ZGUgIk1lZGlhUXVlcnlFeHAuaCIKICNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgYm9vbCBtYXRjaChzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV4cD4mJiBleHBy
ZXNzaW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEZyYW1lKiBmcmFtZSkKK3N0YXRpYyBi
b29sIG1hdGNoKGNvbnN0IE1lZGlhUXVlcnlFeHByZXNzaW9uJiBleHByZXNzaW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIERvY3VtZW50JiBkb2N1bWVudCkKIHsKLSAgICBpZiAoZXhwcmVz
c2lvbi0+bWVkaWFGZWF0dXJlKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgIGF1dG8gZXhwTGlzdCA9IHN0ZDo6bWFrZV91bmlxdWU8VmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxNZWRpYVF1ZXJ5RXhwPj4+KCk7Ci0gICAgZXhwTGlzdC0+YXBwZW5kKFdURk1vdmUoZXhwcmVz
c2lvbikpOwotCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcnlTZXQgPSBNZWRp
YVF1ZXJ5U2V0OjpjcmVhdGUoKTsKLSAgICBtZWRpYVF1ZXJ5U2V0LT5hZGRNZWRpYVF1ZXJ5KHN0
ZDo6bWFrZV91bmlxdWU8TWVkaWFRdWVyeT4oTWVkaWFRdWVyeTo6Tm9uZSwgImFsbCIsIFdURk1v
dmUoZXhwTGlzdCkpKTsKLQotICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgbWVkaWFRdWVyeUV2YWx1
YXRvcigic2NyZWVuIiwgZnJhbWUsICZzdHlsZSk7Ci0gICAgcmV0dXJuIG1lZGlhUXVlcnlFdmFs
dWF0b3IuZXZhbChtZWRpYVF1ZXJ5U2V0LmdldCgpKTsKKyAgICByZXR1cm4gZXhwcmVzc2lvbi5t
ZWRpYUZlYXR1cmUoKS5pc0VtcHR5KCkgfHwgTWVkaWFRdWVyeUV2YWx1YXRvciB7ICJzY3JlZW4i
LCBkb2N1bWVudCwgJnN0eWxlIH0uZXZhbHVhdGUoZXhwcmVzc2lvbik7CiB9CiAKLXN0YXRpYyBm
bG9hdCBkZWZhdWx0TGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgUmVuZGVyVmlldyog
dmlldykKK3N0YXRpYyBmbG9hdCBkZWZhdWx0TGVuZ3RoKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUmVuZGVyVmlldyYgcmVuZGVyZXIpCiB7Ci0gICAgcmV0dXJuIGNsYW1wVG88ZmxvYXQ+KENT
U1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTm9uQ2FsY0xlbmd0aERvdWJsZShDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCZzdHlsZSwgJnN0eWxlLCB2aWV3KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19WVywgMTAwLjApKTsKKyAgICByZXR1cm4gY2xhbXBUbzxmbG9hdD4oQ1NTUHJpbWl0aXZlVmFs
dWU6OmNvbXB1dGVOb25DYWxjTGVuZ3RoRG91YmxlKHsgJnN0eWxlLCAmc3R5bGUsICZyZW5kZXJl
ciB9LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1ZXLCAxMDAuMCkpOwogfQogCi1zdGF0aWMgZmxv
YXQgY29tcHV0ZUxlbmd0aChDU1NWYWx1ZSogdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgUmVuZGVyVmlldyogdmlldykKK3N0YXRpYyBmbG9hdCBjb21wdXRlTGVuZ3RoKENTU1ZhbHVl
JiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBSZW5kZXJWaWV3JiByZW5kZXJlcikK
IHsKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhKCZzdHlsZSwg
JnN0eWxlLCB2aWV3KTsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25E
YXRhKCZzdHlsZSwgJnN0eWxlLCAmcmVuZGVyZXIpOwogICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKSB7Ci0gICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWUpOworICAgICAgICBDU1NQcmlt
aXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCi0gICAgICAg
ICAgICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgdmlldyk7CisgICAgICAgICAgICByZXR1
cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgcmVuZGVyZXIpOwogICAgICAgICByZXR1cm4gcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpOwogICAgIH0KICAg
ICBpZiAoaXM8Q1NTQ2FsY1ZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJldHVybiBkb3duY2FzdDxD
U1NDYWxjVmFsdWU+KCp2YWx1ZSkuY29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKLSAg
ICByZXR1cm4gZGVmYXVsdExlbmd0aChzdHlsZSwgdmlldyk7CisgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NDYWxjVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEp
OworICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCByZW5kZXJlcik7CiB9CiAKLWZsb2F0
IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0ZSwgUmVuZGVyVmll
dyogdmlldywgRnJhbWUqIGZyYW1lKQorZmxvYXQgcGFyc2VTaXplc0F0dHJpYnV0ZShEb2N1bWVu
dCYgZG9jdW1lbnQsIFN0cmluZ1ZpZXcgc2l6ZXNBdHRyaWJ1dGUpCiB7Ci0gICAgaWYgKCF2aWV3
KQorICAgIGF1dG8qIHJlbmRlcmVyID0gZG9jdW1lbnQucmVuZGVyVmlldygpOworICAgIGlmICgh
cmVuZGVyZXIpCiAgICAgICAgIHJldHVybiAwOwotICAgIGF1dG8mIHN0eWxlID0gdmlldy0+c3R5
bGUoKTsKKyAgICBhdXRvJiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwogICAgIGZvciAoYXV0
byYgc291cmNlU2l6ZSA6IENTU1BhcnNlcihDU1NTdHJpY3RNb2RlKS5wYXJzZVNpemVzQXR0cmli
dXRlKHNpemVzQXR0cmlidXRlKSkgewotICAgICAgICBpZiAobWF0Y2goV1RGTW92ZShzb3VyY2VT
aXplLmV4cHJlc3Npb24pLCBzdHlsZSwgZnJhbWUpKQotICAgICAgICAgICAgcmV0dXJuIGNvbXB1
dGVMZW5ndGgoc291cmNlU2l6ZS5sZW5ndGguZ2V0KCksIHN0eWxlLCB2aWV3KTsKKyAgICAgICAg
aWYgKG1hdGNoKHNvdXJjZVNpemUuZXhwcmVzc2lvbiwgc3R5bGUsIGRvY3VtZW50KSkKKyAgICAg
ICAgICAgIHJldHVybiBjb21wdXRlTGVuZ3RoKHNvdXJjZVNpemUubGVuZ3RoLmdldCgpLCBzdHls
ZSwgKnJlbmRlcmVyKTsKICAgICB9Ci0gICAgcmV0dXJuIGRlZmF1bHRMZW5ndGgoc3R5bGUsIHZp
ZXcpOworICAgIHJldHVybiBkZWZhdWx0TGVuZ3RoKHN0eWxlLCAqcmVuZGVyZXIpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU291
cmNlU2l6ZUxpc3QuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlzdC5oCmluZGV4
IGUxYWVmOTcwZmVmYTBlYjEyYWUxYjVmM2M1ZTRlNDZjMDM3NjY3ZDEuLmFiNzE2NGU2M2JhMDhl
ODJjYzgzNzhmMjliZTE0NTI0YmQ5NTEyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9Tb3VyY2VTaXplTGlzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9Tb3VyY2VTaXplTGlz
dC5oCkBAIC0xOCwxOCArMTgsMTQgQEAKICAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgog
ICovCiAKLSNpZm5kZWYgU291cmNlU2l6ZUxpc3RfaAotI2RlZmluZSBTb3VyY2VTaXplTGlzdF9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgRnJhbWU7Ci1jbGFzcyBSZW5kZXJWaWV3OworY2xhc3MgRG9jdW1l
bnQ7CiAKLWZsb2F0IHBhcnNlU2l6ZXNBdHRyaWJ1dGUoU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0
ZSwgUmVuZGVyVmlldyosIEZyYW1lKik7CitmbG9hdCBwYXJzZVNpemVzQXR0cmlidXRlKERvY3Vt
ZW50JiwgU3RyaW5nVmlldyBzaXplc0F0dHJpYnV0ZSk7CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIFNvdXJjZVNpemVMaXN0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZU1lZGlhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZU1lZGlhLmNw
cAppbmRleCAzNGRlOGNiYTEyNmQxNDcyNDdkZDhkYTg1ZjQ2ZWFiYzliMDVkZTU4Li43Y2RkMjcx
N2MzMTJiZTc1MjM3MzBlYTA3N2FjYzY0ZmU2NjdiYWVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVNZWRpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlTWVk
aWEuY3BwCkBAIC02MywxMiArNjMsMTEgQEAgYm9vbCBTdHlsZU1lZGlhOjptYXRjaE1lZGl1bShj
b25zdCBTdHJpbmcmIHF1ZXJ5KSBjb25zdAogCiAgICAgYXV0byByb290U3R5bGUgPSBkb2N1bWVu
dC0+ZW5zdXJlU3R5bGVSZXNvbHZlcigpLnN0eWxlRm9yRWxlbWVudCgqZG9jdW1lbnRFbGVtZW50
LCBkb2N1bWVudC0+cmVuZGVyU3R5bGUoKSwgTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMpLnJlbmRl
clN0eWxlOwogCi0gICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhID0gTWVkaWFRdWVyeVNl
dDo6Y3JlYXRlKCk7CisgICAgYXV0byBtZWRpYSA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZSgpOwog
ICAgIGlmICghbWVkaWEtPnBhcnNlKHF1ZXJ5KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKHR5cGUoKSwgbV9mcmFtZSwgcm9vdFN0
eWxlLmdldCgpKTsKLSAgICByZXR1cm4gc2NyZWVuRXZhbC5ldmFsKG1lZGlhLmdldCgpKTsKKyAg
ICByZXR1cm4gTWVkaWFRdWVyeUV2YWx1YXRvciB7IHR5cGUoKSwgKmRvY3VtZW50LCByb290U3R5
bGUuZ2V0KCkgfS5ldmFsdWF0ZShtZWRpYS5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCA4ZjZkYWZmNDc2OTY2
N2EyYjM2MzBlOGJlODU5ZTMzMTIxMzYxMzRkLi5kODgxYzE1YWExZjk4MDgwMjA2ZGE0ZGJjM2Yw
YWY3ZmFiZTk1ODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC0yNzAs
MTkgKzI3MCwxOSBAQCBTdHlsZVJlc29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1
bWVudCkKICAgICAvLyBpcyBhbHdheXMgZnJvbSB0aGUgZG9jdW1lbnQgdGhhdCBvd25zIHRoZSBz
dHlsZSBzZWxlY3RvcgogICAgIEZyYW1lVmlldyogdmlldyA9IG1fZG9jdW1lbnQudmlldygpOwog
ICAgIGlmICh2aWV3KQotICAgICAgICBtX21lZGl1bSA9IHN0ZDo6bWFrZV91bmlxdWU8TWVkaWFR
dWVyeUV2YWx1YXRvcj4odmlldy0+bWVkaWFUeXBlKCkpOworICAgICAgICBtX21lZGlhUXVlcnlF
dmFsdWF0b3IgPSBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgdmlldy0+bWVkaWFUeXBlKCkgfTsKICAg
ICBlbHNlCi0gICAgICAgIG1fbWVkaXVtID0gc3RkOjptYWtlX3VuaXF1ZTxNZWRpYVF1ZXJ5RXZh
bHVhdG9yPigiYWxsIik7CisgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1YXRvciA9IE1lZGlhUXVl
cnlFdmFsdWF0b3IgeyAiYWxsIiB9OwogCiAgICAgaWYgKHJvb3QpCiAgICAgICAgIG1fcm9vdERl
ZmF1bHRTdHlsZSA9IHN0eWxlRm9yRWxlbWVudCgqcm9vdCwgbV9kb2N1bWVudC5yZW5kZXJTdHls
ZSgpLCBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcykucmVuZGVyU3R5bGU7CiAKICAgICBpZiAobV9y
b290RGVmYXVsdFN0eWxlICYmIHZpZXcpCi0gICAgICAgIG1fbWVkaXVtID0gc3RkOjptYWtlX3Vu
aXF1ZTxNZWRpYVF1ZXJ5RXZhbHVhdG9yPih2aWV3LT5tZWRpYVR5cGUoKSwgJnZpZXctPmZyYW1l
KCksIG1fcm9vdERlZmF1bHRTdHlsZS5nZXQoKSk7CisgICAgICAgIG1fbWVkaWFRdWVyeUV2YWx1
YXRvciA9IE1lZGlhUXVlcnlFdmFsdWF0b3IgeyB2aWV3LT5tZWRpYVR5cGUoKSwgbV9kb2N1bWVu
dCwgbV9yb290RGVmYXVsdFN0eWxlLmdldCgpIH07CiAKICAgICBtX3J1bGVTZXRzLnJlc2V0QXV0
aG9yU3R5bGUoKTsKIAotICAgIG1fcnVsZVNldHMuaW5pdFVzZXJTdHlsZShtX2RvY3VtZW50LmV4
dGVuc2lvblN0eWxlU2hlZXRzKCksICptX21lZGl1bSwgKnRoaXMpOworICAgIG1fcnVsZVNldHMu
aW5pdFVzZXJTdHlsZShtX2RvY3VtZW50LmV4dGVuc2lvblN0eWxlU2hlZXRzKCksIG1fbWVkaWFR
dWVyeUV2YWx1YXRvciwgKnRoaXMpOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICBpZiAo
bV9kb2N1bWVudC5zdmdFeHRlbnNpb25zKCkpIHsKQEAgLTI5NSw3ICsyOTUsNyBAQCBTdHlsZVJl
c29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVudCkKIAogdm9pZCBTdHlsZVJl
c29sdmVyOjphcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhjb25zdCBWZWN0b3I8UmVmUHRyPENTU1N0
eWxlU2hlZXQ+PiYgc3R5bGVTaGVldHMpCiB7Ci0gICAgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JT
dHlsZVNoZWV0cyhzdHlsZVNoZWV0cywgbV9tZWRpdW0uZ2V0KCksIG1faW5zcGVjdG9yQ1NTT01X
cmFwcGVycywgdGhpcyk7CisgICAgbV9ydWxlU2V0cy5hcHBlbmRBdXRob3JTdHlsZVNoZWV0cyhz
dHlsZVNoZWV0cywgJm1fbWVkaWFRdWVyeUV2YWx1YXRvciwgbV9pbnNwZWN0b3JDU1NPTVdyYXBw
ZXJzLCB0aGlzKTsKICAgICBpZiAoYXV0byByZW5kZXJWaWV3ID0gZG9jdW1lbnQoKS5yZW5kZXJW
aWV3KCkpCiAgICAgICAgIHJlbmRlclZpZXctPnN0eWxlKCkuZm9udENhc2NhZGUoKS51cGRhdGUo
JmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogCkBAIC00MTksNyArNDE5LDcgQEAgRWxlbWVu
dFN0eWxlIFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXIKIAogICAgIEVsZW1lbnRSdWxlQ29sbGVjdG9yIGNvbGxlY3Rvcihl
bGVtZW50LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmlsdGVyKCkpOwogICAgIGNvbGxl
Y3Rvci5zZXRSZWdpb25Gb3JTdHlsaW5nKHJlZ2lvbkZvclN0eWxpbmcpOwotICAgIGNvbGxlY3Rv
ci5zZXRNZWRpdW0obV9tZWRpdW0uZ2V0KCkpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1f
bWVkaWFRdWVyeUV2YWx1YXRvcik7CiAKICAgICBpZiAobWF0Y2hpbmdCZWhhdmlvciA9PSBNYXRj
aE9ubHlVc2VyQWdlbnRSdWxlcykKICAgICAgICAgY29sbGVjdG9yLm1hdGNoVUFSdWxlcygpOwpA
QCAtNTgyLDcgKzU4Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNv
bHZlcjo6cHNldWRvU3R5bGVGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQmCiAgICAgLy8gQ2hlY2sg
VUEsIHVzZXIgYW5kIGF1dGhvciBydWxlcy4KICAgICBFbGVtZW50UnVsZUNvbGxlY3RvciBjb2xs
ZWN0b3IoZWxlbWVudCwgbV9ydWxlU2V0cywgbV9zdGF0ZS5zZWxlY3RvckZpbHRlcigpKTsKICAg
ICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KHBzZXVkb1N0eWxlUmVxdWVzdCk7Ci0g
ICAgY29sbGVjdG9yLnNldE1lZGl1bShtX21lZGl1bS5nZXQoKSk7CisgICAgY29sbGVjdG9yLnNl
dE1lZGl1bSgmbV9tZWRpYVF1ZXJ5RXZhbHVhdG9yKTsKICAgICBjb2xsZWN0b3IubWF0Y2hVQVJ1
bGVzKCk7CiAKICAgICBpZiAobV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMpIHsKQEAgLTEwODYs
NyArMTA4Niw3IEBAIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSZXNvbHZlcjo6cHNl
dWRvU3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVuCiAgICAgRWxlbWVudFJ1bGVDb2xs
ZWN0b3IgY29sbGVjdG9yKCplbGVtZW50LCBtX3J1bGVTZXRzLCBtX3N0YXRlLnNlbGVjdG9yRmls
dGVyKCkpOwogICAgIGNvbGxlY3Rvci5zZXRNb2RlKFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6Q29s
bGVjdGluZ1J1bGVzKTsKICAgICBjb2xsZWN0b3Iuc2V0UHNldWRvU3R5bGVSZXF1ZXN0KFBzZXVk
b1N0eWxlUmVxdWVzdChwc2V1ZG9JZCkpOwotICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0obV9tZWRp
dW0uZ2V0KCkpOworICAgIGNvbGxlY3Rvci5zZXRNZWRpdW0oJm1fbWVkaWFRdWVyeUV2YWx1YXRv
cik7CiAKICAgICBpZiAocnVsZXNUb0luY2x1ZGUgJiBVQUFuZFVzZXJDU1NSdWxlcykgewogICAg
ICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBydWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgpA
QCAtMTg3OCwxNiArMTg3OCwxNSBAQCBDb2xvciBTdHlsZVJlc29sdmVyOjpjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvbwogICAgIH0KIH0K
IAotdm9pZCBTdHlsZVJlc29sdmVyOjphZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHQoY29uc3QgTWVkaWFRdWVyeUV4cCogZXhwciwgYm9vbCByZXN1bHQpCit2b2lkIFN0eWxlUmVz
b2x2ZXI6OmFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdChjb25zdCBNZWRpYVF1
ZXJ5RXhwcmVzc2lvbiYgZXhwcmVzc2lvbiwgYm9vbCByZXN1bHQpCiB7Ci0gICAgbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLmFwcGVuZChzdGQ6Om1ha2VfdW5pcXVlPE1lZGlh
UXVlcnlSZXN1bHQ+KCpleHByLCByZXN1bHQpKTsKKyAgICBtX3ZpZXdwb3J0RGVwZW5kZW50TWVk
aWFRdWVyeVJlc3VsdHMuYXBwZW5kKE1lZGlhUXVlcnlSZXN1bHQgeyBleHByZXNzaW9uLCByZXN1
bHQgfSk7CiB9CiAKIGJvb2wgU3R5bGVSZXNvbHZlcjo6aGFzTWVkaWFRdWVyaWVzQWZmZWN0ZWRC
eVZpZXdwb3J0Q2hhbmdlKCkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBzID0gbV92aWV3cG9ydERl
cGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgczsgaSsrKSB7Ci0gICAgICAgIGlmIChtX21lZGl1bS0+ZXZhbCgmbV92aWV3cG9ydERl
cGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX2V4cHJlc3Npb24pICE9IG1fdmlld3BvcnRE
ZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0c1tpXS0+bV9yZXN1bHQpCisgICAgZm9yIChhdXRvJiBy
ZXN1bHQgOiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMpIHsKKyAgICAgICAg
aWYgKG1fbWVkaWFRdWVyeUV2YWx1YXRvci5ldmFsdWF0ZShyZXN1bHQuZXhwcmVzc2lvbikgIT0g
cmVzdWx0LnJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaAppbmRleCAyZjA2NGU2MGNjZGY0
NzAxNjQxNDYyYWJjNDczYmRmMzFhYzUwN2YwLi42M2E2ZDhkMWVlMTY4YzlhMGUzNjE5NGZhZjM4
NWI2MTc0NTg1ZGQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTE1NSw3ICsx
NTUsNyBAQCBwdWJsaWM6CiAgICAgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMoKSB7IHJldHVy
biBtX3J1bGVTZXRzOyB9CiAgICAgY29uc3QgRG9jdW1lbnRSdWxlU2V0cyYgcnVsZVNldHMoKSBj
b25zdCB7IHJldHVybiBtX3J1bGVTZXRzOyB9CiAKLSAgICBjb25zdCBNZWRpYVF1ZXJ5RXZhbHVh
dG9yJiBtZWRpYVF1ZXJ5RXZhbHVhdG9yKCkgY29uc3QgeyByZXR1cm4gKm1fbWVkaXVtOyB9Cisg
ICAgY29uc3QgTWVkaWFRdWVyeUV2YWx1YXRvciYgbWVkaWFRdWVyeUV2YWx1YXRvcigpIGNvbnN0
IHsgcmV0dXJuIG1fbWVkaWFRdWVyeUV2YWx1YXRvcjsgfQogCiAgICAgdm9pZCBzZXRPdmVycmlk
ZURvY3VtZW50RWxlbWVudFN0eWxlKFJlbmRlclN0eWxlKiBzdHlsZSkgeyBtX292ZXJyaWRlRG9j
dW1lbnRFbGVtZW50U3R5bGUgPSBzdHlsZTsgfQogCkBAIC0yMDEsNyArMjAxLDcgQEAgcHVibGlj
OgogICAgIFZpZXdwb3J0U3R5bGVSZXNvbHZlciogdmlld3BvcnRTdHlsZVJlc29sdmVyKCkgeyBy
ZXR1cm4gbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIuZ2V0KCk7IH0KICNlbmRpZgogCi0gICAgdm9p
ZCBhZGRWaWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHQoY29uc3QgTWVkaWFRdWVyeUV4
cCosIGJvb2wgcmVzdWx0KTsKKyAgICB2b2lkIGFkZFZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdChjb25zdCBNZWRpYVF1ZXJ5RXhwcmVzc2lvbiYsIGJvb2wgcmVzdWx0KTsKICAgICBi
b29sIGhhc1ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gIW1f
dmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cy5pc0VtcHR5KCk7IH0KICAgICBib29s
IGhhc01lZGlhUXVlcmllc0FmZmVjdGVkQnlWaWV3cG9ydENoYW5nZSgpIGNvbnN0OwogCkBAIC01
MTcsNyArNTE3LDcgQEAgcHJpdmF0ZToKIAogICAgIFRpbWVyIG1fbWF0Y2hlZFByb3BlcnRpZXND
YWNoZVN3ZWVwVGltZXI7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeUV2YWx1YXRv
cj4gbV9tZWRpdW07CisgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBtX21lZGlhUXVlcnlFdmFsdWF0
b3I7CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3Jvb3REZWZhdWx0U3R5bGU7
CiAKICAgICBEb2N1bWVudCYgbV9kb2N1bWVudDsKQEAgLTUyNiw3ICs1MjYsNyBAQCBwcml2YXRl
OgogCiAgICAgUmVuZGVyU3R5bGUqIG1fb3ZlcnJpZGVEb2N1bWVudEVsZW1lbnRTdHlsZSB7IG51
bGxwdHIgfTsKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8TWVkaWFRdWVyeVJlc3VsdD4+
IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0czsKKyAgICBWZWN0b3I8TWVkaWFR
dWVyeVJlc3VsdD4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCiAjaWYg
RU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICBSZWZQdHI8Vmlld3BvcnRTdHlsZVJl
c29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
U2hlZXRDb250ZW50cy5jcHAKaW5kZXggZmQ4OGI2MjNlNDZjYjIxZjlmNTM0YWNhOTdiOWYxNWRl
Y2I1ZTU1OC4uOWIzNjNiNGVjZDU2YzUzNTJhZmNmZTc0OWUzM2FjZGE1ZTIzZWE1ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKQEAgLTEzMiw2ICsxMzIsNyBA
QCBib29sIFN0eWxlU2hlZXRDb250ZW50czo6aXNDYWNoZWFibGUoKSBjb25zdAogdm9pZCBTdHls
ZVNoZWV0Q29udGVudHM6OnBhcnNlckFwcGVuZFJ1bGUoUmVmPFN0eWxlUnVsZUJhc2U+JiYgcnVs
ZSkKIHsKICAgICBBU1NFUlQoIXJ1bGUtPmlzQ2hhcnNldFJ1bGUoKSk7CisKICAgICBpZiAoaXM8
U3R5bGVSdWxlSW1wb3J0PihydWxlKSkgewogICAgICAgICAvLyBQYXJzZXIgZW5mb3JjZXMgdGhh
dCBAaW1wb3J0IHJ1bGVzIGNvbWUgYmVmb3JlIGFueXRoaW5nIGVsc2UgZXhjZXB0IEBjaGFyc2V0
LgogICAgICAgICBBU1NFUlQobV9jaGlsZFJ1bGVzLmlzRW1wdHkoKSk7CkBAIC0xNDEsMTcgKzE0
MiwxMyBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQXBwZW5kUnVsZShSZWY8U3R5
bGVSdWxlQmFzZT4mJiBydWxlKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0jaWYgRU5BQkxF
KFJFU09MVVRJT05fTUVESUFfUVVFUlkpCi0gICAgLy8gQWRkIHdhcm5pbmcgbWVzc2FnZSB0byBp
bnNwZWN0b3IgaWYgZHBpL2RwY20gdmFsdWVzIGFyZSB1c2VkIGZvciBzY3JlZW4gbWVkaWEuCiAg
ICAgaWYgKGlzPFN0eWxlUnVsZU1lZGlhPihydWxlKSkKICAgICAgICAgcmVwb3J0TWVkaWFRdWVy
eVdhcm5pbmdJZk5lZWRlZChzaW5nbGVPd25lckRvY3VtZW50KCksIGRvd25jYXN0PFN0eWxlUnVs
ZU1lZGlhPihydWxlLmdldCgpKS5tZWRpYVF1ZXJpZXMoKSk7Ci0jZW5kaWYKIAogICAgIC8vIE5P
VEU6IFRoZSBzZWxlY3RvciBsaXN0IGhhcyB0byBmaXQgaW50byBSdWxlRGF0YS4gPGh0dHA6Ly93
ZWJraXQub3JnL2IvMTE4MzY5PgogICAgIC8vIElmIHdlJ3JlIGFkZGluZyBhIHJ1bGUgd2l0aCBh
IGh1Z2UgbnVtYmVyIG9mIHNlbGVjdG9ycywgc3BsaXQgaXQgdXAgaW50byBtdWx0aXBsZSBydWxl
cwogICAgIGlmIChpczxTdHlsZVJ1bGU+KHJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZT4ocnVs
ZS5nZXQoKSkuc2VsZWN0b3JMaXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhp
bXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCkgewotICAgICAgICBWZWN0b3I8UmVmUHRyPFN0eWxl
UnVsZT4+IHJ1bGVzID0gZG93bmNhc3Q8U3R5bGVSdWxlPihydWxlLmdldCgpKS5zcGxpdEludG9N
dWx0aXBsZVJ1bGVzV2l0aE1heGltdW1TZWxlY3RvckNvbXBvbmVudENvdW50KFJ1bGVEYXRhOjpt
YXhpbXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCk7Ci0gICAgICAgIG1fY2hpbGRSdWxlcy5hcHBl
bmRWZWN0b3IocnVsZXMpOworICAgICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kVmVjdG9yKGRvd25j
YXN0PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkuc3BsaXRJbnRvTXVsdGlwbGVSdWxlc1dpdGhNYXhp
bXVtU2VsZWN0b3JDb21wb25lbnRDb3VudChSdWxlRGF0YTo6bWF4aW11bVNlbGVjdG9yQ29tcG9u
ZW50Q291bnQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKaW5kZXggNmYzM2YyMzRkYjc4MWNlYjZjZDE4M2RmNWRmZmE0ODQwOTE2ZDQ3NS4uZDA2MDc1
NTFlNjIzZDIxNDZlOTVhOTA1Yzk5YzU0Zjc3ZjQ4ZTM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCkBAIC04MDIsNyArODAyLDcgQEAgdm9pZCBEb2N1bWVudDo6Y2xlYXJTZWxlY3RvclF1ZXJ5
Q2FjaGUoKQogTWVkaWFRdWVyeU1hdGNoZXImIERvY3VtZW50OjptZWRpYVF1ZXJ5TWF0Y2hlcigp
CiB7CiAgICAgaWYgKCFtX21lZGlhUXVlcnlNYXRjaGVyKQotICAgICAgICBtX21lZGlhUXVlcnlN
YXRjaGVyID0gTWVkaWFRdWVyeU1hdGNoZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICAgICAgbV9tZWRp
YVF1ZXJ5TWF0Y2hlciA9IE1lZGlhUXVlcnlNYXRjaGVyOjpjcmVhdGUoKnRoaXMpOwogICAgIHJl
dHVybiAqbV9tZWRpYVF1ZXJ5TWF0Y2hlcjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL0lubGluZVN0eWxlU2hlZXRPd25lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5s
aW5lU3R5bGVTaGVldE93bmVyLmNwcAppbmRleCBhZTQxZjczYmJhYzRkZjU4MGNjNzZmMzRkZWM2
NTk4NDJlMzIyMTkxLi45ZmM0MjZkMWI4MzhlMmQzZTIxZDgzMmQ0N2JiNjIxODllYTE5OWIzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vSW5saW5lU3R5bGVTaGVldE93bmVyLmNwcApAQCAtMTUw
LDcgKzE1MCw3IEBAIHZvaWQgSW5saW5lU3R5bGVTaGVldE93bmVyOjpjcmVhdGVTaGVldChFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHRleHQpCiAKICAgICBNZWRpYVF1ZXJ5RXZhbHVh
dG9yIHNjcmVlbkV2YWwoQVNDSUlMaXRlcmFsKCJzY3JlZW4iKSwgdHJ1ZSk7CiAgICAgTWVkaWFR
dWVyeUV2YWx1YXRvciBwcmludEV2YWwoQVNDSUlMaXRlcmFsKCJwcmludCIpLCB0cnVlKTsKLSAg
ICBpZiAoIXNjcmVlbkV2YWwuZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpICYmICFwcmludEV2YWwu
ZXZhbChtZWRpYVF1ZXJpZXMuZ2V0KCkpKQorICAgIGlmICghc2NyZWVuRXZhbC5ldmFsdWF0ZSgq
bWVkaWFRdWVyaWVzKSAmJiAhcHJpbnRFdmFsLmV2YWx1YXRlKCptZWRpYVF1ZXJpZXMpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBhdXRob3JTdHlsZVNoZWV0c0ZvckVsZW1lbnQoZWxlbWVudCku
YWRkUGVuZGluZ1NoZWV0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
aW5kZXggODU1Y2FmMWVmMzI2ODk0MDdhZDc5YmU4M2U3NDE0ZDliMWE3YmI5ZC4uMmRmZjA0MjYz
ZWQ2Zjk2OTg0M2ZjOTNjNDc1NjQ2Njk4NDgyZTViMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dEl0ZXJhdG9yLmNwcApAQCAtMTI2Niw3ICsxMjY2LDcgQEAgdm9pZCBTaW1wbGlmaWVkQmFj
a3dhcmRzVGV4dEl0ZXJhdG9yOjphZHZhbmNlKCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIEV4aXQgZW1wdHkgY29udGFpbmVycyBhcyB3ZSBwYXNzIG92ZXIgdGhlbSBvciBjb250
YWluZXJzCiAgICAgICAgICAgICAvLyB3aGVyZSBbY29udGFpbmVyLCAwXSBpcyB3aGVyZSB3ZSBz
dGFydGVkIGl0ZXJhdGluZy4KLSAgICAgICAgICAgIGlmICghbV9oYW5kbGVkTm9kZSAmJiBjYW5I
YXZlQ2hpbGRyZW5Gb3JFZGl0aW5nKCptX25vZGUpICAmJiBtX25vZGUtPnBhcmVudE5vZGUoKSAm
JiAoIW1fbm9kZS0+bGFzdENoaWxkKCkgfHwgKG1fbm9kZSA9PSBtX2VuZENvbnRhaW5lciAmJiAh
bV9lbmRPZmZzZXQpKSkgeworICAgICAgICAgICAgaWYgKCFtX2hhbmRsZWROb2RlICYmIGNhbkhh
dmVDaGlsZHJlbkZvckVkaXRpbmcoKm1fbm9kZSkgJiYgbV9ub2RlLT5wYXJlbnROb2RlKCkgJiYg
KCFtX25vZGUtPmxhc3RDaGlsZCgpIHx8IChtX25vZGUgPT0gbV9lbmRDb250YWluZXIgJiYgIW1f
ZW5kT2Zmc2V0KSkpIHsKICAgICAgICAgICAgICAgICBleGl0Tm9kZSgpOwogICAgICAgICAgICAg
ICAgIGlmIChtX3Bvc2l0aW9uTm9kZSkgewogICAgICAgICAgICAgICAgICAgICBtX2hhbmRsZWRO
b2RlID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4
IDkxMzYwOTQ5YWY0NzY0OTRmNTI0MmU1ZDNmMjdlYWNmOTM2YTQyYWIuLmIwZjYxYTdlMWFkOTg2
MDc2YTE4ZDFlNGU1ZjBkNTcyMGExNTZlNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcApAQCAtMTUzLDI3ICsxNTMsMzEgQEAgSW1hZ2VDYW5kaWRhdGUgSFRNTElt
YWdlRWxlbWVudDo6YmVzdEZpdFNvdXJjZUZyb21QaWN0dXJlRWxlbWVudCgpCiAgICAgICAgIGlm
ICghaXM8SFRNTFNvdXJjZUVsZW1lbnQ+KCpjaGlsZCkpCiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgYXV0byYgc291cmNlID0gZG93bmNhc3Q8SFRNTFNvdXJjZUVsZW1lbnQ+KCpjaGls
ZCk7CisKICAgICAgICAgYXV0byYgc3Jjc2V0ID0gc291cmNlLmZhc3RHZXRBdHRyaWJ1dGUoc3Jj
c2V0QXR0cik7CiAgICAgICAgIGlmIChzcmNzZXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGlmIChzb3VyY2UuaGFzQXR0cmlidXRlKHR5cGVBdHRyKSkgewotICAg
ICAgICAgICAgU3RyaW5nIHR5cGUgPSBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0ciku
c3RyaW5nKCk7Ci0gICAgICAgICAgICBpbnQgaW5kZXhPZlNlbWljb2xvbiA9IHR5cGUuZmluZCgn
OycpOwotICAgICAgICAgICAgaWYgKGluZGV4T2ZTZW1pY29sb24gPj0gMCkKLSAgICAgICAgICAg
ICAgICB0eXBlLnRydW5jYXRlKGluZGV4T2ZTZW1pY29sb24pOworCisgICAgICAgIGF1dG8mIHR5
cGVBdHRyaWJ1dGUgPSBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgICAg
IGlmICghdHlwZUF0dHJpYnV0ZS5pc051bGwoKSkgeworICAgICAgICAgICAgU3RyaW5nIHR5cGUg
PSB0eXBlQXR0cmlidXRlLnN0cmluZygpOworICAgICAgICAgICAgdHlwZS50cnVuY2F0ZSh0eXBl
LmZpbmQoJzsnKSk7CiAgICAgICAgICAgICB0eXBlID0gc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdI
VE1MU3BhY2VzKHR5cGUpOwogICAgICAgICAgICAgaWYgKCF0eXBlLmlzRW1wdHkoKSAmJiAhTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpICYmICFlcXVhbExl
dHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh0eXBlLCAiaW1hZ2Uvc3ZnK3htbCIpKQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3Ig
ZXZhbHVhdG9yKGRvY3VtZW50KCkucHJpbnRpbmcoKSA/ICJwcmludCIgOiAic2NyZWVuIiwgZG9j
dW1lbnQoKS5mcmFtZSgpLCBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQo
KS5kb2N1bWVudEVsZW1lbnQoKS0+Y29tcHV0ZWRTdHlsZSgpIDogbnVsbHB0cik7Ci0gICAgICAg
IGJvb2wgZXZhbHVhdGlvbiA9IGV2YWx1YXRvci5ldmFsQ2hlY2tpbmdWaWV3cG9ydERlcGVuZGVu
dFJlc3VsdHMoc291cmNlLm1lZGlhUXVlcnlTZXQoKSwgcGljdHVyZS0+dmlld3BvcnREZXBlbmRl
bnRSZXN1bHRzKCkpOworCisgICAgICAgIGF1dG8qIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50
KCkuZG9jdW1lbnRFbGVtZW50KCk7CisgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVh
dG9yIHsgZG9jdW1lbnQoKS5wcmludGluZygpID8gInByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVu
dCgpLCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6
IG51bGxwdHIgfTsKKyAgICAgICAgYXV0byogcXVlcmllcyA9IHNvdXJjZS5tZWRpYVF1ZXJ5U2V0
KCk7CisgICAgICAgIGF1dG8gZXZhbHVhdGlvbiA9ICFxdWVyaWVzIHx8IGV2YWx1YXRvci5ldmFs
dWF0ZSgqcXVlcmllcywgcGljdHVyZS0+dmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkpOwogICAg
ICAgICBpZiAocGljdHVyZS0+aGFzVmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkpCiAgICAgICAg
ICAgICBkb2N1bWVudCgpLmFkZFZpZXdwb3J0RGVwZW5kZW50UGljdHVyZSgqcGljdHVyZSk7CiAg
ICAgICAgIGlmICghZXZhbHVhdGlvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAg
IGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKHNvdXJjZS5mYXN0R2V0QXR0
cmlidXRlKHNpemVzQXR0cikuc3RyaW5nKCksIGRvY3VtZW50KCkucmVuZGVyVmlldygpLCBkb2N1
bWVudCgpLmZyYW1lKCkpOwotICAgICAgICBJbWFnZUNhbmRpZGF0ZSBjYW5kaWRhdGUgPSBiZXN0
Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3Io
KSwgbnVsbEF0b20sIHNvdXJjZS5mYXN0R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpLCBzb3VyY2VT
aXplKTsKKyAgICAgICAgYXV0byBzb3VyY2VTaXplID0gcGFyc2VTaXplc0F0dHJpYnV0ZShkb2N1
bWVudCgpLCBzb3VyY2UuZmFzdEdldEF0dHJpYnV0ZShzaXplc0F0dHIpLnN0cmluZygpKTsKKyAg
ICAgICAgYXV0byBjYW5kaWRhdGUgPSBiZXN0Rml0U291cmNlRm9ySW1hZ2VBdHRyaWJ1dGVzKGRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSwgbnVsbEF0b20sIHNyY3NldCwgc291cmNlU2l6
ZSk7CiAgICAgICAgIGlmICghY2FuZGlkYXRlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVy
biBjYW5kaWRhdGU7CiAgICAgfQpAQCAtMTg2LDcgKzE5MCw3IEBAIHZvaWQgSFRNTEltYWdlRWxl
bWVudDo6c2VsZWN0SW1hZ2VTb3VyY2UoKQogICAgIEltYWdlQ2FuZGlkYXRlIGNhbmRpZGF0ZSA9
IGJlc3RGaXRTb3VyY2VGcm9tUGljdHVyZUVsZW1lbnQoKTsKICAgICBpZiAoY2FuZGlkYXRlLmlz
RW1wdHkoKSkgewogICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgPHBpY3R1cmU+IG9yIGRp
ZG4ndCBmaW5kIGEgc291cmNlLCB0aGVuIHdlIHVzZSBvdXIgb3duIGF0dHJpYnV0ZXMuCi0gICAg
ICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGZhc3RHZXRBdHRyaWJ1
dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSwgZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIGRvY3VtZW50
KCkuZnJhbWUoKSk7CisgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmli
dXRlKGRvY3VtZW50KCksIGZhc3RHZXRBdHRyaWJ1dGUoc2l6ZXNBdHRyKS5zdHJpbmcoKSk7CiAg
ICAgICAgIGNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0ZXMoZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpLCBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLCBmYXN0
R2V0QXR0cmlidXRlKHNyY3NldEF0dHIpLCBzb3VyY2VTaXplKTsKICAgICB9CiAgICAgc2V0QmVz
dEZpdFVSTEFuZERQUkZyb21JbWFnZUNhbmRpZGF0ZShjYW5kaWRhdGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCmluZGV4IGI0MDE0MmZhYWJjYWFkMmE0MTQ1NjI2OTM1
ODFhMjQ5NjYxMjA0YzMuLjgwMWI0OWJmMjM1MzVhNThlNTliNWFjN2FhZGQzOGMxZTE3ODJiMGIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKQEAgLTI0MSw4ICsyNDEs
NyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJvY2VzcygpCiAgICAgICAgICAgICBpZiAoZG9j
dW1lbnQoKS5oYXNMaXZpbmdSZW5kZXJUcmVlKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnRT
dHlsZSA9IFN0eWxlOjpyZXNvbHZlRm9yRG9jdW1lbnQoZG9jdW1lbnQoKSk7CiAgICAgICAgICAg
ICBhdXRvIG1lZGlhID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5
bnRheChtX21lZGlhKTsKLSAgICAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9y
KGRvY3VtZW50KCkuZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQoKS5mcmFt
ZSgpLCBkb2N1bWVudFN0eWxlID8gJipkb2N1bWVudFN0eWxlIDogbnVsbHB0cik7Ci0gICAgICAg
ICAgICBtZWRpYVF1ZXJ5TWF0Y2hlcyA9IGV2YWx1YXRvci5ldmFsKG1lZGlhLnB0cigpKTsKKyAg
ICAgICAgICAgIG1lZGlhUXVlcnlNYXRjaGVzID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7IGRvY3Vt
ZW50KCkuZnJhbWUoKS0+dmlldygpLT5tZWRpYVR5cGUoKSwgZG9jdW1lbnQoKSwgZG9jdW1lbnRT
dHlsZSA/ICYqZG9jdW1lbnRTdHlsZSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYS5nZXQoKSk7
CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEb24ndCBob2xkIHVwIHJlbmRlciB0cmVlIGNvbnN0
cnVjdGlvbiBhbmQgc2NyaXB0IGV4ZWN1dGlvbiBvbiBzdHlsZXNoZWV0cwpAQCAtMzYxLDcgKzM2
MCw3IEBAIHZvaWQgSFRNTExpbmtFbGVtZW50OjpzZXRDU1NTdHlsZVNoZWV0KGNvbnN0IFN0cmlu
ZyYgaHJlZiwgY29uc3QgVVJMJiBiYXNlVVJMLCBjCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBSZWY8U3R5bGVTaGVldENvbnRlbnRzPiBzdHlsZVNoZWV0KFN0eWxlU2hlZXRDb250ZW50
czo6Y3JlYXRlKGhyZWYsIHBhcnNlckNvbnRleHQpKTsKKyAgICBhdXRvIHN0eWxlU2hlZXQgPSBT
dHlsZVNoZWV0Q29udGVudHM6OmNyZWF0ZShocmVmLCBwYXJzZXJDb250ZXh0KTsKICAgICBtX3No
ZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRlKHN0eWxlU2hlZXQuY29weVJlZigpLCB0aGlzKTsK
ICAgICBtX3NoZWV0LT5zZXRNZWRpYVF1ZXJpZXMoTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dp
bmdEZXNjcmlwdGlvblN5bnRheChtX21lZGlhKSk7CiAgICAgbV9zaGVldC0+c2V0VGl0bGUodGl0
bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCBlZjZj
OThhM2VjZDYzNjM5NTQ0YmE5NDQ4ZDk1MjAxOTc1MGRjNWFmLi4zOWIyZjc2MGFjYWFhNTk1YjA3
NGRjYzg0YjVmZmU4ZGMxN2U4MjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTQxNzYsMTMgKzQxNzYsMTIgQEAgVVJMIEhUTUxNZWRpYUVsZW1lbnQ6OnNl
bGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSogY29udGVudFR5cGUsIFN0cmluZyoga2UK
ICAgICAgICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CiAgICAgICAgIAogICAgICAgICBpZiAoc291
cmNlLT5mYXN0SGFzQXR0cmlidXRlKG1lZGlhQXR0cikpIHsKLSAgICAgICAgICAgIE1lZGlhUXVl
cnlFdmFsdWF0b3Igc2NyZWVuRXZhbCgic2NyZWVuIiwgZG9jdW1lbnQoKS5mcmFtZSgpLCByZW5k
ZXJlcigpID8gJnJlbmRlcmVyKCktPnN0eWxlKCkgOiBudWxscHRyKTsKLSAgICAgICAgICAgIFJl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSA9IHNvdXJjZS0+bWVkaWFRdWVyeVNldCgpOworICAg
ICAgICAgICAgYXV0byBtZWRpYSA9IHNvdXJjZS0+bWVkaWFRdWVyeVNldCgpOwogI2lmICFMT0df
RElTQUJMRUQKICAgICAgICAgICAgIGlmIChzaG91bGRMb2cpCiAgICAgICAgICAgICAgICAgTE9H
KE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKCVwKSAtICdt
ZWRpYScgaXMgJXMiLCB0aGlzLCBzb3VyY2UtPm1lZGlhKCkudXRmOCgpLmRhdGEoKSk7CiAjZW5k
aWYKLSAgICAgICAgICAgIGlmICghc2NyZWVuRXZhbC5ldmFsKG1lZGlhLmdldCgpKSkgCisgICAg
ICAgICAgICBpZiAobWVkaWEgJiYgIU1lZGlhUXVlcnlFdmFsdWF0b3IgeyAic2NyZWVuIiwgZG9j
dW1lbnQoKSwgcmVuZGVyZXIoKSA/ICZyZW5kZXJlcigpLT5zdHlsZSgpIDogbnVsbHB0ciB9LmV2
YWx1YXRlKCptZWRpYSkpCiAgICAgICAgICAgICAgICAgZ290byBjaGVja19hZ2FpbjsKICAgICAg
ICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVu
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5jcHAKaW5kZXgg
ZTJmMjYwYzg0ZWNhNGI1ZGIxMTQ4NTA4NDU1OGVkYzIxZDg2MWY5OS4uNzAyNDQxOGY0MjVkOTQw
MDdkMGU2OWY2Yjc0NmM3YjlhMWU4MWJjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MUGljdHVyZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBp
Y3R1cmVFbGVtZW50LmNwcApAQCAtNTcsMTYgKzU3LDE2IEBAIFJlZjxIVE1MUGljdHVyZUVsZW1l
bnQ+IEhUTUxQaWN0dXJlRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsCiAKIHZvaWQgSFRNTFBpY3R1cmVFbGVtZW50Ojpzb3VyY2VzQ2hhbmdlZCgpCiB7Ci0gICAg
Zm9yIChhdXRvJiBpbWFnZUVsZW1lbnQgOiBjaGlsZHJlbk9mVHlwZTxIVE1MSW1hZ2VFbGVtZW50
PigqdGhpcykpCi0gICAgICAgIGltYWdlRWxlbWVudC5zZWxlY3RJbWFnZVNvdXJjZSgpOworICAg
IGZvciAoYXV0byYgZWxlbWVudCA6IGNoaWxkcmVuT2ZUeXBlPEhUTUxJbWFnZUVsZW1lbnQ+KCp0
aGlzKSkKKyAgICAgICAgZWxlbWVudC5zZWxlY3RJbWFnZVNvdXJjZSgpOwogfQogCi1ib29sIEhU
TUxQaWN0dXJlRWxlbWVudDo6dmlld3BvcnRDaGFuZ2VBZmZlY3RlZFBpY3R1cmUoKQorYm9vbCBI
VE1MUGljdHVyZUVsZW1lbnQ6OnZpZXdwb3J0Q2hhbmdlQWZmZWN0ZWRQaWN0dXJlKCkgY29uc3QK
IHsKLSAgICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIGV2YWx1YXRvcihkb2N1bWVudCgpLnByaW50aW5n
KCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50KCkuZnJhbWUoKSwgZG9jdW1lbnQoKS5k
b2N1bWVudEVsZW1lbnQoKSA/IGRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCktPmNvbXB1dGVk
U3R5bGUoKSA6IG51bGxwdHIpOwotICAgIHVuc2lnbmVkIG51bVJlc3VsdHMgPSBtX3ZpZXdwb3J0
RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHMuc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBudW1SZXN1bHRzOyBpKyspIHsKLSAgICAgICAgaWYgKGV2YWx1YXRvci5ldmFsKCZt
X3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVyeVJlc3VsdHNbaV0tPm1fZXhwcmVzc2lvbikgIT0g
bV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzW2ldLT5tX3Jlc3VsdCkKKyAgICBh
dXRvKiBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudCgpLmRvY3VtZW50RWxlbWVudCgpOworICAg
IE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yIHsgZG9jdW1lbnQoKS5wcmludGluZygpID8g
InByaW50IiA6ICJzY3JlZW4iLCBkb2N1bWVudCgpLCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1bWVu
dEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIgfTsKKyAgICBmb3IgKGF1dG8mIHJl
c3VsdCA6IG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cykgeworICAgICAgICBp
ZiAoZXZhbHVhdG9yLmV2YWx1YXRlKHJlc3VsdC5leHByZXNzaW9uKSAhPSByZXN1bHQucmVzdWx0
KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVFbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxQaWN0dXJlRWxlbWVudC5oCmluZGV4IGFiZDQ3YzBhOWIzMDZm
YWM0NjdkNTYxYjY1YjU0ODc2OTg5NjU0YWYuLmZiNTEzNmY3YzdjM2M0OWQxMzgzNWEwYTY3YTZh
NmM0NWUwNDgwMWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFBpY3R1cmVF
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUGljdHVyZUVsZW1lbnQuaApA
QCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBIVE1MUGlj
dHVyZUVsZW1lbnRfaAotI2RlZmluZSBIVE1MUGljdHVyZUVsZW1lbnRfaAorI3ByYWdtYSBvbmNl
CiAKICNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0
b3IuaCIKQEAgLTM0LDI4ICszMywyNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1M
UGljdHVyZUVsZW1lbnQgZmluYWwgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgogICAg
IHN0YXRpYyBSZWY8SFRNTFBpY3R1cmVFbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Jik7Ci0gICAgfkhUTUxQaWN0dXJlRWxlbWVudCgpOworICAgIHZpcnR1YWwg
fkhUTUxQaWN0dXJlRWxlbWVudCgpOwogCiAgICAgdm9pZCBzb3VyY2VzQ2hhbmdlZCgpOwogCiAg
ICAgdm9pZCBjbGVhclZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cygpIHsgbV92aWV3cG9ydERlcGVu
ZGVudE1lZGlhUXVlcnlSZXN1bHRzLmNsZWFyKCk7IH0KICAgICBib29sIGhhc1ZpZXdwb3J0RGVw
ZW5kZW50UmVzdWx0cygpIGNvbnN0IHsgcmV0dXJuIG1fdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1
ZXJ5UmVzdWx0cy5zaXplKCk7IH0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVl
cnlSZXN1bHQ+PiYgdmlld3BvcnREZXBlbmRlbnRSZXN1bHRzKCkgeyByZXR1cm4gbV92aWV3cG9y
dERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOyB9CisgICAgVmVjdG9yPE1lZGlhUXVlcnlSZXN1
bHQ+JiB2aWV3cG9ydERlcGVuZGVudFJlc3VsdHMoKSB7IHJldHVybiBtX3ZpZXdwb3J0RGVwZW5k
ZW50TWVkaWFRdWVyeVJlc3VsdHM7IH0KIAotICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1lbnQo
RG9jdW1lbnQqIG9sZERvY3VtZW50KTsKLSAgICAKLSAgICBib29sIHZpZXdwb3J0Q2hhbmdlQWZm
ZWN0ZWRQaWN0dXJlKCk7CisgICAgYm9vbCB2aWV3cG9ydENoYW5nZUFmZmVjdGVkUGljdHVyZSgp
IGNvbnN0OwogCiAgICAgV2Vha1B0cjxIVE1MUGljdHVyZUVsZW1lbnQ+IGNyZWF0ZVdlYWtQdHIo
KSB7IHJldHVybiBtX3dlYWtGYWN0b3J5LmNyZWF0ZVdlYWtQdHIoKTsgfQogCiBwcml2YXRlOgog
ICAgIEhUTUxQaWN0dXJlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsK
LSAgICAKLSAgICBXZWFrUHRyRmFjdG9yeTxIVE1MUGljdHVyZUVsZW1lbnQ+IG1fd2Vha0ZhY3Rv
cnkgeyB0aGlzIH07Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxNZWRpYVF1ZXJ5UmVzdWx0
Pj4gbV92aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1bHRzOwogCisgICAgdm9pZCBkaWRN
b3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpIGZpbmFsOworCisgICAgV2Vh
a1B0ckZhY3Rvcnk8SFRNTFBpY3R1cmVFbGVtZW50PiBtX3dlYWtGYWN0b3J5IHsgdGhpcyB9Owor
ICAgIFZlY3RvcjxNZWRpYVF1ZXJ5UmVzdWx0PiBtX3ZpZXdwb3J0RGVwZW5kZW50TWVkaWFRdWVy
eVJlc3VsdHM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBIVE1M
UGljdHVyZUVsZW1lbnRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFByZWxvYWRTY2FubmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQ
cmVsb2FkU2Nhbm5lci5jcHAKaW5kZXggYmFjMjhkNDc0NjBjOGQ3YTJjMjhmYzc2MTI4ZTJlZGFj
NmUzNmQxYi4uYmE2YTIxNTAxNWE5YzM3YTAwMjM0NWY2YTVmNTJlNzM2MWNjOTJhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFByZWxvYWRTY2FubmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUHJlbG9hZFNjYW5uZXIuY3BwCkBA
IC0xMTgsNyArMTE4LDcgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBp
ZiAobV90YWdJZCA9PSBUYWdJZDo6U291cmNlICYmICFwaWN0dXJlU3RhdGUuaXNFbXB0eSgpICYm
ICFwaWN0dXJlU3RhdGUubGFzdCgpICYmIG1fbWVkaWFNYXRjaGVkICYmICFtX3NyY1NldEF0dHJp
YnV0ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNp
emVzQXR0cmlidXRlKG1fc2l6ZXNBdHRyaWJ1dGUsIGRvY3VtZW50LnJlbmRlclZpZXcoKSwgZG9j
dW1lbnQuZnJhbWUoKSk7CisgICAgICAgICAgICBmbG9hdCBzb3VyY2VTaXplID0gcGFyc2VTaXpl
c0F0dHJpYnV0ZShkb2N1bWVudCwgbV9zaXplc0F0dHJpYnV0ZSk7CiAgICAgICAgICAgICBJbWFn
ZUNhbmRpZGF0ZSBpbWFnZUNhbmRpZGF0ZSA9IGJlc3RGaXRTb3VyY2VGb3JJbWFnZUF0dHJpYnV0
ZXMobV9kZXZpY2VTY2FsZUZhY3RvciwgbV91cmxUb0xvYWQsIG1fc3JjU2V0QXR0cmlidXRlLCBz
b3VyY2VTaXplKTsKICAgICAgICAgICAgIGlmICghaW1hZ2VDYW5kaWRhdGUuaXNFbXB0eSgpKSB7
CiAgICAgICAgICAgICAgICAgcGljdHVyZVN0YXRlLmxhc3QoKSA9IHRydWU7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgLy8gUmVzb2x2ZSBiZXR3ZWVuIHNy
YyBhbmQgc3JjU2V0IGlmIHdlIGhhdmUgdGhlbSBhbmQgdGhlIHRhZyBpcyBpbWcuCiAgICAgICAg
IGlmIChtX3RhZ0lkID09IFRhZ0lkOjpJbWcgJiYgIW1fc3JjU2V0QXR0cmlidXRlLmlzRW1wdHko
KSkgewotICAgICAgICAgICAgZmxvYXQgc291cmNlU2l6ZSA9IHBhcnNlU2l6ZXNBdHRyaWJ1dGUo
bV9zaXplc0F0dHJpYnV0ZSwgZG9jdW1lbnQucmVuZGVyVmlldygpLCBkb2N1bWVudC5mcmFtZSgp
KTsKKyAgICAgICAgICAgIGZsb2F0IHNvdXJjZVNpemUgPSBwYXJzZVNpemVzQXR0cmlidXRlKGRv
Y3VtZW50LCBtX3NpemVzQXR0cmlidXRlKTsKICAgICAgICAgICAgIEltYWdlQ2FuZGlkYXRlIGlt
YWdlQ2FuZGlkYXRlID0gYmVzdEZpdFNvdXJjZUZvckltYWdlQXR0cmlidXRlcyhtX2RldmljZVNj
YWxlRmFjdG9yLCBtX3VybFRvTG9hZCwgbV9zcmNTZXRBdHRyaWJ1dGUsIHNvdXJjZVNpemUpOwog
ICAgICAgICAgICAgc2V0VXJsVG9Mb2FkKGltYWdlQ2FuZGlkYXRlLnN0cmluZy50b1N0cmluZygp
LCB0cnVlKTsKICAgICAgICAgfQpAQCAtMTk4LDEwICsxOTgsOSBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKG1hdGNoKGF0dHJpYnV0ZU5hbWUsIG1lZGlhQXR0cikg
JiYgbV9tZWRpYUF0dHJpYnV0ZS5pc051bGwoKSkgewogICAgICAgICAgICAgICAgIG1fbWVkaWFB
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVWYWx1ZTsKLSAgICAgICAgICAgICAgICBSZWY8TWVkaWFRdWVy
eVNldD4gbWVkaWFTZXQgPSBNZWRpYVF1ZXJ5U2V0OjpjcmVhdGVBbGxvd2luZ0Rlc2NyaXB0aW9u
U3ludGF4KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPE1lZGlhUXVlcnlSZXN1bHQ+PiB2aWV3cG9ydERlcGVuZGVudE1lZGlhUXVlcnlSZXN1
bHRzOwotICAgICAgICAgICAgICAgIE1lZGlhUXVlcnlFdmFsdWF0b3IgZXZhbHVhdG9yKGRvY3Vt
ZW50LnByaW50aW5nKCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50LmZyYW1lKCksIGRv
Y3VtZW50LmRvY3VtZW50RWxlbWVudCgpID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCktPmNv
bXB1dGVkU3R5bGUoKSA6IG51bGxwdHIpOwotICAgICAgICAgICAgICAgIG1fbWVkaWFNYXRjaGVk
ID0gZXZhbHVhdG9yLmV2YWxDaGVja2luZ1ZpZXdwb3J0RGVwZW5kZW50UmVzdWx0cyhtZWRpYVNl
dC5wdHIoKSwgdmlld3BvcnREZXBlbmRlbnRNZWRpYVF1ZXJ5UmVzdWx0cyk7CisgICAgICAgICAg
ICAgICAgYXV0byBtZWRpYVNldCA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3Jp
cHRpb25TeW50YXgoYXR0cmlidXRlVmFsdWUpOworICAgICAgICAgICAgICAgIGF1dG8qIGRvY3Vt
ZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOworICAgICAgICAgICAgICAg
IG1fbWVkaWFNYXRjaGVkID0gTWVkaWFRdWVyeUV2YWx1YXRvciB7IGRvY3VtZW50LnByaW50aW5n
KCkgPyAicHJpbnQiIDogInNjcmVlbiIsIGRvY3VtZW50LCBkb2N1bWVudEVsZW1lbnQgPyBkb2N1
bWVudEVsZW1lbnQtPmNvbXB1dGVkU3R5bGUoKSA6IG51bGxwdHIgfS5ldmFsdWF0ZShtZWRpYVNl
dC5nZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBUYWdJZDo6U2NyaXB0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFJlc291cmNlUHJlbG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxSZXNvdXJjZVByZWxvYWRlci5jcHAKaW5kZXggMjI2YTllYmIzZTFjNDBkYWM4MGY2MmE4YTFl
YzYwNmRjMmMxMTIxOC4uYTE1Y2IyZDk0YTdmZjlkZmEyNzBlZjdiZjE2M2U1MWQyZWY1ZTY5YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFJlc291cmNlUHJlbG9h
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUmVzb3VyY2VQcmVs
b2FkZXIuY3BwCkBAIC01OCwxOCArNTgsMTcgQEAgdm9pZCBIVE1MUmVzb3VyY2VQcmVsb2FkZXI6
OnByZWxvYWQoUHJlbG9hZFJlcXVlc3RTdHJlYW0gcmVxdWVzdHMpCiAgICAgICAgIHByZWxvYWQo
V1RGTW92ZShyZXF1ZXN0KSk7CiB9CiAKLXN0YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hl
cyhGcmFtZSogZnJhbWUsIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgY29uc3QgU3Ry
aW5nJiBhdHRyaWJ1dGVWYWx1ZSkKK3N0YXRpYyBib29sIG1lZGlhQXR0cmlidXRlTWF0Y2hlcyhE
b2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiByZW5kZXJTdHlsZSwgY29uc3Qg
U3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSkKIHsKLSAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVk
aWFRdWVyaWVzID0gTWVkaWFRdWVyeVNldDo6Y3JlYXRlQWxsb3dpbmdEZXNjcmlwdGlvblN5bnRh
eChhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgTWVkaWFRdWVyeUV2YWx1YXRvciBtZWRpYVF1ZXJ5RXZh
bHVhdG9yKCJzY3JlZW4iLCBmcmFtZSwgcmVuZGVyU3R5bGUpOwotICAgIHJldHVybiBtZWRpYVF1
ZXJ5RXZhbHVhdG9yLmV2YWwobWVkaWFRdWVyaWVzLmdldCgpKTsKKyAgICBhdXRvIG1lZGlhUXVl
cmllcyA9IE1lZGlhUXVlcnlTZXQ6OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoYXR0
cmlidXRlVmFsdWUpOworICAgIHJldHVybiBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHsgInNjcmVlbiIs
IGRvY3VtZW50LCByZW5kZXJTdHlsZSB9LmV2YWx1YXRlKG1lZGlhUXVlcmllcy5nZXQoKSk7CiB9
CiAKIHZvaWQgSFRNTFJlc291cmNlUHJlbG9hZGVyOjpwcmVsb2FkKHN0ZDo6dW5pcXVlX3B0cjxQ
cmVsb2FkUmVxdWVzdD4gcHJlbG9hZCkKIHsKICAgICBBU1NFUlQobV9kb2N1bWVudC5mcmFtZSgp
KTsKICAgICBBU1NFUlQobV9kb2N1bWVudC5yZW5kZXJWaWV3KCkpOwotICAgIGlmICghcHJlbG9h
ZC0+bWVkaWEoKS5pc0VtcHR5KCkgJiYgIW1lZGlhQXR0cmlidXRlTWF0Y2hlcyhtX2RvY3VtZW50
LmZyYW1lKCksICZtX2RvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUoKSwgcHJlbG9hZC0+bWVk
aWEoKSkpCisgICAgaWYgKCFwcmVsb2FkLT5tZWRpYSgpLmlzRW1wdHkoKSAmJiAhbWVkaWFBdHRy
aWJ1dGVNYXRjaGVzKG1fZG9jdW1lbnQsICZtX2RvY3VtZW50LnJlbmRlclZpZXcoKS0+c3R5bGUo
KSwgcHJlbG9hZC0+bWVkaWEoKSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIENhY2hlZFJlc291
cmNlUmVxdWVzdCByZXF1ZXN0ID0gcHJlbG9hZC0+cmVzb3VyY2VSZXF1ZXN0KG1fZG9jdW1lbnQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01XaW5kb3cuY3BwCmluZGV4IGZlZmRiNTgwYWZjNWExYzY0YWI3MWRj
NzU3ODlkMjkxOTliYjYwOTIuLmZiMzA0YjRkNTM4MzFjNTNkMTYxMDg3MDgwNWZjYTI5N2UxZjQ5
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NV2luZG93LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVdpbmRvdy5jcHAKQEAgLTc5LDcgKzc5LDYgQEAKICNpbmNs
dWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQYWdlVHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5j
bHVkZSAiUGVyZm9ybWFuY2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1
ZGUgIlJlc291cmNlTG9hZEluZm8uaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVz
LmgiCiAjaW5jbHVkZSAiU2NoZWR1bGVkQWN0aW9uLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9FdmVudEhhbmRsZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21h
Yy9FdmVudEhhbmRsZXJNYWMubW0KaW5kZXggNzAwMjNiMWNiODU5NWEyYjRlMGQzNTY1ZWMyYzZh
YmNjY2QyNzViMy4uYzQ4ODQ1N2UyOGJlNTRiOTNmOTNmYzA3N2QzZWIzODU3NDQyNTY1YiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRXZlbnRIYW5kbGVyTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL0V2ZW50SGFuZGxlck1hYy5tbQpAQCAtMTE3NSwxMCAr
MTE3NSw4IEBAIEludFBvaW50IEV2ZW50SGFuZGxlcjo6ZWZmZWN0aXZlTW91c2VQb3NpdGlvbkZv
clNlbGVjdGlvbkF1dG9zY3JvbGwoKSBjb25zdAogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0
dXJuIG1fbGFzdEtub3duTW91c2VQb3NpdGlvbjsKIAotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBz
Y3JlZW5Gb3JEaXNwbGF5SUQocGFnZS0+Y2hyb21lKCkuZGlzcGxheUlEKCkpOwotICAgIEludFNp
emUgYXV0b3Njcm9sbEFkanVzdG1lbnRGYWN0b3IgPSBhdXRvc2Nyb2xsQWRqdXN0bWVudEZhY3Rv
ckZvclNjcmVlbkJvdW5kYXJpZXMobV9sYXN0S25vd25Nb3VzZUdsb2JhbFBvc2l0aW9uLCB0b1Vz
ZXJTcGFjZShzY3JlZW4uZnJhbWUsIG5pbCkpOwotCi0gICAgcmV0dXJuIG1fbGFzdEtub3duTW91
c2VQb3NpdGlvbiArIGF1dG9zY3JvbGxBZGp1c3RtZW50RmFjdG9yOworICAgIGF1dG8gZnJhbWUg
PSB0b1VzZXJTcGFjZShzY3JlZW4ocGFnZS0+Y2hyb21lKCkuZGlzcGxheUlEKCkpLmZyYW1lLCBu
aWwpOworICAgIHJldHVybiBtX2xhc3RLbm93bk1vdXNlUG9zaXRpb24gKyBhdXRvc2Nyb2xsQWRq
dXN0bWVudEZhY3RvckZvclNjcmVlbkJvdW5kYXJpZXMobV9sYXN0S25vd25Nb3VzZUdsb2JhbFBv
c2l0aW9uLCBmcmFtZSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1BsYXRmb3JtU2NyZWVuLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVNj
cmVlbi5oCmluZGV4IDBkODA3MzZhNWJiMmUwZDMxMzgyYTJiOTQ1YzZlODZkMzI2ZDNjODUuLmUy
OGZmMTk5NTBkZGE1NGUwOTA2ZDk4MGFiYzQ1MmFiMzcyMjYxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtU2NyZWVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGxhdGZvcm1TY3JlZW4uaApAQCAtMjMsMTAgKzIzLDcgQEAKICAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybVNjcmVlbl9oCi0jZGVmaW5lIFBsYXRmb3JtU2Ny
ZWVuX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNwcmFnbWEgb25jZQogCiAjaWYgUExB
VEZPUk0oTUFDKQogT0JKQ19DTEFTUyBOU1NjcmVlbjsKQEAgLTQ0LDQ0ICs0MSw0NCBAQCB0eXBl
ZGVmIHN0cnVjdCBfTlNQb2ludCBOU1BvaW50OwogT0JKQ19DTEFTUyBVSVNjcmVlbjsKICNlbmRp
ZgogCi10eXBlZGVmIHVpbnQzMl90IFBsYXRmb3JtRGlzcGxheUlEOwotCi10eXBlZGVmIFdURjo6
VmVjdG9yPGNoYXI+IENvbG9yUHJvZmlsZTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgRmxvYXRSZWN0OwotICAgIGNsYXNzIEZsb2F0U2l6ZTsKLSAgICBjbGFzcyBXaWRnZXQ7
CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBGbG9hdFNpemU7CitjbGFzcyBXaWRnZXQ7CiAKLSAg
ICBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7Ci0gICAgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KFdpZGdldCopOwotICAgIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopOwordXNp
bmcgUGxhdGZvcm1EaXNwbGF5SUQgPSB1aW50MzJfdDsKIAotICAgIGJvb2wgc2NyZWVuSGFzSW52
ZXJ0ZWRDb2xvcnMoKTsKK2ludCBzY3JlZW5EZXB0aChXaWRnZXQqKTsKK2ludCBzY3JlZW5EZXB0
aFBlckNvbXBvbmVudChXaWRnZXQqKTsKK2Jvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCop
OwogCi0gICAgRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAgRmxvYXRSZWN0IHNj
cmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7Citib29sIHNjcmVlbkhhc0ludmVydGVkQ29sb3Jz
KCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHNjcmVlblN1cHBvcnRzRXh0ZW5kZWRDb2xv
cihXaWRnZXQqIHdpZGdldCA9IG51bGxwdHIpOworRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0
Kik7CitGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKKworV0VCQ09SRV9F
WFBPUlQgYm9vbCBzY3JlZW5TdXBwb3J0c0V4dGVuZGVkQ29sb3IoV2lkZ2V0KiA9IG51bGxwdHIp
OwogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNX
aW5kb3cgKik7Ci0gICAgTlNTY3JlZW4gKnNjcmVlbkZvckRpc3BsYXlJRChQbGF0Zm9ybURpc3Bs
YXlJRCk7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBGbG9hdFJlY3QgdG9Vc2VyU3BhY2UoY29uc3Qg
TlNSZWN0JiwgTlNXaW5kb3cgKmRlc3RpbmF0aW9uKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBOU1Jl
Y3QgdG9EZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKK05T
U2NyZWVuICpzY3JlZW4oTlNXaW5kb3cgKik7CitOU1NjcmVlbiAqc2NyZWVuKFBsYXRmb3JtRGlz
cGxheUlEKTsKKworV0VCQ09SRV9FWFBPUlQgRmxvYXRSZWN0IHRvVXNlclNwYWNlKGNvbnN0IE5T
UmVjdCYsIE5TV2luZG93ICpkZXN0aW5hdGlvbik7CitXRUJDT1JFX0VYUE9SVCBOU1JlY3QgdG9E
ZXZpY2VTcGFjZShjb25zdCBGbG9hdFJlY3QmLCBOU1dpbmRvdyAqc291cmNlKTsKKworTlNQb2lu
dCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQb2ludCYsIE5TU2NyZWVuICopOwogCi0gICAgTlNQ
b2ludCBmbGlwU2NyZWVuUG9pbnQoY29uc3QgTlNQb2ludCYsIE5TU2NyZWVuICopOwogI2VuZGlm
CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgZmxvYXQgc2NyZWVuUFBJRmFjdG9yKCk7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIHNjcmVlblNpemUoKTsKLSAgICBXRUJDT1JFX0VYUE9S
VCBGbG9hdFNpemUgYXZhaWxhYmxlU2NyZWVuU2l6ZSgpOwotICAgIFdFQkNPUkVfRVhQT1JUIGZs
b2F0IHNjcmVlblNjYWxlRmFjdG9yKFVJU2NyZWVuICogPSBudWxscHRyKTsKKworZmxvYXQgc2Ny
ZWVuUFBJRmFjdG9yKCk7CitXRUJDT1JFX0VYUE9SVCBGbG9hdFNpemUgc2NyZWVuU2l6ZSgpOwor
V0VCQ09SRV9FWFBPUlQgRmxvYXRTaXplIGF2YWlsYWJsZVNjcmVlblNpemUoKTsKK1dFQkNPUkVf
RVhQT1JUIGZsb2F0IHNjcmVlblNjYWxlRmFjdG9yKFVJU2NyZWVuICogPSBudWxscHRyKTsKKwog
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBsYXRmb3JtU2Ny
ZWVuX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3Bs
YXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9EaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuY3BwCmluZGV4IGMxMDFiZWY4OWJjNmI2
MDgwOWY1ZGQxNDNlNDVlYTM1NjI0MTkwMTUuLmI1MWQ2OGFjNjE4NzRhZTIyNDQzMDE0ODRlMTAx
Zjc4MTA0N2FjMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xpZW50LmNwcApAQCAtMzQsOCAr
MzQsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGll
bnQ6OkRpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVudCgpCi0gICAgOiBtX3NjaGVkdWxlZChmYWxz
ZSkKLSAgICAsIG1fZGlzcGxheUlESXNTZXQoZmFsc2UpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Rpc3BsYXlSZWZyZXNoTW9uaXRvckNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25p
dG9yQ2xpZW50LmgKaW5kZXggMzBkYWZmM2E2NDY4ZDdjM2NiOWJmOGY3OGI1MDAwODQ4NjZjNzZk
NS4uMjk5M2QxZDAyMDk5MzU2ZjE1M2ExMDgwMDNhMDE0NjUxYjI4ZjE5NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJlc2hNb25pdG9yQ2xp
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRGlzcGxheVJlZnJl
c2hNb25pdG9yQ2xpZW50LmgKQEAgLTIzLDE4ICsyMywxNyBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAg
Ki8KIAotI2lmbmRlZiBEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnRfaAotI2RlZmluZSBEaXNw
bGF5UmVmcmVzaE1vbml0b3JDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpZiBVU0UoUkVRVUVT
VF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQogCiAjaW5jbHVkZSAiUGxhdGZvcm1T
Y3JlZW4uaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRv
cjsKLWNsYXNzIERpc3BsYXlSZWZyZXNoTW9uaXRvck1hbmFnZXI7CiAKIGNsYXNzIERpc3BsYXlS
ZWZyZXNoTW9uaXRvckNsaWVudCB7CiBwdWJsaWM6CkBAIC00NiwxMyArNDUsOSBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIFJlZlB0cjxEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3Bs
YXlSZWZyZXNoTW9uaXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3QgPSAwOwogCi0gICAgUGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlEKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwbGF5SUQ7IH0K
LSAgICBib29sIGhhc0Rpc3BsYXlJRCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlESXNTZXQ7
IH0KLSAgICB2b2lkIHNldERpc3BsYXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpCi0g
ICAgewotICAgICAgICBtX2Rpc3BsYXlJRCA9IGRpc3BsYXlJRDsKLSAgICAgICAgbV9kaXNwbGF5
SURJc1NldCA9IHRydWU7Ci0gICAgfQorICAgIFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCgp
IGNvbnN0IHsgcmV0dXJuIG1fZGlzcGxheUlELnZhbHVlKCk7IH0KKyAgICBib29sIGhhc0Rpc3Bs
YXlJRCgpIGNvbnN0IHsgcmV0dXJuICEhbV9kaXNwbGF5SUQ7IH0KKyAgICB2b2lkIHNldERpc3Bs
YXlJRChQbGF0Zm9ybURpc3BsYXlJRCBkaXNwbGF5SUQpIHsgbV9kaXNwbGF5SUQgPSBkaXNwbGF5
SUQ7IH0KIAogICAgIHZvaWQgc2V0SXNTY2hlZHVsZWQoYm9vbCBpc1NjaGVkdWxlZCkgeyBtX3Nj
aGVkdWxlZCA9IGlzU2NoZWR1bGVkOyB9CiAgICAgYm9vbCBpc1NjaGVkdWxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2NoZWR1bGVkOyB9CkBAIC02MCwxMyArNTUsMTAgQEAgcHVibGljOgogICAgIHZv
aWQgZmlyZURpc3BsYXlSZWZyZXNoSWZOZWVkZWQoZG91YmxlIHRpbWVzdGFtcCk7CiAKIHByaXZh
dGU6Ci0gICAgYm9vbCBtX3NjaGVkdWxlZDsKLSAgICBib29sIG1fZGlzcGxheUlESXNTZXQ7Ci0g
ICAgUGxhdGZvcm1EaXNwbGF5SUQgbV9kaXNwbGF5SUQ7CisgICAgYm9vbCBtX3NjaGVkdWxlZCB7
IGZhbHNlIH07CisgICAgT3B0aW9uYWw8UGxhdGZvcm1EaXNwbGF5SUQ+IG1fZGlzcGxheUlEOwog
fTsKIAogfQogCiAjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5JTUFUSU9OX0ZSQU1FX0RJU1BMQVlf
TU9OSVRPUikKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyVXBkYXRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NMYXllclVwZGF0ZXIuaAppbmRleCA4MTUyMDNmOTVkYTVhYTRlYmI3
MmZjOWJjZDM4MmZiZDAzZGI1M2YyLi41ZDdlNTFmZGZhYzg0YTVjZWFiNThkMTNmMDg0MmRkYWJm
NDgyNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0xheWVyVXBkYXRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzTGF5ZXJVcGRhdGVyLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEdyYXBoaWNzTGF5ZXJVcGRhdGVy
X2gKLSNkZWZpbmUgR3JhcGhpY3NMYXllclVwZGF0ZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNs
dWRlICJEaXNwbGF5UmVmcmVzaE1vbml0b3JDbGllbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgpAQCAtNjgsNSArNjcsMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gR3JhcGhpY3NMYXllclVwZGF0ZXJfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAppbmRl
eCA1YWJiMGFjY2UzOGI5MGZkOGRjYjQxNWM1ZDhkNTcyMGY4MTM5Y2FmLi5kMTZmNDg0MzUyNmFi
YzljN2Q3ZmE0ZTliYWNhZmE2YTgxZWZjOTVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAtMjYsOCArMjYsNyBA
QAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIEltYWdlRGVjb2Rlcl9oCi0jZGVmaW5l
IEltYWdlRGVjb2Rlcl9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJJbWFnZVNvdXJjZS5oIgpAQCAtNDEsNiArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK3VzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKKwogICAgIC8vIElt
YWdlRnJhbWUgcmVwcmVzZW50cyB0aGUgZGVjb2RlZCBpbWFnZSBkYXRhLiAgVGhpcyBidWZmZXIg
aXMgd2hhdCBhbGwKICAgICAvLyBkZWNvZGVycyB3cml0ZSBhIHNpbmdsZSBmcmFtZSBpbnRvLgog
ICAgIGNsYXNzIEltYWdlRnJhbWUgewpAQCAtNDExLDUgKzQxMiwzIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtRXZlbnRGYWN0b3J5TWFj
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMu
aAppbmRleCA4YTBlOWJjMGVlZjE5NTU0ODY0N2NkYmQ4MTIzZDNmODAxZDQxYmM3Li4yNDYwNDE3
NzAzNTdiNzM3Yzk1MjUyODA1ZjRiOGRmZjRkODk1NTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMuaApAQCAtMjMsOCAr
MjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5k
ZWYgUGxhdGZvcm1FdmVudEZhY3RvcnlNYWNfaAotI2RlZmluZSBQbGF0Zm9ybUV2ZW50RmFjdG9y
eU1hY19oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpAQCAtNDAsMTYgKzM5LDE1IEBAIHB1
YmxpYzoKIH07CiAKICNpZiBQTEFURk9STShDT0NPQSkgJiYgZGVmaW5lZChfX09CSkNfXykKLS8v
IEZJWE1FOiBUaGlzIGRvZXNuJ3QgcmVhbGx5IGJlbG9uZyBoZXJlLgotV0VCQ09SRV9FWFBPUlQg
SW50UG9pbnQgZ2xvYmFsUG9pbnQoY29uc3QgTlNQb2ludCYgd2luZG93UG9pbnQsIE5TV2luZG93
ICopOwogCi0vLyBGSVhNRTogV2ViS2l0MiBoYXMgYSBsb3Qgb2YgY29kZSBjb3B5L3Bhc3RlZCBm
cm9tIFBsYXRmb3JtRXZlbnRGYWN0b3J5TWFjIGluIFdlYkV2ZW50RmFjdG9yeS4gSXQgc2hvdWxk
IGJlIGNhcmVmdWxseSBzaGFyZWQgd2l0aCBXZWJDb3JlLgotV0VCQ09SRV9FWFBPUlQgaW50IHdp
bmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoTlNFdmVudCopOwotV0VCQ09SRV9FWFBPUlQgU3RyaW5n
IGtleUlkZW50aWZpZXJGb3JLZXlFdmVudChOU0V2ZW50Kik7Ci1XRUJDT1JFX0VYUE9SVCBkb3Vi
bGUgZXZlbnRUaW1lU3RhbXBTaW5jZTE5NzAoTlNFdmVudCopOworLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gZG9lc24ndCByZWFsbHkgYmVsb25nIGluIHRoaXMgaGVhZGVyLgorV0VCQ09SRV9FWFBP
UlQgTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwgTlNXaW5k
b3cgKik7CisKKy8vIEZJWE1FOiBXZWJLaXQyIGhhcyBhIGxvdCBvZiBjb2RlIGNvcGllZCBhbmQg
cGFzdGVkIGZyb20gUGxhdGZvcm1FdmVudEZhY3RvcnlNYWMgaW4gV2ViRXZlbnRGYWN0b3J5LiBN
b3JlIG9mIGl0IHNob3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJDb3JlLgorV0VCQ09SRV9FWFBPUlQg
aW50IHdpbmRvd3NLZXlDb2RlRm9yS2V5RXZlbnQoTlNFdmVudCAqKTsKK1dFQkNPUkVfRVhQT1JU
IFN0cmluZyBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoTlNFdmVudCAqKTsKK1dFQkNPUkVfRVhQ
T1JUIGRvdWJsZSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChOU0V2ZW50ICopOwogCiAjZW5kaWYK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWNfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
RXZlbnRGYWN0b3J5TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3Jt
RXZlbnRGYWN0b3J5TWFjLm1tCmluZGV4IGUyMjI0ZTBiYmRhNGI3OTRmMTRkMDliMGVkNTM1NTU5
MDQxNWExOWYuLmE3NDc0NzNjZDE1MDcyNWMzYmIyM2QyMmQ2NWRjYjcxNmVkMzhjNjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybUV2ZW50RmFjdG9yeU1h
Yy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1FdmVudEZhY3Rv
cnlNYWMubW0KQEAgLTM4LDE1ICszOCwxNSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUlu
dFBvaW50IGdsb2JhbFBvaW50KGNvbnN0IE5TUG9pbnQmIHdpbmRvd1BvaW50LCBOU1dpbmRvdyAq
d2luZG93KQorTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5kb3dQb2ludCwg
TlNXaW5kb3cgKndpbmRvdykKIHsKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJh
Z21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIK
LSAgICByZXR1cm4gSW50UG9pbnQoZmxpcFNjcmVlblBvaW50KFt3aW5kb3cgY29udmVydEJhc2VU
b1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cpKSk7CisgICAgcmV0
dXJuIGZsaXBTY3JlZW5Qb2ludChbd2luZG93IGNvbnZlcnRCYXNlVG9TY3JlZW46d2luZG93UG9p
bnRdLCBzY3JlZW4od2luZG93KSk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiB9CiAK
LXN0YXRpYyBJbnRQb2ludCBnbG9iYWxQb2ludEZvckV2ZW50KE5TRXZlbnQgKmV2ZW50KQorc3Rh
dGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKIHsKICAgICBz
d2l0Y2ggKFtldmVudCB0eXBlXSkgewogI2lmIGRlZmluZWQoX19MUDY0X18pICYmIF9fTUFDX09T
X1hfVkVSU0lPTl9NQVhfQUxMT1dFRCA+PSAxMDEwMDMKQEAgLTcwLDcgKzcwLDcgQEAgc3RhdGlj
IEludFBvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVudCAqZXZlbnQpCiAjcHJhZ21hIGNs
YW5nIGRpYWdub3N0aWMgcG9wCiAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsUG9pbnQoW2V2ZW50
IGxvY2F0aW9uSW5XaW5kb3ddLCBbZXZlbnQgd2luZG93XSk7CiAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gSW50UG9pbnQoKTsKKyAgICAgICAgICAgIHJldHVybiB7IDAsIDAg
fTsKICAgICB9CiB9CiAKQEAgLTQ4NSw3ICs0ODUsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgLy8g
UGxhdGZvcm1Nb3VzZUV2ZW50CiAgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZvckV2ZW50KGV2
ZW50LCB3aW5kb3dWaWV3KTsKLSAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IGdsb2JhbFBvaW50
Rm9yRXZlbnQoZXZlbnQpOworICAgICAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoZ2xv
YmFsUG9pbnRGb3JFdmVudChldmVudCkpOwogICAgICAgICBtX2J1dHRvbiA9IG1vdXNlQnV0dG9u
Rm9yRXZlbnQoZXZlbnQpOwogICAgICAgICBtX2NsaWNrQ291bnQgPSBjbGlja0NvdW50Rm9yRXZl
bnQoZXZlbnQpOwogCkBAIC01MTQsMTQgKzUxNCwxNCBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50QnVpbGRlcihOU0V2ZW50ICpldmVudCwgTlNWaWV3ICp3aW5kb3dWaWV3KQogICAg
IHsKICAgICAgICAgLy8gUGxhdGZvcm1FdmVudAotICAgICAgICBtX3R5cGUgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IFBsYXRmb3JtRXZlbnQ6OldoZWVsOwotICAgICAgICBtX21vZGlm
aWVycyAgICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsK
LSAgICAgICAgbV90aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBldmVudFRpbWVT
dGFtcFNpbmNlMTk3MChldmVudCk7CisgICAgICAgIG1fdHlwZSA9IFBsYXRmb3JtRXZlbnQ6Oldo
ZWVsOworICAgICAgICBtX21vZGlmaWVycyA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50KTsKKyAg
ICAgICAgbV90aW1lc3RhbXAgPSBldmVudFRpbWVTdGFtcFNpbmNlMTk3MChldmVudCk7CiAKICAg
ICAgICAgLy8gUGxhdGZvcm1XaGVlbEV2ZW50Ci0gICAgICAgIG1fcG9zaXRpb24gICAgICAgICAg
ICAgICAgICAgICAgICAgID0gcG9pbnRGb3JFdmVudChldmVudCwgd2luZG93Vmlldyk7Ci0gICAg
ICAgIG1fZ2xvYmFsUG9zaXRpb24gICAgICAgICAgICAgICAgICAgID0gZ2xvYmFsUG9pbnRGb3JF
dmVudChldmVudCk7Ci0gICAgICAgIG1fZ3JhbnVsYXJpdHkgICAgICAgICAgICAgICAgICAgICAg
ID0gU2Nyb2xsQnlQaXhlbFdoZWVsRXZlbnQ7CisgICAgICAgIG1fcG9zaXRpb24gPSBwb2ludEZv
ckV2ZW50KGV2ZW50LCB3aW5kb3dWaWV3KTsKKyAgICAgICAgbV9nbG9iYWxQb3NpdGlvbiA9IElu
dFBvaW50KGdsb2JhbFBvaW50Rm9yRXZlbnQoZXZlbnQpKTsKKyAgICAgICAgbV9ncmFudWxhcml0
eSA9IFNjcm9sbEJ5UGl4ZWxXaGVlbEV2ZW50OwogCiAgICAgICAgIEJPT0wgY29udGludW91czsK
ICAgICAgICAgd2tHZXRXaGVlbEV2ZW50RGVsdGFzKGV2ZW50LCAmbV9kZWx0YVgsICZtX2RlbHRh
WSwgJmNvbnRpbnVvdXMpOwpAQCAtNTM1LDEwICs1MzUsMTAgQEAgcHVibGljOgogICAgICAgICAg
ICAgbV9kZWx0YVkgKj0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KFNjcm9sbGJhcjo6cGl4ZWxzUGVyTGlu
ZVN0ZXAoKSk7CiAgICAgICAgIH0KIAotICAgICAgICBtX3BoYXNlICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IHBoYXNlRm9yRXZlbnQoZXZlbnQpOwotICAgICAgICBtX21vbWVudHVtUGhh
c2UgICAgICAgICAgICAgICAgICAgICA9IG1vbWVudHVtUGhhc2VGb3JFdmVudChldmVudCk7Ci0g
ICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyAgICAgICAgID0gY29udGludW91czsK
LSAgICAgICAgbV9kaXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2UgICAgICAgPSBbZXZlbnQgaXNE
aXJlY3Rpb25JbnZlcnRlZEZyb21EZXZpY2VdOworICAgICAgICBtX3BoYXNlID0gcGhhc2VGb3JF
dmVudChldmVudCk7CisgICAgICAgIG1fbW9tZW50dW1QaGFzZSA9IG1vbWVudHVtUGhhc2VGb3JF
dmVudChldmVudCk7CisgICAgICAgIG1faGFzUHJlY2lzZVNjcm9sbGluZ0RlbHRhcyA9IGNvbnRp
bnVvdXM7CisgICAgICAgIG1fZGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlID0gW2V2ZW50IGlz
RGlyZWN0aW9uSW52ZXJ0ZWRGcm9tRGV2aWNlXTsKICAgICB9CiB9OwogCkBAIC01NTMsMjMgKzU1
MywyMyBAQCBwdWJsaWM6CiAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50QnVpbGRlcihOU0V2ZW50
ICpldmVudCkKICAgICB7CiAgICAgICAgIC8vIFBsYXRmb3JtRXZlbnQKLSAgICAgICAgbV90eXBl
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBpc0tleVVwRXZlbnQoZXZlbnQpID8gUGxh
dGZvcm1FdmVudDo6S2V5VXAgOiBQbGF0Zm9ybUV2ZW50OjpLZXlEb3duOwotICAgICAgICBtX21v
ZGlmaWVycyAgICAgICAgICAgICAgICAgICAgICAgICA9IG1vZGlmaWVyc0ZvckV2ZW50KGV2ZW50
KTsKLSAgICAgICAgbV90aW1lc3RhbXAgICAgICAgICAgICAgICAgICAgICAgICAgPSBldmVudFRp
bWVTdGFtcFNpbmNlMTk3MChldmVudCk7CisgICAgICAgIG1fdHlwZSA9IGlzS2V5VXBFdmVudChl
dmVudCkgPyBQbGF0Zm9ybUV2ZW50OjpLZXlVcCA6IFBsYXRmb3JtRXZlbnQ6OktleURvd247Cisg
ICAgICAgIG1fbW9kaWZpZXJzID0gbW9kaWZpZXJzRm9yRXZlbnQoZXZlbnQpOworICAgICAgICBt
X3RpbWVzdGFtcCA9IGV2ZW50VGltZVN0YW1wU2luY2UxOTcwKGV2ZW50KTsKIAogICAgICAgICAv
LyBQbGF0Zm9ybUtleWJvYXJkRXZlbnQKLSAgICAgICAgbV90ZXh0ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSB0ZXh0RnJvbUV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV91bm1vZGlmaWVk
VGV4dCAgICAgICAgICAgICAgICAgICAgPSB1bm1vZGlmaWVkVGV4dEZyb21FdmVudChldmVudCk7
Ci0gICAgICAgIG1fa2V5SWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgID0ga2V5SWRlbnRp
ZmllckZvcktleUV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV93aW5kb3dzVmlydHVhbEtleUNvZGUg
ICAgICAgICAgICAgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50KTsKLSAgICAgICAg
bV9uYXRpdmVWaXJ0dWFsS2V5Q29kZSAgICAgICAgICAgICAgPSBbZXZlbnQga2V5Q29kZV07Ci0g
ICAgICAgIG1fbWFjQ2hhckNvZGUgICAgICAgICAgICAgICAgICAgICAgID0gd2tHZXROU0V2ZW50
S2V5Q2hhcihldmVudCk7CisgICAgICAgIG1fdGV4dCA9IHRleHRGcm9tRXZlbnQoZXZlbnQpOwor
ICAgICAgICBtX3VubW9kaWZpZWRUZXh0ID0gdW5tb2RpZmllZFRleHRGcm9tRXZlbnQoZXZlbnQp
OworICAgICAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yS2V5RXZlbnQoZXZl
bnQpOworICAgICAgICBtX3dpbmRvd3NWaXJ0dWFsS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2RlRm9y
S2V5RXZlbnQoZXZlbnQpOworICAgICAgICBtX25hdGl2ZVZpcnR1YWxLZXlDb2RlID0gW2V2ZW50
IGtleUNvZGVdOworICAgICAgICBtX21hY0NoYXJDb2RlID0gd2tHZXROU0V2ZW50S2V5Q2hhcihl
dmVudCk7CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAgIG1fYXV0
b1JlcGVhdCAgICAgICAgICAgICAgICAgICAgICAgID0gKFtldmVudCB0eXBlXSAhPSBOU0ZsYWdz
Q2hhbmdlZCkgJiYgW2V2ZW50IGlzQVJlcGVhdF07CisgICAgICAgIG1fYXV0b1JlcGVhdCA9IFtl
dmVudCB0eXBlXSAhPSBOU0ZsYWdzQ2hhbmdlZCAmJiBbZXZlbnQgaXNBUmVwZWF0XTsKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSAgICAgICAgbV9pc0tleXBhZCAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSBpc0tleXBhZEV2ZW50KGV2ZW50KTsKLSAgICAgICAgbV9pc1N5c3RlbUtl
eSAgICAgICAgICAgICAgICAgICAgICAgPSBmYWxzZTsgLy8gU3lzdGVtS2V5IGlzIGFsd2F5cyBm
YWxzZSBvbiB0aGUgTWFjLgorICAgICAgICBtX2lzS2V5cGFkID0gaXNLZXlwYWRFdmVudChldmVu
dCk7CisgICAgICAgIG1faXNTeXN0ZW1LZXkgPSBmYWxzZTsgLy8gU3lzdGVtS2V5IGlzIGFsd2F5
cyBmYWxzZSBvbiB0aGUgTWFjLgogCiAgICAgICAgIC8vIEFsd2F5cyB1c2UgMTMgZm9yIEVudGVy
L1JldHVybiAtLSB3ZSBkb24ndCB3YW50IHRvIHVzZSBBcHBLaXQncyBkaWZmZXJlbnQgY2hhcmFj
dGVyIGZvciBFbnRlci4KICAgICAgICAgaWYgKG1fd2luZG93c1ZpcnR1YWxLZXlDb2RlID09IFZL
X1JFVFVSTikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRm
b3JtU2NyZWVuTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtU2Ny
ZWVuTWFjLm1tCmluZGV4IGZlMTFlZGUxMjUzZjU0NDMyYmRkZDIyNTBmMjVkM2VjOGE1MDE5NDku
LmYxYzBjYzM3YzhhZmE1NzgwNGY2NmQzYWM3ZjEyMzgyOTIxMTQyM2QgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVNjcmVlbk1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1TY3JlZW5NYWMubW0KQEAgLTMwLDcgKzMw
LDYgQEAKICNpbXBvcnQgIkZsb2F0UmVjdC5oIgogI2ltcG9ydCAiRnJhbWVWaWV3LmgiCiAjaW1w
b3J0ICJIb3N0V2luZG93LmgiCi0KICNpbXBvcnQgPENvbG9yU3luYy9Db2xvclN5bmMuaD4KIAog
ZXh0ZXJuICJDIiB7CkBAIC00MCwxMDIgKzM5LDk5IEBAIGJvb2wgQ0dEaXNwbGF5VXNlc0ZvcmNl
VG9HcmF5KHZvaWQpOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBQbGF0Zm9ybURp
c3BsYXlJRCBkaXNwbGF5SURGcm9tU2NyZWVuKE5TU2NyZWVuICpzY3JlZW4pCi17Ci0gICAgcmV0
dXJuIChQbGF0Zm9ybURpc3BsYXlJRClbW1tzY3JlZW4gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVj
dEZvcktleTpAIk5TU2NyZWVuTnVtYmVyIl0gaW50VmFsdWVdOwotfQotCiAvLyBUaGVzZSBmdW5j
dGlvbnMgc2NhbGUgYmV0d2VlbiBzY3JlZW4gYW5kIHBhZ2UgY29vcmRpbmF0ZXMgYmVjYXVzZSBK
YXZhU2NyaXB0L0RPTSBvcGVyYXRpb25zCiAvLyBhc3N1bWUgdGhhdCB0aGUgc2NyZWVuIGFuZCB0
aGUgcGFnZSBzaGFyZSB0aGUgc2FtZSBjb29yZGluYXRlIHN5c3RlbS4KIAotc3RhdGljIFBsYXRm
b3JtRGlzcGxheUlEIGRpc3BsYXlGcm9tV2lkZ2V0KFdpZGdldCogd2lkZ2V0KQorc3RhdGljIFBs
YXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRChOU1NjcmVlbiAqc2NyZWVuKQoreworICAgIHJldHVy
biBbW1tzY3JlZW4gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5TU2NyZWVuTnVt
YmVyIl0gaW50VmFsdWVdOworfQorCitzdGF0aWMgUGxhdGZvcm1EaXNwbGF5SUQgZGlzcGxheUlE
KFdpZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0KQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIEZyYW1lVmlldyogdmlldyA9IHdpZGdldC0+cm9vdCgpOworICAgIGF1dG8qIHZpZXcg
PSB3aWRnZXQtPnJvb3QoKTsKICAgICBpZiAoIXZpZXcpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgcmV0dXJuIHZpZXctPmhvc3RXaW5kb3coKS0+ZGlzcGxheUlEKCk7CisgICAgYXV0byogaG9z
dFdpbmRvdyA9IHZpZXctPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGhvc3RXaW5kb3ctPmRpc3BsYXlJRCgpOwogfQog
Ci1zdGF0aWMgTlNTY3JlZW4gKnNjcmVlbkZvcldpZGdldChXaWRnZXQqIHdpZGdldCwgTlNXaW5k
b3cgKndpbmRvdykKKy8vIFNjcmVlbiBjb250YWluaW5nIHRoZSBtZW51YmFyLgorc3RhdGljIE5T
U2NyZWVuICpmaXJzdFNjcmVlbigpCiB7Ci0gICAgLy8gV2lkZ2V0IGlzIGluIGFuIE5TV2luZG93
LCB1c2UgaXRzIHNjcmVlbi4KLSAgICBpZiAod2luZG93KQotICAgICAgICByZXR1cm4gc2NyZWVu
Rm9yV2luZG93KHdpbmRvdyk7CisgICAgTlNBcnJheSAqc2NyZWVucyA9IFtOU1NjcmVlbiBzY3Jl
ZW5zXTsKKyAgICBpZiAoIVtzY3JlZW5zIGNvdW50XSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAg
ICByZXR1cm4gW3NjcmVlbnMgb2JqZWN0QXRJbmRleDowXTsKK30KIAotICAgIC8vIERpZG4ndCBn
ZXQgYW4gTlNXaW5kb3c7IHByb2JhYmx5IFdlYktpdDIuIFRyeSB1c2luZyB0aGUgV2lkZ2V0J3Mg
ZGlzcGxheSBJRC4KLSAgICBpZiAoTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvckRpc3BsYXlJ
RChkaXNwbGF5RnJvbVdpZGdldCh3aWRnZXQpKSkKLSAgICAgICAgcmV0dXJuIHNjcmVlbjsKK3N0
YXRpYyBOU1dpbmRvdyAqd2luZG93KFdpZGdldCogd2lkZ2V0KQoreworICAgIGlmICghd2lkZ2V0
KQorICAgICAgICByZXR1cm4gbmlsOworICAgIHJldHVybiB3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0
KCkud2luZG93OworfQogCi0gICAgLy8gV2lkZ2V0J3Mgd2luZG93IGlzIG9mZnNjcmVlbiwgb3Ig
bm8gc2NyZWVucy4gRmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzY3JlZW4gaWYgYXZhaWxhYmxlLgot
ICAgIHJldHVybiBzY3JlZW5Gb3JXaW5kb3cobmlsKTsKK3N0YXRpYyBOU1NjcmVlbiAqc2NyZWVu
KFdpZGdldCogd2lkZ2V0KQoreworICAgIC8vIElmIHRoZSB3aWRnZXQgaXMgaW4gYSB3aW5kb3cs
IHVzZSB0aGF0LCBvdGhlcndpc2UgdXNlIHRoZSBkaXNwbGF5IElEIGZyb20gdGhlIGhvc3Qgd2lu
ZG93LgorICAgIC8vIEZpcnN0IGNhc2UgaXMgZm9yIHdoZW4gdGhlIE5TV2luZG93IGlzIGluIHRo
ZSBzYW1lIHByb2Nlc3MsIHNlY29uZCBjYXNlIGZvciB3aGVuIGl0J3Mgbm90LgorICAgIGlmIChh
dXRvIHNjcmVlbkZyb21XaW5kb3cgPSB3aW5kb3cod2lkZ2V0KS5zY3JlZW4pCisgICAgICAgIHJl
dHVybiBzY3JlZW5Gcm9tV2luZG93OworICAgIHJldHVybiBzY3JlZW4oZGlzcGxheUlEKHdpZGdl
dCkpOwogfQogCiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgTlNXaW5k
b3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkgd2luZG93XSA6
IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lkZ2V0KHdpZGdldCwgd2lu
ZG93KTsKLSAgICByZXR1cm4gTlNCaXRzUGVyUGl4ZWxGcm9tRGVwdGgoc2NyZWVuLmRlcHRoKTsK
KyAgICByZXR1cm4gTlNCaXRzUGVyUGl4ZWxGcm9tRGVwdGgoc2NyZWVuKHdpZGdldCkuZGVwdGgp
OwogfQogCiBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgTlNXaW5kb3cgKndpbmRvdyA9IHdpZGdldCA/IFt3aWRnZXQtPnBsYXRmb3JtV2lkZ2V0KCkg
d2luZG93XSA6IG5pbDsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gc2NyZWVuRm9yV2lkZ2V0KHdp
ZGdldCwgd2luZG93KTsKLSAgICByZXR1cm4gTlNCaXRzUGVyU2FtcGxlRnJvbURlcHRoKHNjcmVl
bi5kZXB0aCk7CisgICAgcmV0dXJuIE5TQml0c1BlclNhbXBsZUZyb21EZXB0aChzY3JlZW4od2lk
Z2V0KS5kZXB0aCk7CiB9CiAKIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopCiB7Ci0g
ICAgLy8gQXQgdGhlIG1vbWVudCB0aGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBz
ZXR0aW5nLAotICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHNjcmVlbiB3ZSdy
ZSB1c2luZy4KKyAgICAvLyBUaGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBzZXR0
aW5nLCBzYW1lIG9uIGFsbCBzY3JlZW5zLgogICAgIHJldHVybiBDR0Rpc3BsYXlVc2VzRm9yY2VU
b0dyYXkoKTsKIH0KIAogYm9vbCBzY3JlZW5IYXNJbnZlcnRlZENvbG9ycygpCiB7Ci0gICAgLy8g
QXQgdGhlIG1vbWVudCB0aGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBzZXR0aW5n
LAotICAgIC8vIHNvIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHNjcmVlbiB3ZSdyZSB1c2lu
Zy4KKyAgICAvLyBUaGlzIGlzIGEgc3lzdGVtLXdpZGUgYWNjZXNzaWJpbGl0eSBzZXR0aW5nLCBz
YW1lIG9uIGFsbCBzY3JlZW5zLgogICAgIHJldHVybiBDR0Rpc3BsYXlVc2VzSW52ZXJ0ZWRQb2xh
cml0eSgpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAg
ICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxhdGZvcm1XaWRnZXQoKSB3
aW5kb3ddIDogbmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3JlZW5Gb3JXaWRnZXQod2lk
Z2V0LCB3aW5kb3cpOwotICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2NyZWVuIGZyYW1lXSwgd2lu
ZG93KTsKKyAgICByZXR1cm4gdG9Vc2VyU3BhY2UoW3NjcmVlbih3aWRnZXQpIGZyYW1lXSwgd2lu
ZG93KHdpZGdldCkpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQq
IHdpZGdldCkKIHsKLSAgICBOU1dpbmRvdyAqd2luZG93ID0gd2lkZ2V0ID8gW3dpZGdldC0+cGxh
dGZvcm1XaWRnZXQoKSB3aW5kb3ddIDogbmlsOwotICAgIE5TU2NyZWVuICpzY3JlZW4gPSBzY3Jl
ZW5Gb3JXaWRnZXQod2lkZ2V0LCB3aW5kb3cpOwotICAgIHJldHVybiB0b1VzZXJTcGFjZShbc2Ny
ZWVuIHZpc2libGVGcmFtZV0sIHdpbmRvdyk7CisgICAgcmV0dXJuIHRvVXNlclNwYWNlKFtzY3Jl
ZW4od2lkZ2V0KSB2aXNpYmxlRnJhbWVdLCB3aW5kb3cod2lkZ2V0KSk7CiB9CiAKLU5TU2NyZWVu
ICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKndpbmRvdykKK05TU2NyZWVuICpzY3JlZW4oTlNX
aW5kb3cgKndpbmRvdykKIHsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gW3dpbmRvdyBzY3JlZW5d
OyAvLyBuaWwgaWYgdGhlIHdpbmRvdyBpcyBvZmYtc2NyZWVuCi0gICAgaWYgKHNjcmVlbikKLSAg
ICAgICAgcmV0dXJuIHNjcmVlbjsKLQotICAgIE5TQXJyYXkgKnNjcmVlbnMgPSBbTlNTY3JlZW4g
c2NyZWVuc107Ci0gICAgaWYgKFtzY3JlZW5zIGNvdW50XSA+IDApCi0gICAgICAgIHJldHVybiBb
c2NyZWVucyBvYmplY3RBdEluZGV4OjBdOyAvLyBzY3JlZW4gY29udGFpbmluZyB0aGUgbWVudWJh
cgotCi0gICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gW3dpbmRvdyBzY3JlZW5dID86IGZpcnN0
U2NyZWVuKCk7CiB9CiAKLU5TU2NyZWVuICpzY3JlZW5Gb3JEaXNwbGF5SUQoUGxhdGZvcm1EaXNw
bGF5SUQgZGlzcGxheUlEKQorTlNTY3JlZW4gKnNjcmVlbihQbGF0Zm9ybURpc3BsYXlJRCBkaXNw
bGF5SUQpCiB7CiAgICAgZm9yIChOU1NjcmVlbiAqc2NyZWVuIGluIFtOU1NjcmVlbiBzY3JlZW5z
XSkgewotICAgICAgICBpZiAoZGlzcGxheUlERnJvbVNjcmVlbihzY3JlZW4pID09IGRpc3BsYXlJ
RCkKKyAgICAgICAgaWYgKFdlYkNvcmU6OmRpc3BsYXlJRChzY3JlZW4pID09IGRpc3BsYXlJRCkK
ICAgICAgICAgICAgIHJldHVybiBzY3JlZW47CiAgICAgfQotICAgIHJldHVybiBuaWw7CisgICAg
cmV0dXJuIGZpcnN0U2NyZWVuKCk7CiB9CiAKIGJvb2wgc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENv
bG9yKFdpZGdldCogd2lkZ2V0KQpAQCAtMTQ3LDE5ICsxNDMsMTQgQEAgYm9vbCBzY3JlZW5TdXBw
b3J0c0V4dGVuZGVkQ29sb3IoV2lkZ2V0KiB3aWRnZXQpCiAgICAgaWYgKCF3aWRnZXQpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgIE5TV2luZG93ICp3aW5kb3cgPSBbd2lkZ2V0LT5wbGF0
Zm9ybVdpZGdldCgpIHdpbmRvd107Ci0gICAgTlNTY3JlZW4gKnNjcmVlbiA9IHNjcmVlbkZvcldp
ZGdldCh3aWRnZXQsIHdpbmRvdyk7Ci0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBz
Y3JlZW4uY29sb3JTcGFjZS5DR0NvbG9yU3BhY2U7CisgICAgYXV0byBjb2xvclNwYWNlID0gc2Ny
ZWVuKHdpZGdldCkuY29sb3JTcGFjZS5DR0NvbG9yU3BhY2U7CiAKICNpZiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwMTIwMAogICAgIHJldHVybiBDR0NvbG9yU3BhY2VJc1dp
ZGVHYW11dFJHQihjb2xvclNwYWNlKTsKICNlbHNlCi0gICAgYm9vbCBpc1dpZGVHYW11dCA9IGZh
bHNlOwotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IGljY0RhdGEgPSBhZG9wdENGKENHQ29sb3JT
cGFjZUNvcHlJQ0NQcm9maWxlKGNvbG9yU3BhY2UpKTsKLSAgICBSZXRhaW5QdHI8Q29sb3JTeW5j
UHJvZmlsZVJlZj4gcHJvZmlsZSA9IGFkb3B0Q0YoQ29sb3JTeW5jUHJvZmlsZUNyZWF0ZShpY2NE
YXRhLmdldCgpLCBOVUxMKSk7Ci0gICAgaWYgKHByb2ZpbGUpCi0gICAgICAgIGlzV2lkZUdhbXV0
ID0gQ29sb3JTeW5jUHJvZmlsZUlzV2lkZUdhbXV0KHByb2ZpbGUuZ2V0KCkpOwotICAgIHJldHVy
biBpc1dpZGVHYW11dDsKKyAgICBhdXRvIGljY0RhdGEgPSBhZG9wdENGKENHQ29sb3JTcGFjZUNv
cHlJQ0NQcm9maWxlKGNvbG9yU3BhY2UpKTsKKyAgICBhdXRvIHByb2ZpbGUgPSBhZG9wdENGKENv
bG9yU3luY1Byb2ZpbGVDcmVhdGUoaWNjRGF0YS5nZXQoKSwgbnVsbHB0cikpOworICAgIHJldHVy
biBwcm9maWxlICYmIENvbG9yU3luY1Byb2ZpbGVJc1dpZGVHYW11dChwcm9maWxlLmdldCgpKTsK
ICNlbmRpZgogI2VuZGlmCiB9CkBAIC0xNjcsMTQgKzE1OCwxNCBAQCBib29sIHNjcmVlblN1cHBv
cnRzRXh0ZW5kZWRDb2xvcihXaWRnZXQqIHdpZGdldCkKIEZsb2F0UmVjdCB0b1VzZXJTcGFjZShj
b25zdCBOU1JlY3QmIHJlY3QsIE5TV2luZG93ICpkZXN0aW5hdGlvbikKIHsKICAgICBGbG9hdFJl
Y3QgdXNlclJlY3QgPSByZWN0OwotICAgIHVzZXJSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JX
aW5kb3coZGVzdGluYXRpb24pIGZyYW1lXSkgLSAodXNlclJlY3QueSgpICsgdXNlclJlY3QuaGVp
Z2h0KCkpKTsgLy8gZmxpcAorICAgIHVzZXJSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW4oZGVzdGlu
YXRpb24pIGZyYW1lXSkgLSAodXNlclJlY3QueSgpICsgdXNlclJlY3QuaGVpZ2h0KCkpKTsgLy8g
ZmxpcAogICAgIHJldHVybiB1c2VyUmVjdDsKIH0KIAogTlNSZWN0IHRvRGV2aWNlU3BhY2UoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBOU1dpbmRvdyAqc291cmNlKQogewogICAgIEZsb2F0UmVjdCBk
ZXZpY2VSZWN0ID0gcmVjdDsKLSAgICBkZXZpY2VSZWN0LnNldFkoTlNNYXhZKFtzY3JlZW5Gb3JX
aW5kb3coc291cmNlKSBmcmFtZV0pIC0gKGRldmljZVJlY3QueSgpICsgZGV2aWNlUmVjdC5oZWln
aHQoKSkpOyAvLyBmbGlwCisgICAgZGV2aWNlUmVjdC5zZXRZKE5TTWF4WShbc2NyZWVuKHNvdXJj
ZSkgZnJhbWVdKSAtIChkZXZpY2VSZWN0LnkoKSArIGRldmljZVJlY3QuaGVpZ2h0KCkpKTsgLy8g
ZmxpcAogICAgIHJldHVybiBkZXZpY2VSZWN0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbQppbmRleCA3ZGZjMDVhNmJjZGYxZTNmZjdjMzA5NjVkYzg5NWM3ZmYzZjFjNWMw
Li5iMGRjZDlhOWFhNmFlZmY0Y2RmNmFkZGUwNGVmN2NmMjlhZTQxODc2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTk3Niw3ICs5NzYsNyBAQCAtICh2b2lkKV9kcmFn
U291cmNlRW5kZWRBdDooTlNQb2ludCl3aW5kb3dMb2Mgb3BlcmF0aW9uOihOU0RyYWdPcGVyYXRp
b24pb3BlcmF0aQogICAgIGlmICghdmlldykKICAgICAgICAgcmV0dXJuOwogICAgIC8vIEZJWE1F
OiBUaGVzZSBhcmUgZmFrZSBtb2RpZmllciBrZXlzIGhlcmUsIGJ1dCB0aGV5IHNob3VsZCBiZSBy
ZWFsIG9uZXMgaW5zdGVhZC4KLSAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQo
d2luZG93TG9jKSwgZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRnZXQo
KSB3aW5kb3ddKSwKKyAgICBQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoSW50UG9pbnQod2luZG93
TG9jKSwgSW50UG9pbnQoZ2xvYmFsUG9pbnQod2luZG93TG9jLCBbdmlldy0+cGxhdGZvcm1XaWRn
ZXQoKSB3aW5kb3ddKSksCiAgICAgICAgIExlZnRCdXR0b24sIFBsYXRmb3JtRXZlbnQ6Ok1vdXNl
TW92ZWQsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBjdXJyZW50VGltZSgpLCBXZWJD
b3JlOjpGb3JjZUF0Q2xpY2spOwogICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPmV2ZW50SGFuZGxl
cigpLmRyYWdTb3VyY2VFbmRlZEF0KGV2ZW50LCAoRHJhZ09wZXJhdGlvbilvcGVyYXRpb24pOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9XZWJFdmVudEZhY3Rvcnku
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQppbmRleCBj
ZWJiYzI2OTAxYmU3OTNhODhiYWNiZjljOTJjN2Q1MzkyNzgwN2RjLi5jZjc3NDI3ZjU0ZWY0ZjE5
MGEzNmI1YzY4OTQyNzZjMDU0NDJlNjY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvbWFjL1dlYkV2ZW50RmFjdG9yeS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFj
L1dlYkV2ZW50RmFjdG9yeS5tbQpAQCAtMTM3LDM0ICsxMzcsNiBAQCBzdGF0aWMgaW50IGNsaWNr
Q291bnRGb3JFdmVudChOU0V2ZW50ICpldmVudCkKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
b3AKIH0KIAotc3RhdGljIE5TU2NyZWVuICpzY3JlZW5Gb3JXaW5kb3coTlNXaW5kb3cgKndpbmRv
dykKLXsKLSAgICBOU1NjcmVlbiAqc2NyZWVuID0gW3dpbmRvdyBzY3JlZW5dOyAvLyBuaWwgaWYg
dGhlIHdpbmRvdyBpcyBvZmYtc2NyZWVuCi0gICAgaWYgKHNjcmVlbikKLSAgICAgICAgcmV0dXJu
IHNjcmVlbjsKLSAgICAKLSAgICBOU0FycmF5ICpzY3JlZW5zID0gW05TU2NyZWVuIHNjcmVlbnNd
OwotICAgIGlmIChbc2NyZWVucyBjb3VudF0gPiAwKQotICAgICAgICByZXR1cm4gW3NjcmVlbnMg
b2JqZWN0QXRJbmRleDowXTsgLy8gc2NyZWVuIGNvbnRhaW5pbmcgdGhlIG1lbnViYXIKLSAgICAK
LSAgICByZXR1cm4gbmlsOwotfQotCi1zdGF0aWMgTlNQb2ludCBmbGlwU2NyZWVuUG9pbnQoY29u
c3QgTlNQb2ludCYgc2NyZWVuUG9pbnQsIE5TU2NyZWVuICpzY3JlZW4pCi17Ci0gICAgTlNQb2lu
dCBmbGlwcGVkUG9pbnQgPSBzY3JlZW5Qb2ludDsKLSAgICBmbGlwcGVkUG9pbnQueSA9IE5TTWF4
WShbc2NyZWVuIGZyYW1lXSkgLSBmbGlwcGVkUG9pbnQueTsKLSAgICByZXR1cm4gZmxpcHBlZFBv
aW50OwotfQotCi1zdGF0aWMgTlNQb2ludCBnbG9iYWxQb2ludChjb25zdCBOU1BvaW50JiB3aW5k
b3dQb2ludCwgTlNXaW5kb3cgKndpbmRvdykKLXsKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICByZXR1cm4gZmxpcFNjcmVlblBvaW50KFt3aW5kb3cgY29udmVydEJhc2VU
b1NjcmVlbjp3aW5kb3dQb2ludF0sIHNjcmVlbkZvcldpbmRvdyh3aW5kb3cpKTsKLSNwcmFnbWEg
Y2xhbmcgZGlhZ25vc3RpYyBwb3AKLX0KLQogc3RhdGljIE5TUG9pbnQgZ2xvYmFsUG9pbnRGb3JF
dmVudChOU0V2ZW50ICpldmVudCkKIHsKICAgICBzd2l0Y2ggKFtldmVudCB0eXBlXSkgewpAQCAt
MTg3LDcgKzE1OSw3IEBAIHN0YXRpYyBOU1BvaW50IGdsb2JhbFBvaW50Rm9yRXZlbnQoTlNFdmVu
dCAqZXZlbnQpCiAgICAgY2FzZSBOU1JpZ2h0TW91c2VVcDoKICAgICBjYXNlIE5TU2Nyb2xsV2hl
ZWw6CiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgICAgIHJldHVybiBnbG9iYWxQ
b2ludChbZXZlbnQgbG9jYXRpb25JbldpbmRvd10sIFtldmVudCB3aW5kb3ddKTsKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6Omdsb2JhbFBvaW50KFtldmVudCBsb2NhdGlvbkluV2luZG93XSwgW2V2
ZW50IHdpbmRvd10pOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBOU1plcm9Qb2ludDsK
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0K
aW5kZXggZjBmNDYzZDMxNjRhYTNhYjBkNGU4ODI5MjAyY2MzNWE1YTAyMzNkYi4uYjIyMWQyMjJh
Y2UxNjY2ZmJkN2M2Y2YyYTY5NWFjMmM4NzM4ZjFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQpAQCAtMTA4OSw3ICsxMDg5LDcgQEAgdm9pZCBX
ZWJWaWV3SW1wbDo6d2luZG93RGlkQ2hhbmdlQmFja2luZ1Byb3BlcnRpZXMoQ0dGbG9hdCBvbGRC
YWNraW5nU2NhbGVGYWN0b3IKIHZvaWQgV2ViVmlld0ltcGw6OndpbmRvd0RpZENoYW5nZVNjcmVl
bigpCiB7CiAgICAgTlNXaW5kb3cgKndpbmRvdyA9IG1fdGFyZ2V0V2luZG93Rm9yTW92ZVByZXBh
cmF0aW9uID8gbV90YXJnZXRXaW5kb3dGb3JNb3ZlUHJlcGFyYXRpb24gOiBtX3ZpZXcud2luZG93
OwotICAgIG1fcGFnZS0+d2luZG93U2NyZWVuRGlkQ2hhbmdlKChQbGF0Zm9ybURpc3BsYXlJRClb
W1tbd2luZG93IHNjcmVlbl0gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5TU2Ny
ZWVuTnVtYmVyIl0gaW50VmFsdWVdKTsKKyAgICBtX3BhZ2UtPndpbmRvd1NjcmVlbkRpZENoYW5n
ZShbW1tbd2luZG93IHNjcmVlbl0gZGV2aWNlRGVzY3JpcHRpb25dIG9iamVjdEZvcktleTpAIk5T
U2NyZWVuTnVtYmVyIl0gaW50VmFsdWVdKTsKIH0KIAogdm9pZCBXZWJWaWV3SW1wbDo6d2luZG93
RGlkQ2hhbmdlTGF5ZXJIb3N0aW5nKCkKQEAgLTI3NzgsNyArMjc3OCw3IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmRyYWdnZWRJbWFnZShOU0ltYWdlICppbWFnZSwgQ0dQb2ludCBlbmRQb2ludCwgTlNE
cmFnT3BlcmF0aW9uCiAgICAgLy8gUHJldmVudCBxdWV1ZWQgbW91c2VEcmFnZ2VkIGV2ZW50cyBm
cm9tIGNvbWluZyBhZnRlciB0aGUgZHJhZyBhbmQgZmFrZSBtb3VzZVVwIGV2ZW50LgogICAgIG1f
aWdub3Jlc01vdXNlRHJhZ2dlZEV2ZW50cyA9IHRydWU7CiAKLSAgICBtX3BhZ2UtPmRyYWdFbmRl
ZChXZWJDb3JlOjpJbnRQb2ludCh3aW5kb3dNb3VzZUxvYyksIFdlYkNvcmU6Omdsb2JhbFBvaW50
KHdpbmRvd01vdXNlTG9jLCBtX3ZpZXcud2luZG93KSwgb3BlcmF0aW9uKTsKKyAgICBtX3BhZ2Ut
PmRyYWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCh3aW5kb3dNb3VzZUxvYyksIFdlYkNvcmU6Oklu
dFBvaW50KFdlYkNvcmU6Omdsb2JhbFBvaW50KHdpbmRvd01vdXNlTG9jLCBtX3ZpZXcud2luZG93
KSksIG9wZXJhdGlvbik7CiB9CiAKIHN0YXRpYyBXZWJDb3JlOjpEcmFnQXBwbGljYXRpb25GbGFn
cyBhcHBsaWNhdGlvbkZsYWdzRm9yRHJhZyhOU1ZpZXcgKnZpZXcsIGlkIDxOU0RyYWdnaW5nSW5m
bz4gZHJhZ2dpbmdJbmZvKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dl
YlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmlu
ZGV4IDFmOWRjMDQwYzdjOGNjYzVjMWUwZjU5MzUzNjEyMzM1ZWZhZmUyOTIuLmIzZjhkZjliZTdk
NmNhMjliZGUwMzRhYzQyNWZlZWQ0N2I3MjAyZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBhZ2VQcm94eV9oCi0jZGVmaW5lIFdlYlBh
Z2VQcm94eV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1
ZGUgIkFQSVNlc3Npb24uaCIKQEAgLTY2Niw3ICs2NjUsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQg
ZGV2aWNlU2NhbGVGYWN0b3IoKSBjb25zdDsKICAgICB2b2lkIHNldEludHJpbnNpY0RldmljZVNj
YWxlRmFjdG9yKGZsb2F0KTsKICAgICB2b2lkIHNldEN1c3RvbURldmljZVNjYWxlRmFjdG9yKGZs
b2F0KTsKLSAgICB2b2lkIHdpbmRvd1NjcmVlbkRpZENoYW5nZShQbGF0Zm9ybURpc3BsYXlJRCk7
CisgICAgdm9pZCB3aW5kb3dTY3JlZW5EaWRDaGFuZ2UoV2ViQ29yZTo6UGxhdGZvcm1EaXNwbGF5
SUQpOwogCiAgICAgdm9pZCBzZXRVc2VGaXhlZExheW91dChib29sKTsKICAgICB2b2lkIHNldEZp
eGVkTGF5b3V0U2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJik7CkBAIC0xODMxLDUgKzE4MzAs
MyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBX
ZWJQYWdlUHJveHlfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmgKaW5kZXggZGE2NmMzYTU3MjBhNzU5YjU0
MTk2YmM1ODliOTM4YTQxNTdmOWY4OC4uYjNhMDgxOTQ0MTI0M2FiY2ViOWQ0YjUzM2FiY2NjMWQw
OWYyOTU4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJDaHJvbWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5oCkBAIC0yNCw4ICsyNCw3IEBACiAgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJDaHJvbWVDbGll
bnRfaAotI2RlZmluZSBXZWJDaHJvbWVDbGllbnRfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJXZWJGcmFtZS5oIgogI2luY2x1ZGUgPFdlYkNvcmUvQ2hyb21lQ2xpZW50Lmg+CkBAIC0yMTAs
NyArMjA5LDcgQEAgcHJpdmF0ZToKICAgICBib29sIGFkanVzdExheWVyRmx1c2hUaHJvdHRsaW5n
KFdlYkNvcmU6OkxheWVyRmx1c2hUaHJvdHRsZVN0YXRlOjpGbGFncykgb3ZlcnJpZGU7CiAKICNp
ZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9SKQotICAgIFJlZlB0
cjxXZWJDb3JlOjpEaXNwbGF5UmVmcmVzaE1vbml0b3I+IGNyZWF0ZURpc3BsYXlSZWZyZXNoTW9u
aXRvcihQbGF0Zm9ybURpc3BsYXlJRCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNv
cmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdl
YkNvcmU6OlBsYXRmb3JtRGlzcGxheUlEKSBjb25zdCBvdmVycmlkZTsKICNlbmRpZgogCiAgICAg
Q29tcG9zaXRpbmdUcmlnZ2VyRmxhZ3MgYWxsb3dlZENvbXBvc2l0aW5nVHJpZ2dlcnMoKSBjb25z
dCBvdmVycmlkZQpAQCAtMzQ2LDUgKzM0NSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYkNocm9tZUNsaWVudF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlz
cGxheVJlZnJlc2hNb25pdG9yLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yLmgKaW5kZXggOGM1YTVj
OTVkZTYyN2UwZTcyODM1YmM0ZDEyODcyOTdmYzEwNjA1MC4uMzJiN2Y1YWExN2EzMDYzOGMyYmQw
YjA4MTQ4Y2NmZDA3ZDg2OGRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL0NvY29hL1JlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvci5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9SZW1vdGVMYXllclRy
ZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IuaApAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3Jf
aAotI2RlZmluZSBSZW1vdGVMYXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3JfaAorI3ByYWdt
YSBvbmNlCiAKICNpZiBVU0UoUkVRVUVTVF9BTklNQVRJT05fRlJBTUVfRElTUExBWV9NT05JVE9S
KQogCkBAIC0zNSw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBSZW1vdGVM
YXllclRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IgOiBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheVJl
ZnJlc2hNb25pdG9yIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlbW90ZUxheWVyVHJlZURp
c3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlKFBsYXRmb3JtRGlzcGxheUlEIGRpc3BsYXlJRCwg
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEmIGRyYXdpbmdBcmVhKQorICAgIHN0YXRpYyBSZWY8
UmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGUoV2ViQ29yZTo6UGxh
dGZvcm1EaXNwbGF5SUQgZGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYgZHJh
d2luZ0FyZWEpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZW1vdGVMYXll
clRyZWVEaXNwbGF5UmVmcmVzaE1vbml0b3IoZGlzcGxheUlELCBkcmF3aW5nQXJlYSkpOwogICAg
IH0KQEAgLTQ3LDcgKzQ2LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGlkVXBkYXRlTGF5ZXJzKCk7
CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgUmVtb3RlTGF5ZXJUcmVlRGlzcGxheVJlZnJlc2hN
b25pdG9yKFBsYXRmb3JtRGlzcGxheUlELCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYSYpOwor
ICAgIGV4cGxpY2l0IFJlbW90ZUxheWVyVHJlZURpc3BsYXlSZWZyZXNoTW9uaXRvcihXZWJDb3Jl
OjpQbGF0Zm9ybURpc3BsYXlJRCwgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEmKTsKIAogICAg
IFdlYWtQdHI8UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE+IG1fZHJhd2luZ0FyZWE7CiB9OwpA
QCAtNTUsNSArNTQsMyBAQCBwcml2YXRlOgogfQogCiAjZW5kaWYgLy8gVVNFKFJFUVVFU1RfQU5J
TUFUSU9OX0ZSQU1FX0RJU1BMQVlfTU9OSVRPUikKLQotI2VuZGlmIC8vIFJlbW90ZUxheWVyVHJl
ZURpc3BsYXlSZWZyZXNoTW9uaXRvcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IDlkODNlMDY0Njc0NmIyYTI4ZjdkMGE3N2JmOTE1
YzRhMWRkYzNkZmMuLmI0MzJiYmQ2ODA0NGVjNmQ0ZmFkMjk2MWZlMWRiMTQzZWQ1MmQ4MTcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCkBA
IC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8K
IAotI2lmbmRlZiBEcmF3aW5nQXJlYV9oCi0jZGVmaW5lIERyYXdpbmdBcmVhX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFJbmZvLmgiCiAjaW5jbHVkZSAiTGF5ZXJUcmVl
Q29udGV4dC5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1R5cGVDYXN0cy5oPgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIElQQyB7CiBjbGFzcyBDb25uZWN0
aW9uOwpAQCAtMTExLDcgKzExMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2NoZWR1
bGVDb21wb3NpdGluZ0xheWVyRmx1c2hJbW1lZGlhdGVseSgpID0gMDsKIAogI2lmIFVTRShSRVFV
RVNUX0FOSU1BVElPTl9GUkFNRV9ESVNQTEFZX01PTklUT1IpCi0gICAgdmlydHVhbCBSZWZQdHI8
V2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0
b3IoUGxhdGZvcm1EaXNwbGF5SUQpOworICAgIHZpcnR1YWwgUmVmUHRyPFdlYkNvcmU6OkRpc3Bs
YXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJlc2hNb25pdG9yKFdlYkNvcmU6OlBs
YXRmb3JtRGlzcGxheUlEKTsKICNlbmRpZgogCiAjaWYgVVNFKENPT1JESU5BVEVEX0dSQVBISUNT
X01VTFRJUFJPQ0VTUykKQEAgLTE4Miw1ICsxODIsMyBAQCBwcml2YXRlOgogU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJLaXQ6OlRvVmFsdWVUeXBlTmFtZSkgXAogICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJLaXQ6OkRyYXdpbmdBcmVhJiBhcmVhKSB7IHJldHVybiBhcmVh
LnR5cGUoKSA9PSBXZWJLaXQ6OkFyZWFUeXBlOyB9IFwKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKLQotI2VuZGlmIC8vIERyYXdpbmdBcmVhX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEuaAppbmRleCBkZTNjYzI4NzQ5YzU2NjBjMzk0OTYzOWI4OWIwMGVmMDVkZThlNTgy
Li5iNWI2ZTViZWJhOTllNTVhNjkxODc1ZTQ2ZmY0MjllYmI2NDAzYjRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBAIC0yMyw4ICsyMyw3IEBACiAgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYV9oCi0jZGVmaW5lIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhX2gKKyNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWEuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVy
Q0FSZW1vdGUuaCIKQEAgLTc0LDcgKzczLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgYWRkVHJh
bnNhY3Rpb25DYWxsYmFja0lEKHVpbnQ2NF90IGNhbGxiYWNrSUQpIG92ZXJyaWRlOwogCi0gICAg
UmVmUHRyPFdlYkNvcmU6OkRpc3BsYXlSZWZyZXNoTW9uaXRvcj4gY3JlYXRlRGlzcGxheVJlZnJl
c2hNb25pdG9yKFBsYXRmb3JtRGlzcGxheUlEKSBvdmVycmlkZTsKKyAgICBSZWZQdHI8V2ViQ29y
ZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yPiBjcmVhdGVEaXNwbGF5UmVmcmVzaE1vbml0b3IoV2Vi
Q29yZTo6UGxhdGZvcm1EaXNwbGF5SUQpIG92ZXJyaWRlOwogICAgIHZvaWQgd2lsbERlc3Ryb3lE
aXNwbGF5UmVmcmVzaE1vbml0b3IoV2ViQ29yZTo6RGlzcGxheVJlZnJlc2hNb25pdG9yKik7CiAK
ICAgICBib29sIHNob3VsZFVzZVRpbGVkQmFja2luZ0ZvckZyYW1lVmlldyhjb25zdCBXZWJDb3Jl
OjpGcmFtZVZpZXcqKSBvdmVycmlkZTsKQEAgLTE3OSw1ICsxNzgsMyBAQCBwcml2YXRlOgogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRFJBV0lOR19BUkVB
KFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLCBEcmF3aW5nQXJlYVR5cGVSZW1vdGVMYXllclRy
ZWUpCi0KLSNlbmRpZiAvLyBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYV9oCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>