<?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>41117</bug_id>
          
          <creation_ts>2010-06-23 17:58:48 -0700</creation_ts>
          <short_desc>Move Document* down onto DocumentParser, since every DocumentParser needs one.</short_desc>
          <delta_ts>2010-06-24 14:50:02 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>41136</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242198</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 17:58:48 -0700</bug_when>
    <thetext>Move Document* down onto DocumentParser, since every DocumentParser needs one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242201</commentid>
    <comment_count>1</comment_count>
      <attachid>59589</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 18:01:04 -0700</bug_when>
    <thetext>Created attachment 59589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242202</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 18:02:28 -0700</bug_when>
    <thetext>Attachment 59589 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/dom/DocumentParser.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242210</commentid>
    <comment_count>3</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-23 18:06:25 -0700</bug_when>
    <thetext>Attachment 59589 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3301694</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242212</commentid>
    <comment_count>4</comment_count>
      <attachid>59589</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 18:09:21 -0700</bug_when>
    <thetext>Comment on attachment 59589
Patch

WebCore/dom/DocumentParser.h:32
 +      class Document;
You should fix the indent here while you&apos;re mucking with things.

WebCore/dom/XMLDocumentParserLibxml2.cpp:525
 +  XMLDocumentParser::XMLDocumentParser(Document* _doc, FrameView* _view)
Can you fix these parameter names too?

WebCore/dom/XMLDocumentParserLibxml2.cpp:578
 +      // FIXME: The Document owns the Parser, we shouldn&apos;t need to ref the Document.
Please remove this in a follow-up patch.

WebCore/loader/ImageDocument.cpp:97
 +          return static_cast&lt;ImageDocument*&gt;(document());
Yuck.

WebCore/loader/PluginDocument.cpp:54
 +      }
Missing blank line after this line.

WebCore/loader/SinkDocument.cpp:35
 +      SinkDocumentParser(Document* document) : DocumentParser(document) { }
Please split into multiple lines for consistency.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242215</commentid>
    <comment_count>5</comment_count>
      <attachid>59589</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-23 18:14:59 -0700</bug_when>
    <thetext>Comment on attachment 59589
Patch

&gt; +// If move DocumentParser() to a DocumentParser.cpp, this include can go away.
&gt; +#include &lt;wtf/Assertions.h&gt;

I think this comment is overkill.

&gt; +    // FIXME: The Document owns the Parser, we shouldn&apos;t need to ref the Document.
&gt; +    m_document-&gt;ref();

This comment seems oversimplified. Sure, the document owns the parser, but if the document is destroyed the parser may be abruptly destroyed, and there may be some need to postpone that. There are times when something owned, like the FrameLoader, may ref something that owns it, like the Frame. This could have been one of those times. On the other hand the code could well be wrong, but it&apos;s not sufficient explanation to say that the document owns the parser. Because of that, I think this comment is misleading.

&gt; +    // FIXME: We should not need to ref/deref the Document, even when parsing fragments.
&gt; +    if (m_parsingFragment)
&gt; +        document()-&gt;deref();

Are you sure about this?

&gt;      ImageDocument* m_doc;
&gt;  };
&gt;      
&gt; -class ImageTokenizer : public DocumentParser {
&gt; +class ImageDocumentParser : public DocumentParser {
&gt;  public:
&gt; -    ImageTokenizer(ImageDocument* doc) : m_doc(doc) {}
&gt; +    ImageDocumentParser(ImageDocument* doc)
&gt; +        : DocumentParser(doc)
&gt; +    {
&gt; +    }

If we&apos;re going to rename this class, then I suggest we also rename the abbreviated argument name.

&gt; +    ImageDocument* imageDocument() const
&gt; +    {
&gt; +        return static_cast&lt;ImageDocument*&gt;(document());
&gt; +    }

I suggest naming this just &quot;document()&quot;, and calling through to DocumentParser::document(). There&apos;s no reason to call the underlying document() function directly. It&apos;s nice to call the function by its normal name and get the more specific type.

&gt; +    MediaDocumentParser(Document* doc)
&gt; +        : DocumentParser(doc)

Again, if we are going so far as to reformat, then I&apos;d like to rename &quot;doc&quot; to &quot;document&quot;.

&gt; +    PluginDocumentParser(Document* doc)
&gt; +        : DocumentParser(doc)
&gt; +        , m_embedElement(0)
&gt; +    {
&gt; +    }

And again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242217</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 18:16:29 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 59589 [details])
&gt; WebCore/dom/DocumentParser.h:32
&gt;  +      class Document;
&gt; You should fix the indent here while you&apos;re mucking with things.

I intentionally left that for a separate patch. :)

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:525
&gt;  +  XMLDocumentParser::XMLDocumentParser(Document* _doc, FrameView* _view)
&gt; Can you fix these parameter names too?

Sure.

&gt; WebCore/dom/XMLDocumentParserLibxml2.cpp:578
&gt;  +      // FIXME: The Document owns the Parser, we shouldn&apos;t need to ref the Document.
&gt; Please remove this in a follow-up patch.

Sure.  I didn&apos;t want to make things any more likely to break.

&gt; WebCore/loader/ImageDocument.cpp:97
&gt;  +          return static_cast&lt;ImageDocument*&gt;(document());
&gt; Yuck.

Why is this yuck?  We know that document() is an ImageDocument() because we were constructed with one.  Would you like a comment to explain such?  I think it&apos;s better than the sub classes know what subclass the root storage is and have fooDocument() type-specific accessors, than that each subclass has to store their own type-specific pointer.

&gt; WebCore/loader/PluginDocument.cpp:54
&gt;  +      }
&gt; Missing blank line after this line.

OK.

&gt; WebCore/loader/SinkDocument.cpp:35
&gt;  +      SinkDocumentParser(Document* document) : DocumentParser(document) { }
&gt; Please split into multiple lines for consistency.

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242221</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 18:20:14 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 59589 [details])
&gt; &gt; +// If move DocumentParser() to a DocumentParser.cpp, this include can go away.
&gt; &gt; +#include &lt;wtf/Assertions.h&gt;
&gt; 
&gt; I think this comment is overkill.

OK, will remove.  I just hate adding more headers to common header includes.

&gt; &gt; +    // FIXME: The Document owns the Parser, we shouldn&apos;t need to ref the Document.
&gt; &gt; +    m_document-&gt;ref();
&gt; 
&gt; This comment seems oversimplified. Sure, the document owns the parser, but if the document is destroyed the parser may be abruptly destroyed, and there may be some need to postpone that. There are times when something owned, like the FrameLoader, may ref something that owns it, like the Frame. This could have been one of those times. On the other hand the code could well be wrong, but it&apos;s not sufficient explanation to say that the document owns the parser. Because of that, I think this comment is misleading.

OK, I can explain better.  I still think the code is going to be wrong here.  In the fragment parsing case the Document* is the Document* owned by the Fragment, which is never destoryed during fragment parsing, so it makes no sense that it would need to ref the Doc.  But I could be missing something.

In the DocumentFragment parsing case the DocumentParser is on the stack, and the DocumentFrament* is passed to it (and not owned by it).  No script execution takes place during DocumentFragment parsing (which is synchronous).  I&apos;m happy to explain all of this in a comment.

&gt; &gt; +    // FIXME: We should not need to ref/deref the Document, even when parsing fragments.
&gt; &gt; +    if (m_parsingFragment)
&gt; &gt; +        document()-&gt;deref();
&gt; 
&gt; Are you sure about this?

See above.

&gt; &gt; -class ImageTokenizer : public DocumentParser {
&gt; &gt; +class ImageDocumentParser : public DocumentParser {
&gt; &gt;  public:
&gt; &gt; -    ImageTokenizer(ImageDocument* doc) : m_doc(doc) {}
&gt; &gt; +    ImageDocumentParser(ImageDocument* doc)
&gt; &gt; +        : DocumentParser(doc)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; If we&apos;re going to rename this class, then I suggest we also rename the abbreviated argument name.

You mean &quot;doc&quot;?  Happy to.

&gt; &gt; +    ImageDocument* imageDocument() const
&gt; &gt; +    {
&gt; &gt; +        return static_cast&lt;ImageDocument*&gt;(document());
&gt; &gt; +    }
&gt; 
&gt; I suggest naming this just &quot;document()&quot;, and calling through to DocumentParser::document(). There&apos;s no reason to call the underlying document() function directly. It&apos;s nice to call the function by its normal name and get the more specific type.

Ok.  Sounds good to me.

&gt; &gt; +    MediaDocumentParser(Document* doc)
&gt; &gt; +        : DocumentParser(doc)
&gt; 
&gt; Again, if we are going so far as to reformat, then I&apos;d like to rename &quot;doc&quot; to &quot;document&quot;.
&gt; 
&gt; &gt; +    PluginDocumentParser(Document* doc)
&gt; &gt; +        : DocumentParser(doc)
&gt; &gt; +        , m_embedElement(0)
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; And again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242223</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 18:25:32 -0700</bug_when>
    <thetext>I&apos;d be surprised if the ref()/deref() were needed.  However, I think we can skip the comment and just try removing them in a subsequent patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242303</commentid>
    <comment_count>9</comment_count>
      <attachid>59613</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 23:04:39 -0700</bug_when>
    <thetext>Created attachment 59613
Address Darin and Adam&apos;s feedback</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242306</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 23:08:05 -0700</bug_when>
    <thetext>Attachment 59613 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/dom/DocumentParser.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 12 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242308</commentid>
    <comment_count>11</comment_count>
      <attachid>59613</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-06-23 23:10:42 -0700</bug_when>
    <thetext>Comment on attachment 59613
Address Darin and Adam&apos;s feedback

WebCore/dom/DocumentParser.h:27
 +  // If move DocumentParser() to a DocumentParser.cpp, this include can go away.
Darin asked you to remove this comment.

WebCore/dom/XMLDocumentParserLibxml2.cpp: 
 +          m_doc-&gt;ref();
Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242309</commentid>
    <comment_count>12</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-06-23 23:10:57 -0700</bug_when>
    <thetext>Attachment 59613 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3289635</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242315</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 23:17:42 -0700</bug_when>
    <thetext>Committed r61737: &lt;http://trac.webkit.org/changeset/61737&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242317</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 23:22:50 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/61737 might have broken Qt Linux Release minimal and Qt Linux ARMv5 Release</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242320</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 23:28:15 -0700</bug_when>
    <thetext>Committed r61738: &lt;http://trac.webkit.org/changeset/61738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242523</commentid>
    <comment_count>16</comment_count>
      <attachid>59613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-06-24 08:07:29 -0700</bug_when>
    <thetext>Comment on attachment 59613
Address Darin and Adam&apos;s feedback

Can m_document be private instead of protected?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242671</commentid>
    <comment_count>17</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-24 14:35:21 -0700</bug_when>
    <thetext>Yes, It could be.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59589</attachid>
            <date>2010-06-23 18:01:04 -0700</date>
            <delta_ts>2010-06-23 23:04:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41117-20100623180101.patch</filename>
            <type>text/plain</type>
            <size>53363</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODZmNjkyMGYwMDE2ZGViZjkzMTk5OTUyNjg3YjA4ZmM2YzVmZDgwNi4uODhlYTVlZDNjNmM1NGM2
OWY3MjU2ZGM1OWIxODZlNzk2MjBkYTQzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw5NCBAQAogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIE1vdmUgRG9jdW1lbnQqIGRvd24gb250
byBEb2N1bWVudFBhcnNlciwgc2luY2UgZXZlcnkgRG9jdW1lbnRQYXJzZXIgbmVlZHMgb25lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDExMTcKKwor
ICAgICAgICBUaGlzIGVsaW1pbmF0ZWQgdGhlIG5lZWQgZm9yIGRvY3VtZW50KCkgb24gSFRNTERv
Y3VtZW50UGFyc2VyLgorICAgICAgICBUaGlzIHBhdmVzIHRoZSB3YXkgZm9yIG1vcmUgY29kZSBz
aGFyaW5nIGJldHdlZW4gdmFyaW91cworICAgICAgICBEb2N1bWVudFBhcnNlciBzdWJjbGFzc2Vz
LgorCisgICAgICAgICogZG9tL0RvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFBhcnNlcjo6aW5WaWV3U291cmNlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFBhcnNlcjo6c2V0SW5WaWV3U291cmNlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFBhcnNlcjo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRQYXJzZXI6
OkRvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmlzV01MRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW50ZXJUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKToKKyAgICAgICAgKiBkb20v
WE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVu
dFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3Vt
ZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNkYXRhQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAqIGh0bWwvSFRNTERv
Y3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
SFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudFBhcnNlci5o
OgorICAgICAgICAqIGh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c2NyaXB0
RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpj
b250aW51ZVByb2Nlc3NpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjp3aWxsV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpwcm9jZXNzRG9jdHlwZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0
ZXJuYWxTY3JpcHRzSWZSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKToKKyAgICAgICAgKiBo
dG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGxvYWRlci9JbWFnZURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRQYXJzZXI6OkltYWdl
RG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudFBhcnNlcjo6
aW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjp3
cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjp3cml0ZVJhd0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcik6CisgICAg
ICAgICogbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFE
b2N1bWVudFBhcnNlcjo6TWVkaWFEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFEb2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKToKKyAgICAgICAgKiBsb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9jdW1lbnRQYXJz
ZXI6OlBsdWdpbkRvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3Vt
ZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5Eb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9j
dW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6CisgICAgICAgICogbG9hZGVyL1NpbmtEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW5rRG9jdW1lbnRQYXJzZXI6OlNpbmtEb2N1
bWVudFBhcnNlcik6CisgICAgICAgICogbG9hZGVyL1RleHREb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RG9jdW1lbnRQYXJzZXI6OlRleHREb2N1bWVudFBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RG9jdW1lbnRQYXJzZXI6OndyaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHREb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRE
b2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKToKKworMjAxMC0wNi0yMyAgRXJpYyBTZWlk
ZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgU3RhcnQgdG8gY2xlYW4gdXAgRG9jdW1lbnRQYXJzZXIgaW50ZXJmYWNl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTExNAog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnRQYXJzZXIuaAppbmRleCAxNzUyYTdkZDExZjU0YzIwODc2ZDk2YzI5YTI2N2MwMGQ4
YjA2OWI1Li44YmU4M2NmMTg0NTg1MjFmMWIyMTAyMTU5ZDk4ZDQ5ZGRmMTQ0NTVhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50UGFyc2VyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3
ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMyw4ICsyNCwxMiBAQAogI2lmbmRlZiBEb2N1bWVudFBhcnNlcl9oCiAj
ZGVmaW5lIERvY3VtZW50UGFyc2VyX2gKIAorLy8gSWYgbW92ZSBEb2N1bWVudFBhcnNlcigpIHRv
IGEgRG9jdW1lbnRQYXJzZXIuY3BwLCB0aGlzIGluY2x1ZGUgY2FuIGdvIGF3YXkuCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3Mg
RG9jdW1lbnQ7CiAgICAgY2xhc3MgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOwogICAgIGNsYXNzIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjsKICAgICBjbGFzcyBTZWdtZW50ZWRTdHJpbmc7CkBAIC01
Myw5ICs1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHdh
bnRzUmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCB3cml0ZVJhd0RhdGEoY29uc3QgY2hhciogLypkYXRhKi8sIGludCAvKmxlbmd0aCovKSB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5WaWV3U291cmNlTW9kZTsgfQotICAgICAgICB2b2lkIHNldEluVmlld1NvdXJj
ZU1vZGUoYm9vbCBtb2RlKSB7IG1faW5WaWV3U291cmNlTW9kZSA9IG1vZGU7IH0KLQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAg
ICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KQEAgLTY2
LDE1ICs2OCwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyKiBodG1sVHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBhc0hUTUxEb2N1bWVudFBh
cnNlcigpIHsgcmV0dXJuIDA7IH0KIAorICAgICAgICAvLyBGSVhNRTogdmlldyBzb3VyY2UgbW9k
ZSBpcyBvbmx5IHVzZWQgYnkgdGhlIEhUTUwgYW5kIFRleHQKKyAgICAgICAgLy8gRG9jdW1lbnRQ
YXJzZXJzIGFuZCBtYXkgbm90IGJlbG9uZyBvbiB0aGUgYmFzZS1jbGFzcy4KKyAgICAgICAgYm9v
bCBpblZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblZpZXdTb3VyY2VNb2RlOyB9
CisgICAgICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sIG1vZGUpIHsgbV9pblZpZXdT
b3VyY2VNb2RlID0gbW9kZTsgfQorCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKwogICAgICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9YU1NBdWRpdG9yOyB9CiAgICAgICAgIHZvaWQgc2V0WFNTQXVk
aXRvcihYU1NBdWRpdG9yKiBhdWRpdG9yKSB7IG1fWFNTQXVkaXRvciA9IGF1ZGl0b3I7IH0KIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgRG9jdW1lbnRQYXJzZXIoYm9vbCB2aWV3U291cmNlTW9k
ZSA9IGZhbHNlKQorICAgICAgICBEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgdmlld1NvdXJjZU1vZGUgPSBmYWxzZSkKICAgICAgICAgICAgIDogbV9wYXJzZXJTdG9wcGVk
KGZhbHNlKQogICAgICAgICAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUodmlld1NvdXJjZU1vZGUp
CisgICAgICAgICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgICAgICAgICAsIG1fWFNT
QXVkaXRvcigwKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVGhlIHBhcnNlciBoYXMgYnVmZmVycywgc28gcGFyc2luZyBt
YXkgY29udGludWUgZXZlbiBhZnRlcgpAQCAtODMsNiArOTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9wYXJzZXJTdG9wcGVkOwogICAgICAgICBib29sIG1faW5WaWV3
U291cmNlTW9kZTsKIAorICAgICAgICAvLyBFdmVyeSBEb2N1bWVudFBhcnNlciBuZWVkcyBhIHBv
aW50ZXIgYmFjayB0byB0aGUgZG9jdW1lbnQuCisgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50
OwogICAgICAgICAvLyBUaGUgWFNTQXVkaXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVu
dCBwYXJzZXIuCiAgICAgICAgIFhTU0F1ZGl0b3IqIG1fWFNTQXVkaXRvcjsKICAgICB9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IGE3M2IzNGU5Mjc0NDU4ZmVhZjAwYjMwOWJiZTkw
ZDNkNWMyYjc0OTEuLmFiMDJiYjM0MDI4NjI5NWM5NjgwMGQ4MTg1YThlNWU0NDM0NDgyNzcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTcyLDEwICs3Miw3IEBAIGNvbnN0IGludCBt
YXhFcnJvcnMgPSAyNTsKICNpZiBFTkFCTEUoV01MKQogYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6
aXNXTUxEb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZG9jKQotICAgICAgICByZXR1cm4g
bV9kb2MtPmlzV01MRG9jdW1lbnQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpOwogfQogI2VuZGlmCiAKQEAgLTgzLDcgKzgwLDcg
QEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cHVzaEN1cnJlbnROb2RlKE5vZGUqIG4pCiB7CiAg
ICAgQVNTRVJUKG4pOwogICAgIEFTU0VSVChtX2N1cnJlbnROb2RlKTsKLSAgICBpZiAobiAhPSBt
X2RvYykKKyAgICBpZiAobiAhPSBkb2N1bWVudCgpKQogICAgICAgICBuLT5yZWYoKTsKICAgICBt
X2N1cnJlbnROb2RlU3RhY2suYXBwZW5kKG1fY3VycmVudE5vZGUpOwogICAgIG1fY3VycmVudE5v
ZGUgPSBuOwpAQCAtOTcsNyArOTQsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJy
ZW50Tm9kZSgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZVN0YWNr
LnNpemUoKSk7CiAKLSAgICBpZiAobV9jdXJyZW50Tm9kZSAhPSBtX2RvYykKKyAgICBpZiAobV9j
dXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQogICAgICAgICBtX2N1cnJlbnROb2RlLT5kZXJlZigp
OwogCiAgICAgbV9jdXJyZW50Tm9kZSA9IG1fY3VycmVudE5vZGVTdGFjay5sYXN0KCk7CkBAIC0x
MDYsMTQgKzEwMywxNCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJyZW50Tm9kZSgp
CiAKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCiB7Ci0g
ICAgaWYgKG1fY3VycmVudE5vZGUgJiYgbV9jdXJyZW50Tm9kZSAhPSBtX2RvYykKKyAgICBpZiAo
bV9jdXJyZW50Tm9kZSAmJiBtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCiAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmRlcmVmKCk7CiAgICAgbV9jdXJyZW50Tm9kZSA9IDA7CiAKICAgICBpZiAo
bV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAt
LWkpCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7Ci0gICAgICAg
IGlmIChtX2N1cnJlbnROb2RlU3RhY2tbMF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IG1f
ZG9jKQorICAgICAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrWzBdICYmIG1fY3VycmVudE5vZGVT
dGFja1swXSAhPSBkb2N1bWVudCgpKQogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrWzBd
LT5kZXJlZigpOwogICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2suY2xlYXIoKTsKICAgICB9CkBA
IC0xNjksNyArMTY2LDcgQEAgYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6ZW50ZXJUZXh0KCkKICNp
ZiAhVVNFKFFYTUxTVFJFQU0pCiAgICAgQVNTRVJUKG1fYnVmZmVyZWRUZXh0LnNpemUoKSA9PSAw
KTsKICNlbmRpZgotICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gVGV4dDo6Y3JlYXRlKG1fZG9j
LCAiIik7CisgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQo
KSwgIiIpOwogICAgIGlmICghbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwdXNoQ3VycmVudE5vZGUobmV3Tm9kZS5nZXQo
KSk7CkBAIC0yMTcsMTIgKzIxNCwxMiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmQoKQog
ICAgICAgICBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOwogICAgIGVsc2UgewogICAgICAgICBl
eGl0VGV4dCgpOwotICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgICAg
ICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAgfQogCiAgICAgY2xlYXJD
dXJyZW50Tm9kZVN0YWNrKCk7CiAgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAg
bV9kb2MtPmZpbmlzaGVkUGFyc2luZygpOworICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBh
cnNpbmcoKTsKIH0KIAogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKQEAgLTI3Miw3
ICsyNjksNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9j
aygpCiAKICAgICAvLyBDcmVhdGUgZWxlbWVudHMgZm9yIGRpc3BsYXkKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBEb2N1bWVudCogZG9jID0gbV9kb2M7CisgICAgRG9jdW1lbnQqIGRv
YyA9IGRvY3VtZW50KCk7CiAgICAgTm9kZSogZG9jdW1lbnRFbGVtZW50ID0gZG9jLT5kb2N1bWVu
dEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgewogICAgICAgICBSZWZQdHI8
Tm9kZT4gcm9vdEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggOGYwMWMwMGI4ODExZTY2MGVhY2NlZTQ4NWFjYjBj
ZDNiOTQxMzU4YS4uNDUzNzZiNWFhZjIwMjFkOTgxZDJjOGRjMWU2YzAwOGYyNGJhOGM0YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC0xNTQsNyArMTU0LDYgQEAgcHVibGljOgogICAgICAg
ICB2b2lkIGRvV3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgZG9FbmQoKTsKIAot
ICAgICAgICBEb2N1bWVudCogbV9kb2M7CiAgICAgICAgIEZyYW1lVmlldyogbV92aWV3OwogCiAg
ICAgICAgIFN0cmluZyBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggZTU3MzY0NTk3MzU3NjFmODZiZmE0ZWMy
NWU0ZWJmNDAyMWYxNzMwYy4uMDAyMGUyOGVlMDNlMDc1MWE4ODhiYjE3MTdhMTBhNWJmNTQ3NWI2
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01MjMsNyAr
NTIzLDcgQEAgUGFzc1JlZlB0cjxYTUxQYXJzZXJDb250ZXh0PiBYTUxQYXJzZXJDb250ZXh0Ojpj
cmVhdGVNZW1vcnlQYXJzZXIoeG1sU0FYSGFuZGxlclAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1
bWVudCogX2RvYywgRnJhbWVWaWV3KiBfdmlldykKLSAgICA6IG1fZG9jKF9kb2MpCisgICAgOiBE
b2N1bWVudFBhcnNlcihfZG9jKQogICAgICwgbV92aWV3KF92aWV3KQogICAgICwgbV9jb250ZXh0
KDApCiAgICAgLCBtX3BlbmRpbmdDYWxsYmFja3MobmV3IFBlbmRpbmdDYWxsYmFja3MpCkBAIC01
NTAsNyArNTUwLDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50KiBfZG9jLCBGcmFtZVZpZXcqIF92aWV3KQogfQogCiBYTUxEb2N1bWVudFBhcnNlcjo6WE1M
RG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQotICAgIDogbV9kb2MoZnJhZ21lbnQtPmRvY3VtZW50KCkpCisgICAgOiBEb2N1bWVudFBhcnNl
cihmcmFnbWVudC0+ZG9jdW1lbnQoKSkKICAgICAsIG1fdmlldygwKQogICAgICwgbV9jb250ZXh0
KDApCiAgICAgLCBtX3BlbmRpbmdDYWxsYmFja3MobmV3IFBlbmRpbmdDYWxsYmFja3MpCkBAIC01
NzUsOCArNTc1LDggQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKICAgICAsIG1fc2NyaXB0aW5n
UGVybWlzc2lvbihzY3JpcHRpbmdQZXJtaXNzaW9uKQogewogICAgIGZyYWdtZW50LT5yZWYoKTsK
LSAgICBpZiAobV9kb2MpCi0gICAgICAgIG1fZG9jLT5yZWYoKTsKKyAgICAvLyBGSVhNRTogVGhl
IERvY3VtZW50IG93bnMgdGhlIFBhcnNlciwgd2Ugc2hvdWxkbid0IG5lZWQgdG8gcmVmIHRoZSBE
b2N1bWVudC4KKyAgICBtX2RvY3VtZW50LT5yZWYoKTsKIAogICAgIC8vIEFkZCBuYW1lc3BhY2Vz
IGJhc2VkIG9uIHRoZSBwYXJlbnQgbm9kZQogICAgIFZlY3RvcjxFbGVtZW50Kj4gZWxlbVN0YWNr
OwpAQCAtNjE5LDggKzYxOSw5IEBAIFhNTFBhcnNlckNvbnRleHQ6On5YTUxQYXJzZXJDb250ZXh0
KCkKIFhNTERvY3VtZW50UGFyc2VyOjp+WE1MRG9jdW1lbnRQYXJzZXIoKQogewogICAgIGNsZWFy
Q3VycmVudE5vZGVTdGFjaygpOwotICAgIGlmIChtX3BhcnNpbmdGcmFnbWVudCAmJiBtX2RvYykK
LSAgICAgICAgbV9kb2MtPmRlcmVmKCk7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBub3QgbmVl
ZCB0byByZWYvZGVyZWYgdGhlIERvY3VtZW50LCBldmVuIHdoZW4gcGFyc2luZyBmcmFnbWVudHMu
CisgICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50KQorICAgICAgICBkb2N1bWVudCgpLT5kZXJlZigp
OwogICAgIGlmIChtX3BlbmRpbmdTY3JpcHQpCiAgICAgICAgIG1fcGVuZGluZ1NjcmlwdC0+cmVt
b3ZlQ2xpZW50KHRoaXMpOwogfQpAQCAtNjQzLDExICs2NDQsMTEgQEAgdm9pZCBYTUxEb2N1bWVu
dFBhcnNlcjo6ZG9Xcml0ZShjb25zdCBTdHJpbmcmIHBhcnNlU3RyaW5nKQogICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyIEJPTUhpZ2hCeXRlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KCZCT00pOwogICAgICAgICB4bWxTd2l0Y2hFbmNvZGluZyhjb250ZXh0LT5j
b250ZXh0KCksIEJPTUhpZ2hCeXRlID09IDB4RkYgPyBYTUxfQ0hBUl9FTkNPRElOR19VVEYxNkxF
IDogWE1MX0NIQVJfRU5DT0RJTkdfVVRGMTZCRSk7CiAKLSAgICAgICAgWE1MRG9jdW1lbnRQYXJz
ZXJTY29wZSBzY29wZShtX2RvYy0+ZG9jTG9hZGVyKCkpOworICAgICAgICBYTUxEb2N1bWVudFBh
cnNlclNjb3BlIHNjb3BlKGRvY3VtZW50KCktPmRvY0xvYWRlcigpKTsKICAgICAgICAgeG1sUGFy
c2VDaHVuayhjb250ZXh0LT5jb250ZXh0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+
KHBhcnNlU3RyaW5nLmNoYXJhY3RlcnMoKSksIHNpemVvZihVQ2hhcikgKiBwYXJzZVN0cmluZy5s
ZW5ndGgoKSwgMCk7CiAgICAgfQogCi0gICAgaWYgKG1fZG9jLT5kZWNvZGVyKCkgJiYgbV9kb2Mt
PmRlY29kZXIoKS0+c2F3RXJyb3IoKSkgeworICAgIGlmIChkb2N1bWVudCgpLT5kZWNvZGVyKCkg
JiYgZG9jdW1lbnQoKS0+ZGVjb2RlcigpLT5zYXdFcnJvcigpKSB7CiAgICAgICAgIC8vIElmIHRo
ZSBkZWNvZGVyIHNhdyBhbiBlcnJvciwgcmVwb3J0IGl0IGFzIGZhdGFsIChzdG9wcyBwYXJzaW5n
KQogICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkVuY29kaW5nIGVycm9yIiwgY29udGV4dC0+
Y29udGV4dCgpLT5pbnB1dC0+bGluZSwgY29udGV4dC0+Y29udGV4dCgpLT5pbnB1dC0+Y29sKTsK
ICAgICB9CkBAIC03MjgsNyArNzI5LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRF
bGVtZW50TnMoY29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGEKIAogI2lm
IEVOQUJMRShYSFRNTE1QKQogICAgIC8vIGNoZWNrIGlmIHRoZSBET0NUWVBFIERlY2xhcmF0aW9u
IG9mIFhIVE1MTVAgZG9jdW1lbnQgZXhpc3RzCi0gICAgaWYgKCFtX2hhc0RvY1R5cGVEZWNsYXJh
dGlvbiAmJiBtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgeworICAgIGlmICghbV9oYXNEb2NU
eXBlRGVjbGFyYXRpb24gJiYgZG9jdW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkgewogICAg
ICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkRPQ1RZUEUgZGVjbGFyYXRpb24gbG9zdC4iLCBsaW5l
TnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTc2
OSw3ICs3NzAsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25z
dCB4bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogICAgIG1fc2F3Rmlyc3RFbGVt
ZW50ID0gdHJ1ZTsKIAogICAgIFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUs
IHVyaSk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxl
bWVudChxTmFtZSwgdHJ1ZSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG5ld0VsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlKTsKICAgICBpZiAoIW5ld0VsZW1lbnQp
IHsKICAgICAgICAgc3RvcFBhcnNpbmcoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtODAzLDggKzgw
NCw4IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENo
YXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAgICAgaWYgKG1fdmlldyAmJiAhbmV3RWxl
bWVudC0+YXR0YWNoZWQoKSkKICAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7CiAKLSAgICBp
ZiAoIW1fcGFyc2luZ0ZyYWdtZW50ICYmIGlzRmlyc3RFbGVtZW50ICYmIG1fZG9jLT5mcmFtZSgp
KQotICAgICAgICBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVt
ZW50QXZhaWxhYmxlKCk7CisgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCAmJiBpc0ZpcnN0RWxl
bWVudCAmJiBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICBkb2N1bWVudCgpLT5mcmFtZSgp
LT5sb2FkZXIoKS0+ZGlzcGF0Y2hEb2N1bWVudEVsZW1lbnRBdmFpbGFibGUoKTsKIH0KIAogdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKQEAgLTg1NSw3ICs4NTYsNyBAQCB2
b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogCiAjaWYgRU5BQkxFKFhIVE1M
TVApCiAgICAgaWYgKCFzY3JpcHRFbGVtZW50LT5zaG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCkp
Ci0gICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwor
ICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUp
OwogICAgIGVsc2UKICNlbmRpZgogICAgIHsKQEAgLTg2NCw3ICs4NjUsNyBAQCB2b2lkIFhNTERv
Y3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQogICAgICAgICAgICAgLy8gd2UgaGF2ZSBhIHNy
YyBhdHRyaWJ1dGUKICAgICAgICAgICAgIFN0cmluZyBzY3JpcHRDaGFyc2V0ID0gc2NyaXB0RWxl
bWVudC0+c2NyaXB0Q2hhcnNldCgpOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQtPmRpc3BhdGNo
QmVmb3JlTG9hZEV2ZW50KHNjcmlwdEhyZWYpICYmCi0gICAgICAgICAgICAgICAgKG1fcGVuZGlu
Z1NjcmlwdCA9IG1fZG9jLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChzY3JpcHRIcmVmLCBz
Y3JpcHRDaGFyc2V0KSkpIHsKKyAgICAgICAgICAgICAgICAobV9wZW5kaW5nU2NyaXB0ID0gZG9j
dW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJlZiwgc2NyaXB0Q2hh
cnNldCkpKSB7CiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gZWxlbWVudDsKICAg
ICAgICAgICAgICAgICBtX3BlbmRpbmdTY3JpcHQtPmFkZENsaWVudCh0aGlzKTsKIApAQCAtODc0
LDcgKzg3NSw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCiAgICAg
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICBtX3NjcmlwdEVsZW1lbnQgPSAwOwogICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fdmlldy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1
dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRFbGVtZW50LT5zY3JpcHRDb250ZW50KCks
IG1fZG9jLT51cmwoKSwgbV9zY3JpcHRTdGFydExpbmUpKTsKKyAgICAgICAgICAgIG1fdmlldy0+
ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoU2NyaXB0U291cmNlQ29kZShzY3JpcHRF
bGVtZW50LT5zY3JpcHRDb250ZW50KCksIGRvY3VtZW50KCktPnVybCgpLCBtX3NjcmlwdFN0YXJ0
TGluZSkpOwogICAgIH0KICAgICBtX3JlcXVlc3RpbmdTY3JpcHQgPSBmYWxzZTsKICAgICBwb3BD
dXJyZW50Tm9kZSgpOwpAQCAtOTMyLDcgKzkzMyw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6
OnByb2Nlc3NpbmdJbnN0cnVjdGlvbihjb25zdCB4bWxDaGFyKiB0YXJnZXQsIGNvbnN0IHhtbENo
CiAKICAgICAvLyAjIyMgaGFuZGxlIGV4Y2VwdGlvbnMKICAgICBpbnQgZXhjZXB0aW9uID0gMDsK
LSAgICBSZWZQdHI8UHJvY2Vzc2luZ0luc3RydWN0aW9uPiBwaSA9IG1fZG9jLT5jcmVhdGVQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oCisgICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkg
PSBkb2N1bWVudCgpLT5jcmVhdGVQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oCiAgICAgICAgIHRvU3Ry
aW5nKHRhcmdldCksIHRvU3RyaW5nKGRhdGEpLCBleGNlcHRpb24pOwogICAgIGlmIChleGNlcHRp
b24pCiAgICAgICAgIHJldHVybjsKQEAgLTk0OCw3ICs5NDksNyBAQCB2b2lkIFhNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25z
dCB4bWxDaAogCiAjaWYgRU5BQkxFKFhTTFQpCiAgICAgbV9zYXdYU0xUcmFuc2Zvcm0gPSAhbV9z
YXdGaXJzdEVsZW1lbnQgJiYgcGktPmlzWFNMKCk7Ci0gICAgaWYgKG1fc2F3WFNMVHJhbnNmb3Jt
ICYmICFtX2RvYy0+dHJhbnNmb3JtU291cmNlRG9jdW1lbnQoKSkKKyAgICBpZiAobV9zYXdYU0xU
cmFuc2Zvcm0gJiYgIWRvY3VtZW50KCktPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpCiAgICAg
ICAgIHN0b3BQYXJzaW5nKCk7CiAjZW5kaWYKIH0KQEAgLTk2NSw3ICs5NjYsNyBAQCB2b2lkIFhN
TERvY3VtZW50UGFyc2VyOjpjZGF0YUJsb2NrKGNvbnN0IHhtbENoYXIqIHMsIGludCBsZW4pCiAK
ICAgICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBDREFUQVNlY3Rp
b246OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcocywgbGVuKSk7CisgICAgUmVmUHRyPE5vZGU+IG5l
d05vZGUgPSBDREFUQVNlY3Rpb246OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzLCBsZW4p
KTsKICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpKQogICAg
ICAgICByZXR1cm47CiAgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKQEAg
LTk4NCw3ICs5ODUsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpjb21tZW50KGNvbnN0IHht
bENoYXIqIHMpCiAKICAgICBleGl0VGV4dCgpOwogCi0gICAgUmVmUHRyPE5vZGU+IG5ld05vZGUg
PSBDb21tZW50OjpjcmVhdGUobV9kb2MsIHRvU3RyaW5nKHMpKTsKKyAgICBSZWZQdHI8Tm9kZT4g
bmV3Tm9kZSA9IENvbW1lbnQ6OmNyZWF0ZShkb2N1bWVudCgpLCB0b1N0cmluZyhzKSk7CiAgICAg
bV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSk7CiAgICAgaWYgKG1fdmlldyAm
JiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKICAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7CkBAIC05
OTUsMTAgKzk5NiwxMCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydERvY3VtZW50KGNv
bnN0IHhtbENoYXIqIHZlcnNpb24sIGNvbnN0IHhtbENoYXIqIGVuYwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogCiAgICAgaWYgKHZlcnNpb24pCi0gICAgICAgIG1fZG9jLT5zZXRYTUxWZXJz
aW9uKHRvU3RyaW5nKHZlcnNpb24pLCBlYyk7Ci0gICAgbV9kb2MtPnNldFhNTFN0YW5kYWxvbmUo
c3RhbmRhbG9uZSA9PSAxLCBlYyk7IC8vIHBvc3NpYmxlIHZhbHVlcyBhcmUgMCwgMSwgYW5kIC0x
CisgICAgICAgIGRvY3VtZW50KCktPnNldFhNTFZlcnNpb24odG9TdHJpbmcodmVyc2lvbiksIGVj
KTsKKyAgICBkb2N1bWVudCgpLT5zZXRYTUxTdGFuZGFsb25lKHN0YW5kYWxvbmUgPT0gMSwgZWMp
OyAvLyBwb3NzaWJsZSB2YWx1ZXMgYXJlIDAsIDEsIGFuZCAtMQogICAgIGlmIChlbmNvZGluZykK
LSAgICAgICAgbV9kb2MtPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7CisgICAg
ICAgIGRvY3VtZW50KCktPnNldFhNTEVuY29kaW5nKHRvU3RyaW5nKGVuY29kaW5nKSk7CiB9CiAK
IHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZERvY3VtZW50KCkKQEAgLTEwMTksNyArMTAyMCw3
IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIq
IG5hbWUsIGNvbnN0IHhtbENoYXIqIGV4dGVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBpZiAobV9kb2MpIHsKKyAgICBpZiAoZG9jdW1lbnQoKSkgewogI2lmIEVOQUJMRShXTUwpIHx8
IEVOQUJMRShYSFRNTE1QKQogICAgICAgICBTdHJpbmcgZXh0SWQgPSB0b1N0cmluZyhleHRlcm5h
bElEKTsKICNlbmRpZgpAQCAtMTA0MCw3ICsxMDQxLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNl
cjo6aW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciogbmFtZSwgY29uc3QgeG1sQ2hhciogZXh0
ZXIKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGlmIChtX2RvYy0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGlmIChkb2N1bWVu
dCgpLT5pc1hIVE1MTVBEb2N1bWVudCgpKQogICAgICAgICAgICAgICAgIHNldElzWEhUTUxNUERv
Y3VtZW50KHRydWUpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHNldElzWEhU
TUxEb2N1bWVudCh0cnVlKTsKQEAgLTEwNDksNyArMTA1MCw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIq
IGV4dGVyCiAgICAgICAgIH0KICNlbmRpZgogCi0gICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1
bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFs
SUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+YWRkQ2hpbGQo
RG9jdW1lbnRUeXBlOjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5n
KGV4dGVybmFsSUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKICAgICB9CiB9CiAKQEAgLTEyNzUs
NyArMTI3Niw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmluaXRpYWxpemVQYXJzZXJDb250
ZXh0KGNvbnN0IGNoYXIqIGNodW5rKQogICAgIG1fc2F3WFNMVHJhbnNmb3JtID0gZmFsc2U7CiAg
ICAgbV9zYXdGaXJzdEVsZW1lbnQgPSBmYWxzZTsKIAotICAgIFhNTERvY3VtZW50UGFyc2VyU2Nv
cGUgc2NvcGUobV9kb2MtPmRvY0xvYWRlcigpKTsKKyAgICBYTUxEb2N1bWVudFBhcnNlclNjb3Bl
IHNjb3BlKGRvY3VtZW50KCktPmRvY0xvYWRlcigpKTsKICAgICBpZiAobV9wYXJzaW5nRnJhZ21l
bnQpCiAgICAgICAgIG1fY29udGV4dCA9IFhNTFBhcnNlckNvbnRleHQ6OmNyZWF0ZU1lbW9yeVBh
cnNlcigmc2F4LCB0aGlzLCBjaHVuayk7CiAgICAgZWxzZQpAQCAtMTI4NiwxMiArMTI4NywxMiBA
QCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpkb0VuZCgpCiB7CiAjaWYgRU5BQkxFKFhTTFQpCiAg
ICAgaWYgKG1fc2F3WFNMVHJhbnNmb3JtKSB7Ci0gICAgICAgIHZvaWQqIGRvYyA9IHhtbERvY1B0
ckZvclN0cmluZyhtX2RvYy0+ZG9jTG9hZGVyKCksIG1fb3JpZ2luYWxTb3VyY2VGb3JUcmFuc2Zv
cm0sIG1fZG9jLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgICAgIG1fZG9jLT5zZXRUcmFuc2Zvcm1T
b3VyY2UobmV3IFRyYW5zZm9ybVNvdXJjZShkb2MpKTsKKyAgICAgICAgdm9pZCogZG9jID0geG1s
RG9jUHRyRm9yU3RyaW5nKGRvY3VtZW50KCktPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNl
Rm9yVHJhbnNmb3JtLCBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgICAgIGRvY3Vt
ZW50KCktPnNldFRyYW5zZm9ybVNvdXJjZShuZXcgVHJhbnNmb3JtU291cmNlKGRvYykpOwogCi0g
ICAgICAgIG1fZG9jLT5zZXRQYXJzaW5nKGZhbHNlKTsgLy8gTWFrZSB0aGUgZG9jIHRoaW5rIGl0
J3MgZG9uZSwgc28gaXQgd2lsbCBhcHBseSB4c2wgc2hlZXRzLgotICAgICAgICBtX2RvYy0+dXBk
YXRlU3R5bGVTZWxlY3RvcigpOwotICAgICAgICBtX2RvYy0+c2V0UGFyc2luZyh0cnVlKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGlu
ayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KKyAgICAgICAgZG9jdW1l
bnQoKS0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgICAgICBkb2N1bWVudCgpLT5zZXRQYXJz
aW5nKHRydWUpOwogICAgICAgICBtX3BhcnNlclN0b3BwZWQgPSB0cnVlOwogICAgIH0KICNlbmRp
ZgpAQCAtMTMwMiw3ICsxMzAzLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQog
ICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAgICAgLy8gVGVsbCBsaWJ4bWwgd2UncmUgZG9uZS4K
ICAgICAgICAgewotICAgICAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29wZShtX2Rv
Yy0+ZG9jTG9hZGVyKCkpOworICAgICAgICAgICAgWE1MRG9jdW1lbnRQYXJzZXJTY29wZSBzY29w
ZShkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CiAgICAgICAgICAgICB4bWxQYXJzZUNodW5rKGNv
bnRleHQoKSwgMCwgMCwgMSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1s
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2Vy
LmNwcAppbmRleCA0MTcyZmRjY2YwOWY1NzFhZjZiOTQ2YjRkODhkMGYxYTkyNWE2M2U1Li45ZDVi
YTU5ODg3MzgwMjY2ZDYzMDQ2OWQxY2FiNjM4NzI2NGVjOWI3IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTERvY3Vt
ZW50UGFyc2VyLmNwcApAQCAtNjYsNyArNjYsNyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UK
IAogSFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTERvY3VtZW50KiBk
b2N1bWVudCwgYm9vbCByZXBvcnRFcnJvcnMpCi0gICAgOiBtX2RvY3VtZW50KGRvY3VtZW50KQor
ICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAgLCBtX3Rva2VuaXplcihuZXcgSFRN
TFRva2VuaXplcikKICAgICAsIG1fc2NyaXB0UnVubmVyKG5ldyBIVE1MU2NyaXB0UnVubmVyKGRv
Y3VtZW50LCB0aGlzKSkKICAgICAsIG1fdHJlZUJ1aWxkZXIobmV3IEhUTUxUcmVlQnVpbGRlciht
X3Rva2VuaXplci5nZXQoKSwgZG9jdW1lbnQsIHJlcG9ydEVycm9ycykpCkBAIC04MCw3ICs4MCw3
IEBAIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCog
ZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzCiAvLyBGSVhNRTogTWVtYmVyIHZhcmlhYmxlcyBz
aG91bGQgYmUgZ3JvdXBlZCBpbnRvIHNlbGYtaW5pdGlhbGl6aW5nIHN0cnVjdHMgdG8KIC8vIG1p
bmltaXplIGNvZGUgZHVwbGljYXRpb24gYmV0d2VlbiB0aGVzZSBjb25zdHJ1Y3RvcnMuCiBIVE1M
RG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFn
bWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi0g
ICAgOiBtX2RvY3VtZW50KGZyYWdtZW50LT5kb2N1bWVudCgpKQorICAgIDogRG9jdW1lbnRQYXJz
ZXIoZnJhZ21lbnQtPmRvY3VtZW50KCkpCiAgICAgLCBtX3Rva2VuaXplcihuZXcgSFRNTFRva2Vu
aXplcikKICAgICAsIG1fdHJlZUJ1aWxkZXIobmV3IEhUTUxUcmVlQnVpbGRlcihtX3Rva2VuaXpl
ci5nZXQoKSwgZnJhZ21lbnQsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQogICAgICwgbV9lbmRXYXNE
ZWxheWVkKGZhbHNlKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNl
ci5oIGIvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5oCmluZGV4IGM3NWE3ZmJiZDc3
NjI4NTExZDFiYWIzZjNiMmEwNDcwNjQxZDYxYjQuLmVhNTNmNDE1OTQzZGFiMGE1OTBjMjllMDhm
MDMyYzQ3ZWMyMjY2NmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTg0LDcgKzg0
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNv
dXJjZSopOwogCiAgICAgLy8gRXhwb3NlZCBmb3IgSFRNTFBhcnNlclNjaGVkdWxlcgotICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KICAgICB2b2lk
IHJlc3VtZVBhcnNpbmdBZnRlcllpZWxkKCk7CiAKIHByaXZhdGU6CkBAIC0xMTUsOSArMTE0LDYg
QEAgcHJpdmF0ZToKICAgICAvLyBXZSBob2xkIG1fdG9rZW4gaGVyZSBiZWNhdXNlIGl0IG1pZ2h0
IGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICBIVE1MVG9rZW4gbV90b2tlbjsKIAotICAgIC8v
IFdlIG11c3Qgc3VwcG9ydCBwYXJzaW5nIGludG8gYSBEb2N1bWVudCogYW5kIG5vdCBqdXN0IEhU
TUxEb2N1bWVudCoKLSAgICAvLyB0byBzdXBwb3J0IERvY3VtZW50RnJhZ21lbnQgKHdoaWNoIGhh
cyBhIERvY3VtZW50KikuCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgT3duUHRyPEhU
TUxUb2tlbml6ZXI+IG1fdG9rZW5pemVyOwogICAgIE93blB0cjxIVE1MU2NyaXB0UnVubmVyPiBt
X3NjcmlwdFJ1bm5lcjsKICAgICBPd25QdHI8SFRNTFRyZWVCdWlsZGVyPiBtX3RyZWVCdWlsZGVy
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAg
Yi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBkZDUwZmNi
ODYyNTk0NDMzODMyNWMxZDA3ODBjMjdhMDBkODQyMzkyLi45OGU0NjRiMjU3MmNkMzUzNDZkODQy
YzZjM2Y3NmU0NWRlNDU1ZjA1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyLmNwcApAQCAtMTQ3LDcgKzE0Nyw3IEBAIGlubGluZSB2b2lkIFRva2VuOjphZGRBdHRyaWJ1
dGUoQXRvbWljU3RyaW5nJiBhdHRyTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jLCBib29sIHJlcG9ydEVycm9ycykKLSAg
ICA6IERvY3VtZW50UGFyc2VyKCkKKyAgICA6IERvY3VtZW50UGFyc2VyKGRvYykKICAgICAsIG1f
YnVmZmVyKDApCiAgICAgLCBtX3NjcmlwdENvZGUoMCkKICAgICAsIG1fc2NyaXB0Q29kZVNpemUo
MCkKQEAgLTE1OCw3ICsxNTgsNiBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvYywgYm9vbCByZXBvcgogICAgICwgbV9o
YXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKGZhbHNlKQogICAgICwgbV90aW1lcih0aGlz
LCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKQogICAgICwgbV9leHRlcm5h
bFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0
ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKLSAgICAsIG1fZG9jKGRvYykKICAgICAsIG1fdHJlZUJ1
aWxkZXIobmV3IExlZ2FjeUhUTUxUcmVlQnVpbGRlcihkb2MsIHJlcG9ydEVycm9ycykpCiAgICAg
LCBtX2luV3JpdGUoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50KGZhbHNlKQpAQCAtMTY4LDcgKzE2
Nyw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
KEhUTUxEb2N1bWVudCogZG9jLCBib29sIHJlcG9yCiB9CiAKIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKEhUTUxWaWV3U291cmNlRG9jdW1lbnQqIGRv
YykKLSAgICA6IERvY3VtZW50UGFyc2VyKHRydWUpCisgICAgOiBEb2N1bWVudFBhcnNlcihkb2Ms
IHRydWUpCiAgICAgLCBtX2J1ZmZlcigwKQogICAgICwgbV9zY3JpcHRDb2RlKDApCiAgICAgLCBt
X3NjcmlwdENvZGVTaXplKDApCkBAIC0xNzksNyArMTc4LDYgQEAgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVudCog
ZG9jKQogICAgICwgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKGZhbHNlKQogICAg
ICwgbV90aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp0aW1lckZpcmVkKQog
ICAgICwgbV9leHRlcm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKLSAgICAsIG1fZG9jKGRvYykK
ICAgICAsIG1faW5Xcml0ZShmYWxzZSkKICAgICAsIG1fZnJhZ21lbnQoZmFsc2UpCiAgICAgLCBt
X3NjcmlwdGluZ1Blcm1pc3Npb24oRnJhZ21lbnRTY3JpcHRpbmdBbGxvd2VkKQpAQCAtMTg4LDcg
KzE4Niw4IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyKEhUTUxWaWV3U291cmNlRG9jdW1lbnQqIGRvYykKIH0KIAogTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZywg
RnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAgOiBt
X2J1ZmZlcigwKQorICAgIDogRG9jdW1lbnRQYXJzZXIoZnJhZy0+ZG9jdW1lbnQoKSkKKyAgICAs
IG1fYnVmZmVyKDApCiAgICAgLCBtX3NjcmlwdENvZGUoMCkKICAgICAsIG1fc2NyaXB0Q29kZVNp
emUoMCkKICAgICAsIG1fc2NyaXB0Q29kZUNhcGFjaXR5KDApCkBAIC0xOTgsNyArMTk3LDYgQEAg
TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1l
bnRGcmFnbWVudCogZnJhZywgRnJhZ20KICAgICAsIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHls
ZXNoZWV0cyhmYWxzZSkKICAgICAsIG1fdGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6dGltZXJGaXJlZCkKICAgICAsIG1fZXh0ZXJuYWxTY3JpcHRzVGltZXIodGhpcywgJkxl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c1RpbWVyRmlyZWQp
Ci0gICAgLCBtX2RvYyhmcmFnLT5kb2N1bWVudCgpKQogICAgICwgbV90cmVlQnVpbGRlcihuZXcg
TGVnYWN5SFRNTFRyZWVCdWlsZGVyKGZyYWcsIHNjcmlwdGluZ1Blcm1pc3Npb24pKQogICAgICwg
bV9pbldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudCh0cnVlKQpAQCAtMjYyLDcgKzI2MCw3
IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpiZWdpbigpCiAgICAgbV9jdXJyZW50
VGFnU3RhcnRMaW5lTnVtYmVyID0gMDsKICAgICBtX3N0YXRlLnNldEZvcmNlU3luY2hyb25vdXMo
ZmFsc2UpOwogCi0gICAgUGFnZSogcGFnZSA9IG1fZG9jLT5wYWdlKCk7CisgICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKICAgICBpZiAocGFnZSAmJiBwYWdlLT5oYXNDdXN0b21I
VE1MVG9rZW5pemVyVGltZURlbGF5KCkpCiAgICAgICAgIG1fdG9rZW5pemVyVGltZURlbGF5ID0g
cGFnZS0+Y3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgpOwogICAgIGVsc2UKQEAgLTQyNCwx
OCArNDIyLDE4IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOjpzY3JpcHRIYW5kbGVyKFN0YXRlIHN0CiAKICAgICAvLyAoQnVnemlsbGEg
MzgzNykgU2NyaXB0cyBmb2xsb3dpbmcgYSBmcmFtZXNldCBlbGVtZW50IHNob3VsZCBub3QgZXhl
Y3V0ZSBvciwKICAgICAvLyBpbiB0aGUgY2FzZSBvZiBleHRlcm4gc2NyaXB0cywgZXZlbiBsb2Fk
LgotICAgIGJvb2wgZm9sbG93aW5nRnJhbWVzZXQgPSAobV9kb2MtPmJvZHkoKSAmJiBtX2RvYy0+
Ym9keSgpLT5oYXNUYWdOYW1lKGZyYW1lc2V0VGFnKSk7CisgICAgYm9vbCBmb2xsb3dpbmdGcmFt
ZXNldCA9IChkb2N1bWVudCgpLT5ib2R5KCkgJiYgZG9jdW1lbnQoKS0+Ym9keSgpLT5oYXNUYWdO
YW1lKGZyYW1lc2V0VGFnKSk7CiAKICAgICBDYWNoZWRTY3JpcHQqIGNzID0gMDsKICAgICAvLyBk
b24ndCBsb2FkIGV4dGVybmFsIHNjcmlwdHMgZm9yIHN0YW5kYWxvbmUgZG9jdW1lbnRzIChmb3Ig
bm93KQogICAgIGlmICghaW5WaWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgIGlmICghbV9zY3Jp
cHRUYWdTcmNBdHRyVmFsdWUuaXNFbXB0eSgpICYmIG1fZG9jLT5mcmFtZSgpKSB7CisgICAgICAg
IGlmICghbV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUuaXNFbXB0eSgpICYmIGRvY3VtZW50KCktPmZy
YW1lKCkpIHsKICAgICAgICAgICAgIC8vIGZvcmdldCB3aGF0IHdlIGp1c3QgZ290OyBsb2FkIGZy
b20gc3JjIHVybCBpbnN0ZWFkCiAgICAgICAgICAgICBpZiAoIW1fdHJlZUJ1aWxkZXItPnNraXBN
b2RlKCkgJiYgIWZvbGxvd2luZ0ZyYW1lc2V0KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIHBh
cnNlciBtaWdodCBoYXZlIGJlZW4gc3RvcHBlZCBieSBmb3IgZXhhbXBsZSBhIHdpbmRvdy5jbG9z
ZSBjYWxsIGluIGFuIGVhcmxpZXIgc2NyaXB0LgogICAgICAgICAgICAgICAgIC8vIElmIHNvLCB3
ZSBkb24ndCB3YW50IHRvIGxvYWQgc2NyaXB0cy4KICAgICAgICAgICAgICAgICBpZiAoIW1fcGFy
c2VyU3RvcHBlZCAmJiBtX3NjcmlwdE5vZGUtPmRpc3BhdGNoQmVmb3JlTG9hZEV2ZW50KG1fc2Ny
aXB0VGFnU3JjQXR0clZhbHVlKSAmJgotICAgICAgICAgICAgICAgICAgICAoY3MgPSBtX2RvYy0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQobV9zY3JpcHRUYWdTcmNBdHRyVmFsdWUsIG1fc2Ny
aXB0VGFnQ2hhcnNldEF0dHJWYWx1ZSkpKQorICAgICAgICAgICAgICAgICAgICAoY3MgPSBkb2N1
bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1
ZSwgbV9zY3JpcHRUYWdDaGFyc2V0QXR0clZhbHVlKSkpCiAgICAgICAgICAgICAgICAgICAgIG1f
cGVuZGluZ1NjcmlwdHMuYXBwZW5kKGNzKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIG1fc2NyaXB0Tm9kZSA9IDA7CkBAIC00NDcsNyArNDQ1LDcgQEAgTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlw
dEhhbmRsZXIoU3RhdGUgc3QKICAgICAgICAgICAgIGRvU2NyaXB0RXhlYyA9IG1fc2NyaXB0Tm9k
ZS0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlwdCgpOwogI2lmIEVOQUJMRShYSFRNTE1QKQogICAg
ICAgICAgICAgaWYgKCFkb1NjcmlwdEV4ZWMpCi0gICAgICAgICAgICAgICAgbV9kb2MtPnNldFNo
b3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1lbnQodHJ1ZSk7CisgICAgICAgICAgICAgICAgZG9jdW1l
bnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKICNlbmRpZgogICAg
ICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKICAgICAgICAgfQpAQCAtNTAzLDcgKzUwMSw3IEBA
IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
OjpzY3JpcHRIYW5kbGVyKFN0YXRlIHN0CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcHJlcGVuZGluZ1NyYyA9IG1fc3JjOwogICAgICAgICAgICAgc2V0U3JjKFNlZ21lbnRlZFN0
cmluZygpKTsKLSAgICAgICAgICAgIHN0YXRlID0gc2NyaXB0RXhlY3V0aW9uKFNjcmlwdFNvdXJj
ZUNvZGUoc2NyaXB0U3RyaW5nLCBtX2RvYy0+ZnJhbWUoKSA/IG1fZG9jLT5mcmFtZSgpLT5kb2N1
bWVudCgpLT51cmwoKSA6IEtVUkwoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOworICAgICAgICAgICAg
c3RhdGUgPSBzY3JpcHRFeGVjdXRpb24oU2NyaXB0U291cmNlQ29kZShzY3JpcHRTdHJpbmcsIGRv
Y3VtZW50KCktPmZyYW1lKCkgPyBkb2N1bWVudCgpLT5mcmFtZSgpLT5kb2N1bWVudCgpLT51cmwo
KSA6IEtVUkwoKSwgc3RhcnRMaW5lKSwgc3RhdGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC01
MzMsNyArNTMxLDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI6OnNjcmlwdEhhbmRsZXIoU3RhdGUgc3QKICNpZiBQUkVMT0FEX1NDQU5O
RVJfRU5BQkxFRAogICAgIGlmICghbV9wZW5kaW5nU2NyaXB0cy5pc0VtcHR5KCkgJiYgIW1fZXhl
Y3V0aW5nU2NyaXB0KSB7CiAgICAgICAgIGlmICghbV9wcmVsb2FkU2Nhbm5lcikKLSAgICAgICAg
ICAgIG1fcHJlbG9hZFNjYW5uZXIuc2V0KG5ldyBMZWdhY3lQcmVsb2FkU2Nhbm5lcihtX2RvYykp
OworICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IExlZ2FjeVByZWxvYWRTY2Fu
bmVyKGRvY3VtZW50KCkpKTsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyLT5pblByb2dy
ZXNzKCkpIHsKICAgICAgICAgICAgIG1fcHJlbG9hZFNjYW5uZXItPmJlZ2luKCk7CiAgICAgICAg
ICAgICBtX3ByZWxvYWRTY2FubmVyLT53cml0ZShtX3BlbmRpbmdTcmMpOwpAQCAtNTQ3LDcgKzU0
NSw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpzY3JpcHRIYW5kbGVyKFN0YXRlIHN0CiAKIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
cjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRFeGVjdXRpb24oY29uc3Qg
U2NyaXB0U291cmNlQ29kZSYgc291cmNlQ29kZSwgU3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKG1f
ZnJhZ21lbnQgfHwgIW1fZG9jLT5mcmFtZSgpKQorICAgIGlmIChtX2ZyYWdtZW50IHx8ICFkb2N1
bWVudCgpLT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gc3RhdGU7CiAgICAgbV9leGVjdXRpbmdT
Y3JpcHQrKzsKIApAQCAtNTU2LDcgKzU1NCw3IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRFeGVjdXRpb24oY29uc3QKICAg
ICBtX2N1cnJlbnRQcmVwZW5kaW5nU3JjID0gJnByZXBlbmRpbmdTcmM7CiAKICAgICBtX3N0YXRl
ID0gc3RhdGU7Ci0gICAgbV9kb2MtPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KHNv
dXJjZUNvZGUpOworICAgIGRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KHNvdXJjZUNvZGUpOwogICAgIHN0YXRlID0gbV9zdGF0ZTsKIAogICAgIHN0YXRlLnNldEFs
bG93WWllbGQodHJ1ZSk7CkBAIC01ODQsNyArNTgyLDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEV4ZWN1dGlvbihjb25z
dAogI2lmIFBSRUxPQURfU0NBTk5FUl9FTkFCTEVECiAgICAgICAgICAgICAvLyBXZSBhcmUgc3R1
Y2sgd2FpdGluZyBmb3IgYW5vdGhlciBzY3JpcHQuIExldHMgY2hlY2sgdGhlIHNvdXJjZSB0aGF0
CiAgICAgICAgICAgICAvLyB3YXMganVzdCBkb2N1bWVudC53cml0ZSgpbiBmb3IgYW55dGhpbmcg
dG8gbG9hZC4KLSAgICAgICAgICAgIExlZ2FjeVByZWxvYWRTY2FubmVyIGRvY3VtZW50V3JpdGVQ
cmVsb2FkU2Nhbm5lcihtX2RvYyk7CisgICAgICAgICAgICBMZWdhY3lQcmVsb2FkU2Nhbm5lciBk
b2N1bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIoZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBkb2N1
bWVudFdyaXRlUHJlbG9hZFNjYW5uZXIuYmVnaW4oKTsKICAgICAgICAgICAgIGRvY3VtZW50V3Jp
dGVQcmVsb2FkU2Nhbm5lci53cml0ZShwcmVwZW5kaW5nU3JjKTsKICAgICAgICAgICAgIGRvY3Vt
ZW50V3JpdGVQcmVsb2FkU2Nhbm5lci5lbmQoKTsKQEAgLTExNDAsNyArMTEzOCw3IEBAIExlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwYXJz
ZVRhZyhTZWdtZW50ZWRTdHJpCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXggYnVnIDM0
MzAyIGF0IGtkZS5idWdzLm9yZy4gIEdvIGFoZWFkIGFuZCB0cmVhdAogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gPCEtLT4gYXMgYSB2YWxpZCBjb21tZW50LCBzaW5jZSBib3RoIG1vemlsbGEg
YW5kIElFIG9uIHdpbmRvd3MKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbiBoYW5kbGUg
dGhpcyBjYXNlLiAgT25seSBkbyB0aGlzIGluIHF1aXJrcyBtb2RlLiAtZHdoCi0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNyYy5pc0VtcHR5KCkgJiYgKnNyYyA9PSAnPicgJiYgbV9kb2Mt
PmluQ29tcGF0TW9kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNyYy5pc0Vt
cHR5KCkgJiYgKnNyYyA9PSAnPicgJiYgZG9jdW1lbnQoKS0+aW5Db21wYXRNb2RlKCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5zZXRJbkNvbW1lbnQoZmFsc2UpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy5hZHZhbmNlUGFzdE5vbk5ld2xpbmUoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNyYy5pc0VtcHR5KCkpCkBAIC0xNDg1LDkg
KzE0ODMsOSBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6cGFyc2VUYWcoU2VnbWVudGVkU3RyaQogICAgICAgICAgICAgICAgIG1fc2Ny
aXB0VGFnU3JjQXR0clZhbHVlID0gU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgbV9zY3JpcHRU
YWdDaGFyc2V0QXR0clZhbHVlID0gU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fY3Vy
cmVudFRva2VuLmF0dHJzICYmICFtX2ZyYWdtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX2RvYy0+ZnJhbWUoKSAmJiBtX2RvYy0+ZnJhbWUoKS0+c2NyaXB0KCktPmNhbkV4ZWN1dGVT
Y3JpcHRzKE5vdEFib3V0VG9FeGVjdXRlU2NyaXB0KSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKSAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5zY3JpcHQoKS0+
Y2FuRXhlY3V0ZVNjcmlwdHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoKGEgPSBtX2N1cnJlbnRUb2tlbi5hdHRycy0+Z2V0QXR0cmlidXRl
SXRlbShzcmNBdHRyKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRUYWdT
cmNBdHRyVmFsdWUgPSBtX2RvYy0+Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGEtPnZh
bHVlKCkpKS5zdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdFRh
Z1NyY0F0dHJWYWx1ZSA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKGRlcHJlY2F0ZWRQYXJzZVVS
TChhLT52YWx1ZSgpKSkuc3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0xNTg3LDggKzE1ODUsOCBAQCBpbmxpbmUgYm9v
bCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnRpbnVlUHJvY2Vzc2luZyhpbnQmIHByb2Nl
c3NlZENvdW50LCBkbwogICAgICAgICAgICAgLyogRklYTUU6IFdlJ2QgbGlrZSB0byB5aWVsZCBh
Z2dyZXNzaXZlbHkgdG8gZ2l2ZSBzdHlsZXNoZWV0cyB0aGUgb3Bwb3J0dW5pdHkgdG8KICAgICAg
ICAgICAgICAgIGxvYWQsIGJ1dCB0aGlzIGh1cnRzIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb24gc2xv
d2VyIG1hY2hpbmVzLiAgRm9yIG5vdyB0dXJuIHRoaXMKICAgICAgICAgICAgICAgIG9mZi4KLSAg
ICAgICAgICAgIHx8ICghbV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpICYmCi0gICAgICAg
ICAgICAgICAgKG1fZG9jLT5kb2N1bWVudEVsZW1lbnQoKS0+aWQoKSAhPSBJRF9IVE1MIHx8IG1f
ZG9jLT5ib2R5KCkpKSkgeyovCisgICAgICAgICAgICB8fCAoIWRvY3VtZW50KCktPmhhdmVTdHls
ZXNoZWV0c0xvYWRlZCgpICYmCisgICAgICAgICAgICAgICAgKGRvY3VtZW50KCktPmRvY3VtZW50
RWxlbWVudCgpLT5pZCgpICE9IElEX0hUTUwgfHwgZG9jdW1lbnQoKS0+Ym9keSgpKSkpIHsqLwog
ICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhlIHRpbWVyIHRvIGtlZXAgcHJvY2Vzc2luZyBhcyBz
b29uIGFzIHBvc3NpYmxlLgogICAgICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7CiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNzEyLDcgKzE3MTAsNyBAQCBBTFdBWVNfSU5M
SU5FIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjphZHZhbmNlKFN0YXRlJiBzdGF0ZSkK
IHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp3aWxsV3JpdGVIVE1MKGNvbnN0IFNlZ21l
bnRlZFN0cmluZyYgc291cmNlKQogewogICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAg
ICBpZiAoSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jLT5pbnNw
ZWN0b3JUaW1lbGluZUFnZW50KCkpCisgICAgICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50
KiB0aW1lbGluZUFnZW50ID0gZG9jdW1lbnQoKS0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQog
ICAgICAgICAgICAgdGltZWxpbmVBZ2VudC0+d2lsbFdyaXRlSFRNTChzb3VyY2UubGVuZ3RoKCks
IG1fbGluZU51bWJlcik7CiAgICAgI2VuZGlmCiB9CkBAIC0xNzIwLDcgKzE3MTgsNyBAQCB2b2lk
IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d2lsbFdyaXRlSFRNTChjb25zdCBTZWdtZW50ZWRT
dHJpbmcmIHNvdXJjZSkKIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpkaWRXcml0ZUhU
TUwoKQogewogICAgICNpZiBFTkFCTEUoSU5TUEVDVE9SKQotICAgICAgICBpZiAoSW5zcGVjdG9y
VGltZWxpbmVBZ2VudCogdGltZWxpbmVBZ2VudCA9IG1fZG9jLT5pbnNwZWN0b3JUaW1lbGluZUFn
ZW50KCkpCisgICAgICAgIGlmIChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50
ID0gZG9jdW1lbnQoKS0+aW5zcGVjdG9yVGltZWxpbmVBZ2VudCgpKQogICAgICAgICAgICAgdGlt
ZWxpbmVBZ2VudC0+ZGlkV3JpdGVIVE1MKG1fbGluZU51bWJlcik7CiAgICAgI2VuZGlmCiB9CkBA
IC0xNzcwLDcgKzE3NjgsNyBAQCB2b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6d3JpdGUo
Y29uc3QgU2VnbWVudGVkU3RyaW5nJiBzdHIsIGJvb2wgYXBwZW5kRGF0YQogCiAgICAgd2lsbFdy
aXRlSFRNTChzb3VyY2UpOwogCi0gICAgRnJhbWUqIGZyYW1lID0gbV9kb2MtPmZyYW1lKCk7Cisg
ICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBTdGF0ZSBzdGF0ZSA9
IG1fc3RhdGU7CiAgICAgaW50IHByb2Nlc3NlZENvdW50ID0gMDsKICAgICBkb3VibGUgc3RhcnRU
aW1lID0gY3VycmVudFRpbWUoKTsKQEAgLTE4MDEsOCArMTc5OSw4IEBAIHZvaWQgTGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjpzdG9wUGFyc2luZygpCiAgICAgLy8gRklYTUU6IFdoeSBpcyBMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXIgdGhlIG9ubHkgRG9jdW1lbnRQYXJzZXIgd2hpY2ggY2FsbHMg
Y2hlY2tDb21wbGV0ZWQ/CiAgICAgLy8gVGhlIEZyYW1lTG9hZGVyIG5lZWRzIHRvIGtub3cgdGhh
dCB0aGUgcGFyc2VyIGhhcyBmaW5pc2hlZCB3aXRoIGl0cyBkYXRhLAogICAgIC8vIHJlZ2FyZGxl
c3Mgb2Ygd2hldGhlciBpdCBoYXBwZW5lZCBuYXR1cmFsbHkgb3IgZHVlIHRvIG1hbnVhbCBpbnRl
cnZlbnRpb24uCi0gICAgaWYgKCFtX2ZyYWdtZW50ICYmIG1fZG9jLT5mcmFtZSgpKQotICAgICAg
ICBtX2RvYy0+ZnJhbWUoKS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CisgICAgaWYgKCFt
X2ZyYWdtZW50ICYmIGRvY3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgIGRvY3VtZW50KCktPmZy
YW1lKCktPmxvYWRlcigpLT5jaGVja0NvbXBsZXRlZCgpOwogfQogCiBib29sIExlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0RhdGEoKSBjb25zdApAQCAtMTgxMiw3ICsxODEwLDcg
QEAgYm9vbCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NpbmdEYXRhKCkgY29uc3QK
IAogdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQoVGltZXI8TGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyPiopCiB7Ci0gICAgaWYgKG1fZG9jLT52aWV3KCkgJiYgbV9kb2Mt
PnZpZXcoKS0+bGF5b3V0UGVuZGluZygpICYmICFtX2RvYy0+bWluaW11bUxheW91dERlbGF5KCkp
IHsKKyAgICBpZiAoZG9jdW1lbnQoKS0+dmlldygpICYmIGRvY3VtZW50KCktPnZpZXcoKS0+bGF5
b3V0UGVuZGluZygpICYmICFkb2N1bWVudCgpLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewogICAg
ICAgICAvLyBSZXN0YXJ0IHRoZSB0aW1lciBhbmQgbGV0IGxheW91dCB3aW4uICBUaGlzIGlzIGJh
c2ljYWxseSBhIHdheSBvZiBlbnN1cmluZyB0aGF0IHRoZSBsYXlvdXQKICAgICAgICAgLy8gdGlt
ZXIgaGFzIGhpZ2hlciBwcmlvcml0eSB0aGFuIG91ciB0aW1lci4KICAgICAgICAgbV90aW1lci5z
dGFydE9uZVNob3QoMCk7CkBAIC0xODQ0LDcgKzE4NDIsNyBAQCB2b2lkIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6ZW5kKCkKICAgICBpZiAoIWluVmlld1NvdXJjZU1vZGUoKSkKICAgICAgICAg
bV90cmVlQnVpbGRlci0+ZmluaXNoZWQoKTsKICAgICBlbHNlCi0gICAgICAgIG1fZG9jLT5maW5p
c2hlZFBhcnNpbmcoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9
CiAKIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpmaW5pc2goKQpAQCAtMTkwOSw3ICsx
OTA3LDcgQEAgUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nl
c3NUb2tlbigpCiAgICAgICAgIGlmIChOYW1lZE5vZGVNYXAqIG1hcCA9IG1fY3VycmVudFRva2Vu
LmF0dHJzLmdldCgpKQogICAgICAgICAgICAgbWFwLT5zaHJpbmtUb0xlbmd0aCgpOwogICAgICAg
ICBpZiAoaW5WaWV3U291cmNlTW9kZSgpKQotICAgICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZp
ZXdTb3VyY2VEb2N1bWVudCo+KG1fZG9jKS0+YWRkVmlld1NvdXJjZVRva2VuKCZtX2N1cnJlbnRU
b2tlbik7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlld1NvdXJjZURvY3VtZW50Kj4o
ZG9jdW1lbnQoKSktPmFkZFZpZXdTb3VyY2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAvLyBwYXNzIHRoZSB0b2tlbiBvdmVyIHRvIHRoZSBwYXJzZXIs
IHRoZSBwYXJzZXIgRE9FUyBOT1QgZGVsZXRlIHRoZSB0b2tlbgogICAgICAgICAgICAgbiA9IG1f
dHJlZUJ1aWxkZXItPnBhcnNlVG9rZW4oJm1fY3VycmVudFRva2VuKTsKQEAgLTE5MjIsNyArMTky
MCw3IEBAIFBhc3NSZWZQdHI8Tm9kZT4gTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNz
VG9rZW4oKQogdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NEb2N0eXBlVG9r
ZW4oKQogewogICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgIHN0YXRpY19jYXN0
PEhUTUxWaWV3U291cmNlRG9jdW1lbnQqPihtX2RvYyktPmFkZFZpZXdTb3VyY2VEb2N0eXBlVG9r
ZW4oJm1fZG9jdHlwZVRva2VuKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZXdTb3VyY2VE
b2N1bWVudCo+KGRvY3VtZW50KCkpLT5hZGRWaWV3U291cmNlRG9jdHlwZVRva2VuKCZtX2RvY3R5
cGVUb2tlbik7CiAgICAgZWxzZQogICAgICAgICBtX3RyZWVCdWlsZGVyLT5wYXJzZURvY3R5cGVU
b2tlbigmbV9kb2N0eXBlVG9rZW4pOwogfQpAQCAtMTk3OCw3ICsxOTc2LDcgQEAgdm9pZCBMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OmVubGFyZ2VTY3JpcHRCdWZmZXIoaW50IGxlbikKIAogdm9p
ZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVTY3JpcHRzV2FpdGluZ0ZvclN0eWxl
c2hlZXRzKCkKIHsKLSAgICBBU1NFUlQobV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpKTsK
KyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOwogCiAgICAg
aWYgKG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cykKICAgICAgICAgbm90aWZ5Rmlu
aXNoZWQoMCk7CkBAIC0xOTk1LDcgKzE5OTMsNyBAQCB2b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBh
cnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2NyaXB0c0lmUmVhZHkoKQogCiAgICAgLy8gTWFrZSBleHRl
cm5hbCBzY3JpcHRzIHdhaXQgZm9yIGV4dGVybmFsIHN0eWxlc2hlZXRzLgogICAgIC8vIEZJWE1F
OiBUaGlzIG5lZWRzIHRvIGJlIGRvbmUgZm9yIGlubGluZSBzY3JpcHRzIHRvby4KLSAgICBtX2hh
c1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMgPSAhbV9kb2MtPmhhdmVTdHlsZXNoZWV0c0xv
YWRlZCgpOworICAgIG1faGFzU2NyaXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9ICFkb2N1bWVu
dCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKTsKICAgICBpZiAobV9oYXNTY3JpcHRzV2FpdGlu
Z0ZvclN0eWxlc2hlZXRzKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMjYsNyArMjAyNCw3IEBA
IHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZS
ZWFkeSgpCiAgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IHNjcmlwdEV4ZWN1dGlvbihzb3VyY2VD
b2RlLCBtX3N0YXRlKTsKICNpZiBFTkFCTEUoWEhUTUxNUCkKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVl
KTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgpLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRF
bGVtZW50KHRydWUpOwogI2VuZGlmCiAgICAgICAgICAgICBuLT5kaXNwYXRjaEV2ZW50KEV2ZW50
OjpjcmVhdGUoZXZlbnROYW1lcygpLmxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKSk7CiAgICAgICAg
IH0KQEAgLTIwNTcsNyArMjA1NSw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpl
eGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpCiAKIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZChUaW1lcjxMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI+KikKIHsKLSAgICBpZiAobV9kb2MtPnZpZXcoKSAmJiBtX2RvYy0+dmll
dygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewor
ICAgIGlmIChkb2N1bWVudCgpLT52aWV3KCkgJiYgZG9jdW1lbnQoKS0+dmlldygpLT5sYXlvdXRQ
ZW5kaW5nKCkgJiYgIWRvY3VtZW50KCktPm1pbmltdW1MYXlvdXREZWxheSgpKSB7CiAgICAgICAg
IC8vIFJlc3RhcnQgdGhlIHRpbWVyIGFuZCBkbyBsYXlvdXQgZmlyc3QuCiAgICAgICAgIG1fZXh0
ZXJuYWxTY3JpcHRzVGltZXIuc3RhcnRPbmVTaG90KDApOwogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmggYi9XZWJDb3Jl
L2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggNDY4ZWY3MzNlY2RmZTc5OTlk
ZTc4YmQwZmM4ZTcyN2I0NmNkNjlhYi4uMWE5MmVjZDI0NzhkMjUwYTQzYjJlZjIzOTBmY2ZjODA0
M2VlNWY5ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNl
ci5oCisrKyBiL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtNDMx
LDcgKzQzMSw2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgaW50IG1fY0J1ZmZlclBvczsKIAog
ICAgIFNlZ21lbnRlZFN0cmluZyBtX3NyYzsKLSAgICBEb2N1bWVudCogbV9kb2M7CiAgICAgT3du
UHRyPExlZ2FjeUhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQnVpbGRlcjsKICAgICBib29sIG1faW5X
cml0ZTsKICAgICBib29sIG1fZnJhZ21lbnQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9J
bWFnZURvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCmluZGV4
IDA5YTAzMTEwY2YzYmZjNzFmN2YzYzJkZmYzMGFjMThmMGEwN2RlNzcuLjhiNjU0MmFkYTQzOTMw
NTIyMjI3MzQ1NDE4YmQxMDI4YmFmZTFlYmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0lt
YWdlRG9jdW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCkBA
IC03Niw5ICs3NiwxMiBAQCBwcml2YXRlOgogICAgIEltYWdlRG9jdW1lbnQqIG1fZG9jOwogfTsK
ICAgICAKLWNsYXNzIEltYWdlVG9rZW5pemVyIDogcHVibGljIERvY3VtZW50UGFyc2VyIHsKK2Ns
YXNzIEltYWdlRG9jdW1lbnRQYXJzZXIgOiBwdWJsaWMgRG9jdW1lbnRQYXJzZXIgewogcHVibGlj
OgotICAgIEltYWdlVG9rZW5pemVyKEltYWdlRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2MpIHt9
CisgICAgSW1hZ2VEb2N1bWVudFBhcnNlcihJbWFnZURvY3VtZW50KiBkb2MpCisgICAgICAgIDog
RG9jdW1lbnRQYXJzZXIoZG9jKQorICAgIHsKKyAgICB9CiAKICAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmluaXNoKCk7CkBAIC04OSw3ICs5MiwxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIHdyaXRlUmF3RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKTsKIAogcHJpdmF0ZToK
LSAgICBJbWFnZURvY3VtZW50KiBtX2RvYzsKKyAgICBJbWFnZURvY3VtZW50KiBpbWFnZURvY3Vt
ZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxJbWFnZURvY3Vt
ZW50Kj4oZG9jdW1lbnQoKSk7CisgICAgfQogfTsKIAogY2xhc3MgSW1hZ2VEb2N1bWVudEVsZW1l
bnQgOiBwdWJsaWMgSFRNTEltYWdlRWxlbWVudCB7CkBAIC0xMjIsNjcgKzEyOCw2NyBAQCBzdGF0
aWMgZmxvYXQgcGFnZVpvb21GYWN0b3IoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIHJldHVybiB2
aWV3ID8gdmlldy0+cGFnZVpvb21GYWN0b3IoKSA6IDE7CiB9CiAKLXZvaWQgSW1hZ2VUb2tlbml6
ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpCit2b2lkIEltYWdlRG9jdW1l
bnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpCiB7CiAgICAgLy8g
PGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTM5Nz46IEpTIGNvZGUg
Y2FuIGFsd2F5cyBjYWxsIGRvY3VtZW50LndyaXRlLCB3ZSBuZWVkIHRvIGhhbmRsZSBpdC4KICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi1ib29sIEltYWdlVG9rZW5pemVyOjp3cml0ZVJhd0Rh
dGEoY29uc3QgY2hhciosIGludCkKK2Jvb2wgSW1hZ2VEb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdE
YXRhKGNvbnN0IGNoYXIqLCBpbnQpCiB7Ci0gICAgRnJhbWUqIGZyYW1lID0gbV9kb2MtPmZyYW1l
KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKTsKICAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKICAgICBpZiAoIWZyYW1lLT5sb2FkZXIo
KS0+Y2xpZW50KCktPmFsbG93SW1hZ2VzKCFzZXR0aW5ncyB8fCBzZXR0aW5ncy0+YXJlSW1hZ2Vz
RW5hYmxlZCgpKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIENhY2hlZEltYWdl
KiBjYWNoZWRJbWFnZSA9IG1fZG9jLT5jYWNoZWRJbWFnZSgpOworCisgICAgQ2FjaGVkSW1hZ2Uq
IGNhY2hlZEltYWdlID0gaW1hZ2VEb2N1bWVudCgpLT5jYWNoZWRJbWFnZSgpOwogICAgIGNhY2hl
ZEltYWdlLT5kYXRhKGZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291
cmNlRGF0YSgpLCBmYWxzZSk7CiAKLSAgICBtX2RvYy0+aW1hZ2VDaGFuZ2VkKCk7CisgICAgaW1h
Z2VEb2N1bWVudCgpLT5pbWFnZUNoYW5nZWQoKTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKLXZvaWQgSW1hZ2VUb2tlbml6ZXI6OmZpbmlzaCgpCit2b2lkIEltYWdlRG9jdW1lbnRQYXJz
ZXI6OmZpbmlzaCgpCiB7Ci0gICAgaWYgKCFtX3BhcnNlclN0b3BwZWQgJiYgbV9kb2MtPmltYWdl
RWxlbWVudCgpKSB7Ci0gICAgICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IG1fZG9jLT5j
YWNoZWRJbWFnZSgpOwotICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gbV9kb2Mt
PmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCk7
CisgICAgaWYgKCFtX3BhcnNlclN0b3BwZWQgJiYgaW1hZ2VEb2N1bWVudCgpLT5pbWFnZUVsZW1l
bnQoKSkgeworICAgICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBpbWFnZURvY3VtZW50
KCktPmNhY2hlZEltYWdlKCk7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSBk
b2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+bWFpblJlc291
cmNlRGF0YSgpOwogCiAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBtdWx0aXBhcnQgaW1hZ2UsIG1h
a2UgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHBhcnQsIHNpbmNlIHRoZSByZXNvdXJjZSBkYXRhCiAg
ICAgICAgIC8vIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgcGFydC4KLSAgICAgICAg
aWYgKG1fZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5n
TXVsdGlwYXJ0Q29udGVudCgpKQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9h
ZGVyKCktPmRvY3VtZW50TG9hZGVyKCktPmlzTG9hZGluZ011bHRpcGFydENvbnRlbnQoKSkKICAg
ICAgICAgICAgIGRhdGEgPSBkYXRhLT5jb3B5KCk7CiAKICAgICAgICAgY2FjaGVkSW1hZ2UtPmRh
dGEoZGF0YS5yZWxlYXNlKCksIHRydWUpOwogICAgICAgICBjYWNoZWRJbWFnZS0+ZmluaXNoKCk7
CiAKLSAgICAgICAgY2FjaGVkSW1hZ2UtPnNldFJlc3BvbnNlKG1fZG9jLT5mcmFtZSgpLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+cmVzcG9uc2UoKSk7CisgICAgICAgIGNhY2hlZEltYWdl
LT5zZXRSZXNwb25zZShkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2Fk
ZXIoKS0+cmVzcG9uc2UoKSk7CiAKLSAgICAgICAgSW50U2l6ZSBzaXplID0gY2FjaGVkSW1hZ2Ut
PmltYWdlU2l6ZShwYWdlWm9vbUZhY3RvcihtX2RvYykpOworICAgICAgICBJbnRTaXplIHNpemUg
PSBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKGRvY3VtZW50KCkpKTsKICAg
ICAgICAgaWYgKHNpemUud2lkdGgoKSkgewogICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdGl0
bGUsIHdlIHVzZSB0aGUgZGVjb2RlZCBmaWxlbmFtZSBvZiB0aGUgcmVzb3VyY2UsIGZhbGxpbmcK
ICAgICAgICAgICAgIC8vIGJhY2sgb24gdGhlIChkZWNvZGVkKSBob3N0bmFtZSBpZiB0aGVyZSBp
cyBubyBwYXRoLgotICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZGVjb2RlVVJMRXNjYXBl
U2VxdWVuY2VzKG1fZG9jLT51cmwoKS5sYXN0UGF0aENvbXBvbmVudCgpKTsKKyAgICAgICAgICAg
IFN0cmluZyBmaWxlTmFtZSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhkb2N1bWVudCgpLT51
cmwoKS5sYXN0UGF0aENvbXBvbmVudCgpKTsKICAgICAgICAgICAgIGlmIChmaWxlTmFtZS5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgZmlsZU5hbWUgPSBtX2RvYy0+dXJsKCkuaG9zdCgpOwot
ICAgICAgICAgICAgbV9kb2MtPnNldFRpdGxlKGltYWdlVGl0bGUoZmlsZU5hbWUsIHNpemUpKTsK
KyAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IGRvY3VtZW50KCktPnVybCgpLmhvc3QoKTsKKyAg
ICAgICAgICAgIGRvY3VtZW50KCktPnNldFRpdGxlKGltYWdlVGl0bGUoZmlsZU5hbWUsIHNpemUp
KTsKICAgICAgICAgfQogCi0gICAgICAgIG1fZG9jLT5pbWFnZUNoYW5nZWQoKTsKKyAgICAgICAg
aW1hZ2VEb2N1bWVudCgpLT5pbWFnZUNoYW5nZWQoKTsKICAgICB9CiAKLSAgICBtX2RvYy0+Zmlu
aXNoZWRQYXJzaW5nKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAK
LWJvb2wgSW1hZ2VUb2tlbml6ZXI6OmZpbmlzaFdhc0NhbGxlZCgpCitib29sIEltYWdlRG9jdW1l
bnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0gICAgLy8gZmluaXNoKCkgYWx3YXlzIGNh
bGxzIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3ZSdsbCBiZSBkZWxldGVkCisgICAgLy8g
ZmluaXNoKCkgYWx3YXlzIGNhbGxzIGRvY3VtZW50KCktPmZpbmlzaGVkUGFyc2luZygpIHNvIHdl
J2xsIGJlIGRlbGV0ZWQKICAgICAvLyBhZnRlciBmaW5pc2goKS4KICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLWJvb2wgSW1hZ2VUb2tlbml6ZXI6OmlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdAor
Ym9vbCBJbWFnZURvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRzKCkgY29uc3QKIHsK
ICAgICAvLyBBbiBpbWFnZSBkb2N1bWVudCBpcyBuZXZlciB3YWl0aW5nIGZvciBzY3JpcHRzCiAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtMjAyLDcgKzIwOCw3IEBAIEltYWdlRG9jdW1lbnQ6OkltYWdl
RG9jdW1lbnQoRnJhbWUqIGZyYW1lKQogICAgIAogRG9jdW1lbnRQYXJzZXIqIEltYWdlRG9jdW1l
bnQ6OmNyZWF0ZVBhcnNlcigpCiB7Ci0gICAgcmV0dXJuIG5ldyBJbWFnZVRva2VuaXplcih0aGlz
KTsKKyAgICByZXR1cm4gbmV3IEltYWdlRG9jdW1lbnRQYXJzZXIodGhpcyk7CiB9CiAKIHZvaWQg
SW1hZ2VEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAgYi9XZWJDb3JlL2xvYWRlci9NZWRpYURvY3Vt
ZW50LmNwcAppbmRleCA1M2NkNDM5ZDRjYzZiZGU0YmYxYjNlYThkZDEwMDI5OTUyN2IzMjA0Li4w
OWQ5YWJkNzk5ZTlkZDVmMDEwN2QyN2EyYTUyOTI1ZmEzNGZjNjdiIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9NZWRpYURv
Y3VtZW50LmNwcApAQCAtNTMsOCArNTMsMTIgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAogY2xhc3MgTWVkaWFEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBEb2N1bWVudFBhcnNlciB7CiBw
dWJsaWM6Ci0gICAgTWVkaWFEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jKSA6IG1fZG9jKGRv
YyksIG1fbWVkaWFFbGVtZW50KDApIHt9Ci0gICAgICAgIAorICAgIE1lZGlhRG9jdW1lbnRQYXJz
ZXIoRG9jdW1lbnQqIGRvYykKKyAgICAgICAgOiBEb2N1bWVudFBhcnNlcihkb2MpCisgICAgICAg
ICwgbV9tZWRpYUVsZW1lbnQoMCkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwog
ICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKQEAgLTY2LDcgKzcwLDYgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgdm9pZCBjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpOwogCi0gICAgRG9jdW1l
bnQqIG1fZG9jOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVtZW50OwogfTsKIApA
QCAtNzgsMTUgKzgxLDE1IEBAIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6d3JpdGUoY29uc3Qg
U2VnbWVudGVkU3RyaW5nJiwgYm9vbCkKIHZvaWQgTWVkaWFEb2N1bWVudFBhcnNlcjo6Y3JlYXRl
RG9jdW1lbnRTdHJ1Y3R1cmUoKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgUmVmUHRy
PEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFs
c2UpOwotICAgIG1fZG9jLT5hcHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMpOworICAgIFJlZlB0
cjxFbGVtZW50PiByb290RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoaHRtbFRh
ZywgZmFsc2UpOworICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7
CiAgICAgICAgIAotICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gbV9kb2MtPmNyZWF0ZUVsZW1l
bnQoYm9keVRhZywgZmFsc2UpOworICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQo
KS0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCBmYWxzZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRl
KHN0eWxlQXR0ciwgImJhY2tncm91bmQtY29sb3I6IHJnYigzOCwzOCwzOCk7Iik7CiAKICAgICBy
b290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwogICAgICAgICAKLSAgICBSZWZQdHI8
RWxlbWVudD4gbWVkaWFFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZh
bHNlKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gbWVkaWFFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudCh2aWRlb1RhZywgZmFsc2UpOwogICAgICAgICAKICAgICBtX21lZGlhRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxWaWRlb0VsZW1lbnQqPihtZWRpYUVsZW1lbnQuZ2V0KCkpOwog
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdHRyaWJ1dGUoY29udHJvbHNBdHRyLCAiIik7CkBAIC05
NCwxMSArOTcsMTEgQEAgdm9pZCBNZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0
cnVjdHVyZSgpCiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJt
YXJnaW46IGF1dG87IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyByaWdodDogMDsgYm90dG9t
OiAwOyBsZWZ0OiAwOyIpOwogCiAgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF0dHJpYnV0ZShuYW1l
QXR0ciwgIm1lZGlhIik7Ci0gICAgbV9tZWRpYUVsZW1lbnQtPnNldFNyYyhtX2RvYy0+dXJsKCkp
OworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRTcmMoZG9jdW1lbnQoKS0+dXJsKCkpOwogICAgIAog
ICAgIGJvZHktPmFwcGVuZENoaWxkKG1lZGlhRWxlbWVudCwgZWMpOwogCi0gICAgRnJhbWUqIGZy
YW1lID0gbV9kb2MtPmZyYW1lKCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKQEAgLTExOSwxMiArMTIy
LDEyIEBAIGJvb2wgTWVkaWFEb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIq
LCBpbnQpCiB2b2lkIE1lZGlhRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiB7CiAgICAgaWYgKCFt
X3BhcnNlclN0b3BwZWQpIAotICAgICAgICBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCk7CisgICAg
ICAgIGRvY3VtZW50KCktPmZpbmlzaGVkUGFyc2luZygpOwogfQogCiBib29sIE1lZGlhRG9jdW1l
bnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0gICAgLy8gZmluaXNoKCkgYWx3YXlzIGNh
bGxzIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3ZSdsbCBiZSBkZWxldGVkCisgICAgLy8g
ZmluaXNoKCkgYWx3YXlzIGNhbGxzIGRvY3VtZW50KCktPmZpbmlzaGVkUGFyc2luZygpIHNvIHdl
J2xsIGJlIGRlbGV0ZWQKICAgICAvLyBhZnRlciBmaW5pc2goKS4KICAgICByZXR1cm4gZmFsc2U7
CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAgYi9XZWJD
b3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5jcHAKaW5kZXggMDE1MDU3NmE1OWMyNjE3NGNhZmIy
NTUwNzExNDFmYTZhY2Y0M2RkMS4uYjA4M2M3OTYxM2RiOTIxNzk5MmQwOTk0NTYxNTY0YjNjNDY1
YjU3OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvbG9hZGVyL1BsdWdpbkRvY3VtZW50LmNwcApAQCAtNDcsOCArNDcsMTIgQEAgdXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKICAgICAKIGNsYXNzIFBsdWdpbkRvY3VtZW50UGFyc2Vy
IDogcHVibGljIERvY3VtZW50UGFyc2VyIHsKIHB1YmxpYzoKLSAgICBQbHVnaW5Eb2N1bWVudFBh
cnNlcihEb2N1bWVudCogZG9jKSA6IG1fZG9jKGRvYyksIG1fZW1iZWRFbGVtZW50KDApIHt9Ci0g
ICAgc3RhdGljIFdpZGdldCogcGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERvY3VtZW50KiBkb2Mp
OworICAgIFBsdWdpbkRvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2MpCisgICAgICAgIDogRG9j
dW1lbnRQYXJzZXIoZG9jKQorICAgICAgICAsIG1fZW1iZWRFbGVtZW50KDApCisgICAgeworICAg
IH0KKyAgICBzdGF0aWMgV2lkZ2V0KiBwbHVnaW5XaWRnZXRGcm9tRG9jdW1lbnQoRG9jdW1lbnQq
KTsKICAgICAgICAgCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCB3cml0ZShjb25zdCBTZWdt
ZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEpOwpAQCAtNjEsNyArNjUsNiBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICB2b2lkIGNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCk7CiAKLSAgICBE
b2N1bWVudCogbV9kb2M7CiAgICAgSFRNTEVtYmVkRWxlbWVudCogbV9lbWJlZEVsZW1lbnQ7CiB9
OwogCkBAIC04NywyNSArOTAsMjUgQEAgdm9pZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6d3JpdGUo
Y29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCkKIHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6
OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
IFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KGh0bWxU
YWcsIGZhbHNlKTsKLSAgICBtX2RvYy0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQsIGVjKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KGh0bWxUYWcsIGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLT5hcHBlbmRDaGlsZChyb290RWxlbWVu
dCwgZWMpOwogCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBtX2RvYy0+Y3JlYXRlRWxlbWVu
dChib2R5VGFnLCBmYWxzZSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBkb2N1bWVudCgp
LT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKICAgICBib2R5LT5zZXRBdHRyaWJ1dGUo
bWFyZ2lud2lkdGhBdHRyLCAiMCIpOwogICAgIGJvZHktPnNldEF0dHJpYnV0ZShtYXJnaW5oZWln
aHRBdHRyLCAiMCIpOwogICAgIGJvZHktPnNldEF0dHJpYnV0ZShiZ2NvbG9yQXR0ciwgInJnYigz
OCwzOCwzOCkiKTsKIAogICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5LCBlYyk7CiAg
ICAgICAgIAotICAgIFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRl
RWxlbWVudChlbWJlZFRhZywgZmFsc2UpOworICAgIFJlZlB0cjxFbGVtZW50PiBlbWJlZEVsZW1l
bnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGVtYmVkVGFnLCBmYWxzZSk7CiAgICAgICAg
IAogICAgIG1fZW1iZWRFbGVtZW50ID0gc3RhdGljX2Nhc3Q8SFRNTEVtYmVkRWxlbWVudCo+KGVt
YmVkRWxlbWVudC5nZXQoKSk7CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh3aWR0
aEF0dHIsICIxMDAlIik7CiAgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShoZWlnaHRB
dHRyLCAiMTAwJSIpOwogICAgIAogICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUobmFt
ZUF0dHIsICJwbHVnaW4iKTsKLSAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKHNyY0F0
dHIsIG1fZG9jLT51cmwoKS5zdHJpbmcoKSk7Ci0gICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJp
YnV0ZSh0eXBlQXR0ciwgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5
cGUoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBkb2N1bWVu
dCgpLT51cmwoKS5zdHJpbmcoKSk7CisgICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0
eXBlQXR0ciwgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPndyaXRlcigpLT5taW1lVHlw
ZSgpKTsKICAgICAKICAgICBib2R5LT5hcHBlbmRDaGlsZChlbWJlZEVsZW1lbnQsIGVjKTsgICAg
CiB9CkBAIC0xMTgsMTAgKzEyMSwxMCBAQCBib29sIFBsdWdpbkRvY3VtZW50UGFyc2VyOjp3cml0
ZVJhd0RhdGEoY29uc3QgY2hhciosIGludCkKICAgICAKICAgICBjcmVhdGVEb2N1bWVudFN0cnVj
dHVyZSgpOwogCi0gICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fZG9jLT5mcmFtZSgpKSB7CisgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKICAgICAgICAgU2V0dGlu
Z3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgICAgIGlmIChzZXR0aW5ncyAm
JiBmcmFtZS0+bG9hZGVyKCktPnN1YmZyYW1lTG9hZGVyKCktPmFsbG93UGx1Z2lucyhOb3RBYm91
dFRvSW5zdGFudGlhdGVQbHVnaW4pKSB7Ci0gICAgICAgICAgICBtX2RvYy0+dXBkYXRlTGF5b3V0
KCk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAogICAgICAgICAg
ICAgaWYgKFJlbmRlcldpZGdldCogcmVuZGVyZXIgPSB0b1JlbmRlcldpZGdldChtX2VtYmVkRWxl
bWVudC0+cmVuZGVyZXIoKSkpIHsKICAgICAgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCktPmNs
aWVudCgpLT5yZWRpcmVjdERhdGFUb1BsdWdpbihyZW5kZXJlci0+d2lkZ2V0KCkpOwpAQCAtMTM4
LDEyICsxNDEsMTIgQEAgYm9vbCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdEYXRhKGNv
bnN0IGNoYXIqLCBpbnQpCiB2b2lkIFBsdWdpbkRvY3VtZW50UGFyc2VyOjpmaW5pc2goKQogewog
ICAgIGlmICghbV9wYXJzZXJTdG9wcGVkKSAKLSAgICAgICAgbV9kb2MtPmZpbmlzaGVkUGFyc2lu
ZygpOyAgICAgICAgICAgIAorICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsg
ICAgICAgICAgICAKIH0KIAogYm9vbCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2Fs
bGVkKCkKIHsKLSAgICAvLyBmaW5pc2goKSBhbHdheXMgY2FsbHMgbV9kb2MtPmZpbmlzaGVkUGFy
c2luZygpIHNvIHdlJ2xsIGJlIGRlbGV0ZWQKKyAgICAvLyBmaW5pc2goKSBhbHdheXMgY2FsbHMg
ZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCkgc28gd2UnbGwgYmUgZGVsZXRlZAogICAgIC8v
IGFmdGVyIGZpbmlzaCgpLgogICAgIHJldHVybiBmYWxzZTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAgYi9XZWJDb3JlL2xvYWRlci9TaW5rRG9jdW1lbnQu
Y3BwCmluZGV4IGY5MDNlZTg3MjJhMDlmZjEzYTliNThhNGQzN2FhYWQxZjU1NmRjMTEuLmE0ZTg3
MjRiMjEyOTg0MDM2OGQxOTFlODY0MTNjY2I5ZTIyNmFiNzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
bG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvU2lua0RvY3VtZW50
LmNwcApAQCAtMzIsOCArMzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFNpbmtE
b2N1bWVudFBhcnNlciA6IHB1YmxpYyBEb2N1bWVudFBhcnNlciB7CiBwdWJsaWM6Ci0gICAgU2lu
a0RvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVudCkgOiBtX2RvY3VtZW50KGRvY3VtZW50
KSB7IH0KLSAgICAgICAgCisgICAgU2lua0RvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2N1bWVu
dCkgOiBEb2N1bWVudFBhcnNlcihkb2N1bWVudCkgeyB9CisKIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CkBAIC00Miw4ICs0Miw2IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgIHZpcnR1YWwgYm9vbCB3YW50c1Jhd0RhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3RGF0YShjb25zdCBj
aGFyKiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
CiB9OwogCiB2b2lkIFNpbmtEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAgYi9XZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1l
bnQuY3BwCmluZGV4IGNhZDYzMWVmYzZhNTViYjM5MTE3ZTMwMzczYjg1YTZiZGZmMGIyOWUuLmRi
YTVlZDQyMDFkMTk5YWI4NzQ5MmZjODk5M2ViOTcxYWJmMTRhZDAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGV4dERvY3Vt
ZW50LmNwcApAQCAtNjIsNyArNjIsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgICAgICAKIHByaXZh
dGU6Ci0gICAgRG9jdW1lbnQqIG1fZG9jOwogICAgIEVsZW1lbnQqIG1fcHJlRWxlbWVudDsKIAog
ICAgIGJvb2wgbV9za2lwTEY7CkBAIC03Myw3ICs3Miw3IEBAIHByaXZhdGU6CiB9OwogCiBUZXh0
RG9jdW1lbnRQYXJzZXI6OlRleHREb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jKQotICAgIDog
bV9kb2MoZG9jKQorICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jKQogICAgICwgbV9wcmVFbGVtZW50
KDApCiAgICAgLCBtX3NraXBMRihmYWxzZSkKIHsgICAgCkBAIC04NCw4ICs4Myw3IEBAIFRleHRE
b2N1bWVudFBhcnNlcjo6VGV4dERvY3VtZW50UGFyc2VyKERvY3VtZW50KiBkb2MpCiB9ICAgIAog
CiBUZXh0RG9jdW1lbnRQYXJzZXI6OlRleHREb2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURv
Y3VtZW50KiBkb2MpCi0gICAgOiBEb2N1bWVudFBhcnNlcih0cnVlKQotICAgICwgbV9kb2MoZG9j
KQorICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jLCB0cnVlKQogICAgICwgbV9wcmVFbGVtZW50KDAp
CiAgICAgLCBtX3NraXBMRihmYWxzZSkKIHsgICAgCkBAIC0xMzMsMTMgKzEzMSwxMyBAQCB2b2lk
IFRleHREb2N1bWVudFBhcnNlcjo6d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29s
KQogICAgIH0KIAogICAgIGlmICghbV9wcmVFbGVtZW50ICYmICFpblZpZXdTb3VyY2VNb2RlKCkp
IHsKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVs
ZW1lbnQoaHRtbFRhZywgZmFsc2UpOwotICAgICAgICBtX2RvYy0+YXBwZW5kQ2hpbGQocm9vdEVs
ZW1lbnQsIGVjKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFbGVtZW50ID0gZG9jdW1l
bnQoKS0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7CisgICAgICAgIGRvY3VtZW50KCkt
PmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CiAKLSAgICAgICAgUmVmUHRyPEVsZW1lbnQ+
IGJvZHkgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCBmYWxzZSk7CisgICAgICAgIFJl
ZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChib2R5VGFnLCBm
YWxzZSk7CiAgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5LCBlYyk7CiAKLSAg
ICAgICAgUmVmUHRyPEVsZW1lbnQ+IHByZUVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudChw
cmVUYWcsIGZhbHNlKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHByZUVsZW1lbnQgPSBkb2N1
bWVudCgpLT5jcmVhdGVFbGVtZW50KHByZVRhZywgZmFsc2UpOwogICAgICAgICBwcmVFbGVtZW50
LT5zZXRBdHRyaWJ1dGUoInN0eWxlIiwgIndvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3Bh
Y2U6IHByZS13cmFwOyIsIGVjKTsKIAogICAgICAgICBib2R5LT5hcHBlbmRDaGlsZChwcmVFbGVt
ZW50LCBlYyk7CkBAIC0xNDksMTQgKzE0NywxNCBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNlcjo6
d3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiBzLCBib29sKQogICAgIAogICAgIFN0cmluZyBz
dHJpbmcgPSBTdHJpbmcobV9idWZmZXIsIG1fZGVzdCAtIG1fYnVmZmVyKTsKICAgICBpZiAoaW5W
aWV3U291cmNlTW9kZSgpKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWV3U291cmNlRG9j
dW1lbnQqPihtX2RvYyktPmFkZFZpZXdTb3VyY2VUZXh0KHN0cmluZyk7CisgICAgICAgIHN0YXRp
Y19jYXN0PEhUTUxWaWV3U291cmNlRG9jdW1lbnQqPihkb2N1bWVudCgpKS0+YWRkVmlld1NvdXJj
ZVRleHQoc3RyaW5nKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGNo
YXJzTGVmdCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICB3aGlsZSAoY2hhcnNMZWZ0KSB7CiAgICAg
ICAgIC8vIHNwbGl0IGxhcmdlIHRleHQgdG8gbm9kZXMgb2YgbWFuYWdlYWJsZSBzaXplCi0gICAg
ICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gVGV4dDo6Y3JlYXRlV2l0aExlbmd0aExpbWl0KG1fZG9j
LCBzdHJpbmcsIGNoYXJzTGVmdCk7CisgICAgICAgIFJlZlB0cjxUZXh0PiB0ZXh0ID0gVGV4dDo6
Y3JlYXRlV2l0aExlbmd0aExpbWl0KGRvY3VtZW50KCksIHN0cmluZywgY2hhcnNMZWZ0KTsKICAg
ICAgICAgbV9wcmVFbGVtZW50LT5hcHBlbmRDaGlsZCh0ZXh0LCBlYyk7CiAgICAgfQogfQpAQCAt
MTcwLDEyICsxNjgsMTIgQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiAgICAg
bV9idWZmZXIgPSAwOwogICAgIG1fZGVzdCA9IDA7CiAKLSAgICBtX2RvYy0+ZmluaXNoZWRQYXJz
aW5nKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCk7CiB9CiAKIGJvb2wgVGV4
dERvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQogewotICAgIC8vIGZpbmlzaCgpIGFs
d2F5cyBjYWxscyBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCkgc28gd2UnbGwgYmUgZGVsZXRlZAor
ICAgIC8vIGZpbmlzaCgpIGFsd2F5cyBjYWxscyBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmco
KSBzbyB3ZSdsbCBiZSBkZWxldGVkCiAgICAgLy8gYWZ0ZXIgZmluaXNoKCkuCiAgICAgcmV0dXJu
IGZhbHNlOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59613</attachid>
            <date>2010-06-23 23:04:39 -0700</date>
            <delta_ts>2010-06-24 08:07:29 -0700</delta_ts>
            <desc>Address Darin and Adam&apos;s feedback</desc>
            <filename>bug-41117-20100623230438.patch</filename>
            <type>text/plain</type>
            <size>60448</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ODZmNjkyMGYwMDE2ZGViZjkzMTk5OTUyNjg3YjA4ZmM2YzVmZDgwNi4uODhlYTVlZDNjNmM1NGM2
OWY3MjU2ZGM1OWIxODZlNzk2MjBkYTQzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiw5NCBAQAogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIE1vdmUgRG9jdW1lbnQqIGRvd24gb250
byBEb2N1bWVudFBhcnNlciwgc2luY2UgZXZlcnkgRG9jdW1lbnRQYXJzZXIgbmVlZHMgb25lLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDExMTcKKwor
ICAgICAgICBUaGlzIGVsaW1pbmF0ZWQgdGhlIG5lZWQgZm9yIGRvY3VtZW50KCkgb24gSFRNTERv
Y3VtZW50UGFyc2VyLgorICAgICAgICBUaGlzIHBhdmVzIHRoZSB3YXkgZm9yIG1vcmUgY29kZSBz
aGFyaW5nIGJldHdlZW4gdmFyaW91cworICAgICAgICBEb2N1bWVudFBhcnNlciBzdWJjbGFzc2Vz
LgorCisgICAgICAgICogZG9tL0RvY3VtZW50UGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpE
b2N1bWVudFBhcnNlcjo6aW5WaWV3U291cmNlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFBhcnNlcjo6c2V0SW5WaWV3U291cmNlTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1
bWVudFBhcnNlcjo6ZG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnRQYXJzZXI6
OkRvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmlzV01MRG9jdW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnB1c2hDdXJyZW50Tm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6cG9wQ3VycmVudE5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW50ZXJUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1M
RG9jdW1lbnRQYXJzZXI6Omluc2VydEVycm9yTWVzc2FnZUJsb2NrKToKKyAgICAgICAgKiBkb20v
WE1MRG9jdW1lbnRQYXJzZXIuaDoKKyAgICAgICAgKiBkb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4
bWwyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVu
dFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6flhNTERvY3Vt
ZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpkb1dyaXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyk6
CisgICAgICAgIChXZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNkYXRhQmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmNvbW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6WE1MRG9jdW1lbnRQYXJzZXI6OnN0YXJ0RG9jdW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6WE1MRG9jdW1lbnRQYXJzZXI6OmludGVybmFsU3Vic2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OlhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2VyQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQpOgorICAgICAgICAqIGh0bWwvSFRNTERv
Y3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6
SFRNTERvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKiBodG1sL0hUTUxEb2N1bWVudFBhcnNlci5o
OgorICAgICAgICAqIGh0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVnYWN5SFRNTERvY3VtZW50UGFy
c2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6YmVnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpzY3JpcHRIYW5k
bGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c2NyaXB0
RXhlY3V0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6
cGFyc2VUYWcpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpj
b250aW51ZVByb2Nlc3NpbmcpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjp3aWxsV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6ZGlkV3JpdGVIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUhUTUxE
b2N1bWVudFBhcnNlcjo6d3JpdGUpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpzdG9wUGFyc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERv
Y3VtZW50UGFyc2VyOjplbmQpOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpwcm9jZXNzVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpwcm9jZXNzRG9jdHlwZVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMp
OgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0
ZXJuYWxTY3JpcHRzSWZSZWFkeSk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKToKKyAgICAgICAgKiBo
dG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGxvYWRlci9JbWFnZURv
Y3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRQYXJzZXI6OkltYWdl
RG9jdW1lbnRQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudFBhcnNlcjo6
aW1hZ2VEb2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjp3
cml0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjp3cml0ZVJhd0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZURvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3JpcHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcik6CisgICAg
ICAgICogbG9hZGVyL01lZGlhRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFE
b2N1bWVudFBhcnNlcjo6TWVkaWFEb2N1bWVudFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYURvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYURvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFEb2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKToKKyAgICAgICAgKiBsb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9jdW1lbnRQYXJz
ZXI6OlBsdWdpbkRvY3VtZW50UGFyc2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkRvY3Vt
ZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bHVnaW5Eb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
dWdpbkRvY3VtZW50UGFyc2VyOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2luRG9j
dW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCk6CisgICAgICAgICogbG9hZGVyL1NpbmtEb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW5rRG9jdW1lbnRQYXJzZXI6OlNpbmtEb2N1
bWVudFBhcnNlcik6CisgICAgICAgICogbG9hZGVyL1RleHREb2N1bWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0RG9jdW1lbnRQYXJzZXI6OlRleHREb2N1bWVudFBhcnNlcik6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0RG9jdW1lbnRQYXJzZXI6OndyaXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHREb2N1bWVudFBhcnNlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRE
b2N1bWVudFBhcnNlcjo6ZmluaXNoV2FzQ2FsbGVkKToKKworMjAxMC0wNi0yMyAgRXJpYyBTZWlk
ZWwgIDxlcmljQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKICAgICAgICAgU3RhcnQgdG8gY2xlYW4gdXAgRG9jdW1lbnRQYXJzZXIgaW50ZXJmYWNl
CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00MTExNAog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oIGIvV2ViQ29yZS9kb20v
RG9jdW1lbnRQYXJzZXIuaAppbmRleCAxNzUyYTdkZDExZjU0YzIwODc2ZDk2YzI5YTI2N2MwMGQ4
YjA2OWI1Li44YmU4M2NmMTg0NTg1MjFmMWIyMTAyMTU5ZDk4ZDQ5ZGRmMTQ0NTVhIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2RvbS9Eb2N1bWVudFBhcnNlci5oCisrKyBiL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50UGFyc2VyLmgKQEAgLTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgUGV0ZXIg
S2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3
ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSwgSW5jLgogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC0yMyw4ICsyNCwxMiBAQAogI2lmbmRlZiBEb2N1bWVudFBhcnNlcl9oCiAj
ZGVmaW5lIERvY3VtZW50UGFyc2VyX2gKIAorLy8gSWYgbW92ZSBEb2N1bWVudFBhcnNlcigpIHRv
IGEgRG9jdW1lbnRQYXJzZXIuY3BwLCB0aGlzIGluY2x1ZGUgY2FuIGdvIGF3YXkuCisjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgY2xhc3Mg
RG9jdW1lbnQ7CiAgICAgY2xhc3MgTGVnYWN5SFRNTFRyZWVCdWlsZGVyOwogICAgIGNsYXNzIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjsKICAgICBjbGFzcyBTZWdtZW50ZWRTdHJpbmc7CkBAIC01
Myw5ICs1OCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIHdh
bnRzUmF3RGF0YSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9v
bCB3cml0ZVJhd0RhdGEoY29uc3QgY2hhciogLypkYXRhKi8sIGludCAvKmxlbmd0aCovKSB7IHJl
dHVybiBmYWxzZTsgfQogCi0gICAgICAgIGJvb2wgaW5WaWV3U291cmNlTW9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5WaWV3U291cmNlTW9kZTsgfQotICAgICAgICB2b2lkIHNldEluVmlld1NvdXJj
ZU1vZGUoYm9vbCBtb2RlKSB7IG1faW5WaWV3U291cmNlTW9kZSA9IG1vZGU7IH0KLQogICAgICAg
ICB2aXJ0dWFsIGJvb2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAg
ICAgICB2aXJ0dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gLTE7IH0KQEAgLTY2
LDE1ICs2OCwyNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgTGVnYWN5
SFRNTFRyZWVCdWlsZGVyKiBodG1sVHJlZUJ1aWxkZXIoKSBjb25zdCB7IHJldHVybiAwOyB9CiAg
ICAgICAgIHZpcnR1YWwgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyKiBhc0hUTUxEb2N1bWVudFBh
cnNlcigpIHsgcmV0dXJuIDA7IH0KIAorICAgICAgICAvLyBGSVhNRTogdmlldyBzb3VyY2UgbW9k
ZSBpcyBvbmx5IHVzZWQgYnkgdGhlIEhUTUwgYW5kIFRleHQKKyAgICAgICAgLy8gRG9jdW1lbnRQ
YXJzZXJzIGFuZCBtYXkgbm90IGJlbG9uZyBvbiB0aGUgYmFzZS1jbGFzcy4KKyAgICAgICAgYm9v
bCBpblZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9pblZpZXdTb3VyY2VNb2RlOyB9
CisgICAgICAgIHZvaWQgc2V0SW5WaWV3U291cmNlTW9kZShib29sIG1vZGUpIHsgbV9pblZpZXdT
b3VyY2VNb2RlID0gbW9kZTsgfQorCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZG9jdW1lbnQ7IH0KKwogICAgICAgICBYU1NBdWRpdG9yKiB4c3NBdWRpdG9y
KCkgY29uc3QgeyByZXR1cm4gbV9YU1NBdWRpdG9yOyB9CiAgICAgICAgIHZvaWQgc2V0WFNTQXVk
aXRvcihYU1NBdWRpdG9yKiBhdWRpdG9yKSB7IG1fWFNTQXVkaXRvciA9IGF1ZGl0b3I7IH0KIAog
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgRG9jdW1lbnRQYXJzZXIoYm9vbCB2aWV3U291cmNlTW9k
ZSA9IGZhbHNlKQorICAgICAgICBEb2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQsIGJv
b2wgdmlld1NvdXJjZU1vZGUgPSBmYWxzZSkKICAgICAgICAgICAgIDogbV9wYXJzZXJTdG9wcGVk
KGZhbHNlKQogICAgICAgICAgICAgLCBtX2luVmlld1NvdXJjZU1vZGUodmlld1NvdXJjZU1vZGUp
CisgICAgICAgICAgICAsIG1fZG9jdW1lbnQoZG9jdW1lbnQpCiAgICAgICAgICAgICAsIG1fWFNT
QXVkaXRvcigwKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoZG9jdW1lbnQpOwogICAg
ICAgICB9CiAKICAgICAgICAgLy8gVGhlIHBhcnNlciBoYXMgYnVmZmVycywgc28gcGFyc2luZyBt
YXkgY29udGludWUgZXZlbiBhZnRlcgpAQCAtODMsNiArOTQsOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIGJvb2wgbV9wYXJzZXJTdG9wcGVkOwogICAgICAgICBib29sIG1faW5WaWV3
U291cmNlTW9kZTsKIAorICAgICAgICAvLyBFdmVyeSBEb2N1bWVudFBhcnNlciBuZWVkcyBhIHBv
aW50ZXIgYmFjayB0byB0aGUgZG9jdW1lbnQuCisgICAgICAgIERvY3VtZW50KiBtX2RvY3VtZW50
OwogICAgICAgICAvLyBUaGUgWFNTQXVkaXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBkb2N1bWVu
dCBwYXJzZXIuCiAgICAgICAgIFhTU0F1ZGl0b3IqIG1fWFNTQXVkaXRvcjsKICAgICB9OwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9kb20v
WE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IGE3M2IzNGU5Mjc0NDU4ZmVhZjAwYjMwOWJiZTkw
ZDNkNWMyYjc0OTEuLmFiMDJiYjM0MDI4NjI5NWM5NjgwMGQ4MTg1YThlNWU0NDM0NDgyNzcgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvZG9tL1hNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9XZWJDb3Jl
L2RvbS9YTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTcyLDEwICs3Miw3IEBAIGNvbnN0IGludCBt
YXhFcnJvcnMgPSAyNTsKICNpZiBFTkFCTEUoV01MKQogYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6
aXNXTUxEb2N1bWVudCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fZG9jKQotICAgICAgICByZXR1cm4g
bV9kb2MtPmlzV01MRG9jdW1lbnQoKTsKLQotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4g
ZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpOwogfQogI2VuZGlmCiAKQEAgLTgzLDcgKzgwLDcg
QEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6cHVzaEN1cnJlbnROb2RlKE5vZGUqIG4pCiB7CiAg
ICAgQVNTRVJUKG4pOwogICAgIEFTU0VSVChtX2N1cnJlbnROb2RlKTsKLSAgICBpZiAobiAhPSBt
X2RvYykKKyAgICBpZiAobiAhPSBkb2N1bWVudCgpKQogICAgICAgICBuLT5yZWYoKTsKICAgICBt
X2N1cnJlbnROb2RlU3RhY2suYXBwZW5kKG1fY3VycmVudE5vZGUpOwogICAgIG1fY3VycmVudE5v
ZGUgPSBuOwpAQCAtOTcsNyArOTQsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJy
ZW50Tm9kZSgpCiAgICAgICAgIHJldHVybjsKICAgICBBU1NFUlQobV9jdXJyZW50Tm9kZVN0YWNr
LnNpemUoKSk7CiAKLSAgICBpZiAobV9jdXJyZW50Tm9kZSAhPSBtX2RvYykKKyAgICBpZiAobV9j
dXJyZW50Tm9kZSAhPSBkb2N1bWVudCgpKQogICAgICAgICBtX2N1cnJlbnROb2RlLT5kZXJlZigp
OwogCiAgICAgbV9jdXJyZW50Tm9kZSA9IG1fY3VycmVudE5vZGVTdGFjay5sYXN0KCk7CkBAIC0x
MDYsMTQgKzEwMywxNCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpwb3BDdXJyZW50Tm9kZSgp
CiAKIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmNsZWFyQ3VycmVudE5vZGVTdGFjaygpCiB7Ci0g
ICAgaWYgKG1fY3VycmVudE5vZGUgJiYgbV9jdXJyZW50Tm9kZSAhPSBtX2RvYykKKyAgICBpZiAo
bV9jdXJyZW50Tm9kZSAmJiBtX2N1cnJlbnROb2RlICE9IGRvY3VtZW50KCkpCiAgICAgICAgIG1f
Y3VycmVudE5vZGUtPmRlcmVmKCk7CiAgICAgbV9jdXJyZW50Tm9kZSA9IDA7CiAKICAgICBpZiAo
bV9jdXJyZW50Tm9kZVN0YWNrLnNpemUoKSkgeyAvLyBBYm9ydGVkIHBhcnNpbmcuCiAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBtX2N1cnJlbnROb2RlU3RhY2suc2l6ZSgpIC0gMTsgaSAhPSAwOyAt
LWkpCiAgICAgICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2tbaV0tPmRlcmVmKCk7Ci0gICAgICAg
IGlmIChtX2N1cnJlbnROb2RlU3RhY2tbMF0gJiYgbV9jdXJyZW50Tm9kZVN0YWNrWzBdICE9IG1f
ZG9jKQorICAgICAgICBpZiAobV9jdXJyZW50Tm9kZVN0YWNrWzBdICYmIG1fY3VycmVudE5vZGVT
dGFja1swXSAhPSBkb2N1bWVudCgpKQogICAgICAgICAgICAgbV9jdXJyZW50Tm9kZVN0YWNrWzBd
LT5kZXJlZigpOwogICAgICAgICBtX2N1cnJlbnROb2RlU3RhY2suY2xlYXIoKTsKICAgICB9CkBA
IC0xNjksNyArMTY2LDcgQEAgYm9vbCBYTUxEb2N1bWVudFBhcnNlcjo6ZW50ZXJUZXh0KCkKICNp
ZiAhVVNFKFFYTUxTVFJFQU0pCiAgICAgQVNTRVJUKG1fYnVmZmVyZWRUZXh0LnNpemUoKSA9PSAw
KTsKICNlbmRpZgotICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gVGV4dDo6Y3JlYXRlKG1fZG9j
LCAiIik7CisgICAgUmVmUHRyPE5vZGU+IG5ld05vZGUgPSBUZXh0OjpjcmVhdGUoZG9jdW1lbnQo
KSwgIiIpOwogICAgIGlmICghbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQobmV3Tm9kZS5nZXQoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBwdXNoQ3VycmVudE5vZGUobmV3Tm9kZS5nZXQo
KSk7CkBAIC0yMTcsMTIgKzIxNCwxMiBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmQoKQog
ICAgICAgICBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOwogICAgIGVsc2UgewogICAgICAgICBl
eGl0VGV4dCgpOwotICAgICAgICBtX2RvYy0+dXBkYXRlU3R5bGVTZWxlY3RvcigpOworICAgICAg
ICBkb2N1bWVudCgpLT51cGRhdGVTdHlsZVNlbGVjdG9yKCk7CiAgICAgfQogCiAgICAgY2xlYXJD
dXJyZW50Tm9kZVN0YWNrKCk7CiAgICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkKLSAgICAgICAg
bV9kb2MtPmZpbmlzaGVkUGFyc2luZygpOworICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBh
cnNpbmcoKTsKIH0KIAogdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKQEAgLTI3Miw3
ICsyNjksNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG9j
aygpCiAKICAgICAvLyBDcmVhdGUgZWxlbWVudHMgZm9yIGRpc3BsYXkKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBEb2N1bWVudCogZG9jID0gbV9kb2M7CisgICAgRG9jdW1lbnQqIGRv
YyA9IGRvY3VtZW50KCk7CiAgICAgTm9kZSogZG9jdW1lbnRFbGVtZW50ID0gZG9jLT5kb2N1bWVu
dEVsZW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkgewogICAgICAgICBSZWZQdHI8
Tm9kZT4gcm9vdEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnQoaHRtbFRhZywgZmFsc2UpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvZG9t
L1hNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggOGYwMWMwMGI4ODExZTY2MGVhY2NlZTQ4NWFjYjBj
ZDNiOTQxMzU4YS4uNDUzNzZiNWFhZjIwMjFkOTgxZDJjOGRjMWU2YzAwOGYyNGJhOGM0YiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Rv
bS9YTUxEb2N1bWVudFBhcnNlci5oCkBAIC0xNTQsNyArMTU0LDYgQEAgcHVibGljOgogICAgICAg
ICB2b2lkIGRvV3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIHZvaWQgZG9FbmQoKTsKIAot
ICAgICAgICBEb2N1bWVudCogbV9kb2M7CiAgICAgICAgIEZyYW1lVmlldyogbV92aWV3OwogCiAg
ICAgICAgIFN0cmluZyBtX29yaWdpbmFsU291cmNlRm9yVHJhbnNmb3JtOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcCBiL1dlYkNvcmUvZG9tL1hN
TERvY3VtZW50UGFyc2VyTGlieG1sMi5jcHAKaW5kZXggZTU3MzY0NTk3MzU3NjFmODZiZmE0ZWMy
NWU0ZWJmNDAyMWYxNzMwYy4uMzNiMGEwOTc4M2Q4MjJhZmQ3M2NhNGYxMGEzNDUyNWQ4ZTZlYTYz
OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9kb20vWE1MRG9jdW1lbnRQYXJzZXJMaWJ4bWwyLmNwcAor
KysgYi9XZWJDb3JlL2RvbS9YTUxEb2N1bWVudFBhcnNlckxpYnhtbDIuY3BwCkBAIC01MjIsMTIg
KzUyMiwxMiBAQCBQYXNzUmVmUHRyPFhNTFBhcnNlckNvbnRleHQ+IFhNTFBhcnNlckNvbnRleHQ6
OmNyZWF0ZU1lbW9yeVBhcnNlcih4bWxTQVhIYW5kbGVyUAogCiAvLyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1YTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIo
RG9jdW1lbnQqIF9kb2MsIEZyYW1lVmlldyogX3ZpZXcpCi0gICAgOiBtX2RvYyhfZG9jKQotICAg
ICwgbV92aWV3KF92aWV3KQorWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERv
Y3VtZW50KiBkb2N1bWVudCwgRnJhbWVWaWV3KiBmcmFtZVZpZXcpCisgICAgOiBEb2N1bWVudFBh
cnNlcihkb2N1bWVudCkKKyAgICAsIG1fdmlldyhmcmFtZVZpZXcpCiAgICAgLCBtX2NvbnRleHQo
MCkKICAgICAsIG1fcGVuZGluZ0NhbGxiYWNrcyhuZXcgUGVuZGluZ0NhbGxiYWNrcykKLSAgICAs
IG1fY3VycmVudE5vZGUoX2RvYykKKyAgICAsIG1fY3VycmVudE5vZGUoZG9jdW1lbnQpCiAgICAg
LCBtX3Nhd0Vycm9yKGZhbHNlKQogICAgICwgbV9zYXdYU0xUcmFuc2Zvcm0oZmFsc2UpCiAgICAg
LCBtX3Nhd0ZpcnN0RWxlbWVudChmYWxzZSkKQEAgLTU1MCw3ICs1NTAsNyBAQCBYTUxEb2N1bWVu
dFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIF9kb2MsIEZyYW1lVmlldyogX3Zp
ZXcpCiB9CiAKIFhNTERvY3VtZW50UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZy
YWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRp
bmdQZXJtaXNzaW9uIHNjcmlwdGluZ1Blcm1pc3Npb24pCi0gICAgOiBtX2RvYyhmcmFnbWVudC0+
ZG9jdW1lbnQoKSkKKyAgICA6IERvY3VtZW50UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQog
ICAgICwgbV92aWV3KDApCiAgICAgLCBtX2NvbnRleHQoMCkKICAgICAsIG1fcGVuZGluZ0NhbGxi
YWNrcyhuZXcgUGVuZGluZ0NhbGxiYWNrcykKQEAgLTU3NSw4ICs1NzUsNiBAQCBYTUxEb2N1bWVu
dFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQsIEVs
ZW1lbnQqIHBhcmVudAogICAgICwgbV9zY3JpcHRpbmdQZXJtaXNzaW9uKHNjcmlwdGluZ1Blcm1p
c3Npb24pCiB7CiAgICAgZnJhZ21lbnQtPnJlZigpOwotICAgIGlmIChtX2RvYykKLSAgICAgICAg
bV9kb2MtPnJlZigpOwogCiAgICAgLy8gQWRkIG5hbWVzcGFjZXMgYmFzZWQgb24gdGhlIHBhcmVu
dCBub2RlCiAgICAgVmVjdG9yPEVsZW1lbnQqPiBlbGVtU3RhY2s7CkBAIC02MTksOCArNjE3LDYg
QEAgWE1MUGFyc2VyQ29udGV4dDo6flhNTFBhcnNlckNvbnRleHQoKQogWE1MRG9jdW1lbnRQYXJz
ZXI6On5YTUxEb2N1bWVudFBhcnNlcigpCiB7CiAgICAgY2xlYXJDdXJyZW50Tm9kZVN0YWNrKCk7
Ci0gICAgaWYgKG1fcGFyc2luZ0ZyYWdtZW50ICYmIG1fZG9jKQotICAgICAgICBtX2RvYy0+ZGVy
ZWYoKTsKICAgICBpZiAobV9wZW5kaW5nU2NyaXB0KQogICAgICAgICBtX3BlbmRpbmdTY3JpcHQt
PnJlbW92ZUNsaWVudCh0aGlzKTsKIH0KQEAgLTY0MywxMSArNjM5LDExIEBAIHZvaWQgWE1MRG9j
dW1lbnRQYXJzZXI6OmRvV3JpdGUoY29uc3QgU3RyaW5nJiBwYXJzZVN0cmluZykKICAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciBCT01IaWdoQnl0ZSA9ICpyZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIGNoYXIqPigmQk9NKTsKICAgICAgICAgeG1sU3dpdGNoRW5jb2RpbmcoY29udGV4
dC0+Y29udGV4dCgpLCBCT01IaWdoQnl0ZSA9PSAweEZGID8gWE1MX0NIQVJfRU5DT0RJTkdfVVRG
MTZMRSA6IFhNTF9DSEFSX0VOQ09ESU5HX1VURjE2QkUpOwogCi0gICAgICAgIFhNTERvY3VtZW50
UGFyc2VyU2NvcGUgc2NvcGUobV9kb2MtPmRvY0xvYWRlcigpKTsKKyAgICAgICAgWE1MRG9jdW1l
bnRQYXJzZXJTY29wZSBzY29wZShkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CiAgICAgICAgIHht
bFBhcnNlQ2h1bmsoY29udGV4dC0+Y29udGV4dCgpLCByZWludGVycHJldF9jYXN0PGNvbnN0IGNo
YXIqPihwYXJzZVN0cmluZy5jaGFyYWN0ZXJzKCkpLCBzaXplb2YoVUNoYXIpICogcGFyc2VTdHJp
bmcubGVuZ3RoKCksIDApOwogICAgIH0KIAotICAgIGlmIChtX2RvYy0+ZGVjb2RlcigpICYmIG1f
ZG9jLT5kZWNvZGVyKCktPnNhd0Vycm9yKCkpIHsKKyAgICBpZiAoZG9jdW1lbnQoKS0+ZGVjb2Rl
cigpICYmIGRvY3VtZW50KCktPmRlY29kZXIoKS0+c2F3RXJyb3IoKSkgewogICAgICAgICAvLyBJ
ZiB0aGUgZGVjb2RlciBzYXcgYW4gZXJyb3IsIHJlcG9ydCBpdCBhcyBmYXRhbCAoc3RvcHMgcGFy
c2luZykKICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJFbmNvZGluZyBlcnJvciIsIGNvbnRl
eHQtPmNvbnRleHQoKS0+aW5wdXQtPmxpbmUsIGNvbnRleHQtPmNvbnRleHQoKS0+aW5wdXQtPmNv
bCk7CiAgICAgfQpAQCAtNzI4LDcgKzcyNCw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OnN0
YXJ0RWxlbWVudE5zKGNvbnN0IHhtbENoYXIqIHhtbExvY2FsTmFtZSwgY29uc3QgeG1sQ2hhCiAK
ICNpZiBFTkFCTEUoWEhUTUxNUCkKICAgICAvLyBjaGVjayBpZiB0aGUgRE9DVFlQRSBEZWNsYXJh
dGlvbiBvZiBYSFRNTE1QIGRvY3VtZW50IGV4aXN0cwotICAgIGlmICghbV9oYXNEb2NUeXBlRGVj
bGFyYXRpb24gJiYgbV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkpIHsKKyAgICBpZiAoIW1faGFz
RG9jVHlwZURlY2xhcmF0aW9uICYmIGRvY3VtZW50KCktPmlzWEhUTUxNUERvY3VtZW50KCkpIHsK
ICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJET0NUWVBFIGRlY2xhcmF0aW9uIGxvc3QuIiwg
bGluZU51bWJlcigpLCBjb2x1bW5OdW1iZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC03NjksNyArNzY1LDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnRFbGVtZW50TnMo
Y29uc3QgeG1sQ2hhciogeG1sTG9jYWxOYW1lLCBjb25zdCB4bWxDaGEKICAgICBtX3Nhd0ZpcnN0
RWxlbWVudCA9IHRydWU7CiAKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9jYWxO
YW1lLCB1cmkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV9kb2MtPmNyZWF0
ZUVsZW1lbnQocU5hbWUsIHRydWUpOworICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0g
ZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSk7CiAgICAgaWYgKCFuZXdFbGVt
ZW50KSB7CiAgICAgICAgIHN0b3BQYXJzaW5nKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTgwMyw4
ICs3OTksOCBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjpzdGFydEVsZW1lbnROcyhjb25zdCB4
bWxDaGFyKiB4bWxMb2NhbE5hbWUsIGNvbnN0IHhtbENoYQogICAgIGlmIChtX3ZpZXcgJiYgIW5l
d0VsZW1lbnQtPmF0dGFjaGVkKCkpCiAgICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOwogCi0g
ICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCAmJiBpc0ZpcnN0RWxlbWVudCAmJiBtX2RvYy0+ZnJh
bWUoKSkKLSAgICAgICAgbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5kaXNwYXRjaERvY3VtZW50
RWxlbWVudEF2YWlsYWJsZSgpOworICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQgJiYgaXNGaXJz
dEVsZW1lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+bG9hZGVyKCktPmRpc3BhdGNoRG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CiB9CiAK
IHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmVuZEVsZW1lbnROcygpCkBAIC04NTUsNyArODUxLDcg
QEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKIAogI2lmIEVOQUJMRShY
SFRNTE1QKQogICAgIGlmICghc2NyaXB0RWxlbWVudC0+c2hvdWxkRXhlY3V0ZUFzSmF2YVNjcmlw
dCgpKQotICAgICAgICBtX2RvYy0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVl
KTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0U2hvdWxkUHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0
cnVlKTsKICAgICBlbHNlCiAjZW5kaWYKICAgICB7CkBAIC04NjQsNyArODYwLDcgQEAgdm9pZCBY
TUxEb2N1bWVudFBhcnNlcjo6ZW5kRWxlbWVudE5zKCkKICAgICAgICAgICAgIC8vIHdlIGhhdmUg
YSBzcmMgYXR0cmlidXRlCiAgICAgICAgICAgICBTdHJpbmcgc2NyaXB0Q2hhcnNldCA9IHNjcmlw
dEVsZW1lbnQtPnNjcmlwdENoYXJzZXQoKTsKICAgICAgICAgICAgIGlmIChlbGVtZW50LT5kaXNw
YXRjaEJlZm9yZUxvYWRFdmVudChzY3JpcHRIcmVmKSAmJgotICAgICAgICAgICAgICAgIChtX3Bl
bmRpbmdTY3JpcHQgPSBtX2RvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RTY3JpcHQoc2NyaXB0SHJl
Ziwgc2NyaXB0Q2hhcnNldCkpKSB7CisgICAgICAgICAgICAgICAgKG1fcGVuZGluZ1NjcmlwdCA9
IGRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KHNjcmlwdEhyZWYsIHNjcmlw
dENoYXJzZXQpKSkgewogICAgICAgICAgICAgICAgIG1fc2NyaXB0RWxlbWVudCA9IGVsZW1lbnQ7
CiAgICAgICAgICAgICAgICAgbV9wZW5kaW5nU2NyaXB0LT5hZGRDbGllbnQodGhpcyk7CiAKQEAg
LTg3NCw3ICs4NzAsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmRFbGVtZW50TnMoKQog
ICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRFbGVtZW50ID0gMDsK
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX3ZpZXctPmZyYW1lKCktPnNjcmlwdCgpLT5l
eGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2NyaXB0RWxlbWVudC0+c2NyaXB0Q29udGVu
dCgpLCBtX2RvYy0+dXJsKCksIG1fc2NyaXB0U3RhcnRMaW5lKSk7CisgICAgICAgICAgICBtX3Zp
ZXctPmZyYW1lKCktPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFNjcmlwdFNvdXJjZUNvZGUoc2Ny
aXB0RWxlbWVudC0+c2NyaXB0Q29udGVudCgpLCBkb2N1bWVudCgpLT51cmwoKSwgbV9zY3JpcHRT
dGFydExpbmUpKTsKICAgICB9CiAgICAgbV9yZXF1ZXN0aW5nU2NyaXB0ID0gZmFsc2U7CiAgICAg
cG9wQ3VycmVudE5vZGUoKTsKQEAgLTkzMiw3ICs5MjgsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFy
c2VyOjpwcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oY29uc3QgeG1sQ2hhciogdGFyZ2V0LCBjb25zdCB4
bWxDaAogCiAgICAgLy8gIyMjIGhhbmRsZSBleGNlcHRpb25zCiAgICAgaW50IGV4Y2VwdGlvbiA9
IDA7Ci0gICAgUmVmUHRyPFByb2Nlc3NpbmdJbnN0cnVjdGlvbj4gcGkgPSBtX2RvYy0+Y3JlYXRl
UHJvY2Vzc2luZ0luc3RydWN0aW9uKAorICAgIFJlZlB0cjxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24+
IHBpID0gZG9jdW1lbnQoKS0+Y3JlYXRlUHJvY2Vzc2luZ0luc3RydWN0aW9uKAogICAgICAgICB0
b1N0cmluZyh0YXJnZXQpLCB0b1N0cmluZyhkYXRhKSwgZXhjZXB0aW9uKTsKICAgICBpZiAoZXhj
ZXB0aW9uKQogICAgICAgICByZXR1cm47CkBAIC05NDgsNyArOTQ0LDcgQEAgdm9pZCBYTUxEb2N1
bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0luc3RydWN0aW9uKGNvbnN0IHhtbENoYXIqIHRhcmdldCwg
Y29uc3QgeG1sQ2gKIAogI2lmIEVOQUJMRShYU0xUKQogICAgIG1fc2F3WFNMVHJhbnNmb3JtID0g
IW1fc2F3Rmlyc3RFbGVtZW50ICYmIHBpLT5pc1hTTCgpOwotICAgIGlmIChtX3Nhd1hTTFRyYW5z
Zm9ybSAmJiAhbV9kb2MtPnRyYW5zZm9ybVNvdXJjZURvY3VtZW50KCkpCisgICAgaWYgKG1fc2F3
WFNMVHJhbnNmb3JtICYmICFkb2N1bWVudCgpLT50cmFuc2Zvcm1Tb3VyY2VEb2N1bWVudCgpKQog
ICAgICAgICBzdG9wUGFyc2luZygpOwogI2VuZGlmCiB9CkBAIC05NjUsNyArOTYxLDcgQEAgdm9p
ZCBYTUxEb2N1bWVudFBhcnNlcjo6Y2RhdGFCbG9jayhjb25zdCB4bWxDaGFyKiBzLCBpbnQgbGVu
KQogCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0gQ0RBVEFT
ZWN0aW9uOjpjcmVhdGUobV9kb2MsIHRvU3RyaW5nKHMsIGxlbikpOworICAgIFJlZlB0cjxOb2Rl
PiBuZXdOb2RlID0gQ0RBVEFTZWN0aW9uOjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocywg
bGVuKSk7CiAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5hZGRDaGlsZChuZXdOb2RlLmdldCgpKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIGlmIChtX3ZpZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkp
CkBAIC05ODQsNyArOTgwLDcgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6Y29tbWVudChjb25z
dCB4bWxDaGFyKiBzKQogCiAgICAgZXhpdFRleHQoKTsKIAotICAgIFJlZlB0cjxOb2RlPiBuZXdO
b2RlID0gQ29tbWVudDo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhzKSk7CisgICAgUmVmUHRyPE5v
ZGU+IG5ld05vZGUgPSBDb21tZW50OjpjcmVhdGUoZG9jdW1lbnQoKSwgdG9TdHJpbmcocykpOwog
ICAgIG1fY3VycmVudE5vZGUtPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpOwogICAgIGlmIChtX3Zp
ZXcgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCiAgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOwpA
QCAtOTk1LDEwICs5OTEsMTAgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6c3RhcnREb2N1bWVu
dChjb25zdCB4bWxDaGFyKiB2ZXJzaW9uLCBjb25zdCB4bWxDaGFyKiBlbmMKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKIAogICAgIGlmICh2ZXJzaW9uKQotICAgICAgICBtX2RvYy0+c2V0WE1M
VmVyc2lvbih0b1N0cmluZyh2ZXJzaW9uKSwgZWMpOwotICAgIG1fZG9jLT5zZXRYTUxTdGFuZGFs
b25lKHN0YW5kYWxvbmUgPT0gMSwgZWMpOyAvLyBwb3NzaWJsZSB2YWx1ZXMgYXJlIDAsIDEsIGFu
ZCAtMQorICAgICAgICBkb2N1bWVudCgpLT5zZXRYTUxWZXJzaW9uKHRvU3RyaW5nKHZlcnNpb24p
LCBlYyk7CisgICAgZG9jdW1lbnQoKS0+c2V0WE1MU3RhbmRhbG9uZShzdGFuZGFsb25lID09IDEs
IGVjKTsgLy8gcG9zc2libGUgdmFsdWVzIGFyZSAwLCAxLCBhbmQgLTEKICAgICBpZiAoZW5jb2Rp
bmcpCi0gICAgICAgIG1fZG9jLT5zZXRYTUxFbmNvZGluZyh0b1N0cmluZyhlbmNvZGluZykpOwor
ICAgICAgICBkb2N1bWVudCgpLT5zZXRYTUxFbmNvZGluZyh0b1N0cmluZyhlbmNvZGluZykpOwog
fQogCiB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjplbmREb2N1bWVudCgpCkBAIC0xMDE5LDcgKzEw
MTUsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25zdCB4bWxD
aGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcgogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgaWYgKG1fZG9jKSB7CisgICAgaWYgKGRvY3VtZW50KCkpIHsKICNpZiBFTkFCTEUoV01M
KSB8fCBFTkFCTEUoWEhUTUxNUCkKICAgICAgICAgU3RyaW5nIGV4dElkID0gdG9TdHJpbmcoZXh0
ZXJuYWxJRCk7CiAjZW5kaWYKQEAgLTEwNDAsNyArMTAzNiw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQ
YXJzZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIq
IGV4dGVyCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICBpZiAobV9kb2MtPmlzWEhUTUxNUERvY3VtZW50KCkpCisgICAgICAgICAgICBpZiAoZG9j
dW1lbnQoKS0+aXNYSFRNTE1QRG9jdW1lbnQoKSkKICAgICAgICAgICAgICAgICBzZXRJc1hIVE1M
TVBEb2N1bWVudCh0cnVlKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzZXRJ
c1hIVE1MRG9jdW1lbnQodHJ1ZSk7CkBAIC0xMDQ5LDcgKzEwNDUsNyBAQCB2b2lkIFhNTERvY3Vt
ZW50UGFyc2VyOjppbnRlcm5hbFN1YnNldChjb25zdCB4bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxD
aGFyKiBleHRlcgogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBtX2RvYy0+YWRkQ2hpbGQo
RG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIHRvU3RyaW5nKG5hbWUpLCB0b1N0cmluZyhleHRl
cm5hbElEKSwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CisgICAgICAgIGRvY3VtZW50KCktPmFkZENo
aWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKGRvY3VtZW50KCksIHRvU3RyaW5nKG5hbWUpLCB0b1N0
cmluZyhleHRlcm5hbElEKSwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CiAgICAgfQogfQogCkBAIC0x
Mjc1LDcgKzEyNzEsNyBAQCB2b2lkIFhNTERvY3VtZW50UGFyc2VyOjppbml0aWFsaXplUGFyc2Vy
Q29udGV4dChjb25zdCBjaGFyKiBjaHVuaykKICAgICBtX3Nhd1hTTFRyYW5zZm9ybSA9IGZhbHNl
OwogICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gZmFsc2U7CiAKLSAgICBYTUxEb2N1bWVudFBhcnNl
clNjb3BlIHNjb3BlKG1fZG9jLT5kb2NMb2FkZXIoKSk7CisgICAgWE1MRG9jdW1lbnRQYXJzZXJT
Y29wZSBzY29wZShkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSk7CiAgICAgaWYgKG1fcGFyc2luZ0Zy
YWdtZW50KQogICAgICAgICBtX2NvbnRleHQgPSBYTUxQYXJzZXJDb250ZXh0OjpjcmVhdGVNZW1v
cnlQYXJzZXIoJnNheCwgdGhpcywgY2h1bmspOwogICAgIGVsc2UKQEAgLTEyODYsMTIgKzEyODIs
MTIgQEAgdm9pZCBYTUxEb2N1bWVudFBhcnNlcjo6ZG9FbmQoKQogewogI2lmIEVOQUJMRShYU0xU
KQogICAgIGlmIChtX3Nhd1hTTFRyYW5zZm9ybSkgewotICAgICAgICB2b2lkKiBkb2MgPSB4bWxE
b2NQdHJGb3JTdHJpbmcobV9kb2MtPmRvY0xvYWRlcigpLCBtX29yaWdpbmFsU291cmNlRm9yVHJh
bnNmb3JtLCBtX2RvYy0+dXJsKCkuc3RyaW5nKCkpOwotICAgICAgICBtX2RvYy0+c2V0VHJhbnNm
b3JtU291cmNlKG5ldyBUcmFuc2Zvcm1Tb3VyY2UoZG9jKSk7CisgICAgICAgIHZvaWQqIGRvYyA9
IHhtbERvY1B0ckZvclN0cmluZyhkb2N1bWVudCgpLT5kb2NMb2FkZXIoKSwgbV9vcmlnaW5hbFNv
dXJjZUZvclRyYW5zZm9ybSwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkpOworICAgICAgICBk
b2N1bWVudCgpLT5zZXRUcmFuc2Zvcm1Tb3VyY2UobmV3IFRyYW5zZm9ybVNvdXJjZShkb2MpKTsK
IAotICAgICAgICBtX2RvYy0+c2V0UGFyc2luZyhmYWxzZSk7IC8vIE1ha2UgdGhlIGRvYyB0aGlu
ayBpdCdzIGRvbmUsIHNvIGl0IHdpbGwgYXBwbHkgeHNsIHNoZWV0cy4KLSAgICAgICAgbV9kb2Mt
PnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKLSAgICAgICAgbV9kb2MtPnNldFBhcnNpbmcodHJ1ZSk7
CisgICAgICAgIGRvY3VtZW50KCktPnNldFBhcnNpbmcoZmFsc2UpOyAvLyBNYWtlIHRoZSBkb2Mg
dGhpbmsgaXQncyBkb25lLCBzbyBpdCB3aWxsIGFwcGx5IHhzbCBzaGVldHMuCisgICAgICAgIGRv
Y3VtZW50KCktPnVwZGF0ZVN0eWxlU2VsZWN0b3IoKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+c2V0
UGFyc2luZyh0cnVlKTsKICAgICAgICAgbV9wYXJzZXJTdG9wcGVkID0gdHJ1ZTsKICAgICB9CiAj
ZW5kaWYKQEAgLTEzMDIsNyArMTI5OCw3IEBAIHZvaWQgWE1MRG9jdW1lbnRQYXJzZXI6OmRvRW5k
KCkKICAgICBpZiAobV9jb250ZXh0KSB7CiAgICAgICAgIC8vIFRlbGwgbGlieG1sIHdlJ3JlIGRv
bmUuCiAgICAgICAgIHsKLSAgICAgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUgc2NvcGUo
bV9kb2MtPmRvY0xvYWRlcigpKTsKKyAgICAgICAgICAgIFhNTERvY3VtZW50UGFyc2VyU2NvcGUg
c2NvcGUoZG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCkpOwogICAgICAgICAgICAgeG1sUGFyc2VDaHVu
ayhjb250ZXh0KCksIDAsIDAsIDEpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBh
cnNlci5jcHAKaW5kZXggNDE3MmZkY2NmMDlmNTcxYWY2Yjk0NmI0ZDg4ZDBmMWE5MjVhNjNlNS4u
OWQ1YmE1OTg4NzM4MDI2NmQ2MzA0NjlkMWNhYjYzODcyNjRlYzliNyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKQEAgLTY2LDcgKzY2LDcgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNw
YWNlCiAKIEhUTUxEb2N1bWVudFBhcnNlcjo6SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVu
dCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0RXJyb3JzKQotICAgIDogbV9kb2N1bWVudChkb2N1bWVu
dCkKKyAgICA6IERvY3VtZW50UGFyc2VyKGRvY3VtZW50KQogICAgICwgbV90b2tlbml6ZXIobmV3
IEhUTUxUb2tlbml6ZXIpCiAgICAgLCBtX3NjcmlwdFJ1bm5lcihuZXcgSFRNTFNjcmlwdFJ1bm5l
cihkb2N1bWVudCwgdGhpcykpCiAgICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBIVE1MVHJlZUJ1aWxk
ZXIobV90b2tlbml6ZXIuZ2V0KCksIGRvY3VtZW50LCByZXBvcnRFcnJvcnMpKQpAQCAtODAsNyAr
ODAsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1l
bnQqIGRvY3VtZW50LCBib29sIHJlcG9ydEVycm9ycwogLy8gRklYTUU6IE1lbWJlciB2YXJpYWJs
ZXMgc2hvdWxkIGJlIGdyb3VwZWQgaW50byBzZWxmLWluaXRpYWxpemluZyBzdHJ1Y3RzIHRvCiAv
LyBtaW5pbWl6ZSBjb2RlIGR1cGxpY2F0aW9uIGJldHdlZW4gdGhlc2UgY29uc3RydWN0b3JzLgog
SFRNTERvY3VtZW50UGFyc2VyOjpIVE1MRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbiBzY3JpcHRpbmdQZXJtaXNzaW9u
KQotICAgIDogbV9kb2N1bWVudChmcmFnbWVudC0+ZG9jdW1lbnQoKSkKKyAgICA6IERvY3VtZW50
UGFyc2VyKGZyYWdtZW50LT5kb2N1bWVudCgpKQogICAgICwgbV90b2tlbml6ZXIobmV3IEhUTUxU
b2tlbml6ZXIpCiAgICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBIVE1MVHJlZUJ1aWxkZXIobV90b2tl
bml6ZXIuZ2V0KCksIGZyYWdtZW50LCBzY3JpcHRpbmdQZXJtaXNzaW9uKSkKICAgICAsIG1fZW5k
V2FzRGVsYXllZChmYWxzZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQ
YXJzZXIuaCBiL1dlYkNvcmUvaHRtbC9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBjNzVhN2Zi
YmQ3NzYyODUxMWQxYmFiM2YzYjJhMDQ3MDY0MWQ2MWI0Li5lYTUzZjQxNTk0M2RhYjBhNTkwYzI5
ZTA4ZjAzMmM0N2VjMjI2NjZlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTERvY3VtZW50
UGFyc2VyLmgKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudFBhcnNlci5oCkBAIC04NCw3
ICs4NCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVk
UmVzb3VyY2UqKTsKIAogICAgIC8vIEV4cG9zZWQgZm9yIEhUTUxQYXJzZXJTY2hlZHVsZXIKLSAg
ICBEb2N1bWVudCogZG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50OyB9CiAgICAg
dm9pZCByZXN1bWVQYXJzaW5nQWZ0ZXJZaWVsZCgpOwogCiBwcml2YXRlOgpAQCAtMTE1LDkgKzEx
NCw2IEBAIHByaXZhdGU6CiAgICAgLy8gV2UgaG9sZCBtX3Rva2VuIGhlcmUgYmVjYXVzZSBpdCBt
aWdodCBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgSFRNTFRva2VuIG1fdG9rZW47CiAKLSAg
ICAvLyBXZSBtdXN0IHN1cHBvcnQgcGFyc2luZyBpbnRvIGEgRG9jdW1lbnQqIGFuZCBub3QganVz
dCBIVE1MRG9jdW1lbnQqCi0gICAgLy8gdG8gc3VwcG9ydCBEb2N1bWVudEZyYWdtZW50ICh3aGlj
aCBoYXMgYSBEb2N1bWVudCopLgotICAgIERvY3VtZW50KiBtX2RvY3VtZW50OwogICAgIE93blB0
cjxIVE1MVG9rZW5pemVyPiBtX3Rva2VuaXplcjsKICAgICBPd25QdHI8SFRNTFNjcmlwdFJ1bm5l
cj4gbV9zY3JpcHRSdW5uZXI7CiAgICAgT3duUHRyPEhUTUxUcmVlQnVpbGRlcj4gbV90cmVlQnVp
bGRlcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIu
Y3BwIGIvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXggZGQ1
MGZjYjg2MjU5NDQzMzgzMjVjMWQwNzgwYzI3YTAwZDg0MjM5Mi4uOWQ4YTE5YjY0ZjAzODNkYWU1
MTJmZTAwZmU1OWZjMjE1ZGVjNGE1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0xlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVu
dFBhcnNlci5jcHAKQEAgLTE0Niw4ICsxNDYsOCBAQCBpbmxpbmUgdm9pZCBUb2tlbjo6YWRkQXR0
cmlidXRlKEF0b21pY1N0cmluZyYgYXR0ck5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cgog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jLCBib29sIHJlcG9ydEVycm9y
cykKLSAgICA6IERvY3VtZW50UGFyc2VyKCkKK0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6TGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGJvb2wgcmVwb3J0
RXJyb3JzKQorICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCiAgICAgLCBtX2J1ZmZlcigw
KQogICAgICwgbV9zY3JpcHRDb2RlKDApCiAgICAgLCBtX3NjcmlwdENvZGVTaXplKDApCkBAIC0x
NTgsOCArMTU4LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXIoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3IKICAgICAsIG1faGFzU2NyaXB0
c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyhmYWxzZSkKICAgICAsIG1fdGltZXIodGhpcywgJkxlZ2Fj
eUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZCkKICAgICAsIG1fZXh0ZXJuYWxTY3JpcHRz
VGltZXIodGhpcywgJkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZUV4dGVybmFsU2Ny
aXB0c1RpbWVyRmlyZWQpCi0gICAgLCBtX2RvYyhkb2MpCi0gICAgLCBtX3RyZWVCdWlsZGVyKG5l
dyBMZWdhY3lIVE1MVHJlZUJ1aWxkZXIoZG9jLCByZXBvcnRFcnJvcnMpKQorICAgICwgbV90cmVl
QnVpbGRlcihuZXcgTGVnYWN5SFRNTFRyZWVCdWlsZGVyKGRvY3VtZW50LCByZXBvcnRFcnJvcnMp
KQogICAgICwgbV9pbldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudChmYWxzZSkKICAgICAs
IG1fc2NyaXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCkBAIC0xNjcs
OCArMTY2LDggQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQ
YXJzZXIoSFRNTERvY3VtZW50KiBkb2MsIGJvb2wgcmVwb3IKICAgICBiZWdpbigpOwogfQogCi1M
ZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmll
d1NvdXJjZURvY3VtZW50KiBkb2MpCi0gICAgOiBEb2N1bWVudFBhcnNlcih0cnVlKQorTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoSFRNTFZpZXdTb3Vy
Y2VEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBEb2N1bWVudFBhcnNlcihkb2N1bWVudCwgdHJ1
ZSkKICAgICAsIG1fYnVmZmVyKDApCiAgICAgLCBtX3NjcmlwdENvZGUoMCkKICAgICAsIG1fc2Ny
aXB0Q29kZVNpemUoMCkKQEAgLTE3OSw3ICsxNzgsNiBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihIVE1MVmlld1NvdXJjZURvY3VtZW50KiBkb2Mp
CiAgICAgLCBtX2hhc1NjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVldHMoZmFsc2UpCiAgICAgLCBt
X3RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnRpbWVyRmlyZWQpCiAgICAg
LCBtX2V4dGVybmFsU2NyaXB0c1RpbWVyKHRoaXMsICZMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKQotICAgICwgbV9kb2MoZG9jKQogICAg
ICwgbV9pbldyaXRlKGZhbHNlKQogICAgICwgbV9mcmFnbWVudChmYWxzZSkKICAgICAsIG1fc2Ny
aXB0aW5nUGVybWlzc2lvbihGcmFnbWVudFNjcmlwdGluZ0FsbG93ZWQpCkBAIC0xODgsNyArMTg2
LDggQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIo
SFRNTFZpZXdTb3VyY2VEb2N1bWVudCogZG9jKQogfQogCiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnLCBGcmFn
bWVudFNjcmlwdGluZ1Blcm1pc3Npb24gc2NyaXB0aW5nUGVybWlzc2lvbikKLSAgICA6IG1fYnVm
ZmVyKDApCisgICAgOiBEb2N1bWVudFBhcnNlcihmcmFnLT5kb2N1bWVudCgpKQorICAgICwgbV9i
dWZmZXIoMCkKICAgICAsIG1fc2NyaXB0Q29kZSgwKQogICAgICwgbV9zY3JpcHRDb2RlU2l6ZSgw
KQogICAgICwgbV9zY3JpcHRDb2RlQ2FwYWNpdHkoMCkKQEAgLTE5OCw3ICsxOTcsNiBAQCBMZWdh
Y3lIVE1MRG9jdW1lbnRQYXJzZXI6OkxlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZy
YWdtZW50KiBmcmFnLCBGcmFnbQogICAgICwgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hl
ZXRzKGZhbHNlKQogICAgICwgbV90aW1lcih0aGlzLCAmTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
Ojp0aW1lckZpcmVkKQogICAgICwgbV9leHRlcm5hbFNjcmlwdHNUaW1lcih0aGlzLCAmTGVnYWN5
SFRNTERvY3VtZW50UGFyc2VyOjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzVGltZXJGaXJlZCkKLSAg
ICAsIG1fZG9jKGZyYWctPmRvY3VtZW50KCkpCiAgICAgLCBtX3RyZWVCdWlsZGVyKG5ldyBMZWdh
Y3lIVE1MVHJlZUJ1aWxkZXIoZnJhZywgc2NyaXB0aW5nUGVybWlzc2lvbikpCiAgICAgLCBtX2lu
V3JpdGUoZmFsc2UpCiAgICAgLCBtX2ZyYWdtZW50KHRydWUpCkBAIC0yNjIsNyArMjYwLDcgQEAg
dm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmJlZ2luKCkKICAgICBtX2N1cnJlbnRUYWdT
dGFydExpbmVOdW1iZXIgPSAwOwogICAgIG1fc3RhdGUuc2V0Rm9yY2VTeW5jaHJvbm91cyhmYWxz
ZSk7CiAKLSAgICBQYWdlKiBwYWdlID0gbV9kb2MtPnBhZ2UoKTsKKyAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS0+cGFnZSgpOwogICAgIGlmIChwYWdlICYmIHBhZ2UtPmhhc0N1c3RvbUhUTUxU
b2tlbml6ZXJUaW1lRGVsYXkoKSkKICAgICAgICAgbV90b2tlbml6ZXJUaW1lRGVsYXkgPSBwYWdl
LT5jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCk7CiAgICAgZWxzZQpAQCAtNDI0LDE4ICs0
MjIsMTggQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1l
bnRQYXJzZXI6OnNjcmlwdEhhbmRsZXIoU3RhdGUgc3QKIAogICAgIC8vIChCdWd6aWxsYSAzODM3
KSBTY3JpcHRzIGZvbGxvd2luZyBhIGZyYW1lc2V0IGVsZW1lbnQgc2hvdWxkIG5vdCBleGVjdXRl
IG9yLAogICAgIC8vIGluIHRoZSBjYXNlIG9mIGV4dGVybiBzY3JpcHRzLCBldmVuIGxvYWQuCi0g
ICAgYm9vbCBmb2xsb3dpbmdGcmFtZXNldCA9IChtX2RvYy0+Ym9keSgpICYmIG1fZG9jLT5ib2R5
KCktPmhhc1RhZ05hbWUoZnJhbWVzZXRUYWcpKTsKKyAgICBib29sIGZvbGxvd2luZ0ZyYW1lc2V0
ID0gKGRvY3VtZW50KCktPmJvZHkoKSAmJiBkb2N1bWVudCgpLT5ib2R5KCktPmhhc1RhZ05hbWUo
ZnJhbWVzZXRUYWcpKTsKIAogICAgIENhY2hlZFNjcmlwdCogY3MgPSAwOwogICAgIC8vIGRvbid0
IGxvYWQgZXh0ZXJuYWwgc2NyaXB0cyBmb3Igc3RhbmRhbG9uZSBkb2N1bWVudHMgKGZvciBub3cp
CiAgICAgaWYgKCFpblZpZXdTb3VyY2VNb2RlKCkpIHsKLSAgICAgICAgaWYgKCFtX3NjcmlwdFRh
Z1NyY0F0dHJWYWx1ZS5pc0VtcHR5KCkgJiYgbV9kb2MtPmZyYW1lKCkpIHsKKyAgICAgICAgaWYg
KCFtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZS5pc0VtcHR5KCkgJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KSkgewogICAgICAgICAgICAgLy8gZm9yZ2V0IHdoYXQgd2UganVzdCBnb3Q7IGxvYWQgZnJvbSBz
cmMgdXJsIGluc3RlYWQKICAgICAgICAgICAgIGlmICghbV90cmVlQnVpbGRlci0+c2tpcE1vZGUo
KSAmJiAhZm9sbG93aW5nRnJhbWVzZXQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcGFyc2Vy
IG1pZ2h0IGhhdmUgYmVlbiBzdG9wcGVkIGJ5IGZvciBleGFtcGxlIGEgd2luZG93LmNsb3NlIGNh
bGwgaW4gYW4gZWFybGllciBzY3JpcHQuCiAgICAgICAgICAgICAgICAgLy8gSWYgc28sIHdlIGRv
bid0IHdhbnQgdG8gbG9hZCBzY3JpcHRzLgogICAgICAgICAgICAgICAgIGlmICghbV9wYXJzZXJT
dG9wcGVkICYmIG1fc2NyaXB0Tm9kZS0+ZGlzcGF0Y2hCZWZvcmVMb2FkRXZlbnQobV9zY3JpcHRU
YWdTcmNBdHRyVmFsdWUpICYmCi0gICAgICAgICAgICAgICAgICAgIChjcyA9IG1fZG9jLT5kb2NM
b2FkZXIoKS0+cmVxdWVzdFNjcmlwdChtX3NjcmlwdFRhZ1NyY0F0dHJWYWx1ZSwgbV9zY3JpcHRU
YWdDaGFyc2V0QXR0clZhbHVlKSkpCisgICAgICAgICAgICAgICAgICAgIChjcyA9IGRvY3VtZW50
KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0U2NyaXB0KG1fc2NyaXB0VGFnU3JjQXR0clZhbHVlLCBt
X3NjcmlwdFRhZ0NoYXJzZXRBdHRyVmFsdWUpKSkKICAgICAgICAgICAgICAgICAgICAgbV9wZW5k
aW5nU2NyaXB0cy5hcHBlbmQoY3MpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgbV9zY3JpcHROb2RlID0gMDsKQEAgLTQ0Nyw3ICs0NDUsNyBAQCBMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c2NyaXB0SGFu
ZGxlcihTdGF0ZSBzdAogICAgICAgICAgICAgZG9TY3JpcHRFeGVjID0gbV9zY3JpcHROb2RlLT5z
aG91bGRFeGVjdXRlQXNKYXZhU2NyaXB0KCk7CiAjaWYgRU5BQkxFKFhIVE1MTVApCiAgICAgICAg
ICAgICBpZiAoIWRvU2NyaXB0RXhlYykKLSAgICAgICAgICAgICAgICBtX2RvYy0+c2V0U2hvdWxk
UHJvY2Vzc05vc2NyaXB0RWxlbWVudCh0cnVlKTsKKyAgICAgICAgICAgICAgICBkb2N1bWVudCgp
LT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwogI2VuZGlmCiAgICAgICAg
ICAgICBtX3NjcmlwdE5vZGUgPSAwOwogICAgICAgICB9CkBAIC01MDMsNyArNTAxLDcgQEAgTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNj
cmlwdEhhbmRsZXIoU3RhdGUgc3QKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBw
cmVwZW5kaW5nU3JjID0gbV9zcmM7CiAgICAgICAgICAgICBzZXRTcmMoU2VnbWVudGVkU3RyaW5n
KCkpOwotICAgICAgICAgICAgc3RhdGUgPSBzY3JpcHRFeGVjdXRpb24oU2NyaXB0U291cmNlQ29k
ZShzY3JpcHRTdHJpbmcsIG1fZG9jLT5mcmFtZSgpID8gbV9kb2MtPmZyYW1lKCktPmRvY3VtZW50
KCktPnVybCgpIDogS1VSTCgpLCBzdGFydExpbmUpLCBzdGF0ZSk7CisgICAgICAgICAgICBzdGF0
ZSA9IHNjcmlwdEV4ZWN1dGlvbihTY3JpcHRTb3VyY2VDb2RlKHNjcmlwdFN0cmluZywgZG9jdW1l
bnQoKS0+ZnJhbWUoKSA/IGRvY3VtZW50KCktPmZyYW1lKCktPmRvY3VtZW50KCktPnVybCgpIDog
S1VSTCgpLCBzdGFydExpbmUpLCBzdGF0ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUzMyw3
ICs1MzEsNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OlN0YXRlIExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcjo6c2NyaXB0SGFuZGxlcihTdGF0ZSBzdAogI2lmIFBSRUxPQURfU0NBTk5FUl9F
TkFCTEVECiAgICAgaWYgKCFtX3BlbmRpbmdTY3JpcHRzLmlzRW1wdHkoKSAmJiAhbV9leGVjdXRp
bmdTY3JpcHQpIHsKICAgICAgICAgaWYgKCFtX3ByZWxvYWRTY2FubmVyKQotICAgICAgICAgICAg
bV9wcmVsb2FkU2Nhbm5lci5zZXQobmV3IExlZ2FjeVByZWxvYWRTY2FubmVyKG1fZG9jKSk7Cisg
ICAgICAgICAgICBtX3ByZWxvYWRTY2FubmVyLnNldChuZXcgTGVnYWN5UHJlbG9hZFNjYW5uZXIo
ZG9jdW1lbnQoKSkpOwogICAgICAgICBpZiAoIW1fcHJlbG9hZFNjYW5uZXItPmluUHJvZ3Jlc3Mo
KSkgewogICAgICAgICAgICAgbV9wcmVsb2FkU2Nhbm5lci0+YmVnaW4oKTsKICAgICAgICAgICAg
IG1fcHJlbG9hZFNjYW5uZXItPndyaXRlKG1fcGVuZGluZ1NyYyk7CkBAIC01NDcsNyArNTQ1LDcg
QEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OnNjcmlwdEhhbmRsZXIoU3RhdGUgc3QKIAogTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpT
dGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEV4ZWN1dGlvbihjb25zdCBTY3Jp
cHRTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBTdGF0ZSBzdGF0ZSkKIHsKLSAgICBpZiAobV9mcmFn
bWVudCB8fCAhbV9kb2MtPmZyYW1lKCkpCisgICAgaWYgKG1fZnJhZ21lbnQgfHwgIWRvY3VtZW50
KCktPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBzdGF0ZTsKICAgICBtX2V4ZWN1dGluZ1Njcmlw
dCsrOwogCkBAIC01NTYsNyArNTU0LDcgQEAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjpTdGF0
ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnNjcmlwdEV4ZWN1dGlvbihjb25zdAogICAgIG1f
Y3VycmVudFByZXBlbmRpbmdTcmMgPSAmcHJlcGVuZGluZ1NyYzsKIAogICAgIG1fc3RhdGUgPSBz
dGF0ZTsKLSAgICBtX2RvYy0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoc291cmNl
Q29kZSk7CisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQo
c291cmNlQ29kZSk7CiAgICAgc3RhdGUgPSBtX3N0YXRlOwogCiAgICAgc3RhdGUuc2V0QWxsb3dZ
aWVsZCh0cnVlKTsKQEAgLTU4NCw3ICs1ODIsNyBAQCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6
OlN0YXRlIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6c2NyaXB0RXhlY3V0aW9uKGNvbnN0CiAj
aWYgUFJFTE9BRF9TQ0FOTkVSX0VOQUJMRUQKICAgICAgICAgICAgIC8vIFdlIGFyZSBzdHVjayB3
YWl0aW5nIGZvciBhbm90aGVyIHNjcmlwdC4gTGV0cyBjaGVjayB0aGUgc291cmNlIHRoYXQKICAg
ICAgICAgICAgIC8vIHdhcyBqdXN0IGRvY3VtZW50LndyaXRlKCluIGZvciBhbnl0aGluZyB0byBs
b2FkLgotICAgICAgICAgICAgTGVnYWN5UHJlbG9hZFNjYW5uZXIgZG9jdW1lbnRXcml0ZVByZWxv
YWRTY2FubmVyKG1fZG9jKTsKKyAgICAgICAgICAgIExlZ2FjeVByZWxvYWRTY2FubmVyIGRvY3Vt
ZW50V3JpdGVQcmVsb2FkU2Nhbm5lcihkb2N1bWVudCgpKTsKICAgICAgICAgICAgIGRvY3VtZW50
V3JpdGVQcmVsb2FkU2Nhbm5lci5iZWdpbigpOwogICAgICAgICAgICAgZG9jdW1lbnRXcml0ZVBy
ZWxvYWRTY2FubmVyLndyaXRlKHByZXBlbmRpbmdTcmMpOwogICAgICAgICAgICAgZG9jdW1lbnRX
cml0ZVByZWxvYWRTY2FubmVyLmVuZCgpOwpAQCAtMTE0MCw3ICsxMTM4LDcgQEAgTGVnYWN5SFRN
TERvY3VtZW50UGFyc2VyOjpTdGF0ZSBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnBhcnNlVGFn
KFNlZ21lbnRlZFN0cmkKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZpeCBidWcgMzQzMDIg
YXQga2RlLmJ1Z3Mub3JnLiAgR28gYWhlYWQgYW5kIHRyZWF0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyA8IS0tPiBhcyBhIHZhbGlkIGNvbW1lbnQsIHNpbmNlIGJvdGggbW96aWxsYSBhbmQg
SUUgb24gd2luZG93cwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuIGhhbmRsZSB0aGlz
IGNhc2UuICBPbmx5IGRvIHRoaXMgaW4gcXVpcmtzIG1vZGUuIC1kd2gKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghc3JjLmlzRW1wdHkoKSAmJiAqc3JjID09ICc+JyAmJiBtX2RvYy0+aW5D
b21wYXRNb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3JjLmlzRW1wdHko
KSAmJiAqc3JjID09ICc+JyAmJiBkb2N1bWVudCgpLT5pbkNvbXBhdE1vZGUoKSkgewogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLnNldEluQ29tbWVudChmYWxzZSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLmFkdmFuY2VQYXN0Tm9uTmV3bGluZSgpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc3JjLmlzRW1wdHkoKSkKQEAgLTE0ODUsOSArMTQ4
Myw5IEBAIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6U3RhdGUgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjpwYXJzZVRhZyhTZWdtZW50ZWRTdHJpCiAgICAgICAgICAgICAgICAgbV9zY3JpcHRU
YWdTcmNBdHRyVmFsdWUgPSBTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ0No
YXJzZXRBdHRyVmFsdWUgPSBTdHJpbmcoKTsKICAgICAgICAgICAgICAgICBpZiAobV9jdXJyZW50
VG9rZW4uYXR0cnMgJiYgIW1fZnJhZ21lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
ZG9jLT5mcmFtZSgpICYmIG1fZG9jLT5mcmFtZSgpLT5zY3JpcHQoKS0+Y2FuRXhlY3V0ZVNjcmlw
dHMoTm90QWJvdXRUb0V4ZWN1dGVTY3JpcHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChk
b2N1bWVudCgpLT5mcmFtZSgpICYmIGRvY3VtZW50KCktPmZyYW1lKCktPnNjcmlwdCgpLT5jYW5F
eGVjdXRlU2NyaXB0cyhOb3RBYm91dFRvRXhlY3V0ZVNjcmlwdCkpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICgoYSA9IG1fY3VycmVudFRva2VuLmF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVt
KHNyY0F0dHIpKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdFRhZ1NyY0F0
dHJWYWx1ZSA9IG1fZG9jLT5jb21wbGV0ZVVSTChkZXByZWNhdGVkUGFyc2VVUkwoYS0+dmFsdWUo
KSkpLnN0cmluZygpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fc2NyaXB0VGFnU3Jj
QXR0clZhbHVlID0gZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoZGVwcmVjYXRlZFBhcnNlVVJMKGEt
PnZhbHVlKCkpKS5zdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KQEAgLTE1ODcsOCArMTU4NSw4IEBAIGlubGluZSBib29sIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6Y29udGludWVQcm9jZXNzaW5nKGludCYgcHJvY2Vzc2Vk
Q291bnQsIGRvCiAgICAgICAgICAgICAvKiBGSVhNRTogV2UnZCBsaWtlIHRvIHlpZWxkIGFnZ3Jl
c3NpdmVseSB0byBnaXZlIHN0eWxlc2hlZXRzIHRoZSBvcHBvcnR1bml0eSB0bwogICAgICAgICAg
ICAgICAgbG9hZCwgYnV0IHRoaXMgaHVydHMgb3ZlcmFsbCBwZXJmb3JtYW5jZSBvbiBzbG93ZXIg
bWFjaGluZXMuICBGb3Igbm93IHR1cm4gdGhpcwogICAgICAgICAgICAgICAgb2ZmLgotICAgICAg
ICAgICAgfHwgKCFtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkgJiYKLSAgICAgICAgICAg
ICAgICAobV9kb2MtPmRvY3VtZW50RWxlbWVudCgpLT5pZCgpICE9IElEX0hUTUwgfHwgbV9kb2Mt
PmJvZHkoKSkpKSB7Ki8KKyAgICAgICAgICAgIHx8ICghZG9jdW1lbnQoKS0+aGF2ZVN0eWxlc2hl
ZXRzTG9hZGVkKCkgJiYKKyAgICAgICAgICAgICAgICAoZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCktPmlkKCkgIT0gSURfSFRNTCB8fCBkb2N1bWVudCgpLT5ib2R5KCkpKSkgeyovCiAgICAg
ICAgICAgICAvLyBTY2hlZHVsZSB0aGUgdGltZXIgdG8ga2VlcCBwcm9jZXNzaW5nIGFzIHNvb24g
YXMgcG9zc2libGUuCiAgICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE3MTIsNyArMTcxMCw3IEBAIEFMV0FZU19JTkxJTkUg
dm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmFkdmFuY2UoU3RhdGUmIHN0YXRlKQogdm9p
ZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OndpbGxXcml0ZUhUTUwoY29uc3QgU2VnbWVudGVk
U3RyaW5nJiBzb3VyY2UpCiB7CiAgICAgI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIGlm
IChJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gbV9kb2MtPmluc3BlY3Rv
clRpbWVsaW5lQWdlbnQoKSkKKyAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRp
bWVsaW5lQWdlbnQgPSBkb2N1bWVudCgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAg
ICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsV3JpdGVIVE1MKHNvdXJjZS5sZW5ndGgoKSwgbV9s
aW5lTnVtYmVyKTsKICAgICAjZW5kaWYKIH0KQEAgLTE3MjAsNyArMTcxOCw3IEBAIHZvaWQgTGVn
YWN5SFRNTERvY3VtZW50UGFyc2VyOjp3aWxsV3JpdGVIVE1MKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYgc291cmNlKQogdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmRpZFdyaXRlSFRNTCgp
CiB7CiAgICAgI2lmIEVOQUJMRShJTlNQRUNUT1IpCi0gICAgICAgIGlmIChJbnNwZWN0b3JUaW1l
bGluZUFnZW50KiB0aW1lbGluZUFnZW50ID0gbV9kb2MtPmluc3BlY3RvclRpbWVsaW5lQWdlbnQo
KSkKKyAgICAgICAgaWYgKEluc3BlY3RvclRpbWVsaW5lQWdlbnQqIHRpbWVsaW5lQWdlbnQgPSBk
b2N1bWVudCgpLT5pbnNwZWN0b3JUaW1lbGluZUFnZW50KCkpCiAgICAgICAgICAgICB0aW1lbGlu
ZUFnZW50LT5kaWRXcml0ZUhUTUwobV9saW5lTnVtYmVyKTsKICAgICAjZW5kaWYKIH0KQEAgLTE3
NzAsNyArMTc2OCw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp3cml0ZShjb25z
dCBTZWdtZW50ZWRTdHJpbmcmIHN0ciwgYm9vbCBhcHBlbmREYXRhCiAKICAgICB3aWxsV3JpdGVI
VE1MKHNvdXJjZSk7CiAKLSAgICBGcmFtZSogZnJhbWUgPSBtX2RvYy0+ZnJhbWUoKTsKKyAgICBG
cmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpOwogICAgIFN0YXRlIHN0YXRlID0gbV9z
dGF0ZTsKICAgICBpbnQgcHJvY2Vzc2VkQ291bnQgPSAwOwogICAgIGRvdWJsZSBzdGFydFRpbWUg
PSBjdXJyZW50VGltZSgpOwpAQCAtMTgwMSw4ICsxNzk5LDggQEAgdm9pZCBMZWdhY3lIVE1MRG9j
dW1lbnRQYXJzZXI6OnN0b3BQYXJzaW5nKCkKICAgICAvLyBGSVhNRTogV2h5IGlzIExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlciB0aGUgb25seSBEb2N1bWVudFBhcnNlciB3aGljaCBjYWxscyBjaGVj
a0NvbXBsZXRlZD8KICAgICAvLyBUaGUgRnJhbWVMb2FkZXIgbmVlZHMgdG8ga25vdyB0aGF0IHRo
ZSBwYXJzZXIgaGFzIGZpbmlzaGVkIHdpdGggaXRzIGRhdGEsCiAgICAgLy8gcmVnYXJkbGVzcyBv
ZiB3aGV0aGVyIGl0IGhhcHBlbmVkIG5hdHVyYWxseSBvciBkdWUgdG8gbWFudWFsIGludGVydmVu
dGlvbi4KLSAgICBpZiAoIW1fZnJhZ21lbnQgJiYgbV9kb2MtPmZyYW1lKCkpCi0gICAgICAgIG1f
ZG9jLT5mcmFtZSgpLT5sb2FkZXIoKS0+Y2hlY2tDb21wbGV0ZWQoKTsKKyAgICBpZiAoIW1fZnJh
Z21lbnQgJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKSkKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+bG9hZGVyKCktPmNoZWNrQ29tcGxldGVkKCk7CiB9CiAKIGJvb2wgTGVnYWN5SFRNTERvY3Vt
ZW50UGFyc2VyOjpwcm9jZXNzaW5nRGF0YSgpIGNvbnN0CkBAIC0xODEyLDcgKzE4MTAsNyBAQCBi
b29sIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc2luZ0RhdGEoKSBjb25zdAogCiB2
b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6dGltZXJGaXJlZChUaW1lcjxMZWdhY3lIVE1M
RG9jdW1lbnRQYXJzZXI+KikKIHsKLSAgICBpZiAobV9kb2MtPnZpZXcoKSAmJiBtX2RvYy0+dmll
dygpLT5sYXlvdXRQZW5kaW5nKCkgJiYgIW1fZG9jLT5taW5pbXVtTGF5b3V0RGVsYXkoKSkgewor
ICAgIGlmIChkb2N1bWVudCgpLT52aWV3KCkgJiYgZG9jdW1lbnQoKS0+dmlldygpLT5sYXlvdXRQ
ZW5kaW5nKCkgJiYgIWRvY3VtZW50KCktPm1pbmltdW1MYXlvdXREZWxheSgpKSB7CiAgICAgICAg
IC8vIFJlc3RhcnQgdGhlIHRpbWVyIGFuZCBsZXQgbGF5b3V0IHdpbi4gIFRoaXMgaXMgYmFzaWNh
bGx5IGEgd2F5IG9mIGVuc3VyaW5nIHRoYXQgdGhlIGxheW91dAogICAgICAgICAvLyB0aW1lciBo
YXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gb3VyIHRpbWVyLgogICAgICAgICBtX3RpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKQEAgLTE4NDQsNyArMTg0Miw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50
UGFyc2VyOjplbmQoKQogICAgIGlmICghaW5WaWV3U291cmNlTW9kZSgpKQogICAgICAgICBtX3Ry
ZWVCdWlsZGVyLT5maW5pc2hlZCgpOwogICAgIGVsc2UKLSAgICAgICAgbV9kb2MtPmZpbmlzaGVk
UGFyc2luZygpOworICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmcoKTsKIH0KIAog
dm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCkBAIC0xOTA5LDcgKzE5MDcs
NyBAQCBQYXNzUmVmUHRyPE5vZGU+IExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1Rv
a2VuKCkKICAgICAgICAgaWYgKE5hbWVkTm9kZU1hcCogbWFwID0gbV9jdXJyZW50VG9rZW4uYXR0
cnMuZ2V0KCkpCiAgICAgICAgICAgICBtYXAtPnNocmlua1RvTGVuZ3RoKCk7CiAgICAgICAgIGlm
IChpblZpZXdTb3VyY2VNb2RlKCkpCi0gICAgICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlld1Nv
dXJjZURvY3VtZW50Kj4obV9kb2MpLT5hZGRWaWV3U291cmNlVG9rZW4oJm1fY3VycmVudFRva2Vu
KTsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxWaWV3U291cmNlRG9jdW1lbnQqPihkb2N1
bWVudCgpKS0+YWRkVmlld1NvdXJjZVRva2VuKCZtX2N1cnJlbnRUb2tlbik7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIC8vIHBhc3MgdGhlIHRva2VuIG92ZXIgdG8gdGhlIHBhcnNlciwgdGhl
IHBhcnNlciBET0VTIE5PVCBkZWxldGUgdGhlIHRva2VuCiAgICAgICAgICAgICBuID0gbV90cmVl
QnVpbGRlci0+cGFyc2VUb2tlbigmbV9jdXJyZW50VG9rZW4pOwpAQCAtMTkyMiw3ICsxOTIwLDcg
QEAgUGFzc1JlZlB0cjxOb2RlPiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OnByb2Nlc3NUb2tl
bigpCiB2b2lkIExlZ2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc0RvY3R5cGVUb2tlbigp
CiB7CiAgICAgaWYgKGluVmlld1NvdXJjZU1vZGUoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8SFRN
TFZpZXdTb3VyY2VEb2N1bWVudCo+KG1fZG9jKS0+YWRkVmlld1NvdXJjZURvY3R5cGVUb2tlbigm
bV9kb2N0eXBlVG9rZW4pOworICAgICAgICBzdGF0aWNfY2FzdDxIVE1MVmlld1NvdXJjZURvY3Vt
ZW50Kj4oZG9jdW1lbnQoKSktPmFkZFZpZXdTb3VyY2VEb2N0eXBlVG9rZW4oJm1fZG9jdHlwZVRv
a2VuKTsKICAgICBlbHNlCiAgICAgICAgIG1fdHJlZUJ1aWxkZXItPnBhcnNlRG9jdHlwZVRva2Vu
KCZtX2RvY3R5cGVUb2tlbik7CiB9CkBAIC0xOTc4LDcgKzE5NzYsNyBAQCB2b2lkIExlZ2FjeUhU
TUxEb2N1bWVudFBhcnNlcjo6ZW5sYXJnZVNjcmlwdEJ1ZmZlcihpbnQgbGVuKQogCiB2b2lkIExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcjo6ZXhlY3V0ZVNjcmlwdHNXYWl0aW5nRm9yU3R5bGVzaGVl
dHMoKQogewotICAgIEFTU0VSVChtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVkKCkpOworICAg
IEFTU0VSVChkb2N1bWVudCgpLT5oYXZlU3R5bGVzaGVldHNMb2FkZWQoKSk7CiAKICAgICBpZiAo
bV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzKQogICAgICAgICBub3RpZnlGaW5pc2hl
ZCgwKTsKQEAgLTE5OTUsNyArMTk5Myw3IEBAIHZvaWQgTGVnYWN5SFRNTERvY3VtZW50UGFyc2Vy
OjpleGVjdXRlRXh0ZXJuYWxTY3JpcHRzSWZSZWFkeSgpCiAKICAgICAvLyBNYWtlIGV4dGVybmFs
IHNjcmlwdHMgd2FpdCBmb3IgZXh0ZXJuYWwgc3R5bGVzaGVldHMuCiAgICAgLy8gRklYTUU6IFRo
aXMgbmVlZHMgdG8gYmUgZG9uZSBmb3IgaW5saW5lIHNjcmlwdHMgdG9vLgotICAgIG1faGFzU2Ny
aXB0c1dhaXRpbmdGb3JTdHlsZXNoZWV0cyA9ICFtX2RvYy0+aGF2ZVN0eWxlc2hlZXRzTG9hZGVk
KCk7CisgICAgbV9oYXNTY3JpcHRzV2FpdGluZ0ZvclN0eWxlc2hlZXRzID0gIWRvY3VtZW50KCkt
PmhhdmVTdHlsZXNoZWV0c0xvYWRlZCgpOwogICAgIGlmIChtX2hhc1NjcmlwdHNXYWl0aW5nRm9y
U3R5bGVzaGVldHMpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjAyNiw3ICsyMDI0LDcgQEAgdm9p
ZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5
KCkKICAgICAgICAgICAgICAgICBtX3N0YXRlID0gc2NyaXB0RXhlY3V0aW9uKHNvdXJjZUNvZGUs
IG1fc3RhdGUpOwogI2lmIEVOQUJMRShYSFRNTE1QKQogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIG1fZG9jLT5zZXRTaG91bGRQcm9jZXNzTm9zY3JpcHRFbGVtZW50KHRydWUpOwor
ICAgICAgICAgICAgICAgIGRvY3VtZW50KCktPnNldFNob3VsZFByb2Nlc3NOb3NjcmlwdEVsZW1l
bnQodHJ1ZSk7CiAjZW5kaWYKICAgICAgICAgICAgIG4tPmRpc3BhdGNoRXZlbnQoRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpKTsKICAgICAgICAgfQpA
QCAtMjA1Nyw3ICsyMDU1LDcgQEAgdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXI6OmV4ZWN1
dGVFeHRlcm5hbFNjcmlwdHNJZlJlYWR5KCkKIAogdm9pZCBMZWdhY3lIVE1MRG9jdW1lbnRQYXJz
ZXI6OmV4ZWN1dGVFeHRlcm5hbFNjcmlwdHNUaW1lckZpcmVkKFRpbWVyPExlZ2FjeUhUTUxEb2N1
bWVudFBhcnNlcj4qKQogewotICAgIGlmIChtX2RvYy0+dmlldygpICYmIG1fZG9jLT52aWV3KCkt
PmxheW91dFBlbmRpbmcoKSAmJiAhbV9kb2MtPm1pbmltdW1MYXlvdXREZWxheSgpKSB7CisgICAg
aWYgKGRvY3VtZW50KCktPnZpZXcoKSAmJiBkb2N1bWVudCgpLT52aWV3KCktPmxheW91dFBlbmRp
bmcoKSAmJiAhZG9jdW1lbnQoKS0+bWluaW11bUxheW91dERlbGF5KCkpIHsKICAgICAgICAgLy8g
UmVzdGFydCB0aGUgdGltZXIgYW5kIGRvIGxheW91dCBmaXJzdC4KICAgICAgICAgbV9leHRlcm5h
bFNjcmlwdHNUaW1lci5zdGFydE9uZVNob3QoMCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaCBiL1dlYkNvcmUvaHRt
bC9MZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCA0NjhlZjczM2VjZGZlNzk5OWRlNzhi
ZDBmYzhlNzI3YjQ2Y2Q2OWFiLi4xYTkyZWNkMjQ3OGQyNTBhNDNiMmVmMjM5MGZjZmM4MDQzZWU1
ZjlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyLmgK
KysrIGIvV2ViQ29yZS9odG1sL0xlZ2FjeUhUTUxEb2N1bWVudFBhcnNlci5oCkBAIC00MzEsNyAr
NDMxLDYgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBpbnQgbV9jQnVmZmVyUG9zOwogCiAgICAg
U2VnbWVudGVkU3RyaW5nIG1fc3JjOwotICAgIERvY3VtZW50KiBtX2RvYzsKICAgICBPd25QdHI8
TGVnYWN5SFRNTFRyZWVCdWlsZGVyPiBtX3RyZWVCdWlsZGVyOwogICAgIGJvb2wgbV9pbldyaXRl
OwogICAgIGJvb2wgbV9mcmFnbWVudDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0ZUUERp
cmVjdG9yeURvY3VtZW50LmNwcCBiL1dlYkNvcmUvbG9hZGVyL0ZUUERpcmVjdG9yeURvY3VtZW50
LmNwcAppbmRleCBiNDY4NzZiMjE0ODU3MmM3YWYwZDI3YjU0NzliNTUyZmQ4YTdmMDk3Li5kNmFh
YTQ3NDZiZGFkM2FjNjJlMTZjNzcyYTMxOGIxNzBjMGFlODhiIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2xvYWRlci9GVFBEaXJlY3RvcnlEb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRlRQ
RGlyZWN0b3J5RG9jdW1lbnQuY3BwCkBAIC04MCw3ICs4MCw2IEBAIHByaXZhdGU6CiAgICAgdm9p
ZCBhcHBlbmRFbnRyeShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc2l6ZSwgY29u
c3QgU3RyaW5nJiBkYXRlLCBib29sIGlzRGlyZWN0b3J5KTsgICAgCiAgICAgUGFzc1JlZlB0cjxF
bGVtZW50PiBjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZyYpOwogICAgIAotICAgIERv
Y3VtZW50KiBtX2RvYzsKICAgICBSZWZQdHI8SFRNTFRhYmxlRWxlbWVudD4gbV90YWJsZUVsZW1l
bnQ7CiAKICAgICBib29sIG1fc2tpcExGOwpAQCAtOTQsOSArOTMsOCBAQCBwcml2YXRlOgogICAg
IExpc3RTdGF0ZSBtX2xpc3RTdGF0ZTsKIH07CiAKLUZUUERpcmVjdG9yeURvY3VtZW50UGFyc2Vy
OjpGVFBEaXJlY3RvcnlEb2N1bWVudFBhcnNlcihIVE1MRG9jdW1lbnQqIGRvYykKLSAgICA6IExl
Z2FjeUhUTUxEb2N1bWVudFBhcnNlcihkb2MsIGZhbHNlKQotICAgICwgbV9kb2MoZG9jKQorRlRQ
RGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OkZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyKEhUTUxE
b2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBMZWdhY3lIVE1MRG9jdW1lbnRQYXJzZXIoZG9jdW1l
bnQsIGZhbHNlKQogICAgICwgbV9za2lwTEYoZmFsc2UpCiAgICAgLCBtX3BhcnNlZFRlbXBsYXRl
KGZhbHNlKQogICAgICwgbV9zaXplKDI1NCkKQEAgLTExMiw4ICsxMTAsOCBAQCB2b2lkIEZUUERp
cmVjdG9yeURvY3VtZW50UGFyc2VyOjphcHBlbmRFbnRyeShjb25zdCBTdHJpbmcmIGZpbGVuYW1l
LCBjb25zdCBTdHJpbgogICAgIFJlZlB0cjxFbGVtZW50PiByb3dFbGVtZW50ID0gbV90YWJsZUVs
ZW1lbnQtPmluc2VydFJvdygtMSwgZWMpOwogICAgIHJvd0VsZW1lbnQtPnNldEF0dHJpYnV0ZSgi
Y2xhc3MiLCAiZnRwRGlyZWN0b3J5RW50cnlSb3ciLCBlYyk7CiAgICAKLSAgICBSZWZQdHI8RWxl
bWVudD4gZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7Ci0gICAg
ZWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jLCBTdHJpbmcoJm5vQnJlYWtT
cGFjZSwgMSkpLCBlYyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGVsZW1lbnQgPSBkb2N1bWVudCgp
LT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CisgICAgZWxlbWVudC0+YXBwZW5kQ2hpbGQo
VGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIFN0cmluZygmbm9CcmVha1NwYWNlLCAxKSksIGVjKTsK
ICAgICBpZiAoaXNEaXJlY3RvcnkpCiAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSgiY2xh
c3MiLCAiZnRwRGlyZWN0b3J5SWNvbiBmdHBEaXJlY3RvcnlUeXBlRGlyZWN0b3J5IiwgZWMpOwog
ICAgIGVsc2UKQEAgLTEyNCwxMyArMTIyLDEzIEBAIHZvaWQgRlRQRGlyZWN0b3J5RG9jdW1lbnRQ
YXJzZXI6OmFwcGVuZEVudHJ5KGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIGNvbnN0IFN0cmluCiAg
ICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlTmFtZSIs
IGVjKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBlYyk7CiAgICAgCi0g
ICAgZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7Ci0gICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jLCBkYXRlKSwgZWMpOworICAgIGVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CisgICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIGRhdGUpLCBlYyk7CiAg
ICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlRGF0ZSIs
IGVjKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBlYyk7CiAgICAgCi0g
ICAgZWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7Ci0gICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKG1fZG9jLCBzaXplKSwgZWMpOworICAgIGVs
ZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBmYWxzZSk7CisgICAgZWxl
bWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRlKGRvY3VtZW50KCksIHNpemUpLCBlYyk7CiAg
ICAgZWxlbWVudC0+c2V0QXR0cmlidXRlKCJjbGFzcyIsICJmdHBEaXJlY3RvcnlGaWxlU2l6ZSIs
IGVjKTsKICAgICByb3dFbGVtZW50LT5hcHBlbmRDaGlsZChlbGVtZW50LCBlYyk7CiB9CkBAIC0x
MzksMTcgKzEzNywxNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEZUUERpcmVjdG9yeURvY3VtZW50
UGFyc2VyOjpjcmVhdGVUREZvckZpbGVuYW1lKGNvbnN0IFN0cmluZwogewogICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CiAgICAgCi0gICAgU3RyaW5nIGZ1bGxVUkwgPSBtX2RvYy0+YmFzZVVSTCgpLnN0
cmluZygpOworICAgIFN0cmluZyBmdWxsVVJMID0gZG9jdW1lbnQoKS0+YmFzZVVSTCgpLnN0cmlu
ZygpOwogICAgIGlmIChmdWxsVVJMW2Z1bGxVUkwubGVuZ3RoKCkgLSAxXSA9PSAnLycpCiAgICAg
ICAgIGZ1bGxVUkwuYXBwZW5kKGZpbGVuYW1lKTsKICAgICBlbHNlCiAgICAgICAgIGZ1bGxVUkwu
YXBwZW5kKCIvIiArIGZpbGVuYW1lKTsKIAotICAgIFJlZlB0cjxFbGVtZW50PiBhbmNob3JFbGVt
ZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQoYVRhZywgZmFsc2UpOworICAgIFJlZlB0cjxFbGVt
ZW50PiBhbmNob3JFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChhVGFnLCBmYWxz
ZSk7CiAgICAgYW5jaG9yRWxlbWVudC0+c2V0QXR0cmlidXRlKCJocmVmIiwgZnVsbFVSTCwgZWMp
OwotICAgIGFuY2hvckVsZW1lbnQtPmFwcGVuZENoaWxkKFRleHQ6OmNyZWF0ZShtX2RvYywgZmls
ZW5hbWUpLCBlYyk7CisgICAgYW5jaG9yRWxlbWVudC0+YXBwZW5kQ2hpbGQoVGV4dDo6Y3JlYXRl
KGRvY3VtZW50KCksIGZpbGVuYW1lKSwgZWMpOwogICAgIAotICAgIFJlZlB0cjxFbGVtZW50PiB0
ZEVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudCh0ZFRhZywgZmFsc2UpOworICAgIFJlZlB0
cjxFbGVtZW50PiB0ZEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KHRkVGFnLCBm
YWxzZSk7CiAgICAgdGRFbGVtZW50LT5hcHBlbmRDaGlsZChhbmNob3JFbGVtZW50LCBlYyk7CiAg
ICAgCiAgICAgcmV0dXJuIHRkRWxlbWVudC5yZWxlYXNlKCk7CkBAIC0yOTQsNyArMjkyLDcgQEAg
c3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gY3JlYXRlVGVtcGxhdGVEb2N1
bWVudERhdGEoU2V0dGluZ3MqIHNldHQKICAgICAKIGJvb2wgRlRQRGlyZWN0b3J5RG9jdW1lbnRQ
YXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFJlZlB0cjxTaGFyZWRCdWZmZXI+LCB0ZW1wbGF0ZURvY3VtZW50RGF0YSwgKGNyZWF0ZVRlbXBs
YXRlRG9jdW1lbnREYXRhKG1fZG9jLT5zZXR0aW5ncygpKSkpOworICAgIERFRklORV9TVEFUSUNf
TE9DQUwoUmVmUHRyPFNoYXJlZEJ1ZmZlcj4sIHRlbXBsYXRlRG9jdW1lbnREYXRhLCAoY3JlYXRl
VGVtcGxhdGVEb2N1bWVudERhdGEoZG9jdW1lbnQoKS0+c2V0dGluZ3MoKSkpKTsKICAgICAvLyBG
SVhNRTogSW5zdGVhZCBvZiBzdG9yaW5nIHRoZSBkYXRhLCB3ZSdkIHJhdGhlciBhY3R1YWxseSBw
YXJzZSB0aGUgdGVtcGxhdGUgZGF0YSBpbnRvIHRoZSB0ZW1wbGF0ZSBEb2N1bWVudCBvbmNlLAog
ICAgIC8vIHN0b3JlIHRoYXQgZG9jdW1lbnQsIHRoZW4gImNvcHkiIGl0IHdoZW5ldmVyIHdlIGdl
dCBhbiBGVFAgZGlyZWN0b3J5IGxpc3RpbmcuICBUaGVyZSBhcmUgY29tcGxleGl0aWVzIHdpdGgg
dGhpcyAKICAgICAvLyBhcHByb2FjaCB0aGF0IG1ha2UgaXQgd29ydGggcHV0dGluZyB0aGlzIG9m
Zi4KQEAgLTMwOSw3ICszMDcsNyBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjps
b2FkRG9jdW1lbnRUZW1wbGF0ZSgpCiAgICAgTGVnYWN5SFRNTERvY3VtZW50UGFyc2VyOjp3cml0
ZShTdHJpbmcodGVtcGxhdGVEb2N1bWVudERhdGEtPmRhdGEoKSwgdGVtcGxhdGVEb2N1bWVudERh
dGEtPnNpemUoKSksIHRydWUpOwogICAgIHNldEZvcmNlU3luY2hyb25vdXMoZmFsc2UpOwogICAg
IAotICAgIFJlZlB0cjxFbGVtZW50PiB0YWJsZUVsZW1lbnQgPSBtX2RvYy0+Z2V0RWxlbWVudEJ5
SWQoImZ0cERpcmVjdG9yeVRhYmxlIik7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVu
dCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKCJmdHBEaXJlY3RvcnlUYWJsZSIpOwogICAg
IGlmICghdGFibGVFbGVtZW50KQogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBmaW5kIGVs
ZW1lbnQgYnkgaWQgXCJmdHBEaXJlY3RvcnlUYWJsZVwiIGluIHRoZSB0ZW1wbGF0ZSBkb2N1bWVu
dC4iKTsKICAgICBlbHNlIGlmICghdGFibGVFbGVtZW50LT5oYXNUYWdOYW1lKHRhYmxlVGFnKSkK
QEAgLTMyMiw3ICszMjAsNyBAQCBib29sIEZUUERpcmVjdG9yeURvY3VtZW50UGFyc2VyOjpsb2Fk
RG9jdW1lbnRUZW1wbGF0ZSgpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gT3RoZXJ3
aXNlIGNyZWF0ZSBvbmUgbWFudWFsbHkKLSAgICB0YWJsZUVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRl
RWxlbWVudCh0YWJsZVRhZywgZmFsc2UpOworICAgIHRhYmxlRWxlbWVudCA9IGRvY3VtZW50KCkt
PmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKICAgICBtX3RhYmxlRWxlbWVudCA9IHN0
YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWM7ICAgICAgICAKICAgICBtX3RhYmxlRWxlbWVudC0+c2V0QXR0cmlidXRl
KCJpZCIsICJmdHBEaXJlY3RvcnlUYWJsZSIsIGVjKTsKQEAgLTMzMCwxMCArMzI4LDEwIEBAIGJv
b2wgRlRQRGlyZWN0b3J5RG9jdW1lbnRQYXJzZXI6OmxvYWREb2N1bWVudFRlbXBsYXRlKCkKICAg
ICAvLyBJZiB3ZSBkaWRuJ3QgZmluZCB0aGUgdGFibGUgZWxlbWVudCwgbGV0cyB0cnkgdG8gYXBw
ZW5kIG91ciBvd24gdG8gdGhlIGJvZHkKICAgICAvLyBJZiB0aGF0IGZhaWxzIGZvciBzb21lIHJl
YXNvbiwgY3JhbSBpdCBvbiB0aGUgZW5kIG9mIHRoZSBkb2N1bWVudCBhcyBhIGxhc3QKICAgICAv
LyBkaXRjaCBlZmZvcnQKLSAgICBpZiAoRWxlbWVudCogYm9keSA9IG1fZG9jLT5ib2R5KCkpCisg
ICAgaWYgKEVsZW1lbnQqIGJvZHkgPSBkb2N1bWVudCgpLT5ib2R5KCkpCiAgICAgICAgIGJvZHkt
PmFwcGVuZENoaWxkKG1fdGFibGVFbGVtZW50LCBlYyk7CiAgICAgZWxzZQotICAgICAgICBtX2Rv
Yy0+YXBwZW5kQ2hpbGQobV90YWJsZUVsZW1lbnQsIGVjKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+
YXBwZW5kQ2hpbGQobV90YWJsZUVsZW1lbnQsIGVjKTsKICAgICAgICAgCiAgICAgcmV0dXJuIHRy
dWU7CiB9CkBAIC0zNDQsMTMgKzM0MiwxMiBAQCB2b2lkIEZUUERpcmVjdG9yeURvY3VtZW50UGFy
c2VyOjpjcmVhdGVCYXNpY0RvY3VtZW50KCkKIAogICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgImJh
c2ljIGRvY3VtZW50IiBtb3JlIGFjY2VwdGFibGUKIAotICAgIAotICAgIFJlZlB0cjxFbGVtZW50
PiBib2R5RWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAg
ICBSZWZQdHI8RWxlbWVudD4gYm9keUVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50
KGJvZHlUYWcsIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBFeGNl
cHRpb25Db2RlIGVjOwotICAgIG1fZG9jLT5hcHBlbmRDaGlsZChib2R5RWxlbWVudCwgZWMpOwor
ICAgIGRvY3VtZW50KCktPmFwcGVuZENoaWxkKGJvZHlFbGVtZW50LCBlYyk7CiAgICAgCi0gICAg
UmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHRhYmxl
VGFnLCBmYWxzZSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHRhYmxlRWxlbWVudCA9IGRvY3VtZW50
KCktPmNyZWF0ZUVsZW1lbnQodGFibGVUYWcsIGZhbHNlKTsKICAgICBtX3RhYmxlRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUVsZW1lbnQqPih0YWJsZUVsZW1lbnQuZ2V0KCkpOwogICAg
IG1fdGFibGVFbGVtZW50LT5zZXRBdHRyaWJ1dGUoImlkIiwgImZ0cERpcmVjdG9yeVRhYmxlIiwg
ZWMpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9JbWFnZURvY3VtZW50LmNwcCBiL1dl
YkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCmluZGV4IDA5YTAzMTEwY2YzYmZjNzFmN2Yz
YzJkZmYzMGFjMThmMGEwN2RlNzcuLjUwNzVmZGRhNmM0MGY5NjYxMjhhOTZjYTNhNjQxNjhjN2U4
NzE1MjcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCisrKyBi
L1dlYkNvcmUvbG9hZGVyL0ltYWdlRG9jdW1lbnQuY3BwCkBAIC03Niw5ICs3NiwxMiBAQCBwcml2
YXRlOgogICAgIEltYWdlRG9jdW1lbnQqIG1fZG9jOwogfTsKICAgICAKLWNsYXNzIEltYWdlVG9r
ZW5pemVyIDogcHVibGljIERvY3VtZW50UGFyc2VyIHsKK2NsYXNzIEltYWdlRG9jdW1lbnRQYXJz
ZXIgOiBwdWJsaWMgRG9jdW1lbnRQYXJzZXIgewogcHVibGljOgotICAgIEltYWdlVG9rZW5pemVy
KEltYWdlRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2MpIHt9CisgICAgSW1hZ2VEb2N1bWVudFBh
cnNlcihJbWFnZURvY3VtZW50KiBkb2N1bWVudCkKKyAgICAgICAgOiBEb2N1bWVudFBhcnNlcihk
b2N1bWVudCkKKyAgICB7CisgICAgfQogCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlKGNvbnN0IFNl
Z21lbnRlZFN0cmluZyYsIGJvb2wgYXBwZW5kRGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGZpbmlz
aCgpOwpAQCAtODgsOCArOTEsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCB3YW50c1Jh
d0RhdGEoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3
RGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuKTsKIAotcHJpdmF0ZToKLSAgICBJbWFnZURv
Y3VtZW50KiBtX2RvYzsKKyAgICBJbWFnZURvY3VtZW50KiBkb2N1bWVudCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SW1hZ2VEb2N1bWVudCo+KG1fZG9jdW1lbnQp
OworICAgIH0KIH07CiAKIGNsYXNzIEltYWdlRG9jdW1lbnRFbGVtZW50IDogcHVibGljIEhUTUxJ
bWFnZUVsZW1lbnQgewpAQCAtMTIyLDY3ICsxMjcsNjcgQEAgc3RhdGljIGZsb2F0IHBhZ2Vab29t
RmFjdG9yKERvY3VtZW50KiBkb2N1bWVudCkKICAgICByZXR1cm4gdmlldyA/IHZpZXctPnBhZ2Va
b29tRmFjdG9yKCkgOiAxOwogfQogCi12b2lkIEltYWdlVG9rZW5pemVyOjp3cml0ZShjb25zdCBT
ZWdtZW50ZWRTdHJpbmcmLCBib29sKQordm9pZCBJbWFnZURvY3VtZW50UGFyc2VyOjp3cml0ZShj
b25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sKQogewogICAgIC8vIDxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjUzOTc+OiBKUyBjb2RlIGNhbiBhbHdheXMgY2FsbCBk
b2N1bWVudC53cml0ZSwgd2UgbmVlZCB0byBoYW5kbGUgaXQuCiAgICAgbm90SW1wbGVtZW50ZWQo
KTsKIH0KIAotYm9vbCBJbWFnZVRva2VuaXplcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqLCBp
bnQpCitib29sIEltYWdlRG9jdW1lbnRQYXJzZXI6OndyaXRlUmF3RGF0YShjb25zdCBjaGFyKiwg
aW50KQogewotICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZnJh
bWUtPnNldHRpbmdzKCk7CiAgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5hbGxv
d0ltYWdlcyghc2V0dGluZ3MgfHwgc2V0dGluZ3MtPmFyZUltYWdlc0VuYWJsZWQoKSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBt
X2RvYy0+Y2FjaGVkSW1hZ2UoKTsKKworICAgIENhY2hlZEltYWdlKiBjYWNoZWRJbWFnZSA9IGRv
Y3VtZW50KCktPmNhY2hlZEltYWdlKCk7CiAgICAgY2FjaGVkSW1hZ2UtPmRhdGEoZnJhbWUtPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCksIGZhbHNlKTsKIAot
ICAgIG1fZG9jLT5pbWFnZUNoYW5nZWQoKTsKKyAgICBkb2N1bWVudCgpLT5pbWFnZUNoYW5nZWQo
KTsKICAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSW1hZ2VUb2tlbml6ZXI6OmZp
bmlzaCgpCit2b2lkIEltYWdlRG9jdW1lbnRQYXJzZXI6OmZpbmlzaCgpCiB7Ci0gICAgaWYgKCFt
X3BhcnNlclN0b3BwZWQgJiYgbV9kb2MtPmltYWdlRWxlbWVudCgpKSB7Ci0gICAgICAgIENhY2hl
ZEltYWdlKiBjYWNoZWRJbWFnZSA9IG1fZG9jLT5jYWNoZWRJbWFnZSgpOwotICAgICAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gbV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCk7CisgICAgaWYgKCFtX3BhcnNlclN0b3BwZWQg
JiYgZG9jdW1lbnQoKS0+aW1hZ2VFbGVtZW50KCkpIHsKKyAgICAgICAgQ2FjaGVkSW1hZ2UqIGNh
Y2hlZEltYWdlID0gZG9jdW1lbnQoKS0+Y2FjaGVkSW1hZ2UoKTsKKyAgICAgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSA9IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5tYWluUmVzb3VyY2VEYXRhKCk7CiAKICAgICAgICAgLy8gSWYgdGhpcyBpcyBh
IG11bHRpcGFydCBpbWFnZSwgbWFrZSBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgcGFydCwgc2luY2Ug
dGhlIHJlc291cmNlIGRhdGEKICAgICAgICAgLy8gd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUg
bmV4dCBwYXJ0LgotICAgICAgICBpZiAobV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVu
dExvYWRlcigpLT5pc0xvYWRpbmdNdWx0aXBhcnRDb250ZW50KCkpCisgICAgICAgIGlmIChkb2N1
bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+aXNMb2FkaW5nTXVs
dGlwYXJ0Q29udGVudCgpKQogICAgICAgICAgICAgZGF0YSA9IGRhdGEtPmNvcHkoKTsKIAogICAg
ICAgICBjYWNoZWRJbWFnZS0+ZGF0YShkYXRhLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgICAgIGNh
Y2hlZEltYWdlLT5maW5pc2goKTsKIAotICAgICAgICBjYWNoZWRJbWFnZS0+c2V0UmVzcG9uc2Uo
bV9kb2MtPmZyYW1lKCktPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpKTsK
KyAgICAgICAgY2FjaGVkSW1hZ2UtPnNldFJlc3BvbnNlKGRvY3VtZW50KCktPmZyYW1lKCktPmxv
YWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5yZXNwb25zZSgpKTsKIAotICAgICAgICBJbnRTaXpl
IHNpemUgPSBjYWNoZWRJbWFnZS0+aW1hZ2VTaXplKHBhZ2Vab29tRmFjdG9yKG1fZG9jKSk7Cisg
ICAgICAgIEludFNpemUgc2l6ZSA9IGNhY2hlZEltYWdlLT5pbWFnZVNpemUocGFnZVpvb21GYWN0
b3IoZG9jdW1lbnQoKSkpOwogICAgICAgICBpZiAoc2l6ZS53aWR0aCgpKSB7CiAgICAgICAgICAg
ICAvLyBDb21wdXRlIHRoZSB0aXRsZSwgd2UgdXNlIHRoZSBkZWNvZGVkIGZpbGVuYW1lIG9mIHRo
ZSByZXNvdXJjZSwgZmFsbGluZwogICAgICAgICAgICAgLy8gYmFjayBvbiB0aGUgKGRlY29kZWQp
IGhvc3RuYW1lIGlmIHRoZXJlIGlzIG5vIHBhdGguCi0gICAgICAgICAgICBTdHJpbmcgZmlsZU5h
bWUgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMobV9kb2MtPnVybCgpLmxhc3RQYXRoQ29tcG9u
ZW50KCkpOworICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZGVjb2RlVVJMRXNjYXBlU2Vx
dWVuY2VzKGRvY3VtZW50KCktPnVybCgpLmxhc3RQYXRoQ29tcG9uZW50KCkpOwogICAgICAgICAg
ICAgaWYgKGZpbGVOYW1lLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IG1f
ZG9jLT51cmwoKS5ob3N0KCk7Ci0gICAgICAgICAgICBtX2RvYy0+c2V0VGl0bGUoaW1hZ2VUaXRs
ZShmaWxlTmFtZSwgc2l6ZSkpOworICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gZG9jdW1lbnQo
KS0+dXJsKCkuaG9zdCgpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+c2V0VGl0bGUoaW1hZ2VU
aXRsZShmaWxlTmFtZSwgc2l6ZSkpOwogICAgICAgICB9CiAKLSAgICAgICAgbV9kb2MtPmltYWdl
Q2hhbmdlZCgpOworICAgICAgICBkb2N1bWVudCgpLT5pbWFnZUNoYW5nZWQoKTsKICAgICB9CiAK
LSAgICBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCk7CisgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQ
YXJzaW5nKCk7CiB9CiAKLWJvb2wgSW1hZ2VUb2tlbml6ZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiti
b29sIEltYWdlRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0gICAgLy8gZmlu
aXNoKCkgYWx3YXlzIGNhbGxzIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3ZSdsbCBiZSBk
ZWxldGVkCisgICAgLy8gZmluaXNoKCkgYWx3YXlzIGNhbGxzIGRvY3VtZW50KCktPmZpbmlzaGVk
UGFyc2luZygpIHNvIHdlJ2xsIGJlIGRlbGV0ZWQKICAgICAvLyBhZnRlciBmaW5pc2goKS4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgSW1hZ2VUb2tlbml6ZXI6OmlzV2FpdGluZ0ZvclNj
cmlwdHMoKSBjb25zdAorYm9vbCBJbWFnZURvY3VtZW50UGFyc2VyOjppc1dhaXRpbmdGb3JTY3Jp
cHRzKCkgY29uc3QKIHsKICAgICAvLyBBbiBpbWFnZSBkb2N1bWVudCBpcyBuZXZlciB3YWl0aW5n
IGZvciBzY3JpcHRzCiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjAyLDcgKzIwNyw3IEBAIEltYWdl
RG9jdW1lbnQ6OkltYWdlRG9jdW1lbnQoRnJhbWUqIGZyYW1lKQogICAgIAogRG9jdW1lbnRQYXJz
ZXIqIEltYWdlRG9jdW1lbnQ6OmNyZWF0ZVBhcnNlcigpCiB7Ci0gICAgcmV0dXJuIG5ldyBJbWFn
ZVRva2VuaXplcih0aGlzKTsKKyAgICByZXR1cm4gbmV3IEltYWdlRG9jdW1lbnRQYXJzZXIodGhp
cyk7CiB9CiAKIHZvaWQgSW1hZ2VEb2N1bWVudDo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIvTWVkaWFEb2N1bWVudC5jcHAgYi9XZWJDb3JlL2xv
YWRlci9NZWRpYURvY3VtZW50LmNwcAppbmRleCA1M2NkNDM5ZDRjYzZiZGU0YmYxYjNlYThkZDEw
MDI5OTUyN2IzMjA0Li5iOWEzZDRlZDNlNGZlZDMyMTcyMzE3N2NkYTA4NWRlYWRkMzY1YzJlIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9NZWRpYURvY3VtZW50LmNwcAorKysgYi9XZWJDb3Jl
L2xvYWRlci9NZWRpYURvY3VtZW50LmNwcApAQCAtNTMsOCArNTMsMTIgQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogY2xhc3MgTWVkaWFEb2N1bWVudFBhcnNlciA6IHB1YmxpYyBEb2N1
bWVudFBhcnNlciB7CiBwdWJsaWM6Ci0gICAgTWVkaWFEb2N1bWVudFBhcnNlcihEb2N1bWVudCog
ZG9jKSA6IG1fZG9jKGRvYyksIG1fbWVkaWFFbGVtZW50KDApIHt9Ci0gICAgICAgIAorICAgIE1l
ZGlhRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IERvY3VtZW50
UGFyc2VyKGRvY3VtZW50KQorICAgICAgICAsIG1fbWVkaWFFbGVtZW50KDApCisgICAgeworICAg
IH0KKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJiwgYm9vbCBhcHBlbmREYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CkBAIC02
Niw3ICs3MCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgIHZvaWQgY3JlYXRlRG9jdW1lbnRT
dHJ1Y3R1cmUoKTsKIAotICAgIERvY3VtZW50KiBtX2RvYzsKICAgICBIVE1MTWVkaWFFbGVtZW50
KiBtX21lZGlhRWxlbWVudDsKIH07CiAKQEAgLTc4LDE1ICs4MSwxNSBAQCB2b2lkIE1lZGlhRG9j
dW1lbnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpCiB2b2lkIE1l
ZGlhRG9jdW1lbnRQYXJzZXI6OmNyZWF0ZURvY3VtZW50U3RydWN0dXJlKCkKIHsKICAgICBFeGNl
cHRpb25Db2RlIGVjOwotICAgIFJlZlB0cjxFbGVtZW50PiByb290RWxlbWVudCA9IG1fZG9jLT5j
cmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKLSAgICBtX2RvYy0+YXBwZW5kQ2hpbGQocm9v
dEVsZW1lbnQsIGVjKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQgPSBkb2N1bWVu
dCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKKyAgICBkb2N1bWVudCgpLT5hcHBl
bmRDaGlsZChyb290RWxlbWVudCwgZWMpOwogICAgICAgICAKLSAgICBSZWZQdHI8RWxlbWVudD4g
Ym9keSA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKKyAgICBSZWZQdHI8
RWxlbWVudD4gYm9keSA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2Up
OwogICAgIGJvZHktPnNldEF0dHJpYnV0ZShzdHlsZUF0dHIsICJiYWNrZ3JvdW5kLWNvbG9yOiBy
Z2IoMzgsMzgsMzgpOyIpOwogCiAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVj
KTsKICAgICAgICAgCi0gICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlhRWxlbWVudCA9IG1fZG9jLT5j
cmVhdGVFbGVtZW50KHZpZGVvVGFnLCBmYWxzZSk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IG1lZGlh
RWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQodmlkZW9UYWcsIGZhbHNlKTsKICAg
ICAgICAgCiAgICAgbV9tZWRpYUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MVmlkZW9FbGVtZW50
Kj4obWVkaWFFbGVtZW50LmdldCgpKTsKICAgICBtX21lZGlhRWxlbWVudC0+c2V0QXR0cmlidXRl
KGNvbnRyb2xzQXR0ciwgIiIpOwpAQCAtOTQsMTEgKzk3LDExIEBAIHZvaWQgTWVkaWFEb2N1bWVu
dFBhcnNlcjo6Y3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKQogICAgIG1fbWVkaWFFbGVtZW50LT5z
ZXRBdHRyaWJ1dGUoc3R5bGVBdHRyLCAibWFyZ2luOiBhdXRvOyBwb3NpdGlvbjogYWJzb2x1dGU7
IHRvcDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgbGVmdDogMDsiKTsKIAogICAgIG1fbWVkaWFF
bGVtZW50LT5zZXRBdHRyaWJ1dGUobmFtZUF0dHIsICJtZWRpYSIpOwotICAgIG1fbWVkaWFFbGVt
ZW50LT5zZXRTcmMobV9kb2MtPnVybCgpKTsKKyAgICBtX21lZGlhRWxlbWVudC0+c2V0U3JjKGRv
Y3VtZW50KCktPnVybCgpKTsKICAgICAKICAgICBib2R5LT5hcHBlbmRDaGlsZChtZWRpYUVsZW1l
bnQsIGVjKTsKIAotICAgIEZyYW1lKiBmcmFtZSA9IG1fZG9jLT5mcmFtZSgpOworICAgIEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0xMTksMTIgKzEyMiwxMiBAQCBib29sIE1lZGlhRG9jdW1lbnRQYXJzZXI6
OndyaXRlUmF3RGF0YShjb25zdCBjaGFyKiwgaW50KQogdm9pZCBNZWRpYURvY3VtZW50UGFyc2Vy
OjpmaW5pc2goKQogewogICAgIGlmICghbV9wYXJzZXJTdG9wcGVkKSAKLSAgICAgICAgbV9kb2Mt
PmZpbmlzaGVkUGFyc2luZygpOworICAgICAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmco
KTsKIH0KIAogYm9vbCBNZWRpYURvY3VtZW50UGFyc2VyOjpmaW5pc2hXYXNDYWxsZWQoKQogewot
ICAgIC8vIGZpbmlzaCgpIGFsd2F5cyBjYWxscyBtX2RvYy0+ZmluaXNoZWRQYXJzaW5nKCkgc28g
d2UnbGwgYmUgZGVsZXRlZAorICAgIC8vIGZpbmlzaCgpIGFsd2F5cyBjYWxscyBkb2N1bWVudCgp
LT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3ZSdsbCBiZSBkZWxldGVkCiAgICAgLy8gYWZ0ZXIgZmlu
aXNoKCkuCiAgICAgcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9sb2FkZXIv
UGx1Z2luRG9jdW1lbnQuY3BwIGIvV2ViQ29yZS9sb2FkZXIvUGx1Z2luRG9jdW1lbnQuY3BwCmlu
ZGV4IDAxNTA1NzZhNTljMjYxNzRjYWZiMjU1MDcxMTQxZmE2YWNmNDNkZDEuLjY2ZGY4ZWFlZTdi
MjI0NTQ4MTBjMWY0OTEwMWJjMTA3YjBiNzE5NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVy
L1BsdWdpbkRvY3VtZW50LmNwcAorKysgYi9XZWJDb3JlL2xvYWRlci9QbHVnaW5Eb2N1bWVudC5j
cHAKQEAgLTQ3LDggKzQ3LDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAgICAgCiBj
bGFzcyBQbHVnaW5Eb2N1bWVudFBhcnNlciA6IHB1YmxpYyBEb2N1bWVudFBhcnNlciB7CiBwdWJs
aWM6Ci0gICAgUGx1Z2luRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvYykgOiBtX2RvYyhkb2Mp
LCBtX2VtYmVkRWxlbWVudCgwKSB7fQotICAgIHN0YXRpYyBXaWRnZXQqIHBsdWdpbldpZGdldEZy
b21Eb2N1bWVudChEb2N1bWVudCogZG9jKTsKKyAgICBQbHVnaW5Eb2N1bWVudFBhcnNlcihEb2N1
bWVudCogZG9jdW1lbnQpCisgICAgICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQpCisgICAg
ICAgICwgbV9lbWJlZEVsZW1lbnQoMCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFdpZGdl
dCogcGx1Z2luV2lkZ2V0RnJvbURvY3VtZW50KERvY3VtZW50Kik7CiAgICAgICAgIAogcHJpdmF0
ZToKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBh
cHBlbmREYXRhKTsKQEAgLTYxLDcgKzY2LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgdm9p
ZCBjcmVhdGVEb2N1bWVudFN0cnVjdHVyZSgpOwogCi0gICAgRG9jdW1lbnQqIG1fZG9jOwogICAg
IEhUTUxFbWJlZEVsZW1lbnQqIG1fZW1iZWRFbGVtZW50OwogfTsKIApAQCAtODcsMjUgKzkxLDI1
IEBAIHZvaWQgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmlu
ZyYsIGJvb2wpCiB2b2lkIFBsdWdpbkRvY3VtZW50UGFyc2VyOjpjcmVhdGVEb2N1bWVudFN0cnVj
dHVyZSgpCiB7CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBSZWZQdHI8RWxlbWVudD4gcm9v
dEVsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgbV9k
b2MtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LCBlYyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IHJv
b3RFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Cisg
ICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQsIGVjKTsKIAotICAgIFJlZlB0
cjxFbGVtZW50PiBib2R5ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQoYm9keVRhZywgZmFsc2UpOwor
ICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gZG9jdW1lbnQoKS0+Y3JlYXRlRWxlbWVudChib2R5
VGFnLCBmYWxzZSk7CiAgICAgYm9keS0+c2V0QXR0cmlidXRlKG1hcmdpbndpZHRoQXR0ciwgIjAi
KTsKICAgICBib2R5LT5zZXRBdHRyaWJ1dGUobWFyZ2luaGVpZ2h0QXR0ciwgIjAiKTsKICAgICBi
b2R5LT5zZXRBdHRyaWJ1dGUoYmdjb2xvckF0dHIsICJyZ2IoMzgsMzgsMzgpIik7CiAKICAgICBy
b290RWxlbWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOwogICAgICAgICAKLSAgICBSZWZQdHI8
RWxlbWVudD4gZW1iZWRFbGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQoZW1iZWRUYWcsIGZh
bHNlKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZW1iZWRFbGVtZW50ID0gZG9jdW1lbnQoKS0+Y3Jl
YXRlRWxlbWVudChlbWJlZFRhZywgZmFsc2UpOwogICAgICAgICAKICAgICBtX2VtYmVkRWxlbWVu
dCA9IHN0YXRpY19jYXN0PEhUTUxFbWJlZEVsZW1lbnQqPihlbWJlZEVsZW1lbnQuZ2V0KCkpOwog
ICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUod2lkdGhBdHRyLCAiMTAwJSIpOwogICAg
IG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUoaGVpZ2h0QXR0ciwgIjEwMCUiKTsKICAgICAK
ICAgICBtX2VtYmVkRWxlbWVudC0+c2V0QXR0cmlidXRlKG5hbWVBdHRyLCAicGx1Z2luIik7Ci0g
ICAgbV9lbWJlZEVsZW1lbnQtPnNldEF0dHJpYnV0ZShzcmNBdHRyLCBtX2RvYy0+dXJsKCkuc3Ry
aW5nKCkpOwotICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIG1fZG9j
LT5mcmFtZSgpLT5sb2FkZXIoKS0+d3JpdGVyKCktPm1pbWVUeXBlKCkpOworICAgIG1fZW1iZWRF
bGVtZW50LT5zZXRBdHRyaWJ1dGUoc3JjQXR0ciwgZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCkp
OworICAgIG1fZW1iZWRFbGVtZW50LT5zZXRBdHRyaWJ1dGUodHlwZUF0dHIsIGRvY3VtZW50KCkt
PmZyYW1lKCktPmxvYWRlcigpLT53cml0ZXIoKS0+bWltZVR5cGUoKSk7CiAgICAgCiAgICAgYm9k
eS0+YXBwZW5kQ2hpbGQoZW1iZWRFbGVtZW50LCBlYyk7ICAgIAogfQpAQCAtMTE4LDEwICsxMjIs
MTAgQEAgYm9vbCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6d3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIq
LCBpbnQpCiAgICAgCiAgICAgY3JlYXRlRG9jdW1lbnRTdHJ1Y3R1cmUoKTsKIAotICAgIGlmIChG
cmFtZSogZnJhbWUgPSBtX2RvYy0+ZnJhbWUoKSkgeworICAgIGlmIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudCgpLT5mcmFtZSgpKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1l
LT5zZXR0aW5ncygpOwogICAgICAgICBpZiAoc2V0dGluZ3MgJiYgZnJhbWUtPmxvYWRlcigpLT5z
dWJmcmFtZUxvYWRlcigpLT5hbGxvd1BsdWdpbnMoTm90QWJvdXRUb0luc3RhbnRpYXRlUGx1Z2lu
KSkgewotICAgICAgICAgICAgbV9kb2MtPnVwZGF0ZUxheW91dCgpOworICAgICAgICAgICAgZG9j
dW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAKICAgICAgICAgICAgIGlmIChSZW5kZXJXaWRnZXQq
IHJlbmRlcmVyID0gdG9SZW5kZXJXaWRnZXQobV9lbWJlZEVsZW1lbnQtPnJlbmRlcmVyKCkpKSB7
CiAgICAgICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKS0+cmVkaXJlY3REYXRh
VG9QbHVnaW4ocmVuZGVyZXItPndpZGdldCgpKTsKQEAgLTEzOCwxMiArMTQyLDEyIEBAIGJvb2wg
UGx1Z2luRG9jdW1lbnRQYXJzZXI6OndyaXRlUmF3RGF0YShjb25zdCBjaGFyKiwgaW50KQogdm9p
ZCBQbHVnaW5Eb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKIHsKICAgICBpZiAoIW1fcGFyc2VyU3Rv
cHBlZCkgCi0gICAgICAgIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKTsgICAgICAgICAgICAKKyAg
ICAgICAgZG9jdW1lbnQoKS0+ZmluaXNoZWRQYXJzaW5nKCk7ICAgICAgICAgICAgCiB9CiAKIGJv
b2wgUGx1Z2luRG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0gICAgLy8gZmlu
aXNoKCkgYWx3YXlzIGNhbGxzIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3ZSdsbCBiZSBk
ZWxldGVkCisgICAgLy8gZmluaXNoKCkgYWx3YXlzIGNhbGxzIGRvY3VtZW50KCktPmZpbmlzaGVk
UGFyc2luZygpIHNvIHdlJ2xsIGJlIGRlbGV0ZWQKICAgICAvLyBhZnRlciBmaW5pc2goKS4KICAg
ICByZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRlci9TaW5rRG9jdW1l
bnQuY3BwIGIvV2ViQ29yZS9sb2FkZXIvU2lua0RvY3VtZW50LmNwcAppbmRleCBmOTAzZWU4NzIy
YTA5ZmYxM2E5YjU4YTRkMzdhYWFkMWY1NTZkYzExLi4wMGFiOGRkNjFmNDRmOGRiNWNlNDU5MTc0
N2Y2NTRhNmY4YjBmMmU2IDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9TaW5rRG9jdW1lbnQu
Y3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL1NpbmtEb2N1bWVudC5jcHAKQEAgLTMyLDggKzMyLDEx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU2lua0RvY3VtZW50UGFyc2VyIDogcHVi
bGljIERvY3VtZW50UGFyc2VyIHsKIHB1YmxpYzoKLSAgICBTaW5rRG9jdW1lbnRQYXJzZXIoRG9j
dW1lbnQqIGRvY3VtZW50KSA6IG1fZG9jdW1lbnQoZG9jdW1lbnQpIHsgfQotICAgICAgICAKKyAg
ICBTaW5rRG9jdW1lbnRQYXJzZXIoRG9jdW1lbnQqIGRvY3VtZW50KQorICAgICAgICA6IERvY3Vt
ZW50UGFyc2VyKGRvY3VtZW50KQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgdmlydHVh
bCB2b2lkIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJvb2wpIHsgQVNTRVJUX05PVF9S
RUFDSEVEKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZmluaXNoKCk7CkBAIC00Miw4ICs0NSw2IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgIHZpcnR1YWwgYm9vbCB3YW50c1Jhd0RhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIHdyaXRlUmF3RGF0YShjb25zdCBj
aGFyKiwgaW50KSB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7
CiB9OwogCiB2b2lkIFNpbmtEb2N1bWVudFBhcnNlcjo6ZmluaXNoKCkKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAgYi9XZWJDb3JlL2xvYWRlci9UZXh0RG9jdW1l
bnQuY3BwCmluZGV4IGNhZDYzMWVmYzZhNTViYjM5MTE3ZTMwMzczYjg1YTZiZGZmMGIyOWUuLjYy
MmUxNDgxNTUzMDIxMjAxZmU5ZWU0MGQxY2NiN2M4ZmU5MWMzYjggMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvbG9hZGVyL1RleHREb2N1bWVudC5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvVGV4dERvY3Vt
ZW50LmNwcApAQCAtNjIsNyArNjIsNiBAQCBwdWJsaWM6CiAgICAgfQogICAgICAgICAKIHByaXZh
dGU6Ci0gICAgRG9jdW1lbnQqIG1fZG9jOwogICAgIEVsZW1lbnQqIG1fcHJlRWxlbWVudDsKIAog
ICAgIGJvb2wgbV9za2lwTEY7CkBAIC03Miw4ICs3MSw4IEBAIHByaXZhdGU6CiAgICAgVUNoYXIq
IG1fZGVzdDsKIH07CiAKLVRleHREb2N1bWVudFBhcnNlcjo6VGV4dERvY3VtZW50UGFyc2VyKERv
Y3VtZW50KiBkb2MpCi0gICAgOiBtX2RvYyhkb2MpCitUZXh0RG9jdW1lbnRQYXJzZXI6OlRleHRE
b2N1bWVudFBhcnNlcihEb2N1bWVudCogZG9jdW1lbnQpCisgICAgOiBEb2N1bWVudFBhcnNlcihk
b2N1bWVudCkKICAgICAsIG1fcHJlRWxlbWVudCgwKQogICAgICwgbV9za2lwTEYoZmFsc2UpCiB7
ICAgIApAQCAtODMsOSArODIsOCBAQCBUZXh0RG9jdW1lbnRQYXJzZXI6OlRleHREb2N1bWVudFBh
cnNlcihEb2N1bWVudCogZG9jKQogICAgIG1fZGVzdCA9IG1fYnVmZmVyOwogfSAgICAKIAotVGV4
dERvY3VtZW50UGFyc2VyOjpUZXh0RG9jdW1lbnRQYXJzZXIoSFRNTFZpZXdTb3VyY2VEb2N1bWVu
dCogZG9jKQotICAgIDogRG9jdW1lbnRQYXJzZXIodHJ1ZSkKLSAgICAsIG1fZG9jKGRvYykKK1Rl
eHREb2N1bWVudFBhcnNlcjo6VGV4dERvY3VtZW50UGFyc2VyKEhUTUxWaWV3U291cmNlRG9jdW1l
bnQqIGRvY3VtZW50KQorICAgIDogRG9jdW1lbnRQYXJzZXIoZG9jdW1lbnQsIHRydWUpCiAgICAg
LCBtX3ByZUVsZW1lbnQoMCkKICAgICAsIG1fc2tpcExGKGZhbHNlKQogeyAgICAKQEAgLTEzMywx
MyArMTMxLDEzIEBAIHZvaWQgVGV4dERvY3VtZW50UGFyc2VyOjp3cml0ZShjb25zdCBTZWdtZW50
ZWRTdHJpbmcmIHMsIGJvb2wpCiAgICAgfQogCiAgICAgaWYgKCFtX3ByZUVsZW1lbnQgJiYgIWlu
Vmlld1NvdXJjZU1vZGUoKSkgewotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9vdEVsZW1lbnQg
PSBtX2RvYy0+Y3JlYXRlRWxlbWVudChodG1sVGFnLCBmYWxzZSk7Ci0gICAgICAgIG1fZG9jLT5h
cHBlbmRDaGlsZChyb290RWxlbWVudCwgZWMpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4gcm9v
dEVsZW1lbnQgPSBkb2N1bWVudCgpLT5jcmVhdGVFbGVtZW50KGh0bWxUYWcsIGZhbHNlKTsKKyAg
ICAgICAgZG9jdW1lbnQoKS0+YXBwZW5kQ2hpbGQocm9vdEVsZW1lbnQsIGVjKTsKIAotICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KGJvZHlUYWcsIGZh
bHNlKTsKKyAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGJvZHkgPSBkb2N1bWVudCgpLT5jcmVhdGVF
bGVtZW50KGJvZHlUYWcsIGZhbHNlKTsKICAgICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxk
KGJvZHksIGVjKTsKIAotICAgICAgICBSZWZQdHI8RWxlbWVudD4gcHJlRWxlbWVudCA9IG1fZG9j
LT5jcmVhdGVFbGVtZW50KHByZVRhZywgZmFsc2UpOworICAgICAgICBSZWZQdHI8RWxlbWVudD4g
cHJlRWxlbWVudCA9IGRvY3VtZW50KCktPmNyZWF0ZUVsZW1lbnQocHJlVGFnLCBmYWxzZSk7CiAg
ICAgICAgIHByZUVsZW1lbnQtPnNldEF0dHJpYnV0ZSgic3R5bGUiLCAid29yZC13cmFwOiBicmVh
ay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IiwgZWMpOwogCiAgICAgICAgIGJvZHktPmFw
cGVuZENoaWxkKHByZUVsZW1lbnQsIGVjKTsKQEAgLTE0OSwxNCArMTQ3LDE0IEBAIHZvaWQgVGV4
dERvY3VtZW50UGFyc2VyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wpCiAg
ICAgCiAgICAgU3RyaW5nIHN0cmluZyA9IFN0cmluZyhtX2J1ZmZlciwgbV9kZXN0IC0gbV9idWZm
ZXIpOwogICAgIGlmIChpblZpZXdTb3VyY2VNb2RlKCkpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8
SFRNTFZpZXdTb3VyY2VEb2N1bWVudCo+KG1fZG9jKS0+YWRkVmlld1NvdXJjZVRleHQoc3RyaW5n
KTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTFZpZXdTb3VyY2VEb2N1bWVudCo+KGRvY3VtZW50
KCkpLT5hZGRWaWV3U291cmNlVGV4dChzdHJpbmcpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CiAgICAgdW5zaWduZWQgY2hhcnNMZWZ0ID0gc3RyaW5nLmxlbmd0aCgpOwogICAgIHdoaWxlIChj
aGFyc0xlZnQpIHsKICAgICAgICAgLy8gc3BsaXQgbGFyZ2UgdGV4dCB0byBub2RlcyBvZiBtYW5h
Z2VhYmxlIHNpemUKLSAgICAgICAgUmVmUHRyPFRleHQ+IHRleHQgPSBUZXh0OjpjcmVhdGVXaXRo
TGVuZ3RoTGltaXQobV9kb2MsIHN0cmluZywgY2hhcnNMZWZ0KTsKKyAgICAgICAgUmVmUHRyPFRl
eHQ+IHRleHQgPSBUZXh0OjpjcmVhdGVXaXRoTGVuZ3RoTGltaXQoZG9jdW1lbnQoKSwgc3RyaW5n
LCBjaGFyc0xlZnQpOwogICAgICAgICBtX3ByZUVsZW1lbnQtPmFwcGVuZENoaWxkKHRleHQsIGVj
KTsKICAgICB9CiB9CkBAIC0xNzAsMTIgKzE2OCwxMiBAQCB2b2lkIFRleHREb2N1bWVudFBhcnNl
cjo6ZmluaXNoKCkKICAgICBtX2J1ZmZlciA9IDA7CiAgICAgbV9kZXN0ID0gMDsKIAotICAgIG1f
ZG9jLT5maW5pc2hlZFBhcnNpbmcoKTsKKyAgICBkb2N1bWVudCgpLT5maW5pc2hlZFBhcnNpbmco
KTsKIH0KIAogYm9vbCBUZXh0RG9jdW1lbnRQYXJzZXI6OmZpbmlzaFdhc0NhbGxlZCgpCiB7Ci0g
ICAgLy8gZmluaXNoKCkgYWx3YXlzIGNhbGxzIG1fZG9jLT5maW5pc2hlZFBhcnNpbmcoKSBzbyB3
ZSdsbCBiZSBkZWxldGVkCisgICAgLy8gZmluaXNoKCkgYWx3YXlzIGNhbGxzIGRvY3VtZW50KCkt
PmZpbmlzaGVkUGFyc2luZygpIHNvIHdlJ2xsIGJlIGRlbGV0ZWQKICAgICAvLyBhZnRlciBmaW5p
c2goKS4KICAgICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="review"
          id="46569"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="46570"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>