<?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>162035</bug_id>
          
          <creation_ts>2016-09-15 14:57:29 -0700</creation_ts>
          <short_desc>Use Vector&lt;LChar&gt; instead of StringBuilder for the ASCII parts of URLParser</short_desc>
          <delta_ts>2016-09-16 13:37:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1230199</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 14:57:29 -0700</bug_when>
    <thetext>Use Vector&lt;LChar&gt; instead of StringBuilder for the ASCII parts of URLParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230202</commentid>
    <comment_count>1</comment_count>
      <attachid>289004</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 14:59:50 -0700</bug_when>
    <thetext>Created attachment 289004
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230204</commentid>
    <comment_count>2</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 15:05:47 -0700</bug_when>
    <thetext>This is a ~20% speedup in url parsing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230220</commentid>
    <comment_count>3</comment_count>
      <attachid>289004</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-09-15 15:48:34 -0700</bug_when>
    <thetext>Comment on attachment 289004
Patch

Should we have a StringBuilder&lt;CharacterType&gt; class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230221</commentid>
    <comment_count>4</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 15:50:15 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; Use Vector&lt;LChar&gt; instead of StringBuilder for the ASCII parts of URLParser
I don&apos;t think so.  It wouldn&apos;t help in this case, where most of the time we are creating 8-bit Strings, but we need to be able to change our mind at the end and make a 16-bit string if there are unicode code points in the fragment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230228</commentid>
    <comment_count>5</comment_count>
      <attachid>289004</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-15 16:13:17 -0700</bug_when>
    <thetext>Comment on attachment 289004
Patch

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

&gt; Source/WebCore/ChangeLog:11
&gt; +

Perf data?

&gt; Source/WebCore/platform/URLParser.cpp:449
&gt;          builder.append(codePoint);

This looks risky given that codePoint is a Uchar32?

&gt; Source/WebCore/platform/URLParser.cpp:653
&gt; +            m_asciiBuffer.uncheckedAppend(base.m_string[i]);

Using [] operator on String, you have a branch for each iteration that checks if the buffer is 8bit. You only need to do the check once. Then you could access either characters8() or characters16() on the string and iterate over that (maybe even use vector::append(base.m_string.characters8(), asciiLength);)

&gt; Source/WebCore/platform/URLParser.cpp:657
&gt; +        for (size_t i = 0; i &lt; asciiLength; ++i) {

There could be a fast path if fragment.is8bit().

&gt; Source/WebCore/platform/URLParser.cpp:669
&gt; +            ASSERT_WITH_SECURITY_IMPLICATION(isASCII(base.m_string[i]));

Same comments as above.

&gt; Source/WebCore/platform/URLParser.cpp:1159
&gt; +                m_asciiBuffer.uncheckedAppend(&apos;/&apos;);

I am pretty sure we can write these on 1 line.

&gt; Source/WebCore/platform/URLParser.cpp:1177
&gt; +                m_asciiBuffer.uncheckedAppend(&apos;/&apos;);

could be on 1 line.

&gt; Source/WebCore/platform/URLParser.cpp:1197
&gt; +                    m_asciiBuffer.uncheckedAppend(&apos;/&apos;);

Could be on 1 line.

&gt; Source/WebCore/platform/URLParser.cpp:1508
&gt; +            m_asciiBuffer.resize(m_url.m_passwordEnd);

I believe it would be nicer to use shrink() or shrinkCapacity() here.

&gt; Source/WebCore/platform/URLParser.cpp:1603
&gt; +    case 1:

This seems super long. We can probably use something like &apos;0&apos; + digit.

&gt; Source/WebCore/platform/URLParser.cpp:1640
&gt; +    bool appendZero = false;

I think this should just be a loop that keeps dividing by 10 and keeps appending &apos;0&apos; + number %10.

&gt; Source/WebCore/platform/URLParser.cpp:1659
&gt; +static void appendNumber(Vector&lt;LChar&gt;&amp; destination, uint16_t number)

I think we probably don&apos;t need this overload if we use the loop I suggest?

&gt; Source/WebCore/platform/URLParser.cpp:2175
&gt; +    for (size_t i = 0; i &lt; asciiDomain.value().length(); ++i)

We don&apos;t need a loop here, we can use asciiDomainCharacters and asciiDomain.size() and do 1 call to append().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230230</commentid>
    <comment_count>6</comment_count>
      <attachid>289012</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 16:18:41 -0700</bug_when>
    <thetext>Created attachment 289012
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230243</commentid>
    <comment_count>7</comment_count>
      <attachid>289012</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-15 16:50:41 -0700</bug_when>
    <thetext>Comment on attachment 289012
Patch

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

I think this looks good otherwise.

&gt; Source/WebCore/platform/URLParser.cpp:408
&gt; +static bool isWindowsDriveLetter(const Vector&lt;LChar&gt;&amp; buffer, size_t index)

I think it&apos;d be nice to rename builder to buffer everywhere, not just here since you switch to a vector.

&gt; Source/WebCore/platform/URLParser.cpp:654
&gt; +            m_asciiBuffer.append(base.m_string.characters8(), asciiLength);

In this if case, we know the fragment has no unicode character. Therefore, you can append the whole m_string, not just up to asciiLength.

&gt; Source/WebCore/platform/URLParser.cpp:657
&gt; +                UChar c = base.m_string.characters16()[i];

I would cache base.m_string.characters16() before the loop.

&gt; Source/WebCore/platform/URLParser.cpp:664
&gt; +        for (size_t i = 0; i &lt; asciiLength; ++i) {

This only needs to be done in the else case.

&gt; Source/WebCore/platform/URLParser.cpp:672
&gt; +    } else {

The whole code in this else case is pretty much duplicated from the first part of your if case. I think we should move this to a separate utility function to avoid duplication.

&gt; Source/WebCore/platform/URLParser.cpp:1582
&gt; +    destination.reserveCapacity(destination.size() + strlen(&quot;255&quot;));

I would just use + 3 here.

&gt; Source/WebCore/platform/URLParser.cpp:1601
&gt; +    destination.reserveCapacity(destination.size() + strlen(&quot;65535&quot;));

I would just use + 5 here.

&gt; Source/WebCore/platform/URLParser.cpp:1609
&gt; +    if (tenThousands) {

Honestly, unless there is a measurable impact on performance. I think it would look a lot nicer and the code would be much shorter if we used something similar to what StringBuilder is using:
    LChar buf[sizeof(UnsignedIntegerType) * 3 + 1];
    LChar* end = buf + WTF_ARRAY_LENGTH(buf);
    LChar* p = end;

    do {
        *--p = (number % 10) + &apos;0&apos;;
        number /= 10;
    } while (number);

   destination.append(p, end - p);

Then we don&apos;t need 2 separate functions either, just a templated one.

&gt; Source/WebCore/platform/URLParser.cpp:1999
&gt; +        LChar colon = m_asciiBuffer.takeLast();

I would prefer:
ASSERT(m_asciiBuffer.last() == &apos;:&apos;);
m_asciiBuffer.shrink(m_asciiBuffer.size() - 1);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230267</commentid>
    <comment_count>8</comment_count>
      <attachid>289023</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 17:32:01 -0700</bug_when>
    <thetext>Created attachment 289023
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230312</commentid>
    <comment_count>9</comment_count>
      <attachid>289033</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-15 22:16:36 -0700</bug_when>
    <thetext>Created attachment 289033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230557</commentid>
    <comment_count>10</comment_count>
      <attachid>289033</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-16 13:03:55 -0700</bug_when>
    <thetext>Comment on attachment 289033
Patch

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

r=me but please check why the win EWS is sad.

&gt; Source/WebCore/platform/URLParser.cpp:641
&gt; +static void copyASCIIStringUntil(Vector&lt;LChar&gt;&amp; destination, const String&amp; string, size_t length8Bit, size_t length16Bit)

nit: I would call the parameters: lengthIf8Bit / lengthIf16Bit.

&gt; Source/WebCore/platform/URLParser.cpp:665
&gt; +        if (!base.m_string.is8Bit()) {

nit: Feel free to ignore this comment but I personally feel this is likely not worth the complexity. In the 16bit case, I would just copy the whole fragment to m_unicodeFragmentBuffer. This also probably means we would be able to reuse copyASCIIStringUntil() and do this on one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230575</commentid>
    <comment_count>11</comment_count>
      <attachid>289104</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 13:34:05 -0700</bug_when>
    <thetext>Created attachment 289104
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230577</commentid>
    <comment_count>12</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 13:35:30 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt; Source/WebCore/platform/URLParser.cpp:665
&gt; &gt; +        if (!base.m_string.is8Bit()) {
&gt; 
&gt; nit: Feel free to ignore this comment but I personally feel this is likely
&gt; not worth the complexity. In the 16bit case, I would just copy the whole
&gt; fragment to m_unicodeFragmentBuffer. This also probably means we would be
&gt; able to reuse copyASCIIStringUntil() and do this on one line.
If we feel like optimizing the performance of non-ascii fragments, we could make m_unicodeFragmentBuffer a Vector&lt;UChar&gt; instead of a Vector&lt;UChar32&gt;.  That should be done in a different patch, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230578</commentid>
    <comment_count>13</comment_count>
      <attachid>289105</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 13:36:39 -0700</bug_when>
    <thetext>Created attachment 289105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1230580</commentid>
    <comment_count>14</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-09-16 13:37:36 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/206044</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289004</attachid>
            <date>2016-09-15 14:59:50 -0700</date>
            <delta_ts>2016-09-15 16:18:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160915145712.patch</filename>
            <type>text/plain</type>
            <size>47030</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTk5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdC
dWZmZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAg
IFdoZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJh
bnRlZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBm
b3IgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywg
YW5kIGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKworICAgICAgICBDb3Zl
cmVkIGJ5IGV4aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAg
IChXZWJDb3JlOjpwZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50
RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2Vy
Ojpjb3B5VVJMUGFydHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBh
dGgpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpVUkxQYXJzZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OnVuY2hl
Y2tlZEFwcGVuZERpZ2l0KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6CisgICAg
ICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6
ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAgICAgICAg
KFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBh
cnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVuY29kZWRG
b3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1VSTFBh
cnNlci5oOgorCiAyMDE2LTA5LTE1ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGJ1aWxkLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
VVJMUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuY3BwCShyZXZpc2lvbiAyMDU5OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9V
UkxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDUsMTEgKzQwNSwxMSBAQCBzdGF0aWMg
Ym9vbCBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pCiAgICAgcmV0dXJuICppdGVyYXRvciA9
PSAnOicgfHwgKml0ZXJhdG9yID09ICd8JzsKIH0KIAotc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJp
dmVMZXR0ZXIoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgc2l6ZV90IGluZGV4KQorc3Rh
dGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgVmVjdG9yPExDaGFyPiYgYnVmZmVy
LCBzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPCBpbmRleCArIDIp
CisgICAgaWYgKGJ1ZmZlci5zaXplKCkgPCBpbmRleCArIDIpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1aWxkZXJbaW5kZXhdKSAmJiAoYnVpbGRlcltp
bmRleCArIDFdID09ICc6JyB8fCBidWlsZGVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKKyAgICByZXR1
cm4gaXNBU0NJSUFscGhhKGJ1ZmZlcltpbmRleF0pICYmIChidWZmZXJbaW5kZXggKyAxXSA9PSAn
OicgfHwgYnVmZmVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUg
Q2hhcmFjdGVyVHlwZT4KQEAgLTQyOCwxNCArNDI4LDE0IEBAIHN0YXRpYyBib29sIHNob3VsZENv
cHlGaWxlVVJMKENvZGVQb2ludEkKICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgq
aXRlcmF0b3IpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVpbnQ4X3QgYnl0ZSwg
U3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRFbmNvZGUodWludDhf
dCBieXRlLCBWZWN0b3I8TENoYXI+JiBidWlsZGVyKQogewogICAgIGJ1aWxkZXIuYXBwZW5kKCcl
Jyk7CiAgICAgYnVpbGRlci5hcHBlbmQodXBwZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYnl0ZSkp
OwogICAgIGJ1aWxkZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsK
IH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGJvb2woKmlzSW5Db2RlU2V0KShVQ2hhcjMyKSkKK3N0YXRp
YyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+
JiBidWlsZGVyLCBib29sKCppc0luQ29kZVNldCkoVUNoYXIzMikpCiB7CiAgICAgaWYgKGlzSW5D
b2RlU2V0KGNvZGVQb2ludCkpIHsKICAgICAgICAgdWludDhfdCBidWZmZXJbVThfTUFYX0xFTkdU
SF07CkBAIC00NDksNyArNDQ5LDcgQEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNo
YXIzMiBjbwogICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlUG9pbnQpOwogfQogCi1zdGF0aWMg
dm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyMzIgY29kZVBvaW50LCBTdHJpbmdCdWls
ZGVyJiBidWlsZGVyKQorc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeShVQ2hhcjMy
IGNvZGVQb2ludCwgVmVjdG9yPExDaGFyPiYgYnVpbGRlcikKIHsKICAgICB1aW50OF90IGJ1ZmZl
cltVOF9NQVhfTEVOR1RIXTsKICAgICBpbnQzMl90IG9mZnNldCA9IDA7CkBAIC00NjYsNyArNDY2
LDcgQEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeShVQ2hhcgogICAgIH0KIH0K
ICAgICAKLXN0YXRpYyB2b2lkIGVuY29kZVF1ZXJ5KGNvbnN0IFN0cmluZ0J1aWxkZXImIHNvdXJj
ZSwgU3RyaW5nQnVpbGRlciYgZGVzdGluYXRpb24sIGNvbnN0IFRleHRFbmNvZGluZyYgZW5jb2Rp
bmcpCitzdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdCdWlsZGVyJiBzb3VyY2Us
IFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5n
KQogewogICAgIC8vIEZJWE1FOiBJdCBpcyB1bmNsZWFyIGluIHRoZSBzcGVjIHdoYXQgdG8gZG8g
d2hlbiBlbmNvZGluZyBmYWlscy4gVGhlIGJlaGF2aW9yIHNob3VsZCBiZSBzcGVjaWZpZWQgYW5k
IHRlc3RlZC4KICAgICBDU3RyaW5nIGVuY29kZWQgPSBlbmNvZGluZy5lbmNvZGUoc291cmNlLnRv
U3RyaW5nUHJlc2VydmVDYXBhY2l0eSgpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJs
ZXMpOwpAQCAtNTk1LDE1ICs1OTUsNiBAQCBzdGF0aWMgYm9vbCBpc1NwZWNpYWxTY2hlbWUoU3Ry
aW5nVmlldyBzCiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotc3RhdGljIFN0cmlu
Z1ZpZXcgYnVmZmVyVmlldyhjb25zdCBUJiBidWZmZXIsIHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgQVNTRVJUKGJ1ZmZlci5sZW5ndGgoKSA+PSBsZW5ndGgpOwotICAg
IGlmIChidWZmZXIuaXM4Qml0KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmdWaWV3KGJ1ZmZlci5j
aGFyYWN0ZXJzOCgpICsgc3RhcnQsIGxlbmd0aCk7Ci0gICAgcmV0dXJuIFN0cmluZ1ZpZXcoYnVm
ZmVyLmNoYXJhY3RlcnMxNigpICsgc3RhcnQsIGxlbmd0aCk7Ci19Ci0KIGVudW0gY2xhc3MgVVJM
UGFyc2VyOjpVUkxQYXJ0IHsKICAgICBTY2hlbWVFbmQsCiAgICAgVXNlclN0YXJ0LApAQCAtNjQ3
LDggKzYzOCwzOCBAQCBzaXplX3QgVVJMUGFyc2VyOjp1cmxMZW5ndGhVbnRpbFBhcnQoY29uCiAg
ICAgCiB2b2lkIFVSTFBhcnNlcjo6Y29weVVSTFBhcnRzVW50aWwoY29uc3QgVVJMJiBiYXNlLCBV
UkxQYXJ0IHBhcnQpCiB7Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICBtX2J1ZmZlci5hcHBl
bmQoYmFzZS5tX3N0cmluZy5zdWJzdHJpbmcoMCwgdXJsTGVuZ3RoVW50aWxQYXJ0KGJhc2UsIHBh
cnQpKSk7CisgICAgbV9hc2NpaUJ1ZmZlci5jbGVhcigpOworICAgIG1fdW5pY29kZUZyYWdtZW50
QnVmZmVyLmNsZWFyKCk7CisgICAgaWYgKHBhcnQgPT0gVVJMUGFydDo6RnJhZ21lbnRFbmQpIHsK
KyAgICAgICAgc2l6ZV90IGFzY2lpTGVuZ3RoID0gdXJsTGVuZ3RoVW50aWxQYXJ0KGJhc2UsIFVS
TFBhcnQ6OlF1ZXJ5RW5kKTsKKyAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gYmFzZS5mcmFnbWVu
dElkZW50aWZpZXIoKTsKKyAgICAgICAgc2l6ZV90IG1heWJlVW5pY29kZUxlbmd0aCA9IGZyYWdt
ZW50Lmxlbmd0aCgpOworCisgICAgICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGFz
Y2lpTGVuZ3RoICsgbWF5YmVVbmljb2RlTGVuZ3RoKTsKKyAgICAgICAgbV91bmljb2RlRnJhZ21l
bnRCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KG1heWJlVW5pY29kZUxlbmd0aCk7CisKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBhc2NpaUxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBB
U1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0FTQ0lJKGJhc2UubV9zdHJpbmdbaV0p
KTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKGJhc2UubV9zdHJp
bmdbaV0pOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBzZWVuVW5pY29kZSA9IGZhbHNlOwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFzY2lpTGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgICAgIGlmICghc2VlblVuaWNvZGUgJiYgIWlzQVNDSUkoZnJhZ21lbnRbaV0pKQorICAgICAg
ICAgICAgICAgIHNlZW5Vbmljb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgIGlmIChzZWVuVW5pY29k
ZSkKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci51bmNoZWNrZWRBcHBl
bmQoZnJhZ21lbnRbaV0pOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKGZyYWdtZW50W2ldKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSB1cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwg
cGFydCk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAg
IEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGlzQVNDSUkoYmFzZS5tX3N0cmluZ1tp
XSkpOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoYmFzZS5tX3N0
cmluZ1tpXSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgc3dpdGNoIChwYXJ0KSB7CiAgICAgY2Fz
ZSBVUkxQYXJ0OjpGcmFnbWVudEVuZDoKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IGJh
c2UubV9mcmFnbWVudEVuZDsKQEAgLTY4Miw3ICs3MDMsNyBAQCB2b2lkIFVSTFBhcnNlcjo6Y29w
eVVSTFBhcnRzVW50aWwoY29uc3QgCiAgICAgICAgIG1fdXJsLm1fcHJvdG9jb2xJc0luSFRUUEZh
bWlseSA9IGJhc2UubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5OwogICAgICAgICBtX3VybC5tX3Nj
aGVtZUVuZCA9IGJhc2UubV9zY2hlbWVFbmQ7CiAgICAgfQotICAgIG1fdXJsSXNTcGVjaWFsID0g
aXNTcGVjaWFsU2NoZW1lKGJ1ZmZlclZpZXcobV9idWZmZXIsIDAsIG1fdXJsLm1fc2NoZW1lRW5k
KSk7CisgICAgbV91cmxJc1NwZWNpYWwgPSBpc1NwZWNpYWxTY2hlbWUoU3RyaW5nVmlldyhtX2Fz
Y2lpQnVmZmVyLmRhdGEoKSwgbV91cmwubV9zY2hlbWVFbmQpKTsKIH0KIAogc3RhdGljIGNvbnN0
IGNoYXIqIGRvdEFTQ0lJQ29kZSA9ICIyZSI7CkBAIC04MDIsMTMgKzgyMywxMyBAQCB2b2lkIFVS
TFBhcnNlcjo6cG9wUGF0aCgpCiB7CiAgICAgaWYgKG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNo
ID4gbV91cmwubV9wb3J0RW5kICsgMSkgewogICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RT
bGFzaC0tOwotICAgICAgICBpZiAobV9idWZmZXJbbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2hd
ID09ICcvJykKKyAgICAgICAgaWYgKG1fYXNjaWlCdWZmZXJbbV91cmwubV9wYXRoQWZ0ZXJMYXN0
U2xhc2hdID09ICcvJykKICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoLS07
Ci0gICAgICAgIHdoaWxlIChtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9y
dEVuZCAmJiBtX2J1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gIT0gJy8nKQorICAg
ICAgICB3aGlsZSAobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRFbmQg
JiYgbV9hc2NpaUJ1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gIT0gJy8nKQogICAg
ICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKICAgICAgICAgbV91cmwubV9w
YXRoQWZ0ZXJMYXN0U2xhc2grKzsKICAgICB9Ci0gICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1f
cGF0aEFmdGVyTGFzdFNsYXNoKTsKKyAgICBtX2FzY2lpQnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+
CkBAIC04NDQsOCArODY1LDkgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVy
VHlwZQogewogICAgIExPRyhVUkxQYXJzZXIsICJQYXJzaW5nIFVSTCA8JXM+IGJhc2UgPCVzPiIs
IFN0cmluZyhpbnB1dCwgbGVuZ3RoKS51dGY4KCkuZGF0YSgpLCBiYXNlLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIG1fdXJsID0geyB9OwotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci0gICAg
bV9idWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgbV9hc2NpaUJ1ZmZlci5jbGVh
cigpOworICAgIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmNsZWFyKCk7CisgICAgbV9hc2NpaUJ1
ZmZlci5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKICAgICAKICAgICBib29sIGlzVVRGOEVuY29k
aW5nID0gZW5jb2RpbmcgPT0gVVRGOEVuY29kaW5nKCk7CiAgICAgU3RyaW5nQnVpbGRlciBxdWVy
eUJ1ZmZlcjsKQEAgLTg4MSw3ICs5MDMsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgICAgIEZyYWdtZW50LAogICAgIH07CiAKLSNkZWZpbmUgTE9HX1NU
QVRFKHgpIExPRyhVUkxQYXJzZXIsICJTdGF0ZSAlcywgY29kZSBwb2ludCAlYywgYnVmZmVyIGxl
bmd0aCAlZCIsIHgsICpjLCBtX2J1ZmZlci5sZW5ndGgoKSkKKyNkZWZpbmUgTE9HX1NUQVRFKHgp
IExPRyhVUkxQYXJzZXIsICJTdGF0ZSAlcywgY29kZSBwb2ludCAlYywgYXNjaWlCdWZmZXIgc2l6
ZSAlenUiLCB4LCAqYywgbV9hc2NpaUJ1ZmZlci5zaXplKCkpCiAjZGVmaW5lIExPR19GSU5BTF9T
VEFURSh4KSBMT0coVVJMUGFyc2VyLCAiRmluYWwgU3RhdGU6ICVzIiwgeCkKIAogICAgIFN0YXRl
IHN0YXRlID0gU3RhdGU6OlNjaGVtZVN0YXJ0OwpAQCAtODk1LDcgKzkxNyw3IEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBTdGF0ZTo6U2No
ZW1lU3RhcnQ6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZVN0YXJ0Iik7CiAgICAgICAg
ICAgICBpZiAoaXNBU0NJSUFscGhhKCpjKSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnVu
Y2hlY2tlZEFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsKICAgICAgICAgICAgICAgICArK2M7CiAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U2NoZW1lOwogICAgICAgICAgICAgfSBlbHNl
CkBAIC05MDQsMTkgKzkyNiwxOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0
ZXJUeXBlCiAgICAgICAgIGNhc2UgU3RhdGU6OlNjaGVtZToKICAgICAgICAgICAgIExPR19TVEFU
RSgiU2NoZW1lIik7CiAgICAgICAgICAgICBpZiAoaXNBU0NJSUFscGhhbnVtZXJpYygqYykgfHwg
KmMgPT0gJysnIHx8ICpjID09ICctJyB8fCAqYyA9PSAnLicpCi0gICAgICAgICAgICAgICAgbV9i
dWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqYykpOworICAgICAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqYykpOwogICAgICAgICAgICAgZWxzZSBpZiAoKmMg
PT0gJzonKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBTdHJpbmdWaWV3IHVybFNjaGVtZSA9IGJ1ZmZlclZp
ZXcobV9idWZmZXIsIDAsIG1fdXJsLm1fc2NoZW1lRW5kKTsKKyAgICAgICAgICAgICAgICBtX3Vy
bC5tX3NjaGVtZUVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOworICAgICAgICAgICAgICAgIFN0
cmluZ1ZpZXcgdXJsU2NoZW1lID0gU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSwgbV91
cmwubV9zY2hlbWVFbmQpOwogICAgICAgICAgICAgICAgIG1fdXJsLm1fcHJvdG9jb2xJc0luSFRU
UEZhbWlseSA9IHVybFNjaGVtZSA9PSAiaHR0cCIgfHwgdXJsU2NoZW1lID09ICJodHRwcyI7CiAg
ICAgICAgICAgICAgICAgaWYgKHVybFNjaGVtZSA9PSAiZmlsZSIpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV91cmxJc1NwZWNpYWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpGaWxlOwotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsK
KyAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAg
ICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAgICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgICAgICBpZiAoaXNT
cGVjaWFsU2NoZW1lKHVybFNjaGVtZSkpIHsKICAgICAgICAgICAgICAgICAgICAgbV91cmxJc1Nw
ZWNpYWwgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICBpZiAoYmFzZS5wcm90b2NvbCgpID09
IHVybFNjaGVtZSkKQEAgLTkyNCw3ICs5NDYsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25z
dCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0
ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0
YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1f
dXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5t
X3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1f
dXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtOTM0LDcgKzk1Niw3IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICAg
ICAgd2hpbGUgKCFtYXliZVNsYXNoLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKm1heWJlU2xh
c2gpKQogICAgICAgICAgICAgICAgICAgICAgICAgKyttYXliZVNsYXNoOwogICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1heWJlU2xhc2guYXRFbmQoKSAmJiAqbWF5YmVTbGFzaCA9PSAnLycpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV91cmwubV91c2VyU3RhcnQg
KyAxOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aE9yQXV0aG9y
aXR5OwogICAgICAgICAgICAgICAgICAgICAgICAgYyA9IG1heWJlU2xhc2g7CkBAIC05NDgsNyAr
OTcwLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAg
ICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6Tm9T
Y2hlbWU7CiAgICAgICAgICAgICAgICAgYyA9IGJlZ2luQWZ0ZXJDb250cm9sQW5kU3BhY2U7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CkBAIC05NTcsNyArOTc5LDcgQEAgVVJMIFVSTFBhcnNlcjo6
cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkg
JiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAg
IGlmIChjLmF0RW5kKCkpIHsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5jbGVhcigpOworICAg
ICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBzdGF0
ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAgICAgICAgICAgICBjID0gYmVnaW5BZnRlckNvbnRy
b2xBbmRTcGFjZTsKICAgICAgICAgICAgIH0KQEAgLTk2OSw3ICs5OTEsNyBAQCBVUkwgVVJMUGFy
c2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAoYmFzZS5tX2Nh
bm5vdEJlQUJhc2VVUkwgJiYgKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBh
cnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwogICAgICAgICAgICAgICAgIHN0YXRl
ID0gU3RhdGU6OkZyYWdtZW50OwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAg
ICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTc4
LDIwICsxMDAwLDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvcHlV
UkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7
CiAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGaWxlOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgogICAgICAgICAg
ICAgTE9HX1NUQVRFKCJTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eSIpOwogICAgICAgICAgICAg
aWYgKCpjID09ICcvJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwor
ICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXds
aW5lKCpjKSkKICAgICAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGlmIChj
LmF0RW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5n
dGgpOwogICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNp
YWxBdXRob3JpdHlJZ25vcmVTbGFzaGVzOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgfQpAQCAtMTAwMSw4ICsxMDIzLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpQYXRoT3JBdXRob3JpdHk6
CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlBhdGhPckF1dGhvcml0eSIpOwogICAgICAgICAgICAg
aWYgKCpjID09ICcvJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwot
ICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7Cisg
ICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAg
ICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAg
ICAgIHN0YXRlID0gU3RhdGU6OkF1dGhvcml0eU9ySG9zdDsKICAgICAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwpAQCAtMTAxOSwxMyAr
MTA0MSwxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAg
ICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAg
ICAgICBtX2J1ZmZlci5hcHBlbmQoJz8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVy
LmFwcGVuZCgnPycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAg
ICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgJyMnOgogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6
OlF1ZXJ5RW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJyMnKTsKKyAgICAg
ICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnIycpOwogICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGU6OkZyYWdtZW50OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTEwNDAsMTggKzEwNjIsMjMgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAn
XFwnKSB7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0
c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZm
ZXIuYXBwZW5kKCI6Ly8iKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVD
YXBhY2l0eShtX2FzY2lpQnVmZmVyLnNpemUoKSArIDMpOworICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci51bmNoZWNrZWRBcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVy
LnVuY2hlY2tlZEFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNw
ZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFzaGVzOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQb3J0RW5kKTsKLSAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVy
TGFzdFNsYXNoID0gYmFzZS5tX3BvcnRFbmQgKyAxOwogICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OlBhdGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM6CiAgICAgICAgICAgICBMT0dfU1RB
VEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoIi8vIik7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eShtX2Fz
Y2lpQnVmZmVyLnNpemUoKSArIDIpOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoJy8nKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5k
KCcvJyk7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsKICAgICAg
ICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNU
YWJPck5ld2xpbmUoKmMpKQpAQCAtMTA2NiwxMCArMTA5MywxMCBAQCBVUkwgVVJMUGFyc2VyOjpw
YXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRo
b3JpdHlJZ25vcmVTbGFzaGVzOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsQXV0aG9y
aXR5SWdub3JlU2xhc2hlcyIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAn
XFwnKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICArK2M7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxl
bmd0aCgpOworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkF1dGhvcml0eU9ySG9zdDsKICAgICAg
ICAgICAgIGF1dGhvcml0eU9ySG9zdEJlZ2luID0gYzsKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTA4OCwxMyArMTExNSwxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJvb2wgaXNTbGFzaCA9ICpj
ID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJyk7CiAgICAgICAgICAgICAg
ICAgaWYgKGlzU2xhc2ggfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgewotICAgICAgICAgICAg
ICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7CiAgICAg
ICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3Rl
clR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFpc1NsYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8n
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0g
bV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVy
LmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJM
YXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKQEAgLTExMjEsMTUgKzExNDgsMTkgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgc3dpdGNoICgqYykgewogICAgICAgICAg
ICAgY2FzZSAnLyc6CiAgICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAgICAgICAgICAgbV9i
dWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Jy8nKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGaWxlU2xhc2g7CiAgICAgICAg
ICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAn
Pyc6CiAgICAgICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVsbCgpICYmIGJhc2UucHJvdG9jb2xJ
cygiZmlsZSIpKQogICAgICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBV
UkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vLz8i
KTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgp
IC0gMjsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eShtX2Fz
Y2lpQnVmZmVyLnNpemUoKSArIDQpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5j
aGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFw
cGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5k
KCc/Jyk7CisgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKSAtIDI7CiAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1f
dXNlclN0YXJ0OwogICAgICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNl
clN0YXJ0OwpAQCAtMTE0Miw4ICsxMTczLDEyIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0
IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAgICAgICAgIGlm
ICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgICAg
ICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIyIpOwotICAgICAgICAgICAgICAgIG1f
dXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAyOworICAgICAgICAgICAgICAg
IG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgNCk7
CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoJy8nKTsKKyAg
ICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnLycpOworICAgICAg
ICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoJyMnKTsKKyAgICAgICAgICAgICAg
ICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMjsKICAgICAgICAg
ICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAg
ICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAg
ICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMTU4LDggKzEx
OTMsMTEgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAg
ICAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSAm
JiBzaG91bGRDb3B5RmlsZVVSTChjKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRz
VW50aWwoYmFzZSwgVVJMUGFydDo6UGF0aEFmdGVyTGFzdFNsYXNoKTsKICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAt
IDE7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KG1f
YXNjaWlCdWZmZXIuc2l6ZSgpICsgMyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNl
clN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAgICBt
X3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAg
ICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTExNzQsOCArMTIx
Miw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
ICAgIExPR19TVEFURSgiRmlsZVNsYXNoIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8
ICpjID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAgbV9i
dWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgn
LycpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3Rh
cnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0
YXJ0OwogICAgICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0
OwpAQCAtMTE5MiwxNSArMTIzMCwxNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgICAgICAgICA/IGlzV2luZG93c0RyaXZlTGV0dGVy
KENvZGVQb2ludEl0ZXJhdG9yPExDaGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzOCgpLCBiYXNlUGF0
aC5jaGFyYWN0ZXJzOCgpICsgYmFzZVBhdGgubGVuZ3RoKCkpKQogICAgICAgICAgICAgICAgICAg
ICAgICAgOiBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4oYmFz
ZVBhdGguY2hhcmFjdGVyczE2KCksIGJhc2VQYXRoLmNoYXJhY3RlcnMxNigpICsgYmFzZVBhdGgu
bGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvd3NRdWlyaykgewotICAg
ICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKGJhc2VQYXRoWzBdKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFswXSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
c3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgICAgIG1fdXJs
Lm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobV9hc2NpaUJ1ZmZlci5zaXplKCkgKyAyKTsKKyAgICAg
ICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnLycpOworICAgICAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDE7CiAgICAgICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dv
cmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9
IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTIxMSwyMyArMTI1MSwyNyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGNhc2UgU3RhdGU6OkZpbGVIb3N0
OgogICAgICAgICAgICAgTE9HX1NUQVRFKCJGaWxlSG9zdCIpOwogICAgICAgICAgICAgaWYgKGlz
U2xhc2hRdWVzdGlvbk9ySGFzaCgqYykpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNXaW5kb3dz
RHJpdmVMZXR0ZXIobV9idWZmZXIsIG1fdXJsLm1fcG9ydEVuZCArIDEpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKG1fYXNjaWlCdWZmZXIsIG1fdXJsLm1fcG9y
dEVuZCArIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlBhdGg7CiAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBpZiAoYXV0aG9yaXR5T3JIb3N0QmVnaW4gPT0gYykgewotICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycpOworICAgICAg
ICAgICAgICAgICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZlclttX2FzY2lpQnVmZmVyLnNpemUoKSAt
IDFdID09ICcvJyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnPycpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLz8iKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9idWZmZXIubGVuZ3RoKCkg
LSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5yZXNlcnZlQ2FwYWNp
dHkobV9hc2NpaUJ1ZmZlci5zaXplKCkgKyAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
YXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnPycpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAt
IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6
OlF1ZXJ5OwogICAgICAgICAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
aWYgKCpjID09ICcjJykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCIvIyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xh
c2ggPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eShtX2FzY2lpQnVmZmVyLnNpemUoKSArIDIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoJy8nKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCcj
Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJs
Lm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICAgICAgICAg
ICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CkBAIC0xMjQw
LDkgKzEyODQsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYnVm
ZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3JkRW5kKTsK
LSAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CisgICAgICAgICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBt
X3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dv
cmRFbmQpID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAgICAgICAgICAgICAgICAgICAgbV91
cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgCkBAIC0xMjYyLDM1ICsxMzA2LDM1IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKICAgICAg
ICAgICAgIExPR19TVEFURSgiUGF0aCIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAo
bV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJykpIHsKLSAgICAgICAgICAgICAgICBtX2J1ZmZl
ci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFz
aCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBw
ZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBt
X2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9idWZmZXIubGVuZ3Ro
KCkgJiYgbV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycpIHsKKyAgICAgICAg
ICAgIGlmIChtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiBtX2FzY2lpQnVmZmVyW21fYXNjaWlCdWZm
ZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzRG91YmxlRG90
UGF0aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZURvdWJsZURvdFBh
dGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBwb3BQYXRoKCk7CiAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAo
bV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycgJiYgaXNTaW5nbGVEb3RQYXRo
U2VnbWVudChjKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyW21fYXNjaWlC
dWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQoYykpIHsK
ICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KGMpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9w
YXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0g
bV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1f
dXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
c1BlcmNlbnRFbmNvZGVkRG90KGMpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCcuJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy4nKTsKICAgICAg
ICAgICAgICAgICBBU1NFUlQoKmMgPT0gJyUnKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgQVNTRVJUKCpjID09IGRvdEFTQ0lJQ29kZVswXSk7CkBAIC0xMjk5LDIwICsx
MzQzLDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAg
ICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9idWZmZXIsIGlzSW5EZWZhdWx0RW5j
b2RlU2V0KTsKKyAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2FzY2lpQnVmZmVy
LCBpc0luRGVmYXVsdEVuY29kZVNldCk7CiAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAg
ICAgICBMT0dfU1RBVEUoIkNhbm5vdEJlQUJhc2VVUkxQYXRoIik7CiAgICAgICAgICAgICBpZiAo
KmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAg
ICAgICB9IGVsc2UgaWYgKCpjID09ICcjJykgewotICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0
aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEVu
ZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fdXJsLm1fcXVlcnlF
bmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJh
Z21lbnQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHV0ZjhQZXJjZW50
RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJblNpbXBsZUVuY29kZVNldCk7CisgICAgICAgICAgICAg
ICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlCdWZmZXIsIGlzSW5TaW1wbGVFbmNvZGVT
ZXQpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTMyMCwyMCArMTM2NCwyMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUoIlF1ZXJ5Iik7CiAgICAgICAgICAg
ICBpZiAoKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1VURjhFbmNvZGluZykK
LSAgICAgICAgICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZmZXIsIG1fYnVmZmVyLCBl
bmNvZGluZyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fYnVmZmVyLmxl
bmd0aCgpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZlciwgbV9h
c2NpaUJ1ZmZlciwgZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpG
cmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICB1dGY4UGVyY2VudEVuY29k
ZVF1ZXJ5KCpjLCBtX2J1ZmZlcik7CisgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGVR
dWVyeSgqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgcXVlcnlCdWZmZXIuYXBwZW5kKCpjKTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKICAgICAgICAgICAgIExPR19T
VEFURSgiRnJhZ21lbnQiKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgqYyk7CisgICAg
ICAgICAgICBpZiAobV91bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgpICYmIGlzQVNDSUko
KmMpKQorICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCpjKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5hcHBlbmQo
KmMpOwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTEzNDIsNyArMTM4OSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5
cGUKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBTdGF0ZTo6U2NoZW1lU3RhcnQ6CiAg
ICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3RhcnQiKTsKLSAgICAgICAgaWYgKCFtX2J1
ZmZlci5sZW5ndGgoKSAmJiAhYmFzZS5pc051bGwoKSkKKyAgICAgICAgaWYgKCFtX2FzY2lpQnVm
ZmVyLnNpemUoKSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBiYXNlOwog
ICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0YXRlOjpT
Y2hlbWU6CkBAIC0xMzY2LDcgKzE0MTMsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgY2FzZSBTdGF0ZTo6UmVsYXRpdmVTbGFzaDoKICAgICAgICAgTE9H
X0ZJTkFMX1NUQVRFKCJSZWxhdGl2ZVNsYXNoIik7CiAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGls
KGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsK
KyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVuZCArIDE7CiAgICAgICAgIG1fdXJsLm1fcGF0
aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICBtX3VybC5tX3F1ZXJ5
RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBAIC0xMzc0LDcgKzE0MjEsNyBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzOgogICAgICAgICBMT0dfRklO
QUxfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7Ci0gICAgICAgIG1fdXJsLm1fdXNl
clN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1f
dXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3Rh
cnQ7CiAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTM4
OSw3ICsxNDM2LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQog
ICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0YXRlOjpB
dXRob3JpdHlPckhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9yaXR5T3JIb3N0
Iik7Ci0gICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAg
ICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwu
bV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAg
ICAgY2FzZSBTdGF0ZTo6SG9zdDoKQEAgLTEzOTcsNyArMTQ0NCw3IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
SG9zdCIpOwogICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbikpCiAg
ICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKLSAgICAgICAgbV9idWZm
ZXIuYXBwZW5kKCcvJyk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAg
ICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcG9ydEVuZCArIDE7CiAgICAgICAgIG1fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5t
X3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwpAQCAtMTQwNywxMCArMTQ1NCwxMyBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIExPR19GSU5BTF9T
VEFURSgiRmlsZSIpOwogICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2Nv
bCgpID09ICJmaWxlIikgewogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJM
UGFydDo6UXVlcnlFbmQpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAg
ICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICB9Ci0gICAgICAgIG1f
YnVmZmVyLmFwcGVuZCgiLy8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZm
ZXIubGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eSht
X2FzY2lpQnVmZmVyLnNpemUoKSArIDMpOworICAgICAgICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tl
ZEFwcGVuZCgnLycpOworICAgICAgICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnLycp
OworICAgICAgICBtX2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnLycpOworICAgICAgICBt
X3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgbV91
cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dv
cmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91
cmwubV91c2VyU3RhcnQ7CkBAIC0xNDIyLDggKzE0NzIsMTAgQEAgVVJMIFVSTFBhcnNlcjo6cGFy
c2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpG
aWxlU2xhc2g6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiRmlsZVNsYXNoIik7Ci0gICAgICAg
IG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1
ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5
KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgMik7CisgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVj
a2VkQXBwZW5kKCcvJyk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKCcv
Jyk7CisgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAx
OwogICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5t
X2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0MzYsOCArMTQ4OCw4IEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICBjYXNlIFN0YXRlOjpGaWxl
SG9zdDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJGaWxlSG9zdCIpOwogICAgICAgICBpZiAo
YXV0aG9yaXR5T3JIb3N0QmVnaW4gPT0gYykgewotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCcvJyk7Ci0gICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgp
IC0gMTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAg
ICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAg
ICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgbV91
cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgbV91cmwu
bV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xNDUxLDEzICsxNTAzLDEzIEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKIAogICAgICAgICBpZiAoIXBh
cnNlSG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RC
ZWdpbiwgYykpKQogICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAoYnVmZmVyVmlldyhtX2J1ZmZlciwgbV91cmwubV9wYXNzd29y
ZEVuZCwgbV9idWZmZXIubGVuZ3RoKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9PSAibG9jYWxo
b3N0IikgIHsKLSAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3JkRW5k
KTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworCisg
ICAgICAgIGlmIChTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpICsgbV91cmwubV9wYXNz
d29yZEVuZCwgbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9PSAi
bG9jYWxob3N0IikgIHsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIucmVzaXplKG1fdXJsLm1f
cGFzc3dvcmRFbmQpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX3VybC5tX2hvc3RFbmQ7
CiAgICAgICAgIH0KLSAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgIG1fYXNj
aWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNo
ID0gbV91cmwubV9ob3N0RW5kICsgMTsKICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwu
bV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiAgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaDsKQEAgLTE0NjgsMzAgKzE1MjAsNDAgQEAgVVJMIFVSTFBhcnNl
cjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0
YXRlOjpQYXRoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlBhdGgiKTsKLSAgICAgICAgbV91
cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVu
ZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91
cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gbV91cmwubV9wYXRo
RW5kOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpDYW5ub3RCZUFCYXNlVVJMUGF0
aDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJDYW5ub3RCZUFCYXNlVVJMUGF0aCIpOwotICAg
ICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fcXVlcnlF
bmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgIG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBtX3Vy
bC5tX3BhdGhFbmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OlF1ZXJ5OgogICAg
ICAgICBMT0dfRklOQUxfU1RBVEUoIlF1ZXJ5Iik7CiAgICAgICAgIGlmICghaXNVVEY4RW5jb2Rp
bmcpCi0gICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZlciwgbV9idWZmZXIsIGVuY29k
aW5nKTsKLSAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAg
ICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZmZXIsIG1fYXNjaWlCdWZmZXIsIGVuY29kaW5n
KTsKKyAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAg
ICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gbV91cmwubV9xdWVyeUVuZDsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTdGF0ZTo6RnJhZ21lbnQ6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
RnJhZ21lbnQiKTsKLSAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fYnVmZmVyLmxlbmd0
aCgpOworICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkg
KyBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIG1fdXJsLm1fc3RyaW5nID0gbV9idWZmZXIudG9TdHJpbmcoKTsKKyAgICBpZiAobV91
bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIEZJWE1FOiBTdHJp
bmc6OmFkb3B0IHNob3VsZCByZXF1aXJlIGEgV1RGTW92ZS4KKyAgICAgICAgbV91cmwubV9zdHJp
bmcgPSBTdHJpbmc6OmFkb3B0KG1fYXNjaWlCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5yZXNlcnZlQ2FwYWNpdHko
bV9hc2NpaUJ1ZmZlci5zaXplKCkgKyBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCkpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZChtX2FzY2lpQnVmZmVyLmRhdGEoKSwgbV9hc2NpaUJ1ZmZl
ci5zaXplKCkpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdW5pY29kZUZyYWdt
ZW50QnVmZmVyLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQobV91bmlj
b2RlRnJhZ21lbnRCdWZmZXJbaV0pOworICAgICAgICBtX3VybC5tX3N0cmluZyA9IGJ1aWxkZXIu
dG9TdHJpbmcoKTsKKyAgICB9CiAgICAgbV91cmwubV9pc1ZhbGlkID0gdHJ1ZTsKICAgICBMT0co
VVJMUGFyc2VyLCAiUGFyc2VkIFVSTCA8JXM+IiwgbV91cmwubV9zdHJpbmcudXRmOCgpLmRhdGEo
KSk7CiAgICAgcmV0dXJuIG1fdXJsOwpAQCAtMTUwMSw0MiArMTU2MywxNDkgQEAgdGVtcGxhdGU8
dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eShD
b2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsKICAgICBpZiAoaXRl
cmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAg
ICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7
CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKSB7CiAgICAgICAgICAgICArK2l0ZXJhdG9y
OwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAg
ICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
ICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNz
d29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgICAgICAgICBpZiAobV91cmwubV91
c2VyRW5kID4gbV91cmwubV91c2VyU3RhcnQpCi0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVy
LmFwcGVuZCgnQCcpOworICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgn
QCcpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
JzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgqaXRlcmF0b3IpOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgqaXRlcmF0b3Ip
OwogICAgIH0KICAgICBmb3IgKDsgIWl0ZXJhdG9yLmF0RW5kKCk7ICsraXRlcmF0b3IpCi0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZCgqaXRlcmF0b3IpOwotICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQg
PSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoKml0ZXJh
dG9yKTsKKyAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAg
ICAgaWYgKCFtX3VybC5tX3VzZXJFbmQpCiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJs
Lm1fcGFzc3dvcmRFbmQ7Ci0gICAgbV9idWZmZXIuYXBwZW5kKCdAJyk7CisgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoJ0AnKTsKIH0KIAotc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NCh1aW50MzJf
dCBhZGRyZXNzLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCitzdGF0aWMgYm9vbCB1bmNoZWNrZWRB
cHBlbmREaWdpdChWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgdWludDhfdCBkaWdpdCwgYm9v
bCBhcHBlbmRaZXJvKQogewotICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIoYWRkcmVzcyA+PiAyNCk7
CisgICAgQVNTRVJUKGRpZ2l0IDwgMTApOworICAgIHN3aXRjaCAoZGlnaXQpIHsKKyAgICBjYXNl
IDA6CisgICAgICAgIGlmIChhcHBlbmRaZXJvKSB7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi51
bmNoZWNrZWRBcHBlbmQoJzAnKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIDE6CisgICAgICAgIGRlc3RpbmF0aW9u
LnVuY2hlY2tlZEFwcGVuZCgnMScpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIDI6
CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnMicpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICBjYXNlIDM6CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVu
ZCgnMycpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIDQ6CisgICAgICAgIGRlc3Rp
bmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnNCcpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIDU6CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnNScpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIDY6CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tl
ZEFwcGVuZCgnNicpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIDc6CisgICAgICAg
IGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnNycpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBjYXNlIDg6CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnOCcpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIDk6CisgICAgICAgIGRlc3RpbmF0aW9uLnVu
Y2hlY2tlZEFwcGVuZCgnOScpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworc3RhdGljIHZvaWQgYXBwZW5kTnVtYmVyKFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0
aW9uLCB1aW50OF90IG51bWJlcikKK3sKKyAgICBkZXN0aW5hdGlvbi5yZXNlcnZlQ2FwYWNpdHko
ZGVzdGluYXRpb24uc2l6ZSgpICsgc3RybGVuKCIyNTUiKSk7CisgICAgCisgICAgYm9vbCBhcHBl
bmRaZXJvID0gZmFsc2U7CisgICAgc3dpdGNoIChudW1iZXIgLyAxMDApIHsKKyAgICBjYXNlIDA6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgYXBwZW5kWmVybyA9IHRydWU7
CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnMScpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDI6CisgICAgICAgIGFwcGVuZFplcm8gPSB0cnVlOworICAgICAgICBkZXN0
aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQoJzInKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHVuY2hlY2tlZEFw
cGVuZERpZ2l0KGRlc3RpbmF0aW9uLCAobnVtYmVyIC8gMTApICUgMTAsIGFwcGVuZFplcm8pOwor
ICAgIHVuY2hlY2tlZEFwcGVuZERpZ2l0KGRlc3RpbmF0aW9uLCBudW1iZXIgJSAxMCwgdHJ1ZSk7
Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZE51bWJlcihWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlv
biwgdWludDE2X3QgbnVtYmVyKQoreworICAgIGRlc3RpbmF0aW9uLnJlc2VydmVDYXBhY2l0eShk
ZXN0aW5hdGlvbi5zaXplKCkgKyBzdHJsZW4oIjY1NTM1IikpOworCisgICAgYm9vbCBhcHBlbmRa
ZXJvID0gZmFsc2U7CisgICAgc3dpdGNoIChudW1iZXIgLyAxMDAwMCkgeworICAgIGNhc2UgMDoK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICBhcHBlbmRaZXJvID0gdHJ1ZTsK
KyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKCcxJyk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgMjoKKyAgICAgICAgYXBwZW5kWmVybyA9IHRydWU7CisgICAgICAgIGRlc3Rp
bmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnMicpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6
CisgICAgICAgIGFwcGVuZFplcm8gPSB0cnVlOworICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNr
ZWRBcHBlbmQoJzMnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAgICBhcHBl
bmRaZXJvID0gdHJ1ZTsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKCc0Jyk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgNToKKyAgICAgICAgYXBwZW5kWmVybyA9IHRydWU7
CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCgnNScpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDY6CisgICAgICAgIGFwcGVuZFplcm8gPSB0cnVlOworICAgICAgICBkZXN0
aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQoJzYnKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIGFwcGVuZFplcm8g
PSB1bmNoZWNrZWRBcHBlbmREaWdpdChkZXN0aW5hdGlvbiwgKG51bWJlciAvIDEwMDApICUgMTAs
IGFwcGVuZFplcm8pOworICAgIGFwcGVuZFplcm8gPSB1bmNoZWNrZWRBcHBlbmREaWdpdChkZXN0
aW5hdGlvbiwgKG51bWJlciAvIDEwMCkgJSAxMCwgYXBwZW5kWmVybyk7CisgICAgdW5jaGVja2Vk
QXBwZW5kRGlnaXQoZGVzdGluYXRpb24sIChudW1iZXIgLyAxMCkgJSAxMCwgYXBwZW5kWmVybyk7
CisgICAgdW5jaGVja2VkQXBwZW5kRGlnaXQoZGVzdGluYXRpb24sIG51bWJlciAlIDEwLCB0cnVl
KTsKK30KKworc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NCh1aW50MzJfdCBhZGRyZXNzLCBWZWN0
b3I8TENoYXI+JiBidWZmZXIpCit7CisgICAgYXBwZW5kTnVtYmVyKGJ1ZmZlciwgc3RhdGljX2Nh
c3Q8dWludDhfdD4oYWRkcmVzcyA+PiAyNCkpOwogICAgIGJ1ZmZlci5hcHBlbmQoJy4nKTsKLSAg
ICBidWZmZXIuYXBwZW5kTnVtYmVyKChhZGRyZXNzID4+IDE2KSAmIDB4RkYpOworICAgIGFwcGVu
ZE51bWJlcihidWZmZXIsIHN0YXRpY19jYXN0PHVpbnQ4X3Q+KChhZGRyZXNzID4+IDE2KSkpOwog
ICAgIGJ1ZmZlci5hcHBlbmQoJy4nKTsKLSAgICBidWZmZXIuYXBwZW5kTnVtYmVyKChhZGRyZXNz
ID4+IDgpICYgMHhGRik7CisgICAgYXBwZW5kTnVtYmVyKGJ1ZmZlciwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oKGFkZHJlc3MgPj4gOCkpKTsKICAgICBidWZmZXIuYXBwZW5kKCcuJyk7Ci0gICAgYnVm
ZmVyLmFwcGVuZE51bWJlcihhZGRyZXNzICYgMHhGRik7CisgICAgYXBwZW5kTnVtYmVyKGJ1ZmZl
ciwgc3RhdGljX2Nhc3Q8dWludDhfdD4oYWRkcmVzcykpOwogfQogICAgIAogc3RhdGljIHNpemVf
dCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3RkOjphcnJheTx1aW50MTZfdCwgOD4mIGFkZHJl
c3MsIHNpemVfdCBiZWdpbikKQEAgLTE1NjYsNyArMTczNSw3IEBAIHN0YXRpYyBPcHRpb25hbDxz
aXplX3Q+IGZpbmRMb25nZXN0WmVyb1MKICAgICByZXR1cm4gbG9uZ2VzdDsKIH0KICAgICAKLXN0
YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1aW50MTZfdCBwaWVjZSwgU3RyaW5nQnVpbGRl
ciYgYnVmZmVyKQorc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NlBpZWNlKHVpbnQxNl90IHBpZWNl
LCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAgICAgYm9vbCBwcmludGVkID0gZmFsc2U7CiAg
ICAgaWYgKGF1dG8gbmliYmxlMCA9IHBpZWNlID4+IDEyKSB7CkBAIC0xNTg0LDcgKzE3NTMsNyBA
QCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3QgCiAgICAgYnVmZmVyLmFw
cGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChwaWVjZSAmIDB4RikpOwog
fQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2KHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFk
ZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYo
c3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQog
ewogICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKICAgICBhdXRvIGNvbXByZXNzUG9pbnRlciA9IGZp
bmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpOwpAQCAtMTU5Myw4ICsxNzYyLDExIEBAIHN0
YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW4KICAgICAgICAgICAgIEFTU0VS
VCghYWRkcmVzc1twaWVjZV0pOwogICAgICAgICAgICAgaWYgKHBpZWNlKQogICAgICAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoJzonKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBidWZmZXIuYXBwZW5kKCI6OiIpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eShidWZmZXIuc2l6ZSgpICsgMik7CisgICAgICAgICAg
ICAgICAgYnVmZmVyLnVuY2hlY2tlZEFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgIGJ1ZmZl
ci51bmNoZWNrZWRBcHBlbmQoJzonKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdoaWxl
IChwaWVjZSA8IDggJiYgIWFkZHJlc3NbcGllY2VdKQogICAgICAgICAgICAgICAgIHBpZWNlKys7
CiAgICAgICAgICAgICBpZiAocGllY2UgPT0gOCkKQEAgLTE4NzYsMTAgKzIwNDgsMTAgQEAgYm9v
bCBVUkxQYXJzZXI6OnBhcnNlUG9ydChDb2RlUG9pbnRJdGVyYQogewogICAgIHVpbnQzMl90IHBv
cnQgPSAwOwogICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7Ci0gICAgICAgIG1fdXJsLm1fcG9y
dEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIG1fYnVm
ZmVyLmFwcGVuZCgnOicpOworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgZm9y
ICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmIChpc1RhYk9y
TmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xODkwLDE0ICsy
MDYyLDE0IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKICAgICAg
ICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIAotICAgIGlm
IChpc0RlZmF1bHRQb3J0KGJ1ZmZlclZpZXcobV9idWZmZXIsIDAsIG1fdXJsLm1fc2NoZW1lRW5k
KSwgcG9ydCkpIHsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyW21fYnVmZmVyLmxlbmd0aCgpIC0g
MV0gPT0gJzonKTsKLSAgICAgICAgbV9idWZmZXIucmVzaXplKG1fYnVmZmVyLmxlbmd0aCgpIC0g
MSk7CisKKyAgICBpZiAoaXNEZWZhdWx0UG9ydChTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0
YSgpLCBtX3VybC5tX3NjaGVtZUVuZCksIHBvcnQpKSB7CisgICAgICAgIExDaGFyIGNvbG9uID0g
bV9hc2NpaUJ1ZmZlci50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGNvbG9uLCBj
b2xvbiA9PSAnOicpOwogICAgIH0gZWxzZQotICAgICAgICBtX2J1ZmZlci5hcHBlbmROdW1iZXIo
cG9ydCk7CisgICAgICAgIGFwcGVuZE51bWJlcihtX2FzY2lpQnVmZmVyLCBzdGF0aWNfY2FzdDx1
aW50MTZfdD4ocG9ydCkpOwogCi0gICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3Ro
KCk7CisgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE5MTIsMTUgKzIwODQsMTUgQEAgYm9vbCBVUkxQYXJzZXI6OnBh
cnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICB3aGlsZSAoIWlwdjZFbmQuYXRFbmQoKSAm
JiAqaXB2NkVuZCAhPSAnXScpCiAgICAgICAgICAgICArK2lwdjZFbmQ7CiAgICAgICAgIGlmIChh
dXRvIGFkZHJlc3MgPSBwYXJzZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5
cGU+KGl0ZXJhdG9yLCBpcHY2RW5kKSkpIHsKLSAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjYoYWRk
cmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjYoYWRkcmVzcy52YWx1
ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYXNj
aWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFpcHY2RW5kLmF0RW5kKCkpIHsKICAg
ICAgICAgICAgICAgICArK2lwdjZFbmQ7CiAgICAgICAgICAgICAgICAgaWYgKCFpcHY2RW5kLmF0
RW5kKCkgJiYgKmlwdjZFbmQgPT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgICsraXB2NkVu
ZDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpcHY2RW5kKTsKICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5MzgsMTAgKzIxMTAsMTAgQEAgYm9vbCBVUkxQ
YXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihob3N0SXRlcmF0b3IsIGl0ZXJhdG9y
KSkpIHsKLSAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZl
cik7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAg
ICAgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsK
KyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAg
ICAgICAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5t
X3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3Bv
cnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsraXRlcmF0b3I7CkBAIC0xOTQ5LDkgKzIx
MjEsOSBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAg
IH0KICAgICAgICAgZm9yICg7IGhvc3RJdGVyYXRvciAhPSBpdGVyYXRvcjsgKytob3N0SXRlcmF0
b3IpIHsKICAgICAgICAgICAgIGlmICghaXNUYWJPck5ld2xpbmUoKmhvc3RJdGVyYXRvcikpCi0g
ICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqaG9zdEl0ZXJhdG9y
KSk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKCpo
b3N0SXRlcmF0b3IpKTsKICAgICAgICAgfQotICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CiAgICAgICAgIGlmICghaG9zdEl0ZXJhdG9yLmF0RW5kKCkpIHsKICAgICAgICAgICAg
IEFTU0VSVCgqaG9zdEl0ZXJhdG9yID09ICc6Jyk7CiAgICAgICAgICAgICArK2hvc3RJdGVyYXRv
cjsKQEAgLTE5NTksNyArMjEzMSw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBv
aW50SXRlcmEKICAgICAgICAgICAgICAgICArK2hvc3RJdGVyYXRvcjsKICAgICAgICAgICAgIHJl
dHVybiBwYXJzZVBvcnQoaG9zdEl0ZXJhdG9yKTsKICAgICAgICAgfQotICAgICAgICBtX3VybC5t
X3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9wb3J0RW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
MTk5MCwxOCArMjE2MiwxOSBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0
ZXJhCiAgICAgY29uc3QgTENoYXIqIGFzY2lpRG9tYWluQ2hhcmFjdGVycyA9IGFzY2lpRG9tYWlu
VmFsdWUuY2hhcmFjdGVyczgoKTsKICAgICAKICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJ
UHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBh
c2NpaURvbWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKSkpIHsKLSAg
ICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAg
bV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIHNlcmlhbGl6ZUlQ
djQoYWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAgICAgbV91cmwubV9ob3N0
RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgp
KSB7Ci0gICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAg
ICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyYXRvcjsKICAgICAg
ICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQogICAgIAotICAgIG1fYnVmZmVy
LmFwcGVuZChhc2NpaURvbWFpbi52YWx1ZSgpKTsKLSAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFzY2lpRG9tYWluLnZh
bHVlKCkubGVuZ3RoKCk7ICsraSkKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoYXNjaWlE
b21haW4udmFsdWUoKVtpXSk7CisgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CiAgICAgaWYgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIEFTU0VSVCgqaXRl
cmF0b3IgPT0gJzonKTsKICAgICAgICAgKytpdGVyYXRvcjsKQEAgLTIwMDksNyArMjE4Miw3IEBA
IGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgICAgICsr
aXRlcmF0b3I7CiAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOwogICAgIH0KLSAg
ICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRF
bmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjA0
Myw3ICsyMjE2LDcgQEAgYXV0byBVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaQog
ICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRG
b3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFN0cmluZ0J1aWxkZXImIG91dHB1dCkKK3N0YXRpYyB2
b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFZlY3RvcjxM
Q2hhcj4mIG91dHB1dCkKIHsKICAgICBhdXRvIHV0ZjggPSBpbnB1dC51dGY4KFN0cmljdENvbnZl
cnNpb24pOwogICAgIGNvbnN0IGNoYXIqIGRhdGEgPSB1dGY4LmRhdGEoKTsKQEAgLTIwNjYsNyAr
MjIzOSw3IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnMKICAgICAK
IFN0cmluZyBVUkxQYXJzZXI6OnNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYgdHVwbGVz
KQogewotICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OworICAgIFZlY3RvcjxMQ2hhcj4gb3V0cHV0
OwogICAgIGZvciAoYXV0byYgdHVwbGUgOiB0dXBsZXMpIHsKICAgICAgICAgaWYgKCFvdXRwdXQu
aXNFbXB0eSgpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJicpOwpAQCAtMjA3NCw3ICsy
MjQ3LDcgQEAgU3RyaW5nIFVSTFBhcnNlcjo6c2VyaWFsaXplKGNvbnN0IFVSTEVuYwogICAgICAg
ICBvdXRwdXQuYXBwZW5kKCc9Jyk7CiAgICAgICAgIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKHR1
cGxlLnNlY29uZCwgb3V0cHV0KTsKICAgICB9Ci0gICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygp
OworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CiB9CiAKIGJvb2wgVVJMUGFyc2Vy
OjphbGxWYWx1ZXNFcXVhbChjb25zdCBVUkwmIGEsIGNvbnN0IFVSTCYgYikKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDU5OTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBA
QCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVVJMIG1fdXJsOwotICAgIFN0cmluZ0J1aWxkZXIg
bV9idWZmZXI7CisgICAgVmVjdG9yPExDaGFyPiBtX2FzY2lpQnVmZmVyOworICAgIFZlY3RvcjxV
Q2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcjsKICAgICBib29sIG1fdXJsSXNTcGVjaWFs
IHsgZmFsc2UgfTsKICAgICBib29sIG1faG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJIHsgZmFsc2Ug
fTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289012</attachid>
            <date>2016-09-15 16:18:41 -0700</date>
            <delta_ts>2016-09-15 17:31:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160915161602.patch</filename>
            <type>text/plain</type>
            <size>45054</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdC
dWZmZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAg
IFdoZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJh
bnRlZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBm
b3IgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywg
YW5kIGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKyAgICAgICAgVGhpcyBp
cyBhIH4yMCUgc3BlZWR1cCBpbiB1cmwgcGFyc2luZy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpwZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjb3B5VVJM
UGFydHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQ
YXJzZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
cmlhbGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVu
Y29kZWRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L1VSTFBhcnNlci5oOgorCiAyMDE2LTA5LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFttZWRpYS1zb3VyY2VdIHdlYi1wbGF0Zm9ybS10ZXN0L21lZGlhLXNv
dXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUuaHRtbCB0ZXN0IGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1OTkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDA1LDExICs0
MDUsMTEgQEAgc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaQogICAgIHJl
dHVybiAqaXRlcmF0b3IgPT0gJzonIHx8ICppdGVyYXRvciA9PSAnfCc7CiB9CiAKLXN0YXRpYyBi
b29sIGlzV2luZG93c0RyaXZlTGV0dGVyKGNvbnN0IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIHNp
emVfdCBpbmRleCkKK3N0YXRpYyBib29sIGlzV2luZG93c0RyaXZlTGV0dGVyKGNvbnN0IFZlY3Rv
cjxMQ2hhcj4mIGJ1ZmZlciwgc2l6ZV90IGluZGV4KQogewotICAgIGlmIChidWlsZGVyLmxlbmd0
aCgpIDwgaW5kZXggKyAyKQorICAgIGlmIChidWZmZXIuc2l6ZSgpIDwgaW5kZXggKyAyKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGlzQVNDSUlBbHBoYShidWlsZGVyW2luZGV4
XSkgJiYgKGJ1aWxkZXJbaW5kZXggKyAxXSA9PSAnOicgfHwgYnVpbGRlcltpbmRleCArIDFdID09
ICd8Jyk7CisgICAgcmV0dXJuIGlzQVNDSUlBbHBoYShidWZmZXJbaW5kZXhdKSAmJiAoYnVmZmVy
W2luZGV4ICsgMV0gPT0gJzonIHx8IGJ1ZmZlcltpbmRleCArIDFdID09ICd8Jyk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CkBAIC00MjgsMTQgKzQyOCwxNCBAQCBzdGF0
aWMgYm9vbCBzaG91bGRDb3B5RmlsZVVSTChDb2RlUG9pbnRJCiAgICAgcmV0dXJuICFpc1NsYXNo
UXVlc3Rpb25Pckhhc2goKml0ZXJhdG9yKTsKIH0KIAotc3RhdGljIHZvaWQgcGVyY2VudEVuY29k
ZSh1aW50OF90IGJ5dGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCitzdGF0aWMgdm9pZCBwZXJj
ZW50RW5jb2RlKHVpbnQ4X3QgYnl0ZSwgVmVjdG9yPExDaGFyPiYgYnVpbGRlcikKIHsKICAgICBi
dWlsZGVyLmFwcGVuZCgnJScpOwogICAgIGJ1aWxkZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJ
SUhleERpZ2l0KGJ5dGUpKTsKICAgICBidWlsZGVyLmFwcGVuZChsb3dlck5pYmJsZVRvQVNDSUlI
ZXhEaWdpdChieXRlKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaGFy
MzIgY29kZVBvaW50LCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBib29sKCppc0luQ29kZVNldCko
VUNoYXIzMikpCitzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZShVQ2hhcjMyIGNvZGVQb2lu
dCwgVmVjdG9yPExDaGFyPiYgYnVpbGRlciwgYm9vbCgqaXNJbkNvZGVTZXQpKFVDaGFyMzIpKQog
ewogICAgIGlmIChpc0luQ29kZVNldChjb2RlUG9pbnQpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnVm
ZmVyW1U4X01BWF9MRU5HVEhdOwpAQCAtNDQ1LDExICs0NDUsMTMgQEAgc3RhdGljIHZvaWQgdXRm
OFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjbwogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3Iu
CiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG9mZnNldDsgKytpKQogICAgICAgICAg
ICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0sIGJ1aWxkZXIpOwotICAgIH0gZWxzZQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXNBU0NJSShjb2RlUG9pbnQpLCAi
aXNJbkNvZGVTZXQgc2hvdWxkIGFsd2F5cyByZXR1cm4gdHJ1ZSBmb3Igbm9uLUFTQ0lJIGNoYXJh
Y3RlcnMiKTsKICAgICAgICAgYnVpbGRlci5hcHBlbmQoY29kZVBvaW50KTsKKyAgICB9CiB9CiAK
LXN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9pbnQsIFN0
cmluZ0J1aWxkZXImIGJ1aWxkZXIpCitzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5
KFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBidWlsZGVyKQogewogICAgIHVpbnQ4
X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwogICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKQEAgLTQ2
Niw3ICs0NjgsNyBAQCBzdGF0aWMgdm9pZCB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KFVDaGFyCiAg
ICAgfQogfQogICAgIAotc3RhdGljIHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbGRl
ciYgc291cmNlLCBTdHJpbmdCdWlsZGVyJiBkZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5n
JiBlbmNvZGluZykKK3N0YXRpYyB2b2lkIGVuY29kZVF1ZXJ5KGNvbnN0IFN0cmluZ0J1aWxkZXIm
IHNvdXJjZSwgVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIGNvbnN0IFRleHRFbmNvZGluZyYg
ZW5jb2RpbmcpCiB7CiAgICAgLy8gRklYTUU6IEl0IGlzIHVuY2xlYXIgaW4gdGhlIHNwZWMgd2hh
dCB0byBkbyB3aGVuIGVuY29kaW5nIGZhaWxzLiBUaGUgYmVoYXZpb3Igc2hvdWxkIGJlIHNwZWNp
ZmllZCBhbmQgdGVzdGVkLgogICAgIENTdHJpbmcgZW5jb2RlZCA9IGVuY29kaW5nLmVuY29kZShz
b3VyY2UudG9TdHJpbmdQcmVzZXJ2ZUNhcGFjaXR5KCksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcyk7CkBAIC01OTUsMTUgKzU5Nyw2IEBAIHN0YXRpYyBib29sIGlzU3BlY2lhbFNj
aGVtZShTdHJpbmdWaWV3IHMKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1zdGF0
aWMgU3RyaW5nVmlldyBidWZmZXJWaWV3KGNvbnN0IFQmIGJ1ZmZlciwgdW5zaWduZWQgc3RhcnQs
IHVuc2lnbmVkIGxlbmd0aCkKLXsKLSAgICBBU1NFUlQoYnVmZmVyLmxlbmd0aCgpID49IGxlbmd0
aCk7Ci0gICAgaWYgKGJ1ZmZlci5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZ1ZpZXco
YnVmZmVyLmNoYXJhY3RlcnM4KCkgKyBzdGFydCwgbGVuZ3RoKTsKLSAgICByZXR1cm4gU3RyaW5n
VmlldyhidWZmZXIuY2hhcmFjdGVyczE2KCkgKyBzdGFydCwgbGVuZ3RoKTsKLX0KLQogZW51bSBj
bGFzcyBVUkxQYXJzZXI6OlVSTFBhcnQgewogICAgIFNjaGVtZUVuZCwKICAgICBVc2VyU3RhcnQs
CkBAIC02NDcsOCArNjQwLDQ4IEBAIHNpemVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVudGlsUGFy
dChjb24KICAgICAKIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRpbChjb25zdCBVUkwm
IGJhc2UsIFVSTFBhcnQgcGFydCkKIHsKLSAgICBtX2J1ZmZlci5jbGVhcigpOwotICAgIG1fYnVm
ZmVyLmFwcGVuZChiYXNlLm1fc3RyaW5nLnN1YnN0cmluZygwLCB1cmxMZW5ndGhVbnRpbFBhcnQo
YmFzZSwgcGFydCkpKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7CisgICAgbV91bmljb2Rl
RnJhZ21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBpZiAocGFydCA9PSBVUkxQYXJ0OjpGcmFnbWVu
dEVuZCkgeworICAgICAgICBzaXplX3QgYXNjaWlMZW5ndGggPSB1cmxMZW5ndGhVbnRpbFBhcnQo
YmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOworICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSBiYXNl
LmZyYWdtZW50SWRlbnRpZmllcigpOworICAgICAgICBzaXplX3QgbWF5YmVVbmljb2RlTGVuZ3Ro
ID0gZnJhZ21lbnQubGVuZ3RoKCk7CisKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5yZXNlcnZlQ2Fw
YWNpdHkoYXNjaWlMZW5ndGggKyBtYXliZVVuaWNvZGVMZW5ndGgpOworICAgICAgICBtX3VuaWNv
ZGVGcmFnbWVudEJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkobWF5YmVVbmljb2RlTGVuZ3RoKTsKKwor
ICAgICAgICBpZiAoYmFzZS5tX3N0cmluZy5pczhCaXQoKSkKKyAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKGJhc2UubV9zdHJpbmcuY2hhcmFjdGVyczgoKSwgYXNjaWlMZW5ndGgpOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXNjaWlM
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBiYXNlLm1fc3RyaW5nLmNo
YXJhY3RlcnMxNigpW2ldOworICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGlzQVNDSUkoYykpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5j
aGVja2VkQXBwZW5kKGMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBzZWVuVW5pY29kZSA9IGZhbHNlOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFz
Y2lpTGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghc2VlblVuaWNvZGUgJiYgIWlzQVND
SUkoZnJhZ21lbnRbaV0pKQorICAgICAgICAgICAgICAgIHNlZW5Vbmljb2RlID0gdHJ1ZTsKKyAg
ICAgICAgICAgIGlmIChzZWVuVW5pY29kZSkKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFn
bWVudEJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoZnJhZ21lbnRbaV0pOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKGZyYWdtZW50
W2ldKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNpemVfdCBsZW5ndGggPSB1
cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgcGFydCk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIucmVz
ZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CisgICAgICAgIGlmIChiYXNlLm1fc3RyaW5nLmlzOEJpdCgp
KQorICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoYmFzZS5tX3N0cmluZy5jaGFyYWN0
ZXJzOCgpLCBsZW5ndGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBVQ2hhciBjID0gYmFz
ZS5tX3N0cmluZy5jaGFyYWN0ZXJzMTYoKVtpXTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0FTQ0lJKGMpKTsKKyAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZChjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICBjYXNlIFVSTFBhcnQ6OkZyYWdtZW50RW5k
OgogICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gYmFzZS5tX2ZyYWdtZW50RW5kOwpAQCAt
NjgyLDcgKzcxNSw3IEBAIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRpbChjb25zdCAK
ICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gYmFzZS5tX3Byb3RvY29s
SXNJbkhUVFBGYW1pbHk7CiAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gYmFzZS5tX3NjaGVt
ZUVuZDsKICAgICB9Ci0gICAgbV91cmxJc1NwZWNpYWwgPSBpc1NwZWNpYWxTY2hlbWUoYnVmZmVy
VmlldyhtX2J1ZmZlciwgMCwgbV91cmwubV9zY2hlbWVFbmQpKTsKKyAgICBtX3VybElzU3BlY2lh
bCA9IGlzU3BlY2lhbFNjaGVtZShTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3Vy
bC5tX3NjaGVtZUVuZCkpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogZG90QVNDSUlDb2RlID0g
IjJlIjsKQEAgLTgwMiwxMyArODM1LDEzIEBAIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKIHsK
ICAgICBpZiAobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRFbmQgKyAx
KSB7CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoLS07Ci0gICAgICAgIGlmICht
X2J1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQorICAgICAgICBpZiAo
bV9hc2NpaUJ1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQogICAgICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKLSAgICAgICAgd2hpbGUgKG1fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoID4gbV91cmwubV9wb3J0RW5kICYmIG1fYnVmZmVyW21fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCisgICAgICAgIHdoaWxlIChtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9ydEVuZCAmJiBtX2FzY2lpQnVmZmVyW21fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCiAgICAgICAgICAgICBtX3VybC5tX3BhdGhB
ZnRlckxhc3RTbGFzaC0tOwogICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCsrOwog
ICAgIH0KLSAgICBtX2J1ZmZlci5yZXNpemUobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gpOwor
ICAgIG1fYXNjaWlCdWZmZXIucmVzaXplKG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTg0NCw4ICs4NzcsOSBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiB7CiAgICAgTE9HKFVSTFBh
cnNlciwgIlBhcnNpbmcgVVJMIDwlcz4gYmFzZSA8JXM+IiwgU3RyaW5nKGlucHV0LCBsZW5ndGgp
LnV0ZjgoKS5kYXRhKCksIGJhc2Uuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgbV91cmwg
PSB7IH07Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7CisgICAgbV91bmljb2RlRnJh
Z21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpOwogICAgIAogICAgIGJvb2wgaXNVVEY4RW5jb2RpbmcgPSBlbmNvZGluZyA9PSBVVEY4
RW5jb2RpbmcoKTsKICAgICBTdHJpbmdCdWlsZGVyIHF1ZXJ5QnVmZmVyOwpAQCAtODgxLDcgKzkx
NSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
RnJhZ21lbnQsCiAgICAgfTsKIAotI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwg
IlN0YXRlICVzLCBjb2RlIHBvaW50ICVjLCBidWZmZXIgbGVuZ3RoICVkIiwgeCwgKmMsIG1fYnVm
ZmVyLmxlbmd0aCgpKQorI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwgIlN0YXRl
ICVzLCBjb2RlIHBvaW50ICVjLCBhc2NpaUJ1ZmZlciBzaXplICV6dSIsIHgsICpjLCBtX2FzY2lp
QnVmZmVyLnNpemUoKSkKICNkZWZpbmUgTE9HX0ZJTkFMX1NUQVRFKHgpIExPRyhVUkxQYXJzZXIs
ICJGaW5hbCBTdGF0ZTogJXMiLCB4KQogCiAgICAgU3RhdGUgc3RhdGUgPSBTdGF0ZTo6U2NoZW1l
U3RhcnQ7CkBAIC04OTUsNyArOTI5LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpTY2hlbWVTdGFydDoKICAgICAgICAgICAg
IExPR19TVEFURSgiU2NoZW1lU3RhcnQiKTsKICAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEo
KmMpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqYykp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKHRvQVNDSUlM
b3dlcigqYykpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpTY2hlbWU7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTkwNCwxOSArOTM4LDE5IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBT
dGF0ZTo6U2NoZW1lOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTY2hlbWUiKTsKICAgICAgICAg
ICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKCpjKSB8fCAqYyA9PSAnKycgfHwgKmMgPT0gJy0n
IHx8ICpjID09ICcuJykKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxv
d2VyKCpjKSk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQodG9BU0NJSUxv
d2VyKCpjKSk7CiAgICAgICAgICAgICBlbHNlIGlmICgqYyA9PSAnOicpIHsKLSAgICAgICAgICAg
ICAgICBtX3VybC5tX3NjaGVtZUVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIFN0cmluZ1ZpZXcgdXJsU2NoZW1lID0gYnVmZmVyVmlldyhtX2J1ZmZlciwgMCwgbV91cmwu
bV9zY2hlbWVFbmQpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB1cmxTY2hlbWUgPSBT
dHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3VybC5tX3NjaGVtZUVuZCk7CiAgICAg
ICAgICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gdXJsU2NoZW1lID09
ICJodHRwIiB8fCB1cmxTY2hlbWUgPT0gImh0dHBzIjsKICAgICAgICAgICAgICAgICBpZiAodXJs
U2NoZW1lID09ICJmaWxlIikgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3BlY2lhbCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZpbGU7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgnOicpOwogICAgICAgICAgICAgICAgIGlmIChpc1NwZWNpYWxTY2hlbWUodXJsU2NoZW1l
KSkgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3BlY2lhbCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYXNlLnByb3RvY29sKCkgPT0gdXJsU2NoZW1lKQpAQCAtOTI0LDcg
Kzk1OCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2Vy
U3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5t
X3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CkBAIC05MzQsNyArOTY4LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1heWJlU2xhc2gu
YXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICArK21heWJlU2xhc2g7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVTbGFz
aC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lp
QnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3VzZXJTdGFydCArIDE7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjID0gbWF5YmVTbGFzaDsKQEAgLTk0OCw3ICs5ODIsNyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBt
X2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsK
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAgICAgICAgICAg
ICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTk1Nyw3ICs5OTEsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykp
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkgewotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok5vU2NoZW1lOwog
ICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNwYWNlOwogICAgICAgICAg
ICAgfQpAQCAtOTY5LDcgKzEwMDMsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAoYmFzZS5tX2Nhbm5vdEJlQUJhc2VVUkwgJiYgKmMg
PT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFy
dDo6UXVlcnlFbmQpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZyYWdtZW50Owot
ICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycpOworICAgICAgICAgICAgICAgIG1f
YXNjaWlCdWZmZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTc4LDIwICsxMDEyLDIwIEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVS
TFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAg
ICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpGaWxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OlNw
ZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFs
UmVsYXRpdmVPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJykgewotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAg
ICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKICAgICAgICAgICAg
ICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGlmIChjLmF0RW5kKCkpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAgICAgICAgICAg
IGlmICgqYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcv
Jyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFz
aGVzOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgfQpAQCAtMTAw
MSw4ICsxMDM1LDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQog
ICAgICAgICBjYXNlIFN0YXRlOjpQYXRoT3JBdXRob3JpdHk6CiAgICAgICAgICAgICBMT0dfU1RB
VEUoIlBhdGhPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJykgewotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgICAgIG1fdXJs
Lm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkF1
dGhvcml0eU9ySG9zdDsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYXV0
aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwpAQCAtMTAxOSwxMyArMTA1MywxMyBAQCBVUkwgVVJMUGFy
c2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChi
YXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
Jz8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnPycpOwogICAgICAg
ICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAgICAgICAgICsrYzsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAgICAg
ICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1ZXJ5RW5kKTsKLSAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJyMnKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZCgnIycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZyYWdtZW50
OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEwNDAs
MTggKzEwNzQsMTggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQog
ICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnXFwnKSB7CiAgICAgICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6
OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCI6Ly8iKTsKKyAg
ICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiOi8vIiwgMyk7CiAgICAgICAgICAg
ICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXM7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2Us
IFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVuZCArIDE7CiAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5U2xhc2hl
czoKICAgICAgICAgICAgIExPR19TVEFURSgiU3BlY2lhbEF1dGhvcml0eVNsYXNoZXMiKTsKLSAg
ICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCIvLyIsIDIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAn
XFwnKSB7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIHdoaWxlICghYy5h
dEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKQEAgLTEwNjYsMTAgKzExMDAsMTAgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRl
OjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczoKICAgICAgICAgICAgIExPR19TVEFURSgi
U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMiKTsKICAgICAgICAgICAgIGlmICgqYyA9PSAn
LycgfHwgKmMgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAg
ICAgICAgKytjOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQg
PSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpBdXRob3JpdHlP
ckhvc3Q7CiAgICAgICAgICAgICBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGM7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTEwODgsMTMgKzExMjIsMTMgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBib29s
IGlzU2xhc2ggPSAqYyA9PSAnLycgfHwgKG1fdXJsSXNTcGVjaWFsICYmICpjID09ICdcXCcpOwog
ICAgICAgICAgICAgICAgIGlmIChpc1NsYXNoIHx8ICpjID09ICc/JyB8fCAqYyA9PSAnIycpIHsK
LSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6
ZSgpOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91
c2VyRW5kOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVy
YXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICghaXNTbGFzaCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZm
ZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRl
ckxhc3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTIxLDE1ICsxMTU1LDE1IEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIHN3aXRjaCAoKmMp
IHsKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAg
ICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RmlsZVNs
YXNoOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBi
YXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRz
VW50aWwoYmFzZSwgVVJMUGFydDo6UGF0aEVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKCIvLy8/Iik7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1
ZmZlci5sZW5ndGgoKSAtIDI7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Ii8vLz8iLCA0KTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpIC0gMjsKICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3Vy
bC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91
cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CkBAIC0xMTQyLDggKzExNzYsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBjYXNlICcjJzoKICAgICAgICAgICAgICAg
ICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElzKCJmaWxlIikpCiAgICAgICAg
ICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1ZXJ5RW5kKTsK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vLyMiKTsKLSAgICAgICAgICAgICAg
ICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpIC0gMjsKKyAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIyIsIDQpOworICAgICAgICAgICAgICAgIG1f
dXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAyOwogICAgICAgICAgICAg
ICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAg
IG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAg
ICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTExNTgsOCArMTE5Miw4
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAg
ICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElzKCJmaWxlIikgJiYgc2hv
dWxkQ29weUZpbGVVUkwoYykpCiAgICAgICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGls
KGJhc2UsIFVSTFBhcnQ6OlBhdGhBZnRlckxhc3RTbGFzaCk7CiAgICAgICAgICAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIik7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAxOwor
ICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIiwgMyk7CisgICAg
ICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkg
LSAxOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJT
dGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1f
dXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5t
X3VzZXJTdGFydDsKQEAgLTExNzQsOCArMTIwOCw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19TVEFURSgiRmlsZVNsYXNoIik7CiAg
ICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsKICAgICAgICAgICAgICAg
ICArK2M7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAg
ICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fdXJsLm1f
dXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwu
bV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9w
YXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgIG1fdXJsLm1f
aG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE5MiwxNSArMTIyNiwxNSBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgICAg
ICAgICA/IGlzV2luZG93c0RyaXZlTGV0dGVyKENvZGVQb2ludEl0ZXJhdG9yPExDaGFyPihiYXNl
UGF0aC5jaGFyYWN0ZXJzOCgpLCBiYXNlUGF0aC5jaGFyYWN0ZXJzOCgpICsgYmFzZVBhdGgubGVu
Z3RoKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1dpbmRvd3NEcml2ZUxldHRlcihD
b2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4oYmFzZVBhdGguY2hhcmFjdGVyczE2KCksIGJhc2VQYXRo
LmNoYXJhY3RlcnMxNigpICsgYmFzZVBhdGgubGVuZ3RoKCkpKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKHdpbmRvd3NRdWlyaykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKGJhc2VQYXRoWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZChiYXNlUGF0aFsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVy
LmFwcGVuZChiYXNlUGF0aFswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVu
ZCgiLy8iKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3Ro
KCkgLSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoIi8vIiwgMik7CisgICAg
ICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAg
ICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAg
ICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAg
bV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMjExLDIzICsxMjQ1LDIz
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2Fz
ZSBTdGF0ZTo6RmlsZUhvc3Q6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkZpbGVIb3N0Iik7CiAg
ICAgICAgICAgICBpZiAoaXNTbGFzaFF1ZXN0aW9uT3JIYXNoKCpjKSkgewotICAgICAgICAgICAg
ICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihtX2J1ZmZlciwgbV91cmwubV9wb3J0RW5kICsg
MSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIobV9hc2NpaUJ1
ZmZlciwgbV91cmwubV9wb3J0RW5kICsgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlPckhvc3RCZWdpbiA9PSBjKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFd
ID09ICcvJyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FzY2lpQnVmZmVyW21fYXNj
aWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCpj
ID09ICc/JykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvPyIp
OwotICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBt
X2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZCgiLz8iLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0
aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7
CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpRdWVyeTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnIycpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLyMiKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9idWZmZXIubGVu
Z3RoKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Ii8jIiwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RT
bGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICAg
ICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNs
YXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CkBA
IC0xMjQwLDkgKzEyNzQsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hh
cmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1fdXJsLm1fcGFzc3dvcmRFbmQs
IG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIp
ICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3Bhc3N3b3Jk
RW5kKTsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRh
KCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1f
cGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLnNocmluayhtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xMjYyLDM1ICsxMjk2LDM1IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBTdGF0ZTo6UGF0aDoK
ICAgICAgICAgICAgIExPR19TVEFURSgiUGF0aCIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcv
JyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJykpIHsKLSAgICAgICAgICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxh
c3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xh
c2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAobV9idWZmZXIu
bGVuZ3RoKCkgJiYgbV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycpIHsKKyAg
ICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiBtX2FzY2lpQnVmZmVyW21fYXNj
aWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlzRG91
YmxlRG90UGF0aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZURvdWJs
ZURvdFBhdGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBwb3BQYXRoKCk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBpZiAobV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycgJiYgaXNTaW5nbGVE
b3RQYXRoU2VnbWVudChjKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyW21f
YXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xlRG90UGF0aFNlZ21lbnQo
YykpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNpbmdsZURvdFBhdGhTZWdtZW50KGMp
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91
cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5k
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVu
ZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFn
bWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChpc1BlcmNlbnRFbmNvZGVkRG90KGMpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy4nKTsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoKmMgPT0gJyUnKTsKICAgICAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKCpjID09IGRvdEFTQ0lJQ29kZVswXSk7CkBAIC0xMjk5
LDIwICsxMzMzLDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUK
ICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9idWZmZXIsIGlzSW5EZWZh
dWx0RW5jb2RlU2V0KTsKKyAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2FzY2lp
QnVmZmVyLCBpc0luRGVmYXVsdEVuY29kZVNldCk7CiAgICAgICAgICAgICArK2M7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAg
ICAgICAgICAgICBMT0dfU1RBVEUoIkNhbm5vdEJlQUJhc2VVUkxQYXRoIik7CiAgICAgICAgICAg
ICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcjJykgewotICAgICAgICAgICAgICAgIG1fdXJs
Lm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fdXJsLm1f
cGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIG1fdXJsLm1f
cXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6RnJhZ21lbnQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHV0ZjhQ
ZXJjZW50RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJblNpbXBsZUVuY29kZVNldCk7CisgICAgICAg
ICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlCdWZmZXIsIGlzSW5TaW1wbGVF
bmNvZGVTZXQpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMTMyMCwyMCArMTM1NCwyMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUoIlF1ZXJ5Iik7CiAgICAg
ICAgICAgICBpZiAoKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFpc1VURjhFbmNv
ZGluZykKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZmZXIsIG1fYnVm
ZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fYnVm
ZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZl
ciwgbV9hc2NpaUJ1ZmZlciwgZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fcXVl
cnlFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICB1dGY4UGVyY2Vu
dEVuY29kZVF1ZXJ5KCpjLCBtX2J1ZmZlcik7CisgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRF
bmNvZGVRdWVyeSgqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgcXVlcnlCdWZmZXIuYXBwZW5kKCpjKTsKICAgICAgICAgICAgICsrYzsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKICAgICAgICAgICAg
IExPR19TVEFURSgiRnJhZ21lbnQiKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgqYyk7
CisgICAgICAgICAgICBpZiAobV91bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0eSgpICYmIGlz
QVNDSUkoKmMpKQorICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCpjKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5h
cHBlbmQoKmMpOwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KQEAgLTEzNDIsNyArMTM3OSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBTdGF0ZTo6U2NoZW1lU3Rh
cnQ6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3RhcnQiKTsKLSAgICAgICAgaWYg
KCFtX2J1ZmZlci5sZW5ndGgoKSAmJiAhYmFzZS5pc051bGwoKSkKKyAgICAgICAgaWYgKCFtX2Fz
Y2lpQnVmZmVyLnNpemUoKSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAgICAgICAgIHJldHVybiBi
YXNlOwogICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0
YXRlOjpTY2hlbWU6CkBAIC0xMzY2LDcgKzE0MDMsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgY2FzZSBTdGF0ZTo6UmVsYXRpdmVTbGFzaDoKICAgICAg
ICAgTE9HX0ZJTkFMX1NUQVRFKCJSZWxhdGl2ZVNsYXNoIik7CiAgICAgICAgIGNvcHlVUkxQYXJ0
c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
Jy8nKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwu
bV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVuZCArIDE7CiAgICAgICAgIG1fdXJs
Lm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICBtX3VybC5t
X3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBAIC0xMzc0LDcgKzE0MTEs
NyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzOgogICAgICAgICBM
T0dfRklOQUxfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7Ci0gICAgICAgIG1fdXJs
Lm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fdXNlclN0
YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1f
dXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpA
QCAtMTM4OSw3ICsxNDI2LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVy
VHlwZQogICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICBjYXNlIFN0
YXRlOjpBdXRob3JpdHlPckhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9yaXR5
T3JIb3N0Iik7Ci0gICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgRkFMTFRIUk9V
R0g7CiAgICAgY2FzZSBTdGF0ZTo6SG9zdDoKQEAgLTEzOTcsNyArMTQzNCw3IEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19GSU5BTF9T
VEFURSgiSG9zdCIpOwogICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdp
bikpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKLSAgICAgICAg
bV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7
CiAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcG9ydEVuZCArIDE7CiAgICAgICAg
IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBt
X3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwpAQCAtMTQwNywxMCArMTQ0NCwxMCBA
QCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIExPR19G
SU5BTF9TVEFURSgiRmlsZSIpOwogICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5w
cm90b2NvbCgpID09ICJmaWxlIikgewogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFz
ZSwgVVJMUGFydDo6UXVlcnlFbmQpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7
CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICB9Ci0gICAg
ICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0g
bV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8v
IiwgMyk7CisgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkg
LSAxOwogICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAg
ICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3Vy
bC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0MjIsOCArMTQ1OSw4IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTdGF0ZTo6RmlsZVNsYXNoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVT
bGFzaCIpOwotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vIik7Ci0gICAgICAgIG1fdXJsLm1f
dXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVy
LmFwcGVuZCgiLy8iLCAyKTsKKyAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKSAtIDE7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0
YXJ0OwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQzNiw4ICsx
NDczLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgIGNh
c2UgU3RhdGU6OkZpbGVIb3N0OgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVIb3N0Iik7
CiAgICAgICAgIGlmIChhdXRob3JpdHlPckhvc3RCZWdpbiA9PSBjKSB7Ci0gICAgICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9i
dWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8n
KTsKKyAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkg
LSAxOwogICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAg
ICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAg
ICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0NTEsMTMg
KzE0ODgsMTMgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogCiAg
ICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1
dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1
dCwgbGVuZ3RoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChidWZmZXJWaWV3KG1fYnVmZmVyLCBt
X3VybC5tX3Bhc3N3b3JkRW5kLCBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fdXJsLm1fcGFzc3dvcmRF
bmQpID09ICJsb2NhbGhvc3QiKSAgewotICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fdXJs
Lm1fcGFzc3dvcmRFbmQpOwotICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkg
KyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFz
c3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5z
aHJpbmsobV91cmwubV9wYXNzd29yZEVuZCk7CisgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1f
dXJsLm1faG9zdEVuZDsKICAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsK
KyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX2hvc3RFbmQgKyAxOwogICAgICAgICBtX3VybC5tX3Bh
dGhFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsKICAgICAgICAgbV91cmwubV9xdWVy
eUVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwpAQCAtMTQ2OCwzMCArMTUwNSw0MCBA
QCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgU3RhdGU6OlBhdGg6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiUGF0aCIp
OwotICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAg
bV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1f
cXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgIG1fdXJsLm1fZnJhZ21lbnRFbmQg
PSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OkNhbm5v
dEJlQUJhc2VVUkxQYXRoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkNhbm5vdEJlQUJhc2VV
UkxQYXRoIik7Ci0gICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
bV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgbV91cmwubV9mcmFn
bWVudEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0
ZTo6UXVlcnk6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiUXVlcnkiKTsKICAgICAgICAgaWYg
KCFpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVmZmVyLCBt
X2J1ZmZlciwgZW5jb2RpbmcpOwotICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZlciwgbV9hc2NpaUJ1
ZmZlciwgZW5jb2RpbmcpOworICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBtX3VybC5tX3F1ZXJ5RW5k
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKICAgICAgICAgTE9H
X0ZJTkFMX1NUQVRFKCJGcmFnbWVudCIpOwotICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0g
bV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKSArIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnNpemUoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgfQogCi0gICAgbV91cmwubV9zdHJpbmcgPSBtX2J1ZmZlci50b1N0cmluZygp
OworICAgIGlmIChtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFN0cmluZzo6YWRvcHQgc2hvdWxkIHJlcXVpcmUgYSBXVEZNb3ZlLgorICAgICAg
ICBtX3VybC5tX3N0cmluZyA9IFN0cmluZzo6YWRvcHQobV9hc2NpaUJ1ZmZlcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLnJl
c2VydmVDYXBhY2l0eShtX2FzY2lpQnVmZmVyLnNpemUoKSArIG1fdW5pY29kZUZyYWdtZW50QnVm
ZmVyLnNpemUoKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fYXNjaWlCdWZmZXIuZGF0YSgp
LCBtX2FzY2lpQnVmZmVyLnNpemUoKSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcltpXSk7CisgICAgICAgIG1fdXJsLm1fc3Ry
aW5nID0gYnVpbGRlci50b1N0cmluZygpOworICAgIH0KICAgICBtX3VybC5tX2lzVmFsaWQgPSB0
cnVlOwogICAgIExPRyhVUkxQYXJzZXIsICJQYXJzZWQgVVJMIDwlcz4iLCBtX3VybC5tX3N0cmlu
Zy51dGY4KCkuZGF0YSgpKTsKICAgICByZXR1cm4gbV91cmw7CkBAIC0xNTAxLDQyICsxNTQ4LDk5
IEBAIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+CiB2b2lkIFVSTFBhcnNlcjo6cGFy
c2VBdXRob3JpdHkoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4gaXRlcmF0b3IpCiB7
CiAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKLSAgICAgICAgbV91cmwubV91c2VyRW5kID0g
bV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYXNjaWlCdWZm
ZXIuc2l6ZSgpOwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyRW5k
OwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsg
KytpdGVyYXRvcikgewogICAgICAgICBpZiAoKml0ZXJhdG9yID09ICc6JykgewogICAgICAgICAg
ICAgKytpdGVyYXRvcjsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxl
bmd0aCgpOworICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgICAg
IG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7CiAgICAgICAgICAgICAgICAg
aWYgKG1fdXJsLm1fdXNlckVuZCA+IG1fdXJsLm1fdXNlclN0YXJ0KQotICAgICAgICAgICAgICAg
ICAgICBtX2J1ZmZlci5hcHBlbmQoJ0AnKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoJ0AnKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBtX2J1ZmZlci5hcHBlbmQoKml0ZXJhdG9yKTsKKyAgICAgICAgLy8gRklYTUU6IFJpZ2h0IG5v
dywgdGhlcmUgaXMgbm8gY2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgQVNDSUkuCisgICAgICAgIC8v
IFdlIG5lZWQgdG8gdXNlIGlzSW5Vc2VySW5mb0VuY29kZVNldCBhbmQgdXRmOCBwZXJjZW50IGVu
Y29kZSBub24tQVNDSUkgY29kZSBwb2ludHMuCisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5k
KCppdGVyYXRvcik7CiAgICAgfQogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVy
YXRvcikKLSAgICAgICAgbV9idWZmZXIuYXBwZW5kKCppdGVyYXRvcik7Ci0gICAgbV91cmwubV9w
YXNzd29yZEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgqaXRlcmF0b3IpOworICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICBpZiAoIW1fdXJsLm1fdXNlckVuZCkKICAgICAgICAgbV91cmwubV91c2Vy
RW5kID0gbV91cmwubV9wYXNzd29yZEVuZDsKLSAgICBtX2J1ZmZlci5hcHBlbmQoJ0AnKTsKKyAg
ICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnQCcpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJ
UHY0KHVpbnQzMl90IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3N0YXRpYyB2b2lk
IGFwcGVuZE51bWJlcihWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgdWludDhfdCBudW1iZXIp
CiB7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcihhZGRyZXNzID4+IDI0KTsKKyAgICBkZXN0aW5h
dGlvbi5yZXNlcnZlQ2FwYWNpdHkoZGVzdGluYXRpb24uc2l6ZSgpICsgc3RybGVuKCIyNTUiKSk7
CisKKyAgICB1aW50OF90IGh1bmRyZWRzID0gbnVtYmVyIC8gMTAwOworICAgIHVpbnQ4X3QgdGVu
cyA9IChudW1iZXIgLyAxMCkgJSAxMDsKKyAgICB1aW50OF90IG9uZXMgPSBudW1iZXIgJSAxMDsK
KyAgICAKKyAgICBpZiAoaHVuZHJlZHMpIHsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2Vk
QXBwZW5kKGh1bmRyZWRzICsgJzAnKTsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBw
ZW5kKHRlbnMgKyAnMCcpOworICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQob25l
cyArICcwJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRlbnMpCisgICAgICAg
IGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZCh0ZW5zICsgJzAnKTsKKyAgICBkZXN0aW5hdGlv
bi51bmNoZWNrZWRBcHBlbmQob25lcyArICcwJyk7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZE51
bWJlcihWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgdWludDE2X3QgbnVtYmVyKQoreworICAg
IGRlc3RpbmF0aW9uLnJlc2VydmVDYXBhY2l0eShkZXN0aW5hdGlvbi5zaXplKCkgKyBzdHJsZW4o
IjY1NTM1IikpOworCisgICAgdWludDhfdCB0ZW5UaG91c2FuZHMgPSAobnVtYmVyIC8gMTAwMDAp
ICUgMTA7CisgICAgdWludDhfdCB0aG91c2FuZHMgPSAobnVtYmVyIC8gMTAwMCkgJSAxMDsKKyAg
ICB1aW50OF90IGh1bmRyZWRzID0gKG51bWJlciAvIDEwMCkgJSAxMDsKKyAgICB1aW50OF90IHRl
bnMgPSAobnVtYmVyIC8gMTApICUgMTA7CisgICAgdWludDhfdCBvbmVzID0gbnVtYmVyICUgMTA7
CisKKyAgICBpZiAodGVuVGhvdXNhbmRzKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tl
ZEFwcGVuZCh0ZW5UaG91c2FuZHMgKyAnMCcpOworICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNr
ZWRBcHBlbmQodGhvdXNhbmRzICsgJzAnKTsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2Vk
QXBwZW5kKGh1bmRyZWRzICsgJzAnKTsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBw
ZW5kKHRlbnMgKyAnMCcpOworICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQob25l
cyArICcwJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRob3VzYW5kcykgewor
ICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQodGhvdXNhbmRzICsgJzAnKTsKKyAg
ICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKGh1bmRyZWRzICsgJzAnKTsKKyAgICAg
ICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKHRlbnMgKyAnMCcpOworICAgICAgICBkZXN0
aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQob25lcyArICcwJyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGh1bmRyZWRzKSB7CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFw
cGVuZChodW5kcmVkcyArICcwJyk7CisgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVu
ZCh0ZW5zICsgJzAnKTsKKyAgICAgICAgZGVzdGluYXRpb24udW5jaGVja2VkQXBwZW5kKG9uZXMg
KyAnMCcpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0ZW5zKQorICAgICAgICBk
ZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQodGVucyArICcwJyk7CisgICAgZGVzdGluYXRpb24u
dW5jaGVja2VkQXBwZW5kKG9uZXMgKyAnMCcpOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxpemVJ
UHY0KHVpbnQzMl90IGFkZHJlc3MsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBhcHBl
bmROdW1iZXIoYnVmZmVyLCBzdGF0aWNfY2FzdDx1aW50OF90PihhZGRyZXNzID4+IDI0KSk7CiAg
ICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIoKGFkZHJlc3Mg
Pj4gMTYpICYgMHhGRik7CisgICAgYXBwZW5kTnVtYmVyKGJ1ZmZlciwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oKGFkZHJlc3MgPj4gMTYpKSk7CiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1
ZmZlci5hcHBlbmROdW1iZXIoKGFkZHJlc3MgPj4gOCkgJiAweEZGKTsKKyAgICBhcHBlbmROdW1i
ZXIoYnVmZmVyLCBzdGF0aWNfY2FzdDx1aW50OF90PigoYWRkcmVzcyA+PiA4KSkpOwogICAgIGJ1
ZmZlci5hcHBlbmQoJy4nKTsKLSAgICBidWZmZXIuYXBwZW5kTnVtYmVyKGFkZHJlc3MgJiAweEZG
KTsKKyAgICBhcHBlbmROdW1iZXIoYnVmZmVyLCBzdGF0aWNfY2FzdDx1aW50OF90PihhZGRyZXNz
KSk7CiB9CiAgICAgCiBzdGF0aWMgc2l6ZV90IHplcm9TZXF1ZW5jZUxlbmd0aChjb25zdCBzdGQ6
OmFycmF5PHVpbnQxNl90LCA4PiYgYWRkcmVzcywgc2l6ZV90IGJlZ2luKQpAQCAtMTU2Niw3ICsx
NjcwLDcgQEAgc3RhdGljIE9wdGlvbmFsPHNpemVfdD4gZmluZExvbmdlc3RaZXJvUwogICAgIHJl
dHVybiBsb25nZXN0OwogfQogICAgIAotc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NlBpZWNlKHVp
bnQxNl90IHBpZWNlLCBTdHJpbmdCdWlsZGVyJiBidWZmZXIpCitzdGF0aWMgdm9pZCBzZXJpYWxp
emVJUHY2UGllY2UodWludDE2X3QgcGllY2UsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKIHsKICAg
ICBib29sIHByaW50ZWQgPSBmYWxzZTsKICAgICBpZiAoYXV0byBuaWJibGUwID0gcGllY2UgPj4g
MTIpIHsKQEAgLTE1ODQsNyArMTY4OCw3IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVj
ZSh1aW50MTZfdCAKICAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9Mb3dlcmNhc2VBU0NJ
SUhleERpZ2l0KHBpZWNlICYgMHhGKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYo
c3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQor
c3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbnQxNl90LCA4PiBhZGRyZXNz
LCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAgICAgYnVmZmVyLmFwcGVuZCgnWycpOwogICAg
IGF1dG8gY29tcHJlc3NQb2ludGVyID0gZmluZExvbmdlc3RaZXJvU2VxdWVuY2UoYWRkcmVzcyk7
CkBAIC0xNTk0LDcgKzE2OTgsNyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2KHN0ZDo6YXJy
YXk8dWluCiAgICAgICAgICAgICBpZiAocGllY2UpCiAgICAgICAgICAgICAgICAgYnVmZmVyLmFw
cGVuZCgnOicpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoIjo6Iik7CisgICAgICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgiOjoiLCAyKTsKICAgICAg
ICAgICAgIHdoaWxlIChwaWVjZSA8IDggJiYgIWFkZHJlc3NbcGllY2VdKQogICAgICAgICAgICAg
ICAgIHBpZWNlKys7CiAgICAgICAgICAgICBpZiAocGllY2UgPT0gOCkKQEAgLTE4NzYsMTAgKzE5
ODAsMTAgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlUG9ydChDb2RlUG9pbnRJdGVyYQogewogICAg
IHVpbnQzMl90IHBvcnQgPSAwOwogICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7Ci0gICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX3Bv
cnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQotICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6
Jyk7CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAg
IGlmIChpc1RhYk9yTmV3bGluZSgqaXRlcmF0b3IpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xODkwLDE0ICsxOTk0LDE0IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50
SXRlcmEKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQot
ICAgIAotICAgIGlmIChpc0RlZmF1bHRQb3J0KGJ1ZmZlclZpZXcobV9idWZmZXIsIDAsIG1fdXJs
Lm1fc2NoZW1lRW5kKSwgcG9ydCkpIHsKLSAgICAgICAgQVNTRVJUKG1fYnVmZmVyW21fYnVmZmVy
Lmxlbmd0aCgpIC0gMV0gPT0gJzonKTsKLSAgICAgICAgbV9idWZmZXIucmVzaXplKG1fYnVmZmVy
Lmxlbmd0aCgpIC0gMSk7CisKKyAgICBpZiAoaXNEZWZhdWx0UG9ydChTdHJpbmdWaWV3KG1fYXNj
aWlCdWZmZXIuZGF0YSgpLCBtX3VybC5tX3NjaGVtZUVuZCksIHBvcnQpKSB7CisgICAgICAgIExD
aGFyIGNvbG9uID0gbV9hc2NpaUJ1ZmZlci50YWtlTGFzdCgpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKGNvbG9uLCBjb2xvbiA9PSAnOicpOwogICAgIH0gZWxzZQotICAgICAgICBtX2J1ZmZlci5h
cHBlbmROdW1iZXIocG9ydCk7CisgICAgICAgIGFwcGVuZE51bWJlcihtX2FzY2lpQnVmZmVyLCBz
dGF0aWNfY2FzdDx1aW50MTZfdD4ocG9ydCkpOwogCi0gICAgbV91cmwubV9wb3J0RW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE5MTIsMTUgKzIwMTYsMTUgQEAgYm9vbCBV
UkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICB3aGlsZSAoIWlwdjZF
bmQuYXRFbmQoKSAmJiAqaXB2NkVuZCAhPSAnXScpCiAgICAgICAgICAgICArK2lwdjZFbmQ7CiAg
ICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjZIb3N0KENvZGVQb2ludEl0ZXJhdG9y
PENoYXJhY3RlclR5cGU+KGl0ZXJhdG9yLCBpcHY2RW5kKSkpIHsKLSAgICAgICAgICAgIHNlcmlh
bGl6ZUlQdjYoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7Ci0gICAgICAgICAgICBtX3VybC5t
X2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjYo
YWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9z
dEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFpcHY2RW5kLmF0
RW5kKCkpIHsKICAgICAgICAgICAgICAgICArK2lwdjZFbmQ7CiAgICAgICAgICAgICAgICAgaWYg
KCFpcHY2RW5kLmF0RW5kKCkgJiYgKmlwdjZFbmQgPT0gJzonKSB7CiAgICAgICAgICAgICAgICAg
ICAgICsraXB2NkVuZDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpcHY2
RW5kKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wb3J0RW5k
ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE5MzgsMTAgKzIwNDIsMTAg
QEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICBpZiAoYXV0byBhZGRyZXNzID0g
cGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihob3N0SXRlcmF0
b3IsIGl0ZXJhdG9yKSkpIHsKLSAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1
ZSgpLCBtX2J1ZmZlcik7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2Fz
Y2lpQnVmZmVyKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYXNjaWlCdWZmZXIu
c2l6ZSgpOwogICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmF0RW5kKCkpIHsKLSAgICAgICAgICAg
ICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICsraXRlcmF0b3I7CkBA
IC0xOTQ5LDkgKzIwNTMsOSBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0
ZXJhCiAgICAgICAgIH0KICAgICAgICAgZm9yICg7IGhvc3RJdGVyYXRvciAhPSBpdGVyYXRvcjsg
Kytob3N0SXRlcmF0b3IpIHsKICAgICAgICAgICAgIGlmICghaXNUYWJPck5ld2xpbmUoKmhvc3RJ
dGVyYXRvcikpCi0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigq
aG9zdEl0ZXJhdG9yKSk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQodG9B
U0NJSUxvd2VyKCpob3N0SXRlcmF0b3IpKTsKICAgICAgICAgfQotICAgICAgICBtX3VybC5tX2hv
c3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmICghaG9zdEl0ZXJhdG9yLmF0RW5kKCkpIHsK
ICAgICAgICAgICAgIEFTU0VSVCgqaG9zdEl0ZXJhdG9yID09ICc6Jyk7CiAgICAgICAgICAgICAr
K2hvc3RJdGVyYXRvcjsKQEAgLTE5NTksNyArMjA2Myw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJz
ZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgICAgICAgICArK2hvc3RJdGVyYXRvcjsKICAg
ICAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaG9zdEl0ZXJhdG9yKTsKICAgICAgICAgfQotICAg
ICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwu
bV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIApAQCAtMTk4OCwyMCArMjA5MiwyMCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0
KENvZGVQb2ludEl0ZXJhCiAgICAgU3RyaW5nJiBhc2NpaURvbWFpblZhbHVlID0gYXNjaWlEb21h
aW4udmFsdWUoKTsKICAgICBSRUxFQVNFX0FTU0VSVChhc2NpaURvbWFpblZhbHVlLmlzOEJpdCgp
KTsKICAgICBjb25zdCBMQ2hhciogYXNjaWlEb21haW5DaGFyYWN0ZXJzID0gYXNjaWlEb21haW5W
YWx1ZS5jaGFyYWN0ZXJzOCgpOwotICAgIAorCiAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNl
SVB2NEhvc3QoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGFzY2lpRG9tYWluQ2hhcmFjdGVycywg
YXNjaWlEb21haW5DaGFyYWN0ZXJzICsgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSkpKSB7Ci0g
ICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2J1ZmZlcik7Ci0gICAgICAg
IG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBzZXJpYWxpemVJ
UHY0KGFkZHJlc3MudmFsdWUoKSwgbV9hc2NpaUJ1ZmZlcik7CisgICAgICAgIG1fdXJsLm1faG9z
dEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQo
KSkgewotICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgICsraXRlcmF0b3I7CiAgICAg
ICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOwogICAgIH0KLSAgICAKLSAgICBtX2J1ZmZl
ci5hcHBlbmQoYXNjaWlEb21haW4udmFsdWUoKSk7Ci0gICAgbV91cmwubV9ob3N0RW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbkNo
YXJhY3RlcnMsIGFzY2lpRG9tYWluVmFsdWUubGVuZ3RoKCkpOworICAgIG1fdXJsLm1faG9zdEVu
ZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgIGlmICghaXRlcmF0b3IuYXRFbmQoKSkgewog
ICAgICAgICBBU1NFUlQoKml0ZXJhdG9yID09ICc6Jyk7CiAgICAgICAgICsraXRlcmF0b3I7CkBA
IC0yMDA5LDcgKzIxMTMsNyBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0
ZXJhCiAgICAgICAgICAgICArK2l0ZXJhdG9yOwogICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGl0
ZXJhdG9yKTsKICAgICB9Ci0gICAgbV91cmwubV9wb3J0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CisgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKQEAgLTIwNDMsNyArMjE0Nyw3IEBAIGF1dG8gVVJMUGFyc2VyOjpwYXJzZVVS
TEVuY29kZWRGb3JtKFN0cmkKICAgICByZXR1cm4gb3V0cHV0OwogfQogCi1zdGF0aWMgdm9pZCBz
ZXJpYWxpemVVUkxFbmNvZGVkRm9ybShjb25zdCBTdHJpbmcmIGlucHV0LCBTdHJpbmdCdWlsZGVy
JiBvdXRwdXQpCitzdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNvZGVkRm9ybShjb25zdCBTdHJp
bmcmIGlucHV0LCBWZWN0b3I8TENoYXI+JiBvdXRwdXQpCiB7CiAgICAgYXV0byB1dGY4ID0gaW5w
dXQudXRmOChTdHJpY3RDb252ZXJzaW9uKTsKICAgICBjb25zdCBjaGFyKiBkYXRhID0gdXRmOC5k
YXRhKCk7CkBAIC0yMDY2LDcgKzIxNzAsNyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVVUkxFbmNv
ZGVkRm9ybShjb25zCiAgICAgCiBTdHJpbmcgVVJMUGFyc2VyOjpzZXJpYWxpemUoY29uc3QgVVJM
RW5jb2RlZEZvcm0mIHR1cGxlcykKIHsKLSAgICBTdHJpbmdCdWlsZGVyIG91dHB1dDsKKyAgICBW
ZWN0b3I8TENoYXI+IG91dHB1dDsKICAgICBmb3IgKGF1dG8mIHR1cGxlIDogdHVwbGVzKSB7CiAg
ICAgICAgIGlmICghb3V0cHV0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQo
JyYnKTsKQEAgLTIwNzQsNyArMjE3OCw3IEBAIFN0cmluZyBVUkxQYXJzZXI6OnNlcmlhbGl6ZShj
b25zdCBVUkxFbmMKICAgICAgICAgb3V0cHV0LmFwcGVuZCgnPScpOwogICAgICAgICBzZXJpYWxp
emVVUkxFbmNvZGVkRm9ybSh0dXBsZS5zZWNvbmQsIG91dHB1dCk7CiAgICAgfQotICAgIHJldHVy
biBvdXRwdXQudG9TdHJpbmcoKTsKKyAgICByZXR1cm4gU3RyaW5nOjphZG9wdChvdXRwdXQpOwog
fQogCiBib29sIFVSTFBhcnNlcjo6YWxsVmFsdWVzRXF1YWwoY29uc3QgVVJMJiBhLCBjb25zdCBV
UkwmIGIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkocmV2aXNpb24gMjA1
OTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ4LDcgKzQ4LDggQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIFVSTCBtX3VybDsK
LSAgICBTdHJpbmdCdWlsZGVyIG1fYnVmZmVyOworICAgIFZlY3RvcjxMQ2hhcj4gbV9hc2NpaUJ1
ZmZlcjsKKyAgICBWZWN0b3I8VUNoYXIzMj4gbV91bmljb2RlRnJhZ21lbnRCdWZmZXI7CiAgICAg
Ym9vbCBtX3VybElzU3BlY2lhbCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2hvc3RIYXNQZXJjZW50
T3JOb25BU0NJSSB7IGZhbHNlIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289023</attachid>
            <date>2016-09-15 17:32:01 -0700</date>
            <delta_ts>2016-09-15 22:16:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160915172923.patch</filename>
            <type>text/plain</type>
            <size>44504</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdC
dWZmZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAg
IFdoZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJh
bnRlZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBm
b3IgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywg
YW5kIGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKyAgICAgICAgVGhpcyBp
cyBhIH4yMCUgc3BlZWR1cCBpbiB1cmwgcGFyc2luZy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpwZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjb3B5VVJM
UGFydHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQ
YXJzZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
cmlhbGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVu
Y29kZWRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L1VSTFBhcnNlci5oOgorCiAyMDE2LTA5LTEzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUu
Y29tPgogCiAgICAgICAgIFttZWRpYS1zb3VyY2VdIHdlYi1wbGF0Zm9ybS10ZXN0L21lZGlhLXNv
dXJjZS9tZWRpYXNvdXJjZS1yZW1vdmUuaHRtbCB0ZXN0IGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA1OTkwKQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsx
MDksOSBAQCB0ZW1wbGF0ZTw+CiBhdXRvIENvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPjo6b3BlcmF0
b3IrKygpIC0+IENvZGVQb2ludEl0ZXJhdG9yJgogewogICAgIEFTU0VSVCghYXRFbmQoKSk7Ci0g
ICAgaWYgKFUxNl9JU19MRUFEKG1fYmVnaW5bMF0pICYmIG1fYmVnaW4gPCBtX2VuZCAmJiBVMTZf
SVNfVFJBSUwobV9iZWdpblsxXSkpCi0gICAgICAgIG1fYmVnaW4gKz0gMjsKLSAgICBlbHNlCi0g
ICAgICAgIG1fYmVnaW4rKzsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBVMTZfRldEXzEobV9i
ZWdpbiwgaSwgbV9lbmQgLSBtX2JlZ2luKTsKKyAgICBtX2JlZ2luICs9IGk7CiAgICAgcmV0dXJu
ICp0aGlzOwogfQogCkBAIC00MDUsMTEgKzQwNCwxMSBAQCBzdGF0aWMgYm9vbCBpc1dpbmRvd3NE
cml2ZUxldHRlcihDb2RlUG9pCiAgICAgcmV0dXJuICppdGVyYXRvciA9PSAnOicgfHwgKml0ZXJh
dG9yID09ICd8JzsKIH0KIAotc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3Qg
U3RyaW5nQnVpbGRlciYgYnVpbGRlciwgc2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgaXNXaW5k
b3dzRHJpdmVMZXR0ZXIoY29uc3QgVmVjdG9yPExDaGFyPiYgYnVmZmVyLCBzaXplX3QgaW5kZXgp
CiB7Ci0gICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPCBpbmRleCArIDIpCisgICAgaWYgKGJ1ZmZl
ci5zaXplKCkgPCBpbmRleCArIDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
aXNBU0NJSUFscGhhKGJ1aWxkZXJbaW5kZXhdKSAmJiAoYnVpbGRlcltpbmRleCArIDFdID09ICc6
JyB8fCBidWlsZGVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKKyAgICByZXR1cm4gaXNBU0NJSUFscGhh
KGJ1ZmZlcltpbmRleF0pICYmIChidWZmZXJbaW5kZXggKyAxXSA9PSAnOicgfHwgYnVmZmVyW2lu
ZGV4ICsgMV0gPT0gJ3wnKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4K
QEAgLTQyOCwxNCArNDI3LDE0IEBAIHN0YXRpYyBib29sIHNob3VsZENvcHlGaWxlVVJMKENvZGVQ
b2ludEkKICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgqaXRlcmF0b3IpOwogfQog
Ci1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYg
YnVpbGRlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRFbmNvZGUodWludDhfdCBieXRlLCBWZWN0b3I8
TENoYXI+JiBidWZmZXIpCiB7Ci0gICAgYnVpbGRlci5hcHBlbmQoJyUnKTsKLSAgICBidWlsZGVy
LmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChieXRlKSk7Ci0gICAgYnVpbGRlci5h
cHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYnl0ZSkpOworICAgIGJ1ZmZlci5hcHBl
bmQoJyUnKTsKKyAgICBidWZmZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5
dGUpKTsKKyAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUp
KTsKIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQs
IFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGJvb2woKmlzSW5Db2RlU2V0KShVQ2hhcjMyKSkKK3N0
YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENo
YXI+JiBkZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNvZGVTZXQpKFVDaGFyMzIpKQogewogICAgIGlm
IChpc0luQ29kZVNldChjb2RlUG9pbnQpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01B
WF9MRU5HVEhdOwpAQCAtNDQ0LDEyICs0NDMsMTQgQEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRF
bmNvZGUoVUNoYXIzMiBjbwogICAgICAgICBVOF9BUFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01B
WF9MRU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOwogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJy
b3IuCiAgICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG9mZnNldDsgKytpKQotICAgICAg
ICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0sIGJ1aWxkZXIpOwotICAgIH0gZWxzZQotICAg
ICAgICBidWlsZGVyLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcGVyY2VudEVuY29k
ZShidWZmZXJbaV0sIGRlc3RpbmF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRf
V0lUSF9NRVNTQUdFKGlzQVNDSUkoY29kZVBvaW50KSwgImlzSW5Db2RlU2V0IHNob3VsZCBhbHdh
eXMgcmV0dXJuIHRydWUgZm9yIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIik7CisgICAgICAgIGRlc3Rp
bmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXRmOFBl
cmNlbnRFbmNvZGVRdWVyeShVQ2hhcjMyIGNvZGVQb2ludCwgU3RyaW5nQnVpbGRlciYgYnVpbGRl
cikKK3N0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9pbnQs
IFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQogewogICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01B
WF9MRU5HVEhdOwogICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKQEAgLTQ2MCwxMyArNDYxLDEzIEBA
IHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIKICAgICBmb3IgKGludDMy
X3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewogICAgICAgICBhdXRvIGJ5dGUgPSBidWZmZXJb
aV07CiAgICAgICAgIGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAg
ICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBidWlsZGVyKTsKKyAgICAgICAgICAgIHBlcmNl
bnRFbmNvZGUoYnl0ZSwgZGVzdGluYXRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZChieXRlKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRl
KTsKICAgICB9CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdC
dWlsZGVyJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5j
b2RpbmcmIGVuY29kaW5nKQorc3RhdGljIHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVp
bGRlciYgc291cmNlLCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29k
aW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBGSVhNRTogSXQgaXMgdW5jbGVhciBpbiB0aGUgc3Bl
YyB3aGF0IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFpbHMuIFRoZSBiZWhhdmlvciBzaG91bGQgYmUg
c3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCiAgICAgQ1N0cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5j
b2RlKHNvdXJjZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKTsKQEAgLTU5NSwxNSArNTk2LDYgQEAgc3RhdGljIGJvb2wgaXNTcGVj
aWFsU2NoZW1lKFN0cmluZ1ZpZXcgcwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4K
LXN0YXRpYyBTdHJpbmdWaWV3IGJ1ZmZlclZpZXcoY29uc3QgVCYgYnVmZmVyLCB1bnNpZ25lZCBz
dGFydCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPj0g
bGVuZ3RoKTsKLSAgICBpZiAoYnVmZmVyLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5n
VmlldyhidWZmZXIuY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOwotICAgIHJldHVybiBT
dHJpbmdWaWV3KGJ1ZmZlci5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBsZW5ndGgpOwotfQotCiBl
bnVtIGNsYXNzIFVSTFBhcnNlcjo6VVJMUGFydCB7CiAgICAgU2NoZW1lRW5kLAogICAgIFVzZXJT
dGFydCwKQEAgLTY0NCwxMSArNjM2LDQ3IEBAIHNpemVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVu
dGlsUGFydChjb24KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0K
LSAgICAKKworc3RhdGljIHZvaWQgY29weUFTQ0lJU3RyaW5nVW50aWwoVmVjdG9yPExDaGFyPiYg
ZGVzdGluYXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3QgbGVuZ3RoOEJpdCwgc2l6
ZV90IGxlbmd0aDE2Qml0KQoreworICAgIEFTU0VSVChkZXN0aW5hdGlvbi5pc0VtcHR5KCkpOwor
ICAgIGlmIChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3Ro
OEJpdCA8PSBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoc3Ry
aW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aDhCaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGxlbmd0aDE2Qml0IDw9IHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGRl
c3RpbmF0aW9uLnJlc2VydmVDYXBhY2l0eShsZW5ndGgxNkJpdCk7CisgICAgICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDE2Qml0OyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGMg
PSBjaGFyYWN0ZXJzW2ldOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04oaXNBU0NJSShjKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBl
bmQoYyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFy
dHNVbnRpbChjb25zdCBVUkwmIGJhc2UsIFVSTFBhcnQgcGFydCkKIHsKLSAgICBtX2J1ZmZlci5j
bGVhcigpOwotICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlLm1fc3RyaW5nLnN1YnN0cmluZygwLCB1
cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgcGFydCkpKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFy
KCk7CisgICAgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBpZiAocGFydCA9
PSBVUkxQYXJ0OjpGcmFnbWVudEVuZCkgeworICAgICAgICBjb3B5QVNDSUlTdHJpbmdVbnRpbCht
X2FzY2lpQnVmZmVyLCBiYXNlLm1fc3RyaW5nLCB1cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgVVJM
UGFydDo6RnJhZ21lbnRFbmQpLCB1cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgVVJMUGFydDo6UXVl
cnlFbmQpKTsKKyAgICAgICAgaWYgKCFiYXNlLm1fc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAg
ICAgICBjb25zdCBTdHJpbmcmIGZyYWdtZW50ID0gYmFzZS5tX3N0cmluZzsKKyAgICAgICAgICAg
IGJvb2wgc2VlblVuaWNvZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBi
YXNlLm1fcXVlcnlFbmQ7IGkgPCBiYXNlLm1fZnJhZ21lbnRFbmQ7ICsraSkgeworICAgICAgICAg
ICAgICAgIGlmICghc2VlblVuaWNvZGUgJiYgIWlzQVNDSUkoZnJhZ21lbnRbaV0pKQorICAgICAg
ICAgICAgICAgICAgICBzZWVuVW5pY29kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHNl
ZW5Vbmljb2RlKQorICAgICAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci51
bmNoZWNrZWRBcHBlbmQoZnJhZ21lbnRbaV0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoZnJhZ21lbnRbaV0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90
IGxlbmd0aCA9IHVybExlbmd0aFVudGlsUGFydChiYXNlLCBwYXJ0KTsKKyAgICAgICAgY29weUFT
Q0lJU3RyaW5nVW50aWwobV9hc2NpaUJ1ZmZlciwgYmFzZS5tX3N0cmluZywgbGVuZ3RoLCBsZW5n
dGgpOworICAgIH0KICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICBjYXNlIFVSTFBhcnQ6OkZyYWdt
ZW50RW5kOgogICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gYmFzZS5tX2ZyYWdtZW50RW5k
OwpAQCAtNjgyLDcgKzcxMCw3IEBAIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRpbChj
b25zdCAKICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gYmFzZS5tX3By
b3RvY29sSXNJbkhUVFBGYW1pbHk7CiAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gYmFzZS5t
X3NjaGVtZUVuZDsKICAgICB9Ci0gICAgbV91cmxJc1NwZWNpYWwgPSBpc1NwZWNpYWxTY2hlbWUo
YnVmZmVyVmlldyhtX2J1ZmZlciwgMCwgbV91cmwubV9zY2hlbWVFbmQpKTsKKyAgICBtX3VybElz
U3BlY2lhbCA9IGlzU3BlY2lhbFNjaGVtZShTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgp
LCBtX3VybC5tX3NjaGVtZUVuZCkpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogZG90QVNDSUlD
b2RlID0gIjJlIjsKQEAgLTgwMiwxMyArODMwLDEzIEBAIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRo
KCkKIHsKICAgICBpZiAobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRF
bmQgKyAxKSB7CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoLS07Ci0gICAgICAg
IGlmIChtX2J1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQorICAgICAg
ICBpZiAobV9hc2NpaUJ1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQog
ICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKLSAgICAgICAgd2hpbGUg
KG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID4gbV91cmwubV9wb3J0RW5kICYmIG1fYnVmZmVy
W21fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCisgICAgICAgIHdoaWxlIChtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9ydEVuZCAmJiBtX2FzY2lpQnVmZmVy
W21fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCiAgICAgICAgICAgICBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaC0tOwogICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFz
aCsrOwogICAgIH0KLSAgICBtX2J1ZmZlci5yZXNpemUobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xh
c2gpOworICAgIG1fYXNjaWlCdWZmZXIucmVzaXplKG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNo
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTg0NCw4ICs4NzIs
OSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiB7CiAgICAgTE9H
KFVSTFBhcnNlciwgIlBhcnNpbmcgVVJMIDwlcz4gYmFzZSA8JXM+IiwgU3RyaW5nKGlucHV0LCBs
ZW5ndGgpLnV0ZjgoKS5kYXRhKCksIGJhc2Uuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAg
bV91cmwgPSB7IH07Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICBtX2J1ZmZlci5yZXNlcnZl
Q2FwYWNpdHkobGVuZ3RoKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7CisgICAgbV91bmlj
b2RlRnJhZ21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBh
Y2l0eShsZW5ndGgpOwogICAgIAogICAgIGJvb2wgaXNVVEY4RW5jb2RpbmcgPSBlbmNvZGluZyA9
PSBVVEY4RW5jb2RpbmcoKTsKICAgICBTdHJpbmdCdWlsZGVyIHF1ZXJ5QnVmZmVyOwpAQCAtODgx
LDcgKzkxMCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAg
ICAgICAgRnJhZ21lbnQsCiAgICAgfTsKIAotI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBh
cnNlciwgIlN0YXRlICVzLCBjb2RlIHBvaW50ICVjLCBidWZmZXIgbGVuZ3RoICVkIiwgeCwgKmMs
IG1fYnVmZmVyLmxlbmd0aCgpKQorI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwg
IlN0YXRlICVzLCBjb2RlIHBvaW50ICVjLCBhc2NpaUJ1ZmZlciBzaXplICV6dSIsIHgsICpjLCBt
X2FzY2lpQnVmZmVyLnNpemUoKSkKICNkZWZpbmUgTE9HX0ZJTkFMX1NUQVRFKHgpIExPRyhVUkxQ
YXJzZXIsICJGaW5hbCBTdGF0ZTogJXMiLCB4KQogCiAgICAgU3RhdGUgc3RhdGUgPSBTdGF0ZTo6
U2NoZW1lU3RhcnQ7CkBAIC04OTUsNyArOTI0LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpTY2hlbWVTdGFydDoKICAgICAg
ICAgICAgIExPR19TVEFURSgiU2NoZW1lU3RhcnQiKTsKICAgICAgICAgICAgIGlmIChpc0FTQ0lJ
QWxwaGEoKmMpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dl
cigqYykpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKHRv
QVNDSUlMb3dlcigqYykpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlOjpTY2hlbWU7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTkwNCwxOSArOTMz
LDE5IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
Y2FzZSBTdGF0ZTo6U2NoZW1lOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTY2hlbWUiKTsKICAg
ICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKCpjKSB8fCAqYyA9PSAnKycgfHwgKmMg
PT0gJy0nIHx8ICpjID09ICcuJykKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9B
U0NJSUxvd2VyKCpjKSk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQodG9B
U0NJSUxvd2VyKCpjKSk7CiAgICAgICAgICAgICBlbHNlIGlmICgqYyA9PSAnOicpIHsKLSAgICAg
ICAgICAgICAgICBtX3VybC5tX3NjaGVtZUVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotICAgICAg
ICAgICAgICAgIFN0cmluZ1ZpZXcgdXJsU2NoZW1lID0gYnVmZmVyVmlldyhtX2J1ZmZlciwgMCwg
bV91cmwubV9zY2hlbWVFbmQpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB1cmxTY2hl
bWUgPSBTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3VybC5tX3NjaGVtZUVuZCk7
CiAgICAgICAgICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gdXJsU2No
ZW1lID09ICJodHRwIiB8fCB1cmxTY2hlbWUgPT0gImh0dHBzIjsKICAgICAgICAgICAgICAgICBp
ZiAodXJsU2NoZW1lID09ICJmaWxlIikgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3Bl
Y2lhbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZpbGU7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZCgnOicpOwogICAgICAgICAgICAgICAgIGlmIChpc1NwZWNpYWxTY2hlbWUodXJs
U2NoZW1lKSkgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3BlY2lhbCA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLnByb3RvY29sKCkgPT0gdXJsU2NoZW1lKQpAQCAt
OTI0LDcgKzk1Myw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUK
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBt
X3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0g
bV91cmwubV91c2VyU3RhcnQ7CkBAIC05MzQsNyArOTYzLDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFy
c2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1heWJl
U2xhc2guYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICArK21heWJlU2xhc2g7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF5
YmVTbGFzaC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3VzZXJTdGFydCArIDE7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBjID0gbWF5YmVTbGFzaDsKQEAgLTk0OCw3ICs5NzcsNyBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgKytjOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuY2xl
YXIoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAgICAg
ICAgICAgICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTk1Nyw3ICs5ODYsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXBlCiAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGlu
ZSgqYykpCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkg
ewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9h
c2NpaUJ1ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok5vU2No
ZW1lOwogICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNwYWNlOwogICAg
ICAgICAgICAgfQpAQCAtOTY5LDcgKzk5OCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0
IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGlmIChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAm
JiAqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBV
UkxQYXJ0OjpRdWVyeUVuZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21l
bnQ7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcjJyk7CisgICAgICAgICAgICAg
ICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJyMnKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05NzgsMjAgKzEwMDcsMjAgQEAg
VVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFz
ZSwgVVJMUGFydDo6U2NoZW1lRW5kKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicp
OworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGU6OkZpbGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGF0
ZTo6U3BlY2lhbFJlbGF0aXZlT3JBdXRob3JpdHk6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNw
ZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7
Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAg
bV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAg
ICAgICAgICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAg
ICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAg
ICAgICAgaWYgKCpjID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBl
bmQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsK
ICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9y
ZVNsYXNoZXM7CiAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICB9CkBA
IC0xMDAxLDggKzEwMzAsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgIGNhc2UgU3RhdGU6OlBhdGhPckF1dGhvcml0eToKICAgICAgICAgICAgIExP
R19TVEFURSgiUGF0aE9yQXV0aG9yaXR5Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7
Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAg
bV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0
YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6QXV0aG9yaXR5T3JIb3N0OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAg
ICBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGM7CkBAIC0xMDE5LDEzICsxMDQ4LDEzIEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1Vu
dGlsKGJhc2UsIFVSTFBhcnQ6OlBhdGhFbmQpOwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgnPycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc/Jyk7CiAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgKytj
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnIyc6CiAgICAgICAg
ICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycpOworICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJh
Z21lbnQ7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MTA0MCwxOCArMTA2OSwxOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsKICAgICAgICAg
ICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJM
UGFydDo6U2NoZW1lRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIjovLyIp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCI6Ly8iLCAzKTsKICAgICAg
ICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwo
YmFzZSwgVVJMUGFydDo6UG9ydEVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAg
ICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IGJhc2UubV9wb3J0RW5kICsg
MTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlT
bGFzaGVzOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyIp
OwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLyIpOworICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoIi8vIiwgMik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpj
ID09ICdcXCcpIHsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgd2hpbGUg
KCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQpAQCAtMTA2NiwxMCArMTA5NSwxMCBA
QCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGNhc2Ug
U3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFzaGVzOgogICAgICAgICAgICAgTE9HX1NU
QVRFKCJTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyIpOwogICAgICAgICAgICAgaWYgKCpj
ID09ICcvJyB8fCAqYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAg
ICAgICAgICAgICArK2M7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VybC5tX3VzZXJT
dGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkF1dGhv
cml0eU9ySG9zdDsKICAgICAgICAgICAgIGF1dGhvcml0eU9ySG9zdEJlZ2luID0gYzsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTA4OCwxMyArMTExNywxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJz
ZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IGJvb2wgaXNTbGFzaCA9ICpjID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xc
Jyk7CiAgICAgICAgICAgICAgICAgaWYgKGlzU2xhc2ggfHwgKmMgPT0gJz8nIHx8ICpjID09ICcj
JykgewotICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3Vy
bC5tX3VzZXJFbmQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2lu
dEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFpc1NsYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0
aEFmdGVyTGFzdFNsYXNoID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRo
OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExMjEsMTUgKzExNTAsMTUgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgc3dpdGNo
ICgqYykgewogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICBjYXNlICdcXCc6Ci0g
ICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV9h
c2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpG
aWxlU2xhc2g7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVsbCgp
ICYmIGJhc2UucHJvdG9jb2xJcygiZmlsZSIpKQogICAgICAgICAgICAgICAgICAgICBjb3B5VVJM
UGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoIi8vLz8iKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9
IG1fYnVmZmVyLmxlbmd0aCgpIC0gMjsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgiLy8vPyIsIDQpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCkgLSAyOwogICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9
IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQg
PSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBt
X3VybC5tX3VzZXJTdGFydDsKQEAgLTExNDIsOCArMTE3MSw4IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAg
ICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAg
ICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlF
bmQpOwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIyIpOwotICAgICAgICAg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAyOworICAgICAg
ICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLy8jIiwgNCk7CisgICAgICAgICAgICAg
ICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDI7CiAgICAgICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE1OCw4ICsx
MTg3LDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAg
ICAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSAm
JiBzaG91bGRDb3B5RmlsZVVSTChjKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRz
VW50aWwoYmFzZSwgVVJMUGFydDo6UGF0aEFmdGVyTGFzdFNsYXNoKTsKICAgICAgICAgICAgICAg
ICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAt
IDE7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLy8iLCAzKTsK
KyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKSAtIDE7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1f
dXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91
cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1f
dXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE3NCw4ICsxMjAzLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFy
c2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX1NUQVRFKCJGaWxlU2xhc2gi
KTsKICAgICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewogICAgICAgICAg
ICAgICAgICsrYzsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAg
ICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAg
ICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91
cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBt
X3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3Vy
bC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91
cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMTkyLDE1ICsxMjIxLDE1IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAg
ICAgICAgICAgID8gaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+
KGJhc2VQYXRoLmNoYXJhY3RlcnM4KCksIGJhc2VQYXRoLmNoYXJhY3RlcnM4KCkgKyBiYXNlUGF0
aC5sZW5ndGgoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzV2luZG93c0RyaXZlTGV0
dGVyKENvZGVQb2ludEl0ZXJhdG9yPFVDaGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzMTYoKSwgYmFz
ZVBhdGguY2hhcmFjdGVyczE2KCkgKyBiYXNlUGF0aC5sZW5ndGgoKSkpOwogICAgICAgICAgICAg
ICAgICAgICBpZiAod2luZG93c1F1aXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoYmFzZVBhdGhbMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZm
ZXIuYXBwZW5kKGJhc2VQYXRoWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKGJhc2VQYXRoWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIuYXBwZW5kKGJhc2VQYXRoWzFdKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKCIvLyIpOwotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5s
ZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8iLCAyKTsK
KyAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAx
OwogICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAg
ICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAg
ICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTEyMTEsMjMgKzEy
NDAsMjMgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAg
ICBjYXNlIFN0YXRlOjpGaWxlSG9zdDoKICAgICAgICAgICAgIExPR19TVEFURSgiRmlsZUhvc3Qi
KTsKICAgICAgICAgICAgIGlmIChpc1NsYXNoUXVlc3Rpb25Pckhhc2goKmMpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKG1fYnVmZmVyLCBtX3VybC5tX3BvcnRF
bmQgKyAxKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihtX2Fz
Y2lpQnVmZmVyLCBtX3VybC5tX3BvcnRFbmQgKyAxKSkgewogICAgICAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luID09IGMp
IHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYnVmZmVyW21fYnVmZmVyLmxlbmd0aCgp
IC0gMV0gPT0gJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXNjaWlCdWZmZXJb
bV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycpOwogICAgICAgICAgICAgICAgICAgICBp
ZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
Ii8/Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFz
aCA9IG1fYnVmZmVyLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIuYXBwZW5kKCIvPyIsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RT
bGFzaDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAg
ICAgICAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCpjID09ICcj
JykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvIyIpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2J1ZmZl
ci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgiLyMiLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVy
TGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJM
YXN0U2xhc2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVu
dDsKQEAgLTEyNDAsOSArMTI2OSw5IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRv
cjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBpZiAoYnVmZmVyVmlldyhtX2J1ZmZlciwgbV91cmwubV9wYXNzd29y
ZEVuZCwgbV9idWZmZXIubGVuZ3RoKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9PSAibG9jYWxo
b3N0IikgIHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1fcGFz
c3dvcmRFbmQpOwotICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVy
LmRhdGEoKSArIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gbV91
cmwubV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CisgICAgICAgICAgICAgICAgICAg
IG1fYXNjaWlCdWZmZXIuc2hyaW5rKG1fdXJsLm1fcGFzc3dvcmRFbmQpOworICAgICAgICAgICAg
ICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
ICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV91cmwubV9ob3N0RW5kOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKQEAgLTEyNjIsMzUgKzEyOTEsMzUgQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpQ
YXRoOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJQYXRoIik7CiAgICAgICAgICAgICBpZiAoKmMg
PT0gJy8nIHx8IChtX3VybElzU3BlY2lhbCAmJiAqYyA9PSAnXFwnKSkgewotICAgICAgICAgICAg
ICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFm
dGVyTGFzdFNsYXNoID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxh
c3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgICsrYzsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2J1
ZmZlci5sZW5ndGgoKSAmJiBtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICcvJykg
eworICAgICAgICAgICAgaWYgKG1fYXNjaWlCdWZmZXIuc2l6ZSgpICYmIG1fYXNjaWlCdWZmZXJb
bV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICBpZiAo
aXNEb3VibGVEb3RQYXRoU2VnbWVudChjKSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdW1l
RG91YmxlRG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAgIHBvcFBhdGgoKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIGlmIChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICcvJyAmJiBpc1Np
bmdsZURvdFBhdGhTZWdtZW50KGMpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYXNjaWlCdWZm
ZXJbbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycgJiYgaXNTaW5nbGVEb3RQYXRoU2Vn
bWVudChjKSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21l
bnQoYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgqYyA9PSAnPycpIHsKLSAgICAgICAgICAgICAg
ICBtX3VybC5tX3BhdGhFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBt
X3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlOjpRdWVyeTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmICgqYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5t
X3BhdGhFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
dGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBtX3VybC5tX3F1
ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6
OkZyYWdtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzUGVyY2VudEVuY29kZWREb3QoYykpIHsKLSAgICAgICAgICAgICAgICBtX2J1
ZmZlci5hcHBlbmQoJy4nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgn
LicpOwogICAgICAgICAgICAgICAgIEFTU0VSVCgqYyA9PSAnJScpOwogICAgICAgICAgICAgICAg
ICsrYzsKICAgICAgICAgICAgICAgICBBU1NFUlQoKmMgPT0gZG90QVNDSUlDb2RlWzBdKTsKQEAg
LTEyOTksMjAgKzEzMjgsMjAgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVy
VHlwZQogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJ
bkRlZmF1bHRFbmNvZGVTZXQpOworICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1f
YXNjaWlCdWZmZXIsIGlzSW5EZWZhdWx0RW5jb2RlU2V0KTsKICAgICAgICAgICAgICsrYzsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpDYW5ub3RCZUFCYXNlVVJMUGF0
aDoKICAgICAgICAgICAgIExPR19TVEFURSgiQ2Fubm90QmVBQmFzZVVSTFBhdGgiKTsKICAgICAg
ICAgICAgIGlmICgqYyA9PSAnPycpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQg
PSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBt
X2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpRdWVy
eTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAg
bV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91
cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91
cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
dXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYnVmZmVyLCBpc0luU2ltcGxlRW5jb2RlU2V0KTsKKyAg
ICAgICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9hc2NpaUJ1ZmZlciwgaXNJblNp
bXBsZUVuY29kZVNldCk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0xMzIwLDIwICsxMzQ5LDIzIEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19TVEFURSgiUXVlcnkiKTsK
ICAgICAgICAgICAgIGlmICgqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzVVRG
OEVuY29kaW5nKQotICAgICAgICAgICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZlciwg
bV9idWZmZXIsIGVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0g
bV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5
QnVmZmVyLCBtX2FzY2lpQnVmZmVyLCBlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgbV91cmwu
bV9xdWVyeUVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRl
ID0gU3RhdGU6OkZyYWdtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgICAgIHV0ZjhQ
ZXJjZW50RW5jb2RlUXVlcnkoKmMsIG1fYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1dGY4UGVy
Y2VudEVuY29kZVF1ZXJ5KCpjLCBtX2FzY2lpQnVmZmVyKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBxdWVyeUJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgKytjOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50OgogICAgICAg
ICAgICAgTE9HX1NUQVRFKCJGcmFnbWVudCIpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCpjKTsKKyAgICAgICAgICAgIGlmIChtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5pc0VtcHR5KCkg
JiYgaXNBU0NJSSgqYykpCisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoKmMp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdW5pY29kZUZyYWdtZW50QnVm
ZmVyLmFwcGVuZCgqYyk7CiAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpAQCAtMTM0Miw3ICsxMzc0LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIFN0YXRlOjpTY2hl
bWVTdGFydDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJTY2hlbWVTdGFydCIpOwotICAgICAg
ICBpZiAoIW1fYnVmZmVyLmxlbmd0aCgpICYmICFiYXNlLmlzTnVsbCgpKQorICAgICAgICBpZiAo
IW1fYXNjaWlCdWZmZXIuc2l6ZSgpICYmICFiYXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0
dXJuIGJhc2U7CiAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgIGNh
c2UgU3RhdGU6OlNjaGVtZToKQEAgLTEzNjYsNyArMTM5OCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICBjYXNlIFN0YXRlOjpSZWxhdGl2ZVNsYXNoOgog
ICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlJlbGF0aXZlU2xhc2giKTsKICAgICAgICAgY29weVVS
TFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UG9ydEVuZCk7Ci0gICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgnLycpOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBt
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IGJhc2UubV9wb3J0RW5kICsgMTsKICAgICAgICAg
bV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiAgICAgICAgIG1f
dXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsKQEAgLTEzNzQsNyAr
MTQwNiw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM6CiAgICAg
ICAgIExPR19GSU5BTF9TVEFURSgiU3BlY2lhbEF1dGhvcml0eVNsYXNoZXMiKTsKLSAgICAgICAg
bV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV91c2VyRW5k
ID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3Vy
bC5tX3VzZXJTdGFydDsKICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3Rh
cnQ7CkBAIC0xMzg5LDcgKzE0MjEsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFy
YWN0ZXJUeXBlCiAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgIGNh
c2UgU3RhdGU6OkF1dGhvcml0eU9ySG9zdDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJBdXRo
b3JpdHlPckhvc3QiKTsKLSAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3Ro
KCk7CisgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAg
ICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyRW5kOwogICAgICAgICBGQUxM
VEhST1VHSDsKICAgICBjYXNlIFN0YXRlOjpIb3N0OgpAQCAtMTM5Nyw3ICsxNDI5LDcgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX0ZJ
TkFMX1NUQVRFKCJIb3N0Iik7CiAgICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhvcml0eU9ySG9z
dEJlZ2luKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwotICAg
ICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Jy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wb3J0RW5kICsgMTsKICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAg
ICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CkBAIC0xNDA3LDEwICsxNDM5
LDEwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
TE9HX0ZJTkFMX1NUQVRFKCJGaWxlIik7CiAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBi
YXNlLnByb3RvY29sKCkgPT0gImZpbGUiKSB7CiAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRp
bChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCk7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
JzonKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0K
LSAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKLSAgICAgICAgbV91cmwubV91c2VyU3Rh
cnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5k
KCIvLy8iLCAzKTsKKyAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKSAtIDE7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0Owog
ICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAg
IG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQyMiw4ICsxNDU0LDgg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVh
azsKICAgICBjYXNlIFN0YXRlOjpGaWxlU2xhc2g6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
RmlsZVNsYXNoIik7Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgbV91
cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgIG1fYXNjaWlC
dWZmZXIuYXBwZW5kKCIvLyIsIDIpOworICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNj
aWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFy
dDsKICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xNDM2
LDggKzE0NjgsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgY2FzZSBTdGF0ZTo6RmlsZUhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiRmlsZUhv
c3QiKTsKICAgICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luID09IGMpIHsKLSAgICAgICAg
ICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQg
PSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVu
ZCgnLycpOworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKSAtIDE7CiAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFy
dDsKICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsK
ICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQ1
MSwxMyArMTQ4MywxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBl
CiAKICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlw
ZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJl
KGlucHV0LCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZm
ZXIsIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNz
d29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7Ci0gICAgICAgICAgICBtX2J1ZmZlci5yZXNpemUo
bV91cmwubV9wYXNzd29yZEVuZCk7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKworICAgICAgICBpZiAoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRh
dGEoKSArIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gbV91cmwu
bV9wYXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CisgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLnNocmluayhtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9z
dEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgbV91cmwubV9wb3J0RW5k
ID0gbV91cmwubV9ob3N0RW5kOwogICAgICAgICB9Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZCgn
LycpOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fdXJsLm1faG9zdEVuZCArIDE7CiAgICAgICAgIG1fdXJs
Lm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICBtX3VybC5t
X3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBAIC0xNDY4LDMwICsxNTAw
LDQwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJQ
YXRoIik7Ci0gICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAg
ICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91
cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgbV91cmwubV9mcmFnbWVu
dEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6
Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQ2Fubm90QmVB
QmFzZVVSTFBhdGgiKTsKLSAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3Ro
KCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAg
ICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5t
X2ZyYWdtZW50RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFN0YXRlOjpRdWVyeToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJRdWVyeSIpOwogICAgICAg
ICBpZiAoIWlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZm
ZXIsIG1fYnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVmZmVyLCBtX2Fz
Y2lpQnVmZmVyLCBlbmNvZGluZyk7CisgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fdXJsLm1fcXVl
cnlFbmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50OgogICAgICAg
ICBMT0dfRklOQUxfU1RBVEUoIkZyYWdtZW50Iik7Ci0gICAgICAgIG1fdXJsLm1fZnJhZ21lbnRF
bmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1f
YXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3VybC5tX3N0cmluZyA9IG1fYnVmZmVyLnRvU3Ry
aW5nKCk7CisgICAgaWYgKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmlzRW1wdHkoKSkgeworICAg
ICAgICAvLyBGSVhNRTogU3RyaW5nOjphZG9wdCBzaG91bGQgcmVxdWlyZSBhIFdURk1vdmUuCisg
ICAgICAgIG1fdXJsLm1fc3RyaW5nID0gU3RyaW5nOjphZG9wdChtX2FzY2lpQnVmZmVyKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxk
ZXIucmVzZXJ2ZUNhcGFjaXR5KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21l
bnRCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9hc2NpaUJ1ZmZlci5k
YXRhKCksIG1fYXNjaWlCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyW2ldKTsKKyAgICAgICAgbV91cmwu
bV9zdHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQogICAgIG1fdXJsLm1faXNWYWxp
ZCA9IHRydWU7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBhcnNlZCBVUkwgPCVzPiIsIG1fdXJsLm1f
c3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBtX3VybDsKQEAgLTE1MDEsNDIgKzE1
NDMsNTcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJMUGFyc2Vy
OjpwYXJzZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRv
cikKIHsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3VzZXJF
bmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3Vz
ZXJFbmQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVu
ZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKSB7CiAgICAg
ICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZm
ZXIubGVuZ3RoKCk7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgICAg
ICAgICBpZiAobV91cmwubV91c2VyRW5kID4gbV91cmwubV91c2VyU3RhcnQpCi0gICAgICAgICAg
ICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcpOworICAgICAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLmFwcGVuZCgnQCcpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgbV9h
c2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIG1fYnVmZmVyLmFwcGVuZCgqaXRlcmF0b3IpOworICAgICAgICAvLyBGSVhNRTogUmln
aHQgbm93LCB0aGVyZSBpcyBubyBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBBU0NJSS4KKyAgICAg
ICAgLy8gV2UgbmVlZCB0byB1c2UgaXNJblVzZXJJbmZvRW5jb2RlU2V0IGFuZCB1dGY4IHBlcmNl
bnQgZW5jb2RlIG5vbi1BU0NJSSBjb2RlIHBvaW50cy4KKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5h
cHBlbmQoKml0ZXJhdG9yKTsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyAr
K2l0ZXJhdG9yKQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoKml0ZXJhdG9yKTsKLSAgICBtX3Vy
bC5tX3Bhc3N3b3JkRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCppdGVyYXRvcik7CisgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpOwogICAgIGlmICghbV91cmwubV91c2VyRW5kKQogICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX3VybC5tX3Bhc3N3b3JkRW5kOwotICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcp
OworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCdAJyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlh
bGl6ZUlQdjQodWludDMyX3QgYWRkcmVzcywgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQordGVtcGxh
dGU8dHlwZW5hbWUgVW5zaWduZWRJbnRlZ2VyVHlwZT4KK3ZvaWQgYXBwZW5kKFZlY3RvcjxMQ2hh
cj4mIGRlc3RpbmF0aW9uLCBVbnNpZ25lZEludGVnZXJUeXBlIG51bWJlcikKIHsKLSAgICBidWZm
ZXIuYXBwZW5kTnVtYmVyKGFkZHJlc3MgPj4gMjQpOworICAgIExDaGFyIGJ1ZltzaXplb2YoVW5z
aWduZWRJbnRlZ2VyVHlwZSkgKiAzICsgMV07CisgICAgTENoYXIqIGVuZCA9IGJ1ZiArIFdURl9B
UlJBWV9MRU5HVEgoYnVmKTsKKyAgICBMQ2hhciogcCA9IGVuZDsKKyAgICBkbyB7CisgICAgICAg
ICotLXAgPSAobnVtYmVyICUgMTApICsgJzAnOworICAgICAgICBudW1iZXIgLz0gMTA7CisgICAg
fSB3aGlsZSAobnVtYmVyKTsKKyAgICBkZXN0aW5hdGlvbi5hcHBlbmQocCwgZW5kIC0gcCk7Cit9
CisKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjQodWludDMyX3QgYWRkcmVzcywgVmVjdG9yPExD
aGFyPiYgYnVmZmVyKQoreworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MgPj4g
MjQpOwogICAgIGJ1ZmZlci5hcHBlbmQoJy4nKTsKLSAgICBidWZmZXIuYXBwZW5kTnVtYmVyKChh
ZGRyZXNzID4+IDE2KSAmIDB4RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIChhZGRy
ZXNzID4+IDE2KSk7CiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmRO
dW1iZXIoKGFkZHJlc3MgPj4gOCkgJiAweEZGKTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnVmZmVy
LCAoYWRkcmVzcyA+PiA4KSk7CiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5h
cHBlbmROdW1iZXIoYWRkcmVzcyAmIDB4RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIs
IGFkZHJlc3MpOwogfQogICAgIAogc3RhdGljIHNpemVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29u
c3Qgc3RkOjphcnJheTx1aW50MTZfdCwgOD4mIGFkZHJlc3MsIHNpemVfdCBiZWdpbikKQEAgLTE1
NjYsNyArMTYyMyw3IEBAIHN0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRMb25nZXN0WmVyb1MK
ICAgICByZXR1cm4gbG9uZ2VzdDsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQ
aWVjZSh1aW50MTZfdCBwaWVjZSwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQorc3RhdGljIHZvaWQg
c2VyaWFsaXplSVB2NlBpZWNlKHVpbnQxNl90IHBpZWNlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIp
CiB7CiAgICAgYm9vbCBwcmludGVkID0gZmFsc2U7CiAgICAgaWYgKGF1dG8gbmliYmxlMCA9IHBp
ZWNlID4+IDEyKSB7CkBAIC0xNTg0LDcgKzE2NDEsNyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJ
UHY2UGllY2UodWludDE2X3QgCiAgICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJj
YXNlQVNDSUlIZXhEaWdpdChwaWVjZSAmIDB4RikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxp
emVJUHY2KHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1
ZmZlcikKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4g
YWRkcmVzcywgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQoJ1sn
KTsKICAgICBhdXRvIGNvbXByZXNzUG9pbnRlciA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFk
ZHJlc3MpOwpAQCAtMTU5NCw3ICsxNjUxLDcgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2Nihz
dGQ6OmFycmF5PHVpbgogICAgICAgICAgICAgaWYgKHBpZWNlKQogICAgICAgICAgICAgICAgIGJ1
ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZm
ZXIuYXBwZW5kKCI6OiIpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6IiwgMik7
CiAgICAgICAgICAgICB3aGlsZSAocGllY2UgPCA4ICYmICFhZGRyZXNzW3BpZWNlXSkKICAgICAg
ICAgICAgICAgICBwaWVjZSsrOwogICAgICAgICAgICAgaWYgKHBpZWNlID09IDgpCkBAIC0xODc2
LDEwICsxOTMzLDEwIEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEK
IHsKICAgICB1aW50MzJfdCBwb3J0ID0gMDsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewot
ICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91
cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KLSAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgnOicpOwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewog
ICAgICAgICBpZiAoaXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwpAQCAtMTg5MCwxNCArMTk0NywxNCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0KENv
ZGVQb2ludEl0ZXJhCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KLSAgICAKLSAgICBpZiAoaXNEZWZhdWx0UG9ydChidWZmZXJWaWV3KG1fYnVmZmVyLCAw
LCBtX3VybC5tX3NjaGVtZUVuZCksIHBvcnQpKSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlcltt
X2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICc6Jyk7Ci0gICAgICAgIG1fYnVmZmVyLnJlc2l6ZSht
X2J1ZmZlci5sZW5ndGgoKSAtIDEpOworCisgICAgaWYgKGlzRGVmYXVsdFBvcnQoU3RyaW5nVmll
dyhtX2FzY2lpQnVmZmVyLmRhdGEoKSwgbV91cmwubV9zY2hlbWVFbmQpLCBwb3J0KSkgeworICAg
ICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZlci5sYXN0KCkgPT0gJzonKTsKKyAgICAgICAgbV9hc2Np
aUJ1ZmZlci5zaHJpbmsobV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxKTsKICAgICB9IGVsc2UKLSAg
ICAgICAgbV9idWZmZXIuYXBwZW5kTnVtYmVyKHBvcnQpOworICAgICAgICBhcHBlbmQ8dWludDE2
X3Q+KG1fYXNjaWlCdWZmZXIsIHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KSk7CiAKLSAgICBt
X3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxMiwx
NSArMTk2OSwxNSBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAg
ICAgICAgIHdoaWxlICghaXB2NkVuZC5hdEVuZCgpICYmICppcHY2RW5kICE9ICddJykKICAgICAg
ICAgICAgICsraXB2NkVuZDsKICAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhv
c3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oaXRlcmF0b3IsIGlwdjZFbmQpKSkg
ewotICAgICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsK
LSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAg
ICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAg
ICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
ICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgICsraXB2NkVuZDsK
ICAgICAgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSAmJiAqaXB2NkVuZCA9PSAnOicp
IHsKICAgICAgICAgICAgICAgICAgICAgKytpcHY2RW5kOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAg
ICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTkzOCwxMCArMTk5NSwxMCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2lu
dEl0ZXJhCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAg
IGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJh
Y3RlclR5cGU+KGhvc3RJdGVyYXRvciwgaXRlcmF0b3IpKSkgewotICAgICAgICAgICAgc2VyaWFs
aXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1f
aG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgc2VyaWFsaXplSVB2NChh
ZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0
RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRF
bmQoKSkgewotICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0
aCgpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6
ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgKytpdGVyYXRvcjsKQEAgLTE5NDksOSArMjAwNiw5IEBAIGJvb2wgVVJMUGFyc2VyOjpw
YXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0
ZXJhdG9yICE9IGl0ZXJhdG9yOyArK2hvc3RJdGVyYXRvcikgewogICAgICAgICAgICAgaWYgKCFp
c1RhYk9yTmV3bGluZSgqaG9zdEl0ZXJhdG9yKSkKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQodG9BU0NJSUxvd2VyKCpob3N0SXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmhvc3RJdGVyYXRvcikpOwogICAgICAgICB9
Ci0gICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBt
X3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgaWYgKCFob3N0
SXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0g
JzonKTsKICAgICAgICAgICAgICsraG9zdEl0ZXJhdG9yOwpAQCAtMTk1OSw3ICsyMDE2LDcgQEAg
Ym9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAgICAg
ICsraG9zdEl0ZXJhdG9yOwogICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0SXRlcmF0
b3IpOwogICAgICAgICB9Ci0gICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0
aCgpOworICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTg4LDIwICsyMDQ1LDIwIEBAIGJvb2wg
VVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICBTdHJpbmcmIGFzY2lpRG9t
YWluVmFsdWUgPSBhc2NpaURvbWFpbi52YWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGFzY2lp
RG9tYWluVmFsdWUuaXM4Qml0KCkpOwogICAgIGNvbnN0IExDaGFyKiBhc2NpaURvbWFpbkNoYXJh
Y3RlcnMgPSBhc2NpaURvbWFpblZhbHVlLmNoYXJhY3RlcnM4KCk7Ci0gICAgCisKICAgICBpZiAo
YXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNj
aWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZh
bHVlLmxlbmd0aCgpKSkpIHsKLSAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCks
IG1fYnVmZmVyKTsKLSAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CisgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsK
KyAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
IGlmIChpdGVyYXRvci5hdEVuZCgpKSB7Ci0gICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgKytpdGVyYXRvcjsKICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAg
fQotICAgIAotICAgIG1fYnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbi52YWx1ZSgpKTsKLSAgICBt
X3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKworICAgIG1fYXNjaWlCdWZmZXIu
YXBwZW5kKGFzY2lpRG9tYWluQ2hhcmFjdGVycywgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7
CisgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgaWYgKCFp
dGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIEFTU0VSVCgqaXRlcmF0b3IgPT0gJzonKTsKICAg
ICAgICAgKytpdGVyYXRvcjsKQEAgLTIwMDksNyArMjA2Niw3IEBAIGJvb2wgVVJMUGFyc2VyOjpw
YXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgICAgICsraXRlcmF0b3I7CiAgICAgICAg
IHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOwogICAgIH0KLSAgICBtX3VybC5tX3BvcnRFbmQg
PSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjA0Myw3ICsyMTAwLDcgQEAgYXV0
byBVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaQogICAgIHJldHVybiBvdXRwdXQ7
CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYg
aW5wdXQsIFN0cmluZ0J1aWxkZXImIG91dHB1dCkKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVu
Y29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFZlY3RvcjxMQ2hhcj4mIG91dHB1dCkKIHsK
ICAgICBhdXRvIHV0ZjggPSBpbnB1dC51dGY4KFN0cmljdENvbnZlcnNpb24pOwogICAgIGNvbnN0
IGNoYXIqIGRhdGEgPSB1dGY4LmRhdGEoKTsKQEAgLTIwNjYsNyArMjEyMyw3IEBAIHN0YXRpYyB2
b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnMKICAgICAKIFN0cmluZyBVUkxQYXJzZXI6
OnNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYgdHVwbGVzKQogewotICAgIFN0cmluZ0J1
aWxkZXIgb3V0cHV0OworICAgIFZlY3RvcjxMQ2hhcj4gb3V0cHV0OwogICAgIGZvciAoYXV0byYg
dHVwbGUgOiB0dXBsZXMpIHsKICAgICAgICAgaWYgKCFvdXRwdXQuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgb3V0cHV0LmFwcGVuZCgnJicpOwpAQCAtMjA3NCw3ICsyMTMxLDcgQEAgU3RyaW5nIFVS
TFBhcnNlcjo6c2VyaWFsaXplKGNvbnN0IFVSTEVuYwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc9
Jyk7CiAgICAgICAgIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKHR1cGxlLnNlY29uZCwgb3V0cHV0
KTsKICAgICB9Ci0gICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygpOworICAgIHJldHVybiBTdHJp
bmc6OmFkb3B0KG91dHB1dCk7CiB9CiAKIGJvb2wgVVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVhbChj
b25zdCBVUkwmIGEsIGNvbnN0IFVSTCYgYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBh
cnNlci5oCShyZXZpc2lvbiAyMDU5OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQ
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgVVJMIG1fdXJsOwotICAgIFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7CisgICAgVmVj
dG9yPExDaGFyPiBtX2FzY2lpQnVmZmVyOworICAgIFZlY3RvcjxVQ2hhcjMyPiBtX3VuaWNvZGVG
cmFnbWVudEJ1ZmZlcjsKICAgICBib29sIG1fdXJsSXNTcGVjaWFsIHsgZmFsc2UgfTsKICAgICBi
b29sIG1faG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJIHsgZmFsc2UgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289033</attachid>
            <date>2016-09-15 22:16:36 -0700</date>
            <delta_ts>2016-09-16 13:34:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160915221358.patch</filename>
            <type>text/plain</type>
            <size>44498</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAwOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE1ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBTdHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdC
dWZmZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAg
IFdoZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJh
bnRlZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBm
b3IgdGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywg
YW5kIGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKyAgICAgICAgVGhpcyBp
cyBhIH4yMCUgc3BlZWR1cCBpbiB1cmwgcGFyc2luZy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4
aXN0aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpwZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlKToK
KyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjb3B5VVJM
UGFydHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQ
YXJzZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6
CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNl
cmlhbGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAg
ICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OlVSTFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVu
Y29kZWRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L1VSTFBhcnNlci5oOgorCiAyMDE2LTA5LTE1ICBEYXZlIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29t
PgogCiAgICAgICAgIFtDU1MgUGFyc2VyXSBHZXQgQ1NTUGFyc2VyRmFzdFBhdGhzLmNwcCBjb21w
aWxpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24g
MjA1OTkwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTAgQEAgdGVtcGxhdGU8PgogYXV0byBDb2RlUG9pbnRJ
dGVyYXRvcjxVQ2hhcj46Om9wZXJhdG9yKysoKSAtPiBDb2RlUG9pbnRJdGVyYXRvciYKIHsKICAg
ICBBU1NFUlQoIWF0RW5kKCkpOwotICAgIGlmIChVMTZfSVNfTEVBRChtX2JlZ2luWzBdKSAmJiBt
X2JlZ2luIDwgbV9lbmQgJiYgVTE2X0lTX1RSQUlMKG1fYmVnaW5bMV0pKQotICAgICAgICBtX2Jl
Z2luICs9IDI7Ci0gICAgZWxzZQotICAgICAgICBtX2JlZ2luKys7CisgICAgdW5zaWduZWQgaSA9
IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9IG1fZW5kIC0gbV9iZWdpbjsKKyAgICBVMTZfRldEXzEo
bV9iZWdpbiwgaSwgbGVuZ3RoKTsKKyAgICBtX2JlZ2luICs9IGk7CiAgICAgcmV0dXJuICp0aGlz
OwogfQogCkBAIC00MDUsMTEgKzQwNSwxMSBAQCBzdGF0aWMgYm9vbCBpc1dpbmRvd3NEcml2ZUxl
dHRlcihDb2RlUG9pCiAgICAgcmV0dXJuICppdGVyYXRvciA9PSAnOicgfHwgKml0ZXJhdG9yID09
ICd8JzsKIH0KIAotc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgU3RyaW5n
QnVpbGRlciYgYnVpbGRlciwgc2l6ZV90IGluZGV4KQorc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJp
dmVMZXR0ZXIoY29uc3QgVmVjdG9yPExDaGFyPiYgYnVmZmVyLCBzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkgPCBpbmRleCArIDIpCisgICAgaWYgKGJ1ZmZlci5zaXpl
KCkgPCBpbmRleCArIDIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNBU0NJ
SUFscGhhKGJ1aWxkZXJbaW5kZXhdKSAmJiAoYnVpbGRlcltpbmRleCArIDFdID09ICc6JyB8fCBi
dWlsZGVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1ZmZl
cltpbmRleF0pICYmIChidWZmZXJbaW5kZXggKyAxXSA9PSAnOicgfHwgYnVmZmVyW2luZGV4ICsg
MV0gPT0gJ3wnKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTQy
OCwxNCArNDI4LDE0IEBAIHN0YXRpYyBib29sIHNob3VsZENvcHlGaWxlVVJMKENvZGVQb2ludEkK
ICAgICByZXR1cm4gIWlzU2xhc2hRdWVzdGlvbk9ySGFzaCgqaXRlcmF0b3IpOwogfQogCi1zdGF0
aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVpbnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRl
cikKK3N0YXRpYyB2b2lkIHBlcmNlbnRFbmNvZGUodWludDhfdCBieXRlLCBWZWN0b3I8TENoYXI+
JiBidWZmZXIpCiB7Ci0gICAgYnVpbGRlci5hcHBlbmQoJyUnKTsKLSAgICBidWlsZGVyLmFwcGVu
ZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhEaWdpdChieXRlKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQo
bG93ZXJOaWJibGVUb0FTQ0lJSGV4RGlnaXQoYnl0ZSkpOworICAgIGJ1ZmZlci5hcHBlbmQoJyUn
KTsKKyAgICBidWZmZXIuYXBwZW5kKHVwcGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsK
KyAgICBidWZmZXIuYXBwZW5kKGxvd2VyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKIH0K
IAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIGJvb2woKmlzSW5Db2RlU2V0KShVQ2hhcjMyKSkKK3N0YXRpYyB2
b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVDaGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBk
ZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNvZGVTZXQpKFVDaGFyMzIpKQogewogICAgIGlmIChpc0lu
Q29kZVNldChjb2RlUG9pbnQpKSB7CiAgICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5H
VEhdOwpAQCAtNDQ0LDEyICs0NDQsMTQgQEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUo
VUNoYXIzMiBjbwogICAgICAgICBVOF9BUFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9MRU5H
VEgsIGNvZGVQb2ludCwgZXJyb3IpOwogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCiAg
ICAgICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IG9mZnNldDsgKytpKQotICAgICAgICAgICAg
cGVyY2VudEVuY29kZShidWZmZXJbaV0sIGJ1aWxkZXIpOwotICAgIH0gZWxzZQotICAgICAgICBi
dWlsZGVyLmFwcGVuZChjb2RlUG9pbnQpOworICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZm
ZXJbaV0sIGRlc3RpbmF0aW9uKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfV0lUSF9N
RVNTQUdFKGlzQVNDSUkoY29kZVBvaW50KSwgImlzSW5Db2RlU2V0IHNob3VsZCBhbHdheXMgcmV0
dXJuIHRydWUgZm9yIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIik7CisgICAgICAgIGRlc3RpbmF0aW9u
LmFwcGVuZChjb2RlUG9pbnQpOworICAgIH0KIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRF
bmNvZGVRdWVyeShVQ2hhcjMyIGNvZGVQb2ludCwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0
YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3Rv
cjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQogewogICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5H
VEhdOwogICAgIGludDMyX3Qgb2Zmc2V0ID0gMDsKQEAgLTQ2MCwxMyArNDYyLDEzIEBAIHN0YXRp
YyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlUXVlcnkoVUNoYXIKICAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBvZmZzZXQ7ICsraSkgewogICAgICAgICBhdXRvIGJ5dGUgPSBidWZmZXJbaV07CiAg
ICAgICAgIGlmIChzaG91bGRQZXJjZW50RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAgICAgICAg
ICAgcGVyY2VudEVuY29kZShieXRlLCBidWlsZGVyKTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNv
ZGUoYnl0ZSwgZGVzdGluYXRpb24pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVy
LmFwcGVuZChieXRlKTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKICAg
ICB9CiB9CiAgICAgCi1zdGF0aWMgdm9pZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdCdWlsZGVy
JiBzb3VyY2UsIFN0cmluZ0J1aWxkZXImIGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2Rpbmcm
IGVuY29kaW5nKQorc3RhdGljIHZvaWQgZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbGRlciYg
c291cmNlLCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5nJiBl
bmNvZGluZykKIHsKICAgICAvLyBGSVhNRTogSXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0
IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFpbHMuIFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lm
aWVkIGFuZCB0ZXN0ZWQuCiAgICAgQ1N0cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKHNv
dXJjZS50b1N0cmluZ1ByZXNlcnZlQ2FwYWNpdHkoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5l
bmNvZGFibGVzKTsKQEAgLTU5NSwxNSArNTk3LDYgQEAgc3RhdGljIGJvb2wgaXNTcGVjaWFsU2No
ZW1lKFN0cmluZ1ZpZXcgcwogICAgIH0KIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRp
YyBTdHJpbmdWaWV3IGJ1ZmZlclZpZXcoY29uc3QgVCYgYnVmZmVyLCB1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgbGVuZ3RoKQotewotICAgIEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPj0gbGVuZ3Ro
KTsKLSAgICBpZiAoYnVmZmVyLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhi
dWZmZXIuY2hhcmFjdGVyczgoKSArIHN0YXJ0LCBsZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmdW
aWV3KGJ1ZmZlci5jaGFyYWN0ZXJzMTYoKSArIHN0YXJ0LCBsZW5ndGgpOwotfQotCiBlbnVtIGNs
YXNzIFVSTFBhcnNlcjo6VVJMUGFydCB7CiAgICAgU2NoZW1lRW5kLAogICAgIFVzZXJTdGFydCwK
QEAgLTY0NCwxMSArNjM3LDQ3IEBAIHNpemVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVudGlsUGFy
dChjb24KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KLSAgICAK
Kworc3RhdGljIHZvaWQgY29weUFTQ0lJU3RyaW5nVW50aWwoVmVjdG9yPExDaGFyPiYgZGVzdGlu
YXRpb24sIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBzaXplX3QgbGVuZ3RoOEJpdCwgc2l6ZV90IGxl
bmd0aDE2Qml0KQoreworICAgIEFTU0VSVChkZXN0aW5hdGlvbi5pc0VtcHR5KCkpOworICAgIGlm
IChzdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoOEJpdCA8
PSBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoc3RyaW5nLmNo
YXJhY3RlcnM4KCksIGxlbmd0aDhCaXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGxlbmd0aDE2Qml0IDw9IHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGRlc3RpbmF0
aW9uLnJlc2VydmVDYXBhY2l0eShsZW5ndGgxNkJpdCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGxlbmd0aDE2Qml0OyArK2kpIHsKKyAgICAgICAgICAgIFVDaGFyIGMgPSBjaGFy
YWN0ZXJzW2ldOworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aXNBU0NJSShjKSk7CisgICAgICAgICAgICBkZXN0aW5hdGlvbi51bmNoZWNrZWRBcHBlbmQoYyk7
CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRp
bChjb25zdCBVUkwmIGJhc2UsIFVSTFBhcnQgcGFydCkKIHsKLSAgICBtX2J1ZmZlci5jbGVhcigp
OwotICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlLm1fc3RyaW5nLnN1YnN0cmluZygwLCB1cmxMZW5n
dGhVbnRpbFBhcnQoYmFzZSwgcGFydCkpKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7Cisg
ICAgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBpZiAocGFydCA9PSBVUkxQ
YXJ0OjpGcmFnbWVudEVuZCkgeworICAgICAgICBjb3B5QVNDSUlTdHJpbmdVbnRpbChtX2FzY2lp
QnVmZmVyLCBiYXNlLm1fc3RyaW5nLCB1cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgVVJMUGFydDo6
RnJhZ21lbnRFbmQpLCB1cmxMZW5ndGhVbnRpbFBhcnQoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQp
KTsKKyAgICAgICAgaWYgKCFiYXNlLm1fc3RyaW5nLmlzOEJpdCgpKSB7CisgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIGZyYWdtZW50ID0gYmFzZS5tX3N0cmluZzsKKyAgICAgICAgICAgIGJvb2wg
c2VlblVuaWNvZGUgPSBmYWxzZTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBiYXNlLm1f
cXVlcnlFbmQ7IGkgPCBiYXNlLm1fZnJhZ21lbnRFbmQ7ICsraSkgeworICAgICAgICAgICAgICAg
IGlmICghc2VlblVuaWNvZGUgJiYgIWlzQVNDSUkoZnJhZ21lbnRbaV0pKQorICAgICAgICAgICAg
ICAgICAgICBzZWVuVW5pY29kZSA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKHNlZW5Vbmlj
b2RlKQorICAgICAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci51bmNoZWNr
ZWRBcHBlbmQoZnJhZ21lbnRbaV0pOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQoZnJhZ21lbnRbaV0pOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc2l6ZV90IGxlbmd0
aCA9IHVybExlbmd0aFVudGlsUGFydChiYXNlLCBwYXJ0KTsKKyAgICAgICAgY29weUFTQ0lJU3Ry
aW5nVW50aWwobV9hc2NpaUJ1ZmZlciwgYmFzZS5tX3N0cmluZywgbGVuZ3RoLCBsZW5ndGgpOwor
ICAgIH0KICAgICBzd2l0Y2ggKHBhcnQpIHsKICAgICBjYXNlIFVSTFBhcnQ6OkZyYWdtZW50RW5k
OgogICAgICAgICBtX3VybC5tX2ZyYWdtZW50RW5kID0gYmFzZS5tX2ZyYWdtZW50RW5kOwpAQCAt
NjgyLDcgKzcxMSw3IEBAIHZvaWQgVVJMUGFyc2VyOjpjb3B5VVJMUGFydHNVbnRpbChjb25zdCAK
ICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gYmFzZS5tX3Byb3RvY29s
SXNJbkhUVFBGYW1pbHk7CiAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gYmFzZS5tX3NjaGVt
ZUVuZDsKICAgICB9Ci0gICAgbV91cmxJc1NwZWNpYWwgPSBpc1NwZWNpYWxTY2hlbWUoYnVmZmVy
VmlldyhtX2J1ZmZlciwgMCwgbV91cmwubV9zY2hlbWVFbmQpKTsKKyAgICBtX3VybElzU3BlY2lh
bCA9IGlzU3BlY2lhbFNjaGVtZShTdHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3Vy
bC5tX3NjaGVtZUVuZCkpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciogZG90QVNDSUlDb2RlID0g
IjJlIjsKQEAgLTgwMiwxMyArODMxLDEzIEBAIHZvaWQgVVJMUGFyc2VyOjpwb3BQYXRoKCkKIHsK
ICAgICBpZiAobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRFbmQgKyAx
KSB7CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoLS07Ci0gICAgICAgIGlmICht
X2J1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQorICAgICAgICBpZiAo
bV9hc2NpaUJ1ZmZlclttX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaF0gPT0gJy8nKQogICAgICAg
ICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKLSAgICAgICAgd2hpbGUgKG1fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoID4gbV91cmwubV9wb3J0RW5kICYmIG1fYnVmZmVyW21fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCisgICAgICAgIHdoaWxlIChtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9ydEVuZCAmJiBtX2FzY2lpQnVmZmVyW21fdXJs
Lm1fcGF0aEFmdGVyTGFzdFNsYXNoXSAhPSAnLycpCiAgICAgICAgICAgICBtX3VybC5tX3BhdGhB
ZnRlckxhc3RTbGFzaC0tOwogICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCsrOwog
ICAgIH0KLSAgICBtX2J1ZmZlci5yZXNpemUobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gpOwor
ICAgIG1fYXNjaWlCdWZmZXIucmVzaXplKG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoKTsKIH0K
IAogdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTg0NCw4ICs4NzMsOSBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiB7CiAgICAgTE9HKFVSTFBh
cnNlciwgIlBhcnNpbmcgVVJMIDwlcz4gYmFzZSA8JXM+IiwgU3RyaW5nKGlucHV0LCBsZW5ndGgp
LnV0ZjgoKS5kYXRhKCksIGJhc2Uuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgbV91cmwg
PSB7IH07Ci0gICAgbV9idWZmZXIuY2xlYXIoKTsKLSAgICBtX2J1ZmZlci5yZXNlcnZlQ2FwYWNp
dHkobGVuZ3RoKTsKKyAgICBtX2FzY2lpQnVmZmVyLmNsZWFyKCk7CisgICAgbV91bmljb2RlRnJh
Z21lbnRCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2FzY2lpQnVmZmVyLnJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpOwogICAgIAogICAgIGJvb2wgaXNVVEY4RW5jb2RpbmcgPSBlbmNvZGluZyA9PSBVVEY4
RW5jb2RpbmcoKTsKICAgICBTdHJpbmdCdWlsZGVyIHF1ZXJ5QnVmZmVyOwpAQCAtODgxLDcgKzkx
MSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
RnJhZ21lbnQsCiAgICAgfTsKIAotI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwg
IlN0YXRlICVzLCBjb2RlIHBvaW50ICVjLCBidWZmZXIgbGVuZ3RoICVkIiwgeCwgKmMsIG1fYnVm
ZmVyLmxlbmd0aCgpKQorI2RlZmluZSBMT0dfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwgIlN0YXRl
ICVzLCBjb2RlIHBvaW50ICVjLCBhc2NpaUJ1ZmZlciBzaXplICV6dSIsIHgsICpjLCBtX2FzY2lp
QnVmZmVyLnNpemUoKSkKICNkZWZpbmUgTE9HX0ZJTkFMX1NUQVRFKHgpIExPRyhVUkxQYXJzZXIs
ICJGaW5hbCBTdGF0ZTogJXMiLCB4KQogCiAgICAgU3RhdGUgc3RhdGUgPSBTdGF0ZTo6U2NoZW1l
U3RhcnQ7CkBAIC04OTUsNyArOTI1LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hh
cmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpTY2hlbWVTdGFydDoKICAgICAgICAgICAg
IExPR19TVEFURSgiU2NoZW1lU3RhcnQiKTsKICAgICAgICAgICAgIGlmIChpc0FTQ0lJQWxwaGEo
KmMpKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKHRvQVNDSUlMb3dlcigqYykp
OworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIudW5jaGVja2VkQXBwZW5kKHRvQVNDSUlM
b3dlcigqYykpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpTY2hlbWU7CiAgICAgICAgICAgICB9IGVsc2UKQEAgLTkwNCwxOSArOTM0LDE5IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBT
dGF0ZTo6U2NoZW1lOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTY2hlbWUiKTsKICAgICAgICAg
ICAgIGlmIChpc0FTQ0lJQWxwaGFudW1lcmljKCpjKSB8fCAqYyA9PSAnKycgfHwgKmMgPT0gJy0n
IHx8ICpjID09ICcuJykKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxv
d2VyKCpjKSk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQodG9BU0NJSUxv
d2VyKCpjKSk7CiAgICAgICAgICAgICBlbHNlIGlmICgqYyA9PSAnOicpIHsKLSAgICAgICAgICAg
ICAgICBtX3VybC5tX3NjaGVtZUVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwotICAgICAgICAgICAg
ICAgIFN0cmluZ1ZpZXcgdXJsU2NoZW1lID0gYnVmZmVyVmlldyhtX2J1ZmZlciwgMCwgbV91cmwu
bV9zY2hlbWVFbmQpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fc2NoZW1lRW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nVmlldyB1cmxTY2hlbWUgPSBT
dHJpbmdWaWV3KG1fYXNjaWlCdWZmZXIuZGF0YSgpLCBtX3VybC5tX3NjaGVtZUVuZCk7CiAgICAg
ICAgICAgICAgICAgbV91cmwubV9wcm90b2NvbElzSW5IVFRQRmFtaWx5ID0gdXJsU2NoZW1lID09
ICJodHRwIiB8fCB1cmxTY2hlbWUgPT0gImh0dHBzIjsKICAgICAgICAgICAgICAgICBpZiAodXJs
U2NoZW1lID09ICJmaWxlIikgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3BlY2lhbCA9
IHRydWU7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZpbGU7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFw
cGVuZCgnOicpOwogICAgICAgICAgICAgICAgIGlmIChpc1NwZWNpYWxTY2hlbWUodXJsU2NoZW1l
KSkgewogICAgICAgICAgICAgICAgICAgICBtX3VybElzU3BlY2lhbCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChiYXNlLnByb3RvY29sKCkgPT0gdXJsU2NoZW1lKQpAQCAtOTI0LDcg
Kzk1NCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2Vy
U3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5t
X3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwu
bV91c2VyU3RhcnQ7CkBAIC05MzQsNyArOTY0LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1heWJlU2xhc2gu
YXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAgICAgICAgICAgICAgICAg
ICAgICAgICArK21heWJlU2xhc2g7CiAgICAgICAgICAgICAgICAgICAgIGlmICghbWF5YmVTbGFz
aC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lp
QnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3VzZXJTdGFydCArIDE7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjID0gbWF5YmVTbGFzaDsKQEAgLTk0OCw3ICs5NzgsNyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBt
X2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsK
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAgICAgICAgICAg
ICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTk1Nyw3ICs5ODcsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqYykp
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkgewotICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok5vU2NoZW1lOwog
ICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNwYWNlOwogICAgICAgICAg
ICAgfQpAQCAtOTY5LDcgKzk5OSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKICAgICAgICAgICAgIGlmIChiYXNlLm1fY2Fubm90QmVBQmFzZVVSTCAmJiAqYyA9
PSAnIycpIHsKICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0
OjpRdWVyeUVuZCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7Ci0g
ICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcjJyk7CisgICAgICAgICAgICAgICAgbV9h
c2NpaUJ1ZmZlci5hcHBlbmQoJyMnKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC05NzgsMjAgKzEwMDgsMjAgQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJM
UGFydDo6U2NoZW1lRW5kKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OkZpbGU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGF0ZTo6U3Bl
Y2lhbFJlbGF0aXZlT3JBdXRob3JpdHk6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNwZWNpYWxS
ZWxhdGl2ZU9yQXV0aG9yaXR5Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7Ci0gICAg
ICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAg
ICAgd2hpbGUgKCFjLmF0RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQogICAgICAgICAgICAg
ICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgaWYgKGMuYXRFbmQoKSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAg
aWYgKCpjID09ICcvJykgewotICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8n
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNo
ZXM7CiAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICB9CkBAIC0xMDAx
LDggKzEwMzEsOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgICAgIGNhc2UgU3RhdGU6OlBhdGhPckF1dGhvcml0eToKICAgICAgICAgICAgIExPR19TVEFU
RSgiUGF0aE9yQXV0aG9yaXR5Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nKSB7Ci0gICAg
ICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgbV91cmwu
bV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lp
QnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6QXV0
aG9yaXR5T3JIb3N0OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBhdXRo
b3JpdHlPckhvc3RCZWdpbiA9IGM7CkBAIC0xMDE5LDEzICsxMDQ5LDEzIEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJh
c2UsIFVSTFBhcnQ6OlBhdGhFbmQpOwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgn
PycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc/Jyk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgKytjOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnIyc6CiAgICAgICAgICAgICAg
ICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwotICAgICAgICAg
ICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA0MCwx
OCArMTA3MCwxOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsKICAgICAgICAgICAgICAg
ICArK2M7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6
U2NoZW1lRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIjovLyIpOworICAg
ICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCI6Ly8iLCAzKTsKICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwg
VVJMUGFydDo6UG9ydEVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7
CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAg
ICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IGJhc2UubV9wb3J0RW5kICsgMTsKICAg
ICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVz
OgogICAgICAgICAgICAgTE9HX1NUQVRFKCJTcGVjaWFsQXV0aG9yaXR5U2xhc2hlcyIpOwotICAg
ICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLyIpOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5hcHBlbmQoIi8vIiwgMik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdc
XCcpIHsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgd2hpbGUgKCFjLmF0
RW5kKCkgJiYgaXNUYWJPck5ld2xpbmUoKmMpKQpAQCAtMTA2NiwxMCArMTA5NiwxMCBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIGNhc2UgU3RhdGU6
OlNwZWNpYWxBdXRob3JpdHlJZ25vcmVTbGFzaGVzOgogICAgICAgICAgICAgTE9HX1NUQVRFKCJT
cGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlcyIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcv
JyB8fCAqYyA9PSAnXFwnKSB7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7
CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAg
ICAgICArK2M7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9
IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkF1dGhvcml0eU9y
SG9zdDsKICAgICAgICAgICAgIGF1dGhvcml0eU9ySG9zdEJlZ2luID0gYzsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMTA4OCwxMyArMTExOCwxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25z
dCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJvb2wg
aXNTbGFzaCA9ICpjID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJyk7CiAg
ICAgICAgICAgICAgICAgaWYgKGlzU2xhc2ggfHwgKmMgPT0gJz8nIHx8ICpjID09ICcjJykgewot
ICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsK
KyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3Vz
ZXJFbmQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJh
dG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJlZ2luLCBjKSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpc1NsYXNoKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZl
ci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVy
TGFzdFNsYXNoID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTExMjEsMTUgKzExNTEsMTUgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgc3dpdGNoICgqYykg
ewogICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICBjYXNlICdcXCc6Ci0gICAgICAg
ICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGaWxlU2xh
c2g7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgaWYgKCFiYXNlLmlzTnVsbCgpICYmIGJh
c2UucHJvdG9jb2xJcygiZmlsZSIpKQogICAgICAgICAgICAgICAgICAgICBjb3B5VVJMUGFydHNV
bnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoIi8vLz8iKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVm
ZmVyLmxlbmd0aCgpIC0gMjsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgi
Ly8vPyIsIDQpOworICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1
ZmZlci5zaXplKCkgLSAyOwogICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJs
Lm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3Vy
bC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5t
X3VzZXJTdGFydDsKQEAgLTExNDIsOCArMTE3Miw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIGNhc2UgJyMnOgogICAgICAgICAgICAgICAg
IGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAg
ICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwot
ICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIyIpOwotICAgICAgICAgICAgICAg
IG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAyOworICAgICAgICAgICAg
ICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLy8jIiwgNCk7CisgICAgICAgICAgICAgICAgbV91
cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDI7CiAgICAgICAgICAgICAg
ICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAg
IG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE1OCw4ICsxMTg4LDgg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAg
ICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSAmJiBzaG91
bGRDb3B5RmlsZVVSTChjKSkKICAgICAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwo
YmFzZSwgVVJMUGFydDo6UGF0aEFmdGVyTGFzdFNsYXNoKTsKICAgICAgICAgICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7Cisg
ICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLy8iLCAzKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAt
IDE7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0
YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91
c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1f
dXNlclN0YXJ0OwpAQCAtMTE3NCw4ICsxMjA0LDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29u
c3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX1NUQVRFKCJGaWxlU2xhc2giKTsKICAg
ICAgICAgICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewogICAgICAgICAgICAgICAg
ICsrYzsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAg
ICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAg
ICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
c3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9o
b3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMTkyLDE1ICsxMjIyLDE1IEBAIFVSTCBV
UkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICAgICAg
ICAgID8gaXNXaW5kb3dzRHJpdmVMZXR0ZXIoQ29kZVBvaW50SXRlcmF0b3I8TENoYXI+KGJhc2VQ
YXRoLmNoYXJhY3RlcnM4KCksIGJhc2VQYXRoLmNoYXJhY3RlcnM4KCkgKyBiYXNlUGF0aC5sZW5n
dGgoKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICA6IGlzV2luZG93c0RyaXZlTGV0dGVyKENv
ZGVQb2ludEl0ZXJhdG9yPFVDaGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzMTYoKSwgYmFzZVBhdGgu
Y2hhcmFjdGVyczE2KCkgKyBiYXNlUGF0aC5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAod2luZG93c1F1aXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoYmFzZVBhdGhbMF0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBw
ZW5kKGJhc2VQYXRoWzFdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIu
YXBwZW5kKGJhc2VQYXRoWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKGJhc2VQYXRoWzFdKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCIvLyIpOwotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgo
KSAtIDE7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8iLCAyKTsKKyAgICAg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAg
ICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICBt
X3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTEyMTEsMjMgKzEyNDEsMjMg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNl
IFN0YXRlOjpGaWxlSG9zdDoKICAgICAgICAgICAgIExPR19TVEFURSgiRmlsZUhvc3QiKTsKICAg
ICAgICAgICAgIGlmIChpc1NsYXNoUXVlc3Rpb25Pckhhc2goKmMpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlzV2luZG93c0RyaXZlTGV0dGVyKG1fYnVmZmVyLCBtX3VybC5tX3BvcnRFbmQgKyAx
KSkgeworICAgICAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihtX2FzY2lpQnVm
ZmVyLCBtX3VybC5tX3BvcnRFbmQgKyAxKSkgewogICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpQYXRoOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luID09IGMpIHsKLSAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYnVmZmVyW21fYnVmZmVyLmxlbmd0aCgpIC0gMV0g
PT0gJy8nKTsKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKG1fYXNjaWlCdWZmZXJbbV9hc2Np
aUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKmMg
PT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8/Iik7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1f
YnVmZmVyLmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCIvPyIsIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDE7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsK
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAg
ICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgaWYgKCpjID09ICcjJykgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCIvIyIpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2J1ZmZlci5sZW5n
dGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgi
LyMiLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNs
YXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xh
c2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsKQEAg
LTEyNDAsOSArMTI3MCw5IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5
cGUKICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYXRvcjxDaGFy
YWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBpZiAoYnVmZmVyVmlldyhtX2J1ZmZlciwgbV91cmwubV9wYXNzd29yZEVuZCwg
bV9idWZmZXIubGVuZ3RoKCkgLSBtX3VybC5tX3Bhc3N3b3JkRW5kKSA9PSAibG9jYWxob3N0Iikg
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1fcGFzc3dvcmRF
bmQpOwotICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKyAgICAgICAgICAgICAgICBpZiAoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEo
KSArIG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gbV91cmwubV9w
YXNzd29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CisgICAgICAgICAgICAgICAgICAgIG1fYXNj
aWlCdWZmZXIuc2hyaW5rKG1fdXJsLm1fcGFzc3dvcmRFbmQpOworICAgICAgICAgICAgICAgICAg
ICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAg
ICAgICAgbV91cmwubV9wb3J0RW5kID0gbV91cmwubV9ob3N0RW5kOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKQEAgLTEyNjIsMzUgKzEyOTIsMzUgQEAgVVJMIFVSTFBhcnNl
cjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpQYXRoOgog
ICAgICAgICAgICAgTE9HX1NUQVRFKCJQYXRoIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8n
IHx8IChtX3VybElzU3BlY2lhbCAmJiAqYyA9PSAnXFwnKSkgewotICAgICAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFz
dFNsYXNoID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFz
aCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChtX2J1ZmZlci5s
ZW5ndGgoKSAmJiBtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICcvJykgeworICAg
ICAgICAgICAgaWYgKG1fYXNjaWlCdWZmZXIuc2l6ZSgpICYmIG1fYXNjaWlCdWZmZXJbbV9hc2Np
aUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycpIHsKICAgICAgICAgICAgICAgICBpZiAoaXNEb3Vi
bGVEb3RQYXRoU2VnbWVudChjKSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdW1lRG91Ymxl
RG90UGF0aFNlZ21lbnQoYyk7CiAgICAgICAgICAgICAgICAgICAgIHBvcFBhdGgoKTsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IGlmIChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICcvJyAmJiBpc1NpbmdsZURv
dFBhdGhTZWdtZW50KGMpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fYXNjaWlCdWZmZXJbbV9h
c2NpaUJ1ZmZlci5zaXplKCkgLSAxXSA9PSAnLycgJiYgaXNTaW5nbGVEb3RQYXRoU2VnbWVudChj
KSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdW1lU2luZ2xlRG90UGF0aFNlZ21lbnQoYyk7
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmICgqYyA9PSAnPycpIHsKLSAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5t
X3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9
IFN0YXRlOjpRdWVyeTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmICgqYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhF
bmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5k
ID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZyYWdt
ZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
aWYgKGlzUGVyY2VudEVuY29kZWREb3QoYykpIHsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoJy4nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLicpOwog
ICAgICAgICAgICAgICAgIEFTU0VSVCgqYyA9PSAnJScpOwogICAgICAgICAgICAgICAgICsrYzsK
ICAgICAgICAgICAgICAgICBBU1NFUlQoKmMgPT0gZG90QVNDSUlDb2RlWzBdKTsKQEAgLTEyOTks
MjAgKzEzMjksMjAgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQog
ICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJbkRlZmF1
bHRFbmNvZGVTZXQpOworICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlC
dWZmZXIsIGlzSW5EZWZhdWx0RW5jb2RlU2V0KTsKICAgICAgICAgICAgICsrYzsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpDYW5ub3RCZUFCYXNlVVJMUGF0aDoKICAg
ICAgICAgICAgIExPR19TVEFURSgiQ2Fubm90QmVBQmFzZVVSTFBhdGgiKTsKICAgICAgICAgICAg
IGlmICgqYyA9PSAnPycpIHsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpRdWVyeTsKICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9w
YXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwubV9x
dWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRl
OjpGcmFnbWVudDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdXRmOFBl
cmNlbnRFbmNvZGUoKmMsIG1fYnVmZmVyLCBpc0luU2ltcGxlRW5jb2RlU2V0KTsKKyAgICAgICAg
ICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9hc2NpaUJ1ZmZlciwgaXNJblNpbXBsZUVu
Y29kZVNldCk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC0xMzIwLDIwICsxMzUwLDIzIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19TVEFURSgiUXVlcnkiKTsKICAgICAg
ICAgICAgIGlmICgqYyA9PSAnIycpIHsKICAgICAgICAgICAgICAgICBpZiAoIWlzVVRGOEVuY29k
aW5nKQotICAgICAgICAgICAgICAgICAgICBlbmNvZGVRdWVyeShxdWVyeUJ1ZmZlciwgbV9idWZm
ZXIsIGVuY29kaW5nKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV9idWZm
ZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVmZmVy
LCBtX2FzY2lpQnVmZmVyLCBlbmNvZGluZyk7CisgICAgICAgICAgICAgICAgbV91cmwubV9xdWVy
eUVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6OkZyYWdtZW50OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgICAgIHV0ZjhQZXJjZW50
RW5jb2RlUXVlcnkoKmMsIG1fYnVmZmVyKTsKKyAgICAgICAgICAgICAgICB1dGY4UGVyY2VudEVu
Y29kZVF1ZXJ5KCpjLCBtX2FzY2lpQnVmZmVyKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICBxdWVyeUJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgKytjOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50OgogICAgICAgICAgICAg
TE9HX1NUQVRFKCJGcmFnbWVudCIpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCpjKTsK
KyAgICAgICAgICAgIGlmIChtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5pc0VtcHR5KCkgJiYgaXNB
U0NJSSgqYykpCisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoKmMpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmFw
cGVuZCgqYyk7CiAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQpAQCAtMTM0Miw3ICsxMzc1LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFj
dGVyVHlwZQogICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICBjYXNlIFN0YXRlOjpTY2hlbWVTdGFy
dDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJTY2hlbWVTdGFydCIpOwotICAgICAgICBpZiAo
IW1fYnVmZmVyLmxlbmd0aCgpICYmICFiYXNlLmlzTnVsbCgpKQorICAgICAgICBpZiAoIW1fYXNj
aWlCdWZmZXIuc2l6ZSgpICYmICFiYXNlLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGJh
c2U7CiAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgIGNhc2UgU3Rh
dGU6OlNjaGVtZToKQEAgLTEzNjYsNyArMTM5OSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICBjYXNlIFN0YXRlOjpSZWxhdGl2ZVNsYXNoOgogICAgICAg
ICBMT0dfRklOQUxfU1RBVEUoIlJlbGF0aXZlU2xhc2giKTsKICAgICAgICAgY29weVVSTFBhcnRz
VW50aWwoYmFzZSwgVVJMUGFydDo6UG9ydEVuZCk7Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZCgn
LycpOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaCA9IGJhc2UubV9wb3J0RW5kICsgMTsKICAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CiAgICAgICAgIG1fdXJsLm1f
cXVlcnlFbmQgPSBtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsKQEAgLTEzNzQsNyArMTQwNyw3
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM6CiAgICAgICAgIExP
R19GSU5BTF9TVEFURSgiU3BlY2lhbEF1dGhvcml0eVNsYXNoZXMiKTsKLSAgICAgICAgbV91cmwu
bV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyU3Rh
cnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91
cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3Vz
ZXJTdGFydDsKICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBA
IC0xMzg5LDcgKzE0MjIsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgIGNhc2UgU3Rh
dGU6OkF1dGhvcml0eU9ySG9zdDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJBdXRob3JpdHlP
ckhvc3QiKTsKLSAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Cisg
ICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICBt
X3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyRW5kOwogICAgICAgICBGQUxMVEhST1VH
SDsKICAgICBjYXNlIFN0YXRlOjpIb3N0OgpAQCAtMTM5Nyw3ICsxNDMwLDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgTE9HX0ZJTkFMX1NU
QVRFKCJIb3N0Iik7CiAgICAgICAgIGlmICghcGFyc2VIb3N0KGF1dGhvcml0eU9ySG9zdEJlZ2lu
KSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwotICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsK
ICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wb3J0RW5kICsgMTsKICAgICAgICAg
bV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgIG1f
dXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CkBAIC0xNDA3LDEwICsxNDQwLDEwIEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgTE9HX0ZJ
TkFMX1NUQVRFKCJGaWxlIik7CiAgICAgICAgIGlmICghYmFzZS5pc051bGwoKSAmJiBiYXNlLnBy
b3RvY29sKCkgPT0gImZpbGUiKSB7CiAgICAgICAgICAgICBjb3B5VVJMUGFydHNVbnRpbChiYXNl
LCBVUkxQYXJ0OjpRdWVyeUVuZCk7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsK
KyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCIvLy8iKTsKLSAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBt
X2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLy8i
LCAzKTsKKyAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAt
IDE7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAg
ICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJs
Lm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQyMiw4ICsxNDU1LDggQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFN0YXRlOjpGaWxlU2xhc2g6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiRmlsZVNs
YXNoIik7Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgIG1fYXNjaWlCdWZmZXIu
YXBwZW5kKCIvLyIsIDIpOworICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZm
ZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3Rh
cnQ7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAg
ICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xNDM2LDggKzE0
NjksOCBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgY2Fz
ZSBTdGF0ZTo6RmlsZUhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiRmlsZUhvc3QiKTsK
ICAgICAgICAgaWYgKGF1dGhvcml0eU9ySG9zdEJlZ2luID09IGMpIHsKLSAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1
ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycp
OworICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAt
IDE7CiAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAg
ICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQ1MSwxMyAr
MTQ4NCwxMyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAKICAg
ICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0
aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0
LCBsZW5ndGgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1f
dXJsLm1fcGFzc3dvcmRFbmQsIG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVu
ZCkgPT0gImxvY2FsaG9zdCIpICB7Ci0gICAgICAgICAgICBtX2J1ZmZlci5yZXNpemUobV91cmwu
bV9wYXNzd29yZEVuZCk7Ci0gICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKKworICAgICAgICBpZiAoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSAr
IG1fdXJsLm1fcGFzc3dvcmRFbmQsIG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gbV91cmwubV9wYXNz
d29yZEVuZCkgPT0gImxvY2FsaG9zdCIpICB7CisgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnNo
cmluayhtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV91
cmwubV9ob3N0RW5kOwogICAgICAgICB9Ci0gICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwor
ICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICBtX3VybC5tX3BhdGhB
ZnRlckxhc3RTbGFzaCA9IG1fdXJsLm1faG9zdEVuZCArIDE7CiAgICAgICAgIG1fdXJsLm1fcGF0
aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICBtX3VybC5tX3F1ZXJ5
RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBAIC0xNDY4LDMwICsxNTAxLDQwIEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJQYXRoIik7
Ci0gICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBt
X3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9x
dWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9
IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90
QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQ2Fubm90QmVBQmFzZVVS
TFBhdGgiKTsKLSAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Cisg
ICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICBt
X3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5tX2ZyYWdt
ZW50RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRl
OjpRdWVyeToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJRdWVyeSIpOwogICAgICAgICBpZiAo
IWlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZmZXIsIG1f
YnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKKyAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVmZmVyLCBtX2FzY2lpQnVm
ZmVyLCBlbmNvZGluZyk7CisgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fdXJsLm1fcXVlcnlFbmQ7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50OgogICAgICAgICBMT0df
RklOQUxfU1RBVEUoIkZyYWdtZW50Iik7Ci0gICAgICAgIG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpOwogICAgICAgICBi
cmVhazsKICAgICB9CiAKLSAgICBtX3VybC5tX3N0cmluZyA9IG1fYnVmZmVyLnRvU3RyaW5nKCk7
CisgICAgaWYgKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmlzRW1wdHkoKSkgeworICAgICAgICAv
LyBGSVhNRTogU3RyaW5nOjphZG9wdCBzaG91bGQgcmVxdWlyZSBhIFdURk1vdmUuCisgICAgICAg
IG1fdXJsLm1fc3RyaW5nID0gU3RyaW5nOjphZG9wdChtX2FzY2lpQnVmZmVyKTsKKyAgICB9IGVs
c2UgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1aWxkZXIucmVz
ZXJ2ZUNhcGFjaXR5KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZm
ZXIuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9hc2NpaUJ1ZmZlci5kYXRhKCks
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyW2ldKTsKKyAgICAgICAgbV91cmwubV9zdHJp
bmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQogICAgIG1fdXJsLm1faXNWYWxpZCA9IHRy
dWU7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBhcnNlZCBVUkwgPCVzPiIsIG1fdXJsLm1fc3RyaW5n
LnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBtX3VybDsKQEAgLTE1MDEsNDIgKzE1NDQsNTcg
QEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJMUGFyc2VyOjpwYXJz
ZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVyYXRvcikKIHsK
ICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJFbmQ7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyAr
K2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKSB7CiAgICAgICAgICAg
ICArK2l0ZXJhdG9yOwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIubGVu
Z3RoKCk7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUo
KTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgICAgICAgICBp
ZiAobV91cmwubV91c2VyRW5kID4gbV91cmwubV91c2VyU3RhcnQpCi0gICAgICAgICAgICAgICAg
ICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcpOworICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZCgnQCcpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAgbV9hc2NpaUJ1
ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IG1fYnVmZmVyLmFwcGVuZCgqaXRlcmF0b3IpOworICAgICAgICAvLyBGSVhNRTogUmlnaHQgbm93
LCB0aGVyZSBpcyBubyBjaGVjayB0byBzZWUgaWYgdGhpcyBpcyBBU0NJSS4KKyAgICAgICAgLy8g
V2UgbmVlZCB0byB1c2UgaXNJblVzZXJJbmZvRW5jb2RlU2V0IGFuZCB1dGY4IHBlcmNlbnQgZW5j
b2RlIG5vbi1BU0NJSSBjb2RlIHBvaW50cy4KKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Kml0ZXJhdG9yKTsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJh
dG9yKQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoKml0ZXJhdG9yKTsKLSAgICBtX3VybC5tX3Bh
c3N3b3JkRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBw
ZW5kKCppdGVyYXRvcik7CisgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fYXNjaWlCdWZmZXIu
c2l6ZSgpOwogICAgIGlmICghbV91cmwubV91c2VyRW5kKQogICAgICAgICBtX3VybC5tX3VzZXJF
bmQgPSBtX3VybC5tX3Bhc3N3b3JkRW5kOwotICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcpOworICAg
IG1fYXNjaWlCdWZmZXIuYXBwZW5kKCdAJyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQ
djQodWludDMyX3QgYWRkcmVzcywgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQordGVtcGxhdGU8dHlw
ZW5hbWUgVW5zaWduZWRJbnRlZ2VyVHlwZT4KK3ZvaWQgYXBwZW5kKFZlY3RvcjxMQ2hhcj4mIGRl
c3RpbmF0aW9uLCBVbnNpZ25lZEludGVnZXJUeXBlIG51bWJlcikKIHsKLSAgICBidWZmZXIuYXBw
ZW5kTnVtYmVyKGFkZHJlc3MgPj4gMjQpOworICAgIExDaGFyIGJ1ZltzaXplb2YoVW5zaWduZWRJ
bnRlZ2VyVHlwZSkgKiAzICsgMV07CisgICAgTENoYXIqIGVuZCA9IGJ1ZiArIFdURl9BUlJBWV9M
RU5HVEgoYnVmKTsKKyAgICBMQ2hhciogcCA9IGVuZDsKKyAgICBkbyB7CisgICAgICAgICotLXAg
PSAobnVtYmVyICUgMTApICsgJzAnOworICAgICAgICBudW1iZXIgLz0gMTA7CisgICAgfSB3aGls
ZSAobnVtYmVyKTsKKyAgICBkZXN0aW5hdGlvbi5hcHBlbmQocCwgZW5kIC0gcCk7Cit9CisKK3N0
YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjQodWludDMyX3QgYWRkcmVzcywgVmVjdG9yPExDaGFyPiYg
YnVmZmVyKQoreworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MgPj4gMjQpOwog
ICAgIGJ1ZmZlci5hcHBlbmQoJy4nKTsKLSAgICBidWZmZXIuYXBwZW5kTnVtYmVyKChhZGRyZXNz
ID4+IDE2KSAmIDB4RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIChhZGRyZXNzID4+
IDE2KSk7CiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIo
KGFkZHJlc3MgPj4gOCkgJiAweEZGKTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnVmZmVyLCAoYWRk
cmVzcyA+PiA4KSk7CiAgICAgYnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmRO
dW1iZXIoYWRkcmVzcyAmIDB4RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJl
c3MpOwogfQogICAgIAogc3RhdGljIHNpemVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3Rk
OjphcnJheTx1aW50MTZfdCwgOD4mIGFkZHJlc3MsIHNpemVfdCBiZWdpbikKQEAgLTE1NjYsNyAr
MTYyNCw3IEBAIHN0YXRpYyBPcHRpb25hbDxzaXplX3Q+IGZpbmRMb25nZXN0WmVyb1MKICAgICBy
ZXR1cm4gbG9uZ2VzdDsKIH0KICAgICAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1
aW50MTZfdCBwaWVjZSwgU3RyaW5nQnVpbGRlciYgYnVmZmVyKQorc3RhdGljIHZvaWQgc2VyaWFs
aXplSVB2NlBpZWNlKHVpbnQxNl90IHBpZWNlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAg
ICAgYm9vbCBwcmludGVkID0gZmFsc2U7CiAgICAgaWYgKGF1dG8gbmliYmxlMCA9IHBpZWNlID4+
IDEyKSB7CkBAIC0xNTg0LDcgKzE2NDIsNyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGll
Y2UodWludDE2X3QgCiAgICAgYnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVND
SUlIZXhEaWdpdChwaWVjZSAmIDB4RikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2
KHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikK
K3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVz
cywgVmVjdG9yPExDaGFyPiYgYnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKICAg
ICBhdXRvIGNvbXByZXNzUG9pbnRlciA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3Mp
OwpAQCAtMTU5NCw3ICsxNjUyLDcgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFy
cmF5PHVpbgogICAgICAgICAgICAgaWYgKHBpZWNlKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5h
cHBlbmQoJzonKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBw
ZW5kKCI6OiIpOworICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6IiwgMik7CiAgICAg
ICAgICAgICB3aGlsZSAocGllY2UgPCA4ICYmICFhZGRyZXNzW3BpZWNlXSkKICAgICAgICAgICAg
ICAgICBwaWVjZSsrOwogICAgICAgICAgICAgaWYgKHBpZWNlID09IDgpCkBAIC0xODc2LDEwICsx
OTM0LDEwIEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKIHsKICAg
ICB1aW50MzJfdCBwb3J0ID0gMDsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAg
ICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9w
b3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KLSAgICBtX2J1ZmZlci5hcHBlbmQoJzonKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgn
OicpOwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewogICAgICAg
ICBpZiAoaXNUYWJPck5ld2xpbmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpA
QCAtMTg5MCwxNCArMTk0OCwxNCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0KENvZGVQb2lu
dEl0ZXJhCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
LSAgICAKLSAgICBpZiAoaXNEZWZhdWx0UG9ydChidWZmZXJWaWV3KG1fYnVmZmVyLCAwLCBtX3Vy
bC5tX3NjaGVtZUVuZCksIHBvcnQpKSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZl
ci5sZW5ndGgoKSAtIDFdID09ICc6Jyk7Ci0gICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX2J1ZmZl
ci5sZW5ndGgoKSAtIDEpOworCisgICAgaWYgKGlzRGVmYXVsdFBvcnQoU3RyaW5nVmlldyhtX2Fz
Y2lpQnVmZmVyLmRhdGEoKSwgbV91cmwubV9zY2hlbWVFbmQpLCBwb3J0KSkgeworICAgICAgICBB
U1NFUlQobV9hc2NpaUJ1ZmZlci5sYXN0KCkgPT0gJzonKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5zaHJpbmsobV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxKTsKICAgICB9IGVsc2UKLSAgICAgICAg
bV9idWZmZXIuYXBwZW5kTnVtYmVyKHBvcnQpOworICAgICAgICBhcHBlbmQ8dWludDE2X3Q+KG1f
YXNjaWlCdWZmZXIsIHN0YXRpY19jYXN0PHVpbnQxNl90Pihwb3J0KSk7CiAKLSAgICBtX3VybC5t
X3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxMiwxNSArMTk3
MCwxNSBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAg
IHdoaWxlICghaXB2NkVuZC5hdEVuZCgpICYmICppcHY2RW5kICE9ICddJykKICAgICAgICAgICAg
ICsraXB2NkVuZDsKICAgICAgICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoQ29k
ZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oaXRlcmF0b3IsIGlwdjZFbmQpKSkgewotICAg
ICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAg
c2VyaWFsaXplSVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAg
ICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBp
ZiAoIWlwdjZFbmQuYXRFbmQoKSkgewogICAgICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAg
ICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSAmJiAqaXB2NkVuZCA9PSAnOicpIHsKICAg
ICAgICAgICAgICAgICAgICAgKytpcHY2RW5kOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
cGFyc2VQb3J0KGlwdjZFbmQpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBt
X3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTkz
OCwxMCArMTk5NiwxMCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJh
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChh
dXRvIGFkZHJlc3MgPSBwYXJzZUlQdjRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5
cGU+KGhvc3RJdGVyYXRvciwgaXRlcmF0b3IpKSkgewotICAgICAgICAgICAgc2VyaWFsaXplSVB2
NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVu
ZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNz
LnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkg
ewotICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwog
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
KytpdGVyYXRvcjsKQEAgLTE5NDksOSArMjAwNyw5IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhv
c3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0ZXJhdG9y
ICE9IGl0ZXJhdG9yOyArK2hvc3RJdGVyYXRvcikgewogICAgICAgICAgICAgaWYgKCFpc1RhYk9y
TmV3bGluZSgqaG9zdEl0ZXJhdG9yKSkKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
dG9BU0NJSUxvd2VyKCpob3N0SXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVm
ZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmhvc3RJdGVyYXRvcikpOwogICAgICAgICB9Ci0gICAg
ICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5t
X2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgaWYgKCFob3N0SXRlcmF0
b3IuYXRFbmQoKSkgewogICAgICAgICAgICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0gJzonKTsK
ICAgICAgICAgICAgICsraG9zdEl0ZXJhdG9yOwpAQCAtMTk1OSw3ICsyMDE3LDcgQEAgYm9vbCBV
UkxQYXJzZXI6OnBhcnNlSG9zdChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAgICAgICsraG9z
dEl0ZXJhdG9yOwogICAgICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0SXRlcmF0b3IpOwog
ICAgICAgICB9Ci0gICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xOTg4LDIwICsyMDQ2LDIwIEBAIGJvb2wgVVJMUGFy
c2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICBTdHJpbmcmIGFzY2lpRG9tYWluVmFs
dWUgPSBhc2NpaURvbWFpbi52YWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGFzY2lpRG9tYWlu
VmFsdWUuaXM4Qml0KCkpOwogICAgIGNvbnN0IExDaGFyKiBhc2NpaURvbWFpbkNoYXJhY3RlcnMg
PSBhc2NpaURvbWFpblZhbHVlLmNoYXJhY3RlcnM4KCk7Ci0gICAgCisKICAgICBpZiAoYXV0byBh
ZGRyZXNzID0gcGFyc2VJUHY0SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21h
aW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxl
bmd0aCgpKSkpIHsKLSAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVm
ZmVyKTsKLSAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAg
ICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAg
ICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmIChp
dGVyYXRvci5hdEVuZCgpKSB7Ci0gICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIu
c2l6ZSgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytp
dGVyYXRvcjsKICAgICAgICAgcmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQotICAg
IAotICAgIG1fYnVmZmVyLmFwcGVuZChhc2NpaURvbWFpbi52YWx1ZSgpKTsKLSAgICBtX3VybC5t
X2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5k
KGFzY2lpRG9tYWluQ2hhcmFjdGVycywgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7CisgICAg
bV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgaWYgKCFpdGVyYXRv
ci5hdEVuZCgpKSB7CiAgICAgICAgIEFTU0VSVCgqaXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAg
KytpdGVyYXRvcjsKQEAgLTIwMDksNyArMjA2Nyw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhv
c3QoQ29kZVBvaW50SXRlcmEKICAgICAgICAgICAgICsraXRlcmF0b3I7CiAgICAgICAgIHJldHVy
biBwYXJzZVBvcnQoaXRlcmF0b3IpOwogICAgIH0KLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMjA0Myw3ICsyMTAxLDcgQEAgYXV0byBVUkxQ
YXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZvcm0oU3RyaQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAK
LXN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQs
IFN0cmluZ0J1aWxkZXImIG91dHB1dCkKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRG
b3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFZlY3RvcjxMQ2hhcj4mIG91dHB1dCkKIHsKICAgICBh
dXRvIHV0ZjggPSBpbnB1dC51dGY4KFN0cmljdENvbnZlcnNpb24pOwogICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSB1dGY4LmRhdGEoKTsKQEAgLTIwNjYsNyArMjEyNCw3IEBAIHN0YXRpYyB2b2lkIHNl
cmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnMKICAgICAKIFN0cmluZyBVUkxQYXJzZXI6OnNlcmlh
bGl6ZShjb25zdCBVUkxFbmNvZGVkRm9ybSYgdHVwbGVzKQogewotICAgIFN0cmluZ0J1aWxkZXIg
b3V0cHV0OworICAgIFZlY3RvcjxMQ2hhcj4gb3V0cHV0OwogICAgIGZvciAoYXV0byYgdHVwbGUg
OiB0dXBsZXMpIHsKICAgICAgICAgaWYgKCFvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICAgICAg
b3V0cHV0LmFwcGVuZCgnJicpOwpAQCAtMjA3NCw3ICsyMTMyLDcgQEAgU3RyaW5nIFVSTFBhcnNl
cjo6c2VyaWFsaXplKGNvbnN0IFVSTEVuYwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc9Jyk7CiAg
ICAgICAgIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKHR1cGxlLnNlY29uZCwgb3V0cHV0KTsKICAg
ICB9Ci0gICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygpOworICAgIHJldHVybiBTdHJpbmc6OmFk
b3B0KG91dHB1dCk7CiB9CiAKIGJvb2wgVVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVhbChjb25zdCBV
UkwmIGEsIGNvbnN0IFVSTCYgYikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBh
cnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5o
CShyZXZpc2lvbiAyMDU5OTApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgVVJMIG1fdXJsOwotICAgIFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7CisgICAgVmVjdG9yPExD
aGFyPiBtX2FzY2lpQnVmZmVyOworICAgIFZlY3RvcjxVQ2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVu
dEJ1ZmZlcjsKICAgICBib29sIG1fdXJsSXNTcGVjaWFsIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJIHsgZmFsc2UgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289104</attachid>
            <date>2016-09-16 13:34:05 -0700</date>
            <delta_ts>2016-09-16 13:36:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160916133126.patch</filename>
            <type>text/plain</type>
            <size>44765</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdCdWZm
ZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAgIFdo
ZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBmb3Ig
dGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywgYW5k
IGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKyAgICAgICAgVGhpcyBpcyBh
IH4yMCUgc3BlZWR1cCBpbiB1cmwgcGFyc2luZy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpw
ZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjb3B5VVJMUGFy
dHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJz
ZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlh
bGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVS
TFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVuY29k
ZWRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1VS
TFBhcnNlci5oOgorCiAyMDE2LTA5LTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyIHNob3VsZCBwZXJjZW50IGVuY29kZSB0
aGUgdXNlciBhbmQgcGFzc3dvcmQgYWNjb3JkaW5nIHRvIHNwZWMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MDM2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDks
MTAgQEAgdGVtcGxhdGU8PgogYXV0byBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj46Om9wZXJhdG9y
KysoKSAtPiBDb2RlUG9pbnRJdGVyYXRvciYKIHsKICAgICBBU1NFUlQoIWF0RW5kKCkpOwotICAg
IGlmIChVMTZfSVNfTEVBRChtX2JlZ2luWzBdKSAmJiBtX2JlZ2luIDwgbV9lbmQgJiYgVTE2X0lT
X1RSQUlMKG1fYmVnaW5bMV0pKQotICAgICAgICBtX2JlZ2luICs9IDI7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JlZ2luKys7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9
IG1fZW5kIC0gbV9iZWdpbjsKKyAgICBVMTZfRldEXzEobV9iZWdpbiwgaSwgbGVuZ3RoKTsKKyAg
ICBtX2JlZ2luICs9IGk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MDUsMTEgKzQwNSwx
MSBAQCBzdGF0aWMgYm9vbCBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pCiAgICAgcmV0dXJu
ICppdGVyYXRvciA9PSAnOicgfHwgKml0ZXJhdG9yID09ICd8JzsKIH0KIAotc3RhdGljIGJvb2wg
aXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgc2l6ZV90
IGluZGV4KQorc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgVmVjdG9yPExD
aGFyPiYgYnVmZmVyLCBzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkg
PCBpbmRleCArIDIpCisgICAgaWYgKGJ1ZmZlci5zaXplKCkgPCBpbmRleCArIDIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1aWxkZXJbaW5kZXhdKSAm
JiAoYnVpbGRlcltpbmRleCArIDFdID09ICc6JyB8fCBidWlsZGVyW2luZGV4ICsgMV0gPT0gJ3wn
KTsKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1ZmZlcltpbmRleF0pICYmIChidWZmZXJbaW5k
ZXggKyAxXSA9PSAnOicgfHwgYnVmZmVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTQyOCwxNCArNDI4LDE0IEBAIHN0YXRpYyBi
b29sIHNob3VsZENvcHlGaWxlVVJMKENvZGVQb2ludEkKICAgICByZXR1cm4gIWlzU2xhc2hRdWVz
dGlvbk9ySGFzaCgqaXRlcmF0b3IpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVp
bnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRF
bmNvZGUodWludDhfdCBieXRlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7Ci0gICAgYnVpbGRl
ci5hcHBlbmQoJyUnKTsKLSAgICBidWlsZGVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhE
aWdpdChieXRlKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQoYnl0ZSkpOworICAgIGJ1ZmZlci5hcHBlbmQoJyUnKTsKKyAgICBidWZmZXIuYXBwZW5kKHVw
cGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKKyAgICBidWZmZXIuYXBwZW5kKGxvd2Vy
TmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNl
bnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGJvb2wo
KmlzSW5Db2RlU2V0KShVQ2hhcjMyKSkKK3N0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVD
aGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNv
ZGVTZXQpKFVDaGFyMzIpKQogewogICAgIGlmIChpc0luQ29kZVNldChjb2RlUG9pbnQpKSB7CiAg
ICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwpAQCAtNDQ0LDEyICs0NDQsMTQg
QEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjbwogICAgICAgICBVOF9B
UFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9MRU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOwog
ICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIGZvciAoaW50MzJfdCBpID0g
MDsgaSA8IG9mZnNldDsgKytpKQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0s
IGJ1aWxkZXIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlUG9pbnQp
OworICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0sIGRlc3RpbmF0aW9uKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlzQVNDSUkoY29kZVBvaW50
KSwgImlzSW5Db2RlU2V0IHNob3VsZCBhbHdheXMgcmV0dXJuIHRydWUgZm9yIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzIik7CisgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeShVQ2hhcjMyIGNvZGVQ
b2ludCwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5j
b2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQog
ewogICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwogICAgIGludDMyX3Qgb2Zmc2V0
ID0gMDsKQEAgLTQ2MCwxMyArNDYyLDEzIEBAIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2Rl
UXVlcnkoVUNoYXIKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewog
ICAgICAgICBhdXRvIGJ5dGUgPSBidWZmZXJbaV07CiAgICAgICAgIGlmIChzaG91bGRQZXJjZW50
RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBi
dWlsZGVyKTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGUoYnl0ZSwgZGVzdGluYXRpb24pOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChieXRlKTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKICAgICB9CiB9CiAgICAgCi1zdGF0aWMgdm9p
ZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdCdWlsZGVyJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXIm
IGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorc3RhdGljIHZvaWQg
ZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbGRlciYgc291cmNlLCBWZWN0b3I8TENoYXI+JiBk
ZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBGSVhN
RTogSXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFp
bHMuIFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCiAgICAgQ1N0
cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKHNvdXJjZS50b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKQEAgLTU5NSwxNSAr
NTk3LDYgQEAgc3RhdGljIGJvb2wgaXNTcGVjaWFsU2NoZW1lKFN0cmluZ1ZpZXcgcwogICAgIH0K
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBTdHJpbmdWaWV3IGJ1ZmZlclZpZXco
Y29uc3QgVCYgYnVmZmVyLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPj0gbGVuZ3RoKTsKLSAgICBpZiAoYnVmZmVyLmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhidWZmZXIuY2hhcmFjdGVyczgoKSArIHN0
YXJ0LCBsZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmdWaWV3KGJ1ZmZlci5jaGFyYWN0ZXJzMTYo
KSArIHN0YXJ0LCBsZW5ndGgpOwotfQotCiBlbnVtIGNsYXNzIFVSTFBhcnNlcjo6VVJMUGFydCB7
CiAgICAgU2NoZW1lRW5kLAogICAgIFVzZXJTdGFydCwKQEAgLTY0NCwxMSArNjM3LDQ3IEBAIHNp
emVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVudGlsUGFydChjb24KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KLSAgICAKKworc3RhdGljIHZvaWQgY29weUFTQ0lJ
U3RyaW5nVW50aWwoVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBzaXplX3QgbGVuZ3RoSWY4Qml0LCBzaXplX3QgbGVuZ3RoSWYxNkJpdCkKK3sKKyAgICBB
U1NFUlQoZGVzdGluYXRpb24uaXNFbXB0eSgpKTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aElmOEJpdCA8PSBzdHJpbmcubGVuZ3RoKCkp
OworICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0
aElmOEJpdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoSWYx
NkJpdCA8PSBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5yZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoSWYxNkJpdCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
c3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aElmMTZCaXQ7ICsraSkgeworICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07
CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0FTQ0lJKGMp
KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZChjKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwogdm9pZCBVUkxQYXJzZXI6OmNvcHlVUkxQYXJ0c1VudGlsKGNvbnN0IFVS
TCYgYmFzZSwgVVJMUGFydCBwYXJ0KQogewotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci0gICAgbV9i
dWZmZXIuYXBwZW5kKGJhc2UubV9zdHJpbmcuc3Vic3RyaW5nKDAsIHVybExlbmd0aFVudGlsUGFy
dChiYXNlLCBwYXJ0KSkpOworICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKKyAgICBtX3VuaWNv
ZGVGcmFnbWVudEJ1ZmZlci5jbGVhcigpOworICAgIGlmIChwYXJ0ID09IFVSTFBhcnQ6OkZyYWdt
ZW50RW5kKSB7CisgICAgICAgIGNvcHlBU0NJSVN0cmluZ1VudGlsKG1fYXNjaWlCdWZmZXIsIGJh
c2UubV9zdHJpbmcsIHVybExlbmd0aFVudGlsUGFydChiYXNlLCBVUkxQYXJ0OjpGcmFnbWVudEVu
ZCksIHVybExlbmd0aFVudGlsUGFydChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCkpOworICAgICAg
ICBpZiAoIWJhc2UubV9zdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZnJhZ21lbnQgPSBiYXNlLm1fc3RyaW5nOworICAgICAgICAgICAgYm9vbCBzZWVuVW5pY29k
ZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGJhc2UubV9xdWVyeUVuZDsg
aSA8IGJhc2UubV9mcmFnbWVudEVuZDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZWVu
VW5pY29kZSAmJiAhaXNBU0NJSShmcmFnbWVudFtpXSkpCisgICAgICAgICAgICAgICAgICAgIHNl
ZW5Vbmljb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc2VlblVuaWNvZGUpCisgICAg
ICAgICAgICAgICAgICAgIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnVuY2hlY2tlZEFwcGVuZChm
cmFnbWVudFtpXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZChmcmFnbWVudFtpXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gdXJsTGVu
Z3RoVW50aWxQYXJ0KGJhc2UsIHBhcnQpOworICAgICAgICBjb3B5QVNDSUlTdHJpbmdVbnRpbCht
X2FzY2lpQnVmZmVyLCBiYXNlLm1fc3RyaW5nLCBsZW5ndGgsIGxlbmd0aCk7CisgICAgfQogICAg
IHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgVVJMUGFydDo6RnJhZ21lbnRFbmQ6CiAgICAgICAg
IG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBiYXNlLm1fZnJhZ21lbnRFbmQ7CkBAIC02ODIsNyArNzEx
LDcgQEAgdm9pZCBVUkxQYXJzZXI6OmNvcHlVUkxQYXJ0c1VudGlsKGNvbnN0IAogICAgICAgICBt
X3VybC5tX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSBiYXNlLm1fcHJvdG9jb2xJc0luSFRUUEZh
bWlseTsKICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBiYXNlLm1fc2NoZW1lRW5kOwogICAg
IH0KLSAgICBtX3VybElzU3BlY2lhbCA9IGlzU3BlY2lhbFNjaGVtZShidWZmZXJWaWV3KG1fYnVm
ZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVuZCkpOworICAgIG1fdXJsSXNTcGVjaWFsID0gaXNTcGVj
aWFsU2NoZW1lKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCksIG1fdXJsLm1fc2NoZW1l
RW5kKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBkb3RBU0NJSUNvZGUgPSAiMmUiOwpAQCAt
ODAyLDEzICs4MzEsMTMgQEAgdm9pZCBVUkxQYXJzZXI6OnBvcFBhdGgoKQogewogICAgIGlmICht
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9ydEVuZCArIDEpIHsKICAgICAg
ICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKLSAgICAgICAgaWYgKG1fYnVmZmVyW21f
dXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSA9PSAnLycpCisgICAgICAgIGlmIChtX2FzY2lpQnVm
ZmVyW21fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSA9PSAnLycpCiAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaC0tOwotICAgICAgICB3aGlsZSAobV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRFbmQgJiYgbV9idWZmZXJbbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2hdICE9ICcvJykKKyAgICAgICAgd2hpbGUgKG1fdXJsLm1fcGF0aEFmdGVyTGFz
dFNsYXNoID4gbV91cmwubV9wb3J0RW5kICYmIG1fYXNjaWlCdWZmZXJbbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2hdICE9ICcvJykKICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNs
YXNoLS07CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoKys7CiAgICAgfQotICAg
IG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCk7CisgICAgbV9hc2Np
aUJ1ZmZlci5yZXNpemUobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtODQ0LDggKzg3Myw5IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKIHsKICAgICBMT0coVVJMUGFyc2VyLCAiUGFy
c2luZyBVUkwgPCVzPiBiYXNlIDwlcz4iLCBTdHJpbmcoaW5wdXQsIGxlbmd0aCkudXRmOCgpLmRh
dGEoKSwgYmFzZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IHsgfTsKLSAg
ICBtX2J1ZmZlci5jbGVhcigpOwotICAgIG1fYnVmZmVyLnJlc2VydmVDYXBhY2l0eShsZW5ndGgp
OworICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKKyAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZl
ci5jbGVhcigpOworICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAg
ICAgCiAgICAgYm9vbCBpc1VURjhFbmNvZGluZyA9IGVuY29kaW5nID09IFVURjhFbmNvZGluZygp
OwogICAgIFN0cmluZ0J1aWxkZXIgcXVlcnlCdWZmZXI7CkBAIC04ODEsNyArOTExLDcgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBGcmFnbWVudCwK
ICAgICB9OwogCi0jZGVmaW5lIExPR19TVEFURSh4KSBMT0coVVJMUGFyc2VyLCAiU3RhdGUgJXMs
IGNvZGUgcG9pbnQgJWMsIGJ1ZmZlciBsZW5ndGggJWQiLCB4LCAqYywgbV9idWZmZXIubGVuZ3Ro
KCkpCisjZGVmaW5lIExPR19TVEFURSh4KSBMT0coVVJMUGFyc2VyLCAiU3RhdGUgJXMsIGNvZGUg
cG9pbnQgJWMsIGFzY2lpQnVmZmVyIHNpemUgJXp1IiwgeCwgKmMsIG1fYXNjaWlCdWZmZXIuc2l6
ZSgpKQogI2RlZmluZSBMT0dfRklOQUxfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwgIkZpbmFsIFN0
YXRlOiAlcyIsIHgpCiAKICAgICBTdGF0ZSBzdGF0ZSA9IFN0YXRlOjpTY2hlbWVTdGFydDsKQEAg
LTg5NSw3ICs5MjUsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBl
CiAgICAgICAgIGNhc2UgU3RhdGU6OlNjaGVtZVN0YXJ0OgogICAgICAgICAgICAgTE9HX1NUQVRF
KCJTY2hlbWVTdGFydCIpOwogICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYSgqYykpIHsKLSAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKCpjKSk7CisgICAgICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKCpjKSk7
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNj
aGVtZTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtOTA0LDI5ICs5MzQsMjkgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpTY2hl
bWU6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZSIpOwogICAgICAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYW51bWVyaWMoKmMpIHx8ICpjID09ICcrJyB8fCAqYyA9PSAnLScgfHwgKmMgPT0g
Jy4nKQotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsK
KyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKCpjID09ICc6JykgewotICAgICAgICAgICAgICAgIG1fdXJs
Lm1fc2NoZW1lRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
VmlldyB1cmxTY2hlbWUgPSBidWZmZXJWaWV3KG1fYnVmZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVu
ZCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdWaWV3IHVybFNjaGVtZSA9IFN0cmluZ1ZpZXco
bV9hc2NpaUJ1ZmZlci5kYXRhKCksIG1fdXJsLm1fc2NoZW1lRW5kKTsKICAgICAgICAgICAgICAg
ICBtX3VybC5tX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSB1cmxTY2hlbWUgPT0gImh0dHAiIHx8
IHVybFNjaGVtZSA9PSAiaHR0cHMiOwogICAgICAgICAgICAgICAgIGlmICh1cmxTY2hlbWUgPT0g
ImZpbGUiKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsSXNTcGVjaWFsID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RmlsZTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fYnVmZmVy
LmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzU3BlY2lhbFNjaGVtZSh1cmxTY2hlbWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsSXNTcGVjaWFsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdW5uZWNlc3NhcmlseSBhbGxvY2F0aW5nIGEgU3RyaW5nLgog
ICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSBlYXN5IHRvIG9wdGltaXplIG9u
Y2UgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjAzNSBsYW5kcy4K
LSAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2UucHJvdG9jb2woKSA9PSB1cmxTY2hlbWUpCisg
ICAgICAgICAgICAgICAgICAgIGlmIChiYXNlLnByb3RvY29sSXMoKSA9PSB1cmxTY2hlbWUpCiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpTcGVjaWFsUmVsYXRpdmVPckF1
dGhvcml0eTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM7CiAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBt
X2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5k
ID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dv
cmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9o
b3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC05MzYsNyArOTY2LDcgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICB3aGls
ZSAoIW1heWJlU2xhc2guYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICArK21heWJlU2xhc2g7CiAgICAgICAgICAgICAgICAgICAg
IGlmICghbWF5YmVTbGFzaC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3VzZXJTdGFydCArIDE7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjID0gbWF5YmVTbGFzaDsKQEAgLTk1MCw3ICs5ODAsNyBA
QCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAg
ICAgKytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXNjaWlC
dWZmZXIuY2xlYXIoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsK
ICAgICAgICAgICAgICAgICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTk1OSw3ICs5ODksNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1Rh
Yk9yTmV3bGluZSgqYykpCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgaWYgKGMu
YXRFbmQoKSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6Ok5vU2NoZW1lOwogICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNw
YWNlOwogICAgICAgICAgICAgfQpAQCAtOTcxLDcgKzEwMDEsNyBAQCBVUkwgVVJMUGFyc2VyOjpw
YXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAoYmFzZS5tX2Nhbm5vdEJl
QUJhc2VVUkwgJiYgKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50
aWwoYmFzZSwgVVJMUGFydDo6UXVlcnlFbmQpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3Rh
dGU6OkZyYWdtZW50OwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycpOworICAg
ICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICAgICAg
KytjOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTgwLDIwICsx
MDEwLDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvcHlVUkxQYXJ0
c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoJzonKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAg
ICAgICAgICBzdGF0ZSA9IFN0YXRlOjpGaWxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgU3RhdGU6OlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgogICAgICAgICAgICAgTE9H
X1NUQVRFKCJTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpj
ID09ICcvJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAg
ICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgKytj
OwogICAgICAgICAgICAgICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpj
KSkKICAgICAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGlmIChjLmF0RW5k
KCkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwog
ICAgICAgICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9i
dWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBw
ZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRo
b3JpdHlJZ25vcmVTbGFzaGVzOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAg
ICAgICAgfQpAQCAtMTAwMyw4ICsxMDMzLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpQYXRoT3JBdXRob3JpdHk6CiAgICAg
ICAgICAgICBMT0dfU1RBVEUoIlBhdGhPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpj
ID09ICcvJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAg
ICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX3Vy
bC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0
YXRlID0gU3RhdGU6OkF1dGhvcml0eU9ySG9zdDsKICAgICAgICAgICAgICAgICArK2M7CiAgICAg
ICAgICAgICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwpAQCAtMTAyMSwxMyArMTA1MSwx
MyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAgICBjb3B5
VVJMUGFydHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJz8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVu
ZCgnPycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAg
ICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJyMn
OgogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1ZXJ5
RW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJyMnKTsKKyAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnIycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OkZyYWdtZW50OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBi
cmVhazsKQEAgLTEwNDIsMTggKzEwNzIsMTggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnXFwnKSB7
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGls
KGJhc2UsIFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBw
ZW5kKCI6Ly8iKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiOi8vIiwg
Myk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9y
ZVNsYXNoZXM7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvcHlVUkxQ
YXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICAgICAgICAgIG1fYnVm
ZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcv
Jyk7CiAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1f
cG9ydEVuZCArIDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpTcGVjaWFs
QXV0aG9yaXR5U2xhc2hlczoKICAgICAgICAgICAgIExPR19TVEFURSgiU3BlY2lhbEF1dGhvcml0
eVNsYXNoZXMiKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKKyAgICAgICAg
ICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCIvLyIsIDIpOwogICAgICAgICAgICAgaWYgKCpjID09
ICcvJyB8fCAqYyA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAg
ICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKQEAgLTEwNjYsMTAg
KzEwOTYsMTAgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAg
ICAgICBjYXNlIFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczoKICAgICAgICAg
ICAgIExPR19TVEFURSgiU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMiKTsKICAgICAgICAg
ICAgIGlmICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgIG1fYnVm
ZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcv
Jyk7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV91
cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fdXJsLm1f
dXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpBdXRob3JpdHlPckhvc3Q7CiAgICAgICAgICAgICBhdXRob3JpdHlPckhvc3RCZWdpbiA9
IGM7CiAgICAgICAgICAgICBicmVhazsKQEAgLTEwODgsMTMgKzExMTgsMTMgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBib29sIGlzU2xhc2ggPSAqYyA9PSAnLycgfHwgKG1fdXJsSXNTcGVjaWFsICYm
ICpjID09ICdcXCcpOwogICAgICAgICAgICAgICAgIGlmIChpc1NsYXNoIHx8ICpjID09ICc/JyB8
fCAqYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1f
YXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3Jk
RW5kID0gbV91cmwubV91c2VyRW5kOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9z
dChDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwg
YykpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0
aCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghaXNTbGFzaCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZTo6UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTIxLDE1ICsxMTUx
LDE1IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAg
ICAgIHN3aXRjaCAoKmMpIHsKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgY2Fz
ZSAnXFwnOgotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAg
ICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgc3RhdGUg
PSBTdGF0ZTo6RmlsZVNsYXNoOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIGlmICghYmFz
ZS5pc051bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgICAgICAgICAg
ICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UGF0aEVuZCk7Ci0gICAgICAgICAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKCIvLy8/Iik7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDI7CisgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoIi8vLz8iLCA0KTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJT
dGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMjsKICAgICAgICAgICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
c3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9o
b3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMTQyLDggKzExNzIsOCBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBjYXNlICcjJzoK
ICAgICAgICAgICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElzKCJm
aWxlIikpCiAgICAgICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBh
cnQ6OlF1ZXJ5RW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vLyMiKTsK
LSAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpIC0g
MjsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIyIsIDQpOworICAg
ICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAy
OwogICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0Owog
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsK
ICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAg
LTExNTgsOCArMTE4OCw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5
cGUKICAgICAgICAgICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElz
KCJmaWxlIikgJiYgc2hvdWxkQ29weUZpbGVVUkwoYykpCiAgICAgICAgICAgICAgICAgICAgIGNv
cHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBhdGhBZnRlckxhc3RTbGFzaCk7CiAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgi
Ly8vIik7Ci0gICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIu
bGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgi
Ly8vIiwgMyk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQg
PSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29y
ZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hv
c3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTExNzQsOCArMTIwNCw4IEBAIFVSTCBVUkxQ
YXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19TVEFURSgi
RmlsZVNsYXNoIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsK
ICAgICAgICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcv
Jyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgo
KTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAg
ICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAg
ICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE5MiwxNSAr
MTIyMiwxNSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAg
ICAgICAgICAgICAgICAgICAgICA/IGlzV2luZG93c0RyaXZlTGV0dGVyKENvZGVQb2ludEl0ZXJh
dG9yPExDaGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzOCgpLCBiYXNlUGF0aC5jaGFyYWN0ZXJzOCgp
ICsgYmFzZVBhdGgubGVuZ3RoKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1dpbmRv
d3NEcml2ZUxldHRlcihDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4oYmFzZVBhdGguY2hhcmFjdGVy
czE2KCksIGJhc2VQYXRoLmNoYXJhY3RlcnMxNigpICsgYmFzZVBhdGgubGVuZ3RoKCkpKTsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvd3NRdWlyaykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKGJhc2VQYXRoWzBdKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fYnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2FzY2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFswXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6
UGF0aDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0g
bV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQo
Ii8vIiwgMik7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIu
c2l6ZSgpIC0gMTsKICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0
YXJ0OwogICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0
OwogICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0x
MjExLDIzICsxMjQxLDIzIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5
cGUKICAgICAgICAgY2FzZSBTdGF0ZTo6RmlsZUhvc3Q6CiAgICAgICAgICAgICBMT0dfU1RBVEUo
IkZpbGVIb3N0Iik7CiAgICAgICAgICAgICBpZiAoaXNTbGFzaFF1ZXN0aW9uT3JIYXNoKCpjKSkg
ewotICAgICAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihtX2J1ZmZlciwgbV91
cmwubV9wb3J0RW5kICsgMSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVM
ZXR0ZXIobV9hc2NpaUJ1ZmZlciwgbV91cmwubV9wb3J0RW5kICsgMSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlPckhvc3RC
ZWdpbiA9PSBjKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZl
ci5sZW5ndGgoKSAtIDFdID09ICcvJyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2Fz
Y2lpQnVmZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKTsKICAgICAgICAgICAg
ICAgICAgICAgaWYgKCpjID09ICc/JykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZm
ZXIuYXBwZW5kKCIvPyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2ggPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLz8iLCAyKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAx
OwogICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRo
QWZ0ZXJMYXN0U2xhc2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpR
dWVyeTsKICAgICAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlm
ICgqYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgi
LyMiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNo
ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoIi8jIiwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNs
YXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1f
cGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6RnJhZ21lbnQ7CkBAIC0xMjQwLDkgKzEyNzAsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBv
aW50SXRlcmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1fdXJs
Lm1fcGFzc3dvcmRFbmQsIG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVuZCkg
PT0gImxvY2FsaG9zdCIpICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZSht
X3VybC5tX3Bhc3N3b3JkRW5kKTsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9h
c2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNp
emUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAg
ICAgICAgICAgICBtX2FzY2lpQnVmZmVyLnNocmluayhtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7
CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xMjYyLDM1ICsxMjkyLDM1
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2Fz
ZSBTdGF0ZTo6UGF0aDoKICAgICAgICAgICAgIExPR19TVEFURSgiUGF0aCIpOwogICAgICAgICAg
ICAgaWYgKCpjID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJykpIHsKLSAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAg
ICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91cmwubV9w
YXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAg
ICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAobV9idWZmZXIubGVuZ3RoKCkgJiYgbV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAx
XSA9PSAnLycpIHsKKyAgICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiBtX2Fz
Y2lpQnVmZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAg
ICAgICAgaWYgKGlzRG91YmxlRG90UGF0aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZURvdWJsZURvdFBhdGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBw
b3BQYXRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAn
LycgJiYgaXNTaW5nbGVEb3RQYXRoU2VnbWVudChjKSkgeworICAgICAgICAgICAgICAgIGlmICht
X2FzY2lpQnVmZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xl
RG90UGF0aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNpbmdsZURv
dFBhdGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAg
ICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAg
ICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAg
ICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAg
ICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
bV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAg
bV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0
ZSA9IFN0YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChpc1BlcmNlbnRFbmNvZGVkRG90KGMpKSB7Ci0gICAgICAgICAg
ICAgICAgbV9idWZmZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5hcHBlbmQoJy4nKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoKmMgPT0gJyUnKTsKICAgICAg
ICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCpjID09IGRvdEFTQ0lJQ29k
ZVswXSk7CkBAIC0xMjk5LDIwICsxMzI5LDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0
IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9i
dWZmZXIsIGlzSW5EZWZhdWx0RW5jb2RlU2V0KTsKKyAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5j
b2RlKCpjLCBtX2FzY2lpQnVmZmVyLCBpc0luRGVmYXVsdEVuY29kZVNldCk7CiAgICAgICAgICAg
ICArK2M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVB
QmFzZVVSTFBhdGg6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkNhbm5vdEJlQUJhc2VVUkxQYXRo
Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9w
YXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBT
dGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcjJykgewotICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAg
ICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJblNpbXBsZUVuY29k
ZVNldCk7CisgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlCdWZm
ZXIsIGlzSW5TaW1wbGVFbmNvZGVTZXQpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCwyMCArMTM1MCwyMyBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUo
IlF1ZXJ5Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCFpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVl
cnlCdWZmZXIsIG1fYnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9x
dWVyeUVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVR
dWVyeShxdWVyeUJ1ZmZlciwgbV9hc2NpaUJ1ZmZlciwgZW5jb2RpbmcpOworICAgICAgICAgICAg
ICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAg
ICAgICBzdGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAg
ICAgICB1dGY4UGVyY2VudEVuY29kZVF1ZXJ5KCpjLCBtX2J1ZmZlcik7CisgICAgICAgICAgICAg
ICAgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeSgqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgcXVlcnlCdWZmZXIuYXBwZW5kKCpjKTsKICAgICAgICAg
ICAgICsrYzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpGcmFnbWVu
dDoKICAgICAgICAgICAgIExPR19TVEFURSgiRnJhZ21lbnQiKTsKLSAgICAgICAgICAgIG1fYnVm
ZmVyLmFwcGVuZCgqYyk7CisgICAgICAgICAgICBpZiAobV91bmljb2RlRnJhZ21lbnRCdWZmZXIu
aXNFbXB0eSgpICYmIGlzQVNDSUkoKmMpKQorICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIu
YXBwZW5kKCpjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVG
cmFnbWVudEJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTEzNDIsNyArMTM3NSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBT
dGF0ZTo6U2NoZW1lU3RhcnQ6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3RhcnQi
KTsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci5sZW5ndGgoKSAmJiAhYmFzZS5pc051bGwoKSkKKyAg
ICAgICAgaWYgKCFtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAg
ICAgICAgIHJldHVybiBiYXNlOwogICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3Ro
KTsKICAgICBjYXNlIFN0YXRlOjpTY2hlbWU6CkBAIC0xMzY5LDcgKzE0MDIsNyBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgY2FzZSBTdGF0ZTo6UmVsYXRp
dmVTbGFzaDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJSZWxhdGl2ZVNsYXNoIik7CiAgICAg
ICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICBt
X2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsK
ICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVuZCArIDE7
CiAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwog
ICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBA
IC0xMzc3LDcgKzE0MTAsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJU
eXBlCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFz
aGVzOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7
Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAg
IG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJs
Lm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX3Bhc3N3b3Jk
RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJs
Lm1fdXNlclN0YXJ0OwpAQCAtMTM5Myw3ICsxNDI2LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2Uo
Y29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpBdXRo
b3JpdHlPckhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9yaXR5T3JIb3N0Iik7
Ci0gICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBt
X3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9w
YXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAg
Y2FzZSBTdGF0ZTo6SG9zdDoKQEAgLTE0MDEsNyArMTQzNCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19GSU5BTF9TVEFURSgiSG9z
dCIpOwogICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbikpCiAgICAg
ICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKLSAgICAgICAgbV9idWZmZXIu
YXBwZW5kKCcvJyk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAg
IG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcG9ydEVuZCArIDE7CiAgICAgICAgIG1fdXJsLm1f
cGF0aEFmdGVyTGFzdFNsYXNoID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5tX3F1
ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwpAQCAtMTQxMSwxMCArMTQ0NCwxMCBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIExPR19GSU5BTF9TVEFU
RSgiRmlsZSIpOwogICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbCgp
ID09ICJmaWxlIikgewogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFy
dDo6UXVlcnlFbmQpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICB9Ci0gICAgICAgIG1fYnVm
ZmVyLmFwcGVuZCgiLy8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIu
bGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIiwgMyk7Cisg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAg
ICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgbV91cmwu
bV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX2hvc3RF
bmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0MjYsOCArMTQ1OSw4IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBT
dGF0ZTo6RmlsZVNsYXNoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVTbGFzaCIpOwot
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0
ID0gbV9idWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgi
Ly8iLCAyKTsKKyAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUo
KSAtIDE7CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAg
ICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1f
dXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQ0MCw4ICsxNDczLDggQEAg
VVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgIGNhc2UgU3RhdGU6
OkZpbGVIb3N0OgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVIb3N0Iik7CiAgICAgICAg
IGlmIChhdXRob3JpdHlPckhvc3RCZWdpbiA9PSBjKSB7Ci0gICAgICAgICAgICBtX2J1ZmZlci5h
cHBlbmQoJy8nKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVu
Z3RoKCkgLSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAg
ICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAg
ICBtX3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICBt
X3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0NTUsMTMgKzE0ODgsMTMg
QEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogCiAgICAgICAgIGlm
ICghcGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9y
SG9zdEJlZ2luLCBjKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3Ro
KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChidWZmZXJWaWV3KG1fYnVmZmVyLCBtX3VybC5tX3Bh
c3N3b3JkRW5kLCBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJs
b2NhbGhvc3QiKSAgewotICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1fcGFzc3dv
cmRFbmQpOwotICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7
CisKKyAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5t
X3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQp
ID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV91
cmwubV9wYXNzd29yZEVuZCk7CisgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9z
dEVuZDsKICAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAg
bV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0
U2xhc2ggPSBtX3VybC5tX2hvc3RFbmQgKyAxOwogICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBt
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaDsKICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1f
dXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwpAQCAtMTQ3MiwzMCArMTUwNSw0MCBAQCBVUkwgVVJM
UGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKICAgICAgICAgTE9HX0ZJTkFM
X1NUQVRFKCJQYXRoIik7Ci0gICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0
aCgpOworICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAg
ICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgbV91cmwu
bV9mcmFnbWVudEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgi
Q2Fubm90QmVBQmFzZVVSTFBhdGgiKTsKLSAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZm
ZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6
ZSgpOwogICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAg
ICBtX3VybC5tX2ZyYWdtZW50RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFN0YXRlOjpRdWVyeToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJRdWVyeSIp
OwogICAgICAgICBpZiAoIWlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgZW5jb2RlUXVlcnko
cXVlcnlCdWZmZXIsIG1fYnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgIG1fdXJsLm1fcXVlcnlF
bmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVm
ZmVyLCBtX2FzY2lpQnVmZmVyLCBlbmNvZGluZyk7CisgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1f
dXJsLm1fcXVlcnlFbmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50
OgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZyYWdtZW50Iik7Ci0gICAgICAgIG1fdXJsLm1f
ZnJhZ21lbnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9mcmFnbWVu
dEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6
ZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3VybC5tX3N0cmluZyA9IG1fYnVm
ZmVyLnRvU3RyaW5nKCk7CisgICAgaWYgKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmlzRW1wdHko
KSkgeworICAgICAgICAvLyBGSVhNRTogU3RyaW5nOjphZG9wdCBzaG91bGQgcmVxdWlyZSBhIFdU
Rk1vdmUuCisgICAgICAgIG1fdXJsLm1fc3RyaW5nID0gU3RyaW5nOjphZG9wdChtX2FzY2lpQnVm
ZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
ICAgIGJ1aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmlj
b2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9hc2Np
aUJ1ZmZlci5kYXRhKCksIG1fYXNjaWlCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyW2ldKTsKKyAgICAg
ICAgbV91cmwubV9zdHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQogICAgIG1fdXJs
Lm1faXNWYWxpZCA9IHRydWU7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBhcnNlZCBVUkwgPCVzPiIs
IG1fdXJsLm1fc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBtX3VybDsKQEAgLTE1
MDUsNDIgKzE1NDgsNTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQg
VVJMUGFyc2VyOjpwYXJzZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBl
PiBpdGVyYXRvcikKIHsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3Vy
bC5tX3VzZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyRW5k
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBt
X3VybC5tX3VzZXJFbmQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVy
YXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzon
KSB7CiAgICAgICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5k
ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAg
ICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAg
ICAgICAgICAgICAgICBpZiAobV91cmwubV91c2VyRW5kID4gbV91cmwubV91c2VyU3RhcnQpCi0g
ICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcpOworICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnQCcpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAg
ICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCppdGVyYXRvciwgbV9idWZmZXIsIGlz
SW5Vc2VySW5mb0VuY29kZVNldCk7CisgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCppdGVyYXRv
ciwgbV9hc2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0KTsKICAgICB9CiAgICAgZm9y
ICg7ICFpdGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKQotICAgICAgICB1dGY4UGVyY2VudEVu
Y29kZSgqaXRlcmF0b3IsIG1fYnVmZmVyLCBpc0luVXNlckluZm9FbmNvZGVTZXQpOwotICAgIG1f
dXJsLm1fcGFzc3dvcmRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgdXRmOFBlcmNl
bnRFbmNvZGUoKml0ZXJhdG9yLCBtX2FzY2lpQnVmZmVyLCBpc0luVXNlckluZm9FbmNvZGVTZXQp
OworICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICBp
ZiAoIW1fdXJsLm1fdXNlckVuZCkKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV9w
YXNzd29yZEVuZDsKLSAgICBtX2J1ZmZlci5hcHBlbmQoJ0AnKTsKKyAgICBtX2FzY2lpQnVmZmVy
LmFwcGVuZCgnQCcpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY0KHVpbnQzMl90IGFk
ZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVk
SW50ZWdlclR5cGU+Cit2b2lkIGFwcGVuZChWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgVW5z
aWduZWRJbnRlZ2VyVHlwZSBudW1iZXIpCiB7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcihhZGRy
ZXNzID4+IDI0KTsKKyAgICBMQ2hhciBidWZbc2l6ZW9mKFVuc2lnbmVkSW50ZWdlclR5cGUpICog
MyArIDFdOworICAgIExDaGFyKiBlbmQgPSBidWYgKyBXVEZfQVJSQVlfTEVOR1RIKGJ1Zik7Cisg
ICAgTENoYXIqIHAgPSBlbmQ7CisgICAgZG8geworICAgICAgICAqLS1wID0gKG51bWJlciAlIDEw
KSArICcwJzsKKyAgICAgICAgbnVtYmVyIC89IDEwOworICAgIH0gd2hpbGUgKG51bWJlcik7Cisg
ICAgZGVzdGluYXRpb24uYXBwZW5kKHAsIGVuZCAtIHApOworfQorCitzdGF0aWMgdm9pZCBzZXJp
YWxpemVJUHY0KHVpbnQzMl90IGFkZHJlc3MsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAg
ICBhcHBlbmQ8dWludDhfdD4oYnVmZmVyLCBhZGRyZXNzID4+IDI0KTsKICAgICBidWZmZXIuYXBw
ZW5kKCcuJyk7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcigoYWRkcmVzcyA+PiAxNikgJiAweEZG
KTsKKyAgICBhcHBlbmQ8dWludDhfdD4oYnVmZmVyLCBhZGRyZXNzID4+IDE2KTsKICAgICBidWZm
ZXIuYXBwZW5kKCcuJyk7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcigoYWRkcmVzcyA+PiA4KSAm
IDB4RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MgPj4gOCk7CiAgICAg
YnVmZmVyLmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIoYWRkcmVzcyAmIDB4
RkYpOworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MpOwogfQogICAgIAogc3Rh
dGljIHNpemVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3RkOjphcnJheTx1aW50MTZfdCwg
OD4mIGFkZHJlc3MsIHNpemVfdCBiZWdpbikKQEAgLTE1NzAsNyArMTYyNiw3IEBAIHN0YXRpYyBP
cHRpb25hbDxzaXplX3Q+IGZpbmRMb25nZXN0WmVyb1MKICAgICByZXR1cm4gbG9uZ2VzdDsKIH0K
ICAgICAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1aW50MTZfdCBwaWVjZSwgU3Ry
aW5nQnVpbGRlciYgYnVmZmVyKQorc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NlBpZWNlKHVpbnQx
Nl90IHBpZWNlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAgICAgYm9vbCBwcmludGVkID0g
ZmFsc2U7CiAgICAgaWYgKGF1dG8gbmliYmxlMCA9IHBpZWNlID4+IDEyKSB7CkBAIC0xNTg4LDcg
KzE2NDQsNyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3QgCiAgICAg
YnVmZmVyLmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChwaWVjZSAm
IDB4RikpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2KHN0ZDo6YXJyYXk8dWludDE2
X3QsIDg+IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHNlcmlh
bGl6ZUlQdjYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9yPExDaGFyPiYg
YnVmZmVyKQogewogICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKICAgICBhdXRvIGNvbXByZXNzUG9p
bnRlciA9IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpOwpAQCAtMTU5OCw3ICsxNjU0
LDcgQEAgc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbgogICAgICAgICAg
ICAgaWYgKHBpZWNlKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCI6OiIpOworICAgICAg
ICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoIjo6IiwgMik7CiAgICAgICAgICAgICB3aGlsZSAocGll
Y2UgPCA4ICYmICFhZGRyZXNzW3BpZWNlXSkKICAgICAgICAgICAgICAgICBwaWVjZSsrOwogICAg
ICAgICAgICAgaWYgKHBpZWNlID09IDgpCkBAIC0xODgwLDEwICsxOTM2LDEwIEBAIGJvb2wgVVJM
UGFyc2VyOjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKIHsKICAgICB1aW50MzJfdCBwb3J0ID0g
MDsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3BvcnRFbmQg
PSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1
ZmZlci5zaXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBtX2J1ZmZlci5h
cHBlbmQoJzonKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgIGZvciAoOyAh
aXRlcmF0b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewogICAgICAgICBpZiAoaXNUYWJPck5ld2xp
bmUoKml0ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg5NCwxNCArMTk1MCwx
NCBAQCBib29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNE
ZWZhdWx0UG9ydChidWZmZXJWaWV3KG1fYnVmZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVuZCksIHBv
cnQpKSB7Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09
ICc6Jyk7Ci0gICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX2J1ZmZlci5sZW5ndGgoKSAtIDEpOwor
CisgICAgaWYgKGlzRGVmYXVsdFBvcnQoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSwg
bV91cmwubV9zY2hlbWVFbmQpLCBwb3J0KSkgeworICAgICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZl
ci5sYXN0KCkgPT0gJzonKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV9hc2NpaUJ1
ZmZlci5zaXplKCkgLSAxKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9idWZmZXIuYXBwZW5kTnVt
YmVyKHBvcnQpOworICAgICAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYXNjaWlCdWZmZXIsIHN0YXRp
Y19jYXN0PHVpbnQxNl90Pihwb3J0KSk7CiAKLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxNiwxNSArMTk3MiwxNSBAQCBib29sIFVSTFBh
cnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgIHdoaWxlICghaXB2NkVuZC5h
dEVuZCgpICYmICppcHY2RW5kICE9ICddJykKICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAg
ICAgaWYgKGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hh
cmFjdGVyVHlwZT4oaXRlcmF0b3IsIGlwdjZFbmQpKSkgewotICAgICAgICAgICAgc2VyaWFsaXpl
SVB2NihhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9z
dEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRy
ZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQo
KSkgewogICAgICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAgICAgICAgICAgICBpZiAoIWlw
djZFbmQuYXRFbmQoKSAmJiAqaXB2NkVuZCA9PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAg
KytpcHY2RW5kOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQp
OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk0MiwxMCArMTk5OCwxMCBAQCBi
b29sIFVSTFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJz
ZUlQdjRIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGhvc3RJdGVyYXRvciwg
aXRlcmF0b3IpKSkgewotICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCks
IG1fYnVmZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0
aCgpOworICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlC
dWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXpl
KCk7CiAgICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICAgICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1f
dXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKytpdGVyYXRvcjsKQEAgLTE5
NTMsOSArMjAwOSw5IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEK
ICAgICAgICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0ZXJhdG9yICE9IGl0ZXJhdG9yOyArK2hv
c3RJdGVyYXRvcikgewogICAgICAgICAgICAgaWYgKCFpc1RhYk9yTmV3bGluZSgqaG9zdEl0ZXJh
dG9yKSkKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKCpob3N0
SXRlcmF0b3IpKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCh0b0FTQ0lJ
TG93ZXIoKmhvc3RJdGVyYXRvcikpOwogICAgICAgICB9Ci0gICAgICAgIG1fdXJsLm1faG9zdEVu
ZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgaWYgKCFob3N0SXRlcmF0b3IuYXRFbmQoKSkgewogICAg
ICAgICAgICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgICAgICsraG9z
dEl0ZXJhdG9yOwpAQCAtMTk2Myw3ICsyMDE5LDcgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9z
dChDb2RlUG9pbnRJdGVyYQogICAgICAgICAgICAgICAgICsraG9zdEl0ZXJhdG9yOwogICAgICAg
ICAgICAgcmV0dXJuIHBhcnNlUG9ydChob3N0SXRlcmF0b3IpOwogICAgICAgICB9Ci0gICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX3Bv
cnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkBAIC0xOTkyLDIwICsyMDQ4LDIwIEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29k
ZVBvaW50SXRlcmEKICAgICBTdHJpbmcmIGFzY2lpRG9tYWluVmFsdWUgPSBhc2NpaURvbWFpbi52
YWx1ZSgpOwogICAgIFJFTEVBU0VfQVNTRVJUKGFzY2lpRG9tYWluVmFsdWUuaXM4Qml0KCkpOwog
ICAgIGNvbnN0IExDaGFyKiBhc2NpaURvbWFpbkNoYXJhY3RlcnMgPSBhc2NpaURvbWFpblZhbHVl
LmNoYXJhY3RlcnM4KCk7Ci0gICAgCisKICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0
SG9zdChDb2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2Np
aURvbWFpbkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKSkpIHsKLSAgICAg
ICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgbV91
cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIHNlcmlhbGl6ZUlQdjQo
YWRkcmVzcy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7
Ci0gICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAg
ICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyYXRvcjsKICAgICAgICAg
cmV0dXJuIHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQotICAgIAotICAgIG1fYnVmZmVyLmFw
cGVuZChhc2NpaURvbWFpbi52YWx1ZSgpKTsKLSAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKGFzY2lpRG9tYWluQ2hhcmFj
dGVycywgYXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7CisgICAgbV91cmwubV9ob3N0RW5kID0g
bV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgaWYgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAg
ICAgIEFTU0VSVCgqaXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgKytpdGVyYXRvcjsKQEAgLTIw
MTMsNyArMjA2OSw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEK
ICAgICAgICAgICAgICsraXRlcmF0b3I7CiAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0
b3IpOwogICAgIH0KLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAg
ICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMjA0Nyw3ICsyMTAzLDcgQEAgYXV0byBVUkxQYXJzZXI6OnBhcnNlVVJMRW5j
b2RlZEZvcm0oU3RyaQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlh
bGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFN0cmluZ0J1aWxkZXImIG91
dHB1dCkKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYg
aW5wdXQsIFZlY3RvcjxMQ2hhcj4mIG91dHB1dCkKIHsKICAgICBhdXRvIHV0ZjggPSBpbnB1dC51
dGY4KFN0cmljdENvbnZlcnNpb24pOwogICAgIGNvbnN0IGNoYXIqIGRhdGEgPSB1dGY4LmRhdGEo
KTsKQEAgLTIwNzAsNyArMjEyNiw3IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRG
b3JtKGNvbnMKICAgICAKIFN0cmluZyBVUkxQYXJzZXI6OnNlcmlhbGl6ZShjb25zdCBVUkxFbmNv
ZGVkRm9ybSYgdHVwbGVzKQogewotICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OworICAgIFZlY3Rv
cjxMQ2hhcj4gb3V0cHV0OwogICAgIGZvciAoYXV0byYgdHVwbGUgOiB0dXBsZXMpIHsKICAgICAg
ICAgaWYgKCFvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJicp
OwpAQCAtMjA3OCw3ICsyMTM0LDcgQEAgU3RyaW5nIFVSTFBhcnNlcjo6c2VyaWFsaXplKGNvbnN0
IFVSTEVuYwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc9Jyk7CiAgICAgICAgIHNlcmlhbGl6ZVVS
TEVuY29kZWRGb3JtKHR1cGxlLnNlY29uZCwgb3V0cHV0KTsKICAgICB9Ci0gICAgcmV0dXJuIG91
dHB1dC50b1N0cmluZygpOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CiB9CiAK
IGJvb2wgVVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVhbChjb25zdCBVUkwmIGEsIGNvbnN0IFVSTCYg
YikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDYwMzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNDgsNyArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVVJMIG1fdXJsOwotICAg
IFN0cmluZ0J1aWxkZXIgbV9idWZmZXI7CisgICAgVmVjdG9yPExDaGFyPiBtX2FzY2lpQnVmZmVy
OworICAgIFZlY3RvcjxVQ2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcjsKICAgICBib29s
IG1fdXJsSXNTcGVjaWFsIHsgZmFsc2UgfTsKICAgICBib29sIG1faG9zdEhhc1BlcmNlbnRPck5v
bkFTQ0lJIHsgZmFsc2UgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>289105</attachid>
            <date>2016-09-16 13:36:39 -0700</date>
            <delta_ts>2016-09-16 13:36:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-162035-20160916133359.patch</filename>
            <type>text/plain</type>
            <size>44531</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE2LTA5LTE2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgVXNlIFZlY3Rv
cjxMQ2hhcj4gaW5zdGVhZCBvZiBTdHJpbmdCdWlsZGVyIGZvciB0aGUgQVNDSUkgcGFydHMgb2Yg
VVJMUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNjIwMzUKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAgICBT
dHJpbmdCdWlsZGVyOjphcHBlbmQgY2hlY2tzIHRvIHNlZSB3aGV0aGVyIGl0cyBTdHJpbmdCdWZm
ZXIgaXMgOC1iaXQgb3IgMTYtYml0IGVhY2ggdGltZSBpdCBpcyBjYWxsZWQuCisgICAgICAgIFdo
ZW4gcGFyc2luZyBVUkxzLCBhbG1vc3QgYWxsIG9mIHRoZSBwYXJzZWQgVVJMIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgOC1iaXQgQVNDSUkuCisgICAgICAgIFVzaW5nIGEgVmVjdG9yPExDaGFyPiBmb3Ig
dGhpcyBhbGxvd3MgdXMgdG8gdXNlIHVuY2hlY2tlZEFwcGVuZCBpbiBzb21lIHBsYWNlcywgYW5k
IGl0IGFsd2F5cyBlbGltaW5hdGVzIHRoZSA4LWJpdCBjaGVjay4KKyAgICAgICAgVGhpcyBpcyBh
IH4yMCUgc3BlZWR1cCBpbiB1cmwgcGFyc2luZy4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0
aW5nIEFQSSB0ZXN0cy4KKworICAgICAgICAqIHBsYXRmb3JtL1VSTFBhcnNlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjppc1dpbmRvd3NEcml2ZUxldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpw
ZXJjZW50RW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnV0ZjhQZXJjZW50RW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5jb2RlUXVlcnkpOgorICAgICAgICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpjb3B5VVJMUGFy
dHNVbnRpbCk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJzZXI6OnBvcFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6VVJMUGFyc2VyOjpwYXJzZSk6CisgICAgICAgIChXZWJDb3JlOjpVUkxQYXJz
ZXI6OnBhcnNlQXV0aG9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmFwcGVuZE51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlh
bGl6ZUlQdjZQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXJpYWxpemVJUHY2KToKKyAgICAg
ICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6cGFyc2VQb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OlVS
TFBhcnNlcjo6cGFyc2VIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OnNlcmlhbGl6ZVVSTEVuY29k
ZWRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OlVSTFBhcnNlcjo6c2VyaWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OmJ1ZmZlclZpZXcpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL1VS
TFBhcnNlci5oOgorCiAyMDE2LTA5LTE2ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2Vu
QHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyIHNob3VsZCBwZXJjZW50IGVuY29kZSB0
aGUgdXNlciBhbmQgcGFzc3dvcmQgYWNjb3JkaW5nIHRvIHNwZWMKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1VSTFBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkocmV2aXNpb24gMjA2MDM2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vVVJMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDks
MTAgQEAgdGVtcGxhdGU8PgogYXV0byBDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj46Om9wZXJhdG9y
KysoKSAtPiBDb2RlUG9pbnRJdGVyYXRvciYKIHsKICAgICBBU1NFUlQoIWF0RW5kKCkpOwotICAg
IGlmIChVMTZfSVNfTEVBRChtX2JlZ2luWzBdKSAmJiBtX2JlZ2luIDwgbV9lbmQgJiYgVTE2X0lT
X1RSQUlMKG1fYmVnaW5bMV0pKQotICAgICAgICBtX2JlZ2luICs9IDI7Ci0gICAgZWxzZQotICAg
ICAgICBtX2JlZ2luKys7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgc2l6ZV90IGxlbmd0aCA9
IG1fZW5kIC0gbV9iZWdpbjsKKyAgICBVMTZfRldEXzEobV9iZWdpbiwgaSwgbGVuZ3RoKTsKKyAg
ICBtX2JlZ2luICs9IGk7CiAgICAgcmV0dXJuICp0aGlzOwogfQogCkBAIC00MDUsMTEgKzQwNSwx
MSBAQCBzdGF0aWMgYm9vbCBpc1dpbmRvd3NEcml2ZUxldHRlcihDb2RlUG9pCiAgICAgcmV0dXJu
ICppdGVyYXRvciA9PSAnOicgfHwgKml0ZXJhdG9yID09ICd8JzsKIH0KIAotc3RhdGljIGJvb2wg
aXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgc2l6ZV90
IGluZGV4KQorc3RhdGljIGJvb2wgaXNXaW5kb3dzRHJpdmVMZXR0ZXIoY29uc3QgVmVjdG9yPExD
aGFyPiYgYnVmZmVyLCBzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKGJ1aWxkZXIubGVuZ3RoKCkg
PCBpbmRleCArIDIpCisgICAgaWYgKGJ1ZmZlci5zaXplKCkgPCBpbmRleCArIDIpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1aWxkZXJbaW5kZXhdKSAm
JiAoYnVpbGRlcltpbmRleCArIDFdID09ICc6JyB8fCBidWlsZGVyW2luZGV4ICsgMV0gPT0gJ3wn
KTsKKyAgICByZXR1cm4gaXNBU0NJSUFscGhhKGJ1ZmZlcltpbmRleF0pICYmIChidWZmZXJbaW5k
ZXggKyAxXSA9PSAnOicgfHwgYnVmZmVyW2luZGV4ICsgMV0gPT0gJ3wnKTsKIH0KIAogdGVtcGxh
dGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KQEAgLTQyOCwxNCArNDI4LDE0IEBAIHN0YXRpYyBi
b29sIHNob3VsZENvcHlGaWxlVVJMKENvZGVQb2ludEkKICAgICByZXR1cm4gIWlzU2xhc2hRdWVz
dGlvbk9ySGFzaCgqaXRlcmF0b3IpOwogfQogCi1zdGF0aWMgdm9pZCBwZXJjZW50RW5jb2RlKHVp
bnQ4X3QgYnl0ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0YXRpYyB2b2lkIHBlcmNlbnRF
bmNvZGUodWludDhfdCBieXRlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7Ci0gICAgYnVpbGRl
ci5hcHBlbmQoJyUnKTsKLSAgICBidWlsZGVyLmFwcGVuZCh1cHBlck5pYmJsZVRvQVNDSUlIZXhE
aWdpdChieXRlKSk7Ci0gICAgYnVpbGRlci5hcHBlbmQobG93ZXJOaWJibGVUb0FTQ0lJSGV4RGln
aXQoYnl0ZSkpOworICAgIGJ1ZmZlci5hcHBlbmQoJyUnKTsKKyAgICBidWZmZXIuYXBwZW5kKHVw
cGVyTmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKKyAgICBidWZmZXIuYXBwZW5kKGxvd2Vy
TmliYmxlVG9BU0NJSUhleERpZ2l0KGJ5dGUpKTsKIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNl
bnRFbmNvZGUoVUNoYXIzMiBjb2RlUG9pbnQsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIGJvb2wo
KmlzSW5Db2RlU2V0KShVQ2hhcjMyKSkKK3N0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2RlKFVD
aGFyMzIgY29kZVBvaW50LCBWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgYm9vbCgqaXNJbkNv
ZGVTZXQpKFVDaGFyMzIpKQogewogICAgIGlmIChpc0luQ29kZVNldChjb2RlUG9pbnQpKSB7CiAg
ICAgICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwpAQCAtNDQ0LDEyICs0NDQsMTQg
QEAgc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGUoVUNoYXIzMiBjbwogICAgICAgICBVOF9B
UFBFTkQoYnVmZmVyLCBvZmZzZXQsIFU4X01BWF9MRU5HVEgsIGNvZGVQb2ludCwgZXJyb3IpOwog
ICAgICAgICAvLyBGSVhNRTogQ2hlY2sgZXJyb3IuCiAgICAgICAgIGZvciAoaW50MzJfdCBpID0g
MDsgaSA8IG9mZnNldDsgKytpKQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0s
IGJ1aWxkZXIpOwotICAgIH0gZWxzZQotICAgICAgICBidWlsZGVyLmFwcGVuZChjb2RlUG9pbnQp
OworICAgICAgICAgICAgcGVyY2VudEVuY29kZShidWZmZXJbaV0sIGRlc3RpbmF0aW9uKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGlzQVNDSUkoY29kZVBvaW50
KSwgImlzSW5Db2RlU2V0IHNob3VsZCBhbHdheXMgcmV0dXJuIHRydWUgZm9yIG5vbi1BU0NJSSBj
aGFyYWN0ZXJzIik7CisgICAgICAgIGRlc3RpbmF0aW9uLmFwcGVuZChjb2RlUG9pbnQpOworICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgdXRmOFBlcmNlbnRFbmNvZGVRdWVyeShVQ2hhcjMyIGNvZGVQ
b2ludCwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3N0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5j
b2RlUXVlcnkoVUNoYXIzMiBjb2RlUG9pbnQsIFZlY3RvcjxMQ2hhcj4mIGRlc3RpbmF0aW9uKQog
ewogICAgIHVpbnQ4X3QgYnVmZmVyW1U4X01BWF9MRU5HVEhdOwogICAgIGludDMyX3Qgb2Zmc2V0
ID0gMDsKQEAgLTQ2MCwxMyArNDYyLDEzIEBAIHN0YXRpYyB2b2lkIHV0ZjhQZXJjZW50RW5jb2Rl
UXVlcnkoVUNoYXIKICAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBvZmZzZXQ7ICsraSkgewog
ICAgICAgICBhdXRvIGJ5dGUgPSBidWZmZXJbaV07CiAgICAgICAgIGlmIChzaG91bGRQZXJjZW50
RW5jb2RlUXVlcnlCeXRlKGJ5dGUpKQotICAgICAgICAgICAgcGVyY2VudEVuY29kZShieXRlLCBi
dWlsZGVyKTsKKyAgICAgICAgICAgIHBlcmNlbnRFbmNvZGUoYnl0ZSwgZGVzdGluYXRpb24pOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChieXRlKTsKKyAgICAgICAg
ICAgIGRlc3RpbmF0aW9uLmFwcGVuZChieXRlKTsKICAgICB9CiB9CiAgICAgCi1zdGF0aWMgdm9p
ZCBlbmNvZGVRdWVyeShjb25zdCBTdHJpbmdCdWlsZGVyJiBzb3VyY2UsIFN0cmluZ0J1aWxkZXIm
IGRlc3RpbmF0aW9uLCBjb25zdCBUZXh0RW5jb2RpbmcmIGVuY29kaW5nKQorc3RhdGljIHZvaWQg
ZW5jb2RlUXVlcnkoY29uc3QgU3RyaW5nQnVpbGRlciYgc291cmNlLCBWZWN0b3I8TENoYXI+JiBk
ZXN0aW5hdGlvbiwgY29uc3QgVGV4dEVuY29kaW5nJiBlbmNvZGluZykKIHsKICAgICAvLyBGSVhN
RTogSXQgaXMgdW5jbGVhciBpbiB0aGUgc3BlYyB3aGF0IHRvIGRvIHdoZW4gZW5jb2RpbmcgZmFp
bHMuIFRoZSBiZWhhdmlvciBzaG91bGQgYmUgc3BlY2lmaWVkIGFuZCB0ZXN0ZWQuCiAgICAgQ1N0
cmluZyBlbmNvZGVkID0gZW5jb2RpbmcuZW5jb2RlKHNvdXJjZS50b1N0cmluZ1ByZXNlcnZlQ2Fw
YWNpdHkoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKTsKQEAgLTU5NSwxNSAr
NTk3LDYgQEAgc3RhdGljIGJvb2wgaXNTcGVjaWFsU2NoZW1lKFN0cmluZ1ZpZXcgcwogICAgIH0K
IH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLXN0YXRpYyBTdHJpbmdWaWV3IGJ1ZmZlclZpZXco
Y29uc3QgVCYgYnVmZmVyLCB1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAg
IEFTU0VSVChidWZmZXIubGVuZ3RoKCkgPj0gbGVuZ3RoKTsKLSAgICBpZiAoYnVmZmVyLmlzOEJp
dCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nVmlldyhidWZmZXIuY2hhcmFjdGVyczgoKSArIHN0
YXJ0LCBsZW5ndGgpOwotICAgIHJldHVybiBTdHJpbmdWaWV3KGJ1ZmZlci5jaGFyYWN0ZXJzMTYo
KSArIHN0YXJ0LCBsZW5ndGgpOwotfQotCiBlbnVtIGNsYXNzIFVSTFBhcnNlcjo6VVJMUGFydCB7
CiAgICAgU2NoZW1lRW5kLAogICAgIFVzZXJTdGFydCwKQEAgLTY0NCwxMSArNjM3LDQ3IEBAIHNp
emVfdCBVUkxQYXJzZXI6OnVybExlbmd0aFVudGlsUGFydChjb24KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gMDsKIH0KLSAgICAKKworc3RhdGljIHZvaWQgY29weUFTQ0lJ
U3RyaW5nVW50aWwoVmVjdG9yPExDaGFyPiYgZGVzdGluYXRpb24sIGNvbnN0IFN0cmluZyYgc3Ry
aW5nLCBzaXplX3QgbGVuZ3RoSWY4Qml0LCBzaXplX3QgbGVuZ3RoSWYxNkJpdCkKK3sKKyAgICBB
U1NFUlQoZGVzdGluYXRpb24uaXNFbXB0eSgpKTsKKyAgICBpZiAoc3RyaW5nLmlzOEJpdCgpKSB7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxlbmd0aElmOEJpdCA8PSBzdHJpbmcubGVuZ3RoKCkp
OworICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQoc3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0
aElmOEJpdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobGVuZ3RoSWYx
NkJpdCA8PSBzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICBkZXN0aW5hdGlvbi5yZXNlcnZlQ2Fw
YWNpdHkobGVuZ3RoSWYxNkJpdCk7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
c3RyaW5nLmNoYXJhY3RlcnMxNigpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxl
bmd0aElmMTZCaXQ7ICsraSkgeworICAgICAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07
CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpc0FTQ0lJKGMp
KTsKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLnVuY2hlY2tlZEFwcGVuZChjKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwogdm9pZCBVUkxQYXJzZXI6OmNvcHlVUkxQYXJ0c1VudGlsKGNvbnN0IFVS
TCYgYmFzZSwgVVJMUGFydCBwYXJ0KQogewotICAgIG1fYnVmZmVyLmNsZWFyKCk7Ci0gICAgbV9i
dWZmZXIuYXBwZW5kKGJhc2UubV9zdHJpbmcuc3Vic3RyaW5nKDAsIHVybExlbmd0aFVudGlsUGFy
dChiYXNlLCBwYXJ0KSkpOworICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKKyAgICBtX3VuaWNv
ZGVGcmFnbWVudEJ1ZmZlci5jbGVhcigpOworICAgIGlmIChwYXJ0ID09IFVSTFBhcnQ6OkZyYWdt
ZW50RW5kKSB7CisgICAgICAgIGNvcHlBU0NJSVN0cmluZ1VudGlsKG1fYXNjaWlCdWZmZXIsIGJh
c2UubV9zdHJpbmcsIHVybExlbmd0aFVudGlsUGFydChiYXNlLCBVUkxQYXJ0OjpGcmFnbWVudEVu
ZCksIHVybExlbmd0aFVudGlsUGFydChiYXNlLCBVUkxQYXJ0OjpRdWVyeUVuZCkpOworICAgICAg
ICBpZiAoIWJhc2UubV9zdHJpbmcuaXM4Qml0KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgZnJhZ21lbnQgPSBiYXNlLm1fc3RyaW5nOworICAgICAgICAgICAgYm9vbCBzZWVuVW5pY29k
ZSA9IGZhbHNlOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IGJhc2UubV9xdWVyeUVuZDsg
aSA8IGJhc2UubV9mcmFnbWVudEVuZDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzZWVu
VW5pY29kZSAmJiAhaXNBU0NJSShmcmFnbWVudFtpXSkpCisgICAgICAgICAgICAgICAgICAgIHNl
ZW5Vbmljb2RlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoc2VlblVuaWNvZGUpCisgICAg
ICAgICAgICAgICAgICAgIG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLnVuY2hlY2tlZEFwcGVuZChm
cmFnbWVudFtpXSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLnVuY2hlY2tlZEFwcGVuZChmcmFnbWVudFtpXSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBzaXplX3QgbGVuZ3RoID0gdXJsTGVu
Z3RoVW50aWxQYXJ0KGJhc2UsIHBhcnQpOworICAgICAgICBjb3B5QVNDSUlTdHJpbmdVbnRpbCht
X2FzY2lpQnVmZmVyLCBiYXNlLm1fc3RyaW5nLCBsZW5ndGgsIGxlbmd0aCk7CisgICAgfQogICAg
IHN3aXRjaCAocGFydCkgewogICAgIGNhc2UgVVJMUGFydDo6RnJhZ21lbnRFbmQ6CiAgICAgICAg
IG1fdXJsLm1fZnJhZ21lbnRFbmQgPSBiYXNlLm1fZnJhZ21lbnRFbmQ7CkBAIC02ODIsNyArNzEx
LDcgQEAgdm9pZCBVUkxQYXJzZXI6OmNvcHlVUkxQYXJ0c1VudGlsKGNvbnN0IAogICAgICAgICBt
X3VybC5tX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSBiYXNlLm1fcHJvdG9jb2xJc0luSFRUUEZh
bWlseTsKICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBiYXNlLm1fc2NoZW1lRW5kOwogICAg
IH0KLSAgICBtX3VybElzU3BlY2lhbCA9IGlzU3BlY2lhbFNjaGVtZShidWZmZXJWaWV3KG1fYnVm
ZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVuZCkpOworICAgIG1fdXJsSXNTcGVjaWFsID0gaXNTcGVj
aWFsU2NoZW1lKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCksIG1fdXJsLm1fc2NoZW1l
RW5kKSk7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyKiBkb3RBU0NJSUNvZGUgPSAiMmUiOwpAQCAt
ODAyLDEzICs4MzEsMTMgQEAgdm9pZCBVUkxQYXJzZXI6OnBvcFBhdGgoKQogewogICAgIGlmICht
X3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCA+IG1fdXJsLm1fcG9ydEVuZCArIDEpIHsKICAgICAg
ICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gtLTsKLSAgICAgICAgaWYgKG1fYnVmZmVyW21f
dXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSA9PSAnLycpCisgICAgICAgIGlmIChtX2FzY2lpQnVm
ZmVyW21fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoXSA9PSAnLycpCiAgICAgICAgICAgICBtX3Vy
bC5tX3BhdGhBZnRlckxhc3RTbGFzaC0tOwotICAgICAgICB3aGlsZSAobV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2ggPiBtX3VybC5tX3BvcnRFbmQgJiYgbV9idWZmZXJbbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2hdICE9ICcvJykKKyAgICAgICAgd2hpbGUgKG1fdXJsLm1fcGF0aEFmdGVyTGFz
dFNsYXNoID4gbV91cmwubV9wb3J0RW5kICYmIG1fYXNjaWlCdWZmZXJbbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2hdICE9ICcvJykKICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNs
YXNoLS07CiAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoKys7CiAgICAgfQotICAg
IG1fYnVmZmVyLnJlc2l6ZShtX3VybC5tX3BhdGhBZnRlckxhc3RTbGFzaCk7CisgICAgbV9hc2Np
aUJ1ZmZlci5yZXNpemUobV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgpAQCAtODQ0LDggKzg3Myw5IEBAIFVSTCBVUkxQYXJz
ZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKIHsKICAgICBMT0coVVJMUGFyc2VyLCAiUGFy
c2luZyBVUkwgPCVzPiBiYXNlIDwlcz4iLCBTdHJpbmcoaW5wdXQsIGxlbmd0aCkudXRmOCgpLmRh
dGEoKSwgYmFzZS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBtX3VybCA9IHsgfTsKLSAg
ICBtX2J1ZmZlci5jbGVhcigpOwotICAgIG1fYnVmZmVyLnJlc2VydmVDYXBhY2l0eShsZW5ndGgp
OworICAgIG1fYXNjaWlCdWZmZXIuY2xlYXIoKTsKKyAgICBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZl
ci5jbGVhcigpOworICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCk7CiAg
ICAgCiAgICAgYm9vbCBpc1VURjhFbmNvZGluZyA9IGVuY29kaW5nID09IFVURjhFbmNvZGluZygp
OwogICAgIFN0cmluZ0J1aWxkZXIgcXVlcnlCdWZmZXI7CkBAIC04ODEsNyArOTExLDcgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBGcmFnbWVudCwK
ICAgICB9OwogCi0jZGVmaW5lIExPR19TVEFURSh4KSBMT0coVVJMUGFyc2VyLCAiU3RhdGUgJXMs
IGNvZGUgcG9pbnQgJWMsIGJ1ZmZlciBsZW5ndGggJWQiLCB4LCAqYywgbV9idWZmZXIubGVuZ3Ro
KCkpCisjZGVmaW5lIExPR19TVEFURSh4KSBMT0coVVJMUGFyc2VyLCAiU3RhdGUgJXMsIGNvZGUg
cG9pbnQgJWMsIGFzY2lpQnVmZmVyIHNpemUgJXp1IiwgeCwgKmMsIG1fYXNjaWlCdWZmZXIuc2l6
ZSgpKQogI2RlZmluZSBMT0dfRklOQUxfU1RBVEUoeCkgTE9HKFVSTFBhcnNlciwgIkZpbmFsIFN0
YXRlOiAlcyIsIHgpCiAKICAgICBTdGF0ZSBzdGF0ZSA9IFN0YXRlOjpTY2hlbWVTdGFydDsKQEAg
LTg5NSw3ICs5MjUsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBl
CiAgICAgICAgIGNhc2UgU3RhdGU6OlNjaGVtZVN0YXJ0OgogICAgICAgICAgICAgTE9HX1NUQVRF
KCJTY2hlbWVTdGFydCIpOwogICAgICAgICAgICAgaWYgKGlzQVNDSUlBbHBoYSgqYykpIHsKLSAg
ICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKCpjKSk7CisgICAgICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci51bmNoZWNrZWRBcHBlbmQodG9BU0NJSUxvd2VyKCpjKSk7
CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNj
aGVtZTsKICAgICAgICAgICAgIH0gZWxzZQpAQCAtOTA0LDE5ICs5MzQsMTkgQEAgVVJMIFVSTFBh
cnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpTY2hl
bWU6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIlNjaGVtZSIpOwogICAgICAgICAgICAgaWYgKGlz
QVNDSUlBbHBoYW51bWVyaWMoKmMpIHx8ICpjID09ICcrJyB8fCAqYyA9PSAnLScgfHwgKmMgPT0g
Jy4nKQotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsK
KyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIoKmMpKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKCpjID09ICc6JykgewotICAgICAgICAgICAgICAgIG1fdXJs
Lm1fc2NoZW1lRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
VmlldyB1cmxTY2hlbWUgPSBidWZmZXJWaWV3KG1fYnVmZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVu
ZCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9zY2hlbWVFbmQgPSBtX2FzY2lpQnVmZmVyLnNp
emUoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmdWaWV3IHVybFNjaGVtZSA9IFN0cmluZ1ZpZXco
bV9hc2NpaUJ1ZmZlci5kYXRhKCksIG1fdXJsLm1fc2NoZW1lRW5kKTsKICAgICAgICAgICAgICAg
ICBtX3VybC5tX3Byb3RvY29sSXNJbkhUVFBGYW1pbHkgPSB1cmxTY2hlbWUgPT0gImh0dHAiIHx8
IHVybFNjaGVtZSA9PSAiaHR0cHMiOwogICAgICAgICAgICAgICAgIGlmICh1cmxTY2hlbWUgPT0g
ImZpbGUiKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsSXNTcGVjaWFsID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RmlsZTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZm
ZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1fYnVmZmVy
LmFwcGVuZCgnOicpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7
CiAgICAgICAgICAgICAgICAgaWYgKGlzU3BlY2lhbFNjaGVtZSh1cmxTY2hlbWUpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsSXNTcGVjaWFsID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFRoaXMgaXMgdW5uZWNlc3NhcmlseSBhbGxvY2F0aW5nIGEgU3RyaW5nLgpA
QCAtOTI2LDcgKzk1Niw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5
cGUKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eVNsYXNoZXM7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5s
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lp
QnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91
cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQg
PSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC05MzYsNyArOTY2LDcgQEAgVVJMIFVSTFBhcnNlcjo6
cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIW1h
eWJlU2xhc2guYXRFbmQoKSAmJiBpc1RhYk9yTmV3bGluZSgqbWF5YmVTbGFzaCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICArK21heWJlU2xhc2g7CiAgICAgICAgICAgICAgICAgICAgIGlmICgh
bWF5YmVTbGFzaC5hdEVuZCgpICYmICptYXliZVNsYXNoID09ICcvJykgewotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOwogICAgICAgICAgICAgICAgICAgICAgICAgbV91
cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBtX3VybC5tX3VzZXJTdGFydCArIDE7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpQYXRoT3JBdXRob3JpdHk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBjID0gbWF5YmVTbGFzaDsKQEAgLTk1MCw3ICs5ODAsNyBAQCBVUkwg
VVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgKytj
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5jbGVhcigpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIu
Y2xlYXIoKTsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpOb1NjaGVtZTsKICAgICAg
ICAgICAgICAgICBjID0gYmVnaW5BZnRlckNvbnRyb2xBbmRTcGFjZTsKICAgICAgICAgICAgICAg
ICBicmVhazsKQEAgLTk1OSw3ICs5ODksNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICB3aGlsZSAoIWMuYXRFbmQoKSAmJiBpc1RhYk9yTmV3
bGluZSgqYykpCiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgaWYgKGMuYXRFbmQo
KSkgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmNsZWFyKCk7CisgICAgICAgICAgICAgICAg
bV9hc2NpaUJ1ZmZlci5jbGVhcigpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6Ok5v
U2NoZW1lOwogICAgICAgICAgICAgICAgIGMgPSBiZWdpbkFmdGVyQ29udHJvbEFuZFNwYWNlOwog
ICAgICAgICAgICAgfQpAQCAtOTcxLDcgKzEwMDEsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShj
b25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBpZiAoYmFzZS5tX2Nhbm5vdEJlQUJhc2VV
UkwgJiYgKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFz
ZSwgVVJMUGFydDo6UXVlcnlFbmQpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OkZy
YWdtZW50OwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnIycpOworICAgICAgICAg
ICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcjJyk7CiAgICAgICAgICAgICAgICAgKytjOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtOTgwLDIwICsxMDEwLDIw
IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGls
KGJhc2UsIFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
JzonKTsKKyAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCc6Jyk7CiAgICAgICAgICAg
ICBzdGF0ZSA9IFN0YXRlOjpGaWxlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
U3RhdGU6OlNwZWNpYWxSZWxhdGl2ZU9yQXV0aG9yaXR5OgogICAgICAgICAgICAgTE9HX1NUQVRF
KCJTcGVjaWFsUmVsYXRpdmVPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcv
JykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAg
ICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgKytjOwogICAg
ICAgICAgICAgICAgIHdoaWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKICAg
ICAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGlmIChjLmF0RW5kKCkpCiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWlsdXJlKGlucHV0LCBsZW5ndGgpOwogICAgICAg
ICAgICAgICAgIGlmICgqYyA9PSAnLycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIu
YXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcv
Jyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlJ
Z25vcmVTbGFzaGVzOwogICAgICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAg
fQpAQCAtMTAwMyw4ICsxMDMzLDggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFj
dGVyVHlwZQogICAgICAgICBjYXNlIFN0YXRlOjpQYXRoT3JBdXRob3JpdHk6CiAgICAgICAgICAg
ICBMT0dfU1RBVEUoIlBhdGhPckF1dGhvcml0eSIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcv
JykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOwotICAgICAgICAgICAg
ICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3Vz
ZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHN0YXRlID0g
U3RhdGU6OkF1dGhvcml0eU9ySG9zdDsKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAg
ICAgICAgYXV0aG9yaXR5T3JIb3N0QmVnaW4gPSBjOwpAQCAtMTAyMSwxMyArMTA1MSwxMyBAQCBV
UkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAgICBjb3B5VVJMUGFy
dHNVbnRpbChiYXNlLCBVUkxQYXJ0OjpQYXRoRW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZl
ci5hcHBlbmQoJz8nKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnPycp
OwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6OlF1ZXJ5OwogICAgICAgICAgICAgICAg
ICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgJyMnOgogICAg
ICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1ZXJ5RW5kKTsK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJyMnKTsKKyAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnIycpOwogICAgICAgICAgICAgICAgIHN0YXRlID0gU3RhdGU6
OkZyYWdtZW50OwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVhazsK
QEAgLTEwNDIsMTggKzEwNzIsMTggQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFj
dGVyVHlwZQogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8fCAqYyA9PSAnXFwnKSB7CiAgICAg
ICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2Us
IFVSTFBhcnQ6OlNjaGVtZUVuZCk7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCI6
Ly8iKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiOi8vIiwgMyk7CiAg
ICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6U3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNo
ZXM7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1Vu
dGlsKGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAg
ICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVu
ZCArIDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpTcGVjaWFsQXV0aG9y
aXR5U2xhc2hlczoKICAgICAgICAgICAgIExPR19TVEFURSgiU3BlY2lhbEF1dGhvcml0eVNsYXNo
ZXMiKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8iKTsKKyAgICAgICAgICAgIG1f
YXNjaWlCdWZmZXIuYXBwZW5kKCIvLyIsIDIpOwogICAgICAgICAgICAgaWYgKCpjID09ICcvJyB8
fCAqYyA9PSAnXFwnKSB7CiAgICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgICAgIHdo
aWxlICghYy5hdEVuZCgpICYmIGlzVGFiT3JOZXdsaW5lKCpjKSkKQEAgLTEwNjYsMTAgKzEwOTYs
MTAgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICBj
YXNlIFN0YXRlOjpTcGVjaWFsQXV0aG9yaXR5SWdub3JlU2xhc2hlczoKICAgICAgICAgICAgIExP
R19TVEFURSgiU3BlY2lhbEF1dGhvcml0eUlnbm9yZVNsYXNoZXMiKTsKICAgICAgICAgICAgIGlm
ICgqYyA9PSAnLycgfHwgKmMgPT0gJ1xcJykgewotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgnLycpOworICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAg
ICAgICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV91cmwubV91
c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0
YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpB
dXRob3JpdHlPckhvc3Q7CiAgICAgICAgICAgICBhdXRob3JpdHlPckhvc3RCZWdpbiA9IGM7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTEwODgsMTMgKzExMTgsMTMgQEAgVVJMIFVSTFBhcnNlcjo6
cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBib29sIGlzU2xhc2ggPSAqYyA9PSAnLycgfHwgKG1fdXJsSXNTcGVjaWFsICYmICpjID09
ICdcXCcpOwogICAgICAgICAgICAgICAgIGlmIChpc1NsYXNoIHx8ICpjID09ICc/JyB8fCAqYyA9
PSAnIycpIHsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9idWZmZXIu
bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYXNjaWlC
dWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0g
bV91cmwubV91c2VyRW5kOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXBhcnNlSG9zdChDb2Rl
UG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPihhdXRob3JpdHlPckhvc3RCZWdpbiwgYykpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmICghaXNTbGFzaCkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6
UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTIxLDE1ICsxMTUxLDE1IEBA
IFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIHN3
aXRjaCAoKmMpIHsKICAgICAgICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgICAgY2FzZSAnXFwn
OgotICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAg
IG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0
ZTo6RmlsZVNsYXNoOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgJz8nOgogICAgICAgICAgICAgICAgIGlmICghYmFzZS5pc051
bGwoKSAmJiBiYXNlLnByb3RvY29sSXMoImZpbGUiKSkKICAgICAgICAgICAgICAgICAgICAgY29w
eVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UGF0aEVuZCk7Ci0gICAgICAgICAgICAgICAg
bV9idWZmZXIuYXBwZW5kKCIvLy8/Iik7Ci0gICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3Rh
cnQgPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDI7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5hcHBlbmQoIi8vLz8iLCA0KTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMjsKICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJF
bmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICBtX3VybC5tX3Bhc3N3b3Jk
RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5k
ID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMTQyLDggKzExNzIsOCBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBjYXNlICcjJzoKICAgICAg
ICAgICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElzKCJmaWxlIikp
CiAgICAgICAgICAgICAgICAgICAgIGNvcHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlF1
ZXJ5RW5kKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQoIi8vLyMiKTsKLSAgICAg
ICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYnVmZmVyLmxlbmd0aCgpIC0gMjsKKyAg
ICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIyIsIDQpOworICAgICAgICAg
ICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAyOwogICAg
ICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAg
ICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTExNTgs
OCArMTE4OCw4IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAg
ICAgICAgICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbElzKCJmaWxl
IikgJiYgc2hvdWxkQ29weUZpbGVVUkwoYykpCiAgICAgICAgICAgICAgICAgICAgIGNvcHlVUkxQ
YXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBhdGhBZnRlckxhc3RTbGFzaCk7CiAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLy8vIik7
Ci0gICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3Ro
KCkgLSAxOworICAgICAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIiwg
Myk7CisgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZl
ci5zaXplKCkgLSAxOwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX3Vy
bC5tX3VzZXJTdGFydDsKICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9
IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQg
PSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTExNzQsOCArMTIwNCw4IEBAIFVSTCBVUkxQYXJzZXI6
OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19TVEFURSgiRmlsZVNs
YXNoIik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJy8nIHx8ICpjID09ICdcXCcpIHsKICAgICAg
ICAgICAgICAgICArK2M7Ci0gICAgICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCcvJyk7Ci0g
ICAgICAgICAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAg
ICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnLycpOworICAgICAgICAgICAgICAg
IG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICAgICAg
bV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICAgICAgICAg
IG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTE5MiwxNSArMTIyMiwx
NSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAg
ICAgICAgICAgICAgICA/IGlzV2luZG93c0RyaXZlTGV0dGVyKENvZGVQb2ludEl0ZXJhdG9yPExD
aGFyPihiYXNlUGF0aC5jaGFyYWN0ZXJzOCgpLCBiYXNlUGF0aC5jaGFyYWN0ZXJzOCgpICsgYmFz
ZVBhdGgubGVuZ3RoKCkpKQogICAgICAgICAgICAgICAgICAgICAgICAgOiBpc1dpbmRvd3NEcml2
ZUxldHRlcihDb2RlUG9pbnRJdGVyYXRvcjxVQ2hhcj4oYmFzZVBhdGguY2hhcmFjdGVyczE2KCks
IGJhc2VQYXRoLmNoYXJhY3RlcnMxNigpICsgYmFzZVBhdGgubGVuZ3RoKCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpbmRvd3NRdWlyaykgewotICAgICAgICAgICAgICAgICAgICAgICAg
bV9idWZmZXIuYXBwZW5kKGJhc2VQYXRoWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
YnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2Fz
Y2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZChiYXNlUGF0aFsxXSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fYnVm
ZmVyLmFwcGVuZCgiLy8iKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZm
ZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoIi8vIiwg
Mik7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJTdGFydCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgp
IC0gMTsKICAgICAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0Owog
ICAgICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAg
ICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV91cmwubV91c2VyU3RhcnQ7CkBAIC0xMjExLDIz
ICsxMjQxLDIzIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAg
ICAgICAgY2FzZSBTdGF0ZTo6RmlsZUhvc3Q6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkZpbGVI
b3N0Iik7CiAgICAgICAgICAgICBpZiAoaXNTbGFzaFF1ZXN0aW9uT3JIYXNoKCpjKSkgewotICAg
ICAgICAgICAgICAgIGlmIChpc1dpbmRvd3NEcml2ZUxldHRlcihtX2J1ZmZlciwgbV91cmwubV9w
b3J0RW5kICsgMSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNXaW5kb3dzRHJpdmVMZXR0ZXIo
bV9hc2NpaUJ1ZmZlciwgbV91cmwubV9wb3J0RW5kICsgMSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6UGF0aDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChhdXRob3JpdHlPckhvc3RCZWdpbiA9
PSBjKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZlci5sZW5n
dGgoKSAtIDFdID09ICcvJyk7CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChtX2FzY2lpQnVm
ZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKTsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCpjID09ICc/JykgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9idWZmZXIuYXBw
ZW5kKCIvPyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0
U2xhc2ggPSBtX2J1ZmZlci5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgiLz8iLCAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
dXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV91cmwubV9wYXRoQWZ0ZXJM
YXN0U2xhc2g7CiAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0YXRlOjpRdWVyeTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGlmICgqYyA9
PSAnIycpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgiLyMiKTsK
LSAgICAgICAgICAgICAgICAgICAgICAgIG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoID0gbV9i
dWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZl
ci5hcHBlbmQoIi8jIiwgMik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3VybC5tX3BhdGhB
ZnRlckxhc3RTbGFzaCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwog
ICAgICAgICAgICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEFm
dGVyTGFzdFNsYXNoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6RnJh
Z21lbnQ7CkBAIC0xMjQwLDkgKzEyNzAsOSBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBD
aGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICAgICAgaWYgKCFwYXJzZUhvc3QoQ29kZVBvaW50SXRl
cmF0b3I8Q2hhcmFjdGVyVHlwZT4oYXV0aG9yaXR5T3JIb3N0QmVnaW4sIGMpKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhaWx1cmUoaW5wdXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlclZpZXcobV9idWZmZXIsIG1fdXJsLm1fcGFz
c3dvcmRFbmQsIG1fYnVmZmVyLmxlbmd0aCgpIC0gbV91cmwubV9wYXNzd29yZEVuZCkgPT0gImxv
Y2FsaG9zdCIpICB7Ci0gICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX3VybC5t
X3Bhc3N3b3JkRW5kKTsKLSAgICAgICAgICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1
ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAt
IG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhvc3QiKSAgeworICAgICAgICAgICAgICAg
ICAgICBtX2FzY2lpQnVmZmVyLnNocmluayhtX3VybC5tX3Bhc3N3b3JkRW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAg
ICAgICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0xMjYyLDM1ICsxMjkyLDM1IEBAIFVS
TCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgY2FzZSBTdGF0
ZTo6UGF0aDoKICAgICAgICAgICAgIExPR19TVEFURSgiUGF0aCIpOwogICAgICAgICAgICAgaWYg
KCpjID09ICcvJyB8fCAobV91cmxJc1NwZWNpYWwgJiYgKmMgPT0gJ1xcJykpIHsKLSAgICAgICAg
ICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3VybC5tX3Bh
dGhBZnRlckxhc3RTbGFzaCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1f
YXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoQWZ0
ZXJMYXN0U2xhc2ggPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAo
bV9idWZmZXIubGVuZ3RoKCkgJiYgbV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAn
LycpIHsKKyAgICAgICAgICAgIGlmIChtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiBtX2FzY2lpQnVm
ZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nKSB7CiAgICAgICAgICAgICAgICAg
aWYgKGlzRG91YmxlRG90UGF0aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAgICAgY29u
c3VtZURvdWJsZURvdFBhdGhTZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBwb3BQYXRo
KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBpZiAobV9idWZmZXJbbV9idWZmZXIubGVuZ3RoKCkgLSAxXSA9PSAnLycgJiYg
aXNTaW5nbGVEb3RQYXRoU2VnbWVudChjKSkgeworICAgICAgICAgICAgICAgIGlmIChtX2FzY2lp
QnVmZmVyW21fYXNjaWlCdWZmZXIuc2l6ZSgpIC0gMV0gPT0gJy8nICYmIGlzU2luZ2xlRG90UGF0
aFNlZ21lbnQoYykpIHsKICAgICAgICAgICAgICAgICAgICAgY29uc3VtZVNpbmdsZURvdFBhdGhT
ZWdtZW50KGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAg
ICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAg
ICAgbV91cmwubV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAg
ICAgc3RhdGUgPSBTdGF0ZTo6UXVlcnk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7Ci0gICAgICAgICAgICAgICAgbV91
cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwu
bV9wYXRoRW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgbV91cmwu
bV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgICAgICAgICBzdGF0ZSA9IFN0
YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChpc1BlcmNlbnRFbmNvZGVkRG90KGMpKSB7Ci0gICAgICAgICAgICAgICAg
bV9idWZmZXIuYXBwZW5kKCcuJyk7CisgICAgICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBl
bmQoJy4nKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoKmMgPT0gJyUnKTsKICAgICAgICAgICAg
ICAgICArK2M7CiAgICAgICAgICAgICAgICAgQVNTRVJUKCpjID09IGRvdEFTQ0lJQ29kZVswXSk7
CkBAIC0xMjk5LDIwICsxMzI5LDIwIEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNvbnN0IENoYXJh
Y3RlclR5cGUKICAgICAgICAgICAgICAgICArK2M7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgqYywgbV9idWZmZXIs
IGlzSW5EZWZhdWx0RW5jb2RlU2V0KTsKKyAgICAgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpj
LCBtX2FzY2lpQnVmZmVyLCBpc0luRGVmYXVsdEVuY29kZVNldCk7CiAgICAgICAgICAgICArK2M7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTdGF0ZTo6Q2Fubm90QmVBQmFzZVVS
TFBhdGg6CiAgICAgICAgICAgICBMT0dfU1RBVEUoIkNhbm5vdEJlQUJhc2VVUkxQYXRoIik7CiAg
ICAgICAgICAgICBpZiAoKmMgPT0gJz8nKSB7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9wYXRo
RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgbV91cmwubV9wYXRoRW5k
ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBTdGF0ZTo6
UXVlcnk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCpjID09ICcjJykgewotICAgICAgICAgICAg
ICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAg
IG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAg
IG1fdXJsLm1fcXVlcnlFbmQgPSBtX3VybC5tX3BhdGhFbmQ7CiAgICAgICAgICAgICAgICAgc3Rh
dGUgPSBTdGF0ZTo6RnJhZ21lbnQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIHV0ZjhQZXJjZW50RW5jb2RlKCpjLCBtX2J1ZmZlciwgaXNJblNpbXBsZUVuY29kZVNldCk7
CisgICAgICAgICAgICAgICAgdXRmOFBlcmNlbnRFbmNvZGUoKmMsIG1fYXNjaWlCdWZmZXIsIGlz
SW5TaW1wbGVFbmNvZGVTZXQpOwogICAgICAgICAgICAgICAgICsrYzsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTMyMCwyMCArMTM1MCwyMyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgICAgICBMT0dfU1RBVEUoIlF1ZXJ5
Iik7CiAgICAgICAgICAgICBpZiAoKmMgPT0gJyMnKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFp
c1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlCdWZm
ZXIsIG1fYnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgICAgICAgICAgbV91cmwubV9xdWVyeUVu
ZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBlbmNvZGVRdWVyeShx
dWVyeUJ1ZmZlciwgbV9hc2NpaUJ1ZmZlciwgZW5jb2RpbmcpOworICAgICAgICAgICAgICAgIG1f
dXJsLm1fcXVlcnlFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICBz
dGF0ZSA9IFN0YXRlOjpGcmFnbWVudDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpc1VURjhFbmNvZGluZykKLSAgICAgICAgICAgICAgICB1
dGY4UGVyY2VudEVuY29kZVF1ZXJ5KCpjLCBtX2J1ZmZlcik7CisgICAgICAgICAgICAgICAgdXRm
OFBlcmNlbnRFbmNvZGVRdWVyeSgqYywgbV9hc2NpaUJ1ZmZlcik7CiAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgcXVlcnlCdWZmZXIuYXBwZW5kKCpjKTsKICAgICAgICAgICAgICsr
YzsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0YXRlOjpGcmFnbWVudDoKICAg
ICAgICAgICAgIExPR19TVEFURSgiRnJhZ21lbnQiKTsKLSAgICAgICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgqYyk7CisgICAgICAgICAgICBpZiAobV91bmljb2RlRnJhZ21lbnRCdWZmZXIuaXNFbXB0
eSgpICYmIGlzQVNDSUkoKmMpKQorICAgICAgICAgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5k
KCpjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3VuaWNvZGVGcmFnbWVu
dEJ1ZmZlci5hcHBlbmQoKmMpOwogICAgICAgICAgICAgKytjOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KQEAgLTEzNDIsNyArMTM3NSw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICBzd2l0Y2ggKHN0YXRlKSB7CiAgICAgY2FzZSBTdGF0ZTo6
U2NoZW1lU3RhcnQ6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiU2NoZW1lU3RhcnQiKTsKLSAg
ICAgICAgaWYgKCFtX2J1ZmZlci5sZW5ndGgoKSAmJiAhYmFzZS5pc051bGwoKSkKKyAgICAgICAg
aWYgKCFtX2FzY2lpQnVmZmVyLnNpemUoKSAmJiAhYmFzZS5pc051bGwoKSkKICAgICAgICAgICAg
IHJldHVybiBiYXNlOwogICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKICAg
ICBjYXNlIFN0YXRlOjpTY2hlbWU6CkBAIC0xMzY5LDcgKzE0MDIsNyBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgY2FzZSBTdGF0ZTo6UmVsYXRpdmVTbGFz
aDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJSZWxhdGl2ZVNsYXNoIik7CiAgICAgICAgIGNv
cHlVUkxQYXJ0c1VudGlsKGJhc2UsIFVSTFBhcnQ6OlBvcnRFbmQpOwotICAgICAgICBtX2J1ZmZl
ci5hcHBlbmQoJy8nKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAg
ICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2ggPSBiYXNlLm1fcG9ydEVuZCArIDE7CiAgICAg
ICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fdXJsLm1fcGF0aEFmdGVyTGFzdFNsYXNoOwogICAgICAg
ICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2g7CkBAIC0xMzc3
LDcgKzE0MTAsNyBAQCBVUkwgVVJMUGFyc2VyOjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzOgog
ICAgICAgICBMT0dfRklOQUxfU1RBVEUoIlNwZWNpYWxBdXRob3JpdHlTbGFzaGVzIik7Ci0gICAg
ICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIG1fdXJs
Lm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fdXNl
ckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX3Bhc3N3b3JkRW5kID0g
bV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fdXJsLm1fdXNl
clN0YXJ0OwpAQCAtMTM5Myw3ICsxNDI2LDcgQEAgVVJMIFVSTFBhcnNlcjo6cGFyc2UoY29uc3Qg
Q2hhcmFjdGVyVHlwZQogICAgICAgICBicmVhazsKICAgICBjYXNlIFN0YXRlOjpBdXRob3JpdHlP
ckhvc3Q6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQXV0aG9yaXR5T3JIb3N0Iik7Ci0gICAg
ICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5t
X3VzZXJFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9wYXNzd29y
ZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBT
dGF0ZTo6SG9zdDoKQEAgLTE0MDEsNyArMTQzNCw3IEBAIFVSTCBVUkxQYXJzZXI6OnBhcnNlKGNv
bnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgICAgIExPR19GSU5BTF9TVEFURSgiSG9zdCIpOwog
ICAgICAgICBpZiAoIXBhcnNlSG9zdChhdXRob3JpdHlPckhvc3RCZWdpbikpCiAgICAgICAgICAg
ICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKLSAgICAgICAgbV9idWZmZXIuYXBwZW5k
KCcvJyk7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKCcvJyk7CiAgICAgICAgIG1fdXJs
Lm1fcGF0aEVuZCA9IG1fdXJsLm1fcG9ydEVuZCArIDE7CiAgICAgICAgIG1fdXJsLm1fcGF0aEFm
dGVyTGFzdFNsYXNoID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3VybC5tX3F1ZXJ5RW5k
ID0gbV91cmwubV9wYXRoRW5kOwpAQCAtMTQxMSwxMCArMTQ0NCwxMCBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiRmls
ZSIpOwogICAgICAgICBpZiAoIWJhc2UuaXNOdWxsKCkgJiYgYmFzZS5wcm90b2NvbCgpID09ICJm
aWxlIikgewogICAgICAgICAgICAgY29weVVSTFBhcnRzVW50aWwoYmFzZSwgVVJMUGFydDo6UXVl
cnlFbmQpOwotICAgICAgICAgICAgbV9idWZmZXIuYXBwZW5kKCc6Jyk7CisgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgICAgICB9Ci0gICAgICAgIG1fYnVmZmVyLmFw
cGVuZCgiLy8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3Ro
KCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8vIiwgMyk7CisgICAgICAg
IG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICBt
X3VybC5tX3VzZXJFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKICAgICAgICAgbV91cmwubV9wYXNz
d29yZEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBt
X3VybC5tX3VzZXJTdGFydDsKQEAgLTE0MjYsOCArMTQ1OSw4IEBAIFVSTCBVUkxQYXJzZXI6OnBh
cnNlKGNvbnN0IENoYXJhY3RlclR5cGUKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0ZTo6
RmlsZVNsYXNoOgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVTbGFzaCIpOwotICAgICAg
ICBtX2J1ZmZlci5hcHBlbmQoIi8vIik7Ci0gICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9i
dWZmZXIubGVuZ3RoKCkgLSAxOworICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgiLy8iLCAy
KTsKKyAgICAgICAgbV91cmwubV91c2VyU3RhcnQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIDE7
CiAgICAgICAgIG1fdXJsLm1fdXNlckVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwogICAgICAgICBt
X3VybC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgIG1fdXJsLm1f
aG9zdEVuZCA9IG1fdXJsLm1fdXNlclN0YXJ0OwpAQCAtMTQ0MCw4ICsxNDczLDggQEAgVVJMIFVS
TFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogICAgIGNhc2UgU3RhdGU6OkZpbGVI
b3N0OgogICAgICAgICBMT0dfRklOQUxfU1RBVEUoIkZpbGVIb3N0Iik7CiAgICAgICAgIGlmIChh
dXRob3JpdHlPckhvc3RCZWdpbiA9PSBjKSB7Ci0gICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQo
Jy8nKTsKLSAgICAgICAgICAgIG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9idWZmZXIubGVuZ3RoKCkg
LSAxOworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgICAg
IG1fdXJsLm1fdXNlclN0YXJ0ID0gbV9hc2NpaUJ1ZmZlci5zaXplKCkgLSAxOwogICAgICAgICAg
ICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICBtX3Vy
bC5tX3Bhc3N3b3JkRW5kID0gbV91cmwubV91c2VyU3RhcnQ7CiAgICAgICAgICAgICBtX3VybC5t
X2hvc3RFbmQgPSBtX3VybC5tX3VzZXJTdGFydDsKQEAgLTE0NTUsMTMgKzE0ODgsMTMgQEAgVVJM
IFVSTFBhcnNlcjo6cGFyc2UoY29uc3QgQ2hhcmFjdGVyVHlwZQogCiAgICAgICAgIGlmICghcGFy
c2VIb3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGF1dGhvcml0eU9ySG9zdEJl
Z2luLCBjKSkpCiAgICAgICAgICAgICByZXR1cm4gZmFpbHVyZShpbnB1dCwgbGVuZ3RoKTsKLSAg
ICAgICAgCi0gICAgICAgIGlmIChidWZmZXJWaWV3KG1fYnVmZmVyLCBtX3VybC5tX3Bhc3N3b3Jk
RW5kLCBtX2J1ZmZlci5sZW5ndGgoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJsb2NhbGhv
c3QiKSAgewotICAgICAgICAgICAgbV9idWZmZXIucmVzaXplKG1fdXJsLm1fcGFzc3dvcmRFbmQp
OwotICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisKKyAg
ICAgICAgaWYgKFN0cmluZ1ZpZXcobV9hc2NpaUJ1ZmZlci5kYXRhKCkgKyBtX3VybC5tX3Bhc3N3
b3JkRW5kLCBtX2FzY2lpQnVmZmVyLnNpemUoKSAtIG1fdXJsLm1fcGFzc3dvcmRFbmQpID09ICJs
b2NhbGhvc3QiKSAgeworICAgICAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV91cmwubV9w
YXNzd29yZEVuZCk7CisgICAgICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICAgICAgICAgIG1fdXJsLm1fcG9ydEVuZCA9IG1fdXJsLm1faG9zdEVuZDsK
ICAgICAgICAgfQotICAgICAgICBtX2J1ZmZlci5hcHBlbmQoJy8nKTsKKyAgICAgICAgbV9hc2Np
aUJ1ZmZlci5hcHBlbmQoJy8nKTsKICAgICAgICAgbV91cmwubV9wYXRoQWZ0ZXJMYXN0U2xhc2gg
PSBtX3VybC5tX2hvc3RFbmQgKyAxOwogICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX3VybC5t
X3BhdGhBZnRlckxhc3RTbGFzaDsKICAgICAgICAgbV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1f
cGF0aEFmdGVyTGFzdFNsYXNoOwpAQCAtMTQ3MiwzMCArMTUwNSw0MCBAQCBVUkwgVVJMUGFyc2Vy
OjpwYXJzZShjb25zdCBDaGFyYWN0ZXJUeXBlCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CiAgICAgY2FzZSBTdGF0ZTo6UGF0aDoKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRF
KCJQYXRoIik7Ci0gICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICBtX3VybC5tX3BhdGhFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAg
bV91cmwubV9xdWVyeUVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgbV91cmwubV9mcmFn
bWVudEVuZCA9IG1fdXJsLm1fcGF0aEVuZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTdGF0
ZTo6Q2Fubm90QmVBQmFzZVVSTFBhdGg6CiAgICAgICAgIExPR19GSU5BTF9TVEFURSgiQ2Fubm90
QmVBQmFzZVVSTFBhdGgiKTsKLSAgICAgICAgbV91cmwubV9wYXRoRW5kID0gbV9idWZmZXIubGVu
Z3RoKCk7CisgICAgICAgIG1fdXJsLm1fcGF0aEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwog
ICAgICAgICBtX3VybC5tX3F1ZXJ5RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBtX3Vy
bC5tX2ZyYWdtZW50RW5kID0gbV91cmwubV9wYXRoRW5kOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFN0YXRlOjpRdWVyeToKICAgICAgICAgTE9HX0ZJTkFMX1NUQVRFKCJRdWVyeSIpOwogICAg
ICAgICBpZiAoIWlzVVRGOEVuY29kaW5nKQotICAgICAgICAgICAgZW5jb2RlUXVlcnkocXVlcnlC
dWZmZXIsIG1fYnVmZmVyLCBlbmNvZGluZyk7Ci0gICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBt
X2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGVuY29kZVF1ZXJ5KHF1ZXJ5QnVmZmVyLCBt
X2FzY2lpQnVmZmVyLCBlbmNvZGluZyk7CisgICAgICAgIG1fdXJsLm1fcXVlcnlFbmQgPSBtX2Fz
Y2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9IG1fdXJsLm1f
cXVlcnlFbmQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3RhdGU6OkZyYWdtZW50OgogICAg
ICAgICBMT0dfRklOQUxfU1RBVEUoIkZyYWdtZW50Iik7Ci0gICAgICAgIG1fdXJsLm1fZnJhZ21l
bnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9mcmFnbWVudEVuZCA9
IG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJhZ21lbnRCdWZmZXIuc2l6ZSgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBtX3VybC5tX3N0cmluZyA9IG1fYnVmZmVyLnRv
U3RyaW5nKCk7CisgICAgaWYgKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBGSVhNRTogU3RyaW5nOjphZG9wdCBzaG91bGQgcmVxdWlyZSBhIFdURk1vdmUu
CisgICAgICAgIG1fdXJsLm1fc3RyaW5nID0gU3RyaW5nOjphZG9wdChtX2FzY2lpQnVmZmVyKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgICAgIGJ1
aWxkZXIucmVzZXJ2ZUNhcGFjaXR5KG1fYXNjaWlCdWZmZXIuc2l6ZSgpICsgbV91bmljb2RlRnJh
Z21lbnRCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQobV9hc2NpaUJ1ZmZl
ci5kYXRhKCksIG1fYXNjaWlCdWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlci5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKG1fdW5pY29kZUZyYWdtZW50QnVmZmVyW2ldKTsKKyAgICAgICAgbV91
cmwubV9zdHJpbmcgPSBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQogICAgIG1fdXJsLm1faXNW
YWxpZCA9IHRydWU7CiAgICAgTE9HKFVSTFBhcnNlciwgIlBhcnNlZCBVUkwgPCVzPiIsIG1fdXJs
Lm1fc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwogICAgIHJldHVybiBtX3VybDsKQEAgLTE1MDUsNDIg
KzE1NDgsNTUgQEAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KIHZvaWQgVVJMUGFy
c2VyOjpwYXJzZUF1dGhvcml0eShDb2RlUG9pbnRJdGVyYXRvcjxDaGFyYWN0ZXJUeXBlPiBpdGVy
YXRvcikKIHsKICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3Vz
ZXJFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX3VybC5t
X3VzZXJFbmQ7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZm9yICg7ICFpdGVyYXRvci5h
dEVuZCgpOyArK2l0ZXJhdG9yKSB7CiAgICAgICAgIGlmICgqaXRlcmF0b3IgPT0gJzonKSB7CiAg
ICAgICAgICAgICArK2l0ZXJhdG9yOwotICAgICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV9i
dWZmZXIubGVuZ3RoKCk7CisgICAgICAgICAgICBtX3VybC5tX3VzZXJFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKICAgICAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAg
ICAgICAgICAgbV91cmwubV9wYXNzd29yZEVuZCA9IG1fdXJsLm1fdXNlckVuZDsKICAgICAgICAg
ICAgICAgICBpZiAobV91cmwubV91c2VyRW5kID4gbV91cmwubV91c2VyU3RhcnQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnQCcpOworICAgICAgICAgICAgICAgICAgICBt
X2FzY2lpQnVmZmVyLmFwcGVuZCgnQCcpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIG1fYnVmZmVyLmFwcGVuZCgnOicpOworICAgICAgICAgICAg
bV9hc2NpaUJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCppdGVyYXRvciwgbV9idWZmZXIsIGlzSW5Vc2Vy
SW5mb0VuY29kZVNldCk7CisgICAgICAgIHV0ZjhQZXJjZW50RW5jb2RlKCppdGVyYXRvciwgbV9h
c2NpaUJ1ZmZlciwgaXNJblVzZXJJbmZvRW5jb2RlU2V0KTsKICAgICB9CiAgICAgZm9yICg7ICFp
dGVyYXRvci5hdEVuZCgpOyArK2l0ZXJhdG9yKQotICAgICAgICB1dGY4UGVyY2VudEVuY29kZSgq
aXRlcmF0b3IsIG1fYnVmZmVyLCBpc0luVXNlckluZm9FbmNvZGVTZXQpOwotICAgIG1fdXJsLm1f
cGFzc3dvcmRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgdXRmOFBlcmNlbnRFbmNv
ZGUoKml0ZXJhdG9yLCBtX2FzY2lpQnVmZmVyLCBpc0luVXNlckluZm9FbmNvZGVTZXQpOworICAg
IG1fdXJsLm1fcGFzc3dvcmRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICBpZiAoIW1f
dXJsLm1fdXNlckVuZCkKICAgICAgICAgbV91cmwubV91c2VyRW5kID0gbV91cmwubV9wYXNzd29y
ZEVuZDsKLSAgICBtX2J1ZmZlci5hcHBlbmQoJ0AnKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVu
ZCgnQCcpOwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY0KHVpbnQzMl90IGFkZHJlc3Ms
IFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3RlbXBsYXRlPHR5cGVuYW1lIFVuc2lnbmVkSW50ZWdl
clR5cGU+Cit2b2lkIGFwcGVuZChWZWN0b3I8TENoYXI+JiBkZXN0aW5hdGlvbiwgVW5zaWduZWRJ
bnRlZ2VyVHlwZSBudW1iZXIpCiB7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcihhZGRyZXNzID4+
IDI0KTsKKyAgICBMQ2hhciBidWZbc2l6ZW9mKFVuc2lnbmVkSW50ZWdlclR5cGUpICogMyArIDFd
OworICAgIExDaGFyKiBlbmQgPSBidWYgKyBXVEZfQVJSQVlfTEVOR1RIKGJ1Zik7CisgICAgTENo
YXIqIHAgPSBlbmQ7CisgICAgZG8geworICAgICAgICAqLS1wID0gKG51bWJlciAlIDEwKSArICcw
JzsKKyAgICAgICAgbnVtYmVyIC89IDEwOworICAgIH0gd2hpbGUgKG51bWJlcik7CisgICAgZGVz
dGluYXRpb24uYXBwZW5kKHAsIGVuZCAtIHApOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxpemVJ
UHY0KHVpbnQzMl90IGFkZHJlc3MsIFZlY3RvcjxMQ2hhcj4mIGJ1ZmZlcikKK3sKKyAgICBhcHBl
bmQ8dWludDhfdD4oYnVmZmVyLCBhZGRyZXNzID4+IDI0KTsKICAgICBidWZmZXIuYXBwZW5kKCcu
Jyk7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcigoYWRkcmVzcyA+PiAxNikgJiAweEZGKTsKKyAg
ICBhcHBlbmQ8dWludDhfdD4oYnVmZmVyLCBhZGRyZXNzID4+IDE2KTsKICAgICBidWZmZXIuYXBw
ZW5kKCcuJyk7Ci0gICAgYnVmZmVyLmFwcGVuZE51bWJlcigoYWRkcmVzcyA+PiA4KSAmIDB4RkYp
OworICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MgPj4gOCk7CiAgICAgYnVmZmVy
LmFwcGVuZCgnLicpOwotICAgIGJ1ZmZlci5hcHBlbmROdW1iZXIoYWRkcmVzcyAmIDB4RkYpOwor
ICAgIGFwcGVuZDx1aW50OF90PihidWZmZXIsIGFkZHJlc3MpOwogfQogICAgIAogc3RhdGljIHNp
emVfdCB6ZXJvU2VxdWVuY2VMZW5ndGgoY29uc3Qgc3RkOjphcnJheTx1aW50MTZfdCwgOD4mIGFk
ZHJlc3MsIHNpemVfdCBiZWdpbikKQEAgLTE1NzAsNyArMTYyNiw3IEBAIHN0YXRpYyBPcHRpb25h
bDxzaXplX3Q+IGZpbmRMb25nZXN0WmVyb1MKICAgICByZXR1cm4gbG9uZ2VzdDsKIH0KICAgICAK
LXN0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQdjZQaWVjZSh1aW50MTZfdCBwaWVjZSwgU3RyaW5nQnVp
bGRlciYgYnVmZmVyKQorc3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NlBpZWNlKHVpbnQxNl90IHBp
ZWNlLCBWZWN0b3I8TENoYXI+JiBidWZmZXIpCiB7CiAgICAgYm9vbCBwcmludGVkID0gZmFsc2U7
CiAgICAgaWYgKGF1dG8gbmliYmxlMCA9IHBpZWNlID4+IDEyKSB7CkBAIC0xNTg4LDcgKzE2NDQs
NyBAQCBzdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2UGllY2UodWludDE2X3QgCiAgICAgYnVmZmVy
LmFwcGVuZChsb3dlck5pYmJsZVRvTG93ZXJjYXNlQVNDSUlIZXhEaWdpdChwaWVjZSAmIDB4Rikp
OwogfQogCi1zdGF0aWMgdm9pZCBzZXJpYWxpemVJUHY2KHN0ZDo6YXJyYXk8dWludDE2X3QsIDg+
IGFkZHJlc3MsIFN0cmluZ0J1aWxkZXImIGJ1ZmZlcikKK3N0YXRpYyB2b2lkIHNlcmlhbGl6ZUlQ
djYoc3RkOjphcnJheTx1aW50MTZfdCwgOD4gYWRkcmVzcywgVmVjdG9yPExDaGFyPiYgYnVmZmVy
KQogewogICAgIGJ1ZmZlci5hcHBlbmQoJ1snKTsKICAgICBhdXRvIGNvbXByZXNzUG9pbnRlciA9
IGZpbmRMb25nZXN0WmVyb1NlcXVlbmNlKGFkZHJlc3MpOwpAQCAtMTU5OCw3ICsxNjU0LDcgQEAg
c3RhdGljIHZvaWQgc2VyaWFsaXplSVB2NihzdGQ6OmFycmF5PHVpbgogICAgICAgICAgICAgaWYg
KHBpZWNlKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoJzonKTsKICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKCI6OiIpOworICAgICAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoIjo6IiwgMik7CiAgICAgICAgICAgICB3aGlsZSAocGllY2UgPCA4
ICYmICFhZGRyZXNzW3BpZWNlXSkKICAgICAgICAgICAgICAgICBwaWVjZSsrOwogICAgICAgICAg
ICAgaWYgKHBpZWNlID09IDgpCkBAIC0xODgwLDEwICsxOTM2LDEwIEBAIGJvb2wgVVJMUGFyc2Vy
OjpwYXJzZVBvcnQoQ29kZVBvaW50SXRlcmEKIHsKICAgICB1aW50MzJfdCBwb3J0ID0gMDsKICAg
ICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1
ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgbV91cmwubV9wb3J0RW5kID0gbV9hc2NpaUJ1ZmZlci5z
aXplKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBtX2J1ZmZlci5hcHBlbmQo
JzonKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCgnOicpOwogICAgIGZvciAoOyAhaXRlcmF0
b3IuYXRFbmQoKTsgKytpdGVyYXRvcikgewogICAgICAgICBpZiAoaXNUYWJPck5ld2xpbmUoKml0
ZXJhdG9yKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTg5NCwxNCArMTk1MCwxNCBAQCBi
b29sIFVSTFBhcnNlcjo6cGFyc2VQb3J0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKLSAgICBpZiAoaXNEZWZhdWx0
UG9ydChidWZmZXJWaWV3KG1fYnVmZmVyLCAwLCBtX3VybC5tX3NjaGVtZUVuZCksIHBvcnQpKSB7
Ci0gICAgICAgIEFTU0VSVChtX2J1ZmZlclttX2J1ZmZlci5sZW5ndGgoKSAtIDFdID09ICc6Jyk7
Ci0gICAgICAgIG1fYnVmZmVyLnJlc2l6ZShtX2J1ZmZlci5sZW5ndGgoKSAtIDEpOworCisgICAg
aWYgKGlzRGVmYXVsdFBvcnQoU3RyaW5nVmlldyhtX2FzY2lpQnVmZmVyLmRhdGEoKSwgbV91cmwu
bV9zY2hlbWVFbmQpLCBwb3J0KSkgeworICAgICAgICBBU1NFUlQobV9hc2NpaUJ1ZmZlci5sYXN0
KCkgPT0gJzonKTsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5zaHJpbmsobV9hc2NpaUJ1ZmZlci5z
aXplKCkgLSAxKTsKICAgICB9IGVsc2UKLSAgICAgICAgbV9idWZmZXIuYXBwZW5kTnVtYmVyKHBv
cnQpOworICAgICAgICBhcHBlbmQ8dWludDE2X3Q+KG1fYXNjaWlCdWZmZXIsIHN0YXRpY19jYXN0
PHVpbnQxNl90Pihwb3J0KSk7CiAKLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKyAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTkxNiwxNSArMTk3MiwxNSBAQCBib29sIFVSTFBhcnNlcjo6
cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgIHdoaWxlICghaXB2NkVuZC5hdEVuZCgp
ICYmICppcHY2RW5kICE9ICddJykKICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAgICAgaWYg
KGF1dG8gYWRkcmVzcyA9IHBhcnNlSVB2Nkhvc3QoQ29kZVBvaW50SXRlcmF0b3I8Q2hhcmFjdGVy
VHlwZT4oaXRlcmF0b3IsIGlwdjZFbmQpKSkgewotICAgICAgICAgICAgc2VyaWFsaXplSVB2Nihh
ZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9
IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgc2VyaWFsaXplSVB2NihhZGRyZXNzLnZh
bHVlKCksIG1fYXNjaWlCdWZmZXIpOworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgICAgICBpZiAoIWlwdjZFbmQuYXRFbmQoKSkgewog
ICAgICAgICAgICAgICAgICsraXB2NkVuZDsKICAgICAgICAgICAgICAgICBpZiAoIWlwdjZFbmQu
YXRFbmQoKSAmJiAqaXB2NkVuZCA9PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICAgKytpcHY2
RW5kOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VQb3J0KGlwdjZFbmQpOwogICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZl
ci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVm
ZmVyLnNpemUoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTk0MiwxMCArMTk5OCwxMCBAQCBib29sIFVS
TFBhcnNlcjo6cGFyc2VIb3N0KENvZGVQb2ludEl0ZXJhCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIGlmIChhdXRvIGFkZHJlc3MgPSBwYXJzZUlQdjRI
b3N0KENvZGVQb2ludEl0ZXJhdG9yPENoYXJhY3RlclR5cGU+KGhvc3RJdGVyYXRvciwgaXRlcmF0
b3IpKSkgewotICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVm
ZmVyKTsKLSAgICAgICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOwor
ICAgICAgICAgICAgc2VyaWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYXNjaWlCdWZmZXIp
OworICAgICAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2NpaUJ1ZmZlci5zaXplKCk7CiAg
ICAgICAgICAgICBpZiAoaXRlcmF0b3IuYXRFbmQoKSkgewotICAgICAgICAgICAgICAgIG1fdXJs
Lm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIG1fdXJsLm1f
cG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKytpdGVyYXRvcjsKQEAgLTE5NTMsOSAr
MjAwOSw5IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAg
ICAgfQogICAgICAgICBmb3IgKDsgaG9zdEl0ZXJhdG9yICE9IGl0ZXJhdG9yOyArK2hvc3RJdGVy
YXRvcikgewogICAgICAgICAgICAgaWYgKCFpc1RhYk9yTmV3bGluZSgqaG9zdEl0ZXJhdG9yKSkK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlci5hcHBlbmQodG9BU0NJSUxvd2VyKCpob3N0SXRlcmF0
b3IpKTsKKyAgICAgICAgICAgICAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZCh0b0FTQ0lJTG93ZXIo
Kmhvc3RJdGVyYXRvcikpOwogICAgICAgICB9Ci0gICAgICAgIG1fdXJsLm1faG9zdEVuZCA9IG1f
YnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2FzY2lpQnVmZmVy
LnNpemUoKTsKICAgICAgICAgaWYgKCFob3N0SXRlcmF0b3IuYXRFbmQoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKCpob3N0SXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgICAgICsraG9zdEl0ZXJh
dG9yOwpAQCAtMTk2Myw3ICsyMDE5LDcgQEAgYm9vbCBVUkxQYXJzZXI6OnBhcnNlSG9zdChDb2Rl
UG9pbnRJdGVyYQogICAgICAgICAgICAgICAgICsraG9zdEl0ZXJhdG9yOwogICAgICAgICAgICAg
cmV0dXJuIHBhcnNlUG9ydChob3N0SXRlcmF0b3IpOwogICAgICAgICB9Ci0gICAgICAgIG1fdXJs
Lm1fcG9ydEVuZCA9IG1fYnVmZmVyLmxlbmd0aCgpOworICAgICAgICBtX3VybC5tX3BvcnRFbmQg
PSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBA
IC0xOTkyLDIwICsyMDQ4LDIwIEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50
SXRlcmEKICAgICBTdHJpbmcmIGFzY2lpRG9tYWluVmFsdWUgPSBhc2NpaURvbWFpbi52YWx1ZSgp
OwogICAgIFJFTEVBU0VfQVNTRVJUKGFzY2lpRG9tYWluVmFsdWUuaXM4Qml0KCkpOwogICAgIGNv
bnN0IExDaGFyKiBhc2NpaURvbWFpbkNoYXJhY3RlcnMgPSBhc2NpaURvbWFpblZhbHVlLmNoYXJh
Y3RlcnM4KCk7Ci0gICAgCisKICAgICBpZiAoYXV0byBhZGRyZXNzID0gcGFyc2VJUHY0SG9zdChD
b2RlUG9pbnRJdGVyYXRvcjxMQ2hhcj4oYXNjaWlEb21haW5DaGFyYWN0ZXJzLCBhc2NpaURvbWFp
bkNoYXJhY3RlcnMgKyBhc2NpaURvbWFpblZhbHVlLmxlbmd0aCgpKSkpIHsKLSAgICAgICAgc2Vy
aWFsaXplSVB2NChhZGRyZXNzLnZhbHVlKCksIG1fYnVmZmVyKTsKLSAgICAgICAgbV91cmwubV9o
b3N0RW5kID0gbV9idWZmZXIubGVuZ3RoKCk7CisgICAgICAgIHNlcmlhbGl6ZUlQdjQoYWRkcmVz
cy52YWx1ZSgpLCBtX2FzY2lpQnVmZmVyKTsKKyAgICAgICAgbV91cmwubV9ob3N0RW5kID0gbV9h
c2NpaUJ1ZmZlci5zaXplKCk7CiAgICAgICAgIGlmIChpdGVyYXRvci5hdEVuZCgpKSB7Ci0gICAg
ICAgICAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICAgICAgICAg
IG1fdXJsLm1fcG9ydEVuZCA9IG1fYXNjaWlCdWZmZXIuc2l6ZSgpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgKytpdGVyYXRvcjsKICAgICAgICAgcmV0dXJu
IHBhcnNlUG9ydChpdGVyYXRvcik7CiAgICAgfQotICAgIAotICAgIG1fYnVmZmVyLmFwcGVuZChh
c2NpaURvbWFpbi52YWx1ZSgpKTsKLSAgICBtX3VybC5tX2hvc3RFbmQgPSBtX2J1ZmZlci5sZW5n
dGgoKTsKKworICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKGFzY2lpRG9tYWluQ2hhcmFjdGVycywg
YXNjaWlEb21haW5WYWx1ZS5sZW5ndGgoKSk7CisgICAgbV91cmwubV9ob3N0RW5kID0gbV9hc2Np
aUJ1ZmZlci5zaXplKCk7CiAgICAgaWYgKCFpdGVyYXRvci5hdEVuZCgpKSB7CiAgICAgICAgIEFT
U0VSVCgqaXRlcmF0b3IgPT0gJzonKTsKICAgICAgICAgKytpdGVyYXRvcjsKQEAgLTIwMTMsNyAr
MjA2OSw3IEBAIGJvb2wgVVJMUGFyc2VyOjpwYXJzZUhvc3QoQ29kZVBvaW50SXRlcmEKICAgICAg
ICAgICAgICsraXRlcmF0b3I7CiAgICAgICAgIHJldHVybiBwYXJzZVBvcnQoaXRlcmF0b3IpOwog
ICAgIH0KLSAgICBtX3VybC5tX3BvcnRFbmQgPSBtX2J1ZmZlci5sZW5ndGgoKTsKKyAgICBtX3Vy
bC5tX3BvcnRFbmQgPSBtX2FzY2lpQnVmZmVyLnNpemUoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjA0Nyw3ICsyMTAzLDcgQEAgYXV0byBVUkxQYXJzZXI6OnBhcnNlVVJMRW5jb2RlZEZv
cm0oU3RyaQogICAgIHJldHVybiBvdXRwdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVS
TEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQsIFN0cmluZ0J1aWxkZXImIG91dHB1dCkK
K3N0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNvbnN0IFN0cmluZyYgaW5wdXQs
IFZlY3RvcjxMQ2hhcj4mIG91dHB1dCkKIHsKICAgICBhdXRvIHV0ZjggPSBpbnB1dC51dGY4KFN0
cmljdENvbnZlcnNpb24pOwogICAgIGNvbnN0IGNoYXIqIGRhdGEgPSB1dGY4LmRhdGEoKTsKQEAg
LTIwNzAsNyArMjEyNiw3IEBAIHN0YXRpYyB2b2lkIHNlcmlhbGl6ZVVSTEVuY29kZWRGb3JtKGNv
bnMKICAgICAKIFN0cmluZyBVUkxQYXJzZXI6OnNlcmlhbGl6ZShjb25zdCBVUkxFbmNvZGVkRm9y
bSYgdHVwbGVzKQogewotICAgIFN0cmluZ0J1aWxkZXIgb3V0cHV0OworICAgIFZlY3RvcjxMQ2hh
cj4gb3V0cHV0OwogICAgIGZvciAoYXV0byYgdHVwbGUgOiB0dXBsZXMpIHsKICAgICAgICAgaWYg
KCFvdXRwdXQuaXNFbXB0eSgpKQogICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgnJicpOwpAQCAt
MjA3OCw3ICsyMTM0LDcgQEAgU3RyaW5nIFVSTFBhcnNlcjo6c2VyaWFsaXplKGNvbnN0IFVSTEVu
YwogICAgICAgICBvdXRwdXQuYXBwZW5kKCc9Jyk7CiAgICAgICAgIHNlcmlhbGl6ZVVSTEVuY29k
ZWRGb3JtKHR1cGxlLnNlY29uZCwgb3V0cHV0KTsKICAgICB9Ci0gICAgcmV0dXJuIG91dHB1dC50
b1N0cmluZygpOworICAgIHJldHVybiBTdHJpbmc6OmFkb3B0KG91dHB1dCk7CiB9CiAKIGJvb2wg
VVJMUGFyc2VyOjphbGxWYWx1ZXNFcXVhbChjb25zdCBVUkwmIGEsIGNvbnN0IFVSTCYgYikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1VSTFBhcnNlci5oCShyZXZpc2lvbiAyMDYwMzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9VUkxQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
NyArNDgsOCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgVVJMIG1fdXJsOwotICAgIFN0cmlu
Z0J1aWxkZXIgbV9idWZmZXI7CisgICAgVmVjdG9yPExDaGFyPiBtX2FzY2lpQnVmZmVyOworICAg
IFZlY3RvcjxVQ2hhcjMyPiBtX3VuaWNvZGVGcmFnbWVudEJ1ZmZlcjsKICAgICBib29sIG1fdXJs
SXNTcGVjaWFsIHsgZmFsc2UgfTsKICAgICBib29sIG1faG9zdEhhc1BlcmNlbnRPck5vbkFTQ0lJ
IHsgZmFsc2UgfTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>