<?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>35572</bug_id>
          
          <creation_ts>2010-03-02 03:17:06 -0800</creation_ts>
          <short_desc>WebSocket handshake incompatible change in draft-hixie-thewebsocketprotocol-76</short_desc>
          <delta_ts>2010-05-20 20:07:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>35721</dependson>
    
    <dependson>37913</dependson>
    
    <dependson>38034</dependson>
          <blocked>38728</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fumitoshi Ukai">ukai</reporter>
          <assigned_to name="Fumitoshi Ukai">ukai</assigned_to>
          <cc>ap</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>gustavo</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>yutak</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195011</commentid>
    <comment_count>0</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-03-02 03:17:06 -0800</bug_when>
    <thetext>WebSocket protocol will introduce incompatible change in its handshake, 
http://lists.whatwg.org/pipermail/commit-watchers-whatwg.org/2010/003973.html

major changes seems the following:

new header in request:
 - Sec-WebSocket-*

change in response status line
  - HTTP/1.1 101 WebSocket Protocol Handshake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195867</commentid>
    <comment_count>1</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-03-03 19:47:54 -0800</bug_when>
    <thetext>Announced on the hybi
http://www.ietf.org/mail-archive/web/hybi/current/msg01526.html

(In reply to comment #0)
&gt; WebSocket protocol will introduce incompatible change in its handshake, 
&gt; http://lists.whatwg.org/pipermail/commit-watchers-whatwg.org/2010/003973.html
&gt; 
&gt; major changes seems the following:
&gt; 
&gt; new header in request:
&gt;  - Sec-WebSocket-*
&gt; 
&gt; change in response status line
&gt;   - HTTP/1.1 101 WebSocket Protocol Handshake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216473</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-23 10:54:01 -0700</bug_when>
    <thetext>&lt;rdar://problem/7900015&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216922</commentid>
    <comment_count>3</comment_count>
      <attachid>54262</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-26 00:02:35 -0700</bug_when>
    <thetext>Created attachment 54262
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216923</commentid>
    <comment_count>4</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-04-26 00:07:43 -0700</bug_when>
    <thetext>Attachment 54262 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/1815131</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216926</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-26 00:13:28 -0700</bug_when>
    <thetext>Attachment 54262 did not build on gtk:
Build output: http://webkit-commit-queue.appspot.com/results/1840104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>216927</commentid>
    <comment_count>6</comment_count>
      <attachid>54264</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-04-26 00:13:38 -0700</bug_when>
    <thetext>Created attachment 54264
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>220178</commentid>
    <comment_count>7</comment_count>
      <attachid>54264</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-03 10:42:36 -0700</bug_when>
    <thetext>Comment on attachment 54264
Patch

+
+#include &lt;algorithm&gt;
+

No need for the empty lines. But you probably don&apos;t need this header file, see below.

+    for (p = header, lineLength = 0; p - header &lt; len; p++, lineLength++) {

I think that it would be slightly better to zero out lineLength before the loop. Now it misleadingly looks like a loop variable.

+static String hostName(const KURL&amp; url, bool secure)

Since this is a separate function now, perhaps we should ASSERT that secure flag matches url scheme here.

+    uint32_t space = static_cast&lt;uint32_t&gt;(WTF::randomNumber() * 12) + 1;

RandomNumber.h needs using directives - we do that for all WTF symbols that are exposed for use outside of WTF. This can be done in a later patch.

I didn&apos;t study the key generation algorithms in detail. How did you test them? Do examples from the spec pass?

+    String randomChars(randomCharacterInSecWebSocketKey);

It seems wasteful to construct this string from a buffer each time.

+    Vector&lt;uint8_t, 16&gt; digest = md5.checksum();

I don&apos;t understand why checksum() returns the result by value. It should probably take a reference to output (not something to do in this patch).

+    std::random_shuffle(fields.begin(), fields.end());

We prefer to have &quot;using namespace std&quot; at the top of the .cpp file. But also, I don&apos;t think that we should be randomizing the order here. This makes no sense to me, and the spec doesn&apos;t seem to require that (it says &quot;Fields in the handshake are sent by the client in a random order; the order is not meaningful.&quot; - which I interpret as allowing arbitrary order).

+    // TODO(ukai): key1,2,3

We use FIXME, not TODO. I don&apos;t understand this comment, did you mean to address it before submitting the patch?

+        unsigned char m_challengeResponseExpected[16];

Should it be &quot;m_expectedChallengeResponse&quot; for better grammar?

+    for (size_t i = 0; i &lt; fields.size(); i++)
+        builder.append(fields[i] + &quot;\r\n&quot;);

Seems better to append() these separately - that&apos;s what StringBuilder is for.

+bool WebSocketHandshake::checkResponseHeaders()
 {
     ASSERT(m_mode == Normal);
     m_mode = Failed;
...
-    m_mode = Connected;
-    return;
+    return true;
 }

I don&apos;t understand how this function works - it now always sets m_mode to Failed, but it also returns a boolean. What is the relationship between these?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221539</commentid>
    <comment_count>8</comment_count>
      <attachid>55209</attachid>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-06 00:38:30 -0700</bug_when>
    <thetext>Created attachment 55209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221544</commentid>
    <comment_count>9</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-06 00:56:17 -0700</bug_when>
    <thetext>Thanks for review.

(In reply to comment #7)
&gt; (From update of attachment 54264 [details])
&gt; +
&gt; +#include &lt;algorithm&gt;
&gt; +
&gt; 
&gt; No need for the empty lines. But you probably don&apos;t need this header file, see
&gt; below.

Hmm, I see. we don&apos;t need it. Removed.


&gt; +    uint32_t space = static_cast&lt;uint32_t&gt;(WTF::randomNumber() * 12) + 1;
&gt; 
&gt; RandomNumber.h needs using directives - we do that for all WTF symbols that are
&gt; exposed for use outside of WTF. This can be done in a later patch.

Ok, I&apos;ll address this in another patch. just add FIXME now.
 
&gt; I didn&apos;t study the key generation algorithms in detail. How did you test them?

This is straightforward implementation as spec describes.
I captured request/response and looked random string in request and correctly match response data with expected data.

&gt; Do examples from the spec pass?

I think so.
&gt; 
&gt; +    String randomChars(randomCharacterInSecWebSocketKey);
&gt; 
&gt; It seems wasteful to construct this string from a buffer each time.

Make it DEFINE_STATIC_LOCAL.

 
&gt; +    Vector&lt;uint8_t, 16&gt; digest = md5.checksum();
&gt; 
&gt; I don&apos;t understand why checksum() returns the result by value. It should
&gt; probably take a reference to output (not something to do in this patch).

The interface was suggested by Maciej.
Just added FIXME to fix the interface to take a reference to output.

&gt; 
&gt; +    std::random_shuffle(fields.begin(), fields.end());
&gt; 
&gt; We prefer to have &quot;using namespace std&quot; at the top of the .cpp file. But also,
&gt; I don&apos;t think that we should be randomizing the order here. This makes no sense
&gt; to me, and the spec doesn&apos;t seem to require that (it says &quot;Fields in the
&gt; handshake are sent by the client in a random order; the order is not
&gt; meaningful.&quot; - which I interpret as allowing arbitrary order).

I see.  Removed random_shuffle and add comment we don&apos;t need to shuffle here.

&gt; 
&gt; +    // TODO(ukai): key1,2,3
&gt; 
&gt; We use FIXME, not TODO. I don&apos;t understand this comment, did you mean to
&gt; address it before submitting the patch?

Ah, I just wondered we need to pass m_secWebSocketKey{1,2}, m_key3 to WebSocketHandshakeReqeust.

 
&gt; 
&gt; +bool WebSocketHandshake::checkResponseHeaders()
&gt;  {
&gt;      ASSERT(m_mode == Normal);
&gt;      m_mode = Failed;
&gt; ...
&gt; -    m_mode = Connected;
&gt; -    return;
&gt; +    return true;
&gt;  }
&gt; 
&gt; I don&apos;t understand how this function works - it now always sets m_mode to
&gt; Failed, but it also returns a boolean. What is the relationship between these?

I tried to change m_mode transition in readServerHandshake() and make checkResponseHeaders() only checks whether headers are valid or not and returns the result as boolean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>221962</commentid>
    <comment_count>10</comment_count>
      <attachid>55209</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-06 14:14:16 -0700</bug_when>
    <thetext>Comment on attachment 55209
Patch

+    // FIXME: using WTF in RandomNumber.h

This comment will be hard to understand for someone who didn&apos;t follow our discussion here. If you are going to address this soon, it would be best to just omit it.

It&apos;s not important enough to disrupt someone reading this code in the way a FIXME does.

+    // FIXME: md5.checksum() should take a reference to output instead of returning the result by value.

Also, this is probably not a good place to complain about MD5 methods - MD5.h would be such a place if we wanted to keep this unfixed for a long time.

+    DEFINE_STATIC_LOCAL(String, spaceChar, (&quot; &quot;));

There is no need to make a string for this - there is a version of insert() that takes a UChar.

+static void generateChallengeResponseExpected(uint32_t number1, uint32_t number2, unsigned char key3[8], unsigned char challengeResponseExpected[16])
+{
+    unsigned char challenge[16];
+    setChallengeNumber(&amp;challenge[0], number1);
+    setChallengeNumber(&amp;challenge[4], number2);
+    memcpy(&amp;challenge[8], key3, 8);
+    MD5 md5;
+    md5.addBytes(challenge, sizeof(challenge));
+    // FIXME: md5.checksum() should take a reference to output instead of returning the result by value.
+    Vector&lt;uint8_t, 16&gt; digest = md5.checksum();
+    memcpy(challengeResponseExpected, digest.data(), 16);
+}

This also needs a grammar fix (responseExpected-&gt;expectedResponse).

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228718</commentid>
    <comment_count>11</comment_count>
    <who name="Fumitoshi Ukai">ukai</who>
    <bug_when>2010-05-20 20:07:03 -0700</bug_when>
    <thetext>Committed r59903: &lt;http://trac.webkit.org/changeset/59903&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54262</attachid>
            <date>2010-04-26 00:02:35 -0700</date>
            <delta_ts>2010-04-26 00:13:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35572-20100426160233.patch</filename>
            <type>text/plain</type>
            <size>23544</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NWZhMjE0Li42MjRhYTQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQt
MjUgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBpbmNv
bXBhdGlibGUgY2hhbmdlIGluIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc2Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU3MgorCisg
ICAgICAgIEZpeCBMYXlvdXRUZXN0cyBmb3IgbmV3IFdlYlNvY2tldCBwcm90b2NvbC4KKyAgICAg
ICAgSXQgcmVxdWlyZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4
MDM0IHRvIHBhc3Mgd2Vic29ja2V0IHRlc3RzLgorCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L2hhbmRzaGFrZS1lcnJvci1leHBlY3RlZC50eHQ6IFVwZGF0ZSBleHBlY3RlZCBkYXRhLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5OiBXaXRob3V0IENS
TEYsIHRoZSB3c2ggd2lsbCBzZW5kcyAiVGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVycm9ySFRUUC8x
LjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuIiwgd2hpY2ggaXMgbGVnYWwg
Zm9yIHRoZSBmaXJzdCBsaW5lIG9mIGRyYWZ0IDc2IFdlYlNvY2tldCBvcGVuaW5nIGhhbmRzaGFr
ZS4gKDQuMSBPcGVuaW5nIEhhbmRzaGFrZS4gc3RlcCAyOCB0byAzMCkuICBUbyBmYWlsIGhhbmRz
aGFrZSwgaXQgbmVlZHMgXHJcbi4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvbG9uZy1pbnZh
bGlkLWhlYWRlci1leHBlY3RlZC50eHQ6IE9yaWdpbmFsbHksIGl0IGV4cGVjdHMgVXBncmFkZSBo
ZWFkZXIgYWZ0ZXIgc3RhdHVzIGxpbmUuICBJbiBkcmFmdCA3Niwgb3JkZXIgaXMgbm90IGltcG9y
dGFudC4gIEJ1dCAicHBwcC4uXHJcbiIgd291bGQgZmFpbCBiZWNhdXNlIGl0IG1pc3NlcyAiOiIg
KGVuZCBvZiBuYW1lKSwgYmVmb3JlIFxyLgorCiAyMDEwLTA0LTI1ICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLCB0cnlpbmcgdG8gZ2V0IHRo
ZSBjaHJvbWl1bSBib3RzIGdyZWVuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hhbmRzaGFrZS1lcnJvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaGFuZHNoYWtlLWVycm9yLWV4cGVjdGVkLnR4dAppbmRleCBlMWYxMDM3Li5lN2Rj
Y2ZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWVy
cm9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNo
YWtlLWVycm9yLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTog
bGluZSAwOiBVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGU6MTAxCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMDogTm8gcmVzcG9uc2UgY29kZSBmb3VuZDogVGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVycm9y
DQogSGFuZHNoYWtlIGVycm9yIHRlc3QKIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1lcnJvcl93c2gu
cHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQpp
bmRleCBjNjdkM2E0Li5jODUxZmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQpAQCAtMzEsNyArMzEsNyBAQCBmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAogCiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hh
bmRzaGFrZShyZXF1ZXN0KToKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1RoaXNXaWxs
Q2F1c2VIYW5kc2hha2VFcnJvcicpCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdUaGlz
V2lsbENhdXNlSGFuZHNoYWtlRXJyb3JcclxuJykKIAogCiBkZWYgd2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhKHJlcXVlc3QpOgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0CmluZGV4IDM1OWQyNjcuLjg0
NWI5ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9sb25nLWludmFs
aWQtaGVhZGVyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
bG9uZy1pbnZhbGlkLWhlYWRlci1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACi1DT05TT0xF
IE1FU1NBR0U6IGxpbmUgMDogQmFkIFVwZ3JhZGUgaGVhZGVyOiBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcC4uLgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFVuZXhwZWN0ZWQgQ1IgaW4gbmFtZSBhdCBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcC4uLgogTWFrZSBzdXJlIFdlYlNvY2tldCBnaXZlcyBlcnJvcnMgb24gbG9uZyBpbnZh
bGlkIHVwZ3JhZGUgaGVhZGVyLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUzMjlmYzIu
LjVlMmQ0NzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDQtMjUgIEZ1bWl0b3NoaSBVa2FpICA8dWth
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBpbmNvbXBhdGlibGUgY2hhbmdlIGluIGRyYWZ0
LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU3MgorCisgICAgICAgIFdlYlNvY2tldCBvcGVuaW5n
IGhhbmRzaGFrZSBpcyBjaGFuZ2VkLiAgTmV3IHByb3RvY29sIGRyYWZ0IGNvdWxkIGJlIGZvdW5k
IGF0IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItc29ja2V0LXByb3RvY29sLworICAg
ICAgICBJdCByZXF1aXJlcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzgwMzQgdG8gcGFzcyB3ZWJzb2NrZXQgdGVzdHMuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0UmVzcG9uc2VD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Omhvc3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlS2V5Myk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDaGFsbGVuZ2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJhdGVDaGFsbGVuZ2VSZXNwb25zZUV4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRTZXJ2ZXJIYW5kc2hha2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkSFRUUEhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpwcm9jZXNzSGVhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9uc2VIZWFk
ZXJzKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oOgorCiAyMDEw
LTA0LTI1ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKaW5kZXggMTQ0OWM4OS4uMmM0NDExMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTQ0LDIyICs0NCwyNSBAQAogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIlN0cmluZ0J1aWxkZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisjaW5jbHVkZSA8d3Rm
L1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIgd2ViU29ja2V0U2VydmVySGFuZHNoYWtlSGVhZGVy
W10gPSAiSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbiI7Ci1j
b25zdCBjaGFyIHdlYlNvY2tldFVwZ3JhZGVIZWFkZXJbXSA9ICJVcGdyYWRlOiBXZWJTb2NrZXRc
clxuIjsKLWNvbnN0IGNoYXIgd2ViU29ja2V0Q29ubmVjdGlvbkhlYWRlcltdID0gIkNvbm5lY3Rp
b246IFVwZ3JhZGVcclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmRvbUNoYXJhY3RlckluU2Vj
V2ViU29ja2V0S2V5W10gPSAiIVwiIyQlJicoKSorLC0uLzo7PD0+P0BBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4iOwogCi1zdGF0
aWMgU3RyaW5nIGV4dHJhY3RSZXNwb25zZUNvZGUoY29uc3QgY2hhciogaGVhZGVyLCBpbnQgbGVu
KQorc3RhdGljIFN0cmluZyBleHRyYWN0UmVzcG9uc2VDb2RlKGNvbnN0IGNoYXIqIGhlYWRlciwg
aW50IGxlbiwgc2l6ZV90JiBsaW5lTGVuZ3RoKQogewogICAgIGNvbnN0IGNoYXIqIHNwYWNlMSA9
IDA7CiAgICAgY29uc3QgY2hhciogc3BhY2UyID0gMDsKICAgICBjb25zdCBjaGFyKiBwOwotICAg
IGZvciAocCA9IGhlYWRlcjsgcCAtIGhlYWRlciA8IGxlbjsgcCsrKSB7CisgICAgZm9yIChwID0g
aGVhZGVyLCBsaW5lTGVuZ3RoID0gMDsgcCAtIGhlYWRlciA8IGxlbjsgcCsrLCBsaW5lTGVuZ3Ro
KyspIHsKICAgICAgICAgaWYgKCpwID09ICcgJykgewogICAgICAgICAgICAgaWYgKCFzcGFjZTEp
CiAgICAgICAgICAgICAgICAgc3BhY2UxID0gcDsKQEAgLTg3LDYgKzkwLDE3IEBAIHN0YXRpYyBT
dHJpbmcgcmVzb3VyY2VOYW1lKGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4gbmFtZTsKIH0K
IAorc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBLVVJMJiB1cmwsIGJvb2wgc2VjdXJlKQor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9z
dCgpLmxvd2VyKCkpOworICAgIGlmICh1cmwucG9ydCgpICYmICgoIXNlY3VyZSAmJiB1cmwucG9y
dCgpICE9IDgwKSB8fCAoc2VjdXJlICYmIHVybC5wb3J0KCkgIT0gNDQzKSkpIHsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIjoiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIodXJsLnBvcnQoKSkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCiBzdGF0aWMgU3RyaW5nIHRyaW1Db25zb2xlTWVzc2FnZShjb25zdCBjaGFyKiBwLCBzaXpl
X3QgbGVuKQogewogICAgIFN0cmluZyBzID0gU3RyaW5nKHAsIHN0ZDo6bWluPHNpemVfdD4obGVu
LCAxMjgpKTsKQEAgLTk1LDYgKzEwOSw1NyBAQCBzdGF0aWMgU3RyaW5nIHRyaW1Db25zb2xlTWVz
c2FnZShjb25zdCBjaGFyKiBwLCBzaXplX3QgbGVuKQogICAgIHJldHVybiBzOwogfQogCitzdGF0
aWMgdm9pZCBnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSh1aW50MzImIG51bWJlciwgU3RyaW5nJiBr
ZXkpCit7CisgICAgdWludDMyIHNwYWNlID0gc3RhdGljX2Nhc3Q8dWludDMyPihXVEY6OnJhbmRv
bU51bWJlcigpICogMTIpICsgMTsKKyAgICB1aW50MzIgbWF4ID0gNDI5NDk2NzI5NVUgLyBzcGFj
ZTsKKyAgICBudW1iZXIgPSBzdGF0aWNfY2FzdDx1aW50MzI+KFdURjo6cmFuZG9tTnVtYmVyKCkg
KiBtYXgpOworICAgIHVpbnQzMiBwcm9kdWN0ID0gbnVtYmVyICogc3BhY2U7CisKKyAgICBTdHJp
bmcgcyA9IFN0cmluZzo6bnVtYmVyKHByb2R1Y3QpOworICAgIGludCBuID0gc3RhdGljX2Nhc3Q8
aW50PihXVEY6OnJhbmRvbU51bWJlcigpICogMTIpICsgMTsKKyAgICBTdHJpbmcgcmFuZG9tQ2hh
cnMocmFuZG9tQ2hhcmFjdGVySW5TZWNXZWJTb2NrZXRLZXkpOworICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGludCBwb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KFdURjo6
cmFuZG9tTnVtYmVyKCkgKiAocy5sZW5ndGgoKSArIDEpKTsKKyAgICAgICAgaW50IGNocG9zID0g
c3RhdGljX2Nhc3Q8aW50PihXVEY6OnJhbmRvbU51bWJlcigpICogcmFuZG9tQ2hhcnMubGVuZ3Ro
KCkpOworICAgICAgICBzLmluc2VydChyYW5kb21DaGFycy5zdWJzdHJpbmcoY2hwb3MsIDEpLCBw
b3MpOworICAgIH0KKyAgICBTdHJpbmcgc3BhY2VDaGFyKCIgIik7CisgICAgZm9yICh1aW50MzIg
aSA9IDA7IGkgPCBzcGFjZTsgaSsrKSB7CisgICAgICAgIGludCBwb3MgPSBzdGF0aWNfY2FzdDxp
bnQ+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiBzLmxlbmd0aCgpIC0gMSkgKyAxOworICAgICAgICBz
Lmluc2VydChzcGFjZUNoYXIsIHBvcyk7CisgICAgfQorICAgIGtleSA9IHM7Cit9CisKK3N0YXRp
YyB2b2lkIGdlbmVyYXRlS2V5Myh1bnNpZ25lZCBjaGFyIGtleTNbOF0pCit7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA4OyBpKyspCisgICAgICAgIGtleTNbaV0gPSBXVEY6OnJhbmRvbU51bWJl
cigpICogMjU2OworfQorCitzdGF0aWMgdm9pZCBzZXRDaGFsbGVuZ2VOdW1iZXIodW5zaWduZWQg
Y2hhciogYnVmLCB1aW50MzIgbnVtYmVyKQoreworICAgIHVuc2lnbmVkIGNoYXIqIHAgPSBidWYg
KyAzOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICpwID0gbnVt
YmVyICYgMHhGRjsKKyAgICAgICAgLS1wOworICAgICAgICBudW1iZXIgPj49IDg7CisgICAgfQor
fQorCitzdGF0aWMgdm9pZCBnZW5lcmF0ZUNoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWQodWludDMy
IG51bWJlcjEsIHVpbnQzMiBudW1iZXIyLCB1bnNpZ25lZCBjaGFyIGtleTNbOF0sIHVuc2lnbmVk
IGNoYXIgY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZFsxNl0pCit7CisgICAgdW5zaWduZWQgY2hh
ciBjaGFsbGVuZ2VbMTZdOworICAgIHNldENoYWxsZW5nZU51bWJlcigmY2hhbGxlbmdlWzBdLCBu
dW1iZXIxKTsKKyAgICBzZXRDaGFsbGVuZ2VOdW1iZXIoJmNoYWxsZW5nZVs0XSwgbnVtYmVyMik7
CisgICAgbWVtY3B5KCZjaGFsbGVuZ2VbOF0sIGtleTMsIDgpOworICAgIE1ENSBtZDU7CisgICAg
bWQ1LmFkZEJ5dGVzKGNoYWxsZW5nZSwgc2l6ZW9mKGNoYWxsZW5nZSkpOworICAgIFZlY3Rvcjx1
aW50OF90LCAxNj4gZGlnZXN0ID0gbWQ1LmNoZWNrc3VtKCk7CisgICAgbWVtY3B5KGNoYWxsZW5n
ZVJlc3BvbnNlRXhwZWN0ZWQsIGRpZ2VzdC5kYXRhKCksIDE2KTsKK30KKwogV2ViU29ja2V0SGFu
ZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcm
IHByb3RvY29sLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgIDogbV91cmwo
dXJsKQogICAgICwgbV9jbGllbnRQcm90b2NvbChwcm90b2NvbCkKQEAgLTEwMiw2ICsxNjcsMTIg
QEAgV2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHByb3RvY29sLAogICAgICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAg
LCBtX21vZGUoSW5jb21wbGV0ZSkKIHsKKyAgICB1aW50MzIgbnVtYmVyMTsKKyAgICB1aW50MzIg
bnVtYmVyMjsKKyAgICBnZW5lcmF0ZVNlY1dlYlNvY2tldEtleShudW1iZXIxLCBtX3NlY1dlYlNv
Y2tldEtleTEpOworICAgIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KG51bWJlcjIsIG1fc2VjV2Vi
U29ja2V0S2V5Mik7CisgICAgZ2VuZXJhdGVLZXkzKG1fa2V5Myk7CisgICAgZ2VuZXJhdGVDaGFs
bGVuZ2VSZXNwb25zZUV4cGVjdGVkKG51bWJlcjEsIG51bWJlcjIsIG1fa2V5MywgbV9jaGFsbGVu
Z2VSZXNwb25zZUV4cGVjdGVkKTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjp+V2ViU29ja2V0
SGFuZHNoYWtlKCkKQEAgLTE0OCwxMyArMjE5LDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFr
ZTo6Y2xpZW50TG9jYXRpb24oKSBjb25zdAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAg
ICBidWlsZGVyLmFwcGVuZChtX3NlY3VyZSA/ICJ3c3MiIDogIndzIik7CiAgICAgYnVpbGRlci5h
cHBlbmQoIjovLyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1fdXJsLmhvc3QoKS5sb3dlcigpKTsK
LSAgICBpZiAobV91cmwucG9ydCgpKSB7Ci0gICAgICAgIGlmICgoIW1fc2VjdXJlICYmIG1fdXJs
LnBvcnQoKSAhPSA4MCkgfHwgKG1fc2VjdXJlICYmIG1fdXJsLnBvcnQoKSAhPSA0NDMpKSB7Ci0g
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAg
YnVpbGRlci5hcHBlbmQoaG9zdE5hbWUobV91cmwsIG1fc2VjdXJlKSk7CiAgICAgYnVpbGRlci5h
cHBlbmQocmVzb3VyY2VOYW1lKG1fdXJsKSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmco
KTsKIH0KQEAgLTE2Nyw0MyArMjMyLDQ2IEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpj
bGllbnRIYW5kc2hha2VNZXNzYWdlKCkgY29uc3QKICAgICBidWlsZGVyLmFwcGVuZCgiR0VUICIp
OwogICAgIGJ1aWxkZXIuYXBwZW5kKHJlc291cmNlTmFtZShtX3VybCkpOwogICAgIGJ1aWxkZXIu
YXBwZW5kKCIgSFRUUC8xLjFcclxuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlVwZ3JhZGU6IFdl
YlNvY2tldFxyXG4iKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiQ29ubmVjdGlvbjogVXBncmFkZVxy
XG4iKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiSG9zdDogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQo
bV91cmwuaG9zdCgpLmxvd2VyKCkpOwotICAgIGlmIChtX3VybC5wb3J0KCkgJiYgKCghbV9zZWN1
cmUgJiYgbV91cmwucG9ydCgpICE9IDgwKSB8fCAobV9zZWN1cmUgJiYgbV91cmwucG9ydCgpICE9
IDQ0MykpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI6Iik7Ci0gICAgICAgIGJ1aWxkZXIu
YXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBidWlsZGVy
LmFwcGVuZCgiXHJcbiIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJPcmlnaW46ICIpOwotICAgIGJ1
aWxkZXIuYXBwZW5kKGNsaWVudE9yaWdpbigpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIp
OwotICAgIGlmICghbV9jbGllbnRQcm90b2NvbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIldlYlNvY2tldC1Qcm90b2NvbDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KG1fY2xpZW50UHJvdG9jb2wpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAg
IH0KKworICAgIFZlY3RvcjxTdHJpbmc+IGZpZWxkczsKKyAgICBmaWVsZHMuYXBwZW5kKCJVcGdy
YWRlOiBXZWJTb2NrZXQiKTsKKyAgICBmaWVsZHMuYXBwZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRl
Iik7CisgICAgZmllbGRzLmFwcGVuZCgiSG9zdDogIiArIGhvc3ROYW1lKG1fdXJsLCBtX3NlY3Vy
ZSkpOworICAgIGZpZWxkcy5hcHBlbmQoIk9yaWdpbjogIiArIGNsaWVudE9yaWdpbigpKTsKKyAg
ICBpZiAoIW1fY2xpZW50UHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAgICBmaWVsZHMuYXBwZW5k
KCJTZWMtV2ViU29ja2V0LVByb3RvY29sOiAiICsgbV9jbGllbnRQcm90b2NvbCk7CiAKICAgICBL
VVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAo
bV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0g
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwogICAgICAgICBTdHJpbmcgY29va2ll
ID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7Ci0gICAgICAg
IGlmICghY29va2llLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIkNv
b2tpZTogIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjb29raWUpOwotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWNvb2tp
ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCJDb29raWU6ICIgKyBjb29r
aWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhp
c3RzIGZvciB1cmw/CiAgICAgfQogCisgICAgZmllbGRzLmFwcGVuZCgiU2VjLVdlYlNvY2tldC1L
ZXkxOiAiICsgbV9zZWNXZWJTb2NrZXRLZXkxKTsKKyAgICBmaWVsZHMuYXBwZW5kKCJTZWMtV2Vi
U29ja2V0LUtleTI6ICIgKyBtX3NlY1dlYlNvY2tldEtleTIpOworCisgICAgc3RkOjpyYW5kb21f
c2h1ZmZsZShmaWVsZHMuYmVnaW4oKSwgZmllbGRzLmVuZCgpKTsKKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQorICAgICAgICBidWlsZGVyLmFwcGVuZChm
aWVsZHNbaV0gKyAiXHJcbiIpOworCiAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKLSAgICBy
ZXR1cm4gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKworICAgIENTdHJpbmcgaGFuZHNoYWtl
SGVhZGVyID0gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsKKyAgICBjaGFyKiBjaGFyYWN0ZXJC
dWZmZXIgPSAwOworICAgIENTdHJpbmcgbXNnID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZCho
YW5kc2hha2VIZWFkZXIubGVuZ3RoKCkgKyBzaXplb2YobV9rZXkzKSwgY2hhcmFjdGVyQnVmZmVy
KTsKKyAgICBtZW1jcHkoY2hhcmFjdGVyQnVmZmVyLCBoYW5kc2hha2VIZWFkZXIuZGF0YSgpLCBo
YW5kc2hha2VIZWFkZXIubGVuZ3RoKCkpOworICAgIG1lbWNweShjaGFyYWN0ZXJCdWZmZXIgKyBo
YW5kc2hha2VIZWFkZXIubGVuZ3RoKCksIG1fa2V5Mywgc2l6ZW9mKG1fa2V5MykpOworICAgIHJl
dHVybiBtc2c7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QgV2ViU29ja2V0SGFuZHNo
YWtlOjpjbGllbnRIYW5kc2hha2VSZXF1ZXN0KCkgY29uc3QKIHsKICAgICAvLyBLZWVwIHRoZSBm
b2xsb3dpbmcgY29uc2lzdGVudCB3aXRoIGNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKS4KKyAgICAv
LyBUT0RPKHVrYWkpOiBrZXkxLDIsMwogICAgIFdlYlNvY2tldEhhbmRzaGFrZVJlcXVlc3QgcmVx
dWVzdChtX3VybCwgY2xpZW50T3JpZ2luKCksIG1fY2xpZW50UHJvdG9jb2wpOwogCiAgICAgS1VS
TCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25BbmRDb29raWVzKCk7CkBAIC0yMzcsODkg
KzMwNSw1NSBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xlYXJTY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkKIGludCBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRTZXJ2ZXJIYW5kc2hha2UoY29u
c3QgY2hhciogaGVhZGVyLCBzaXplX3QgbGVuKQogewogICAgIG1fbW9kZSA9IEluY29tcGxldGU7
Ci0gICAgaWYgKGxlbiA8IHNpemVvZih3ZWJTb2NrZXRTZXJ2ZXJIYW5kc2hha2VIZWFkZXIpIC0g
MSkgewotICAgICAgICAvLyBKdXN0IGhhc24ndCBiZWVuIHJlY2VpdmVkIGZ1bGx5IHlldC4KKyAg
ICBzaXplX3QgbGluZUxlbmd0aDsKKyAgICBjb25zdCBTdHJpbmcmIGNvZGUgPSBleHRyYWN0UmVz
cG9uc2VDb2RlKGhlYWRlciwgbGVuLCBsaW5lTGVuZ3RoKTsKKyAgICBpZiAoY29kZS5pc051bGwo
KSkgeworICAgICAgICAvLyBKdXN0IGhhc24ndCBiZWVuIHJlY2VpdmVkIHlldC4KICAgICAgICAg
cmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoIW1lbWNtcChoZWFkZXIsIHdlYlNvY2tldFNlcnZl
ckhhbmRzaGFrZUhlYWRlciwgc2l6ZW9mKHdlYlNvY2tldFNlcnZlckhhbmRzaGFrZUhlYWRlcikg
LSAxKSkKLSAgICAgICAgbV9tb2RlID0gTm9ybWFsOwotICAgIGVsc2UgewotICAgICAgICBjb25z
dCBTdHJpbmcmIGNvZGUgPSBleHRyYWN0UmVzcG9uc2VDb2RlKGhlYWRlciwgbGVuKTsKLSAgICAg
ICAgaWYgKGNvZGUuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2Fn
ZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlNo
b3J0IHNlcnZlciBoYW5kc2hha2U6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UoaGVhZGVyLCBsZW4p
LCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGNvZGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX21vZGUgPSBGYWls
ZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJObyByZXNwb25zZSBjb2RlIGZvdW5k
OiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwgbGVuKSwgMCwgY2xpZW50T3JpZ2luKCkp
OwotICAgICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgfQotICAgICAgICBMT0coTmV0d29y
aywgInJlc3BvbnNlIGNvZGU6ICVzIiwgY29kZS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgaWYg
KGNvZGUgPT0gIjQwMSIpIHsKLSAgICAgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIkF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkLCBidXQgbm90IGlt
cGxlbWVudGVkIHlldC4iLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm4g
bGVuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9tb2RlID0gRmFpbGVkOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5leHBlY3RlZCByZXNwb25zZSBjb2RlOiIgKyBj
b2RlLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAg
ICB9CisgICAgaWYgKGNvZGUuaXNFbXB0eSgpKSB7CisgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsK
KyAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2Fn
ZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiTm8gcmVzcG9uc2UgY29kZSBmb3VuZDogIiArIHRy
aW1Db25zb2xlTWVzc2FnZShoZWFkZXIsIGxpbmVMZW5ndGgpLCAwLCBjbGllbnRPcmlnaW4oKSk7
CisgICAgICAgIHJldHVybiBsZW47CiAgICAgfQotICAgIGNvbnN0IGNoYXIqIHAgPSBoZWFkZXIg
KyBzaXplb2Yod2ViU29ja2V0U2VydmVySGFuZHNoYWtlSGVhZGVyKSAtIDE7Ci0gICAgY29uc3Qg
Y2hhciogZW5kID0gaGVhZGVyICsgbGVuOwotCi0gICAgaWYgKG1fbW9kZSA9PSBOb3JtYWwpIHsK
LSAgICAgICAgc2l6ZV90IGhlYWRlclNpemUgPSBlbmQgLSBwOwotICAgICAgICBpZiAoaGVhZGVy
U2l6ZSA8IHNpemVvZih3ZWJTb2NrZXRVcGdyYWRlSGVhZGVyKSAtIDEpIHsKLSAgICAgICAgICAg
IG1fbW9kZSA9IEluY29tcGxldGU7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
ICAgICAgICBpZiAobWVtY21wKHAsIHdlYlNvY2tldFVwZ3JhZGVIZWFkZXIsIHNpemVvZih3ZWJT
b2NrZXRVcGdyYWRlSGVhZGVyKSAtIDEpKSB7Ci0gICAgICAgICAgICBtX21vZGUgPSBGYWlsZWQ7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dN
ZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJCYWQgVXBncmFkZSBoZWFkZXI6ICIgKyB0
cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAg
ICAgICAgIHJldHVybiBwIC0gaGVhZGVyICsgc2l6ZW9mKHdlYlNvY2tldFVwZ3JhZGVIZWFkZXIp
IC0gMTsKLSAgICAgICAgfQotICAgICAgICBwICs9IHNpemVvZih3ZWJTb2NrZXRVcGdyYWRlSGVh
ZGVyKSAtIDE7Ci0KLSAgICAgICAgaGVhZGVyU2l6ZSA9IGVuZCAtIHA7Ci0gICAgICAgIGlmICho
ZWFkZXJTaXplIDwgc2l6ZW9mKHdlYlNvY2tldENvbm5lY3Rpb25IZWFkZXIpIC0gMSkgewotICAg
ICAgICAgICAgbV9tb2RlID0gSW5jb21wbGV0ZTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAobWVtY21wKHAsIHdlYlNvY2tldENvbm5lY3Rpb25IZWFkZXIs
IHNpemVvZih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVyKSAtIDEpKSB7Ci0gICAgICAgICAgICBt
X21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJCYWQgQ29ubmVj
dGlvbiBoZWFkZXI6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVu
dE9yaWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybiBwIC0gaGVhZGVyICsgc2l6ZW9mKHdlYlNv
Y2tldENvbm5lY3Rpb25IZWFkZXIpIC0gMTsKLSAgICAgICAgfQotICAgICAgICBwICs9IHNpemVv
Zih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVyKSAtIDE7CisgICAgTE9HKE5ldHdvcmssICJyZXNw
b25zZSBjb2RlOiAlcyIsIGNvZGUudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKGNvZGUgIT0gIjEw
MSIpIHsKKyAgICAgICAgbV9tb2RlID0gRmFpbGVkOworICAgICAgICBtX2NvbnRleHQtPmFkZE1l
c3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWws
ICJVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGU6IiArIGNvZGUsIDAsIGNsaWVudE9yaWdpbigpKTsK
KyAgICAgICAgcmV0dXJuIGxlbjsKICAgICB9Ci0KLSAgICBpZiAoIXN0cm5zdHIocCwgIlxyXG5c
clxuIiwgZW5kIC0gcCkpIHsKKyAgICBtX21vZGUgPSBOb3JtYWw7CisgICAgaWYgKCFzdHJuc3Ry
KGhlYWRlciwgIlxyXG5cclxuIiwgbGVuKSkgewogICAgICAgICAvLyBKdXN0IGhhc24ndCBiZWVu
IHJlY2VpdmVkIGZ1bGx5IHlldC4KICAgICAgICAgbV9tb2RlID0gSW5jb21wbGV0ZTsKICAgICAg
ICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBIVFRQSGVhZGVyTWFwIGhlYWRlcnM7Ci0gICAgcCA9
IHJlYWRIVFRQSGVhZGVycyhwLCBlbmQsICZoZWFkZXJzKTsKKyAgICBjb25zdCBjaGFyKiBoZWFk
ZXJGaWVsZHMgPSBzdHJuc3RyKGhlYWRlciwgIlxyXG4iLCBsZW4pOyAvLyBza2lwIHN0YXR1cyBs
aW5lCisgICAgQVNTRVJUKGhlYWRlckZpZWxkcyk7CisgICAgaGVhZGVyRmllbGRzICs9IDI7IC8v
IHNraXAgIlxyXG4iLgorICAgIGNvbnN0IGNoYXIqIHAgPSByZWFkSFRUUEhlYWRlcnMoaGVhZGVy
RmllbGRzLCBoZWFkZXIgKyBsZW4sICZoZWFkZXJzKTsKICAgICBpZiAoIXApIHsKICAgICAgICAg
TE9HKE5ldHdvcmssICJyZWFkSFRUUEhlYWRlcnMgZmFpbGVkIik7CiAgICAgICAgIG1fbW9kZSA9
IEZhaWxlZDsKICAgICAgICAgcmV0dXJuIGxlbjsKICAgICB9Ci0gICAgaWYgKCFwcm9jZXNzSGVh
ZGVycyhoZWFkZXJzKSkgeworICAgIGlmICghcHJvY2Vzc0hlYWRlcnMoaGVhZGVycykgfHwgIWNo
ZWNrUmVzcG9uc2VIZWFkZXJzKCkpIHsKICAgICAgICAgTE9HKE5ldHdvcmssICJoZWFkZXIgcHJv
Y2VzcyBmYWlsZWQiKTsKICAgICAgICAgbV9tb2RlID0gRmFpbGVkOwogICAgICAgICByZXR1cm4g
cCAtIGhlYWRlcjsKICAgICB9Ci0gICAgc3dpdGNoIChtX21vZGUpIHsKLSAgICBjYXNlIE5vcm1h
bDoKLSAgICAgICAgY2hlY2tSZXNwb25zZUhlYWRlcnMoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
ZGVmYXVsdDoKKyAgICBpZiAobGVuIDwgc3RhdGljX2Nhc3Q8c2l6ZV90PihwIC0gaGVhZGVyICsg
c2l6ZW9mKG1fY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZCkpKSB7CisgICAgICAgIC8vIEp1c3Qg
aGFzbid0IGJlZW4gcmVjZWl2ZWQgL2V4cGVjdGVkLyB5ZXQuCisgICAgICAgIG1fbW9kZSA9IElu
Y29tcGxldGU7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKG1lbWNtcChwLCBt
X2NoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWQsIHNpemVvZihtX2NoYWxsZW5nZVJlc3BvbnNlRXhw
ZWN0ZWQpKSkgewogICAgICAgICBtX21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgIGJyZWFrOworICAg
ICAgICByZXR1cm4gKHAgLSBoZWFkZXIpICsgc2l6ZW9mKG1fY2hhbGxlbmdlUmVzcG9uc2VFeHBl
Y3RlZCk7CiAgICAgfQotICAgIHJldHVybiBwIC0gaGVhZGVyOworICAgIG1fbW9kZSA9IENvbm5l
Y3RlZDsKKyAgICByZXR1cm4gKHAgLSBoZWFkZXIpICsgc2l6ZW9mKG1fY2hhbGxlbmdlUmVzcG9u
c2VFeHBlY3RlZCk7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFrZTo6TW9kZSBXZWJTb2NrZXRIYW5k
c2hha2U6Om1vZGUoKSBjb25zdApAQCAtNDAyLDEwICs0MzYsMTAgQEAgY29uc3QgY2hhciogV2Vi
U29ja2V0SGFuZHNoYWtlOjpyZWFkSFRUUEhlYWRlcnMoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0
IGNoYXIqIGUKICAgICAgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiQ1IgZG9lc24n
dCBmb2xsb3cgTEYgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQgLSBwKSwgMCwgY2xp
ZW50T3JpZ2luKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNv
dXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5leHBlY3RlZCBDUiBp
biBuYW1lIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9y
aWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdl
U291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVjdGVkIENS
IGluIG5hbWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShuYW1lLmRhdGEoKSwgbmFtZS5zaXpl
KCkpLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdl
KEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5l
eHBlY3RlZCBMRiBpbiBuYW1lIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCks
IDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3Nh
Z2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJV
bmV4cGVjdGVkIExGIGluIG5hbWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShuYW1lLmRhdGEo
KSwgbmFtZS5zaXplKCkpLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgICAgICBjYXNlICc6JzoKICAgICAgICAgICAgICAgICBicmVhazsKQEAg
LTQyOSw3ICs0NjMsNyBAQCBjb25zdCBjaGFyKiBXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRIVFRQ
SGVhZGVycyhjb25zdCBjaGFyKiBzdGFydCwgY29uc3QgY2hhciogZQogICAgICAgICAgICAgY2Fz
ZSAnXHInOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnXG4nOgot
ICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExv
Z01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlVuZXhwZWN0ZWQgTEYgaW4gdmFsdWUg
YXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQgLSBwKSwgMCwgY2xpZW50T3JpZ2luKCkp
OworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlVuZXhwZWN0ZWQgTEYgaW4gdmFs
dWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZSh2YWx1ZS5kYXRhKCksIHZhbHVlLnNpemUoKSks
IDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgdmFsdWUuYXBwZW5kKCpwKTsKQEAgLTQ2NSwx
MSArNDk5LDExIEBAIGJvb2wgV2ViU29ja2V0SGFuZHNoYWtlOjpwcm9jZXNzSGVhZGVycyhjb25z
dCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogICAgIGZvciAoSFRUUEhlYWRlck1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0ICE9IGhlYWRlcnMuZW5kKCk7ICsraXQp
IHsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAgICAgICAgY2FzZSBOb3JtYWw6Ci0gICAg
ICAgICAgICBpZiAoaXQtPmZpcnN0ID09ICJ3ZWJzb2NrZXQtb3JpZ2luIikKKyAgICAgICAgICAg
IGlmIChpdC0+Zmlyc3QgPT0gInNlYy13ZWJzb2NrZXQtb3JpZ2luIikKICAgICAgICAgICAgICAg
ICBtX3dzT3JpZ2luID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGl0LT5maXJz
dCA9PSAid2Vic29ja2V0LWxvY2F0aW9uIikKKyAgICAgICAgICAgIGVsc2UgaWYgKGl0LT5maXJz
dCA9PSAic2VjLXdlYnNvY2tldC1sb2NhdGlvbiIpCiAgICAgICAgICAgICAgICAgbV93c0xvY2F0
aW9uID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGVsc2UgaWYgKGl0LT5maXJzdCA9PSAid2Vi
c29ja2V0LXByb3RvY29sIikKKyAgICAgICAgICAgIGVsc2UgaWYgKGl0LT5maXJzdCA9PSAic2Vj
LXdlYnNvY2tldC1wcm90b2NvbCIpCiAgICAgICAgICAgICAgICAgbV93c1Byb3RvY29sID0gaXQt
PnNlY29uZDsKICAgICAgICAgICAgIGVsc2UgaWYgKGl0LT5maXJzdCA9PSAic2V0LWNvb2tpZSIp
CiAgICAgICAgICAgICAgICAgbV9zZXRDb29raWUgPSBpdC0+c2Vjb25kOwpAQCAtNDg2LDM1ICs1
MjAsMzQgQEAgYm9vbCBXZWJTb2NrZXRIYW5kc2hha2U6OnByb2Nlc3NIZWFkZXJzKGNvbnN0IEhU
VFBIZWFkZXJNYXAmIGhlYWRlcnMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViU29j
a2V0SGFuZHNoYWtlOjpjaGVja1Jlc3BvbnNlSGVhZGVycygpCitib29sIFdlYlNvY2tldEhhbmRz
aGFrZTo6Y2hlY2tSZXNwb25zZUhlYWRlcnMoKQogewogICAgIEFTU0VSVChtX21vZGUgPT0gTm9y
bWFsKTsKICAgICBtX21vZGUgPSBGYWlsZWQ7CiAgICAgaWYgKG1fd3NPcmlnaW4uaXNOdWxsKCkp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVz
c2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5k
c2hha2U6ICd3ZWJzb2NrZXQtb3JpZ2luJyBoZWFkZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9y
aWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2Uo
SlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJv
ciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFrZTogJ3NlYy13ZWJzb2NrZXQtb3JpZ2luJyBoZWFk
ZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICBpZiAobV93c0xvY2F0aW9uLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1l
c3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiAnd2Vic29ja2V0
LWxvY2F0aW9uJyBoZWFkZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAg
ICAgcmV0dXJuOworICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNl
LCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvciBkdXJpbmcgV2ViU29j
a2V0IGhhbmRzaGFrZTogJ3NlYy13ZWJzb2NrZXQtbG9jYXRpb24nIGhlYWRlciBpcyBtaXNzaW5n
IiwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAg
ICAgaWYgKGNsaWVudE9yaWdpbigpICE9IG1fd3NPcmlnaW4pIHsKICAgICAgICAgbV9jb250ZXh0
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6IG9yaWdpbiBtaXNtYXRj
aDogIiArIGNsaWVudE9yaWdpbigpICsgIiAhPSAiICsgbV93c09yaWdpbiwgMCwgY2xpZW50T3Jp
Z2luKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgaWYgKGNsaWVudExvY2F0aW9uKCkgIT0gbV93c0xvY2F0aW9uKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1l
c3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBsb2NhdGlvbiBt
aXNtYXRjaDogIiArIGNsaWVudExvY2F0aW9uKCkgKyAiICE9ICIgKyBtX3dzTG9jYXRpb24sIDAs
IGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogICAgIGlmICghbV9jbGllbnRQcm90b2NvbC5pc0VtcHR5KCkgJiYgbV9jbGllbnRQ
cm90b2NvbCAhPSBtX3dzUHJvdG9jb2wpIHsKICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdl
KEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJy
b3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6IHByb3RvY29sIG1pc21hdGNoOiAiICsgbV9j
bGllbnRQcm90b2NvbCArICIgIT0gIiArIG1fd3NQcm90b2NvbCwgMCwgY2xpZW50T3JpZ2luKCkp
OwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgbV9t
b2RlID0gQ29ubmVjdGVkOwotICAgIHJldHVybjsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAg
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmICAv
LyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oIGIvV2ViQ29y
ZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oCmluZGV4IGRmMTk5ZmYuLjJlNzU0YTcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAorKysg
Yi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmgKQEAgLTQwLDggKzQwLDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dDsKICAgICBjbGFzcyBIVFRQSGVhZGVyTWFwOworICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ7CiAKICAgICBjbGFzcyBXZWJTb2NrZXRIYW5kc2hha2UgOiBwdWJsaWMgTm9uY29w
eWFibGUgewogICAgIHB1YmxpYzoKQEAgLTkyLDcgKzkyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAvLyBSZWFkcyBhbGwgaGVhZGVycyBleGNlcHQgZm9yIHRoZSB0d28gcHJlZGVm
aW5lZCBvbmVzLgogICAgICAgICBjb25zdCBjaGFyKiByZWFkSFRUUEhlYWRlcnMoY29uc3QgY2hh
ciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgSFRUUEhlYWRlck1hcCogaGVhZGVycyk7CiAgICAg
ICAgIGJvb2wgcHJvY2Vzc0hlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycyk7Ci0g
ICAgICAgIHZvaWQgY2hlY2tSZXNwb25zZUhlYWRlcnMoKTsKKyAgICAgICAgYm9vbCBjaGVja1Jl
c3BvbnNlSGVhZGVycygpOwogCiAgICAgICAgIEtVUkwgbV91cmw7CiAgICAgICAgIFN0cmluZyBt
X2NsaWVudFByb3RvY29sOwpAQCAtMTA2LDYgKzEwNiwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIFN0cmluZyBtX3dzUHJvdG9jb2w7CiAgICAgICAgIFN0cmluZyBtX3NldENvb2tp
ZTsKICAgICAgICAgU3RyaW5nIG1fc2V0Q29va2llMjsKKworICAgICAgICBTdHJpbmcgbV9zZWNX
ZWJTb2NrZXRLZXkxOworICAgICAgICBTdHJpbmcgbV9zZWNXZWJTb2NrZXRLZXkyOworICAgICAg
ICB1bnNpZ25lZCBjaGFyIG1fa2V5M1s4XTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtX2NoYWxs
ZW5nZVJlc3BvbnNlRXhwZWN0ZWRbMTZdOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>54264</attachid>
            <date>2010-04-26 00:13:38 -0700</date>
            <delta_ts>2010-05-06 00:38:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35572-20100426161336.patch</filename>
            <type>text/plain</type>
            <size>23568</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3NWZhMjE0Li42MjRhYTQ2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQt
MjUgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBpbmNv
bXBhdGlibGUgY2hhbmdlIGluIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc2Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU3MgorCisg
ICAgICAgIEZpeCBMYXlvdXRUZXN0cyBmb3IgbmV3IFdlYlNvY2tldCBwcm90b2NvbC4KKyAgICAg
ICAgSXQgcmVxdWlyZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4
MDM0IHRvIHBhc3Mgd2Vic29ja2V0IHRlc3RzLgorCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L2hhbmRzaGFrZS1lcnJvci1leHBlY3RlZC50eHQ6IFVwZGF0ZSBleHBlY3RlZCBkYXRhLgorICAg
ICAgICAqIHdlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5OiBXaXRob3V0IENS
TEYsIHRoZSB3c2ggd2lsbCBzZW5kcyAiVGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVycm9ySFRUUC8x
LjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuIiwgd2hpY2ggaXMgbGVnYWwg
Zm9yIHRoZSBmaXJzdCBsaW5lIG9mIGRyYWZ0IDc2IFdlYlNvY2tldCBvcGVuaW5nIGhhbmRzaGFr
ZS4gKDQuMSBPcGVuaW5nIEhhbmRzaGFrZS4gc3RlcCAyOCB0byAzMCkuICBUbyBmYWlsIGhhbmRz
aGFrZSwgaXQgbmVlZHMgXHJcbi4KKyAgICAgICAgKiB3ZWJzb2NrZXQvdGVzdHMvbG9uZy1pbnZh
bGlkLWhlYWRlci1leHBlY3RlZC50eHQ6IE9yaWdpbmFsbHksIGl0IGV4cGVjdHMgVXBncmFkZSBo
ZWFkZXIgYWZ0ZXIgc3RhdHVzIGxpbmUuICBJbiBkcmFmdCA3Niwgb3JkZXIgaXMgbm90IGltcG9y
dGFudC4gIEJ1dCAicHBwcC4uXHJcbiIgd291bGQgZmFpbCBiZWNhdXNlIGl0IG1pc3NlcyAiOiIg
KGVuZCBvZiBuYW1lKSwgYmVmb3JlIFxyLgorCiAyMDEwLTA0LTI1ICBUb255IENoYW5nICA8dG9u
eUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90IHJldmlld2VkLCB0cnlpbmcgdG8gZ2V0IHRo
ZSBjaHJvbWl1bSBib3RzIGdyZWVuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2hhbmRzaGFrZS1lcnJvci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvaGFuZHNoYWtlLWVycm9yLWV4cGVjdGVkLnR4dAppbmRleCBlMWYxMDM3Li5lN2Rj
Y2ZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWVy
cm9yLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNo
YWtlLWVycm9yLWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTog
bGluZSAwOiBVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGU6MTAxCitDT05TT0xFIE1FU1NBR0U6IGxp
bmUgMDogTm8gcmVzcG9uc2UgY29kZSBmb3VuZDogVGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVycm9y
DQogSGFuZHNoYWtlIGVycm9yIHRlc3QKIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3RzL2hhbmRzaGFrZS1lcnJvcl93c2gu
cHkgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQpp
bmRleCBjNjdkM2E0Li5jODUxZmE2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQv
dGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5weQpAQCAtMzEsNyArMzEsNyBAQCBmcm9tIG1vZF9w
eXdlYnNvY2tldCBpbXBvcnQgbXNndXRpbAogCiAKIGRlZiB3ZWJfc29ja2V0X2RvX2V4dHJhX2hh
bmRzaGFrZShyZXF1ZXN0KToKLSAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3JpdGUoJ1RoaXNXaWxs
Q2F1c2VIYW5kc2hha2VFcnJvcicpCisgICAgcmVxdWVzdC5jb25uZWN0aW9uLndyaXRlKCdUaGlz
V2lsbENhdXNlSGFuZHNoYWtlRXJyb3JcclxuJykKIAogCiBkZWYgd2ViX3NvY2tldF90cmFuc2Zl
cl9kYXRhKHJlcXVlc3QpOgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0L3Rlc3Rz
L2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0CmluZGV4IDM1OWQyNjcuLjg0
NWI5ODYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9sb25nLWludmFs
aWQtaGVhZGVyLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMv
bG9uZy1pbnZhbGlkLWhlYWRlci1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACi1DT05TT0xF
IE1FU1NBR0U6IGxpbmUgMDogQmFkIFVwZ3JhZGUgaGVhZGVyOiBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcC4uLgor
Q09OU09MRSBNRVNTQUdFOiBsaW5lIDA6IFVuZXhwZWN0ZWQgQ1IgaW4gbmFtZSBhdCBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcC4uLgogTWFrZSBzdXJlIFdlYlNvY2tldCBnaXZlcyBlcnJvcnMgb24gbG9uZyBpbnZh
bGlkIHVwZ3JhZGUgaGVhZGVyLgogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGUzMjlmYzIu
LmQzZjdmZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTAtMDQtMjYgIEZ1bWl0b3NoaSBVa2FpICA8dWth
aUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2ViU29ja2V0IGhhbmRzaGFrZSBpbmNvbXBhdGlibGUgY2hhbmdlIGluIGRyYWZ0
LWhpeGllLXRoZXdlYnNvY2tldHByb3RvY29sLTc2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNTU3MgorCisgICAgICAgIFdlYlNvY2tldCBvcGVuaW5n
IGhhbmRzaGFrZSBpcyBjaGFuZ2VkLiAgTmV3IHByb3RvY29sIGRyYWZ0IGNvdWxkIGJlIGZvdW5k
IGF0IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItc29ja2V0LXByb3RvY29sLworICAg
ICAgICBJdCByZXF1aXJlcyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzgwMzQgdG8gcGFzcyB3ZWJzb2NrZXQgdGVzdHMuCisKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpleHRyYWN0UmVzcG9uc2VD
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6Omhvc3ROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Omdl
bmVyYXRlU2VjV2ViU29ja2V0S2V5KToKKyAgICAgICAgKFdlYkNvcmU6OmdlbmVyYXRlS2V5Myk6
CisgICAgICAgIChXZWJDb3JlOjpzZXRDaGFsbGVuZ2VOdW1iZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2VuZXJhdGVDaGFsbGVuZ2VSZXNwb25zZUV4cGVjdGVkKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlNvY2tldEhhbmRzaGFrZTo6V2ViU29ja2V0SGFuZHNoYWtlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50SGFuZHNoYWtlUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OnJlYWRTZXJ2ZXJIYW5kc2hha2Up
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkSFRUUEhlYWRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpwcm9jZXNzSGVhZGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9uc2VIZWFk
ZXJzKToKKyAgICAgICAgKiB3ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5oOgorCiAyMDEw
LTA0LTI1ICBBbmRyZXkgS29zeWFrb3YgIDxjYXNlcUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5jcHAKaW5kZXggMTQ0OWM4OS4uMjVmODdjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJz
b2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dl
YlNvY2tldEhhbmRzaGFrZS5jcHAKQEAgLTQ0LDIyICs0NCwyNSBAQAogI2luY2x1ZGUgIlNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1
ZGUgIlN0cmluZ0J1aWxkZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNp
bmNsdWRlIDxhbGdvcml0aG0+CisKKyNpbmNsdWRlIDx3dGYvTUQ1Lmg+CisjaW5jbHVkZSA8d3Rm
L1JhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLWNvbnN0IGNoYXIgd2ViU29ja2V0U2VydmVySGFuZHNoYWtlSGVhZGVy
W10gPSAiSFRUUC8xLjEgMTAxIFdlYiBTb2NrZXQgUHJvdG9jb2wgSGFuZHNoYWtlXHJcbiI7Ci1j
b25zdCBjaGFyIHdlYlNvY2tldFVwZ3JhZGVIZWFkZXJbXSA9ICJVcGdyYWRlOiBXZWJTb2NrZXRc
clxuIjsKLWNvbnN0IGNoYXIgd2ViU29ja2V0Q29ubmVjdGlvbkhlYWRlcltdID0gIkNvbm5lY3Rp
b246IFVwZ3JhZGVcclxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJhbmRvbUNoYXJhY3RlckluU2Vj
V2ViU29ja2V0S2V5W10gPSAiIVwiIyQlJicoKSorLC0uLzo7PD0+P0BBQkNERUZHSElKS0xNTk9Q
UVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX4iOwogCi1zdGF0
aWMgU3RyaW5nIGV4dHJhY3RSZXNwb25zZUNvZGUoY29uc3QgY2hhciogaGVhZGVyLCBpbnQgbGVu
KQorc3RhdGljIFN0cmluZyBleHRyYWN0UmVzcG9uc2VDb2RlKGNvbnN0IGNoYXIqIGhlYWRlciwg
aW50IGxlbiwgc2l6ZV90JiBsaW5lTGVuZ3RoKQogewogICAgIGNvbnN0IGNoYXIqIHNwYWNlMSA9
IDA7CiAgICAgY29uc3QgY2hhciogc3BhY2UyID0gMDsKICAgICBjb25zdCBjaGFyKiBwOwotICAg
IGZvciAocCA9IGhlYWRlcjsgcCAtIGhlYWRlciA8IGxlbjsgcCsrKSB7CisgICAgZm9yIChwID0g
aGVhZGVyLCBsaW5lTGVuZ3RoID0gMDsgcCAtIGhlYWRlciA8IGxlbjsgcCsrLCBsaW5lTGVuZ3Ro
KyspIHsKICAgICAgICAgaWYgKCpwID09ICcgJykgewogICAgICAgICAgICAgaWYgKCFzcGFjZTEp
CiAgICAgICAgICAgICAgICAgc3BhY2UxID0gcDsKQEAgLTg3LDYgKzkwLDE3IEBAIHN0YXRpYyBT
dHJpbmcgcmVzb3VyY2VOYW1lKGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4gbmFtZTsKIH0K
IAorc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBLVVJMJiB1cmwsIGJvb2wgc2VjdXJlKQor
eworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBidWlsZGVyLmFwcGVuZCh1cmwuaG9z
dCgpLmxvd2VyKCkpOworICAgIGlmICh1cmwucG9ydCgpICYmICgoIXNlY3VyZSAmJiB1cmwucG9y
dCgpICE9IDgwKSB8fCAoc2VjdXJlICYmIHVybC5wb3J0KCkgIT0gNDQzKSkpIHsKKyAgICAgICAg
YnVpbGRlci5hcHBlbmQoIjoiKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1i
ZXIodXJsLnBvcnQoKSkpOworICAgIH0KKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwor
fQorCiBzdGF0aWMgU3RyaW5nIHRyaW1Db25zb2xlTWVzc2FnZShjb25zdCBjaGFyKiBwLCBzaXpl
X3QgbGVuKQogewogICAgIFN0cmluZyBzID0gU3RyaW5nKHAsIHN0ZDo6bWluPHNpemVfdD4obGVu
LCAxMjgpKTsKQEAgLTk1LDYgKzEwOSw1NyBAQCBzdGF0aWMgU3RyaW5nIHRyaW1Db25zb2xlTWVz
c2FnZShjb25zdCBjaGFyKiBwLCBzaXplX3QgbGVuKQogICAgIHJldHVybiBzOwogfQogCitzdGF0
aWMgdm9pZCBnZW5lcmF0ZVNlY1dlYlNvY2tldEtleSh1aW50MzJfdCYgbnVtYmVyLCBTdHJpbmcm
IGtleSkKK3sKKyAgICB1aW50MzJfdCBzcGFjZSA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6
OnJhbmRvbU51bWJlcigpICogMTIpICsgMTsKKyAgICB1aW50MzJfdCBtYXggPSA0Mjk0OTY3Mjk1
VSAvIHNwYWNlOworICAgIG51bWJlciA9IHN0YXRpY19jYXN0PHVpbnQzMl90PihXVEY6OnJhbmRv
bU51bWJlcigpICogbWF4KTsKKyAgICB1aW50MzJfdCBwcm9kdWN0ID0gbnVtYmVyICogc3BhY2U7
CisKKyAgICBTdHJpbmcgcyA9IFN0cmluZzo6bnVtYmVyKHByb2R1Y3QpOworICAgIGludCBuID0g
c3RhdGljX2Nhc3Q8aW50PihXVEY6OnJhbmRvbU51bWJlcigpICogMTIpICsgMTsKKyAgICBTdHJp
bmcgcmFuZG9tQ2hhcnMocmFuZG9tQ2hhcmFjdGVySW5TZWNXZWJTb2NrZXRLZXkpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGludCBwb3MgPSBzdGF0aWNfY2Fz
dDxpbnQ+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiAocy5sZW5ndGgoKSArIDEpKTsKKyAgICAgICAg
aW50IGNocG9zID0gc3RhdGljX2Nhc3Q8aW50PihXVEY6OnJhbmRvbU51bWJlcigpICogcmFuZG9t
Q2hhcnMubGVuZ3RoKCkpOworICAgICAgICBzLmluc2VydChyYW5kb21DaGFycy5zdWJzdHJpbmco
Y2hwb3MsIDEpLCBwb3MpOworICAgIH0KKyAgICBTdHJpbmcgc3BhY2VDaGFyKCIgIik7CisgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IHNwYWNlOyBpKyspIHsKKyAgICAgICAgaW50IHBvcyA9
IHN0YXRpY19jYXN0PGludD4oV1RGOjpyYW5kb21OdW1iZXIoKSAqIHMubGVuZ3RoKCkgLSAxKSAr
IDE7CisgICAgICAgIHMuaW5zZXJ0KHNwYWNlQ2hhciwgcG9zKTsKKyAgICB9CisgICAga2V5ID0g
czsKK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVLZXkzKHVuc2lnbmVkIGNoYXIga2V5M1s4XSkK
K3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykKKyAgICAgICAga2V5M1tpXSA9IFdU
Rjo6cmFuZG9tTnVtYmVyKCkgKiAyNTY7Cit9CisKK3N0YXRpYyB2b2lkIHNldENoYWxsZW5nZU51
bWJlcih1bnNpZ25lZCBjaGFyKiBidWYsIHVpbnQzMl90IG51bWJlcikKK3sKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwID0gYnVmICsgMzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykgewor
ICAgICAgICAqcCA9IG51bWJlciAmIDB4RkY7CisgICAgICAgIC0tcDsKKyAgICAgICAgbnVtYmVy
ID4+PSA4OworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2VuZXJhdGVDaGFsbGVuZ2VSZXNwb25z
ZUV4cGVjdGVkKHVpbnQzMl90IG51bWJlcjEsIHVpbnQzMl90IG51bWJlcjIsIHVuc2lnbmVkIGNo
YXIga2V5M1s4XSwgdW5zaWduZWQgY2hhciBjaGFsbGVuZ2VSZXNwb25zZUV4cGVjdGVkWzE2XSkK
K3sKKyAgICB1bnNpZ25lZCBjaGFyIGNoYWxsZW5nZVsxNl07CisgICAgc2V0Q2hhbGxlbmdlTnVt
YmVyKCZjaGFsbGVuZ2VbMF0sIG51bWJlcjEpOworICAgIHNldENoYWxsZW5nZU51bWJlcigmY2hh
bGxlbmdlWzRdLCBudW1iZXIyKTsKKyAgICBtZW1jcHkoJmNoYWxsZW5nZVs4XSwga2V5MywgOCk7
CisgICAgTUQ1IG1kNTsKKyAgICBtZDUuYWRkQnl0ZXMoY2hhbGxlbmdlLCBzaXplb2YoY2hhbGxl
bmdlKSk7CisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3QgPSBtZDUuY2hlY2tzdW0oKTsK
KyAgICBtZW1jcHkoY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZCwgZGlnZXN0LmRhdGEoKSwgMTYp
OworfQorCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBLVVJM
JiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNv
bnRleHQpCiAgICAgOiBtX3VybCh1cmwpCiAgICAgLCBtX2NsaWVudFByb3RvY29sKHByb3RvY29s
KQpAQCAtMTAyLDYgKzE2NywxMiBAQCBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNvY2tldEhhbmRz
aGFrZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsCiAgICAgLCBtX2Nv
bnRleHQoY29udGV4dCkKICAgICAsIG1fbW9kZShJbmNvbXBsZXRlKQogeworICAgIHVpbnQzMl90
IG51bWJlcjE7CisgICAgdWludDMyX3QgbnVtYmVyMjsKKyAgICBnZW5lcmF0ZVNlY1dlYlNvY2tl
dEtleShudW1iZXIxLCBtX3NlY1dlYlNvY2tldEtleTEpOworICAgIGdlbmVyYXRlU2VjV2ViU29j
a2V0S2V5KG51bWJlcjIsIG1fc2VjV2ViU29ja2V0S2V5Mik7CisgICAgZ2VuZXJhdGVLZXkzKG1f
a2V5Myk7CisgICAgZ2VuZXJhdGVDaGFsbGVuZ2VSZXNwb25zZUV4cGVjdGVkKG51bWJlcjEsIG51
bWJlcjIsIG1fa2V5MywgbV9jaGFsbGVuZ2VSZXNwb25zZUV4cGVjdGVkKTsKIH0KIAogV2ViU29j
a2V0SGFuZHNoYWtlOjp+V2ViU29ja2V0SGFuZHNoYWtlKCkKQEAgLTE0OCwxMyArMjE5LDcgQEAg
U3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24oKSBjb25zdAogICAgIFN0
cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZChtX3NlY3VyZSA/ICJ3c3Mi
IDogIndzIik7CiAgICAgYnVpbGRlci5hcHBlbmQoIjovLyIpOwotICAgIGJ1aWxkZXIuYXBwZW5k
KG1fdXJsLmhvc3QoKS5sb3dlcigpKTsKLSAgICBpZiAobV91cmwucG9ydCgpKSB7Ci0gICAgICAg
IGlmICgoIW1fc2VjdXJlICYmIG1fdXJsLnBvcnQoKSAhPSA4MCkgfHwgKG1fc2VjdXJlICYmIG1f
dXJsLnBvcnQoKSAhPSA0NDMpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiOiIpOwot
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5nOjpudW1iZXIobV91cmwucG9ydCgpKSk7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgYnVpbGRlci5hcHBlbmQoaG9zdE5hbWUobV91cmwsIG1f
c2VjdXJlKSk7CiAgICAgYnVpbGRlci5hcHBlbmQocmVzb3VyY2VOYW1lKG1fdXJsKSk7CiAgICAg
cmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KQEAgLTE2Nyw0MyArMjMyLDQ2IEBAIENTdHJp
bmcgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKCkgY29uc3QKICAg
ICBidWlsZGVyLmFwcGVuZCgiR0VUICIpOwogICAgIGJ1aWxkZXIuYXBwZW5kKHJlc291cmNlTmFt
ZShtX3VybCkpOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIgSFRUUC8xLjFcclxuIik7Ci0gICAgYnVp
bGRlci5hcHBlbmQoIlVwZ3JhZGU6IFdlYlNvY2tldFxyXG4iKTsKLSAgICBidWlsZGVyLmFwcGVu
ZCgiQ29ubmVjdGlvbjogVXBncmFkZVxyXG4iKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiSG9zdDog
Iik7Ci0gICAgYnVpbGRlci5hcHBlbmQobV91cmwuaG9zdCgpLmxvd2VyKCkpOwotICAgIGlmICht
X3VybC5wb3J0KCkgJiYgKCghbV9zZWN1cmUgJiYgbV91cmwucG9ydCgpICE9IDgwKSB8fCAobV9z
ZWN1cmUgJiYgbV91cmwucG9ydCgpICE9IDQ0MykpKSB7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCI6Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQo
KSkpOwotICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKCJPcmlnaW46ICIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKGNsaWVudE9yaWdpbigpKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgIGlmICghbV9jbGllbnRQcm90b2NvbC5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIldlYlNvY2tldC1Qcm90b2NvbDogIik7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fY2xpZW50UHJvdG9jb2wpOwotICAgICAgICBidWls
ZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgIH0KKworICAgIFZlY3RvcjxTdHJpbmc+IGZpZWxkczsK
KyAgICBmaWVsZHMuYXBwZW5kKCJVcGdyYWRlOiBXZWJTb2NrZXQiKTsKKyAgICBmaWVsZHMuYXBw
ZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRlIik7CisgICAgZmllbGRzLmFwcGVuZCgiSG9zdDogIiAr
IGhvc3ROYW1lKG1fdXJsLCBtX3NlY3VyZSkpOworICAgIGZpZWxkcy5hcHBlbmQoIk9yaWdpbjog
IiArIGNsaWVudE9yaWdpbigpKTsKKyAgICBpZiAoIW1fY2xpZW50UHJvdG9jb2wuaXNFbXB0eSgp
KQorICAgICAgICBmaWVsZHMuYXBwZW5kKCJTZWMtV2ViU29ja2V0LVByb3RvY29sOiAiICsgbV9j
bGllbnRQcm90b2NvbCk7CiAKICAgICBLVVJMIHVybCA9IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlv
bkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0LT5pc0RvY3VtZW50KCkpIHsKICAgICAg
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihtX2NvbnRleHQp
OwogICAgICAgICBTdHJpbmcgY29va2llID0gY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUo
ZG9jdW1lbnQsIHVybCk7Ci0gICAgICAgIGlmICghY29va2llLmlzRW1wdHkoKSkgewotICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIkNvb2tpZTogIik7Ci0gICAgICAgICAgICBidWlsZGVyLmFw
cGVuZChjb29raWUpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKLSAgICAg
ICAgfQorICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBmaWVsZHMu
YXBwZW5kKCJDb29raWU6ICIgKyBjb29raWUpOwogICAgICAgICAvLyBTZXQgIkNvb2tpZTI6IDxj
b29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1cmw/CiAgICAgfQogCisgICAgZmllbGRz
LmFwcGVuZCgiU2VjLVdlYlNvY2tldC1LZXkxOiAiICsgbV9zZWNXZWJTb2NrZXRLZXkxKTsKKyAg
ICBmaWVsZHMuYXBwZW5kKCJTZWMtV2ViU29ja2V0LUtleTI6ICIgKyBtX3NlY1dlYlNvY2tldEtl
eTIpOworCisgICAgc3RkOjpyYW5kb21fc2h1ZmZsZShmaWVsZHMuYmVnaW4oKSwgZmllbGRzLmVu
ZCgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKQor
ICAgICAgICBidWlsZGVyLmFwcGVuZChmaWVsZHNbaV0gKyAiXHJcbiIpOworCiAgICAgYnVpbGRl
ci5hcHBlbmQoIlxyXG4iKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKTsK
KworICAgIENTdHJpbmcgaGFuZHNoYWtlSGVhZGVyID0gYnVpbGRlci50b1N0cmluZygpLnV0Zjgo
KTsKKyAgICBjaGFyKiBjaGFyYWN0ZXJCdWZmZXIgPSAwOworICAgIENTdHJpbmcgbXNnID0gQ1N0
cmluZzo6bmV3VW5pbml0aWFsaXplZChoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCkgKyBzaXplb2Yo
bV9rZXkzKSwgY2hhcmFjdGVyQnVmZmVyKTsKKyAgICBtZW1jcHkoY2hhcmFjdGVyQnVmZmVyLCBo
YW5kc2hha2VIZWFkZXIuZGF0YSgpLCBoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCkpOworICAgIG1l
bWNweShjaGFyYWN0ZXJCdWZmZXIgKyBoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCksIG1fa2V5Mywg
c2l6ZW9mKG1fa2V5MykpOworICAgIHJldHVybiBtc2c7CiB9CiAKIFdlYlNvY2tldEhhbmRzaGFr
ZVJlcXVlc3QgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VSZXF1ZXN0KCkgY29u
c3QKIHsKICAgICAvLyBLZWVwIHRoZSBmb2xsb3dpbmcgY29uc2lzdGVudCB3aXRoIGNsaWVudEhh
bmRzaGFrZU1lc3NhZ2UoKS4KKyAgICAvLyBUT0RPKHVrYWkpOiBrZXkxLDIsMwogICAgIFdlYlNv
Y2tldEhhbmRzaGFrZVJlcXVlc3QgcmVxdWVzdChtX3VybCwgY2xpZW50T3JpZ2luKCksIG1fY2xp
ZW50UHJvdG9jb2wpOwogCiAgICAgS1VSTCB1cmwgPSBodHRwVVJMRm9yQXV0aGVudGljYXRpb25B
bmRDb29raWVzKCk7CkBAIC0yMzcsODkgKzMwNSw1NSBAQCB2b2lkIFdlYlNvY2tldEhhbmRzaGFr
ZTo6Y2xlYXJTY3JpcHRFeGVjdXRpb25Db250ZXh0KCkKIGludCBXZWJTb2NrZXRIYW5kc2hha2U6
OnJlYWRTZXJ2ZXJIYW5kc2hha2UoY29uc3QgY2hhciogaGVhZGVyLCBzaXplX3QgbGVuKQogewog
ICAgIG1fbW9kZSA9IEluY29tcGxldGU7Ci0gICAgaWYgKGxlbiA8IHNpemVvZih3ZWJTb2NrZXRT
ZXJ2ZXJIYW5kc2hha2VIZWFkZXIpIC0gMSkgewotICAgICAgICAvLyBKdXN0IGhhc24ndCBiZWVu
IHJlY2VpdmVkIGZ1bGx5IHlldC4KKyAgICBzaXplX3QgbGluZUxlbmd0aDsKKyAgICBjb25zdCBT
dHJpbmcmIGNvZGUgPSBleHRyYWN0UmVzcG9uc2VDb2RlKGhlYWRlciwgbGVuLCBsaW5lTGVuZ3Ro
KTsKKyAgICBpZiAoY29kZS5pc051bGwoKSkgeworICAgICAgICAvLyBKdXN0IGhhc24ndCBiZWVu
IHJlY2VpdmVkIHlldC4KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoIW1lbWNt
cChoZWFkZXIsIHdlYlNvY2tldFNlcnZlckhhbmRzaGFrZUhlYWRlciwgc2l6ZW9mKHdlYlNvY2tl
dFNlcnZlckhhbmRzaGFrZUhlYWRlcikgLSAxKSkKLSAgICAgICAgbV9tb2RlID0gTm9ybWFsOwot
ICAgIGVsc2UgewotICAgICAgICBjb25zdCBTdHJpbmcmIGNvZGUgPSBleHRyYWN0UmVzcG9uc2VD
b2RlKGhlYWRlciwgbGVuKTsKLSAgICAgICAgaWYgKGNvZGUuaXNOdWxsKCkpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIlNob3J0IHNlcnZlciBoYW5kc2hha2U6ICIgKyB0cmltQ29u
c29sZU1lc3NhZ2UoaGVhZGVyLCBsZW4pLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgICAg
ICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNvZGUuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgICAgICBtX21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1l
c3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWws
ICJObyByZXNwb25zZSBjb2RlIGZvdW5kOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKGhlYWRlciwg
bGVuKSwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuIGxlbjsKLSAgICAg
ICAgfQotICAgICAgICBMT0coTmV0d29yaywgInJlc3BvbnNlIGNvZGU6ICVzIiwgY29kZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAgICAgaWYgKGNvZGUgPT0gIjQwMSIpIHsKLSAgICAgICAgICAgIG1f
bW9kZSA9IEZhaWxlZDsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3Nh
Z2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkF1dGhlbnRpY2F0
aW9uIHJlcXVpcmVkLCBidXQgbm90IGltcGxlbWVudGVkIHlldC4iLCAwLCBjbGllbnRPcmlnaW4o
KSk7Ci0gICAgICAgICAgICByZXR1cm4gbGVuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgbV9tb2RlID0gRmFpbGVkOwotICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiVW5leHBl
Y3RlZCByZXNwb25zZSBjb2RlOiIgKyBjb2RlLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbGVuOwotICAgICAgICB9CisgICAgaWYgKGNvZGUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKKyAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiTm8gcmVz
cG9uc2UgY29kZSBmb3VuZDogIiArIHRyaW1Db25zb2xlTWVzc2FnZShoZWFkZXIsIGxpbmVMZW5n
dGgpLCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgIHJldHVybiBsZW47CiAgICAgfQotICAg
IGNvbnN0IGNoYXIqIHAgPSBoZWFkZXIgKyBzaXplb2Yod2ViU29ja2V0U2VydmVySGFuZHNoYWtl
SGVhZGVyKSAtIDE7Ci0gICAgY29uc3QgY2hhciogZW5kID0gaGVhZGVyICsgbGVuOwotCi0gICAg
aWYgKG1fbW9kZSA9PSBOb3JtYWwpIHsKLSAgICAgICAgc2l6ZV90IGhlYWRlclNpemUgPSBlbmQg
LSBwOwotICAgICAgICBpZiAoaGVhZGVyU2l6ZSA8IHNpemVvZih3ZWJTb2NrZXRVcGdyYWRlSGVh
ZGVyKSAtIDEpIHsKLSAgICAgICAgICAgIG1fbW9kZSA9IEluY29tcGxldGU7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBpZiAobWVtY21wKHAsIHdlYlNvY2tldFVw
Z3JhZGVIZWFkZXIsIHNpemVvZih3ZWJTb2NrZXRVcGdyYWRlSGVhZGVyKSAtIDEpKSB7Ci0gICAg
ICAgICAgICBtX21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3Nh
Z2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJC
YWQgVXBncmFkZSBoZWFkZXI6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAs
IGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybiBwIC0gaGVhZGVyICsgc2l6ZW9m
KHdlYlNvY2tldFVwZ3JhZGVIZWFkZXIpIC0gMTsKLSAgICAgICAgfQotICAgICAgICBwICs9IHNp
emVvZih3ZWJTb2NrZXRVcGdyYWRlSGVhZGVyKSAtIDE7Ci0KLSAgICAgICAgaGVhZGVyU2l6ZSA9
IGVuZCAtIHA7Ci0gICAgICAgIGlmIChoZWFkZXJTaXplIDwgc2l6ZW9mKHdlYlNvY2tldENvbm5l
Y3Rpb25IZWFkZXIpIC0gMSkgewotICAgICAgICAgICAgbV9tb2RlID0gSW5jb21wbGV0ZTsKLSAg
ICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobWVtY21wKHAsIHdl
YlNvY2tldENvbm5lY3Rpb25IZWFkZXIsIHNpemVvZih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVy
KSAtIDEpKSB7Ci0gICAgICAgICAgICBtX21vZGUgPSBGYWlsZWQ7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JN
ZXNzYWdlTGV2ZWwsICJCYWQgQ29ubmVjdGlvbiBoZWFkZXI6ICIgKyB0cmltQ29uc29sZU1lc3Nh
Z2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybiBw
IC0gaGVhZGVyICsgc2l6ZW9mKHdlYlNvY2tldENvbm5lY3Rpb25IZWFkZXIpIC0gMTsKLSAgICAg
ICAgfQotICAgICAgICBwICs9IHNpemVvZih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVyKSAtIDE7
CisgICAgTE9HKE5ldHdvcmssICJyZXNwb25zZSBjb2RlOiAlcyIsIGNvZGUudXRmOCgpLmRhdGEo
KSk7CisgICAgaWYgKGNvZGUgIT0gIjEwMSIpIHsKKyAgICAgICAgbV9tb2RlID0gRmFpbGVkOwor
ICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVjdGVkIHJlc3BvbnNlIGNvZGU6IiArIGNv
ZGUsIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgcmV0dXJuIGxlbjsKICAgICB9Ci0KLSAg
ICBpZiAoIXN0cm5zdHIocCwgIlxyXG5cclxuIiwgZW5kIC0gcCkpIHsKKyAgICBtX21vZGUgPSBO
b3JtYWw7CisgICAgaWYgKCFzdHJuc3RyKGhlYWRlciwgIlxyXG5cclxuIiwgbGVuKSkgewogICAg
ICAgICAvLyBKdXN0IGhhc24ndCBiZWVuIHJlY2VpdmVkIGZ1bGx5IHlldC4KICAgICAgICAgbV9t
b2RlID0gSW5jb21wbGV0ZTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBIVFRQSGVh
ZGVyTWFwIGhlYWRlcnM7Ci0gICAgcCA9IHJlYWRIVFRQSGVhZGVycyhwLCBlbmQsICZoZWFkZXJz
KTsKKyAgICBjb25zdCBjaGFyKiBoZWFkZXJGaWVsZHMgPSBzdHJuc3RyKGhlYWRlciwgIlxyXG4i
LCBsZW4pOyAvLyBza2lwIHN0YXR1cyBsaW5lCisgICAgQVNTRVJUKGhlYWRlckZpZWxkcyk7Cisg
ICAgaGVhZGVyRmllbGRzICs9IDI7IC8vIHNraXAgIlxyXG4iLgorICAgIGNvbnN0IGNoYXIqIHAg
PSByZWFkSFRUUEhlYWRlcnMoaGVhZGVyRmllbGRzLCBoZWFkZXIgKyBsZW4sICZoZWFkZXJzKTsK
ICAgICBpZiAoIXApIHsKICAgICAgICAgTE9HKE5ldHdvcmssICJyZWFkSFRUUEhlYWRlcnMgZmFp
bGVkIik7CiAgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKICAgICAgICAgcmV0dXJuIGxlbjsKICAg
ICB9Ci0gICAgaWYgKCFwcm9jZXNzSGVhZGVycyhoZWFkZXJzKSkgeworICAgIGlmICghcHJvY2Vz
c0hlYWRlcnMoaGVhZGVycykgfHwgIWNoZWNrUmVzcG9uc2VIZWFkZXJzKCkpIHsKICAgICAgICAg
TE9HKE5ldHdvcmssICJoZWFkZXIgcHJvY2VzcyBmYWlsZWQiKTsKICAgICAgICAgbV9tb2RlID0g
RmFpbGVkOwogICAgICAgICByZXR1cm4gcCAtIGhlYWRlcjsKICAgICB9Ci0gICAgc3dpdGNoICht
X21vZGUpIHsKLSAgICBjYXNlIE5vcm1hbDoKLSAgICAgICAgY2hlY2tSZXNwb25zZUhlYWRlcnMo
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKKyAgICBpZiAobGVuIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihwIC0gaGVhZGVyICsgc2l6ZW9mKG1fY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3Rl
ZCkpKSB7CisgICAgICAgIC8vIEp1c3QgaGFzbid0IGJlZW4gcmVjZWl2ZWQgL2V4cGVjdGVkLyB5
ZXQuCisgICAgICAgIG1fbW9kZSA9IEluY29tcGxldGU7CisgICAgICAgIHJldHVybiAtMTsKKyAg
ICB9CisgICAgaWYgKG1lbWNtcChwLCBtX2NoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWQsIHNpemVv
ZihtX2NoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWQpKSkgewogICAgICAgICBtX21vZGUgPSBGYWls
ZWQ7Ci0gICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gKHAgLSBoZWFkZXIpICsgc2l6ZW9m
KG1fY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZCk7CiAgICAgfQotICAgIHJldHVybiBwIC0gaGVh
ZGVyOworICAgIG1fbW9kZSA9IENvbm5lY3RlZDsKKyAgICByZXR1cm4gKHAgLSBoZWFkZXIpICsg
c2l6ZW9mKG1fY2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZCk7CiB9CiAKIFdlYlNvY2tldEhhbmRz
aGFrZTo6TW9kZSBXZWJTb2NrZXRIYW5kc2hha2U6Om1vZGUoKSBjb25zdApAQCAtNDAyLDEwICs0
MzYsMTAgQEAgY29uc3QgY2hhciogV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkSFRUUEhlYWRlcnMo
Y29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGUKICAgICAgICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9y
TWVzc2FnZUxldmVsLCAiQ1IgZG9lc24ndCBmb2xsb3cgTEYgYXQgIiArIHRyaW1Db25zb2xlTWVz
c2FnZShwLCBlbmQgLSBwKSwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiVW5leHBlY3RlZCBDUiBpbiBuYW1lIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2Uo
cCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRl
eHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNz
YWdlTGV2ZWwsICJVbmV4cGVjdGVkIENSIGluIG5hbWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2Fn
ZShuYW1lLmRhdGEoKSwgbmFtZS5zaXplKCkpLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlICdcbic6Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IEVycm9yTWVzc2FnZUxldmVsLCAiVW5leHBlY3RlZCBMRiBpbiBuYW1lIGF0ICIgKyB0cmltQ29u
c29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgICAg
ICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlw
ZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVjdGVkIExGIGluIG5hbWUgYXQgIiArIHRyaW1D
b25zb2xlTWVzc2FnZShuYW1lLmRhdGEoKSwgbmFtZS5zaXplKCkpLCAwLCBjbGllbnRPcmlnaW4o
KSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICBjYXNlICc6JzoKICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTQyOSw3ICs0NjMsNyBAQCBjb25zdCBjaGFyKiBXZWJT
b2NrZXRIYW5kc2hha2U6OnJlYWRIVFRQSGVhZGVycyhjb25zdCBjaGFyKiBzdGFydCwgY29uc3Qg
Y2hhciogZQogICAgICAgICAgICAgY2FzZSAnXHInOgogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVz
c2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwg
IlVuZXhwZWN0ZWQgTEYgaW4gdmFsdWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZShwLCBlbmQg
LSBwKSwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRk
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgIlVuZXhwZWN0ZWQgTEYgaW4gdmFsdWUgYXQgIiArIHRyaW1Db25zb2xlTWVzc2FnZSh2YWx1
ZS5kYXRhKCksIHZhbHVlLnNpemUoKSksIDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgdmFs
dWUuYXBwZW5kKCpwKTsKQEAgLTQ2NSwxMSArNDk5LDExIEBAIGJvb2wgV2ViU29ja2V0SGFuZHNo
YWtlOjpwcm9jZXNzSGVhZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogICAgIGZv
ciAoSFRUUEhlYWRlck1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBoZWFkZXJzLmJlZ2luKCk7IGl0
ICE9IGhlYWRlcnMuZW5kKCk7ICsraXQpIHsKICAgICAgICAgc3dpdGNoIChtX21vZGUpIHsKICAg
ICAgICAgY2FzZSBOb3JtYWw6Ci0gICAgICAgICAgICBpZiAoaXQtPmZpcnN0ID09ICJ3ZWJzb2Nr
ZXQtb3JpZ2luIikKKyAgICAgICAgICAgIGlmIChpdC0+Zmlyc3QgPT0gInNlYy13ZWJzb2NrZXQt
b3JpZ2luIikKICAgICAgICAgICAgICAgICBtX3dzT3JpZ2luID0gaXQtPnNlY29uZDsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKGl0LT5maXJzdCA9PSAid2Vic29ja2V0LWxvY2F0aW9uIikKKyAgICAg
ICAgICAgIGVsc2UgaWYgKGl0LT5maXJzdCA9PSAic2VjLXdlYnNvY2tldC1sb2NhdGlvbiIpCiAg
ICAgICAgICAgICAgICAgbV93c0xvY2F0aW9uID0gaXQtPnNlY29uZDsKLSAgICAgICAgICAgIGVs
c2UgaWYgKGl0LT5maXJzdCA9PSAid2Vic29ja2V0LXByb3RvY29sIikKKyAgICAgICAgICAgIGVs
c2UgaWYgKGl0LT5maXJzdCA9PSAic2VjLXdlYnNvY2tldC1wcm90b2NvbCIpCiAgICAgICAgICAg
ICAgICAgbV93c1Byb3RvY29sID0gaXQtPnNlY29uZDsKICAgICAgICAgICAgIGVsc2UgaWYgKGl0
LT5maXJzdCA9PSAic2V0LWNvb2tpZSIpCiAgICAgICAgICAgICAgICAgbV9zZXRDb29raWUgPSBp
dC0+c2Vjb25kOwpAQCAtNDg2LDM1ICs1MjAsMzQgQEAgYm9vbCBXZWJTb2NrZXRIYW5kc2hha2U6
OnByb2Nlc3NIZWFkZXJzKGNvbnN0IEhUVFBIZWFkZXJNYXAmIGhlYWRlcnMpCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgV2ViU29ja2V0SGFuZHNoYWtlOjpjaGVja1Jlc3BvbnNlSGVhZGVy
cygpCitib29sIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2hlY2tSZXNwb25zZUhlYWRlcnMoKQogewog
ICAgIEFTU0VSVChtX21vZGUgPT0gTm9ybWFsKTsKICAgICBtX21vZGUgPSBGYWlsZWQ7CiAgICAg
aWYgKG1fd3NPcmlnaW4uaXNOdWxsKCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdl
KEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJy
b3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6ICd3ZWJzb2NrZXQtb3JpZ2luJyBoZWFkZXIg
aXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAg
ICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwg
RXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFrZTogJ3Nl
Yy13ZWJzb2NrZXQtb3JpZ2luJyBoZWFkZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAobV93c0xvY2F0aW9uLmlz
TnVsbCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2Nr
ZXQgaGFuZHNoYWtlOiAnd2Vic29ja2V0LWxvY2F0aW9uJyBoZWFkZXIgaXMgbWlzc2luZyIsIDAs
IGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBtX2NvbnRleHQtPmFk
ZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2
ZWwsICJFcnJvciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFrZTogJ3NlYy13ZWJzb2NrZXQtbG9j
YXRpb24nIGhlYWRlciBpcyBtaXNzaW5nIiwgMCwgY2xpZW50T3JpZ2luKCkpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgaWYgKGNsaWVudE9yaWdpbigpICE9IG1fd3NPcmln
aW4pIHsKICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9n
TWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBo
YW5kc2hha2U6IG9yaWdpbiBtaXNtYXRjaDogIiArIGNsaWVudE9yaWdpbigpICsgIiAhPSAiICsg
bV93c09yaWdpbiwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKGNsaWVudExvY2F0aW9uKCkgIT0gbV93c0xv
Y2F0aW9uKSB7CiAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2Us
IExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2Nr
ZXQgaGFuZHNoYWtlOiBsb2NhdGlvbiBtaXNtYXRjaDogIiArIGNsaWVudExvY2F0aW9uKCkgKyAi
ICE9ICIgKyBtX3dzTG9jYXRpb24sIDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIGlmICghbV9jbGllbnRQcm90b2Nv
bC5pc0VtcHR5KCkgJiYgbV9jbGllbnRQcm90b2NvbCAhPSBtX3dzUHJvdG9jb2wpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUs
IEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6IHBy
b3RvY29sIG1pc21hdGNoOiAiICsgbV9jbGllbnRQcm90b2NvbCArICIgIT0gIiArIG1fd3NQcm90
b2NvbCwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9Ci0gICAgbV9tb2RlID0gQ29ubmVjdGVkOwotICAgIHJldHVybjsKKyAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotI2VuZGlmICAvLyBFTkFCTEUoV0VCX1NPQ0tFVFMpCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9TT0NLRVRTKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5oIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5o
CmluZGV4IGRmMTk5ZmYuLjJlNzU0YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd2Vic29ja2V0cy9X
ZWJTb2NrZXRIYW5kc2hha2UuaAorKysgYi9XZWJDb3JlL3dlYnNvY2tldHMvV2ViU29ja2V0SGFu
ZHNoYWtlLmgKQEAgLTQwLDggKzQwLDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAg
Y2xhc3MgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDsKICAgICBjbGFzcyBIVFRQSGVhZGVyTWFwOwor
ICAgIGNsYXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAKICAgICBjbGFzcyBXZWJTb2NrZXRI
YW5kc2hha2UgOiBwdWJsaWMgTm9uY29weWFibGUgewogICAgIHB1YmxpYzoKQEAgLTkyLDcgKzky
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBSZWFkcyBhbGwgaGVhZGVycyBl
eGNlcHQgZm9yIHRoZSB0d28gcHJlZGVmaW5lZCBvbmVzLgogICAgICAgICBjb25zdCBjaGFyKiBy
ZWFkSFRUUEhlYWRlcnMoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGVuZCwgSFRUUEhl
YWRlck1hcCogaGVhZGVycyk7CiAgICAgICAgIGJvb2wgcHJvY2Vzc0hlYWRlcnMoY29uc3QgSFRU
UEhlYWRlck1hcCYgaGVhZGVycyk7Ci0gICAgICAgIHZvaWQgY2hlY2tSZXNwb25zZUhlYWRlcnMo
KTsKKyAgICAgICAgYm9vbCBjaGVja1Jlc3BvbnNlSGVhZGVycygpOwogCiAgICAgICAgIEtVUkwg
bV91cmw7CiAgICAgICAgIFN0cmluZyBtX2NsaWVudFByb3RvY29sOwpAQCAtMTA2LDYgKzEwNiwx
MSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3dzUHJvdG9jb2w7CiAg
ICAgICAgIFN0cmluZyBtX3NldENvb2tpZTsKICAgICAgICAgU3RyaW5nIG1fc2V0Q29va2llMjsK
KworICAgICAgICBTdHJpbmcgbV9zZWNXZWJTb2NrZXRLZXkxOworICAgICAgICBTdHJpbmcgbV9z
ZWNXZWJTb2NrZXRLZXkyOworICAgICAgICB1bnNpZ25lZCBjaGFyIG1fa2V5M1s4XTsKKyAgICAg
ICAgdW5zaWduZWQgY2hhciBtX2NoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWRbMTZdOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55209</attachid>
            <date>2010-05-06 00:38:30 -0700</date>
            <delta_ts>2010-05-06 14:14:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-35572-20100506163828.patch</filename>
            <type>text/plain</type>
            <size>24991</size>
            <attacher name="Fumitoshi Ukai">ukai</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3ZDNmZWI5MjgyYjQzMWI2ODRjODIzMjAzYTMxMWRjMDk5NWVhMTNjLi5lOTUzMjQ4
MmY1ZjBhNGVhYTRjZjNkNjJjYjZiNGQ0ZTliMTI0OGM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTAtMDUtMDYgIEZ1bWl0b3NoaSBVa2FpICA8dWthaUBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViU29ja2V0IGhhbmRz
aGFrZSBpbmNvbXBhdGlibGUgY2hhbmdlIGluIGRyYWZ0LWhpeGllLXRoZXdlYnNvY2tldHByb3Rv
Y29sLTc2CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0z
NTU3MgorCisgICAgICAgIEZpeCBMYXlvdXRUZXN0cyBmb3IgbmV3IFdlYlNvY2tldCBwcm90b2Nv
bC4KKyAgICAgICAgSXQgcmVxdWlyZXMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4MDM0IHRvIHBhc3Mgd2Vic29ja2V0IHRlc3RzLgorCisgICAgICAgICogd2Vic29j
a2V0L3Rlc3RzL2hhbmRzaGFrZS1lcnJvci1leHBlY3RlZC50eHQ6IFVwZGF0ZSBleHBlY3RlZCBk
YXRhLgorICAgICAgICAqIHdlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5OiBX
aXRob3V0IENSTEYsIHRoZSB3c2ggd2lsbCBzZW5kcyAiVGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVy
cm9ySFRUUC8xLjEgMTAxIFdlYlNvY2tldCBQcm90b2NvbCBIYW5kc2hha2VcclxuIiwgd2hpY2gg
aXMgbGVnYWwgZm9yIHRoZSBmaXJzdCBsaW5lIG9mIGRyYWZ0IDc2IFdlYlNvY2tldCBvcGVuaW5n
IGhhbmRzaGFrZS4gKDQuMSBPcGVuaW5nIEhhbmRoc2hha2UsIHN0ZXAgMjggdG8gMzApLiAgVG8g
ZmFpbCBoYW5kc2hha2UsIGl0IG5lZWRzIFxyXG4uCisgICAgICAgICogd2Vic29ja2V0L3Rlc3Rz
L2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0OiAgT3JpZ2luYWxseSwgaXQgZXhwZWN0
cyBVcGdyYWRlIGhlYWRlciBhZnRlciBzdGF0dXMgbGluZS4gIEluIGRyYWZ0IDc2LCBvcmRlciBp
cyBub3QgaW1wb3J0YW50LiAgQnV0ICJwcHBwLi5cclxuIiB3b3VsZCBmYWlsIGJlY2F1c2UgaXQg
bWlzc2VzICI6IiAoZW5kIG9mIG5hbWUpIGJlZm9yZSBcci4KKwogMjAxMC0wNS0wNSAgQWRhbSBC
YXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQ
cm9za3VyeWFrb3YuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFu
ZHNoYWtlLWVycm9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9o
YW5kc2hha2UtZXJyb3ItZXhwZWN0ZWQudHh0CmluZGV4IGUxZjEwMzc5OTc2ZjM1NzYyZDZjMGFh
NjFlNDAyNjk5MDQ1YTE5YjUuLmU3ZGNjZmI5YWM5YzkwOTEzZjc1OGM1ZWNmMDc0ODk0YTNjYTI4
ODEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJy
b3ItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hh
a2UtZXJyb3ItZXhwZWN0ZWQudHh0CkBAIC0xLDQgKzEsNCBAQAotQ09OU09MRSBNRVNTQUdFOiBs
aW5lIDA6IFVuZXhwZWN0ZWQgcmVzcG9uc2UgY29kZToxMDEKK0NPTlNPTEUgTUVTU0FHRTogbGlu
ZSAwOiBObyByZXNwb25zZSBjb2RlIGZvdW5kOiBUaGlzV2lsbENhdXNlSGFuZHNoYWtlRXJyb3IN
CiBIYW5kc2hha2UgZXJyb3IgdGVzdAogCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2NrZXQvdGVzdHMvaGFuZHNoYWtlLWVycm9yX3dzaC5w
eSBiL0xheW91dFRlc3RzL3dlYnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5Cmlu
ZGV4IGM2N2QzYTQ0YzgzMTI5NGRlN2Y0YjkwZTQyNGY0MzIzODVmMzJlNmQuLmM4NTFmYTYyNjEx
NzY2YTU5OGZjNzE1ODY1NWEwNjE1NmM2YTIyMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5CisrKyBiL0xheW91dFRlc3RzL3dl
YnNvY2tldC90ZXN0cy9oYW5kc2hha2UtZXJyb3Jfd3NoLnB5CkBAIC0zMSw3ICszMSw3IEBAIGZy
b20gbW9kX3B5d2Vic29ja2V0IGltcG9ydCBtc2d1dGlsCiAKIAogZGVmIHdlYl9zb2NrZXRfZG9f
ZXh0cmFfaGFuZHNoYWtlKHJlcXVlc3QpOgotICAgIHJlcXVlc3QuY29ubmVjdGlvbi53cml0ZSgn
VGhpc1dpbGxDYXVzZUhhbmRzaGFrZUVycm9yJykKKyAgICByZXF1ZXN0LmNvbm5lY3Rpb24ud3Jp
dGUoJ1RoaXNXaWxsQ2F1c2VIYW5kc2hha2VFcnJvclxyXG4nKQogCiAKIGRlZiB3ZWJfc29ja2V0
X3RyYW5zZmVyX2RhdGEocmVxdWVzdCk6CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJzb2Nr
ZXQvdGVzdHMvbG9uZy1pbnZhbGlkLWhlYWRlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy93
ZWJzb2NrZXQvdGVzdHMvbG9uZy1pbnZhbGlkLWhlYWRlci1leHBlY3RlZC50eHQKaW5kZXggMzU5
ZDI2NzM1Y2EzYjIwNzhkMjYzYTFiNTM3MmYzNDYzMWVjZjI0Yi4uODQ1Yjk4NmViMjkzNmMxNGQ2
MDY0Y2Y3YWU0ZjNkZDQ0N2MyMzQ3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2Vic29ja2V0
L3Rlc3RzL2xvbmctaW52YWxpZC1oZWFkZXItZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3Rz
L3dlYnNvY2tldC90ZXN0cy9sb25nLWludmFsaWQtaGVhZGVyLWV4cGVjdGVkLnR4dApAQCAtMSw0
ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAwOiBCYWQgVXBncmFkZSBoZWFkZXI6IHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwLi4uCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMDogVW5leHBlY3RlZCBDUiBp
biBuYW1lIGF0IHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBw
cHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwLi4uCiBNYWtlIHN1cmUgV2ViU29ja2V0IGdpdmVzIGVy
cm9ycyBvbiBsb25nIGludmFsaWQgdXBncmFkZSBoZWFkZXIuCiAKIE9uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYmRlZjQ5NmU5MDYwZTMxYTU1ODcwYWRjNjQxNDZjOGZkNTE4ZTFiNS4uY2FhZTNj
M2Y5YmEyMTFlNzZhODEyNTE1M2FmZmM1ZTA2NTU5ZjA4NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMC0w
NS0wNiAgRnVtaXRvc2hpIFVrYWkgIDx1a2FpQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJTb2NrZXQgaGFuZHNoYWtlIGlu
Y29tcGF0aWJsZSBjaGFuZ2UgaW4gZHJhZnQtaGl4aWUtdGhld2Vic29ja2V0cHJvdG9jb2wtNzYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NTcyCisK
KyAgICAgICAgV2ViU29ja2V0IG9wZW5pbmcgaGFuZHNoYWtlIGlzIGNoYW5nZWQuICBOZXcgcHJv
dG9jb2wgZHJhZnQgY291bGQgYmUgZm91bmQgYXQgaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1zb2NrZXQtcHJvdG9jb2wvCisgICAgICAgIEl0IHJlcXVpcmVzIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zODAzNCB0byBwYXNzIHdlYnNvY2tldCB0ZXN0cy4K
KworICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OmV4dHJhY3RSZXNwb25zZUNvZGUpOgorICAgICAgICBhZGQgbGluZUxlbmd0aCBw
YXJhbWV0ZXIgdG8gcmV0dXJuIGxlbmd0aCBvZiBzdGF0dXMgbGluZS4KKyAgICAgICAgKFdlYkNv
cmU6Omhvc3ROYW1lKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZVNlY1dlYlNv
Y2tldEtleSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVLZXkzKTogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpzZXRDaGFsbGVuZ2VOdW1iZXIpOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmdlbmVyYXRlQ2hhbGxlbmdlUmVzcG9uc2VFeHBlY3RlZCk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtlOjpXZWJTb2NrZXRIYW5kc2hha2UpOgor
ICAgICAgICAgZ2VuZXJhdGUgY2hhbGxlbmdlIHJlc3BvbnNlIGtleSBhbmQgZXhwZWN0ZWQgZGF0
YS4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50TG9jYXRpb24p
OgorICAgICAgICAgdXNlIGhvc3ROYW1lLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFu
ZHNoYWtlOjpjbGllbnRIYW5kc2hha2VNZXNzYWdlKToKKyAgICAgICAgIGNoYW5nZWQgZm9yIGRy
YWZ0IDc2IHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNsaWVu
dEhhbmRzaGFrZVJlcXVlc3QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0SGFuZHNoYWtl
OjpyZWFkU2VydmVySGFuZHNoYWtlKToKKyAgICAgICAgIGNoYW5nZWQgZm9yIGRyYWZ0IDc2IHNw
ZWMuCisgICAgICAgICBtX21vZGUgaXMgbWFuYWdlZCBpbiB0aGlzIG1ldGhvZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldEhhbmRzaGFrZTo6cmVhZEhUVFBIZWFkZXJzKToKKyAgICAgICAg
IGNoYW5nZSBlcnJvciBsb2cgbWVzc2FnZXMuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRI
YW5kc2hha2U6OnByb2Nlc3NIZWFkZXJzKToKKyAgICAgICAgIGNoYWduZWQgZm9yIGRyYWZ0IDc2
IHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9u
c2VIZWFkZXJzKToKKyAgICAgICAgIHJldHVybiBib29sZWFuIHdoZXRoZXIgcmVzcG9uc2UgaGVh
ZGVyIGlzIG9rIG9yIG5vdCBhbmQgbm90IGNoYW5nZSBtX21vZGUgaW4gaXQuCisgICAgICAgICog
d2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaDoKKwogMjAxMC0wNS0wNSAgSm9zZXBoIFBl
Y29yYXJvICA8am9lcGVja0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbW90
aHkgSGF0Y2hlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5k
c2hha2UuY3BwIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKaW5k
ZXggMTQ0OWM4OTQyOTM0NTczODIyM2I0YTRhODU2NTQwMGJmNjQ5NDQwNS4uMWU3NTViMmQ1M2Yy
MjJiNzg4OTg4NmI4NGE0ZTQzYjIwYzJlYzQ2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNv
Y2tldEhhbmRzaGFrZS5jcHAKQEAgLTQ0LDIyICs0NCwyNSBAQAogI2luY2x1ZGUgIlNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogI2luY2x1ZGUg
IlN0cmluZ0J1aWxkZXIuaCIKLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKKyNpbmNs
dWRlIDx3dGYvTUQ1Lmg+CisjaW5jbHVkZSA8d3RmL1JhbmRvbU51bWJlci5oPgorI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CiAjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jb25zdCBjaGFyIHdlYlNvY2tldFNlcnZlckhhbmRzaGFrZUhl
YWRlcltdID0gIkhUVFAvMS4xIDEwMSBXZWIgU29ja2V0IFByb3RvY29sIEhhbmRzaGFrZVxyXG4i
OwotY29uc3QgY2hhciB3ZWJTb2NrZXRVcGdyYWRlSGVhZGVyW10gPSAiVXBncmFkZTogV2ViU29j
a2V0XHJcbiI7Ci1jb25zdCBjaGFyIHdlYlNvY2tldENvbm5lY3Rpb25IZWFkZXJbXSA9ICJDb25u
ZWN0aW9uOiBVcGdyYWRlXHJcbiI7CitzdGF0aWMgY29uc3QgY2hhciByYW5kb21DaGFyYWN0ZXJJ
blNlY1dlYlNvY2tldEtleVtdID0gIiFcIiMkJSYnKCkqKywtLi86Ozw9Pj9AQUJDREVGR0hJSktM
TU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+IjsKIAot
c3RhdGljIFN0cmluZyBleHRyYWN0UmVzcG9uc2VDb2RlKGNvbnN0IGNoYXIqIGhlYWRlciwgaW50
IGxlbikKK3N0YXRpYyBTdHJpbmcgZXh0cmFjdFJlc3BvbnNlQ29kZShjb25zdCBjaGFyKiBoZWFk
ZXIsIGludCBsZW4sIHNpemVfdCYgbGluZUxlbmd0aCkKIHsKICAgICBjb25zdCBjaGFyKiBzcGFj
ZTEgPSAwOwogICAgIGNvbnN0IGNoYXIqIHNwYWNlMiA9IDA7CiAgICAgY29uc3QgY2hhciogcDsK
LSAgICBmb3IgKHAgPSBoZWFkZXI7IHAgLSBoZWFkZXIgPCBsZW47IHArKykgeworICAgIGxpbmVM
ZW5ndGggPSAwOworICAgIGZvciAocCA9IGhlYWRlcjsgcCAtIGhlYWRlciA8IGxlbjsgcCsrLCBs
aW5lTGVuZ3RoKyspIHsKICAgICAgICAgaWYgKCpwID09ICcgJykgewogICAgICAgICAgICAgaWYg
KCFzcGFjZTEpCiAgICAgICAgICAgICAgICAgc3BhY2UxID0gcDsKQEAgLTg3LDYgKzkwLDE4IEBA
IHN0YXRpYyBTdHJpbmcgcmVzb3VyY2VOYW1lKGNvbnN0IEtVUkwmIHVybCkKICAgICByZXR1cm4g
bmFtZTsKIH0KIAorc3RhdGljIFN0cmluZyBob3N0TmFtZShjb25zdCBLVVJMJiB1cmwsIGJvb2wg
c2VjdXJlKQoreworICAgIEFTU0VSVCh1cmwucHJvdG9jb2xJcygid3NzIikgPT0gc2VjdXJlKTsK
KyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgYnVpbGRlci5hcHBlbmQodXJsLmhvc3Qo
KS5sb3dlcigpKTsKKyAgICBpZiAodXJsLnBvcnQoKSAmJiAoKCFzZWN1cmUgJiYgdXJsLnBvcnQo
KSAhPSA4MCkgfHwgKHNlY3VyZSAmJiB1cmwucG9ydCgpICE9IDQ0MykpKSB7CisgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCI6Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0cmluZzo6bnVtYmVy
KHVybC5wb3J0KCkpKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30K
Kwogc3RhdGljIFN0cmluZyB0cmltQ29uc29sZU1lc3NhZ2UoY29uc3QgY2hhciogcCwgc2l6ZV90
IGxlbikKIHsKICAgICBTdHJpbmcgcyA9IFN0cmluZyhwLCBzdGQ6Om1pbjxzaXplX3Q+KGxlbiwg
MTI4KSk7CkBAIC05NSw2ICsxMTAsNTkgQEAgc3RhdGljIFN0cmluZyB0cmltQ29uc29sZU1lc3Nh
Z2UoY29uc3QgY2hhciogcCwgc2l6ZV90IGxlbikKICAgICByZXR1cm4gczsKIH0KIAorc3RhdGlj
IHZvaWQgZ2VuZXJhdGVTZWNXZWJTb2NrZXRLZXkodWludDMyX3QmIG51bWJlciwgU3RyaW5nJiBr
ZXkpCit7CisgICAgLy8gRklYTUU6IHVzaW5nIFdURiBpbiBSYW5kb21OdW1iZXIuaAorICAgIHVp
bnQzMl90IHNwYWNlID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cmFuZG9tTnVtYmVyKCkg
KiAxMikgKyAxOworICAgIHVpbnQzMl90IG1heCA9IDQyOTQ5NjcyOTVVIC8gc3BhY2U7CisgICAg
bnVtYmVyID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KFdURjo6cmFuZG9tTnVtYmVyKCkgKiBtYXgp
OworICAgIHVpbnQzMl90IHByb2R1Y3QgPSBudW1iZXIgKiBzcGFjZTsKKworICAgIFN0cmluZyBz
ID0gU3RyaW5nOjpudW1iZXIocHJvZHVjdCk7CisgICAgaW50IG4gPSBzdGF0aWNfY2FzdDxpbnQ+
KFdURjo6cmFuZG9tTnVtYmVyKCkgKiAxMikgKyAxOworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCByYW5kb21DaGFycywgKHJhbmRvbUNoYXJhY3RlckluU2VjV2ViU29ja2V0S2V5KSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgaW50IHBvcyA9IHN0
YXRpY19jYXN0PGludD4oV1RGOjpyYW5kb21OdW1iZXIoKSAqIChzLmxlbmd0aCgpICsgMSkpOwor
ICAgICAgICBpbnQgY2hwb3MgPSBzdGF0aWNfY2FzdDxpbnQ+KFdURjo6cmFuZG9tTnVtYmVyKCkg
KiByYW5kb21DaGFycy5sZW5ndGgoKSk7CisgICAgICAgIHMuaW5zZXJ0KHJhbmRvbUNoYXJzLnN1
YnN0cmluZyhjaHBvcywgMSksIHBvcyk7CisgICAgfQorICAgIERFRklORV9TVEFUSUNfTE9DQUwo
U3RyaW5nLCBzcGFjZUNoYXIsICgiICIpKTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwg
c3BhY2U7IGkrKykgeworICAgICAgICBpbnQgcG9zID0gc3RhdGljX2Nhc3Q8aW50PihXVEY6OnJh
bmRvbU51bWJlcigpICogcy5sZW5ndGgoKSAtIDEpICsgMTsKKyAgICAgICAgcy5pbnNlcnQoc3Bh
Y2VDaGFyLCBwb3MpOworICAgIH0KKyAgICBrZXkgPSBzOworfQorCitzdGF0aWMgdm9pZCBnZW5l
cmF0ZUtleTModW5zaWduZWQgY2hhciBrZXkzWzhdKQoreworICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgODsgaSsrKQorICAgICAgICBrZXkzW2ldID0gV1RGOjpyYW5kb21OdW1iZXIoKSAqIDI1NjsK
K30KKworc3RhdGljIHZvaWQgc2V0Q2hhbGxlbmdlTnVtYmVyKHVuc2lnbmVkIGNoYXIqIGJ1Ziwg
dWludDMyX3QgbnVtYmVyKQoreworICAgIHVuc2lnbmVkIGNoYXIqIHAgPSBidWYgKyAzOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CisgICAgICAgICpwID0gbnVtYmVyICYgMHhG
RjsKKyAgICAgICAgLS1wOworICAgICAgICBudW1iZXIgPj49IDg7CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBnZW5lcmF0ZUNoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWQodWludDMyX3QgbnVtYmVy
MSwgdWludDMyX3QgbnVtYmVyMiwgdW5zaWduZWQgY2hhciBrZXkzWzhdLCB1bnNpZ25lZCBjaGFy
IGNoYWxsZW5nZVJlc3BvbnNlRXhwZWN0ZWRbMTZdKQoreworICAgIHVuc2lnbmVkIGNoYXIgY2hh
bGxlbmdlWzE2XTsKKyAgICBzZXRDaGFsbGVuZ2VOdW1iZXIoJmNoYWxsZW5nZVswXSwgbnVtYmVy
MSk7CisgICAgc2V0Q2hhbGxlbmdlTnVtYmVyKCZjaGFsbGVuZ2VbNF0sIG51bWJlcjIpOworICAg
IG1lbWNweSgmY2hhbGxlbmdlWzhdLCBrZXkzLCA4KTsKKyAgICBNRDUgbWQ1OworICAgIG1kNS5h
ZGRCeXRlcyhjaGFsbGVuZ2UsIHNpemVvZihjaGFsbGVuZ2UpKTsKKyAgICAvLyBGSVhNRTogbWQ1
LmNoZWNrc3VtKCkgc2hvdWxkIHRha2UgYSByZWZlcmVuY2UgdG8gb3V0cHV0IGluc3RlYWQgb2Yg
cmV0dXJuaW5nIHRoZSByZXN1bHQgYnkgdmFsdWUuCisgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBk
aWdlc3QgPSBtZDUuY2hlY2tzdW0oKTsKKyAgICBtZW1jcHkoY2hhbGxlbmdlUmVzcG9uc2VFeHBl
Y3RlZCwgZGlnZXN0LmRhdGEoKSwgMTYpOworfQorCiBXZWJTb2NrZXRIYW5kc2hha2U6OldlYlNv
Y2tldEhhbmRzaGFrZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJvdG9jb2wsIFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQpCiAgICAgOiBtX3VybCh1cmwpCiAgICAgLCBt
X2NsaWVudFByb3RvY29sKHByb3RvY29sKQpAQCAtMTAyLDYgKzE3MCwxMiBAQCBXZWJTb2NrZXRI
YW5kc2hha2U6OldlYlNvY2tldEhhbmRzaGFrZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgcHJvdG9jb2wsCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKICAgICAsIG1fbW9kZShJbmNv
bXBsZXRlKQogeworICAgIHVpbnQzMl90IG51bWJlcjE7CisgICAgdWludDMyX3QgbnVtYmVyMjsK
KyAgICBnZW5lcmF0ZVNlY1dlYlNvY2tldEtleShudW1iZXIxLCBtX3NlY1dlYlNvY2tldEtleTEp
OworICAgIGdlbmVyYXRlU2VjV2ViU29ja2V0S2V5KG51bWJlcjIsIG1fc2VjV2ViU29ja2V0S2V5
Mik7CisgICAgZ2VuZXJhdGVLZXkzKG1fa2V5Myk7CisgICAgZ2VuZXJhdGVDaGFsbGVuZ2VSZXNw
b25zZUV4cGVjdGVkKG51bWJlcjEsIG51bWJlcjIsIG1fa2V5MywgbV9leHBlY3RlZENoYWxsZW5n
ZVJlc3BvbnNlKTsKIH0KIAogV2ViU29ja2V0SGFuZHNoYWtlOjp+V2ViU29ja2V0SGFuZHNoYWtl
KCkKQEAgLTE0OCwxMyArMjIyLDcgQEAgU3RyaW5nIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2xpZW50
TG9jYXRpb24oKSBjb25zdAogICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVy
LmFwcGVuZChtX3NlY3VyZSA/ICJ3c3MiIDogIndzIik7CiAgICAgYnVpbGRlci5hcHBlbmQoIjov
LyIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKG1fdXJsLmhvc3QoKS5sb3dlcigpKTsKLSAgICBpZiAo
bV91cmwucG9ydCgpKSB7Ci0gICAgICAgIGlmICgoIW1fc2VjdXJlICYmIG1fdXJsLnBvcnQoKSAh
PSA4MCkgfHwgKG1fc2VjdXJlICYmIG1fdXJsLnBvcnQoKSAhPSA0NDMpKSB7Ci0gICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiOiIpOwotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoU3RyaW5n
OjpudW1iZXIobV91cmwucG9ydCgpKSk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgYnVpbGRlci5h
cHBlbmQoaG9zdE5hbWUobV91cmwsIG1fc2VjdXJlKSk7CiAgICAgYnVpbGRlci5hcHBlbmQocmVz
b3VyY2VOYW1lKG1fdXJsKSk7CiAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKIH0KQEAg
LTE2Nyw0MyArMjM1LDUxIEBAIENTdHJpbmcgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5k
c2hha2VNZXNzYWdlKCkgY29uc3QKICAgICBidWlsZGVyLmFwcGVuZCgiR0VUICIpOwogICAgIGJ1
aWxkZXIuYXBwZW5kKHJlc291cmNlTmFtZShtX3VybCkpOwogICAgIGJ1aWxkZXIuYXBwZW5kKCIg
SFRUUC8xLjFcclxuIik7Ci0gICAgYnVpbGRlci5hcHBlbmQoIlVwZ3JhZGU6IFdlYlNvY2tldFxy
XG4iKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiQ29ubmVjdGlvbjogVXBncmFkZVxyXG4iKTsKLSAg
ICBidWlsZGVyLmFwcGVuZCgiSG9zdDogIik7Ci0gICAgYnVpbGRlci5hcHBlbmQobV91cmwuaG9z
dCgpLmxvd2VyKCkpOwotICAgIGlmIChtX3VybC5wb3J0KCkgJiYgKCghbV9zZWN1cmUgJiYgbV91
cmwucG9ydCgpICE9IDgwKSB8fCAobV9zZWN1cmUgJiYgbV91cmwucG9ydCgpICE9IDQ0MykpKSB7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCI6Iik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKFN0
cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQoKSkpOwotICAgIH0KLSAgICBidWlsZGVyLmFwcGVuZCgi
XHJcbiIpOwotICAgIGJ1aWxkZXIuYXBwZW5kKCJPcmlnaW46ICIpOwotICAgIGJ1aWxkZXIuYXBw
ZW5kKGNsaWVudE9yaWdpbigpKTsKLSAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgIGlm
ICghbV9jbGllbnRQcm90b2NvbC5pc0VtcHR5KCkpIHsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQo
IldlYlNvY2tldC1Qcm90b2NvbDogIik7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fY2xpZW50
UHJvdG9jb2wpOwotICAgICAgICBidWlsZGVyLmFwcGVuZCgiXHJcbiIpOwotICAgIH0KKworICAg
IFZlY3RvcjxTdHJpbmc+IGZpZWxkczsKKyAgICBmaWVsZHMuYXBwZW5kKCJVcGdyYWRlOiBXZWJT
b2NrZXQiKTsKKyAgICBmaWVsZHMuYXBwZW5kKCJDb25uZWN0aW9uOiBVcGdyYWRlIik7CisgICAg
ZmllbGRzLmFwcGVuZCgiSG9zdDogIiArIGhvc3ROYW1lKG1fdXJsLCBtX3NlY3VyZSkpOworICAg
IGZpZWxkcy5hcHBlbmQoIk9yaWdpbjogIiArIGNsaWVudE9yaWdpbigpKTsKKyAgICBpZiAoIW1f
Y2xpZW50UHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAgICBmaWVsZHMuYXBwZW5kKCJTZWMtV2Vi
U29ja2V0LVByb3RvY29sOiAiICsgbV9jbGllbnRQcm90b2NvbCk7CiAKICAgICBLVVJMIHVybCA9
IGh0dHBVUkxGb3JBdXRoZW50aWNhdGlvbkFuZENvb2tpZXMoKTsKICAgICBpZiAobV9jb250ZXh0
LT5pc0RvY3VtZW50KCkpIHsKICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gc3RhdGljX2Nh
c3Q8RG9jdW1lbnQqPihtX2NvbnRleHQpOwogICAgICAgICBTdHJpbmcgY29va2llID0gY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7Ci0gICAgICAgIGlmICghY29v
a2llLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIkNvb2tpZTogIik7
Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjb29raWUpOwotICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIlxyXG4iKTsKLSAgICAgICAgfQorICAgICAgICBpZiAoIWNvb2tpZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCJDb29raWU6ICIgKyBjb29raWUpOwogICAg
ICAgICAvLyBTZXQgIkNvb2tpZTI6IDxjb29raWU+IiBpZiBjb29raWVzIDIgZXhpc3RzIGZvciB1
cmw/CiAgICAgfQogCisgICAgZmllbGRzLmFwcGVuZCgiU2VjLVdlYlNvY2tldC1LZXkxOiAiICsg
bV9zZWNXZWJTb2NrZXRLZXkxKTsKKyAgICBmaWVsZHMuYXBwZW5kKCJTZWMtV2ViU29ja2V0LUtl
eTI6ICIgKyBtX3NlY1dlYlNvY2tldEtleTIpOworCisgICAgLy8gRmllbGRzIGluIHRoZSBoYW5k
c2hha2UgYXJlIHNlbnQgYnkgdGhlIGNsaWVudCBpbiBhIHJhbmRvbSBvcmRlcjsgdGhlCisgICAg
Ly8gb3JkZXIgaXMgbm90IG1lYW5pbmdmdWwuICBUaHVzLCBpdCdzIG9rIHRvIHNlbmQgdGhlIG9y
ZGVyIHdlIGNvbnN0cnVjdGVkCisgICAgLy8gdGhlIGZpZWxkcy4KKworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgZmllbGRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KGZpZWxkc1tpXSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJcclxuIik7CisgICAgfQorCiAg
ICAgYnVpbGRlci5hcHBlbmQoIlxyXG4iKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygp
LnV0ZjgoKTsKKworICAgIENTdHJpbmcgaGFuZHNoYWtlSGVhZGVyID0gYnVpbGRlci50b1N0cmlu
ZygpLnV0ZjgoKTsKKyAgICBjaGFyKiBjaGFyYWN0ZXJCdWZmZXIgPSAwOworICAgIENTdHJpbmcg
bXNnID0gQ1N0cmluZzo6bmV3VW5pbml0aWFsaXplZChoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCkg
KyBzaXplb2YobV9rZXkzKSwgY2hhcmFjdGVyQnVmZmVyKTsKKyAgICBtZW1jcHkoY2hhcmFjdGVy
QnVmZmVyLCBoYW5kc2hha2VIZWFkZXIuZGF0YSgpLCBoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCkp
OworICAgIG1lbWNweShjaGFyYWN0ZXJCdWZmZXIgKyBoYW5kc2hha2VIZWFkZXIubGVuZ3RoKCks
IG1fa2V5Mywgc2l6ZW9mKG1fa2V5MykpOworICAgIHJldHVybiBtc2c7CiB9CiAKIFdlYlNvY2tl
dEhhbmRzaGFrZVJlcXVlc3QgV2ViU29ja2V0SGFuZHNoYWtlOjpjbGllbnRIYW5kc2hha2VSZXF1
ZXN0KCkgY29uc3QKIHsKICAgICAvLyBLZWVwIHRoZSBmb2xsb3dpbmcgY29uc2lzdGVudCB3aXRo
IGNsaWVudEhhbmRzaGFrZU1lc3NhZ2UoKS4KKyAgICAvLyBGSVhNRTogZG8gd2UgbmVlZCB0byBz
dG9yZSBtX3NlY1dlYlNvY2tldEtleTEsIG1fc2VjV2ViU29ja2V0S2V5MiBhbmQKKyAgICAvLyBt
X2tleTMgaW4gV2ViU29ja2V0SGFuZHNoYWtlUmVxdWVzdD8KICAgICBXZWJTb2NrZXRIYW5kc2hh
a2VSZXF1ZXN0IHJlcXVlc3QobV91cmwsIGNsaWVudE9yaWdpbigpLCBtX2NsaWVudFByb3RvY29s
KTsKIAogICAgIEtVUkwgdXJsID0gaHR0cFVSTEZvckF1dGhlbnRpY2F0aW9uQW5kQ29va2llcygp
OwpAQCAtMjM3LDg5ICszMTMsNTUgQEAgdm9pZCBXZWJTb2NrZXRIYW5kc2hha2U6OmNsZWFyU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpCiBpbnQgV2ViU29ja2V0SGFuZHNoYWtlOjpyZWFkU2VydmVy
SGFuZHNoYWtlKGNvbnN0IGNoYXIqIGhlYWRlciwgc2l6ZV90IGxlbikKIHsKICAgICBtX21vZGUg
PSBJbmNvbXBsZXRlOwotICAgIGlmIChsZW4gPCBzaXplb2Yod2ViU29ja2V0U2VydmVySGFuZHNo
YWtlSGVhZGVyKSAtIDEpIHsKLSAgICAgICAgLy8gSnVzdCBoYXNuJ3QgYmVlbiByZWNlaXZlZCBm
dWxseSB5ZXQuCisgICAgc2l6ZV90IGxpbmVMZW5ndGg7CisgICAgY29uc3QgU3RyaW5nJiBjb2Rl
ID0gZXh0cmFjdFJlc3BvbnNlQ29kZShoZWFkZXIsIGxlbiwgbGluZUxlbmd0aCk7CisgICAgaWYg
KGNvZGUuaXNOdWxsKCkpIHsKKyAgICAgICAgLy8gSnVzdCBoYXNuJ3QgYmVlbiByZWNlaXZlZCB5
ZXQuCiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgaWYgKCFtZW1jbXAoaGVhZGVyLCB3
ZWJTb2NrZXRTZXJ2ZXJIYW5kc2hha2VIZWFkZXIsIHNpemVvZih3ZWJTb2NrZXRTZXJ2ZXJIYW5k
c2hha2VIZWFkZXIpIC0gMSkpCi0gICAgICAgIG1fbW9kZSA9IE5vcm1hbDsKLSAgICBlbHNlIHsK
LSAgICAgICAgY29uc3QgU3RyaW5nJiBjb2RlID0gZXh0cmFjdFJlc3BvbnNlQ29kZShoZWFkZXIs
IGxlbik7Ci0gICAgICAgIGlmIChjb2RlLmlzTnVsbCgpKSB7Ci0gICAgICAgICAgICBtX2NvbnRl
eHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNz
YWdlTGV2ZWwsICJTaG9ydCBzZXJ2ZXIgaGFuZHNoYWtlOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdl
KGhlYWRlciwgbGVuKSwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJuIC0x
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChjb2RlLmlzRW1wdHkoKSkgewotICAgICAgICAgICAg
bV9tb2RlID0gRmFpbGVkOwotICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVz
c2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiTm8gcmVzcG9u
c2UgY29kZSBmb3VuZDogIiArIHRyaW1Db25zb2xlTWVzc2FnZShoZWFkZXIsIGxlbiksIDAsIGNs
aWVudE9yaWdpbigpKTsKLSAgICAgICAgICAgIHJldHVybiBsZW47Ci0gICAgICAgIH0KLSAgICAg
ICAgTE9HKE5ldHdvcmssICJyZXNwb25zZSBjb2RlOiAlcyIsIGNvZGUudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIGlmIChjb2RlID09ICI0MDEiKSB7Ci0gICAgICAgICAgICBtX21vZGUgPSBGYWls
ZWQ7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBM
b2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJBdXRoZW50aWNhdGlvbiByZXF1aXJl
ZCwgYnV0IG5vdCBpbXBsZW1lbnRlZCB5ZXQuIiwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGxlbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1fbW9kZSA9
IEZhaWxlZDsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3Vy
Y2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlVuZXhwZWN0ZWQgcmVzcG9u
c2UgY29kZToiICsgY29kZSwgMCwgY2xpZW50T3JpZ2luKCkpOwotICAgICAgICAgICAgcmV0dXJu
IGxlbjsKLSAgICAgICAgfQorICAgIGlmIChjb2RlLmlzRW1wdHkoKSkgeworICAgICAgICBtX21v
ZGUgPSBGYWlsZWQ7CisgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3Vy
Y2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIk5vIHJlc3BvbnNlIGNvZGUg
Zm91bmQ6ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UoaGVhZGVyLCBsaW5lTGVuZ3RoKSwgMCwgY2xp
ZW50T3JpZ2luKCkpOworICAgICAgICByZXR1cm4gbGVuOwogICAgIH0KLSAgICBjb25zdCBjaGFy
KiBwID0gaGVhZGVyICsgc2l6ZW9mKHdlYlNvY2tldFNlcnZlckhhbmRzaGFrZUhlYWRlcikgLSAx
OwotICAgIGNvbnN0IGNoYXIqIGVuZCA9IGhlYWRlciArIGxlbjsKLQotICAgIGlmIChtX21vZGUg
PT0gTm9ybWFsKSB7Ci0gICAgICAgIHNpemVfdCBoZWFkZXJTaXplID0gZW5kIC0gcDsKLSAgICAg
ICAgaWYgKGhlYWRlclNpemUgPCBzaXplb2Yod2ViU29ja2V0VXBncmFkZUhlYWRlcikgLSAxKSB7
Ci0gICAgICAgICAgICBtX21vZGUgPSBJbmNvbXBsZXRlOwotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1lbWNtcChwLCB3ZWJTb2NrZXRVcGdyYWRlSGVhZGVy
LCBzaXplb2Yod2ViU29ja2V0VXBncmFkZUhlYWRlcikgLSAxKSkgewotICAgICAgICAgICAgbV9t
b2RlID0gRmFpbGVkOwotICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2Fn
ZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiQmFkIFVwZ3JhZGUg
aGVhZGVyOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAtIHApLCAwLCBjbGllbnRPcmln
aW4oKSk7Ci0gICAgICAgICAgICByZXR1cm4gcCAtIGhlYWRlciArIHNpemVvZih3ZWJTb2NrZXRV
cGdyYWRlSGVhZGVyKSAtIDE7Ci0gICAgICAgIH0KLSAgICAgICAgcCArPSBzaXplb2Yod2ViU29j
a2V0VXBncmFkZUhlYWRlcikgLSAxOwotCi0gICAgICAgIGhlYWRlclNpemUgPSBlbmQgLSBwOwot
ICAgICAgICBpZiAoaGVhZGVyU2l6ZSA8IHNpemVvZih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVy
KSAtIDEpIHsKLSAgICAgICAgICAgIG1fbW9kZSA9IEluY29tcGxldGU7Ci0gICAgICAgICAgICBy
ZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1lbWNtcChwLCB3ZWJTb2NrZXRDb25u
ZWN0aW9uSGVhZGVyLCBzaXplb2Yod2ViU29ja2V0Q29ubmVjdGlvbkhlYWRlcikgLSAxKSkgewot
ICAgICAgICAgICAgbV9tb2RlID0gRmFpbGVkOwotICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRN
ZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVs
LCAiQmFkIENvbm5lY3Rpb24gaGVhZGVyOiAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAt
IHApLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgICAgICByZXR1cm4gcCAtIGhlYWRlciAr
IHNpemVvZih3ZWJTb2NrZXRDb25uZWN0aW9uSGVhZGVyKSAtIDE7Ci0gICAgICAgIH0KLSAgICAg
ICAgcCArPSBzaXplb2Yod2ViU29ja2V0Q29ubmVjdGlvbkhlYWRlcikgLSAxOworICAgIExPRyhO
ZXR3b3JrLCAicmVzcG9uc2UgY29kZTogJXMiLCBjb2RlLnV0ZjgoKS5kYXRhKCkpOworICAgIGlm
IChjb2RlICE9ICIxMDEiKSB7CisgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKKyAgICAgICAgbV9j
b250ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9y
TWVzc2FnZUxldmVsLCAiVW5leHBlY3RlZCByZXNwb25zZSBjb2RlOiIgKyBjb2RlLCAwLCBjbGll
bnRPcmlnaW4oKSk7CisgICAgICAgIHJldHVybiBsZW47CiAgICAgfQotCi0gICAgaWYgKCFzdHJu
c3RyKHAsICJcclxuXHJcbiIsIGVuZCAtIHApKSB7CisgICAgbV9tb2RlID0gTm9ybWFsOworICAg
IGlmICghc3RybnN0cihoZWFkZXIsICJcclxuXHJcbiIsIGxlbikpIHsKICAgICAgICAgLy8gSnVz
dCBoYXNuJ3QgYmVlbiByZWNlaXZlZCBmdWxseSB5ZXQuCiAgICAgICAgIG1fbW9kZSA9IEluY29t
cGxldGU7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgSFRUUEhlYWRlck1hcCBoZWFk
ZXJzOwotICAgIHAgPSByZWFkSFRUUEhlYWRlcnMocCwgZW5kLCAmaGVhZGVycyk7CisgICAgY29u
c3QgY2hhciogaGVhZGVyRmllbGRzID0gc3RybnN0cihoZWFkZXIsICJcclxuIiwgbGVuKTsgLy8g
c2tpcCBzdGF0dXMgbGluZQorICAgIEFTU0VSVChoZWFkZXJGaWVsZHMpOworICAgIGhlYWRlckZp
ZWxkcyArPSAyOyAvLyBza2lwICJcclxuIi4KKyAgICBjb25zdCBjaGFyKiBwID0gcmVhZEhUVFBI
ZWFkZXJzKGhlYWRlckZpZWxkcywgaGVhZGVyICsgbGVuLCAmaGVhZGVycyk7CiAgICAgaWYgKCFw
KSB7CiAgICAgICAgIExPRyhOZXR3b3JrLCAicmVhZEhUVFBIZWFkZXJzIGZhaWxlZCIpOwogICAg
ICAgICBtX21vZGUgPSBGYWlsZWQ7CiAgICAgICAgIHJldHVybiBsZW47CiAgICAgfQotICAgIGlm
ICghcHJvY2Vzc0hlYWRlcnMoaGVhZGVycykpIHsKKyAgICBpZiAoIXByb2Nlc3NIZWFkZXJzKGhl
YWRlcnMpIHx8ICFjaGVja1Jlc3BvbnNlSGVhZGVycygpKSB7CiAgICAgICAgIExPRyhOZXR3b3Jr
LCAiaGVhZGVyIHByb2Nlc3MgZmFpbGVkIik7CiAgICAgICAgIG1fbW9kZSA9IEZhaWxlZDsKICAg
ICAgICAgcmV0dXJuIHAgLSBoZWFkZXI7CiAgICAgfQotICAgIHN3aXRjaCAobV9tb2RlKSB7Ci0g
ICAgY2FzZSBOb3JtYWw6Ci0gICAgICAgIGNoZWNrUmVzcG9uc2VIZWFkZXJzKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGRlZmF1bHQ6CisgICAgaWYgKGxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4o
cCAtIGhlYWRlciArIHNpemVvZihtX2V4cGVjdGVkQ2hhbGxlbmdlUmVzcG9uc2UpKSkgeworICAg
ICAgICAvLyBKdXN0IGhhc24ndCBiZWVuIHJlY2VpdmVkIC9leHBlY3RlZC8geWV0LgorICAgICAg
ICBtX21vZGUgPSBJbmNvbXBsZXRlOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlm
IChtZW1jbXAocCwgbV9leHBlY3RlZENoYWxsZW5nZVJlc3BvbnNlLCBzaXplb2YobV9leHBlY3Rl
ZENoYWxsZW5nZVJlc3BvbnNlKSkpIHsKICAgICAgICAgbV9tb2RlID0gRmFpbGVkOwotICAgICAg
ICBicmVhazsKKyAgICAgICAgcmV0dXJuIChwIC0gaGVhZGVyKSArIHNpemVvZihtX2V4cGVjdGVk
Q2hhbGxlbmdlUmVzcG9uc2UpOwogICAgIH0KLSAgICByZXR1cm4gcCAtIGhlYWRlcjsKKyAgICBt
X21vZGUgPSBDb25uZWN0ZWQ7CisgICAgcmV0dXJuIChwIC0gaGVhZGVyKSArIHNpemVvZihtX2V4
cGVjdGVkQ2hhbGxlbmdlUmVzcG9uc2UpOwogfQogCiBXZWJTb2NrZXRIYW5kc2hha2U6Ok1vZGUg
V2ViU29ja2V0SGFuZHNoYWtlOjptb2RlKCkgY29uc3QKQEAgLTQwMiwxMCArNDQ0LDEwIEBAIGNv
bnN0IGNoYXIqIFdlYlNvY2tldEhhbmRzaGFrZTo6cmVhZEhUVFBIZWFkZXJzKGNvbnN0IGNoYXIq
IHN0YXJ0LCBjb25zdCBjaGFyKiBlCiAgICAgICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRk
TWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZl
bCwgIkNSIGRvZXNuJ3QgZm9sbG93IExGIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5k
IC0gcCksIDAsIGNsaWVudE9yaWdpbigpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2Fn
ZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIlVu
ZXhwZWN0ZWQgQ1IgaW4gbmFtZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdlKHAsIGVuZCAtIHAp
LCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNz
YWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAi
VW5leHBlY3RlZCBDUiBpbiBuYW1lIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UobmFtZS5kYXRh
KCksIG5hbWUuc2l6ZSgpKSwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAgICAgICAgICAgICAgIHJl
dHVybiAwOwogICAgICAgICAgICAgY2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3Nh
Z2VMZXZlbCwgIlVuZXhwZWN0ZWQgTEYgaW4gbmFtZSBhdCAiICsgdHJpbUNvbnNvbGVNZXNzYWdl
KHAsIGVuZCAtIHApLCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVz
c2FnZUxldmVsLCAiVW5leHBlY3RlZCBMRiBpbiBuYW1lIGF0ICIgKyB0cmltQ29uc29sZU1lc3Nh
Z2UobmFtZS5kYXRhKCksIG5hbWUuc2l6ZSgpKSwgMCwgY2xpZW50T3JpZ2luKCkpOwogICAgICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgY2FzZSAnOic6CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC00MjksNyArNDcxLDcgQEAgY29uc3QgY2hhciogV2ViU29ja2V0SGFuZHNo
YWtlOjpyZWFkSFRUUEhlYWRlcnMoY29uc3QgY2hhciogc3RhcnQsIGNvbnN0IGNoYXIqIGUKICAg
ICAgICAgICAgIGNhc2UgJ1xyJzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2UgJ1xuJzoKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNz
YWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVjdGVk
IExGIGluIHZhbHVlIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UocCwgZW5kIC0gcCksIDAsIGNs
aWVudE9yaWdpbigpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNN
ZXNzYWdlU291cmNlLCBMb2dNZXNzYWdlVHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJVbmV4cGVj
dGVkIExGIGluIHZhbHVlIGF0ICIgKyB0cmltQ29uc29sZU1lc3NhZ2UodmFsdWUuZGF0YSgpLCB2
YWx1ZS5zaXplKCkpLCAwLCBjbGllbnRPcmlnaW4oKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHZhbHVlLmFwcGVuZCgq
cCk7CkBAIC00NjUsMTEgKzUwNywxMSBAQCBib29sIFdlYlNvY2tldEhhbmRzaGFrZTo6cHJvY2Vz
c0hlYWRlcnMoY29uc3QgSFRUUEhlYWRlck1hcCYgaGVhZGVycykKICAgICBmb3IgKEhUVFBIZWFk
ZXJNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaGVhZGVycy5iZWdpbigpOyBpdCAhPSBoZWFkZXJz
LmVuZCgpOyArK2l0KSB7CiAgICAgICAgIHN3aXRjaCAobV9tb2RlKSB7CiAgICAgICAgIGNhc2Ug
Tm9ybWFsOgotICAgICAgICAgICAgaWYgKGl0LT5maXJzdCA9PSAid2Vic29ja2V0LW9yaWdpbiIp
CisgICAgICAgICAgICBpZiAoaXQtPmZpcnN0ID09ICJzZWMtd2Vic29ja2V0LW9yaWdpbiIpCiAg
ICAgICAgICAgICAgICAgbV93c09yaWdpbiA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBlbHNl
IGlmIChpdC0+Zmlyc3QgPT0gIndlYnNvY2tldC1sb2NhdGlvbiIpCisgICAgICAgICAgICBlbHNl
IGlmIChpdC0+Zmlyc3QgPT0gInNlYy13ZWJzb2NrZXQtbG9jYXRpb24iKQogICAgICAgICAgICAg
ICAgIG1fd3NMb2NhdGlvbiA9IGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICBlbHNlIGlmIChpdC0+
Zmlyc3QgPT0gIndlYnNvY2tldC1wcm90b2NvbCIpCisgICAgICAgICAgICBlbHNlIGlmIChpdC0+
Zmlyc3QgPT0gInNlYy13ZWJzb2NrZXQtcHJvdG9jb2wiKQogICAgICAgICAgICAgICAgIG1fd3NQ
cm90b2NvbCA9IGl0LT5zZWNvbmQ7CiAgICAgICAgICAgICBlbHNlIGlmIChpdC0+Zmlyc3QgPT0g
InNldC1jb29raWUiKQogICAgICAgICAgICAgICAgIG1fc2V0Q29va2llID0gaXQtPnNlY29uZDsK
QEAgLTQ4NiwzNSArNTI4LDMyIEBAIGJvb2wgV2ViU29ja2V0SGFuZHNoYWtlOjpwcm9jZXNzSGVh
ZGVycyhjb25zdCBIVFRQSGVhZGVyTWFwJiBoZWFkZXJzKQogICAgIHJldHVybiB0cnVlOwogfQog
Ci12b2lkIFdlYlNvY2tldEhhbmRzaGFrZTo6Y2hlY2tSZXNwb25zZUhlYWRlcnMoKQorYm9vbCBX
ZWJTb2NrZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9uc2VIZWFkZXJzKCkKIHsKLSAgICBBU1NFUlQo
bV9tb2RlID09IE5vcm1hbCk7Ci0gICAgbV9tb2RlID0gRmFpbGVkOwogICAgIGlmIChtX3dzT3Jp
Z2luLmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VT
b3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBX
ZWJTb2NrZXQgaGFuZHNoYWtlOiAnd2Vic29ja2V0LW9yaWdpbicgaGVhZGVyIGlzIG1pc3Npbmci
LCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb250ZXh0
LT5hZGRNZXNzYWdlKEpTTWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2Fn
ZUxldmVsLCAiRXJyb3IgZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6ICdzZWMtd2Vic29ja2V0
LW9yaWdpbicgaGVhZGVyIGlzIG1pc3NpbmciLCAwLCBjbGllbnRPcmlnaW4oKSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgaWYgKG1fd3NMb2NhdGlvbi5pc051bGwoKSkgewot
ICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFr
ZTogJ3dlYnNvY2tldC1sb2NhdGlvbicgaGVhZGVyIGlzIG1pc3NpbmciLCAwLCBjbGllbnRPcmln
aW4oKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgbV9jb250ZXh0LT5hZGRNZXNzYWdlKEpT
TWVzc2FnZVNvdXJjZSwgTG9nTWVzc2FnZVR5cGUsIEVycm9yTWVzc2FnZUxldmVsLCAiRXJyb3Ig
ZHVyaW5nIFdlYlNvY2tldCBoYW5kc2hha2U6ICdzZWMtd2Vic29ja2V0LWxvY2F0aW9uJyBoZWFk
ZXIgaXMgbWlzc2luZyIsIDAsIGNsaWVudE9yaWdpbigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAogICAgIGlmIChjbGllbnRPcmlnaW4oKSAhPSBtX3dzT3JpZ2luKSB7CiAgICAg
ICAgIG1fY29udGV4dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBl
LCBFcnJvck1lc3NhZ2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBv
cmlnaW4gbWlzbWF0Y2g6ICIgKyBjbGllbnRPcmlnaW4oKSArICIgIT0gIiArIG1fd3NPcmlnaW4s
IDAsIGNsaWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogICAgIGlmIChjbGllbnRMb2NhdGlvbigpICE9IG1fd3NMb2NhdGlvbikgewog
ICAgICAgICBtX2NvbnRleHQtPmFkZE1lc3NhZ2UoSlNNZXNzYWdlU291cmNlLCBMb2dNZXNzYWdl
VHlwZSwgRXJyb3JNZXNzYWdlTGV2ZWwsICJFcnJvciBkdXJpbmcgV2ViU29ja2V0IGhhbmRzaGFr
ZTogbG9jYXRpb24gbWlzbWF0Y2g6ICIgKyBjbGllbnRMb2NhdGlvbigpICsgIiAhPSAiICsgbV93
c0xvY2F0aW9uLCAwLCBjbGllbnRPcmlnaW4oKSk7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgIH0KICAgICBpZiAoIW1fY2xpZW50UHJvdG9jb2wuaXNFbXB0eSgp
ICYmIG1fY2xpZW50UHJvdG9jb2wgIT0gbV93c1Byb3RvY29sKSB7CiAgICAgICAgIG1fY29udGV4
dC0+YWRkTWVzc2FnZShKU01lc3NhZ2VTb3VyY2UsIExvZ01lc3NhZ2VUeXBlLCBFcnJvck1lc3Nh
Z2VMZXZlbCwgIkVycm9yIGR1cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBwcm90b2NvbCBtaXNt
YXRjaDogIiArIG1fY2xpZW50UHJvdG9jb2wgKyAiICE9ICIgKyBtX3dzUHJvdG9jb2wsIDAsIGNs
aWVudE9yaWdpbigpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIG1fbW9kZSA9IENvbm5lY3RlZDsKLSAgICByZXR1cm47CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLX0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKLSNlbmRpZiAgLy8gRU5BQkxFKFdFQl9TT0NLRVRTKQorI2VuZGlmIC8vIEVOQUJMRShXRUJf
U09DS0VUUykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hh
a2UuaCBiL1dlYkNvcmUvd2Vic29ja2V0cy9XZWJTb2NrZXRIYW5kc2hha2UuaAppbmRleCBkZjE5
OWZmZjI3OGE2YzQ5MTFhODg5NzUyZGZmYjA0NTc5MzJhMTcyLi4zZTBjNjZhNmE0OGM2OGM2Nzlk
MTc0NTQwZTRjZWZiODdiMTFlNjQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dlYnNvY2tldHMvV2Vi
U29ja2V0SGFuZHNoYWtlLmgKKysrIGIvV2ViQ29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRz
aGFrZS5oCkBAIC00MCw4ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotICAgIGNs
YXNzIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ7CiAgICAgY2xhc3MgSFRUUEhlYWRlck1hcDsKKyAg
ICBjbGFzcyBTY3JpcHRFeGVjdXRpb25Db250ZXh0OwogCiAgICAgY2xhc3MgV2ViU29ja2V0SGFu
ZHNoYWtlIDogcHVibGljIE5vbmNvcHlhYmxlIHsKICAgICBwdWJsaWM6CkBAIC05Miw3ICs5Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gUmVhZHMgYWxsIGhlYWRlcnMgZXhj
ZXB0IGZvciB0aGUgdHdvIHByZWRlZmluZWQgb25lcy4KICAgICAgICAgY29uc3QgY2hhciogcmVh
ZEhUVFBIZWFkZXJzKGNvbnN0IGNoYXIqIHN0YXJ0LCBjb25zdCBjaGFyKiBlbmQsIEhUVFBIZWFk
ZXJNYXAqIGhlYWRlcnMpOwogICAgICAgICBib29sIHByb2Nlc3NIZWFkZXJzKGNvbnN0IEhUVFBI
ZWFkZXJNYXAmIGhlYWRlcnMpOwotICAgICAgICB2b2lkIGNoZWNrUmVzcG9uc2VIZWFkZXJzKCk7
CisgICAgICAgIGJvb2wgY2hlY2tSZXNwb25zZUhlYWRlcnMoKTsKIAogICAgICAgICBLVVJMIG1f
dXJsOwogICAgICAgICBTdHJpbmcgbV9jbGllbnRQcm90b2NvbDsKQEAgLTEwNiw2ICsxMDYsMTEg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV93c1Byb3RvY29sOwogICAg
ICAgICBTdHJpbmcgbV9zZXRDb29raWU7CiAgICAgICAgIFN0cmluZyBtX3NldENvb2tpZTI7CisK
KyAgICAgICAgU3RyaW5nIG1fc2VjV2ViU29ja2V0S2V5MTsKKyAgICAgICAgU3RyaW5nIG1fc2Vj
V2ViU29ja2V0S2V5MjsKKyAgICAgICAgdW5zaWduZWQgY2hhciBtX2tleTNbOF07CisgICAgICAg
IHVuc2lnbmVkIGNoYXIgbV9leHBlY3RlZENoYWxsZW5nZVJlc3BvbnNlWzE2XTsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="39342"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="39452"
          type_id="3"
          status="-"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>