<?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>136900</bug_id>
          
          <creation_ts>2014-09-17 17:18:28 -0700</creation_ts>
          <short_desc>Use fastHasAttribute() / fastGetAttribute() when possible</short_desc>
          <delta_ts>2014-09-21 12:44:17 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1035793</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-17 17:18:28 -0700</bug_when>
    <thetext>Use fastHasAttribute() / fastGetAttribute() when possible, that is when the attribute is not SVG-animated or the |style| attribute, to avoid synchronizing attributes unnecessarily.
We should also avoid calling hasAttribute(xxxAttr) then getAttribute(xxxAttr) and it causes 2 linear searches. It is best to call getAttribute(xxxAttr) directly and check if it returns the nullAtom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035797</commentid>
    <comment_count>1</comment_count>
      <attachid>238272</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-17 17:31:30 -0700</bug_when>
    <thetext>Created attachment 238272
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035839</commentid>
    <comment_count>2</comment_count>
      <attachid>238272</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-09-17 22:36:49 -0700</bug_when>
    <thetext>Comment on attachment 238272
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1386
&gt; -    if (!element-&gt;hasAttribute(contenteditableAttr))
&gt; +    const AtomicString&amp; contentEditableValue = element-&gt;fastGetAttribute(contenteditableAttr);
&gt; +    if (contentEditableValue.isNull())
&gt;          return false;
&gt;      
&gt; -    const AtomicString&amp; contentEditableValue = element-&gt;fastGetAttribute(contenteditableAttr);
&gt;      // Both &quot;true&quot; (case-insensitive) and the empty string count as true.
&gt;      return contentEditableValue.isEmpty() || equalIgnoringCase(contentEditableValue, &quot;true&quot;);

Nothing to do with your patch, but this code looks very fishy. I am not convinced it is correct.

&gt; Source/WebCore/html/HTMLAppletElement.cpp:132
&gt;          paramNames.append(&quot;codeBase&quot;);

ASCIILiteral() missing here.

&gt; Source/WebCore/html/HTMLAppletElement.cpp:144
&gt;          paramNames.append(&quot;archive&quot;);

ditto.

&gt; Source/WebCore/html/HTMLAppletElement.cpp:153
&gt;          paramNames.append(&quot;mayScript&quot;);

ditto.

&gt; Source/WebCore/html/HTMLButtonElement.cpp:197
&gt;  String HTMLButtonElement::value() const

Maybe change the return type to const AtomicString&amp; ?

&gt; Source/WebCore/html/HTMLDocument.cpp:113
&gt;      HTMLElement* b = body();
&gt;      if (!b)
&gt;          return String();
&gt; -    return b-&gt;getAttribute(dirAttr);
&gt; +    return b-&gt;fastGetAttribute(dirAttr);

Let&apos;s fix this:
    if (HTMLElement* body = this-&gt;body())
        return body-&gt;fastXXX
    return String();

&gt; Source/WebCore/html/HTMLImageElement.cpp:209
&gt;      // also heavily discussed by Hixie on bugzilla
&gt; -    String alt = getAttribute(altAttr);
&gt; +    String alt = fastGetAttribute(altAttr);
&gt;      // fall back to title attribute
&gt;      if (alt.isNull())
&gt; -        alt = getAttribute(titleAttr);
&gt; +        alt = fastGetAttribute(titleAttr);
&gt;      return alt;

Fix everything to const AtomicString&amp;?

&gt; Source/WebCore/html/HTMLScriptElement.cpp:118
&gt;  String HTMLScriptElement::sourceAttributeValue() const

Change return type?

&gt; Source/WebCore/html/HTMLScriptElement.cpp:123
&gt;  String HTMLScriptElement::charsetAttributeValue() const

ditto?

&gt; Source/WebCore/html/HTMLScriptElement.cpp:133
&gt;  String HTMLScriptElement::languageAttributeValue() const

ditto?

&gt; Source/WebCore/html/HTMLScriptElement.cpp:138
&gt;  String HTMLScriptElement::forAttributeValue() const

ditto?

&gt; Source/WebCore/html/HTMLScriptElement.cpp:143
&gt;  String HTMLScriptElement::eventAttributeValue() const

ditto?

&gt; Source/WebCore/html/HTMLTableElement.cpp:563
&gt;  String HTMLTableElement::rules() const

ditto?

&gt; Source/WebCore/html/HTMLTableElement.cpp:568
&gt;  String HTMLTableElement::summary() const

ditto?

&gt; Source/WebCore/html/HTMLTableSectionElement.cpp:108
&gt;  String HTMLTableSectionElement::align() const

ditto?

&gt; Source/WebCore/html/HTMLTableSectionElement.cpp:118
&gt;  String HTMLTableSectionElement::ch() const

ditto?

&gt; Source/WebCore/html/HTMLTableSectionElement.cpp:138
&gt;  String HTMLTableSectionElement::vAlign() const

ditto?

&gt; Source/WebCore/loader/FormSubmission.cpp:157
&gt;          String attributeValue;

Should be AtomicString.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035928</commentid>
    <comment_count>3</comment_count>
      <attachid>238311</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-18 09:08:18 -0700</bug_when>
    <thetext>Created attachment 238311
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035929</commentid>
    <comment_count>4</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2014-09-18 09:09:08 -0700</bug_when>
    <thetext>I made all the updates except for those in HTMLScriptElement because those methods are virtual and actually return String types for SVG overrides.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035941</commentid>
    <comment_count>5</comment_count>
      <attachid>238311</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-18 09:52:17 -0700</bug_when>
    <thetext>Comment on attachment 238311
Patch

Clearing flags on attachment: 238311

Committed r173724: &lt;http://trac.webkit.org/changeset/173724&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1035942</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-18 09:52:21 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1036359</commentid>
    <comment_count>7</comment_count>
      <attachid>238272</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-21 12:44:17 -0700</bug_when>
    <thetext>Comment on attachment 238272
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1383
&gt; +    if (contentEditableValue.isNull())
&gt;          return false;

The code change is fine, but the logic here is wrong. Looking at HTMLElement::collectStyleForPresentationAttribute, it seems that null means we inherit the attribute from the parent, and does not mean &quot;false&quot;, unlike &quot;false&quot;.

This code is missing proper handling for &quot;plaintext-only&quot;, treating it as false, and it also incorrectly treats all other unknown strings the same as &quot;false&quot;, while the real code treats them the same as a missing attribute.

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:1386
&gt;&gt;      return contentEditableValue.isEmpty() || equalIgnoringCase(contentEditableValue, &quot;true&quot;);
&gt; 
&gt; Nothing to do with your patch, but this code looks very fishy. I am not convinced it is correct.

This part matches the code in HTMLElement::collectStyleForPresentationAttribute, so it’s at least consistent with the actual WebKit behavior.

&gt; Source/WebCore/editing/EditingStyle.cpp:282
&gt;          return 0;

Missed a chance to make this nullptr.

&gt; Source/WebCore/editing/EditingStyle.cpp:307
&gt;          return 0;

Missed a chance to make this nullptr.

&gt; Source/WebCore/editing/EditingStyle.cpp:310
&gt;          return 0;

Missed a chance to make this nullptr.

&gt; Source/WebCore/editing/SplitElementCommand.cpp:94
&gt; +    const AtomicString&amp; id = m_element1-&gt;fastGetAttribute(HTMLNames::idAttr);

I think this should be using getIdAttribute, although that’s just a tiny optimization for when there is no value. But since we have it, I think we should use it.

&gt; Source/WebCore/editing/SplitElementCommand.cpp:96
&gt; +        m_element2-&gt;setAttribute(HTMLNames::idAttr, id);

I think this should be using setIdAttribute, although it compiles to the same code that’s here.

&gt;&gt; Source/WebCore/html/HTMLDocument.cpp:113
&gt;&gt; +    return b-&gt;fastGetAttribute(dirAttr);
&gt; 
&gt; Let&apos;s fix this:
&gt;     if (HTMLElement* body = this-&gt;body())
&gt;         return body-&gt;fastXXX
&gt;     return String();

Variable name fix would be good, but is it really good to reverse it just to scope the variable? I like the early return version better, even though it&apos;s one line longer, because the main flow of the function stays on the left inside of flowing into an if statement.

&gt; Source/WebCore/page/Frame.cpp:479
&gt; +    return matchLabelsAgainstString(labels, element-&gt;fastGetAttribute(idAttr));

Can use getIdAttribute.

&gt; Source/WebCore/rendering/RenderTableCell.cpp:182
&gt; +        String nowrap = element()-&gt;fastGetAttribute(nowrapAttr);
&gt;          if (!nowrap.isNull() &amp;&amp; w.isFixed())

Should be fastHasAttribute; nothing ever uses the return value except to check for null. Also seems we should put that into the if statement above rather than calling styleOrColLogicalWidth even when it&apos;s not used. Maybe switch style to early return, not sure since this is only part of the function’s job.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238272</attachid>
            <date>2014-09-17 17:31:30 -0700</date>
            <delta_ts>2014-09-21 12:44:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136900-20140917173127.patch</filename>
            <type>text/plain</type>
            <size>50362</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNzA1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODNlY2UxZTNjZTgyNjg4
ZDRlYjFlOWRmNTFmZjkwMTcxMTM3ZmIxYy4uOWQ2MjkzOTM3OTFlMmQxZTI5MDQ5OTkzNzczNmMx
ZmM0ZTljYjcwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNC0wOS0xNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBmYXN0SGFzQXR0cmli
dXRlKCkgLyBmYXN0R2V0QXR0cmlidXRlKCkgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIGZhc3RIYXNBdHRyaWJ1dGUoKSAv
IGZhc3RHZXRBdHRyaWJ1dGUoKSB3aGVuIHBvc3NpYmxlLCB0aGF0IGlzIHdoZW4KKyAgICAgICAg
dGhlIGF0dHJpYnV0ZSBpcyBub3QgU1ZHLWFuaW1hdGVkIG9yIHRoZSB8c3R5bGV8IGF0dHJpYnV0
ZSwgdG8gYXZvaWQKKyAgICAgICAgc3luY2hyb25pemluZyBhdHRyaWJ1dGVzIHVubmVjZXNzYXJp
bHkuCisKKyAgICAgICAgQWxzbyBhdm9pZCBjYWxsaW5nIGhhc0F0dHJpYnV0ZSh4eHhBdHRyKSB0
aGVuIGdldEF0dHJpYnV0ZSh4eHhBdHRyKSBhcworICAgICAgICBpdCBjYXVzZXMgMiBsaW5lYXIg
c2VhcmNoZXMuIEl0IGlzIGJlc3QgdG8gY2FsbCBnZXRBdHRyaWJ1dGUoeHh4QXR0cikKKyAgICAg
ICAgZGlyZWN0bHkgYW5kIGNoZWNrIGlmIGl0IHJldHVybnMgdGhlIG51bGxBdG9tLgorCisgICAg
ICAgIE5vIG5ldyB0ZXN0cywgbm8gYmVoYXZpb3IgY2hhbmdlLiBFbGVtZW50OjpmYXN0QXR0cmli
dXRlTG9va3VwQWxsb3dlZCgpCisgICAgICAgIGlzIHRoZXJlIGFzIGEgc2FmZXR5IHNldCBmb3Ig
ZGVidWcgYnVpbGRzLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlz
dEJveE9wdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbjo6aXNFbmFibGVkKToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlO
b2RlT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
OjphbHRlcm5hdGl2ZVRleHRGb3JXZWJBcmVhKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlOb2RlT2JqZWN0OjpoaWVyYXJjaGljYWxMZXZlbCk6CisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmNvbnRlbnRFZGl0YWJsZUF0dHJpYnV0ZUlzRW5hYmxlZCk6CisgICAgICAg
ICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjpoYXNNYW5p
ZmVzdCk6CisgICAgICAgICogZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjprZXlNYXRjaGVzTGFiZWxGb3JBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50
U3R5bGVTaGVldENvbGxlY3Rpb246OmNvbGxlY3RBY3RpdmVTdHlsZVNoZWV0cyk6CisgICAgICAg
ICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aW1hZ2VTb3Vy
Y2VVUkwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cHNldWRvKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSk6CisgICAgICAgICogZWRp
dGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0cmlidXRl
RXF1aXZhbGVudDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxGb250U2l6ZUVxdWl2YWxlbnQ6OmF0dHJpYnV0ZVZhbHVlQXNDU1NWYWx1ZSk6CisgICAg
ICAgICogZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNwbGl0RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogaHRtbC9IVE1MQW5j
aG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6ZHJh
Z2dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpzZW5kUGluZ3Mp
OgorICAgICAgICAqIGh0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFwcGxldEVsZW1lbnQ6OnVwZGF0ZVdpZGdldCk6CisgICAgICAgICogaHRtbC9IVE1M
Qm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjphZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQ6OnZhbHVlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxEb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9j
dW1lbnQ6OmRpcik6CisgICAgICAgICogaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OmltYWdlU291cmNlVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxFbWJlZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6
CisgICAgICAgICogaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6On5IVE1MRmllbGRTZXRFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZUZyb21Db250cm9sRWxlbWVudHNBbmNlc3RvckRpc2FibGVkU3RhdGVV
bmRlcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0
dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6
ZGlzYWJsZWRTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0RWxl
bWVudDo6Y2hpbGRyZW5DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVs
ZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3IpOgorICAgICAgICAqIGh0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6
YWN0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudDo6bm9SZXNpemUpOgorICAgICAgICAqIGh0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVu
dEJhc2U6OmxvY2F0aW9uKToKKyAgICAgICAgKiBodG1sL0hUTUxIUkVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEhSRWxlbWVudDo6Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9u
QXR0cmlidXRlKToKKyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQ6Omluc2VydGVkQnlQYXJzZXIpOgorICAgICAgICAq
IGh0bWwvSFRNTEltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VF
bGVtZW50OjphbHRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFs
dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpkcmFnZ2FibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c3JjKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAg
ICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1
dEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjphbHRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1l
bnQ6OnJlc2V0KToKKyAgICAgICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTExhYmVsRWxlbWVudDo6Y29udHJvbCk6CisgICAgICAgICogaHRtbC9I
VE1MTGlua0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50Ojpw
cm9jZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6cmVsKToKKyAgICAg
ICAgKiBodG1sL0hUTUxNZXRhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0
YUVsZW1lbnQ6OmNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50Ojpo
dHRwRXF1aXYpOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmltYWdlU291cmNlVVJMKToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMp
OgorICAgICAgICAqIGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVsVGV4dCk6CisgICAgICAgICogaHRt
bC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQcm9ncmVz
c0VsZW1lbnQ6Om1heCk6CisgICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6c291cmNlQXR0cmlidXRlVmFsdWUp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmNoYXJzZXRBdHRyaWJ1dGVW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6bGFuZ3VhZ2VBdHRy
aWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Zm9yQXR0
cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6OmV2ZW50
QXR0cmlidXRlVmFsdWUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnN1bW1hcnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRh
YmxlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1s
L0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50OjphbGlnbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0
aW9uRWxlbWVudDo6Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQ6OnZBbGlnbik6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0QXJlYUVsZW1lbnQ6Om1heExlbmd0aCk6CisgICAgICAg
ICogaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VhcmNoSW5w
dXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQpOgorICAgICAgICAqIGxvYWRl
ci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6
Y3JlYXRlKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KToKKyAgICAgICAgKiBwYWdlL1BhZ2VTZXJp
YWxpemVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVG
cmFtZSk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZVRvRGF0YU9iamVjdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGl0VGVz
dFJlc3VsdDo6YWx0RGlzcGxheVN0cmluZyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNl
YXJjaEZpZWxkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlYXJjaEZpZWxkOjphdXRv
c2F2ZU5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdp
ZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29u
dGVudEludG9NYXNrSW1hZ2UpOgorCiAyMDE0LTA5LTE3ICBSb2dlciBGb25nICA8cm9nZXJfZm9u
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgU3BlY3VsYXRpdmUgZml4IGZvciBhIGZhc3RcZG9tXGh0
bWwtY29sbGVjdGlvbnMtbmFtZWQtZ2V0dGVyIGZhaWxpbmcgb25seSBpbiBEZWJ1ZyBidWlsZHMu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwCmluZGV4IGI3NTkxZDQwMGMyNmUwZGRhMmI4NjY0NTQzMWZi
MzhjMDhjZDNmZTguLmE5ZmFkOGQ0NzJhNzNhMmMwOWNmYzgwNTQ5ZWFmMTA0NmNlNmQ5ZTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RC
b3hPcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwCkBAIC03MCw3ICs3MCw3IEBAIGJvb2wgQWNjZXNzaWJpbGl0
eUxpc3RCb3hPcHRpb246OmlzRW5hYmxlZCgpIGNvbnN0CiAgICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKGdldEF0dHJpYnV0ZShhcmlhX2Rpc2FibGVkQXR0ciksICJ0cnVlIikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGlmIChtX29wdGlvbkVsZW1lbnQtPmhhc0F0dHJpYnV0ZShkaXNh
YmxlZEF0dHIpKQorICAgIGlmIChtX29wdGlvbkVsZW1lbnQtPmZhc3RIYXNBdHRyaWJ1dGUoZGlz
YWJsZWRBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAogICAgIHJldHVybiB0cnVl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxp
dHlOb2RlT2JqZWN0LmNwcAppbmRleCBmYzQxNThkMTkyYWJjMDlkNWRhYjgzMjVkZTQzYjU0Mzky
NTI2ZDQ5Li4zNjRlNDI2YzcxMjJiMTYyMThmYzY1YWQ1MDJlN2I3MTU0NGI1MGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0LmNwcApAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlOb2Rl
T2JqZWN0OjphbHRlcm5hdGl2ZVRleHRGb3JXZWJBcmVhKCkgY29uc3QKICAgICAKICAgICAvLyBD
aGVjayBpZiB0aGUgSFRNTCBlbGVtZW50IGhhcyBhbiBhcmlhLWxhYmVsIGZvciB0aGUgd2VicGFn
ZS4KICAgICBpZiAoRWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQtPmRvY3VtZW50
RWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJpYUxhYmVsID0gZG9j
dW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOworICAgICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IGRvY3VtZW50RWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAgICAgIGlmICghYXJpYUxhYmVsLmlzRW1wdHkoKSkK
ICAgICAgICAgICAgIHJldHVybiBhcmlhTGFiZWw7CiAgICAgfQpAQCAtMTU2Myw3ICsxNTYzLDcg
QEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKCkg
Y29uc3QKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxlbWVudE5vZGUoKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHRvRWxlbWVudChub2RlKTsKLSAgICBT
dHJpbmcgYXJpYUxldmVsID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFyaWFfbGV2ZWxBdHRyKTsK
KyAgICBTdHJpbmcgYXJpYUxldmVsID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xl
dmVsQXR0cik7CiAgICAgaWYgKCFhcmlhTGV2ZWwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
YXJpYUxldmVsLnRvSW50KCk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAppbmRleCA0OTk5MDQwMmRkNTc3M2UyNjZk
ZjBjNTg2YmYzYzQzNDViMjM1NjRkLi4zNDk0ODZiNzdiMGIzNTM3M2I5NjkzMzNjNWQzYTVmZmY5
YTdlZjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eU9iamVjdC5jcHAKQEAgLTEzNzgsMTAgKzEzNzgsMTAgQEAgYm9vbCBBY2Nlc3NpYmls
aXR5T2JqZWN0Ojpjb250ZW50RWRpdGFibGVBdHRyaWJ1dGVJc0VuYWJsZWQoRWxlbWVudCogZWxl
bWVudCkKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAg
ICBpZiAoIWVsZW1lbnQtPmhhc0F0dHJpYnV0ZShjb250ZW50ZWRpdGFibGVBdHRyKSkKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGNvbnRlbnRFZGl0YWJsZVZhbHVlID0gZWxlbWVudC0+ZmFzdEdl
dEF0dHJpYnV0ZShjb250ZW50ZWRpdGFibGVBdHRyKTsKKyAgICBpZiAoY29udGVudEVkaXRhYmxl
VmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGNvbnRlbnRFZGl0YWJsZVZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJp
YnV0ZShjb250ZW50ZWRpdGFibGVBdHRyKTsKICAgICAvLyBCb3RoICJ0cnVlIiAoY2FzZS1pbnNl
bnNpdGl2ZSkgYW5kIHRoZSBlbXB0eSBzdHJpbmcgY291bnQgYXMgdHJ1ZS4KICAgICByZXR1cm4g
Y29udGVudEVkaXRhYmxlVmFsdWUuaXNFbXB0eSgpIHx8IGVxdWFsSWdub3JpbmdDYXNlKGNvbnRl
bnRFZGl0YWJsZVZhbHVlLCAidHJ1ZSIpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKaW5kZXgg
Y2UyNTdhYjdmZWZiNTdjOTRlMmYxOWEzYzgxNDQxM2UxZDg2NjMzMy4uZjdiMTk1OTljNjc3OTRj
MmM4ZDU1ZDJkZTEzMDVlZTk3MDg3OGM0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCkBAIC04
MTQsNyArODE0LDcgQEAgRE9NSW1wbGVtZW50YXRpb24qIERvY3VtZW50OjppbXBsZW1lbnRhdGlv
bigpCiAKIGJvb2wgRG9jdW1lbnQ6Omhhc01hbmlmZXN0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
ZG9jdW1lbnRFbGVtZW50KCkgJiYgZG9jdW1lbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoaHRtbFRh
ZykgJiYgZG9jdW1lbnRFbGVtZW50KCktPmhhc0F0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOworICAg
IHJldHVybiBkb2N1bWVudEVsZW1lbnQoKSAmJiBkb2N1bWVudEVsZW1lbnQoKS0+aGFzVGFnTmFt
ZShodG1sVGFnKSAmJiBkb2N1bWVudEVsZW1lbnQoKS0+ZmFzdEhhc0F0dHJpYnV0ZShtYW5pZmVz
dEF0dHIpOwogfQogCiBEb2N1bWVudFR5cGUqIERvY3VtZW50Ojpkb2N0eXBlKCkgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5jcHAKaW5kZXggOTg3NDM2MThhZDJk
MTI3ZDFkZWI4MWU0OWRlOGZhYjBmODYxZmM4Yi4uNTkzNWIzYmJmNzRhM2Y4ZjYzY2Y3NjU0ODIy
NDEyYzE0MWQ0ZmRlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3Jk
ZXJlZE1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50T3JkZXJlZE1hcC5j
cHAKQEAgLTY5LDcgKzY5LDcgQEAgaW5saW5lIGJvb2wga2V5TWF0Y2hlc0xvd2VyY2FzZWRVc2Vt
YXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYga2V5LCBjb25zdCBFbGVtZW4KIAogaW5saW5lIGJv
b2wga2V5TWF0Y2hlc0xhYmVsRm9yQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtl
eSwgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKIHsKLSAgICByZXR1cm4gaXNIVE1MTGFiZWxFbGVt
ZW50KGVsZW1lbnQpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGZvckF0dHIpLmltcGwoKSA9PSAm
a2V5OworICAgIHJldHVybiBpc0hUTUxMYWJlbEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5m
YXN0R2V0QXR0cmlidXRlKGZvckF0dHIpLmltcGwoKSA9PSAma2V5OwogfQogCiBpbmxpbmUgYm9v
bCBrZXlNYXRjaGVzV2luZG93TmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZ0ltcGwmIGtleSwg
Y29uc3QgRWxlbWVudCYgZWxlbWVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcAppbmRleCBlZDIwZWQ1NGI2MTI5NzE0Y2JhODNj
ZmZhYzcxZGFhNzlhYzM5N2IzLi5kYjIzM2ViZTFjNWJhMjcwM2U5MTFmZmZlYTVjNmZiNDE4OGE2
YzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29s
bGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENv
bGxlY3Rpb24uY3BwCkBAIC0yODIsNyArMjgyLDcgQEAgdm9pZCBEb2N1bWVudFN0eWxlU2hlZXRD
b2xsZWN0aW9uOjpjb2xsZWN0QWN0aXZlU3R5bGVTaGVldHMoVmVjdG9yPFJlZlB0cjxTdHlsZVMK
ICNlbmRpZgogICAgICAgICB9IGVsc2UgaWYgKChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgKHRv
SFRNTEVsZW1lbnQoKm5vZGUpLmhhc1RhZ05hbWUobGlua1RhZykgfHwgdG9IVE1MRWxlbWVudCgq
bm9kZSkuaGFzVGFnTmFtZShzdHlsZVRhZykpKSB8fCAobm9kZS0+aXNTVkdFbGVtZW50KCkgJiYg
dG9TVkdFbGVtZW50KCpub2RlKS5oYXNUYWdOYW1lKFNWR05hbWVzOjpzdHlsZVRhZykpKSB7CiAg
ICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gdG9FbGVtZW50KCpub2RlKTsKLSAgICAgICAg
ICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7
CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlbGVtZW50LmZhc3RHZXRBdHRyaWJ1
dGUodGl0bGVBdHRyKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNl
OwogICAgICAgICAgICAgaWYgKGlzSFRNTExpbmtFbGVtZW50KGVsZW1lbnQpKSB7CiAgICAgICAg
ICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBiNTFk
MDg2NTAyYzhjZTk3MWIxMTgwN2NjY2NlMGZmMDljZGEzNmI1Li5iN2Y5ZGU2NWY3ZjNjOTdmNjNm
MDBmYjZkMWQ3Yzc2NWZmNGVkZmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0xMzA1LDcg
KzEzMDUsNyBAQCBVUkwgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CiAKIGNvbnN0IEF0b21pY1N0
cmluZyYgRWxlbWVudDo6aW1hZ2VTb3VyY2VVUkwoKSBjb25zdAogewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUoc3JjQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cik7
CiB9CiAKIGJvb2wgRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpCkBAIC0yMDQ1LDcgKzIwNDUsNyBAQCBTdHJpbmcgRWxlbWVudDo6dGl0bGUoKSBjb25z
dAogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OnBzZXVkbygpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShwc2V1ZG9BdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZShwc2V1ZG9BdHRyKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRQc2V1ZG8oY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKQEAgLTI0NTUsNyArMjQ1NSw3IEBAIHZvaWQgRWxlbWVudDo6cmVx
dWVzdFBvaW50ZXJMb2NrKCkKIAogU3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlIEVsZW1lbnQ6OnNw
ZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNwZWxsY2hlY2tBdHRyKTsKKyAgICBj
b25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OnNw
ZWxsY2hlY2tBdHRyKTsKICAgICBpZiAodmFsdWUgPT0gbnVsbEF0b20pCiAgICAgICAgIHJldHVy
biBTcGVsbGNoZWNrQXR0cmlidXRlRGVmYXVsdDsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
dmFsdWUsICJ0cnVlIikgfHwgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICIiKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggYTIyMDI3ZTM4MGZl
NTI2ZmJmM2U4MTM0ZjdlOWM4MTNjYmNhYmY1Mi4uNTUzNzdjNjlmNThlM2MwZTA5YTEzZjEzMzIx
ZjE2N2VkNDM3YzA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKQEAgLTUxNyw3ICs1MTcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpyZW1v
dmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSogdW5zcAogICAg
ICAgICAvLyBhbmQgYWxsIG1hdGNoaW5nIHN0eWxlIHJ1bGVzIGluIG9yZGVyIHRvIGRldGVybWlu
ZSBob3cgdG8gYmVzdCBzZXQgdGhlIHVuaWNvZGUtYmlkaSBwcm9wZXJ0eSB0byAnbm9ybWFsJy4K
ICAgICAgICAgLy8gRm9yIG5vdywgaXQgYXNzdW1lcyB0aGF0IGlmIHRoZSAnZGlyJyBhdHRyaWJ1
dGUgaXMgcHJlc2VudCwgdGhlbiByZW1vdmluZyBpdCB3aWxsIHN1ZmZpY2UsIGFuZAogICAgICAg
ICAvLyBvdGhlcndpc2UgaXQgc2V0cyB0aGUgcHJvcGVydHkgaW4gdGhlIGlubGluZSBzdHlsZSBk
ZWNsYXJhdGlvbi4KLSAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShkaXJBdHRyKSkg
eworICAgICAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShkaXJBdHRyKSkgewogICAg
ICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBCRE8gZWxlbWVudCwgd2Ugc2hvdWxkIHBy
b2JhYmx5IGp1c3QgcmVtb3ZlIGl0IGlmIGl0IGhhcyBubwogICAgICAgICAgICAgLy8gb3RoZXIg
YXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxlbWVudHMuCiAg
ICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIGRpckF0dHIpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDQzOGExYzAxYWUxZWYyYjg2NTA1
MzNjOGJlMzhkMGJkMTE2YTQ4MTEuLjA0NThjYTMxN2JlZmIyNzhlY2FkNmM5MDg4YzU0NWQ3MDE2
NzEyZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTI3Nywx
MiArMjc3LDEzIEBAIHZvaWQgSFRNTEF0dHJpYnV0ZUVxdWl2YWxlbnQ6OmFkZFRvU3R5bGUoRWxl
bWVudCogZWxlbWVudCwgRWRpdGluZ1N0eWxlKiBzdHlsZSkKIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IEhUTUxBdHRyaWJ1dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUoRWxlbWVu
dCogZWxlbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgaWYgKCFlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUobV9hdHRyTmFtZSkpCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2
YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShtX2F0dHJOYW1lKTsKKyAgICBpZiAodmFsdWUu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIFJlZlB0cjxNdXRhYmxlU3R5
bGVQcm9wZXJ0aWVzPiBkdW1teVN0eWxlOwogICAgIGR1bW15U3R5bGUgPSBNdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUoKTsKLSAgICBkdW1teVN0eWxlLT5zZXRQcm9wZXJ0eShtX3Byb3Bl
cnR5SUQsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShtX2F0dHJOYW1lKSk7CisgICAgZHVtbXlTdHls
ZS0+c2V0UHJvcGVydHkobV9wcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgcmV0dXJuIGR1bW15U3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUobV9wcm9wZXJ0eUlEKTsKIH0KIApAQCAtMzAxLDEwICsz
MDIsMTEgQEAgSFRNTEZvbnRTaXplRXF1aXZhbGVudDo6SFRNTEZvbnRTaXplRXF1aXZhbGVudCgp
CiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MRm9udFNpemVFcXVpdmFsZW50OjphdHRyaWJ1dGVW
YWx1ZUFzQ1NTVmFsdWUoRWxlbWVudCogZWxlbWVudCkgY29uc3QKIHsKICAgICBBU1NFUlQoZWxl
bWVudCk7Ci0gICAgaWYgKCFlbGVtZW50LT5oYXNBdHRyaWJ1dGUobV9hdHRyTmFtZSkpCisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShtX2F0dHJO
YW1lKTsKKyAgICBpZiAodmFsdWUuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIENT
U1ZhbHVlSUQgc2l6ZTsKLSAgICBpZiAoIUhUTUxGb250RWxlbWVudDo6Y3NzVmFsdWVGcm9tRm9u
dFNpemVOdW1iZXIoZWxlbWVudC0+Z2V0QXR0cmlidXRlKG1fYXR0ck5hbWUpLCBzaXplKSkKKyAg
ICBpZiAoIUhUTUxGb250RWxlbWVudDo6Y3NzVmFsdWVGcm9tRm9udFNpemVOdW1iZXIodmFsdWUs
IHNpemUpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZUlkZW50aWZpZXIoc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGxpdEVsZW1lbnRDb21tYW5kLmNwcAppbmRleCBkMzQyNmU3ZGI2OGRiNjQwNzNmNzA3YWUxNWUx
NDcyMWFmODM3YjMzLi5hMDNlZjg4Nzg3YjBhZDg0NjU5NTg2NjE1ZDkxZGRhYjcyYjA2Y2I3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKQEAg
LTkxLDggKzkxLDkgQEAgdm9pZCBTcGxpdEVsZW1lbnRDb21tYW5kOjpkb1VuYXBwbHkoKQogICAg
ICAgICBtX2VsZW1lbnQyLT5pbnNlcnRCZWZvcmUoY2hpbGRyZW5baV0uZ2V0KCksIHJlZkNoaWxk
LmdldCgpLCBJR05PUkVfRVhDRVBUSU9OKTsKIAogICAgIC8vIFJlY292ZXIgdGhlIGlkIGF0dHJp
YnV0ZSBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KLSAgICBpZiAobV9lbGVtZW50MS0+aGFzQXR0
cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSkKLSAgICAgICAgbV9lbGVtZW50Mi0+c2V0QXR0cmli
dXRlKEhUTUxOYW1lczo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
OjppZEF0dHIpKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkID0gbV9lbGVtZW50MS0+ZmFz
dEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7CisgICAgaWYgKCFpZC5pc051bGwoKSkK
KyAgICAgICAgbV9lbGVtZW50Mi0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBpZCk7
CiAKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoSUdOT1JFX0VYQ0VQVElPTik7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmluZGV4IDMzOGU1Mzc2Yzg5YzY4MmZm
MjhlMjE5ZWQ4NGIxZWVmNjg1M2QyNjkuLmYxNjBhMmI4MWQxNDY0NjlkMWNlYWNmMmJmYTg5ZDlj
NTJiMTk4NDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCkBA
IC0yODYsNyArMjg2LDcgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6Y2FuU3RhcnRTZWxlY3Rp
b24oKSBjb25zdAogYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6ZHJhZ2dhYmxlKCkgY29uc3QKIHsK
ICAgICAvLyBTaG91bGQgYmUgZHJhZ2dhYmxlIGlmIHdlIGhhdmUgYW4gaHJlZiBhdHRyaWJ1dGUu
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGdldEF0dHJpYnV0ZShkcmFnZ2FibGVB
dHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShk
cmFnZ2FibGVBdHRyKTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJ0cnVlIikp
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwg
ImZhbHNlIikpCkBAIC01MTIsMTAgKzUxMiwxMCBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50Ojpp
c0xpdmVMaW5rKCkgY29uc3QKIAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2VuZFBpbmdzKGNv
bnN0IFVSTCYgZGVzdGluYXRpb25VUkwpCiB7Ci0gICAgaWYgKCFoYXNBdHRyaWJ1dGUocGluZ0F0
dHIpIHx8ICFkb2N1bWVudCgpLnNldHRpbmdzKCkgfHwgIWRvY3VtZW50KCkuc2V0dGluZ3MoKS0+
aHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKCkpCisgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKHBp
bmdBdHRyKSB8fCAhZG9jdW1lbnQoKS5zZXR0aW5ncygpIHx8ICFkb2N1bWVudCgpLnNldHRpbmdz
KCktPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBT
cGFjZVNwbGl0U3RyaW5nIHBpbmdVUkxzKGdldEF0dHJpYnV0ZShwaW5nQXR0ciksIGZhbHNlKTsK
KyAgICBTcGFjZVNwbGl0U3RyaW5nIHBpbmdVUkxzKGZhc3RHZXRBdHRyaWJ1dGUocGluZ0F0dHIp
LCBmYWxzZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpbmdVUkxzLnNpemUoKTsg
aSsrKQogICAgICAgICBQaW5nTG9hZGVyOjpzZW5kUGluZygqZG9jdW1lbnQoKS5mcmFtZSgpLCBk
b2N1bWVudCgpLmNvbXBsZXRlVVJMKHBpbmdVUkxzW2ldKSwgZGVzdGluYXRpb25VUkwpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcAppbmRleCBjNjU0YjUzNDIw
NDVhYTRiZTI1ZTlkN2Y5MWJmODhhNjY5NDBiNWQzLi45NDcwZTBhNTZkMzczNmFlMTllZDE1Yzlh
YzBlNWZjZTE5ZmJiMGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBs
ZXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50
LmNwcApAQCAtMTI1LDkgKzEyNSw5IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnVwZGF0ZVdp
ZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVnaW5DcmVhdGlvbk9wdGlvbikKICAgICBWZWN0
b3I8U3RyaW5nPiBwYXJhbVZhbHVlczsKIAogICAgIHBhcmFtTmFtZXMuYXBwZW5kKCJjb2RlIik7
Ci0gICAgcGFyYW1WYWx1ZXMuYXBwZW5kKGdldEF0dHJpYnV0ZShjb2RlQXR0cikuc3RyaW5nKCkp
OworICAgIHBhcmFtVmFsdWVzLmFwcGVuZChmYXN0R2V0QXR0cmlidXRlKGNvZGVBdHRyKS5zdHJp
bmcoKSk7CiAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvZGVCYXNlID0gZ2V0QXR0cmlidXRl
KGNvZGViYXNlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGZhc3RH
ZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKICAgICBpZiAoIWNvZGVCYXNlLmlzTnVsbCgpKSB7
CiAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKCJjb2RlQmFzZSIpOwogICAgICAgICBwYXJhbVZh
bHVlcy5hcHBlbmQoY29kZUJhc2Uuc3RyaW5nKCkpOwpAQCAtMTM5LDcgKzEzOSw3IEBAIHZvaWQg
SFRNTEFwcGxldEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVn
aW5DcmVhdGlvbk9wdGlvbikKICAgICAgICAgcGFyYW1WYWx1ZXMuYXBwZW5kKG5hbWUuc3RyaW5n
KCkpOwogICAgIH0KIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXJjaGl2ZSA9IGdldEF0dHJp
YnV0ZShhcmNoaXZlQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZmFz
dEdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7CiAgICAgaWYgKCFhcmNoaXZlLmlzTnVsbCgpKSB7
CiAgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5kKCJhcmNoaXZlIik7CiAgICAgICAgIHBhcmFtVmFs
dWVzLmFwcGVuZChhcmNoaXZlLnN0cmluZygpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIEhU
TUxBcHBsZXRFbGVtZW50Ojp1cGRhdGVXaWRnZXQoUGx1Z2luQ3JlYXRpb25PcHRpb24gcGx1Z2lu
Q3JlYXRpb25PcHRpb24pCiAgICAgcGFyYW1OYW1lcy5hcHBlbmQoImJhc2VVUkwiKTsKICAgICBw
YXJhbVZhbHVlcy5hcHBlbmQoZG9jdW1lbnQoKS5iYXNlVVJMKCkuc3RyaW5nKCkpOwogCi0gICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBtYXlTY3JpcHQgPSBnZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0
cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYXlTY3JpcHQgPSBmYXN0R2V0QXR0cmlidXRl
KG1heXNjcmlwdEF0dHIpOwogICAgIGlmICghbWF5U2NyaXB0LmlzTnVsbCgpKSB7CiAgICAgICAg
IHBhcmFtTmFtZXMuYXBwZW5kKCJtYXlTY3JpcHQiKTsKICAgICAgICAgcGFyYW1WYWx1ZXMuYXBw
ZW5kKG1heVNjcmlwdC5zdHJpbmcoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVu
dC5jcHAKaW5kZXggYTg3ZDk3Nzc4ZDVhMzNkODlmYjQ4N2M1ODdjNDdlNjIwMzMwNWEyNy4uYTc0
MmYzODRmYTNjOTgwNjliYTU4ZDAzMGUyNjMyY2VkOWU5ZDNlYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJvZHlFbGVtZW50LmNwcApAQCAtMjg3LDcgKzI4Nyw3IEBAIHZvaWQgSFRNTEJvZHlF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJs
cykgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KHVybHMpOwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTChnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VV
UkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKGJhY2tncm91
bmRBdHRyKSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCmluZGV4IDk0N2U3MWU5MDc4ZjhiMjU5OGQ0ZTljNDJh
Y2M2ODhkYjJhMzFiZmIuLjRkZDA5Y2QxOTUwYzQ3YTYxNTNmZTM1ODFjMDAxOTBjZDNiMDczZDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCkBAIC0xOTYsNyAr
MTk2LDcgQEAgYm9vbCBIVE1MQnV0dG9uRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0
cmlidXRlJiBhdHRyaWJ1dGUpIGNvbnN0CiAKIFN0cmluZyBIVE1MQnV0dG9uRWxlbWVudDo6dmFs
dWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICBy
ZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOwogfQogCiBib29sIEhUTUxCdXR0b25F
bGVtZW50OjpyZWNhbGNXaWxsVmFsaWRhdGUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9j
dW1lbnQuY3BwCmluZGV4IDI4Yzg0NzQzZTcxZDBkNzc0ZTU5ZmU5YzQwNTRjYzE3ODE1ZTUzZTMu
LjE1ZjZkOTQ1N2U2ZTIwMDVkZWRmMjI5ZDI1NjEyYzg2YzU3NWQ1MGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCBTdHJpbmcgSFRNTERvY3Vt
ZW50OjpkaXIoKQogICAgIEhUTUxFbGVtZW50KiBiID0gYm9keSgpOwogICAgIGlmICghYikKICAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBiLT5nZXRBdHRyaWJ1dGUoZGlyQXR0
cik7CisgICAgcmV0dXJuIGItPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CiB9CiAKIHZvaWQg
SFRNTERvY3VtZW50OjpzZXREaXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDg4MWE2NDJjNGU4NzNiMGY1MzAyYzlkZmQ4
MTI5YjRlNmM5NWQ2OGEuLmNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFlMTRlZGJlNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAtMjE0LDE0ICsy
MTQsMTQgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRy
aWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MRW1iZWRF
bGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShzcmNBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKTsKIH0KIAog
dm9pZCBIVE1MRW1iZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhh
c2hTZXQ8VVJMPiYgdXJscykgY29uc3QKIHsKICAgICBIVE1MUGx1Z0luSW1hZ2VFbGVtZW50Ojph
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNvdXJjZVVS
TCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSkpOwor
ICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdl
dEF0dHJpYnV0ZShzcmNBdHRyKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmNwcAppbmRleCA2ODFlNTUzMDQzMjZjYTY4Nzk2MGY0ZWEwYTNjMTAz
YzQxNTk3ZmRhLi5kYjUwYjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3ZmIzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAgLTQ2LDcgKzQ2
LDcgQEAgaW5saW5lIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG8KIAogSFRNTEZpZWxkU2V0RWxlbWVudDo6fkhU
TUxGaWVsZFNldEVsZW1lbnQoKQogewotICAgIGlmIChoYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRy
KSkKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKQogICAgICAgICBkb2N1
bWVudCgpLnJlbW92ZURpc2FibGVkRmllbGRzZXRFbGVtZW50KCk7CiB9CiAKQEAgLTY1LDcgKzY1
LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9yRGlzYWJs
ZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKICAgICB3aGlsZSAoY29udHJvbCkgewogICAg
ICAgICBjb250cm9sLT5zZXRBbmNlc3RvckRpc2FibGVkKGlzRGlzYWJsZWQpOwogICAgICAgICAv
LyBEb24ndCBjYWxsIHNldEFuY2VzdG9yRGlzYWJsZWQoZmFsc2UpIG9uIGZvcm0gY29udG9ybHMg
aW5zaWRlIGRpc2FibGVkIGZpZWxkc2V0cy4KLSAgICAgICAgaWYgKGlzSFRNTEZpZWxkU2V0RWxl
bWVudChjb250cm9sKSAmJiBjb250cm9sLT5oYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkKKyAg
ICAgICAgaWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChjb250cm9sKSAmJiBjb250cm9sLT5mYXN0
SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikpCiAgICAgICAgICAgICBjb250cm9sID0gVHJhdmVy
c2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpuZXh0U2tpcHBpbmdDaGlsZHJlbihjb250cm9s
LCAmc3RhcnROb2RlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udHJvbCA9IFRyYXZl
cnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dChjb250cm9sLCAmc3RhcnROb2RlKTsK
QEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0Fu
Y2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKIAogdm9pZCBIVE1MRmll
bGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAgIGlmIChoYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxl
ZEF0dHIpKQogICAgICAgICBkb2N1bWVudCgpLmFkZERpc2FibGVkRmllbGRzZXRFbGVtZW50KCk7
CiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudCgpLnJlbW92ZURpc2FibGVkRmllbGRzZXRFbGVt
ZW50KCk7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6ZGlzYWJs
ZWRTdGF0ZUNoYW5nZWQoKQogICAgIGlmIChkaXNhYmxlZEJ5QW5jZXN0b3JGaWVsZHNldCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHRoaXNGaWVsZHNldElzRGlzYWJsZWQgPSBoYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKKyAgICBib29sIHRoaXNGaWVsZHNldElzRGlzYWJsZWQg
PSBmYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cik7CiAgICAgYm9vbCBoYXNTZWVuRmlyc3RM
ZWdlbmRFbGVtZW50ID0gZmFsc2U7CiAgICAgZm9yIChIVE1MRWxlbWVudCogY29udHJvbCA9IFRy
YXZlcnNhbDxIVE1MRWxlbWVudD46OmZpcnN0Q2hpbGQodGhpcyk7IGNvbnRyb2w7IGNvbnRyb2wg
PSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpuZXh0U2libGluZyhjb250cm9sKSkgewogICAgICAg
ICBpZiAoIWhhc1NlZW5GaXJzdExlZ2VuZEVsZW1lbnQgJiYgaXNIVE1MTGVnZW5kRWxlbWVudChj
b250cm9sKSkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVudDo6
ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkKIHsKICAgICBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKLSAgICBpZiAoIWhhc0F0dHJpYnV0
ZShkaXNhYmxlZEF0dHIpKQorICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIp
KQogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MTGVnZW5kRWxlbWVudCogbGVnZW5kID0gVHJh
dmVyc2FsPEhUTUxMZWdlbmRFbGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsKQEAgLTEyMSw3ICsx
MjEsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdlZChjb25zdCBD
aGlsZENoYW5nZSYgY2hhbmdlKQogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50OjpkaWRNb3ZlVG9O
ZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiB7CiAgICAgSFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1lbnQpOwotICAgIGlmIChoYXNB
dHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgeworICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKGRpc2Fi
bGVkQXR0cikpIHsKICAgICAgICAgaWYgKG9sZERvY3VtZW50KQogICAgICAgICAgICAgb2xkRG9j
dW1lbnQtPnJlbW92ZURpc2FibGVkRmllbGRzZXRFbGVtZW50KCk7CiAgICAgICAgIGRvY3VtZW50
KCkuYWRkRGlzYWJsZWRGaWVsZHNldEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGYxOTE1ZWFjZjUwNDFlZWI1ZGZhOTdj
MDk5YjQ4NWYzNmY4NDk1OTEuLmEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjViYTUzNTA4M2Q4
MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNw
cApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0
ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3IoKSBjb25zdAogewogICAgIEVsZW1lbnQqIHBy
ZXZpb3VzQW5jZXN0b3IgPSBudWxscHRyOwogICAgIGZvciAoRWxlbWVudCogYW5jZXN0b3IgPSBw
YXJlbnRFbGVtZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5wYXJlbnRFbGVt
ZW50KCkpIHsKLSAgICAgICAgaWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChhbmNlc3RvcikgJiYg
YW5jZXN0b3ItPmhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKSB7CisgICAgICAgIGlmIChpc0hU
TUxGaWVsZFNldEVsZW1lbnQoYW5jZXN0b3IpICYmIGFuY2VzdG9yLT5mYXN0SGFzQXR0cmlidXRl
KGRpc2FibGVkQXR0cikpIHsKICAgICAgICAgICAgIEhUTUxGaWVsZFNldEVsZW1lbnQmIGZpZWxk
U2V0QW5jZXN0b3IgPSB0b0hUTUxGaWVsZFNldEVsZW1lbnQoKmFuY2VzdG9yKTsKICAgICAgICAg
ICAgIGJvb2wgaXNJbkZpcnN0TGVnZW5kID0gcHJldmlvdXNBbmNlc3RvciAmJiBpc0hUTUxMZWdl
bmRFbGVtZW50KHByZXZpb3VzQW5jZXN0b3IpICYmIHByZXZpb3VzQW5jZXN0b3IgPT0gZmllbGRT
ZXRBbmNlc3Rvci5sZWdlbmQoKTsKICAgICAgICAgICAgIHJldHVybiAhaXNJbkZpcnN0TGVnZW5k
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDIxYTRjZDliNzk4
MzEzZDEwYzhlYTgzN2RiODRhMDNkNWM4YTA3OWYuLmM4OGVhYzk1MWRlMDI5M2E1NzE5NzdhYWNh
YjIwZjcyN2Y5ZGMzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAK
QEAgLTY2MCw3ICs2NjAsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxpZGF0ZSgpIGNv
bnN0CiAvLyAoRGFyaW4gQWRsZXIpIHJlbW92ZWQgdGhpcywgc29tZW9uZSBhZGRlZCBpdCBiYWNr
LCBzbyBJIGFtIGxlYXZpbmcgaXQgaW4gZm9yIG5vdy4KIFN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6
OmFjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsK
KyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsKIH0KIAogdm9pZCBIVE1M
Rm9ybUVsZW1lbnQ6OnNldEFjdGlvbihjb25zdCBTdHJpbmcgJnZhbHVlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKaW5kZXggOTdiYWJmYjEwMWJhYWFiYjUzZjhhYWMy
ODgyNGU3MTBmOGMyNTBhZi4uNTdjZjgyMDExMDgwNjY2Y2MzMzM3Y2ZhNzg3YjViODk4MzQ5ZjA1
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCkBAIC02MSw3ICs2
MSw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRnJhbWVFbGVtZW50OjpjcmVhdGVF
bGVtZW50UmVuZGVyZXIoUGFzc1JlZjxSZW5kZXJTCiAKIGJvb2wgSFRNTEZyYW1lRWxlbWVudDo6
bm9SZXNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUobm9yZXNpemVBdHRy
KTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShub3Jlc2l6ZUF0dHIpOwogfQogCiB2b2lk
IEhUTUxGcmFtZUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycygpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCmluZGV4IDViMTUxZDIzNjlhZmI3ODQ3NWJk
ZTk0MmQ3ZTk0ZmU2N2MyNzZmN2MuLjA4NTk4ZTMyNTVmZDMxMTIzMjMxNzViOGRjMmI0M2I4ZjE2
YWVmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJh
c2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3Bw
CkBAIC0xNjksNyArMTY5LDcgQEAgVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigp
IGNvbnN0CiB7CiAgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoc3JjZG9jQXR0cikpCiAgICAgICAg
IHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCAiYWJvdXQ6c3JjZG9jIik7Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCkuY29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKKyAgICByZXR1
cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKIH0K
IAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oY29uc3QgU3RyaW5nJiBz
dHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmNwcAppbmRleCBiYzkyZTk2YjRkZWZk
NzAyOWUxZGJjMWI3MDY2ZTI5ZWJhMTc5MTFhLi4xYjdiZTdjYTU5NzJmMWRmZjIyN2RiNzIwZDVk
OTQ0NDU4YWI2MjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5jcHAKQEAgLTgy
LDcgKzgyLDcgQEAgdm9pZCBIVE1MSFJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRp
b25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmEKICAgICAgICAgYWRkSFRNTENvbG9y
VG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgdmFsdWUpOwogICAgICAgICBh
ZGRIVE1MQ29sb3JUb1N0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgdmFs
dWUpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBub3NoYWRlQXR0cikgewotICAgICAgICBpZiAo
IWhhc0F0dHJpYnV0ZShjb2xvckF0dHIpKSB7CisgICAgICAgIGlmICghZmFzdEhhc0F0dHJpYnV0
ZShjb2xvckF0dHIpKSB7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eVRvUHJlc2VudGF0aW9uQXR0
cmlidXRlU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIENTU1ZhbHVlU29saWQp
OwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRhcmtHcmF5VmFsdWUg
PSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjpkYXJrR3JheSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKaW5kZXggMTMxNjcyZTNmZjE3ODU0OWVj
OTUzMzMxODc0M2EwNmQyNjczYzZjOS4uOWU0MWQzMWMzYjRjNjUwMWZmYzA1Y2Y2MjcwNmYwYWU2
ODdiNWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcApAQCAtNzAs
NyArNzAsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcigpCiAgICAg
aWYgKCFkb2N1bWVudExvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFuaWZlc3QgPSBmYXN0R2V0QXR0cmlidXRlKG1hbmlmZXN0QXR0cik7
CiAgICAgaWYgKG1hbmlmZXN0LmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnRMb2FkZXItPmFw
cGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0KCk7CiAgICAg
ZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggYzBmOWVj
Y2I0NzAxMjYzOGRlMzQxNzY0OGUwZDYyMzBjYjI4ZWE2NS4uZGJhMmNkMDEzZjllZDljZmNkNjkw
OGJjZGQzYTVhZjE2ZjQ5ZDA4OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1l
bnQuY3BwCkBAIC0yMDIsMTAgKzIwMiwxMCBAQCBTdHJpbmcgSFRNTEltYWdlRWxlbWVudDo6YWx0
VGV4dCgpIGNvbnN0CiAgICAgLy8gbGV0cyBmaWd1cmUgb3V0IHRoZSBhbHQgdGV4dC4uIG1hZ2lj
IHN0dWZmCiAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OC9SRUMtaHRtbDQwLTE5OTgw
NDI0L2FwcGVuZGl4L25vdGVzLmh0bWwjYWx0Z2VuCiAgICAgLy8gYWxzbyBoZWF2aWx5IGRpc2N1
c3NlZCBieSBIaXhpZSBvbiBidWd6aWxsYQotICAgIFN0cmluZyBhbHQgPSBnZXRBdHRyaWJ1dGUo
YWx0QXR0cik7CisgICAgU3RyaW5nIGFsdCA9IGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7CiAg
ICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0dHJpYnV0ZQogICAgIGlmIChhbHQuaXNOdWxsKCkp
Ci0gICAgICAgIGFsdCA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICBhbHQgPSBm
YXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgcmV0dXJuIGFsdDsKIH0KIApAQCAtMzkz
LDEzICszOTMsMTMgQEAgYm9vbCBIVE1MSW1hZ2VFbGVtZW50OjptYXRjaGVzTG93ZXJjYXNlZFVz
ZW1hcChjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBuYW1lKSBjb24KIAogY29uc3QgQXRvbWljU3Ry
aW5nJiBIVE1MSW1hZ2VFbGVtZW50OjphbHQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoYWx0QXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7CiB9
CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6ZHJhZ2dhYmxlKCkgY29uc3QKIHsKICAgICAvLyBJ
bWFnZSBlbGVtZW50cyBhcmUgZHJhZ2dhYmxlIGJ5IGRlZmF1bHQuCi0gICAgcmV0dXJuICFlcXVh
bElnbm9yaW5nQ2FzZShnZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0ciksICJmYWxzZSIpOworICAg
IHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UoZmFzdEdldEF0dHJpYnV0ZShkcmFnZ2FibGVBdHRy
KSwgImZhbHNlIik7CiB9CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2
YWx1ZSkKQEAgLTQwOSw3ICs0MDksNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhlaWdo
dChpbnQgdmFsdWUpCiAKIFVSTCBIVE1MSW1hZ2VFbGVtZW50OjpzcmMoKSBjb25zdAogewotICAg
IHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7Cisg
ICAgcmV0dXJuIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRy
KSk7CiB9CiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdmFs
dWUpCkBAIC00NTUsNyArNDU1LDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjphZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKIAogICAgIGFk
ZFN1YnJlc291cmNlVVJMKHVybHMsIHNyYygpKTsKICAgICAvLyBGSVhNRTogV2hhdCBhYm91dCB3
aGVuIHRoZSB1c2VtYXAgYXR0cmlidXRlIGJlZ2lucyB3aXRoICIjIj8KLSAgICBhZGRTdWJyZXNv
dXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZSh1c2VtYXBB
dHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVV
UkwoZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVs
ZW1lbnQ6OmRpZE1vdmVUb05ld0RvY3VtZW50KERvY3VtZW50KiBvbGREb2N1bWVudCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IDE1ZDAzNDAyMmIyMmI2ZjVk
MmZiYzhkOWU0NWRmOGYwMjY2YTJiMDYuLmE4ZWJhYTlkMzZkNjJhNTZmMDc5MmEzOGVlYWM1ZGQz
YjkzODE5NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAt
NzE4LDcgKzcxOCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxk
cmVuKCkKICAgICBtX3BhcnNpbmdJblByb2dyZXNzID0gZmFsc2U7CiAgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogICAgIGlmICghbV9zdGF0
ZVJlc3RvcmVkKSB7Ci0gICAgICAgIGJvb2wgY2hlY2tlZCA9IGhhc0F0dHJpYnV0ZShjaGVja2Vk
QXR0cik7CisgICAgICAgIGJvb2wgY2hlY2tlZCA9IGZhc3RIYXNBdHRyaWJ1dGUoY2hlY2tlZEF0
dHIpOwogICAgICAgICBpZiAoY2hlY2tlZCkKICAgICAgICAgICAgIHNldENoZWNrZWQoY2hlY2tl
ZCk7CiAgICAgICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlID0gdHJ1ZTsKQEAgLTc2Nyw3
ICs3NjcsNyBAQCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0VGV4dCgpIGNvbnN0CiAgICAg
aWYgKGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7
CiAgICAgaWYgKGFsdC5pc051bGwoKSkKLSAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHZhbHVl
QXR0cik7CisgICAgICAgIGFsdCA9IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKICAgICBp
ZiAoYWx0LmlzRW1wdHkoKSkKICAgICAgICAgYWx0ID0gaW5wdXRFbGVtZW50QWx0VGV4dCgpOwog
ICAgIHJldHVybiBhbHQ7CkBAIC04MDEsNyArODAxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50
OjpyZXNldCgpCiAgICAgICAgIHNldFZhbHVlKFN0cmluZygpKTsKIAogICAgIHNldEF1dG9maWxs
ZWQoZmFsc2UpOwotICAgIHNldENoZWNrZWQoaGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKSk7Cisg
ICAgc2V0Q2hlY2tlZChmYXN0SGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKSk7CiAgICAgbV9yZWZs
ZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TGFiZWxFbGVtZW50LmNwcAppbmRleCAxY2JlZDAxZTZjNmZlOWI0ODc1MGY4MWRlNTM1YzU4MGJj
MDQ2MjY2Li40MTE4OTg1MDdhZGVhMmRjOTUyMzhiMjZlYzQyZGJhNzdjOGViMzExIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgYm9v
bCBIVE1MTGFiZWxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAKIExhYmVsYWJsZUVsZW1l
bnQqIEhUTUxMYWJlbEVsZW1lbnQ6OmNvbnRyb2woKQogewotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgY29udHJvbElkID0gZ2V0QXR0cmlidXRlKGZvckF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgY29udHJvbElkID0gZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKTsKICAgICBpZiAoY29u
dHJvbElkLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIFNlYXJjaCB0aGUgY2hpbGRyZW4gYW5kIGRl
c2NlbmRhbnRzIG9mIHRoZSBsYWJlbCBlbGVtZW50IGZvciBhIGZvcm0gZWxlbWVudC4KICAgICAg
ICAgLy8gcGVyIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvT3ZlcnZpZXcuaHRtbCN0aGUt
bGFiZWwtZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCmluZGV4
IDhjOWViYWUyNjE1ODlmZDhjY2U4MDUyOGU0YWY4YzQzODg2ZDBkZGUuLjk1NjA3ODRiMTcwZTEw
MjlkZDdlY2MxNGQzMWY5MWNkYTlmYTFmY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5r
RWxlbWVudC5jcHAKQEAgLTE4OSw3ICsxODksNyBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6cHJv
Y2VzcygpCiAgICAgaWYgKG1fZGlzYWJsZWRTdGF0ZSAhPSBEaXNhYmxlZCAmJiAobV9yZWxBdHRy
aWJ1dGUubV9pc1N0eWxlU2hlZXQgfHwgKGFjY2VwdElmVHlwZUNvbnRhaW5zVGV4dENTUyAmJiB0
eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpKSkKICAgICAgICAgJiYgZG9jdW1lbnQoKS5mcmFtZSgp
ICYmIHVybC5pc1ZhbGlkKCkpIHsKICAgICAgICAgCi0gICAgICAgIFN0cmluZyBjaGFyc2V0ID0g
Z2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKKyAgICAgICAgU3RyaW5nIGNoYXJzZXQgPSBmYXN0
R2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKICAgICAgICAgaWYgKGNoYXJzZXQuaXNFbXB0eSgp
ICYmIGRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgp
LmNoYXJzZXQoKTsKICAgICAgICAgCkBAIC00MDMsNyArNDAzLDcgQEAgVVJMIEhUTUxMaW5rRWxl
bWVudDo6aHJlZigpIGNvbnN0CiAKIFN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OnJlbCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShyZWxBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShyZWxBdHRyKTsKIH0KIAogU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6dGFyZ2V0
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcAppbmRleCAwYTJl
ZTdiMGNkYjM0NGIwNWVmOGJhYzZmZjExMzFjN2I1MTlhOWQ3Li4xNjRhMTUxZmJmNWM4YzI4YTM2
ZDc3NjFjNjY3ODI1MjkyMjhmMWQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1l
bnQuY3BwCkBAIC05MSwxMiArOTEsMTIgQEAgdm9pZCBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nlc3Mo
KQogCiBTdHJpbmcgSFRNTE1ldGFFbGVtZW50Ojpjb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZShjb250ZW50QXR0cik7CiB9CiAKIFN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Omh0dHBFcXVpdigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShodHRwX2VxdWl2QXR0cik7CisgICAg
cmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoaHR0cF9lcXVpdkF0dHIpOwogfQogCiBTdHJpbmcgSFRN
TE1ldGFFbGVtZW50OjpuYW1lKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0
RWxlbWVudC5jcHAKaW5kZXggOGI2OTg5MDA3Zjg3ODQxYTA5ODkxNzA1M2Q4NmY2YjVhN2JiMDlm
Yi4uOTE3N2VhYTMwZGFmOWM5NThhYTcwNGZlN2JhY2ZhZmZmZDg2ZDVhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAKQEAgLTM1Niw3ICszNTYsNyBAQCBib29s
IEhUTUxPYmplY3RFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJp
YnV0ZSkgY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MT2JqZWN0RWxlbWVudDo6aW1h
Z2VTb3VyY2VVUkwoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZGF0YUF0dHIp
OworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGRhdGFBdHRyKTsKIH0KIAogdm9pZCBIVE1M
T2JqZWN0RWxlbWVudDo6cmVuZGVyRmFsbGJhY2tDb250ZW50KCkKQEAgLTQ3OSwxMSArNDc5LDEx
IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhM
aXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjb25zCiB7CiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3VicmVzb3Vy
Y2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoZGF0YUF0dHIp
KSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChm
YXN0R2V0QXR0cmlidXRlKGRhdGFBdHRyKSkpOwogCiAgICAgLy8gRklYTUU6IFBhc3NpbmcgYSBz
dHJpbmcgdGhhdCBzdGFydHMgd2l0aCAiIyIgdG8gdGhlIGNvbXBsZXRlVVJMIGZ1bmN0aW9uIGRv
ZXMKICAgICAvLyBub3Qgc2VlbSBsaWtlIGl0IHdvdWxkIHdvcmsuIFRoZSBpbWFnZSBlbGVtZW50
IGhhcyBzaW1pbGFyIGJ1dCBub3QgaWRlbnRpY2FsIGNvZGUuCi0gICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB1c2VNYXAgPSBnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB1c2VNYXAgPSBmYXN0R2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpOwogICAgIGlmICh1
c2VNYXAuc3RhcnRzV2l0aCgnIycpKQogICAgICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBk
b2N1bWVudCgpLmNvbXBsZXRlVVJMKHVzZU1hcCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKaW5kZXggZmNlYmFlYzJjMGIzNTVlNWZjNmMxNWU4Nzgy
MTZmM2M2MDdiZjEyZS4uYzBhYjcwZDhlZTY5OTQ3Y2U0YTk5MmM4MTMzYmFjZThlMzEwMzBmYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCkBAIC05NCw3
ICs5NCw3IEBAIHZvaWQgSFRNTE9wdEdyb3VwRWxlbWVudDo6cmVjYWxjU2VsZWN0T3B0aW9ucygp
CiAKIFN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91cExhYmVsVGV4dCgpIGNvbnN0CiB7
Ci0gICAgU3RyaW5nIGl0ZW1UZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKGdldEF0dHJpYnV0ZShsYWJlbEF0dHIpKTsKKyAgICBTdHJpbmcgaXRlbVRleHQg
PSBkb2N1bWVudCgpLmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoZmFzdEdldEF0dHJp
YnV0ZShsYWJlbEF0dHIpKTsKICAgICAKICAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJh
aWxpbmcgd2hpdGVzcGFjZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2Ug
bWF0Y2ggdGhpcyBiZWhhdmlvci4KICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVT
cGFjZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKaW5k
ZXggYjU0NzU3OTJjMzk3ZmRjMjg2ZTU2MGZjNDExMDFjNDgxYmE4ZmY2YS4uOTgzNzEyNDY5ZTJm
ZTMwOTcxY2Q4ZTJiZWJlZWJkMDI3NTY0NDg1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxQcm9ncmVzc0VsZW1lbnQuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgdm9pZCBIVE1MUHJvZ3Jl
c3NFbGVtZW50OjpzZXRWYWx1ZShkb3VibGUgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBk
b3VibGUgSFRNTFByb2dyZXNzRWxlbWVudDo6bWF4KCkgY29uc3QKIHsKLSAgICBkb3VibGUgbWF4
ID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZ2V0QXR0cmlidXRlKG1heEF0dHIpKTsKKyAg
ICBkb3VibGUgbWF4ID0gcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0
ZShtYXhBdHRyKSk7CiAgICAgcmV0dXJuICFzdGQ6OmlzZmluaXRlKG1heCkgfHwgbWF4IDw9IDAg
PyAxIDogbWF4OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3Bw
CmluZGV4IDMwZTNkNDZkZDYzZGM3ZjE0ZTgzNjMwNjIxM2Q0NWVlZTYxMGNjN2YuLjU3OGNkMzk2
NTAxMzMyNWI1YWNiNDAyNzYwNGEzNmQwMDZkYzI2ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC0xMTcsMTIgKzExNywxMiBAQCB2b2lkIEhUTUxTY3Jp
cHRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYg
dXJscykgY29ucwogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnNvdXJjZUF0dHJpYnV0ZVZh
bHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNyY0F0dHIpLnN0cmluZygp
OworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLnN0cmluZygpOwogfQogCiBT
dHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmNoYXJzZXRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyc2V0QXR0cikuc3RyaW5nKCk7CisgICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcg
SFRNTFNjcmlwdEVsZW1lbnQ6OnR5cGVBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CkBAIC0xMzIsMTcg
KzEzMiwxNyBAQCBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnR5cGVBdHRyaWJ1dGVWYWx1ZSgp
IGNvbnN0CiAKIFN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6bGFuZ3VhZ2VBdHRyaWJ1dGVWYWx1
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsYW5ndWFnZUF0dHIpLnN0cmlu
ZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGxhbmd1YWdlQXR0cikuc3RyaW5nKCk7
CiB9CiAKIFN0cmluZyBIVE1MU2NyaXB0RWxlbWVudDo6Zm9yQXR0cmlidXRlVmFsdWUoKSBjb25z
dAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZm9yQXR0cikuc3RyaW5nKCk7CisgICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUoZm9yQXR0cikuc3RyaW5nKCk7CiB9CiAKIFN0cmluZyBIVE1M
U2NyaXB0RWxlbWVudDo6ZXZlbnRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShldmVudEF0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0
cmlidXRlKGV2ZW50QXR0cikuc3RyaW5nKCk7CiB9CiAKIGJvb2wgSFRNTFNjcmlwdEVsZW1lbnQ6
OmFzeW5jQXR0cmlidXRlVmFsdWUoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNlbGxFbGVtZW50LmNwcAppbmRleCBjY2ZiZjI3YmMzYjk2OGViYjBiMWQ2ZGExM2JlZmE3
MzQ5OTk3YTM0Li5jY2I3NGNhMWMyZjMwODJhZTdhMmEzYmFhMTVjMTdiZjg2ZmQxOGE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcApAQCAtMTYwLDcg
KzE2MCw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmli
dXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+JiB1cmxzKSBjCiB7CiAgICAgSFRNTFRhYmxlUGFydEVs
ZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1YnJl
c291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGJhY2tn
cm91bmRBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29t
cGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKIH0KIAogSFRNTFRh
YmxlQ2VsbEVsZW1lbnQqIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpjZWxsQWJvdmUoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKaW5kZXggYmYyMmQwMDg3ODQ5
NWZiM2NlMjhhYjNlOWIzMmZjYWVmOGIzY2I4YS4uNDM3MWM0N2RiZDM2MTRjOWM5M2Y1MDA2ZGJk
YmU3MjE2ZDQ4YzYzNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3Bw
CkBAIC01NjIsMTkgKzU2MiwxOSBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MVGFi
bGVFbGVtZW50Ojp0Qm9kaWVzKCkKIAogU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHJ1bGVzQXR0cik7CisgICAgcmV0dXJu
IGZhc3RHZXRBdHRyaWJ1dGUocnVsZXNBdHRyKTsKIH0KIAogU3RyaW5nIEhUTUxUYWJsZUVsZW1l
bnQ6OnN1bW1hcnkoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3VtbWFyeUF0
dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKIH0KIAogdm9p
ZCBIVE1MVGFibGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hT
ZXQ8VVJMPiYgdXJscykgY29uc3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1l
bnQoKS5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CisgICAgYWRk
U3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmli
dXRlKGJhY2tncm91bmRBdHRyKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwCmluZGV4IDMyYjgzOTZmNDEzM2Y1ZmUyMjQ0MmVl
ZThjZjBmNDk3NWI4YjI1ZmQuLmY0NmI4MDIwMDJmYjY0Mjc2OGYwMmI4MmNjMGUwN2UzMzM5N2Zk
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQu
Y3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgaW50IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpudW1S
b3dzKCkgY29uc3QKIAogU3RyaW5nIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjphbGlnbigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOworICAgIHJldHVybiBm
YXN0R2V0QXR0cmlidXRlKGFsaWduQXR0cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVs
ZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCkBAIC0xMTcsNyArMTE3LDcgQEAg
dm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1
ZSkKIAogU3RyaW5nIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaCgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1
dGUoY2hhckF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRDaChj
b25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTM3LDcgKzEzNyw3IEBAIHZvaWQgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAKIFN0cmluZyBIVE1M
VGFibGVTZWN0aW9uRWxlbWVudDo6dkFsaWduKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKHZhbGlnbkF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHZhbGlnbkF0
dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRWQWxpZ24oY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQu
Y3BwCmluZGV4IDMwNDU5NGRhODc3ZjNjNDYxODExNzU0YzkxYzgwMTEzNzU0ZGZhZWIuLmNlM2Q4
YTk1M2RmMmQyMWJhOTE2Mzc4ZDBlZjZkM2M2YzAwY2JmZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtNDMwLDcgKzQzMCw3IEBAIHZvaWQgSFRN
TFRleHRBcmVhRWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0cmluZyYgZGVmYXVsdFZh
bHVlKQogaW50IEhUTUxUZXh0QXJlYUVsZW1lbnQ6Om1heExlbmd0aCgpIGNvbnN0CiB7CiAgICAg
Ym9vbCBvazsKLSAgICBpbnQgdmFsdWUgPSBnZXRBdHRyaWJ1dGUobWF4bGVuZ3RoQXR0cikuc3Ry
aW5nKCkudG9JbnQoJm9rKTsKKyAgICBpbnQgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKG1heGxl
bmd0aEF0dHIpLnN0cmluZygpLnRvSW50KCZvayk7CiAgICAgcmV0dXJuIG9rICYmIHZhbHVlID49
IDAgPyB2YWx1ZSA6IC0xOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1Nl
YXJjaElucHV0VHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5j
cHAKaW5kZXggNzkxZGM3NDc4Y2RkMmJlZTJkNDIzMzE3YzM4NWZmODU4ODYzM2Y0MS4uNDE4ZGQw
YjA5NGUzMTMxMWVlZmI1NWI0YjI0YTYyZTE2ZThiNzgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
U2VhcmNoSW5wdXRUeXBlLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHZvaWQgU2VhcmNoSW5wdXRU
eXBlOjpzZWFyY2hFdmVudFRpbWVyRmlyZWQoVGltZXI8U2VhcmNoSW5wdXRUeXBlPiopCiAKIGJv
b2wgU2VhcmNoSW5wdXRUeXBlOjpzZWFyY2hFdmVudHNTaG91bGRCZURpc3BhdGNoZWQoKSBjb25z
dAogewotICAgIHJldHVybiBlbGVtZW50KCkuaGFzQXR0cmlidXRlKGluY3JlbWVudGFsQXR0cik7
CisgICAgcmV0dXJuIGVsZW1lbnQoKS5mYXN0SGFzQXR0cmlidXRlKGluY3JlbWVudGFsQXR0cik7
CiB9CiAKIHZvaWQgU2VhcmNoSW5wdXRUeXBlOjpkaWRTZXRWYWx1ZUJ5VXNlckVkaXQoVmFsdWVD
aGFuZ2VTdGF0ZSBzdGF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3Jt
U3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3Bw
CmluZGV4IDkzMTg4MzZmODY1MTM4NGMxY2M1YWJkNDBjODViYzE4NzNlZDcwMTkuLjRjNjU4ZGU3
Y2JiNWU4NTEyMDllMmQyZDc4MzE3ZWU2NGU0NzhhNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVy
L0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTU1LDEzICsxNTUsMTMgQEAgUGFzc1JlZlB0cjxGb3Jt
U3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQqIGZvcm0s
IGNvbnN0IEEKICAgICBjb3BpZWRBdHRyaWJ1dGVzLmNvcHlGcm9tKGF0dHJpYnV0ZXMpOwogICAg
IGlmIChzdWJtaXRCdXR0b24pIHsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwotICAg
ICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmlidXRlKGZv
cm1hY3Rpb25BdHRyKSkuaXNOdWxsKCkpCisgICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0g
c3VibWl0QnV0dG9uLT5mYXN0R2V0QXR0cmlidXRlKGZvcm1hY3Rpb25BdHRyKSkuaXNOdWxsKCkp
CiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnBhcnNlQWN0aW9uKGF0dHJpYnV0ZVZhbHVl
KTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmdldEF0dHJp
YnV0ZShmb3JtZW5jdHlwZUF0dHIpKS5pc051bGwoKSkKKyAgICAgICAgaWYgKCEoYXR0cmlidXRl
VmFsdWUgPSBzdWJtaXRCdXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybWVuY3R5cGVBdHRyKSku
aXNOdWxsKCkpCiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnVwZGF0ZUVuY29kaW5nVHlw
ZShhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0gc3VibWl0
QnV0dG9uLT5nZXRBdHRyaWJ1dGUoZm9ybW1ldGhvZEF0dHIpKS5pc051bGwoKSkKKyAgICAgICAg
aWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9y
bW1ldGhvZEF0dHIpKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvcGllZEF0dHJpYnV0ZXMudXBk
YXRlTWV0aG9kVHlwZShhdHRyaWJ1dGVWYWx1ZSk7Ci0gICAgICAgIGlmICghKGF0dHJpYnV0ZVZh
bHVlID0gc3VibWl0QnV0dG9uLT5nZXRBdHRyaWJ1dGUoZm9ybXRhcmdldEF0dHIpKS5pc051bGwo
KSkKKyAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmZhc3RHZXRB
dHRyaWJ1dGUoZm9ybXRhcmdldEF0dHIpKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvcGllZEF0
dHJpYnV0ZXMuc2V0VGFyZ2V0KGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9CiAgICAgCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCmluZGV4IGZlMjZkZDFlM2I3YWRjNjRlM2E4ZWIxNWEyYzc2ODRjNGYzOTk2ZDcu
LjI5NjBlZDIyODMyMmQzMWJlZjliZWM0NGEyM2E0OTY1YzMyNGVmN2IgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC00NzYsNyArNDc2LDcgQEAgU3RyaW5nIEZyYW1lOjptYXRjaExhYmVsc0FnYWlu
c3RFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqIGUKICAgICBp
ZiAoIXJlc3VsdEZyb21OYW1lQXR0cmlidXRlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHJl
c3VsdEZyb21OYW1lQXR0cmlidXRlOwogICAgIAotICAgIHJldHVybiBtYXRjaExhYmVsc0FnYWlu
c3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSk7CisgICAgcmV0
dXJuIG1hdGNoTGFiZWxzQWdhaW5zdFN0cmluZyhsYWJlbHMsIGVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUoaWRBdHRyKSk7CiB9CiAKICNpZiBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZVNlcmlhbGl6ZXIuY3BwCmluZGV4IDc2MjJmMTEwMzI5M2I5N2M3YTdmZmVmZjZlZDM3MWNm
ZTkzYTQ5MjAuLjQzYzRlN2VmODdjZDdkNzc2ZjMxNDQzNmYwODQ3Y2E5ZWE4YTEwOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCkBAIC0yMzIsNyArMjMyLDcgQEAgdm9p
ZCBQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogCiAgICAgICAg
IGlmIChpc0hUTUxJbWFnZUVsZW1lbnQoZWxlbWVudCkpIHsKICAgICAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHRvSFRNTEltYWdlRWxlbWVudChlbGVtZW50KTsKLSAg
ICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwoaW1hZ2VFbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgICAgICAgICBVUkwgdXJsID0g
ZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnNyY0F0dHIpKTsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9
IGltYWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKICAgICAgICAgICAgIGFkZEltYWdlVG9SZXNv
dXJjZXMoY2FjaGVkSW1hZ2UsIGltYWdlRWxlbWVudC0+cmVuZGVyZXIoKSwgdXJsKTsKICAgICAg
ICAgfSBlbHNlIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6bGlua1RhZykpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAppbmRleCA0
NDkxZDUzZjkyYTNlNWVmYjdjZWNhMzY0MDllZmYzOGNmN2YxYWM4Li5jZTVhN2UyM2RmNDRjZjA1
NGUwMzY3ZmY2MDI3YzI1YzUzNzIzOGQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL1Bhc3RlYm9hcmRXaW4uY3BwCkBAIC0xMDM0LDcgKzEwMzQsNyBAQCB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgVVJMJiB1
cmwpCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgSEdMT0JBTCBpbWFnZUZpbGVEZXNjcmlwdG9yID0gY3JlYXRlR2xv
YmFsSW1hZ2VGaWxlRGVzY3JpcHRvcih1cmwuc3RyaW5nKCksIGVsZW1lbnQuZ2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6YWx0QXR0ciksIGNhY2hlZEltYWdlKTsKKyAgICBIR0xPQkFMIGltYWdlRmls
ZURlc2NyaXB0b3IgPSBjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9yKHVybC5zdHJpbmco
KSwgZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0ciksIGNhY2hlZElt
YWdlKTsKICAgICBpZiAoIWltYWdlRmlsZURlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybjsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4IGQ0ZGIzNTk1
MGFjZGI4NWU3YWI1YWQ3MWIwYjQwOWI4Y2Y5NTMxODcuLjk1OTNiNzYwNDE5OTUyZDBiYzIwYTE0
YmY3ZTI2NDE4MDU0ZDA4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKQEAgLTI3NCw3ICsyNzQsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6YWx0RGlz
cGxheVN0cmluZygpIGNvbnN0CiAgICAgCiAgICAgaWYgKGlzSFRNTEltYWdlRWxlbWVudChtX2lu
bmVyTm9uU2hhcmVkTm9kZS5nZXQoKSkpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2UgPSB0b0hUTUxJbWFnZUVsZW1lbnQobV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpOwotICAg
ICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpLCBt
X2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBkaXNwbGF5U3RyaW5n
KGltYWdlLT5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5n
ZXQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChpc0hUTUxJbnB1dEVsZW1lbnQobV9pbm5lck5v
blNoYXJlZE5vZGUuZ2V0KCkpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clNlYXJjaEZpZWxkLmNwcAppbmRleCBkZmZmNzVjZGE2NjJkM2E2YTA3YWVlNzlmNGEwNDU2ZDk5
Y2Q4NmUxLi5kODI0ODY1MGE5YzU0YTBjMzE0MTBhNGE0YTFhYWI0NjBkNGMwNWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKQEAgLTE5MSw3
ICsxOTEsNyBAQCBFVmlzaWJpbGl0eSBSZW5kZXJTZWFyY2hGaWVsZDo6dmlzaWJpbGl0eUZvckNh
bmNlbEJ1dHRvbigpIGNvbnN0CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgUmVuZGVyU2VhcmNoRmll
bGQ6OmF1dG9zYXZlTmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLmdl
dEF0dHJpYnV0ZShhdXRvc2F2ZUF0dHIpOworICAgIHJldHVybiBpbnB1dEVsZW1lbnQoKS5mYXN0
R2V0QXR0cmlidXRlKGF1dG9zYXZlQXR0cik7CiB9CiAKIC8vIFBvcHVwTWVudUNsaWVudCBtZXRo
b2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCmluZGV4
IDBmMmI3NGI0ZjdlYTBlNzcwNzUzYWRmNGUwZjI1MzRjZWRkMGVkMjEuLjk4MWY1NTk0NmJjMzE4
MTYyOWQwMWZhY2MxMjYwMGU3MjM5NjQzMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZUNlbGwuY3BwCkBAIC0xNzgsNyArMTc4LDcgQEAgdm9pZCBSZW5kZXJUYWJs
ZUNlbGw6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICBpZiAoZWxlbWVudCgp
ICYmIHN0eWxlKCkuYXV0b1dyYXAoKSkgewogICAgICAgICAvLyBTZWUgaWYgbm93cmFwIHdhcyBz
ZXQuCiAgICAgICAgIExlbmd0aCB3ID0gc3R5bGVPckNvbExvZ2ljYWxXaWR0aCgpOwotICAgICAg
ICBTdHJpbmcgbm93cmFwID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUobm93cmFwQXR0cik7Cisg
ICAgICAgIFN0cmluZyBub3dyYXAgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobm93cmFw
QXR0cik7CiAgICAgICAgIGlmICghbm93cmFwLmlzTnVsbCgpICYmIHcuaXNGaXhlZCgpKQogICAg
ICAgICAgICAgLy8gTm93cmFwIGlzIHNldCwgYnV0IHdlIGRpZG4ndCBhY3R1YWxseSB1c2UgaXQg
YmVjYXVzZSBvZiB0aGUKICAgICAgICAgICAgIC8vIGZpeGVkIHdpZHRoIHNldCBvbiB0aGUgY2Vs
bC4gIEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRyYWl0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5k
ZXggMDFkNTU4ZDFhY2ExNjQ0N2I3NTA3ODc3MTdkN2NlNGMxNjI3NWJlNC4uZjJjZGM1MmM3NDc4
ZjdkMjlhNjE2ODI1YTkyOTRkMTM0MDZmNjY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjI2
LDcgKzIyNiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudElu
dG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgICAgICByZW5kZXJl
ciA9IHVzZUVsZW1lbnQucmVuZGVyZXJDbGlwQ2hpbGQoKTsKICAgICAgICAgICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXVzZUVs
ZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRyKSkKKyAgICAgICAgICAg
IGlmICghdXNlRWxlbWVudC5mYXN0SGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRy
KSkKICAgICAgICAgICAgICAgICBuZXdDbGlwUnVsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY2xpcFJ1bGUoKTsKICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>238311</attachid>
            <date>2014-09-18 09:08:18 -0700</date>
            <delta_ts>2014-09-18 09:52:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136900-20140918090815.patch</filename>
            <type>text/plain</type>
            <size>56518</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczNzIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOGRjMzBmYzlkZWQ0ZWIz
NzFkYzhjMjg2NzdlMzY0ODRkZjZmN2UxZC4uM2ZmZTdlZWE5NDAzYmQ0NjUxOGFhZWY2YmZiYmM2
MmI0MTc4NDFmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0MCBAQAorMjAxNC0wOS0xOCAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSBmYXN0SGFzQXR0cmli
dXRlKCkgLyBmYXN0R2V0QXR0cmlidXRlKCkgd2hlbiBwb3NzaWJsZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2OTAwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQmVuamFtaW4gUG91bGFpbi4KKworICAgICAgICBVc2UgZmFzdEhhc0F0dHJpYnV0ZSgp
IC8gZmFzdEdldEF0dHJpYnV0ZSgpIHdoZW4gcG9zc2libGUsIHRoYXQgaXMgd2hlbgorICAgICAg
ICB0aGUgYXR0cmlidXRlIGlzIG5vdCBTVkctYW5pbWF0ZWQgb3IgdGhlIHxzdHlsZXwgYXR0cmli
dXRlLCB0byBhdm9pZAorICAgICAgICBzeW5jaHJvbml6aW5nIGF0dHJpYnV0ZXMgdW5uZWNlc3Nh
cmlseS4KKworICAgICAgICBBbHNvIGF2b2lkIGNhbGxpbmcgaGFzQXR0cmlidXRlKHh4eEF0dHIp
IHRoZW4gZ2V0QXR0cmlidXRlKHh4eEF0dHIpIGFzCisgICAgICAgIGl0IGNhdXNlcyAyIGxpbmVh
ciBzZWFyY2hlcy4gSXQgaXMgYmVzdCB0byBjYWxsIGdldEF0dHJpYnV0ZSh4eHhBdHRyKQorICAg
ICAgICBkaXJlY3RseSBhbmQgY2hlY2sgaWYgaXQgcmV0dXJucyB0aGUgbnVsbEF0b20uCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCBubyBiZWhhdmlvciBjaGFuZ2UuIEVsZW1lbnQ6OmZhc3RBdHRy
aWJ1dGVMb29rdXBBbGxvd2VkKCkKKyAgICAgICAgaXMgdGhlcmUgYXMgYSBzYWZldHkgc2V0IGZv
ciBkZWJ1ZyBidWlsZHMuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlMaXN0Qm94
T3B0aW9uOjppc0VuYWJsZWQpOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU5vZGVPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU5vZGVPYmpl
Y3Q6OmFsdGVybmF0aXZlVGV4dEZvcldlYkFyZWEpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU5vZGVPYmplY3Q6OmhpZXJhcmNoaWNhbExldmVsKToKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNz
aWJpbGl0eU9iamVjdDo6Y29udGVudEVkaXRhYmxlQXR0cmlidXRlSXNFbmFibGVkKToKKyAgICAg
ICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6Omhhc01h
bmlmZXN0KToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmtleU1hdGNoZXNMYWJlbEZvckF0dHJpYnV0ZSk6CisgICAgICAgICogZG9tL0Rv
Y3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1l
bnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2ZVN0eWxlU2hlZXRzKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbWFnZVNv
dXJjZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpwc2V1ZG8pOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6c3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlKToKKyAgICAgICAgKiBl
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5
bGVDb21tYW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2spOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBdHRyaWJ1
dGVFcXVpdmFsZW50OjphdHRyaWJ1dGVWYWx1ZUFzQ1NTVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEZvbnRTaXplRXF1aXZhbGVudDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KToKKyAgICAgICAgKiBodG1sL0hUTUxB
bmNob3JFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojpk
cmFnZ2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNlbmRQaW5n
cyk6CisgICAgICAgICogaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQXBwbGV0RWxlbWVudDo6dXBkYXRlV2lkZ2V0KToKKyAgICAgICAgKiBodG1sL0hU
TUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVudDo6dmFsdWUpOgor
ICAgICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxE
b2N1bWVudDo6ZGlyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6aW1hZ2VTb3VyY2VVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KToKKyAgICAgICAgKiBodG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTEZpZWxkU2V0RWxlbWVudDo6fkhUTUxGaWVsZFNldEVsZW1lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6dXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0
ZVVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWVsZFNldEVsZW1lbnQ6OmRpc2FibGVk
QXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50
OjpkaXNhYmxlZFN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRF
bGVtZW50OjpjaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZpZWxkU2V0
RWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1D
b250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50Ojpjb21wdXRlSXNEaXNhYmxlZEJ5RmllbGRzZXRBbmNlc3Rvcik6CisgICAgICAgICogaHRt
bC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50
OjphY3Rpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50Ojpub1Jlc2l6ZSk6CisgICAgICAgICogaHRtbC9I
VE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6bG9jYXRpb24pOgorICAgICAgICAqIGh0bWwvSFRNTEhSRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSFJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRp
b25BdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAg
ICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFn
ZUVsZW1lbnQ6OmFsdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6
YWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmRyYWdnYWJsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50OjpzcmMpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAg
ICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElu
cHV0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElucHV0RWxl
bWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTGFiZWxFbGVtZW50Ojpjb250cm9sKToKKyAgICAgICAgKiBodG1s
L0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6
OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExpbmtFbGVtZW50OjpyZWwpOgorICAg
ICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZXRhRWxlbWVudDo6Y29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6
Omh0dHBFcXVpdik6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6aW1hZ2VTb3VyY2VVUkwpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KToKKyAgICAgICAgKiBo
dG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFByb2dy
ZXNzRWxlbWVudDo6bWF4KToKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Ojpzb3VyY2VBdHRyaWJ1dGVWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2hhcnNldEF0dHJpYnV0
ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50OjpsYW5ndWFnZUF0
dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Ojpmb3JB
dHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZXZl
bnRBdHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDZWxsRWxlbWVudDo6YWRkU3VicmVzb3Vy
Y2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6cnVsZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFRhYmxlRWxlbWVudDo6c3VtbWFyeSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
VGFibGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGh0
bWwvSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQ6OmFsaWduKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50OjpjaCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxl
bWVudDo6dkFsaWduKToKKyAgICAgICAgKiBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKToKKyAgICAg
ICAgKiBodG1sL1NlYXJjaElucHV0VHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWFyY2hJ
bnB1dFR5cGU6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCk6CisgICAgICAgICogbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9u
OjpjcmVhdGUpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQpOgorICAgICAgICAqIHBhZ2UvUGFnZVNl
cmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZVNlcmlhbGl6ZXI6OnNlcmlhbGl6
ZUZyYW1lKToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlVG9EYXRhT2JqZWN0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
U2VhcmNoRmllbGQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VhcmNoRmllbGQ6OmF1
dG9zYXZlTmFtZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXI6OmRyYXdD
b250ZW50SW50b01hc2tJbWFnZSk6CisKIDIwMTQtMDktMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9z
ICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnVzZWQgbWV0aG9kcyBm
cm9tIE1lZGlhUGxheWVyQ2xpZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCmluZGV4IGI3NTkxZDQw
MGMyNmUwZGRhMmI4NjY0NTQzMWZiMzhjMDhjZDNmZTguLmE5ZmFkOGQ0NzJhNzNhMmMwOWNmYzgw
NTQ5ZWFmMTA0NmNlNmQ5ZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uY3BwCkBAIC03MCw3ICs3MCw3
IEBAIGJvb2wgQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb246OmlzRW5hYmxlZCgpIGNvbnN0CiAg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShhcmlhX2Rpc2FibGVkQXR0ciks
ICJ0cnVlIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmIChtX29wdGlvbkVsZW1l
bnQtPmhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKQorICAgIGlmIChtX29wdGlvbkVsZW1lbnQt
PmZhc3RIYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIAogICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAppbmRleCBmYzQxNThkMTkyYWJj
MDlkNWRhYjgzMjVkZTQzYjU0MzkyNTI2ZDQ5Li4wYThjNDQ3ZDhmMmQ4MGEwODRhMzQ3ZTIwM2Nm
YzcyNmI4YzcwMDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcApAQCAtMTQ1Niw3ICsxNDU2LDcgQEAgU3Ry
aW5nIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0OjphbHRlcm5hdGl2ZVRleHRGb3JXZWJBcmVhKCkg
Y29uc3QKICAgICAKICAgICAvLyBDaGVjayBpZiB0aGUgSFRNTCBlbGVtZW50IGhhcyBhbiBhcmlh
LWxhYmVsIGZvciB0aGUgd2VicGFnZS4KICAgICBpZiAoRWxlbWVudCogZG9jdW1lbnRFbGVtZW50
ID0gZG9jdW1lbnQtPmRvY3VtZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJpYUxhYmVsID0gZG9jdW1lbnRFbGVtZW50LT5nZXRBdHRyaWJ1dGUoYXJpYV9sYWJl
bEF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMYWJlbCA9IGRvY3VtZW50
RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhcmlhX2xhYmVsQXR0cik7CiAgICAgICAgIGlmICgh
YXJpYUxhYmVsLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBhcmlhTGFiZWw7CiAgICAg
fQpAQCAtMTU2Myw3ICsxNTYzLDcgQEAgdW5zaWduZWQgQWNjZXNzaWJpbGl0eU5vZGVPYmplY3Q6
OmhpZXJhcmNoaWNhbExldmVsKCkgY29uc3QKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgRWxlbWVudCogZWxlbWVudCA9IHRv
RWxlbWVudChub2RlKTsKLSAgICBTdHJpbmcgYXJpYUxldmVsID0gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKGFyaWFfbGV2ZWxBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyaWFMZXZlbCA9
IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXJpYV9sZXZlbEF0dHIpOwogICAgIGlmICghYXJp
YUxldmVsLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGFyaWFMZXZlbC50b0ludCgpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5
T2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAKaW5kZXggNDk5OTA0MDJkZDU3NzNlMjY2ZGYwYzU4NmJmM2M0MzQ1YjIzNTY0ZC4u
MzQ5NDg2Yjc3YjBiMzUzNzNiOTY5MzMzYzVkM2E1ZmZmOWE3ZWY4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC0x
Mzc4LDEwICsxMzc4LDEwIEBAIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6Y29udGVudEVkaXRh
YmxlQXR0cmlidXRlSXNFbmFibGVkKEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgaWYgKCFlbGVtZW50
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgaWYgKCFlbGVtZW50LT5oYXNBdHRy
aWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cikpCisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb250
ZW50RWRpdGFibGVWYWx1ZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY29udGVudGVkaXRh
YmxlQXR0cik7CisgICAgaWYgKGNvbnRlbnRFZGl0YWJsZVZhbHVlLmlzTnVsbCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb250ZW50RWRp
dGFibGVWYWx1ZSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0
cik7CiAgICAgLy8gQm90aCAidHJ1ZSIgKGNhc2UtaW5zZW5zaXRpdmUpIGFuZCB0aGUgZW1wdHkg
c3RyaW5nIGNvdW50IGFzIHRydWUuCiAgICAgcmV0dXJuIGNvbnRlbnRFZGl0YWJsZVZhbHVlLmlz
RW1wdHkoKSB8fCBlcXVhbElnbm9yaW5nQ2FzZShjb250ZW50RWRpdGFibGVWYWx1ZSwgInRydWUi
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IGNlMjU3YWI3ZmVmYjU3Yzk0ZTJmMTlh
M2M4MTQ0MTNlMWQ4NjYzMzMuLmY3YjE5NTk5YzY3Nzk0YzJjOGQ1NWQyZGUxMzA1ZWU5NzA4Nzhj
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtODE0LDcgKzgxNCw3IEBAIERPTUltcGxl
bWVudGF0aW9uKiBEb2N1bWVudDo6aW1wbGVtZW50YXRpb24oKQogCiBib29sIERvY3VtZW50Ojpo
YXNNYW5pZmVzdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50RWxlbWVudCgpICYmIGRv
Y3VtZW50RWxlbWVudCgpLT5oYXNUYWdOYW1lKGh0bWxUYWcpICYmIGRvY3VtZW50RWxlbWVudCgp
LT5oYXNBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKKyAgICByZXR1cm4gZG9jdW1lbnRFbGVtZW50
KCkgJiYgZG9jdW1lbnRFbGVtZW50KCktPmhhc1RhZ05hbWUoaHRtbFRhZykgJiYgZG9jdW1lbnRF
bGVtZW50KCktPmZhc3RIYXNBdHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKIH0KIAogRG9jdW1lbnRU
eXBlKiBEb2N1bWVudDo6ZG9jdHlwZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRPcmRlcmVkTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE9yZGVyZWRNYXAuY3BwCmluZGV4IDk4NzQzNjE4YWQyZDEyN2QxZGViODFlNDlkZThmYWIwZjg2
MWZjOGIuLjU5MzViM2JiZjc0YTNmOGY2M2NmNzY1NDgyMjQxMmMxNDFkNGZkZWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE9yZGVyZWRNYXAuY3BwCkBAIC02OSw3ICs2OSw3IEBAIGlu
bGluZSBib29sIGtleU1hdGNoZXNMb3dlcmNhc2VkVXNlbWFwKGNvbnN0IEF0b21pY1N0cmluZ0lt
cGwmIGtleSwgY29uc3QgRWxlbWVuCiAKIGlubGluZSBib29sIGtleU1hdGNoZXNMYWJlbEZvckF0
dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgcmV0dXJuIGlzSFRNTExhYmVsRWxlbWVudChlbGVtZW50KSAmJiBlbGVtZW50
LmdldEF0dHJpYnV0ZShmb3JBdHRyKS5pbXBsKCkgPT0gJmtleTsKKyAgICByZXR1cm4gaXNIVE1M
TGFiZWxFbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQuZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRy
KS5pbXBsKCkgPT0gJmtleTsKIH0KIAogaW5saW5lIGJvb2wga2V5TWF0Y2hlc1dpbmRvd05hbWVk
SXRlbShjb25zdCBBdG9taWNTdHJpbmdJbXBsJiBrZXksIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVj
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlv
bi5jcHAKaW5kZXggZWQyMGVkNTRiNjEyOTcxNGNiYTgzY2ZmYWM3MWRhYTc5YWMzOTdiMy4uZGIy
MzNlYmUxYzViYTI3MDNlOTExZmZmZWE1YzZmYjQxODhhNmM1YyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U3R5bGVTaGVldENvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFN0eWxlU2hlZXRDb2xsZWN0aW9uLmNwcApAQCAtMjgyLDcg
KzI4Miw3IEBAIHZvaWQgRG9jdW1lbnRTdHlsZVNoZWV0Q29sbGVjdGlvbjo6Y29sbGVjdEFjdGl2
ZVN0eWxlU2hlZXRzKFZlY3RvcjxSZWZQdHI8U3R5bGVTCiAjZW5kaWYKICAgICAgICAgfSBlbHNl
IGlmICgobm9kZS0+aXNIVE1MRWxlbWVudCgpICYmICh0b0hUTUxFbGVtZW50KCpub2RlKS5oYXNU
YWdOYW1lKGxpbmtUYWcpIHx8IHRvSFRNTEVsZW1lbnQoKm5vZGUpLmhhc1RhZ05hbWUoc3R5bGVU
YWcpKSkgfHwgKG5vZGUtPmlzU1ZHRWxlbWVudCgpICYmIHRvU1ZHRWxlbWVudCgqbm9kZSkuaGFz
VGFnTmFtZShTVkdOYW1lczo6c3R5bGVUYWcpKSkgewogICAgICAgICAgICAgRWxlbWVudCYgZWxl
bWVudCA9IHRvRWxlbWVudCgqbm9kZSk7Ci0gICAgICAgICAgICBBdG9taWNTdHJpbmcgdGl0bGUg
PSBlbGVtZW50LmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAgQXRvbWljU3Ry
aW5nIHRpdGxlID0gZWxlbWVudC5mYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAg
ICAgICBib29sIGVuYWJsZWRWaWFTY3JpcHQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmIChpc0hU
TUxMaW5rRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAgICAgICAgIC8vIDxMSU5LPiBlbGVt
ZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAKaW5kZXggYjUxZDA4NjUwMmM4Y2U5NzFiMTE4MDdjY2Nj
ZTBmZjA5Y2RhMzZiNS4uYjdmOWRlNjVmN2YzYzk3ZjYzZjAwZmI2ZDFkN2M3NjVmZjRlZGZjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMTMwNSw3ICsxMzA1LDcgQEAgVVJMIEVsZW1lbnQ6
OmJhc2VVUkkoKSBjb25zdAogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmltYWdlU291
cmNlVVJMKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHNyY0F0dHIpOworICAg
IHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpOwogfQogCiBib29sIEVsZW1lbnQ6OnJl
bmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQpAQCAtMjA0NSw3ICsyMDQ1
LDcgQEAgU3RyaW5nIEVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5n
JiBFbGVtZW50Ojpwc2V1ZG8oKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocHNl
dWRvQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUocHNldWRvQXR0cik7CiB9CiAK
IHZvaWQgRWxlbWVudDo6c2V0UHNldWRvKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0y
NDU1LDcgKzI0NTUsNyBAQCB2b2lkIEVsZW1lbnQ6OnJlcXVlc3RQb2ludGVyTG9jaygpCiAKIFNw
ZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBFbGVtZW50OjpzcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUo
KSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUo
SFRNTE5hbWVzOjpzcGVsbGNoZWNrQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcGVsbGNoZWNrQXR0cik7CiAgICAgaWYg
KHZhbHVlID09IG51bGxBdG9tKQogICAgICAgICByZXR1cm4gU3BlbGxjaGVja0F0dHJpYnV0ZURl
ZmF1bHQ7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAidHJ1ZSIpIHx8IGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLCAiIikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlT
dHlsZUNvbW1hbmQuY3BwCmluZGV4IGEyMjAyN2UzODBmZTUyNmZiZjNlODEzNGY3ZTljODEzY2Jj
YWJmNTIuLjU1Mzc3YzY5ZjU4ZTNjMGUwOWExM2YxMzMyMWYxNjdlZDQzN2MwN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCkBAIC01MTcsNyArNTE3
LDcgQEAgdm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2lu
Z0Jsb2NrKE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgLy8gYW5kIGFsbCBtYXRjaGlu
ZyBzdHlsZSBydWxlcyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaG93IHRvIGJlc3Qgc2V0IHRoZSB1
bmljb2RlLWJpZGkgcHJvcGVydHkgdG8gJ25vcm1hbCcuCiAgICAgICAgIC8vIEZvciBub3csIGl0
IGFzc3VtZXMgdGhhdCBpZiB0aGUgJ2RpcicgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZW4gcmVt
b3ZpbmcgaXQgd2lsbCBzdWZmaWNlLCBhbmQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHNldHMg
dGhlIHByb3BlcnR5IGluIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgICAgIGlm
IChlbGVtZW50LT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQt
PmZhc3RIYXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0
aGlzIGlzIGEgQkRPIGVsZW1lbnQsIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHJlbW92ZSBpdCBp
ZiBpdCBoYXMgbm8KICAgICAgICAgICAgIC8vIG90aGVyIGF0dHJpYnV0ZXMsIGxpa2Ugd2UgKHNo
b3VsZCkgZG8gd2l0aCBCIGFuZCBJIGVsZW1lbnRzLgogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0
dHJpYnV0ZShlbGVtZW50LCBkaXJBdHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcAppbmRleCA0MzhhMWMwMWFlMWVmMmI4NjUwNTMzYzhiZTM4ZDBiZDExNmE0ODExLi4w
NDU4Y2EzMTdiZWZiMjc4ZWNhZDZjOTA4OGM1NDVkNzAxNjcxMmZhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCkBAIC0yNzcsMTIgKzI3NywxMyBAQCB2b2lkIEhUTUxB
dHRyaWJ1dGVFcXVpdmFsZW50OjphZGRUb1N0eWxlKEVsZW1lbnQqIGVsZW1lbnQsIEVkaXRpbmdT
dHlsZSogc3R5bGUpCiBQYXNzUmVmUHRyPENTU1ZhbHVlPiBIVE1MQXR0cmlidXRlRXF1aXZhbGVu
dDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVudC0+aGFzQXR0cmlidXRlKG1fYXR0
ck5hbWUpKQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUobV9hdHRyTmFtZSk7CisgICAgaWYgKHZhbHVlLmlzTnVsbCgpKQogICAgICAgICByZXR1
cm4gMDsKICAgICAKICAgICBSZWZQdHI8TXV0YWJsZVN0eWxlUHJvcGVydGllcz4gZHVtbXlTdHls
ZTsKICAgICBkdW1teVN0eWxlID0gTXV0YWJsZVN0eWxlUHJvcGVydGllczo6Y3JlYXRlKCk7Ci0g
ICAgZHVtbXlTdHlsZS0+c2V0UHJvcGVydHkobV9wcm9wZXJ0eUlELCBlbGVtZW50LT5nZXRBdHRy
aWJ1dGUobV9hdHRyTmFtZSkpOworICAgIGR1bW15U3R5bGUtPnNldFByb3BlcnR5KG1fcHJvcGVy
dHlJRCwgdmFsdWUpOwogICAgIHJldHVybiBkdW1teVN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVl
KG1fcHJvcGVydHlJRCk7CiB9CiAKQEAgLTMwMSwxMCArMzAyLDExIEBAIEhUTUxGb250U2l6ZUVx
dWl2YWxlbnQ6OkhUTUxGb250U2l6ZUVxdWl2YWxlbnQoKQogUGFzc1JlZlB0cjxDU1NWYWx1ZT4g
SFRNTEZvbnRTaXplRXF1aXZhbGVudDo6YXR0cmlidXRlVmFsdWVBc0NTU1ZhbHVlKEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGVsZW1lbnQpOwotICAgIGlmICghZWxlbWVu
dC0+aGFzQXR0cmlidXRlKG1fYXR0ck5hbWUpKQorICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUobV9hdHRyTmFtZSk7CisgICAgaWYgKHZhbHVlLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICBDU1NWYWx1ZUlEIHNpemU7Ci0gICAgaWYg
KCFIVE1MRm9udEVsZW1lbnQ6OmNzc1ZhbHVlRnJvbUZvbnRTaXplTnVtYmVyKGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShtX2F0dHJOYW1lKSwgc2l6ZSkpCisgICAgaWYgKCFIVE1MRm9udEVsZW1lbnQ6
OmNzc1ZhbHVlRnJvbUZvbnRTaXplTnVtYmVyKHZhbHVlLCBzaXplKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHNpemUp
OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAK
aW5kZXggZDM0MjZlN2RiNjhkYjY0MDczZjcwN2FlMTVlMTQ3MjFhZjgzN2IzMy4uYTAzZWY4ODc4
N2IwYWQ4NDY1OTU4NjYxNWQ5MWRkYWI3MmIwNmNiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NwbGl0RWxlbWVudENvbW1hbmQuY3BwCkBAIC05MSw4ICs5MSw5IEBAIHZvaWQgU3Bs
aXRFbGVtZW50Q29tbWFuZDo6ZG9VbmFwcGx5KCkKICAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0
QmVmb3JlKGNoaWxkcmVuW2ldLmdldCgpLCByZWZDaGlsZC5nZXQoKSwgSUdOT1JFX0VYQ0VQVElP
Tik7CiAKICAgICAvLyBSZWNvdmVyIHRoZSBpZCBhdHRyaWJ1dGUgb2YgdGhlIG9yaWdpbmFsIGVs
ZW1lbnQuCi0gICAgaWYgKG1fZWxlbWVudDEtPmhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0
cikpCi0gICAgICAgIG1fZWxlbWVudDItPnNldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwg
bV9lbGVtZW50MS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSk7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBpZCA9IG1fZWxlbWVudDEtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
OjppZEF0dHIpOworICAgIGlmICghaWQuaXNOdWxsKCkpCisgICAgICAgIG1fZWxlbWVudDItPnNl
dEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgaWQpOwogCiAgICAgbV9lbGVtZW50MS0+cmVt
b3ZlKElHTk9SRV9FWENFUFRJT04pOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JF
bGVtZW50LmNwcAppbmRleCAzMzhlNTM3NmM4OWM2ODJmZjI4ZTIxOWVkODRiMWVlZjY4NTNkMjY5
Li5mMTYwYTJiODFkMTQ2NDY5ZDFjZWFjZjJiZmE4OWQ5YzUyYjE5ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcApAQCAtMjg2LDcgKzI4Niw3IEBAIGJvb2wg
SFRNTEFuY2hvckVsZW1lbnQ6OmNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QKIGJvb2wgSFRNTEFu
Y2hvckVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gU2hvdWxkIGJlIGRyYWdn
YWJsZSBpZiB3ZSBoYXZlIGFuIGhyZWYgYXR0cmlidXRlLgotICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0cik7CisgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0cik7CiAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAidHJ1ZSIpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUsICJmYWxzZSIpKQpAQCAtNTEyLDEwICs1
MTIsMTAgQEAgYm9vbCBIVE1MQW5jaG9yRWxlbWVudDo6aXNMaXZlTGluaygpIGNvbnN0CiAKIHZv
aWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNlbmRQaW5ncyhjb25zdCBVUkwmIGRlc3RpbmF0aW9uVVJM
KQogewotICAgIGlmICghaGFzQXR0cmlidXRlKHBpbmdBdHRyKSB8fCAhZG9jdW1lbnQoKS5zZXR0
aW5ncygpIHx8ICFkb2N1bWVudCgpLnNldHRpbmdzKCktPmh5cGVybGlua0F1ZGl0aW5nRW5hYmxl
ZCgpKQorICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShwaW5nQXR0cikgfHwgIWRvY3VtZW50KCku
c2V0dGluZ3MoKSB8fCAhZG9jdW1lbnQoKS5zZXR0aW5ncygpLT5oeXBlcmxpbmtBdWRpdGluZ0Vu
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3BhY2VTcGxpdFN0cmluZyBwaW5nVVJM
cyhnZXRBdHRyaWJ1dGUocGluZ0F0dHIpLCBmYWxzZSk7CisgICAgU3BhY2VTcGxpdFN0cmluZyBw
aW5nVVJMcyhmYXN0R2V0QXR0cmlidXRlKHBpbmdBdHRyKSwgZmFsc2UpOwogICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBwaW5nVVJMcy5zaXplKCk7IGkrKykKICAgICAgICAgUGluZ0xvYWRl
cjo6c2VuZFBpbmcoKmRvY3VtZW50KCkuZnJhbWUoKSwgZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChw
aW5nVVJMc1tpXSksIGRlc3RpbmF0aW9uVVJMKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
QXBwbGV0RWxlbWVudC5jcHAKaW5kZXggYzY1NGI1MzQyMDQ1YWE0YmUyNWU5ZDdmOTFiZjg4YTY2
OTQwYjVkMy4uZWU0OGM0MDcwYjUwMDU0NTQ4NzQzZDIwNWY3MDM5OTQ2ZjU5OTU5YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKQEAgLTEyNSwxMSArMTI1LDEx
IEBAIHZvaWQgSFRNTEFwcGxldEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9w
dGlvbiBwbHVnaW5DcmVhdGlvbk9wdGlvbikKICAgICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVl
czsKIAogICAgIHBhcmFtTmFtZXMuYXBwZW5kKCJjb2RlIik7Ci0gICAgcGFyYW1WYWx1ZXMuYXBw
ZW5kKGdldEF0dHJpYnV0ZShjb2RlQXR0cikuc3RyaW5nKCkpOworICAgIHBhcmFtVmFsdWVzLmFw
cGVuZChmYXN0R2V0QXR0cmlidXRlKGNvZGVBdHRyKS5zdHJpbmcoKSk7CiAKLSAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGNvZGVCYXNlID0gZ2V0QXR0cmlidXRlKGNvZGViYXNlQXR0cik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGZhc3RHZXRBdHRyaWJ1dGUoY29kZWJhc2VB
dHRyKTsKICAgICBpZiAoIWNvZGVCYXNlLmlzTnVsbCgpKSB7Ci0gICAgICAgIHBhcmFtTmFtZXMu
YXBwZW5kKCJjb2RlQmFzZSIpOworICAgICAgICBwYXJhbU5hbWVzLmFwcGVuZChBU0NJSUxpdGVy
YWwoImNvZGVCYXNlIikpOwogICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoY29kZUJhc2Uuc3Ry
aW5nKCkpOwogICAgIH0KIApAQCAtMTM5LDE4ICsxMzksMTggQEAgdm9pZCBIVE1MQXBwbGV0RWxl
bWVudDo6dXBkYXRlV2lkZ2V0KFBsdWdpbkNyZWF0aW9uT3B0aW9uIHBsdWdpbkNyZWF0aW9uT3B0
aW9uKQogICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQobmFtZS5zdHJpbmcoKSk7CiAgICAgfQog
Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZ2V0QXR0cmlidXRlKGFyY2hpdmVB
dHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyY2hpdmUgPSBmYXN0R2V0QXR0cmlidXRl
KGFyY2hpdmVBdHRyKTsKICAgICBpZiAoIWFyY2hpdmUuaXNOdWxsKCkpIHsKLSAgICAgICAgcGFy
YW1OYW1lcy5hcHBlbmQoImFyY2hpdmUiKTsKKyAgICAgICAgcGFyYW1OYW1lcy5hcHBlbmQoQVND
SUlMaXRlcmFsKCJhcmNoaXZlIikpOwogICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQoYXJjaGl2
ZS5zdHJpbmcoKSk7CiAgICAgfQogCi0gICAgcGFyYW1OYW1lcy5hcHBlbmQoImJhc2VVUkwiKTsK
KyAgICBwYXJhbU5hbWVzLmFwcGVuZChBU0NJSUxpdGVyYWwoImJhc2VVUkwiKSk7CiAgICAgcGFy
YW1WYWx1ZXMuYXBwZW5kKGRvY3VtZW50KCkuYmFzZVVSTCgpLnN0cmluZygpKTsKIAotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgbWF5U2NyaXB0ID0gZ2V0QXR0cmlidXRlKG1heXNjcmlwdEF0dHIp
OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWF5U2NyaXB0ID0gZmFzdEdldEF0dHJpYnV0ZSht
YXlzY3JpcHRBdHRyKTsKICAgICBpZiAoIW1heVNjcmlwdC5pc051bGwoKSkgewotICAgICAgICBw
YXJhbU5hbWVzLmFwcGVuZCgibWF5U2NyaXB0Iik7CisgICAgICAgIHBhcmFtTmFtZXMuYXBwZW5k
KEFTQ0lJTGl0ZXJhbCgibWF5U2NyaXB0IikpOwogICAgICAgICBwYXJhbVZhbHVlcy5hcHBlbmQo
bWF5U2NyaXB0LnN0cmluZygpKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlF
bGVtZW50LmNwcAppbmRleCBhODdkOTc3NzhkNWEzM2Q4OWZiNDg3YzU4N2M0N2U2MjAzMzA1YTI3
Li5hNzQyZjM4NGZhM2M5ODA2OWJhNThkMDMwZTI2MzJjZWQ5ZTlkM2VjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBIVE1M
Qm9keUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxVUkw+
JiB1cmxzKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNv
bXBsZXRlVVJMKGdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKKyAgICBhZGRTdWJyZXNv
dXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoYmFj
a2dyb3VuZEF0dHIpKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKaW5kZXggOTQ3ZTcxZTkwNzhmOGIyNTk4ZDRl
OWM0MmFjYzY4OGRiMmEzMWJmYi4uOTJlMjZhN2E2ZmYwMWQ2NWRmOThhNDE2Y2Y0OWY4OTRmMTIx
MTgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKQEAgLTE5
NCw5ICsxOTQsOSBAQCBib29sIEhUTUxCdXR0b25FbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShjb25z
dCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKICAgICByZXR1cm4gYXR0cmlidXRlLm5hbWUo
KSA9PSBmb3JtYWN0aW9uQXR0ciB8fCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojppc1VSTEF0dHJp
YnV0ZShhdHRyaWJ1dGUpOwogfQogCi1TdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnQ6OnZhbHVlKCkg
Y29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTEJ1dHRvbkVsZW1lbnQ6OnZhbHVlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVlQXR0cik7CisgICAgcmV0dXJuIGZh
c3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKIH0KIAogYm9vbCBIVE1MQnV0dG9uRWxlbWVudDo6
cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVs
ZW1lbnQuaAppbmRleCBkZjZjYmNjMmUyY2FjMTU1NWQyODg0MTljYzAwNzNmNGUzMmUxNzAwLi5l
N2U5ZTFkN2Y2MzdjZmNlMWViZDA3NDQ1M2M1NmE2NTI1NWM2YmY3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCkBAIC0zNCw3ICszNCw3IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0VHlwZShjb25zdCBBdG9taWNTdHJpbmcmKTsKICAgICAKLSAgICBTdHJpbmcgdmFs
dWUoKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgd2lsbFJlc3BvbmRUb01vdXNlQ2xpY2tFdmVudHMoKSBvdmVycmlkZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwCmluZGV4IDI4Yzg0NzQzZTcxZDBkNzc0
ZTU5ZmU5YzQwNTRjYzE3ODE1ZTUzZTMuLjBjZTJiMDZmZmU4NTg2MWYzNmVkNTEwNTIwMmRjZWRh
ZTc0ZDczZTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKQEAgLTEwNywxMCAr
MTA3LDkgQEAgaW50IEhUTUxEb2N1bWVudDo6aGVpZ2h0KCkKIAogU3RyaW5nIEhUTUxEb2N1bWVu
dDo6ZGlyKCkKIHsKLSAgICBIVE1MRWxlbWVudCogYiA9IGJvZHkoKTsKLSAgICBpZiAoIWIpCi0g
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICByZXR1cm4gYi0+Z2V0QXR0cmlidXRlKGRpckF0
dHIpOworICAgIGlmIChhdXRvKiBib2R5ID0gdGhpcy0+Ym9keSgpKQorICAgICAgICByZXR1cm4g
Ym9keS0+ZmFzdEdldEF0dHJpYnV0ZShkaXJBdHRyKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7CiB9
CiAKIHZvaWQgSFRNTERvY3VtZW50OjpzZXREaXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IDg4MWE2NDJjNGU4NzNiMGY1
MzAyYzlkZmQ4MTI5YjRlNmM5NWQ2OGEuLmNhMjU2NGEyMGQyYTJiNjExMzE4ODdiMjhjNGEyZmFl
MTRlZGJlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAt
MjE0LDE0ICsyMTQsMTQgQEAgYm9vbCBIVE1MRW1iZWRFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShj
b25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkgY29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBI
VE1MRW1iZWRFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShzcmNBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRy
KTsKIH0KIAogdm9pZCBIVE1MRW1iZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVS
THMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJscykgY29uc3QKIHsKICAgICBIVE1MUGx1Z0luSW1hZ2VF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJy
ZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNB
dHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVV
UkwoZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MRmllbGRTZXRFbGVtZW50LmNwcAppbmRleCA2ODFlNTUzMDQzMjZjYTY4Nzk2MGY0
ZWEwYTNjMTAzYzQxNTk3ZmRhLi5kYjUwYjI3YWYzYzBmMzlmMmM4NDY2MjNlNDVhZjJhNDEyYTk3
ZmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHAKQEAg
LTQ2LDcgKzQ2LDcgQEAgaW5saW5lIEhUTUxGaWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG8KIAogSFRNTEZpZWxkU2V0RWxl
bWVudDo6fkhUTUxGaWVsZFNldEVsZW1lbnQoKQogewotICAgIGlmIChoYXNBdHRyaWJ1dGUoZGlz
YWJsZWRBdHRyKSkKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKQogICAg
ICAgICBkb2N1bWVudCgpLnJlbW92ZURpc2FibGVkRmllbGRzZXRFbGVtZW50KCk7CiB9CiAKQEAg
LTY1LDcgKzY1LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xFbGVtZW50c0FuY2Vz
dG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKICAgICB3aGlsZSAoY29udHJv
bCkgewogICAgICAgICBjb250cm9sLT5zZXRBbmNlc3RvckRpc2FibGVkKGlzRGlzYWJsZWQpOwog
ICAgICAgICAvLyBEb24ndCBjYWxsIHNldEFuY2VzdG9yRGlzYWJsZWQoZmFsc2UpIG9uIGZvcm0g
Y29udG9ybHMgaW5zaWRlIGRpc2FibGVkIGZpZWxkc2V0cy4KLSAgICAgICAgaWYgKGlzSFRNTEZp
ZWxkU2V0RWxlbWVudChjb250cm9sKSAmJiBjb250cm9sLT5oYXNBdHRyaWJ1dGUoZGlzYWJsZWRB
dHRyKSkKKyAgICAgICAgaWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChjb250cm9sKSAmJiBjb250
cm9sLT5mYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cikpCiAgICAgICAgICAgICBjb250cm9s
ID0gVHJhdmVyc2FsPEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ+OjpuZXh0U2tpcHBpbmdDaGlsZHJl
bihjb250cm9sLCAmc3RhcnROb2RlKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgY29udHJv
bCA9IFRyYXZlcnNhbDxIVE1MRm9ybUNvbnRyb2xFbGVtZW50Pjo6bmV4dChjb250cm9sLCAmc3Rh
cnROb2RlKTsKQEAgLTc0LDcgKzc0LDcgQEAgc3RhdGljIHZvaWQgdXBkYXRlRnJvbUNvbnRyb2xF
bGVtZW50c0FuY2VzdG9yRGlzYWJsZWRTdGF0ZVVuZGVyKEhUTUxFbGVtZW50JiBzdGEKIAogdm9p
ZCBIVE1MRmllbGRTZXRFbGVtZW50OjpkaXNhYmxlZEF0dHJpYnV0ZUNoYW5nZWQoKQogewotICAg
IGlmIChoYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0
ZShkaXNhYmxlZEF0dHIpKQogICAgICAgICBkb2N1bWVudCgpLmFkZERpc2FibGVkRmllbGRzZXRF
bGVtZW50KCk7CiAgICAgZWxzZQogICAgICAgICBkb2N1bWVudCgpLnJlbW92ZURpc2FibGVkRmll
bGRzZXRFbGVtZW50KCk7CkBAIC05MCw3ICs5MCw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0RWxlbWVu
dDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogICAgIGlmIChkaXNhYmxlZEJ5QW5jZXN0b3JGaWVs
ZHNldCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBib29sIHRoaXNGaWVsZHNldElzRGlzYWJs
ZWQgPSBoYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKTsKKyAgICBib29sIHRoaXNGaWVsZHNldElz
RGlzYWJsZWQgPSBmYXN0SGFzQXR0cmlidXRlKGRpc2FibGVkQXR0cik7CiAgICAgYm9vbCBoYXNT
ZWVuRmlyc3RMZWdlbmRFbGVtZW50ID0gZmFsc2U7CiAgICAgZm9yIChIVE1MRWxlbWVudCogY29u
dHJvbCA9IFRyYXZlcnNhbDxIVE1MRWxlbWVudD46OmZpcnN0Q2hpbGQodGhpcyk7IGNvbnRyb2w7
IGNvbnRyb2wgPSBUcmF2ZXJzYWw8SFRNTEVsZW1lbnQ+OjpuZXh0U2libGluZyhjb250cm9sKSkg
ewogICAgICAgICBpZiAoIWhhc1NlZW5GaXJzdExlZ2VuZEVsZW1lbnQgJiYgaXNIVE1MTGVnZW5k
RWxlbWVudChjb250cm9sKSkgewpAQCAtMTA1LDcgKzEwNSw3IEBAIHZvaWQgSFRNTEZpZWxkU2V0
RWxlbWVudDo6ZGlzYWJsZWRTdGF0ZUNoYW5nZWQoKQogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50
OjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkKIHsKICAgICBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKLSAgICBpZiAoIWhh
c0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKQorICAgIGlmICghZmFzdEhhc0F0dHJpYnV0ZShkaXNh
YmxlZEF0dHIpKQogICAgICAgICByZXR1cm47CiAKICAgICBIVE1MTGVnZW5kRWxlbWVudCogbGVn
ZW5kID0gVHJhdmVyc2FsPEhUTUxMZWdlbmRFbGVtZW50Pjo6Zmlyc3RDaGlsZCh0aGlzKTsKQEAg
LTEyMSw3ICsxMjEsNyBAQCB2b2lkIEhUTUxGaWVsZFNldEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZChjb25zdCBDaGlsZENoYW5nZSYgY2hhbmdlKQogdm9pZCBIVE1MRmllbGRTZXRFbGVtZW50Ojpk
aWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCogb2xkRG9jdW1lbnQpCiB7CiAgICAgSFRNTEZv
cm1Db250cm9sRWxlbWVudDo6ZGlkTW92ZVRvTmV3RG9jdW1lbnQob2xkRG9jdW1lbnQpOwotICAg
IGlmIChoYXNBdHRyaWJ1dGUoZGlzYWJsZWRBdHRyKSkgeworICAgIGlmIChmYXN0SGFzQXR0cmli
dXRlKGRpc2FibGVkQXR0cikpIHsKICAgICAgICAgaWYgKG9sZERvY3VtZW50KQogICAgICAgICAg
ICAgb2xkRG9jdW1lbnQtPnJlbW92ZURpc2FibGVkRmllbGRzZXRFbGVtZW50KCk7CiAgICAgICAg
IGRvY3VtZW50KCkuYWRkRGlzYWJsZWRGaWVsZHNldEVsZW1lbnQoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IGYxOTE1ZWFjZjUwNDFl
ZWI1ZGZhOTdjMDk5YjQ4NWYzNmY4NDk1OTEuLmEzMWY5MjZlN2E3ZmNkZTVlZDA5OTZmMjJlYjVi
YTUzNTA4M2Q4MTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250
cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50LmNwcApAQCAtMTAzLDcgKzEwMyw3IEBAIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVu
dDo6Y29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0QW5jZXN0b3IoKSBjb25zdAogewogICAgIEVs
ZW1lbnQqIHByZXZpb3VzQW5jZXN0b3IgPSBudWxscHRyOwogICAgIGZvciAoRWxlbWVudCogYW5j
ZXN0b3IgPSBwYXJlbnRFbGVtZW50KCk7IGFuY2VzdG9yOyBhbmNlc3RvciA9IGFuY2VzdG9yLT5w
YXJlbnRFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzSFRNTEZpZWxkU2V0RWxlbWVudChhbmNl
c3RvcikgJiYgYW5jZXN0b3ItPmhhc0F0dHJpYnV0ZShkaXNhYmxlZEF0dHIpKSB7CisgICAgICAg
IGlmIChpc0hUTUxGaWVsZFNldEVsZW1lbnQoYW5jZXN0b3IpICYmIGFuY2VzdG9yLT5mYXN0SGFz
QXR0cmlidXRlKGRpc2FibGVkQXR0cikpIHsKICAgICAgICAgICAgIEhUTUxGaWVsZFNldEVsZW1l
bnQmIGZpZWxkU2V0QW5jZXN0b3IgPSB0b0hUTUxGaWVsZFNldEVsZW1lbnQoKmFuY2VzdG9yKTsK
ICAgICAgICAgICAgIGJvb2wgaXNJbkZpcnN0TGVnZW5kID0gcHJldmlvdXNBbmNlc3RvciAmJiBp
c0hUTUxMZWdlbmRFbGVtZW50KHByZXZpb3VzQW5jZXN0b3IpICYmIHByZXZpb3VzQW5jZXN0b3Ig
PT0gZmllbGRTZXRBbmNlc3Rvci5sZWdlbmQoKTsKICAgICAgICAgICAgIHJldHVybiAhaXNJbkZp
cnN0TGVnZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDIx
YTRjZDliNzk4MzEzZDEwYzhlYTgzN2RiODRhMDNkNWM4YTA3OWYuLmM4OGVhYzk1MWRlMDI5M2E1
NzE5NzdhYWNhYjIwZjcyN2Y5ZGMzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAKQEAgLTY2MCw3ICs2NjAsNyBAQCBib29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxp
ZGF0ZSgpIGNvbnN0CiAvLyAoRGFyaW4gQWRsZXIpIHJlbW92ZWQgdGhpcywgc29tZW9uZSBhZGRl
ZCBpdCBiYWNrLCBzbyBJIGFtIGxlYXZpbmcgaXQgaW4gZm9yIG5vdy4KIFN0cmluZyBIVE1MRm9y
bUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY3Rp
b25BdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsKIH0KIAog
dm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEFjdGlvbihjb25zdCBTdHJpbmcgJnZhbHVlKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKaW5kZXggOTdiYWJmYjEwMWJhYWFi
YjUzZjhhYWMyODgyNGU3MTBmOGMyNTBhZi4uNTdjZjgyMDExMDgwNjY2Y2MzMzM3Y2ZhNzg3YjVi
ODk4MzQ5ZjA1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCkBA
IC02MSw3ICs2MSw3IEBAIFJlbmRlclB0cjxSZW5kZXJFbGVtZW50PiBIVE1MRnJhbWVFbGVtZW50
OjpjcmVhdGVFbGVtZW50UmVuZGVyZXIoUGFzc1JlZjxSZW5kZXJTCiAKIGJvb2wgSFRNTEZyYW1l
RWxlbWVudDo6bm9SZXNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUobm9y
ZXNpemVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShub3Jlc2l6ZUF0dHIpOwog
fQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRlcmVycygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCmluZGV4IDViMTUxZDIzNjlh
ZmI3ODQ3NWJkZTk0MmQ3ZTk0ZmU2N2MyNzZmN2MuLjA4NTk4ZTMyNTVmZDMxMTIzMjMxNzViOGRj
MmI0M2I4ZjE2YWVmMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1l
RWxlbWVudEJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVu
dEJhc2UuY3BwCkBAIC0xNjksNyArMTY5LDcgQEAgVVJMIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjps
b2NhdGlvbigpIGNvbnN0CiB7CiAgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoc3JjZG9jQXR0cikp
CiAgICAgICAgIHJldHVybiBVUkwoUGFyc2VkVVJMU3RyaW5nLCAiYWJvdXQ6c3JjZG9jIik7Ci0g
ICAgcmV0dXJuIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIpKTsK
KyAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0
dHIpKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TG9jYXRpb24oY29uc3Qg
U3RyaW5nJiBzdHIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIUkVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSFJFbGVtZW50LmNwcAppbmRleCBiYzky
ZTk2YjRkZWZkNzAyOWUxZGJjMWI3MDY2ZTI5ZWJhMTc5MTFhLi4xYjdiZTdjYTU5NzJmMWRmZjIy
N2RiNzIwZDVkOTQ0NDU4YWI2MjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxIUkVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEhSRWxlbWVudC5j
cHAKQEAgLTgyLDcgKzgyLDcgQEAgdm9pZCBIVE1MSFJFbGVtZW50Ojpjb2xsZWN0U3R5bGVGb3JQ
cmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmEKICAgICAgICAgYWRk
SFRNTENvbG9yVG9TdHlsZShzdHlsZSwgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwgdmFsdWUpOwog
ICAgICAgICBhZGRIVE1MQ29sb3JUb1N0eWxlKHN0eWxlLCBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvciwgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBub3NoYWRlQXR0cikgewotICAg
ICAgICBpZiAoIWhhc0F0dHJpYnV0ZShjb2xvckF0dHIpKSB7CisgICAgICAgIGlmICghZmFzdEhh
c0F0dHJpYnV0ZShjb2xvckF0dHIpKSB7CiAgICAgICAgICAgICBhZGRQcm9wZXJ0eVRvUHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoc3R5bGUsIENTU1Byb3BlcnR5Qm9yZGVyU3R5bGUsIENTU1Zh
bHVlU29saWQpOwogCiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGRhcmtH
cmF5VmFsdWUgPSBjc3NWYWx1ZVBvb2woKS5jcmVhdGVDb2xvclZhbHVlKENvbG9yOjpkYXJrR3Jh
eSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKaW5kZXggMTMxNjcyZTNm
ZjE3ODU0OWVjOTUzMzMxODc0M2EwNmQyNjczYzZjOS4uOWU0MWQzMWMzYjRjNjUwMWZmYzA1Y2Y2
MjcwNmYwYWU2ODdiNWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSHRt
bEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNw
cApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNl
cigpCiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29u
c3QgQXRvbWljU3RyaW5nJiBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWFuaWZlc3QgPSBmYXN0R2V0QXR0cmlidXRlKG1hbmlm
ZXN0QXR0cik7CiAgICAgaWYgKG1hbmlmZXN0LmlzRW1wdHkoKSkKICAgICAgICAgZG9jdW1lbnRM
b2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1hbmlmZXN0
KCk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5k
ZXggYzBmOWVjY2I0NzAxMjYzOGRlMzQxNzY0OGUwZDYyMzBjYjI4ZWE2NS4uYzAxMWZmNzkzYzc4
ZWU1YjQ5NzQ4ZDUzNGQ5YjZiYzBkNTkxNTk4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuY3BwCkBAIC0xOTcsMTYgKzE5NywxNiBAQCB2b2lkIEhUTUxJbWFnZUVsZW1l
bnQ6OnBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cgogICAgIH0KIH0KIAotU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdFRleHQoKSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MSW1hZ2VFbGVtZW50OjphbHRUZXh0KCkgY29uc3QK
IHsKICAgICAvLyBsZXRzIGZpZ3VyZSBvdXQgdGhlIGFsdCB0ZXh0Li4gbWFnaWMgc3R1ZmYKICAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8xOTk4L1JFQy1odG1sNDAtMTk5ODA0MjQvYXBwZW5k
aXgvbm90ZXMuaHRtbCNhbHRnZW4KICAgICAvLyBhbHNvIGhlYXZpbHkgZGlzY3Vzc2VkIGJ5IEhp
eGllIG9uIGJ1Z3ppbGxhCi0gICAgU3RyaW5nIGFsdCA9IGdldEF0dHJpYnV0ZShhbHRBdHRyKTsK
KyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFsdCA9IGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7
CisgICAgaWYgKCFhbHQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBhbHQ7CiAgICAgLy8gZmFs
bCBiYWNrIHRvIHRpdGxlIGF0dHJpYnV0ZQotICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAg
IGFsdCA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwotICAgIHJldHVybiBhbHQ7CisgICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKIH0KIAogUmVuZGVyUHRyPFJlbmRlckVs
ZW1lbnQ+IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZUVsZW1lbnRSZW5kZXJlcihQYXNzUmVmPFJl
bmRlclN0eWxlPiBzdHlsZSkKQEAgLTM5MywxMyArMzkzLDEzIEBAIGJvb2wgSFRNTEltYWdlRWxl
bWVudDo6bWF0Y2hlc0xvd2VyY2FzZWRVc2VtYXAoY29uc3QgQXRvbWljU3RyaW5nSW1wbCYgbmFt
ZSkgY29uCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKGFsdEF0dHIpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmRyYWdn
YWJsZSgpIGNvbnN0CiB7CiAgICAgLy8gSW1hZ2UgZWxlbWVudHMgYXJlIGRyYWdnYWJsZSBieSBk
ZWZhdWx0LgotICAgIHJldHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGRyYWdn
YWJsZUF0dHIpLCAiZmFsc2UiKTsKKyAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKGZhc3RH
ZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0ciksICJmYWxzZSIpOwogfQogCiB2b2lkIEhUTUxJbWFn
ZUVsZW1lbnQ6OnNldEhlaWdodChpbnQgdmFsdWUpCkBAIC00MDksNyArNDA5LDcgQEAgdm9pZCBI
VE1MSW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQoaW50IHZhbHVlKQogCiBVUkwgSFRNTEltYWdlRWxl
bWVudDo6c3JjKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS5jb21wbGV0ZVVSTChn
ZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgIHJldHVybiBkb2N1bWVudCgpLmNvbXBsZXRlVVJM
KGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6
OnNldFNyYyhjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtNDU1LDcgKzQ1NSw3IEBAIHZvaWQgSFRN
TEltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVS
TD4mIHVybHMpIGNvbnN0CiAKICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzcmMoKSk7CiAg
ICAgLy8gRklYTUU6IFdoYXQgYWJvdXQgd2hlbiB0aGUgdXNlbWFwIGF0dHJpYnV0ZSBiZWdpbnMg
d2l0aCAiIyI/Ci0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0
ZVVSTChnZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1
cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikp
KTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1
bWVudCogb2xkRG9jdW1lbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bWFnZUVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCmlu
ZGV4IDMyNDk0OGIxYjE3YmNlY2M4NmVlNjg3MjUyNjFhN2YwMzhiM2Q2NzcuLmZkNDQwMTg5OGQz
NzNkZjZiMTBlZmVmYzQ0YjMzOTk3ZWVhZWQ1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElt
YWdlRWxlbWVudC5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNTZXJ2
ZXJNYXAoKSBjb25zdDsKIAotICAgIFN0cmluZyBhbHRUZXh0KCkgY29uc3Q7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbHRUZXh0KCkgY29uc3Q7CiAKICAgICBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29tcG9zaXRlT3BlcmF0b3I7IH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMTVkMDM0MDIy
YjIyYjZmNWQyZmJjOGQ5ZTQ1ZGY4ZjAyNjZhMmIwNi4uYThlYmFhOWQzNmQ2MmE1NmYwNzkyYTM4
ZWVhYzVkZDNiOTM4MTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5w
dXRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCkBAIC03MTgsNyArNzE4LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpmaW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKQogICAgIG1fcGFyc2luZ0luUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CiAgICAgaWYg
KCFtX3N0YXRlUmVzdG9yZWQpIHsKLSAgICAgICAgYm9vbCBjaGVja2VkID0gaGFzQXR0cmlidXRl
KGNoZWNrZWRBdHRyKTsKKyAgICAgICAgYm9vbCBjaGVja2VkID0gZmFzdEhhc0F0dHJpYnV0ZShj
aGVja2VkQXR0cik7CiAgICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgICAgc2V0Q2hlY2tl
ZChjaGVja2VkKTsKICAgICAgICAgbV9yZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwpA
QCAtNzY3LDcgKzc2Nyw3IEBAIFN0cmluZyBIVE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KCkgY29u
c3QKICAgICBpZiAoYWx0LmlzTnVsbCgpKQogICAgICAgICBhbHQgPSBnZXRBdHRyaWJ1dGUodGl0
bGVBdHRyKTsKICAgICBpZiAoYWx0LmlzTnVsbCgpKQotICAgICAgICBhbHQgPSBnZXRBdHRyaWJ1
dGUodmFsdWVBdHRyKTsKKyAgICAgICAgYWx0ID0gZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIp
OwogICAgIGlmIChhbHQuaXNFbXB0eSgpKQogICAgICAgICBhbHQgPSBpbnB1dEVsZW1lbnRBbHRU
ZXh0KCk7CiAgICAgcmV0dXJuIGFsdDsKQEAgLTgwMSw3ICs4MDEsNyBAQCB2b2lkIEhUTUxJbnB1
dEVsZW1lbnQ6OnJlc2V0KCkKICAgICAgICAgc2V0VmFsdWUoU3RyaW5nKCkpOwogCiAgICAgc2V0
QXV0b2ZpbGxlZChmYWxzZSk7Ci0gICAgc2V0Q2hlY2tlZChoYXNBdHRyaWJ1dGUoY2hlY2tlZEF0
dHIpKTsKKyAgICBzZXRDaGVja2VkKGZhc3RIYXNBdHRyaWJ1dGUoY2hlY2tlZEF0dHIpKTsKICAg
ICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCmluZGV4IDFjYmVkMDFlNmM2ZmU5YjQ4NzUwZjgxZGU1
MzVjNTgwYmMwNDYyNjYuLjQxMTg5ODUwN2FkZWEyZGM5NTIzOGIyNmVjNDJkYmE3N2M4ZWIzMTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcApAQCAtNjIsNyArNjIs
NyBAQCBib29sIEhUTUxMYWJlbEVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKIAogTGFiZWxh
YmxlRWxlbWVudCogSFRNTExhYmVsRWxlbWVudDo6Y29udHJvbCgpCiB7Ci0gICAgY29uc3QgQXRv
bWljU3RyaW5nJiBjb250cm9sSWQgPSBnZXRBdHRyaWJ1dGUoZm9yQXR0cik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBjb250cm9sSWQgPSBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpOwogICAg
IGlmIChjb250cm9sSWQuaXNOdWxsKCkpIHsKICAgICAgICAgLy8gU2VhcmNoIHRoZSBjaGlsZHJl
biBhbmQgZGVzY2VuZGFudHMgb2YgdGhlIGxhYmVsIGVsZW1lbnQgZm9yIGEgZm9ybSBlbGVtZW50
LgogICAgICAgICAvLyBwZXIgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9PdmVydmlldy5o
dG1sI3RoZS1sYWJlbC1lbGVtZW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxMaW5rRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5j
cHAKaW5kZXggOGM5ZWJhZTI2MTU4OWZkOGNjZTgwNTI4ZTRhZjhjNDM4ODZkMGRkZS4uZGQ2Zjk4
Nzg0NTJmZjQwY2JhMDUxN2I5YWZkMjFkY2NhN2QwZjk2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTExpbmtFbGVtZW50LmNwcApAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgSFRNTExpbmtFbGVt
ZW50Ojpwcm9jZXNzKCkKICAgICBpZiAobV9kaXNhYmxlZFN0YXRlICE9IERpc2FibGVkICYmICht
X3JlbEF0dHJpYnV0ZS5tX2lzU3R5bGVTaGVldCB8fCAoYWNjZXB0SWZUeXBlQ29udGFpbnNUZXh0
Q1NTICYmIHR5cGUuY29udGFpbnMoInRleHQvY3NzIikpKQogICAgICAgICAmJiBkb2N1bWVudCgp
LmZyYW1lKCkgJiYgdXJsLmlzVmFsaWQoKSkgewogICAgICAgICAKLSAgICAgICAgU3RyaW5nIGNo
YXJzZXQgPSBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOworICAgICAgICBBdG9taWNTdHJpbmcg
Y2hhcnNldCA9IGZhc3RHZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpOwogICAgICAgICBpZiAoY2hh
cnNldC5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAgICAgY2hhcnNl
dCA9IGRvY3VtZW50KCkuY2hhcnNldCgpOwogICAgICAgICAKQEAgLTQwMSw5ICs0MDEsOSBAQCBV
UkwgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKICAgICByZXR1cm4gZG9jdW1lbnQoKS5j
b21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKIH0KIAotU3RyaW5nIEhUTUxMaW5r
RWxlbWVudDo6cmVsKCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTExpbmtFbGVtZW50
OjpyZWwoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmVsQXR0cik7CisgICAg
cmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cik7CiB9CiAKIFN0cmluZyBIVE1MTGlua0Vs
ZW1lbnQ6OnRhcmdldCgpIGNvbnN0CkBAIC00MTEsNyArNDExLDcgQEAgU3RyaW5nIEhUTUxMaW5r
RWxlbWVudDo6dGFyZ2V0KCkgY29uc3QKICAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0
dHIpOwogfQogCi1TdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0eXBlKCkgY29uc3QKK2NvbnN0IEF0
b21pY1N0cmluZyYgSFRNTExpbmtFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKICAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTExpbmtFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVu
dC5oCmluZGV4IDY1YjMyNDE3NjAxMDgxOTNhMjljOTczYTA5YzlkMWU1YzVkNzNlNTkuLjQ5NzAx
Zjg2ZmU0ZTdlNDNiMTFjMjRiZDc3NTk1YTcwYzRmNmZjODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTGlua0VsZW1lbnQuaApAQCAtNDgsMTEgKzQ4LDExIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5IVE1MTGlua0VsZW1lbnQoKTsKIAogICAgIFVSTCBocmVmKCkgY29uc3Q7Ci0gICAgU3RyaW5n
IHJlbCgpIGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmVsKCkgY29uc3Q7CiAKICAg
ICB2aXJ0dWFsIFN0cmluZyB0YXJnZXQoKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFN0cmluZyB0
eXBlKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29uc3Q7CiAKICAg
ICBJY29uVHlwZSBpY29uVHlwZSgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRh
RWxlbWVudC5jcHAKaW5kZXggMGEyZWU3YjBjZGIzNDRiMDVlZjhiYWM2ZmYxMTMxYzdiNTE5YTlk
Ny4uYWIxMDk2NzkzNWJhZjc0NDg4ZjMzNGM1OTg3YzZlNTIxMTk1MDc1NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcApAQCAtODksMTcgKzg5LDE3IEBAIHZvaWQgSFRN
TE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkKICAgICAgICAgZG9jdW1lbnQoKS5wcm9jZXNzSHR0cEVx
dWl2KGh0dHBFcXVpdlZhbHVlLCBjb250ZW50VmFsdWUpOwogfQogCi1TdHJpbmcgSFRNTE1ldGFF
bGVtZW50Ojpjb250ZW50KCkgY29uc3QKK2NvbnN0IEF0b21pY1N0cmluZyYgSFRNTE1ldGFFbGVt
ZW50Ojpjb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNvbnRlbnRB
dHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShjb250ZW50QXR0cik7CiB9CiAKLVN0
cmluZyBIVE1MTWV0YUVsZW1lbnQ6Omh0dHBFcXVpdigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJp
bmcmIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSho
dHRwX2VxdWl2QXR0cik7CiB9CiAKLVN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Om5hbWUoKSBjb25z
dAorY29uc3QgQXRvbWljU3RyaW5nJiBIVE1MTWV0YUVsZW1lbnQ6Om5hbWUoKSBjb25zdAogewog
ICAgIHJldHVybiBnZXROYW1lQXR0cmlidXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0
YUVsZW1lbnQuaAppbmRleCAxNTljM2FhNzM3MTdlMmFhZjZlZjM1YjIxODJjZjNlODViNzMwZmI0
Li4yNWQxYTc3MWFhZGE1OTkzNzY5YTc1OWU2YTFiNmEwNjc3NWFhM2E4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1ldGFFbGVtZW50LmgKQEAgLTMxLDkgKzMxLDkgQEAgY2xhc3MgSFRNTE1ldGFF
bGVtZW50IGZpbmFsIDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MTWV0YUVsZW1lbnQ+IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQmKTsKIAotICAgIFN0cmluZyBjb250ZW50KCkgY29uc3Q7Ci0gICAgU3RyaW5nIGh0
dHBFcXVpdigpIGNvbnN0OwotICAgIFN0cmluZyBuYW1lKCkgY29uc3Q7CisgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBjb250ZW50KCkgY29uc3Q7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBodHRw
RXF1aXYoKSBjb25zdDsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUoKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBIVE1MTWV0YUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IDhi
Njk4OTAwN2Y4Nzg0MWEwOTg5MTcwNTNkODZmNmI1YTdiYjA5ZmIuLjkxNzdlYWEzMGRhZjljOTU4
YWE3MDRmZTdiYWNmYWZmZmQ4NmQ1YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuY3BwCkBAIC0zNTYsNyArMzU2LDcgQEAgYm9vbCBIVE1MT2JqZWN0RWxlbWVudDo6
aXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUpIGNvbnN0CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTE9iamVjdEVsZW1lbnQ6OmltYWdlU291cmNlVVJMKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGRhdGFBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShkYXRhQXR0cik7CiB9CiAKIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnJlbmRl
ckZhbGxiYWNrQ29udGVudCgpCkBAIC00NzksMTEgKzQ3OSwxMSBAQCB2b2lkIEhUTUxPYmplY3RF
bGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYgdXJs
cykgY29ucwogewogICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyh1cmxzKTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50
KCkuY29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGRhdGFBdHRyKSkpOworICAgIGFkZFN1YnJlc291
cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShkYXRh
QXR0cikpKTsKIAogICAgIC8vIEZJWE1FOiBQYXNzaW5nIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdp
dGggIiMiIHRvIHRoZSBjb21wbGV0ZVVSTCBmdW5jdGlvbiBkb2VzCiAgICAgLy8gbm90IHNlZW0g
bGlrZSBpdCB3b3VsZCB3b3JrLiBUaGUgaW1hZ2UgZWxlbWVudCBoYXMgc2ltaWxhciBidXQgbm90
IGlkZW50aWNhbCBjb2RlLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXNlTWFwID0gZ2V0QXR0
cmlidXRlKHVzZW1hcEF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdXNlTWFwID0gZmFz
dEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsKICAgICBpZiAodXNlTWFwLnN0YXJ0c1dpdGgoJyMn
KSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS5jb21wbGV0ZVVS
TCh1c2VNYXApKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdy
b3VwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCmluZGV4IGZjZWJhZWMyYzBiMzU1ZTVmYzZjMTVlODc4MjE2ZjNjNjA3YmYxMmUuLmMwYWI3
MGQ4ZWU2OTk0N2NlNGE5OTJjODEzM2JhY2U4ZTMxMDMwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcApAQCAtOTQsNyArOTQsNyBAQCB2b2lkIEhUTUxP
cHRHcm91cEVsZW1lbnQ6OnJlY2FsY1NlbGVjdE9wdGlvbnMoKQogCiBTdHJpbmcgSFRNTE9wdEdy
b3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRleHQoKSBjb25zdAogewotICAgIFN0cmluZyBpdGVtVGV4
dCA9IGRvY3VtZW50KCkuZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhnZXRBdHRyaWJ1
dGUobGFiZWxBdHRyKSk7CisgICAgU3RyaW5nIGl0ZW1UZXh0ID0gZG9jdW1lbnQoKS5kaXNwbGF5
U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKGZhc3RHZXRBdHRyaWJ1dGUobGFiZWxBdHRyKSk7CiAg
ICAgCiAgICAgLy8gSW4gV2luSUUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHdoaXRlc3BhY2UgaXMg
aWdub3JlZCBpbiBvcHRpb25zIGFuZCBvcHRncm91cHMuIFdlIG1hdGNoIHRoaXMgYmVoYXZpb3Iu
CiAgICAgaXRlbVRleHQgPSBpdGVtVGV4dC5zdHJpcFdoaXRlU3BhY2UoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwCmluZGV4IGI1NDc1NzkyYzM5N2ZkYzI4
NmU1NjBmYzQxMTAxYzQ4MWJhOGZmNmEuLjk4MzcxMjQ2OWUyZmUzMDk3MWNkOGUyYmViZWViZDAy
NzU2NDQ4NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxl
bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNw
cApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6c2V0VmFsdWUo
ZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIAogZG91YmxlIEhUTUxQcm9ncmVzc0Vs
ZW1lbnQ6Om1heCgpIGNvbnN0CiB7Ci0gICAgZG91YmxlIG1heCA9IHBhcnNlVG9Eb3VibGVGb3JO
dW1iZXJUeXBlKGdldEF0dHJpYnV0ZShtYXhBdHRyKSk7CisgICAgZG91YmxlIG1heCA9IHBhcnNl
VG9Eb3VibGVGb3JOdW1iZXJUeXBlKGZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0cikpOwogICAgIHJl
dHVybiAhc3RkOjppc2Zpbml0ZShtYXgpIHx8IG1heCA8PSAwID8gMSA6IG1heDsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAppbmRleCAzMGUzZDQ2ZGQ2M2Rj
N2YxNGU4MzYzMDYyMTNkNDVlZWU2MTBjYzdmLi41NzhjZDM5NjUwMTMzMjViNWFjYjQwMjc2MDRh
MzZkMDA2ZGMyNmY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cApAQCAtMTE3LDEyICsxMTcsMTIgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVudDo6YWRkU3VicmVz
b3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnMKIAogU3RyaW5n
IEhUTUxTY3JpcHRFbGVtZW50Ojpzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShzcmNBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShzcmNBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVt
ZW50OjpjaGFyc2V0QXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUoY2hhcnNldEF0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRl
KGNoYXJzZXRBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojp0
eXBlQXR0cmlidXRlVmFsdWUoKSBjb25zdApAQCAtMTMyLDE3ICsxMzIsMTcgQEAgU3RyaW5nIEhU
TUxTY3JpcHRFbGVtZW50Ojp0eXBlQXR0cmlidXRlVmFsdWUoKSBjb25zdAogCiBTdHJpbmcgSFRN
TFNjcmlwdEVsZW1lbnQ6Omxhbmd1YWdlQXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUobGFuZ3VhZ2VBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFz
dEdldEF0dHJpYnV0ZShsYW5ndWFnZUF0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTFNj
cmlwdEVsZW1lbnQ6OmZvckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGZvckF0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRl
KGZvckF0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmV2ZW50
QXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoZXZlbnRB
dHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShldmVudEF0dHIpLnN0
cmluZygpOwogfQogCiBib29sIEhUTUxTY3JpcHRFbGVtZW50Ojphc3luY0F0dHJpYnV0ZVZhbHVl
KCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAK
aW5kZXggY2NmYmYyN2JjM2I5NjhlYmIwYjFkNmRhMTNiZWZhNzM0OTk5N2EzNC4uY2NiNzRjYTFj
MmYzMDgyYWU3YTJhM2JhYTE1YzE3YmY4NmZkMThhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIEhUTUxU
YWJsZUNlbGxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8
VVJMPiYgdXJscykgYwogewogICAgIEhUTUxUYWJsZVBhcnRFbGVtZW50OjphZGRTdWJyZXNvdXJj
ZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1
bWVudCgpLmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKKyAgICBh
ZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRy
aWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CiB9CiAKIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBIVE1M
VGFibGVDZWxsRWxlbWVudDo6Y2VsbEFib3ZlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUYWJsZUVsZW1lbnQuY3BwCmluZGV4IGJmMjJkMDA4Nzg0OTVmYjNjZTI4YWIzZTliMzJmY2Fl
ZjhiM2NiOGEuLjU5ZmVlYmU1MzVlNGVkYzgyNmEzYzRmZGE2YzM1MDZmOGZmYjUxYjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcApAQCAtNTYwLDIxICs1NjAsMjEg
QEAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6dEJvZGllcygp
CiAgICAgcmV0dXJuIGVuc3VyZUNhY2hlZEhUTUxDb2xsZWN0aW9uKFRhYmxlVEJvZGllcyk7CiB9
CiAKLVN0cmluZyBIVE1MVGFibGVFbGVtZW50OjpydWxlcygpIGNvbnN0Citjb25zdCBBdG9taWNT
dHJpbmcmIEhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHJ1bGVzQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUocnVsZXNB
dHRyKTsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZUVsZW1lbnQ6OnN1bW1hcnkoKSBjb25zdAorY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MVGFibGVFbGVtZW50OjpzdW1tYXJ5KCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gZ2V0QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0
dHJpYnV0ZShzdW1tYXJ5QXR0cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PFVSTD4mIHVybHMpIGNvbnN0CiB7CiAg
ICAgSFRNTEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAg
IGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkuY29tcGxldGVVUkwoZ2V0QXR0cmli
dXRlKGJhY2tncm91bmRBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3Vt
ZW50KCkuY29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVFbGVtZW50Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaAppbmRleCBjOTc2OGViZTA5
N2RmNThmMzRmNDUzYzkxODg4YWU0YTAzZmNkYmFiLi5lNTk2YWI0MjBhMDYwOTM0NzMwZTVkZjFk
ZmY3NjMyMWZhNmRiZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZUVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuaApA
QCAtNjMsOCArNjMsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4g
cm93cygpOwogICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHRCb2RpZXMoKTsKIAotICAg
IFN0cmluZyBydWxlcygpIGNvbnN0OwotICAgIFN0cmluZyBzdW1tYXJ5KCkgY29uc3Q7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBydWxlcygpIGNvbnN0OworICAgIGNvbnN0IEF0b21pY1N0cmlu
ZyYgc3VtbWFyeSgpIGNvbnN0OwogCiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlv
bmFsQ2VsbFN0eWxlKCk7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0aWVzKiBhZGRpdGlvbmFsR3Jv
dXBTdHlsZShib29sIHJvd3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVTZWN0aW9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmNwcAppbmRleCAzMmI4Mzk2ZjQxMzNmNWZlMjI0NDJlZWU4Y2YwZjQ5NzVi
OGIyNWZkLi40OTEzZjEyMGE5MzAwYzMwZDQ3YzI0NTU1YTFlMGY3MGE0NTc3ODJkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcApAQCAtMTA1
LDQyICsxMDUsNDIgQEAgaW50IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpudW1Sb3dzKCkgY29u
c3QKICAgICByZXR1cm4gcm93czsKIH0KIAotU3RyaW5nIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50
OjphbGlnbigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50OjphbGlnbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlnbkF0dHIp
OworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGFsaWduQXR0cik7CiB9CiAKLXZvaWQgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lk
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRBbGlnbihjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewogICAgIHNldEF0dHJpYnV0ZShhbGlnbkF0dHIsIHZhbHVlKTsKIH0KIAotU3RyaW5n
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaCgpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0
dHJpYnV0ZShjaGFyQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoY2hhckF0dHIp
OwogfQogCi12b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRDaChjb25zdCBTdHJpbmcg
JnZhbHVlKQordm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0Q2goY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSkKIHsKICAgICBzZXRBdHRyaWJ1dGUoY2hhckF0dHIsIHZhbHVlKTsKIH0K
IAotU3RyaW5nIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaE9mZigpIGNvbnN0Citjb25zdCBB
dG9taWNTdHJpbmcmIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaE9mZigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyb2ZmQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0IFN0cmluZyAmdmFsdWUpCit2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpzZXRDaE9mZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQog
ewogICAgIHNldEF0dHJpYnV0ZShjaGFyb2ZmQXR0ciwgdmFsdWUpOwogfQogCi1TdHJpbmcgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnZBbGlnbigpIGNvbnN0Citjb25zdCBBdG9taWNTdHJpbmcm
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojp2QWxpZ24oKSBjb25zdAogewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodmFsaWduQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodmFs
aWduQXR0cik7CiB9CiAKLXZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldFZBbGlnbihj
b25zdCBTdHJpbmcgJnZhbHVlKQordm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0VkFs
aWduKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7CiAgICAgc2V0QXR0cmlidXRlKHZhbGln
bkF0dHIsIHZhbHVlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRh
YmxlU2VjdGlvbkVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlU2VjdGlv
bkVsZW1lbnQuaAppbmRleCBlOTdlMjkwYWJmMjYzNzc3MTFhMzJjMWU3MTJkMjE1NzhmYzU5Yzhk
Li43MGViMTdmYzkzMjViMTMwOTZlNTI0MzljNDYzOGNiMTNjZjU3NWI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oCkBAIC00MSwxNyArNDEsMTcg
QEAgcHVibGljOgogCiAgICAgaW50IG51bVJvd3MoKSBjb25zdDsKIAotICAgIFN0cmluZyBhbGln
bigpIGNvbnN0OwotICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgU3RyaW5nJik7CisgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBhbGlnbigpIGNvbnN0OworICAgIHZvaWQgc2V0QWxpZ24oY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKLSAgICBTdHJpbmcgY2goKSBjb25zdDsKLSAgICB2b2lkIHNldENoKGNv
bnN0IFN0cmluZyYpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY2goKSBjb25zdDsKKyAgICB2
b2lkIHNldENoKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCi0gICAgU3RyaW5nIGNoT2ZmKCkgY29u
c3Q7Ci0gICAgdm9pZCBzZXRDaE9mZihjb25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGNoT2ZmKCkgY29uc3Q7CisgICAgdm9pZCBzZXRDaE9mZihjb25zdCBBdG9taWNTdHJp
bmcmKTsKIAotICAgIFN0cmluZyB2QWxpZ24oKSBjb25zdDsKLSAgICB2b2lkIHNldFZBbGlnbihj
b25zdCBTdHJpbmcmKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZBbGlnbigpIGNvbnN0Owor
ICAgIHZvaWQgc2V0VkFsaWduKGNvbnN0IEF0b21pY1N0cmluZyYpOwogCiAgICAgUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4gcm93cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEFyZWFFbGVtZW50LmNwcAppbmRleCAzMDQ1OTRkYTg3N2YzYzQ2MTgxMTc1NGM5MWM4MDExMzc1
NGRmYWViLi5jZTNkOGE5NTNkZjJkMjFiYTkxNjM3OGQwZWY2ZDNjNmMwMGNiZmYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKQEAgLTQzMCw3ICs0MzAs
NyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnNldERlZmF1bHRWYWx1ZShjb25zdCBTdHJp
bmcmIGRlZmF1bHRWYWx1ZSkKIGludCBIVE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5ndGgoKSBj
b25zdAogewogICAgIGJvb2wgb2s7Ci0gICAgaW50IHZhbHVlID0gZ2V0QXR0cmlidXRlKG1heGxl
bmd0aEF0dHIpLnN0cmluZygpLnRvSW50KCZvayk7CisgICAgaW50IHZhbHVlID0gZmFzdEdldEF0
dHJpYnV0ZShtYXhsZW5ndGhBdHRyKS5zdHJpbmcoKS50b0ludCgmb2spOwogICAgIHJldHVybiBv
ayAmJiB2YWx1ZSA+PSAwID8gdmFsdWUgOiAtMTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9TZWFyY2hJbnB1dFR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TZWFy
Y2hJbnB1dFR5cGUuY3BwCmluZGV4IDc5MWRjNzQ3OGNkZDJiZWUyZDQyMzMxN2MzODVmZjg1ODg2
MzNmNDEuLjQxOGRkMGIwOTRlMzEzMTFlZWZiNTViNGIyNGE2MmUxNmU4Yjc4MGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU2VhcmNoSW5wdXRUeXBlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL1NlYXJjaElucHV0VHlwZS5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lk
IFNlYXJjaElucHV0VHlwZTo6c2VhcmNoRXZlbnRUaW1lckZpcmVkKFRpbWVyPFNlYXJjaElucHV0
VHlwZT4qKQogCiBib29sIFNlYXJjaElucHV0VHlwZTo6c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNw
YXRjaGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZWxlbWVudCgpLmhhc0F0dHJpYnV0ZShpbmNy
ZW1lbnRhbEF0dHIpOworICAgIHJldHVybiBlbGVtZW50KCkuZmFzdEhhc0F0dHJpYnV0ZShpbmNy
ZW1lbnRhbEF0dHIpOwogfQogCiB2b2lkIFNlYXJjaElucHV0VHlwZTo6ZGlkU2V0VmFsdWVCeVVz
ZXJFZGl0KFZhbHVlQ2hhbmdlU3RhdGUgc3RhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1T
dWJtaXNzaW9uLmNwcAppbmRleCA5MzE4ODM2Zjg2NTEzODRjMWNjNWFiZDQwYzg1YmMxODczZWQ3
MDE5Li41Mjc4ZjRhYzUwNmM4OTYzMTQyZTk3OGEzNjgyMWYxNTAxMTU1MWVhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKQEAgLTE1NCwxNCArMTU0LDE0IEBAIFBh
c3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUoSFRNTEZvcm1F
bGVtZW50KiBmb3JtLCBjb25zdCBBCiAgICAgRm9ybVN1Ym1pc3Npb246OkF0dHJpYnV0ZXMgY29w
aWVkQXR0cmlidXRlczsKICAgICBjb3BpZWRBdHRyaWJ1dGVzLmNvcHlGcm9tKGF0dHJpYnV0ZXMp
OwogICAgIGlmIChzdWJtaXRCdXR0b24pIHsKLSAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVl
OwotICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmli
dXRlKGZvcm1hY3Rpb25BdHRyKSkuaXNOdWxsKCkpCisgICAgICAgIEF0b21pY1N0cmluZyBhdHRy
aWJ1dGVWYWx1ZTsKKyAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24t
PmZhc3RHZXRBdHRyaWJ1dGUoZm9ybWFjdGlvbkF0dHIpKS5pc051bGwoKSkKICAgICAgICAgICAg
IGNvcGllZEF0dHJpYnV0ZXMucGFyc2VBY3Rpb24oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBp
ZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmlidXRlKGZvcm1lbmN0
eXBlQXR0cikpLmlzTnVsbCgpKQorICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1p
dEJ1dHRvbi0+ZmFzdEdldEF0dHJpYnV0ZShmb3JtZW5jdHlwZUF0dHIpKS5pc051bGwoKSkKICAg
ICAgICAgICAgIGNvcGllZEF0dHJpYnV0ZXMudXBkYXRlRW5jb2RpbmdUeXBlKGF0dHJpYnV0ZVZh
bHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmdldEF0
dHJpYnV0ZShmb3JtbWV0aG9kQXR0cikpLmlzTnVsbCgpKQorICAgICAgICBpZiAoIShhdHRyaWJ1
dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+ZmFzdEdldEF0dHJpYnV0ZShmb3JtbWV0aG9kQXR0cikp
LmlzTnVsbCgpKQogICAgICAgICAgICAgY29waWVkQXR0cmlidXRlcy51cGRhdGVNZXRob2RUeXBl
KGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRC
dXR0b24tPmdldEF0dHJpYnV0ZShmb3JtdGFyZ2V0QXR0cikpLmlzTnVsbCgpKQorICAgICAgICBp
ZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+ZmFzdEdldEF0dHJpYnV0ZShmb3Jt
dGFyZ2V0QXR0cikpLmlzTnVsbCgpKQogICAgICAgICAgICAgY29waWVkQXR0cmlidXRlcy5zZXRU
YXJnZXQoYXR0cmlidXRlVmFsdWUpOwogICAgIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5k
ZXggZmUyNmRkMWUzYjdhZGM2NGUzYThlYjE1YTJjNzY4NGM0ZjM5OTZkNy4uMjk2MGVkMjI4MzIy
ZDMxYmVmOWJlYzQ0YTIzYTQ5NjVjMzI0ZWY3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTQ3
Niw3ICs0NzYsNyBAQCBTdHJpbmcgRnJhbWU6Om1hdGNoTGFiZWxzQWdhaW5zdEVsZW1lbnQoY29u
c3QgVmVjdG9yPFN0cmluZz4mIGxhYmVscywgRWxlbWVudCogZQogICAgIGlmICghcmVzdWx0RnJv
bU5hbWVBdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0RnJvbU5hbWVB
dHRyaWJ1dGU7CiAgICAgCi0gICAgcmV0dXJuIG1hdGNoTGFiZWxzQWdhaW5zdFN0cmluZyhsYWJl
bHMsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICByZXR1cm4gbWF0Y2hMYWJl
bHNBZ2FpbnN0U3RyaW5nKGxhYmVscywgZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShpZEF0dHIp
KTsKIH0KIAogI2lmIFBMQVRGT1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZVNlcmlhbGl6ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXpl
ci5jcHAKaW5kZXggNzYyMmYxMTAzMjkzYjk3YzdhN2ZmZWZmNmVkMzcxY2ZlOTNhNDkyMC4uNDNj
NGU3ZWY4N2NkN2Q3NzZmMzE0NDM2ZjA4NDdjYTllYThhMTA5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9QYWdlU2VyaWFsaXplci5jcHAKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFBhZ2VTZXJpYWxp
emVyOjpzZXJpYWxpemVGcmFtZShGcmFtZSogZnJhbWUpCiAKICAgICAgICAgaWYgKGlzSFRNTElt
YWdlRWxlbWVudChlbGVtZW50KSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1h
Z2VFbGVtZW50ID0gdG9IVE1MSW1hZ2VFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICAgICAgVVJM
IHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAgICAgIFVSTCB1cmwgPSBkb2N1bWVudC0+Y29t
cGxldGVVUkwoaW1hZ2VFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0
cikpOwogICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gaW1hZ2VFbGVtZW50
LT5jYWNoZWRJbWFnZSgpOwogICAgICAgICAgICAgYWRkSW1hZ2VUb1Jlc291cmNlcyhjYWNoZWRJ
bWFnZSwgaW1hZ2VFbGVtZW50LT5yZW5kZXJlcigpLCB1cmwpOwogICAgICAgICB9IGVsc2UgaWYg
KGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IDQ0OTFkNTNmOTJhM2U1
ZWZiN2NlY2EzNjQwOWVmZjM4Y2Y3ZjFhYzguLmNlNWE3ZTIzZGY0NGNmMDU0ZTAzNjdmZjYwMjdj
MjVjNTM3MjM4ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0
ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2Fy
ZFdpbi5jcHAKQEAgLTEwMzQsNyArMTAzNCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFn
ZVRvRGF0YU9iamVjdChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBVUkwmIHVybCkKICAgICBpZiAo
IWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBIR0xPQkFMIGltYWdlRmlsZURlc2NyaXB0b3IgPSBjcmVhdGVHbG9iYWxJbWFnZUZpbGVE
ZXNjcmlwdG9yKHVybC5zdHJpbmcoKSwgZWxlbWVudC5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjph
bHRBdHRyKSwgY2FjaGVkSW1hZ2UpOworICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9
IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURlc2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LmZh
c3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKSwgY2FjaGVkSW1hZ2UpOwogICAgIGlm
ICghaW1hZ2VGaWxlRGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKaW5kZXggZDRkYjM1OTUwYWNkYjg1ZTdhYjVh
ZDcxYjBiNDA5YjhjZjk1MzE4Ny4uOTU5M2I3NjA0MTk5NTJkMGJjMjBhMTRiZjdlMjY0MTgwNTRk
MDg5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcApAQCAt
Mjc0LDcgKzI3NCw3IEBAIFN0cmluZyBIaXRUZXN0UmVzdWx0OjphbHREaXNwbGF5U3RyaW5nKCkg
Y29uc3QKICAgICAKICAgICBpZiAoaXNIVE1MSW1hZ2VFbGVtZW50KG1faW5uZXJOb25TaGFyZWRO
b2RlLmdldCgpKSkgewogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSA9IHRvSFRNTElt
YWdlRWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7Ci0gICAgICAgIHJldHVybiBk
aXNwbGF5U3RyaW5nKGltYWdlLT5nZXRBdHRyaWJ1dGUoYWx0QXR0ciksIG1faW5uZXJOb25TaGFy
ZWROb2RlLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmZhc3RH
ZXRBdHRyaWJ1dGUoYWx0QXR0ciksIG1faW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKICAgICB9
CiAgICAgCiAgICAgaWYgKGlzSFRNTElucHV0RWxlbWVudChtX2lubmVyTm9uU2hhcmVkTm9kZS5n
ZXQoKSkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFy
Y2hGaWVsZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VhcmNoRmllbGQu
Y3BwCmluZGV4IGRmZmY3NWNkYTY2MmQzYTZhMDdhZWU3OWY0YTA0NTZkOTljZDg2ZTEuLmQ4MjQ4
NjUwYTljNTRhMGMzMTQxMGE0YTRhMWFhYjQ2MGQ0YzA1YmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWFyY2hGaWVsZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclNlYXJjaEZpZWxkLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIEVW
aXNpYmlsaXR5IFJlbmRlclNlYXJjaEZpZWxkOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkg
Y29uc3QKIAogY29uc3QgQXRvbWljU3RyaW5nJiBSZW5kZXJTZWFyY2hGaWVsZDo6YXV0b3NhdmVO
YW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaW5wdXRFbGVtZW50KCkuZ2V0QXR0cmlidXRlKGF1
dG9zYXZlQXR0cik7CisgICAgcmV0dXJuIGlucHV0RWxlbWVudCgpLmZhc3RHZXRBdHRyaWJ1dGUo
YXV0b3NhdmVBdHRyKTsKIH0KIAogLy8gUG9wdXBNZW51Q2xpZW50IG1ldGhvZHMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKaW5kZXggMGYyYjc0YjRmN2Vh
MGU3NzA3NTNhZGY0ZTBmMjUzNGNlZGQwZWQyMS4uNjg5NjIzNDhjYzc4YThmMGIyZGRmNTAzNTNj
OGUxNGNlYzk0OWIxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0
ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIGlmIChlbGVtZW50KCkgJiYgc3R5bGUoKS5h
dXRvV3JhcCgpKSB7CiAgICAgICAgIC8vIFNlZSBpZiBub3dyYXAgd2FzIHNldC4KICAgICAgICAg
TGVuZ3RoIHcgPSBzdHlsZU9yQ29sTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIFN0cmluZyBub3dy
YXAgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShub3dyYXBBdHRyKTsKKyAgICAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiBub3dyYXAgPSBlbGVtZW50KCktPmZhc3RHZXRBdHRyaWJ1dGUobm93cmFw
QXR0cik7CiAgICAgICAgIGlmICghbm93cmFwLmlzTnVsbCgpICYmIHcuaXNGaXhlZCgpKQogICAg
ICAgICAgICAgLy8gTm93cmFwIGlzIHNldCwgYnV0IHdlIGRpZG4ndCBhY3R1YWxseSB1c2UgaXQg
YmVjYXVzZSBvZiB0aGUKICAgICAgICAgICAgIC8vIGZpeGVkIHdpZHRoIHNldCBvbiB0aGUgY2Vs
bC4gIEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRyYWl0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlQ2xpcHBlci5jcHAKaW5k
ZXggMDFkNTU4ZDFhY2ExNjQ0N2I3NTA3ODc3MTdkN2NlNGMxNjI3NWJlNC4uZjJjZGM1MmM3NDc4
ZjdkMjlhNjE2ODI1YTkyOTRkMTM0MDZmNjY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZUNsaXBwZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmNwcApAQCAtMjI2
LDcgKzIyNiw3IEBAIGJvb2wgUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyOjpkcmF3Q29udGVudElu
dG9NYXNrSW1hZ2UoQ2xpcHBlckRhdGEqIGNsaXBwZXJEYXRhCiAgICAgICAgICAgICByZW5kZXJl
ciA9IHVzZUVsZW1lbnQucmVuZGVyZXJDbGlwQ2hpbGQoKTsKICAgICAgICAgICAgIGlmICghcmVu
ZGVyZXIpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIXVzZUVs
ZW1lbnQuaGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRyKSkKKyAgICAgICAgICAg
IGlmICghdXNlRWxlbWVudC5mYXN0SGFzQXR0cmlidXRlKFNWR05hbWVzOjpjbGlwX3J1bGVBdHRy
KSkKICAgICAgICAgICAgICAgICBuZXdDbGlwUnVsZSA9IHJlbmRlcmVyLT5zdHlsZSgpLnN2Z1N0
eWxlKCkuY2xpcFJ1bGUoKTsKICAgICAgICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>