<?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>67394</bug_id>
          
          <creation_ts>2011-09-01 06:21:24 -0700</creation_ts>
          <short_desc>Use fastGetAttribute() and fastHasAttribute() where appropriate.</short_desc>
          <delta_ts>2013-09-08 19:01:49 -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>WONTFIX</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>
          <dependson>67496</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>kling</cc>
    
    <cc>krit</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>460404</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 06:21:24 -0700</bug_when>
    <thetext>We should use fastGetAttribute() and fastHasAttribute() wherever the queried attribute is neither &quot;style&quot; or an SVG animatable attribute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460409</commentid>
    <comment_count>1</comment_count>
      <attachid>105951</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 06:32:40 -0700</bug_when>
    <thetext>Created attachment 105951
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460442</commentid>
    <comment_count>2</comment_count>
      <attachid>105951</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 07:33:43 -0700</bug_when>
    <thetext>Comment on attachment 105951
Proposed patch

Attachment 105951 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9579333

New failing tests:
svg/dom/SVGScriptElement/script-set-href.svg
svg/custom/js-update-image-and-display3.svg
svg/dom/SVGScriptElement/script-reexecution.svg
svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
svg/dom/SVGScriptElement/script-onerror-bubbling.svg
svg/dom/SVGScriptElement/script-load-and-error-events.svg
svg/custom/createImageElement.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460443</commentid>
    <comment_count>3</comment_count>
      <attachid>105951</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 07:34:39 -0700</bug_when>
    <thetext>Comment on attachment 105951
Proposed patch

(In reply to comment #2)
&gt; (From update of attachment 105951 [details])
&gt; Attachment 105951 [details] did not pass chromium-ews (chromium-xvfb):
&gt; Output: http://queues.webkit.org/results/9579333
&gt; 
&gt; New failing tests:
&gt; svg/dom/SVGScriptElement/script-set-href.svg
&gt; svg/custom/js-update-image-and-display3.svg
&gt; svg/dom/SVGScriptElement/script-reexecution.svg
&gt; svg/dom/SVGScriptElement/script-change-externalResourcesRequired-while-loading.svg
&gt; svg/dom/SVGScriptElement/script-onerror-bubbling.svg
&gt; svg/dom/SVGScriptElement/script-load-and-error-events.svg
&gt; svg/custom/createImageElement.svg

Whoops! Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460478</commentid>
    <comment_count>4</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 08:23:29 -0700</bug_when>
    <thetext>Today I learned that xlink:href is an SVG animatable attribute. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460495</commentid>
    <comment_count>5</comment_count>
      <attachid>105974</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 08:56:04 -0700</bug_when>
    <thetext>Created attachment 105974
Proposed patch

Let&apos;s try that again without messing with xlink:href.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460497</commentid>
    <comment_count>6</comment_count>
      <attachid>105974</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-09-01 09:01:27 -0700</bug_when>
    <thetext>Comment on attachment 105974
Proposed patch

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

&gt; Source/WebCore/dom/Document.cpp:632
&gt; -        const AtomicString&amp; accessKey = element-&gt;getAttribute(accesskeyAttr);
&gt; +        const AtomicString&amp; accessKey = element-&gt;fastGetAttribute(accesskeyAttr);

would not this be simpler if the check was done internally to ::getAttribute() instead of changing all call sites?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460512</commentid>
    <comment_count>7</comment_count>
      <attachid>105974</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-01 09:20:50 -0700</bug_when>
    <thetext>Comment on attachment 105974
Proposed patch

Attachment 105974 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9583242

New failing tests:
svg/custom/createImageElement.svg
svg/custom/js-update-image-and-display3.svg</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460551</commentid>
    <comment_count>8</comment_count>
      <attachid>105974</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-01 10:08:55 -0700</bug_when>
    <thetext>Comment on attachment 105974
Proposed patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        Change call sites that don&apos;t check the &quot;style&quot; or SVG animatable
&gt; +        attributes to use fastGetAttribute()/fastHasAttribute() instead
&gt; +        of getAttribute()/hasAttribute().

How is that you know none of these are SVG animatable attributes? That’s one thing that held me back in the past. I wasn’t sure which attributes could be animated by SVG.

&gt;&gt; Source/WebCore/dom/Document.cpp:632
&gt;&gt; +        const AtomicString&amp; accessKey = element-&gt;fastGetAttribute(accesskeyAttr);
&gt; 
&gt; would not this be simpler if the check was done internally to ::getAttribute() instead of changing all call sites?

As Andreas implied in the change log, the getAttribute function is visible to the public DOM and has to handle the style attribute properly and animated SVG attributes properly.

We can use fastGetAttribute at call sites where we know the attribute is not styleAttr and where we know animated SVG attributes can’t possibly be involved. That’s why the call sites need to change.

&gt; Source/WebCore/dom/Element.cpp:2006
&gt; +    const AtomicString&amp; value = fastGetAttribute(HTMLNames::spellcheckAttr);

Not sure why this has the HTMLNames prefix; other uses in this file don’t have it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460553</commentid>
    <comment_count>9</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-09-01 10:12:18 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 105974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105974&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Change call sites that don&apos;t check the &quot;style&quot; or SVG animatable
&gt; &gt; +        attributes to use fastGetAttribute()/fastHasAttribute() instead
&gt; &gt; +        of getAttribute()/hasAttribute().
&gt; 
&gt; How is that you know none of these are SVG animatable attributes? That’s one thing that held me back in the past. I wasn’t sure which attributes could be animated by SVG.
&gt; 
&gt; &gt;&gt; Source/WebCore/dom/Document.cpp:632
&gt; &gt;&gt; +        const AtomicString&amp; accessKey = element-&gt;fastGetAttribute(accesskeyAttr);
&gt; &gt; 
&gt; &gt; would not this be simpler if the check was done internally to ::getAttribute() instead of changing all call sites?
&gt; 
&gt; As Andreas implied in the change log, the getAttribute function is visible to the public DOM and has to handle the style attribute properly and animated SVG attributes properly.

That I understood. I meant

Element::getAttritibut(Attr attr)
{
   if (attr != svn_bleg &amp;&amp; attr != style)
       return fastGetAttribute(attr);

   return slowGetAttribute(attr);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460563</commentid>
    <comment_count>10</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 10:18:13 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; (From update of attachment 105974 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105974&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; &gt; +        Change call sites that don&apos;t check the &quot;style&quot; or SVG animatable
&gt; &gt; &gt; +        attributes to use fastGetAttribute()/fastHasAttribute() instead
&gt; &gt; &gt; +        of getAttribute()/hasAttribute().
&gt; &gt; 
&gt; &gt; How is that you know none of these are SVG animatable attributes? That’s one thing that held me back in the past. I wasn’t sure which attributes could be animated by SVG.
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/dom/Document.cpp:632
&gt; &gt; &gt;&gt; +        const AtomicString&amp; accessKey = element-&gt;fastGetAttribute(accesskeyAttr);
&gt; &gt; &gt; 
&gt; &gt; &gt; would not this be simpler if the check was done internally to ::getAttribute() instead of changing all call sites?
&gt; &gt; 
&gt; &gt; As Andreas implied in the change log, the getAttribute function is visible to the public DOM and has to handle the style attribute properly and animated SVG attributes properly.
&gt; 
&gt; That I understood. I meant
&gt; 
&gt; Element::getAttritibut(Attr attr)
&gt; {
&gt;    if (attr != svn_bleg &amp;&amp; attr != style)
&gt;        return fastGetAttribute(attr);
&gt; 
&gt;    return slowGetAttribute(attr);
&gt; }

If you look at Element::getAttribute(), it already does something similar to what you&apos;re suggesting, as well as calling fastGetAttribute() in the end.

It should also be noted that Element::fast*Attribute() are inline functions. Given how much they&apos;re used, we don&apos;t want to add unnecessary bloat, and changing call sites to out-of-line function calls will likely affect PLT performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460578</commentid>
    <comment_count>11</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-09-01 10:29:20 -0700</bug_when>
    <thetext>stood. I meant
&gt; &gt; 
&gt; &gt; Element::getAttritibut(Attr attr)
&gt; &gt; {
&gt; &gt;    if (attr != svn_bleg &amp;&amp; attr != style)
&gt; &gt;        return fastGetAttribute(attr);
&gt; &gt; 
&gt; &gt;    return slowGetAttribute(attr);
&gt; &gt; }
&gt; 
&gt; If you look at Element::getAttribute(), it already does something similar to what you&apos;re suggesting, as well as calling fastGetAttribute() in the end.
&gt; 
&gt; It should also be noted that Element::fast*Attribute() are inline functions. Given how much they&apos;re used, we don&apos;t want to add unnecessary bloat, and changing call sites to out-of-line function calls will likely affect PLT performance.

Fair enough :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460598</commentid>
    <comment_count>12</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-01 10:51:45 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 105974 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=105974&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:10
&gt; &gt; +        Change call sites that don&apos;t check the &quot;style&quot; or SVG animatable
&gt; &gt; +        attributes to use fastGetAttribute()/fastHasAttribute() instead
&gt; &gt; +        of getAttribute()/hasAttribute().
&gt; 
&gt; How is that you know none of these are SVG animatable attributes? That’s one thing that held me back in the past. I wasn’t sure which attributes could be animated by SVG.

Attributes animatable by SVG are documented as such in the specification. (Each property has a line saying &quot;Animatable: yes/no.&quot;)

In WebKit they can be found with &quot;grep -r DEFINE_ANIMATED Source/WebCore/svg&quot;.

I did just find that HTMLNames::classAttr is animatable on SVGStyledElement though, so this patch is unfortunately flawed. Adding Dirk and Nikolas in hopes that they may have some input on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>460829</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-01 15:07:54 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; In WebKit they can be found with &quot;grep -r DEFINE_ANIMATED Source/WebCore/svg&quot;.
&gt; 
&gt; I did just find that HTMLNames::classAttr is animatable on SVGStyledElement though, so this patch is unfortunately flawed. Adding Dirk and Nikolas in hopes that they may have some input on this.

If classAttr is animatable, then lets just be sure not to use the fast functions on it.

Maybe we can make fastGetAttribute and fastHasAttribute check that the passed-in attribute is not one of the animatable ones when used in debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461250</commentid>
    <comment_count>14</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-02 09:12:19 -0700</bug_when>
    <thetext>Committed r94421: &lt;http://trac.webkit.org/changeset/94421&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461425</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-09-02 12:29:24 -0700</bug_when>
    <thetext>I know this was rolled out, but I don’t know how to find out why. Would love to hear what kinds of failures this caused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461708</commentid>
    <comment_count>16</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-02 19:53:39 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; I know this was rolled out, but I don’t know how to find out why. Would love to hear what kinds of failures this caused.

It caused failures on Chromium. I believe it&apos;s due to their usage of Element::imageSourceAttributeName() which may return XLinkNames::hrefAttr. I will make a new patch tomorrow that doesn&apos;t do fastFooAttribute(element-&gt;imageSourceAttributeName()) anywhere and double-check with EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>461710</commentid>
    <comment_count>17</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-02 19:54:26 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; I know this was rolled out, but I don’t know how to find out why. Would love to hear what kinds of failures this caused.
&gt; 
&gt; It caused failures on Chromium. I believe it&apos;s due to their usage of Element::imageSourceAttributeName() which may return XLinkNames::hrefAttr. I will make a new patch tomorrow that doesn&apos;t do fastFooAttribute(element-&gt;imageSourceAttributeName()) anywhere and double-check with EWS.

To clarify, SVGImageElement returns XLinkNames::hrefAttr for the imageSourceAttributeName, which is indeed an SVG animatable attribute :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>462162</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-09-05 08:22:04 -0700</bug_when>
    <thetext>Quick update: After closer inspection, this is a can of worms. I&apos;m working on a proper solution (and blog post..)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>925956</commentid>
    <comment_count>19</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-09-06 18:43:16 -0700</bug_when>
    <thetext>Oh wow, is this patch 2 years old already? I was gonna do it &quot;tomorrow&quot;
I don&apos;t agree with my past self that this is a good idea. All that inlining for unimportant attribute access has wonked space/time tradeoff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>926530</commentid>
    <comment_count>20</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-09-08 19:01:49 -0700</bug_when>
    <thetext>The point of the fast versions is to skip unnecessary work; those extra two branches to implement the style attribute and animated SVG attributes are almost never needed when we are getting a specific attribute by name.

The inlining issue is a separate one. There could be yet-another different version that is inlined.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105951</attachid>
            <date>2011-09-01 06:32:40 -0700</date>
            <delta_ts>2011-09-01 07:34:39 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-67394.diff</filename>
            <type>text/plain</type>
            <size>104504</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOGU5ZGQzLi4zZmRiYzExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYw
IEBACisyMDExLTA5LTAxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBVc2UgZmFzdEdldEF0dHJpYnV0ZSgpIGFuZCBmYXN0SGFzQXR0cmlidXRlKCkgd2hlcmUg
YXBwcm9wcmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NzM5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENoYW5nZSBjYWxsIHNpdGVzIHRoYXQgZG9uJ3QgY2hlY2sgdGhlICJzdHlsZSIgb3IgU1ZH
IGFuaW1hdGFibGUKKyAgICAgICAgYXR0cmlidXRlcyB0byB1c2UgZmFzdEdldEF0dHJpYnV0ZSgp
L2Zhc3RIYXNBdHRyaWJ1dGUoKSBpbnN0ZWFkCisgICAgICAgIG9mIGdldEF0dHJpYnV0ZSgpL2hh
c0F0dHJpYnV0ZSgpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIG1pbm9yIHBl
cmZvcm1hbmNlIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzUm9sZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAg
ICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJhc2VVUkkp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlKToKKyAgICAgICAg
KiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgIChXZWJD
b3JlOjppc0VtcHR5Rm9udFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmVsZW1l
bnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZXJjaGFuZ2VO
ZXdsaW5lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVyY2hhbmdlQ29udmVydGVkU3Bh
Y2VTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzSW5saW5lTm9kZVdpdGhTdHlsZSk6CisgICAgICAgICogZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxl
bWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc1RhYlNwYW5Ob2RlKToKKyAgICAgICAgKiBlZGl0aW5n
L21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbmNsdWRlV3JhcHBlckZvckZ1
bGx5U2VsZWN0ZWRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6ZHJhZ2dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojp0YXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNlbmRQaW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6aGFuZGxlQ2xpY2spOgorICAgICAgICAqIGh0bWwvSFRN
TEFwcGxldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCk6CisgICAgICAgICogaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
OjphTGluayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OmJnQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpsaW5rKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVs
ZW1lbnQ6OnZMaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6YWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Ojp2YWx1ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAg
ICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudDo6ZGlyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudDo6ZHJhZ2dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50Ojp0aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2
ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eUlmaGFz
RGlyQXV0b0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6YWRqdXN0
RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0
ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9ybUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojph
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjptZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp0YXJnZXQpOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
Ojpub1Jlc2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZW5VUkwp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjphbGxvd0Z1bGxTY3JlZW4pOgor
ICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFsdFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6d2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OmFsdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50OjpkcmFnZ2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c3Jj
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1NwZWVjaEVuYWJsZWQpOgorICAgICAgICAqIGh0
bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGFiZWxFbGVt
ZW50Ojpjb250cm9sKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxl
bWVudDo6cmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dHlwZSk6CisgICAgICAgICogaHRt
bC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6
aW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmF1dG9wbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6Y29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNvdXJjZVdhc0FkZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxNZXRhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OmNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50OjpodHRwRXF1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFFbGVtZW50OjpuYW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxNZXRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6bWluKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZXRlckVsZW1lbnQ6Om1heCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWV0ZXJFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJF
bGVtZW50Ojpsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6aGlnaCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJFbGVtZW50OjpvcHRpbXVtKToKKyAgICAgICAg
KiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFt
ZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlV2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBs
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KToK
KyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6bWF4KToKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Ojpzb3VyY2VB
dHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2hh
cnNldEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
Ojp0eXBlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQ6Omxhbmd1YWdlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dEVsZW1lbnQ6OmZvckF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3Jp
cHRFbGVtZW50OjpldmVudEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VFbGVtZW50OjptZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6dHlwZSk6CisgICAgICAg
ICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnR5
cGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFiYnIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OmhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OnNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Ojph
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Ojp3aWR0
aCk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQ6OnN1bW1hcnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6
YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50OjphbGlnbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoT2ZmKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojp2QWxpZ24pOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vob2xkZXJFbXB0eSk6CisgICAgICAgICog
aHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpraW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnNyY2xhbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyYWNrRWxlbWVudDo6aXNEZWZhdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6OmxvYWQpOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAqIGh0bWwvU3RlcFJhbmdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6U3RlcFJhbmdlKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1p
c3Npb246OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6bWF0Y2hMYWJlbHNBZ2Fp
bnN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om1hdGNoTGFiZWxz
QWdhaW5zdEVsZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRVUkxGb3JJbWFn
ZU5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tOgorICAgICAg
ICAoZmlsZVdyYXBwZXJGb3JFbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OmFsdERpc3BsYXlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRldGFpbHM6OmlzT3Blbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1lbnVMaXN0OjppdGVtQWNjZXNzaWJpbGl0eVRleHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojph
ZGRQREZVUkxSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjph
dXRvc2F2ZU5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWRlbzo6Y2FsY3VsYXRlSW50cmluc2ljU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udERh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxl
Y3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NjcmlwdEVsZW1lbnQ6Omhhc1NvdXJjZUF0dHJpYnV0ZSk6CisKIDIwMTEtMDgt
MzAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQ6IERvbid0IGNhY2hlICJpc21hcCIgYW5kICJ1c2VtYXAiIGF0dHJpYnV0ZXMuCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAppbmRleCAx
YzliNDZhLi45MDZlODQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKQEAgLTE4OCw3ICsxODgsNyBAQCBib29sIG5vZGVIYXNSb2xlKE5vZGUq
IG5vZGUsIGNvbnN0IFN0cmluZyYgcm9sZSkKICAgICBpZiAoIW5vZGUgfHwgIW5vZGUtPmlzRWxl
bWVudE5vZGUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKHJvbGVB
dHRyKSwgcm9sZSk7CisgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShyb2xlQXR0ciksIHJvbGUpOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5T2JqZWN0PiBjcmVhdGVGcm9tUmVuZGVyZXIo
UmVuZGVyT2JqZWN0KiByZW5kZXJlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyQXRrLmNw
cAppbmRleCAxZDhhZjllLi5lNmU2ZTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlckF0ay5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJB
dGsuY3BwCkBAIC0xOTAsNyArMTkwLDcgQEAgc3RhdGljIGNvbnN0IGdjaGFyKiB3ZWJraXRfYWNj
ZXNzaWJsZV9nZXRfbmFtZShBdGtPYmplY3QqIG9iamVjdCkKICAgICAgICAgTm9kZSogbm9kZSA9
IGNvcmVPYmplY3QtPm5vZGUoKTsKICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+aXNIVE1MRWxl
bWVudCgpKSB7CiAgICAgICAgICAgICAvLyBHZXQgdGhlIGF0dHJpYnV0ZSByYXRoZXIgdGhhbiBh
bHRUZXh0IFN0cmluZyBzbyBhcyBub3QgdG8gZmFsbCBiYWNrIG9uIHRpdGxlLgotICAgICAgICAg
ICAgU3RyaW5nIGFsdCA9IHRvSFRNTEVsZW1lbnQobm9kZSktPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OmFsdEF0dHIpOworICAgICAgICAgICAgU3RyaW5nIGFsdCA9IHRvSFRNTEVsZW1lbnQobm9k
ZSktPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKTsKICAgICAgICAgICAgIGlm
ICghYWx0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuU3RyaW5nKGFs
dCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCmluZGV4IDE1MGMwZmMuLjQxYjBk
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApAQCAtNjI5LDcgKzYyOSw3IEBAIHZvaWQgRG9j
dW1lbnQ6OmJ1aWxkQWNjZXNzS2V5TWFwKFRyZWVTY29wZSogcm9vdCkKICAgICAgICAgaWYgKCFu
LT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgRWxlbWVu
dCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhY2Nlc3NLZXkgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0
cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+ZmFz
dEdldEF0dHJpYnV0ZShhY2Nlc3NrZXlBdHRyKTsKICAgICAgICAgaWYgKCFhY2Nlc3NLZXkuaXNF
bXB0eSgpKQogICAgICAgICAgICAgbV9lbGVtZW50c0J5QWNjZXNzS2V5LnNldChhY2Nlc3NLZXku
aW1wbCgpLCBlbGVtZW50KTsKICAgICAgICAgYnVpbGRBY2Nlc3NLZXlNYXAoZWxlbWVudC0+c2hh
ZG93Um9vdCgpKTsKQEAgLTI5NTgsNyArMjk1OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0
eWxlU2VsZWN0b3IoKQogI2VuZGlmCiAgICAgICAgICkgewogICAgICAgICAgICAgRWxlbWVudCog
ZSA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKLSAgICAgICAgICAgIEF0b21pY1N0cmluZyB0
aXRsZSA9IGUtPmdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICAgICAgQXRvbWljU3Ry
aW5nIHRpdGxlID0gZS0+ZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICAgICAg
Ym9vbCBlbmFibGVkVmlhU2NyaXB0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiAoZS0+aGFzTG9j
YWxOYW1lKGxpbmtUYWcpKSB7CiAgICAgICAgICAgICAgICAgLy8gPExJTks+IGVsZW1lbnQKQEAg
LTI5NjksNyArMjk2OSw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IoKQog
ICAgICAgICAgICAgICAgIGlmIChsaW5rRWxlbWVudC0+aXNMb2FkaW5nKCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gaXQgaXMgbG9hZGluZyBidXQgd2Ugc2hvdWxkIHN0aWxsIGRlY2lkZSB3
aGljaCBzdHlsZSBzaGVldCBzZXQgdG8gdXNlCiAgICAgICAgICAgICAgICAgICAgIGlmICghZW5h
YmxlZFZpYVNjcmlwdCAmJiAhdGl0bGUuaXNFbXB0eSgpICYmIG1fcHJlZmVycmVkU3R5bGVzaGVl
dFNldC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgcmVsID0gZS0+Z2V0QXR0cmlidXRlKHJlbEF0dHIpOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiByZWwgPSBlLT5mYXN0R2V0QXR0cmlidXRlKHJlbEF0
dHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWwuY29udGFpbnMoImFsdGVybmF0
ZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcmVmZXJyZWRTdHlsZXNoZWV0
U2V0ID0gdGl0bGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zZWxlY3RlZFN0eWxl
c2hlZXRTZXQgPSB0aXRsZTsKQEAgLTMwMDQsNyArMzAwNCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnJl
Y2FsY1N0eWxlU2VsZWN0b3IoKQogICAgICAgICAgICAgICAgICAgICAvLyB3ZSBhcmUgTk9UIGFu
IGFsdGVybmF0ZSBzaGVldCwgdGhlbiBlc3RhYmxpc2gKICAgICAgICAgICAgICAgICAgICAgLy8g
dXMgYXMgdGhlIHByZWZlcnJlZCBzZXQuICBPdGhlcndpc2UsIGp1c3QgaWdub3JlCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoaXMgc2hlZXQuCi0gICAgICAgICAgICAgICAgICAgIEF0b21pY1N0
cmluZyByZWwgPSBlLT5nZXRBdHRyaWJ1dGUocmVsQXR0cik7CisgICAgICAgICAgICAgICAgICAg
IEF0b21pY1N0cmluZyByZWwgPSBlLT5mYXN0R2V0QXR0cmlidXRlKHJlbEF0dHIpOwogICAgICAg
ICAgICAgICAgICAgICBpZiAoZS0+aGFzTG9jYWxOYW1lKHN0eWxlVGFnKSB8fCAhcmVsLmNvbnRh
aW5zKCJhbHRlcm5hdGUiKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fcHJlZmVycmVkU3R5
bGVzaGVldFNldCA9IG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0ID0gdGl0bGU7CiAgICAgICAgICAg
ICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDcxNjhlMTIuLjc0NzdkODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudC5jcHAKQEAgLTg5MSw3ICs4OTEsNyBAQCB2b2lkIEVsZW1lbnQ6OnNldFBy
ZWZpeChjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIEtV
UkwgRWxlbWVudDo6YmFzZVVSSSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBi
YXNlQXR0cmlidXRlID0gZ2V0QXR0cmlidXRlKGJhc2VBdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGJhc2VBdHRyaWJ1dGUgPSBmYXN0R2V0QXR0cmlidXRlKGJhc2VBdHRyKTsKICAgICBL
VVJMIGJhc2UoS1VSTCgpLCBiYXNlQXR0cmlidXRlKTsKICAgICBpZiAoIWJhc2UucHJvdG9jb2wo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBiYXNlOwpAQCAtMTQ4NSw4ICsxNDg1LDggQEAg
dm9pZCBFbGVtZW50Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxl
bmd0aCkgY29uc3QKICAgICAgICAgcmVzdWx0ICs9ICJpZD0iOwogICAgICAgICByZXN1bHQgKz0g
czsKICAgICB9Ci0gICAgICAgICAgCi0gICAgcyA9IGdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwor
CisgICAgcyA9IGZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKTsKICAgICBpZiAocy5sZW5ndGgo
KSA+IDApIHsKICAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGgoKSA+IDApCiAgICAgICAgICAgICBy
ZXN1bHQgKz0gIjsgIjsKQEAgLTIwMDMsNyArMjAwMyw3IEBAIHZvaWQgRWxlbWVudDo6c2V0Q29u
dGFpbnNGdWxsU2NyZWVuRWxlbWVudE9uQW5jZXN0b3JzQ3Jvc3NpbmdGcmFtZUJvdW5kYXJpZXMo
Ym9vCiAKIFNwZWxsY2hlY2tBdHRyaWJ1dGVTdGF0ZSBFbGVtZW50OjpzcGVsbGNoZWNrQXR0cmli
dXRlU3RhdGUoKSBjb25zdAogewotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBnZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjpzcGVsbGNoZWNrQXR0cik7CisgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcGVsbGNoZWNrQXR0cik7
CiAgICAgaWYgKHZhbHVlID09IG51bGxBdG9tKQogICAgICAgICByZXR1cm4gU3BlbGxjaGVja0F0
dHJpYnV0ZURlZmF1bHQ7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAidHJ1ZSIp
IHx8IGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLCAiIikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxp
c3QuY3BwCmluZGV4IDJmZmE1NzcuLjBlMGI3OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9OYW1lTm9kZUxpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9OYW1lTm9kZUxp
c3QuY3BwCkBAIC00NCw3ICs0NCw3IEBAIE5hbWVOb2RlTGlzdDo6fk5hbWVOb2RlTGlzdCgpCiAK
IGJvb2wgTmFtZU5vZGVMaXN0Ojpub2RlTWF0Y2hlcyhFbGVtZW50KiB0ZXN0Tm9kZSkgY29uc3QK
IHsKLSAgICByZXR1cm4gdGVzdE5vZGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9ub2Rl
TmFtZTsKKyAgICByZXR1cm4gdGVzdE5vZGUtPmZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09
IG1fbm9kZU5hbWU7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggYzQ0NzZkMC4uM2RmYTBiZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTY3
LDcgKzY3LDcgQEAgYm9vbCBpc0xlZ2FjeUFwcGxlU3R5bGVTcGFuKGNvbnN0IE5vZGUgKm5vZGUp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtID0g
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICByZXR1cm4gZWxlbS0+
aGFzTG9jYWxOYW1lKHNwYW5BdHRyKSAmJiBlbGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9
PSBzdHlsZVNwYW5DbGFzc1N0cmluZygpOworICAgIHJldHVybiBlbGVtLT5oYXNMb2NhbE5hbWUo
c3BhbkF0dHIpICYmIGVsZW0tPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNw
YW5DbGFzc1N0cmluZygpOwogfQogCiBlbnVtIFNob3VsZFN0eWxlQXR0cmlidXRlQmVFbXB0eSB7
IEFsbG93Tm9uRW1wdHlTdHlsZUF0dHJpYnV0ZSwgU3R5bGVBdHRyaWJ1dGVTaG91bGRCZUVtcHR5
IH07CkBAIC0xMTIsNyArMTEyLDcgQEAgc3RhdGljIGJvb2wgaXNFbXB0eUZvbnRUYWcoY29uc3Qg
Tm9kZSAqbm9kZSkKICAgICBOYW1lZE5vZGVNYXAgKm1hcCA9IGVsZW0tPmF0dHJpYnV0ZXModHJ1
ZSk7IC8vIHRydWUgZm9yIHJlYWQtb25seQogICAgIGlmICghbWFwKQogICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICByZXR1cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+bGVuZ3RoKCkgPT0gMSAm
JiBlbGVtLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBzdHlsZVNwYW5DbGFzc1N0cmluZygp
KTsKKyAgICByZXR1cm4gbWFwLT5pc0VtcHR5KCkgfHwgKG1hcC0+bGVuZ3RoKCkgPT0gMSAmJiBl
bGVtLT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmco
KSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnQ+IGNyZWF0ZUZvbnRFbGVtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKQEAgLTUwNyw3ICs1MDcsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21t
YW5kOjpyZW1vdmVFbWJlZGRpbmdVcFRvRW5jbG9zaW5nQmxvY2soTm9kZSogbm9kZSwgTm9kZSog
dW5zcAogICAgICAgICAvLyBhbmQgYWxsIG1hdGNoaW5nIHN0eWxlIHJ1bGVzIGluIG9yZGVyIHRv
IGRldGVybWluZSBob3cgdG8gYmVzdCBzZXQgdGhlIHVuaWNvZGUtYmlkaSBwcm9wZXJ0eSB0byAn
bm9ybWFsJy4KICAgICAgICAgLy8gRm9yIG5vdywgaXQgYXNzdW1lcyB0aGF0IGlmIHRoZSAnZGly
JyBhdHRyaWJ1dGUgaXMgcHJlc2VudCwgdGhlbiByZW1vdmluZyBpdCB3aWxsIHN1ZmZpY2UsIGFu
ZAogICAgICAgICAvLyBvdGhlcndpc2UgaXQgc2V0cyB0aGUgcHJvcGVydHkgaW4gdGhlIGlubGlu
ZSBzdHlsZSBkZWNsYXJhdGlvbi4KLSAgICAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShk
aXJBdHRyKSkgeworICAgICAgICBpZiAoZWxlbWVudC0+ZmFzdEhhc0F0dHJpYnV0ZShkaXJBdHRy
KSkgewogICAgICAgICAgICAgLy8gRklYTUU6IElmIHRoaXMgaXMgYSBCRE8gZWxlbWVudCwgd2Ug
c2hvdWxkIHByb2JhYmx5IGp1c3QgcmVtb3ZlIGl0IGlmIGl0IGhhcyBubwogICAgICAgICAgICAg
Ly8gb3RoZXIgYXR0cmlidXRlcywgbGlrZSB3ZSAoc2hvdWxkKSBkbyB3aXRoIEIgYW5kIEkgZWxl
bWVudHMuCiAgICAgICAgICAgICByZW1vdmVOb2RlQXR0cmlidXRlKGVsZW1lbnQsIGRpckF0dHIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmluZGV4IDZlMDNkNzcuLmI5
MzA3ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTc3Nyw3
ICs3NzcsNyBAQCBib29sIEVkaXRpbmdTdHlsZTo6ZWxlbWVudElzU3R5bGVkU3Bhbk9ySFRNTEVx
dWl2YWxlbnQoY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbgogICAgIGlmICghZWxlbWVudElzU3Bh
bk9yRWxlbWVudEVxdWl2YWxlbnQgJiYgIW1hdGNoZWRBdHRyaWJ1dGVzKQogICAgICAgICByZXR1
cm4gZmFsc2U7IC8vIGVsZW1lbnQgaXMgbm90IGEgc3BhbiwgYSBodG1sIGVsZW1lbnQgZXF1aXZh
bGVudCwgb3IgZm9udCBlbGVtZW50LgogICAgIAotICAgIGlmIChlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjpjbGFzc0F0dHIpID09IEFwcGxlU3R5bGVTcGFuQ2xhc3MpCisgICAgaWYg
KGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpjbGFzc0F0dHIpID09IEFwcGxl
U3R5bGVTcGFuQ2xhc3MpCiAgICAgICAgIG1hdGNoZWRBdHRyaWJ1dGVzKys7CiAKICAgICBpZiAo
ZWxlbWVudC0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6c3R5bGVBdHRyKSkgewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCA3
Njk3ZWFkLi5lNjU5MjcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtOTksMTQgKzk5LDE0IEBAIHN0YXRpYyBib29sIGlz
SW50ZXJjaGFuZ2VOZXdsaW5lTm9kZShjb25zdCBOb2RlICpub2RlKQogewogICAgIERFRklORV9T
VEFUSUNfTE9DQUwoU3RyaW5nLCBpbnRlcmNoYW5nZU5ld2xpbmVDbGFzc1N0cmluZywgKEFwcGxl
SW50ZXJjaGFuZ2VOZXdsaW5lKSk7CiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFt
ZShiclRhZykgJiYgCi0gICAgICAgICAgIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9k
ZSktPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGludGVyY2hhbmdlTmV3bGluZUNsYXNzU3Ry
aW5nOworICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50ICo+KG5vZGUpLT5mYXN0
R2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gaW50ZXJjaGFuZ2VOZXdsaW5lQ2xhc3NTdHJpbmc7
CiB9CiAKIHN0YXRpYyBib29sIGlzSW50ZXJjaGFuZ2VDb252ZXJ0ZWRTcGFjZVNwYW4oY29uc3Qg
Tm9kZSAqbm9kZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgY29udmVydGVk
U3BhY2VTcGFuQ2xhc3NTdHJpbmcsIChBcHBsZUNvbnZlcnRlZFNwYWNlKSk7CiAgICAgcmV0dXJu
IG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiAKLSAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3Qg
SFRNTEVsZW1lbnQgKj4obm9kZSktPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGNvbnZlcnRl
ZFNwYWNlU3BhbkNsYXNzU3RyaW5nOworICAgICAgICAgICBzdGF0aWNfY2FzdDxjb25zdCBIVE1M
RWxlbWVudCAqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGNvbnZlcnRl
ZFNwYWNlU3BhbkNsYXNzU3RyaW5nOwogfQogCiBzdGF0aWMgUG9zaXRpb24gcG9zaXRpb25Bdm9p
ZGluZ1ByZWNlZGluZ05vZGVzKFBvc2l0aW9uIHBvcykKQEAgLTQwOCw3ICs0MDgsNyBAQCBib29s
IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpzaG91bGRNZXJnZUVuZChib29sIHNlbGVjdGlvbkVu
ZFdhc0VuZE9mUGFyYWdyYXBoKQogCiBzdGF0aWMgYm9vbCBpc01haWxQYXN0ZUFzUXVvdGF0aW9u
Tm9kZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1Rh
Z05hbWUoYmxvY2txdW90ZVRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19j
YXN0PGNvbnN0IEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBw
bGVQYXN0ZUFzUXVvdGF0aW9uOworICAgIHJldHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUo
YmxvY2txdW90ZVRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNv
bnN0IEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IEFwcGxl
UGFzdGVBc1F1b3RhdGlvbjsKIH0KIAogLy8gV3JhcCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6cmVt
b3ZlTm9kZVByZXNlcnZpbmdDaGlsZHJlbigpIHNvIHdlIGNhbiB1cGRhdGUgdGhlIG5vZGVzIHdl
IHRyYWNrCkBAIC03OTUsNyArNzk1LDcgQEAgc3RhdGljIGJvb2wgaXNJbmxpbmVOb2RlV2l0aFN0
eWxlKGNvbnN0IE5vZGUqIG5vZGUpCiAgICAgLy8gV2UgY2FuIHNraXAgb3ZlciBlbGVtZW50cyB3
aG9zZSBjbGFzcyBhdHRyaWJ1dGUgaXMKICAgICAvLyBvbmUgb2Ygb3VyIGludGVybmFsIGNsYXNz
ZXMuCiAgICAgY29uc3QgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxjb25zdCBI
VE1MRWxlbWVudCo+KG5vZGUpOwotICAgIEF0b21pY1N0cmluZyBjbGFzc0F0dHJpYnV0ZVZhbHVl
ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cik7CisgICAgQXRvbWljU3RyaW5nIGNs
YXNzQXR0cmlidXRlVmFsdWUgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cik7
CiAgICAgaWYgKGNsYXNzQXR0cmlidXRlVmFsdWUgPT0gQXBwbGVUYWJTcGFuQ2xhc3MKICAgICAg
ICAgfHwgY2xhc3NBdHRyaWJ1dGVWYWx1ZSA9PSBBcHBsZUNvbnZlcnRlZFNwYWNlCiAgICAgICAg
IHx8IGNsYXNzQXR0cmlidXRlVmFsdWUgPT0gQXBwbGVQYXN0ZUFzUXVvdGF0aW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKaW5kZXggZmMxMzVm
Ny4uMzlmZjljYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1l
bnRDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENv
bW1hbmQuY3BwCkBAIC05NCw4ICs5NCw4IEBAIHZvaWQgU3BsaXRFbGVtZW50Q29tbWFuZDo6ZG9V
bmFwcGx5KCkKICAgICAgICAgbV9lbGVtZW50Mi0+aW5zZXJ0QmVmb3JlKGNoaWxkcmVuW2ldLmdl
dCgpLCByZWZDaGlsZC5nZXQoKSwgZWMpOwogCiAgICAgLy8gUmVjb3ZlciB0aGUgaWQgYXR0cmli
dXRlIG9mIHRoZSBvcmlnaW5hbCBlbGVtZW50LgotICAgIGlmIChtX2VsZW1lbnQxLT5oYXNBdHRy
aWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKQotICAgICAgICBtX2VsZW1lbnQyLT5zZXRBdHRyaWJ1
dGUoSFRNTE5hbWVzOjppZEF0dHIsIG1fZWxlbWVudDEtPmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6
OmlkQXR0cikpOworICAgIGlmIChtX2VsZW1lbnQxLT5mYXN0SGFzQXR0cmlidXRlKEhUTUxOYW1l
czo6aWRBdHRyKSkKKyAgICAgICAgbV9lbGVtZW50Mi0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
aWRBdHRyLCBtX2VsZW1lbnQxLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSk7
CiAKICAgICBtX2VsZW1lbnQxLT5yZW1vdmUoZWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2h0
bWxlZGl0aW5nLmNwcAppbmRleCA4MzFkZTgwLi4yODllNTliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2h0bWxlZGl0aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2h0bWxlZGl0aW5nLmNwcApAQCAtODQ0LDcgKzg0NCw3IEBAIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nCiAKIGJvb2wgaXNUYWJTcGFuTm9kZShjb25zdCBOb2RlICpub2RlKQogewotICAgIHJl
dHVybiBub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoc3BhblRhZykgJiYgbm9kZS0+aXNFbGVtZW50
Tm9kZSgpICYmIHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpID09IEFwcGxlVGFiU3BhbkNsYXNzOworICAgIHJldHVybiBub2RlICYmIG5v
ZGUtPmhhc1RhZ05hbWUoc3BhblRhZykgJiYgbm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRp
Y19jYXN0PGNvbnN0IEVsZW1lbnQgKj4obm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoY2xhc3NBdHRy
KSA9PSBBcHBsZVRhYlNwYW5DbGFzczsKIH0KIAogYm9vbCBpc1RhYlNwYW5UZXh0Tm9kZShjb25z
dCBOb2RlICpub2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCmluZGV4IDk4MDhjNjAuLmYx
OWZlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKQEAgLTUxMiw3ICs1MTIsNyBAQCBz
dGF0aWMgYm9vbCBpc0VsZW1lbnRQcmVzZW50YXRpb25hbChjb25zdCBOb2RlKiBub2RlKQogCiBz
dGF0aWMgYm9vbCBzaG91bGRJbmNsdWRlV3JhcHBlckZvckZ1bGx5U2VsZWN0ZWRSb290KE5vZGUq
IGZ1bGx5U2VsZWN0ZWRSb290KQogewotICAgIGlmIChmdWxseVNlbGVjdGVkUm9vdC0+aXNFbGVt
ZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihmdWxseVNlbGVjdGVkUm9vdCktPmhh
c0F0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpCisgICAgaWYgKGZ1bGx5U2VsZWN0ZWRSb290LT5p
c0VsZW1lbnROb2RlKCkgJiYgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZ1bGx5U2VsZWN0ZWRSb290
KS0+ZmFzdEhhc0F0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpCiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIAogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IHN0eWxlID0gc3R5bGVGcm9tTWF0Y2hl
ZFJ1bGVzQW5kSW5saW5lRGVjbChmdWxseVNlbGVjdGVkUm9vdCk7CkBAIC02NDIsOCArNjQyLDgg
QEAgU3RyaW5nIGNyZWF0ZU1hcmt1cChjb25zdCBSYW5nZSogcmFuZ2UsIFZlY3RvcjxOb2RlKj4q
IG5vZGVzLCBFQW5ub3RhdGVGb3JJbnRlcmMKICAgICAgICAgICAgICAgICAvLyBCcmluZyB0aGUg
YmFja2dyb3VuZCBhdHRyaWJ1dGUgb3ZlciwgYnV0IG5vdCBhcyBhbiBhdHRyaWJ1dGUgYmVjYXVz
ZSBhIGJhY2tncm91bmQgYXR0cmlidXRlIG9uIGEgZGl2CiAgICAgICAgICAgICAgICAgLy8gYXBw
ZWFycyB0byBoYXZlIG5vIGVmZmVjdC4KICAgICAgICAgICAgICAgICBpZiAoKCFmdWxseVNlbGVj
dGVkUm9vdFN0eWxlIHx8ICFmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpIHx8ICFmdWxs
eVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5QmFja2dyb3VuZEltYWdlKSkKLSAgICAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8
RWxlbWVudCo+KGZ1bGx5U2VsZWN0ZWRSb290KS0+aGFzQXR0cmlidXRlKGJhY2tncm91bmRBdHRy
KSkKLSAgICAgICAgICAgICAgICAgICAgZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKS0+
c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICJ1cmwoJyIgKyBzdGF0aWNf
Y2FzdDxFbGVtZW50Kj4oZnVsbHlTZWxlY3RlZFJvb3QpLT5nZXRBdHRyaWJ1dGUoYmFja2dyb3Vu
ZEF0dHIpICsgIicpIik7CisgICAgICAgICAgICAgICAgICAgICYmIHN0YXRpY19jYXN0PEVsZW1l
bnQqPihmdWxseVNlbGVjdGVkUm9vdCktPmZhc3RIYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIp
KQorICAgICAgICAgICAgICAgICAgICBmdWxseVNlbGVjdGVkUm9vdFN0eWxlLT5zdHlsZSgpLT5z
ZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgInVybCgnIiArIHN0YXRpY19j
YXN0PEVsZW1lbnQqPihmdWxseVNlbGVjdGVkUm9vdCktPmZhc3RHZXRBdHRyaWJ1dGUoYmFja2dy
b3VuZEF0dHIpICsgIicpIik7CiAKICAgICAgICAgICAgICAgICBpZiAoZnVsbHlTZWxlY3RlZFJv
b3RTdHlsZS0+c3R5bGUoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBSZXNldCB0aGUgQ1NT
IHByb3BlcnRpZXMgdG8gYXZvaWQgYW4gYXNzZXJ0aW9uIGVycm9yIGluIGFkZFN0eWxlTWFya3Vw
KCkuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCmluZGV4IGUwYzI0
NDkuLjllNTk4YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3Bw
CkBAIC0yNTEsMTcgKzI1MSwxNyBAQCBib29sIEhUTUxBbmNob3JFbGVtZW50OjpjYW5TdGFydFNl
bGVjdGlvbigpIGNvbnN0CiBib29sIEhUTUxBbmNob3JFbGVtZW50OjpkcmFnZ2FibGUoKSBjb25z
dAogewogICAgIC8vIFNob3VsZCBiZSBkcmFnZ2FibGUgaWYgd2UgaGF2ZSBhbiBocmVmIGF0dHJp
YnV0ZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKGRyYWdn
YWJsZUF0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmli
dXRlKGRyYWdnYWJsZUF0dHIpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgInRy
dWUiKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZh
bHVlLCAiZmFsc2UiKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBoYXNBdHRy
aWJ1dGUoaHJlZkF0dHIpOworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGhyZWZBdHRyKTsK
IH0KIAogS1VSTCBIVE1MQW5jaG9yRWxlbWVudDo6aHJlZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNl
cyhnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBs
ZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhmYXN0R2V0QXR0cmlidXRl
KGhyZWZBdHRyKSkpOwogfQogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRIcmVmKGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUpCkBAIC0yODUsNyArMjg1LDcgQEAgdm9pZCBIVE1MQW5jaG9y
RWxlbWVudDo6c2V0UmVsKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIGNvbnN0IEF0b21pY1N0cmlu
ZyYgSFRNTEFuY2hvckVsZW1lbnQ6Om5hbWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUobmFtZUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKG5hbWVBdHRyKTsK
IH0KIAogc2hvcnQgSFRNTEFuY2hvckVsZW1lbnQ6OnRhYkluZGV4KCkgY29uc3QKQEAgLTI5Niw3
ICsyOTYsNyBAQCBzaG9ydCBIVE1MQW5jaG9yRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdAogCiBT
dHJpbmcgSFRNTEFuY2hvckVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0YXJn
ZXRBdHRyKTsKIH0KIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpoYXNoKCkgY29uc3QKQEAg
LTQ4MiwxMCArNDgyLDEwIEBAIGJvb2wgSFRNTEFuY2hvckVsZW1lbnQ6OmlzTGl2ZUxpbmsoKSBj
b25zdAogCiB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZW5kUGluZ3MoY29uc3QgS1VSTCYgZGVz
dGluYXRpb25VUkwpCiB7Ci0gICAgaWYgKCFoYXNBdHRyaWJ1dGUocGluZ0F0dHIpIHx8ICFkb2N1
bWVudCgpLT5zZXR0aW5ncygpLT5oeXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoKSkKKyAgICBpZiAo
IWZhc3RIYXNBdHRyaWJ1dGUocGluZ0F0dHIpIHx8ICFkb2N1bWVudCgpLT5zZXR0aW5ncygpLT5o
eXBlcmxpbmtBdWRpdGluZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgU3BhY2VT
cGxpdFN0cmluZyBwaW5nVVJMcyhnZXRBdHRyaWJ1dGUocGluZ0F0dHIpLCB0cnVlKTsKKyAgICBT
cGFjZVNwbGl0U3RyaW5nIHBpbmdVUkxzKGZhc3RHZXRBdHRyaWJ1dGUocGluZ0F0dHIpLCB0cnVl
KTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGluZ1VSTHMuc2l6ZSgpOyBpKyspCiAg
ICAgICAgIFBpbmdMb2FkZXI6OnNlbmRQaW5nKGRvY3VtZW50KCktPmZyYW1lKCksIGRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHBpbmdVUkxzW2ldKSwgZGVzdGluYXRpb25VUkwpOwogfQpAQCAtNTAz
LDcgKzUwMyw3IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OmhhbmRsZUNsaWNrKEV2ZW50KiBl
dmVudCkKICAgICBLVVJMIGt1cmwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpOwogCiAj
aWYgRU5BQkxFKERPV05MT0FEX0FUVFJJQlVURSkKLSAgICBpZiAoaGFzQXR0cmlidXRlKGRvd25s
b2FkQXR0cikpIHsKKyAgICBpZiAoZmFzdEhhc0F0dHJpYnV0ZShkb3dubG9hZEF0dHIpKSB7CiAg
ICAgICAgIFJlc291cmNlUmVxdWVzdCByZXF1ZXN0KGt1cmwpOwogCiAgICAgICAgIGlmICghaGFz
UmVsKFJlbGF0aW9uTm9SZWZlcnJlcikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXBwbGV0
RWxlbWVudC5jcHAKaW5kZXggMWJhMzQ0OC4uYTlmYWIyMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MQXBwbGV0RWxlbWVudC5jcHAKQEAgLTExMiwyMiArMTEyLDIyIEBAIFJlbmRlck9iamVj
dCogSFRNTEFwcGxldEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVy
U3R5bGUqIHN0eWxlCiAgICAgaWYgKGNhbkVtYmVkSmF2YSgpKSB7CiAgICAgICAgIEhhc2hNYXA8
U3RyaW5nLCBTdHJpbmc+IGFyZ3M7CiAKLSAgICAgICAgYXJncy5zZXQoImNvZGUiLCBnZXRBdHRy
aWJ1dGUoY29kZUF0dHIpKTsKKyAgICAgICAgYXJncy5zZXQoImNvZGUiLCBmYXN0R2V0QXR0cmli
dXRlKGNvZGVBdHRyKSk7CiAKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9
IGdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGNvZGVCYXNlID0gZmFzdEdldEF0dHJpYnV0ZShjb2RlYmFzZUF0dHIpOwogICAgICAgICBpZiAo
IWNvZGVCYXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQoImNvZGVCYXNlIiwgY29k
ZUJhc2UpOwogCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSA9IGRvY3VtZW50KCkt
PmlzSFRNTERvY3VtZW50KCkgPyBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpIDogZ2V0SWRBdHRyaWJ1
dGUoKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lID0gZG9jdW1lbnQoKS0+aXNI
VE1MRG9jdW1lbnQoKSA/IGZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpIDogZ2V0SWRBdHRyaWJ1
dGUoKTsKICAgICAgICAgaWYgKCFuYW1lLmlzTnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQo
Im5hbWUiLCBuYW1lKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNoaXZlID0gZ2V0
QXR0cmlidXRlKGFyY2hpdmVBdHRyKTsKKyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmNo
aXZlID0gZmFzdEdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7CiAgICAgICAgIGlmICghYXJjaGl2
ZS5pc051bGwoKSkKICAgICAgICAgICAgIGFyZ3Muc2V0KCJhcmNoaXZlIiwgYXJjaGl2ZSk7CiAK
ICAgICAgICAgYXJncy5zZXQoImJhc2VVUkwiLCBkb2N1bWVudCgpLT5iYXNlVVJMKCkuc3RyaW5n
KCkpOwogCi0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWF5U2NyaXB0ID0gZ2V0QXR0cmli
dXRlKG1heXNjcmlwdEF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1heVNjcmlw
dCA9IGZhc3RHZXRBdHRyaWJ1dGUobWF5c2NyaXB0QXR0cik7CiAgICAgICAgIGlmICghbWF5U2Ny
aXB0LmlzTnVsbCgpKQogICAgICAgICAgICAgYXJncy5zZXQoIm1heVNjcmlwdCIsIG1heVNjcmlw
dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFyZWFFbGVtZW50LmNwcAppbmRleCBjMmU4ZDZl
Li4wMDYyZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCkBAIC0y
NDMsNyArMjQzLDcgQEAgYm9vbCBIVE1MQXJlYUVsZW1lbnQ6OnN1cHBvcnRzRm9jdXMoKSBjb25z
dAogCiBTdHJpbmcgSFRNTEFyZWFFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAogewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
dGFyZ2V0QXR0cik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEJvZHlFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cAppbmRleCAwMzhjNTZhLi5mMzQ2N2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVs
ZW1lbnQuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgYm9vbCBIVE1MQm9keUVsZW1lbnQ6OnN1cHBv
cnRzRm9jdXMoKSBjb25zdAogCiBTdHJpbmcgSFRNTEJvZHlFbGVtZW50OjphTGluaygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbGlua0F0dHIpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKGFsaW5rQXR0cik7CiB9CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRB
TGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMjI2LDcgKzIyNiw3IEBAIHZvaWQgSFRNTEJv
ZHlFbGVtZW50OjpzZXRBTGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBTdHJpbmcgSFRNTEJv
ZHlFbGVtZW50OjpiZ0NvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGJn
Y29sb3JBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CiB9
CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUp
CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldEJnQ29sb3IoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIAogU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6bGluaygpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShsaW5rQXR0cik7CisgICAgcmV0dXJuIGZhc3RH
ZXRBdHRyaWJ1dGUobGlua0F0dHIpOwogfQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0TGlu
ayhjb25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMjQ2LDcgKzI0Niw3IEBAIHZvaWQgSFRNTEJvZHlF
bGVtZW50OjpzZXRMaW5rKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIFN0cmluZyBIVE1MQm9keUVs
ZW1lbnQ6OnRleHQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGV4dEF0dHIp
OworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHRleHRBdHRyKTsKIH0KIAogdm9pZCBIVE1M
Qm9keUVsZW1lbnQ6OnNldFRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTI1Niw3ICsyNTYs
NyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0VGV4dChjb25zdCBTdHJpbmcmIHZhbHVlKQog
CiBTdHJpbmcgSFRNTEJvZHlFbGVtZW50Ojp2TGluaygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZSh2bGlua0F0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHZsaW5r
QXR0cik7CiB9CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRWTGluayhjb25zdCBTdHJpbmcm
IHZhbHVlKQpAQCAtMzQyLDcgKzM0Miw3IEBAIHZvaWQgSFRNTEJvZHlFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7CiAg
ICAgSFRNTEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxzKTsKIAotICAg
IGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJp
YnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSkpOwog
fQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6ZGlkTW92ZVRvTmV3T3duZXJEb2N1bWVudCgpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCmluZGV4IDY4Njc5MGQuLjY5
OTEwODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCkBAIC0x
NzYsNyArMTc2LDcgQEAgYm9vbCBIVE1MQnV0dG9uRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0
cmlidXRlKiBhdHRyKSBjb25zdAogCiBTdHJpbmcgSFRNTEJ1dHRvbkVsZW1lbnQ6OnZhbHVlKCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbHVlQXR0cik7CisgICAgcmV0dXJu
IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKIH0KIAogYm9vbCBIVE1MQnV0dG9uRWxlbWVu
dDo6cmVjYWxjV2lsbFZhbGlkYXRlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAKaW5kZXggNGMzYWQxMS4uZjI1ZTVlYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKQEAgLTIzMCwxMCArMjMwLDEwIEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogICAgIGJvb2wgb2s7CiAgICAgYm9vbCBoYWRJbWFn
ZUJ1ZmZlciA9IGhhc0NyZWF0ZWRJbWFnZUJ1ZmZlcigpOwotICAgIGludCB3ID0gZ2V0QXR0cmli
dXRlKHdpZHRoQXR0cikudG9JbnQoJm9rKTsKKyAgICBpbnQgdyA9IGZhc3RHZXRBdHRyaWJ1dGUo
d2lkdGhBdHRyKS50b0ludCgmb2spOwogICAgIGlmICghb2sgfHwgdyA8IDApCiAgICAgICAgIHcg
PSBEZWZhdWx0V2lkdGg7Ci0gICAgaW50IGggPSBnZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9J
bnQoJm9rKTsKKyAgICBpbnQgaCA9IGZhc3RHZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQo
Jm9rKTsKICAgICBpZiAoIW9rIHx8IGggPCAwKQogICAgICAgICBoID0gRGVmYXVsdEhlaWdodDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAppbmRleCA3MmViZjU1Li44NmIy
YTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDb2xsZWN0aW9uLmNwcApAQCAtMjc3LDcgKzI3
Nyw3IEBAIGJvb2wgSFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKEVsZW1lbnQqIGVs
ZW1lbnQsIGJvb2wgY2hlY2tOYW1lLCBjb25zdCBBCiAgICAgICAgICAgZS0+aGFzTG9jYWxOYW1l
KHNlbGVjdFRhZykpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZS0+Z2V0
QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBuYW1lICYmIGUtPmdldElkQXR0cmlidXRlKCkgIT0gbmFt
ZTsKKyAgICByZXR1cm4gZS0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBl
LT5nZXRJZEF0dHJpYnV0ZSgpICE9IG5hbWU7CiB9CiAKIE5vZGUqIEhUTUxDb2xsZWN0aW9uOjpu
YW1lZEl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdApAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgSFRNTENvbGxlY3Rpb246OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgSFRNTEVsZW1lbnQqIGUgPSB0b0hUTUxFbGVtZW50KGVs
ZW1lbnQpOwogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGUtPmdldElk
QXR0cmlidXRlKCk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBl
LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5h
bWVBdHRyVmFsID0gZS0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICgh
aWRBdHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gYWRkIHRvIGlkIGNhY2hlCiAg
ICAgICAgICAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFZlY3RvciA9IG1faW5mby0+aWRDYWNoZS5n
ZXQoaWRBdHRyVmFsLmltcGwoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxEb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAKaW5k
ZXggYjY3ZWFjZC4uZDMzNTFhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RG9jdW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcApA
QCAtMTA5LDcgKzEwOSw3IEBAIFN0cmluZyBIVE1MRG9jdW1lbnQ6OmRpcigpCiAgICAgSFRNTEVs
ZW1lbnQqIGIgPSBib2R5KCk7CiAgICAgaWYgKCFiKQogICAgICAgICByZXR1cm4gU3RyaW5nKCk7
Ci0gICAgcmV0dXJuIGItPmdldEF0dHJpYnV0ZShkaXJBdHRyKTsKKyAgICByZXR1cm4gYi0+ZmFz
dEdldEF0dHJpYnV0ZShkaXJBdHRyKTsKIH0KIAogdm9pZCBIVE1MRG9jdW1lbnQ6OnNldERpcihj
b25zdCBTdHJpbmcmIHZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAppbmRleCAw
MDgyMzJhLi5lZjU0NzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcApAQCAtMTY0
LDcgKzE2NCw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJp
YnV0ZSogYXR0cikKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBoaWRkZW5BdHRyKSB7
CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5RGlzcGxheSwgQ1NTVmFs
dWVOb25lKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB0YWJpbmRleEF0dHIpIHsK
LSAgICAgICAgaW5kZXhzdHJpbmcgPSBnZXRBdHRyaWJ1dGUodGFiaW5kZXhBdHRyKTsKKyAgICAg
ICAgaW5kZXhzdHJpbmcgPSBmYXN0R2V0QXR0cmlidXRlKHRhYmluZGV4QXR0cik7CiAgICAgICAg
IGludCB0YWJpbmRleCA9IDA7CiAgICAgICAgIGlmICghaW5kZXhzdHJpbmcubGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgIGNsZWFyVGFiSW5kZXhFeHBsaWNpdGx5KCk7CkBAIC03MzIsNyArNzMyLDcg
QEAgdm9pZCBIVE1MRWxlbWVudDo6c2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYgZW5h
YmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIGJvb2wgSFRNTEVsZW1lbnQ6OmRyYWdnYWJsZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShkcmFn
Z2FibGVBdHRyKSwgInRydWUiKTsKKyAgICByZXR1cm4gZXF1YWxJZ25vcmluZ0Nhc2UoZmFzdEdl
dEF0dHJpYnV0ZShkcmFnZ2FibGVBdHRyKSwgInRydWUiKTsKIH0KIAogdm9pZCBIVE1MRWxlbWVu
dDo6c2V0RHJhZ2dhYmxlKGJvb2wgdmFsdWUpCkBAIC03NzEsNyArNzcxLDcgQEAgdm9pZCBIVE1M
RWxlbWVudDo6YWNjZXNzS2V5QWN0aW9uKGJvb2wgc2VuZFRvQW55RWxlbWVudCkKIAogU3RyaW5n
IEhUTUxFbGVtZW50Ojp0aXRsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0
aXRsZUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiB9CiAK
IHNob3J0IEhUTUxFbGVtZW50Ojp0YWJJbmRleCgpIGNvbnN0CkBAIC04NDEsNyArODQxLDcgQEAg
c3RhdGljIHZvaWQgc2V0SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShOb2RlKiBmaXJzdE5vZGUs
IGJvb2wgZmxhZywgTm9kZSogbGFzdE4KICAgICAgICAgaWYgKG5vZGUtPnNlbGZPckFuY2VzdG9y
SGFzRGlyQXV0b0F0dHJpYnV0ZSgpID09IGZsYWcpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAg
ICAgICAgaWYgKG5vZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhhc0F0
dHJpYnV0ZShkaXJBdHRyKSkgeworICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpICYm
IHRvRWxlbWVudChub2RlKS0+ZmFzdEhhc0F0dHJpYnV0ZShkaXJBdHRyKSkgewogICAgICAgICAg
ICAgaWYgKG5vZGUgPT0gbGFzdE5vZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoZmlyc3ROb2RlKTsKQEAgLTg2
Miw3ICs4NjIsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpjaGlsZHJlbkNoYW5nZWQoYm9vbCBjaGFu
Z2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwgTm9kZQogCiBUZXh0RGlyZWN0aW9uIEhU
TUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eUlmaGFzRGlyQXV0b0F0dHJpYnV0ZShib29sJiBpc0F1
dG8pIGNvbnN0CiB7Ci0gICAgaWYgKCEoc2VsZk9yQW5jZXN0b3JIYXNEaXJBdXRvQXR0cmlidXRl
KCkgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGRpckF0dHIpLCAiYXV0byIpKSkg
eworICAgIGlmICghKHNlbGZPckFuY2VzdG9ySGFzRGlyQXV0b0F0dHJpYnV0ZSgpICYmIGVxdWFs
SWdub3JpbmdDYXNlKGZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0ciksICJhdXRvIikpKSB7CiAgICAg
ICAgIGlzQXV0byA9IGZhbHNlOwogICAgICAgICByZXR1cm4gTFRSOwogICAgIH0KQEAgLTkzNSw3
ICs5MzUsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVk
QWZ0ZXJDaGlsZEF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudAogICAgIGlmIChyZW5kZXJlcigpICYm
IHJlbmRlcmVyKCktPnN0eWxlKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+ZGlyZWN0aW9uKCkg
IT0gdGV4dERpcmVjdGlvbikgewogICAgICAgICBFbGVtZW50KiBlbGVtZW50VG9BZGp1c3QgPSB0
aGlzOwogICAgICAgICBmb3IgKDsgZWxlbWVudFRvQWRqdXN0OyBlbGVtZW50VG9BZGp1c3QgPSBl
bGVtZW50VG9BZGp1c3QtPnBhcmVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKGVsZW1l
bnRUb0FkanVzdC0+aGFzQXR0cmlidXRlKGRpckF0dHIpKSB7CisgICAgICAgICAgICBpZiAoZWxl
bWVudFRvQWRqdXN0LT5mYXN0SGFzQXR0cmlidXRlKGRpckF0dHIpKSB7CiAgICAgICAgICAgICAg
ICAgZWxlbWVudFRvQWRqdXN0LT5zZXROZWVkc1N0eWxlUmVjYWxjKCk7CiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtOTU3LDcgKzk1Nyw3IEBAIHZvaWQgSFRNTEVs
ZW1lbnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZChO
b2RlKiBiZWZvcmVDCiAgICAgaWYgKCghZG9jdW1lbnQoKSB8fCBkb2N1bWVudCgpLT5yZW5kZXJl
cigpKSAmJiBjaGlsZENvdW50RGVsdGEgPCAwKSB7CiAgICAgICAgIE5vZGUqIG5vZGUgPSBiZWZv
cmVDaGFuZ2UgPyBiZWZvcmVDaGFuZ2UtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKSA6IDA7CiAgICAg
ICAgIGZvciAoaW50IGNvdW50ZXIgPSAwOyBub2RlICYmIGNvdW50ZXIgPCBjaGlsZENvdW50RGVs
dGE7IGNvdW50ZXIrKywgbm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICAgICAgaWYgKG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiB0b0VsZW1lbnQobm9kZSktPmhh
c0F0dHJpYnV0ZShkaXJBdHRyKSkKKyAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2Rl
KCkgJiYgdG9FbGVtZW50KG5vZGUpLT5mYXN0SGFzQXR0cmlidXRlKGRpckF0dHIpKQogICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vy
c2l2ZWx5KG5vZGUsIGZhbHNlKTsKQEAgLTk2OCwxMyArOTY4LDEzIEBAIHZvaWQgSFRNTEVsZW1l
bnQ6OmFkanVzdERpcmVjdGlvbmFsaXR5SWZOZWVkZWRBZnRlckNoaWxkcmVuQ2hhbmdlZChOb2Rl
KiBiZWZvcmVDCiAgICAgICAgIHJldHVybjsKIAogICAgIE5vZGUqIG9sZE1hcmtlZE5vZGUgPSBi
ZWZvcmVDaGFuZ2UgPyBiZWZvcmVDaGFuZ2UtPnRyYXZlcnNlTmV4dFNpYmxpbmcoKSA6IDA7Ci0g
ICAgd2hpbGUgKG9sZE1hcmtlZE5vZGUgJiYgb2xkTWFya2VkTm9kZS0+aXNIVE1MRWxlbWVudCgp
ICYmIHRvSFRNTEVsZW1lbnQob2xkTWFya2VkTm9kZSktPmhhc0F0dHJpYnV0ZShkaXJBdHRyKSkK
KyAgICB3aGlsZSAob2xkTWFya2VkTm9kZSAmJiBvbGRNYXJrZWROb2RlLT5pc0hUTUxFbGVtZW50
KCkgJiYgdG9IVE1MRWxlbWVudChvbGRNYXJrZWROb2RlKS0+ZmFzdEhhc0F0dHJpYnV0ZShkaXJB
dHRyKSkKICAgICAgICAgb2xkTWFya2VkTm9kZSA9IG9sZE1hcmtlZE5vZGUtPnRyYXZlcnNlTmV4
dFNpYmxpbmcodGhpcyk7CiAgICAgaWYgKG9sZE1hcmtlZE5vZGUpCiAgICAgICAgIHNldEhhc0Rp
ckF1dG9GbGFnUmVjdXJzaXZlbHkob2xkTWFya2VkTm9kZSwgZmFsc2UpOwogCiAgICAgZm9yIChF
bGVtZW50KiBlbGVtZW50VG9BZGp1c3QgPSB0aGlzOyBlbGVtZW50VG9BZGp1c3Q7IGVsZW1lbnRU
b0FkanVzdCA9IGVsZW1lbnRUb0FkanVzdC0+cGFyZW50RWxlbWVudCgpKSB7Ci0gICAgICAgIGlm
IChlbGVtZW50VG9BZGp1c3QtPmlzSFRNTEVsZW1lbnQoKSAmJiBlbGVtZW50VG9BZGp1c3QtPmhh
c0F0dHJpYnV0ZShkaXJBdHRyKSkgeworICAgICAgICBpZiAoZWxlbWVudFRvQWRqdXN0LT5pc0hU
TUxFbGVtZW50KCkgJiYgZWxlbWVudFRvQWRqdXN0LT5mYXN0SGFzQXR0cmlidXRlKGRpckF0dHIp
KSB7CiAgICAgICAgICAgICB0b0hUTUxFbGVtZW50KGVsZW1lbnRUb0FkanVzdCktPmNhbGN1bGF0
ZUFuZEFkanVzdERpcmVjdGlvbmFsaXR5KCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCmluZGV4IGNkNzI4YjUu
LmM2NjVhYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVtYmVkRWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50LmNwcApAQCAt
MTgwLDcgKzE4MCw3IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6dXBkYXRlV2lkZ2V0KFBsdWdp
bkNyZWF0aW9uT3B0aW9uIHBsdWdpbkNyZWF0aW9uT3B0aW9uKQogCiAgICAgU3ViZnJhbWVMb2Fk
ZXIqIGxvYWRlciA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5zdWJmcmFtZUxvYWRl
cigpOwogICAgIC8vIEZJWE1FOiBiZWZvcmVMb2FkIGNvdWxkIGhhdmUgZGV0YWNoZWQgdGhlIHJl
bmRlcmVyISAgSnVzdCBsaWtlIGluIHRoZSA8b2JqZWN0PiBjYXNlIGFib3ZlLgotICAgIGxvYWRl
ci0+cmVxdWVzdE9iamVjdCh0aGlzLCBtX3VybCwgZ2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgbV9z
ZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOworICAgIGxvYWRlci0+cmVxdWVz
dE9iamVjdCh0aGlzLCBtX3VybCwgZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0ciksIG1fc2Vydmlj
ZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsKIH0KIAogYm9vbCBIVE1MRW1iZWRFbGVt
ZW50OjpyZW5kZXJlcklzTmVlZGVkKGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
KQpAQCAtMjIzLDggKzIyMyw4IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
RG9jdW1lbnQoKQogICAgIGlmIChkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKQogICAgICAg
ICBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnQqPihkb2N1bWVudCgpKS0+YWRkTmFtZWRJdGVtKG1f
bmFtZSk7CiAKLSAgICBTdHJpbmcgd2lkdGggPSBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKTsKLSAg
ICBTdHJpbmcgaGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOworICAgIFN0cmluZyB3
aWR0aCA9IGZhc3RHZXRBdHRyaWJ1dGUod2lkdGhBdHRyKTsKKyAgICBTdHJpbmcgaGVpZ2h0ID0g
ZmFzdEdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKTsKICAgICBpZiAoIXdpZHRoLmlzRW1wdHkoKSB8
fCAhaGVpZ2h0LmlzRW1wdHkoKSkgewogICAgICAgICBOb2RlKiBuID0gcGFyZW50Tm9kZSgpOwog
ICAgICAgICB3aGlsZSAobiAmJiAhbi0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQpAQCAtMjczLDcg
KzI3Myw3IEBAIHZvaWQgSFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVV
UkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zCiB7CiAgICAgSFRNTFBsdWdJbkltYWdl
RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3Vi
cmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNy
Y0F0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHAKaW5kZXggNGY1MmI5ZC4uZTRkNDc4NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db2xsZWN0aW9uLmNwcApAQCAtMTEyLDcgKzEx
Miw3IEBAIEVsZW1lbnQqIEhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRGb3JtSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGZvcm0tPm1fYXNzb2NpYXRlZEVsZW1lbnRzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIEZv
cm1Bc3NvY2lhdGVkRWxlbWVudCogYXNzb2NpYXRlZEVsZW1lbnQgPSBmb3JtLT5tX2Fzc29jaWF0
ZWRFbGVtZW50c1tpXTsKICAgICAgICAgSFRNTEVsZW1lbnQqIGVsZW1lbnQgPSB0b0hUTUxFbGVt
ZW50KGFzc29jaWF0ZWRFbGVtZW50KTsKLSAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpICYmIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFt
ZSkgeworICAgICAgICBpZiAoYXNzb2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkgJiYg
ZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewogICAgICAgICAg
ICAgZm91bmRJbnB1dEVsZW1lbnRzID0gdHJ1ZTsKICAgICAgICAgICAgIGlmICghZHVwbGljYXRl
TnVtYmVyKQogICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50OwpAQCAtMTIzLDcgKzEyMyw3
IEBAIEVsZW1lbnQqIEhUTUxGb3JtQ29sbGVjdGlvbjo6Z2V0TmFtZWRGb3JtSXRlbShjb25zdCBR
dWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgY29uCiAgICAgaWYgKCFmb3VuZElucHV0RWxlbWVudHMp
IHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPm1faW1hZ2VFbGVtZW50
cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogZWxlbWVudCA9
IGZvcm0tPm1faW1hZ2VFbGVtZW50c1tpXTsKLSAgICAgICAgICAgIGlmIChlbGVtZW50LT5nZXRB
dHRyaWJ1dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgICAgaWYg
KCFkdXBsaWNhdGVOdW1iZXIpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50Owog
ICAgICAgICAgICAgICAgIC0tZHVwbGljYXRlTnVtYmVyOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHZv
aWQgSFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUoKSBjb25zdAogICAgICAgICBp
ZiAoYXNzb2NpYXRlZEVsZW1lbnQtPmlzRW51bWVyYXRhYmxlKCkpIHsKICAgICAgICAgICAgIEhU
TUxFbGVtZW50KiBlbGVtZW50ID0gdG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7CiAg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElk
QXR0cmlidXRlKCk7Ci0gICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFs
ID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKG5hbWVB
dHRyKTsKICAgICAgICAgICAgIGlmICghaWRBdHRyVmFsLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgICAgIC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgICAgIFZlY3RvcjxFbGVtZW50
Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1wbCgpKTsKQEAg
LTIyMyw3ICsyMjMsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hl
KCkgY29uc3QKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZi0+bV9pbWFnZUVsZW1lbnRz
LnNpemUoKTsgKytpKSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGVsZW1lbnQgPSBmLT5t
X2ltYWdlRWxlbWVudHNbaV07CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaWRBdHRyVmFs
ID0gZWxlbWVudC0+Z2V0SWRBdHRyaWJ1dGUoKTsKLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lQXR0clZhbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CisgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmli
dXRlKG5hbWVBdHRyKTsKICAgICAgICAgaWYgKCFpZEF0dHJWYWwuaXNFbXB0eSgpICYmICFmb3Vu
ZElucHV0RWxlbWVudHMuY29udGFpbnMoaWRBdHRyVmFsLmltcGwoKSkpIHsKICAgICAgICAgICAg
IC8vIGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRWZWN0
b3IgPSBpbmZvKCktPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggZmZhZmJhNS4uODEw
NjFkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQu
Y3BwCkBAIC0yNDUsNyArMjQ1LDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpzZXRE
aXNhYmxlZChib29sIGIpCiAKIGJvb2wgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6YXV0b2ZvY3Vz
KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOworICAg
IHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGF1dG9mb2N1c0F0dHIpOwogfQogCiBib29sIEhUTUxG
b3JtQ29udHJvbEVsZW1lbnQ6OnJlcXVpcmVkKCkgY29uc3QKQEAgLTM2MCw3ICszNjAsNyBAQCB2
b2lkIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OnVwZGF0ZVZpc2libGVWYWxpZGF0aW9uTWVzc2Fn
ZSgpCiAgICAgICAgIC8vIEhUTUw1IHNwZWNpZmljYXRpb24gZG9lc24ndCBhc2sgVUEgdG8gc2hv
dyB0aGUgdGl0bGUgYXR0cmlidXRlIHZhbHVlCiAgICAgICAgIC8vIHdpdGggdGhlIHZhbGlkYXRp
b25NZXNzYWdlLiAgSG93ZXZlciwgdGhpcyBiZWhhdmlvciBpcyBzYW1lIGFzIE9wZXJhCiAgICAg
ICAgIC8vIGFuZCB0aGUgc3BlY2lmaWNhdGlvbiBkZXNjcmliZXMgc3VjaCBiZWhhdmlvciBhcyBh
biBleGFtcGxlLgotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHRpdGxlID0gZ2V0QXR0cmli
dXRlKHRpdGxlQXR0cik7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdGl0bGUgPSBmYXN0
R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgICAgIGlmICghbWVzc2FnZS5pc0VtcHR5KCkg
JiYgIXRpdGxlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQoJ1xuJyk7
CiAgICAgICAgICAgICBtZXNzYWdlLmFwcGVuZCh0aXRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtRWxlbWVudC5jcHAKaW5kZXggNWFjNWI2My4uNDhiYTY1MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtNTE5LDcgKzUxOSw3IEBAIFBhc3NSZWZQdHI8
SFRNTENvbGxlY3Rpb24+IEhUTUxGb3JtRWxlbWVudDo6ZWxlbWVudHMoKQogCiBTdHJpbmcgSFRN
TEZvcm1FbGVtZW50OjpuYW1lKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5h
bWVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiB9CiAKIGJv
b2wgSFRNTEZvcm1FbGVtZW50Ojpub1ZhbGlkYXRlKCkgY29uc3QKQEAgLTUzMiw3ICs1MzIsNyBA
QCBib29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxpZGF0ZSgpIGNvbnN0CiAvLyAoRGFyaW4gQWRs
ZXIpIHJlbW92ZWQgdGhpcywgc29tZW9uZSBhZGRlZCBpdCBiYWNrLCBzbyBJIGFtIGxlYXZpbmcg
aXQgaW4gZm9yIG5vdy4KIFN0cmluZyBIVE1MRm9ybUVsZW1lbnQ6OmFjdGlvbigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsKKyAgICByZXR1cm4gZmFzdEdl
dEF0dHJpYnV0ZShhY3Rpb25BdHRyKTsKIH0KIAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldEFj
dGlvbihjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtNTQ3LDcgKzU0Nyw3IEBAIHZvaWQgSFRNTEZv
cm1FbGVtZW50OjpzZXRFbmN0eXBlKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAKIFN0cmluZyBIVE1M
Rm9ybUVsZW1lbnQ6Om1ldGhvZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSht
ZXRob2RBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShtZXRob2RBdHRyKTsKIH0K
IAogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnNldE1ldGhvZChjb25zdCBTdHJpbmcgJnZhbHVlKQpA
QCAtNTU3LDcgKzU1Nyw3IEBAIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRNZXRob2QoY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKIAogU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6dGFyZ2V0KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6d2Fz
VXNlclN1Ym1pdHRlZCgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
LmNwcAppbmRleCAzNGVkZThkLi5mMjdiNjBiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudC5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSBIVE1MRnJhbWVT
ZXRFbGVtZW50KiBjb250YWluaW5nRnJhbWVTZXRFbGVtZW50KE5vZGUqIG5vZGUpCiAKIGJvb2wg
SFRNTEZyYW1lRWxlbWVudDo6bm9SZXNpemUoKSBjb25zdAogewotICAgIHJldHVybiBoYXNBdHRy
aWJ1dGUobm9yZXNpemVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShub3Jlc2l6
ZUF0dHIpOwogfQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnQ6OmF0dGFjaCgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCmluZGV4IDIzNGVjMDIuLmM2NjRk
OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRyKQogCiB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpz
ZXROYW1lQW5kT3BlblVSTCgpCiB7Ci0gICAgbV9mcmFtZU5hbWUgPSBnZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpOworICAgIG1fZnJhbWVOYW1lID0gZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAg
ICAgaWYgKG1fZnJhbWVOYW1lLmlzTnVsbCgpKQogICAgICAgICBtX2ZyYW1lTmFtZSA9IGdldElk
QXR0cmlidXRlKCk7CiAgICAgb3BlblVSTCgpOwpAQCAtMTk5LDcgKzE5OSw3IEBAIHZvaWQgSFRN
TEZyYW1lRWxlbWVudEJhc2U6OmF0dGFjaCgpCiAKIEtVUkwgSFRNTEZyYW1lRWxlbWVudEJhc2U6
OmxvY2F0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Z2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVV
UkwoZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnNldExvY2F0aW9uKGNvbnN0IFN0cmluZyYgc3RyKQpAQCAtMjgzLDcgKzI4Myw3IEBA
IHZvaWQgSFRNTEZyYW1lRWxlbWVudEJhc2U6OndpbGxSZW1vdmUoKQogI2lmIEVOQUJMRShGVUxM
U0NSRUVOX0FQSSkKIGJvb2wgSFRNTEZyYW1lRWxlbWVudEJhc2U6OmFsbG93RnVsbFNjcmVlbigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZSh3ZWJraXRhbGxvd2Z1bGxzY3JlZW5B
dHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZSh3ZWJraXRhbGxvd2Z1bGxzY3JlZW5B
dHRyKTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxI
dG1sRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAK
aW5kZXggNTljMGQzZS4uYjVjMzA0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSHRtbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVt
ZW50LmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEhUTUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRC
eVBhcnNlcigpCiAgICAgaWYgKCFkb2N1bWVudExvYWRlcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY29uc3QgQXRvbWljU3RyaW5nJiBtYW5pZmVzdCA9IGdldEF0dHJpYnV0ZShtYW5pZmVzdEF0
dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWFuaWZlc3QgPSBmYXN0R2V0QXR0cmlidXRl
KG1hbmlmZXN0QXR0cik7CiAgICAgaWYgKG1hbmlmZXN0LmlzRW1wdHkoKSkKICAgICAgICAgZG9j
dW1lbnRMb2FkZXItPmFwcGxpY2F0aW9uQ2FjaGVIb3N0KCktPnNlbGVjdENhY2hlV2l0aG91dE1h
bmlmZXN0KCk7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5j
cHAKaW5kZXggOGYyODk5Mi4uNmI0YmVkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFn
ZUVsZW1lbnQuY3BwCkBAIC0xNjQsMTAgKzE2NCwxMCBAQCBTdHJpbmcgSFRNTEltYWdlRWxlbWVu
dDo6YWx0VGV4dCgpIGNvbnN0CiAgICAgLy8gbGV0cyBmaWd1cmUgb3V0IHRoZSBhbHQgdGV4dC4u
IG1hZ2ljIHN0dWZmCiAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMTk5OC9SRUMtaHRtbDQw
LTE5OTgwNDI0L2FwcGVuZGl4L25vdGVzLmh0bWwjYWx0Z2VuCiAgICAgLy8gYWxzbyBoZWF2aWx5
IGRpc2N1c3NlZCBieSBIaXhpZSBvbiBidWd6aWxsYQotICAgIFN0cmluZyBhbHQgPSBnZXRBdHRy
aWJ1dGUoYWx0QXR0cik7CisgICAgU3RyaW5nIGFsdCA9IGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0
cik7CiAgICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0dHJpYnV0ZQogICAgIGlmIChhbHQuaXNO
dWxsKCkpCi0gICAgICAgIGFsdCA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICBh
bHQgPSBmYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CiAgICAgcmV0dXJuIGFsdDsKIH0KIApA
QCAtMjU1LDcgKzI1NSw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWR0aChib29sIGlnbm9y
ZVBlbmRpbmdTdHlsZXNoZWV0cykKICAgICBpZiAoIXJlbmRlcmVyKCkpIHsKICAgICAgICAgLy8g
Y2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKICAg
ICAgICAgYm9vbCBvazsKLSAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0
cikudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IHdpZHRoID0gZmFzdEdldEF0dHJpYnV0ZSh3aWR0
aEF0dHIpLnRvSW50KCZvayk7CiAgICAgICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiB3
aWR0aDsKIApAQCAtMjc4LDcgKzI3OCw3IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50OjpoZWlnaHQo
Ym9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCiAgICAgaWYgKCFyZW5kZXJlcigpKSB7CiAg
ICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxpY2l0IHBpeGVs
IHZhbHVlCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGludCBoZWlnaHQgPSBnZXRBdHRyaWJ1
dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKKyAgICAgICAgaW50IGhlaWdodCA9IGZhc3RHZXRB
dHRyaWJ1dGUoaGVpZ2h0QXR0cikudG9JbnQoJm9rKTsKICAgICAgICAgaWYgKG9rKQogICAgICAg
ICAgICAgcmV0dXJuIGhlaWdodDsKIApAQCAtMzIyLDEzICszMjIsMTMgQEAgYm9vbCBIVE1MSW1h
Z2VFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpIGNvbnN0CiAKIGNvbnN0
IEF0b21pY1N0cmluZyYgSFRNTEltYWdlRWxlbWVudDo6YWx0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGFs
dEF0dHIpOwogfQogCiBib29sIEhUTUxJbWFnZUVsZW1lbnQ6OmRyYWdnYWJsZSgpIGNvbnN0CiB7
CiAgICAgLy8gSW1hZ2UgZWxlbWVudHMgYXJlIGRyYWdnYWJsZSBieSBkZWZhdWx0LgotICAgIHJl
dHVybiAhZXF1YWxJZ25vcmluZ0Nhc2UoZ2V0QXR0cmlidXRlKGRyYWdnYWJsZUF0dHIpLCAiZmFs
c2UiKTsKKyAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKGZhc3RHZXRBdHRyaWJ1dGUoZHJh
Z2dhYmxlQXR0ciksICJmYWxzZSIpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldEhl
aWdodChpbnQgdmFsdWUpCkBAIC0zMzgsNyArMzM4LDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50
OjpzZXRIZWlnaHQoaW50IHZhbHVlKQogCiBLVVJMIEhUTUxJbWFnZUVsZW1lbnQ6OnNyYygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShz
cmNBdHRyKSk7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRy
aWJ1dGUoc3JjQXR0cikpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OnNldFNyYyhjb25z
dCBTdHJpbmcmIHZhbHVlKQpAQCAtMzg0LDcgKzM4NCw3IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBj
b25zCiAKICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzcmMoKSk7CiAgICAgLy8gRklYTUU6
IFdoYXQgYWJvdXQgd2hlbiB0aGUgdXNlbWFwIGF0dHJpYnV0ZSBiZWdpbnMgd2l0aCAiIyI/Ci0g
ICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0
cmlidXRlKHVzZW1hcEF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1l
bnQoKS0+Y29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkpOwogfQogCiB2
b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OndpbGxNb3ZlVG9OZXdPd25lckRvY3VtZW50KCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCmluZGV4IGRkMWYxM2EuLjY1NmExMzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcApAQCAtODMwLDcgKzgz
MCw3IEBAIHZvaWQgSFRNTElucHV0RWxlbWVudDo6ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCkKICAg
ICBtX3BhcnNpbmdJblByb2dyZXNzID0gZmFsc2U7CiAgICAgSFRNTFRleHRGb3JtQ29udHJvbEVs
ZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogICAgIGlmICghbV9zdGF0ZVJlc3RvcmVk
KSB7Ci0gICAgICAgIGJvb2wgY2hlY2tlZCA9IGhhc0F0dHJpYnV0ZShjaGVja2VkQXR0cik7Cisg
ICAgICAgIGJvb2wgY2hlY2tlZCA9IGZhc3RIYXNBdHRyaWJ1dGUoY2hlY2tlZEF0dHIpOwogICAg
ICAgICBpZiAoY2hlY2tlZCkKICAgICAgICAgICAgIHNldENoZWNrZWQoY2hlY2tlZCk7CiAgICAg
ICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlID0gdHJ1ZTsKQEAgLTg3OSw5ICs4NzksOSBA
QCBTdHJpbmcgSFRNTElucHV0RWxlbWVudDo6YWx0VGV4dCgpIGNvbnN0CiAgICAgU3RyaW5nIGFs
dCA9IGZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0cik7CiAgICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxl
IGF0dHJpYnV0ZQogICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAgIGFsdCA9IGdldEF0dHJp
YnV0ZSh0aXRsZUF0dHIpOworICAgICAgICBhbHQgPSBmYXN0R2V0QXR0cmlidXRlKHRpdGxlQXR0
cik7CiAgICAgaWYgKGFsdC5pc051bGwoKSkKLSAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHZh
bHVlQXR0cik7CisgICAgICAgIGFsdCA9IGZhc3RHZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKICAg
ICBpZiAoYWx0LmlzRW1wdHkoKSkKICAgICAgICAgYWx0ID0gaW5wdXRFbGVtZW50QWx0VGV4dCgp
OwogICAgIHJldHVybiBhbHQ7CkBAIC05MTUsNyArOTE1LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVt
ZW50OjpyZXNldCgpCiAgICAgICAgIHNldFZhbHVlKFN0cmluZygpKTsKIAogICAgIHNldEF1dG9m
aWxsZWQoZmFsc2UpOwotICAgIHNldENoZWNrZWQoaGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKSk7
CisgICAgc2V0Q2hlY2tlZChmYXN0SGFzQXR0cmlidXRlKGNoZWNrZWRBdHRyKSk7CiAgICAgbV9y
ZWZsZWN0c0NoZWNrZWRBdHRyaWJ1dGUgPSB0cnVlOwogfQogCkBAIC0xMTM3LDcgKzExMzcsNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnNldFBsYWNlaG9sZGVyKGNvbnN0IFN0cmluZyYgdmFs
dWUpCiAKIGJvb2wgSFRNTElucHV0RWxlbWVudDo6c2VhcmNoRXZlbnRzU2hvdWxkQmVEaXNwYXRj
aGVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGluY3JlbWVudGFsQXR0cik7
CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoaW5jcmVtZW50YWxBdHRyKTsKIH0KIAogdm9p
ZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRWYWx1ZUZyb21SZW5kZXJlcihjb25zdCBTdHJpbmcmIHZh
bHVlKQpAQCAtMTc4NCw3ICsxNzg0LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRXYXBJ
bnB1dEZvcm1hdChTdHJpbmcmIG1hc2spCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OmlzU3BlZWNo
RW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBSQU5HRSwg
RU1BSUwsIFVSTCwgQ09MT1IgYW5kIERBVEUvVElNRSBpbnB1dCB0eXBlcy4KLSAgICByZXR1cm4g
bV9pbnB1dFR5cGUtPnNob3VsZFJlc3BlY3RTcGVlY2hBdHRyaWJ1dGUoKSAmJiBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzcGVlY2hJbnB1dEVuYWJsZWQoKSAmJiBoYXNBdHRyaWJ1dGUod2Via2l0
c3BlZWNoQXR0cik7CisgICAgcmV0dXJuIG1faW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0U3BlZWNo
QXR0cmlidXRlKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3BlZWNoSW5wdXRFbmFibGVk
KCkgJiYgZmFzdEhhc0F0dHJpYnV0ZSh3ZWJraXRzcGVlY2hBdHRyKTsKIH0KIAogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAppbmRleCBmMjM2MWYwLi4xMWQ5
M2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKQEAgLTY2LDcg
KzY2LDcgQEAgYm9vbCBIVE1MTGFiZWxFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0CiAKIEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQqIEhUTUxMYWJlbEVsZW1lbnQ6OmNvbnRyb2woKQogewotICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgY29udHJvbElkID0gZ2V0QXR0cmlidXRlKGZvckF0dHIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY29udHJvbElkID0gZmFzdEdldEF0dHJpYnV0ZShmb3JB
dHRyKTsKICAgICBpZiAoY29udHJvbElkLmlzTnVsbCgpKSB7CiAgICAgICAgIC8vIFNlYXJjaCB0
aGUgY2hpbGRyZW4gYW5kIGRlc2NlbmRhbnRzIG9mIHRoZSBsYWJlbCBlbGVtZW50IGZvciBhIGZv
cm0gZWxlbWVudC4KICAgICAgICAgLy8gcGVyIGh0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMv
T3ZlcnZpZXcuaHRtbCN0aGUtbGFiZWwtZWxlbWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlu
a0VsZW1lbnQuY3BwCmluZGV4IDRiYzZlOTMuLjA0OTMzZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxMaW5rRWxlbWVudC5jcHAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIEhUTUxMaW5rRWxl
bWVudDo6cHJvY2VzcygpCiAgICAgaWYgKCFkaXNhYmxlZCgpICYmIChtX3JlbEF0dHJpYnV0ZS5t
X2lzU3R5bGVTaGVldCB8fCAoYWNjZXB0SWZUeXBlQ29udGFpbnNUZXh0Q1NTICYmIHR5cGUuY29u
dGFpbnMoInRleHQvY3NzIikpKQogICAgICAgICAmJiBkb2N1bWVudCgpLT5mcmFtZSgpICYmIG1f
dXJsLmlzVmFsaWQoKSkgewogICAgICAgICAKLSAgICAgICAgU3RyaW5nIGNoYXJzZXQgPSBnZXRB
dHRyaWJ1dGUoY2hhcnNldEF0dHIpOworICAgICAgICBTdHJpbmcgY2hhcnNldCA9IGZhc3RHZXRB
dHRyaWJ1dGUoY2hhcnNldEF0dHIpOwogICAgICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkgJiYg
ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKICAgICAgICAgICAgIGNoYXJzZXQgPSBkb2N1bWVudCgpLT5j
aGFyc2V0KCk7CiAgICAgICAgIApAQCAtMzgwLDIyICszODAsMjIgQEAgYm9vbCBIVE1MTGlua0Vs
ZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKIAogS1VSTCBIVE1M
TGlua0VsZW1lbnQ6OmhyZWYoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpKTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cikpOwogfQogCiBTdHJpbmcgSFRN
TExpbmtFbGVtZW50OjpyZWwoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUocmVs
QXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUocmVsQXR0cik7CiB9CiAKIFN0cmlu
ZyBIVE1MTGlua0VsZW1lbnQ6OnRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJp
YnV0ZSh0YXJnZXRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRy
KTsKIH0KIAogU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpOwogfQogCiB2b2lkIEhUTUxMaW5rRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRy
aWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNYXBFbGVtZW50LmNwcAppbmRleCBlOTQ0ZGFkLi44NjlkYjk4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcApAQCAtOTAsNyArOTAsNyBAQCBIVE1MSW1hZ2VFbGVt
ZW50KiBIVE1MTWFwRWxlbWVudDo6aW1hZ2VFbGVtZW50KCkKICAgICAgICAgLy8gVGhlIEhUTUxJ
bWFnZUVsZW1lbnQncyB1c2VNYXAoKSB2YWx1ZSBpbmNsdWRlcyB0aGUgJyMnIHN5bWJvbCBhdCB0
aGUgYmVnaW5uaW5nLAogICAgICAgICAvLyB3aGljaCBoYXMgdG8gYmUgc3RyaXBwZWQgb2ZmLgog
ICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1M
SW1hZ2VFbGVtZW50Kj4oY3Vycik7Ci0gICAgICAgIFN0cmluZyB1c2VNYXBOYW1lID0gaW1hZ2VF
bGVtZW50LT5nZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikuc3RyaW5nKCkuc3Vic3RyaW5nKDEpOwor
ICAgICAgICBTdHJpbmcgdXNlTWFwTmFtZSA9IGltYWdlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh1c2VtYXBBdHRyKS5zdHJpbmcoKS5zdWJzdHJpbmcoMSk7CiAgICAgICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSh1c2VNYXBOYW1lLCBtX25hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGltYWdl
RWxlbWVudDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRp
YUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcApp
bmRleCA4ZDc1M2I2Li41NWQxZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZWRpYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKQEAgLTIzNSw3ICsyMzUsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmF0dHJp
YnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiAgICAgY29u
c3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CiAgICAgaWYgKGF0dHJO
YW1lID09IHNyY0F0dHIpIHsKICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbG9hZCwgYXMgbG9uZyBh
cyB0aGUgJ3NyYycgYXR0cmlidXRlIGlzIHByZXNlbnQuCi0gICAgICAgIGlmICghZ2V0QXR0cmli
dXRlKHNyY0F0dHIpLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKCFmYXN0R2V0QXR0cmlidXRlKHNy
Y0F0dHIpLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHNjaGVkdWxlTG9hZCgpOwogICAgIH0KICAg
ICBlbHNlIGlmIChhdHRyTmFtZSA9PSBjb250cm9sc0F0dHIpIHsKQEAgLTM1OCw3ICszNTgsNyBA
QCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKICAgICBM
T0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW50Iik7CiAgICAg
SFRNTEVsZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCk7Ci0gICAgaWYgKCFnZXRBdHRyaWJ1
dGUoc3JjQXR0cikuaXNFbXB0eSgpICYmIG1fbmV0d29ya1N0YXRlID09IE5FVFdPUktfRU1QVFkp
CisgICAgaWYgKCFmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpLmlzRW1wdHkoKSAmJiBtX25ldHdv
cmtTdGF0ZSA9PSBORVRXT1JLX0VNUFRZKQogICAgICAgICBzY2hlZHVsZUxvYWQoKTsKIH0KIApA
QCAtNjE4LDcgKzYxOCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TWVkaWFSZXNv
dXJjZSgpCiAgICAgTW9kZSBtb2RlID0gYXR0cmlidXRlOwogCiAgICAgLy8gMyAtIC4uLiB0aGUg
bWVkaWEgZWxlbWVudCBoYXMgbmVpdGhlciBhIHNyYyBhdHRyaWJ1dGUgLi4uCi0gICAgaWYgKCFo
YXNBdHRyaWJ1dGUoc3JjQXR0cikpIHsKKyAgICBpZiAoIWZhc3RIYXNBdHRyaWJ1dGUoc3JjQXR0
cikpIHsKICAgICAgICAgLy8gLi4uIG5vciBhIHNvdXJjZSBlbGVtZW50IGNoaWxkOiAuLi4KICAg
ICAgICAgTm9kZSogbm9kZTsKICAgICAgICAgZm9yIChub2RlID0gZmlyc3RDaGlsZCgpOyBub2Rl
OyBub2RlID0gbm9kZS0+bmV4dFNpYmxpbmcoKSkgewpAQCAtMTQ2OCw3ICsxNDY4LDcgQEAgYm9v
bCBIVE1MTWVkaWFFbGVtZW50OjplbmRlZCgpIGNvbnN0CiAKIGJvb2wgSFRNTE1lZGlhRWxlbWVu
dDo6YXV0b3BsYXkoKSBjb25zdAogewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUoYXV0b3BsYXlB
dHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShhdXRvcGxheUF0dHIpOwogfQogCiB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldEF1dG9wbGF5KGJvb2wgYikKQEAgLTE1ODEsNyArMTU4
MSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6cGF1c2VJbnRlcm5hbCgpCiAKIGJvb2wgSFRN
TE1lZGlhRWxlbWVudDo6bG9vcCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShs
b29wQXR0cik7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUobG9vcEF0dHIpOwogfQogCiB2
b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldExvb3AoYm9vbCBiKQpAQCAtMTYwNiw3ICsxNjA2LDcg
QEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojpjb250cm9scygpIGNvbnN0CiAgICAgaWYgKGlzRnVs
bHNjcmVlbigpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIHJldHVybiBoYXNBdHRyaWJ1
dGUoY29udHJvbHNBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShjb250cm9sc0F0
dHIpOwogfQogCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnNldENvbnRyb2xzKGJvb2wgYikKQEAg
LTE4MjgsNyArMTgyOCw3IEBAIEtVUkwgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJj
ZUNoaWxkKENvbnRlbnRUeXBlICpjb250ZW50VHlwZSwgSW52YWxpZFNvCiAgICAgICAgIGlmICht
ZWRpYVVSTC5pc0VtcHR5KCkpCiAgICAgICAgICAgICBnb3RvIGNoZWNrX2FnYWluOwogICAgICAg
ICAKLSAgICAgICAgaWYgKHNvdXJjZS0+aGFzQXR0cmlidXRlKG1lZGlhQXR0cikpIHsKKyAgICAg
ICAgaWYgKHNvdXJjZS0+ZmFzdEhhc0F0dHJpYnV0ZShtZWRpYUF0dHIpKSB7CiAgICAgICAgICAg
ICBNZWRpYVF1ZXJ5RXZhbHVhdG9yIHNjcmVlbkV2YWwoInNjcmVlbiIsIGRvY3VtZW50KCktPmZy
YW1lKCksIHJlbmRlcmVyKCkgPyByZW5kZXJlcigpLT5zdHlsZSgpIDogMCk7CiAgICAgICAgICAg
ICBSZWZQdHI8TWVkaWFMaXN0PiBtZWRpYSA9IE1lZGlhTGlzdDo6Y3JlYXRlQWxsb3dpbmdEZXNj
cmlwdGlvblN5bnRheChzb3VyY2UtPm1lZGlhKCkpOwogI2lmICFMT0dfRElTQUJMRUQKQEAgLTE4
MzksNyArMTgzOSw3IEBAIEtVUkwgSFRNTE1lZGlhRWxlbWVudDo6c2VsZWN0TmV4dFNvdXJjZUNo
aWxkKENvbnRlbnRUeXBlICpjb250ZW50VHlwZSwgSW52YWxpZFNvCiAgICAgICAgICAgICAgICAg
Z290byBjaGVja19hZ2FpbjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChzb3VyY2UtPmhhc0F0
dHJpYnV0ZSh0eXBlQXR0cikpIHsKKyAgICAgICAgaWYgKHNvdXJjZS0+ZmFzdEhhc0F0dHJpYnV0
ZSh0eXBlQXR0cikpIHsKICNpZiAhTE9HX0RJU0FCTEVECiAgICAgICAgICAgICBpZiAoc2hvdWxk
TG9nKQogICAgICAgICAgICAgICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OnNlbGVj
dE5leHRTb3VyY2VDaGlsZCAtICd0eXBlJyBpcyAlcyIsIHNvdXJjZS0+dHlwZSgpLnV0ZjgoKS5k
YXRhKCkpOwpAQCAtMTg5MSw3ICsxODkxLDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpzb3Vy
Y2VXYXNBZGRlZChIVE1MU291cmNlRWxlbWVudCogc291cmNlKQogI2VuZGlmCiAgICAgCiAgICAg
Ly8gV2Ugc2hvdWxkIG9ubHkgY29uc2lkZXIgYSA8c291cmNlPiBlbGVtZW50IHdoZW4gdGhlcmUg
aXMgbm90IHNyYyBhdHRyaWJ1dGUgYXQgYWxsLgotICAgIGlmIChoYXNBdHRyaWJ1dGUoc3JjQXR0
cikpCisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUoc3JjQXR0cikpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIDQuOC44IC0gSWYgYSBzb3VyY2UgZWxlbWVudCBpcyBpbnNlcnRlZCBhcyBhIGNo
aWxkIG9mIGEgbWVkaWEgZWxlbWVudCB0aGF0IGhhcyBubyBzcmMgCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZXRhRWxlbWVudC5jcHAKaW5kZXggMTA4YTk4Yy4uY2VhNGEwMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNwcApAQCAtODEsMTcgKzgxLDE3IEBAIHZvaWQgSFRN
TE1ldGFFbGVtZW50Ojpwcm9jZXNzKCkKIAogU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6Y29udGVu
dCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjb250ZW50QXR0cik7CisgICAg
cmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoY29udGVudEF0dHIpOwogfQogCiBTdHJpbmcgSFRNTE1l
dGFFbGVtZW50OjpodHRwRXF1aXYoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
aHR0cF9lcXVpdkF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGh0dHBfZXF1aXZB
dHRyKTsKIH0KIAogU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1
dGUobmFtZUF0dHIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRlckVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50
LmNwcAppbmRleCAxM2UwMmVkLi5jZWUyYzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
dGVyRWxlbWVudC5jcHAKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50Ojph
dHRhY2goKQogZG91YmxlIEhUTUxNZXRlckVsZW1lbnQ6Om1pbigpIGNvbnN0CiB7CiAgICAgZG91
YmxlIG1pbiA9IDA7Ci0gICAgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZ2V0QXR0cmlidXRl
KG1pbkF0dHIpLCAmbWluKTsKKyAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShmYXN0R2V0
QXR0cmlidXRlKG1pbkF0dHIpLCAmbWluKTsKICAgICByZXR1cm4gbWluOwogfQogCkBAIC0xMDQs
NyArMTA0LDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpzZXRNaW4oZG91YmxlIG1pbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCiBkb3VibGUgSFRNTE1ldGVyRWxlbWVudDo6bWF4KCkgY29uc3QKIHsK
ICAgICBkb3VibGUgbWF4ID0gc3RkOjptYXgoMS4wLCBtaW4oKSk7Ci0gICAgcGFyc2VUb0RvdWJs
ZUZvck51bWJlclR5cGUoZ2V0QXR0cmlidXRlKG1heEF0dHIpLCAmbWF4KTsKKyAgICBwYXJzZVRv
RG91YmxlRm9yTnVtYmVyVHlwZShmYXN0R2V0QXR0cmlidXRlKG1heEF0dHIpLCAmbWF4KTsKICAg
ICByZXR1cm4gc3RkOjptYXgobWF4LCBtaW4oKSk7CiB9CiAKQEAgLTEyMCw3ICsxMjAsNyBAQCB2
b2lkIEhUTUxNZXRlckVsZW1lbnQ6OnNldE1heChkb3VibGUgbWF4LCBFeGNlcHRpb25Db2RlJiBl
YykKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50Ojp2YWx1ZSgpIGNvbnN0CiB7CiAgICAgZG91Ymxl
IHZhbHVlID0gMDsKLSAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShnZXRBdHRyaWJ1dGUo
dmFsdWVBdHRyKSwgJnZhbHVlKTsKKyAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShmYXN0
R2V0QXR0cmlidXRlKHZhbHVlQXR0ciksICZ2YWx1ZSk7CiAgICAgcmV0dXJuIHN0ZDo6bWluKHN0
ZDo6bWF4KHZhbHVlLCBtaW4oKSksIG1heCgpKTsKIH0KIApAQCAtMTM2LDcgKzEzNiw3IEBAIHZv
aWQgSFRNTE1ldGVyRWxlbWVudDo6c2V0VmFsdWUoZG91YmxlIHZhbHVlLCBFeGNlcHRpb25Db2Rl
JiBlYykKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50Ojpsb3coKSBjb25zdAogewogICAgIGRvdWJs
ZSBsb3cgPSBtaW4oKTsKLSAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShnZXRBdHRyaWJ1
dGUobG93QXR0ciksICZsb3cpOworICAgIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGZhc3RH
ZXRBdHRyaWJ1dGUobG93QXR0ciksICZsb3cpOwogICAgIHJldHVybiBzdGQ6Om1pbihzdGQ6Om1h
eChsb3csIG1pbigpKSwgbWF4KCkpOwogfQogCkBAIC0xNTIsNyArMTUyLDcgQEAgdm9pZCBIVE1M
TWV0ZXJFbGVtZW50OjpzZXRMb3coZG91YmxlIGxvdywgRXhjZXB0aW9uQ29kZSYgZWMpCiBkb3Vi
bGUgSFRNTE1ldGVyRWxlbWVudDo6aGlnaCgpIGNvbnN0CiB7CiAgICAgZG91YmxlIGhpZ2ggPSBt
YXgoKTsKLSAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShnZXRBdHRyaWJ1dGUoaGlnaEF0
dHIpLCAmaGlnaCk7CisgICAgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJp
YnV0ZShoaWdoQXR0ciksICZoaWdoKTsKICAgICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgoaGln
aCwgbG93KCkpLCBtYXgoKSk7CiB9CiAKQEAgLTE2OCw3ICsxNjgsNyBAQCB2b2lkIEhUTUxNZXRl
ckVsZW1lbnQ6OnNldEhpZ2goZG91YmxlIGhpZ2gsIEV4Y2VwdGlvbkNvZGUmIGVjKQogZG91Ymxl
IEhUTUxNZXRlckVsZW1lbnQ6Om9wdGltdW0oKSBjb25zdAogewogICAgIGRvdWJsZSBvcHRpbXVt
ID0gKG1heCgpICsgbWluKCkpIC8gMjsKLSAgICBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShn
ZXRBdHRyaWJ1dGUob3B0aW11bUF0dHIpLCAmb3B0aW11bSk7CisgICAgcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0ZShvcHRpbXVtQXR0ciksICZvcHRpbXVtKTsKICAg
ICByZXR1cm4gc3RkOjptaW4oc3RkOjptYXgob3B0aW11bSwgbWluKCkpLCBtYXgoKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE5hbWVDb2xsZWN0aW9uLmNwcAppbmRleCA0MDc1ZTRj
Li40ZDMxNGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3Bw
CkBAIC02MSw3ICs2MSw3IEBAIEVsZW1lbnQqIEhUTUxOYW1lQ29sbGVjdGlvbjo6aXRlbUFmdGVy
KEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAogICAgICAgICAgICAgICAgICAgICBlLT5oYXNUYWdO
YW1lKGFwcGxldFRhZykgfHwKICAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShlbWJl
ZFRhZykgfHwKICAgICAgICAgICAgICAgICAgICAgZS0+aGFzVGFnTmFtZShvYmplY3RUYWcpKQot
ICAgICAgICAgICAgICAgICAgICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25h
bWUpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5mYXN0R2V0QXR0cmlidXRlKG5hbWVBdHRy
KSA9PSBtX25hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAg
ICAgICAgICBpZiAoZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCiAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlOwpAQCAtNzEsMTcgKzcxLDE3IEBAIEVsZW1lbnQqIEhUTUxOYW1lQ29s
bGVjdGlvbjo6aXRlbUFmdGVyKEVsZW1lbnQqIHByZXZpb3VzKSBjb25zdAogICAgICAgICAgICAg
ICAgIC8vIGFwcGxldHMgYW5kIG9iamVjdCBieSBpZCwgYW5kIGltYWdlcyBieSBpZCBidXQgb25s
eSBpZiB0aGV5IGhhdmUKICAgICAgICAgICAgICAgICAvLyBhIG5hbWUgYXR0cmlidXRlICh0aGlz
IHZlcnkgc3RyYW5nZSBydWxlIG1hdGNoZXMgSUUpCiAgICAgICAgICAgICAgICAgaWYgKGUtPmhh
c1RhZ05hbWUoZm9ybVRhZykgfHwgZS0+aGFzVGFnTmFtZShlbWJlZFRhZykgfHwgZS0+aGFzVGFn
TmFtZShpZnJhbWVUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1
dGUobmFtZUF0dHIpID09IG1fbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmZhc3RH
ZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShhcHBs
ZXRUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlLT5nZXRBdHRyaWJ1dGUobmFtZUF0
dHIpID09IG1fbmFtZSB8fCBlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGUtPmZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpID09IG1fbmFtZSB8
fCBlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZS0+aGFzVGFnTmFtZShvYmpl
Y3RUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgoZS0+Z2V0QXR0cmlidXRlKG5hbWVB
dHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCisgICAgICAg
ICAgICAgICAgICAgIGlmICgoZS0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1l
IHx8IGUtPmdldElkQXR0cmlidXRlKCkgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZSktPmlzRG9jTmFtZWRJ
dGVtKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKGUtPmhhc1RhZ05hbWUoaW1nVGFnKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgKGUtPmdldElkQXR0
cmlidXRlKCkgPT0gbV9uYW1lICYmIGUtPmhhc0F0dHJpYnV0ZShuYW1lQXR0cikpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoZS0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1l
IHx8IChlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSAmJiBlLT5mYXN0SGFzQXR0cmlidXRl
KG5hbWVBdHRyKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE9iamVjdEVsZW1lbnQuY3BwCmluZGV4IDI0ODFkMTAuLjIzYjZlZDIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwCkBAIC0zMzIsNyArMzMyLDcgQEAgdm9pZCBI
VE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlV2lkZ2V0KFBsdWdpbkNyZWF0aW9uT3B0aW9uIHBsdWdp
bkNyZWF0aW9uT3B0aW9uKQogICAgICAgICByZXR1cm47CiAKICAgICBTdWJmcmFtZUxvYWRlciog
bG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCk7
Ci0gICAgYm9vbCBzdWNjZXNzID0gYmVmb3JlTG9hZEFsbG93ZWRMb2FkICYmIGhhc1ZhbGlkQ2xh
c3NJZCgpICYmIGxvYWRlci0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIGdldEF0dHJpYnV0ZShu
YW1lQXR0ciksIHNlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CisgICAgYm9v
bCBzdWNjZXNzID0gYmVmb3JlTG9hZEFsbG93ZWRMb2FkICYmIGhhc1ZhbGlkQ2xhc3NJZCgpICYm
IGxvYWRlci0+cmVxdWVzdE9iamVjdCh0aGlzLCB1cmwsIGZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0
dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMpOwogCiAgICAgaWYgKCFz
dWNjZXNzICYmIGZhbGxiYWNrQ29udGVudCkKICAgICAgICAgcmVuZGVyRmFsbGJhY2tDb250ZW50
KCk7CkBAIC00ODMsMTMgKzQ4MywxMyBAQCB2b2lkIEhUTUxPYmplY3RFbGVtZW50Ojp1cGRhdGVE
b2NOYW1lZEl0ZW0oKQogCiBib29sIEhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBs
ZXQoKSBjb25zdAogewotICAgIGlmIChNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1F
VHlwZShnZXRBdHRyaWJ1dGUodHlwZUF0dHIpKSkKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6
aXNKYXZhQXBwbGV0TUlNRVR5cGUoZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpKQogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgCiAgICAgZm9yIChFbGVtZW50KiBjaGlsZCA9IGZpcnN0
RWxlbWVudENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0RWxlbWVudFNpYmxpbmco
KSkgewogICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUocGFyYW1UYWcpCi0gICAgICAgICAg
ICAgICAgJiYgZXF1YWxJZ25vcmluZ0Nhc2UoY2hpbGQtPmdldEF0dHJpYnV0ZShuYW1lQXR0ciks
ICJ0eXBlIikKLSAgICAgICAgICAgICAgICAmJiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBs
ZXRNSU1FVHlwZShjaGlsZC0+Z2V0QXR0cmlidXRlKHZhbHVlQXR0cikuc3RyaW5nKCkpKQorICAg
ICAgICAgICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKGNoaWxkLT5mYXN0R2V0QXR0cmlidXRl
KG5hbWVBdHRyKSwgInR5cGUiKQorICAgICAgICAgICAgICAgICYmIE1JTUVUeXBlUmVnaXN0cnk6
OmlzSmF2YUFwcGxldE1JTUVUeXBlKGNoaWxkLT5mYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0ciku
c3RyaW5nKCkpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGlmIChjaGlsZC0+
aGFzVGFnTmFtZShvYmplY3RUYWcpCiAgICAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8SFRN
TE9iamVjdEVsZW1lbnQqPihjaGlsZCktPmNvbnRhaW5zSmF2YUFwcGxldCgpKQpAQCAtNTA1LDEx
ICs1MDUsMTEgQEAgdm9pZCBIVE1MT2JqZWN0RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb24KIHsKICAgICBIVE1MUGx1Z0luSW1h
Z2VFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRT
dWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUo
ZGF0YUF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShkYXRhQXR0cikpKTsKIAogICAgIC8vIEZJWE1FOiBQ
YXNzaW5nIGEgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggIiMiIHRvIHRoZSBjb21wbGV0ZVVSTCBm
dW5jdGlvbiBkb2VzCiAgICAgLy8gbm90IHNlZW0gbGlrZSBpdCB3b3VsZCB3b3JrLiBUaGUgaW1h
Z2UgZWxlbWVudCBoYXMgc2ltaWxhciBidXQgbm90IGlkZW50aWNhbCBjb2RlLgotICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdXNlTWFwID0gZ2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpOworICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdXNlTWFwID0gZmFzdEdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKTsK
ICAgICBpZiAodXNlTWFwLnN0YXJ0c1dpdGgoIiMiKSkKICAgICAgICAgYWRkU3VicmVzb3VyY2VV
UkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXNlTWFwKSk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAppbmRleCBmOGMyNGMzLi41MDA3YWI2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKQEAgLTEx
Miw3ICsxMTIsNyBAQCBSZW5kZXJTdHlsZSogSFRNTE9wdEdyb3VwRWxlbWVudDo6bm9uUmVuZGVy
ZXJSZW5kZXJTdHlsZSgpIGNvbnN0CiAKIFN0cmluZyBIVE1MT3B0R3JvdXBFbGVtZW50Ojpncm91
cExhYmVsVGV4dCgpIGNvbnN0CiB7Ci0gICAgU3RyaW5nIGl0ZW1UZXh0ID0gZG9jdW1lbnQoKS0+
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhnZXRBdHRyaWJ1dGUobGFiZWxBdHRyKSk7
CisgICAgU3RyaW5nIGl0ZW1UZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVk
QnlFbmNvZGluZyhmYXN0R2V0QXR0cmlidXRlKGxhYmVsQXR0cikpOwogICAgIAogICAgIC8vIElu
IFdpbklFLCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgaW4gb3B0
aW9ucyBhbmQgb3B0Z3JvdXBzLiBXZSBtYXRjaCB0aGlzIGJlaGF2aW9yLgogICAgIGl0ZW1UZXh0
ID0gaXRlbVRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
UHJvZ3Jlc3NFbGVtZW50LmNwcAppbmRleCA5NjBmMTU3OC4uY2FmYzkyMTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcApAQCAtMTEyLDcgKzExMiw3IEBA
IHZvaWQgSFRNTFByb2dyZXNzRWxlbWVudDo6c2V0VmFsdWUoZG91YmxlIHZhbHVlLCBFeGNlcHRp
b25Db2RlJiBlYykKIGRvdWJsZSBIVE1MUHJvZ3Jlc3NFbGVtZW50OjptYXgoKSBjb25zdAogewog
ICAgIGRvdWJsZSBtYXg7Ci0gICAgYm9vbCBvayA9IHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBl
KGdldEF0dHJpYnV0ZShtYXhBdHRyKSwgJm1heCk7CisgICAgYm9vbCBvayA9IHBhcnNlVG9Eb3Vi
bGVGb3JOdW1iZXJUeXBlKGZhc3RHZXRBdHRyaWJ1dGUobWF4QXR0ciksICZtYXgpOwogICAgIGlm
ICghb2sgfHwgbWF4IDw9IDApCiAgICAgICAgIHJldHVybiAxOwogICAgIHJldHVybiBtYXg7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCmluZGV4IDAyNDhlZmMuLjU1
NDI3ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuY3BwCkBAIC0x
MzQsMzIgKzEzNCwzMiBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0
dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbgogCiBTdHJpbmcgSFRNTFNj
cmlwdEVsZW1lbnQ6OnNvdXJjZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKHNyY0F0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmli
dXRlKHNyY0F0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmNo
YXJzZXRBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShj
aGFyc2V0QXR0cikuc3RyaW5nKCk7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoY2hhcnNl
dEF0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OnR5cGVBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0ciku
c3RyaW5nKCk7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpLnN0cmluZygp
OwogfQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6Omxhbmd1YWdlQXR0cmlidXRlVmFsdWUo
KSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGFuZ3VhZ2VBdHRyKS5zdHJpbmco
KTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShsYW5ndWFnZUF0dHIpLnN0cmluZygpOwog
fQogCiBTdHJpbmcgSFRNTFNjcmlwdEVsZW1lbnQ6OmZvckF0dHJpYnV0ZVZhbHVlKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGZvckF0dHIpLnN0cmluZygpOworICAgIHJldHVy
biBmYXN0R2V0QXR0cmlidXRlKGZvckF0dHIpLnN0cmluZygpOwogfQogCiBTdHJpbmcgSFRNTFNj
cmlwdEVsZW1lbnQ6OmV2ZW50QXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUoZXZlbnRBdHRyKS5zdHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZShldmVudEF0dHIpLnN0cmluZygpOwogfQogCiBib29sIEhUTUxTY3JpcHRFbGVtZW50Ojph
c3luY0F0dHJpYnV0ZVZhbHVlKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAKaW5kZXggMDYzMWEyMC4uODMyYzI5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU291cmNlRWxlbWVudC5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBIVE1MU291cmNl
RWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQogCiBTdHJpbmcgSFRNTFNvdXJjZUVs
ZW1lbnQ6Om1lZGlhKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG1lZGlhQXR0
cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKIH0KIAogdm9pZCBI
VE1MU291cmNlRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgU3RyaW5nJiBtZWRpYSkKQEAgLTg3LDcg
Kzg3LDcgQEAgdm9pZCBIVE1MU291cmNlRWxlbWVudDo6c2V0TWVkaWEoY29uc3QgU3RyaW5nJiBt
ZWRpYSkKIAogU3RyaW5nIEhUTUxTb3VyY2VFbGVtZW50Ojp0eXBlKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7CiB9CiAKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnNldFR5cGUoY29uc3Qg
U3RyaW5nJiB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKaW5k
ZXggMDIxM2Y0MC4uNTMwZTQ2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U3R5bGVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1l
bnQuY3BwCkBAIC04OCwxMiArODgsMTIgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50OjpjaGlsZHJl
bkNoYW5nZWQoYm9vbCBjaGFuZ2VkQnlQYXJzZXIsIE5vZGUqIGJlZm9yZUNoYW5nZSwKIAogY29u
c3QgQXRvbWljU3RyaW5nJiBIVE1MU3R5bGVFbGVtZW50OjptZWRpYSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmli
dXRlKG1lZGlhQXR0cik7CiB9CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFN0eWxlRWxlbWVu
dDo6dHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7Cisg
ICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCiB2b2lkIEhUTUxTdHls
ZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYg
dXJscykgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDZWxsRWxlbWVudC5j
cHAKaW5kZXggYzFmYjVlZS4uYjE5NWY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGFibGVDZWxsRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGFibGVDZWxsRWxlbWVudC5jcHAKQEAgLTEyOCwxMiArMTI4LDEyIEBAIGJvb2wgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSAqYXR0cikgY29uc3QKIAogU3Ry
aW5nIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphYmJyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKGFiYnJBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhYmJyQXR0
cik7CiB9CiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6YXhpcygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShheGlzQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRy
aWJ1dGUoYXhpc0F0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xT
cGFuKGludCBuKQpAQCAtMTQzLDcgKzE0Myw3IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OnNldENvbFNwYW4oaW50IG4pCiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6aGVhZGVy
cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShoZWFkZXJzQXR0cik7CisgICAg
cmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoaGVhZGVyc0F0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJs
ZUNlbGxFbGVtZW50OjpzZXRSb3dTcGFuKGludCBuKQpAQCAtMTUzLDE0ICsxNTMsMTQgQEAgdm9p
ZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3BhbihpbnQgbikKIAogU3RyaW5nIEhUTUxU
YWJsZUNlbGxFbGVtZW50OjpzY29wZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0
ZShzY29wZUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHNjb3BlQXR0cik7CiB9
CiAKIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJM
cyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uc3QKIHsKICAgICBIVE1MVGFibGVQYXJ0RWxl
bWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMpOwogCi0gICAgYWRkU3VicmVz
b3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGJhY2tn
cm91bmRBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNv
bXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CiB9CiAKIEhUTUxU
YWJsZUNlbGxFbGVtZW50KiBIVE1MVGFibGVDZWxsRWxlbWVudDo6Y2VsbEFib3ZlKCkgY29uc3QK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29sRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCmluZGV4IDk2YWY3
MDguLmVlNjJlYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ29s
RWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVtZW50
LmNwcApAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEhUTUxUYWJsZUNvbEVsZW1lbnQ6OnNldFNwYW4o
aW50IG4pCiAKIFN0cmluZyBIVE1MVGFibGVDb2xFbGVtZW50Ojp3aWR0aCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0
cmlidXRlKHdpZHRoQXR0cik7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVs
ZW1lbnQuY3BwCmluZGV4IDU5YjA2M2EuLjQ5MDAwNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MVGFibGVFbGVtZW50LmNwcApAQCAtNjU1LDE5ICs2NTUsMTkgQEAgUGFzc1JlZlB0cjxIVE1M
Q29sbGVjdGlvbj4gSFRNTFRhYmxlRWxlbWVudDo6dEJvZGllcygpCiAKIFN0cmluZyBIVE1MVGFi
bGVFbGVtZW50OjpydWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShydWxl
c0F0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHJ1bGVzQXR0cik7CiB9CiAKIFN0
cmluZyBIVE1MVGFibGVFbGVtZW50OjpzdW1tYXJ5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHN1bW1hcnlBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShzdW1t
YXJ5QXR0cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRy
aWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewogICAgIEhUTUxFbGVt
ZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNv
dXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoYmFja2dy
b3VuZEF0dHIpKSk7CisgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKIH0KIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmNwcAppbmRleCA1
ZWYyNWYxLi44ZjcyZDFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJs
ZVNlY3Rpb25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmNwcApAQCAtMTExLDcgKzExMSw3IEBAIGludCBIVE1MVGFibGVTZWN0aW9u
RWxlbWVudDo6bnVtUm93cygpIGNvbnN0CiAKIFN0cmluZyBIVE1MVGFibGVTZWN0aW9uRWxlbWVu
dDo6YWxpZ24oKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpZ25BdHRyKTsK
KyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhbGlnbkF0dHIpOwogfQogCiB2b2lkIEhUTUxU
YWJsZVNlY3Rpb25FbGVtZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTIx
LDcgKzEyMSw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldEFsaWduKGNvbnN0
IFN0cmluZyAmdmFsdWUpCiAKIFN0cmluZyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6Y2goKSBj
b25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoY2hhckF0dHIpOworICAgIHJldHVybiBm
YXN0R2V0QXR0cmlidXRlKGNoYXJBdHRyKTsKIH0KIAogdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxl
bWVudDo6c2V0Q2goY29uc3QgU3RyaW5nICZ2YWx1ZSkKQEAgLTEzMSw3ICsxMzEsNyBAQCB2b2lk
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpzZXRDaChjb25zdCBTdHJpbmcgJnZhbHVlKQogCiBT
dHJpbmcgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoT2ZmKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKGNoYXJvZmZBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZShjaGFyb2ZmQXR0cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENo
T2ZmKGNvbnN0IFN0cmluZyAmdmFsdWUpCkBAIC0xNDEsNyArMTQxLDcgQEAgdm9pZCBIVE1MVGFi
bGVTZWN0aW9uRWxlbWVudDo6c2V0Q2hPZmYoY29uc3QgU3RyaW5nICZ2YWx1ZSkKIAogU3RyaW5n
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojp2QWxpZ24oKSBjb25zdAogewotICAgIHJldHVybiBn
ZXRBdHRyaWJ1dGUodmFsaWduQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUodmFs
aWduQXR0cik7CiB9CiAKIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldFZBbGlnbihj
b25zdCBTdHJpbmcgJnZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
VGV4dEFyZWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHAKaW5kZXggNTdjMTkyMS4uMmQ0YWE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCkBAIC0zODgsNyArMzg4LDcgQEAgdm9pZCBIVE1MVGV4
dEFyZWFFbGVtZW50OjpzZXREZWZhdWx0VmFsdWUoY29uc3QgU3RyaW5nJiBkZWZhdWx0VmFsdWUp
CiBpbnQgSFRNTFRleHRBcmVhRWxlbWVudDo6bWF4TGVuZ3RoKCkgY29uc3QKIHsKICAgICBib29s
IG9rOwotICAgIGludCB2YWx1ZSA9IGdldEF0dHJpYnV0ZShtYXhsZW5ndGhBdHRyKS5zdHJpbmco
KS50b0ludCgmb2spOworICAgIGludCB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUobWF4bGVuZ3Ro
QXR0cikuc3RyaW5nKCkudG9JbnQoJm9rKTsKICAgICByZXR1cm4gb2sgJiYgdmFsdWUgPj0gMCA/
IHZhbHVlIDogLTE7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRl
eHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAKaW5kZXggOGNkM2ZjOS4uZTRlMDg2NCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAKQEAgLTEw
OCw3ICsxMDgsNyBAQCBTdHJpbmcgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OnN0cmlwcGVk
UGxhY2Vob2xkZXIoKSBjb25zdAogewogICAgIC8vIEFjY29yZGluZyB0byB0aGUgSFRNTDUgc3Bl
Y2lmaWNhdGlvbiwgd2UgbmVlZCB0byByZW1vdmUgQ1IgYW5kIExGIGZyb20KICAgICAvLyB0aGUg
YXR0cmlidXRlIHZhbHVlLgotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUg
PSBnZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVZhbHVlID0gZmFzdEdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOwogICAg
IGlmICghYXR0cmlidXRlVmFsdWUuY29udGFpbnMobmV3bGluZUNoYXJhY3RlcikgJiYgIWF0dHJp
YnV0ZVZhbHVlLmNvbnRhaW5zKGNhcnJpYWdlUmV0dXJuKSkKICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZVZhbHVlOwogCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIGJvb2wgaXNOb3RMaW5lQnJl
YWsoVUNoYXIgY2gpIHsgcmV0dXJuIGNoICE9IG5ld2xpbmVDaGFyYWN0ZXIgJiYgY2ggIT0gY2EK
IAogYm9vbCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6aXNQbGFjZWhvbGRlckVtcHR5KCkg
Y29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0
cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1
dGVWYWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUocGxhY2Vob2xkZXJBdHRyKTsKICAgICByZXR1cm4g
YXR0cmlidXRlVmFsdWUuc3RyaW5nKCkuZmluZChpc05vdExpbmVCcmVhaykgPT0gbm90Rm91bmQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3BwCmluZGV4IDA0M2Yw
OGIzLi4yZmFjNDlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHAK
QEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBIVE1MVHJhY2tFbGVtZW50Ojp3aWxsUmVtb3ZlKCkKIAog
S1VSTCBIVE1MVHJhY2tFbGVtZW50OjpzcmMoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgIHJldHVybiBkb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKIH0KIAogdm9p
ZCBIVE1MVHJhY2tFbGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB1cmwpCkBAIC04Niw3ICs4
Niw3IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmluZyYgdXJsKQog
CiBTdHJpbmcgSFRNTFRyYWNrRWxlbWVudDo6a2luZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShraW5kQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoa2luZEF0
dHIpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNldEtpbmQoY29uc3QgU3RyaW5nJiBr
aW5kKQpAQCAtOTYsNyArOTYsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNldEtpbmQoY29u
c3QgU3RyaW5nJiBraW5kKQogCiBTdHJpbmcgSFRNTFRyYWNrRWxlbWVudDo6c3JjbGFuZygpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzcmNsYW5nQXR0cik7CisgICAgcmV0dXJu
IGZhc3RHZXRBdHRyaWJ1dGUoc3JjbGFuZ0F0dHIpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1l
bnQ6OnNldFNyY2xhbmcoY29uc3QgU3RyaW5nJiBzcmNsYW5nKQpAQCAtMTA2LDcgKzEwNiw3IEBA
IHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6c2V0U3JjbGFuZyhjb25zdCBTdHJpbmcmIHNyY2xhbmcp
CiAKIFN0cmluZyBIVE1MVHJhY2tFbGVtZW50OjpsYWJlbCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShsYWJlbEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGxh
YmVsQXR0cik7CiB9CiAKIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6c2V0TGFiZWwoY29uc3QgU3Ry
aW5nJiBsYWJlbCkKQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNl
dExhYmVsKGNvbnN0IFN0cmluZyYgbGFiZWwpCiAKIGJvb2wgSFRNTFRyYWNrRWxlbWVudDo6aXNE
ZWZhdWx0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGRlZmF1bHRBdHRyKTsK
KyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShkZWZhdWx0QXR0cik7CiB9CiAKIHZvaWQgSFRN
TFRyYWNrRWxlbWVudDo6c2V0SXNEZWZhdWx0KGJvb2wgaXNEZWZhdWx0KQpAQCAtMTMzLDcgKzEz
Myw3IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6bG9hZChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0KQogewogICAgIG1fdHJhY2sgPSBMb2FkYWJsZVRleHRUcmFjazo6Y3JlYXRlKGtp
bmQoKSwgbGFiZWwoKSwgc3JjbGFuZygpLCBpc0RlZmF1bHQoKSk7CiAKLSAgICBpZiAoaGFzQXR0
cmlidXRlKHNyY0F0dHIpKQorICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKHNyY0F0dHIpKQogICAg
ICAgICBtX3RyYWNrLT5sb2FkKGdldE5vbkVtcHR5VVJMQXR0cmlidXRlKHNyY0F0dHIpLCBjb250
ZXh0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlkZW9FbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKaW5kZXgg
ZGQwYTUyNi4uMTZkNTg2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVmlk
ZW9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRlb0VsZW1lbnQu
Y3BwCkBAIC0xNTYsMTQgKzE1NiwxNCBAQCB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50Ojp2aWRl
b0hlaWdodCgpIGNvbnN0CiB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50Ojp3aWR0aCgpIGNvbnN0
CiB7CiAgICAgYm9vbCBvazsKLSAgICB1bnNpZ25lZCB3ID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0
cikuc3RyaW5nKCkudG9VSW50KCZvayk7CisgICAgdW5zaWduZWQgdyA9IGZhc3RHZXRBdHRyaWJ1
dGUod2lkdGhBdHRyKS5zdHJpbmcoKS50b1VJbnQoJm9rKTsKICAgICByZXR1cm4gb2sgPyB3IDog
MDsKIH0KICAgICAKIHVuc2lnbmVkIEhUTUxWaWRlb0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0CiB7
CiAgICAgYm9vbCBvazsKLSAgICB1bnNpZ25lZCBoID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIp
LnN0cmluZygpLnRvVUludCgmb2spOworICAgIHVuc2lnbmVkIGggPSBmYXN0R2V0QXR0cmlidXRl
KGhlaWdodEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOwogICAgIHJldHVybiBvayA/IGggOiAw
OwogfQogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCmluZGV4IDY4YjBlYmQuLmUxMTI5
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL1N0ZXBSYW5nZS5jcHAKQEAgLTM1LDkgKzM1LDEwIEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKIFN0ZXBSYW5nZTo6U3RlcFJhbmdlKGNvbnN0IEhUTUxJ
bnB1dEVsZW1lbnQqIGVsZW1lbnQpCiB7Ci0gICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShw
cmVjaXNpb25BdHRyKSkgeworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcHJlY2lzaW9uVmFsdWUg
PSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpOworICAgIGlmICghcHJl
Y2lzaW9uVmFsdWUuaXNOdWxsKCkpIHsKICAgICAgICAgc3RlcCA9IDEuMDsKLSAgICAgICAgaGFz
U3RlcCA9ICFlcXVhbElnbm9yaW5nQ2FzZShlbGVtZW50LT5nZXRBdHRyaWJ1dGUocHJlY2lzaW9u
QXR0ciksICJmbG9hdCIpOworICAgICAgICBoYXNTdGVwID0gIWVxdWFsSWdub3JpbmdDYXNlKHBy
ZWNpc2lvblZhbHVlLnN0cmluZygpLCAiZmxvYXQiKTsKICAgICB9IGVsc2UKICAgICAgICAgaGFz
U3RlcCA9IGVsZW1lbnQtPmdldEFsbG93ZWRWYWx1ZVN0ZXAoJnN0ZXApOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNw
cAppbmRleCBkYTkwODRlLi5kZDlhZDFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvc2hhZG93L1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAKQEAgLTQzNiw3ICs0MzYs
NyBAQCB2b2lkIElucHV0RmllbGRTcGVlY2hCdXR0b25FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50KiBldmVudCkKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNh
c2UgSWRsZTogewogICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgbGFuZ3VhZ2UgPSBpbnB1dC0+
Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCk7Ci0gICAgICAgICAgICAgIFN0cmluZyBncmFtbWFy
ID0gaW5wdXQtPmdldEF0dHJpYnV0ZSh3ZWJraXRncmFtbWFyQXR0cik7CisgICAgICAgICAgICAg
IFN0cmluZyBncmFtbWFyID0gaW5wdXQtPmZhc3RHZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0
dHIpOwogICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QgPSByZW5kZXJlcigpLT5hYnNvbHV0ZUJv
dW5kaW5nQm94UmVjdCgpOwogICAgICAgICAgICAgICBpZiAoc3BlZWNoSW5wdXQoKS0+c3RhcnRS
ZWNvZ25pdGlvbihtX2xpc3RlbmVySWQsIHJlY3QsIGxhbmd1YWdlLCBncmFtbWFyLCBkb2N1bWVu
dCgpLT5zZWN1cml0eU9yaWdpbigpKSkKICAgICAgICAgICAgICAgICAgIHNldFN0YXRlKFJlY29y
ZGluZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFn
ZUFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQu
Y3BwCmluZGV4IDBiNTVmMjQuLmU4ZjI4NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCkBAIC02MTksOSArNjE5LDkgQEAgUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IEluc3BlY3RvclBhZ2VBZ2VudDo6YnVpbGRPYmplY3RGb3JGcmFt
ZShGcmFtZSogZnJhbWUKICAgICBpZiAoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCiAgICAgICAg
IGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoInBhcmVudElkIiwgZnJhbWVJZChmcmFtZS0+dHJlZSgp
LT5wYXJlbnQoKSkpOwogICAgIGlmIChmcmFtZS0+b3duZXJFbGVtZW50KCkpIHsKLSAgICAgICAg
U3RyaW5nIG5hbWUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCktPmdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6Om5hbWVBdHRyKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBmcmFtZS0+b3duZXJFbGVtZW50
KCktPmZhc3RHZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpuYW1lQXR0cik7CiAgICAgICAgIGlmIChu
YW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIG5hbWUgPSBmcmFtZS0+b3duZXJFbGVtZW50KCkt
PmdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cik7CisgICAgICAgICAgICBuYW1lID0gZnJh
bWUtPm93bmVyRWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKTsK
ICAgICAgICAgZnJhbWVPYmplY3QtPnNldFN0cmluZygibmFtZSIsIG5hbWUpOwogICAgIH0KICAg
ICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJ1cmwiLCBmcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCku
c3RyaW5nKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNz
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKaW5kZXgg
MDEzODQ5NC4uMDM4Mzc1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0Zvcm1T
dWJtaXNzaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24u
Y3BwCkBAIC0xNDYsMTMgKzE0NiwxMyBAQCBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBGb3Jt
U3VibWlzc2lvbjo6Y3JlYXRlKEhUTUxGb3JtRWxlbWVudCogZm9ybSwgY29uc3QgQQogICAgIGNv
cGllZEF0dHJpYnV0ZXMuY29weUZyb20oYXR0cmlidXRlcyk7CiAgICAgaWYgKHN1Ym1pdEJ1dHRv
bikgewogICAgICAgICBTdHJpbmcgYXR0cmlidXRlVmFsdWU7Ci0gICAgICAgIGlmICghKGF0dHJp
YnV0ZVZhbHVlID0gc3VibWl0QnV0dG9uLT5nZXRBdHRyaWJ1dGUoZm9ybWFjdGlvbkF0dHIpKS5p
c051bGwoKSkKKyAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmZh
c3RHZXRBdHRyaWJ1dGUoZm9ybWFjdGlvbkF0dHIpKS5pc051bGwoKSkKICAgICAgICAgICAgIGNv
cGllZEF0dHJpYnV0ZXMucGFyc2VBY3Rpb24oYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBpZiAo
IShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmlidXRlKGZvcm1lbmN0eXBl
QXR0cikpLmlzTnVsbCgpKQorICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1
dHRvbi0+ZmFzdEdldEF0dHJpYnV0ZShmb3JtZW5jdHlwZUF0dHIpKS5pc051bGwoKSkKICAgICAg
ICAgICAgIGNvcGllZEF0dHJpYnV0ZXMucGFyc2VFbmNvZGluZ1R5cGUoYXR0cmlidXRlVmFsdWUp
OwotICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmli
dXRlKGZvcm1tZXRob2RBdHRyKSkuaXNOdWxsKCkpCisgICAgICAgIGlmICghKGF0dHJpYnV0ZVZh
bHVlID0gc3VibWl0QnV0dG9uLT5mYXN0R2V0QXR0cmlidXRlKGZvcm1tZXRob2RBdHRyKSkuaXNO
dWxsKCkpCiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnBhcnNlTWV0aG9kVHlwZShhdHRy
aWJ1dGVWYWx1ZSk7Ci0gICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0gc3VibWl0QnV0dG9u
LT5nZXRBdHRyaWJ1dGUoZm9ybXRhcmdldEF0dHIpKS5pc051bGwoKSkKKyAgICAgICAgaWYgKCEo
YXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybXRhcmdl
dEF0dHIpKS5pc051bGwoKSkKICAgICAgICAgICAgIGNvcGllZEF0dHJpYnV0ZXMuc2V0VGFyZ2V0
KGF0dHJpYnV0ZVZhbHVlKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9h
ZGVyLmNwcAppbmRleCA4MzkyMzY1Li4yMDY1MmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9JbWFn
ZUxvYWRlci5jcHAKQEAgLTE1Myw3ICsxNTMsNyBAQCB2b2lkIEltYWdlTG9hZGVyOjp1cGRhdGVG
cm9tRWxlbWVudCgpCiAgICAgaWYgKCFkb2N1bWVudC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQXRvbWljU3RyaW5nIGF0dHIgPSBtX2VsZW1lbnQtPmdldEF0dHJpYnV0ZSht
X2VsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKKyAgICBBdG9taWNTdHJpbmcg
YXR0ciA9IG1fZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShtX2VsZW1lbnQtPmltYWdlU291cmNl
QXR0cmlidXRlTmFtZSgpKTsKIAogICAgIGlmIChhdHRyID09IG1fZmFpbGVkTG9hZFVSTCkKICAg
ICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBiZGRhZTYxLi4yODFkZjA3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtNDk5LDExICs0OTksMTEgQEAgU3RyaW5nIEZyYW1lOjpt
YXRjaExhYmVsc0FnYWluc3RFbGVtZW50KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBsYWJlbHMsIEVs
ZW1lbnQqIGUKICAgICAvLyBTZWUgNzUzODMzMCBmb3Igb25lIHBvcHVsYXIgc2l0ZSB0aGF0IGJl
bmVmaXRzIGZyb20gdGhlIGlkIGVsZW1lbnQgY2hlY2suCiAgICAgLy8gRklYTUU6IFRoaXMgY29k
ZSBpcyBtaXJyb3JlZCBpbiBGcmFtZU1hYy5tbS4gSXQgd291bGQgYmUgbmljZSB0byBtYWtlIHRo
ZSBNYWMgY29kZSBjYWxsIHRoZSBwbGF0Zm9ybS1hZ25vc3RpYwogICAgIC8vIGNvZGUsIHdoaWNo
IHdvdWxkIHJlcXVpcmUgY29udmVydGluZyB0aGUgTlNBcnJheSBvZiBOU1N0cmluZ3MgdG8gYSBW
ZWN0b3Igb2YgU3RyaW5ncyBzb21ld2hlcmUgYWxvbmcgdGhlIHdheS4KLSAgICBTdHJpbmcgcmVz
dWx0RnJvbU5hbWVBdHRyaWJ1dGUgPSBtYXRjaExhYmVsc0FnYWluc3RTdHJpbmcobGFiZWxzLCBl
bGVtZW50LT5nZXRBdHRyaWJ1dGUobmFtZUF0dHIpKTsKKyAgICBTdHJpbmcgcmVzdWx0RnJvbU5h
bWVBdHRyaWJ1dGUgPSBtYXRjaExhYmVsc0FnYWluc3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKG5hbWVBdHRyKSk7CiAgICAgaWYgKCFyZXN1bHRGcm9tTmFtZUF0dHJp
YnV0ZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiByZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZTsK
ICAgICAKLSAgICByZXR1cm4gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5nKGxhYmVscywgZWxlbWVu
dC0+Z2V0QXR0cmlidXRlKGlkQXR0cikpOworICAgIHJldHVybiBtYXRjaExhYmVsc0FnYWluc3RT
dHJpbmcobGFiZWxzLCBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGlkQXR0cikpOwogfQogCiB2
b2lkIEZyYW1lOjpzZXRQcmludGluZyhib29sIHByaW50aW5nLCBjb25zdCBGbG9hdFNpemUmIHBh
Z2VTaXplLCBmbG9hdCBtYXhpbXVtU2hyaW5rUmF0aW8sIEFkanVzdFZpZXdTaXplT3JOb3Qgc2hv
dWxkQWRqdXN0Vmlld1NpemUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VT
ZXJpYWxpemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIuY3BwCmlu
ZGV4IGM5YTc4NGQuLmNiMzhhZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZVNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZVNlcmlhbGl6ZXIu
Y3BwCkBAIC0yMjgsMTQgKzIyOCwxNCBAQCB2b2lkIFBhZ2VTZXJpYWxpemVyOjpzZXJpYWxpemVG
cmFtZShGcmFtZSogZnJhbWUpCiAKICAgICAgICAgaWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppbWdUYWcpKSB7CiAgICAgICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudCk7Ci0gICAgICAg
ICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmdldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OnNyY0F0dHIpKTsKKyAgICAgICAgICAgIEtVUkwgdXJsID0gZG9j
dW1lbnQtPmNvbXBsZXRlVVJMKGltYWdlRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnNyY0F0dHIpKTsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGlt
YWdlRWxlbWVudC0+Y2FjaGVkSW1hZ2UoKTsKICAgICAgICAgICAgIGFkZEltYWdlVG9SZXNvdXJj
ZXMoY2FjaGVkSW1hZ2UsIHVybCk7CiAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC0+aGFzVGFn
TmFtZShIVE1MTmFtZXM6OmxpbmtUYWcpKSB7CiAgICAgICAgICAgICBIVE1MTGlua0VsZW1lbnQq
IGxpbmtFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTExpbmtFbGVtZW50Kj4oZWxlbWVudCk7CiAg
ICAgICAgICAgICBTdHlsZVNoZWV0KiBzaGVldCA9IGxpbmtFbGVtZW50LT5zaGVldCgpOwogICAg
ICAgICAgICAgaWYgKHNoZWV0ICYmIHNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAgICAg
ICAgICAgICAgIEtVUkwgdXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpocmVmQXR0cikpOworICAgICAgICAgICAgICAgIEtVUkwg
dXJsID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGxpbmtFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKICAgICAgICAgICAgICAgICBzZXJpYWxpemVDU1NTdHls
ZVNoZWV0KHN0YXRpY19jYXN0PENTU1N0eWxlU2hlZXQqPihzaGVldCksIHVybCk7CiAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fcmVzb3VyY2VVUkxzLmNvbnRhaW5zKHVybCkpOwogICAgICAgICAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0gYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQppbmRleCAyYjU3ZDJkLi42NWI2ZDk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL21hYy9GcmFtZU1hYy5tbQpAQCAtMjQ2LDExICsyNDYsMTEgQEAg
TlNTdHJpbmcqIEZyYW1lOjptYXRjaExhYmVsc0FnYWluc3RFbGVtZW50KE5TQXJyYXkqIGxhYmVs
cywgRWxlbWVudCogZWxlbWVudCkKICAgICAvLyBTZWUgNzUzODMzMCBmb3Igb25lIHBvcHVsYXIg
c2l0ZSB0aGF0IGJlbmVmaXRzIGZyb20gdGhlIGlkIGVsZW1lbnQgY2hlY2suCiAgICAgLy8gRklY
TUU6IFRoaXMgY29kZSBpcyBtaXJyb3JlZCBpbiBGcmFtZS5jcHAuIEl0IHdvdWxkIGJlIG5pY2Ug
dG8gbWFrZSB0aGUgTWFjIGNvZGUgY2FsbCB0aGUgcGxhdGZvcm0tYWdub3N0aWMKICAgICAvLyBj
b2RlLCB3aGljaCB3b3VsZCByZXF1aXJlIGNvbnZlcnRpbmcgdGhlIE5TQXJyYXkgb2YgTlNTdHJp
bmdzIHRvIGEgVmVjdG9yIG9mIFN0cmluZ3Mgc29tZXdoZXJlIGFsb25nIHRoZSB3YXkuCi0gICAg
U3RyaW5nIHJlc3VsdEZyb21OYW1lQXR0cmlidXRlID0gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5n
KGxhYmVscywgZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSk7CisgICAgU3RyaW5nIHJl
c3VsdEZyb21OYW1lQXR0cmlidXRlID0gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5nKGxhYmVscywg
ZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikpOwogICAgIGlmICghcmVzdWx0RnJv
bU5hbWVBdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0RnJvbU5hbWVB
dHRyaWJ1dGU7CiAgICAgCi0gICAgcmV0dXJuIG1hdGNoTGFiZWxzQWdhaW5zdFN0cmluZyhsYWJl
bHMsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICByZXR1cm4gbWF0Y2hMYWJl
bHNBZ2FpbnN0U3RyaW5nKGxhYmVscywgZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShpZEF0dHIp
KTsKIH0KIAogTlNJbWFnZSogRnJhbWU6OmltYWdlRnJvbVJlY3QoTlNSZWN0IHJlY3QpIGNvbnN0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAKaW5kZXggYjBiMDA4Yy4uODljNjQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9taXVtLmNwcApAQCAtMjM4
LDcgKzIzOCw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoQ2hyb21pdW1E
YXRhT2JqZWN0KiBkYXRhT2JqZWN0LCBFbGVtZW50KiBlbGVtCiAgICAgaWYgKGZpbGVuYW1lLmlz
RW1wdHkoKSkKICAgICAgICAgZmlsZW5hbWUgPSB1cmwubGFzdFBhdGhDb21wb25lbnQoKTsKICAg
ICBpZiAoZmlsZW5hbWUuaXNFbXB0eSgpKQotICAgICAgICBmaWxlbmFtZSA9IGVsZW1lbnQtPmdl
dEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICAgICAgZmlsZW5hbWUgPSBlbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIGVsc2UgewogICAgICAgICAvLyBTdHJpcCBhbnkgZXhp
c3RpbmcgZXh0ZW5zaW9uLiBBc3N1bWUgdGhhdCBhbHQgdGV4dCBpcyB1c3VhbGx5IG5vdCBhIGZp
bGVuYW1lLgogICAgICAgICBpbnQgZXh0ZW5zaW9uSW5kZXggPSBmaWxlbmFtZS5yZXZlcnNlRmlu
ZCgnLicpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFz
dGVib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bh
c3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggZGJmYWEzYi4uYjU4M2U5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0u
Y3BwCkBAIC0xNDEsMTQgKzE0MSwxNCBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9k
ZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpCiAgICAgLy8gbGluay4g
IFRoaXMgaXNuJ3QgdXNlZnVsIHRvIHVzLCBzbyBnZXQgdGhlIGFjdHVhbCBpbWFnZSBVUkwuCiAg
ICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1M
TmFtZXM6OmltZ1RhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkK
LSAgICAgICAgdXJsU3RyaW5nID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRy
aWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKTsKKyAgICAgICAgdXJsU3RyaW5nID0gc3RhdGljX2Nh
c3Q8RWxlbWVudCo+KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7
CiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVz
OjppbWFnZVRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihu
b2RlKS0+Z2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgdXJsU3Ry
aW5nID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKTsKICNlbmRpZgogICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjplbWJlZFRhZykgfHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dFRhZykpIHsKICAgICAgICAgRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQq
Pihub2RlKTsKLSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1l
bnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKKyAgICAgICAgdXJsU3RyaW5nID0gZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShlbGVtZW50LT5pbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUo
KSk7CiAgICAgfQogICAgIEtVUkwgdXJsID0gdXJsU3RyaW5nLmlzRW1wdHkoKSA/IEtVUkwoKSA6
IG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRN
TFNwYWNlcyh1cmxTdHJpbmcpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwCmluZGV4IGNhNTg1ZDYuLjUyNmJiNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTg5LDE0ICs4OSwxNCBAQCBz
dGF0aWMgS1VSTCBnZXRVUkxGb3JJbWFnZU5vZGUoTm9kZSogbm9kZSkKICAgICAvLyBGSVhNRTog
TGF0ZXIgdGhpcyBjb2RlIHNob3VsZCBiZSBzaGFyZWQgd2l0aCBDaHJvbWl1bSBzb21laG93LiBD
aGFuY2VzIGFyZSBhbGwgcGxhdGZvcm1zIHdhbnQgaXQuCiAgICAgQXRvbWljU3RyaW5nIHVybFN0
cmluZzsKICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmltZ1RhZykgfHwgbm9k
ZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OmlucHV0VGFnKSkKLSAgICAgICAgdXJsU3RyaW5nID0g
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNB
dHRyKTsKKyAgICAgICAgdXJsU3RyaW5nID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUpLT5m
YXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CiAjaWYgRU5BQkxFKFNWRykKICAg
ICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05hbWVzOjppbWFnZVRhZykpCi0gICAgICAg
IHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKFhM
aW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICAgICAgdXJsU3RyaW5nID0gc3RhdGljX2Nhc3Q8RWxl
bWVudCo+KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKICNl
bmRpZgogICAgIGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjplbWJlZFRhZykg
fHwgbm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVjdFRhZykpIHsKICAgICAgICAgRWxl
bWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKTsKLSAgICAgICAgdXJs
U3RyaW5nID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmli
dXRlTmFtZSgpKTsKKyAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShlbGVtZW50LT5pbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgfQogICAgIHJldHVy
biB1cmxTdHJpbmcuaXNFbXB0eSgpID8gS1VSTCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0g
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZlcnRlci5tbQppbmRleCAyODNh
NzQwLi42Nzc0YzRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRN
TENvbnZlcnRlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvSFRNTENvbnZl
cnRlci5tbQpAQCAtMTc1MCw3ICsxNzUwLDcgQEAgc3RhdGljIE5TRmlsZVdyYXBwZXIgKmZpbGVX
cmFwcGVyRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQogewogICAgIE5TRmlsZVdyYXBwZXIg
KndyYXBwZXIgPSBuaWw7CiAgICAgCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyID0gZWxl
bWVudC0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0
ciA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cik7CiAgICAgaWYgKCFhdHRyLmlz
RW1wdHkoKSkgewogICAgICAgICBOU1VSTCAqVVJMID0gZWxlbWVudC0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwoYXR0cik7CiAgICAgICAgIGlmIChEb2N1bWVudExvYWRlciogbG9hZGVyID0gZWxl
bWVudC0+ZG9jdW1lbnQoKS0+bG9hZGVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9DbGlwYm9hcmRXaW4uY3BwCmluZGV4IGJmNDA4ZDcuLmQ5ZWM1NjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9DbGlwYm9hcmRXaW4uY3BwCkBAIC02NDIsNyArNjQyLDcgQEAg
c3RhdGljIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChJRGF0YU9iamVjdCogZGF0YU9iamVj
dCwgRWxlbWVudCogZWxlbWVudCwgY28KICAgICBpZiAoIWltYWdlQnVmZmVyIHx8ICFpbWFnZUJ1
ZmZlci0+c2l6ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBIR0xPQkFMIGltYWdlRmlsZURl
c2NyaXB0b3IgPSBjcmVhdGVHbG9iYWxJbWFnZUZpbGVEZXNjcmlwdG9yKHVybC5zdHJpbmcoKSwg
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKGFsdEF0dHIpLCBjYWNoZWRJbWFnZSk7CisgICAgSEdMT0JB
TCBpbWFnZUZpbGVEZXNjcmlwdG9yID0gY3JlYXRlR2xvYmFsSW1hZ2VGaWxlRGVzY3JpcHRvcih1
cmwuc3RyaW5nKCksIGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYWx0QXR0ciksIGNhY2hlZElt
YWdlKTsKICAgICBpZiAoIWltYWdlRmlsZURlc2NyaXB0b3IpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNjcxLDcgKzY3MSw3IEBAIHZvaWQgQ2xpcGJvYXJkV2luOjpkZWNsYXJlQW5kV3JpdGVEcmFn
SW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjCiAKICAgICB3cml0ZUlt
YWdlVG9EYXRhT2JqZWN0KG1fd3JpdGFibGVEYXRhT2JqZWN0LmdldCgpLCBlbGVtZW50LCB1cmwp
OwogCi0gICAgQXRvbWljU3RyaW5nIGltYWdlVVJMID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKHNy
Y0F0dHIpOworICAgIEF0b21pY1N0cmluZyBpbWFnZVVSTCA9IGVsZW1lbnQtPmZhc3RHZXRBdHRy
aWJ1dGUoc3JjQXR0cik7CiAgICAgaWYgKGltYWdlVVJMLmlzRW1wdHkoKSkgCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1
bHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCmluZGV4
IGIyY2UyMjYuLmI0YWMxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGl0VGVzdFJl
c3VsdC5jcHAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBTdHJpbmcgSGl0VGVzdFJlc3VsdDo6YWx0RGlz
cGxheVN0cmluZygpIGNvbnN0CiAgICAgCiAgICAgaWYgKG1faW5uZXJOb25TaGFyZWROb2RlLT5o
YXNUYWdOYW1lKGltZ1RhZykpIHsKICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UgPSBz
dGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4obV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkp
OwotICAgICAgICByZXR1cm4gZGlzcGxheVN0cmluZyhpbWFnZS0+Z2V0QXR0cmlidXRlKGFsdEF0
dHIpLCBtX2lubmVyTm9uU2hhcmVkTm9kZS5nZXQoKSk7CisgICAgICAgIHJldHVybiBkaXNwbGF5
U3RyaW5nKGltYWdlLT5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpLCBtX2lubmVyTm9uU2hhcmVk
Tm9kZS5nZXQoKSk7CiAgICAgfQogICAgIAogICAgIGlmIChtX2lubmVyTm9uU2hhcmVkTm9kZS0+
aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKQEAgLTMyOCw3ICszMjgsNyBAQCBLVVJMIEhpdFRlc3RS
ZXN1bHQ6OmFic29sdXRlSW1hZ2VVUkwoKSBjb25zdAogI2VuZGlmCiAgICAgICAgKSB7CiAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9pbm5lck5vblNo
YXJlZE5vZGUuZ2V0KCkpOwotICAgICAgICB1cmxTdHJpbmcgPSBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoZWxlbWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOworICAgICAgICB1cmxTdHJp
bmcgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmli
dXRlTmFtZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIEtVUkwoKTsKIApAQCAtNDc2
LDEwICs0NzYsMTAgQEAgS1VSTCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwoKSBjb25z
dAogCiAgICAgQXRvbWljU3RyaW5nIHVybFN0cmluZzsKICAgICBpZiAobV9pbm5lclVSTEVsZW1l
bnQtPmhhc1RhZ05hbWUoYVRhZykgfHwgbV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUoYXJl
YVRhZykgfHwgbV9pbm5lclVSTEVsZW1lbnQtPmhhc1RhZ05hbWUobGlua1RhZykpCi0gICAgICAg
IHVybFN0cmluZyA9IG1faW5uZXJVUkxFbGVtZW50LT5nZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOwor
ICAgICAgICB1cmxTdHJpbmcgPSBtX2lubmVyVVJMRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZSho
cmVmQXR0cik7CiAjaWYgRU5BQkxFKFNWRykKICAgICBlbHNlIGlmIChtX2lubmVyVVJMRWxlbWVu
dC0+aGFzVGFnTmFtZShTVkdOYW1lczo6YVRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IG1faW5u
ZXJVUkxFbGVtZW50LT5nZXRBdHRyaWJ1dGUoWExpbmtOYW1lczo6aHJlZkF0dHIpOworICAgICAg
ICB1cmxTdHJpbmcgPSBtX2lubmVyVVJMRWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTGlua05h
bWVzOjpocmVmQXR0cik7CiAjZW5kaWYKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBLVVJMKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlscy5jcHAKaW5kZXggMzk4ODJi
MS4uZmI0ZTcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRl
dGFpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzLmNw
cApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIFJlbmRlckRldGFpbHM6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogCiBib29sIFJlbmRl
ckRldGFpbHM6OmlzT3BlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSA/ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0
cmlidXRlKG9wZW5BdHRyKS5pc051bGwoKSA6IGZhbHNlOworICAgIHJldHVybiBub2RlKCkgJiYg
bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkgPyAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkt
PmZhc3RHZXRBdHRyaWJ1dGUob3BlbkF0dHIpLmlzTnVsbCgpIDogZmFsc2U7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCmluZGV4IDY0YTlhOTguLjZiOGZmYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtMzk4LDcgKzM5OCw3IEBAIFN0cmluZyBSZW5kZXJN
ZW51TGlzdDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QK
ICAgICBpZiAobGlzdEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIHJldHVybiBsaXN0SXRlbXNbbGlzdEluZGV4XS0+Z2V0QXR0cmlidXRl
KGFyaWFfbGFiZWxBdHRyKTsKKyAgICByZXR1cm4gbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmZhc3RH
ZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogfQogICAgIAogU3RyaW5nIFJlbmRlck1lbnVM
aXN0OjppdGVtVG9vbFRpcCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGFkMzViZTUuLmNhYTcwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDI4LDcgKzEwMjgs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBp
ZiAoIW4gfHwgIW4tPmlzTGluaygpIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obiktPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBo
cmVmID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRy
KTsKICAgICBpZiAoaHJlZi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnRleHQt
PnNldFVSTEZvclJlY3Qobi0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZiksIHJlY3QpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCA3Njk1
Zjk2Li42MjZmOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgaWYgKG5vZGUoKSAmJiBzdHlsZSgpLT5hdXRv
V3JhcCgpKSB7CiAgICAgICAgIC8vIFNlZSBpZiBub3dyYXAgd2FzIHNldC4KICAgICAgICAgTGVu
Z3RoIHcgPSBzdHlsZU9yQ29sTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIFN0cmluZyBub3dyYXAg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKG5vd3JhcEF0dHIp
OworICAgICAgICBTdHJpbmcgbm93cmFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkt
PmZhc3RHZXRBdHRyaWJ1dGUobm93cmFwQXR0cik7CiAgICAgICAgIGlmICghbm93cmFwLmlzTnVs
bCgpICYmIHcuaXNGaXhlZCgpKQogICAgICAgICAgICAgLy8gTm93cmFwIGlzIHNldCwgYnV0IHdl
IGRpZG4ndCBhY3R1YWxseSB1c2UgaXQgYmVjYXVzZSBvZiB0aGUKICAgICAgICAgICAgIC8vIGZp
eGVkIHdpZHRoIHNldCBvbiB0aGUgY2VsbC4gIEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRy
YWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDUzN2ExN2QuLmZiYzVkNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCkBAIC01NTYsNyArNTU2LDcgQEAgRVZpc2liaWxpdHkgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3QKIAogY29uc3QgQXRvbWlj
U3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFtZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1
dGUoYXV0b3NhdmVBdHRyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSktPmZhc3RHZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKIH0KIAogLy8gUG9wdXBNZW51Q2xp
ZW50IG1ldGhvZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAppbmRleCA1YjI5YmI1Li44MWJkMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIGJvb2wg
aXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlU3Bhbihjb25zdCBOb2RlKiBub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgaWYgKGVsZW0tPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpICE9ICJBcHBsZS1zdHlsZS1zcGFuIikKKyAgICBpZiAoZWxlbS0+ZmFzdEdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9ICJBcHBsZS1zdHlsZS1zcGFuIikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAppbmRleCBiODc2ZWIyLi5hNzcyN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKQEAgLTEyMiw3ICsxMjIsNyBA
QCBJbnRTaXplIFJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCkKICAgICAvLyBX
aGVuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIHZpZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2Ug
dGhlIHByb3ZpZGVkCiAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2
aWRlbyBlbGVtZW50IGFzIHRoZSBpbnRyaW5zaWMgc2l6ZSB1bnRpbAogICAgIC8vIGJldHRlciB2
YWx1ZXMgYmVjb21lIGF2YWlsYWJsZS4gCi0gICAgaWYgKHZpZGVvLT5oYXNBdHRyaWJ1dGUod2lk
dGhBdHRyKSAmJiB2aWRlby0+aGFzQXR0cmlidXRlKGhlaWdodEF0dHIpKQorICAgIGlmICh2aWRl
by0+ZmFzdEhhc0F0dHJpYnV0ZSh3aWR0aEF0dHIpICYmIHZpZGVvLT5mYXN0SGFzQXR0cmlidXRl
KGhlaWdodEF0dHIpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSh2aWRlby0+d2lkdGgoKSwgdmlk
ZW8tPmhlaWdodCgpKTsKIAogICAgIC8vIDx2aWRlbz4gaW4gc3RhbmRhbG9uZSBtZWRpYSBkb2N1
bWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlIGRlZmF1bHQgMzAweDE1MApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCmluZGV4
IGY3YmJmNzEuLmNlOWQ0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAKQEAgLTU1LDE0ICs1NSwxNCBAQCB2b2lk
IFJlbmRlck1hdGhNTEZlbmNlZDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIEVsZW1lbnQqIGZl
bmNlZCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpOwogIAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgb3Blbi9jbG9zZSB2YWx1ZXMgd2l0aCBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciAodGhl
eSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIHRleHQpLgotICAgIEF0b21pY1N0cmluZyBvcGVuVmFs
dWUgPSBmZW5jZWQtPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6b3BlbkF0dHIpOworICAgIEF0
b21pY1N0cmluZyBvcGVuVmFsdWUgPSBmZW5jZWQtPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFt
ZXM6Om9wZW5BdHRyKTsKICAgICBpZiAob3BlblZhbHVlLmxlbmd0aCgpID4gMCkKICAgICAgICAg
bV9vcGVuID0gb3BlblZhbHVlWzBdOwotICAgIEF0b21pY1N0cmluZyBjbG9zZVZhbHVlID0gZmVu
Y2VkLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmNsb3NlQXR0cik7CisgICAgQXRvbWljU3Ry
aW5nIGNsb3NlVmFsdWUgPSBmZW5jZWQtPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmNs
b3NlQXR0cik7CiAgICAgaWYgKGNsb3NlVmFsdWUubGVuZ3RoKCkgPiAwKQogICAgICAgICBtX2Ns
b3NlID0gY2xvc2VWYWx1ZVswXTsKICAgICAKLSAgICBBdG9taWNTdHJpbmcgc2VwYXJhdG9ycyA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmZW5jZWQpLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6
OnNlcGFyYXRvcnNBdHRyKTsKKyAgICBBdG9taWNTdHJpbmcgc2VwYXJhdG9ycyA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihmZW5jZWQpLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzZXBh
cmF0b3JzQXR0cik7CiAgICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7CiAgICAgICAgIFZl
Y3RvcjxVQ2hhcj4gY2hhcmFjdGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBzZXBhcmF0b3JzLmxlbmd0aCgpOyBpKyspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKaW5kZXggZTJl
ZGRjYi4uYjdjZjQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIEVsZW1lbnQqIGZy
YWN0aW9uID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSk7CiAgICAgCiAgICAgUmVuZGVy
T2JqZWN0KiBudW1lcmF0b3IgPSBmaXJzdENoaWxkKCk7Ci0gICAgU3RyaW5nIG5hbGlnbiA9IGZy
YWN0aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om51bWFsaWduQXR0cik7CisgICAgU3Ry
aW5nIG5hbGlnbiA9IGZyYWN0aW9uLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpudW1h
bGlnbkF0dHIpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYWxpZ24sICJsZWZ0IikpCiAg
ICAgICAgIG51bWVyYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKExFRlQpOwogICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbGlnbiwgInJpZ2h0IikpCkBAIC03NCw3ICs3NCw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICBpZiAo
IWRlbm9taW5hdG9yKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU3RyaW5nIGRhbGlnbiA9
IGZyYWN0aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmRlbm9tYWxpZ25BdHRyKTsKKyAg
ICBTdHJpbmcgZGFsaWduID0gZnJhY3Rpb24tPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6
OmRlbm9tYWxpZ25BdHRyKTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGFsaWduLCAibGVm
dCIpKQogICAgICAgICBkZW5vbWluYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKExFRlQpOwog
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRhbGlnbiwgInJpZ2h0IikpCkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICAgICAgZGVub21pbmF0b3ItPnN0eWxlKCktPnNldFRleHRBbGlnbihDRU5URVIpOwogICAg
IAogICAgIC8vIEZJWE1FOiBwYXJzZSB1bml0cwotICAgIFN0cmluZyB0aGlja25lc3MgPSBmcmFj
dGlvbi0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpsaW5ldGhpY2tuZXNzQXR0cik7CisgICAg
U3RyaW5nIHRoaWNrbmVzcyA9IGZyYWN0aW9uLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVz
OjpsaW5ldGhpY2tuZXNzQXR0cik7CiAgICAgbV9saW5lVGhpY2tuZXNzID0gZ0xpbmVNZWRpdW07
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywgInRoaW4iKSkKICAgICAgICAg
bV9saW5lVGhpY2tuZXNzID0gZ0xpbmVUaGluOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCA3ZjAzOWI5
Li5iZjdmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAvLyBXZSBtYWRlIG5l
ZWQgdGhlIGVsZW1lbnQgbGF0ZXIgaWYgd2UgY2FuJ3Qgc3RyZXRjaC4KICAgICBpZiAobm9kZSgp
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBpZiAoRWxlbWVu
dCogbW8gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSkgewotICAgICAgICAgICAgQXRv
bWljU3RyaW5nIHN0cmV0Y2h5QXR0ciA9IG1vLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnN0
cmV0Y2h5QXR0cik7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgc3RyZXRjaHlBdHRyID0gbW8t
PmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnN0cmV0Y2h5QXR0cik7CiAgICAgICAgICAg
ICBzdHJldGNoRGlzYWJsZWQgPSBlcXVhbElnbm9yaW5nQ2FzZShzdHJldGNoeUF0dHIsICJmYWxz
ZSIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiBzdHJldGNoaW5nIGlzbid0IGRp
c2FibGVkLCBnZXQgdGhlIGNoYXJhY3RlciBmcm9tIHRoZSB0ZXh0IGNvbnRlbnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCAzNDBlMjAxLi42NmJkYWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29sIFNWR0ZvbnREYXRhOjph
cHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaERhdGEm
IGdseQogCiAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gcGFyZW50UmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsKICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudFJlbmRlck9iamVjdEVsZW1lbnQgPSB0b0VsZW1lbnQocGFyZW50UmVuZGVy
T2JqZWN0LT5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBsYW5ndWFnZSA9IHBhcmVudFJlbmRlck9i
amVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICAg
ICAgbGFuZ3VhZ2UgPSBwYXJlbnRSZW5kZXJPYmplY3RFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJPYmpl
Y3RFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykpIHsKICAgICAgICAg
ICAgICAgICBTVkdBbHRHbHlwaEVsZW1lbnQqIGFsdEdseXBoID0gc3RhdGljX2Nhc3Q8U1ZHQWx0
R2x5cGhFbGVtZW50Kj4ocGFyZW50UmVuZGVyT2JqZWN0RWxlbWVudCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHU2NyaXB0RWxlbWVudC5jcHAKaW5kZXggN2I5YmNjOC4uMGJkNGFmZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcApAQCAtMjMyLDcgKzIzMiw3IEBAIGJvb2wg
U1ZHU2NyaXB0RWxlbWVudDo6ZGVmZXJBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CiAKIGJvb2wgU1ZH
U2NyaXB0RWxlbWVudDo6aGFzU291cmNlQXR0cmlidXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4g
aGFzQXR0cmlidXRlKFhMaW5rTmFtZXM6OmhyZWZBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0
dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7CiB9CiAKIHZvaWQgU1ZHU2NyaXB0RWxlbWVu
dDo6ZGlzcGF0Y2hMb2FkRXZlbnQoKQo=
</data>
<flag name="commit-queue"
          id="102258"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>105974</attachid>
            <date>2011-09-01 08:56:04 -0700</date>
            <delta_ts>2011-09-01 10:08:55 -0700</delta_ts>
            <desc>Proposed patch</desc>
            <filename>bug-67394-v2.diff</filename>
            <type>text/plain</type>
            <size>103612</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyOGU5ZGQzLi45NzI2NDU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjU4
IEBACisyMDExLTA5LTAxICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4KKworICAg
ICAgICBVc2UgZmFzdEdldEF0dHJpYnV0ZSgpIGFuZCBmYXN0SGFzQXR0cmlidXRlKCkgd2hlcmUg
YXBwcm9wcmlhdGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NzM5NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIENoYW5nZSBjYWxsIHNpdGVzIHRoYXQgZG9uJ3QgY2hlY2sgdGhlICJzdHlsZSIgb3IgU1ZH
IGFuaW1hdGFibGUKKyAgICAgICAgYXR0cmlidXRlcyB0byB1c2UgZmFzdEdldEF0dHJpYnV0ZSgp
L2Zhc3RIYXNBdHRyaWJ1dGUoKSBpbnN0ZWFkCisgICAgICAgIG9mIGdldEF0dHJpYnV0ZSgpL2hh
c0F0dHJpYnV0ZSgpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhpcyBpcyBhIG1pbm9yIHBl
cmZvcm1hbmNlIG9wdGltaXphdGlvbi4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub2RlSGFzUm9sZSk6CisgICAgICAgICog
YWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJBdGsuY3BwOgorICAg
ICAgICAod2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6YnVpbGRBY2Nlc3NLZXlNYXApOgor
ICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlY2FsY1N0eWxlU2VsZWN0b3IpOgorICAgICAg
ICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmJhc2VVUkkp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6c3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlKToKKyAgICAgICAg
KiBkb20vTmFtZU5vZGVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5hbWVOb2RlTGlzdDo6
bm9kZU1hdGNoZXMpOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6aXNMZWdhY3lBcHBsZVN0eWxlU3Bhbik6CisgICAgICAgIChXZWJD
b3JlOjppc0VtcHR5Rm9udFRhZyk6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFu
ZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2NrKToKKyAgICAgICAgKiBlZGl0aW5n
L0VkaXRpbmdTdHlsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5bGU6OmVsZW1l
bnRJc1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KToKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSW50ZXJjaGFuZ2VO
ZXdsaW5lTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjppc0ludGVyY2hhbmdlQ29udmVydGVkU3Bh
Y2VTcGFuKToKKyAgICAgICAgKFdlYkNvcmU6OmlzTWFpbFBhc3RlQXNRdW90YXRpb25Ob2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzSW5saW5lTm9kZVdpdGhTdHlsZSk6CisgICAgICAgICogZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwbGl0RWxl
bWVudENvbW1hbmQ6OmRvVW5hcHBseSk6CisgICAgICAgICogZWRpdGluZy9odG1sZWRpdGluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc1RhYlNwYW5Ob2RlKToKKyAgICAgICAgKiBlZGl0aW5n
L21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzaG91bGRJbmNsdWRlV3JhcHBlckZvckZ1
bGx5U2VsZWN0ZWRSb290KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZU1hcmt1cCk6CisgICAg
ICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
QW5jaG9yRWxlbWVudDo6ZHJhZ2dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JF
bGVtZW50OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50OjpuYW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxBbmNob3JFbGVtZW50Ojp0YXJnZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNlbmRQaW5ncyk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQW5jaG9yRWxlbWVudDo6aGFuZGxlQ2xpY2spOgorICAgICAgICAqIGh0bWwvSFRN
TEFwcGxldEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEFwcGxldEVsZW1lbnQ6
OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBodG1sL0hUTUxBcmVhRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MQXJlYUVsZW1lbnQ6OnRhcmdldCk6CisgICAgICAgICogaHRt
bC9IVE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50
OjphTGluayk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVsZW1lbnQ6OmJnQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpsaW5rKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxCb2R5RWxlbWVudDo6dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQm9keUVs
ZW1lbnQ6OnZMaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6YWRkU3Vi
cmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCdXR0b25FbGVtZW50Ojp2YWx1ZSk6CisgICAg
ICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Q2FudmFzRWxlbWVudDo6cmVzZXQpOgorICAgICAgICAqIGh0bWwvSFRNTENvbGxlY3Rpb24uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTENvbGxlY3Rpb246OmNoZWNrRm9yTmFtZU1hdGNoKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAg
ICAgICAqIGh0bWwvSFRNTERvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1
bWVudDo6ZGlyKToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MRWxlbWVudDo6ZHJhZ2dhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVt
ZW50Ojp0aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2
ZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjpkaXJlY3Rpb25hbGl0eUlmaGFz
RGlyQXV0b0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRWxlbWVudDo6YWRqdXN0
RGlyZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0
ZXJDaGlsZHJlbkNoYW5nZWQpOgorICAgICAgICAqIGh0bWwvSFRNTEVtYmVkRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MRW1iZWRFbGVtZW50Ojp1cGRhdGVXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEVtYmVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1
dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtQ29sbGVjdGlvbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5hbWVkRm9ybUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEZvcm1Db2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2FjaGUpOgorICAgICAg
ICAqIGh0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRm9ybUNvbnRyb2xFbGVtZW50OjphdXRvZm9jdXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEZvcm1Db250cm9sRWxlbWVudDo6dXBkYXRlVmlzaWJsZVZhbGlkYXRpb25NZXNzYWdlKToKKyAg
ICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
Rm9ybUVsZW1lbnQ6Om5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojph
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50OjptZXRob2QpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTEZvcm1FbGVtZW50Ojp0YXJnZXQpOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50
Ojpub1Jlc2l6ZSk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZW5VUkwp
OgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudEJhc2U6OmxvY2F0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjphbGxvd0Z1bGxTY3JlZW4pOgor
ICAgICAgICAqIGh0bWwvSFRNTEh0bWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxIdG1sRWxlbWVudDo6aW5zZXJ0ZWRCeVBhcnNlcik6CisgICAgICAgICogaHRtbC9IVE1MSW1h
Z2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFsdFRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6d2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQ6OmFsdCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW1hZ2VFbGVt
ZW50OjpkcmFnZ2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6c3Jj
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0
cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbik6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50OjphbHRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxJbnB1dEVsZW1lbnQ6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJ
bnB1dEVsZW1lbnQ6OnNlYXJjaEV2ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojppc1NwZWVjaEVuYWJsZWQpOgorICAgICAgICAqIGh0
bWwvSFRNTExhYmVsRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGFiZWxFbGVt
ZW50Ojpjb250cm9sKToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTExpbmtFbGVtZW50OjpocmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxl
bWVudDo6cmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dGFyZ2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxMaW5rRWxlbWVudDo6dHlwZSk6CisgICAgICAgICogaHRt
bC9IVE1MTWFwRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWFwRWxlbWVudDo6
aW1hZ2VFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpzZWxlY3RNZWRpYVJlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmF1dG9wbGF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6Omxvb3ApOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6Y29udHJvbHMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxl
bWVudDo6c2VsZWN0TmV4dFNvdXJjZUNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRp
YUVsZW1lbnQ6OnNvdXJjZVdhc0FkZGVkKToKKyAgICAgICAgKiBodG1sL0hUTUxNZXRhRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OmNvbnRlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1ldGFFbGVtZW50OjpodHRwRXF1aXYpOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1ldGFFbGVtZW50OjpuYW1lKToKKyAgICAgICAgKiBodG1sL0hUTUxNZXRlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6bWluKToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxNZXRlckVsZW1lbnQ6Om1heCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWV0ZXJFbGVtZW50Ojp2YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJF
bGVtZW50Ojpsb3cpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1ldGVyRWxlbWVudDo6aGlnaCk6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0ZXJFbGVtZW50OjpvcHRpbXVtKToKKyAgICAgICAg
KiBodG1sL0hUTUxOYW1lQ29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTmFt
ZUNvbGxlY3Rpb246Oml0ZW1BZnRlcik6CisgICAgICAgICogaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6dXBkYXRlV2lkZ2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPYmplY3RFbGVtZW50Ojpjb250YWluc0phdmFBcHBs
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6OmFkZFN1YnJlc291cmNl
QXR0cmlidXRlVVJMcyk6CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6Omdyb3VwTGFiZWxUZXh0KToK
KyAgICAgICAgKiBodG1sL0hUTUxQcm9ncmVzc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTFByb2dyZXNzRWxlbWVudDo6bWF4KToKKyAgICAgICAgKiBodG1sL0hUTUxTY3JpcHRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50Ojpzb3VyY2VB
dHRyaWJ1dGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6Y2hh
cnNldEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3JpcHRFbGVtZW50
Ojp0eXBlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1l
bnQ6Omxhbmd1YWdlQXR0cmlidXRlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlw
dEVsZW1lbnQ6OmZvckF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTY3Jp
cHRFbGVtZW50OjpldmVudEF0dHJpYnV0ZVZhbHVlKToKKyAgICAgICAgKiBodG1sL0hUTUxTb3Vy
Y2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3VyY2VFbGVtZW50OjptZWRp
YSk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU291cmNlRWxlbWVudDo6dHlwZSk6CisgICAgICAg
ICogaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHls
ZUVsZW1lbnQ6Om1lZGlhKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVsZW1lbnQ6OnR5
cGUpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmFiYnIpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OmF4aXMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OmhlYWRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlQ2VsbEVs
ZW1lbnQ6OnNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZUNlbGxFbGVtZW50Ojph
ZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAqIGh0bWwvSFRNTFRhYmxlQ29s
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVDb2xFbGVtZW50Ojp3aWR0
aCk6CisgICAgICAgICogaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxUYWJsZUVsZW1lbnQ6OnJ1bGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJs
ZUVsZW1lbnQ6OnN1bW1hcnkpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlRWxlbWVudDo6
YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKToKKyAgICAgICAgKiBodG1sL0hUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50OjphbGlnbik6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmNoT2ZmKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Ojp2QWxpZ24pOgorICAg
ICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MVGV4dEFyZWFFbGVtZW50OjptYXhMZW5ndGgpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRG
b3JtQ29udHJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29u
dHJvbEVsZW1lbnQ6OnN0cmlwcGVkUGxhY2Vob2xkZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmlzUGxhY2Vob2xkZXJFbXB0eSk6CisgICAgICAgICog
aHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6OnNyYyk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjpraW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0VsZW1lbnQ6OnNyY2xhbmcpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFRyYWNrRWxlbWVudDo6bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TFRyYWNrRWxlbWVudDo6aXNEZWZhdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmFja0Vs
ZW1lbnQ6OmxvYWQpOgorICAgICAgICAqIGh0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MVmlkZW9FbGVtZW50Ojp3aWR0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MVmlkZW9FbGVtZW50OjpoZWlnaHQpOgorICAgICAgICAqIGh0bWwvU3RlcFJhbmdlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlN0ZXBSYW5nZTo6U3RlcFJhbmdlKToKKyAgICAgICAgKiBo
dG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5wdXRGaWVsZFNwZWVjaEJ1dHRvbkVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgor
ICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yUGFnZUFnZW50OjpidWlsZE9iamVjdEZvckZyYW1lKToKKyAgICAgICAg
KiBsb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1p
c3Npb246OmNyZWF0ZSk6CisgICAgICAgICogbG9hZGVyL0ltYWdlTG9hZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlTG9hZGVyOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICog
cGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6bWF0Y2hMYWJlbHNBZ2Fp
bnN0RWxlbWVudCk6CisgICAgICAgICogcGFnZS9QYWdlU2VyaWFsaXplci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlU2VyaWFsaXplcjo6c2VyaWFsaXplRnJhbWUpOgorICAgICAgICAqIHBh
Z2UvbWFjL0ZyYW1lTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6Om1hdGNoTGFiZWxz
QWdhaW5zdEVsZW1lbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRVUkxGb3JJbWFn
ZU5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9IVE1MQ29udmVydGVyLm1tOgorICAgICAg
ICAoZmlsZVdyYXBwZXJGb3JFbGVtZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vQ2xpcGJv
YXJkV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlSW1hZ2VUb0RhdGFPYmplY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2xpcGJvYXJkV2luOjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2Up
OgorICAgICAgICAqIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhpdFRlc3RSZXN1bHQ6OmFsdERpc3BsYXlTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
SGl0VGVzdFJlc3VsdDo6YWJzb2x1dGVJbWFnZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0OjphYnNvbHV0ZUxpbmtVUkwpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJE
ZXRhaWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckRldGFpbHM6OmlzT3Blbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck1lbnVMaXN0OjppdGVtQWNjZXNzaWJpbGl0eVRleHQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojph
ZGRQREZVUkxSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjph
dXRvc2F2ZU5hbWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzRW1wdHlPclVuc3R5bGVkQXBwbGVTdHlsZVNwYW4pOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWRlby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWRlbzo6Y2FsY3VsYXRlSW50cmluc2ljU2l6ZSk6CisgICAgICAgICogcmVuZGVyaW5nL21h
dGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MRmVuY2VkOjp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRo
TUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9tYXRo
bWwvUmVuZGVyTWF0aE1MT3BlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udERh
dGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxl
Y3Rpb24pOgorCiAyMDExLTA4LTMwICBBbmRyZWFzIEtsaW5nICA8a2xpbmdAd2Via2l0Lm9yZz4K
IAogICAgICAgICBIVE1MSW1hZ2VFbGVtZW50OiBEb24ndCBjYWNoZSAiaXNtYXAiIGFuZCAidXNl
bWFwIiBhdHRyaWJ1dGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmpl
Y3RDYWNoZS5jcHAKaW5kZXggMWM5YjQ2YS4uOTA2ZTg0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCkBAIC0xODgsNyArMTg4LDcgQEAgYm9v
bCBub2RlSGFzUm9sZShOb2RlKiBub2RlLCBjb25zdCBTdHJpbmcmIHJvbGUpCiAgICAgaWYgKCFu
b2RlIHx8ICFub2RlLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2FzZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSkt
PmdldEF0dHJpYnV0ZShyb2xlQXR0ciksIHJvbGUpOworICAgIHJldHVybiBlcXVhbElnbm9yaW5n
Q2FzZShzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUocm9sZUF0
dHIpLCByb2xlKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eU9iamVjdD4g
Y3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ckF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2d0ay9BY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlckF0ay5jcHAKaW5kZXggMWQ4YWY5ZS4uZTZlNmUzYSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9ndGsvQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJBdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvZ3RrL0FjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyQXRrLmNwcApAQCAtMTkwLDcgKzE5MCw3IEBAIHN0YXRpYyBjb25z
dCBnY2hhciogd2Via2l0X2FjY2Vzc2libGVfZ2V0X25hbWUoQXRrT2JqZWN0KiBvYmplY3QpCiAg
ICAgICAgIE5vZGUqIG5vZGUgPSBjb3JlT2JqZWN0LT5ub2RlKCk7CiAgICAgICAgIGlmIChub2Rl
ICYmIG5vZGUtPmlzSFRNTEVsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gR2V0IHRoZSBhdHRy
aWJ1dGUgcmF0aGVyIHRoYW4gYWx0VGV4dCBTdHJpbmcgc28gYXMgbm90IHRvIGZhbGwgYmFjayBv
biB0aXRsZS4KLSAgICAgICAgICAgIFN0cmluZyBhbHQgPSB0b0hUTUxFbGVtZW50KG5vZGUpLT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjphbHRBdHRyKTsKKyAgICAgICAgICAgIFN0cmluZyBhbHQg
PSB0b0hUTUxFbGVtZW50KG5vZGUpLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6YWx0QXR0
cik7CiAgICAgICAgICAgICBpZiAoIWFsdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIHJldHVyblN0cmluZyhhbHQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcApp
bmRleCAxNTBjMGZjLi40MWIwZDI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTYyOSw3
ICs2MjksNyBAQCB2b2lkIERvY3VtZW50OjpidWlsZEFjY2Vzc0tleU1hcChUcmVlU2NvcGUqIHJv
b3QpCiAgICAgICAgIGlmICghbi0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7
Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYWNjZXNzS2V5ID0gZWxlbWVudC0+Z2V0QXR0
cmlidXRlKGFjY2Vzc2tleUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjY2Vz
c0tleSA9IGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYWNjZXNza2V5QXR0cik7CiAgICAgICAg
IGlmICghYWNjZXNzS2V5LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fZWxlbWVudHNCeUFjY2Vz
c0tleS5zZXQoYWNjZXNzS2V5LmltcGwoKSwgZWxlbWVudCk7CiAgICAgICAgIGJ1aWxkQWNjZXNz
S2V5TWFwKGVsZW1lbnQtPnNoYWRvd1Jvb3QoKSk7CkBAIC0yOTU4LDcgKzI5NTgsNyBAQCB2b2lk
IERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICNlbmRpZgogICAgICAgICApIHsKICAg
ICAgICAgICAgIEVsZW1lbnQqIGUgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obik7Ci0gICAgICAg
ICAgICBBdG9taWNTdHJpbmcgdGl0bGUgPSBlLT5nZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAg
ICAgICAgICAgIEF0b21pY1N0cmluZyB0aXRsZSA9IGUtPmZhc3RHZXRBdHRyaWJ1dGUodGl0bGVB
dHRyKTsKICAgICAgICAgICAgIGJvb2wgZW5hYmxlZFZpYVNjcmlwdCA9IGZhbHNlOwogICAgICAg
ICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShsaW5rVGFnKSkgewogICAgICAgICAgICAgICAgIC8v
IDxMSU5LPiBlbGVtZW50CkBAIC0yOTY5LDcgKzI5NjksNyBAQCB2b2lkIERvY3VtZW50OjpyZWNh
bGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQtPmlzTG9h
ZGluZygpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIGl0IGlzIGxvYWRpbmcgYnV0IHdlIHNo
b3VsZCBzdGlsbCBkZWNpZGUgd2hpY2ggc3R5bGUgc2hlZXQgc2V0IHRvIHVzZQogICAgICAgICAg
ICAgICAgICAgICBpZiAoIWVuYWJsZWRWaWFTY3JpcHQgJiYgIXRpdGxlLmlzRW1wdHkoKSAmJiBt
X3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHJlbCA9IGUtPmdldEF0dHJpYnV0ZShyZWxBdHRyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgcmVsID0gZS0+ZmFz
dEdldEF0dHJpYnV0ZShyZWxBdHRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVs
LmNvbnRhaW5zKCJhbHRlcm5hdGUiKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cHJlZmVycmVkU3R5bGVzaGVldFNldCA9IHRpdGxlOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2VsZWN0ZWRTdHlsZXNoZWV0U2V0ID0gdGl0bGU7CkBAIC0zMDA0LDcgKzMwMDQsNyBA
QCB2b2lkIERvY3VtZW50OjpyZWNhbGNTdHlsZVNlbGVjdG9yKCkKICAgICAgICAgICAgICAgICAg
ICAgLy8gd2UgYXJlIE5PVCBhbiBhbHRlcm5hdGUgc2hlZXQsIHRoZW4gZXN0YWJsaXNoCiAgICAg
ICAgICAgICAgICAgICAgIC8vIHVzIGFzIHRoZSBwcmVmZXJyZWQgc2V0LiAgT3RoZXJ3aXNlLCBq
dXN0IGlnbm9yZQogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHNoZWV0LgotICAgICAgICAg
ICAgICAgICAgICBBdG9taWNTdHJpbmcgcmVsID0gZS0+Z2V0QXR0cmlidXRlKHJlbEF0dHIpOwor
ICAgICAgICAgICAgICAgICAgICBBdG9taWNTdHJpbmcgcmVsID0gZS0+ZmFzdEdldEF0dHJpYnV0
ZShyZWxBdHRyKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmhhc0xvY2FsTmFtZShzdHls
ZVRhZykgfHwgIXJlbC5jb250YWlucygiYWx0ZXJuYXRlIikpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX3ByZWZlcnJlZFN0eWxlc2hlZXRTZXQgPSBtX3NlbGVjdGVkU3R5bGVzaGVldFNldCA9
IHRpdGxlOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA3MTY4
ZTEyLi43NDc3ZDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCkBAIC04OTEsNyArODkxLDcgQEAg
dm9pZCBFbGVtZW50OjpzZXRQcmVmaXgoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogCiBLVVJMIEVsZW1lbnQ6OmJhc2VVUkkoKSBjb25zdAogewotICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgYmFzZUF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZShiYXNlQXR0cik7
CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBiYXNlQXR0cmlidXRlID0gZmFzdEdldEF0dHJpYnV0
ZShiYXNlQXR0cik7CiAgICAgS1VSTCBiYXNlKEtVUkwoKSwgYmFzZUF0dHJpYnV0ZSk7CiAgICAg
aWYgKCFiYXNlLnByb3RvY29sKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gYmFzZTsKQEAg
LTE0ODUsOCArMTQ4NSw4IEBAIHZvaWQgRWxlbWVudDo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciog
YnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CiAgICAgICAgIHJlc3VsdCArPSAiaWQ9IjsK
ICAgICAgICAgcmVzdWx0ICs9IHM7CiAgICAgfQotICAgICAgICAgIAotICAgIHMgPSBnZXRBdHRy
aWJ1dGUoY2xhc3NBdHRyKTsKKworICAgIHMgPSBmYXN0R2V0QXR0cmlidXRlKGNsYXNzQXR0cik7
CiAgICAgaWYgKHMubGVuZ3RoKCkgPiAwKSB7CiAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoKCkg
PiAwKQogICAgICAgICAgICAgcmVzdWx0ICs9ICI7ICI7CkBAIC0yMDAzLDcgKzIwMDMsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Nyb3Nz
aW5nRnJhbWVCb3VuZGFyaWVzKGJvbwogCiBTcGVsbGNoZWNrQXR0cmlidXRlU3RhdGUgRWxlbWVu
dDo6c3BlbGxjaGVja0F0dHJpYnV0ZVN0YXRlKCkgY29uc3QKIHsKLSAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3BlbGxjaGVja0F0dHIpOwor
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1l
czo6c3BlbGxjaGVja0F0dHIpOwogICAgIGlmICh2YWx1ZSA9PSBudWxsQXRvbSkKICAgICAgICAg
cmV0dXJuIFNwZWxsY2hlY2tBdHRyaWJ1dGVEZWZhdWx0OwogICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZSh2YWx1ZSwgInRydWUiKSB8fCBlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgIiIpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05hbWVOb2RlTGlzdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAppbmRleCAyZmZhNTc3Li4wZTBiNzllIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vTmFtZU5vZGVMaXN0LmNwcApAQCAtNDQsNyArNDQsNyBAQCBOYW1lTm9kZUxpc3Q6
On5OYW1lTm9kZUxpc3QoKQogCiBib29sIE5hbWVOb2RlTGlzdDo6bm9kZU1hdGNoZXMoRWxlbWVu
dCogdGVzdE5vZGUpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHRlc3ROb2RlLT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpID09IG1fbm9kZU5hbWU7CisgICAgcmV0dXJuIHRlc3ROb2RlLT5mYXN0R2V0QXR0
cmlidXRlKG5hbWVBdHRyKSA9PSBtX25vZGVOYW1lOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCmluZGV4
IGM0NDc2ZDAuLjNkZmEwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHls
ZUNvbW1hbmQuY3BwCkBAIC02Nyw3ICs2Nyw3IEBAIGJvb2wgaXNMZWdhY3lBcHBsZVN0eWxlU3Bh
bihjb25zdCBOb2RlICpub2RlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBI
VE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7
Ci0gICAgcmV0dXJuIGVsZW0tPmhhc0xvY2FsTmFtZShzcGFuQXR0cikgJiYgZWxlbS0+Z2V0QXR0
cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKKyAgICByZXR1cm4g
ZWxlbS0+aGFzTG9jYWxOYW1lKHNwYW5BdHRyKSAmJiBlbGVtLT5mYXN0R2V0QXR0cmlidXRlKGNs
YXNzQXR0cikgPT0gc3R5bGVTcGFuQ2xhc3NTdHJpbmcoKTsKIH0KIAogZW51bSBTaG91bGRTdHls
ZUF0dHJpYnV0ZUJlRW1wdHkgeyBBbGxvd05vbkVtcHR5U3R5bGVBdHRyaWJ1dGUsIFN0eWxlQXR0
cmlidXRlU2hvdWxkQmVFbXB0eSB9OwpAQCAtMTEyLDcgKzExMiw3IEBAIHN0YXRpYyBib29sIGlz
RW1wdHlGb250VGFnKGNvbnN0IE5vZGUgKm5vZGUpCiAgICAgTmFtZWROb2RlTWFwICptYXAgPSBl
bGVtLT5hdHRyaWJ1dGVzKHRydWUpOyAvLyB0cnVlIGZvciByZWFkLW9ubHkKICAgICBpZiAoIW1h
cCkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgcmV0dXJuIG1hcC0+aXNFbXB0eSgpIHx8ICht
YXAtPmxlbmd0aCgpID09IDEgJiYgZWxlbS0+Z2V0QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gc3R5
bGVTcGFuQ2xhc3NTdHJpbmcoKSk7CisgICAgcmV0dXJuIG1hcC0+aXNFbXB0eSgpIHx8IChtYXAt
Pmxlbmd0aCgpID09IDEgJiYgZWxlbS0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IHN0
eWxlU3BhbkNsYXNzU3RyaW5nKCkpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxFbGVtZW50PiBj
cmVhdGVGb250RWxlbWVudChEb2N1bWVudCogZG9jdW1lbnQpCkBAIC01MDcsNyArNTA3LDcgQEAg
dm9pZCBBcHBseVN0eWxlQ29tbWFuZDo6cmVtb3ZlRW1iZWRkaW5nVXBUb0VuY2xvc2luZ0Jsb2Nr
KE5vZGUqIG5vZGUsIE5vZGUqIHVuc3AKICAgICAgICAgLy8gYW5kIGFsbCBtYXRjaGluZyBzdHls
ZSBydWxlcyBpbiBvcmRlciB0byBkZXRlcm1pbmUgaG93IHRvIGJlc3Qgc2V0IHRoZSB1bmljb2Rl
LWJpZGkgcHJvcGVydHkgdG8gJ25vcm1hbCcuCiAgICAgICAgIC8vIEZvciBub3csIGl0IGFzc3Vt
ZXMgdGhhdCBpZiB0aGUgJ2RpcicgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZW4gcmVtb3Zpbmcg
aXQgd2lsbCBzdWZmaWNlLCBhbmQKICAgICAgICAgLy8gb3RoZXJ3aXNlIGl0IHNldHMgdGhlIHBy
b3BlcnR5IGluIHRoZSBpbmxpbmUgc3R5bGUgZGVjbGFyYXRpb24uCi0gICAgICAgIGlmIChlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQtPmZhc3RI
YXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJZiB0aGlzIGlz
IGEgQkRPIGVsZW1lbnQsIHdlIHNob3VsZCBwcm9iYWJseSBqdXN0IHJlbW92ZSBpdCBpZiBpdCBo
YXMgbm8KICAgICAgICAgICAgIC8vIG90aGVyIGF0dHJpYnV0ZXMsIGxpa2Ugd2UgKHNob3VsZCkg
ZG8gd2l0aCBCIGFuZCBJIGVsZW1lbnRzLgogICAgICAgICAgICAgcmVtb3ZlTm9kZUF0dHJpYnV0
ZShlbGVtZW50LCBkaXJBdHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAppbmRleCA2ZTAzZDc3Li5iOTMwN2U4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCkBAIC03NzcsNyArNzc3LDcgQEAgYm9vbCBFZGl0aW5nU3R5bGU6OmVsZW1lbnRJ
c1N0eWxlZFNwYW5PckhUTUxFcXVpdmFsZW50KGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW4KICAg
ICBpZiAoIWVsZW1lbnRJc1NwYW5PckVsZW1lbnRFcXVpdmFsZW50ICYmICFtYXRjaGVkQXR0cmli
dXRlcykKICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBlbGVtZW50IGlzIG5vdCBhIHNwYW4sIGEg
aHRtbCBlbGVtZW50IGVxdWl2YWxlbnQsIG9yIGZvbnQgZWxlbWVudC4KICAgICAKLSAgICBpZiAo
ZWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6Y2xhc3NBdHRyKSA9PSBBcHBsZVN0eWxl
U3BhbkNsYXNzKQorICAgIGlmIChlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6
Y2xhc3NBdHRyKSA9PSBBcHBsZVN0eWxlU3BhbkNsYXNzKQogICAgICAgICBtYXRjaGVkQXR0cmli
dXRlcysrOwogCiAgICAgaWYgKGVsZW1lbnQtPmhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6OnN0eWxl
QXR0cikpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVj
dGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKaW5kZXggNzY5N2VhZC4uZTY1OTI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTk5LDE0ICs5OSwx
NCBAQCBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlTmV3bGluZU5vZGUoY29uc3QgTm9kZSAqbm9k
ZSkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgaW50ZXJjaGFuZ2VOZXdsaW5l
Q2xhc3NTdHJpbmcsIChBcHBsZUludGVyY2hhbmdlTmV3bGluZSkpOwogICAgIHJldHVybiBub2Rl
ICYmIG5vZGUtPmhhc1RhZ05hbWUoYnJUYWcpICYmIAotICAgICAgICAgICBzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBpbnRlcmNo
YW5nZU5ld2xpbmVDbGFzc1N0cmluZzsKKyAgICAgICAgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRWxl
bWVudCAqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShjbGFzc0F0dHIpID09IGludGVyY2hhbmdl
TmV3bGluZUNsYXNzU3RyaW5nOwogfQogCiBzdGF0aWMgYm9vbCBpc0ludGVyY2hhbmdlQ29udmVy
dGVkU3BhY2VTcGFuKGNvbnN0IE5vZGUgKm5vZGUpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChTdHJpbmcsIGNvbnZlcnRlZFNwYWNlU3BhbkNsYXNzU3RyaW5nLCAoQXBwbGVDb252ZXJ0ZWRT
cGFjZSkpOwogICAgIHJldHVybiBub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgCi0gICAgICAgICAg
IHN0YXRpY19jYXN0PGNvbnN0IEhUTUxFbGVtZW50ICo+KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyKSA9PSBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0cmluZzsKKyAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQgKj4obm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUoY2xh
c3NBdHRyKSA9PSBjb252ZXJ0ZWRTcGFjZVNwYW5DbGFzc1N0cmluZzsKIH0KIAogc3RhdGljIFBv
c2l0aW9uIHBvc2l0aW9uQXZvaWRpbmdQcmVjZWRpbmdOb2RlcyhQb3NpdGlvbiBwb3MpCkBAIC00
MDgsNyArNDA4LDcgQEAgYm9vbCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6c2hvdWxkTWVyZ2VF
bmQoYm9vbCBzZWxlY3Rpb25FbmRXYXNFbmRPZlBhcmFncmFwaCkKIAogc3RhdGljIGJvb2wgaXNN
YWlsUGFzdGVBc1F1b3RhdGlvbk5vZGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICByZXR1cm4g
bm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpICYmIG5vZGUtPmlzRWxlbWVu
dE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpID09IEFwcGxlUGFzdGVBc1F1b3RhdGlvbjsKKyAgICByZXR1cm4gbm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKGJsb2NrcXVvdGVUYWcpICYmIG5vZGUtPmlzRWxlbWVudE5vZGUo
KSAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obm9kZSktPmZhc3RHZXRBdHRyaWJ1dGUo
Y2xhc3NBdHRyKSA9PSBBcHBsZVBhc3RlQXNRdW90YXRpb247CiB9CiAKIC8vIFdyYXAgQ29tcG9z
aXRlRWRpdENvbW1hbmQ6OnJlbW92ZU5vZGVQcmVzZXJ2aW5nQ2hpbGRyZW4oKSBzbyB3ZSBjYW4g
dXBkYXRlIHRoZSBub2RlcyB3ZSB0cmFjawpAQCAtNzk1LDcgKzc5NSw3IEBAIHN0YXRpYyBib29s
IGlzSW5saW5lTm9kZVdpdGhTdHlsZShjb25zdCBOb2RlKiBub2RlKQogICAgIC8vIFdlIGNhbiBz
a2lwIG92ZXIgZWxlbWVudHMgd2hvc2UgY2xhc3MgYXR0cmlidXRlIGlzCiAgICAgLy8gb25lIG9m
IG91ciBpbnRlcm5hbCBjbGFzc2VzLgogICAgIGNvbnN0IEhUTUxFbGVtZW50KiBlbGVtZW50ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEVsZW1lbnQqPihub2RlKTsKLSAgICBBdG9taWNTdHJpbmcg
Y2xhc3NBdHRyaWJ1dGVWYWx1ZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShjbGFzc0F0dHIpOwor
ICAgIEF0b21pY1N0cmluZyBjbGFzc0F0dHJpYnV0ZVZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0
dHJpYnV0ZShjbGFzc0F0dHIpOwogICAgIGlmIChjbGFzc0F0dHJpYnV0ZVZhbHVlID09IEFwcGxl
VGFiU3BhbkNsYXNzCiAgICAgICAgIHx8IGNsYXNzQXR0cmlidXRlVmFsdWUgPT0gQXBwbGVDb252
ZXJ0ZWRTcGFjZQogICAgICAgICB8fCBjbGFzc0F0dHJpYnV0ZVZhbHVlID09IEFwcGxlUGFzdGVB
c1F1b3RhdGlvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BsaXRFbGVt
ZW50Q29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwbGl0RWxlbWVudENvbW1h
bmQuY3BwCmluZGV4IGZjMTM1ZjcuLjM5ZmY5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcApAQCAtOTQsOCArOTQsOCBAQCB2b2lkIFNwbGl0
RWxlbWVudENvbW1hbmQ6OmRvVW5hcHBseSgpCiAgICAgICAgIG1fZWxlbWVudDItPmluc2VydEJl
Zm9yZShjaGlsZHJlbltpXS5nZXQoKSwgcmVmQ2hpbGQuZ2V0KCksIGVjKTsKIAogICAgIC8vIFJl
Y292ZXIgdGhlIGlkIGF0dHJpYnV0ZSBvZiB0aGUgb3JpZ2luYWwgZWxlbWVudC4KLSAgICBpZiAo
bV9lbGVtZW50MS0+aGFzQXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyKSkKLSAgICAgICAgbV9l
bGVtZW50Mi0+c2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aWRBdHRyLCBtX2VsZW1lbnQxLT5nZXRB
dHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpKTsKKyAgICBpZiAobV9lbGVtZW50MS0+ZmFzdEhh
c0F0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0cikpCisgICAgICAgIG1fZWxlbWVudDItPnNldEF0
dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgbV9lbGVtZW50MS0+ZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmlkQXR0cikpOwogCiAgICAgbV9lbGVtZW50MS0+cmVtb3ZlKGVjKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaHRtbGVkaXRpbmcuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKaW5kZXggODMxZGU4MC4uMjg5ZTU5YiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9odG1sZWRpdGluZy5jcHAKQEAgLTg0NCw3ICs4NDQsNyBA
QCBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVIVE1MRWxlbWVudChEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZwogCiBib29sIGlzVGFiU3Bhbk5vZGUoY29uc3QgTm9k
ZSAqbm9kZSkKIHsKLSAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKHNwYW5UYWcp
ICYmIG5vZGUtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50ICo+
KG5vZGUpLT5nZXRBdHRyaWJ1dGUoY2xhc3NBdHRyKSA9PSBBcHBsZVRhYlNwYW5DbGFzczsKKyAg
ICByZXR1cm4gbm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKHNwYW5UYWcpICYmIG5vZGUtPmlzRWxl
bWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50ICo+KG5vZGUpLT5mYXN0R2V0
QXR0cmlidXRlKGNsYXNzQXR0cikgPT0gQXBwbGVUYWJTcGFuQ2xhc3M7CiB9CiAKIGJvb2wgaXNU
YWJTcGFuVGV4dE5vZGUoY29uc3QgTm9kZSAqbm9kZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cAppbmRleCA5ODA4YzYwLi5mMTlmZTNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hcmt1cC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBA
IC01MTIsNyArNTEyLDcgQEAgc3RhdGljIGJvb2wgaXNFbGVtZW50UHJlc2VudGF0aW9uYWwoY29u
c3QgTm9kZSogbm9kZSkKIAogc3RhdGljIGJvb2wgc2hvdWxkSW5jbHVkZVdyYXBwZXJGb3JGdWxs
eVNlbGVjdGVkUm9vdChOb2RlKiBmdWxseVNlbGVjdGVkUm9vdCkKIHsKLSAgICBpZiAoZnVsbHlT
ZWxlY3RlZFJvb3QtPmlzRWxlbWVudE5vZGUoKSAmJiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnVs
bHlTZWxlY3RlZFJvb3QpLT5oYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKQorICAgIGlmIChm
dWxseVNlbGVjdGVkUm9vdC0+aXNFbGVtZW50Tm9kZSgpICYmIHN0YXRpY19jYXN0PEVsZW1lbnQq
PihmdWxseVNlbGVjdGVkUm9vdCktPmZhc3RIYXNBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBzdHls
ZSA9IHN0eWxlRnJvbU1hdGNoZWRSdWxlc0FuZElubGluZURlY2woZnVsbHlTZWxlY3RlZFJvb3Qp
OwpAQCAtNjQyLDggKzY0Miw4IEBAIFN0cmluZyBjcmVhdGVNYXJrdXAoY29uc3QgUmFuZ2UqIHJh
bmdlLCBWZWN0b3I8Tm9kZSo+KiBub2RlcywgRUFubm90YXRlRm9ySW50ZXJjCiAgICAgICAgICAg
ICAgICAgLy8gQnJpbmcgdGhlIGJhY2tncm91bmQgYXR0cmlidXRlIG92ZXIsIGJ1dCBub3QgYXMg
YW4gYXR0cmlidXRlIGJlY2F1c2UgYSBiYWNrZ3JvdW5kIGF0dHJpYnV0ZSBvbiBhIGRpdgogICAg
ICAgICAgICAgICAgIC8vIGFwcGVhcnMgdG8gaGF2ZSBubyBlZmZlY3QuCiAgICAgICAgICAgICAg
ICAgaWYgKCghZnVsbHlTZWxlY3RlZFJvb3RTdHlsZSB8fCAhZnVsbHlTZWxlY3RlZFJvb3RTdHls
ZS0+c3R5bGUoKSB8fCAhZnVsbHlTZWxlY3RlZFJvb3RTdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSkpCi0gICAgICAgICAgICAgICAg
ICAgICYmIHN0YXRpY19jYXN0PEVsZW1lbnQqPihmdWxseVNlbGVjdGVkUm9vdCktPmhhc0F0dHJp
YnV0ZShiYWNrZ3JvdW5kQXR0cikpCi0gICAgICAgICAgICAgICAgICAgIGZ1bGx5U2VsZWN0ZWRS
b290U3R5bGUtPnN0eWxlKCktPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdl
LCAidXJsKCciICsgc3RhdGljX2Nhc3Q8RWxlbWVudCo+KGZ1bGx5U2VsZWN0ZWRSb290KS0+Z2V0
QXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSArICInKSIpOworICAgICAgICAgICAgICAgICAgICAm
JiBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnVsbHlTZWxlY3RlZFJvb3QpLT5mYXN0SGFzQXR0cmli
dXRlKGJhY2tncm91bmRBdHRyKSkKKyAgICAgICAgICAgICAgICAgICAgZnVsbHlTZWxlY3RlZFJv
b3RTdHlsZS0+c3R5bGUoKS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2Us
ICJ1cmwoJyIgKyBzdGF0aWNfY2FzdDxFbGVtZW50Kj4oZnVsbHlTZWxlY3RlZFJvb3QpLT5mYXN0
R2V0QXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSArICInKSIpOwogCiAgICAgICAgICAgICAgICAg
aWYgKGZ1bGx5U2VsZWN0ZWRSb290U3R5bGUtPnN0eWxlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gUmVzZXQgdGhlIENTUyBwcm9wZXJ0aWVzIHRvIGF2b2lkIGFuIGFzc2VydGlvbiBlcnJv
ciBpbiBhZGRTdHlsZU1hcmt1cCgpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVt
ZW50LmNwcAppbmRleCBlMGMyNDQ5Li45ZTU5OGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBbmNob3JFbGVtZW50LmNwcApAQCAtMjUxLDE3ICsyNTEsMTcgQEAgYm9vbCBIVE1MQW5jaG9y
RWxlbWVudDo6Y2FuU3RhcnRTZWxlY3Rpb24oKSBjb25zdAogYm9vbCBIVE1MQW5jaG9yRWxlbWVu
dDo6ZHJhZ2dhYmxlKCkgY29uc3QKIHsKICAgICAvLyBTaG91bGQgYmUgZHJhZ2dhYmxlIGlmIHdl
IGhhdmUgYW4gaHJlZiBhdHRyaWJ1dGUuCi0gICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGdldEF0dHJpYnV0ZShkcmFnZ2FibGVBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gZmFzdEdldEF0dHJpYnV0ZShkcmFnZ2FibGVBdHRyKTsKICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUsICJ0cnVlIikpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZSwgImZhbHNlIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gaGFzQXR0cmlidXRlKGhyZWZBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0
dHJpYnV0ZShocmVmQXR0cik7CiB9CiAKIEtVUkwgSFRNTEFuY2hvckVsZW1lbnQ6OmhyZWYoKSBj
b25zdAogewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdB
bmRUcmFpbGluZ0hUTUxTcGFjZXMoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSkpOworICAgIHJldHVy
biBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXMoZmFzdEdldEF0dHJpYnV0ZShocmVmQXR0cikpKTsKIH0KIAogdm9pZCBIVE1MQW5jaG9yRWxl
bWVudDo6c2V0SHJlZihjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQpAQCAtMjg1LDcgKzI4NSw3
IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldFJlbChjb25zdCBTdHJpbmcmIHZhbHVlKQog
CiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxBbmNob3JFbGVtZW50OjpuYW1lKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0
dHJpYnV0ZShuYW1lQXR0cik7CiB9CiAKIHNob3J0IEhUTUxBbmNob3JFbGVtZW50Ojp0YWJJbmRl
eCgpIGNvbnN0CkBAIC0yOTYsNyArMjk2LDcgQEAgc2hvcnQgSFRNTEFuY2hvckVsZW1lbnQ6OnRh
YkluZGV4KCkgY29uc3QKIAogU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50Ojp0YXJnZXQoKSBjb25z
dAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgcmV0dXJuIGZh
c3RHZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CiB9CiAKIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVu
dDo6aGFzaCgpIGNvbnN0CkBAIC00ODIsMTAgKzQ4MiwxMCBAQCBib29sIEhUTUxBbmNob3JFbGVt
ZW50Ojppc0xpdmVMaW5rKCkgY29uc3QKIAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2VuZFBp
bmdzKGNvbnN0IEtVUkwmIGRlc3RpbmF0aW9uVVJMKQogewotICAgIGlmICghaGFzQXR0cmlidXRl
KHBpbmdBdHRyKSB8fCAhZG9jdW1lbnQoKS0+c2V0dGluZ3MoKS0+aHlwZXJsaW5rQXVkaXRpbmdF
bmFibGVkKCkpCisgICAgaWYgKCFmYXN0SGFzQXR0cmlidXRlKHBpbmdBdHRyKSB8fCAhZG9jdW1l
bnQoKS0+c2V0dGluZ3MoKS0+aHlwZXJsaW5rQXVkaXRpbmdFbmFibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIFNwYWNlU3BsaXRTdHJpbmcgcGluZ1VSTHMoZ2V0QXR0cmlidXRlKHBpbmdB
dHRyKSwgdHJ1ZSk7CisgICAgU3BhY2VTcGxpdFN0cmluZyBwaW5nVVJMcyhmYXN0R2V0QXR0cmli
dXRlKHBpbmdBdHRyKSwgdHJ1ZSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBpbmdV
UkxzLnNpemUoKTsgaSsrKQogICAgICAgICBQaW5nTG9hZGVyOjpzZW5kUGluZyhkb2N1bWVudCgp
LT5mcmFtZSgpLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChwaW5nVVJMc1tpXSksIGRlc3RpbmF0
aW9uVVJMKTsKIH0KQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50Ojpo
YW5kbGVDbGljayhFdmVudCogZXZlbnQpCiAgICAgS1VSTCBrdXJsID0gZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsKTsKIAogI2lmIEVOQUJMRShET1dOTE9BRF9BVFRSSUJVVEUpCi0gICAgaWYg
KGhhc0F0dHJpYnV0ZShkb3dubG9hZEF0dHIpKSB7CisgICAgaWYgKGZhc3RIYXNBdHRyaWJ1dGUo
ZG93bmxvYWRBdHRyKSkgewogICAgICAgICBSZXNvdXJjZVJlcXVlc3QgcmVxdWVzdChrdXJsKTsK
IAogICAgICAgICBpZiAoIWhhc1JlbChSZWxhdGlvbk5vUmVmZXJyZXIpKSB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcHBsZXRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCmluZGV4IDFiYTM0NDguLmE5ZmFiMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFwcGxldEVsZW1lbnQuY3BwCkBAIC0xMTIsMjIgKzEx
MiwyMiBAQCBSZW5kZXJPYmplY3QqIEhUTUxBcHBsZXRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZQogICAgIGlmIChjYW5FbWJlZEphdmEoKSkg
ewogICAgICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBhcmdzOwogCi0gICAgICAgIGFyZ3Mu
c2V0KCJjb2RlIiwgZ2V0QXR0cmlidXRlKGNvZGVBdHRyKSk7CisgICAgICAgIGFyZ3Muc2V0KCJj
b2RlIiwgZmFzdEdldEF0dHJpYnV0ZShjb2RlQXR0cikpOwogCi0gICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgY29kZUJhc2UgPSBnZXRBdHRyaWJ1dGUoY29kZWJhc2VBdHRyKTsKKyAgICAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBjb2RlQmFzZSA9IGZhc3RHZXRBdHRyaWJ1dGUoY29kZWJhc2VB
dHRyKTsKICAgICAgICAgaWYgKCFjb2RlQmFzZS5pc051bGwoKSkKICAgICAgICAgICAgIGFyZ3Mu
c2V0KCJjb2RlQmFzZSIsIGNvZGVCYXNlKTsKIAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUgPSBkb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpID8gZ2V0QXR0cmlidXRlKG5hbWVB
dHRyKSA6IGdldElkQXR0cmlidXRlKCk7CisgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbmFt
ZSA9IGRvY3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgPyBmYXN0R2V0QXR0cmlidXRlKG5hbWVB
dHRyKSA6IGdldElkQXR0cmlidXRlKCk7CiAgICAgICAgIGlmICghbmFtZS5pc051bGwoKSkKICAg
ICAgICAgICAgIGFyZ3Muc2V0KCJuYW1lIiwgbmFtZSk7Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgYXJjaGl2ZSA9IGdldEF0dHJpYnV0ZShhcmNoaXZlQXR0cik7CisgICAgICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgYXJjaGl2ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoYXJjaGl2ZUF0dHIpOwog
ICAgICAgICBpZiAoIWFyY2hpdmUuaXNOdWxsKCkpCiAgICAgICAgICAgICBhcmdzLnNldCgiYXJj
aGl2ZSIsIGFyY2hpdmUpOwogCiAgICAgICAgIGFyZ3Muc2V0KCJiYXNlVVJMIiwgZG9jdW1lbnQo
KS0+YmFzZVVSTCgpLnN0cmluZygpKTsKIAotICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1h
eVNjcmlwdCA9IGdldEF0dHJpYnV0ZShtYXlzY3JpcHRBdHRyKTsKKyAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXlTY3JpcHQgPSBmYXN0R2V0QXR0cmlidXRlKG1heXNjcmlwdEF0dHIpOwog
ICAgICAgICBpZiAoIW1heVNjcmlwdC5pc051bGwoKSkKICAgICAgICAgICAgIGFyZ3Muc2V0KCJt
YXlTY3JpcHQiLCBtYXlTY3JpcHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBcmVhRWxlbWVu
dC5jcHAKaW5kZXggYzJlOGQ2ZS4uMDA2MmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MQXJlYUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEFy
ZWFFbGVtZW50LmNwcApAQCAtMjQzLDcgKzI0Myw3IEBAIGJvb2wgSFRNTEFyZWFFbGVtZW50Ojpz
dXBwb3J0c0ZvY3VzKCkgY29uc3QKIAogU3RyaW5nIEhUTUxBcmVhRWxlbWVudDo6dGFyZ2V0KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOworICAgIHJldHVy
biBmYXN0R2V0QXR0cmlidXRlKHRhcmdldEF0dHIpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAKaW5kZXggMDM4YzU2YS4uZjM0NjdlNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNwcApAQCAtMjE2LDcgKzIxNiw3IEBAIGJvb2wgSFRN
TEJvZHlFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKIAogU3RyaW5nIEhUTUxCb2R5RWxl
bWVudDo6YUxpbmsoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWxpbmtBdHRy
KTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShhbGlua0F0dHIpOwogfQogCiB2b2lkIEhU
TUxCb2R5RWxlbWVudDo6c2V0QUxpbmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTIyNiw3ICsy
MjYsNyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QUxpbmsoY29uc3QgU3RyaW5nJiB2YWx1
ZSkKIAogU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6YmdDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShiZ2NvbG9yQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1
dGUoYmdjb2xvckF0dHIpOwogfQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0QmdDb2xvcihj
b25zdCBTdHJpbmcmIHZhbHVlKQpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgSFRNTEJvZHlFbGVt
ZW50OjpzZXRCZ0NvbG9yKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAKIFN0cmluZyBIVE1MQm9keUVs
ZW1lbnQ6OmxpbmsoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGlua0F0dHIp
OworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGxpbmtBdHRyKTsKIH0KIAogdm9pZCBIVE1M
Qm9keUVsZW1lbnQ6OnNldExpbmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTI0Niw3ICsyNDYs
NyBAQCB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0TGluayhjb25zdCBTdHJpbmcmIHZhbHVlKQog
CiBTdHJpbmcgSFRNTEJvZHlFbGVtZW50Ojp0ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0
QXR0cmlidXRlKHRleHRBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0ZXh0QXR0
cik7CiB9CiAKIHZvaWQgSFRNTEJvZHlFbGVtZW50OjpzZXRUZXh0KGNvbnN0IFN0cmluZyYgdmFs
dWUpCkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBIVE1MQm9keUVsZW1lbnQ6OnNldFRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIAogU3RyaW5nIEhUTUxCb2R5RWxlbWVudDo6dkxpbmsoKSBjb25z
dAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodmxpbmtBdHRyKTsKKyAgICByZXR1cm4gZmFz
dEdldEF0dHJpYnV0ZSh2bGlua0F0dHIpOwogfQogCiB2b2lkIEhUTUxCb2R5RWxlbWVudDo6c2V0
VkxpbmsoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTM0Miw3ICszNDIsNyBAQCB2b2lkIEhUTUxC
b2R5RWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+
JiB1cmxzKSBjb25zdAogewogICAgIEhUTUxFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVVSTHModXJscyk7CiAKLSAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBkb2N1bWVudCgpLT5j
b21wbGV0ZVVSTChnZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0dHIpKSk7CisgICAgYWRkU3VicmVz
b3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShi
YWNrZ3JvdW5kQXR0cikpKTsKIH0KIAogdm9pZCBIVE1MQm9keUVsZW1lbnQ6OmRpZE1vdmVUb05l
d093bmVyRG9jdW1lbnQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQnV0
dG9uRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNw
cAppbmRleCA2ODY3OTBkLi42OTkxMDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxCdXR0b25FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCdXR0
b25FbGVtZW50LmNwcApAQCAtMTc2LDcgKzE3Niw3IEBAIGJvb2wgSFRNTEJ1dHRvbkVsZW1lbnQ6
OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikgY29uc3QKIAogU3RyaW5nIEhUTUxCdXR0
b25FbGVtZW50Ojp2YWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh2YWx1
ZUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHZhbHVlQXR0cik7CiB9CiAKIGJv
b2wgSFRNTEJ1dHRvbkVsZW1lbnQ6OnJlY2FsY1dpbGxWYWxpZGF0ZSgpIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCmluZGV4IDRjM2FkMTEuLmYyNWU1ZWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCkBAIC0yMzAsMTAg
KzIzMCwxMCBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpyZXNldCgpCiAKICAgICBib29sIG9r
OwogICAgIGJvb2wgaGFkSW1hZ2VCdWZmZXIgPSBoYXNDcmVhdGVkSW1hZ2VCdWZmZXIoKTsKLSAg
ICBpbnQgdyA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7CisgICAgaW50IHcg
PSBmYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0cikudG9JbnQoJm9rKTsKICAgICBpZiAoIW9rIHx8
IHcgPCAwKQogICAgICAgICB3ID0gRGVmYXVsdFdpZHRoOwotICAgIGludCBoID0gZ2V0QXR0cmli
dXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7CisgICAgaW50IGggPSBmYXN0R2V0QXR0cmlidXRl
KGhlaWdodEF0dHIpLnRvSW50KCZvayk7CiAgICAgaWYgKCFvayB8fCBoIDwgMCkKICAgICAgICAg
aCA9IERlZmF1bHRIZWlnaHQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TENvbGxlY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlvbi5jcHAK
aW5kZXggNzJlYmY1NS4uODZiMmE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQ29sbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ29sbGVjdGlv
bi5jcHAKQEAgLTI3Nyw3ICsyNzcsNyBAQCBib29sIEhUTUxDb2xsZWN0aW9uOjpjaGVja0Zvck5h
bWVNYXRjaChFbGVtZW50KiBlbGVtZW50LCBib29sIGNoZWNrTmFtZSwgY29uc3QgQQogICAgICAg
ICAgIGUtPmhhc0xvY2FsTmFtZShzZWxlY3RUYWcpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbmFtZSAmJiBlLT5nZXRJ
ZEF0dHJpYnV0ZSgpICE9IG5hbWU7CisgICAgcmV0dXJuIGUtPmZhc3RHZXRBdHRyaWJ1dGUobmFt
ZUF0dHIpID09IG5hbWUgJiYgZS0+Z2V0SWRBdHRyaWJ1dGUoKSAhPSBuYW1lOwogfQogCiBOb2Rl
KiBIVE1MQ29sbGVjdGlvbjo6bmFtZWRJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29u
c3QKQEAgLTMyMCw3ICszMjAsNyBAQCB2b2lkIEhUTUxDb2xsZWN0aW9uOjp1cGRhdGVOYW1lQ2Fj
aGUoKSBjb25zdAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIEhUTUxFbGVtZW50KiBl
ID0gdG9IVE1MRWxlbWVudChlbGVtZW50KTsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBp
ZEF0dHJWYWwgPSBlLT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIG5hbWVBdHRyVmFsID0gZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiBuYW1lQXR0clZhbCA9IGUtPmZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0
dHIpOwogICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIC8v
IGFkZCB0byBpZCBjYWNoZQogICAgICAgICAgICAgVmVjdG9yPEVsZW1lbnQqPiogaWRWZWN0b3Ig
PSBtX2luZm8tPmlkQ2FjaGUuZ2V0KGlkQXR0clZhbC5pbXBsKCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MRG9jdW1lbnQuY3BwCmluZGV4IGI2N2VhY2QuLmQzMzUxYTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudC5jcHAKQEAgLTEwOSw3ICsxMDksNyBAQCBTdHJpbmcgSFRNTERvY3VtZW50
OjpkaXIoKQogICAgIEhUTUxFbGVtZW50KiBiID0gYm9keSgpOwogICAgIGlmICghYikKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIHJldHVybiBiLT5nZXRBdHRyaWJ1dGUoZGlyQXR0cik7
CisgICAgcmV0dXJuIGItPmZhc3RHZXRBdHRyaWJ1dGUoZGlyQXR0cik7CiB9CiAKIHZvaWQgSFRN
TERvY3VtZW50OjpzZXREaXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKaW5kZXggMDA4MjMyYS4uZWY1NDcxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
RWxlbWVudC5jcHAKQEAgLTE2NCw3ICsxNjQsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gaGlkZGVuQXR0cikgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9w
ZXJ0eURpc3BsYXksIENTU1ZhbHVlTm9uZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gdGFiaW5kZXhBdHRyKSB7Ci0gICAgICAgIGluZGV4c3RyaW5nID0gZ2V0QXR0cmlidXRlKHRh
YmluZGV4QXR0cik7CisgICAgICAgIGluZGV4c3RyaW5nID0gZmFzdEdldEF0dHJpYnV0ZSh0YWJp
bmRleEF0dHIpOwogICAgICAgICBpbnQgdGFiaW5kZXggPSAwOwogICAgICAgICBpZiAoIWluZGV4
c3RyaW5nLmxlbmd0aCgpKSB7CiAgICAgICAgICAgICBjbGVhclRhYkluZGV4RXhwbGljaXRseSgp
OwpAQCAtNzMyLDcgKzczMiw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OnNldENvbnRlbnRFZGl0YWJs
ZShjb25zdCBTdHJpbmcmIGVuYWJsZWQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiBib29sIEhUTUxF
bGVtZW50OjpkcmFnZ2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBlcXVhbElnbm9yaW5nQ2Fz
ZShnZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0ciksICJ0cnVlIik7CisgICAgcmV0dXJuIGVxdWFs
SWdub3JpbmdDYXNlKGZhc3RHZXRBdHRyaWJ1dGUoZHJhZ2dhYmxlQXR0ciksICJ0cnVlIik7CiB9
CiAKIHZvaWQgSFRNTEVsZW1lbnQ6OnNldERyYWdnYWJsZShib29sIHZhbHVlKQpAQCAtNzcxLDcg
Kzc3MSw3IEBAIHZvaWQgSFRNTEVsZW1lbnQ6OmFjY2Vzc0tleUFjdGlvbihib29sIHNlbmRUb0Fu
eUVsZW1lbnQpCiAKIFN0cmluZyBIVE1MRWxlbWVudDo6dGl0bGUoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0
ZSh0aXRsZUF0dHIpOwogfQogCiBzaG9ydCBIVE1MRWxlbWVudDo6dGFiSW5kZXgoKSBjb25zdApA
QCAtODQxLDcgKzg0MSw3IEBAIHN0YXRpYyB2b2lkIHNldEhhc0RpckF1dG9GbGFnUmVjdXJzaXZl
bHkoTm9kZSogZmlyc3ROb2RlLCBib29sIGZsYWcsIE5vZGUqIGxhc3ROCiAgICAgICAgIGlmIChu
b2RlLT5zZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9BdHRyaWJ1dGUoKSA9PSBmbGFnKQogICAgICAg
ICAgICAgcmV0dXJuOwogCi0gICAgICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgJiYgdG9F
bGVtZW50KG5vZGUpLT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKKyAgICAgICAgaWYgKG5vZGUt
PmlzSFRNTEVsZW1lbnQoKSAmJiB0b0VsZW1lbnQobm9kZSktPmZhc3RIYXNBdHRyaWJ1dGUoZGly
QXR0cikpIHsKICAgICAgICAgICAgIGlmIChub2RlID09IGxhc3ROb2RlKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRTaWJsaW5n
KGZpcnN0Tm9kZSk7CkBAIC04NjIsNyArODYyLDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6Y2hpbGRy
ZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBiZWZvcmVDaGFuZ2UsIE5vZGUK
IAogVGV4dERpcmVjdGlvbiBIVE1MRWxlbWVudDo6ZGlyZWN0aW9uYWxpdHlJZmhhc0RpckF1dG9B
dHRyaWJ1dGUoYm9vbCYgaXNBdXRvKSBjb25zdAogewotICAgIGlmICghKHNlbGZPckFuY2VzdG9y
SGFzRGlyQXV0b0F0dHJpYnV0ZSgpICYmIGVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShk
aXJBdHRyKSwgImF1dG8iKSkpIHsKKyAgICBpZiAoIShzZWxmT3JBbmNlc3Rvckhhc0RpckF1dG9B
dHRyaWJ1dGUoKSAmJiBlcXVhbElnbm9yaW5nQ2FzZShmYXN0R2V0QXR0cmlidXRlKGRpckF0dHIp
LCAiYXV0byIpKSkgewogICAgICAgICBpc0F1dG8gPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIExU
UjsKICAgICB9CkBAIC05MzUsNyArOTM1LDcgQEAgdm9pZCBIVE1MRWxlbWVudDo6YWRqdXN0RGly
ZWN0aW9uYWxpdHlJZk5lZWRlZEFmdGVyQ2hpbGRBdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnQKICAg
ICBpZiAocmVuZGVyZXIoKSAmJiByZW5kZXJlcigpLT5zdHlsZSgpICYmIHJlbmRlcmVyKCktPnN0
eWxlKCktPmRpcmVjdGlvbigpICE9IHRleHREaXJlY3Rpb24pIHsKICAgICAgICAgRWxlbWVudCog
ZWxlbWVudFRvQWRqdXN0ID0gdGhpczsKICAgICAgICAgZm9yICg7IGVsZW1lbnRUb0FkanVzdDsg
ZWxlbWVudFRvQWRqdXN0ID0gZWxlbWVudFRvQWRqdXN0LT5wYXJlbnRFbGVtZW50KCkpIHsKLSAg
ICAgICAgICAgIGlmIChlbGVtZW50VG9BZGp1c3QtPmhhc0F0dHJpYnV0ZShkaXJBdHRyKSkgewor
ICAgICAgICAgICAgaWYgKGVsZW1lbnRUb0FkanVzdC0+ZmFzdEhhc0F0dHJpYnV0ZShkaXJBdHRy
KSkgewogICAgICAgICAgICAgICAgIGVsZW1lbnRUb0FkanVzdC0+c2V0TmVlZHNTdHlsZVJlY2Fs
YygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTk1Nyw3ICs5
NTcsNyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0
ZXJDaGlsZHJlbkNoYW5nZWQoTm9kZSogYmVmb3JlQwogICAgIGlmICgoIWRvY3VtZW50KCkgfHwg
ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSkgJiYgY2hpbGRDb3VudERlbHRhIDwgMCkgewogICAgICAg
ICBOb2RlKiBub2RlID0gYmVmb3JlQ2hhbmdlID8gYmVmb3JlQ2hhbmdlLT50cmF2ZXJzZU5leHRT
aWJsaW5nKCkgOiAwOwogICAgICAgICBmb3IgKGludCBjb3VudGVyID0gMDsgbm9kZSAmJiBjb3Vu
dGVyIDwgY2hpbGRDb3VudERlbHRhOyBjb3VudGVyKyssIG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYg
dG9FbGVtZW50KG5vZGUpLT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpCisgICAgICAgICAgICBpZiAo
bm9kZS0+aXNFbGVtZW50Tm9kZSgpICYmIHRvRWxlbWVudChub2RlKS0+ZmFzdEhhc0F0dHJpYnV0
ZShkaXJBdHRyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgc2V0
SGFzRGlyQXV0b0ZsYWdSZWN1cnNpdmVseShub2RlLCBmYWxzZSk7CkBAIC05NjgsMTMgKzk2OCwx
MyBAQCB2b2lkIEhUTUxFbGVtZW50OjphZGp1c3REaXJlY3Rpb25hbGl0eUlmTmVlZGVkQWZ0ZXJD
aGlsZHJlbkNoYW5nZWQoTm9kZSogYmVmb3JlQwogICAgICAgICByZXR1cm47CiAKICAgICBOb2Rl
KiBvbGRNYXJrZWROb2RlID0gYmVmb3JlQ2hhbmdlID8gYmVmb3JlQ2hhbmdlLT50cmF2ZXJzZU5l
eHRTaWJsaW5nKCkgOiAwOwotICAgIHdoaWxlIChvbGRNYXJrZWROb2RlICYmIG9sZE1hcmtlZE5v
ZGUtPmlzSFRNTEVsZW1lbnQoKSAmJiB0b0hUTUxFbGVtZW50KG9sZE1hcmtlZE5vZGUpLT5oYXNB
dHRyaWJ1dGUoZGlyQXR0cikpCisgICAgd2hpbGUgKG9sZE1hcmtlZE5vZGUgJiYgb2xkTWFya2Vk
Tm9kZS0+aXNIVE1MRWxlbWVudCgpICYmIHRvSFRNTEVsZW1lbnQob2xkTWFya2VkTm9kZSktPmZh
c3RIYXNBdHRyaWJ1dGUoZGlyQXR0cikpCiAgICAgICAgIG9sZE1hcmtlZE5vZGUgPSBvbGRNYXJr
ZWROb2RlLT50cmF2ZXJzZU5leHRTaWJsaW5nKHRoaXMpOwogICAgIGlmIChvbGRNYXJrZWROb2Rl
KQogICAgICAgICBzZXRIYXNEaXJBdXRvRmxhZ1JlY3Vyc2l2ZWx5KG9sZE1hcmtlZE5vZGUsIGZh
bHNlKTsKIAogICAgIGZvciAoRWxlbWVudCogZWxlbWVudFRvQWRqdXN0ID0gdGhpczsgZWxlbWVu
dFRvQWRqdXN0OyBlbGVtZW50VG9BZGp1c3QgPSBlbGVtZW50VG9BZGp1c3QtPnBhcmVudEVsZW1l
bnQoKSkgewotICAgICAgICBpZiAoZWxlbWVudFRvQWRqdXN0LT5pc0hUTUxFbGVtZW50KCkgJiYg
ZWxlbWVudFRvQWRqdXN0LT5oYXNBdHRyaWJ1dGUoZGlyQXR0cikpIHsKKyAgICAgICAgaWYgKGVs
ZW1lbnRUb0FkanVzdC0+aXNIVE1MRWxlbWVudCgpICYmIGVsZW1lbnRUb0FkanVzdC0+ZmFzdEhh
c0F0dHJpYnV0ZShkaXJBdHRyKSkgewogICAgICAgICAgICAgdG9IVE1MRWxlbWVudChlbGVtZW50
VG9BZGp1c3QpLT5jYWxjdWxhdGVBbmRBZGp1c3REaXJlY3Rpb25hbGl0eSgpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbWJlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRW1iZWRFbGVtZW50
LmNwcAppbmRleCBjZDcyOGI1Li5jNjY1YWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbWJlZEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVt
YmVkRWxlbWVudC5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6
OnVwZGF0ZVdpZGdldChQbHVnaW5DcmVhdGlvbk9wdGlvbiBwbHVnaW5DcmVhdGlvbk9wdGlvbikK
IAogICAgIFN1YmZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+c3ViZnJhbWVMb2FkZXIoKTsKICAgICAvLyBGSVhNRTogYmVmb3JlTG9hZCBjb3VsZCBo
YXZlIGRldGFjaGVkIHRoZSByZW5kZXJlciEgIEp1c3QgbGlrZSBpbiB0aGUgPG9iamVjdD4gY2Fz
ZSBhYm92ZS4KLSAgICBsb2FkZXItPnJlcXVlc3RPYmplY3QodGhpcywgbV91cmwsIGdldEF0dHJp
YnV0ZShuYW1lQXR0ciksIG1fc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFsdWVzKTsK
KyAgICBsb2FkZXItPnJlcXVlc3RPYmplY3QodGhpcywgbV91cmwsIGZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpLCBtX3NlcnZpY2VUeXBlLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcyk7CiB9CiAK
IGJvb2wgSFRNTEVtYmVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBOb2RlUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCkKQEAgLTIyMyw4ICsyMjMsOCBAQCB2b2lkIEhUTUxFbWJlZEVs
ZW1lbnQ6Omluc2VydGVkSW50b0RvY3VtZW50KCkKICAgICBpZiAoZG9jdW1lbnQoKS0+aXNIVE1M
RG9jdW1lbnQoKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50Kj4oZG9jdW1lbnQo
KSktPmFkZE5hbWVkSXRlbShtX25hbWUpOwogCi0gICAgU3RyaW5nIHdpZHRoID0gZ2V0QXR0cmli
dXRlKHdpZHRoQXR0cik7Ci0gICAgU3RyaW5nIGhlaWdodCA9IGdldEF0dHJpYnV0ZShoZWlnaHRB
dHRyKTsKKyAgICBTdHJpbmcgd2lkdGggPSBmYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0cik7Cisg
ICAgU3RyaW5nIGhlaWdodCA9IGZhc3RHZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0cik7CiAgICAgaWYg
KCF3aWR0aC5pc0VtcHR5KCkgfHwgIWhlaWdodC5pc0VtcHR5KCkpIHsKICAgICAgICAgTm9kZSog
biA9IHBhcmVudE5vZGUoKTsKICAgICAgICAgd2hpbGUgKG4gJiYgIW4tPmhhc1RhZ05hbWUob2Jq
ZWN0VGFnKSkKQEAgLTI3Myw3ICsyNzMsNyBAQCB2b2lkIEhUTUxFbWJlZEVsZW1lbnQ6OmFkZFN1
YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29ucwogewog
ICAgIEhUTUxQbHVnSW5JbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1
cmxzKTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRl
VVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMs
IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikpKTsKIH0K
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbGxlY3Rpb24uY3BwCmluZGV4IDRm
NTJiOWQuLmU0ZDQ3ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1D
b2xsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29sbGVjdGlv
bi5jcHAKQEAgLTExMiw3ICsxMTIsNyBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246Omdl
dE5hbWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbgogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBmb3JtLT5tX2Fzc29jaWF0ZWRFbGVtZW50cy5zaXplKCk7
ICsraSkgewogICAgICAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQqIGFzc29jaWF0ZWRFbGVtZW50
ID0gZm9ybS0+bV9hc3NvY2lhdGVkRWxlbWVudHNbaV07CiAgICAgICAgIEhUTUxFbGVtZW50KiBl
bGVtZW50ID0gdG9IVE1MRWxlbWVudChhc3NvY2lhdGVkRWxlbWVudCk7Ci0gICAgICAgIGlmIChh
c3NvY2lhdGVkRWxlbWVudC0+aXNFbnVtZXJhdGFibGUoKSAmJiBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoYXR0ck5hbWUpID09IG5hbWUpIHsKKyAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5p
c0VudW1lcmF0YWJsZSgpICYmIGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoYXR0ck5hbWUpID09
IG5hbWUpIHsKICAgICAgICAgICAgIGZvdW5kSW5wdXRFbGVtZW50cyA9IHRydWU7CiAgICAgICAg
ICAgICBpZiAoIWR1cGxpY2F0ZU51bWJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVu
dDsKQEAgLTEyMyw3ICsxMjMsNyBAQCBFbGVtZW50KiBIVE1MRm9ybUNvbGxlY3Rpb246OmdldE5h
bWVkRm9ybUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIGNvbgogICAgIGlmICgh
Zm91bmRJbnB1dEVsZW1lbnRzKSB7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBm
b3JtLT5tX2ltYWdlRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIEhUTUxJbWFn
ZUVsZW1lbnQqIGVsZW1lbnQgPSBmb3JtLT5tX2ltYWdlRWxlbWVudHNbaV07Ci0gICAgICAgICAg
ICBpZiAoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGF0dHJOYW1lKSA9PSBuYW1lKSB7CisgICAgICAg
ICAgICBpZiAoZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhdHRyTmFtZSkgPT0gbmFtZSkgewog
ICAgICAgICAgICAgICAgIGlmICghZHVwbGljYXRlTnVtYmVyKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZWxlbWVudDsKICAgICAgICAgICAgICAgICAtLWR1cGxpY2F0ZU51bWJlcjsKQEAg
LTE5Niw3ICsxOTYsNyBAQCB2b2lkIEhUTUxGb3JtQ29sbGVjdGlvbjo6dXBkYXRlTmFtZUNhY2hl
KCkgY29uc3QKICAgICAgICAgaWYgKGFzc29jaWF0ZWRFbGVtZW50LT5pc0VudW1lcmF0YWJsZSgp
KSB7CiAgICAgICAgICAgICBIVE1MRWxlbWVudCogZWxlbWVudCA9IHRvSFRNTEVsZW1lbnQoYXNz
b2NpYXRlZEVsZW1lbnQpOwogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBpZEF0dHJW
YWwgPSBlbGVtZW50LT5nZXRJZEF0dHJpYnV0ZSgpOwotICAgICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lQXR0clZhbCA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0cik7Cisg
ICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxlbWVudC0+ZmFz
dEdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgICAgICBpZiAoIWlkQXR0clZhbC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAg
ICAgICBWZWN0b3I8RWxlbWVudCo+KiBpZFZlY3RvciA9IGluZm8oKS0+aWRDYWNoZS5nZXQoaWRB
dHRyVmFsLmltcGwoKSk7CkBAIC0yMjMsNyArMjIzLDcgQEAgdm9pZCBIVE1MRm9ybUNvbGxlY3Rp
b246OnVwZGF0ZU5hbWVDYWNoZSgpIGNvbnN0CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGYtPm1faW1hZ2VFbGVtZW50cy5zaXplKCk7ICsraSkgewogICAgICAgICBIVE1MSW1hZ2VFbGVt
ZW50KiBlbGVtZW50ID0gZi0+bV9pbWFnZUVsZW1lbnRzW2ldOwogICAgICAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkQXR0clZhbCA9IGVsZW1lbnQtPmdldElkQXR0cmlidXRlKCk7Ci0gICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZUF0dHJWYWwgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVBdHRyVmFsID0gZWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgICAgIGlmICghaWRBdHRyVmFs
LmlzRW1wdHkoKSAmJiAhZm91bmRJbnB1dEVsZW1lbnRzLmNvbnRhaW5zKGlkQXR0clZhbC5pbXBs
KCkpKSB7CiAgICAgICAgICAgICAvLyBhZGQgdG8gaWQgY2FjaGUKICAgICAgICAgICAgIFZlY3Rv
cjxFbGVtZW50Kj4qIGlkVmVjdG9yID0gaW5mbygpLT5pZENhY2hlLmdldChpZEF0dHJWYWwuaW1w
bCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
CmluZGV4IGZmYWZiYTUuLjgxMDYxZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9ybUNvbnRyb2xFbGVtZW50LmNwcApAQCAtMjQ1LDcgKzI0NSw3IEBAIHZvaWQgSFRNTEZvcm1D
b250cm9sRWxlbWVudDo6c2V0RGlzYWJsZWQoYm9vbCBiKQogCiBib29sIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQ6OmF1dG9mb2N1cygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0ZShh
dXRvZm9jdXNBdHRyKTsKKyAgICByZXR1cm4gZmFzdEhhc0F0dHJpYnV0ZShhdXRvZm9jdXNBdHRy
KTsKIH0KIAogYm9vbCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpyZXF1aXJlZCgpIGNvbnN0CkBA
IC0zNjAsNyArMzYwLDcgQEAgdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50Ojp1cGRhdGVWaXNp
YmxlVmFsaWRhdGlvbk1lc3NhZ2UoKQogICAgICAgICAvLyBIVE1MNSBzcGVjaWZpY2F0aW9uIGRv
ZXNuJ3QgYXNrIFVBIHRvIHNob3cgdGhlIHRpdGxlIGF0dHJpYnV0ZSB2YWx1ZQogICAgICAgICAv
LyB3aXRoIHRoZSB2YWxpZGF0aW9uTWVzc2FnZS4gIEhvd2V2ZXIsIHRoaXMgYmVoYXZpb3IgaXMg
c2FtZSBhcyBPcGVyYQogICAgICAgICAvLyBhbmQgdGhlIHNwZWNpZmljYXRpb24gZGVzY3JpYmVz
IHN1Y2ggYmVoYXZpb3IgYXMgYW4gZXhhbXBsZS4KLSAgICAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB0aXRsZSA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworICAgICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHRpdGxlID0gZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgICAgICBpZiAo
IW1lc3NhZ2UuaXNFbXB0eSgpICYmICF0aXRsZS5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIG1l
c3NhZ2UuYXBwZW5kKCdcbicpOwogICAgICAgICAgICAgbWVzc2FnZS5hcHBlbmQodGl0bGUpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwCmluZGV4IDVhYzViNjMuLjQ4YmE2
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTUxOSw3ICs1
MTksNyBAQCBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBIVE1MRm9ybUVsZW1lbnQ6OmVsZW1l
bnRzKCkKIAogU3RyaW5nIEhUTUxGb3JtRWxlbWVudDo6bmFtZSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShuYW1lQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpOwogfQogCiBib29sIEhUTUxGb3JtRWxlbWVudDo6bm9WYWxpZGF0ZSgpIGNvbnN0
CkBAIC01MzIsNyArNTMyLDcgQEAgYm9vbCBIVE1MRm9ybUVsZW1lbnQ6Om5vVmFsaWRhdGUoKSBj
b25zdAogLy8gKERhcmluIEFkbGVyKSByZW1vdmVkIHRoaXMsIHNvbWVvbmUgYWRkZWQgaXQgYmFj
aywgc28gSSBhbSBsZWF2aW5nIGl0IGluIGZvciBub3cuCiBTdHJpbmcgSFRNTEZvcm1FbGVtZW50
OjphY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7
CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoYWN0aW9uQXR0cik7CiB9CiAKIHZvaWQgSFRN
TEZvcm1FbGVtZW50OjpzZXRBY3Rpb24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKQEAgLTU0Nyw3ICs1
NDcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c2V0RW5jdHlwZShjb25zdCBTdHJpbmcgJnZh
bHVlKQogCiBTdHJpbmcgSFRNTEZvcm1FbGVtZW50OjptZXRob2QoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUobWV0aG9kQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1
dGUobWV0aG9kQXR0cik7CiB9CiAKIHZvaWQgSFRNTEZvcm1FbGVtZW50OjpzZXRNZXRob2QoY29u
c3QgU3RyaW5nICZ2YWx1ZSkKQEAgLTU1Nyw3ICs1NTcsNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVu
dDo6c2V0TWV0aG9kKGNvbnN0IFN0cmluZyAmdmFsdWUpCiAKIFN0cmluZyBIVE1MRm9ybUVsZW1l
bnQ6OnRhcmdldCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0YXJnZXRBdHRy
KTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh0YXJnZXRBdHRyKTsKIH0KIAogYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6Ondhc1VzZXJTdWJtaXR0ZWQoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEZyYW1lRWxlbWVudC5jcHAKaW5kZXggMzRlZGU4ZC4uZjI3YjYwYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRp
YyBpbmxpbmUgSFRNTEZyYW1lU2V0RWxlbWVudCogY29udGFpbmluZ0ZyYW1lU2V0RWxlbWVudChO
b2RlKiBub2RlKQogCiBib29sIEhUTUxGcmFtZUVsZW1lbnQ6Om5vUmVzaXplKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gaGFzQXR0cmlidXRlKG5vcmVzaXplQXR0cik7CisgICAgcmV0dXJuIGZhc3RI
YXNBdHRyaWJ1dGUobm9yZXNpemVBdHRyKTsKIH0KIAogdm9pZCBIVE1MRnJhbWVFbGVtZW50Ojph
dHRhY2goKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcApp
bmRleCAyMzRlYzAyLi5jNjY0ZDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGcmFtZUVsZW1lbnRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgSFRNTEZyYW1lRWxlbWVu
dEJhc2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIAogdm9pZCBIVE1M
RnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZW5VUkwoKQogewotICAgIG1fZnJhbWVOYW1l
ID0gZ2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKKyAgICBtX2ZyYW1lTmFtZSA9IGZhc3RHZXRBdHRy
aWJ1dGUobmFtZUF0dHIpOwogICAgIGlmIChtX2ZyYW1lTmFtZS5pc051bGwoKSkKICAgICAgICAg
bV9mcmFtZU5hbWUgPSBnZXRJZEF0dHJpYnV0ZSgpOwogICAgIG9wZW5VUkwoKTsKQEAgLTE5OSw3
ICsxOTksNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjphdHRhY2goKQogCiBLVVJMIEhU
TUxGcmFtZUVsZW1lbnRCYXNlOjpsb2NhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZShzcmNBdHRyKSk7CisgICAgcmV0dXJuIGRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoc3JjQXR0cikpOwogfQogCiB2
b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpzZXRMb2NhdGlvbihjb25zdCBTdHJpbmcmIHN0cikK
QEAgLTI4Myw3ICsyODMsNyBAQCB2b2lkIEhUTUxGcmFtZUVsZW1lbnRCYXNlOjp3aWxsUmVtb3Zl
KCkKICNpZiBFTkFCTEUoRlVMTFNDUkVFTl9BUEkpCiBib29sIEhUTUxGcmFtZUVsZW1lbnRCYXNl
OjphbGxvd0Z1bGxTY3JlZW4oKSBjb25zdAogewotICAgIHJldHVybiBoYXNBdHRyaWJ1dGUod2Vi
a2l0YWxsb3dmdWxsc2NyZWVuQXR0cik7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUod2Vi
a2l0YWxsb3dmdWxsc2NyZWVuQXR0cik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MSHRtbEVsZW1lbnQuY3BwCmluZGV4IDU5YzBkM2UuLmI1YzMwNDQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTEh0bWxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxIdG1sRWxlbWVudC5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBIVE1MSHRt
bEVsZW1lbnQ6Omluc2VydGVkQnlQYXJzZXIoKQogICAgIGlmICghZG9jdW1lbnRMb2FkZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYgbWFuaWZlc3QgPSBnZXRB
dHRyaWJ1dGUobWFuaWZlc3RBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIG1hbmlmZXN0
ID0gZmFzdEdldEF0dHJpYnV0ZShtYW5pZmVzdEF0dHIpOwogICAgIGlmIChtYW5pZmVzdC5pc0Vt
cHR5KCkpCiAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5hcHBsaWNhdGlvbkNhY2hlSG9zdCgpLT5z
ZWxlY3RDYWNoZVdpdGhvdXRNYW5pZmVzdCgpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuY3BwCmluZGV4IDhmMjg5OTIuLjZiNGJlZDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcApAQCAtMTY0LDEwICsxNjQsMTAgQEAgU3Ry
aW5nIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdFRleHQoKSBjb25zdAogICAgIC8vIGxldHMgZmlndXJl
IG91dCB0aGUgYWx0IHRleHQuLiBtYWdpYyBzdHVmZgogICAgIC8vIGh0dHA6Ly93d3cudzMub3Jn
L1RSLzE5OTgvUkVDLWh0bWw0MC0xOTk4MDQyNC9hcHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgog
ICAgIC8vIGFsc28gaGVhdmlseSBkaXNjdXNzZWQgYnkgSGl4aWUgb24gYnVnemlsbGEKLSAgICBT
dHJpbmcgYWx0ID0gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIFN0cmluZyBhbHQgPSBmYXN0
R2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIC8vIGZhbGwgYmFjayB0byB0aXRsZSBhdHRyaWJ1
dGUKICAgICBpZiAoYWx0LmlzTnVsbCgpKQotICAgICAgICBhbHQgPSBnZXRBdHRyaWJ1dGUodGl0
bGVBdHRyKTsKKyAgICAgICAgYWx0ID0gZmFzdEdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAg
IHJldHVybiBhbHQ7CiB9CiAKQEAgLTI1NSw3ICsyNTUsNyBAQCBpbnQgSFRNTEltYWdlRWxlbWVu
dDo6d2lkdGgoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCiAgICAgaWYgKCFyZW5kZXJl
cigpKSB7CiAgICAgICAgIC8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFuIGV4cGxp
Y2l0IHBpeGVsIHZhbHVlCiAgICAgICAgIGJvb2wgb2s7Ci0gICAgICAgIGludCB3aWR0aCA9IGdl
dEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnRvSW50KCZvayk7CisgICAgICAgIGludCB3aWR0aCA9IGZh
c3RHZXRBdHRyaWJ1dGUod2lkdGhBdHRyKS50b0ludCgmb2spOwogICAgICAgICBpZiAob2spCiAg
ICAgICAgICAgICByZXR1cm4gd2lkdGg7CiAKQEAgLTI3OCw3ICsyNzgsNyBAQCBpbnQgSFRNTElt
YWdlRWxlbWVudDo6aGVpZ2h0KGJvb2wgaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQogICAgIGlm
ICghcmVuZGVyZXIoKSkgewogICAgICAgICAvLyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZv
ciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZQogICAgICAgICBib29sIG9rOwotICAgICAgICBpbnQg
aGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7CisgICAgICAgIGlu
dCBoZWlnaHQgPSBmYXN0R2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLnRvSW50KCZvayk7CiAgICAg
ICAgIGlmIChvaykKICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAKQEAgLTMyMiwxMyArMzIy
LDEzIEBAIGJvb2wgSFRNTEltYWdlRWxlbWVudDo6aXNVUkxBdHRyaWJ1dGUoQXR0cmlidXRlKiBh
dHRyKSBjb25zdAogCiBjb25zdCBBdG9taWNTdHJpbmcmIEhUTUxJbWFnZUVsZW1lbnQ6OmFsdCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhbHRBdHRyKTsKKyAgICByZXR1cm4g
ZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKTsKIH0KIAogYm9vbCBIVE1MSW1hZ2VFbGVtZW50Ojpk
cmFnZ2FibGUoKSBjb25zdAogewogICAgIC8vIEltYWdlIGVsZW1lbnRzIGFyZSBkcmFnZ2FibGUg
YnkgZGVmYXVsdC4KLSAgICByZXR1cm4gIWVxdWFsSWdub3JpbmdDYXNlKGdldEF0dHJpYnV0ZShk
cmFnZ2FibGVBdHRyKSwgImZhbHNlIik7CisgICAgcmV0dXJuICFlcXVhbElnbm9yaW5nQ2FzZShm
YXN0R2V0QXR0cmlidXRlKGRyYWdnYWJsZUF0dHIpLCAiZmFsc2UiKTsKIH0KIAogdm9pZCBIVE1M
SW1hZ2VFbGVtZW50OjpzZXRIZWlnaHQoaW50IHZhbHVlKQpAQCAtMzM4LDcgKzMzOCw3IEBAIHZv
aWQgSFRNTEltYWdlRWxlbWVudDo6c2V0SGVpZ2h0KGludCB2YWx1ZSkKIAogS1VSTCBIVE1MSW1h
Z2VFbGVtZW50OjpzcmMoKSBjb25zdAogewotICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21wbGV0
ZVVSTChnZXRBdHRyaWJ1dGUoc3JjQXR0cikpOworICAgIHJldHVybiBkb2N1bWVudCgpLT5jb21w
bGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VF
bGVtZW50OjpzZXRTcmMoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTM4NCw3ICszODQsNyBAQCB2
b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFz
aFNldDxLVVJMPiYgdXJscykgY29ucwogCiAgICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgc3Jj
KCkpOwogICAgIC8vIEZJWE1FOiBXaGF0IGFib3V0IHdoZW4gdGhlIHVzZW1hcCBhdHRyaWJ1dGUg
YmVnaW5zIHdpdGggIiMiPwotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCkt
PmNvbXBsZXRlVVJMKGdldEF0dHJpYnV0ZSh1c2VtYXBBdHRyKSkpOworICAgIGFkZFN1YnJlc291
cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUodXNl
bWFwQXR0cikpKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50Ojp3aWxsTW92ZVRvTmV3T3du
ZXJEb2N1bWVudCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRl
eCBkZDFmMTNhLi42NTZhMTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVu
dC5jcHAKQEAgLTgzMCw3ICs4MzAsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OmZpbmlzaFBh
cnNpbmdDaGlsZHJlbigpCiAgICAgbV9wYXJzaW5nSW5Qcm9ncmVzcyA9IGZhbHNlOwogICAgIEhU
TUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKTsKICAgICBp
ZiAoIW1fc3RhdGVSZXN0b3JlZCkgewotICAgICAgICBib29sIGNoZWNrZWQgPSBoYXNBdHRyaWJ1
dGUoY2hlY2tlZEF0dHIpOworICAgICAgICBib29sIGNoZWNrZWQgPSBmYXN0SGFzQXR0cmlidXRl
KGNoZWNrZWRBdHRyKTsKICAgICAgICAgaWYgKGNoZWNrZWQpCiAgICAgICAgICAgICBzZXRDaGVj
a2VkKGNoZWNrZWQpOwogICAgICAgICBtX3JlZmxlY3RzQ2hlY2tlZEF0dHJpYnV0ZSA9IHRydWU7
CkBAIC04NzksOSArODc5LDkgQEAgU3RyaW5nIEhUTUxJbnB1dEVsZW1lbnQ6OmFsdFRleHQoKSBj
b25zdAogICAgIFN0cmluZyBhbHQgPSBmYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIpOwogICAgIC8v
IGZhbGwgYmFjayB0byB0aXRsZSBhdHRyaWJ1dGUKICAgICBpZiAoYWx0LmlzTnVsbCgpKQotICAg
ICAgICBhbHQgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICAgICAgYWx0ID0gZmFzdEdl
dEF0dHJpYnV0ZSh0aXRsZUF0dHIpOwogICAgIGlmIChhbHQuaXNOdWxsKCkpCi0gICAgICAgIGFs
dCA9IGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOworICAgICAgICBhbHQgPSBmYXN0R2V0QXR0cmli
dXRlKHZhbHVlQXR0cik7CiAgICAgaWYgKGFsdC5pc0VtcHR5KCkpCiAgICAgICAgIGFsdCA9IGlu
cHV0RWxlbWVudEFsdFRleHQoKTsKICAgICByZXR1cm4gYWx0OwpAQCAtOTE1LDcgKzkxNSw3IEBA
IHZvaWQgSFRNTElucHV0RWxlbWVudDo6cmVzZXQoKQogICAgICAgICBzZXRWYWx1ZShTdHJpbmco
KSk7CiAKICAgICBzZXRBdXRvZmlsbGVkKGZhbHNlKTsKLSAgICBzZXRDaGVja2VkKGhhc0F0dHJp
YnV0ZShjaGVja2VkQXR0cikpOworICAgIHNldENoZWNrZWQoZmFzdEhhc0F0dHJpYnV0ZShjaGVj
a2VkQXR0cikpOwogICAgIG1fcmVmbGVjdHNDaGVja2VkQXR0cmlidXRlID0gdHJ1ZTsKIH0KIApA
QCAtMTEzNyw3ICsxMTM3LDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpzZXRQbGFjZWhvbGRl
cihjb25zdCBTdHJpbmcmIHZhbHVlKQogCiBib29sIEhUTUxJbnB1dEVsZW1lbnQ6OnNlYXJjaEV2
ZW50c1Nob3VsZEJlRGlzcGF0Y2hlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJpYnV0
ZShpbmNyZW1lbnRhbEF0dHIpOworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRlKGluY3JlbWVu
dGFsQXR0cik7CiB9CiAKIHZvaWQgSFRNTElucHV0RWxlbWVudDo6c2V0VmFsdWVGcm9tUmVuZGVy
ZXIoY29uc3QgU3RyaW5nJiB2YWx1ZSkKQEAgLTE3ODQsNyArMTc4NCw3IEBAIHZvaWQgSFRNTElu
cHV0RWxlbWVudDo6c2V0V2FwSW5wdXRGb3JtYXQoU3RyaW5nJiBtYXNrKQogYm9vbCBIVE1MSW5w
dXRFbGVtZW50Ojppc1NwZWVjaEVuYWJsZWQoKSBjb25zdAogewogICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgUkFOR0UsIEVNQUlMLCBVUkwsIENPTE9SIGFuZCBEQVRFL1RJTUUgaW5wdXQg
dHlwZXMuCi0gICAgcmV0dXJuIG1faW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0U3BlZWNoQXR0cmli
dXRlKCkgJiYgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c3BlZWNoSW5wdXRFbmFibGVkKCkgJiYg
aGFzQXR0cmlidXRlKHdlYmtpdHNwZWVjaEF0dHIpOworICAgIHJldHVybiBtX2lucHV0VHlwZS0+
c2hvdWxkUmVzcGVjdFNwZWVjaEF0dHJpYnV0ZSgpICYmIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNwZWVjaElucHV0RW5hYmxlZCgpICYmIGZhc3RIYXNBdHRyaWJ1dGUod2Via2l0c3BlZWNoQXR0
cik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGFi
ZWxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAK
aW5kZXggZjIzNjFmMC4uMTFkOTNhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MTGFiZWxFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVs
ZW1lbnQuY3BwCkBAIC02Niw3ICs2Niw3IEBAIGJvb2wgSFRNTExhYmVsRWxlbWVudDo6aXNGb2N1
c2FibGUoKSBjb25zdAogCiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KiBIVE1MTGFiZWxFbGVtZW50
Ojpjb250cm9sKCkKIHsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRyb2xJZCA9IGdldEF0
dHJpYnV0ZShmb3JBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIGNvbnRyb2xJZCA9IGZh
c3RHZXRBdHRyaWJ1dGUoZm9yQXR0cik7CiAgICAgaWYgKGNvbnRyb2xJZC5pc051bGwoKSkgewog
ICAgICAgICAvLyBTZWFyY2ggdGhlIGNoaWxkcmVuIGFuZCBkZXNjZW5kYW50cyBvZiB0aGUgbGFi
ZWwgZWxlbWVudCBmb3IgYSBmb3JtIGVsZW1lbnQuCiAgICAgICAgIC8vIHBlciBodHRwOi8vZGV2
LnczLm9yZy9odG1sNS9zcGVjL092ZXJ2aWV3Lmh0bWwjdGhlLWxhYmVsLWVsZW1lbnQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAppbmRleCA0YmM2ZTkzLi4wNDkzM2UwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCkBAIC0xODcsNyArMTg3LDcg
QEAgdm9pZCBIVE1MTGlua0VsZW1lbnQ6OnByb2Nlc3MoKQogICAgIGlmICghZGlzYWJsZWQoKSAm
JiAobV9yZWxBdHRyaWJ1dGUubV9pc1N0eWxlU2hlZXQgfHwgKGFjY2VwdElmVHlwZUNvbnRhaW5z
VGV4dENTUyAmJiB0eXBlLmNvbnRhaW5zKCJ0ZXh0L2NzcyIpKSkKICAgICAgICAgJiYgZG9jdW1l
bnQoKS0+ZnJhbWUoKSAmJiBtX3VybC5pc1ZhbGlkKCkpIHsKICAgICAgICAgCi0gICAgICAgIFN0
cmluZyBjaGFyc2V0ID0gZ2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKKyAgICAgICAgU3RyaW5n
IGNoYXJzZXQgPSBmYXN0R2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKTsKICAgICAgICAgaWYgKGNo
YXJzZXQuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCiAgICAgICAgICAgICBjaGFy
c2V0ID0gZG9jdW1lbnQoKS0+Y2hhcnNldCgpOwogICAgICAgICAKQEAgLTM4MCwyMiArMzgwLDIy
IEBAIGJvb2wgSFRNTExpbmtFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUgKmF0dHIp
IGNvbnN0CiAKIEtVUkwgSFRNTExpbmtFbGVtZW50OjpocmVmKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKGhyZWZBdHRyKSk7CisgICAg
cmV0dXJuIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoaHJlZkF0dHIp
KTsKIH0KIAogU3RyaW5nIEhUTUxMaW5rRWxlbWVudDo6cmVsKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZ2V0QXR0cmlidXRlKHJlbEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHJl
bEF0dHIpOwogfQogCiBTdHJpbmcgSFRNTExpbmtFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAogewot
ICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodGFyZ2V0QXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRB
dHRyaWJ1dGUodGFyZ2V0QXR0cik7CiB9CiAKIFN0cmluZyBIVE1MTGlua0VsZW1lbnQ6OnR5cGUo
KSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUodHlwZUF0dHIpOworICAgIHJldHVy
biBmYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKTsKIH0KIAogdm9pZCBIVE1MTGlua0VsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29u
c3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKaW5kZXggZTk0NGRhZC4uODY5
ZGI5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5jcHAKQEAgLTkwLDcgKzkw
LDcgQEAgSFRNTEltYWdlRWxlbWVudCogSFRNTE1hcEVsZW1lbnQ6OmltYWdlRWxlbWVudCgpCiAg
ICAgICAgIC8vIFRoZSBIVE1MSW1hZ2VFbGVtZW50J3MgdXNlTWFwKCkgdmFsdWUgaW5jbHVkZXMg
dGhlICcjJyBzeW1ib2wgYXQgdGhlIGJlZ2lubmluZywKICAgICAgICAgLy8gd2hpY2ggaGFzIHRv
IGJlIHN0cmlwcGVkIG9mZi4KICAgICAgICAgSFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50
ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGN1cnIpOwotICAgICAgICBTdHJpbmcg
dXNlTWFwTmFtZSA9IGltYWdlRWxlbWVudC0+Z2V0QXR0cmlidXRlKHVzZW1hcEF0dHIpLnN0cmlu
ZygpLnN1YnN0cmluZygxKTsKKyAgICAgICAgU3RyaW5nIHVzZU1hcE5hbWUgPSBpbWFnZUVsZW1l
bnQtPmZhc3RHZXRBdHRyaWJ1dGUodXNlbWFwQXR0cikuc3RyaW5nKCkuc3Vic3RyaW5nKDEpOwog
ICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodXNlTWFwTmFtZSwgbV9uYW1lKSkKICAgICAg
ICAgICAgIHJldHVybiBpbWFnZUVsZW1lbnQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE1lZGlhRWxlbWVudC5jcHAKaW5kZXggOGQ3NTNiNi4uNTVkMWVkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC0yMzUsNyArMjM1LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVz
ZXJ2ZURlY2xzKQogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lID0gYXR0ci0+bmFt
ZSgpOwogICAgIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKSB7CiAgICAgICAgIC8vIFRyaWdnZXIg
YSByZWxvYWQsIGFzIGxvbmcgYXMgdGhlICdzcmMnIGF0dHJpYnV0ZSBpcyBwcmVzZW50LgotICAg
ICAgICBpZiAoIWdldEF0dHJpYnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkpCisgICAgICAgIGlmICgh
ZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKS5pc0VtcHR5KCkpCiAgICAgICAgICAgICBzY2hlZHVs
ZUxvYWQoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gY29udHJvbHNBdHRyKSB7
CkBAIC0zNTgsNyArMzU4LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjppbnNlcnRlZEludG9E
b2N1bWVudCgpCiB7CiAgICAgTE9HKE1lZGlhLCAiSFRNTE1lZGlhRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVudCIpOwogICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG9Eb2N1bWVudCgpOwot
ICAgIGlmICghZ2V0QXR0cmlidXRlKHNyY0F0dHIpLmlzRW1wdHkoKSAmJiBtX25ldHdvcmtTdGF0
ZSA9PSBORVRXT1JLX0VNUFRZKQorICAgIGlmICghZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKS5p
c0VtcHR5KCkgJiYgbV9uZXR3b3JrU3RhdGUgPT0gTkVUV09SS19FTVBUWSkKICAgICAgICAgc2No
ZWR1bGVMb2FkKCk7CiB9CiAKQEAgLTYxOCw3ICs2MTgsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OnNlbGVjdE1lZGlhUmVzb3VyY2UoKQogICAgIE1vZGUgbW9kZSA9IGF0dHJpYnV0ZTsKIAog
ICAgIC8vIDMgLSAuLi4gdGhlIG1lZGlhIGVsZW1lbnQgaGFzIG5laXRoZXIgYSBzcmMgYXR0cmli
dXRlIC4uLgotICAgIGlmICghaGFzQXR0cmlidXRlKHNyY0F0dHIpKSB7CisgICAgaWYgKCFmYXN0
SGFzQXR0cmlidXRlKHNyY0F0dHIpKSB7CiAgICAgICAgIC8vIC4uLiBub3IgYSBzb3VyY2UgZWxl
bWVudCBjaGlsZDogLi4uCiAgICAgICAgIE5vZGUqIG5vZGU7CiAgICAgICAgIGZvciAobm9kZSA9
IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5nKCkpIHsKQEAgLTE0
NjgsNyArMTQ2OCw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6ZW5kZWQoKSBjb25zdAogCiBi
b29sIEhUTUxNZWRpYUVsZW1lbnQ6OmF1dG9wbGF5KCkgY29uc3QKIHsKLSAgICByZXR1cm4gaGFz
QXR0cmlidXRlKGF1dG9wbGF5QXR0cik7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoYXV0
b3BsYXlBdHRyKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRBdXRvcGxheShib29s
IGIpCkBAIC0xNTgxLDcgKzE1ODEsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnBhdXNlSW50
ZXJuYWwoKQogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6Omxvb3AoKSBjb25zdAogewotICAgIHJl
dHVybiBoYXNBdHRyaWJ1dGUobG9vcEF0dHIpOworICAgIHJldHVybiBmYXN0SGFzQXR0cmlidXRl
KGxvb3BBdHRyKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRMb29wKGJvb2wgYikK
QEAgLTE2MDYsNyArMTYwNiw3IEBAIGJvb2wgSFRNTE1lZGlhRWxlbWVudDo6Y29udHJvbHMoKSBj
b25zdAogICAgIGlmIChpc0Z1bGxzY3JlZW4oKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAg
ICByZXR1cm4gaGFzQXR0cmlidXRlKGNvbnRyb2xzQXR0cik7CisgICAgcmV0dXJuIGZhc3RIYXNB
dHRyaWJ1dGUoY29udHJvbHNBdHRyKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRD
b250cm9scyhib29sIGIpCkBAIC0xODI4LDcgKzE4MjgsNyBAQCBLVVJMIEhUTUxNZWRpYUVsZW1l
bnQ6OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSAqY29udGVudFR5cGUsIEludmFs
aWRTbwogICAgICAgICBpZiAobWVkaWFVUkwuaXNFbXB0eSgpKQogICAgICAgICAgICAgZ290byBj
aGVja19hZ2FpbjsKICAgICAgICAgCi0gICAgICAgIGlmIChzb3VyY2UtPmhhc0F0dHJpYnV0ZSht
ZWRpYUF0dHIpKSB7CisgICAgICAgIGlmIChzb3VyY2UtPmZhc3RIYXNBdHRyaWJ1dGUobWVkaWFB
dHRyKSkgewogICAgICAgICAgICAgTWVkaWFRdWVyeUV2YWx1YXRvciBzY3JlZW5FdmFsKCJzY3Jl
ZW4iLCBkb2N1bWVudCgpLT5mcmFtZSgpLCByZW5kZXJlcigpID8gcmVuZGVyZXIoKS0+c3R5bGUo
KSA6IDApOwogICAgICAgICAgICAgUmVmUHRyPE1lZGlhTGlzdD4gbWVkaWEgPSBNZWRpYUxpc3Q6
OmNyZWF0ZUFsbG93aW5nRGVzY3JpcHRpb25TeW50YXgoc291cmNlLT5tZWRpYSgpKTsKICNpZiAh
TE9HX0RJU0FCTEVECkBAIC0xODM5LDcgKzE4MzksNyBAQCBLVVJMIEhUTUxNZWRpYUVsZW1lbnQ6
OnNlbGVjdE5leHRTb3VyY2VDaGlsZChDb250ZW50VHlwZSAqY29udGVudFR5cGUsIEludmFsaWRT
bwogICAgICAgICAgICAgICAgIGdvdG8gY2hlY2tfYWdhaW47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAoc291cmNlLT5oYXNBdHRyaWJ1dGUodHlwZUF0dHIpKSB7CisgICAgICAgIGlmIChzb3Vy
Y2UtPmZhc3RIYXNBdHRyaWJ1dGUodHlwZUF0dHIpKSB7CiAjaWYgIUxPR19ESVNBQkxFRAogICAg
ICAgICAgICAgaWYgKHNob3VsZExvZykKICAgICAgICAgICAgICAgICBMT0coTWVkaWEsICJIVE1M
TWVkaWFFbGVtZW50OjpzZWxlY3ROZXh0U291cmNlQ2hpbGQgLSAndHlwZScgaXMgJXMiLCBzb3Vy
Y2UtPnR5cGUoKS51dGY4KCkuZGF0YSgpKTsKQEAgLTE4OTEsNyArMTg5MSw3IEBAIHZvaWQgSFRN
TE1lZGlhRWxlbWVudDo6c291cmNlV2FzQWRkZWQoSFRNTFNvdXJjZUVsZW1lbnQqIHNvdXJjZSkK
ICNlbmRpZgogICAgIAogICAgIC8vIFdlIHNob3VsZCBvbmx5IGNvbnNpZGVyIGEgPHNvdXJjZT4g
ZWxlbWVudCB3aGVuIHRoZXJlIGlzIG5vdCBzcmMgYXR0cmlidXRlIGF0IGFsbC4KLSAgICBpZiAo
aGFzQXR0cmlidXRlKHNyY0F0dHIpKQorICAgIGlmIChmYXN0SGFzQXR0cmlidXRlKHNyY0F0dHIp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyA0LjguOCAtIElmIGEgc291cmNlIGVsZW1lbnQg
aXMgaW5zZXJ0ZWQgYXMgYSBjaGlsZCBvZiBhIG1lZGlhIGVsZW1lbnQgdGhhdCBoYXMgbm8gc3Jj
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCmluZGV4IDEwOGE5OGMuLmNl
YTRhMDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVudC5jcHAKQEAgLTgxLDE3
ICs4MSwxNyBAQCB2b2lkIEhUTUxNZXRhRWxlbWVudDo6cHJvY2VzcygpCiAKIFN0cmluZyBIVE1M
TWV0YUVsZW1lbnQ6OmNvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
Y29udGVudEF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGNvbnRlbnRBdHRyKTsK
IH0KIAogU3RyaW5nIEhUTUxNZXRhRWxlbWVudDo6aHR0cEVxdWl2KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZ2V0QXR0cmlidXRlKGh0dHBfZXF1aXZBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0
dHJpYnV0ZShodHRwX2VxdWl2QXR0cik7CiB9CiAKIFN0cmluZyBIVE1MTWV0YUVsZW1lbnQ6Om5h
bWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpOworICAgIHJl
dHVybiBmYXN0R2V0QXR0cmlidXRlKG5hbWVBdHRyKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1ldGVyRWxlbWVudC5jcHAKaW5kZXggMTNlMDJlZC4uY2VlMmM5NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWV0ZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxNZXRlckVsZW1lbnQuY3BwCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQg
SFRNTE1ldGVyRWxlbWVudDo6YXR0YWNoKCkKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50OjptaW4o
KSBjb25zdAogewogICAgIGRvdWJsZSBtaW4gPSAwOwotICAgIHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGdldEF0dHJpYnV0ZShtaW5BdHRyKSwgJm1pbik7CisgICAgcGFyc2VUb0RvdWJsZUZv
ck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0ZShtaW5BdHRyKSwgJm1pbik7CiAgICAgcmV0dXJu
IG1pbjsKIH0KIApAQCAtMTA0LDcgKzEwNCw3IEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6c2V0
TWluKGRvdWJsZSBtaW4sIEV4Y2VwdGlvbkNvZGUmIGVjKQogZG91YmxlIEhUTUxNZXRlckVsZW1l
bnQ6Om1heCgpIGNvbnN0CiB7CiAgICAgZG91YmxlIG1heCA9IHN0ZDo6bWF4KDEuMCwgbWluKCkp
OwotICAgIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGdldEF0dHJpYnV0ZShtYXhBdHRyKSwg
Jm1heCk7CisgICAgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0ZSht
YXhBdHRyKSwgJm1heCk7CiAgICAgcmV0dXJuIHN0ZDo6bWF4KG1heCwgbWluKCkpOwogfQogCkBA
IC0xMjAsNyArMTIwLDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpzZXRNYXgoZG91YmxlIG1h
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCiBkb3VibGUgSFRNTE1ldGVyRWxlbWVudDo6dmFsdWUoKSBj
b25zdAogewogICAgIGRvdWJsZSB2YWx1ZSA9IDA7Ci0gICAgcGFyc2VUb0RvdWJsZUZvck51bWJl
clR5cGUoZ2V0QXR0cmlidXRlKHZhbHVlQXR0ciksICZ2YWx1ZSk7CisgICAgcGFyc2VUb0RvdWJs
ZUZvck51bWJlclR5cGUoZmFzdEdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLCAmdmFsdWUpOwogICAg
IHJldHVybiBzdGQ6Om1pbihzdGQ6Om1heCh2YWx1ZSwgbWluKCkpLCBtYXgoKSk7CiB9CiAKQEAg
LTEzNiw3ICsxMzYsNyBAQCB2b2lkIEhUTUxNZXRlckVsZW1lbnQ6OnNldFZhbHVlKGRvdWJsZSB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiBkb3VibGUgSFRNTE1ldGVyRWxlbWVudDo6bG93KCkg
Y29uc3QKIHsKICAgICBkb3VibGUgbG93ID0gbWluKCk7Ci0gICAgcGFyc2VUb0RvdWJsZUZvck51
bWJlclR5cGUoZ2V0QXR0cmlidXRlKGxvd0F0dHIpLCAmbG93KTsKKyAgICBwYXJzZVRvRG91Ymxl
Rm9yTnVtYmVyVHlwZShmYXN0R2V0QXR0cmlidXRlKGxvd0F0dHIpLCAmbG93KTsKICAgICByZXR1
cm4gc3RkOjptaW4oc3RkOjptYXgobG93LCBtaW4oKSksIG1heCgpKTsKIH0KIApAQCAtMTUyLDcg
KzE1Miw3IEBAIHZvaWQgSFRNTE1ldGVyRWxlbWVudDo6c2V0TG93KGRvdWJsZSBsb3csIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogZG91YmxlIEhUTUxNZXRlckVsZW1lbnQ6OmhpZ2goKSBjb25zdAogewog
ICAgIGRvdWJsZSBoaWdoID0gbWF4KCk7Ci0gICAgcGFyc2VUb0RvdWJsZUZvck51bWJlclR5cGUo
Z2V0QXR0cmlidXRlKGhpZ2hBdHRyKSwgJmhpZ2gpOworICAgIHBhcnNlVG9Eb3VibGVGb3JOdW1i
ZXJUeXBlKGZhc3RHZXRBdHRyaWJ1dGUoaGlnaEF0dHIpLCAmaGlnaCk7CiAgICAgcmV0dXJuIHN0
ZDo6bWluKHN0ZDo6bWF4KGhpZ2gsIGxvdygpKSwgbWF4KCkpOwogfQogCkBAIC0xNjgsNyArMTY4
LDcgQEAgdm9pZCBIVE1MTWV0ZXJFbGVtZW50OjpzZXRIaWdoKGRvdWJsZSBoaWdoLCBFeGNlcHRp
b25Db2RlJiBlYykKIGRvdWJsZSBIVE1MTWV0ZXJFbGVtZW50OjpvcHRpbXVtKCkgY29uc3QKIHsK
ICAgICBkb3VibGUgb3B0aW11bSA9IChtYXgoKSArIG1pbigpKSAvIDI7Ci0gICAgcGFyc2VUb0Rv
dWJsZUZvck51bWJlclR5cGUoZ2V0QXR0cmlidXRlKG9wdGltdW1BdHRyKSwgJm9wdGltdW0pOwor
ICAgIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGZhc3RHZXRBdHRyaWJ1dGUob3B0aW11bUF0
dHIpLCAmb3B0aW11bSk7CiAgICAgcmV0dXJuIHN0ZDo6bWluKHN0ZDo6bWF4KG9wdGltdW0sIG1p
bigpKSwgbWF4KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxO
YW1lQ29sbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxOYW1lQ29sbGVjdGlv
bi5jcHAKaW5kZXggNDA3NWU0Yy4uNGQzMTRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTmFtZUNvbGxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TE5hbWVDb2xsZWN0aW9uLmNwcApAQCAtNjEsNyArNjEsNyBAQCBFbGVtZW50KiBIVE1MTmFtZUNv
bGxlY3Rpb246Oml0ZW1BZnRlcihFbGVtZW50KiBwcmV2aW91cykgY29uc3QKICAgICAgICAgICAg
ICAgICAgICAgZS0+aGFzVGFnTmFtZShhcHBsZXRUYWcpIHx8CiAgICAgICAgICAgICAgICAgICAg
IGUtPmhhc1RhZ05hbWUoZW1iZWRUYWcpIHx8CiAgICAgICAgICAgICAgICAgICAgIGUtPmhhc1Rh
Z05hbWUob2JqZWN0VGFnKSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0
ZShuYW1lQXR0cikgPT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoZS0+ZmFzdEdl
dEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgaWYgKGUtPmdldElkQXR0cmlidXRlKCkgPT0gbV9u
YW1lKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKQEAgLTcxLDE3ICs3MSwxNyBAQCBF
bGVtZW50KiBIVE1MTmFtZUNvbGxlY3Rpb246Oml0ZW1BZnRlcihFbGVtZW50KiBwcmV2aW91cykg
Y29uc3QKICAgICAgICAgICAgICAgICAvLyBhcHBsZXRzIGFuZCBvYmplY3QgYnkgaWQsIGFuZCBp
bWFnZXMgYnkgaWQgYnV0IG9ubHkgaWYgdGhleSBoYXZlCiAgICAgICAgICAgICAgICAgLy8gYSBu
YW1lIGF0dHJpYnV0ZSAodGhpcyB2ZXJ5IHN0cmFuZ2UgcnVsZSBtYXRjaGVzIElFKQogICAgICAg
ICAgICAgICAgIGlmIChlLT5oYXNUYWdOYW1lKGZvcm1UYWcpIHx8IGUtPmhhc1RhZ05hbWUoZW1i
ZWRUYWcpIHx8IGUtPmhhc1RhZ05hbWUoaWZyYW1lVGFnKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoZS0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUpCisgICAgICAgICAgICAg
ICAgICAgIGlmIChlLT5mYXN0R2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGUtPmhhc1RhZ05hbWUoYXBwbGV0VGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoZS0+
Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9
PSBtX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIChlLT5mYXN0R2V0QXR0cmlidXRlKG5h
bWVBdHRyKSA9PSBtX25hbWUgfHwgZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGUtPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoKGUt
PmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9uYW1lIHx8IGUtPmdldElkQXR0cmlidXRlKCkg
PT0gbV9uYW1lKQorICAgICAgICAgICAgICAgICAgICBpZiAoKGUtPmZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpID09IG1fbmFtZSB8fCBlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVu
dCo+KGUpLT5pc0RvY05hbWVkSXRlbSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5oYXNUYWdOYW1lKGltZ1RhZykpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmdldEF0dHJpYnV0ZShuYW1lQXR0cikgPT0gbV9u
YW1lIHx8IChlLT5nZXRJZEF0dHJpYnV0ZSgpID09IG1fbmFtZSAmJiBlLT5oYXNBdHRyaWJ1dGUo
bmFtZUF0dHIpKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUtPmZhc3RHZXRBdHRyaWJ1dGUo
bmFtZUF0dHIpID09IG1fbmFtZSB8fCAoZS0+Z2V0SWRBdHRyaWJ1dGUoKSA9PSBtX25hbWUgJiYg
ZS0+ZmFzdEhhc0F0dHJpYnV0ZShuYW1lQXR0cikpKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAppbmRleCAyNDgxZDEwLi4yM2I2
ZWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcApAQCAtMzMy
LDcgKzMzMiw3IEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChQbHVnaW5D
cmVhdGlvbk9wdGlvbiBwbHVnaW5DcmVhdGlvbk9wdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgU3ViZnJhbWVMb2FkZXIqIGxvYWRlciA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigp
LT5zdWJmcmFtZUxvYWRlcigpOwotICAgIGJvb2wgc3VjY2VzcyA9IGJlZm9yZUxvYWRBbGxvd2Vk
TG9hZCAmJiBoYXNWYWxpZENsYXNzSWQoKSAmJiBsb2FkZXItPnJlcXVlc3RPYmplY3QodGhpcywg
dXJsLCBnZXRBdHRyaWJ1dGUobmFtZUF0dHIpLCBzZXJ2aWNlVHlwZSwgcGFyYW1OYW1lcywgcGFy
YW1WYWx1ZXMpOworICAgIGJvb2wgc3VjY2VzcyA9IGJlZm9yZUxvYWRBbGxvd2VkTG9hZCAmJiBo
YXNWYWxpZENsYXNzSWQoKSAmJiBsb2FkZXItPnJlcXVlc3RPYmplY3QodGhpcywgdXJsLCBmYXN0
R2V0QXR0cmlidXRlKG5hbWVBdHRyKSwgc2VydmljZVR5cGUsIHBhcmFtTmFtZXMsIHBhcmFtVmFs
dWVzKTsKIAogICAgIGlmICghc3VjY2VzcyAmJiBmYWxsYmFja0NvbnRlbnQpCiAgICAgICAgIHJl
bmRlckZhbGxiYWNrQ29udGVudCgpOwpAQCAtNDgzLDEzICs0ODMsMTMgQEAgdm9pZCBIVE1MT2Jq
ZWN0RWxlbWVudDo6dXBkYXRlRG9jTmFtZWRJdGVtKCkKIAogYm9vbCBIVE1MT2JqZWN0RWxlbWVu
dDo6Y29udGFpbnNKYXZhQXBwbGV0KCkgY29uc3QKIHsKLSAgICBpZiAoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoZ2V0QXR0cmlidXRlKHR5cGVBdHRyKSkpCisgICAgaWYg
KE1JTUVUeXBlUmVnaXN0cnk6OmlzSmF2YUFwcGxldE1JTUVUeXBlKGZhc3RHZXRBdHRyaWJ1dGUo
dHlwZUF0dHIpKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAogICAgIGZvciAoRWxl
bWVudCogY2hpbGQgPSBmaXJzdEVsZW1lbnRDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dEVsZW1lbnRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKHBh
cmFtVGFnKQotICAgICAgICAgICAgICAgICYmIGVxdWFsSWdub3JpbmdDYXNlKGNoaWxkLT5nZXRB
dHRyaWJ1dGUobmFtZUF0dHIpLCAidHlwZSIpCi0gICAgICAgICAgICAgICAgJiYgTUlNRVR5cGVS
ZWdpc3RyeTo6aXNKYXZhQXBwbGV0TUlNRVR5cGUoY2hpbGQtPmdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpLnN0cmluZygpKSkKKyAgICAgICAgICAgICAgICAmJiBlcXVhbElnbm9yaW5nQ2FzZShjaGls
ZC0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0ciksICJ0eXBlIikKKyAgICAgICAgICAgICAgICAm
JiBNSU1FVHlwZVJlZ2lzdHJ5Ojppc0phdmFBcHBsZXRNSU1FVHlwZShjaGlsZC0+ZmFzdEdldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIpLnN0cmluZygpKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUob2JqZWN0VGFnKQogICAgICAgICAgICAgICAg
ICYmIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oY2hpbGQpLT5jb250YWluc0phdmFB
cHBsZXQoKSkKQEAgLTUwNSwxMSArNTA1LDExIEBAIHZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmFk
ZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29uCiB7
CiAgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxz
KHVybHMpOwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxl
dGVVUkwoZ2V0QXR0cmlidXRlKGRhdGFBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoZGF0YUF0dHIpKSk7
CiAKICAgICAvLyBGSVhNRTogUGFzc2luZyBhIHN0cmluZyB0aGF0IHN0YXJ0cyB3aXRoICIjIiB0
byB0aGUgY29tcGxldGVVUkwgZnVuY3Rpb24gZG9lcwogICAgIC8vIG5vdCBzZWVtIGxpa2UgaXQg
d291bGQgd29yay4gVGhlIGltYWdlIGVsZW1lbnQgaGFzIHNpbWlsYXIgYnV0IG5vdCBpZGVudGlj
YWwgY29kZS4KLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVzZU1hcCA9IGdldEF0dHJpYnV0ZSh1
c2VtYXBBdHRyKTsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHVzZU1hcCA9IGZhc3RHZXRBdHRy
aWJ1dGUodXNlbWFwQXR0cik7CiAgICAgaWYgKHVzZU1hcC5zdGFydHNXaXRoKCIjIikpCiAgICAg
ICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVzZU1h
cCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVt
ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAKaW5k
ZXggZjhjMjRjMy4uNTAwN2FiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T3B0R3JvdXBFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91
cEVsZW1lbnQuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgUmVuZGVyU3R5bGUqIEhUTUxPcHRHcm91
cEVsZW1lbnQ6Om5vblJlbmRlcmVyUmVuZGVyU3R5bGUoKSBjb25zdAogCiBTdHJpbmcgSFRNTE9w
dEdyb3VwRWxlbWVudDo6Z3JvdXBMYWJlbFRleHQoKSBjb25zdAogewotICAgIFN0cmluZyBpdGVt
VGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoZ2V0QXR0
cmlidXRlKGxhYmVsQXR0cikpOworICAgIFN0cmluZyBpdGVtVGV4dCA9IGRvY3VtZW50KCktPmRp
c3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcoZmFzdEdldEF0dHJpYnV0ZShsYWJlbEF0dHIp
KTsKICAgICAKICAgICAvLyBJbiBXaW5JRSwgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFj
ZSBpcyBpZ25vcmVkIGluIG9wdGlvbnMgYW5kIG9wdGdyb3Vwcy4gV2UgbWF0Y2ggdGhpcyBiZWhh
dmlvci4KICAgICBpdGVtVGV4dCA9IGl0ZW1UZXh0LnN0cmlwV2hpdGVTcGFjZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MUHJvZ3Jlc3NFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAKaW5kZXggOTYwZjE1NzguLmNh
ZmM5MjEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxQcm9ncmVzc0VsZW1l
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFByb2dyZXNzRWxlbWVudC5jcHAK
QEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEhUTUxQcm9ncmVzc0VsZW1lbnQ6OnNldFZhbHVlKGRv
dWJsZSB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiBkb3VibGUgSFRNTFByb2dyZXNzRWxlbWVu
dDo6bWF4KCkgY29uc3QKIHsKICAgICBkb3VibGUgbWF4OwotICAgIGJvb2wgb2sgPSBwYXJzZVRv
RG91YmxlRm9yTnVtYmVyVHlwZShnZXRBdHRyaWJ1dGUobWF4QXR0ciksICZtYXgpOworICAgIGJv
b2wgb2sgPSBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZShmYXN0R2V0QXR0cmlidXRlKG1heEF0
dHIpLCAmbWF4KTsKICAgICBpZiAoIW9rIHx8IG1heCA8PSAwKQogICAgICAgICByZXR1cm4gMTsK
ICAgICByZXR1cm4gbWF4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2Ny
aXB0RWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNw
cAppbmRleCAwMjQ4ZWZjLi41NTQyN2VkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTY3JpcHRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTY3Jp
cHRFbGVtZW50LmNwcApAQCAtMTM0LDMyICsxMzQsMzIgQEAgdm9pZCBIVE1MU2NyaXB0RWxlbWVu
dDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBj
b24KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojpzb3VyY2VBdHRyaWJ1dGVWYWx1ZSgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzcmNBdHRyKS5zdHJpbmcoKTsKKyAgICBy
ZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShzcmNBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhU
TUxTY3JpcHRFbGVtZW50OjpjaGFyc2V0QXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJl
dHVybiBnZXRBdHRyaWJ1dGUoY2hhcnNldEF0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKGNoYXJzZXRBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3Jp
cHRFbGVtZW50Ojp0eXBlQXR0cmlidXRlVmFsdWUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRB
dHRyaWJ1dGUodHlwZUF0dHIpLnN0cmluZygpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRl
KHR5cGVBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpsYW5n
dWFnZUF0dHJpYnV0ZVZhbHVlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGxh
bmd1YWdlQXR0cikuc3RyaW5nKCk7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUobGFuZ3Vh
Z2VBdHRyKS5zdHJpbmcoKTsKIH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50Ojpmb3JBdHRy
aWJ1dGVWYWx1ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShmb3JBdHRyKS5z
dHJpbmcoKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShmb3JBdHRyKS5zdHJpbmcoKTsK
IH0KIAogU3RyaW5nIEhUTUxTY3JpcHRFbGVtZW50OjpldmVudEF0dHJpYnV0ZVZhbHVlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGV2ZW50QXR0cikuc3RyaW5nKCk7CisgICAg
cmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoZXZlbnRBdHRyKS5zdHJpbmcoKTsKIH0KIAogYm9vbCBI
VE1MU2NyaXB0RWxlbWVudDo6YXN5bmNBdHRyaWJ1dGVWYWx1ZSgpIGNvbnN0CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCmluZGV4IDA2MzFhMjAuLjgzMmMyOTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNvdXJjZUVsZW1lbnQuY3BwCkBAIC03Nyw3ICs3Nyw3
IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnNldFNyYyhjb25zdCBTdHJpbmcmIHVybCkKIAog
U3RyaW5nIEhUTUxTb3VyY2VFbGVtZW50OjptZWRpYSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdl
dEF0dHJpYnV0ZShtZWRpYUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKG1lZGlh
QXR0cik7CiB9CiAKIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnNldE1lZGlhKGNvbnN0IFN0cmlu
ZyYgbWVkaWEpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgSFRNTFNvdXJjZUVsZW1lbnQ6OnNldE1l
ZGlhKGNvbnN0IFN0cmluZyYgbWVkaWEpCiAKIFN0cmluZyBIVE1MU291cmNlRWxlbWVudDo6dHlw
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisgICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpOwogfQogCiB2b2lkIEhUTUxTb3VyY2VFbGVt
ZW50OjpzZXRUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
dHlsZUVsZW1lbnQuY3BwCmluZGV4IDAyMTNmNDAuLjUzMGU0NmUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcApAQCAtODgsMTIgKzg4LDEyIEBAIHZvaWQgSFRNTFN0
eWxlRWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGJvb2wgY2hhbmdlZEJ5UGFyc2VyLCBOb2RlKiBi
ZWZvcmVDaGFuZ2UsCiAKIGNvbnN0IEF0b21pY1N0cmluZyYgSFRNTFN0eWxlRWxlbWVudDo6bWVk
aWEoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobWVkaWFBdHRyKTsKKyAgICBy
ZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShtZWRpYUF0dHIpOwogfQogCiBjb25zdCBBdG9taWNTdHJp
bmcmIEhUTUxTdHlsZUVsZW1lbnQ6OnR5cGUoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRy
aWJ1dGUodHlwZUF0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKTsK
IH0KIAogdm9pZCBIVE1MU3R5bGVFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMo
TGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZUNlbGxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFRhYmxlQ2VsbEVsZW1lbnQuY3BwCmluZGV4IGMxZmI1ZWUuLmIxOTVmNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlQ2VsbEVsZW1lbnQuY3BwCkBAIC0xMjgsMTIgKzEyOCwx
MiBAQCBib29sIEhUTUxUYWJsZUNlbGxFbGVtZW50Ojppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGUg
KmF0dHIpIGNvbnN0CiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6YWJicigpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShhYmJyQXR0cik7CisgICAgcmV0dXJuIGZhc3RH
ZXRBdHRyaWJ1dGUoYWJickF0dHIpOwogfQogCiBTdHJpbmcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OmF4aXMoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoYXhpc0F0dHIpOworICAg
IHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGF4aXNBdHRyKTsKIH0KIAogdm9pZCBIVE1MVGFibGVD
ZWxsRWxlbWVudDo6c2V0Q29sU3BhbihpbnQgbikKQEAgLTE0Myw3ICsxNDMsNyBAQCB2b2lkIEhU
TUxUYWJsZUNlbGxFbGVtZW50OjpzZXRDb2xTcGFuKGludCBuKQogCiBTdHJpbmcgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQ6OmhlYWRlcnMoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUo
aGVhZGVyc0F0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKGhlYWRlcnNBdHRyKTsK
IH0KIAogdm9pZCBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2V0Um93U3BhbihpbnQgbikKQEAgLTE1
MywxNCArMTUzLDE0IEBAIHZvaWQgSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6OnNldFJvd1NwYW4oaW50
IG4pCiAKIFN0cmluZyBIVE1MVGFibGVDZWxsRWxlbWVudDo6c2NvcGUoKSBjb25zdAogewotICAg
IHJldHVybiBnZXRBdHRyaWJ1dGUoc2NvcGVBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJp
YnV0ZShzY29wZUF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZUNlbGxFbGVtZW50OjphZGRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7CiAg
ICAgSFRNTFRhYmxlUGFydEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyh1cmxz
KTsKIAotICAgIGFkZFN1YnJlc291cmNlVVJMKHVybHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJM
KGdldEF0dHJpYnV0ZShiYWNrZ3JvdW5kQXR0cikpKTsKKyAgICBhZGRTdWJyZXNvdXJjZVVSTCh1
cmxzLCBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChmYXN0R2V0QXR0cmlidXRlKGJhY2tncm91bmRB
dHRyKSkpOwogfQogCiBIVE1MVGFibGVDZWxsRWxlbWVudCogSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6
OmNlbGxBYm92ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxU
YWJsZUNvbEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVDb2xFbGVt
ZW50LmNwcAppbmRleCA5NmFmNzA4Li5lZTYyZWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUYWJsZUNvbEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRhYmxlQ29sRWxlbWVudC5jcHAKQEAgLTk3LDcgKzk3LDcgQEAgdm9pZCBIVE1MVGFibGVD
b2xFbGVtZW50OjpzZXRTcGFuKGludCBuKQogCiBTdHJpbmcgSFRNTFRhYmxlQ29sRWxlbWVudDo6
d2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUod2lkdGhBdHRyKTsKKyAg
ICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVFbGVtZW50LmNwcAppbmRleCA1OWIwNjNhLi40OTAwMDVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUYWJsZUVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxlRWxlbWVudC5jcHAKQEAgLTY1NSwxOSArNjU1LDE5
IEBAIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IEhUTUxUYWJsZUVsZW1lbnQ6OnRCb2RpZXMo
KQogCiBTdHJpbmcgSFRNTFRhYmxlRWxlbWVudDo6cnVsZXMoKSBjb25zdAogewotICAgIHJldHVy
biBnZXRBdHRyaWJ1dGUocnVsZXNBdHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShy
dWxlc0F0dHIpOwogfQogCiBTdHJpbmcgSFRNTFRhYmxlRWxlbWVudDo6c3VtbWFyeSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShzdW1tYXJ5QXR0cik7CisgICAgcmV0dXJuIGZh
c3RHZXRBdHRyaWJ1dGUoc3VtbWFyeUF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZUVsZW1lbnQ6
OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNldDxLVVJMPiYgdXJscykgY29u
c3QKIHsKICAgICBIVE1MRWxlbWVudDo6YWRkU3VicmVzb3VyY2VBdHRyaWJ1dGVVUkxzKHVybHMp
OwogCi0gICAgYWRkU3VicmVzb3VyY2VVUkwodXJscywgZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwo
Z2V0QXR0cmlidXRlKGJhY2tncm91bmRBdHRyKSkpOworICAgIGFkZFN1YnJlc291cmNlVVJMKHVy
bHMsIGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGZhc3RHZXRBdHRyaWJ1dGUoYmFja2dyb3VuZEF0
dHIpKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9u
RWxlbWVudC5jcHAKaW5kZXggNWVmMjVmMS4uOGY3MmQxZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVGFibGVTZWN0aW9uRWxlbWVudC5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBp
bnQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Om51bVJvd3MoKSBjb25zdAogCiBTdHJpbmcgSFRN
TFRhYmxlU2VjdGlvbkVsZW1lbnQ6OmFsaWduKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKGFsaWduQXR0cik7CisgICAgcmV0dXJuIGZhc3RHZXRBdHRyaWJ1dGUoYWxpZ25BdHRy
KTsKIH0KIAogdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0QWxpZ24oY29uc3QgU3Ry
aW5nICZ2YWx1ZSkKQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIEhUTUxUYWJsZVNlY3Rpb25FbGVt
ZW50OjpzZXRBbGlnbihjb25zdCBTdHJpbmcgJnZhbHVlKQogCiBTdHJpbmcgSFRNTFRhYmxlU2Vj
dGlvbkVsZW1lbnQ6OmNoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKGNoYXJB
dHRyKTsKKyAgICByZXR1cm4gZmFzdEdldEF0dHJpYnV0ZShjaGFyQXR0cik7CiB9CiAKIHZvaWQg
SFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoKGNvbnN0IFN0cmluZyAmdmFsdWUpCkBAIC0x
MzEsNyArMTMxLDcgQEAgdm9pZCBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6c2V0Q2goY29uc3Qg
U3RyaW5nICZ2YWx1ZSkKIAogU3RyaW5nIEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OjpjaE9mZigp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShjaGFyb2ZmQXR0cik7CisgICAgcmV0
dXJuIGZhc3RHZXRBdHRyaWJ1dGUoY2hhcm9mZkF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNl
Y3Rpb25FbGVtZW50OjpzZXRDaE9mZihjb25zdCBTdHJpbmcgJnZhbHVlKQpAQCAtMTQxLDcgKzE0
MSw3IEBAIHZvaWQgSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6OnNldENoT2ZmKGNvbnN0IFN0cmlu
ZyAmdmFsdWUpCiAKIFN0cmluZyBIVE1MVGFibGVTZWN0aW9uRWxlbWVudDo6dkFsaWduKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gZ2V0QXR0cmlidXRlKHZhbGlnbkF0dHIpOworICAgIHJldHVybiBm
YXN0R2V0QXR0cmlidXRlKHZhbGlnbkF0dHIpOwogfQogCiB2b2lkIEhUTUxUYWJsZVNlY3Rpb25F
bGVtZW50OjpzZXRWQWxpZ24oY29uc3QgU3RyaW5nICZ2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCmluZGV4IDU3YzE5MjEuLjJkNGFhNjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcApAQCAtMzg4LDcgKzM4
OCw3IEBAIHZvaWQgSFRNTFRleHRBcmVhRWxlbWVudDo6c2V0RGVmYXVsdFZhbHVlKGNvbnN0IFN0
cmluZyYgZGVmYXVsdFZhbHVlKQogaW50IEhUTUxUZXh0QXJlYUVsZW1lbnQ6Om1heExlbmd0aCgp
IGNvbnN0CiB7CiAgICAgYm9vbCBvazsKLSAgICBpbnQgdmFsdWUgPSBnZXRBdHRyaWJ1dGUobWF4
bGVuZ3RoQXR0cikuc3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICBpbnQgdmFsdWUgPSBmYXN0R2V0
QXR0cmlidXRlKG1heGxlbmd0aEF0dHIpLnN0cmluZygpLnRvSW50KCZvayk7CiAgICAgcmV0dXJu
IG9rICYmIHZhbHVlID49IDAgPyB2YWx1ZSA6IC0xOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCmluZGV4IDhjZDNmYzkuLmU0
ZTA4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwCkBAIC0xMDgsNyArMTA4LDcgQEAgU3RyaW5nIEhUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50OjpzdHJpcHBlZFBsYWNlaG9sZGVyKCkgY29uc3QKIHsKICAgICAvLyBBY2NvcmRp
bmcgdG8gdGhlIEhUTUw1IHNwZWNpZmljYXRpb24sIHdlIG5lZWQgdG8gcmVtb3ZlIENSIGFuZCBM
RiBmcm9tCiAgICAgLy8gdGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGF0dHJpYnV0ZVZhbHVlID0gZ2V0QXR0cmlidXRlKHBsYWNlaG9sZGVyQXR0cik7CisgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVWYWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUocGxh
Y2Vob2xkZXJBdHRyKTsKICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlLmNvbnRhaW5zKG5ld2xpbmVD
aGFyYWN0ZXIpICYmICFhdHRyaWJ1dGVWYWx1ZS5jb250YWlucyhjYXJyaWFnZVJldHVybikpCiAg
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTsKIApAQCAtMTI4LDcgKzEyOCw3IEBAIHN0YXRp
YyBib29sIGlzTm90TGluZUJyZWFrKFVDaGFyIGNoKSB7IHJldHVybiBjaCAhPSBuZXdsaW5lQ2hh
cmFjdGVyICYmIGNoICE9IGNhCiAKIGJvb2wgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omlz
UGxhY2Vob2xkZXJFbXB0eSgpIGNvbnN0CiB7Ci0gICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRy
aWJ1dGVWYWx1ZSA9IGdldEF0dHJpYnV0ZShwbGFjZWhvbGRlckF0dHIpOworICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlVmFsdWUgPSBmYXN0R2V0QXR0cmlidXRlKHBsYWNlaG9sZGVy
QXR0cik7CiAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlLnN0cmluZygpLmZpbmQoaXNOb3RMaW5l
QnJlYWspID09IG5vdEZvdW5kOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUcmFja0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVt
ZW50LmNwcAppbmRleCAwNDNmMDhiMy4uMmZhYzQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxUcmFja0VsZW1lbnQuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgSFRNTFRyYWNrRWxlbWVu
dDo6d2lsbFJlbW92ZSgpCiAKIEtVUkwgSFRNTFRyYWNrRWxlbWVudDo6c3JjKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZ2V0QXR0cmlidXRlKHNyY0F0dHIp
KTsKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZmFzdEdldEF0dHJpYnV0ZShz
cmNBdHRyKSk7CiB9CiAKIHZvaWQgSFRNTFRyYWNrRWxlbWVudDo6c2V0U3JjKGNvbnN0IFN0cmlu
ZyYgdXJsKQpAQCAtODYsNyArODYsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNldFNyYyhj
b25zdCBTdHJpbmcmIHVybCkKIAogU3RyaW5nIEhUTUxUcmFja0VsZW1lbnQ6OmtpbmQoKSBjb25z
dAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoa2luZEF0dHIpOworICAgIHJldHVybiBmYXN0
R2V0QXR0cmlidXRlKGtpbmRBdHRyKTsKIH0KIAogdm9pZCBIVE1MVHJhY2tFbGVtZW50OjpzZXRL
aW5kKGNvbnN0IFN0cmluZyYga2luZCkKQEAgLTk2LDcgKzk2LDcgQEAgdm9pZCBIVE1MVHJhY2tF
bGVtZW50OjpzZXRLaW5kKGNvbnN0IFN0cmluZyYga2luZCkKIAogU3RyaW5nIEhUTUxUcmFja0Vs
ZW1lbnQ6OnNyY2xhbmcoKSBjb25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoc3JjbGFu
Z0F0dHIpOworICAgIHJldHVybiBmYXN0R2V0QXR0cmlidXRlKHNyY2xhbmdBdHRyKTsKIH0KIAog
dm9pZCBIVE1MVHJhY2tFbGVtZW50OjpzZXRTcmNsYW5nKGNvbnN0IFN0cmluZyYgc3JjbGFuZykK
QEAgLTEwNiw3ICsxMDYsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNldFNyY2xhbmcoY29u
c3QgU3RyaW5nJiBzcmNsYW5nKQogCiBTdHJpbmcgSFRNTFRyYWNrRWxlbWVudDo6bGFiZWwoKSBj
b25zdAogewotICAgIHJldHVybiBnZXRBdHRyaWJ1dGUobGFiZWxBdHRyKTsKKyAgICByZXR1cm4g
ZmFzdEdldEF0dHJpYnV0ZShsYWJlbEF0dHIpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6
OnNldExhYmVsKGNvbnN0IFN0cmluZyYgbGFiZWwpCkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBI
VE1MVHJhY2tFbGVtZW50OjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQogCiBib29sIEhU
TUxUcmFja0VsZW1lbnQ6OmlzRGVmYXVsdCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGhhc0F0dHJp
YnV0ZShkZWZhdWx0QXR0cik7CisgICAgcmV0dXJuIGZhc3RIYXNBdHRyaWJ1dGUoZGVmYXVsdEF0
dHIpOwogfQogCiB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OnNldElzRGVmYXVsdChib29sIGlzRGVm
YXVsdCkKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lkIEhUTUxUcmFja0VsZW1lbnQ6OmxvYWQoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCkKIHsKICAgICBtX3RyYWNrID0gTG9hZGFibGVU
ZXh0VHJhY2s6OmNyZWF0ZShraW5kKCksIGxhYmVsKCksIHNyY2xhbmcoKSwgaXNEZWZhdWx0KCkp
OwogCi0gICAgaWYgKGhhc0F0dHJpYnV0ZShzcmNBdHRyKSkKKyAgICBpZiAoZmFzdEhhc0F0dHJp
YnV0ZShzcmNBdHRyKSkKICAgICAgICAgbV90cmFjay0+bG9hZChnZXROb25FbXB0eVVSTEF0dHJp
YnV0ZShzcmNBdHRyKSwgY29udGV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxWaWRl
b0VsZW1lbnQuY3BwCmluZGV4IGRkMGE1MjYuLjE2ZDU4NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTFZpZGVvRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVmlkZW9FbGVtZW50LmNwcApAQCAtMTU2LDE0ICsxNTYsMTQgQEAgdW5zaWduZWQgSFRN
TFZpZGVvRWxlbWVudDo6dmlkZW9IZWlnaHQoKSBjb25zdAogdW5zaWduZWQgSFRNTFZpZGVvRWxl
bWVudDo6d2lkdGgoKSBjb25zdAogewogICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgdyA9IGdl
dEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnN0cmluZygpLnRvVUludCgmb2spOworICAgIHVuc2lnbmVk
IHcgPSBmYXN0R2V0QXR0cmlidXRlKHdpZHRoQXR0cikuc3RyaW5nKCkudG9VSW50KCZvayk7CiAg
ICAgcmV0dXJuIG9rID8gdyA6IDA7CiB9CiAgICAgCiB1bnNpZ25lZCBIVE1MVmlkZW9FbGVtZW50
OjpoZWlnaHQoKSBjb25zdAogewogICAgIGJvb2wgb2s7Ci0gICAgdW5zaWduZWQgaCA9IGdldEF0
dHJpYnV0ZShoZWlnaHRBdHRyKS5zdHJpbmcoKS50b1VJbnQoJm9rKTsKKyAgICB1bnNpZ25lZCBo
ID0gZmFzdEdldEF0dHJpYnV0ZShoZWlnaHRBdHRyKS5zdHJpbmcoKS50b1VJbnQoJm9rKTsKICAg
ICByZXR1cm4gb2sgPyBoIDogMDsKIH0KICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvU3RlcFJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvU3RlcFJhbmdlLmNwcApp
bmRleCA2OGIwZWJkLi5lMTEyOTJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL1N0
ZXBSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9TdGVwUmFuZ2UuY3BwCkBAIC0z
NSw5ICszNSwxMCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCiBTdGVwUmFuZ2U6OlN0
ZXBSYW5nZShjb25zdCBIVE1MSW5wdXRFbGVtZW50KiBlbGVtZW50KQogewotICAgIGlmIChlbGVt
ZW50LT5oYXNBdHRyaWJ1dGUocHJlY2lzaW9uQXR0cikpIHsKKyAgICBjb25zdCBBdG9taWNTdHJp
bmcmIHByZWNpc2lvblZhbHVlID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShwcmVjaXNpb25B
dHRyKTsKKyAgICBpZiAoIXByZWNpc2lvblZhbHVlLmlzTnVsbCgpKSB7CiAgICAgICAgIHN0ZXAg
PSAxLjA7Ci0gICAgICAgIGhhc1N0ZXAgPSAhZXF1YWxJZ25vcmluZ0Nhc2UoZWxlbWVudC0+Z2V0
QXR0cmlidXRlKHByZWNpc2lvbkF0dHIpLCAiZmxvYXQiKTsKKyAgICAgICAgaGFzU3RlcCA9ICFl
cXVhbElnbm9yaW5nQ2FzZShwcmVjaXNpb25WYWx1ZS5zdHJpbmcoKSwgImZsb2F0Iik7CiAgICAg
fSBlbHNlCiAgICAgICAgIGhhc1N0ZXAgPSBlbGVtZW50LT5nZXRBbGxvd2VkVmFsdWVTdGVwKCZz
dGVwKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L1RleHRDb250
cm9sSW5uZXJFbGVtZW50cy5jcHAKaW5kZXggZGE5MDg0ZS4uZGQ5YWQxYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMu
Y3BwCkBAIC00MzYsNyArNDM2LDcgQEAgdm9pZCBJbnB1dEZpZWxkU3BlZWNoQnV0dG9uRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgICAgIHN3aXRjaCAobV9z
dGF0ZSkgewogICAgICAgICBjYXNlIElkbGU6IHsKICAgICAgICAgICAgICAgQXRvbWljU3RyaW5n
IGxhbmd1YWdlID0gaW5wdXQtPmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSgpOwotICAgICAgICAg
ICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5nZXRBdHRyaWJ1dGUod2Via2l0Z3JhbW1hckF0
dHIpOworICAgICAgICAgICAgICBTdHJpbmcgZ3JhbW1hciA9IGlucHV0LT5mYXN0R2V0QXR0cmli
dXRlKHdlYmtpdGdyYW1tYXJBdHRyKTsKICAgICAgICAgICAgICAgSW50UmVjdCByZWN0ID0gcmVu
ZGVyZXIoKS0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKTsKICAgICAgICAgICAgICAgaWYgKHNw
ZWVjaElucHV0KCktPnN0YXJ0UmVjb2duaXRpb24obV9saXN0ZW5lcklkLCByZWN0LCBsYW5ndWFn
ZSwgZ3JhbW1hciwgZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKSkpCiAgICAgICAgICAgICAg
ICAgICBzZXRTdGF0ZShSZWNvcmRpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAppbmRleCAwYjU1ZjI0Li5lOGYyODUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcApAQCAtNjE5LDkg
KzYxOSw5IEBAIFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBJbnNwZWN0b3JQYWdlQWdlbnQ6
OmJ1aWxkT2JqZWN0Rm9yRnJhbWUoRnJhbWUqIGZyYW1lCiAgICAgaWYgKGZyYW1lLT50cmVlKCkt
PnBhcmVudCgpKQogICAgICAgICBmcmFtZU9iamVjdC0+c2V0U3RyaW5nKCJwYXJlbnRJZCIsIGZy
YW1lSWQoZnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpKTsKICAgICBpZiAoZnJhbWUtPm93bmVyRWxl
bWVudCgpKSB7Ci0gICAgICAgIFN0cmluZyBuYW1lID0gZnJhbWUtPm93bmVyRWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAgIFN0cmluZyBuYW1lID0g
ZnJhbWUtPm93bmVyRWxlbWVudCgpLT5mYXN0R2V0QXR0cmlidXRlKEhUTUxOYW1lczo6bmFtZUF0
dHIpOwogICAgICAgICBpZiAobmFtZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBuYW1lID0gZnJh
bWUtPm93bmVyRWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjppZEF0dHIpOworICAg
ICAgICAgICAgbmFtZSA9IGZyYW1lLT5vd25lckVsZW1lbnQoKS0+ZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OmlkQXR0cik7CiAgICAgICAgIGZyYW1lT2JqZWN0LT5zZXRTdHJpbmcoIm5hbWUi
LCBuYW1lKTsKICAgICB9CiAgICAgZnJhbWVPYmplY3QtPnNldFN0cmluZygidXJsIiwgZnJhbWUt
PmRvY3VtZW50KCktPnVybCgpLnN0cmluZygpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRm9ybVN1
Ym1pc3Npb24uY3BwCmluZGV4IDAxMzg0OTQuLjAzODM3NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbG9h
ZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcApAQCAtMTQ2LDEzICsxNDYsMTMgQEAgUGFzc1JlZlB0cjxG
b3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQqIGZv
cm0sIGNvbnN0IEEKICAgICBjb3BpZWRBdHRyaWJ1dGVzLmNvcHlGcm9tKGF0dHJpYnV0ZXMpOwog
ICAgIGlmIChzdWJtaXRCdXR0b24pIHsKICAgICAgICAgU3RyaW5nIGF0dHJpYnV0ZVZhbHVlOwot
ICAgICAgICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmlidXRl
KGZvcm1hY3Rpb25BdHRyKSkuaXNOdWxsKCkpCisgICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVl
ID0gc3VibWl0QnV0dG9uLT5mYXN0R2V0QXR0cmlidXRlKGZvcm1hY3Rpb25BdHRyKSkuaXNOdWxs
KCkpCiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnBhcnNlQWN0aW9uKGF0dHJpYnV0ZVZh
bHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmdldEF0
dHJpYnV0ZShmb3JtZW5jdHlwZUF0dHIpKS5pc051bGwoKSkKKyAgICAgICAgaWYgKCEoYXR0cmli
dXRlVmFsdWUgPSBzdWJtaXRCdXR0b24tPmZhc3RHZXRBdHRyaWJ1dGUoZm9ybWVuY3R5cGVBdHRy
KSkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb3BpZWRBdHRyaWJ1dGVzLnBhcnNlRW5jb2RpbmdU
eXBlKGF0dHJpYnV0ZVZhbHVlKTsKLSAgICAgICAgaWYgKCEoYXR0cmlidXRlVmFsdWUgPSBzdWJt
aXRCdXR0b24tPmdldEF0dHJpYnV0ZShmb3JtbWV0aG9kQXR0cikpLmlzTnVsbCgpKQorICAgICAg
ICBpZiAoIShhdHRyaWJ1dGVWYWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+ZmFzdEdldEF0dHJpYnV0ZShm
b3JtbWV0aG9kQXR0cikpLmlzTnVsbCgpKQogICAgICAgICAgICAgY29waWVkQXR0cmlidXRlcy5w
YXJzZU1ldGhvZFR5cGUoYXR0cmlidXRlVmFsdWUpOwotICAgICAgICBpZiAoIShhdHRyaWJ1dGVW
YWx1ZSA9IHN1Ym1pdEJ1dHRvbi0+Z2V0QXR0cmlidXRlKGZvcm10YXJnZXRBdHRyKSkuaXNOdWxs
KCkpCisgICAgICAgIGlmICghKGF0dHJpYnV0ZVZhbHVlID0gc3VibWl0QnV0dG9uLT5mYXN0R2V0
QXR0cmlidXRlKGZvcm10YXJnZXRBdHRyKSkuaXNOdWxsKCkpCiAgICAgICAgICAgICBjb3BpZWRB
dHRyaWJ1dGVzLnNldFRhcmdldChhdHRyaWJ1dGVWYWx1ZSk7CiAgICAgfQogICAgIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xvYWRlci9JbWFnZUxvYWRlci5jcHAKaW5kZXggODM5MjM2NS4uMjA2NTJlNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0ltYWdlTG9hZGVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvSW1hZ2VMb2FkZXIuY3BwCkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBJ
bWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIGlmICghZG9jdW1lbnQtPnJlbmRl
cmVyKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIEF0b21pY1N0cmluZyBhdHRyID0gbV9lbGVt
ZW50LT5nZXRBdHRyaWJ1dGUobV9lbGVtZW50LT5pbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7
CisgICAgQXRvbWljU3RyaW5nIGF0dHIgPSBtX2VsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobV9l
bGVtZW50LT5pbWFnZVNvdXJjZUF0dHJpYnV0ZU5hbWUoKSk7CiAKICAgICBpZiAoYXR0ciA9PSBt
X2ZhaWxlZExvYWRVUkwpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXgg
YmRkYWU2MS4uMjgxZGYwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTQ5OSwxMSArNDk5LDEx
IEBAIFN0cmluZyBGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxlbWVudChjb25zdCBWZWN0b3I8
U3RyaW5nPiYgbGFiZWxzLCBFbGVtZW50KiBlCiAgICAgLy8gU2VlIDc1MzgzMzAgZm9yIG9uZSBw
b3B1bGFyIHNpdGUgdGhhdCBiZW5lZml0cyBmcm9tIHRoZSBpZCBlbGVtZW50IGNoZWNrLgogICAg
IC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgbWlycm9yZWQgaW4gRnJhbWVNYWMubW0uIEl0IHdvdWxk
IGJlIG5pY2UgdG8gbWFrZSB0aGUgTWFjIGNvZGUgY2FsbCB0aGUgcGxhdGZvcm0tYWdub3N0aWMK
ICAgICAvLyBjb2RlLCB3aGljaCB3b3VsZCByZXF1aXJlIGNvbnZlcnRpbmcgdGhlIE5TQXJyYXkg
b2YgTlNTdHJpbmdzIHRvIGEgVmVjdG9yIG9mIFN0cmluZ3Mgc29tZXdoZXJlIGFsb25nIHRoZSB3
YXkuCi0gICAgU3RyaW5nIHJlc3VsdEZyb21OYW1lQXR0cmlidXRlID0gbWF0Y2hMYWJlbHNBZ2Fp
bnN0U3RyaW5nKGxhYmVscywgZWxlbWVudC0+Z2V0QXR0cmlidXRlKG5hbWVBdHRyKSk7CisgICAg
U3RyaW5nIHJlc3VsdEZyb21OYW1lQXR0cmlidXRlID0gbWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5n
KGxhYmVscywgZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShuYW1lQXR0cikpOwogICAgIGlmICgh
cmVzdWx0RnJvbU5hbWVBdHRyaWJ1dGUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0
RnJvbU5hbWVBdHRyaWJ1dGU7CiAgICAgCi0gICAgcmV0dXJuIG1hdGNoTGFiZWxzQWdhaW5zdFN0
cmluZyhsYWJlbHMsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShpZEF0dHIpKTsKKyAgICByZXR1cm4g
bWF0Y2hMYWJlbHNBZ2FpbnN0U3RyaW5nKGxhYmVscywgZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZShpZEF0dHIpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UHJpbnRpbmcoYm9vbCBwcmludGluZywg
Y29uc3QgRmxvYXRTaXplJiBwYWdlU2l6ZSwgZmxvYXQgbWF4aW11bVNocmlua1JhdGlvLCBBZGp1
c3RWaWV3U2l6ZU9yTm90IHNob3VsZEFkanVzdFZpZXdTaXplKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1Bh
Z2VTZXJpYWxpemVyLmNwcAppbmRleCBjOWE3ODRkLi5jYjM4YWU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2VTZXJpYWxpemVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2VTZXJpYWxpemVyLmNwcApAQCAtMjI4LDE0ICsyMjgsMTQgQEAgdm9pZCBQYWdlU2Vy
aWFsaXplcjo6c2VyaWFsaXplRnJhbWUoRnJhbWUqIGZyYW1lKQogCiAgICAgICAgIGlmIChlbGVt
ZW50LT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSkgewogICAgICAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+
KGVsZW1lbnQpOwotICAgICAgICAgICAgS1VSTCB1cmwgPSBkb2N1bWVudC0+Y29tcGxldGVVUkwo
aW1hZ2VFbGVtZW50LT5nZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7CisgICAgICAg
ICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChpbWFnZUVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzcmNBdHRyKSk7CiAgICAgICAgICAgICBDYWNoZWRJbWFn
ZSogY2FjaGVkSW1hZ2UgPSBpbWFnZUVsZW1lbnQtPmNhY2hlZEltYWdlKCk7CiAgICAgICAgICAg
ICBhZGRJbWFnZVRvUmVzb3VyY2VzKGNhY2hlZEltYWdlLCB1cmwpOwogICAgICAgICB9IGVsc2Ug
aWYgKGVsZW1lbnQtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpsaW5rVGFnKSkgewogICAgICAgICAg
ICAgSFRNTExpbmtFbGVtZW50KiBsaW5rRWxlbWVudCA9IHN0YXRpY19jYXN0PEhUTUxMaW5rRWxl
bWVudCo+KGVsZW1lbnQpOwogICAgICAgICAgICAgU3R5bGVTaGVldCogc2hlZXQgPSBsaW5rRWxl
bWVudC0+c2hlZXQoKTsKICAgICAgICAgICAgIGlmIChzaGVldCAmJiBzaGVldC0+aXNDU1NTdHls
ZVNoZWV0KCkpIHsKLSAgICAgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0
ZVVSTChsaW5rRWxlbWVudC0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6aHJlZkF0dHIpKTsKKyAg
ICAgICAgICAgICAgICBLVVJMIHVybCA9IGRvY3VtZW50LT5jb21wbGV0ZVVSTChsaW5rRWxlbWVu
dC0+ZmFzdEdldEF0dHJpYnV0ZShIVE1MTmFtZXM6OmhyZWZBdHRyKSk7CiAgICAgICAgICAgICAg
ICAgc2VyaWFsaXplQ1NTU3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc2hl
ZXQpLCB1cmwpOwogICAgICAgICAgICAgICAgIEFTU0VSVChtX3Jlc291cmNlVVJMcy5jb250YWlu
cyh1cmwpKTsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
bWFjL0ZyYW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KaW5k
ZXggMmI1N2QyZC4uNjViNmQ5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMv
RnJhbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvRnJhbWVNYWMubW0KQEAg
LTI0NiwxMSArMjQ2LDExIEBAIE5TU3RyaW5nKiBGcmFtZTo6bWF0Y2hMYWJlbHNBZ2FpbnN0RWxl
bWVudChOU0FycmF5KiBsYWJlbHMsIEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgLy8gU2VlIDc1Mzgz
MzAgZm9yIG9uZSBwb3B1bGFyIHNpdGUgdGhhdCBiZW5lZml0cyBmcm9tIHRoZSBpZCBlbGVtZW50
IGNoZWNrLgogICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgbWlycm9yZWQgaW4gRnJhbWUuY3Bw
LiBJdCB3b3VsZCBiZSBuaWNlIHRvIG1ha2UgdGhlIE1hYyBjb2RlIGNhbGwgdGhlIHBsYXRmb3Jt
LWFnbm9zdGljCiAgICAgLy8gY29kZSwgd2hpY2ggd291bGQgcmVxdWlyZSBjb252ZXJ0aW5nIHRo
ZSBOU0FycmF5IG9mIE5TU3RyaW5ncyB0byBhIFZlY3RvciBvZiBTdHJpbmdzIHNvbWV3aGVyZSBh
bG9uZyB0aGUgd2F5LgotICAgIFN0cmluZyByZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZSA9IG1hdGNo
TGFiZWxzQWdhaW5zdFN0cmluZyhsYWJlbHMsIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShuYW1lQXR0
cikpOworICAgIFN0cmluZyByZXN1bHRGcm9tTmFtZUF0dHJpYnV0ZSA9IG1hdGNoTGFiZWxzQWdh
aW5zdFN0cmluZyhsYWJlbHMsIGVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUobmFtZUF0dHIpKTsK
ICAgICBpZiAoIXJlc3VsdEZyb21OYW1lQXR0cmlidXRlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0
dXJuIHJlc3VsdEZyb21OYW1lQXR0cmlidXRlOwogICAgIAotICAgIHJldHVybiBtYXRjaExhYmVs
c0FnYWluc3RTdHJpbmcobGFiZWxzLCBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoaWRBdHRyKSk7Cisg
ICAgcmV0dXJuIG1hdGNoTGFiZWxzQWdhaW5zdFN0cmluZyhsYWJlbHMsIGVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoaWRBdHRyKSk7CiB9CiAKIE5TSW1hZ2UqIEZyYW1lOjppbWFnZUZyb21SZWN0
KE5TUmVjdCByZWN0KSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vQ2xpcGJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGIwYjAwOGMuLjg5YzY0NDggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0NsaXBib2FyZENocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DbGlwYm9hcmRD
aHJvbWl1bS5jcHAKQEAgLTIzOCw3ICsyMzgsNyBAQCBzdGF0aWMgdm9pZCB3cml0ZUltYWdlVG9E
YXRhT2JqZWN0KENocm9taXVtRGF0YU9iamVjdCogZGF0YU9iamVjdCwgRWxlbWVudCogZWxlbQog
ICAgIGlmIChmaWxlbmFtZS5pc0VtcHR5KCkpCiAgICAgICAgIGZpbGVuYW1lID0gdXJsLmxhc3RQ
YXRoQ29tcG9uZW50KCk7CiAgICAgaWYgKGZpbGVuYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgZmls
ZW5hbWUgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgICAgIGZpbGVuYW1l
ID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gU3RyaXAgYW55IGV4aXN0aW5nIGV4dGVuc2lvbi4gQXNzdW1lIHRoYXQgYWx0IHRleHQg
aXMgdXN1YWxseSBub3QgYSBmaWxlbmFtZS4KICAgICAgICAgaW50IGV4dGVuc2lvbkluZGV4ID0g
ZmlsZW5hbWUucmV2ZXJzZUZpbmQoJy4nKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCmluZGV4IGRiZmFhM2IuLmYz
MWUwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3Rl
Ym9hcmRDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
UGFzdGVib2FyZENocm9taXVtLmNwcApAQCAtMTQxLDE0ICsxNDEsMTQgQEAgdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRp
dGxlKQogICAgIC8vIGxpbmsuICBUaGlzIGlzbid0IHVzZWZ1bCB0byB1cywgc28gZ2V0IHRoZSBh
Y3R1YWwgaW1hZ2UgVVJMLgogICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7CiAgICAgaWYgKG5v
ZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRN
TE5hbWVzOjppbnB1dFRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1l
bnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgICAgIHVy
bFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0ZShI
VE1MTmFtZXM6OnNyY0F0dHIpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAobm9kZS0+
aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQogICAgICAgICB1cmxTdHJpbmcgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0
cik7CiAjZW5kaWYKICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZW1i
ZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKSB7CiAgICAg
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0gICAg
ICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5pbWFnZVNvdXJj
ZUF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmZhc3RHZXRB
dHRyaWJ1dGUoZWxlbWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOwogICAgIH0KICAg
ICBLVVJMIHVybCA9IHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2RlLT5kb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJsU3Ry
aW5nKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJv
YXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNw
cAppbmRleCBjYTU4NWQ2Li45NWZlZDRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC04OSwxNCArODksMTQgQEAgc3RhdGljIEtVUkwgZ2V0
VVJMRm9ySW1hZ2VOb2RlKE5vZGUqIG5vZGUpCiAgICAgLy8gRklYTUU6IExhdGVyIHRoaXMgY29k
ZSBzaG91bGQgYmUgc2hhcmVkIHdpdGggQ2hyb21pdW0gc29tZWhvdy4gQ2hhbmNlcyBhcmUgYWxs
IHBsYXRmb3JtcyB3YW50IGl0LgogICAgIEF0b21pY1N0cmluZyB1cmxTdHJpbmc7CiAgICAgaWYg
KG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUo
SFRNTE5hbWVzOjppbnB1dFRhZykpCi0gICAgICAgIHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVs
ZW1lbnQqPihub2RlKS0+Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6c3JjQXR0cik7CisgICAgICAg
IHVybFN0cmluZyA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKS0+ZmFzdEdldEF0dHJpYnV0
ZShIVE1MTmFtZXM6OnNyY0F0dHIpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZWxzZSBpZiAobm9k
ZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6aW1hZ2VUYWcpKQogICAgICAgICB1cmxTdHJpbmcgPSBz
dGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSktPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVm
QXR0cik7CiAjZW5kaWYKICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
ZW1iZWRUYWcpIHx8IG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKSB7CiAg
ICAgICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7Ci0g
ICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShlbGVtZW50LT5pbWFnZVNv
dXJjZUF0dHJpYnV0ZU5hbWUoKSk7CisgICAgICAgIHVybFN0cmluZyA9IGVsZW1lbnQtPmZhc3RH
ZXRBdHRyaWJ1dGUoZWxlbWVudC0+aW1hZ2VTb3VyY2VBdHRyaWJ1dGVOYW1lKCkpOwogICAgIH0K
ICAgICByZXR1cm4gdXJsU3RyaW5nLmlzRW1wdHkoKSA/IEtVUkwoKSA6IG5vZGUtPmRvY3VtZW50
KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJp
bmcpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9IVE1MQ29u
dmVydGVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0K
aW5kZXggMjgzYTc0MC4uNjc3NGM0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL0hUTUxDb252ZXJ0ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFj
L0hUTUxDb252ZXJ0ZXIubW0KQEAgLTE3NTAsNyArMTc1MCw3IEBAIHN0YXRpYyBOU0ZpbGVXcmFw
cGVyICpmaWxlV3JhcHBlckZvckVsZW1lbnQoRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBOU0Zp
bGVXcmFwcGVyICp3cmFwcGVyID0gbmlsOwogICAgIAotICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
YXR0ciA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKKyAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGF0dHIgPSBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpOwogICAgIGlm
ICghYXR0ci5pc0VtcHR5KCkpIHsKICAgICAgICAgTlNVUkwgKlVSTCA9IGVsZW1lbnQtPmRvY3Vt
ZW50KCktPmNvbXBsZXRlVVJMKGF0dHIpOwogICAgICAgICBpZiAoRG9jdW1lbnRMb2FkZXIqIGxv
YWRlciA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmxvYWRlcigpKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vd2luL0NsaXBib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAppbmRleCBiZjQwOGQ3Li5kOWVjNTY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vQ2xpcGJvYXJkV2luLmNwcApAQCAtNjQyLDcg
KzY0Miw3IEBAIHN0YXRpYyB2b2lkIHdyaXRlSW1hZ2VUb0RhdGFPYmplY3QoSURhdGFPYmplY3Qq
IGRhdGFPYmplY3QsIEVsZW1lbnQqIGVsZW1lbnQsIGNvCiAgICAgaWYgKCFpbWFnZUJ1ZmZlciB8
fCAhaW1hZ2VCdWZmZXItPnNpemUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgSEdMT0JBTCBp
bWFnZUZpbGVEZXNjcmlwdG9yID0gY3JlYXRlR2xvYmFsSW1hZ2VGaWxlRGVzY3JpcHRvcih1cmwu
c3RyaW5nKCksIGVsZW1lbnQtPmdldEF0dHJpYnV0ZShhbHRBdHRyKSwgY2FjaGVkSW1hZ2UpOwor
ICAgIEhHTE9CQUwgaW1hZ2VGaWxlRGVzY3JpcHRvciA9IGNyZWF0ZUdsb2JhbEltYWdlRmlsZURl
c2NyaXB0b3IodXJsLnN0cmluZygpLCBlbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKGFsdEF0dHIp
LCBjYWNoZWRJbWFnZSk7CiAgICAgaWYgKCFpbWFnZUZpbGVEZXNjcmlwdG9yKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTY3MSw3ICs2NzEsNyBAQCB2b2lkIENsaXBib2FyZFdpbjo6ZGVjbGFyZUFu
ZFdyaXRlRHJhZ0ltYWdlKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgYwogCiAg
ICAgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChtX3dyaXRhYmxlRGF0YU9iamVjdC5nZXQoKSwgZWxl
bWVudCwgdXJsKTsKIAotICAgIEF0b21pY1N0cmluZyBpbWFnZVVSTCA9IGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShzcmNBdHRyKTsKKyAgICBBdG9taWNTdHJpbmcgaW1hZ2VVUkwgPSBlbGVtZW50LT5m
YXN0R2V0QXR0cmlidXRlKHNyY0F0dHIpOwogICAgIGlmIChpbWFnZVVSTC5pc0VtcHR5KCkpIAog
ICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9I
aXRUZXN0UmVzdWx0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaXRUZXN0UmVzdWx0
LmNwcAppbmRleCBiMmNlMjI2Li4xMzQyMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSGl0VGVzdFJlc3VsdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0hpdFRlc3RSZXN1bHQuY3BwCkBAIC0yNzcsNyArMjc3LDcgQEAgU3RyaW5nIEhpdFRlc3RSZXN1
bHQ6OmFsdERpc3BsYXlTdHJpbmcoKSBjb25zdAogICAgIAogICAgIGlmIChtX2lubmVyTm9uU2hh
cmVkTm9kZS0+aGFzVGFnTmFtZShpbWdUYWcpKSB7CiAgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlID0gc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KG1faW5uZXJOb25TaGFyZWRO
b2RlLmdldCgpKTsKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlTdHJpbmcoaW1hZ2UtPmdldEF0dHJp
YnV0ZShhbHRBdHRyKSwgbV9pbm5lck5vblNoYXJlZE5vZGUuZ2V0KCkpOworICAgICAgICByZXR1
cm4gZGlzcGxheVN0cmluZyhpbWFnZS0+ZmFzdEdldEF0dHJpYnV0ZShhbHRBdHRyKSwgbV9pbm5l
ck5vblNoYXJlZE5vZGUuZ2V0KCkpOwogICAgIH0KICAgICAKICAgICBpZiAobV9pbm5lck5vblNo
YXJlZE5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKSB7CkBAIC0zMjgsNyArMzI4LDcgQEAgS1VS
TCBIaXRUZXN0UmVzdWx0OjphYnNvbHV0ZUltYWdlVVJMKCkgY29uc3QKICNlbmRpZgogICAgICAg
ICkgewogICAgICAgICBFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG1f
aW5uZXJOb25TaGFyZWROb2RlLmdldCgpKTsKLSAgICAgICAgdXJsU3RyaW5nID0gZWxlbWVudC0+
Z2V0QXR0cmlidXRlKGVsZW1lbnQtPmltYWdlU291cmNlQXR0cmlidXRlTmFtZSgpKTsKKyAgICAg
ICAgdXJsU3RyaW5nID0gZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShlbGVtZW50LT5pbWFnZVNv
dXJjZUF0dHJpYnV0ZU5hbWUoKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIHJldHVybiBLVVJMKCk7
CiAKQEAgLTQ3Niw3ICs0NzYsNyBAQCBLVVJMIEhpdFRlc3RSZXN1bHQ6OmFic29sdXRlTGlua1VS
TCgpIGNvbnN0CiAKICAgICBBdG9taWNTdHJpbmcgdXJsU3RyaW5nOwogICAgIGlmIChtX2lubmVy
VVJMRWxlbWVudC0+aGFzVGFnTmFtZShhVGFnKSB8fCBtX2lubmVyVVJMRWxlbWVudC0+aGFzVGFn
TmFtZShhcmVhVGFnKSB8fCBtX2lubmVyVVJMRWxlbWVudC0+aGFzVGFnTmFtZShsaW5rVGFnKSkK
LSAgICAgICAgdXJsU3RyaW5nID0gbV9pbm5lclVSTEVsZW1lbnQtPmdldEF0dHJpYnV0ZShocmVm
QXR0cik7CisgICAgICAgIHVybFN0cmluZyA9IG1faW5uZXJVUkxFbGVtZW50LT5mYXN0R2V0QXR0
cmlidXRlKGhyZWZBdHRyKTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGVsc2UgaWYgKG1faW5uZXJV
UkxFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphVGFnKSkKICAgICAgICAgdXJsU3RyaW5n
ID0gbV9pbm5lclVSTEVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTGlua05hbWVzOjpocmVmQXR0cik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRGV0YWlscy5jcHAKaW5kZXggMzk4ODJi
MS4uZmI0ZTcyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckRl
dGFpbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXRhaWxzLmNw
cApAQCAtNDYsNyArNDYsNyBAQCB2b2lkIFJlbmRlckRldGFpbHM6OnN0eWxlRGlkQ2hhbmdlKFN0
eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkUwogCiBib29sIFJlbmRl
ckRldGFpbHM6OmlzT3BlbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCkt
PmlzRWxlbWVudE5vZGUoKSA/ICFzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0
cmlidXRlKG9wZW5BdHRyKS5pc051bGwoKSA6IGZhbHNlOworICAgIHJldHVybiBub2RlKCkgJiYg
bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkgPyAhc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkt
PmZhc3RHZXRBdHRyaWJ1dGUob3BlbkF0dHIpLmlzTnVsbCgpIDogZmFsc2U7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJNZW51TGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVudUxp
c3QuY3BwCmluZGV4IDY0YTlhOTguLjZiOGZmYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcApAQCAtMzk4LDcgKzM5OCw3IEBAIFN0cmluZyBSZW5kZXJN
ZW51TGlzdDo6aXRlbUFjY2Vzc2liaWxpdHlUZXh0KHVuc2lnbmVkIGxpc3RJbmRleCkgY29uc3QK
ICAgICBpZiAobGlzdEluZGV4ID49IGxpc3RJdGVtcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKIAotICAgIHJldHVybiBsaXN0SXRlbXNbbGlzdEluZGV4XS0+Z2V0QXR0cmlidXRl
KGFyaWFfbGFiZWxBdHRyKTsKKyAgICByZXR1cm4gbGlzdEl0ZW1zW2xpc3RJbmRleF0tPmZhc3RH
ZXRBdHRyaWJ1dGUoYXJpYV9sYWJlbEF0dHIpOwogfQogICAgIAogU3RyaW5nIFJlbmRlck1lbnVM
aXN0OjppdGVtVG9vbFRpcCh1bnNpZ25lZCBsaXN0SW5kZXgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IGFkMzViZTUuLmNhYTcwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xMDI4LDcgKzEwMjgs
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWRkUERGVVJMUmVjdChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgTm9kZSogbiA9IG5vZGUoKTsKICAgICBp
ZiAoIW4gfHwgIW4tPmlzTGluaygpIHx8ICFuLT5pc0VsZW1lbnROb2RlKCkpCiAgICAgICAgIHJl
dHVybjsKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGhyZWYgPSBzdGF0aWNfY2FzdDxFbGVtZW50
Kj4obiktPmdldEF0dHJpYnV0ZShocmVmQXR0cik7CisgICAgY29uc3QgQXRvbWljU3RyaW5nJiBo
cmVmID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pLT5mYXN0R2V0QXR0cmlidXRlKGhyZWZBdHRy
KTsKICAgICBpZiAoaHJlZi5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvbnRleHQt
PnNldFVSTEZvclJlY3Qobi0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoaHJlZiksIHJlY3QpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAppbmRleCA3Njk1
Zjk2Li42MjZmOWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGFibGVDZWxsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcApAQCAtMTMzLDcgKzEzMyw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRl
UHJlZmVycmVkTG9naWNhbFdpZHRocygpCiAgICAgaWYgKG5vZGUoKSAmJiBzdHlsZSgpLT5hdXRv
V3JhcCgpKSB7CiAgICAgICAgIC8vIFNlZSBpZiBub3dyYXAgd2FzIHNldC4KICAgICAgICAgTGVu
Z3RoIHcgPSBzdHlsZU9yQ29sTG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIFN0cmluZyBub3dyYXAg
PSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKS0+Z2V0QXR0cmlidXRlKG5vd3JhcEF0dHIp
OworICAgICAgICBTdHJpbmcgbm93cmFwID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkt
PmZhc3RHZXRBdHRyaWJ1dGUobm93cmFwQXR0cik7CiAgICAgICAgIGlmICghbm93cmFwLmlzTnVs
bCgpICYmIHcuaXNGaXhlZCgpKQogICAgICAgICAgICAgLy8gTm93cmFwIGlzIHNldCwgYnV0IHdl
IGRpZG4ndCBhY3R1YWxseSB1c2UgaXQgYmVjYXVzZSBvZiB0aGUKICAgICAgICAgICAgIC8vIGZp
eGVkIHdpZHRoIHNldCBvbiB0aGUgY2VsbC4gIEV2ZW4gc28sIGl0IGlzIGEgV2luSUUvTW96IHRy
YWl0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29u
dHJvbFNpbmdsZUxpbmUuY3BwCmluZGV4IDUzN2ExN2QuLmZiYzVkNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUu
Y3BwCkBAIC01NTYsNyArNTU2LDcgQEAgRVZpc2liaWxpdHkgUmVuZGVyVGV4dENvbnRyb2xTaW5n
bGVMaW5lOjp2aXNpYmlsaXR5Rm9yQ2FuY2VsQnV0dG9uKCkgY29uc3QKIAogY29uc3QgQXRvbWlj
U3RyaW5nJiBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmF1dG9zYXZlTmFtZSgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpLT5nZXRBdHRyaWJ1
dGUoYXV0b3NhdmVBdHRyKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUo
KSktPmZhc3RHZXRBdHRyaWJ1dGUoYXV0b3NhdmVBdHRyKTsKIH0KIAogLy8gUG9wdXBNZW51Q2xp
ZW50IG1ldGhvZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
cmVlQXNUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUcmVlQXNUZXh0
LmNwcAppbmRleCA1YjI5YmI1Li44MWJkMjZiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCkBAIC0xODUsNyArMTg1LDcgQEAgc3RhdGljIGJvb2wg
aXNFbXB0eU9yVW5zdHlsZWRBcHBsZVN0eWxlU3Bhbihjb25zdCBOb2RlKiBub2RlKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBjb25zdCBIVE1MRWxlbWVudCogZWxlbSA9IHN0YXRpY19j
YXN0PGNvbnN0IEhUTUxFbGVtZW50Kj4obm9kZSk7Ci0gICAgaWYgKGVsZW0tPmdldEF0dHJpYnV0
ZShjbGFzc0F0dHIpICE9ICJBcHBsZS1zdHlsZS1zcGFuIikKKyAgICBpZiAoZWxlbS0+ZmFzdEdl
dEF0dHJpYnV0ZShjbGFzc0F0dHIpICE9ICJBcHBsZS1zdHlsZS1zcGFuIikKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCFub2RlLT5oYXNDaGlsZE5vZGVzKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclZpZGVvLmNwcAppbmRleCBiODc2ZWIyLi5hNzcyN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlkZW8uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWRlby5jcHAKQEAgLTEyMiw3ICsxMjIsNyBA
QCBJbnRTaXplIFJlbmRlclZpZGVvOjpjYWxjdWxhdGVJbnRyaW5zaWNTaXplKCkKICAgICAvLyBX
aGVuIHRoZSBuYXR1cmFsIHNpemUgb2YgdGhlIHZpZGVvIGlzIHVuYXZhaWxhYmxlLCB3ZSB1c2Ug
dGhlIHByb3ZpZGVkCiAgICAgLy8gd2lkdGggYW5kIGhlaWdodCBhdHRyaWJ1dGVzIG9mIHRoZSB2
aWRlbyBlbGVtZW50IGFzIHRoZSBpbnRyaW5zaWMgc2l6ZSB1bnRpbAogICAgIC8vIGJldHRlciB2
YWx1ZXMgYmVjb21lIGF2YWlsYWJsZS4gCi0gICAgaWYgKHZpZGVvLT5oYXNBdHRyaWJ1dGUod2lk
dGhBdHRyKSAmJiB2aWRlby0+aGFzQXR0cmlidXRlKGhlaWdodEF0dHIpKQorICAgIGlmICh2aWRl
by0+ZmFzdEhhc0F0dHJpYnV0ZSh3aWR0aEF0dHIpICYmIHZpZGVvLT5mYXN0SGFzQXR0cmlidXRl
KGhlaWdodEF0dHIpKQogICAgICAgICByZXR1cm4gSW50U2l6ZSh2aWRlby0+d2lkdGgoKSwgdmlk
ZW8tPmhlaWdodCgpKTsKIAogICAgIC8vIDx2aWRlbz4gaW4gc3RhbmRhbG9uZSBtZWRpYSBkb2N1
bWVudHMgc2hvdWxkIG5vdCB1c2UgdGhlIGRlZmF1bHQgMzAweDE1MApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGZW5jZWQuY3BwCmluZGV4
IGY3YmJmNzEuLmNlOWQ0YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9t
YXRobWwvUmVuZGVyTWF0aE1MRmVuY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvbWF0aG1sL1JlbmRlck1hdGhNTEZlbmNlZC5jcHAKQEAgLTU1LDE0ICs1NSwxNCBAQCB2b2lk
IFJlbmRlck1hdGhNTEZlbmNlZDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIEVsZW1lbnQqIGZl
bmNlZCA9IHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpOwogIAogICAgIC8vIEZJWE1FOiBI
YW5kbGUgb3Blbi9jbG9zZSB2YWx1ZXMgd2l0aCBtb3JlIHRoYW4gb25lIGNoYXJhY3RlciAodGhl
eSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIHRleHQpLgotICAgIEF0b21pY1N0cmluZyBvcGVuVmFs
dWUgPSBmZW5jZWQtPmdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6b3BlbkF0dHIpOworICAgIEF0
b21pY1N0cmluZyBvcGVuVmFsdWUgPSBmZW5jZWQtPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFt
ZXM6Om9wZW5BdHRyKTsKICAgICBpZiAob3BlblZhbHVlLmxlbmd0aCgpID4gMCkKICAgICAgICAg
bV9vcGVuID0gb3BlblZhbHVlWzBdOwotICAgIEF0b21pY1N0cmluZyBjbG9zZVZhbHVlID0gZmVu
Y2VkLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmNsb3NlQXR0cik7CisgICAgQXRvbWljU3Ry
aW5nIGNsb3NlVmFsdWUgPSBmZW5jZWQtPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmNs
b3NlQXR0cik7CiAgICAgaWYgKGNsb3NlVmFsdWUubGVuZ3RoKCkgPiAwKQogICAgICAgICBtX2Ns
b3NlID0gY2xvc2VWYWx1ZVswXTsKICAgICAKLSAgICBBdG9taWNTdHJpbmcgc2VwYXJhdG9ycyA9
IHN0YXRpY19jYXN0PEVsZW1lbnQqPihmZW5jZWQpLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6
OnNlcGFyYXRvcnNBdHRyKTsKKyAgICBBdG9taWNTdHJpbmcgc2VwYXJhdG9ycyA9IHN0YXRpY19j
YXN0PEVsZW1lbnQqPihmZW5jZWQpLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpzZXBh
cmF0b3JzQXR0cik7CiAgICAgaWYgKCFzZXBhcmF0b3JzLmlzTnVsbCgpKSB7CiAgICAgICAgIFZl
Y3RvcjxVQ2hhcj4gY2hhcmFjdGVyczsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7
IGkgPCBzZXBhcmF0b3JzLmxlbmd0aCgpOyBpKyspIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MRnJhY3Rpb24uY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKaW5kZXggZTJl
ZGRjYi4uYjdjZjQyNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGht
bC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxGcmFjdGlvbi5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9pZCBS
ZW5kZXJNYXRoTUxGcmFjdGlvbjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIEVsZW1lbnQqIGZy
YWN0aW9uID0gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSk7CiAgICAgCiAgICAgUmVuZGVy
T2JqZWN0KiBudW1lcmF0b3IgPSBmaXJzdENoaWxkKCk7Ci0gICAgU3RyaW5nIG5hbGlnbiA9IGZy
YWN0aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om51bWFsaWduQXR0cik7CisgICAgU3Ry
aW5nIG5hbGlnbiA9IGZyYWN0aW9uLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpudW1h
bGlnbkF0dHIpOwogICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYWxpZ24sICJsZWZ0IikpCiAg
ICAgICAgIG51bWVyYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKExFRlQpOwogICAgIGVsc2Ug
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbGlnbiwgInJpZ2h0IikpCkBAIC03NCw3ICs3NCw3IEBA
IHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICBpZiAo
IWRlbm9taW5hdG9yKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgU3RyaW5nIGRhbGlnbiA9
IGZyYWN0aW9uLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmRlbm9tYWxpZ25BdHRyKTsKKyAg
ICBTdHJpbmcgZGFsaWduID0gZnJhY3Rpb24tPmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6
OmRlbm9tYWxpZ25BdHRyKTsKICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoZGFsaWduLCAibGVm
dCIpKQogICAgICAgICBkZW5vbWluYXRvci0+c3R5bGUoKS0+c2V0VGV4dEFsaWduKExFRlQpOwog
ICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGRhbGlnbiwgInJpZ2h0IikpCkBAIC04Myw3
ICs4Myw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MRnJhY3Rpb246OnVwZGF0ZUZyb21FbGVtZW50KCkK
ICAgICAgICAgZGVub21pbmF0b3ItPnN0eWxlKCktPnNldFRleHRBbGlnbihDRU5URVIpOwogICAg
IAogICAgIC8vIEZJWE1FOiBwYXJzZSB1bml0cwotICAgIFN0cmluZyB0aGlja25lc3MgPSBmcmFj
dGlvbi0+Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpsaW5ldGhpY2tuZXNzQXR0cik7CisgICAg
U3RyaW5nIHRoaWNrbmVzcyA9IGZyYWN0aW9uLT5mYXN0R2V0QXR0cmlidXRlKE1hdGhNTE5hbWVz
OjpsaW5ldGhpY2tuZXNzQXR0cik7CiAgICAgbV9saW5lVGhpY2tuZXNzID0gZ0xpbmVNZWRpdW07
CiAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHRoaWNrbmVzcywgInRoaW4iKSkKICAgICAgICAg
bV9saW5lVGhpY2tuZXNzID0gZ0xpbmVUaGluOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxPcGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcAppbmRleCA3ZjAzOWI5
Li5iZjdmZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1Jl
bmRlck1hdGhNTE9wZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0
aG1sL1JlbmRlck1hdGhNTE9wZXJhdG9yLmNwcApAQCAtMTQwLDcgKzE0MCw3IEBAIHZvaWQgUmVu
ZGVyTWF0aE1MT3BlcmF0b3I6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAvLyBXZSBtYWRlIG5l
ZWQgdGhlIGVsZW1lbnQgbGF0ZXIgaWYgd2UgY2FuJ3Qgc3RyZXRjaC4KICAgICBpZiAobm9kZSgp
LT5ub2RlVHlwZSgpID09IE5vZGU6OkVMRU1FTlRfTk9ERSkgewogICAgICAgICBpZiAoRWxlbWVu
dCogbW8gPSBzdGF0aWNfY2FzdDxFbGVtZW50Kj4obm9kZSgpKSkgewotICAgICAgICAgICAgQXRv
bWljU3RyaW5nIHN0cmV0Y2h5QXR0ciA9IG1vLT5nZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnN0
cmV0Y2h5QXR0cik7CisgICAgICAgICAgICBBdG9taWNTdHJpbmcgc3RyZXRjaHlBdHRyID0gbW8t
PmZhc3RHZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OnN0cmV0Y2h5QXR0cik7CiAgICAgICAgICAg
ICBzdHJldGNoRGlzYWJsZWQgPSBlcXVhbElnbm9yaW5nQ2FzZShzdHJldGNoeUF0dHIsICJmYWxz
ZSIpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAvLyBJZiBzdHJldGNoaW5nIGlzbid0IGRp
c2FibGVkLCBnZXQgdGhlIGNoYXJhY3RlciBmcm9tIHRoZSB0ZXh0IGNvbnRlbnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCAzNDBlMjAxLi42NmJkYWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBib29sIFNWR0ZvbnREYXRhOjph
cHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBHbHlwaERhdGEm
IGdseQogCiAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gcGFyZW50UmVuZGVyT2JqZWN0LT5zdHls
ZSgpLT5zdmdTdHlsZSgpLT5pc1ZlcnRpY2FsV3JpdGluZ01vZGUoKTsKICAgICAgICAgaWYgKEVs
ZW1lbnQqIHBhcmVudFJlbmRlck9iamVjdEVsZW1lbnQgPSB0b0VsZW1lbnQocGFyZW50UmVuZGVy
T2JqZWN0LT5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBsYW5ndWFnZSA9IHBhcmVudFJlbmRlck9i
amVjdEVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICAg
ICAgbGFuZ3VhZ2UgPSBwYXJlbnRSZW5kZXJPYmplY3RFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRl
KFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKICAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJPYmpl
Y3RFbGVtZW50LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykpIHsKICAgICAgICAg
ICAgICAgICBTVkdBbHRHbHlwaEVsZW1lbnQqIGFsdEdseXBoID0gc3RhdGljX2Nhc3Q8U1ZHQWx0
R2x5cGhFbGVtZW50Kj4ocGFyZW50UmVuZGVyT2JqZWN0RWxlbWVudCk7Cg==
</data>
<flag name="review"
          id="102299"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="102300"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>