<?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>220764</bug_id>
          
          <creation_ts>2021-01-20 05:18:33 -0800</creation_ts>
          <short_desc>[SOUP] Stop using SoupRequest API in preparation for libsoup3</short_desc>
          <delta_ts>2021-01-28 04:42:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=221023</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>220509</dependson>
    
    <dependson>220981</dependson>
          <blocked>220508</blocked>
    
    <blocked>221034</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aperez</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>lmoura</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1720862</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-20 05:18:33 -0800</bug_when>
    <thetext>It&apos;s gone in libsoup3, we can just use soup_session_send_async() instead, which is what SoupRequest does internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720865</commentid>
    <comment_count>1</comment_count>
      <attachid>417962</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-20 05:33:17 -0800</bug_when>
    <thetext>Created attachment 417962
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722244</commentid>
    <comment_count>2</comment_count>
      <attachid>417962</attachid>
    <who name="Adrian Perez">aperez</who>
    <bug_when>2021-01-25 13:45:06 -0800</bug_when>
    <thetext>Comment on attachment 417962
Patch

Patch LGTM with a couple of nits. Please check them out before landing, in
particular I would like to see the suggested simplification for ”m_acceptEncoding”
in the final version that lands; the other two suggestions I will leave them up
to you =)


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

&gt; Source/WebCore/platform/network/soup/ResourceRequest.h:85
&gt; +    bool m_acceptEncoding : 1;

It does not make sense to specify a bit width of “1” here. This is the
only member for which the bit width is indicated, which will result in
the compiler adding padding anyway—which defeats the intent of saving
some bytes of memory. We may as well do:

  bool m_acceptEncoding { true };

…and skip setting the initial value in the constructors above.

Just tested:

  % cat &gt; t.cc &lt;&lt;EOF
  #include &lt;cstdio&gt;
  enum Flag { FLAG_FOO, FLAG_BAR, FLAG_BAZ };
  class X { bool bit: 1; enum Flag f; };
  class Y { bool bit;    enum Flag f; };
  int main() {
    std::printf(&quot;X: %zu bytes, Y: %zu bytes\n&quot;, sizeof(X), sizeof(Y));
  }
  EOF
  % g++ -o t t.cc &amp;&amp; ./t
  X: 8 bytes, Y: 8 bytes
  %

&gt; Source/WebCore/platform/network/soup/ResourceRequestSoup.cpp:-219
&gt; -

Nice to see this bit gone \o/

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:333
&gt; +        g_object_set_data_full(G_OBJECT(task-&gt;m_pendingResult.get()), &quot;wk-send-request-data&quot;, protectedData.release(), [](gpointer data) {

Is there any reason not to use “g_object_set_qdata_full()”? That would
avoid the string→GQuark conversion on each usage. Maybe we should open
a new bug to convert all the uses of “g_object_{g,s}et_data” to use the
“qdata” variants, WDYT?

&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:477
&gt; +}

The “didSniffContent()” member function is private and only ever called from
the “didSniffContentCallback()” function right above. I think it&apos;s may not be
worth it to have this function containing a single assignment, it could be done
just directly inside “didSniffContentCallback()” — though I have no strong
preference, feel free to leave this as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722448</commentid>
    <comment_count>3</comment_count>
      <attachid>417962</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-26 03:53:38 -0800</bug_when>
    <thetext>Comment on attachment 417962
Patch

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

&gt;&gt; Source/WebCore/platform/network/soup/ResourceRequest.h:85
&gt;&gt; +    bool m_acceptEncoding : 1;
&gt; 
&gt; It does not make sense to specify a bit width of “1” here. This is the
&gt; only member for which the bit width is indicated, which will result in
&gt; the compiler adding padding anyway—which defeats the intent of saving
&gt; some bytes of memory. We may as well do:
&gt; 
&gt;   bool m_acceptEncoding { true };
&gt; 
&gt; …and skip setting the initial value in the constructors above.
&gt; 
&gt; Just tested:
&gt; 
&gt;   % cat &gt; t.cc &lt;&lt;EOF
&gt;   #include &lt;cstdio&gt;
&gt;   enum Flag { FLAG_FOO, FLAG_BAR, FLAG_BAZ };
&gt;   class X { bool bit: 1; enum Flag f; };
&gt;   class Y { bool bit;    enum Flag f; };
&gt;   int main() {
&gt;     std::printf(&quot;X: %zu bytes, Y: %zu bytes\n&quot;, sizeof(X), sizeof(Y));
&gt;   }
&gt;   EOF
&gt;   % g++ -o t t.cc &amp;&amp; ./t
&gt;   X: 8 bytes, Y: 8 bytes
&gt;   %

Sure.

&gt;&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:333
&gt;&gt; +        g_object_set_data_full(G_OBJECT(task-&gt;m_pendingResult.get()), &quot;wk-send-request-data&quot;, protectedData.release(), [](gpointer data) {
&gt; 
&gt; Is there any reason not to use “g_object_set_qdata_full()”? That would
&gt; avoid the string→GQuark conversion on each usage. Maybe we should open
&gt; a new bug to convert all the uses of “g_object_{g,s}et_data” to use the
&gt; “qdata” variants, WDYT?

I don&apos;t know if it really has any impact. But it&apos;s probably better to do that in a separate commit for all the set_data cases instead.

&gt;&gt; Source/WebKit/NetworkProcess/soup/NetworkDataTaskSoup.cpp:477
&gt;&gt; +}
&gt; 
&gt; The “didSniffContent()” member function is private and only ever called from
&gt; the “didSniffContentCallback()” function right above. I think it&apos;s may not be
&gt; worth it to have this function containing a single assignment, it could be done
&gt; just directly inside “didSniffContentCallback()” — though I have no strong
&gt; preference, feel free to leave this as-is.

Yes, this is just to follow the pattern for all other async ops in this file, didFooCallback -&gt; didFoo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722449</commentid>
    <comment_count>4</comment_count>
      <attachid>418390</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-26 03:55:24 -0800</bug_when>
    <thetext>Created attachment 418390
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722453</commentid>
    <comment_count>5</comment_count>
      <attachid>418394</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-26 04:33:21 -0800</bug_when>
    <thetext>Created attachment 418394
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722455</commentid>
    <comment_count>6</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2021-01-26 04:47:07 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See https://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1722819</commentid>
    <comment_count>7</comment_count>
    <who name="Lauro Moura">lmoura</who>
    <bug_when>2021-01-26 20:44:18 -0800</bug_when>
    <thetext>Linking the bug with the regressions from r271879. (Should have gardened with this one instead).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1723350</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2021-01-28 04:42:22 -0800</bug_when>
    <thetext>Committed r272010: &lt;https://trac.webkit.org/changeset/272010&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417962</attachid>
            <date>2021-01-20 05:33:17 -0800</date>
            <delta_ts>2021-01-26 03:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-soup-kill-soup-request.diff</filename>
            <type>text/plain</type>
            <size>37988</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyYWFmMmM0ODlhZDYuLmFkN2JhZTQwNjViNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIxIEBACisyMDIxLTAxLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkg
aW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9y
Lmg6IEVycm9yIGNvbnN0cnVjdG9ycyBub3cgcmVjZWl2ZSB0aGUgZmFpbGluZyBVUkwgaW5zdGVh
ZCBvZiBhIFNvdXBSZXF1ZXN0CisgICAgICAgIHRoYXQgaXMgb25seSB1c2VkIHRvIGdldCBpdHMg
VVJMLgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjp0cmFuc3BvcnRFcnJvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvcjo6Z2VuZXJpY0dFcnJvcik6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdC5oOiBSZW1tb3ZlIHRoZSBjb25zdHJ1Y3RvciB0
aGF0IHJlY2VpdmVzIGEgU291cFJlcXVlc3QgYW5kIHRoZQorICAgICAgICBpbml0aWF0aW5nIHBh
Z2UgSUQgc2luY2UgaXQncyBjdXJyZW50bHkgdW5zdXNlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHA6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oOgorCiAyMDIxLTAxLTE4ICBBbmRyZXMg
R29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KIAogICAgICAgICBBcHBsZSBNYWlsIEFY
LCBWb2ljZU92ZXI6IFdoZW4gY29tcG9zaW5nIGEgbmV3IGVtYWlsIG1lc3NhZ2UsIG1vdmluZyBW
TyBmb2N1cyB0byB0aGUgbWVzc2FnZSBib2R5IGZpZWxkIGRvZXMgbm90IGJyaW5nIGtleWJvYXJk
IGZvY3VzIGFsb25nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1Jlc291cmNlRXJyb3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9SZXNvdXJjZUVycm9yLmgKaW5kZXggOWNmYjBkNTE1YjIzLi5lMzMwMzI0MTc4YmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVy
cm9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNl
RXJyb3IuaApAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFJlc291cmNlRXJyb3JfaAotI2RlZmluZSBSZXNvdXJjZUVycm9yX2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvckJhc2UuaCIKIApAQCAtMzMsMjkgKzMyLDI1IEBACiAj
aW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogCiB0eXBlZGVmIHN0cnVjdCBfR1Rsc0NlcnRp
ZmljYXRlIEdUbHNDZXJ0aWZpY2F0ZTsKLXR5cGVkZWYgc3RydWN0IF9Tb3VwUmVxdWVzdCBTb3Vw
UmVxdWVzdDsKIHR5cGVkZWYgc3RydWN0IF9Tb3VwTWVzc2FnZSBTb3VwTWVzc2FnZTsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZXNvdXJjZUVycm9yIDogcHVibGljIFJlc291cmNl
RXJyb3JCYXNlCi17CitjbGFzcyBSZXNvdXJjZUVycm9yIDogcHVibGljIFJlc291cmNlRXJyb3JC
YXNlIHsKIHB1YmxpYzoKICAgICBSZXNvdXJjZUVycm9yKFR5cGUgdHlwZSA9IFR5cGU6Ok51bGwp
CiAgICAgICAgIDogUmVzb3VyY2VFcnJvckJhc2UodHlwZSkKLSAgICAgICAgLCBtX3Rsc0Vycm9y
cygwKQogICAgIHsKICAgICB9CiAKICAgICBSZXNvdXJjZUVycm9yKGNvbnN0IFN0cmluZyYgZG9t
YWluLCBpbnQgZXJyb3JDb2RlLCBjb25zdCBVUkwmIGZhaWxpbmdVUkwsIGNvbnN0IFN0cmluZyYg
bG9jYWxpemVkRGVzY3JpcHRpb24sIFR5cGUgdHlwZSA9IFR5cGU6OkdlbmVyYWwpCiAgICAgICAg
IDogUmVzb3VyY2VFcnJvckJhc2UoZG9tYWluLCBlcnJvckNvZGUsIGZhaWxpbmdVUkwsIGxvY2Fs
aXplZERlc2NyaXB0aW9uLCB0eXBlKQotICAgICAgICAsIG1fdGxzRXJyb3JzKDApCiAgICAgewog
ICAgIH0KIAotICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIGh0dHBFcnJvcihTb3VwTWVzc2FnZSos
IEdFcnJvciosIFNvdXBSZXF1ZXN0Kik7Ci0gICAgc3RhdGljIFJlc291cmNlRXJyb3IgdHJhbnNw
b3J0RXJyb3IoU291cFJlcXVlc3QqLCBpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyaW5nJiByZWFz
b25QaHJhc2UpOwotICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIGdlbmVyaWNHRXJyb3IoR0Vycm9y
KiwgU291cFJlcXVlc3QqKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBodHRwRXJyb3IoU291
cE1lc3NhZ2UqLCBHRXJyb3IqKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciB0cmFuc3BvcnRF
cnJvcihjb25zdCBVUkwmLCBpbnQgc3RhdHVzQ29kZSwgY29uc3QgU3RyaW5nJiByZWFzb25QaHJh
c2UpOworICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIGdlbmVyaWNHRXJyb3IoY29uc3QgVVJMJiwg
R0Vycm9yKik7CiAgICAgc3RhdGljIFJlc291cmNlRXJyb3IgdGxzRXJyb3IoY29uc3QgVVJMJiwg
dW5zaWduZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqKTsKICAgICBzdGF0aWMgUmVzb3Vy
Y2VFcnJvciB0aW1lb3V0RXJyb3IoY29uc3QgVVJMJiBmYWlsaW5nVVJMKTsKICAgICBzdGF0aWMg
UmVzb3VyY2VFcnJvciBhdXRoZW50aWNhdGlvbkVycm9yKFNvdXBNZXNzYWdlKik7CkBAIC03MSwx
MiArNjYsMTAgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VFcnJvckJhc2U7
CiAgICAgdm9pZCBkb1BsYXRmb3JtSXNvbGF0ZWRDb3B5KGNvbnN0IFJlc291cmNlRXJyb3ImKTsK
IAotICAgIHVuc2lnbmVkIG1fdGxzRXJyb3JzOworICAgIHVuc2lnbmVkIG1fdGxzRXJyb3JzIHsg
MCB9OwogICAgIEdSZWZQdHI8R1Rsc0NlcnRpZmljYXRlPiBtX2NlcnRpZmljYXRlOwogfTsKIAot
fQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5kaWYKLQotI2VuZGlmIC8vIFJlc291cmNl
RXJyb3JfaF8KKyNlbmRpZiAvLyBVU0UoU09VUCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCmluZGV4IGVl
ZWMzMjgxZTM4NS4uMTZkMTIzMGZiNDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yU291cC5jcHAKQEAgLTQyLDI1
ICs0MiwxNyBAQCBzdGF0aWMgVVJMIGZhaWxpbmdVUkkoU291cFVSSSogc291cFVSSSkKICAgICBy
ZXR1cm4gc291cFVSSVRvVVJMKHNvdXBVUkkpOwogfQogCi1zdGF0aWMgVVJMIGZhaWxpbmdVUkko
U291cFJlcXVlc3QqIHJlcXVlc3QpCitSZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OnRyYW5z
cG9ydEVycm9yKGNvbnN0IFVSTCYgZmFpbGluZ1VSTCwgaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uUGhyYXNlKQogewotICAgIEFTU0VSVChyZXF1ZXN0KTsKLSAgICByZXR1cm4g
ZmFpbGluZ1VSSShzb3VwX3JlcXVlc3RfZ2V0X3VyaShyZXF1ZXN0KSk7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9SKSwgc3RhdHVzQ29k
ZSwgZmFpbGluZ1VSTCwgcmVhc29uUGhyYXNlKTsKIH0KIAotUmVzb3VyY2VFcnJvciBSZXNvdXJj
ZUVycm9yOjp0cmFuc3BvcnRFcnJvcihTb3VwUmVxdWVzdCogcmVxdWVzdCwgaW50IHN0YXR1c0Nv
ZGUsIGNvbnN0IFN0cmluZyYgcmVhc29uUGhyYXNlKQorUmVzb3VyY2VFcnJvciBSZXNvdXJjZUVy
cm9yOjpodHRwRXJyb3IoU291cE1lc3NhZ2UqIG1lc3NhZ2UsIEdFcnJvciogZXJyb3IpCiB7Ci0g
ICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoU09VUF9IVFRQX0VSUk9S
KSwgc3RhdHVzQ29kZSwKLSAgICAgICAgZmFpbGluZ1VSSShyZXF1ZXN0KSwgcmVhc29uUGhyYXNl
KTsKLX0KLQotUmVzb3VyY2VFcnJvciBSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IoU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIEdFcnJvciogZXJyb3IsIFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQotewotICAg
IGlmIChtZXNzYWdlICYmIFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtZXNzYWdlLT5z
dGF0dXNfY29kZSkpCi0gICAgICAgIHJldHVybiB0cmFuc3BvcnRFcnJvcihyZXF1ZXN0LCBtZXNz
YWdlLT5zdGF0dXNfY29kZSwKLSAgICAgICAgICAgIFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZS0+
cmVhc29uX3BocmFzZSkpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIGdlbmVyaWNHRXJyb3Io
ZXJyb3IsIHJlcXVlc3QpOworICAgIEFTU0VSVChtZXNzYWdlKTsKKyAgICBpZiAoU09VUF9TVEFU
VVNfSVNfVFJBTlNQT1JUX0VSUk9SKG1lc3NhZ2UtPnN0YXR1c19jb2RlKSkKKyAgICAgICAgcmV0
dXJuIHRyYW5zcG9ydEVycm9yKGZhaWxpbmdVUkkoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2Fn
ZSkpLCBtZXNzYWdlLT5zdGF0dXNfY29kZSwgU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlLT5yZWFz
b25fcGhyYXNlKSk7CisgICAgcmV0dXJuIGdlbmVyaWNHRXJyb3IoZmFpbGluZ1VSSShzb3VwX21l
c3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSksIGVycm9yKTsKIH0KIAogUmVzb3VyY2VFcnJvciBSZXNv
dXJjZUVycm9yOjphdXRoZW50aWNhdGlvbkVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlKQpAQCAt
NzAsMTAgKzYyLDkgQEAgUmVzb3VyY2VFcnJvciBSZXNvdXJjZUVycm9yOjphdXRoZW50aWNhdGlv
bkVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlKQogICAgICAgICBmYWlsaW5nVVJJKHNvdXBfbWVz
c2FnZV9nZXRfdXJpKG1lc3NhZ2UpKSwgU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlLT5yZWFzb25f
cGhyYXNlKSk7CiB9CiAKLVJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6Z2VuZXJpY0dFcnJv
cihHRXJyb3IqIGVycm9yLCBTb3VwUmVxdWVzdCogcmVxdWVzdCkKK1Jlc291cmNlRXJyb3IgUmVz
b3VyY2VFcnJvcjo6Z2VuZXJpY0dFcnJvcihjb25zdCBVUkwmIGZhaWxpbmdVUkwsIEdFcnJvciog
ZXJyb3IpCiB7Ci0gICAgcmV0dXJuIFJlc291cmNlRXJyb3IoZ19xdWFya190b19zdHJpbmcoZXJy
b3ItPmRvbWFpbiksIGVycm9yLT5jb2RlLAotICAgICAgICBmYWlsaW5nVVJJKHJlcXVlc3QpLCBT
dHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSk7CisgICAgcmV0dXJuIFJlc291cmNlRXJy
b3IoZ19xdWFya190b19zdHJpbmcoZXJyb3ItPmRvbWFpbiksIGVycm9yLT5jb2RlLCBmYWlsaW5n
VVJMLCBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSk7CiB9CiAKIFJlc291cmNlRXJy
b3IgUmVzb3VyY2VFcnJvcjo6dGxzRXJyb3IoY29uc3QgVVJMJiBmYWlsaW5nVVJMLCB1bnNpZ25l
ZCB0bHNFcnJvcnMsIEdUbHNDZXJ0aWZpY2F0ZSogY2VydGlmaWNhdGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKaW5k
ZXggOGY3ODcwZTk3ZTllLi4yOTExMDc0MWE2YWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgKQEAgLTI0LDggKzI0
LDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZVJlcXVlc3RfaAot
I2RlZmluZSBSZXNvdXJjZVJlcXVlc3RfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQYWdl
SWRlbnRpZmllci5oIgogI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdEJhc2UuaCIKQEAgLTMzLDk1
ICszMiw2OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBCbG9iUmVnaXN0
cnlJbXBsOwotCi0gICAgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJlc291cmNlUmVx
dWVzdEJhc2UgewotICAgIHB1YmxpYzoKLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFN0
cmluZyYgdXJsKQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCh7IH0sIHVy
bCksIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hlUG9saWN5KQot
ICAgICAgICAgICAgLCBtX2FjY2VwdEVuY29kaW5nKHRydWUpCi0gICAgICAgICAgICAsIG1fc291
cEZsYWdzKHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KDApKQotICAgICAgICB7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoY29uc3QgVVJMJiB1cmwpCi0gICAgICAg
ICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGlj
eTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGlu
Zyh0cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2Fn
ZUZsYWdzPigwKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1
ZXN0KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVl
c3RDYWNoZVBvbGljeSBwb2xpY3kgPSBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJv
dG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmws
IHBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0cnVlKQotICAgICAgICAg
ICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPigwKSkKLSAgICAg
ICAgewotICAgICAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIFJlc291cmNlUmVxdWVzdCgpCi0gICAgICAgICAgICA6IFJlc291cmNlUmVxdWVz
dEJhc2UoVVJMKCksIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hl
UG9saWN5KQotICAgICAgICAgICAgLCBtX2FjY2VwdEVuY29kaW5nKHRydWUpCi0gICAgICAgICAg
ICAsIG1fc291cEZsYWdzKHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KDApKQotICAgICAg
ICB7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoU291cE1lc3NhZ2UqIHNv
dXBNZXNzYWdlKQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCgpLCBSZXNv
dXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAg
ICAgICwgbV9hY2NlcHRFbmNvZGluZyh0cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhz
dGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPigwKSkKLSAgICAgICAgewotICAgICAgICAgICAg
dXBkYXRlRnJvbVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFJlc291cmNlUmVxdWVzdChTb3VwUmVxdWVzdCogc291cFJlcXVlc3QpCi0gICAgICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2Uoc291cFVSSVRvVVJMKHNvdXBfcmVxdWVzdF9nZXRfdXJpKHNv
dXBSZXF1ZXN0KSksIFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hl
UG9saWN5KQotICAgICAgICAgICAgLCBtX2FjY2VwdEVuY29kaW5nKHRydWUpCi0gICAgICAgICAg
ICAsIG1fc291cEZsYWdzKHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KDApKQotICAgICAg
ICB7Ci0gICAgICAgICAgICB1cGRhdGVGcm9tU291cFJlcXVlc3Qoc291cFJlcXVlc3QpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tRGVsZWdhdGVQcmVzZXJ2aW5nT2xkUHJv
cGVydGllcyhjb25zdCBSZXNvdXJjZVJlcXVlc3QmIGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0KSB7
ICp0aGlzID0gZGVsZWdhdGVQcm92aWRlZFJlcXVlc3Q7IH0KLQotICAgICAgICBib29sIGFjY2Vw
dEVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlcHRFbmNvZGluZzsgfQotICAgICAgICB2
b2lkIHNldEFjY2VwdEVuY29kaW5nKGJvb2wgYWNjZXB0RW5jb2RpbmcpIHsgbV9hY2NlcHRFbmNv
ZGluZyA9IGFjY2VwdEVuY29kaW5nOyB9Ci0KLSAgICAgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2Fn
ZUhlYWRlcnMoU291cE1lc3NhZ2VIZWFkZXJzKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRl
RnJvbVNvdXBNZXNzYWdlSGVhZGVycyhTb3VwTWVzc2FnZUhlYWRlcnMqKTsKLSAgICAgICAgdm9p
ZCB1cGRhdGVTb3VwTWVzc2FnZShTb3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUltcGwmKSBjb25z
dDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqKTsKLSAg
ICAgICAgdm9pZCB1cGRhdGVTb3VwUmVxdWVzdChTb3VwUmVxdWVzdCopIGNvbnN0OwotICAgICAg
ICB2b2lkIHVwZGF0ZUZyb21Tb3VwUmVxdWVzdChTb3VwUmVxdWVzdCopOwotCi0gICAgICAgIFNv
dXBNZXNzYWdlRmxhZ3Mgc291cE1lc3NhZ2VGbGFncygpIGNvbnN0IHsgcmV0dXJuIG1fc291cEZs
YWdzOyB9Ci0gICAgICAgIHZvaWQgc2V0U291cE1lc3NhZ2VGbGFncyhTb3VwTWVzc2FnZUZsYWdz
IHNvdXBGbGFncykgeyBtX3NvdXBGbGFncyA9IHNvdXBGbGFnczsgfQotCi0gICAgICAgIC8vIFdl
YlBhZ2VQcm94eUlkZW50aWZpZXIuCi0gICAgICAgIE9wdGlvbmFsPHVpbnQ2NF90PiBpbml0aWF0
aW5nUGFnZUlEKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWF0aW5nUGFnZUlEOyB9Ci0gICAgICAg
IHZvaWQgc2V0SW5pdGlhdGluZ1BhZ2VJRCh1aW50NjRfdCBwYWdlSUQpIHsgbV9pbml0aWF0aW5n
UGFnZUlEID0gcGFnZUlEOyB9Ci0KLSAgICAgICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBjcmVhdGVT
b3VwVVJJKCkgY29uc3Q7Ci0KLSAgICAgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBl
bmNvZGVXaXRoUGxhdGZvcm1EYXRhKEVuY29kZXImKSBjb25zdDsKLSAgICAgICAgdGVtcGxhdGU8
Y2xhc3MgRGVjb2Rlcj4gV0FSTl9VTlVTRURfUkVUVVJOIGJvb2wgZGVjb2RlV2l0aFBsYXRmb3Jt
RGF0YShEZWNvZGVyJik7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBmcmllbmQgY2xhc3MgUmVz
b3VyY2VSZXF1ZXN0QmFzZTsKLQotICAgICAgICBib29sIG1fYWNjZXB0RW5jb2RpbmcgOiAxOwot
ICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIG1fc291cEZsYWdzOwotICAgICAgICBPcHRpb25hbDx1
aW50NjRfdD4gbV9pbml0aWF0aW5nUGFnZUlEOwotCi0gICAgICAgIHZvaWQgdXBkYXRlU291cE1l
c3NhZ2VNZW1iZXJzKFNvdXBNZXNzYWdlKikgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRlU291
cE1lc3NhZ2VCb2R5KFNvdXBNZXNzYWdlKiwgQmxvYlJlZ2lzdHJ5SW1wbCYpIGNvbnN0OwotICAg
ICAgICB2b2lkIGRvVXBkYXRlUGxhdGZvcm1SZXF1ZXN0KCkgeyB9Ci0gICAgICAgIHZvaWQgZG9V
cGRhdGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KLSAgICAgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3Jt
SFRUUEJvZHkoKSB7IH0KLSAgICAgICAgdm9pZCBkb1VwZGF0ZVJlc291cmNlSFRUUEJvZHkoKSB7
IH0KLQotICAgICAgICB2b2lkIGRvUGxhdGZvcm1TZXRBc0lzb2xhdGVkQ29weShjb25zdCBSZXNv
dXJjZVJlcXVlc3QmKSB7IH0KLSAgICB9OworY2xhc3MgQmxvYlJlZ2lzdHJ5SW1wbDsKKworY2xh
c3MgUmVzb3VyY2VSZXF1ZXN0IDogcHVibGljIFJlc291cmNlUmVxdWVzdEJhc2UgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFJlc291cmNlUmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKKyAgICAg
ICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCh7IH0sIHVybCksIFJlc291cmNlUmVxdWVzdENh
Y2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAgICAgICAsIG1fYWNjZXB0RW5j
b2RpbmcodHJ1ZSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVS
TCYgdXJsKQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBSZXNvdXJjZVJlcXVl
c3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICAgICAgLCBtX2FjY2Vw
dEVuY29kaW5nKHRydWUpCisgICAgeworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdChjb25z
dCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQ
b2xpY3kgcG9saWN5ID0gUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlVzZVByb3RvY29sQ2Fj
aGVQb2xpY3kpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZSh1cmwsIHBvbGljeSkKKyAg
ICAgICAgLCBtX2FjY2VwdEVuY29kaW5nKHRydWUpCisgICAgeworICAgICAgICBzZXRIVFRQUmVm
ZXJyZXIocmVmZXJyZXIpOworICAgIH0KKworICAgIFJlc291cmNlUmVxdWVzdCgpCisgICAgICAg
IDogUmVzb3VyY2VSZXF1ZXN0QmFzZShVUkwoKSwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6
OlVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCisgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0cnVl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdP
bGRQcm9wZXJ0aWVzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZGVsZWdhdGVQcm92aWRlZFJlcXVl
c3QpIHsgKnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVxdWVzdDsgfQorCisgICAgYm9vbCBhY2Nl
cHRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0RW5jb2Rpbmc7IH0KKyAgICB2b2lk
IHNldEFjY2VwdEVuY29kaW5nKGJvb2wgYWNjZXB0RW5jb2RpbmcpIHsgbV9hY2NlcHRFbmNvZGlu
ZyA9IGFjY2VwdEVuY29kaW5nOyB9CisKKyAgICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlSGVhZGVy
cyhTb3VwTWVzc2FnZUhlYWRlcnMqKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVz
c2FnZUhlYWRlcnMoU291cE1lc3NhZ2VIZWFkZXJzKik7CisgICAgdm9pZCB1cGRhdGVTb3VwTWVz
c2FnZShTb3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUltcGwmKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZUZyb21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopOworCisgICAgU291cE1lc3NhZ2VGbGFn
cyBzb3VwTWVzc2FnZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KKyAgICB2
b2lkIHNldFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9z
b3VwRmxhZ3MgPSBzb3VwRmxhZ3M7IH0KKworICAgIEdVbmlxdWVQdHI8U291cFVSST4gY3JlYXRl
U291cFVSSSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNv
ZGVXaXRoUGxhdGZvcm1EYXRhKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVXaXRoUGxhdGZvcm1EYXRhKERl
Y29kZXImKTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFz
ZTsKKworICAgIGJvb2wgbV9hY2NlcHRFbmNvZGluZyA6IDE7CisgICAgU291cE1lc3NhZ2VGbGFn
cyBtX3NvdXBGbGFncyB7IHN0YXRpY19jYXN0PFNvdXBNZXNzYWdlRmxhZ3M+KDApIH07CisKKyAg
ICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlTWVtYmVycyhTb3VwTWVzc2FnZSopIGNvbnN0OworICAg
IHZvaWQgdXBkYXRlU291cE1lc3NhZ2VCb2R5KFNvdXBNZXNzYWdlKiwgQmxvYlJlZ2lzdHJ5SW1w
bCYpIGNvbnN0OworICAgIHZvaWQgZG9VcGRhdGVQbGF0Zm9ybVJlcXVlc3QoKSB7IH0KKyAgICB2
b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkgeyB9CisgICAgdm9pZCBkb1VwZGF0ZVBsYXRm
b3JtSFRUUEJvZHkoKSB7IH0KKyAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VIVFRQQm9keSgpIHsg
fQorCisgICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRlZENvcHkoY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JikgeyB9Cit9OwogCiB0ZW1wbGF0ZTxjbGFzcyBFbmNvZGVyPgogdm9pZCBSZXNvdXJj
ZVJlcXVlc3Q6OmVuY29kZVdpdGhQbGF0Zm9ybURhdGEoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
QEAgLTEzNiw3ICsxMDgsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6ZW5jb2RlV2l0aFBsYXRm
b3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgICAgICBlbmNvZGVyIDw8IG1faHR0
cEJvZHktPmZsYXR0ZW5Ub1N0cmluZygpOwogCiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1
aW50MzJfdD4obV9zb3VwRmxhZ3MpOwotICAgIGVuY29kZXIgPDwgbV9pbml0aWF0aW5nUGFnZUlE
OwogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8Ym9vbD4obV9hY2NlcHRFbmNvZGluZyk7CiB9
CiAKQEAgLTE2MSwxMiArMTMyLDYgQEAgYm9vbCBSZXNvdXJjZVJlcXVlc3Q6OmRlY29kZVdpdGhQ
bGF0Zm9ybURhdGEoRGVjb2RlciYgZGVjb2RlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IG1fc291cEZsYWdzID0gc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oc291cE1lc3NhZ2VG
bGFncyk7CiAKLSAgICBPcHRpb25hbDxPcHRpb25hbDx1aW50NjRfdD4+IGluaXRpYXRpbmdQYWdl
SUQ7Ci0gICAgZGVjb2RlciA+PiBpbml0aWF0aW5nUGFnZUlEOwotICAgIGlmICghaW5pdGlhdGlu
Z1BhZ2VJRCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1faW5pdGlhdGluZ1BhZ2VJRCA9
ICppbml0aWF0aW5nUGFnZUlEOwotCiAgICAgYm9vbCBhY2NlcHRFbmNvZGluZzsKICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGFjY2VwdEVuY29kaW5nKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMTk2LDQgKzE2MSwzIEBAIGlubGluZSBTb3VwTWVzc2FnZVByaW9yaXR5IHRvU291cE1lc3Nh
Z2VQcmlvcml0eShSZXNvdXJjZUxvYWRQcmlvcml0eSBwcmlvcml0eSkKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCi0jZW5kaWYgLy8gUmVzb3VyY2VSZXF1ZXN0X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RT
b3VwLmNwcAppbmRleCBlMTY3ODAxNDc4YjMuLjI3ZjliZTI3MjI2MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVl
c3RTb3VwLmNwcApAQCAtMjAwLDIzICsyMDAsNiBAQCB2b2lkIFJlc291cmNlUmVxdWVzdDo6dXBk
YXRlRnJvbVNvdXBNZXNzYWdlKFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkKICNlbmRpZgogfQog
Ci1zdGF0aWMgY29uc3QgY2hhciogZ1NvdXBSZXF1ZXN0SW5pdGlhdGluZ1BhZ2VJREtleSA9ICJ3
ay1zb3VwLXJlcXVlc3QtaW5pdGlhdGluZy1wYWdlLWlkIjsKLQotdm9pZCBSZXNvdXJjZVJlcXVl
c3Q6OnVwZGF0ZVNvdXBSZXF1ZXN0KFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCkgY29uc3QKLXsK
LSAgICBpZiAobV9pbml0aWF0aW5nUGFnZUlEKSB7Ci0gICAgICAgIHVpbnQ2NF90KiBpbml0aWF0
aW5nUGFnZUlEUHRyID0gc3RhdGljX2Nhc3Q8dWludDY0X3QqPihmYXN0TWFsbG9jKHNpemVvZih1
aW50NjRfdCkpKTsKLSAgICAgICAgKmluaXRpYXRpbmdQYWdlSURQdHIgPSAqbV9pbml0aWF0aW5n
UGFnZUlEOwotICAgICAgICBnX29iamVjdF9zZXRfZGF0YV9mdWxsKEdfT0JKRUNUKHNvdXBSZXF1
ZXN0KSwgZ19pbnRlcm5fc3RhdGljX3N0cmluZyhnU291cFJlcXVlc3RJbml0aWF0aW5nUGFnZUlE
S2V5KSwgaW5pdGlhdGluZ1BhZ2VJRFB0ciwgZmFzdEZyZWUpOwotICAgIH0KLX0KLQotdm9pZCBS
ZXNvdXJjZVJlcXVlc3Q6OnVwZGF0ZUZyb21Tb3VwUmVxdWVzdChTb3VwUmVxdWVzdCogc291cFJl
cXVlc3QpCi17Ci0gICAgdWludDY0X3QqIGluaXRpYXRpbmdQYWdlSURQdHIgPSBzdGF0aWNfY2Fz
dDx1aW50NjRfdCo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKHNvdXBSZXF1ZXN0KSwgZ1Nv
dXBSZXF1ZXN0SW5pdGlhdGluZ1BhZ2VJREtleSkpOwotICAgIG1faW5pdGlhdGluZ1BhZ2VJRCA9
IGluaXRpYXRpbmdQYWdlSURQdHIgPyAqaW5pdGlhdGluZ1BhZ2VJRFB0ciA6IDA7Ci19Ci0KIHVu
c2lnbmVkIGluaXRpYWxpemVNYXhpbXVtSFRUUENvbm5lY3Rpb25Db3VudFBlckhvc3QoKQogewog
ICAgIC8vIFNvdXAgaGFzIGl0cyBvd24gcXVldWUgY29udHJvbDsgaXQgd2FudHMgdG8gaGF2ZSBh
bGwgcmVxdWVzdHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaAppbmRleCBkMDgyYjcwMjJhZWMuLjVhNDg0OTM2
YzA3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Nv
dXBOZXR3b3JrU2Vzc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
c291cC9Tb3VwTmV0d29ya1Nlc3Npb24uaApAQCAtMzcsNyArMzcsNiBAQAogdHlwZWRlZiBzdHJ1
Y3QgX1NvdXBDYWNoZSBTb3VwQ2FjaGU7CiB0eXBlZGVmIHN0cnVjdCBfU291cENvb2tpZUphciBT
b3VwQ29va2llSmFyOwogdHlwZWRlZiBzdHJ1Y3QgX1NvdXBNZXNzYWdlIFNvdXBNZXNzYWdlOwot
dHlwZWRlZiBzdHJ1Y3QgX1NvdXBSZXF1ZXN0IFNvdXBSZXF1ZXN0OwogdHlwZWRlZiBzdHJ1Y3Qg
X1NvdXBTZXNzaW9uIFNvdXBTZXNzaW9uOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmlu
ZGV4IDcwOTQ3NTI2YmViYy4uOTI1YTk0ZDk0MGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBA
CisyMDIxLTAxLTIwICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4K
KworICAgICAgICBbU09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkgaW4gcHJlcGFyYXRp
b24gZm9yIGxpYnNvdXAzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMjA3NjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBJdCdzIGdvbmUgaW4gbGlic291cDMsIHdlIGNhbiBqdXN0IHVzZSBzb3VwX3Nlc3Np
b25fc2VuZF9hc3luYygpIGluc3RlYWQsIHdoaWNoIGlzIHdoYXQgU291cFJlcXVlc3QgZG9lcwor
ICAgICAgICBpbnRlcm5hbGx5LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3
b3JrRGF0YVRhc2tTb3VwLmNwcDoKKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291
cDo6Y3JlYXRlUmVxdWVzdCk6IE1hbnVhbGx5IGNyZWF0ZSB0aGUgU291cE1lc3NhZ2UuIEFsc28g
Y29ubmVjdCB0byBjb250ZW50LXNuaWZmZWQKKyAgICAgICAgc2lnbmFsIHRoYXQgaXQgd2FzIGhh
bmRsZWQgYnkgU291cFJlcXVlc3QgaW50ZXJuYWxseS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29y
a0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KTogUmVtb3ZlIHRoZSBTb3VwUmVxdWVzdCByZXNl
dCBhbmQgY2xlYXIgbV9zbmlmZmVkQ29udGVudFR5cGUuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdv
cmtEYXRhVGFza1NvdXA6OnJlc3VtZSk6IFVzZSBzb3VwX3Nlc3Npb25fc2VuZF9hc3luYygpLiBX
ZSBuZWVkIHRvIGtub3cgdGhlIG1lc3NhZ2UgZm9yIHBhc3NlZCB0bworICAgICAgICB0aGUgZnVu
Y3Rpb24gZnJvbSB0aGUgYXN5bmMgcmVhZHkgY2FsbGJhY2ssIHNvIHdlIHVzZSBhIHN0cnVjdCB0
byBwYXNzIGJvdGggdGhlIHRhc2sgYW5kIHRoZSBtZXNzYWdlLiBJbiBjYXNlIG9mCisgICAgICAg
IGJlaW5nIHN1c3BlbmRlZCB0aGUgc3RydWN0IHdhcyBhdHRhY2hlZCB0byB0aGUgcGVuZGluZyBy
ZXN1bHQuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnNlbmRSZXF1ZXN0
Q2FsbGJhY2spOiBGaW5pc2ggdGhlIHNvdXBfc2Vzc2lvbl9zZW5kX2FzeW5jKCkgb3BlcmF0aW9u
LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTZW5kUmVxdWVzdCk6
IFNldCB0aGUgc25pZmZlZCBjb250ZW50IHR5cGUgZnJvbSBtX3NuaWZmZWRDb250ZW50VHlwZS4K
KyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6dGxzQ29ubmVjdGlvbkFjY2Vw
dENlcnRpZmljYXRlKTogVXNlIFNvdXBNZXNzYWdlIGluc3RlYWQgb2YgU291cFJlcXVlc3QgdG8g
Z2V0IHRoZSBVUkkuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFNu
aWZmQ29udGVudENhbGxiYWNrKTogQnVpbGQgdGhlIHNuaWZmZWQgY29udGVudCB0eXBlIGFuZCBj
YWxsIGRpZFNuaWZmQ29udGVudCgpLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tT
b3VwOjpkaWRTbmlmZkNvbnRlbnQpOiBTYXZlIHRoZSBwYXNzZWQgY29udGVudCB0eXBlLgorICAg
ICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUF1dGhlbnRpY2F0ZSk6
IFVzZSBtX2N1cnJlbnRSZXF1ZXN0IGluc3RlYWQgb2YgdGhlIFNvdXBSZXF1ZXN0IHRvIGJ1aWxk
CisgICAgICAgIHRoZSBhdXRoZW50aWNhdGlvbiBlcnJvci4KKyAgICAgICAgKFdlYktpdDo6TmV0
d29ya0RhdGFUYXNrU291cDo6c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb25DYWxsYmFjayk6
IFBhc3MgdGhlIGZhaWxpbmcgVVJMIHRvIHRoZSBSZXNvdXJjZUVycm9yIGNvbnN0cnVjdG9yLgor
ICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVj
dGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZWFk
Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6
cmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2spOiBEaXR0by4KKyAgICAgICAgKiBOZXR3b3JrUHJvY2Vz
cy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwOiBTdG9wIHNldHRpbmcgdGhlIGlu
aXRpYXRpbmcgcGFnZSBJRCBpbiB0aGUgcmVxdWVzdCBiZWNhdXNlCisgICAgICAgIGl0J3MgdW51
c2VkLgorCiAyMDIxLTAxLTExICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbU09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkgdG8gbG9h
ZCBmaWxlcyBpbiBwcmVwYXJhdGlvbiBmb3IgbGlic291cDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAppbmRl
eCAyOGM2M2IwYTcyMDcuLjQ4ODg3NDQwNjM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9O
ZXR3b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcApAQCAtMTE0
LDQyICsxMTQsMzAgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjcmVhdGVSZXF1ZXN0KFJl
c291cmNlUmVxdWVzdCYmIHJlcXVlc3QsIFdhc0Jsb2NraW5nQ28KICAgICB9CiAKICAgICBHVW5p
cXVlUHRyPFNvdXBVUkk+IHNvdXBVUkkgPSBtX2N1cnJlbnRSZXF1ZXN0LmNyZWF0ZVNvdXBVUkko
KTsKLSAgICBpZiAoIXNvdXBVUkkpIHsKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRV
UkxGYWlsdXJlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdSZWZQdHI8U291cFJl
cXVlc3Q+IHNvdXBSZXF1ZXN0ID0gYWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9yZXF1ZXN0X3VyaShz
dGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbV9zZXNzaW9uKS5zb3VwU2Vzc2lvbigp
LCBzb3VwVVJJLmdldCgpLCBudWxscHRyKSk7Ci0gICAgaWYgKCFzb3VwUmVxdWVzdCkgewotICAg
ICAgICBzY2hlZHVsZUZhaWx1cmUoSW52YWxpZFVSTEZhaWx1cmUpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVTb3VwUmVxdWVzdChzb3VwUmVx
dWVzdC5nZXQoKSk7Ci0KLSAgICAvLyBIVFRQIHJlcXVlc3QuCi0gICAgR1JlZlB0cjxTb3VwTWVz
c2FnZT4gc291cE1lc3NhZ2UgPSBhZG9wdEdSZWYoc291cF9yZXF1ZXN0X2h0dHBfZ2V0X21lc3Nh
Z2UoU09VUF9SRVFVRVNUX0hUVFAoc291cFJlcXVlc3QuZ2V0KCkpKSk7Ci0gICAgaWYgKCFzb3Vw
TWVzc2FnZSkgeworICAgIGlmICghc291cFVSSSB8fCAhU09VUF9VUklfVkFMSURfRk9SX0hUVFAo
c291cFVSSS5nZXQoKSkpIHsKICAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWls
dXJlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIHJlc3RyaWN0UmVxdWVzdFJlZmVy
cmVyVG9PcmlnaW5JZk5lZWRlZChtX2N1cnJlbnRSZXF1ZXN0KTsKIAotICAgIHVuc2lnbmVkIG1l
c3NhZ2VGbGFncyA9IFNPVVBfTUVTU0FHRV9OT19SRURJUkVDVDsKKyAgICBtX3NvdXBNZXNzYWdl
ID0gYWRvcHRHUmVmKHNvdXBfbWVzc2FnZV9uZXdfZnJvbV91cmkoU09VUF9NRVRIT0RfR0VULCBz
b3VwVVJJLmdldCgpKSk7CisgICAgbV9jdXJyZW50UmVxdWVzdC51cGRhdGVTb3VwTWVzc2FnZSht
X3NvdXBNZXNzYWdlLmdldCgpLCBtX3Nlc3Npb24tPmJsb2JSZWdpc3RyeSgpKTsKIAotICAgIG1f
Y3VycmVudFJlcXVlc3QudXBkYXRlU291cE1lc3NhZ2Uoc291cE1lc3NhZ2UuZ2V0KCksIG1fc2Vz
c2lvbi0+YmxvYlJlZ2lzdHJ5KCkpOworICAgIHVuc2lnbmVkIG1lc3NhZ2VGbGFncyA9IFNPVVBf
TUVTU0FHRV9OT19SRURJUkVDVDsKICAgICBpZiAobV9zaG91bGRDb250ZW50U25pZmYgPT0gQ29u
dGVudFNuaWZmaW5nUG9saWN5OjpEb05vdFNuaWZmQ29udGVudCkKLSAgICAgICAgc291cF9tZXNz
YWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPTlRFTlRf
U05JRkZFUik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUobV9zb3VwTWVz
c2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPTlRFTlRfU05JRkZFUik7CiAgICAgaWYgKG1fdXNlci5p
c0VtcHR5KCkgJiYgbV9wYXNzd29yZC5pc0VtcHR5KCkgJiYgbV9zdG9yZWRDcmVkZW50aWFsc1Bv
bGljeSA9PSBTdG9yZWRDcmVkZW50aWFsc1BvbGljeTo6RG9Ob3RVc2UpIHsKICNpZiBTT1VQX0NI
RUNLX1ZFUlNJT04oMiwgNTcsIDEpCiAgICAgICAgIG1lc3NhZ2VGbGFncyB8PSBTT1VQX01FU1NB
R0VfRE9fTk9UX1VTRV9BVVRIX0NBQ0hFOwogI2Vsc2UKICAgICAgICAgLy8gSW4gY2FzZSBjcmVk
ZW50aWFsIGlzIG5vdCBhdmFpbGFibGUgYW5kIGNyZWRlbnRpYWwgc3RvcmFnZSBzaG91bGQgbm90
IHRvIGJlIHVzZWQsCiAgICAgICAgIC8vIGRpc2FibGUgYXV0aGVudGljYXRpb24gbWFuYWdlciBz
byB0aGF0IGNyZWRlbnRpYWxzIHN0b3JlZCBpbiBsaWJzb3VwIGFyZSBub3QgdXNlZC4KLSAgICAg
ICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9U
WVBFX0FVVEhfTUFOQUdFUik7CisgICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUo
bV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0FVVEhfTUFOQUdFUik7CiAjZW5kaWYKICAg
ICB9CisgICAgc291cF9tZXNzYWdlX3NldF9mbGFncyhtX3NvdXBNZXNzYWdlLmdldCgpLCBzdGF0
aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwX21lc3NhZ2VfZ2V0X2ZsYWdzKG1fc291cE1l
c3NhZ2UuZ2V0KCkpIHwgbWVzc2FnZUZsYWdzKSk7CisgICAgc291cF9tZXNzYWdlX3NldF9wcmlv
cml0eShtX3NvdXBNZXNzYWdlLmdldCgpLCB0b1NvdXBNZXNzYWdlUHJpb3JpdHkobV9jdXJyZW50
UmVxdWVzdC5wcmlvcml0eSgpKSk7CiAKICNpZiBFTkFCTEUoUkVTT1VSQ0VfTE9BRF9TVEFUSVNU
SUNTKQogICAgIGJvb2wgc2hvdWxkQmxvY2tDb29raWVzID0gd2FzQmxvY2tpbmdDb29raWVzID09
IFdhc0Jsb2NraW5nQ29va2llczo6WWVzID8gdHJ1ZSA6IG1fc3RvcmVkQ3JlZGVudGlhbHNQb2xp
Y3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkVwaGVtZXJhbFN0YXRlbGVzczsKQEAgLTE1
OCwzMiArMTQ2LDI2IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVzdChS
ZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAgICAgICAgICAgICBzaG91
bGRCbG9ja0Nvb2tpZXMgPSBuZXR3b3JrU3RvcmFnZVNlc3Npb24tPnNob3VsZEJsb2NrQ29va2ll
cyhtX2N1cnJlbnRSZXF1ZXN0LCBtX2ZyYW1lSUQsIG1fcGFnZUlELCBXZWJDb3JlOjpTaG91bGRS
ZWxheFRoaXJkUGFydHlDb29raWVCbG9ja2luZzo6Tm8pOwogICAgIH0KICAgICBpZiAoc2hvdWxk
QmxvY2tDb29raWVzKQotICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKHNvdXBN
ZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfQ09PS0lFX0pBUik7CisgICAgICAgIHNvdXBfbWVzc2Fn
ZV9kaXNhYmxlX2ZlYXR1cmUobV9zb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPT0tJRV9K
QVIpOwogICAgIG1faXNCbG9ja2luZ0Nvb2tpZXMgPSBzaG91bGRCbG9ja0Nvb2tpZXM7CiAjZW5k
aWYKIAogI2lmIFNPVVBfQ0hFQ0tfVkVSU0lPTigyLCA2NywgMSkKICAgICBpZiAoKG1fY3VycmVu
dFJlcXVlc3QudXJsKCkucHJvdG9jb2xJcygiaHR0cHMiKSAmJiAhc2hvdWxkQWxsb3dIU1RTUG9s
aWN5U2V0dGluZygpKSB8fCAobV9jdXJyZW50UmVxdWVzdC51cmwoKS5wcm90b2NvbElzKCJodHRw
IikgJiYgIXNob3VsZEFsbG93SFNUU1Byb3RvY29sVXBncmFkZSgpKSkKLSAgICAgICAgc291cF9t
ZXNzYWdlX2Rpc2FibGVfZmVhdHVyZShzb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0hTVFNf
RU5GT1JDRVIpOworICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKG1fc291cE1l
c3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9IU1RTX0VORk9SQ0VSKTsKICAgICBlbHNlCiAgICAgICAg
IGdfc2lnbmFsX2Nvbm5lY3Qoc291cF9zZXNzaW9uX2dldF9mZWF0dXJlKHN0YXRpY19jYXN0PE5l
dHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24pLnNvdXBTZXNzaW9uKCksIFNPVVBfVFlQRV9I
U1RTX0VORk9SQ0VSKSwgImhzdHMtZW5mb3JjZWQiLCBHX0NBTExCQUNLKGhzdHNFbmZvcmNlZCks
IHRoaXMpOwogI2VuZGlmCiAKICAgICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBBY2NlcHQgaGVh
ZGVyIGZvciBzdWJyZXNvdXJjZXM7IHNvbWUgc2l0ZXMgd2FudCB0aGlzIHRvIHNlcnZlIHNvbWUg
b2YgdGhlaXIgc3VicmVzb3VyY2VzLgotICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0
X29uZShzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAi
QWNjZXB0IiwgIiovKiIpOworICAgIGlmICghc291cF9tZXNzYWdlX2hlYWRlcnNfZ2V0X29uZSht
X3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsICJBY2NlcHQiKSkKKyAgICAgICAgc291cF9t
ZXNzYWdlX2hlYWRlcnNfYXBwZW5kKG1fc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFj
Y2VwdCIsICIqLyoiKTsKIAogICAgIC8vIEluIHRoZSBjYXNlIG9mIFhIUiAuc2VuZCgpIGFuZCAu
c2VuZCgiIikgZXhwbGljaXRseSB0ZWxsIGxpYnNvdXAgdG8gc2VuZCBhIHplcm8gY29udGVudC1s
ZW5naHQgaGVhZGVyCiAgICAgLy8gZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgVUEgaW1wbGVt
ZW50YXRpb25zIGxpa2UgRmlyZWZveC4gSXQncyBkb25lIGluIHRoZSBiYWNrZW5kIGhlcmUgaW5z
dGVhZCBvZgogICAgIC8vIGluIFhIUiBjb2RlIHNpbmNlIGluIFhIUiBDT1JTIGNoZWNraW5nIHBy
ZXZlbnRzIHVzIGZyb20gdGhpcyBraW5kIG9mIGxhdGUgaGVhZGVyIG1hbmlwdWxhdGlvbi4KLSAg
ICBpZiAoKHNvdXBNZXNzYWdlLT5tZXRob2QgPT0gU09VUF9NRVRIT0RfUE9TVCB8fCBzb3VwTWVz
c2FnZS0+bWV0aG9kID09IFNPVVBfTUVUSE9EX1BVVCkgJiYgIXNvdXBNZXNzYWdlLT5yZXF1ZXN0
X2JvZHktPmxlbmd0aCkKLSAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2NvbnRlbnRf
bGVuZ3RoKHNvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRlcnMsIDApOwotCi0gICAgc291cF9tZXNz
YWdlX3NldF9mbGFncyhzb3VwTWVzc2FnZS5nZXQoKSwgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VG
bGFncz4oc291cF9tZXNzYWdlX2dldF9mbGFncyhzb3VwTWVzc2FnZS5nZXQoKSkgfCBtZXNzYWdl
RmxhZ3MpKTsKLSAgICBzb3VwX21lc3NhZ2Vfc2V0X3ByaW9yaXR5KHNvdXBNZXNzYWdlLmdldCgp
LCB0b1NvdXBNZXNzYWdlUHJpb3JpdHkobV9jdXJyZW50UmVxdWVzdC5wcmlvcml0eSgpKSk7Ci0K
LSAgICBtX3NvdXBSZXF1ZXN0ID0gV1RGTW92ZShzb3VwUmVxdWVzdCk7Ci0gICAgbV9zb3VwTWVz
c2FnZSA9IFdURk1vdmUoc291cE1lc3NhZ2UpOworICAgIGlmICgobV9zb3VwTWVzc2FnZS0+bWV0
aG9kID09IFNPVVBfTUVUSE9EX1BPU1QgfHwgbV9zb3VwTWVzc2FnZS0+bWV0aG9kID09IFNPVVBf
TUVUSE9EX1BVVCkgJiYgIW1fc291cE1lc3NhZ2UtPnJlcXVlc3RfYm9keS0+bGVuZ3RoKQorICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19zZXRfY29udGVudF9sZW5ndGgobV9zb3VwTWVzc2Fn
ZS0+cmVxdWVzdF9oZWFkZXJzLCAwKTsKIAogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVz
c2FnZS5nZXQoKSwgImdvdC1oZWFkZXJzIiwgR19DQUxMQkFDSyhnb3RIZWFkZXJzQ2FsbGJhY2sp
LCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJ3cm90
ZS1ib2R5LWRhdGEiLCBHX0NBTExCQUNLKHdyb3RlQm9keURhdGFDYWxsYmFjayksIHRoaXMpOwpA
QCAtMTkxLDYgKzE3Myw4IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVxdWVz
dChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAgICAgZ19zaWduYWxf
Y29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAibmV0d29yay1ldmVudCIsIEdfQ0FMTEJBQ0so
bmV0d29ya0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291
cE1lc3NhZ2UuZ2V0KCksICJyZXN0YXJ0ZWQiLCBHX0NBTExCQUNLKHJlc3RhcnRlZENhbGxiYWNr
KSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgpLCAic3Rh
cnRpbmciLCBHX0NBTExCQUNLKHN0YXJ0aW5nQ2FsbGJhY2spLCB0aGlzKTsKKyAgICBpZiAobV9z
aG91bGRDb250ZW50U25pZmYgPT0gQ29udGVudFNuaWZmaW5nUG9saWN5OjpTbmlmZkNvbnRlbnQp
CisgICAgICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgImNvbnRlbnQt
c25pZmZlZCIsIEdfQ0FMTEJBQ0soZGlkU25pZmZDb250ZW50Q2FsbGJhY2spLCB0aGlzKTsKIH0K
IAogdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhclJlcXVlc3QoKQpAQCAtMjAyLDExICsx
ODYsMTEgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjbGVhclJlcXVlc3QoKQogCiAgICAg
c3RvcFRpbWVvdXQoKTsKICAgICBtX3BlbmRpbmdSZXN1bHQgPSBudWxscHRyOwotICAgIG1fc291
cFJlcXVlc3QgPSBudWxscHRyOwogICAgIG1fZmlsZSA9IG51bGxwdHI7CiAgICAgbV9pbnB1dFN0
cmVhbSA9IG51bGxwdHI7CiAgICAgbV9tdWx0aXBhcnRJbnB1dFN0cmVhbSA9IG51bGxwdHI7CiAg
ICAgbV9kb3dubG9hZE91dHB1dFN0cmVhbSA9IG51bGxwdHI7CisgICAgbV9zbmlmZmVkQ29udGVu
dFR5cGUgPSB7IH07CiAgICAgZ19jYW5jZWxsYWJsZV9jYW5jZWwobV9jYW5jZWxsYWJsZS5nZXQo
KSk7CiAgICAgbV9jYW5jZWxsYWJsZSA9IG51bGxwdHI7CiAgICAgbV9pc0Jsb2NraW5nQ29va2ll
cyA9IGZhbHNlOwpAQCAtMjM1LDkgKzIxOSwxMyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6
OnJlc3VtZSgpCiAgICAgc3RhcnRUaW1lb3V0KCk7CiAKICAgICBSZWZQdHI8TmV0d29ya0RhdGFU
YXNrU291cD4gcHJvdGVjdGVkVGhpcyh0aGlzKTsKLSAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiAh
bV9jYW5jZWxsYWJsZSkgeworICAgIGlmIChtX3NvdXBNZXNzYWdlICYmICFtX2NhbmNlbGxhYmxl
KSB7CiAgICAgICAgIG1fY2FuY2VsbGFibGUgPSBhZG9wdEdSZWYoZ19jYW5jZWxsYWJsZV9uZXco
KSk7Ci0gICAgICAgIHNvdXBfcmVxdWVzdF9zZW5kX2FzeW5jKG1fc291cFJlcXVlc3QuZ2V0KCks
IG1fY2FuY2VsbGFibGUuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFj
az4oc2VuZFJlcXVlc3RDYWxsYmFjayksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBwcm90ZWN0IGNhbmNlbGxhYmxlIGhlcmUsIGJlY2F1c2Ugc291cF9z
ZXNzaW9uX3NlbmRfYXN5bmMgdXNlcyBpdCBhZnRlciBlbWl0dGluZyBTb3VwU2Vzc2lvbjo6cmVx
dWVzdC1xdWV1ZWQsIGFuZCB3ZQorICAgICAgICAvLyBtaWdodCBjYW5jZWwgdGhlIG9wZXJhdGlv
biBpbiBhIGZlYXR1cmUgY2FsbGJhY2sgZW1pdHRlZCBvbiByZXF1ZXN0LXF1ZXVlZCwgZm9yIGV4
YW1wbGUgaHN0cy1lbmZvcmNlZC4KKyAgICAgICAgR1JlZlB0cjxHQ2FuY2VsbGFibGU+IHByb3Rl
Y3RDYW5jZWxsYWJsZShtX2NhbmNlbGxhYmxlKTsKKyAgICAgICAgc291cF9zZXNzaW9uX3NlbmRf
YXN5bmMoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikuc291cFNl
c3Npb24oKSwgbV9zb3VwTWVzc2FnZS5nZXQoKSwgbV9jYW5jZWxsYWJsZS5nZXQoKSwKKyAgICAg
ICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8R0FzeW5jUmVhZHlDYWxsYmFjaz4oc2VuZFJlcXVlc3RD
YWxsYmFjayksIG5ldyBTZW5kUmVxdWVzdERhdGEoeyBtX3NvdXBNZXNzYWdlLCBXVEZNb3ZlKHBy
b3RlY3RlZFRoaXMpIH0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjU0LDkgKzI0
MiwxMCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlc3VtZSgpCiAgICAgICAgICAgICBy
ZWFkQ2FsbGJhY2sobV9pbnB1dFN0cmVhbS5nZXQoKSwgcGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJv
dGVjdGVkVGhpcy5sZWFrUmVmKCkpOwogICAgICAgICBlbHNlIGlmIChtX211bHRpcGFydElucHV0
U3RyZWFtKQogICAgICAgICAgICAgcmVxdWVzdE5leHRQYXJ0Q2FsbGJhY2sobV9tdWx0aXBhcnRJ
bnB1dFN0cmVhbS5nZXQoKSwgcGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFr
UmVmKCkpOwotICAgICAgICBlbHNlIGlmIChtX3NvdXBSZXF1ZXN0KQotICAgICAgICAgICAgc2Vu
ZFJlcXVlc3RDYWxsYmFjayhtX3NvdXBSZXF1ZXN0LmdldCgpLCBwZW5kaW5nUmVzdWx0LmdldCgp
LCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7Ci0gICAgICAgIGVsc2UgaWYgKG1fZmlsZSkgewor
ICAgICAgICBlbHNlIGlmIChtX3NvdXBNZXNzYWdlKSB7CisgICAgICAgICAgICBzZW5kUmVxdWVz
dENhbGxiYWNrKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24pLnNv
dXBTZXNzaW9uKCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksCisgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8U2VuZFJlcXVlc3REYXRhKj4oZ19vYmplY3Rfc3RlYWxfZGF0YShHX09CSkVDVChwZW5k
aW5nUmVzdWx0LmdldCgpKSwgIndrLXNlbmQtcmVxdWVzdC1kYXRhIikpKTsKKyAgICAgICAgfSBl
bHNlIGlmIChtX2ZpbGUpIHsKICAgICAgICAgICAgIGlmIChtX3Jlc3BvbnNlLmV4cGVjdGVkQ29u
dGVudExlbmd0aCgpID09IC0xKQogICAgICAgICAgICAgICAgIGVudW1lcmF0ZUZpbGVDaGlsZHJl
bkNhbGxiYWNrKG1fZmlsZS5nZXQoKSwgcGVuZGluZ1Jlc3VsdC5nZXQoKSwgcHJvdGVjdGVkVGhp
cy5sZWFrUmVmKCkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzE2LDE2ICszMDUsMTggQEAgdm9p
ZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzdG9wVGltZW91dCgpCiAgICAgbV90aW1lb3V0U291cmNl
LnN0b3AoKTsKIH0KIAotdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5kUmVxdWVzdENhbGxi
YWNrKFNvdXBSZXF1ZXN0KiBzb3VwUmVxdWVzdCwgR0FzeW5jUmVzdWx0KiByZXN1bHQsIE5ldHdv
cmtEYXRhVGFza1NvdXAqIHRhc2spCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnNlbmRSZXF1
ZXN0Q2FsbGJhY2soU291cFNlc3Npb24qIHNvdXBTZXNzaW9uLCBHQXN5bmNSZXN1bHQqIHJlc3Vs
dCwgU2VuZFJlcXVlc3REYXRhKiBkYXRhKQogewotICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tT
b3VwPiBwcm90ZWN0ZWRUaGlzID0gYWRvcHRSZWYodGFzayk7Ci0gICAgaWYgKHNvdXBSZXF1ZXN0
ICE9IHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpIHsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2Vu
ZFJlcXVlc3REYXRhPiBwcm90ZWN0ZWREYXRhKGRhdGEpOworICAgIGF1dG8qIHRhc2sgPSBkYXRh
LT50YXNrLmdldCgpOworCisgICAgaWYgKHRhc2stPm1fc291cE1lc3NhZ2UgJiYgdGFzay0+bV9z
b3VwTWVzc2FnZSAhPSBkYXRhLT5zb3VwTWVzc2FnZS5nZXQoKSkgewogICAgICAgICAvLyBUaGlz
IGNhbiBoYXBwZW4gd2hlbiB0aGUgcmVxdWVzdCBpcyBjYW5jZWxsZWQgYW5kIGEgbmV3IG9uZSBp
cyBzdGFydGVkIGJlZm9yZQogICAgICAgICAvLyB0aGUgcHJldmlvdXMgYXN5bmMgb3BlcmF0aW9u
IGNvbXBsZXRlZC4gVGhpcyBpcyBjb21tb24gd2hlbiBmb3JjaW5nIGEgcmVkaXJlY3Rpb24KICAg
ICAgICAgLy8gZHVlIHRvIEhTVFMuIFdlIGNhbiBzaW1wbHkgaWdub3JlIHRoaXMgb2xkIHJlcXVl
c3QuCiAjaWYgQVNTRVJUX0VOQUJMRUQKICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVy
cm9yOwotICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdS
ZWYoc291cF9yZXF1ZXN0X3NlbmRfZmluaXNoKHNvdXBSZXF1ZXN0LCByZXN1bHQsICZlcnJvci5v
dXRQdHIoKSkpOworICAgICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBh
ZG9wdEdSZWYoc291cF9zZXNzaW9uX3NlbmRfZmluaXNoKHNvdXBTZXNzaW9uLCByZXN1bHQsICZl
cnJvci5vdXRQdHIoKSkpOwogICAgICAgICBBU1NFUlQoZ19lcnJvcl9tYXRjaGVzKGVycm9yLmdl
dCgpLCBHX0lPX0VSUk9SLCBHX0lPX0VSUk9SX0NBTkNFTExFRCkpOwogI2VuZGlmCiAgICAgICAg
IHJldHVybjsKQEAgLTMzOSwyMSArMzMwLDI0IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6
c2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1JlCiAg
ICAgaWYgKHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OlN1c3BlbmRlZCkgewogICAgICAgICBBU1NF
UlQoIXRhc2stPm1fcGVuZGluZ1Jlc3VsdCk7CiAgICAgICAgIHRhc2stPm1fcGVuZGluZ1Jlc3Vs
dCA9IHJlc3VsdDsKKyAgICAgICAgZ19vYmplY3Rfc2V0X2RhdGFfZnVsbChHX09CSkVDVCh0YXNr
LT5tX3BlbmRpbmdSZXN1bHQuZ2V0KCkpLCAid2stc2VuZC1yZXF1ZXN0LWRhdGEiLCBwcm90ZWN0
ZWREYXRhLnJlbGVhc2UoKSwgW10oZ3BvaW50ZXIgZGF0YSkgeworICAgICAgICAgICAgZGVsZXRl
IHN0YXRpY19jYXN0PFNlbmRSZXF1ZXN0RGF0YSo+KGRhdGEpOworICAgICAgICB9KTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKLSAg
ICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYoc291cF9yZXF1
ZXN0X3NlbmRfZmluaXNoKHNvdXBSZXF1ZXN0LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwor
ICAgIEdSZWZQdHI8R0lucHV0U3RyZWFtPiBpbnB1dFN0cmVhbSA9IGFkb3B0R1JlZihzb3VwX3Nl
c3Npb25fc2VuZF9maW5pc2goc291cFNlc3Npb24sIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7
CiAgICAgaWYgKGVycm9yKQotICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6Omh0
dHBFcnJvcih0YXNrLT5tX3NvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSwgc291cFJlcXVl
c3QpKTsKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpodHRwRXJyb3IoZGF0
YS0+c291cE1lc3NhZ2UuZ2V0KCksIGVycm9yLmdldCgpKSk7CiAgICAgZWxzZQogICAgICAgICB0
YXNrLT5kaWRTZW5kUmVxdWVzdChXVEZNb3ZlKGlucHV0U3RyZWFtKSk7CiB9CiAKIHZvaWQgTmV0
d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJlcXVlc3QoR1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYg
aW5wdXRTdHJlYW0pCiB7Ci0gICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IENvbnRlbnRT
bmlmZmluZ1BvbGljeTo6U25pZmZDb250ZW50ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2Rl
ICE9IFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCkKLSAgICAgICAgbV9yZXNwb25zZS5zZXRTbmlm
ZmVkQ29udGVudFR5cGUoc291cF9yZXF1ZXN0X2dldF9jb250ZW50X3R5cGUobV9zb3VwUmVxdWVz
dC5nZXQoKSkpOworICAgIGlmICghbV9zbmlmZmVkQ29udGVudFR5cGUuaXNOdWxsKCkgJiYgbV9z
b3VwTWVzc2FnZS0+c3RhdHVzX2NvZGUgIT0gU09VUF9TVEFUVVNfTk9UX01PRElGSUVEKQorICAg
ICAgICBtX3Jlc3BvbnNlLnNldFNuaWZmZWRDb250ZW50VHlwZShtX3NuaWZmZWRDb250ZW50VHlw
ZS5kYXRhKCkpOwogICAgIG1fcmVzcG9uc2UudXBkYXRlRnJvbVNvdXBNZXNzYWdlKG1fc291cE1l
c3NhZ2UuZ2V0KCkpOwogICAgIGlmIChtX3Jlc3BvbnNlLm1pbWVUeXBlKCkuaXNFbXB0eSgpICYm
IG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05PVF9NT0RJRklFRCkK
ICAgICAgICAgbV9yZXNwb25zZS5zZXRNaW1lVHlwZShNSU1FVHlwZVJlZ2lzdHJ5OjptaW1lVHlw
ZUZvclBhdGgobV9yZXNwb25zZS51cmwoKS5wYXRoKCkudG9TdHJpbmcoKSkpOwpAQCAtNDQyLDgg
KzQzNiw4IEBAIGdib29sZWFuIE5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Nvbm5lY3Rpb25BY2Nl
cHRDZXJ0aWZpY2F0ZUNhbGxiYWNrKEdUbHNDb25uZWN0CiAKIGJvb2wgTmV0d29ya0RhdGFUYXNr
U291cDo6dGxzQ29ubmVjdGlvbkFjY2VwdENlcnRpZmljYXRlKEdUbHNDZXJ0aWZpY2F0ZSogY2Vy
dGlmaWNhdGUsIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzIHRsc0Vycm9ycykKIHsKLSAgICBBU1NFUlQo
bV9zb3VwUmVxdWVzdCk7Ci0gICAgVVJMIHVybCA9IHNvdXBVUklUb1VSTChzb3VwX3JlcXVlc3Rf
Z2V0X3VyaShtX3NvdXBSZXF1ZXN0LmdldCgpKSk7CisgICAgQVNTRVJUKG1fc291cE1lc3NhZ2Up
OworICAgIFVSTCB1cmwgPSBzb3VwVVJJVG9VUkwoc291cF9tZXNzYWdlX2dldF91cmkobV9zb3Vw
TWVzc2FnZS5nZXQoKSkpOwogICAgIGF1dG8gZXJyb3IgPSBzdGF0aWNfY2FzdDxOZXR3b3JrU2Vz
c2lvblNvdXAmPigqbV9zZXNzaW9uKS5zb3VwTmV0d29ya1Nlc3Npb24oKS5jaGVja1RMU0Vycm9y
cyh1cmwsIGNlcnRpZmljYXRlLCB0bHNFcnJvcnMpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtNDU0LDYgKzQ0OCwzNCBAQCBib29sIE5ldHdvcmtEYXRhVGFza1Nv
dXA6OnRsc0Nvbm5lY3Rpb25BY2NlcHRDZXJ0aWZpY2F0ZShHVGxzQ2VydGlmaWNhdGUqIGNlcnRp
ZgogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRT
bmlmZkNvbnRlbnRDYWxsYmFjayhTb3VwTWVzc2FnZSogc291cE1lc3NhZ2UsIGNvbnN0IGNoYXIq
IGNvbnRlbnRUeXBlLCBHSGFzaFRhYmxlKiBwYXJhbWV0ZXJzLCBOZXR3b3JrRGF0YVRhc2tTb3Vw
KiB0YXNrKQoreworICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpDYW5jZWxpbmcgfHwg
dGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q29tcGxldGVkIHx8ICF0YXNrLT5tX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKHRhc2stPm1fc291cE1lc3NhZ2UuZ2V0KCkgPT0g
c291cE1lc3NhZ2UpOworICAgIGlmICghcGFyYW1ldGVycykgeworICAgICAgICB0YXNrLT5kaWRT
bmlmZkNvbnRlbnQoY29udGVudFR5cGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
R1N0cmluZyogc25pZmZlZFR5cGUgPSBnX3N0cmluZ19uZXcoY29udGVudFR5cGUpOworICAgIEdI
YXNoVGFibGVJdGVyIGl0ZXI7CisgICAgZ3BvaW50ZXIga2V5LCB2YWx1ZTsKKyAgICBnX2hhc2hf
dGFibGVfaXRlcl9pbml0KCZpdGVyLCBwYXJhbWV0ZXJzKTsKKyAgICB3aGlsZSAoZ19oYXNoX3Rh
YmxlX2l0ZXJfbmV4dCgmaXRlciwgJmtleSwgJnZhbHVlKSkgeworICAgICAgICBnX3N0cmluZ19h
cHBlbmQoc25pZmZlZFR5cGUsICI7ICIpOworICAgICAgICBzb3VwX2hlYWRlcl9nX3N0cmluZ19h
cHBlbmRfcGFyYW0oc25pZmZlZFR5cGUsIHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihrZXkpLCBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4odmFsdWUpKTsKKyAgICB9CisgICAgdGFzay0+ZGlkU25p
ZmZDb250ZW50KHNuaWZmZWRUeXBlLT5zdHIpOworICAgIGdfc3RyaW5nX2ZyZWUoc25pZmZlZFR5
cGUsIFRSVUUpOworfQorCit2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFNuaWZmQ29udGVu
dChDU3RyaW5nJiYgY29udGVudFR5cGUpCit7CisgICAgbV9zbmlmZmVkQ29udGVudFR5cGUgPSBX
VEZNb3ZlKGNvbnRlbnRUeXBlKTsKK30KKwogYm9vbCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpwZXJz
aXN0ZW50Q3JlZGVudGlhbFN0b3JhZ2VFbmFibGVkKCkgY29uc3QKIHsKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikucGVyc2lzdGVudENyZWRl
bnRpYWxTdG9yYWdlRW5hYmxlZCgpOwpAQCAtNTU1LDcgKzU3Nyw3IEBAIHZvaWQgTmV0d29ya0Rh
dGFUYXNrU291cDo6Y29udGludWVBdXRoZW50aWNhdGUoQXV0aGVudGljYXRpb25DaGFsbGVuZ2Um
JiBjaGFsbGVuCiAKICAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlRGlzcG9zaXRpb246OkNhbmNlbCkgewogICAgICAgICAgICAgY2FuY2VsKCk7Ci0gICAg
ICAgICAgICBkaWRGYWlsKGNhbmNlbGxlZEVycm9yKG1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAg
ICAgICAgICAgIGRpZEZhaWwoY2FuY2VsbGVkRXJyb3IobV9jdXJyZW50UmVxdWVzdCkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTU5Myw3ICs2MTUsNyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2FsbGJhY2so
R0lucHV0U3RyZWFtKiBpbgogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKICAgICBn
c3NpemUgYnl0ZXNTa2lwcGVkID0gZ19pbnB1dF9zdHJlYW1fc2tpcF9maW5pc2goaW5wdXRTdHJl
YW0sIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpCi0gICAgICAgIHRh
c2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6Z2VuZXJpY0dFcnJvcihlcnJvci5nZXQoKSwgdGFz
ay0+bV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNl
RXJyb3I6OmdlbmVyaWNHRXJyb3IodGFzay0+bV9jdXJyZW50UmVxdWVzdC51cmwoKSwgZXJyb3Iu
Z2V0KCkpKTsKICAgICBlbHNlIGlmIChieXRlc1NraXBwZWQgPiAwKQogICAgICAgICB0YXNrLT5z
a2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbigpOwogICAgIGVsc2UKQEAgLTY2MSw3ICs2ODMs
NyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlSFRUUFJlZGlyZWN0aW9uKCkK
IAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBtYXhSZWRpcmVjdHMgPSAyMDsKICAgICBpZiAo
bV9yZWRpcmVjdENvdW50KysgPiBtYXhSZWRpcmVjdHMpIHsKLSAgICAgICAgZGlkRmFpbChSZXNv
dXJjZUVycm9yOjp0cmFuc3BvcnRFcnJvcihtX3NvdXBSZXF1ZXN0LmdldCgpLCBTT1VQX1NUQVRV
U19UT09fTUFOWV9SRURJUkVDVFMsICJUb28gbWFueSByZWRpcmVjdHMiKSk7CisgICAgICAgIGRp
ZEZhaWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IobV9jdXJyZW50UmVxdWVzdC51cmwo
KSwgU09VUF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAiVG9vIG1hbnkgcmVkaXJlY3RzIikp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC03MzMsNyArNzU1LDcgQEAgdm9pZCBOZXR3
b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVjdGlvbigpCiAgICAgICAgICAgICAg
ICAgcmVxdWVzdC5zZXRIVFRQVXNlckFnZW50KHVzZXJBZ2VudCk7CiAgICAgICAgIH0KICAgICAg
ICAgY3JlYXRlUmVxdWVzdChXVEZNb3ZlKHJlcXVlc3QpLCB3YXNCbG9ja2luZ0Nvb2tpZXMpOwot
ICAgICAgICBpZiAobV9zb3VwUmVxdWVzdCAmJiBtX3N0YXRlICE9IFN0YXRlOjpTdXNwZW5kZWQp
IHsKKyAgICAgICAgaWYgKG1fc291cE1lc3NhZ2UgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6U3VzcGVu
ZGVkKSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gU3RhdGU6OlN1c3BlbmRlZDsKICAgICAgICAg
ICAgIHJlc3VtZSgpOwogICAgICAgICB9CkBAIC03NTgsOCArNzgwLDggQEAgdm9pZCBOZXR3b3Jr
RGF0YVRhc2tTb3VwOjpyZWFkQ2FsbGJhY2soR0lucHV0U3RyZWFtKiBpbnB1dFN0cmVhbSwgR0Fz
eW5jUmVzdWx0KgogICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKICAgICBnc3NpemUg
Ynl0ZXNSZWFkID0gZ19pbnB1dF9zdHJlYW1fcmVhZF9maW5pc2goaW5wdXRTdHJlYW0sIHJlc3Vs
dCwgJmVycm9yLm91dFB0cigpKTsKICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgaWYgKHRhc2st
Pm1fc291cFJlcXVlc3QpCi0gICAgICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6
OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsK
KyAgICAgICAgaWYgKHRhc2stPm1fc291cE1lc3NhZ2UpCisgICAgICAgICAgICB0YXNrLT5kaWRG
YWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IodGFzay0+bV9jdXJyZW50UmVxdWVzdC51
cmwoKSwgZXJyb3IuZ2V0KCkpKTsKICAgICAgICAgZWxzZSBpZiAodGFzay0+bV9maWxlKQogICAg
ICAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKGVy
cm9yLT5kb21haW4pLCBlcnJvci0+Y29kZSwgdGFzay0+bV9maXJzdFJlcXVlc3QudXJsKCksIFN0
cmluZzo6ZnJvbVVURjgoZXJyb3ItPm1lc3NhZ2UpKSk7CiAgICAgICAgIGVsc2UKQEAgLTgzMCw3
ICs4NTIsNyBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OnJlcXVlc3ROZXh0UGFydENhbGxi
YWNrKFNvdXBNdWx0aXBhcnRJbnB1dFN0cmVhbSogbXVsdAogICAgIEdVbmlxdWVPdXRQdHI8R0Vy
cm9yPiBlcnJvcjsKICAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9w
dEdSZWYoc291cF9tdWx0aXBhcnRfaW5wdXRfc3RyZWFtX25leHRfcGFydF9maW5pc2gobXVsdGlw
YXJ0SW5wdXRTdHJlYW0sIHJlc3VsdCwgJmVycm9yLm91dFB0cigpKSk7CiAgICAgaWYgKGVycm9y
KQotICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcih0YXNrLT5t
X3NvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSwgdGFzay0+bV9zb3VwUmVxdWVzdC5nZXQo
KSkpOworICAgICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6Omh0dHBFcnJvcih0YXNr
LT5tX3NvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSkpOwogICAgIGVsc2UgaWYgKGlucHV0
U3RyZWFtKQogICAgICAgICB0YXNrLT5kaWRSZXF1ZXN0TmV4dFBhcnQoV1RGTW92ZShpbnB1dFN0
cmVhbSkpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nl
c3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCmluZGV4IDRlYzgwNWNlZWVhYy4uY2ZmYTEy
MzIwODAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0
d29ya0RhdGFUYXNrU291cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291
cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmgKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxXZWJD
b3JlL1Jlc291cmNlUmVzcG9uc2UuaD4KICNpbmNsdWRlIDx3dGYvUnVuTG9vcC5oPgogI2luY2x1
ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCkBAIC02Myw3ICs2NCwxMyBAQCBwcml2YXRlOgogICAgIGVu
dW0gY2xhc3MgV2FzQmxvY2tpbmdDb29raWVzIHsgTm8sIFllcyB9OwogICAgIHZvaWQgY3JlYXRl
UmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmJiwgV2FzQmxvY2tpbmdDb29raWVzKTsK
ICAgICB2b2lkIGNsZWFyUmVxdWVzdCgpOwotICAgIHN0YXRpYyB2b2lkIHNlbmRSZXF1ZXN0Q2Fs
bGJhY2soU291cFJlcXVlc3QqLCBHQXN5bmNSZXN1bHQqLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7
CisKKyAgICBzdHJ1Y3QgU2VuZFJlcXVlc3REYXRhIHsKKyAgICAgICAgV1RGX01BS0VfU1RSVUNU
X0ZBU1RfQUxMT0NBVEVEOworICAgICAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBzb3VwTWVzc2Fn
ZTsKKyAgICAgICAgUmVmUHRyPE5ldHdvcmtEYXRhVGFza1NvdXA+IHRhc2s7CisgICAgfTsKKyAg
ICBzdGF0aWMgdm9pZCBzZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBTZXNzaW9uKiwgR0FzeW5jUmVz
dWx0KiwgU2VuZFJlcXVlc3REYXRhKik7CiAgICAgdm9pZCBkaWRTZW5kUmVxdWVzdChHUmVmUHRy
PEdJbnB1dFN0cmVhbT4mJik7CiAgICAgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZSgp
OwogICAgIHZvaWQgZGlzcGF0Y2hEaWRDb21wbGV0ZVdpdGhFcnJvcihjb25zdCBXZWJDb3JlOjpS
ZXNvdXJjZUVycm9yJik7CkBAIC03MSw2ICs3OCw5IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGdi
b29sZWFuIHRsc0Nvbm5lY3Rpb25BY2NlcHRDZXJ0aWZpY2F0ZUNhbGxiYWNrKEdUbHNDb25uZWN0
aW9uKiwgR1Rsc0NlcnRpZmljYXRlKiwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MsIE5ldHdvcmtEYXRh
VGFza1NvdXAqKTsKICAgICBib29sIHRsc0Nvbm5lY3Rpb25BY2NlcHRDZXJ0aWZpY2F0ZShHVGxz
Q2VydGlmaWNhdGUqLCBHVGxzQ2VydGlmaWNhdGVGbGFncyk7CiAKKyAgICBzdGF0aWMgdm9pZCBk
aWRTbmlmZkNvbnRlbnRDYWxsYmFjayhTb3VwTWVzc2FnZSosIGNvbnN0IGNoYXIqIGNvbnRlbnRU
eXBlLCBHSGFzaFRhYmxlKiBwYXJhbWV0ZXJzLCBOZXR3b3JrRGF0YVRhc2tTb3VwKik7CisgICAg
dm9pZCBkaWRTbmlmZkNvbnRlbnQoQ1N0cmluZyYmKTsKKwogICAgIGJvb2wgcGVyc2lzdGVudENy
ZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpIGNvbnN0OwogICAgIHZvaWQgYXBwbHlBdXRoZW50aWNh
dGlvblRvUmVxdWVzdChXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QmKTsKICAgICBzdGF0aWMgdm9p
ZCBhdXRoZW50aWNhdGVDYWxsYmFjayhTb3VwU2Vzc2lvbiosIFNvdXBNZXNzYWdlKiwgU291cEF1
dGgqLCBnYm9vbGVhbiByZXRyeWluZywgTmV0d29ya0RhdGFUYXNrU291cCopOwpAQCAtMTM2LDcg
KzE0Niw2IEBAIHByaXZhdGU6CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgbV9wYWdlSUQ7
CiAgICAgU3RhdGUgbV9zdGF0ZSB7IFN0YXRlOjpTdXNwZW5kZWQgfTsKICAgICBXZWJDb3JlOjpD
b250ZW50U25pZmZpbmdQb2xpY3kgbV9zaG91bGRDb250ZW50U25pZmY7Ci0gICAgR1JlZlB0cjxT
b3VwUmVxdWVzdD4gbV9zb3VwUmVxdWVzdDsKICAgICBHUmVmUHRyPFNvdXBNZXNzYWdlPiBtX3Nv
dXBNZXNzYWdlOwogICAgIEdSZWZQdHI8R0ZpbGU+IG1fZmlsZTsKICAgICBHUmVmUHRyPEdJbnB1
dFN0cmVhbT4gbV9pbnB1dFN0cmVhbTsKQEAgLTE0Nyw2ICsxNTYsNyBAQCBwcml2YXRlOgogICAg
IFdlYkNvcmU6OkNyZWRlbnRpYWwgbV9jcmVkZW50aWFsRm9yUGVyc2lzdGVudFN0b3JhZ2U7CiAg
ICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IG1fY3VycmVudFJlcXVlc3Q7CiAgICAgV2ViQ29y
ZTo6UmVzb3VyY2VSZXNwb25zZSBtX3Jlc3BvbnNlOworICAgIENTdHJpbmcgbV9zbmlmZmVkQ29u
dGVudFR5cGU7CiAgICAgVmVjdG9yPGNoYXI+IG1fcmVhZEJ1ZmZlcjsKICAgICB1bnNpZ25lZCBt
X3JlZGlyZWN0Q291bnQgeyAwIH07CiAgICAgdWludDY0X3QgbV9ib2R5RGF0YVRvdGFsQnl0ZXNT
ZW50IHsgMCB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwCmluZGV4IDk5NGFj
NDA5MzlhNi4uZTkxNWEwYzNjY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2dsaWIvV2ViS2l0V2ViUGFnZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2Uu
Y3BwCkBAIC0yNTIsNyArMjUyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogCiAgICAgICAgIHdl
YmtpdFVSSVJlcXVlc3RHZXRSZXNvdXJjZVJlcXVlc3QocmVxdWVzdC5nZXQoKSwgcmVzb3VyY2VS
ZXF1ZXN0KTsKLSAgICAgICAgcmVzb3VyY2VSZXF1ZXN0LnNldEluaXRpYXRpbmdQYWdlSUQocGFn
ZS53ZWJQYWdlUHJveHlJZGVudGlmaWVyKCkudG9VSW50NjQoKSk7CiAKICAgICAgICAgQVBJOjpE
aWN0aW9uYXJ5OjpNYXBUeXBlIG1lc3NhZ2U7CiAgICAgICAgIG1lc3NhZ2Uuc2V0KFN0cmluZzo6
ZnJvbVVURjgoIlBhZ2UiKSwgJnBhZ2UpOwo=
</data>
<flag name="review"
          id="435783"
          type_id="1"
          status="+"
          setter="aperez"
    />
    <flag name="commit-queue"
          id="436268"
          type_id="3"
          status="-"
          setter="aperez"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418390</attachid>
            <date>2021-01-26 03:55:24 -0800</date>
            <delta_ts>2021-01-26 04:33:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk-remove-soup-request-api.diff</filename>
            <type>text/plain</type>
            <size>37767</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YWExNWEwOTE4NTQuLjJlNmQzNWRmMmQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIxIEBACisyMDIxLTAxLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkg
aW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3NjQKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlRXJyb3IuaDogRXJyb3IgY29uc3RydWN0b3JzIG5vdyByZWNlaXZlIHRoZSBmYWlsaW5nIFVS
TCBpbnN0ZWFkIG9mIGEgU291cFJlcXVlc3QKKyAgICAgICAgdGhhdCBpcyBvbmx5IHVzZWQgdG8g
Z2V0IGl0cyBVUkwuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJy
b3JTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlRXJyb3I6OnRyYW5zcG9ydEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlRXJyb3I6Omh0dHBFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6IFJlbW1vdmUgdGhlIGNvbnN0
cnVjdG9yIHRoYXQgcmVjZWl2ZXMgYSBTb3VwUmVxdWVzdCBhbmQgdGhlCisgICAgICAgIGluaXRp
YXRpbmcgcGFnZSBJRCBzaW5jZSBpdCdzIGN1cnJlbnRseSB1bnN1c2VkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmg6CisKIDIwMjEtMDEtMjUg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cmV2ZXJ0aW5nIHIyNzE1MTQgYW5kIHIyNzE1NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCmluZGV4IDljZmIwZDUxNWIyMy4u
ZTMzMDMyNDE3OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUVycm9yLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZUVycm9yX2gKLSNkZWZpbmUgUmVzb3VyY2VFcnJvcl9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCiAKQEAgLTMz
LDI5ICszMiwyNSBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAogdHlwZWRlZiBz
dHJ1Y3QgX0dUbHNDZXJ0aWZpY2F0ZSBHVGxzQ2VydGlmaWNhdGU7Ci10eXBlZGVmIHN0cnVjdCBf
U291cFJlcXVlc3QgU291cFJlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291
cE1lc3NhZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVzb3VyY2VFcnJvciA6
IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQoteworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1Ymxp
YyBSZXNvdXJjZUVycm9yQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VFcnJvcihUeXBlIHR5
cGUgPSBUeXBlOjpOdWxsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKHR5cGUpCi0gICAg
ICAgICwgbV90bHNFcnJvcnMoMCkKICAgICB7CiAgICAgfQogCiAgICAgUmVzb3VyY2VFcnJvcihj
b25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgVVJMJiBmYWlsaW5nVVJM
LCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBUeXBlIHR5cGUgPSBUeXBlOjpH
ZW5lcmFsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBm
YWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgdHlwZSkKLSAgICAgICAgLCBtX3Rsc0Vy
cm9ycygwKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBodHRwRXJy
b3IoU291cE1lc3NhZ2UqLCBHRXJyb3IqLCBTb3VwUmVxdWVzdCopOwotICAgIHN0YXRpYyBSZXNv
dXJjZUVycm9yIHRyYW5zcG9ydEVycm9yKFNvdXBSZXF1ZXN0KiwgaW50IHN0YXR1c0NvZGUsIGNv
bnN0IFN0cmluZyYgcmVhc29uUGhyYXNlKTsKLSAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBnZW5l
cmljR0Vycm9yKEdFcnJvciosIFNvdXBSZXF1ZXN0Kik7CisgICAgc3RhdGljIFJlc291cmNlRXJy
b3IgaHR0cEVycm9yKFNvdXBNZXNzYWdlKiwgR0Vycm9yKik7CisgICAgc3RhdGljIFJlc291cmNl
RXJyb3IgdHJhbnNwb3J0RXJyb3IoY29uc3QgVVJMJiwgaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uUGhyYXNlKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBnZW5lcmljR0Vy
cm9yKGNvbnN0IFVSTCYsIEdFcnJvciopOwogICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIHRsc0Vy
cm9yKGNvbnN0IFVSTCYsIHVuc2lnbmVkIHRsc0Vycm9ycywgR1Rsc0NlcnRpZmljYXRlKik7CiAg
ICAgc3RhdGljIFJlc291cmNlRXJyb3IgdGltZW91dEVycm9yKGNvbnN0IFVSTCYgZmFpbGluZ1VS
TCk7CiAgICAgc3RhdGljIFJlc291cmNlRXJyb3IgYXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVz
c2FnZSopOwpAQCAtNzEsMTIgKzY2LDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFJl
c291cmNlRXJyb3JCYXNlOwogICAgIHZvaWQgZG9QbGF0Zm9ybUlzb2xhdGVkQ29weShjb25zdCBS
ZXNvdXJjZUVycm9yJik7CiAKLSAgICB1bnNpZ25lZCBtX3Rsc0Vycm9yczsKKyAgICB1bnNpZ25l
ZCBtX3Rsc0Vycm9ycyB7IDAgfTsKICAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9jZXJ0
aWZpY2F0ZTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNl
bmRpZiAvLyBSZXNvdXJjZUVycm9yX2hfCisjZW5kaWYgLy8gVVNFKFNPVVApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JT
b3VwLmNwcAppbmRleCBlZWVjMzI4MWUzODUuLjE2ZDEyMzBmYjQxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNv
dXAuY3BwCkBAIC00MiwyNSArNDIsMTcgQEAgc3RhdGljIFVSTCBmYWlsaW5nVVJJKFNvdXBVUkkq
IHNvdXBVUkkpCiAgICAgcmV0dXJuIHNvdXBVUklUb1VSTChzb3VwVVJJKTsKIH0KIAotc3RhdGlj
IFVSTCBmYWlsaW5nVVJJKFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQorUmVzb3VyY2VFcnJvciBSZXNv
dXJjZUVycm9yOjp0cmFuc3BvcnRFcnJvcihjb25zdCBVUkwmIGZhaWxpbmdVUkwsIGludCBzdGF0
dXNDb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvblBocmFzZSkKIHsKLSAgICBBU1NFUlQocmVxdWVz
dCk7Ci0gICAgcmV0dXJuIGZhaWxpbmdVUkkoc291cF9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkp
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9F
UlJPUiksIHN0YXR1c0NvZGUsIGZhaWxpbmdVUkwsIHJlYXNvblBocmFzZSk7CiB9CiAKLVJlc291
cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IoU291cFJlcXVlc3QqIHJlcXVl
c3QsIGludCBzdGF0dXNDb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvblBocmFzZSkKK1Jlc291cmNl
RXJyb3IgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBHRXJy
b3IqIGVycm9yKQogewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5n
KFNPVVBfSFRUUF9FUlJPUiksIHN0YXR1c0NvZGUsCi0gICAgICAgIGZhaWxpbmdVUkkocmVxdWVz
dCksIHJlYXNvblBocmFzZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6aHR0
cEVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBHRXJyb3IqIGVycm9yLCBTb3VwUmVxdWVzdCog
cmVxdWVzdCkKLXsKLSAgICBpZiAobWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRf
RVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpKQotICAgICAgICByZXR1cm4gdHJhbnNwb3J0RXJy
b3IocmVxdWVzdCwgbWVzc2FnZS0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICBTdHJpbmc6OmZy
b21VVEY4KG1lc3NhZ2UtPnJlYXNvbl9waHJhc2UpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBnZW5lcmljR0Vycm9yKGVycm9yLCByZXF1ZXN0KTsKKyAgICBBU1NFUlQobWVzc2FnZSk7Cisg
ICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtZXNzYWdlLT5zdGF0dXNfY29k
ZSkpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnRFcnJvcihmYWlsaW5nVVJJKHNvdXBfbWVzc2Fn
ZV9nZXRfdXJpKG1lc3NhZ2UpKSwgbWVzc2FnZS0+c3RhdHVzX2NvZGUsIFN0cmluZzo6ZnJvbVVU
RjgobWVzc2FnZS0+cmVhc29uX3BocmFzZSkpOworICAgIHJldHVybiBnZW5lcmljR0Vycm9yKGZh
aWxpbmdVUkkoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSkpLCBlcnJvcik7CiB9CiAKIFJl
c291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6YXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVzc2Fn
ZSogbWVzc2FnZSkKQEAgLTcwLDEwICs2Miw5IEBAIFJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJv
cjo6YXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgZmFp
bGluZ1VSSShzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSksIFN0cmluZzo6ZnJvbVVURjgo
bWVzc2FnZS0+cmVhc29uX3BocmFzZSkpOwogfQogCi1SZXNvdXJjZUVycm9yIFJlc291cmNlRXJy
b3I6OmdlbmVyaWNHRXJyb3IoR0Vycm9yKiBlcnJvciwgU291cFJlcXVlc3QqIHJlcXVlc3QpCitS
ZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoY29uc3QgVVJMJiBmYWls
aW5nVVJMLCBHRXJyb3IqIGVycm9yKQogewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVh
cmtfdG9fc3RyaW5nKGVycm9yLT5kb21haW4pLCBlcnJvci0+Y29kZSwKLSAgICAgICAgZmFpbGlu
Z1VSSShyZXF1ZXN0KSwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpOworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKGVycm9yLT5kb21haW4pLCBlcnJv
ci0+Y29kZSwgZmFpbGluZ1VSTCwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpOwog
fQogCiBSZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OnRsc0Vycm9yKGNvbnN0IFVSTCYgZmFp
bGluZ1VSTCwgdW5zaWduZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdC5oCmluZGV4IDhmNzg3MGU5N2U5ZS4uZjJiMTUyMGY1NmM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dC5oCkBAIC0yNCw4ICsyNCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVz
b3VyY2VSZXF1ZXN0X2gKLSNkZWZpbmUgUmVzb3VyY2VSZXF1ZXN0X2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiUGFnZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RC
YXNlLmgiCkBAIC0zMyw5NSArMzIsNjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgQmxvYlJlZ2lzdHJ5SW1wbDsKLQotICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1
YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlc291cmNl
UmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0
QmFzZShVUkwoeyB9LCB1cmwpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0cnVlKQotICAg
ICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPigwKSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVS
TCYgdXJsKQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgUmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICAs
IG1fYWNjZXB0RW5jb2RpbmcodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zb3VwRmxhZ3Moc3RhdGlj
X2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0gUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCi0gICAgICAgICAgICAsIG1fYWNjZXB0RW5jb2Rpbmco
dHJ1ZSkKLSAgICAgICAgICAgICwgbV9zb3VwRmxhZ3Moc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VG
bGFncz4oMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJl
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQotICAgICAgICAgICAg
OiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCgpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0
cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZs
YWdzPigwKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0
QmFzZShVUkwoKSwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQ
b2xpY3kpCi0gICAgICAgICAgICAsIG1fYWNjZXB0RW5jb2RpbmcodHJ1ZSkKLSAgICAgICAgICAg
ICwgbV9zb3VwRmxhZ3Moc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0
KQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHNvdXBVUklUb1VSTChzb3VwX3Jl
cXVlc3RfZ2V0X3VyaShzb3VwUmVxdWVzdCkpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0
cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZs
YWdzPigwKSkKLSAgICAgICAgewotICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBSZXF1ZXN0KHNv
dXBSZXF1ZXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdXBkYXRlRnJvbURlbGVnYXRl
UHJlc2VydmluZ09sZFByb3BlcnRpZXMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBkZWxlZ2F0ZVBy
b3ZpZGVkUmVxdWVzdCkgeyAqdGhpcyA9IGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0OyB9Ci0KLSAg
ICAgICAgYm9vbCBhY2NlcHRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0RW5jb2Rp
bmc7IH0KLSAgICAgICAgdm9pZCBzZXRBY2NlcHRFbmNvZGluZyhib29sIGFjY2VwdEVuY29kaW5n
KSB7IG1fYWNjZXB0RW5jb2RpbmcgPSBhY2NlcHRFbmNvZGluZzsgfQotCi0gICAgICAgIHZvaWQg
dXBkYXRlU291cE1lc3NhZ2VIZWFkZXJzKFNvdXBNZXNzYWdlSGVhZGVycyopIGNvbnN0OwotICAg
ICAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhlYWRlcnMoU291cE1lc3NhZ2VIZWFkZXJz
Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqLCBCbG9iUmVn
aXN0cnlJbXBsJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNv
dXBNZXNzYWdlKik7Ci0gICAgICAgIHZvaWQgdXBkYXRlU291cFJlcXVlc3QoU291cFJlcXVlc3Qq
KSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cFJlcXVlc3QoU291cFJlcXVlc3Qq
KTsKLQotICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIHNvdXBNZXNzYWdlRmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX3NvdXBGbGFnczsgfQotICAgICAgICB2b2lkIHNldFNvdXBNZXNzYWdlRmxhZ3Mo
U291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3VwRmxhZ3MgPSBzb3VwRmxhZ3M7IH0K
LQotICAgICAgICAvLyBXZWJQYWdlUHJveHlJZGVudGlmaWVyLgotICAgICAgICBPcHRpb25hbDx1
aW50NjRfdD4gaW5pdGlhdGluZ1BhZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhdGluZ1Bh
Z2VJRDsgfQotICAgICAgICB2b2lkIHNldEluaXRpYXRpbmdQYWdlSUQodWludDY0X3QgcGFnZUlE
KSB7IG1faW5pdGlhdGluZ1BhZ2VJRCA9IHBhZ2VJRDsgfQotCi0gICAgICAgIEdVbmlxdWVQdHI8
U291cFVSST4gY3JlYXRlU291cFVSSSgpIGNvbnN0OwotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlV2l0aFBsYXRmb3JtRGF0YShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZVdpdGhQbGF0Zm9ybURhdGEoRGVjb2RlciYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7Ci0KLSAgICAgICAgYm9vbCBtX2FjY2Vw
dEVuY29kaW5nIDogMTsKLSAgICAgICAgU291cE1lc3NhZ2VGbGFncyBtX3NvdXBGbGFnczsKLSAg
ICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1faW5pdGlhdGluZ1BhZ2VJRDsKLQotICAgICAgICB2
b2lkIHVwZGF0ZVNvdXBNZXNzYWdlTWVtYmVycyhTb3VwTWVzc2FnZSopIGNvbnN0OwotICAgICAg
ICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlQm9keShTb3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUlt
cGwmKSBjb25zdDsKLSAgICAgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQot
ICAgICAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkgeyB9Ci0gICAgICAgIHZvaWQg
ZG9VcGRhdGVQbGF0Zm9ybUhUVFBCb2R5KCkgeyB9Ci0gICAgICAgIHZvaWQgZG9VcGRhdGVSZXNv
dXJjZUhUVFBCb2R5KCkgeyB9Ci0KLSAgICAgICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRl
ZENvcHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9Ci0gICAgfTsKK2NsYXNzIEJsb2JSZWdp
c3RyeUltcGw7CisKK2NsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVl
c3RCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShVUkwoeyB9LCB1cmwpLCBS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7
CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYgdXJsKQorICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNl
UHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RD
YWNoZVBvbGljeSBwb2xpY3kgPSBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5
KQorICAgIHsKKyAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICB9CisKKyAg
ICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKCks
IFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9w
ZXJ0aWVzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZGVsZWdhdGVQcm92aWRlZFJlcXVlc3QpIHsg
KnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVxdWVzdDsgfQorCisgICAgYm9vbCBhY2NlcHRFbmNv
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0RW5jb2Rpbmc7IH0KKyAgICB2b2lkIHNldEFj
Y2VwdEVuY29kaW5nKGJvb2wgYWNjZXB0RW5jb2RpbmcpIHsgbV9hY2NlcHRFbmNvZGluZyA9IGFj
Y2VwdEVuY29kaW5nOyB9CisKKyAgICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlSGVhZGVycyhTb3Vw
TWVzc2FnZUhlYWRlcnMqKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhl
YWRlcnMoU291cE1lc3NhZ2VIZWFkZXJzKik7CisgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShT
b3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUltcGwmKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUZy
b21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopOworCisgICAgU291cE1lc3NhZ2VGbGFncyBzb3Vw
TWVzc2FnZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KKyAgICB2b2lkIHNl
dFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3VwRmxh
Z3MgPSBzb3VwRmxhZ3M7IH0KKworICAgIEdVbmlxdWVQdHI8U291cFVSST4gY3JlYXRlU291cFVS
SSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGVXaXRo
UGxhdGZvcm1EYXRhKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVXaXRoUGxhdGZvcm1EYXRhKERlY29kZXIm
KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKKwor
ICAgIGJvb2wgbV9hY2NlcHRFbmNvZGluZyB7IHRydWUgfTsKKyAgICBTb3VwTWVzc2FnZUZsYWdz
IG1fc291cEZsYWdzIHsgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkgfTsKKworICAg
IHZvaWQgdXBkYXRlU291cE1lc3NhZ2VNZW1iZXJzKFNvdXBNZXNzYWdlKikgY29uc3Q7CisgICAg
dm9pZCB1cGRhdGVTb3VwTWVzc2FnZUJvZHkoU291cE1lc3NhZ2UqLCBCbG9iUmVnaXN0cnlJbXBs
JikgY29uc3Q7CisgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQorICAgIHZv
aWQgZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KKyAgICB2b2lkIGRvVXBkYXRlUGxhdGZv
cm1IVFRQQm9keSgpIHsgfQorICAgIHZvaWQgZG9VcGRhdGVSZXNvdXJjZUhUVFBCb2R5KCkgeyB9
CisKKyAgICB2b2lkIGRvUGxhdGZvcm1TZXRBc0lzb2xhdGVkQ29weShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSB7IH0KK307CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFJlc291cmNl
UmVxdWVzdDo6ZW5jb2RlV2l0aFBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApA
QCAtMTM2LDcgKzEwNCw2IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjplbmNvZGVXaXRoUGxhdGZv
cm1EYXRhKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIgPDwgbV9odHRw
Qm9keS0+ZmxhdHRlblRvU3RyaW5nKCk7CiAKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX3NvdXBGbGFncyk7Ci0gICAgZW5jb2RlciA8PCBtX2luaXRpYXRpbmdQYWdlSUQ7
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihtX2FjY2VwdEVuY29kaW5nKTsKIH0K
IApAQCAtMTYxLDEyICsxMjgsNiBAQCBib29sIFJlc291cmNlUmVxdWVzdDo6ZGVjb2RlV2l0aFBs
YXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bV9zb3VwRmxhZ3MgPSBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwTWVzc2FnZUZs
YWdzKTsKIAotICAgIE9wdGlvbmFsPE9wdGlvbmFsPHVpbnQ2NF90Pj4gaW5pdGlhdGluZ1BhZ2VJ
RDsKLSAgICBkZWNvZGVyID4+IGluaXRpYXRpbmdQYWdlSUQ7Ci0gICAgaWYgKCFpbml0aWF0aW5n
UGFnZUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9pbml0aWF0aW5nUGFnZUlEID0g
KmluaXRpYXRpbmdQYWdlSUQ7Ci0KICAgICBib29sIGFjY2VwdEVuY29kaW5nOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoYWNjZXB0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTYsNCArMTU3LDMgQEAgaW5saW5lIFNvdXBNZXNzYWdlUHJpb3JpdHkgdG9Tb3VwTWVzc2Fn
ZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNv
dXAuY3BwCmluZGV4IGUxNjc4MDE0NzhiMy4uMjdmOWJlMjcyMjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCkBAIC0yMDAsMjMgKzIwMCw2IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRh
dGVGcm9tU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKQogI2VuZGlmCiB9CiAK
LXN0YXRpYyBjb25zdCBjaGFyKiBnU291cFJlcXVlc3RJbml0aWF0aW5nUGFnZUlES2V5ID0gIndr
LXNvdXAtcmVxdWVzdC1pbml0aWF0aW5nLXBhZ2UtaWQiOwotCi12b2lkIFJlc291cmNlUmVxdWVz
dDo6dXBkYXRlU291cFJlcXVlc3QoU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0KSBjb25zdAotewot
ICAgIGlmIChtX2luaXRpYXRpbmdQYWdlSUQpIHsKLSAgICAgICAgdWludDY0X3QqIGluaXRpYXRp
bmdQYWdlSURQdHIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKHVp
bnQ2NF90KSkpOwotICAgICAgICAqaW5pdGlhdGluZ1BhZ2VJRFB0ciA9ICptX2luaXRpYXRpbmdQ
YWdlSUQ7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qoc291cFJlcXVl
c3QpLCBnX2ludGVybl9zdGF0aWNfc3RyaW5nKGdTb3VwUmVxdWVzdEluaXRpYXRpbmdQYWdlSURL
ZXkpLCBpbml0aWF0aW5nUGFnZUlEUHRyLCBmYXN0RnJlZSk7Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbVNvdXBSZXF1ZXN0KFNvdXBSZXF1ZXN0KiBzb3VwUmVx
dWVzdCkKLXsKLSAgICB1aW50NjRfdCogaW5pdGlhdGluZ1BhZ2VJRFB0ciA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc291cFJlcXVlc3QpLCBnU291
cFJlcXVlc3RJbml0aWF0aW5nUGFnZUlES2V5KSk7Ci0gICAgbV9pbml0aWF0aW5nUGFnZUlEID0g
aW5pdGlhdGluZ1BhZ2VJRFB0ciA/ICppbml0aWF0aW5nUGFnZUlEUHRyIDogMDsKLX0KLQogdW5z
aWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCiB7CiAg
ICAgLy8gU291cCBoYXMgaXRzIG93biBxdWV1ZSBjb250cm9sOyBpdCB3YW50cyB0byBoYXZlIGFs
bCByZXF1ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGQwODJiNzAyMmFlYy4uNWE0ODQ5MzZj
MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291
cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIHN0cnVj
dCBfU291cENhY2hlIFNvdXBDYWNoZTsKIHR5cGVkZWYgc3RydWN0IF9Tb3VwQ29va2llSmFyIFNv
dXBDb29raWVKYXI7CiB0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291cE1lc3NhZ2U7Ci10
eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBf
U291cFNlc3Npb24gU291cFNlc3Npb247CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggYTg5NmY4NmY2MGMwLi5lZDExYmFiOTBhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAK
KzIwMjEtMDEtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtTT1VQXSBTdG9wIHVzaW5nIFNvdXBSZXF1ZXN0IEFQSSBpbiBwcmVwYXJhdGlv
biBmb3IgbGlic291cDMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmlhbiBQZXJleiBkZSBDYXN0
cm8uCisKKyAgICAgICAgSXQncyBnb25lIGluIGxpYnNvdXAzLCB3ZSBjYW4ganVzdCB1c2Ugc291
cF9zZXNzaW9uX3NlbmRfYXN5bmMoKSBpbnN0ZWFkLCB3aGljaCBpcyB3aGF0IFNvdXBSZXF1ZXN0
IGRvZXMKKyAgICAgICAgaW50ZXJuYWxseS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QpOiBNYW51YWxseSBjcmVhdGUgdGhlIFNvdXBNZXNzYWdl
LiBBbHNvIGNvbm5lY3QgdG8gY29udGVudC1zbmlmZmVkCisgICAgICAgIHNpZ25hbCB0aGF0IGl0
IHdhcyBoYW5kbGVkIGJ5IFNvdXBSZXF1ZXN0IGludGVybmFsbHkuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCk6IFJlbW92ZSB0aGUgU291cFJlcXVl
c3QgcmVzZXQgYW5kIGNsZWFyIG1fc25pZmZlZENvbnRlbnRUeXBlLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUpOiBVc2Ugc291cF9zZXNzaW9uX3NlbmRfYXN5
bmMoKS4gV2UgbmVlZCB0byBrbm93IHRoZSBtZXNzYWdlIGZvciBwYXNzZWQgdG8KKyAgICAgICAg
dGhlIGZ1bmN0aW9uIGZyb20gdGhlIGFzeW5jIHJlYWR5IGNhbGxiYWNrLCBzbyB3ZSB1c2UgYSBz
dHJ1Y3QgdG8gcGFzcyBib3RoIHRoZSB0YXNrIGFuZCB0aGUgbWVzc2FnZS4gSW4gY2FzZSBvZgor
ICAgICAgICBiZWluZyBzdXNwZW5kZWQgdGhlIHN0cnVjdCB3YXMgYXR0YWNoZWQgdG8gdGhlIHBl
bmRpbmcgcmVzdWx0LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5k
UmVxdWVzdENhbGxiYWNrKTogRmluaXNoIHRoZSBzb3VwX3Nlc3Npb25fc2VuZF9hc3luYygpIG9w
ZXJhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJl
cXVlc3QpOiBTZXQgdGhlIHNuaWZmZWQgY29udGVudCB0eXBlIGZyb20gbV9zbmlmZmVkQ29udGVu
dFR5cGUuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Nvbm5lY3Rp
b25BY2NlcHRDZXJ0aWZpY2F0ZSk6IFVzZSBTb3VwTWVzc2FnZSBpbnN0ZWFkIG9mIFNvdXBSZXF1
ZXN0IHRvIGdldCB0aGUgVVJJLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpkaWRTbmlmZkNvbnRlbnRDYWxsYmFjayk6IEJ1aWxkIHRoZSBzbmlmZmVkIGNvbnRlbnQgdHlw
ZSBhbmQgY2FsbCBkaWRTbmlmZkNvbnRlbnQoKS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrU291cDo6ZGlkU25pZmZDb250ZW50KTogU2F2ZSB0aGUgcGFzc2VkIGNvbnRlbnQgdHlw
ZS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVBdXRoZW50
aWNhdGUpOiBVc2UgbV9jdXJyZW50UmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBTb3VwUmVxdWVzdCB0
byBidWlsZAorICAgICAgICB0aGUgYXV0aGVudGljYXRpb24gZXJyb3IuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2Fs
bGJhY2spOiBQYXNzIHRoZSBmYWlsaW5nIFVSTCB0byB0aGUgUmVzb3VyY2VFcnJvciBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQ
UmVkaXJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291
cDo6cmVhZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a1NvdXA6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcDogU3RvcCBzZXR0aW5n
IHRoZSBpbml0aWF0aW5nIHBhZ2UgSUQgaW4gdGhlIHJlcXVlc3QgYmVjYXVzZQorICAgICAgICBp
dCdzIHVudXNlZC4KKwogMjAyMS0wMS0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFN0b3AgdXNpbmcgU291cFJlcXVlc3QgQVBJ
IHRvIGxvYWQgZmlsZXMgaW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5j
cHAKaW5kZXggMjhjNjNiMGE3MjA3Li40ODg4NzQ0MDYzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAK
QEAgLTExNCw0MiArMTE0LDMwIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAgICAgfQogCiAg
ICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJID0gbV9jdXJyZW50UmVxdWVzdC5jcmVhdGVT
b3VwVVJJKCk7Ci0gICAgaWYgKCFzb3VwVVJJKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShJ
bnZhbGlkVVJMRmFpbHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHUmVmUHRy
PFNvdXBSZXF1ZXN0PiBzb3VwUmVxdWVzdCA9IGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fcmVxdWVz
dF91cmkoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikuc291cFNl
c3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghc291cFJlcXVlc3Qp
IHsKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cFJlcXVlc3Qo
c291cFJlcXVlc3QuZ2V0KCkpOwotCi0gICAgLy8gSFRUUCByZXF1ZXN0LgotICAgIEdSZWZQdHI8
U291cE1lc3NhZ2U+IHNvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dl
dF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKHNvdXBSZXF1ZXN0LmdldCgpKSkpOwotICAgIGlm
ICghc291cE1lc3NhZ2UpIHsKKyAgICBpZiAoIXNvdXBVUkkgfHwgIVNPVVBfVVJJX1ZBTElEX0ZP
Ul9IVFRQKHNvdXBVUkkuZ2V0KCkpKSB7CiAgICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlk
VVJMRmFpbHVyZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICByZXN0cmljdFJlcXVl
c3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQobV9jdXJyZW50UmVxdWVzdCk7CiAKLSAgICB1bnNp
Z25lZCBtZXNzYWdlRmxhZ3MgPSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CisgICAgbV9zb3Vw
TWVzc2FnZSA9IGFkb3B0R1JlZihzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpKFNPVVBfTUVUSE9E
X0dFVCwgc291cFVSSS5nZXQoKSkpOworICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cE1l
c3NhZ2UobV9zb3VwTWVzc2FnZS5nZXQoKSwgbV9zZXNzaW9uLT5ibG9iUmVnaXN0cnkoKSk7CiAK
LSAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlLmdldCgp
LCBtX3Nlc3Npb24tPmJsb2JSZWdpc3RyeSgpKTsKKyAgICB1bnNpZ25lZCBtZXNzYWdlRmxhZ3Mg
PSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CiAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZm
ID09IENvbnRlbnRTbmlmZmluZ1BvbGljeTo6RG9Ob3RTbmlmZkNvbnRlbnQpCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9D
T05URU5UX1NOSUZGRVIpOworICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKG1f
c291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIpOwogICAgIGlmICht
X3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpICYmIG1fc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKSB7CiAjaWYg
U09VUF9DSEVDS19WRVJTSU9OKDIsIDU3LCAxKQogICAgICAgICBtZXNzYWdlRmxhZ3MgfD0gU09V
UF9NRVNTQUdFX0RPX05PVF9VU0VfQVVUSF9DQUNIRTsKICNlbHNlCiAgICAgICAgIC8vIEluIGNh
c2UgY3JlZGVudGlhbCBpcyBub3QgYXZhaWxhYmxlIGFuZCBjcmVkZW50aWFsIHN0b3JhZ2Ugc2hv
dWxkIG5vdCB0byBiZSB1c2VkLAogICAgICAgICAvLyBkaXNhYmxlIGF1dGhlbnRpY2F0aW9uIG1h
bmFnZXIgc28gdGhhdCBjcmVkZW50aWFscyBzdG9yZWQgaW4gbGlic291cCBhcmUgbm90IHVzZWQu
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCks
IFNPVVBfVFlQRV9BVVRIX01BTkFHRVIpOworICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9BVVRIX01BTkFHRVIpOwogI2Vu
ZGlmCiAgICAgfQorICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3MobV9zb3VwTWVzc2FnZS5nZXQo
KSwgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oc291cF9tZXNzYWdlX2dldF9mbGFncyht
X3NvdXBNZXNzYWdlLmdldCgpKSB8IG1lc3NhZ2VGbGFncykpOworICAgIHNvdXBfbWVzc2FnZV9z
ZXRfcHJpb3JpdHkobV9zb3VwTWVzc2FnZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KG1f
Y3VycmVudFJlcXVlc3QucHJpb3JpdHkoKSkpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICBib29sIHNob3VsZEJsb2NrQ29va2llcyA9IHdhc0Jsb2NraW5nQ29v
a2llcyA9PSBXYXNCbG9ja2luZ0Nvb2tpZXM6OlllcyA/IHRydWUgOiBtX3N0b3JlZENyZWRlbnRp
YWxzUG9saWN5ID09IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7
CkBAIC0xNTgsMzIgKzE0NiwyNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2FzQmxvY2tpbmdDbwogICAgICAgICAg
ICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91bGRCbG9j
a0Nvb2tpZXMobV9jdXJyZW50UmVxdWVzdCwgbV9mcmFtZUlELCBtX3BhZ2VJRCwgV2ViQ29yZTo6
U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc6Ok5vKTsKICAgICB9CiAgICAgaWYg
KHNob3VsZEJsb2NrQ29va2llcykKLSAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVy
ZShzb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPT0tJRV9KQVIpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9D
T09LSUVfSkFSKTsKICAgICBtX2lzQmxvY2tpbmdDb29raWVzID0gc2hvdWxkQmxvY2tDb29raWVz
OwogI2VuZGlmCiAKICNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNjcsIDEpCiAgICAgaWYgKCht
X2N1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXNob3VsZEFsbG93
SFNUU1BvbGljeVNldHRpbmcoKSkgfHwgKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
cygiaHR0cCIpICYmICFzaG91bGRBbGxvd0hTVFNQcm90b2NvbFVwZ3JhZGUoKSkpCi0gICAgICAg
IHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQ
RV9IU1RTX0VORk9SQ0VSKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZSht
X3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfSFNUU19FTkZPUkNFUik7CiAgICAgZWxzZQog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzdGF0aWNf
Y2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbV9zZXNzaW9uKS5zb3VwU2Vzc2lvbigpLCBTT1VQ
X1RZUEVfSFNUU19FTkZPUkNFUiksICJoc3RzLWVuZm9yY2VkIiwgR19DQUxMQkFDSyhoc3RzRW5m
b3JjZWQpLCB0aGlzKTsKICNlbmRpZgogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gQWNj
ZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzIHdhbnQgdGhpcyB0byBzZXJ2
ZSBzb21lIG9mIHRoZWlyIHN1YnJlc291cmNlcy4KLSAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldF9vbmUoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVh
ZGVycywgIkFjY2VwdCIsICIqLyoiKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9vbmUobV9zb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQiLCAiKi8qIik7CiAKICAgICAvLyBJbiB0aGUgY2FzZSBvZiBYSFIgLnNlbmQo
KSBhbmQgLnNlbmQoIiIpIGV4cGxpY2l0bHkgdGVsbCBsaWJzb3VwIHRvIHNlbmQgYSB6ZXJvIGNv
bnRlbnQtbGVuZ2h0IGhlYWRlcgogICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIFVB
IGltcGxlbWVudGF0aW9ucyBsaWtlIEZpcmVmb3guIEl0J3MgZG9uZSBpbiB0aGUgYmFja2VuZCBo
ZXJlIGluc3RlYWQgb2YKICAgICAvLyBpbiBYSFIgY29kZSBzaW5jZSBpbiBYSFIgQ09SUyBjaGVj
a2luZyBwcmV2ZW50cyB1cyBmcm9tIHRoaXMga2luZCBvZiBsYXRlIGhlYWRlciBtYW5pcHVsYXRp
b24uCi0gICAgaWYgKChzb3VwTWVzc2FnZS0+bWV0aG9kID09IFNPVVBfTUVUSE9EX1BPU1QgfHwg
c291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QVVQpICYmICFzb3VwTWVzc2FnZS0+
cmVxdWVzdF9ib2R5LT5sZW5ndGgpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9j
b250ZW50X2xlbmd0aChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAwKTsKLQotICAgIHNv
dXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFNvdXBN
ZXNzYWdlRmxhZ3M+KHNvdXBfbWVzc2FnZV9nZXRfZmxhZ3Moc291cE1lc3NhZ2UuZ2V0KCkpIHwg
bWVzc2FnZUZsYWdzKSk7Ci0gICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2Fn
ZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KG1fY3VycmVudFJlcXVlc3QucHJpb3JpdHko
KSkpOwotCi0gICAgbV9zb3VwUmVxdWVzdCA9IFdURk1vdmUoc291cFJlcXVlc3QpOwotICAgIG1f
c291cE1lc3NhZ2UgPSBXVEZNb3ZlKHNvdXBNZXNzYWdlKTsKKyAgICBpZiAoKG1fc291cE1lc3Nh
Z2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUIHx8IG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9QVVQpICYmICFtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHktPmxlbmd0
aCkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291
cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
c291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0Nh
bGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgp
LCAid3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0
aGlzKTsKQEAgLTE5MSw2ICsxNzMsOCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0
ZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2FzQmxvY2tpbmdDbwogICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5ldHdvcmstZXZlbnQiLCBHX0NB
TExCQUNLKG5ldHdvcmtFdmVudENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVj
dChtX3NvdXBNZXNzYWdlLmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQo
KSwgInN0YXJ0aW5nIiwgR19DQUxMQkFDSyhzdGFydGluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAg
aWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IENvbnRlbnRTbmlmZmluZ1BvbGljeTo6U25pZmZD
b250ZW50KQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJj
b250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGRpZFNuaWZmQ29udGVudENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkKQEAgLTIw
MiwxMSArMTg2LDExIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkK
IAogICAgIHN0b3BUaW1lb3V0KCk7CiAgICAgbV9wZW5kaW5nUmVzdWx0ID0gbnVsbHB0cjsKLSAg
ICBtX3NvdXBSZXF1ZXN0ID0gbnVsbHB0cjsKICAgICBtX2ZpbGUgPSBudWxscHRyOwogICAgIG1f
aW5wdXRTdHJlYW0gPSBudWxscHRyOwogICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBudWxs
cHRyOwogICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworICAgIG1fc25pZmZl
ZENvbnRlbnRUeXBlID0geyB9OwogICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFi
bGUuZ2V0KCkpOwogICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwogICAgIG1faXNCbG9ja2lu
Z0Nvb2tpZXMgPSBmYWxzZTsKQEAgLTIzNSw5ICsyMTksMTMgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpyZXN1bWUoKQogICAgIHN0YXJ0VGltZW91dCgpOwogCiAgICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgaWYgKG1fc291cFJlcXVl
c3QgJiYgIW1fY2FuY2VsbGFibGUpIHsKKyAgICBpZiAobV9zb3VwTWVzc2FnZSAmJiAhbV9jYW5j
ZWxsYWJsZSkgewogICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFi
bGVfbmV3KCkpOwotICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBSZXF1ZXN0
LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcHJvdGVjdCBjYW5jZWxsYWJsZSBoZXJlLCBiZWNhdXNl
IHNvdXBfc2Vzc2lvbl9zZW5kX2FzeW5jIHVzZXMgaXQgYWZ0ZXIgZW1pdHRpbmcgU291cFNlc3Np
b246OnJlcXVlc3QtcXVldWVkLCBhbmQgd2UKKyAgICAgICAgLy8gbWlnaHQgY2FuY2VsIHRoZSBv
cGVyYXRpb24gaW4gYSBmZWF0dXJlIGNhbGxiYWNrIGVtaXR0ZWQgb24gcmVxdWVzdC1xdWV1ZWQs
IGZvciBleGFtcGxlIGhzdHMtZW5mb3JjZWQuCisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxl
PiBwcm90ZWN0Q2FuY2VsbGFibGUobV9jYW5jZWxsYWJsZSk7CisgICAgICAgIHNvdXBfc2Vzc2lv
bl9zZW5kX2FzeW5jKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24p
LnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCks
CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRS
ZXF1ZXN0Q2FsbGJhY2spLCBuZXcgU2VuZFJlcXVlc3REYXRhKHsgbV9zb3VwTWVzc2FnZSwgV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKSB9KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1
NCw5ICsyNDIsMTAgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUoKQogICAgICAg
ICAgICAgcmVhZENhbGxiYWNrKG1faW5wdXRTdHJlYW0uZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0
KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKICAgICAgICAgZWxzZSBpZiAobV9tdWx0aXBh
cnRJbnB1dFN0cmVhbSkKICAgICAgICAgICAgIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKG1fbXVs
dGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3RlY3RlZFRo
aXMubGVha1JlZigpKTsKLSAgICAgICAgZWxzZSBpZiAobV9zb3VwUmVxdWVzdCkKLSAgICAgICAg
ICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2sobV9zb3VwUmVxdWVzdC5nZXQoKSwgcGVuZGluZ1Jlc3Vs
dC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwotICAgICAgICBlbHNlIGlmIChtX2Zp
bGUpIHsKKyAgICAgICAgZWxzZSBpZiAobV9zb3VwTWVzc2FnZSkgeworICAgICAgICAgICAgc2Vu
ZFJlcXVlc3RDYWxsYmFjayhzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbV9zZXNz
aW9uKS5zb3VwU2Vzc2lvbigpLCBwZW5kaW5nUmVzdWx0LmdldCgpLAorICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNlbmRSZXF1ZXN0RGF0YSo+KGdfb2JqZWN0X3N0ZWFsX2RhdGEoR19PQkpF
Q1QocGVuZGluZ1Jlc3VsdC5nZXQoKSksICJ3ay1zZW5kLXJlcXVlc3QtZGF0YSIpKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobV9maWxlKSB7CiAgICAgICAgICAgICBpZiAobV9yZXNwb25zZS5leHBl
Y3RlZENvbnRlbnRMZW5ndGgoKSA9PSAtMSkKICAgICAgICAgICAgICAgICBlbnVtZXJhdGVGaWxl
Q2hpbGRyZW5DYWxsYmFjayhtX2ZpbGUuZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTMxNiwxNiArMzA1LDE4
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQoKQogICAgIG1fdGltZW91
dFNvdXJjZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2VuZFJlcXVl
c3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpz
ZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbiwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFNlbmRSZXF1ZXN0RGF0YSogZGF0YSkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwotICAgIGlmIChzb3Vw
UmVxdWVzdCAhPSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSB7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNlbmRSZXF1ZXN0RGF0YT4gcHJvdGVjdGVkRGF0YShkYXRhKTsKKyAgICBhdXRvKiB0YXNr
ID0gZGF0YS0+dGFzay5nZXQoKTsKKworICAgIGlmICh0YXNrLT5tX3NvdXBNZXNzYWdlICYmIHRh
c2stPm1fc291cE1lc3NhZ2UgIT0gZGF0YS0+c291cE1lc3NhZ2UuZ2V0KCkpIHsKICAgICAgICAg
Ly8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHJlcXVlc3QgaXMgY2FuY2VsbGVkIGFuZCBhIG5l
dyBvbmUgaXMgc3RhcnRlZCBiZWZvcmUKICAgICAgICAgLy8gdGhlIHByZXZpb3VzIGFzeW5jIG9w
ZXJhdGlvbiBjb21wbGV0ZWQuIFRoaXMgaXMgY29tbW9uIHdoZW4gZm9yY2luZyBhIHJlZGlyZWN0
aW9uCiAgICAgICAgIC8vIGR1ZSB0byBIU1RTLiBXZSBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIG9s
ZCByZXF1ZXN0LgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vy
cm9yPiBlcnJvcjsKLSAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0g
YWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAm
ZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3Ry
ZWFtID0gYWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9zZW5kX2ZpbmlzaChzb3VwU2Vzc2lvbiwgcmVz
dWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKICAgICAgICAgQVNTRVJUKGdfZXJyb3JfbWF0Y2hlcyhl
cnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKICNlbmRpZgog
ICAgICAgICByZXR1cm47CkBAIC0zMzksMjEgKzMzMCwyNCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0LCBHQXN5
bmNSZQogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKICAgICAg
ICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOwogICAgICAgICB0YXNrLT5tX3BlbmRp
bmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpF
Q1QodGFzay0+bV9wZW5kaW5nUmVzdWx0LmdldCgpKSwgIndrLXNlbmQtcmVxdWVzdC1kYXRhIiwg
cHJvdGVjdGVkRGF0YS5yZWxlYXNlKCksIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxTZW5kUmVxdWVzdERhdGEqPihkYXRhKTsKKyAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKHNv
dXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYo
c291cF9zZXNzaW9uX3NlbmRfZmluaXNoKHNvdXBTZXNzaW9uLCByZXN1bHQsICZlcnJvci5vdXRQ
dHIoKSkpOwogICAgIGlmIChlcnJvcikKLSAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVy
cm9yOjpodHRwRXJyb3IodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCksIHNv
dXBSZXF1ZXN0KSk7CisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVy
cm9yKGRhdGEtPnNvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSkpOwogICAgIGVsc2UKICAg
ICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RGTW92ZShpbnB1dFN0cmVhbSkpOwogfQogCiB2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiYmIGlucHV0U3RyZWFtKQogewotICAgIGlmIChtX3Nob3VsZENvbnRlbnRTbmlmZiA9PSBD
b250ZW50U25pZmZpbmdQb2xpY3k6OlNuaWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0
dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpCi0gICAgICAgIG1fcmVzcG9uc2Uu
c2V0U25pZmZlZENvbnRlbnRUeXBlKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1fc291
cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBpZiAoIW1fc25pZmZlZENvbnRlbnRUeXBlLmlzTnVsbCgp
ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05PVF9NT0RJRklF
RCkKKyAgICAgICAgbV9yZXNwb25zZS5zZXRTbmlmZmVkQ29udGVudFR5cGUobV9zbmlmZmVkQ29u
dGVudFR5cGUuZGF0YSgpKTsKICAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZSht
X3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpLmlzRW1w
dHkoKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9E
SUZJRUQpCiAgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6
bWltZVR5cGVGb3JQYXRoKG1fcmVzcG9uc2UudXJsKCkucGF0aCgpLnRvU3RyaW5nKCkpKTsKQEAg
LTQ0Miw4ICs0MzYsOCBAQCBnYm9vbGVhbiBOZXR3b3JrRGF0YVRhc2tTb3VwOjp0bHNDb25uZWN0
aW9uQWNjZXB0Q2VydGlmaWNhdGVDYWxsYmFjayhHVGxzQ29ubmVjdAogCiBib29sIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnRsc0Nvbm5lY3Rpb25BY2NlcHRDZXJ0aWZpY2F0ZShHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlLCBHVGxzQ2VydGlmaWNhdGVGbGFncyB0bHNFcnJvcnMpCiB7Ci0gICAg
QVNTRVJUKG1fc291cFJlcXVlc3QpOwotICAgIFVSTCB1cmwgPSBzb3VwVVJJVG9VUkwoc291cF9y
ZXF1ZXN0X2dldF91cmkobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgIEFTU0VSVChtX3NvdXBN
ZXNzYWdlKTsKKyAgICBVUkwgdXJsID0gc291cFVSSVRvVVJMKHNvdXBfbWVzc2FnZV9nZXRfdXJp
KG1fc291cE1lc3NhZ2UuZ2V0KCkpKTsKICAgICBhdXRvIGVycm9yID0gc3RhdGljX2Nhc3Q8TmV0
d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuY2hlY2tU
TFNFcnJvcnModXJsLCBjZXJ0aWZpY2F0ZSwgdGxzRXJyb3JzKTsKICAgICBpZiAoIWVycm9yKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1NCw2ICs0NDgsMzQgQEAgYm9vbCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjp0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNhdGUoR1Rsc0NlcnRpZmljYXRl
KiBjZXJ0aWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6ZGlkU25pZmZDb250ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBjb25z
dCBjaGFyKiBjb250ZW50VHlwZSwgR0hhc2hUYWJsZSogcGFyYW1ldGVycywgTmV0d29ya0RhdGFU
YXNrU291cCogdGFzaykKK3sKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2Vs
aW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdl
dCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgdGFz
ay0+ZGlkU25pZmZDb250ZW50KGNvbnRlbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdTdHJpbmcqIHNuaWZmZWRUeXBlID0gZ19zdHJpbmdfbmV3KGNvbnRlbnRUeXBlKTsK
KyAgICBHSGFzaFRhYmxlSXRlciBpdGVyOworICAgIGdwb2ludGVyIGtleSwgdmFsdWU7CisgICAg
Z19oYXNoX3RhYmxlX2l0ZXJfaW5pdCgmaXRlciwgcGFyYW1ldGVycyk7CisgICAgd2hpbGUgKGdf
aGFzaF90YWJsZV9pdGVyX25leHQoJml0ZXIsICZrZXksICZ2YWx1ZSkpIHsKKyAgICAgICAgZ19z
dHJpbmdfYXBwZW5kKHNuaWZmZWRUeXBlLCAiOyAiKTsKKyAgICAgICAgc291cF9oZWFkZXJfZ19z
dHJpbmdfYXBwZW5kX3BhcmFtKHNuaWZmZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
a2V5KSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSk7CisgICAgfQorICAgIHRhc2st
PmRpZFNuaWZmQ29udGVudChzbmlmZmVkVHlwZS0+c3RyKTsKKyAgICBnX3N0cmluZ19mcmVlKHNu
aWZmZWRUeXBlLCBUUlVFKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTbmlm
ZkNvbnRlbnQoQ1N0cmluZyYmIGNvbnRlbnRUeXBlKQoreworICAgIG1fc25pZmZlZENvbnRlbnRU
eXBlID0gV1RGTW92ZShjb250ZW50VHlwZSk7Cit9CisKIGJvb2wgTmV0d29ya0RhdGFUYXNrU291
cDo6cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24pLnBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKQEAgLTU1NSw3ICs1NzcsNyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbgogCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWwpIHsKICAgICAgICAgICAgIGNhbmNlbCgp
OwotICAgICAgICAgICAgZGlkRmFpbChjYW5jZWxsZWRFcnJvcihtX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgICAgICAgICBkaWRGYWlsKGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3Qp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01OTMsNyArNjE1LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNh
bGxiYWNrKEdJbnB1dFN0cmVhbSogaW4KICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CiAgICAgZ3NzaXplIGJ5dGVzU2tpcHBlZCA9IGdfaW5wdXRfc3RyZWFtX3NraXBfZmluaXNoKGlu
cHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKQotICAg
ICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0
KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgdGFzay0+ZGlkRmFpbChS
ZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKHRhc2stPm1fY3VycmVudFJlcXVlc3QudXJsKCks
IGVycm9yLmdldCgpKSk7CiAgICAgZWxzZSBpZiAoYnl0ZXNTa2lwcGVkID4gMCkKICAgICAgICAg
dGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKICAgICBlbHNlCkBAIC02NjEs
NyArNjgzLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVj
dGlvbigpCiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVkaXJlY3RzID0gMjA7CiAg
ICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Ci0gICAgICAgIGRpZEZh
aWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSwgU09V
UF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAiVG9vIG1hbnkgcmVkaXJlY3RzIikpOworICAg
ICAgICBkaWRGYWlsKFJlc291cmNlRXJyb3I6OnRyYW5zcG9ydEVycm9yKG1fY3VycmVudFJlcXVl
c3QudXJsKCksIFNPVVBfU1RBVFVTX1RPT19NQU5ZX1JFRElSRUNUUywgIlRvbyBtYW55IHJlZGly
ZWN0cyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzMzLDcgKzc1NSw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQogICAgICAg
ICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudCh1c2VyQWdlbnQpOwogICAgICAgICB9
CiAgICAgICAgIGNyZWF0ZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwgd2FzQmxvY2tpbmdDb29r
aWVzKTsKLSAgICAgICAgaWYgKG1fc291cFJlcXVlc3QgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6U3Vz
cGVuZGVkKSB7CisgICAgICAgIGlmIChtX3NvdXBNZXNzYWdlICYmIG1fc3RhdGUgIT0gU3RhdGU6
OlN1c3BlbmRlZCkgewogICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7CiAg
ICAgICAgICAgICByZXN1bWUoKTsKICAgICAgICAgfQpAQCAtNzU4LDggKzc4MCw4IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCoKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAg
Z3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3RyZWFt
LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGlm
ICh0YXNrLT5tX3NvdXBSZXF1ZXN0KQotICAgICAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJj
ZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgICAgIGlmICh0YXNrLT5tX3NvdXBNZXNzYWdlKQorICAgICAgICAgICAgdGFz
ay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKHRhc2stPm1fY3VycmVudFJl
cXVlc3QudXJsKCksIGVycm9yLmdldCgpKSk7CiAgICAgICAgIGVsc2UgaWYgKHRhc2stPm1fZmls
ZSkKICAgICAgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0
cmluZyhlcnJvci0+ZG9tYWluKSwgZXJyb3ItPmNvZGUsIHRhc2stPm1fZmlyc3RSZXF1ZXN0LnVy
bCgpLCBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSkpOwogICAgICAgICBlbHNlCkBA
IC04MzAsNyArODUyLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBh
cnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0qIG11bHQKICAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKHNvdXBfbXVsdGlwYXJ0X2lucHV0X3N0cmVhbV9uZXh0X3BhcnRfZmluaXNo
KG11bHRpcGFydElucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlm
IChlcnJvcikKLSAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpodHRwRXJyb3Io
dGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVl
c3QuZ2V0KCkpKTsKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpodHRwRXJy
b3IodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCkpKTsKICAgICBlbHNlIGlm
IChpbnB1dFN0cmVhbSkKICAgICAgICAgdGFzay0+ZGlkUmVxdWVzdE5leHRQYXJ0KFdURk1vdmUo
aW5wdXRTdHJlYW0pKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCA0ZWM4MDVjZWVlYWMu
LmNmZmExMjMyMDgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjMsNyArNjQsMTMgQEAgcHJpdmF0ZToK
ICAgICBlbnVtIGNsYXNzIFdhc0Jsb2NraW5nQ29va2llcyB7IE5vLCBZZXMgfTsKICAgICB2b2lk
IGNyZWF0ZVJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdhc0Jsb2NraW5nQ29v
a2llcyk7CiAgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kUmVx
dWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNr
U291cCopOworCisgICAgc3RydWN0IFNlbmRSZXF1ZXN0RGF0YSB7CisgICAgICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291
cE1lc3NhZ2U7CisgICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiB0YXNrOworICAg
IH07CisgICAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwU2Vzc2lvbiosIEdB
c3luY1Jlc3VsdCosIFNlbmRSZXF1ZXN0RGF0YSopOwogICAgIHZvaWQgZGlkU2VuZFJlcXVlc3Qo
R1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYpOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVz
cG9uc2UoKTsKICAgICB2b2lkIGRpc3BhdGNoRGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwpAQCAtNzEsNiArNzgsOSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBnYm9vbGVhbiB0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNhdGVDYWxsYmFjayhHVGxz
Q29ubmVjdGlvbiosIEdUbHNDZXJ0aWZpY2F0ZSosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBOZXR3
b3JrRGF0YVRhc2tTb3VwKik7CiAgICAgYm9vbCB0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNh
dGUoR1Rsc0NlcnRpZmljYXRlKiwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MpOwogCisgICAgc3RhdGlj
IHZvaWQgZGlkU25pZmZDb250ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBjb25zdCBjaGFyKiBj
b250ZW50VHlwZSwgR0hhc2hUYWJsZSogcGFyYW1ldGVycywgTmV0d29ya0RhdGFUYXNrU291cCop
OworICAgIHZvaWQgZGlkU25pZmZDb250ZW50KENTdHJpbmcmJik7CisKICAgICBib29sIHBlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgc3Rh
dGljIHZvaWQgYXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVzc2FnZSos
IFNvdXBBdXRoKiwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKQEAg
LTEzNiw3ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG1f
cGFnZUlEOwogICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CiAgICAgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdS
ZWZQdHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CiAgICAgR1JlZlB0cjxTb3VwTWVzc2Fn
ZT4gbV9zb3VwTWVzc2FnZTsKICAgICBHUmVmUHRyPEdGaWxlPiBtX2ZpbGU7CiAgICAgR1JlZlB0
cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CkBAIC0xNDcsNiArMTU2LDcgQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9y
YWdlOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwogICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBDU3RyaW5nIG1fc25p
ZmZlZENvbnRlbnRUeXBlOwogICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZmZXI7CiAgICAgdW5z
aWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwogICAgIHVpbnQ2NF90IG1fYm9keURhdGFUb3Rh
bEJ5dGVzU2VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcAppbmRl
eCA5OTRhYzQwOTM5YTYuLmU5MTVhMGMzY2NjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRX
ZWJQYWdlLmNwcApAQCAtMjUyLDcgKzI1Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAg
ICAgICB3ZWJraXRVUklSZXF1ZXN0R2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QuZ2V0KCksIHJl
c291cmNlUmVxdWVzdCk7Ci0gICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRJbml0aWF0aW5nUGFn
ZUlEKHBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLnRvVUludDY0KCkpOwogCiAgICAgICAg
IEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlOwogICAgICAgICBtZXNzYWdlLnNldChT
dHJpbmc6OmZyb21VVEY4KCJQYWdlIiksICZwYWdlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418394</attachid>
            <date>2021-01-26 04:33:21 -0800</date>
            <delta_ts>2021-01-26 04:33:21 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>wk-remove-soup-request-api.diff</filename>
            <type>text/plain</type>
            <size>37767</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2YWExNWEwOTE4NTQuLjJlNmQzNWRmMmQzNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDIxIEBACisyMDIxLTAxLTI2ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFA
aWdhbGlhLmNvbT4KKworICAgICAgICBbU09VUF0gU3RvcCB1c2luZyBTb3VwUmVxdWVzdCBBUEkg
aW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA3NjQKKworICAgICAgICBSZXZpZXdlZCBieSBBZHJpYW4g
UGVyZXogZGUgQ2FzdHJvLgorCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlRXJyb3IuaDogRXJyb3IgY29uc3RydWN0b3JzIG5vdyByZWNlaXZlIHRoZSBmYWlsaW5nIFVS
TCBpbnN0ZWFkIG9mIGEgU291cFJlcXVlc3QKKyAgICAgICAgdGhhdCBpcyBvbmx5IHVzZWQgdG8g
Z2V0IGl0cyBVUkwuCisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJy
b3JTb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlRXJyb3I6OnRyYW5zcG9ydEVy
cm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlRXJyb3I6Omh0dHBFcnJvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0Lmg6IFJlbW1vdmUgdGhlIGNvbnN0
cnVjdG9yIHRoYXQgcmVjZWl2ZXMgYSBTb3VwUmVxdWVzdCBhbmQgdGhlCisgICAgICAgIGluaXRp
YXRpbmcgcGFnZSBJRCBzaW5jZSBpdCdzIGN1cnJlbnRseSB1bnN1c2VkLgorICAgICAgICAqIHBs
YXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZVJlcXVlc3RTb3VwLmNwcDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291cE5ldHdvcmtTZXNzaW9uLmg6CisKIDIwMjEtMDEtMjUg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cmV2ZXJ0aW5nIHIyNzE1MTQgYW5kIHIyNzE1NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvc291cC9SZXNvdXJjZUVycm9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvci5oCmluZGV4IDljZmIwZDUxNWIyMy4u
ZTMzMDMyNDE3OGJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L3NvdXAvUmVzb3VyY2VFcnJvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvc291cC9SZXNvdXJjZUVycm9yLmgKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBSZXNvdXJjZUVycm9yX2gKLSNkZWZpbmUgUmVzb3VyY2VFcnJvcl9o
CisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlJlc291cmNlRXJyb3JCYXNlLmgiCiAKQEAgLTMz
LDI5ICszMiwyNSBAQAogI2luY2x1ZGUgPHd0Zi9nbGliL0dSZWZQdHIuaD4KIAogdHlwZWRlZiBz
dHJ1Y3QgX0dUbHNDZXJ0aWZpY2F0ZSBHVGxzQ2VydGlmaWNhdGU7Ci10eXBlZGVmIHN0cnVjdCBf
U291cFJlcXVlc3QgU291cFJlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291
cE1lc3NhZ2U7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVzb3VyY2VFcnJvciA6
IHB1YmxpYyBSZXNvdXJjZUVycm9yQmFzZQoteworY2xhc3MgUmVzb3VyY2VFcnJvciA6IHB1Ymxp
YyBSZXNvdXJjZUVycm9yQmFzZSB7CiBwdWJsaWM6CiAgICAgUmVzb3VyY2VFcnJvcihUeXBlIHR5
cGUgPSBUeXBlOjpOdWxsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKHR5cGUpCi0gICAg
ICAgICwgbV90bHNFcnJvcnMoMCkKICAgICB7CiAgICAgfQogCiAgICAgUmVzb3VyY2VFcnJvcihj
b25zdCBTdHJpbmcmIGRvbWFpbiwgaW50IGVycm9yQ29kZSwgY29uc3QgVVJMJiBmYWlsaW5nVVJM
LCBjb25zdCBTdHJpbmcmIGxvY2FsaXplZERlc2NyaXB0aW9uLCBUeXBlIHR5cGUgPSBUeXBlOjpH
ZW5lcmFsKQogICAgICAgICA6IFJlc291cmNlRXJyb3JCYXNlKGRvbWFpbiwgZXJyb3JDb2RlLCBm
YWlsaW5nVVJMLCBsb2NhbGl6ZWREZXNjcmlwdGlvbiwgdHlwZSkKLSAgICAgICAgLCBtX3Rsc0Vy
cm9ycygwKQogICAgIHsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBodHRwRXJy
b3IoU291cE1lc3NhZ2UqLCBHRXJyb3IqLCBTb3VwUmVxdWVzdCopOwotICAgIHN0YXRpYyBSZXNv
dXJjZUVycm9yIHRyYW5zcG9ydEVycm9yKFNvdXBSZXF1ZXN0KiwgaW50IHN0YXR1c0NvZGUsIGNv
bnN0IFN0cmluZyYgcmVhc29uUGhyYXNlKTsKLSAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBnZW5l
cmljR0Vycm9yKEdFcnJvciosIFNvdXBSZXF1ZXN0Kik7CisgICAgc3RhdGljIFJlc291cmNlRXJy
b3IgaHR0cEVycm9yKFNvdXBNZXNzYWdlKiwgR0Vycm9yKik7CisgICAgc3RhdGljIFJlc291cmNl
RXJyb3IgdHJhbnNwb3J0RXJyb3IoY29uc3QgVVJMJiwgaW50IHN0YXR1c0NvZGUsIGNvbnN0IFN0
cmluZyYgcmVhc29uUGhyYXNlKTsKKyAgICBzdGF0aWMgUmVzb3VyY2VFcnJvciBnZW5lcmljR0Vy
cm9yKGNvbnN0IFVSTCYsIEdFcnJvciopOwogICAgIHN0YXRpYyBSZXNvdXJjZUVycm9yIHRsc0Vy
cm9yKGNvbnN0IFVSTCYsIHVuc2lnbmVkIHRsc0Vycm9ycywgR1Rsc0NlcnRpZmljYXRlKik7CiAg
ICAgc3RhdGljIFJlc291cmNlRXJyb3IgdGltZW91dEVycm9yKGNvbnN0IFVSTCYgZmFpbGluZ1VS
TCk7CiAgICAgc3RhdGljIFJlc291cmNlRXJyb3IgYXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVz
c2FnZSopOwpAQCAtNzEsMTIgKzY2LDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFJl
c291cmNlRXJyb3JCYXNlOwogICAgIHZvaWQgZG9QbGF0Zm9ybUlzb2xhdGVkQ29weShjb25zdCBS
ZXNvdXJjZUVycm9yJik7CiAKLSAgICB1bnNpZ25lZCBtX3Rsc0Vycm9yczsKKyAgICB1bnNpZ25l
ZCBtX3Rsc0Vycm9ycyB7IDAgfTsKICAgICBHUmVmUHRyPEdUbHNDZXJ0aWZpY2F0ZT4gbV9jZXJ0
aWZpY2F0ZTsKIH07CiAKLX0KK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmCi0KLSNl
bmRpZiAvLyBSZXNvdXJjZUVycm9yX2hfCisjZW5kaWYgLy8gVVNFKFNPVVApCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNvdXAu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JT
b3VwLmNwcAppbmRleCBlZWVjMzI4MWUzODUuLjE2ZDEyMzBmYjQxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlRXJyb3JTb3VwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VFcnJvclNv
dXAuY3BwCkBAIC00MiwyNSArNDIsMTcgQEAgc3RhdGljIFVSTCBmYWlsaW5nVVJJKFNvdXBVUkkq
IHNvdXBVUkkpCiAgICAgcmV0dXJuIHNvdXBVUklUb1VSTChzb3VwVVJJKTsKIH0KIAotc3RhdGlj
IFVSTCBmYWlsaW5nVVJJKFNvdXBSZXF1ZXN0KiByZXF1ZXN0KQorUmVzb3VyY2VFcnJvciBSZXNv
dXJjZUVycm9yOjp0cmFuc3BvcnRFcnJvcihjb25zdCBVUkwmIGZhaWxpbmdVUkwsIGludCBzdGF0
dXNDb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvblBocmFzZSkKIHsKLSAgICBBU1NFUlQocmVxdWVz
dCk7Ci0gICAgcmV0dXJuIGZhaWxpbmdVUkkoc291cF9yZXF1ZXN0X2dldF91cmkocmVxdWVzdCkp
OworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKFNPVVBfSFRUUF9F
UlJPUiksIHN0YXR1c0NvZGUsIGZhaWxpbmdVUkwsIHJlYXNvblBocmFzZSk7CiB9CiAKLVJlc291
cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IoU291cFJlcXVlc3QqIHJlcXVl
c3QsIGludCBzdGF0dXNDb2RlLCBjb25zdCBTdHJpbmcmIHJlYXNvblBocmFzZSkKK1Jlc291cmNl
RXJyb3IgUmVzb3VyY2VFcnJvcjo6aHR0cEVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBHRXJy
b3IqIGVycm9yKQogewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5n
KFNPVVBfSFRUUF9FUlJPUiksIHN0YXR1c0NvZGUsCi0gICAgICAgIGZhaWxpbmdVUkkocmVxdWVz
dCksIHJlYXNvblBocmFzZSk7Ci19Ci0KLVJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6aHR0
cEVycm9yKFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBHRXJyb3IqIGVycm9yLCBTb3VwUmVxdWVzdCog
cmVxdWVzdCkKLXsKLSAgICBpZiAobWVzc2FnZSAmJiBTT1VQX1NUQVRVU19JU19UUkFOU1BPUlRf
RVJST1IobWVzc2FnZS0+c3RhdHVzX2NvZGUpKQotICAgICAgICByZXR1cm4gdHJhbnNwb3J0RXJy
b3IocmVxdWVzdCwgbWVzc2FnZS0+c3RhdHVzX2NvZGUsCi0gICAgICAgICAgICBTdHJpbmc6OmZy
b21VVEY4KG1lc3NhZ2UtPnJlYXNvbl9waHJhc2UpKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVy
biBnZW5lcmljR0Vycm9yKGVycm9yLCByZXF1ZXN0KTsKKyAgICBBU1NFUlQobWVzc2FnZSk7Cisg
ICAgaWYgKFNPVVBfU1RBVFVTX0lTX1RSQU5TUE9SVF9FUlJPUihtZXNzYWdlLT5zdGF0dXNfY29k
ZSkpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnRFcnJvcihmYWlsaW5nVVJJKHNvdXBfbWVzc2Fn
ZV9nZXRfdXJpKG1lc3NhZ2UpKSwgbWVzc2FnZS0+c3RhdHVzX2NvZGUsIFN0cmluZzo6ZnJvbVVU
RjgobWVzc2FnZS0+cmVhc29uX3BocmFzZSkpOworICAgIHJldHVybiBnZW5lcmljR0Vycm9yKGZh
aWxpbmdVUkkoc291cF9tZXNzYWdlX2dldF91cmkobWVzc2FnZSkpLCBlcnJvcik7CiB9CiAKIFJl
c291cmNlRXJyb3IgUmVzb3VyY2VFcnJvcjo6YXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVzc2Fn
ZSogbWVzc2FnZSkKQEAgLTcwLDEwICs2Miw5IEBAIFJlc291cmNlRXJyb3IgUmVzb3VyY2VFcnJv
cjo6YXV0aGVudGljYXRpb25FcnJvcihTb3VwTWVzc2FnZSogbWVzc2FnZSkKICAgICAgICAgZmFp
bGluZ1VSSShzb3VwX21lc3NhZ2VfZ2V0X3VyaShtZXNzYWdlKSksIFN0cmluZzo6ZnJvbVVURjgo
bWVzc2FnZS0+cmVhc29uX3BocmFzZSkpOwogfQogCi1SZXNvdXJjZUVycm9yIFJlc291cmNlRXJy
b3I6OmdlbmVyaWNHRXJyb3IoR0Vycm9yKiBlcnJvciwgU291cFJlcXVlc3QqIHJlcXVlc3QpCitS
ZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoY29uc3QgVVJMJiBmYWls
aW5nVVJMLCBHRXJyb3IqIGVycm9yKQogewotICAgIHJldHVybiBSZXNvdXJjZUVycm9yKGdfcXVh
cmtfdG9fc3RyaW5nKGVycm9yLT5kb21haW4pLCBlcnJvci0+Y29kZSwKLSAgICAgICAgZmFpbGlu
Z1VSSShyZXF1ZXN0KSwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpOworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKGdfcXVhcmtfdG9fc3RyaW5nKGVycm9yLT5kb21haW4pLCBlcnJv
ci0+Y29kZSwgZmFpbGluZ1VSTCwgU3RyaW5nOjpmcm9tVVRGOChlcnJvci0+bWVzc2FnZSkpOwog
fQogCiBSZXNvdXJjZUVycm9yIFJlc291cmNlRXJyb3I6OnRsc0Vycm9yKGNvbnN0IFVSTCYgZmFp
bGluZ1VSTCwgdW5zaWduZWQgdGxzRXJyb3JzLCBHVGxzQ2VydGlmaWNhdGUqIGNlcnRpZmljYXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291
cmNlUmVxdWVzdC5oCmluZGV4IDhmNzg3MGU5N2U5ZS4uZjJiMTUyMGY1NmM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dC5oCkBAIC0yNCw4ICsyNCw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUmVz
b3VyY2VSZXF1ZXN0X2gKLSNkZWZpbmUgUmVzb3VyY2VSZXF1ZXN0X2gKKyNwcmFnbWEgb25jZQog
CiAjaW5jbHVkZSAiUGFnZUlkZW50aWZpZXIuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3RC
YXNlLmgiCkBAIC0zMyw5NSArMzIsNjQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgQmxvYlJlZ2lzdHJ5SW1wbDsKLQotICAgIGNsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1
YmxpYyBSZXNvdXJjZVJlcXVlc3RCYXNlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlc291cmNl
UmVxdWVzdChjb25zdCBTdHJpbmcmIHVybCkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0
QmFzZShVUkwoeyB9LCB1cmwpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0cnVlKQotICAg
ICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPigwKSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVS
TCYgdXJsKQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgUmVzb3VyY2VS
ZXF1ZXN0Q2FjaGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICAs
IG1fYWNjZXB0RW5jb2RpbmcodHJ1ZSkKLSAgICAgICAgICAgICwgbV9zb3VwRmxhZ3Moc3RhdGlj
X2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIFJlc291cmNlUmVxdWVzdChjb25zdCBVUkwmIHVybCwgY29uc3QgU3RyaW5nJiByZWZlcnJl
ciwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3kgcG9saWN5ID0gUmVzb3VyY2VSZXF1ZXN0Q2Fj
aGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQb2xpY3kpCi0gICAgICAgICAgICA6IFJlc291cmNl
UmVxdWVzdEJhc2UodXJsLCBwb2xpY3kpCi0gICAgICAgICAgICAsIG1fYWNjZXB0RW5jb2Rpbmco
dHJ1ZSkKLSAgICAgICAgICAgICwgbV9zb3VwRmxhZ3Moc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VG
bGFncz4oMCkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldEhUVFBSZWZlcnJlcihyZWZlcnJl
cik7Ci0gICAgICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoKQotICAgICAgICAgICAg
OiBSZXNvdXJjZVJlcXVlc3RCYXNlKFVSTCgpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0
cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZs
YWdzPigwKSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgUmVzb3VyY2VSZXF1ZXN0
KFNvdXBNZXNzYWdlKiBzb3VwTWVzc2FnZSkKLSAgICAgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0
QmFzZShVUkwoKSwgUmVzb3VyY2VSZXF1ZXN0Q2FjaGVQb2xpY3k6OlVzZVByb3RvY29sQ2FjaGVQ
b2xpY3kpCi0gICAgICAgICAgICAsIG1fYWNjZXB0RW5jb2RpbmcodHJ1ZSkKLSAgICAgICAgICAg
ICwgbV9zb3VwRmxhZ3Moc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZShzb3VwTWVzc2FnZSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBSZXNvdXJjZVJlcXVlc3QoU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0
KQotICAgICAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHNvdXBVUklUb1VSTChzb3VwX3Jl
cXVlc3RfZ2V0X3VyaShzb3VwUmVxdWVzdCkpLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6
VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKLSAgICAgICAgICAgICwgbV9hY2NlcHRFbmNvZGluZyh0
cnVlKQotICAgICAgICAgICAgLCBtX3NvdXBGbGFncyhzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZs
YWdzPigwKSkKLSAgICAgICAgewotICAgICAgICAgICAgdXBkYXRlRnJvbVNvdXBSZXF1ZXN0KHNv
dXBSZXF1ZXN0KTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgdXBkYXRlRnJvbURlbGVnYXRl
UHJlc2VydmluZ09sZFByb3BlcnRpZXMoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiBkZWxlZ2F0ZVBy
b3ZpZGVkUmVxdWVzdCkgeyAqdGhpcyA9IGRlbGVnYXRlUHJvdmlkZWRSZXF1ZXN0OyB9Ci0KLSAg
ICAgICAgYm9vbCBhY2NlcHRFbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0RW5jb2Rp
bmc7IH0KLSAgICAgICAgdm9pZCBzZXRBY2NlcHRFbmNvZGluZyhib29sIGFjY2VwdEVuY29kaW5n
KSB7IG1fYWNjZXB0RW5jb2RpbmcgPSBhY2NlcHRFbmNvZGluZzsgfQotCi0gICAgICAgIHZvaWQg
dXBkYXRlU291cE1lc3NhZ2VIZWFkZXJzKFNvdXBNZXNzYWdlSGVhZGVycyopIGNvbnN0OwotICAg
ICAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhlYWRlcnMoU291cE1lc3NhZ2VIZWFkZXJz
Kik7Ci0gICAgICAgIHZvaWQgdXBkYXRlU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqLCBCbG9iUmVn
aXN0cnlJbXBsJikgY29uc3Q7Ci0gICAgICAgIHZvaWQgdXBkYXRlRnJvbVNvdXBNZXNzYWdlKFNv
dXBNZXNzYWdlKik7Ci0gICAgICAgIHZvaWQgdXBkYXRlU291cFJlcXVlc3QoU291cFJlcXVlc3Qq
KSBjb25zdDsKLSAgICAgICAgdm9pZCB1cGRhdGVGcm9tU291cFJlcXVlc3QoU291cFJlcXVlc3Qq
KTsKLQotICAgICAgICBTb3VwTWVzc2FnZUZsYWdzIHNvdXBNZXNzYWdlRmxhZ3MoKSBjb25zdCB7
IHJldHVybiBtX3NvdXBGbGFnczsgfQotICAgICAgICB2b2lkIHNldFNvdXBNZXNzYWdlRmxhZ3Mo
U291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3VwRmxhZ3MgPSBzb3VwRmxhZ3M7IH0K
LQotICAgICAgICAvLyBXZWJQYWdlUHJveHlJZGVudGlmaWVyLgotICAgICAgICBPcHRpb25hbDx1
aW50NjRfdD4gaW5pdGlhdGluZ1BhZ2VJRCgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhdGluZ1Bh
Z2VJRDsgfQotICAgICAgICB2b2lkIHNldEluaXRpYXRpbmdQYWdlSUQodWludDY0X3QgcGFnZUlE
KSB7IG1faW5pdGlhdGluZ1BhZ2VJRCA9IHBhZ2VJRDsgfQotCi0gICAgICAgIEdVbmlxdWVQdHI8
U291cFVSST4gY3JlYXRlU291cFVSSSgpIGNvbnN0OwotCi0gICAgICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlV2l0aFBsYXRmb3JtRGF0YShFbmNvZGVyJikgY29uc3Q7Ci0g
ICAgICAgIHRlbXBsYXRlPGNsYXNzIERlY29kZXI+IFdBUk5fVU5VU0VEX1JFVFVSTiBib29sIGRl
Y29kZVdpdGhQbGF0Zm9ybURhdGEoRGVjb2RlciYpOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAg
ZnJpZW5kIGNsYXNzIFJlc291cmNlUmVxdWVzdEJhc2U7Ci0KLSAgICAgICAgYm9vbCBtX2FjY2Vw
dEVuY29kaW5nIDogMTsKLSAgICAgICAgU291cE1lc3NhZ2VGbGFncyBtX3NvdXBGbGFnczsKLSAg
ICAgICAgT3B0aW9uYWw8dWludDY0X3Q+IG1faW5pdGlhdGluZ1BhZ2VJRDsKLQotICAgICAgICB2
b2lkIHVwZGF0ZVNvdXBNZXNzYWdlTWVtYmVycyhTb3VwTWVzc2FnZSopIGNvbnN0OwotICAgICAg
ICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlQm9keShTb3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUlt
cGwmKSBjb25zdDsKLSAgICAgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQot
ICAgICAgICB2b2lkIGRvVXBkYXRlUmVzb3VyY2VSZXF1ZXN0KCkgeyB9Ci0gICAgICAgIHZvaWQg
ZG9VcGRhdGVQbGF0Zm9ybUhUVFBCb2R5KCkgeyB9Ci0gICAgICAgIHZvaWQgZG9VcGRhdGVSZXNv
dXJjZUhUVFBCb2R5KCkgeyB9Ci0KLSAgICAgICAgdm9pZCBkb1BsYXRmb3JtU2V0QXNJc29sYXRl
ZENvcHkoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgeyB9Ci0gICAgfTsKK2NsYXNzIEJsb2JSZWdp
c3RyeUltcGw7CisKK2NsYXNzIFJlc291cmNlUmVxdWVzdCA6IHB1YmxpYyBSZXNvdXJjZVJlcXVl
c3RCYXNlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSZXNvdXJjZVJlcXVlc3QoY29uc3QgU3Ry
aW5nJiB1cmwpCisgICAgICAgIDogUmVzb3VyY2VSZXF1ZXN0QmFzZShVUkwoeyB9LCB1cmwpLCBS
ZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7
CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0KGNvbnN0IFVSTCYgdXJsKQorICAgICAgICA6
IFJlc291cmNlUmVxdWVzdEJhc2UodXJsLCBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNl
UHJvdG9jb2xDYWNoZVBvbGljeSkKKyAgICB7CisgICAgfQorCisgICAgUmVzb3VyY2VSZXF1ZXN0
KGNvbnN0IFVSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHJlZmVycmVyLCBSZXNvdXJjZVJlcXVlc3RD
YWNoZVBvbGljeSBwb2xpY3kgPSBSZXNvdXJjZVJlcXVlc3RDYWNoZVBvbGljeTo6VXNlUHJvdG9j
b2xDYWNoZVBvbGljeSkKKyAgICAgICAgOiBSZXNvdXJjZVJlcXVlc3RCYXNlKHVybCwgcG9saWN5
KQorICAgIHsKKyAgICAgICAgc2V0SFRUUFJlZmVycmVyKHJlZmVycmVyKTsKKyAgICB9CisKKyAg
ICBSZXNvdXJjZVJlcXVlc3QoKQorICAgICAgICA6IFJlc291cmNlUmVxdWVzdEJhc2UoVVJMKCks
IFJlc291cmNlUmVxdWVzdENhY2hlUG9saWN5OjpVc2VQcm90b2NvbENhY2hlUG9saWN5KQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHVwZGF0ZUZyb21EZWxlZ2F0ZVByZXNlcnZpbmdPbGRQcm9w
ZXJ0aWVzKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgZGVsZWdhdGVQcm92aWRlZFJlcXVlc3QpIHsg
KnRoaXMgPSBkZWxlZ2F0ZVByb3ZpZGVkUmVxdWVzdDsgfQorCisgICAgYm9vbCBhY2NlcHRFbmNv
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0RW5jb2Rpbmc7IH0KKyAgICB2b2lkIHNldEFj
Y2VwdEVuY29kaW5nKGJvb2wgYWNjZXB0RW5jb2RpbmcpIHsgbV9hY2NlcHRFbmNvZGluZyA9IGFj
Y2VwdEVuY29kaW5nOyB9CisKKyAgICB2b2lkIHVwZGF0ZVNvdXBNZXNzYWdlSGVhZGVycyhTb3Vw
TWVzc2FnZUhlYWRlcnMqKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUZyb21Tb3VwTWVzc2FnZUhl
YWRlcnMoU291cE1lc3NhZ2VIZWFkZXJzKik7CisgICAgdm9pZCB1cGRhdGVTb3VwTWVzc2FnZShT
b3VwTWVzc2FnZSosIEJsb2JSZWdpc3RyeUltcGwmKSBjb25zdDsKKyAgICB2b2lkIHVwZGF0ZUZy
b21Tb3VwTWVzc2FnZShTb3VwTWVzc2FnZSopOworCisgICAgU291cE1lc3NhZ2VGbGFncyBzb3Vw
TWVzc2FnZUZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9zb3VwRmxhZ3M7IH0KKyAgICB2b2lkIHNl
dFNvdXBNZXNzYWdlRmxhZ3MoU291cE1lc3NhZ2VGbGFncyBzb3VwRmxhZ3MpIHsgbV9zb3VwRmxh
Z3MgPSBzb3VwRmxhZ3M7IH0KKworICAgIEdVbmlxdWVQdHI8U291cFVSST4gY3JlYXRlU291cFVS
SSgpIGNvbnN0OworCisgICAgdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGVXaXRo
UGxhdGZvcm1EYXRhKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBXQVJOX1VOVVNFRF9SRVRVUk4gYm9vbCBkZWNvZGVXaXRoUGxhdGZvcm1EYXRhKERlY29kZXIm
KTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVzb3VyY2VSZXF1ZXN0QmFzZTsKKwor
ICAgIGJvb2wgbV9hY2NlcHRFbmNvZGluZyB7IHRydWUgfTsKKyAgICBTb3VwTWVzc2FnZUZsYWdz
IG1fc291cEZsYWdzIHsgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oMCkgfTsKKworICAg
IHZvaWQgdXBkYXRlU291cE1lc3NhZ2VNZW1iZXJzKFNvdXBNZXNzYWdlKikgY29uc3Q7CisgICAg
dm9pZCB1cGRhdGVTb3VwTWVzc2FnZUJvZHkoU291cE1lc3NhZ2UqLCBCbG9iUmVnaXN0cnlJbXBs
JikgY29uc3Q7CisgICAgdm9pZCBkb1VwZGF0ZVBsYXRmb3JtUmVxdWVzdCgpIHsgfQorICAgIHZv
aWQgZG9VcGRhdGVSZXNvdXJjZVJlcXVlc3QoKSB7IH0KKyAgICB2b2lkIGRvVXBkYXRlUGxhdGZv
cm1IVFRQQm9keSgpIHsgfQorICAgIHZvaWQgZG9VcGRhdGVSZXNvdXJjZUhUVFBCb2R5KCkgeyB9
CisKKyAgICB2b2lkIGRvUGxhdGZvcm1TZXRBc0lzb2xhdGVkQ29weShjb25zdCBSZXNvdXJjZVJl
cXVlc3QmKSB7IH0KK307CiAKIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+CiB2b2lkIFJlc291cmNl
UmVxdWVzdDo6ZW5jb2RlV2l0aFBsYXRmb3JtRGF0YShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdApA
QCAtMTM2LDcgKzEwNCw2IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0OjplbmNvZGVXaXRoUGxhdGZv
cm1EYXRhKEVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgICAgIGVuY29kZXIgPDwgbV9odHRw
Qm9keS0+ZmxhdHRlblRvU3RyaW5nKCk7CiAKICAgICBlbmNvZGVyIDw8IHN0YXRpY19jYXN0PHVp
bnQzMl90PihtX3NvdXBGbGFncyk7Ci0gICAgZW5jb2RlciA8PCBtX2luaXRpYXRpbmdQYWdlSUQ7
CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDxib29sPihtX2FjY2VwdEVuY29kaW5nKTsKIH0K
IApAQCAtMTYxLDEyICsxMjgsNiBAQCBib29sIFJlc291cmNlUmVxdWVzdDo6ZGVjb2RlV2l0aFBs
YXRmb3JtRGF0YShEZWNvZGVyJiBkZWNvZGVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
bV9zb3VwRmxhZ3MgPSBzdGF0aWNfY2FzdDxTb3VwTWVzc2FnZUZsYWdzPihzb3VwTWVzc2FnZUZs
YWdzKTsKIAotICAgIE9wdGlvbmFsPE9wdGlvbmFsPHVpbnQ2NF90Pj4gaW5pdGlhdGluZ1BhZ2VJ
RDsKLSAgICBkZWNvZGVyID4+IGluaXRpYXRpbmdQYWdlSUQ7Ci0gICAgaWYgKCFpbml0aWF0aW5n
UGFnZUlEKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9pbml0aWF0aW5nUGFnZUlEID0g
KmluaXRpYXRpbmdQYWdlSUQ7Ci0KICAgICBib29sIGFjY2VwdEVuY29kaW5nOwogICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoYWNjZXB0RW5jb2RpbmcpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBA
IC0xOTYsNCArMTU3LDMgQEAgaW5saW5lIFNvdXBNZXNzYWdlUHJpb3JpdHkgdG9Tb3VwTWVzc2Fn
ZVByaW9yaXR5KFJlc291cmNlTG9hZFByaW9yaXR5IHByaW9yaXR5KQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKLSNlbmRpZiAvLyBSZXNvdXJjZVJlcXVlc3RfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNvdXAuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVzdFNv
dXAuY3BwCmluZGV4IGUxNjc4MDE0NzhiMy4uMjdmOWJlMjcyMjYxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvUmVzb3VyY2VSZXF1ZXN0U291cC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9zb3VwL1Jlc291cmNlUmVxdWVz
dFNvdXAuY3BwCkBAIC0yMDAsMjMgKzIwMCw2IEBAIHZvaWQgUmVzb3VyY2VSZXF1ZXN0Ojp1cGRh
dGVGcm9tU291cE1lc3NhZ2UoU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlKQogI2VuZGlmCiB9CiAK
LXN0YXRpYyBjb25zdCBjaGFyKiBnU291cFJlcXVlc3RJbml0aWF0aW5nUGFnZUlES2V5ID0gIndr
LXNvdXAtcmVxdWVzdC1pbml0aWF0aW5nLXBhZ2UtaWQiOwotCi12b2lkIFJlc291cmNlUmVxdWVz
dDo6dXBkYXRlU291cFJlcXVlc3QoU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0KSBjb25zdAotewot
ICAgIGlmIChtX2luaXRpYXRpbmdQYWdlSUQpIHsKLSAgICAgICAgdWludDY0X3QqIGluaXRpYXRp
bmdQYWdlSURQdHIgPSBzdGF0aWNfY2FzdDx1aW50NjRfdCo+KGZhc3RNYWxsb2Moc2l6ZW9mKHVp
bnQ2NF90KSkpOwotICAgICAgICAqaW5pdGlhdGluZ1BhZ2VJRFB0ciA9ICptX2luaXRpYXRpbmdQ
YWdlSUQ7Ci0gICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpFQ1Qoc291cFJlcXVl
c3QpLCBnX2ludGVybl9zdGF0aWNfc3RyaW5nKGdTb3VwUmVxdWVzdEluaXRpYXRpbmdQYWdlSURL
ZXkpLCBpbml0aWF0aW5nUGFnZUlEUHRyLCBmYXN0RnJlZSk7Ci0gICAgfQotfQotCi12b2lkIFJl
c291cmNlUmVxdWVzdDo6dXBkYXRlRnJvbVNvdXBSZXF1ZXN0KFNvdXBSZXF1ZXN0KiBzb3VwUmVx
dWVzdCkKLXsKLSAgICB1aW50NjRfdCogaW5pdGlhdGluZ1BhZ2VJRFB0ciA9IHN0YXRpY19jYXN0
PHVpbnQ2NF90Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qoc291cFJlcXVlc3QpLCBnU291
cFJlcXVlc3RJbml0aWF0aW5nUGFnZUlES2V5KSk7Ci0gICAgbV9pbml0aWF0aW5nUGFnZUlEID0g
aW5pdGlhdGluZ1BhZ2VJRFB0ciA/ICppbml0aWF0aW5nUGFnZUlEUHRyIDogMDsKLX0KLQogdW5z
aWduZWQgaW5pdGlhbGl6ZU1heGltdW1IVFRQQ29ubmVjdGlvbkNvdW50UGVySG9zdCgpCiB7CiAg
ICAgLy8gU291cCBoYXMgaXRzIG93biBxdWV1ZSBjb250cm9sOyBpdCB3YW50cyB0byBoYXZlIGFs
bCByZXF1ZXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9zb3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCmluZGV4IGQwODJiNzAyMmFlYy4uNWE0ODQ5MzZj
MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL3NvdXAvU291
cE5ldHdvcmtTZXNzaW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9z
b3VwL1NvdXBOZXR3b3JrU2Vzc2lvbi5oCkBAIC0zNyw3ICszNyw2IEBACiB0eXBlZGVmIHN0cnVj
dCBfU291cENhY2hlIFNvdXBDYWNoZTsKIHR5cGVkZWYgc3RydWN0IF9Tb3VwQ29va2llSmFyIFNv
dXBDb29raWVKYXI7CiB0eXBlZGVmIHN0cnVjdCBfU291cE1lc3NhZ2UgU291cE1lc3NhZ2U7Ci10
eXBlZGVmIHN0cnVjdCBfU291cFJlcXVlc3QgU291cFJlcXVlc3Q7CiB0eXBlZGVmIHN0cnVjdCBf
U291cFNlc3Npb24gU291cFNlc3Npb247CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5k
ZXggYTg5NmY4NmY2MGMwLi5lZDExYmFiOTBhOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUgQEAK
KzIwMjEtMDEtMjYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtTT1VQXSBTdG9wIHVzaW5nIFNvdXBSZXF1ZXN0IEFQSSBpbiBwcmVwYXJhdGlv
biBmb3IgbGlic291cDMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIyMDc2NAorCisgICAgICAgIFJldmlld2VkIGJ5IEFkcmlhbiBQZXJleiBkZSBDYXN0
cm8uCisKKyAgICAgICAgSXQncyBnb25lIGluIGxpYnNvdXAzLCB3ZSBjYW4ganVzdCB1c2Ugc291
cF9zZXNzaW9uX3NlbmRfYXN5bmMoKSBpbnN0ZWFkLCB3aGljaCBpcyB3aGF0IFNvdXBSZXF1ZXN0
IGRvZXMKKyAgICAgICAgaW50ZXJuYWxseS4KKworICAgICAgICAqIE5ldHdvcmtQcm9jZXNzL3Nv
dXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRh
VGFza1NvdXA6OmNyZWF0ZVJlcXVlc3QpOiBNYW51YWxseSBjcmVhdGUgdGhlIFNvdXBNZXNzYWdl
LiBBbHNvIGNvbm5lY3QgdG8gY29udGVudC1zbmlmZmVkCisgICAgICAgIHNpZ25hbCB0aGF0IGl0
IHdhcyBoYW5kbGVkIGJ5IFNvdXBSZXF1ZXN0IGludGVybmFsbHkuCisgICAgICAgIChXZWJLaXQ6
Ok5ldHdvcmtEYXRhVGFza1NvdXA6OmNsZWFyUmVxdWVzdCk6IFJlbW92ZSB0aGUgU291cFJlcXVl
c3QgcmVzZXQgYW5kIGNsZWFyIG1fc25pZmZlZENvbnRlbnRUeXBlLgorICAgICAgICAoV2ViS2l0
OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUpOiBVc2Ugc291cF9zZXNzaW9uX3NlbmRfYXN5
bmMoKS4gV2UgbmVlZCB0byBrbm93IHRoZSBtZXNzYWdlIGZvciBwYXNzZWQgdG8KKyAgICAgICAg
dGhlIGZ1bmN0aW9uIGZyb20gdGhlIGFzeW5jIHJlYWR5IGNhbGxiYWNrLCBzbyB3ZSB1c2UgYSBz
dHJ1Y3QgdG8gcGFzcyBib3RoIHRoZSB0YXNrIGFuZCB0aGUgbWVzc2FnZS4gSW4gY2FzZSBvZgor
ICAgICAgICBiZWluZyBzdXNwZW5kZWQgdGhlIHN0cnVjdCB3YXMgYXR0YWNoZWQgdG8gdGhlIHBl
bmRpbmcgcmVzdWx0LgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3VwOjpzZW5k
UmVxdWVzdENhbGxiYWNrKTogRmluaXNoIHRoZSBzb3VwX3Nlc3Npb25fc2VuZF9hc3luYygpIG9w
ZXJhdGlvbi4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6ZGlkU2VuZFJl
cXVlc3QpOiBTZXQgdGhlIHNuaWZmZWQgY29udGVudCB0eXBlIGZyb20gbV9zbmlmZmVkQ29udGVu
dFR5cGUuCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnRsc0Nvbm5lY3Rp
b25BY2NlcHRDZXJ0aWZpY2F0ZSk6IFVzZSBTb3VwTWVzc2FnZSBpbnN0ZWFkIG9mIFNvdXBSZXF1
ZXN0IHRvIGdldCB0aGUgVVJJLgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrRGF0YVRhc2tTb3Vw
OjpkaWRTbmlmZkNvbnRlbnRDYWxsYmFjayk6IEJ1aWxkIHRoZSBzbmlmZmVkIGNvbnRlbnQgdHlw
ZSBhbmQgY2FsbCBkaWRTbmlmZkNvbnRlbnQoKS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0Rh
dGFUYXNrU291cDo6ZGlkU25pZmZDb250ZW50KTogU2F2ZSB0aGUgcGFzc2VkIGNvbnRlbnQgdHlw
ZS4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVBdXRoZW50
aWNhdGUpOiBVc2UgbV9jdXJyZW50UmVxdWVzdCBpbnN0ZWFkIG9mIHRoZSBTb3VwUmVxdWVzdCB0
byBidWlsZAorICAgICAgICB0aGUgYXV0aGVudGljYXRpb24gZXJyb3IuCisgICAgICAgIChXZWJL
aXQ6Ok5ldHdvcmtEYXRhVGFza1NvdXA6OnNraXBJbnB1dFN0cmVhbUZvclJlZGlyZWN0aW9uQ2Fs
bGJhY2spOiBQYXNzIHRoZSBmYWlsaW5nIFVSTCB0byB0aGUgUmVzb3VyY2VFcnJvciBjb25zdHJ1
Y3Rvci4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQ
UmVkaXJlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6TmV0d29ya0RhdGFUYXNrU291
cDo6cmVhZENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6Ok5ldHdvcmtEYXRhVGFz
a1NvdXA6OnJlcXVlc3ROZXh0UGFydENhbGxiYWNrKTogRGl0dG8uCisgICAgICAgICogTmV0d29y
a1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmg6CisgICAgICAgICogV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcDogU3RvcCBzZXR0aW5n
IHRoZSBpbml0aWF0aW5nIHBhZ2UgSUQgaW4gdGhlIHJlcXVlc3QgYmVjYXVzZQorICAgICAgICBp
dCdzIHVudXNlZC4KKwogMjAyMS0wMS0yNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lh
QGlnYWxpYS5jb20+CiAKICAgICAgICAgW1NPVVBdIFN0b3AgdXNpbmcgU291cFJlcXVlc3QgQVBJ
IHRvIGxvYWQgZmlsZXMgaW4gcHJlcGFyYXRpb24gZm9yIGxpYnNvdXAzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5j
cHAKaW5kZXggMjhjNjNiMGE3MjA3Li40ODg4NzQ0MDYzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvTmV0d29ya1Byb2Nlc3Mvc291cC9OZXR3b3JrRGF0YVRhc2tTb3VwLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5jcHAK
QEAgLTExNCw0MiArMTE0LDMwIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y3JlYXRlUmVx
dWVzdChSZXNvdXJjZVJlcXVlc3QmJiByZXF1ZXN0LCBXYXNCbG9ja2luZ0NvCiAgICAgfQogCiAg
ICAgR1VuaXF1ZVB0cjxTb3VwVVJJPiBzb3VwVVJJID0gbV9jdXJyZW50UmVxdWVzdC5jcmVhdGVT
b3VwVVJJKCk7Ci0gICAgaWYgKCFzb3VwVVJJKSB7Ci0gICAgICAgIHNjaGVkdWxlRmFpbHVyZShJ
bnZhbGlkVVJMRmFpbHVyZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBHUmVmUHRy
PFNvdXBSZXF1ZXN0PiBzb3VwUmVxdWVzdCA9IGFkb3B0R1JlZihzb3VwX3Nlc3Npb25fcmVxdWVz
dF91cmkoc3RhdGljX2Nhc3Q8TmV0d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikuc291cFNl
c3Npb24oKSwgc291cFVSSS5nZXQoKSwgbnVsbHB0cikpOwotICAgIGlmICghc291cFJlcXVlc3Qp
IHsKLSAgICAgICAgc2NoZWR1bGVGYWlsdXJlKEludmFsaWRVUkxGYWlsdXJlKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cFJlcXVlc3Qo
c291cFJlcXVlc3QuZ2V0KCkpOwotCi0gICAgLy8gSFRUUCByZXF1ZXN0LgotICAgIEdSZWZQdHI8
U291cE1lc3NhZ2U+IHNvdXBNZXNzYWdlID0gYWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9odHRwX2dl
dF9tZXNzYWdlKFNPVVBfUkVRVUVTVF9IVFRQKHNvdXBSZXF1ZXN0LmdldCgpKSkpOwotICAgIGlm
ICghc291cE1lc3NhZ2UpIHsKKyAgICBpZiAoIXNvdXBVUkkgfHwgIVNPVVBfVVJJX1ZBTElEX0ZP
Ul9IVFRQKHNvdXBVUkkuZ2V0KCkpKSB7CiAgICAgICAgIHNjaGVkdWxlRmFpbHVyZShJbnZhbGlk
VVJMRmFpbHVyZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICByZXN0cmljdFJlcXVl
c3RSZWZlcnJlclRvT3JpZ2luSWZOZWVkZWQobV9jdXJyZW50UmVxdWVzdCk7CiAKLSAgICB1bnNp
Z25lZCBtZXNzYWdlRmxhZ3MgPSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CisgICAgbV9zb3Vw
TWVzc2FnZSA9IGFkb3B0R1JlZihzb3VwX21lc3NhZ2VfbmV3X2Zyb21fdXJpKFNPVVBfTUVUSE9E
X0dFVCwgc291cFVSSS5nZXQoKSkpOworICAgIG1fY3VycmVudFJlcXVlc3QudXBkYXRlU291cE1l
c3NhZ2UobV9zb3VwTWVzc2FnZS5nZXQoKSwgbV9zZXNzaW9uLT5ibG9iUmVnaXN0cnkoKSk7CiAK
LSAgICBtX2N1cnJlbnRSZXF1ZXN0LnVwZGF0ZVNvdXBNZXNzYWdlKHNvdXBNZXNzYWdlLmdldCgp
LCBtX3Nlc3Npb24tPmJsb2JSZWdpc3RyeSgpKTsKKyAgICB1bnNpZ25lZCBtZXNzYWdlRmxhZ3Mg
PSBTT1VQX01FU1NBR0VfTk9fUkVESVJFQ1Q7CiAgICAgaWYgKG1fc2hvdWxkQ29udGVudFNuaWZm
ID09IENvbnRlbnRTbmlmZmluZ1BvbGljeTo6RG9Ob3RTbmlmZkNvbnRlbnQpCi0gICAgICAgIHNv
dXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9D
T05URU5UX1NOSUZGRVIpOworICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKG1f
c291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9DT05URU5UX1NOSUZGRVIpOwogICAgIGlmICht
X3VzZXIuaXNFbXB0eSgpICYmIG1fcGFzc3dvcmQuaXNFbXB0eSgpICYmIG1fc3RvcmVkQ3JlZGVu
dGlhbHNQb2xpY3kgPT0gU3RvcmVkQ3JlZGVudGlhbHNQb2xpY3k6OkRvTm90VXNlKSB7CiAjaWYg
U09VUF9DSEVDS19WRVJTSU9OKDIsIDU3LCAxKQogICAgICAgICBtZXNzYWdlRmxhZ3MgfD0gU09V
UF9NRVNTQUdFX0RPX05PVF9VU0VfQVVUSF9DQUNIRTsKICNlbHNlCiAgICAgICAgIC8vIEluIGNh
c2UgY3JlZGVudGlhbCBpcyBub3QgYXZhaWxhYmxlIGFuZCBjcmVkZW50aWFsIHN0b3JhZ2Ugc2hv
dWxkIG5vdCB0byBiZSB1c2VkLAogICAgICAgICAvLyBkaXNhYmxlIGF1dGhlbnRpY2F0aW9uIG1h
bmFnZXIgc28gdGhhdCBjcmVkZW50aWFscyBzdG9yZWQgaW4gbGlic291cCBhcmUgbm90IHVzZWQu
Ci0gICAgICAgIHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCks
IFNPVVBfVFlQRV9BVVRIX01BTkFHRVIpOworICAgICAgICBzb3VwX21lc3NhZ2VfZGlzYWJsZV9m
ZWF0dXJlKG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9BVVRIX01BTkFHRVIpOwogI2Vu
ZGlmCiAgICAgfQorICAgIHNvdXBfbWVzc2FnZV9zZXRfZmxhZ3MobV9zb3VwTWVzc2FnZS5nZXQo
KSwgc3RhdGljX2Nhc3Q8U291cE1lc3NhZ2VGbGFncz4oc291cF9tZXNzYWdlX2dldF9mbGFncyht
X3NvdXBNZXNzYWdlLmdldCgpKSB8IG1lc3NhZ2VGbGFncykpOworICAgIHNvdXBfbWVzc2FnZV9z
ZXRfcHJpb3JpdHkobV9zb3VwTWVzc2FnZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KG1f
Y3VycmVudFJlcXVlc3QucHJpb3JpdHkoKSkpOwogCiAjaWYgRU5BQkxFKFJFU09VUkNFX0xPQURf
U1RBVElTVElDUykKICAgICBib29sIHNob3VsZEJsb2NrQ29va2llcyA9IHdhc0Jsb2NraW5nQ29v
a2llcyA9PSBXYXNCbG9ja2luZ0Nvb2tpZXM6OlllcyA/IHRydWUgOiBtX3N0b3JlZENyZWRlbnRp
YWxzUG9saWN5ID09IFN0b3JlZENyZWRlbnRpYWxzUG9saWN5OjpFcGhlbWVyYWxTdGF0ZWxlc3M7
CkBAIC0xNTgsMzIgKzE0NiwyNiBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0ZVJl
cXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2FzQmxvY2tpbmdDbwogICAgICAgICAg
ICAgc2hvdWxkQmxvY2tDb29raWVzID0gbmV0d29ya1N0b3JhZ2VTZXNzaW9uLT5zaG91bGRCbG9j
a0Nvb2tpZXMobV9jdXJyZW50UmVxdWVzdCwgbV9mcmFtZUlELCBtX3BhZ2VJRCwgV2ViQ29yZTo6
U2hvdWxkUmVsYXhUaGlyZFBhcnR5Q29va2llQmxvY2tpbmc6Ok5vKTsKICAgICB9CiAgICAgaWYg
KHNob3VsZEJsb2NrQ29va2llcykKLSAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVy
ZShzb3VwTWVzc2FnZS5nZXQoKSwgU09VUF9UWVBFX0NPT0tJRV9KQVIpOworICAgICAgICBzb3Vw
X21lc3NhZ2VfZGlzYWJsZV9mZWF0dXJlKG1fc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQRV9D
T09LSUVfSkFSKTsKICAgICBtX2lzQmxvY2tpbmdDb29raWVzID0gc2hvdWxkQmxvY2tDb29raWVz
OwogI2VuZGlmCiAKICNpZiBTT1VQX0NIRUNLX1ZFUlNJT04oMiwgNjcsIDEpCiAgICAgaWYgKCht
X2N1cnJlbnRSZXF1ZXN0LnVybCgpLnByb3RvY29sSXMoImh0dHBzIikgJiYgIXNob3VsZEFsbG93
SFNUU1BvbGljeVNldHRpbmcoKSkgfHwgKG1fY3VycmVudFJlcXVlc3QudXJsKCkucHJvdG9jb2xJ
cygiaHR0cCIpICYmICFzaG91bGRBbGxvd0hTVFNQcm90b2NvbFVwZ3JhZGUoKSkpCi0gICAgICAg
IHNvdXBfbWVzc2FnZV9kaXNhYmxlX2ZlYXR1cmUoc291cE1lc3NhZ2UuZ2V0KCksIFNPVVBfVFlQ
RV9IU1RTX0VORk9SQ0VSKTsKKyAgICAgICAgc291cF9tZXNzYWdlX2Rpc2FibGVfZmVhdHVyZSht
X3NvdXBNZXNzYWdlLmdldCgpLCBTT1VQX1RZUEVfSFNUU19FTkZPUkNFUik7CiAgICAgZWxzZQog
ICAgICAgICBnX3NpZ25hbF9jb25uZWN0KHNvdXBfc2Vzc2lvbl9nZXRfZmVhdHVyZShzdGF0aWNf
Y2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbV9zZXNzaW9uKS5zb3VwU2Vzc2lvbigpLCBTT1VQ
X1RZUEVfSFNUU19FTkZPUkNFUiksICJoc3RzLWVuZm9yY2VkIiwgR19DQUxMQkFDSyhoc3RzRW5m
b3JjZWQpLCB0aGlzKTsKICNlbmRpZgogCiAgICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgYW4gQWNj
ZXB0IGhlYWRlciBmb3Igc3VicmVzb3VyY2VzOyBzb21lIHNpdGVzIHdhbnQgdGhpcyB0byBzZXJ2
ZSBzb21lIG9mIHRoZWlyIHN1YnJlc291cmNlcy4KLSAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFk
ZXJzX2dldF9vbmUoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgIkFjY2VwdCIpKQotICAg
ICAgICBzb3VwX21lc3NhZ2VfaGVhZGVyc19hcHBlbmQoc291cE1lc3NhZ2UtPnJlcXVlc3RfaGVh
ZGVycywgIkFjY2VwdCIsICIqLyoiKTsKKyAgICBpZiAoIXNvdXBfbWVzc2FnZV9oZWFkZXJzX2dl
dF9vbmUobV9zb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAiQWNjZXB0IikpCisgICAgICAg
IHNvdXBfbWVzc2FnZV9oZWFkZXJzX2FwcGVuZChtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2hlYWRl
cnMsICJBY2NlcHQiLCAiKi8qIik7CiAKICAgICAvLyBJbiB0aGUgY2FzZSBvZiBYSFIgLnNlbmQo
KSBhbmQgLnNlbmQoIiIpIGV4cGxpY2l0bHkgdGVsbCBsaWJzb3VwIHRvIHNlbmQgYSB6ZXJvIGNv
bnRlbnQtbGVuZ2h0IGhlYWRlcgogICAgIC8vIGZvciBjb25zaXN0ZW5jeSB3aXRoIG90aGVyIFVB
IGltcGxlbWVudGF0aW9ucyBsaWtlIEZpcmVmb3guIEl0J3MgZG9uZSBpbiB0aGUgYmFja2VuZCBo
ZXJlIGluc3RlYWQgb2YKICAgICAvLyBpbiBYSFIgY29kZSBzaW5jZSBpbiBYSFIgQ09SUyBjaGVj
a2luZyBwcmV2ZW50cyB1cyBmcm9tIHRoaXMga2luZCBvZiBsYXRlIGhlYWRlciBtYW5pcHVsYXRp
b24uCi0gICAgaWYgKChzb3VwTWVzc2FnZS0+bWV0aG9kID09IFNPVVBfTUVUSE9EX1BPU1QgfHwg
c291cE1lc3NhZ2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QVVQpICYmICFzb3VwTWVzc2FnZS0+
cmVxdWVzdF9ib2R5LT5sZW5ndGgpCi0gICAgICAgIHNvdXBfbWVzc2FnZV9oZWFkZXJzX3NldF9j
b250ZW50X2xlbmd0aChzb3VwTWVzc2FnZS0+cmVxdWVzdF9oZWFkZXJzLCAwKTsKLQotICAgIHNv
dXBfbWVzc2FnZV9zZXRfZmxhZ3Moc291cE1lc3NhZ2UuZ2V0KCksIHN0YXRpY19jYXN0PFNvdXBN
ZXNzYWdlRmxhZ3M+KHNvdXBfbWVzc2FnZV9nZXRfZmxhZ3Moc291cE1lc3NhZ2UuZ2V0KCkpIHwg
bWVzc2FnZUZsYWdzKSk7Ci0gICAgc291cF9tZXNzYWdlX3NldF9wcmlvcml0eShzb3VwTWVzc2Fn
ZS5nZXQoKSwgdG9Tb3VwTWVzc2FnZVByaW9yaXR5KG1fY3VycmVudFJlcXVlc3QucHJpb3JpdHko
KSkpOwotCi0gICAgbV9zb3VwUmVxdWVzdCA9IFdURk1vdmUoc291cFJlcXVlc3QpOwotICAgIG1f
c291cE1lc3NhZ2UgPSBXVEZNb3ZlKHNvdXBNZXNzYWdlKTsKKyAgICBpZiAoKG1fc291cE1lc3Nh
Z2UtPm1ldGhvZCA9PSBTT1VQX01FVEhPRF9QT1NUIHx8IG1fc291cE1lc3NhZ2UtPm1ldGhvZCA9
PSBTT1VQX01FVEhPRF9QVVQpICYmICFtX3NvdXBNZXNzYWdlLT5yZXF1ZXN0X2JvZHktPmxlbmd0
aCkKKyAgICAgICAgc291cF9tZXNzYWdlX2hlYWRlcnNfc2V0X2NvbnRlbnRfbGVuZ3RoKG1fc291
cE1lc3NhZ2UtPnJlcXVlc3RfaGVhZGVycywgMCk7CiAKICAgICBnX3NpZ25hbF9jb25uZWN0KG1f
c291cE1lc3NhZ2UuZ2V0KCksICJnb3QtaGVhZGVycyIsIEdfQ0FMTEJBQ0soZ290SGVhZGVyc0Nh
bGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVjdChtX3NvdXBNZXNzYWdlLmdldCgp
LCAid3JvdGUtYm9keS1kYXRhIiwgR19DQUxMQkFDSyh3cm90ZUJvZHlEYXRhQ2FsbGJhY2spLCB0
aGlzKTsKQEAgLTE5MSw2ICsxNzMsOCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmNyZWF0
ZVJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiYgcmVxdWVzdCwgV2FzQmxvY2tpbmdDbwogICAgIGdf
c2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQoKSwgIm5ldHdvcmstZXZlbnQiLCBHX0NB
TExCQUNLKG5ldHdvcmtFdmVudENhbGxiYWNrKSwgdGhpcyk7CiAgICAgZ19zaWduYWxfY29ubmVj
dChtX3NvdXBNZXNzYWdlLmdldCgpLCAicmVzdGFydGVkIiwgR19DQUxMQkFDSyhyZXN0YXJ0ZWRD
YWxsYmFjayksIHRoaXMpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QobV9zb3VwTWVzc2FnZS5nZXQo
KSwgInN0YXJ0aW5nIiwgR19DQUxMQkFDSyhzdGFydGluZ0NhbGxiYWNrKSwgdGhpcyk7CisgICAg
aWYgKG1fc2hvdWxkQ29udGVudFNuaWZmID09IENvbnRlbnRTbmlmZmluZ1BvbGljeTo6U25pZmZD
b250ZW50KQorICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fc291cE1lc3NhZ2UuZ2V0KCksICJj
b250ZW50LXNuaWZmZWQiLCBHX0NBTExCQUNLKGRpZFNuaWZmQ29udGVudENhbGxiYWNrKSwgdGhp
cyk7CiB9CiAKIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkKQEAgLTIw
MiwxMSArMTg2LDExIEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y2xlYXJSZXF1ZXN0KCkK
IAogICAgIHN0b3BUaW1lb3V0KCk7CiAgICAgbV9wZW5kaW5nUmVzdWx0ID0gbnVsbHB0cjsKLSAg
ICBtX3NvdXBSZXF1ZXN0ID0gbnVsbHB0cjsKICAgICBtX2ZpbGUgPSBudWxscHRyOwogICAgIG1f
aW5wdXRTdHJlYW0gPSBudWxscHRyOwogICAgIG1fbXVsdGlwYXJ0SW5wdXRTdHJlYW0gPSBudWxs
cHRyOwogICAgIG1fZG93bmxvYWRPdXRwdXRTdHJlYW0gPSBudWxscHRyOworICAgIG1fc25pZmZl
ZENvbnRlbnRUeXBlID0geyB9OwogICAgIGdfY2FuY2VsbGFibGVfY2FuY2VsKG1fY2FuY2VsbGFi
bGUuZ2V0KCkpOwogICAgIG1fY2FuY2VsbGFibGUgPSBudWxscHRyOwogICAgIG1faXNCbG9ja2lu
Z0Nvb2tpZXMgPSBmYWxzZTsKQEAgLTIzNSw5ICsyMTksMTMgQEAgdm9pZCBOZXR3b3JrRGF0YVRh
c2tTb3VwOjpyZXN1bWUoKQogICAgIHN0YXJ0VGltZW91dCgpOwogCiAgICAgUmVmUHRyPE5ldHdv
cmtEYXRhVGFza1NvdXA+IHByb3RlY3RlZFRoaXModGhpcyk7Ci0gICAgaWYgKG1fc291cFJlcXVl
c3QgJiYgIW1fY2FuY2VsbGFibGUpIHsKKyAgICBpZiAobV9zb3VwTWVzc2FnZSAmJiAhbV9jYW5j
ZWxsYWJsZSkgewogICAgICAgICBtX2NhbmNlbGxhYmxlID0gYWRvcHRHUmVmKGdfY2FuY2VsbGFi
bGVfbmV3KCkpOwotICAgICAgICBzb3VwX3JlcXVlc3Rfc2VuZF9hc3luYyhtX3NvdXBSZXF1ZXN0
LmdldCgpLCBtX2NhbmNlbGxhYmxlLmdldCgpLCByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5
Q2FsbGJhY2s+KHNlbmRSZXF1ZXN0Q2FsbGJhY2spLCBwcm90ZWN0ZWRUaGlzLmxlYWtSZWYoKSk7
CisgICAgICAgIC8vIFdlIG5lZWQgdG8gcHJvdGVjdCBjYW5jZWxsYWJsZSBoZXJlLCBiZWNhdXNl
IHNvdXBfc2Vzc2lvbl9zZW5kX2FzeW5jIHVzZXMgaXQgYWZ0ZXIgZW1pdHRpbmcgU291cFNlc3Np
b246OnJlcXVlc3QtcXVldWVkLCBhbmQgd2UKKyAgICAgICAgLy8gbWlnaHQgY2FuY2VsIHRoZSBv
cGVyYXRpb24gaW4gYSBmZWF0dXJlIGNhbGxiYWNrIGVtaXR0ZWQgb24gcmVxdWVzdC1xdWV1ZWQs
IGZvciBleGFtcGxlIGhzdHMtZW5mb3JjZWQuCisgICAgICAgIEdSZWZQdHI8R0NhbmNlbGxhYmxl
PiBwcm90ZWN0Q2FuY2VsbGFibGUobV9jYW5jZWxsYWJsZSk7CisgICAgICAgIHNvdXBfc2Vzc2lv
bl9zZW5kX2FzeW5jKHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24p
LnNvdXBTZXNzaW9uKCksIG1fc291cE1lc3NhZ2UuZ2V0KCksIG1fY2FuY2VsbGFibGUuZ2V0KCks
CisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PEdBc3luY1JlYWR5Q2FsbGJhY2s+KHNlbmRS
ZXF1ZXN0Q2FsbGJhY2spLCBuZXcgU2VuZFJlcXVlc3REYXRhKHsgbV9zb3VwTWVzc2FnZSwgV1RG
TW92ZShwcm90ZWN0ZWRUaGlzKSB9KSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI1
NCw5ICsyNDIsMTAgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXN1bWUoKQogICAgICAg
ICAgICAgcmVhZENhbGxiYWNrKG1faW5wdXRTdHJlYW0uZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0
KCksIHByb3RlY3RlZFRoaXMubGVha1JlZigpKTsKICAgICAgICAgZWxzZSBpZiAobV9tdWx0aXBh
cnRJbnB1dFN0cmVhbSkKICAgICAgICAgICAgIHJlcXVlc3ROZXh0UGFydENhbGxiYWNrKG1fbXVs
dGlwYXJ0SW5wdXRTdHJlYW0uZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3RlY3RlZFRo
aXMubGVha1JlZigpKTsKLSAgICAgICAgZWxzZSBpZiAobV9zb3VwUmVxdWVzdCkKLSAgICAgICAg
ICAgIHNlbmRSZXF1ZXN0Q2FsbGJhY2sobV9zb3VwUmVxdWVzdC5nZXQoKSwgcGVuZGluZ1Jlc3Vs
dC5nZXQoKSwgcHJvdGVjdGVkVGhpcy5sZWFrUmVmKCkpOwotICAgICAgICBlbHNlIGlmIChtX2Zp
bGUpIHsKKyAgICAgICAgZWxzZSBpZiAobV9zb3VwTWVzc2FnZSkgeworICAgICAgICAgICAgc2Vu
ZFJlcXVlc3RDYWxsYmFjayhzdGF0aWNfY2FzdDxOZXR3b3JrU2Vzc2lvblNvdXAmPigqbV9zZXNz
aW9uKS5zb3VwU2Vzc2lvbigpLCBwZW5kaW5nUmVzdWx0LmdldCgpLAorICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFNlbmRSZXF1ZXN0RGF0YSo+KGdfb2JqZWN0X3N0ZWFsX2RhdGEoR19PQkpF
Q1QocGVuZGluZ1Jlc3VsdC5nZXQoKSksICJ3ay1zZW5kLXJlcXVlc3QtZGF0YSIpKSk7CisgICAg
ICAgIH0gZWxzZSBpZiAobV9maWxlKSB7CiAgICAgICAgICAgICBpZiAobV9yZXNwb25zZS5leHBl
Y3RlZENvbnRlbnRMZW5ndGgoKSA9PSAtMSkKICAgICAgICAgICAgICAgICBlbnVtZXJhdGVGaWxl
Q2hpbGRyZW5DYWxsYmFjayhtX2ZpbGUuZ2V0KCksIHBlbmRpbmdSZXN1bHQuZ2V0KCksIHByb3Rl
Y3RlZFRoaXMubGVha1JlZigpKTsKICAgICAgICAgICAgIGVsc2UKQEAgLTMxNiwxNiArMzA1LDE4
IEBAIHZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c3RvcFRpbWVvdXQoKQogICAgIG1fdGltZW91
dFNvdXJjZS5zdG9wKCk7CiB9CiAKLXZvaWQgTmV0d29ya0RhdGFUYXNrU291cDo6c2VuZFJlcXVl
c3RDYWxsYmFjayhTb3VwUmVxdWVzdCogc291cFJlcXVlc3QsIEdBc3luY1Jlc3VsdCogcmVzdWx0
LCBOZXR3b3JrRGF0YVRhc2tTb3VwKiB0YXNrKQordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpz
ZW5kUmVxdWVzdENhbGxiYWNrKFNvdXBTZXNzaW9uKiBzb3VwU2Vzc2lvbiwgR0FzeW5jUmVzdWx0
KiByZXN1bHQsIFNlbmRSZXF1ZXN0RGF0YSogZGF0YSkKIHsKLSAgICBSZWZQdHI8TmV0d29ya0Rh
dGFUYXNrU291cD4gcHJvdGVjdGVkVGhpcyA9IGFkb3B0UmVmKHRhc2spOwotICAgIGlmIChzb3Vw
UmVxdWVzdCAhPSB0YXNrLT5tX3NvdXBSZXF1ZXN0LmdldCgpKSB7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFNlbmRSZXF1ZXN0RGF0YT4gcHJvdGVjdGVkRGF0YShkYXRhKTsKKyAgICBhdXRvKiB0YXNr
ID0gZGF0YS0+dGFzay5nZXQoKTsKKworICAgIGlmICh0YXNrLT5tX3NvdXBNZXNzYWdlICYmIHRh
c2stPm1fc291cE1lc3NhZ2UgIT0gZGF0YS0+c291cE1lc3NhZ2UuZ2V0KCkpIHsKICAgICAgICAg
Ly8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIHJlcXVlc3QgaXMgY2FuY2VsbGVkIGFuZCBhIG5l
dyBvbmUgaXMgc3RhcnRlZCBiZWZvcmUKICAgICAgICAgLy8gdGhlIHByZXZpb3VzIGFzeW5jIG9w
ZXJhdGlvbiBjb21wbGV0ZWQuIFRoaXMgaXMgY29tbW9uIHdoZW4gZm9yY2luZyBhIHJlZGlyZWN0
aW9uCiAgICAgICAgIC8vIGR1ZSB0byBIU1RTLiBXZSBjYW4gc2ltcGx5IGlnbm9yZSB0aGlzIG9s
ZCByZXF1ZXN0LgogI2lmIEFTU0VSVF9FTkFCTEVECiAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vy
cm9yPiBlcnJvcjsKLSAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0g
YWRvcHRHUmVmKHNvdXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAm
ZXJyb3Iub3V0UHRyKCkpKTsKKyAgICAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3Ry
ZWFtID0gYWRvcHRHUmVmKHNvdXBfc2Vzc2lvbl9zZW5kX2ZpbmlzaChzb3VwU2Vzc2lvbiwgcmVz
dWx0LCAmZXJyb3Iub3V0UHRyKCkpKTsKICAgICAgICAgQVNTRVJUKGdfZXJyb3JfbWF0Y2hlcyhl
cnJvci5nZXQoKSwgR19JT19FUlJPUiwgR19JT19FUlJPUl9DQU5DRUxMRUQpKTsKICNlbmRpZgog
ICAgICAgICByZXR1cm47CkBAIC0zMzksMjEgKzMzMCwyNCBAQCB2b2lkIE5ldHdvcmtEYXRhVGFz
a1NvdXA6OnNlbmRSZXF1ZXN0Q2FsbGJhY2soU291cFJlcXVlc3QqIHNvdXBSZXF1ZXN0LCBHQXN5
bmNSZQogICAgIGlmICh0YXNrLT5zdGF0ZSgpID09IFN0YXRlOjpTdXNwZW5kZWQpIHsKICAgICAg
ICAgQVNTRVJUKCF0YXNrLT5tX3BlbmRpbmdSZXN1bHQpOwogICAgICAgICB0YXNrLT5tX3BlbmRp
bmdSZXN1bHQgPSByZXN1bHQ7CisgICAgICAgIGdfb2JqZWN0X3NldF9kYXRhX2Z1bGwoR19PQkpF
Q1QodGFzay0+bV9wZW5kaW5nUmVzdWx0LmdldCgpKSwgIndrLXNlbmQtcmVxdWVzdC1kYXRhIiwg
cHJvdGVjdGVkRGF0YS5yZWxlYXNlKCksIFtdKGdwb2ludGVyIGRhdGEpIHsKKyAgICAgICAgICAg
IGRlbGV0ZSBzdGF0aWNfY2FzdDxTZW5kUmVxdWVzdERhdGEqPihkYXRhKTsKKyAgICAgICAgfSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJy
b3I7Ci0gICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFtID0gYWRvcHRHUmVmKHNv
dXBfcmVxdWVzdF9zZW5kX2ZpbmlzaChzb3VwUmVxdWVzdCwgcmVzdWx0LCAmZXJyb3Iub3V0UHRy
KCkpKTsKKyAgICBHUmVmUHRyPEdJbnB1dFN0cmVhbT4gaW5wdXRTdHJlYW0gPSBhZG9wdEdSZWYo
c291cF9zZXNzaW9uX3NlbmRfZmluaXNoKHNvdXBTZXNzaW9uLCByZXN1bHQsICZlcnJvci5vdXRQ
dHIoKSkpOwogICAgIGlmIChlcnJvcikKLSAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVy
cm9yOjpodHRwRXJyb3IodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCksIHNv
dXBSZXF1ZXN0KSk7CisgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcjo6aHR0cEVy
cm9yKGRhdGEtPnNvdXBNZXNzYWdlLmdldCgpLCBlcnJvci5nZXQoKSkpOwogICAgIGVsc2UKICAg
ICAgICAgdGFzay0+ZGlkU2VuZFJlcXVlc3QoV1RGTW92ZShpbnB1dFN0cmVhbSkpOwogfQogCiB2
b2lkIE5ldHdvcmtEYXRhVGFza1NvdXA6OmRpZFNlbmRSZXF1ZXN0KEdSZWZQdHI8R0lucHV0U3Ry
ZWFtPiYmIGlucHV0U3RyZWFtKQogewotICAgIGlmIChtX3Nob3VsZENvbnRlbnRTbmlmZiA9PSBD
b250ZW50U25pZmZpbmdQb2xpY3k6OlNuaWZmQ29udGVudCAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0
dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9ESUZJRUQpCi0gICAgICAgIG1fcmVzcG9uc2Uu
c2V0U25pZmZlZENvbnRlbnRUeXBlKHNvdXBfcmVxdWVzdF9nZXRfY29udGVudF90eXBlKG1fc291
cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICBpZiAoIW1fc25pZmZlZENvbnRlbnRUeXBlLmlzTnVsbCgp
ICYmIG1fc291cE1lc3NhZ2UtPnN0YXR1c19jb2RlICE9IFNPVVBfU1RBVFVTX05PVF9NT0RJRklF
RCkKKyAgICAgICAgbV9yZXNwb25zZS5zZXRTbmlmZmVkQ29udGVudFR5cGUobV9zbmlmZmVkQ29u
dGVudFR5cGUuZGF0YSgpKTsKICAgICBtX3Jlc3BvbnNlLnVwZGF0ZUZyb21Tb3VwTWVzc2FnZSht
X3NvdXBNZXNzYWdlLmdldCgpKTsKICAgICBpZiAobV9yZXNwb25zZS5taW1lVHlwZSgpLmlzRW1w
dHkoKSAmJiBtX3NvdXBNZXNzYWdlLT5zdGF0dXNfY29kZSAhPSBTT1VQX1NUQVRVU19OT1RfTU9E
SUZJRUQpCiAgICAgICAgIG1fcmVzcG9uc2Uuc2V0TWltZVR5cGUoTUlNRVR5cGVSZWdpc3RyeTo6
bWltZVR5cGVGb3JQYXRoKG1fcmVzcG9uc2UudXJsKCkucGF0aCgpLnRvU3RyaW5nKCkpKTsKQEAg
LTQ0Miw4ICs0MzYsOCBAQCBnYm9vbGVhbiBOZXR3b3JrRGF0YVRhc2tTb3VwOjp0bHNDb25uZWN0
aW9uQWNjZXB0Q2VydGlmaWNhdGVDYWxsYmFjayhHVGxzQ29ubmVjdAogCiBib29sIE5ldHdvcmtE
YXRhVGFza1NvdXA6OnRsc0Nvbm5lY3Rpb25BY2NlcHRDZXJ0aWZpY2F0ZShHVGxzQ2VydGlmaWNh
dGUqIGNlcnRpZmljYXRlLCBHVGxzQ2VydGlmaWNhdGVGbGFncyB0bHNFcnJvcnMpCiB7Ci0gICAg
QVNTRVJUKG1fc291cFJlcXVlc3QpOwotICAgIFVSTCB1cmwgPSBzb3VwVVJJVG9VUkwoc291cF9y
ZXF1ZXN0X2dldF91cmkobV9zb3VwUmVxdWVzdC5nZXQoKSkpOworICAgIEFTU0VSVChtX3NvdXBN
ZXNzYWdlKTsKKyAgICBVUkwgdXJsID0gc291cFVSSVRvVVJMKHNvdXBfbWVzc2FnZV9nZXRfdXJp
KG1fc291cE1lc3NhZ2UuZ2V0KCkpKTsKICAgICBhdXRvIGVycm9yID0gc3RhdGljX2Nhc3Q8TmV0
d29ya1Nlc3Npb25Tb3VwJj4oKm1fc2Vzc2lvbikuc291cE5ldHdvcmtTZXNzaW9uKCkuY2hlY2tU
TFNFcnJvcnModXJsLCBjZXJ0aWZpY2F0ZSwgdGxzRXJyb3JzKTsKICAgICBpZiAoIWVycm9yKQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ1NCw2ICs0NDgsMzQgQEAgYm9vbCBOZXR3b3JrRGF0
YVRhc2tTb3VwOjp0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNhdGUoR1Rsc0NlcnRpZmljYXRl
KiBjZXJ0aWYKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgTmV0d29ya0RhdGFUYXNrU291
cDo6ZGlkU25pZmZDb250ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqIHNvdXBNZXNzYWdlLCBjb25z
dCBjaGFyKiBjb250ZW50VHlwZSwgR0hhc2hUYWJsZSogcGFyYW1ldGVycywgTmV0d29ya0RhdGFU
YXNrU291cCogdGFzaykKK3sKKyAgICBpZiAodGFzay0+c3RhdGUoKSA9PSBTdGF0ZTo6Q2FuY2Vs
aW5nIHx8IHRhc2stPnN0YXRlKCkgPT0gU3RhdGU6OkNvbXBsZXRlZCB8fCAhdGFzay0+bV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCh0YXNrLT5tX3NvdXBNZXNzYWdlLmdl
dCgpID09IHNvdXBNZXNzYWdlKTsKKyAgICBpZiAoIXBhcmFtZXRlcnMpIHsKKyAgICAgICAgdGFz
ay0+ZGlkU25pZmZDb250ZW50KGNvbnRlbnRUeXBlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIEdTdHJpbmcqIHNuaWZmZWRUeXBlID0gZ19zdHJpbmdfbmV3KGNvbnRlbnRUeXBlKTsK
KyAgICBHSGFzaFRhYmxlSXRlciBpdGVyOworICAgIGdwb2ludGVyIGtleSwgdmFsdWU7CisgICAg
Z19oYXNoX3RhYmxlX2l0ZXJfaW5pdCgmaXRlciwgcGFyYW1ldGVycyk7CisgICAgd2hpbGUgKGdf
aGFzaF90YWJsZV9pdGVyX25leHQoJml0ZXIsICZrZXksICZ2YWx1ZSkpIHsKKyAgICAgICAgZ19z
dHJpbmdfYXBwZW5kKHNuaWZmZWRUeXBlLCAiOyAiKTsKKyAgICAgICAgc291cF9oZWFkZXJfZ19z
dHJpbmdfYXBwZW5kX3BhcmFtKHNuaWZmZWRUeXBlLCBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
a2V5KSwgc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KHZhbHVlKSk7CisgICAgfQorICAgIHRhc2st
PmRpZFNuaWZmQ29udGVudChzbmlmZmVkVHlwZS0+c3RyKTsKKyAgICBnX3N0cmluZ19mcmVlKHNu
aWZmZWRUeXBlLCBUUlVFKTsKK30KKwordm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpkaWRTbmlm
ZkNvbnRlbnQoQ1N0cmluZyYmIGNvbnRlbnRUeXBlKQoreworICAgIG1fc25pZmZlZENvbnRlbnRU
eXBlID0gV1RGTW92ZShjb250ZW50VHlwZSk7Cit9CisKIGJvb2wgTmV0d29ya0RhdGFUYXNrU291
cDo6cGVyc2lzdGVudENyZWRlbnRpYWxTdG9yYWdlRW5hYmxlZCgpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE5ldHdvcmtTZXNzaW9uU291cCY+KCptX3Nlc3Npb24pLnBlcnNpc3Rl
bnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKTsKQEAgLTU1NSw3ICs1NzcsNyBAQCB2b2lkIE5l
dHdvcmtEYXRhVGFza1NvdXA6OmNvbnRpbnVlQXV0aGVudGljYXRlKEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJiYgY2hhbGxlbgogCiAgICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZURpc3Bvc2l0aW9uOjpDYW5jZWwpIHsKICAgICAgICAgICAgIGNhbmNlbCgp
OwotICAgICAgICAgICAgZGlkRmFpbChjYW5jZWxsZWRFcnJvcihtX3NvdXBSZXF1ZXN0LmdldCgp
KSk7CisgICAgICAgICAgICBkaWRGYWlsKGNhbmNlbGxlZEVycm9yKG1fY3VycmVudFJlcXVlc3Qp
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC01OTMsNyArNjE1LDcgQEAg
dm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpza2lwSW5wdXRTdHJlYW1Gb3JSZWRpcmVjdGlvbkNh
bGxiYWNrKEdJbnB1dFN0cmVhbSogaW4KICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7
CiAgICAgZ3NzaXplIGJ5dGVzU2tpcHBlZCA9IGdfaW5wdXRfc3RyZWFtX3NraXBfZmluaXNoKGlu
cHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKQotICAg
ICAgICB0YXNrLT5kaWRGYWlsKFJlc291cmNlRXJyb3I6OmdlbmVyaWNHRXJyb3IoZXJyb3IuZ2V0
KCksIHRhc2stPm1fc291cFJlcXVlc3QuZ2V0KCkpKTsKKyAgICAgICAgdGFzay0+ZGlkRmFpbChS
ZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKHRhc2stPm1fY3VycmVudFJlcXVlc3QudXJsKCks
IGVycm9yLmdldCgpKSk7CiAgICAgZWxzZSBpZiAoYnl0ZXNTa2lwcGVkID4gMCkKICAgICAgICAg
dGFzay0+c2tpcElucHV0U3RyZWFtRm9yUmVkaXJlY3Rpb24oKTsKICAgICBlbHNlCkBAIC02NjEs
NyArNjgzLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpjb250aW51ZUhUVFBSZWRpcmVj
dGlvbigpCiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4UmVkaXJlY3RzID0gMjA7CiAg
ICAgaWYgKG1fcmVkaXJlY3RDb3VudCsrID4gbWF4UmVkaXJlY3RzKSB7Ci0gICAgICAgIGRpZEZh
aWwoUmVzb3VyY2VFcnJvcjo6dHJhbnNwb3J0RXJyb3IobV9zb3VwUmVxdWVzdC5nZXQoKSwgU09V
UF9TVEFUVVNfVE9PX01BTllfUkVESVJFQ1RTLCAiVG9vIG1hbnkgcmVkaXJlY3RzIikpOworICAg
ICAgICBkaWRGYWlsKFJlc291cmNlRXJyb3I6OnRyYW5zcG9ydEVycm9yKG1fY3VycmVudFJlcXVl
c3QudXJsKCksIFNPVVBfU1RBVFVTX1RPT19NQU5ZX1JFRElSRUNUUywgIlRvbyBtYW55IHJlZGly
ZWN0cyIpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtNzMzLDcgKzc1NSw3IEBAIHZv
aWQgTmV0d29ya0RhdGFUYXNrU291cDo6Y29udGludWVIVFRQUmVkaXJlY3Rpb24oKQogICAgICAg
ICAgICAgICAgIHJlcXVlc3Quc2V0SFRUUFVzZXJBZ2VudCh1c2VyQWdlbnQpOwogICAgICAgICB9
CiAgICAgICAgIGNyZWF0ZVJlcXVlc3QoV1RGTW92ZShyZXF1ZXN0KSwgd2FzQmxvY2tpbmdDb29r
aWVzKTsKLSAgICAgICAgaWYgKG1fc291cFJlcXVlc3QgJiYgbV9zdGF0ZSAhPSBTdGF0ZTo6U3Vz
cGVuZGVkKSB7CisgICAgICAgIGlmIChtX3NvdXBNZXNzYWdlICYmIG1fc3RhdGUgIT0gU3RhdGU6
OlN1c3BlbmRlZCkgewogICAgICAgICAgICAgbV9zdGF0ZSA9IFN0YXRlOjpTdXNwZW5kZWQ7CiAg
ICAgICAgICAgICByZXN1bWUoKTsKICAgICAgICAgfQpAQCAtNzU4LDggKzc4MCw4IEBAIHZvaWQg
TmV0d29ya0RhdGFUYXNrU291cDo6cmVhZENhbGxiYWNrKEdJbnB1dFN0cmVhbSogaW5wdXRTdHJl
YW0sIEdBc3luY1Jlc3VsdCoKICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAg
Z3NzaXplIGJ5dGVzUmVhZCA9IGdfaW5wdXRfc3RyZWFtX3JlYWRfZmluaXNoKGlucHV0U3RyZWFt
LCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSk7CiAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgIGlm
ICh0YXNrLT5tX3NvdXBSZXF1ZXN0KQotICAgICAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJj
ZUVycm9yOjpnZW5lcmljR0Vycm9yKGVycm9yLmdldCgpLCB0YXNrLT5tX3NvdXBSZXF1ZXN0Lmdl
dCgpKSk7CisgICAgICAgIGlmICh0YXNrLT5tX3NvdXBNZXNzYWdlKQorICAgICAgICAgICAgdGFz
ay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpnZW5lcmljR0Vycm9yKHRhc2stPm1fY3VycmVudFJl
cXVlc3QudXJsKCksIGVycm9yLmdldCgpKSk7CiAgICAgICAgIGVsc2UgaWYgKHRhc2stPm1fZmls
ZSkKICAgICAgICAgICAgIHRhc2stPmRpZEZhaWwoUmVzb3VyY2VFcnJvcihnX3F1YXJrX3RvX3N0
cmluZyhlcnJvci0+ZG9tYWluKSwgZXJyb3ItPmNvZGUsIHRhc2stPm1fZmlyc3RSZXF1ZXN0LnVy
bCgpLCBTdHJpbmc6OmZyb21VVEY4KGVycm9yLT5tZXNzYWdlKSkpOwogICAgICAgICBlbHNlCkBA
IC04MzAsNyArODUyLDcgQEAgdm9pZCBOZXR3b3JrRGF0YVRhc2tTb3VwOjpyZXF1ZXN0TmV4dFBh
cnRDYWxsYmFjayhTb3VwTXVsdGlwYXJ0SW5wdXRTdHJlYW0qIG11bHQKICAgICBHVW5pcXVlT3V0
UHRyPEdFcnJvcj4gZXJyb3I7CiAgICAgR1JlZlB0cjxHSW5wdXRTdHJlYW0+IGlucHV0U3RyZWFt
ID0gYWRvcHRHUmVmKHNvdXBfbXVsdGlwYXJ0X2lucHV0X3N0cmVhbV9uZXh0X3BhcnRfZmluaXNo
KG11bHRpcGFydElucHV0U3RyZWFtLCByZXN1bHQsICZlcnJvci5vdXRQdHIoKSkpOwogICAgIGlm
IChlcnJvcikKLSAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpodHRwRXJyb3Io
dGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCksIHRhc2stPm1fc291cFJlcXVl
c3QuZ2V0KCkpKTsKKyAgICAgICAgdGFzay0+ZGlkRmFpbChSZXNvdXJjZUVycm9yOjpodHRwRXJy
b3IodGFzay0+bV9zb3VwTWVzc2FnZS5nZXQoKSwgZXJyb3IuZ2V0KCkpKTsKICAgICBlbHNlIGlm
IChpbnB1dFN0cmVhbSkKICAgICAgICAgdGFzay0+ZGlkUmVxdWVzdE5leHRQYXJ0KFdURk1vdmUo
aW5wdXRTdHJlYW0pKTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9zb3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAppbmRleCA0ZWM4MDVjZWVlYWMu
LmNmZmExMjMyMDgwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9z
b3VwL05ldHdvcmtEYXRhVGFza1NvdXAuaAorKysgYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9j
ZXNzL3NvdXAvTmV0d29ya0RhdGFUYXNrU291cC5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSA8V2ViQ29yZS9SZXNvdXJjZVJlc3BvbnNlLmg+CiAjaW5jbHVkZSA8d3RmL1J1bkxvb3AuaD4K
ICNpbmNsdWRlIDx3dGYvZ2xpYi9HUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIApAQCAtNjMsNyArNjQsMTMgQEAgcHJpdmF0ZToK
ICAgICBlbnVtIGNsYXNzIFdhc0Jsb2NraW5nQ29va2llcyB7IE5vLCBZZXMgfTsKICAgICB2b2lk
IGNyZWF0ZVJlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0JiYsIFdhc0Jsb2NraW5nQ29v
a2llcyk7CiAgICAgdm9pZCBjbGVhclJlcXVlc3QoKTsKLSAgICBzdGF0aWMgdm9pZCBzZW5kUmVx
dWVzdENhbGxiYWNrKFNvdXBSZXF1ZXN0KiwgR0FzeW5jUmVzdWx0KiwgTmV0d29ya0RhdGFUYXNr
U291cCopOworCisgICAgc3RydWN0IFNlbmRSZXF1ZXN0RGF0YSB7CisgICAgICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICAgICAgR1JlZlB0cjxTb3VwTWVzc2FnZT4gc291
cE1lc3NhZ2U7CisgICAgICAgIFJlZlB0cjxOZXR3b3JrRGF0YVRhc2tTb3VwPiB0YXNrOworICAg
IH07CisgICAgc3RhdGljIHZvaWQgc2VuZFJlcXVlc3RDYWxsYmFjayhTb3VwU2Vzc2lvbiosIEdB
c3luY1Jlc3VsdCosIFNlbmRSZXF1ZXN0RGF0YSopOwogICAgIHZvaWQgZGlkU2VuZFJlcXVlc3Qo
R1JlZlB0cjxHSW5wdXRTdHJlYW0+JiYpOwogICAgIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlUmVz
cG9uc2UoKTsKICAgICB2b2lkIGRpc3BhdGNoRGlkQ29tcGxldGVXaXRoRXJyb3IoY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VFcnJvciYpOwpAQCAtNzEsNiArNzgsOSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBnYm9vbGVhbiB0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNhdGVDYWxsYmFjayhHVGxz
Q29ubmVjdGlvbiosIEdUbHNDZXJ0aWZpY2F0ZSosIEdUbHNDZXJ0aWZpY2F0ZUZsYWdzLCBOZXR3
b3JrRGF0YVRhc2tTb3VwKik7CiAgICAgYm9vbCB0bHNDb25uZWN0aW9uQWNjZXB0Q2VydGlmaWNh
dGUoR1Rsc0NlcnRpZmljYXRlKiwgR1Rsc0NlcnRpZmljYXRlRmxhZ3MpOwogCisgICAgc3RhdGlj
IHZvaWQgZGlkU25pZmZDb250ZW50Q2FsbGJhY2soU291cE1lc3NhZ2UqLCBjb25zdCBjaGFyKiBj
b250ZW50VHlwZSwgR0hhc2hUYWJsZSogcGFyYW1ldGVycywgTmV0d29ya0RhdGFUYXNrU291cCop
OworICAgIHZvaWQgZGlkU25pZmZDb250ZW50KENTdHJpbmcmJik7CisKICAgICBib29sIHBlcnNp
c3RlbnRDcmVkZW50aWFsU3RvcmFnZUVuYWJsZWQoKSBjb25zdDsKICAgICB2b2lkIGFwcGx5QXV0
aGVudGljYXRpb25Ub1JlcXVlc3QoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Jik7CiAgICAgc3Rh
dGljIHZvaWQgYXV0aGVudGljYXRlQ2FsbGJhY2soU291cFNlc3Npb24qLCBTb3VwTWVzc2FnZSos
IFNvdXBBdXRoKiwgZ2Jvb2xlYW4gcmV0cnlpbmcsIE5ldHdvcmtEYXRhVGFza1NvdXAqKTsKQEAg
LTEzNiw3ICsxNDYsNiBAQCBwcml2YXRlOgogICAgIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIG1f
cGFnZUlEOwogICAgIFN0YXRlIG1fc3RhdGUgeyBTdGF0ZTo6U3VzcGVuZGVkIH07CiAgICAgV2Vi
Q29yZTo6Q29udGVudFNuaWZmaW5nUG9saWN5IG1fc2hvdWxkQ29udGVudFNuaWZmOwotICAgIEdS
ZWZQdHI8U291cFJlcXVlc3Q+IG1fc291cFJlcXVlc3Q7CiAgICAgR1JlZlB0cjxTb3VwTWVzc2Fn
ZT4gbV9zb3VwTWVzc2FnZTsKICAgICBHUmVmUHRyPEdGaWxlPiBtX2ZpbGU7CiAgICAgR1JlZlB0
cjxHSW5wdXRTdHJlYW0+IG1faW5wdXRTdHJlYW07CkBAIC0xNDcsNiArMTU2LDcgQEAgcHJpdmF0
ZToKICAgICBXZWJDb3JlOjpDcmVkZW50aWFsIG1fY3JlZGVudGlhbEZvclBlcnNpc3RlbnRTdG9y
YWdlOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCBtX2N1cnJlbnRSZXF1ZXN0OwogICAg
IFdlYkNvcmU6OlJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBDU3RyaW5nIG1fc25p
ZmZlZENvbnRlbnRUeXBlOwogICAgIFZlY3RvcjxjaGFyPiBtX3JlYWRCdWZmZXI7CiAgICAgdW5z
aWduZWQgbV9yZWRpcmVjdENvdW50IHsgMCB9OwogICAgIHVpbnQ2NF90IG1fYm9keURhdGFUb3Rh
bEJ5dGVzU2VudCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRXZWJQYWdlLmNwcAppbmRl
eCA5OTRhYzQwOTM5YTYuLmU5MTVhMGMzY2NjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9nbGliL1dlYktpdFdlYlBhZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ2xpYi9XZWJLaXRX
ZWJQYWdlLmNwcApAQCAtMjUyLDcgKzI1Miw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KIAogICAg
ICAgICB3ZWJraXRVUklSZXF1ZXN0R2V0UmVzb3VyY2VSZXF1ZXN0KHJlcXVlc3QuZ2V0KCksIHJl
c291cmNlUmVxdWVzdCk7Ci0gICAgICAgIHJlc291cmNlUmVxdWVzdC5zZXRJbml0aWF0aW5nUGFn
ZUlEKHBhZ2Uud2ViUGFnZVByb3h5SWRlbnRpZmllcigpLnRvVUludDY0KCkpOwogCiAgICAgICAg
IEFQSTo6RGljdGlvbmFyeTo6TWFwVHlwZSBtZXNzYWdlOwogICAgICAgICBtZXNzYWdlLnNldChT
dHJpbmc6OmZyb21VVEY4KCJQYWdlIiksICZwYWdlKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>