<?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>72198</bug_id>
          
          <creation_ts>2011-11-11 17:32:24 -0800</creation_ts>
          <short_desc>[V8][Chromium]Serialize dense arrays densly</short_desc>
          <delta_ts>2011-11-15 16:12:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (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="Dmitry Lomov">dslomov</reporter>
          <assigned_to name="Dmitry Lomov">dslomov</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dslomov</cc>
    
    <cc>japhet</cc>
    
    <cc>kbr</cc>
    
    <cc>levin</cc>
    
    <cc>ossy</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>501258</commentid>
    <comment_count>0</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-11 17:32:24 -0800</bug_when>
    <thetext>SerializeScriptValue should:
1. Serialize dense array densely
2. Ensure that on deserialization, sparse arrays are allocated as sparse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501270</commentid>
    <comment_count>1</comment_count>
      <attachid>114808</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-11 17:43:10 -0800</bug_when>
    <thetext>Created attachment 114808
Fix

After this patch, Microsoft Web Fountains demo (http://ie.microsoft.com/testdrive/Graphics/WorkerFountains/Default.html) no longer suffers FPS hit when webworkers are enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501385</commentid>
    <comment_count>2</comment_count>
      <attachid>114808</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-12 00:15:02 -0800</bug_when>
    <thetext>Comment on attachment 114808
Fix

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

New failing tests:
fast/dom/Window/window-postmessage-clone-deep-array.html
fast/dom/Window/window-postmessage-clone.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501528</commentid>
    <comment_count>3</comment_count>
      <attachid>114808</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-13 11:14:52 -0800</bug_when>
    <thetext>Comment on attachment 114808
Fix

Due to new failing tests and (the apparent) the lack of backward compatibility. I&apos;m pretty sure that these formats may be saved so we need to be able to deserialize them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501583</commentid>
    <comment_count>4</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-13 20:00:33 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 114808 [details])
&gt; Due to new failing tests and (the apparent) the lack of backward compatibility. I&apos;m pretty sure that these formats may be saved so we need to be able to deserialize them.

Tests obviously shouldn&apos;t fail, so I&apos;ll have a look.
However, this change is backward-compatible (all values serialized by the version of the algorithm without the patch will be correctly deserialzied by the algorithm with the patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501585</commentid>
    <comment_count>5</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-13 20:02:35 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 114808 [details] [details])
&gt; &gt; Due to new failing tests and (the apparent) the lack of backward compatibility. I&apos;m pretty sure that these formats may be saved so we need to be able to deserialize them.
&gt; 
&gt; Tests obviously shouldn&apos;t fail, so I&apos;ll have a look.
&gt; However, this change is backward-compatible (all values serialized by the version of the algorithm without the patch will be correctly deserialzied by the algorithm with the patch)

How can that be when &quot;ArrayTag = &apos;[&apos;&quot; got deleted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501592</commentid>
    <comment_count>6</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-13 20:30:42 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 114808 [details] [details] [details])
&gt; &gt; &gt; Due to new failing tests and (the apparent) the lack of backward compatibility. I&apos;m pretty sure that these formats may be saved so we need to be able to deserialize them.
&gt; &gt; 
&gt; &gt; Tests obviously shouldn&apos;t fail, so I&apos;ll have a look.
&gt; &gt; However, this change is backward-compatible (all values serialized by the version of the algorithm without the patch will be correctly deserialzied by the algorithm with the patch)
&gt; 
&gt; How can that be when &quot;ArrayTag = &apos;[&apos;&quot; got deleted?

ArrayTag has never been written to the stream (you can see that ArrayState was under #if 0 ... #endif, now removed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502537</commentid>
    <comment_count>7</comment_count>
      <attachid>115073</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-14 17:35:04 -0800</bug_when>
    <thetext>Created attachment 115073
Tests fixed

Two issues caught by the tests:
1. DenseArrayState::objectDone now writes the serialized length, not the length of an array after serialization (the latter may change due to accessor execution)
2. Removed extra state push around the call to startArrayState</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502572</commentid>
    <comment_count>8</comment_count>
      <attachid>115073</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-11-14 18:31:18 -0800</bug_when>
    <thetext>Comment on attachment 115073
Tests fixed

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

There are a few things here that I think it would be good to address. Thanks!

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:197
&gt; +                         //                                             fills it with the last lenght elements and numProperties name,value pairs pushed onto deserialization stack

spacing off by one on this second line.

 &quot;lenght&quot; should be &quot;length&quot;

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:749
&gt; +                    if (hasStringProperty || (hasIndexedProperty &amp;&amp; !ignoreIndexed))

Why is this change done? What is being fixed?

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:840
&gt; +            return serializeProperties(true, serializer);

It looks like this writes out indexes followed by properties but the deserializer expects things in the reverse order. (Please add a test.)

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:847
&gt; +        }

add blank line.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:849
&gt; +        uint32_t m_arrayIndex;

Why is m_arrayIndex a member variable?

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1024
&gt; +    static bool serializeDensely(uint32_t length, uint32_t propertyCount) 

The name sounds ambiguous right now. One could easily interpret the name to mean that it will do the serialization. Consider &quot;shouldSerializeDensely&quot;.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1029
&gt; +        // so densly is better than sparsly whenever 6*propertyCount &gt; length

densely

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1281
&gt; +       case RegExpTag:

spacing off.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1355
&gt; +            if (!creator.newSparseArray(length))

I find this confusing.

&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1848
&gt; +        if (m_version &gt; 0) {

Why is there a version check here when this is a new field?

(I guess I expect a failure if the version is below a certain number.)

Also should we be increasing the version?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502583</commentid>
    <comment_count>9</comment_count>
      <attachid>115073</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-14 18:53:07 -0800</bug_when>
    <thetext>Comment on attachment 115073
Tests fixed

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

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:197
&gt;&gt; +                         //                                             fills it with the last lenght elements and numProperties name,value pairs pushed onto deserialization stack
&gt; 
&gt; spacing off by one on this second line.
&gt; 
&gt;  &quot;lenght&quot; should be &quot;length&quot;

Done

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:749
&gt;&gt; +                    if (hasStringProperty || (hasIndexedProperty &amp;&amp; !ignoreIndexed))
&gt; 
&gt; Why is this change done? What is being fixed?

DenseArrayState serializes indexed properties separately.

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:840
&gt;&gt; +            return serializeProperties(true, serializer);
&gt; 
&gt; It looks like this writes out indexes followed by properties but the deserializer expects things in the reverse order. (Please add a test.)

There is a test for this, so it is all good :)
I think you are confused because deserializer picks elements from the stack, where they are in reverse order

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:847
&gt;&gt; +        }
&gt; 
&gt; add blank line.

Done

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:849
&gt;&gt; +        uint32_t m_arrayIndex;
&gt; 
&gt; Why is m_arrayIndex a member variable?

Advance can be called multiple times, if serialization of array elements push extra states to the stack

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1024
&gt;&gt; +    static bool serializeDensely(uint32_t length, uint32_t propertyCount) 
&gt; 
&gt; The name sounds ambiguous right now. One could easily interpret the name to mean that it will do the serialization. Consider &quot;shouldSerializeDensely&quot;.

Done.

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1029
&gt;&gt; +        // so densly is better than sparsly whenever 6*propertyCount &gt; length
&gt; 
&gt; densely

Done

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1281
&gt;&gt; +       case RegExpTag:
&gt; 
&gt; spacing off.

Done.

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1355
&gt;&gt; +            if (!creator.newSparseArray(length))
&gt; 
&gt; I find this confusing.

Good catch! Fixed.

&gt;&gt; Source/WebCore/bindings/v8/SerializedScriptValue.cpp:1848
&gt;&gt; +        if (m_version &gt; 0) {
&gt; 
&gt; Why is there a version check here when this is a new field?
&gt; 
&gt; (I guess I expect a failure if the version is below a certain number.)
&gt; 
&gt; Also should we be increasing the version?

Yeah version check is dead code - removed.
We shouldn&apos;t increase version - this is a backward compatible change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502586</commentid>
    <comment_count>10</comment_count>
      <attachid>115083</attachid>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-14 19:00:48 -0800</bug_when>
    <thetext>Created attachment 115083
CR comments addressed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502635</commentid>
    <comment_count>11</comment_count>
      <attachid>115083</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 22:14:47 -0800</bug_when>
    <thetext>Comment on attachment 115083
CR comments addressed

Clearing flags on attachment: 115083

Committed r100239: &lt;http://trac.webkit.org/changeset/100239&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502636</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-14 22:14:54 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>502813</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2011-11-15 04:50:29 -0800</bug_when>
    <thetext>The new test fails on JSC platforms, please check https://bugs.webkit.org/show_bug.cgi?id=72363</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503393</commentid>
    <comment_count>14</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-11-15 16:05:53 -0800</bug_when>
    <thetext>This seems to have caused
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r100241%20(34700)/fast/dom/Window/window-postmessage-arrays-pretty-diff.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>503399</commentid>
    <comment_count>15</comment_count>
    <who name="Dmitry Lomov">dslomov</who>
    <bug_when>2011-11-15 16:12:53 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; This seems to have caused
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r100241%20(34700)/fast/dom/Window/window-postmessage-arrays-pretty-diff.html

(In reply to comment #14)
&gt; This seems to have caused
&gt; http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r100241%20(34700)/fast/dom/Window/window-postmessage-arrays-pretty-diff.html


I have opened https://bugs.webkit.org/show_bug.cgi?id=72435.
What&apos;s the best way to address failing tests until that is fixed?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114808</attachid>
            <date>2011-11-11 17:43:10 -0800</date>
            <delta_ts>2011-11-14 17:35:04 -0800</delta_ts>
            <desc>Fix</desc>
            <filename>72198.patch</filename>
            <type>text/plain</type>
            <size>23723</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ZWJjMmJjLi5mYWI4ZGVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTEt
MTEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBbVjhdW0No
cm9taXVtXVNlcmlhbGl6ZSBkZW5zZSBhcnJheXMgZGVuc2x5LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9z
dG1lc3NhZ2UtYXJyYXlzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
V2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbDogQWRkZWQuCisKIDIwMTEtMTEt
MTEgIFN0ZXBoZW4gQ2hlbm5leSAgPHNjaGVubmV5QGNocm9taXVtLm9yZz4KIAogICAgICAgICBO
dWxsIGRlcmVmIHdoZW4gbm8gdXNlIGVsZW1lbnQgZXhpc3RzIGZvciBTVkcgZWxlbWVudCBpbnN0
YW5jZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0
bWVzc2FnZS1hcnJheXMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93
L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmI4MmIxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzMCBAQAorUEFTUzogaSA9IDI5CitQQVNTOiBpID0gMjgKK1BBU1M6IGkgPSAy
NworUEFTUzogaSA9IDI2CitQQVNTOiBpID0gMjUKK1BBU1M6IGkgPSAyNAorUEFTUzogaSA9IDIz
CitQQVNTOiBpID0gMjIKK1BBU1M6IGkgPSAyMQorUEFTUzogaSA9IDIwCitQQVNTOiBpID0gMTkK
K1BBU1M6IGkgPSAxOAorUEFTUzogaSA9IDE3CitQQVNTOiBpID0gMTYKK1BBU1M6IGkgPSAxNQor
UEFTUzogaSA9IDE0CitQQVNTOiBpID0gMTMKK1BBU1M6IGkgPSAxMgorUEFTUzogaSA9IDExCitQ
QVNTOiBpID0gMTAKK1BBU1M6IGkgPSA5CitQQVNTOiBpID0gOAorUEFTUzogaSA9IDcKK1BBU1M6
IGkgPSA2CitQQVNTOiBpID0gNQorUEFTUzogaSA9IDQKK1BBU1M6IGkgPSAzCitQQVNTOiBpID0g
MgorUEFTUzogaSA9IDEKK0RvbmUuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi43YjgyMmIwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wb3N0bWVzc2FnZS1hcnJheXMuaHRtbApAQCAtMCww
ICsxLDU4IEBACis8aHRtbD4KKzxoZWFkLz4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24i
Lz4KKzxkaXYgaWQ9ImNvbnNvbGUiLz4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKwordmFyIGNvbnNvbGUg
PSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOwordmFyIG1heENvdW50ID0gMzA7
CisKK2Z1bmN0aW9uIHJlY2lldmVNZXNzYWdlKGV2dCkgeworICAgIHRyeSB7CisgICAgICB2YXIg
ZGF0YSA9IGV2dC5kYXRhOworICAgICAgaWYgKGRhdGEuaSA9PSAwKSB7CisgICAgICAgICAgY29u
c29sZS5pbm5lckhUTUwgKz0gIkRvbmUuIgorICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURv
bmUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICAgIGlmIChkYXRhLmkgPCBtYXhD
b3VudCkgeworICAgICAgICAgICAgICB2YXIgc3VjY2VzcyA9IHRydWU7CisgICAgICAgICAgICAg
IGZvciAodmFyIGogPSBkYXRhLmk7IGogPCBtYXhDb3VudDsgaisrKSB7CisgICAgICAgICAgICAg
ICAgICBzdWNjZXNzID0gc3VjY2VzcyAmJiBkYXRhLmFbal0gPT0gajsKKyAgICAgICAgICAgICAg
ICAgIGlmIChkYXRhLmFbal0gIT0gaikgeworICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUu
aW5uZXJIVE1MICs9ICJGYWlsdXJlOiBkYXRhLmkgPSAiICsgZGF0YS5pICsgIiBqID0gIiArIGog
KyAiIGRhdGEuYVtqXSA9ICIgKyBkYXRhLmFbal0gKyAiPGJyPiI7CisgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgaWYgKGRhdGEuYS5mb29iYXIgIT0gIkZvb0JhciIpCisgICAgICAgICAgICAgICAg
ICBzdWNjZXNzID0gZmFsc2U7CisgICAgICAgICAgICAgIGlmIChzdWNjZXNzKQorICAgICAgICAg
ICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIlBBU1M6IGkgPSAiICsgZGF0YS5pICsgIjxi
cj4iOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBjb25zb2xlLmlubmVy
SFRNTCArPSAiRkFJTDogaSA9ICIgKyBkYXRhLmkgKyAiIGFycmF5OiAiICsgSlNPTi5zdHJpbmdp
ZnkoZGF0YS5hKSArICI8YnI+IjsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGEgPSBbXTsK
KyAgICAgICAgICBmb3IgKHZhciBqID0gZGF0YS5pIC0gMTsgaiA8IG1heENvdW50OyBqKyspIHsK
KyAgICAgICAgICAgICAgYVtqXSA9IGo7CisgICAgICAgICAgfTsKKyAgICAgICAgICBhLmZvb2Jh
ciA9ICJGb29CYXIiOworICAgICAgICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7aTpkYXRhLmkgLSAx
LCBhOmF9LCAnKicpOworICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgY29uc29s
ZS5pbm5lckhUTUwgKz0gIkV4Y2VwdGlvbiAiICsgZSArICI8YnI+IjsKKyAgICAgICAgaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9Cit3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbWVz
c2FnZScsIHJlY2lldmVNZXNzYWdlLCBmYWxzZSk7CisKK3dpbmRvdy5wb3N0TWVzc2FnZSh7aTpt
YXhDb3VudH0sICcqJyk7Cis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCA3MjBmZThmLi45YzUxNWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMTEt
MTEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKyAgICAgICAgCisgICAgICAg
IFtWOF1bQ2hyb21pdW1dU2VyaWFsaXplIGRlbnNlIGFycmF5cyBkZW5zbHkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcyMTk4CisgICAgICAgIFRoaXMg
cGF0Y2ggZW5zdXJlcyB0aGF0OgorICAgICAgICAtIERlbnNlIGFycmF5cyBhcmUgc2VyaWFsaXpl
ZCBkZW5zbHksIGFuZCBub3QgYXMgbmFtZS12YWx1ZSBwYWlycworICAgICAgICAtIFNwYXJzZSBh
cnJheXMgYXJlIGFsbG9jYXRlZCBhcyBzcGFyc2Ugb24gZGVzZXJpYWxpemF0aW9uLgorICAgICAg
ICBUaGUgY3JpdGVyaWEgdG8gY2hvb3NlIHdoZXRoZXIgdG8gc2VyaWFsaXplIGRlbnNseSBvciBz
cGFyc2VseSBpcyB0aGUgc2l6ZQorICAgICAgICBvZiBhIHJlc3VsdGluZyBzZXJpYWxpemVkIHN0
cmVhbS4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0OiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sCisKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3JpdGVEZW5zZUFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpXcml0ZXI6OndyaXRlR2VuZXJhdGVGcmVzaFNwYXJzZUFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpXcml0ZXI6OndyaXRlR2VuZXJh
dGVGcmVzaERlbnNlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlh
bGl6ZXI6OndyaXRlRGVuc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6
U2VyaWFsaXplcjo6QWJzdHJhY3RPYmplY3RTdGF0ZTo6ZXhlY0RlcHRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjpzZXJp
YWxpemVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxp
emVyOjpPYmplY3RTdGF0ZTo6YWR2YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1h
cDo6U2VyaWFsaXplcjo6RGVuc2VBcnJheVN0YXRlOjpEZW5zZUFycmF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OkRlbnNlQXJyYXlTdGF0ZTo6YWR2
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6RGVuc2VB
cnJheVN0YXRlOjpvYmplY3REb25lKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpT
ZXJpYWxpemVyOjpTcGFyc2VBcnJheVN0YXRlOjpTcGFyc2VBcnJheVN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpTcGFyc2VBcnJheVN0YXRlOjphZHZh
bmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpzZXJpYWxp
emVEZW5zZWx5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpz
dGFydEFycmF5U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6
ZXI6OnN0YXJ0T2JqZWN0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNl
cmlhbGl6ZXI6OmRvU2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpS
ZWFkZXI6OnJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OkRlc2VyaWFsaXpl
cjo6bmV3U3BhcnNlQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OkRlc2Vy
aWFsaXplcjo6Y29tcGxldGVTcGFyc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVj
dE1hcDo6RGVzZXJpYWxpemVyOjpjb21wbGV0ZURlbnNlQXJyYXkpOgorCiAyMDExLTExLTExICBH
eXV5b3VuZyBLaW0gIDxneXV5b3VuZy5raW1Ac2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtF
XSBBZGQgYSBtaXNzaW5nIGZpbGUgdG8gUGxhdGZvcm1FZmwuY21ha2UgZm9yIGN1cmwgbmV0d29y
ayBiYWNrZW5kLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5jcHAKaW5kZXggOWJhZTkwOC4uZDhmNDBiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCkBAIC0x
ODksMTggKzE4OSwxOSBAQCBlbnVtIFNlcmlhbGl6YXRpb25UYWcgewogICAgIEZpbGVUYWcgPSAn
ZicsIC8vIGZpbGU6UmF3RmlsZSAtPiBGaWxlIChyZWYpCiAgICAgRmlsZUxpc3RUYWcgPSAnbCcs
IC8vIGxlbmd0aDp1aW50MzJfdCwgZmlsZXM6UmF3RmlsZVtsZW5ndGhdIC0+IEZpbGVMaXN0IChy
ZWYpCiAgICAgSW1hZ2VEYXRhVGFnID0gJyMnLCAvLyB3aWR0aDp1aW50MzJfdCwgaGVpZ2h0OnVp
bnQzMl90LCBwaXhlbERhdGFMZW5ndGg6dWludDMyX3QsIGRhdGE6Ynl0ZVtwaXhlbERhdGFMZW5n
dGhdIC0+IEltYWdlRGF0YSAocmVmKQotICAgIEFycmF5VGFnID0gJ1snLCAvLyBsZW5ndGg6dWlu
dDMyX3QgLT4gcG9wcyB0aGUgbGFzdCBhcnJheSBmcm9tIHRoZSBvcGVuIHN0YWNrOwotICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZmlsbHMgaXQgd2l0aCB0aGUgbGFz
dCBsZW5ndGggZWxlbWVudHMgcHVzaGVkIG9uIHRoZSBkZXNlcmlhbGl6YXRpb24gc3RhY2sKICAg
ICBPYmplY3RUYWcgPSAneycsIC8vIG51bVByb3BlcnRpZXM6dWludDMyX3QgLT4gcG9wcyB0aGUg
bGFzdCBvYmplY3QgZnJvbSB0aGUgb3BlbiBzdGFjazsKICAgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbHMgaXQgd2l0aCB0aGUgbGFzdCBudW1Qcm9w
ZXJ0aWVzIG5hbWUsdmFsdWUgcGFpcnMgcHVzaGVkIG9udG8gdGhlIGRlc2VyaWFsaXphdGlvbiBz
dGFjawogICAgIFNwYXJzZUFycmF5VGFnID0gJ0AnLCAvLyBudW1Qcm9wZXJ0aWVzOnVpbnQzMl90
LCBsZW5ndGg6dWludDMyX3QgLT4gcG9wcyB0aGUgbGFzdCBvYmplY3QgZnJvbSB0aGUgb3BlbiBz
dGFjazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbGxzIGl0IHdpdGggdGhlIGxhc3QgbnVtUHJvcGVydGll
cyBuYW1lLHZhbHVlIHBhaXJzIHB1c2hlZCBvbnRvIHRoZSBkZXNlcmlhbGl6YXRpb24gc3RhY2sK
KyAgICBEZW5zZUFycmF5VGFnID0gJyQnLCAvLyBudW1Qcm9wZXJ0aWVzOnVpbnQzMl90LCBsZW5n
dGg6dWludDMyX3QgLT4gcG9wcyB0aGUgbGFzdCBvYmplY3QgZnJvbSB0aGUgb3BlbiBzdGFjazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbGxzIGl0IHdpdGggdGhlIGxhc3QgbGVuZ2h0IGVsZW1lbnRzIGFu
ZCBudW1Qcm9wZXJ0aWVzIG5hbWUsdmFsdWUgcGFpcnMgcHVzaGVkIG9udG8gZGVzZXJpYWxpemF0
aW9uIHN0YWNrCiAgICAgUmVnRXhwVGFnID0gJ1InLCAvLyBwYXR0ZXJuOlJhd1N0cmluZywgZmxh
Z3M6dWludDMyX3QgLT4gUmVnRXhwIChyZWYpCiAgICAgQXJyYXlCdWZmZXJUYWcgPSAnQicsIC8v
IGJ5dGVMZW5ndGg6dWludDMyX3QsIGRhdGE6Ynl0ZVtieXRlTGVuZ3RoXSAtPiBBcnJheUJ1ZmZl
ciAocmVmKQogICAgIEFycmF5QnVmZmVyVmlld1RhZyA9ICdWJywgLy8gc3VidGFnOmJ5dGUsIGJ5
dGVPZmZzZXQ6dWludDMyX3QsIGJ5dGVMZW5ndGg6dWludDMyX3QgLT4gQXJyYXlCdWZmZXJWaWV3
IChyZWYpLiBDb25zdW1lcyBhbiBBcnJheUJ1ZmZlciBmcm9tIHRoZSB0b3Agb2YgdGhlIGRlc2Vy
aWFsaXphdGlvbiBzdGFjay4KICAgICBPYmplY3RSZWZlcmVuY2VUYWcgPSAnXicsIC8vIHJlZjp1
aW50MzJfdCAtPiByZWZlcmVuY2UgdGFibGVbcmVmXQogICAgIEdlbmVyYXRlRnJlc2hPYmplY3RU
YWcgPSAnbycsIC8vIC0+IGVtcHR5IG9iamVjdCBhbGxvY2F0ZWQgYW4gb2JqZWN0IElEIGFuZCBw
dXNoZWQgb250byB0aGUgb3BlbiBzdGFjayAocmVmKQotICAgIEdlbmVyYXRlRnJlc2hBcnJheVRh
ZyA9ICdhJywgLy8gbGVuZ3RoOnVpbnQzMl90IC0+IGVtcHR5IGFycmF5W2xlbmd0aF0gYWxsb2Nh
dGVkIGFuIG9iamVjdCBJRCBhbmQgcHVzaGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikKKyAg
ICBHZW5lcmF0ZUZyZXNoU3BhcnNlQXJyYXlUYWcgPSAnYScsIC8vIGxlbmd0aDp1aW50MzJfdCAt
PiBlbXB0eSBhcnJheVtsZW5ndGhdIGFsbG9jYXRlZCBhbiBvYmplY3QgSUQgYW5kIHB1c2hlZCBv
bnRvIHRoZSBvcGVuIHN0YWNrIChyZWYpCisgICAgR2VuZXJhdGVGcmVzaERlbnNlQXJyYXlUYWcg
PSAnQScsIC8vIGxlbmd0aDp1aW50MzJfdCAtPiBlbXB0eSBhcnJheVtsZW5ndGhdIGFsbG9jYXRl
ZCBhbiBvYmplY3QgSUQgYW5kIHB1c2hlZCBvbnRvIHRoZSBvcGVuIHN0YWNrIChyZWYpCiAgICAg
UmVmZXJlbmNlQ291bnRUYWcgPSAnPycsIC8vIHJlZlRhYmxlU2l6ZTp1aW50MzJfdCAtPiBJZiB0
aGUgcmVmZXJlbmNlIHRhYmxlIGlzIG5vdCByZWZUYWJsZVNpemUgYmlnLCBmYWlscy4KICAgICBT
dHJpbmdPYmplY3RUYWcgPSAncycsIC8vICBzdHJpbmc6UmF3U3RyaW5nIC0+IG5ldyBTdHJpbmco
c3RyaW5nKSAocmVmKQogICAgIE51bWJlck9iamVjdFRhZyA9ICduJywgLy8gdmFsdWU6ZG91Ymxl
IC0+IG5ldyBOdW1iZXIodmFsdWUpIChyZWYpCkBAIC00MzcsMTIgKzQzOCw2IEBAIHB1YmxpYzoK
ICAgICAgICAgZG9Xcml0ZVVpbnQzMihpbmRleCk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUFy
cmF5KHVpbnQzMl90IGxlbmd0aCkKLSAgICB7Ci0gICAgICAgIGFwcGVuZChBcnJheVRhZyk7Ci0g
ICAgICAgIGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKLSAgICB9Ci0KICAgICB2b2lkIHdyaXRlT2Jq
ZWN0UmVmZXJlbmNlKHVpbnQzMl90IHJlZmVyZW5jZSkKICAgICB7CiAgICAgICAgIGFwcGVuZChP
YmplY3RSZWZlcmVuY2VUYWcpOwpAQCAtNDYyLDYgKzQ1NywxMyBAQCBwdWJsaWM6CiAgICAgICAg
IGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlRGVuc2VBcnJh
eSh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAg
ICBhcHBlbmQoRGVuc2VBcnJheVRhZyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIobnVtUHJvcGVy
dGllcyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKKyAgICB9CisKICAgICBWZWN0
b3I8QnVmZmVyVmFsdWVUeXBlPiYgZGF0YSgpCiAgICAgewogICAgICAgICBmaWxsSG9sZSgpOwpA
QCAtNDc5LDEyICs0ODEsMTkgQEAgcHVibGljOgogICAgICAgICBhcHBlbmQoR2VuZXJhdGVGcmVz
aE9iamVjdFRhZyk7CiAgICAgfQogCi0gICAgdm9pZCB3cml0ZUdlbmVyYXRlRnJlc2hBcnJheSh1
aW50MzJfdCBsZW5ndGgpCisgICAgdm9pZCB3cml0ZUdlbmVyYXRlRnJlc2hTcGFyc2VBcnJheSh1
aW50MzJfdCBsZW5ndGgpCiAgICAgewotICAgICAgICBhcHBlbmQoR2VuZXJhdGVGcmVzaEFycmF5
VGFnKTsKKyAgICAgICAgYXBwZW5kKEdlbmVyYXRlRnJlc2hTcGFyc2VBcnJheVRhZyk7CiAgICAg
ICAgIGRvV3JpdGVVaW50MzIobGVuZ3RoKTsKICAgICB9CiAKKyAgICB2b2lkIHdyaXRlR2VuZXJh
dGVGcmVzaERlbnNlQXJyYXkodWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgYXBwZW5k
KEdlbmVyYXRlRnJlc2hEZW5zZUFycmF5VGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5n
dGgpOworICAgIH0KKworCiBwcml2YXRlOgogICAgIHZvaWQgZG9Xcml0ZUFycmF5QnVmZmVyKGNv
bnN0IEFycmF5QnVmZmVyJiBhcnJheUJ1ZmZlcikKICAgICB7CkBAIC02MjIsMTIgKzYzMSw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKEpTRmFpbHVyZSwgc3RhdGUpOwog
ICAgIH0KIAotICAgIFN0YXRlQmFzZSogd3JpdGVBcnJheSh1aW50MzJfdCBsZW5ndGgsIFN0YXRl
QmFzZSogc3RhdGUpCi0gICAgewotICAgICAgICBtX3dyaXRlci53cml0ZUFycmF5KGxlbmd0aCk7
Ci0gICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOwotICAgIH0KLQogICAgIFN0YXRlQmFzZSogd3Jp
dGVPYmplY3QodWludDMyX3QgbnVtUHJvcGVydGllcywgU3RhdGVCYXNlKiBzdGF0ZSkKICAgICB7
CiAgICAgICAgIG1fd3JpdGVyLndyaXRlT2JqZWN0KG51bVByb3BlcnRpZXMpOwpAQCAtNjQwLDYg
KzY0MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBwb3Aoc3RhdGUpOwogICAgIH0KIAor
ICAgIFN0YXRlQmFzZSogd3JpdGVEZW5zZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVp
bnQzMl90IGxlbmd0aCwgU3RhdGVCYXNlKiBzdGF0ZSkKKyAgICB7CisgICAgICAgIG1fd3JpdGVy
LndyaXRlRGVuc2VBcnJheShudW1Qcm9wZXJ0aWVzLCBsZW5ndGgpOworICAgICAgICByZXR1cm4g
cG9wKHN0YXRlKTsKKyAgICB9CisKKwogcHJpdmF0ZToKICAgICBjbGFzcyBTdGF0ZUJhc2Ugewog
ICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGF0ZUJhc2UpOwpAQCAtNzAwLDM0ICs3MTAs
NiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfTsKIAotI2lmIDAKLSAgICAvLyBDdXJyZW50
bHkgdW51c2VkLCBzZWUgY29tbWVudCBpbiBuZXdBcnJheVN0YXRlLgotICAgIGNsYXNzIEFycmF5
U3RhdGUgOiBwdWJsaWMgU3RhdGU8djg6OkFycmF5PiB7Ci0gICAgcHVibGljOgotICAgICAgICBB
cnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0KQot
ICAgICAgICAgICAgOiBTdGF0ZTx2ODo6QXJyYXk+KGFycmF5LCBuZXh0KQotICAgICAgICAgICAg
LCBtX2luZGV4KC0xKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIFN0
YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJiBzZXJpYWxpemVyKQotICAgICAgICB7Ci0gICAg
ICAgICAgICArK21faW5kZXg7Ci0gICAgICAgICAgICBmb3IgKDsgbV9pbmRleCA8IGNvbXBvc2l0
ZSgpLT5MZW5ndGgoKTsgKyttX2luZGV4KSB7Ci0gICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlID0gY29tcG9zaXRlKCktPkdldChtX2luZGV4KTsKLSAgICAgICAgICAg
ICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuY2hlY2tFeGNlcHRpb24o
dGhpcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICAgICAgICAg
ICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUodmFs
dWUsIHRoaXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplci53cml0ZUFycmF5KGNvbXBvc2l0
ZSgpLT5MZW5ndGgoKSwgdGhpcyk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgfTsKLSNlbmRpZgotCiAgICAgY2xhc3MgQWJzdHJhY3RP
YmplY3RTdGF0ZSA6IHB1YmxpYyBTdGF0ZTx2ODo6T2JqZWN0PiB7CiAgICAgcHVibGljOgogICAg
ICAgICBBYnN0cmFjdE9iamVjdFN0YXRlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBT
dGF0ZUJhc2UqIG5leHQpCkBAIC03MzksMTYgKzcyMSwxNCBAQCBwcml2YXRlOgogICAgICAgICB7
CiAgICAgICAgIH0KIAotICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxp
emVyJiBzZXJpYWxpemVyKQorICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV4ZWNEZXB0aCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNTZXJpYWxpemluZ0FjY2Vzc29yID8gMSA6IDA7IH0KKworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUodW5zaWduZWQg
bnVtUHJvcGVydGllcywgU2VyaWFsaXplciYpID0gMDsKKworICAgICAgICBTdGF0ZUJhc2UqIHNl
cmlhbGl6ZVByb3BlcnRpZXMoYm9vbCBpZ25vcmVJbmRleGVkLCBTZXJpYWxpemVyJiBzZXJpYWxp
emVyKSAKICAgICAgICAgewogICAgICAgICAgICAgbV9pc1NlcmlhbGl6aW5nQWNjZXNzb3IgPSBm
YWxzZTsKLSAgICAgICAgICAgIGlmICghbV9pbmRleCkgewotICAgICAgICAgICAgICAgIG1fcHJv
cGVydHlOYW1lcyA9IGNvbXBvc2l0ZSgpLT5HZXRQcm9wZXJ0eU5hbWVzKCk7Ci0gICAgICAgICAg
ICAgICAgaWYgKFN0YXRlQmFzZSogbmV3U3RhdGUgPSBzZXJpYWxpemVyLmNoZWNrRXhjZXB0aW9u
KHRoaXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgICAgICAg
ICAgICAgaWYgKG1fcHJvcGVydHlOYW1lcy5Jc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
IHJldHVybiBzZXJpYWxpemVyLnJlcG9ydEZhaWx1cmUodGhpcyk7Ci0gICAgICAgICAgICB9CiAg
ICAgICAgICAgICB3aGlsZSAobV9pbmRleCA8IG1fcHJvcGVydHlOYW1lcy0+TGVuZ3RoKCkpIHsK
ICAgICAgICAgICAgICAgICBib29sIGlzQWNjZXNzb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1fbmFtZURvbmUpIHsKQEAgLTc2Niw3ICs3NDYsNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgICAgICBpc0FjY2Vzc29yID0gaGFzU3RyaW5nUHJvcGVydHkgJiYgY29tcG9zaXRl
KCktPkhhc1JlYWxOYW1lZENhbGxiYWNrUHJvcGVydHkocHJvcGVydHlOYW1lLkFzPHY4OjpTdHJp
bmc+KCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNl
cmlhbGl6ZXIuY2hlY2tFeGNlcHRpb24odGhpcykpCiAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbmV3U3RhdGU7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTdHJpbmdQcm9wZXJ0
eSB8fCBoYXNJbmRleGVkUHJvcGVydHkpCisgICAgICAgICAgICAgICAgICAgIGlmIChoYXNTdHJp
bmdQcm9wZXJ0eSB8fCAoaGFzSW5kZXhlZFByb3BlcnR5ICYmICFpZ25vcmVJbmRleGVkKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lOwogICAg
ICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICsrbV9pbmRl
eDsKQEAgLTc5OSwxMyArNzc5LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiBvYmpl
Y3REb25lKG1fbnVtU2VyaWFsaXplZFByb3BlcnRpZXMsIHNlcmlhbGl6ZXIpOwogICAgICAgICB9
CiAKLSAgICAgICAgdmlydHVhbCB1aW50MzJfdCBleGVjRGVwdGgoKSBjb25zdCB7IHJldHVybiBt
X2lzU2VyaWFsaXppbmdBY2Nlc3NvciA/IDEgOiAwOyB9Ci0KLSAgICBwcm90ZWN0ZWQ6Ci0gICAg
ICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25lKHVuc2lnbmVkIG51bVByb3BlcnRpZXMs
IFNlcmlhbGl6ZXImKSA9IDA7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IG1fcHJvcGVy
dHlOYW1lczsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IG1f
cHJvcGVydHlOYW1lczsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gbV9wcm9wZXJ0eU5h
bWU7CiAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtU2Vy
aWFsaXplZFByb3BlcnRpZXM7CkBAIC04MjIsNiArNzk4LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IHsKICAgICAgICAgfQogCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlh
bGl6ZXImIHNlcmlhbGl6ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Byb3BlcnR5
TmFtZXMuSXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gY29t
cG9zaXRlKCktPkdldFByb3BlcnR5TmFtZXMoKTsKKyAgICAgICAgICAgICAgICBpZiAoU3RhdGVC
YXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuY2hlY2tFeGNlcHRpb24odGhpcykpCisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9wcm9w
ZXJ0eU5hbWVzLklzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6
ZXIucmVwb3J0RmFpbHVyZSh0aGlzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biBzZXJpYWxpemVQcm9wZXJ0aWVzKGZhbHNlLCBzZXJpYWxpemVyKTsKKyAgICAgICAgfQorCiAg
ICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNp
Z25lZCBudW1Qcm9wZXJ0aWVzLCBTZXJpYWxpemVyJiBzZXJpYWxpemVyKQogICAgICAgICB7CkBA
IC04MjksMTEgKzgxNyw1MCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfTsKIAorICAgIGNs
YXNzIERlbnNlQXJyYXlTdGF0ZSA6IHB1YmxpYyBBYnN0cmFjdE9iamVjdFN0YXRlIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIERlbnNlQXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJy
YXksIHY4OjpIYW5kbGU8djg6OkFycmF5PiBwcm9wZXJ0eU5hbWVzLCBTdGF0ZUJhc2UqIG5leHQp
CisgICAgICAgICAgICA6IEFic3RyYWN0T2JqZWN0U3RhdGUoYXJyYXksIG5leHQpCisgICAgICAg
ICAgICAsIG1fYXJyYXlJbmRleCgwKQorICAgICAgICAgICAgLCBtX2FycmF5TGVuZ3RoKGFycmF5
LT5MZW5ndGgoKSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gdjg6
OkxvY2FsPHY4OjpBcnJheT46Ok5ldyhwcm9wZXJ0eU5hbWVzKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChtX2FycmF5SW5kZXggPCBtX2FycmF5TGVuZ3Ro
KSB7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gY29tcG9z
aXRlKCkuQXM8djg6OkFycmF5PigpLT5HZXQobV9hcnJheUluZGV4KTsKKyAgICAgICAgICAgICAg
ICBtX2FycmF5SW5kZXgrKzsKKyAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0
ZSA9IHNlcmlhbGl6ZXIuY2hlY2tFeGNlcHRpb24odGhpcykpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuZXdTdGF0ZTsKKyAgICAgICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0
ZSA9IHNlcmlhbGl6ZXIuZG9TZXJpYWxpemUodmFsdWUsIHRoaXMpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3U3RhdGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
c2VyaWFsaXplUHJvcGVydGllcyh0cnVlLCBzZXJpYWxpemVyKTsKKyAgICAgICAgfQorCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNpZ25l
ZCBudW1Qcm9wZXJ0aWVzLCBTZXJpYWxpemVyJiBzZXJpYWxpemVyKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc2VyaWFsaXplci53cml0ZURlbnNlQXJyYXkobnVtUHJvcGVydGllcywg
Y29tcG9zaXRlKCkuQXM8djg6OkFycmF5PigpLT5MZW5ndGgoKSwgdGhpcyk7CisgICAgICAgIH0K
KyAgICBwcml2YXRlOgorICAgICAgICB1aW50MzJfdCBtX2FycmF5SW5kZXg7CisgICAgICAgIHVp
bnQzMl90IG1fYXJyYXlMZW5ndGg7CisgICAgfTsKKwogICAgIGNsYXNzIFNwYXJzZUFycmF5U3Rh
dGUgOiBwdWJsaWMgQWJzdHJhY3RPYmplY3RTdGF0ZSB7CiAgICAgcHVibGljOgotICAgICAgICBT
cGFyc2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBu
ZXh0KQorICAgICAgICBTcGFyc2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJh
eSwgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnR5TmFtZXMsIFN0YXRlQmFzZSogbmV4dCkK
ICAgICAgICAgICAgIDogQWJzdHJhY3RPYmplY3RTdGF0ZShhcnJheSwgbmV4dCkKICAgICAgICAg
eworICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWVzID0gdjg6OkxvY2FsPHY4OjpBcnJheT46Ok5l
dyhwcm9wZXJ0eU5hbWVzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNl
KiBhZHZhbmNlKFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpIAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gc2VyaWFsaXplUHJvcGVydGllcyhmYWxzZSwgc2VyaWFsaXplcik7CiAgICAgICAg
IH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTk5NCwxNyArMTAyMSwzNiBAQCBwcml2YXRlOgogICAg
ICAgICBtX3dyaXRlci53cml0ZUFycmF5QnVmZmVyKCphcnJheUJ1ZmZlcik7CiAgICAgfQogCi0g
ICAgc3RhdGljIFN0YXRlQmFzZSogbmV3QXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4g
YXJyYXksIFN0YXRlQmFzZSogbmV4dCkKKyAgICBzdGF0aWMgYm9vbCBzZXJpYWxpemVEZW5zZWx5
KHVpbnQzMl90IGxlbmd0aCwgdWludDMyX3QgcHJvcGVydHlDb3VudCkgCiAgICAgewotICAgICAg
ICAvLyBGSVhNRTogdXNlIHBsYWluIEFycmF5IHN0YXRlIHdoZW4gd2UgY2FuIHF1aWNrbHkgY2hl
Y2sgdGhhdAotICAgICAgICAvLyBhbiBhcnJheSBpcyBub3Qgc3BhcnNlIGFuZCBoYXMgb25seSBp
bmRleGVkIHByb3BlcnRpZXMuCi0gICAgICAgIHJldHVybiBuZXcgU3BhcnNlQXJyYXlTdGF0ZShh
cnJheSwgbmV4dCk7CisgICAgICAgIC8vIExldCBLIGJlIHRoZSBjb3N0IG9mIHNlcmlhbGl6aW5n
IGFsbCBwcm9wZXJ0eSB2YWx1ZXMgdGhhdCBhcmUgdGhlcmUKKyAgICAgICAgLy8gQ29zdCBvZiBz
ZXJpYWxpemluZyBzcGFyc2VseTogNSpwcm9wZXJ0eUNvdW50ICsgSyAoNSBieXRlcyBwZXIgdWlu
dDMyX3Qga2V5KQorICAgICAgICAvLyBDb3N0IG9mIHNlcmlhbGl6aW5nIGRlbnNlbHk6IEsgKyAx
KihsZW5ndGggLSBwcm9wZXJ0eUNvdW50KSAoMSBieXRlIGZvciBhbGwgcHJvcGVydGllcyB0aGF0
IGFyZSBub3QgdGhlcmUpCisgICAgICAgIC8vIHNvIGRlbnNseSBpcyBiZXR0ZXIgdGhhbiBzcGFy
c2x5IHdoZW5ldmVyIDYqcHJvcGVydHlDb3VudCA+IGxlbmd0aAorICAgICAgICByZXR1cm4gNiAq
IHByb3BlcnR5Q291bnQgPj0gbGVuZ3RoOworICAgIH0KKworICAgIFN0YXRlQmFzZSogc3RhcnRB
cnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0KQor
ICAgIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnR5TmFtZXMgPSBhcnJh
eS0+R2V0UHJvcGVydHlOYW1lcygpOworICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9
IGNoZWNrRXhjZXB0aW9uKG5leHQpKQorICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAg
ICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+TGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKHNl
cmlhbGl6ZURlbnNlbHkobGVuZ3RoLCBwcm9wZXJ0eU5hbWVzLT5MZW5ndGgoKSkpIHsKKyAgICAg
ICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVzaERlbnNlQXJyYXkobGVuZ3RoKTsKKyAg
ICAgICAgICAgIHJldHVybiBwdXNoKG5ldyBEZW5zZUFycmF5U3RhdGUoYXJyYXksIHByb3BlcnR5
TmFtZXMsIG5leHQpKTsKKyAgICAgICAgfQorCisgICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJh
dGVGcmVzaFNwYXJzZUFycmF5KGxlbmd0aCk7CisgICAgICAgIHJldHVybiBwdXNoKG5ldyBTcGFy
c2VBcnJheVN0YXRlKGFycmF5LCBwcm9wZXJ0eU5hbWVzLCBuZXh0KSk7CiAgICAgfQogCi0gICAg
c3RhdGljIFN0YXRlQmFzZSogbmV3T2JqZWN0U3RhdGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBv
YmplY3QsIFN0YXRlQmFzZSogbmV4dCkKKyAgICBTdGF0ZUJhc2UqIHN0YXJ0T2JqZWN0U3RhdGUo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QsIFN0YXRlQmFzZSogbmV4dCkKICAgICB7Cisg
ICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVzaE9iamVjdCgpOwogICAgICAgICAvLyBG
SVhNRTogY2hlY2sgbm90IGEgd3JhcHBlcgotICAgICAgICByZXR1cm4gbmV3IE9iamVjdFN0YXRl
KG9iamVjdCwgbmV4dCk7CisgICAgICAgIHJldHVybiBwdXNoKG5ldyBPYmplY3RTdGF0ZShvYmpl
Y3QsIG5leHQpKTsKICAgICB9CiAKICAgICAvLyBNYXJrcyBvYmplY3QgYXMgaGF2aW5nIGJlZW4g
dmlzaXRlZCBieSB0aGUgc2VyaWFsaXplciBhbmQgYXNzaWducyBpdCBhIHVuaXF1ZSBvYmplY3Qg
cmVmZXJlbmNlIElELgpAQCAtMTA4Miw4ICsxMTI4LDcgQEAgU2VyaWFsaXplcjo6U3RhdGVCYXNl
KiBTZXJpYWxpemVyOjpkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0
YXQKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPklzQm9vbGVhbk9iamVjdCgpKQogICAgICAgICAg
ICAgd3JpdGVCb29sZWFuT2JqZWN0KHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUtPklz
QXJyYXkoKSkgewotICAgICAgICAgICAgbV93cml0ZXIud3JpdGVHZW5lcmF0ZUZyZXNoQXJyYXko
dmFsdWUuQXM8djg6OkFycmF5PigpLT5MZW5ndGgoKSk7Ci0gICAgICAgICAgICByZXR1cm4gcHVz
aChuZXdBcnJheVN0YXRlKHZhbHVlLkFzPHY4OjpBcnJheT4oKSwgbmV4dCkpOworICAgICAgICAg
ICAgcmV0dXJuIHB1c2goc3RhcnRBcnJheVN0YXRlKHZhbHVlLkFzPHY4OjpBcnJheT4oKSwgbmV4
dCkpOwogICAgICAgICB9IGVsc2UgaWYgKFY4RmlsZTo6SGFzSW5zdGFuY2UodmFsdWUpKQogICAg
ICAgICAgICAgd3JpdGVGaWxlKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoVjhCbG9iOjpIYXNJ
bnN0YW5jZSh2YWx1ZSkpCkBAIC0xMDk5LDggKzExNDQsNyBAQCBTZXJpYWxpemVyOjpTdGF0ZUJh
c2UqIFNlcmlhbGl6ZXI6OmRvU2VyaWFsaXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwg
U3RhdAogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNPYmplY3QoKSkgewogICAgICAgICAgICAg
aWYgKGlzSG9zdE9iamVjdChqc09iamVjdCkgfHwganNPYmplY3QtPklzQ2FsbGFibGUoKSB8fCB2
YWx1ZS0+SXNOYXRpdmVFcnJvcigpKQogICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJv
cihEYXRhQ2xvbmVFcnJvciwgbmV4dCk7Ci0gICAgICAgICAgICBtX3dyaXRlci53cml0ZUdlbmVy
YXRlRnJlc2hPYmplY3QoKTsKLSAgICAgICAgICAgIHJldHVybiBwdXNoKG5ld09iamVjdFN0YXRl
KGpzT2JqZWN0LCBuZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhcnRPYmplY3RTdGF0ZShq
c09iamVjdCwgbmV4dCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIGhhbmRs
ZUVycm9yKERhdGFDbG9uZUVycm9yLCBuZXh0KTsKICAgICB9CkBAIC0xMTE3LDExICsxMTYxLDEx
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcHVzaE9iamVjdFJlZmVyZW5jZShjb25zdCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4mKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHRyeUdldE9iamVj
dEZyb21PYmplY3RSZWZlcmVuY2UodWludDMyX3QgcmVmZXJlbmNlLCB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4qKSA9IDA7CiAgICAgdmlydHVhbCBib29sIHRyeUdldFRyYW5zZmVycmVkTWVzc2FnZVBv
cnQodWludDMyX3QgaW5kZXgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgbmV3QXJyYXkodWludDMyX3QgbGVuZ3RoKSA9IDA7CisgICAgdmlydHVhbCBib29s
IG5ld1NwYXJzZUFycmF5KHVpbnQzMl90IGxlbmd0aCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBu
ZXdPYmplY3QoKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNvbXBsZXRlQXJyYXkodWludDMyX3Qg
bGVuZ3RoLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7CiAgICAgdmlydHVhbCBib29sIGNv
bXBsZXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiopID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVTcGFyc2VBcnJheSh1aW50MzJfdCBu
dW1Qcm9wZXJ0aWVzLCB1aW50MzJfdCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVEZW5zZUFycmF5KHVpbnQzMl90IG51bVByb3Bl
cnRpZXMsIHVpbnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOwogfTsK
IAogLy8gUmVhZGVyIGlzIHJlc3BvbnNpYmxlIGZvciBkZXNlcmlhbGl6aW5nIHByaW1pdGl2ZSB0
eXBlcyBhbmQKQEAgLTEyMzQsMTUgKzEyNzgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBjcmVh
dG9yLnB1c2hPYmplY3RSZWZlcmVuY2UoKnZhbHVlKTsKICAgICAgICAgICAgIGJyZWFrOwogCi0g
ICAgICAgIGNhc2UgQXJyYXlUYWc6IHsKLSAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKLSAg
ICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIGlmICghY3JlYXRvci5jb21wbGV0ZUFycmF5KGxlbmd0
aCwgdmFsdWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgUmVnRXhwVGFnOgorICAgICAgIGNhc2UgUmVn
RXhwVGFnOgogICAgICAgICAgICAgaWYgKCFyZWFkUmVnRXhwKHZhbHVlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjcmVhdG9yLnB1c2hPYmplY3RSZWZlcmVu
Y2UoKnZhbHVlKTsKQEAgLTEyNjYsNiArMTMwMiwxNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKyAgICAgICAg
Y2FzZSBEZW5zZUFycmF5VGFnOiB7CisgICAgICAgICAgICB1aW50MzJfdCBudW1Qcm9wZXJ0aWVz
OworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAgICAgICAgaWYgKCFkb1JlYWRV
aW50MzIoJm51bVByb3BlcnRpZXMpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY3JlYXRvci5jb21wbGV0ZURlbnNlQXJyYXko
bnVtUHJvcGVydGllcywgbGVuZ3RoLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBBcnJheUJ1
ZmZlclZpZXdUYWc6IHsKICAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjg5LDEzICsxMzM2LDIzIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIEdlbmVyYXRlRnJlc2hBcnJheVRhZzogeworICAgICAgICBj
YXNlIEdlbmVyYXRlRnJlc2hTcGFyc2VBcnJheVRhZzogeworICAgICAgICAgICAgaWYgKG1fdmVy
c2lvbiA8PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHVp
bnQzMl90IGxlbmd0aDsKKyAgICAgICAgICAgIGlmICghZG9SZWFkVWludDMyKCZsZW5ndGgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGlmICghY3JlYXRvci5u
ZXdTcGFyc2VBcnJheShsZW5ndGgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIGNhc2UgR2VuZXJhdGVG
cmVzaERlbnNlQXJyYXlUYWc6IHsKICAgICAgICAgICAgIGlmIChtX3ZlcnNpb24gPD0gMCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGg7
CiAgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbGVuZ3RoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIWNyZWF0b3IubmV3QXJyYXkobGVuZ3Ro
KSkKKyAgICAgICAgICAgIGlmICghY3JlYXRvci5uZXdTcGFyc2VBcnJheShsZW5ndGgpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICB9CkBAIC0xNzA3LDExICsxNzY0LDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBuZXdBcnJheSh1aW50MzJfdCBsZW5ndGgp
CisgICAgdmlydHVhbCBib29sIG5ld1NwYXJzZUFycmF5KHVpbnQzMl90KQogICAgIHsKLSAgICAg
ICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwot
ICAgICAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9IHY4OjpBcnJheTo6TmV3KDApOwog
ICAgICAgICBvcGVuQ29tcG9zaXRlKGFycmF5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQpAQCAtMTc4MSwxMiArMTgzNiwzNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgYXJyYXkgPSBjb21wb3NpdGUuQXM8djg6OkFycmF5PigpOwog
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGFycmF5ID0gdjg6OkFycmF5OjpOZXcobGVuZ3Ro
KTsKKyAgICAgICAgICAgIGFycmF5ID0gdjg6OkFycmF5OjpOZXcoKTsKICAgICAgICAgaWYgKGFy
cmF5LklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJu
IGluaXRpYWxpemVPYmplY3QoYXJyYXksIG51bVByb3BlcnRpZXMsIHZhbHVlKTsKICAgICB9CiAK
KyAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVEZW5zZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRp
ZXMsIHVpbnQzMl90IGxlbmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IGFycmF5OworICAgICAgICBpZiAobV92ZXJz
aW9uID4gMCkgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gY29tcG9zaXRlOwor
ICAgICAgICAgICAgaWYgKCFjbG9zZUNvbXBvc2l0ZSgmY29tcG9zaXRlKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBhcnJheSA9IGNvbXBvc2l0ZS5Bczx2ODo6
QXJyYXk+KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgYXJyYXkgPSB2ODo6QXJyYXk6
Ok5ldyhsZW5ndGgpOworICAgICAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIWluaXRpYWxpemVPYmplY3QoYXJyYXksIG51bVBy
b3BlcnRpZXMsIHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KGxlbmd0aCA+IHN0YWNrRGVwdGgoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMCwgc3RhY2tQb3MgPSBzdGFja0RlcHRoKCkgLSBsZW5ndGg7
IGkgPCBsZW5ndGg7IGkrKywgc3RhY2tQb3MrKykgeworICAgICAgICAgICAgdjg6OkxvY2FsPHY4
OjpWYWx1ZT4gZWxlbSA9IGVsZW1lbnQoc3RhY2tQb3MpOworICAgICAgICAgICAgaWYgKCFlbGVt
LT5Jc1VuZGVmaW5lZCgpKQorICAgICAgICAgICAgICAgIGFycmF5LT5TZXQoaSwgZWxlbSk7Cisg
ICAgICAgIH0KKyAgICAgICAgcG9wKGxlbmd0aCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwdXNoT2JqZWN0UmVmZXJlbmNlKGNvbnN0IHY4OjpIYW5k
bGU8djg6OlZhbHVlPiYgb2JqZWN0KQogICAgIHsKICAgICAgICAgbV9vYmplY3RQb29sLmFwcGVu
ZChvYmplY3QpOwo=
</data>
<flag name="review"
          id="113557"
          type_id="1"
          status="-"
          setter="levin"
    />
    <flag name="commit-queue"
          id="113583"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115073</attachid>
            <date>2011-11-14 17:35:04 -0800</date>
            <delta_ts>2011-11-14 19:00:48 -0800</delta_ts>
            <desc>Tests fixed</desc>
            <filename>72198.patch</filename>
            <type>text/plain</type>
            <size>24724</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZTAwNjJmLi45OGY2NTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTEt
MTEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBbVjhdW0No
cm9taXVtXVNlcmlhbGl6ZSBkZW5zZSBhcnJheXMgZGVuc2x5LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVz
dHMvcG9zdG1lc3NhZ2UtY2xvbmUuanM6CisgICAgICAgICogZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wb3N0bWVzc2FnZS1hcnJheXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMS0xNCAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IG1lZGlhL3RyYWNrL3RyYWNrLWN1ZXMtY3VlY2hhbmdlLmh0bWwgaXMgZmxha3kKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVzdHMvcG9zdG1lc3NhZ2Ut
Y2xvbmUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvc2NyaXB0LXRlc3RzL3Bvc3Rt
ZXNzYWdlLWNsb25lLmpzCmluZGV4IDQ4MGYxZWUuLjQ0MzkyNTQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVzdHMvcG9zdG1lc3NhZ2UtY2xvbmUuanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3NjcmlwdC10ZXN0cy9wb3N0bWVzc2Fn
ZS1jbG9uZS5qcwpAQCAtOTcsNyArOTcsNyBAQCB0cnlQb3N0TWVzc2FnZSh0aHVuaygKICAgICAg
ICAgJ2FbMV0gPSBiOyAnICsKICAgICAgICAgJ3JldHVybiBhOycKICAgICApLCBmYWxzZSwgImV2
YWxUaHVuayIsIGZ1bmN0aW9uKHYpIHsKLSAgICAgICAgZG9QYXNzRmFpbCh2Lmxlbmd0aCA9PT0g
MywgImxlbmd0aCBjb3JyZWN0Iik7IC8vIHVuZGVmaW5lZAorICAgICAgICBkb1Bhc3NGYWlsKHYu
bGVuZ3RoID09PSAzIHx8IHYubGVuZ3RoID09PSAyLCAibGVuZ3RoIGNvcnJlY3QiKTsgLy8gdW5k
ZWZpbmVkCiAgICAgICAgIGRvUGFzc0ZhaWwodlswXSA9PT0gMCwgImluZGV4IDAgT0siKTsgLy8g
bWFuZGF0b3J5CiAgICAgICAgIGRvUGFzc0ZhaWwodlsxXS54ID09PSA0MSwgImFjY2Vzc29yIHJl
YWNoZWQiKTsgLy8gbWFuZGF0b3J5CiAgICAgICAgIGRvUGFzc0ZhaWwodlsyXSA9PT0gdW5kZWZp
bmVkLCAiaW5kZXggMiB1bmRlZmluZWQiKTsgLy8gdW5kZWZpbmVkCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFy
cmF5cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgy
YjFmYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcG9zdG1lc3NhZ2UtYXJyYXlzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMwIEBACitQQVNT
OiBpID0gMjkKK1BBU1M6IGkgPSAyOAorUEFTUzogaSA9IDI3CitQQVNTOiBpID0gMjYKK1BBU1M6
IGkgPSAyNQorUEFTUzogaSA9IDI0CitQQVNTOiBpID0gMjMKK1BBU1M6IGkgPSAyMgorUEFTUzog
aSA9IDIxCitQQVNTOiBpID0gMjAKK1BBU1M6IGkgPSAxOQorUEFTUzogaSA9IDE4CitQQVNTOiBp
ID0gMTcKK1BBU1M6IGkgPSAxNgorUEFTUzogaSA9IDE1CitQQVNTOiBpID0gMTQKK1BBU1M6IGkg
PSAxMworUEFTUzogaSA9IDEyCitQQVNTOiBpID0gMTEKK1BBU1M6IGkgPSAxMAorUEFTUzogaSA9
IDkKK1BBU1M6IGkgPSA4CitQQVNTOiBpID0gNworUEFTUzogaSA9IDYKK1BBU1M6IGkgPSA1CitQ
QVNTOiBpID0gNAorUEFTUzogaSA9IDMKK1BBU1M6IGkgPSAyCitQQVNTOiBpID0gMQorRG9uZS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3Nh
Z2UtYXJyYXlzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3Rt
ZXNzYWdlLWFycmF5cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYx
MzE4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sPgorPGhl
YWQvPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiIvPgorPGRpdiBpZD0iY29uc29sZSIv
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIik7Cit2YXIgbWF4Q291bnQgPSAzMDsKKworZnVuY3Rpb24gcmVjaWV2ZU1l
c3NhZ2UoZXZ0KSB7CisgICAgdHJ5IHsKKyAgICAgIHZhciBkYXRhID0gZXZ0LmRhdGE7CisgICAg
ICBpZiAoZGF0YS5pID09IDApIHsKKyAgICAgICAgICBjb25zb2xlLmlubmVySFRNTCArPSAiRG9u
ZS4iCisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgICAg
ZWxzZSB7CisgICAgICAgICAgaWYgKGRhdGEuaSA8IG1heENvdW50KSB7CisgICAgICAgICAgICAg
IHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGRhdGEuaTsg
aiA8IG1heENvdW50OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNz
ICYmIGRhdGEuYVtqXSA9PSBqOworICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYVtqXSAhPSBq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIkZhaWx1cmU6
IGRhdGEuaSA9ICIgKyBkYXRhLmkgKyAiIGogPSAiICsgaiArICIgZGF0YS5hW2pdID0gIiArIGRh
dGEuYVtqXSArICI8YnI+IjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoZGF0YS5hLmZv
b2JhciAhPSAiRm9vQmFyIikKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgaWYgKGRhdGEuYS5sZW5ndGggIT0gbWF4Q291bnQpIHsKKyAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJI
VE1MICs9ICJGQUlMOiBpID0gIiArIGRhdGEuaSArICIgbGVuZ3RoID0gIiArIGRhdGEuYS5sZW5n
dGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmlubmVySFRNTCArPSAiUEFTUzogaSA9ICIgKyBkYXRhLmkgKyAi
PGJyPiI7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5u
ZXJIVE1MICs9ICJGQUlMOiBpID0gIiArIGRhdGEuaSArICIgYXJyYXk6ICIgKyBKU09OLnN0cmlu
Z2lmeShkYXRhLmEpICsgIjxicj4iOworICAgICAgICAgIH0KKyAgICAgICAgICB2YXIgYSA9IFtd
OworICAgICAgICAgIGZvciAodmFyIGogPSBkYXRhLmkgLSAxOyBqIDwgbWF4Q291bnQ7IGorKykg
eworICAgICAgICAgICAgICBhW2pdID0gajsKKyAgICAgICAgICB9OworICAgICAgICAgIGEuZm9v
YmFyID0gIkZvb0JhciI7CisgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHtpOmRhdGEuaSAt
IDEsIGE6YX0sICcqJyk7CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBjb25z
b2xlLmlubmVySFRNTCArPSAiRXhjZXB0aW9uICIgKyBlICsgIjxicj4iOworICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgcmVjaWV2ZU1lc3NhZ2UsIGZhbHNlKTsKKword2luZG93LnBvc3RNZXNzYWdlKHtp
Om1heENvdW50fSwgJyonKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGFmM2M0NjMuLjJjZWYzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0x
MS0xMSAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAg
ICAgW1Y4XVtDaHJvbWl1bV1TZXJpYWxpemUgZGVuc2UgYXJyYXlzIGRlbnNseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTgKKyAgICAgICAgVGhp
cyBwYXRjaCBlbnN1cmVzIHRoYXQ6CisgICAgICAgIC0gRGVuc2UgYXJyYXlzIGFyZSBzZXJpYWxp
emVkIGRlbnNseSwgYW5kIG5vdCBhcyBuYW1lLXZhbHVlIHBhaXJzCisgICAgICAgIC0gU3BhcnNl
IGFycmF5cyBhcmUgYWxsb2NhdGVkIGFzIHNwYXJzZSBvbiBkZXNlcmlhbGl6YXRpb24uCisgICAg
ICAgIFRoZSBjcml0ZXJpYSB0byBjaG9vc2Ugd2hldGhlciB0byBzZXJpYWxpemUgZGVuc2x5IG9y
IHNwYXJzZWx5IGlzIHRoZSBzaXplCisgICAgICAgIG9mIGEgcmVzdWx0aW5nIHNlcmlhbGl6ZWQg
c3RyZWFtLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0bWwKKwor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOE9iamVjdE1hcDo6V3JpdGVyOjp3cml0ZURlbnNlQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3JpdGVHZW5lcmF0ZUZyZXNoU3BhcnNl
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3JpdGVHZW5l
cmF0ZUZyZXNoRGVuc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2Vy
aWFsaXplcjo6d3JpdGVEZW5zZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFw
OjpTZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjpleGVjRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OkFic3RyYWN0T2JqZWN0U3RhdGU6OnNl
cmlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlh
bGl6ZXI6Ok9iamVjdFN0YXRlOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0
TWFwOjpTZXJpYWxpemVyOjpEZW5zZUFycmF5U3RhdGU6OkRlbnNlQXJyYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6RGVuc2VBcnJheVN0YXRlOjph
ZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpEZW5z
ZUFycmF5U3RhdGU6Om9iamVjdERvbmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OlNwYXJzZUFycmF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OmFk
dmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZURlbnNlbHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6
OnN0YXJ0QXJyYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFs
aXplcjo6c3RhcnRPYmplY3RTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6
U2VyaWFsaXplcjo6ZG9TZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlJlYWRlcjo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVzZXJpYWxp
emVyOjpuZXdTcGFyc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVz
ZXJpYWxpemVyOjpjb21wbGV0ZVNwYXJzZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2Jq
ZWN0TWFwOjpEZXNlcmlhbGl6ZXI6OmNvbXBsZXRlRGVuc2VBcnJheSk6CisKIDIwMTEtMTEtMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNvbnNvbGUncyBwcm90b2NvbCBwYXlsb2FkIGRvZXMgbm90IGhhdmUgdXJsIGFuZCBs
aW5lIHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5YmFlOTA4Li5hNDJkY2MxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
QEAgLTE4OSwxOCArMTg5LDE5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgRmlsZVRh
ZyA9ICdmJywgLy8gZmlsZTpSYXdGaWxlIC0+IEZpbGUgKHJlZikKICAgICBGaWxlTGlzdFRhZyA9
ICdsJywgLy8gbGVuZ3RoOnVpbnQzMl90LCBmaWxlczpSYXdGaWxlW2xlbmd0aF0gLT4gRmlsZUxp
c3QgKHJlZikKICAgICBJbWFnZURhdGFUYWcgPSAnIycsIC8vIHdpZHRoOnVpbnQzMl90LCBoZWln
aHQ6dWludDMyX3QsIHBpeGVsRGF0YUxlbmd0aDp1aW50MzJfdCwgZGF0YTpieXRlW3BpeGVsRGF0
YUxlbmd0aF0gLT4gSW1hZ2VEYXRhIChyZWYpCi0gICAgQXJyYXlUYWcgPSAnWycsIC8vIGxlbmd0
aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IGFycmF5IGZyb20gdGhlIG9wZW4gc3RhY2s7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBmaWxscyBpdCB3aXRoIHRo
ZSBsYXN0IGxlbmd0aCBlbGVtZW50cyBwdXNoZWQgb24gdGhlIGRlc2VyaWFsaXphdGlvbiBzdGFj
awogICAgIE9iamVjdFRhZyA9ICd7JywgLy8gbnVtUHJvcGVydGllczp1aW50MzJfdCAtPiBwb3Bz
IHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBvcGVuIHN0YWNrOwogICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxscyBpdCB3aXRoIHRoZSBsYXN0IG51
bVByb3BlcnRpZXMgbmFtZSx2YWx1ZSBwYWlycyBwdXNoZWQgb250byB0aGUgZGVzZXJpYWxpemF0
aW9uIHN0YWNrCiAgICAgU3BhcnNlQXJyYXlUYWcgPSAnQCcsIC8vIG51bVByb3BlcnRpZXM6dWlu
dDMyX3QsIGxlbmd0aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBv
cGVuIHN0YWNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbHMgaXQgd2l0aCB0aGUgbGFzdCBudW1Qcm9w
ZXJ0aWVzIG5hbWUsdmFsdWUgcGFpcnMgcHVzaGVkIG9udG8gdGhlIGRlc2VyaWFsaXphdGlvbiBz
dGFjaworICAgIERlbnNlQXJyYXlUYWcgPSAnJCcsIC8vIG51bVByb3BlcnRpZXM6dWludDMyX3Qs
IGxlbmd0aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBvcGVuIHN0
YWNrOworICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsbHMgaXQgd2l0aCB0aGUgbGFzdCBsZW5naHQgZWxlbWVu
dHMgYW5kIG51bVByb3BlcnRpZXMgbmFtZSx2YWx1ZSBwYWlycyBwdXNoZWQgb250byBkZXNlcmlh
bGl6YXRpb24gc3RhY2sKICAgICBSZWdFeHBUYWcgPSAnUicsIC8vIHBhdHRlcm46UmF3U3RyaW5n
LCBmbGFnczp1aW50MzJfdCAtPiBSZWdFeHAgKHJlZikKICAgICBBcnJheUJ1ZmZlclRhZyA9ICdC
JywgLy8gYnl0ZUxlbmd0aDp1aW50MzJfdCwgZGF0YTpieXRlW2J5dGVMZW5ndGhdIC0+IEFycmF5
QnVmZmVyIChyZWYpCiAgICAgQXJyYXlCdWZmZXJWaWV3VGFnID0gJ1YnLCAvLyBzdWJ0YWc6Ynl0
ZSwgYnl0ZU9mZnNldDp1aW50MzJfdCwgYnl0ZUxlbmd0aDp1aW50MzJfdCAtPiBBcnJheUJ1ZmZl
clZpZXcgKHJlZikuIENvbnN1bWVzIGFuIEFycmF5QnVmZmVyIGZyb20gdGhlIHRvcCBvZiB0aGUg
ZGVzZXJpYWxpemF0aW9uIHN0YWNrLgogICAgIE9iamVjdFJlZmVyZW5jZVRhZyA9ICdeJywgLy8g
cmVmOnVpbnQzMl90IC0+IHJlZmVyZW5jZSB0YWJsZVtyZWZdCiAgICAgR2VuZXJhdGVGcmVzaE9i
amVjdFRhZyA9ICdvJywgLy8gLT4gZW1wdHkgb2JqZWN0IGFsbG9jYXRlZCBhbiBvYmplY3QgSUQg
YW5kIHB1c2hlZCBvbnRvIHRoZSBvcGVuIHN0YWNrIChyZWYpCi0gICAgR2VuZXJhdGVGcmVzaEFy
cmF5VGFnID0gJ2EnLCAvLyBsZW5ndGg6dWludDMyX3QgLT4gZW1wdHkgYXJyYXlbbGVuZ3RoXSBh
bGxvY2F0ZWQgYW4gb2JqZWN0IElEIGFuZCBwdXNoZWQgb250byB0aGUgb3BlbiBzdGFjayAocmVm
KQorICAgIEdlbmVyYXRlRnJlc2hTcGFyc2VBcnJheVRhZyA9ICdhJywgLy8gbGVuZ3RoOnVpbnQz
Ml90IC0+IGVtcHR5IGFycmF5W2xlbmd0aF0gYWxsb2NhdGVkIGFuIG9iamVjdCBJRCBhbmQgcHVz
aGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikKKyAgICBHZW5lcmF0ZUZyZXNoRGVuc2VBcnJh
eVRhZyA9ICdBJywgLy8gbGVuZ3RoOnVpbnQzMl90IC0+IGVtcHR5IGFycmF5W2xlbmd0aF0gYWxs
b2NhdGVkIGFuIG9iamVjdCBJRCBhbmQgcHVzaGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikK
ICAgICBSZWZlcmVuY2VDb3VudFRhZyA9ICc/JywgLy8gcmVmVGFibGVTaXplOnVpbnQzMl90IC0+
IElmIHRoZSByZWZlcmVuY2UgdGFibGUgaXMgbm90IHJlZlRhYmxlU2l6ZSBiaWcsIGZhaWxzLgog
ICAgIFN0cmluZ09iamVjdFRhZyA9ICdzJywgLy8gIHN0cmluZzpSYXdTdHJpbmcgLT4gbmV3IFN0
cmluZyhzdHJpbmcpIChyZWYpCiAgICAgTnVtYmVyT2JqZWN0VGFnID0gJ24nLCAvLyB2YWx1ZTpk
b3VibGUgLT4gbmV3IE51bWJlcih2YWx1ZSkgKHJlZikKQEAgLTQzNywxMiArNDM4LDYgQEAgcHVi
bGljOgogICAgICAgICBkb1dyaXRlVWludDMyKGluZGV4KTsKICAgICB9CiAKLSAgICB2b2lkIHdy
aXRlQXJyYXkodWludDMyX3QgbGVuZ3RoKQotICAgIHsKLSAgICAgICAgYXBwZW5kKEFycmF5VGFn
KTsKLSAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwotICAgIH0KLQogICAgIHZvaWQgd3Jp
dGVPYmplY3RSZWZlcmVuY2UodWludDMyX3QgcmVmZXJlbmNlKQogICAgIHsKICAgICAgICAgYXBw
ZW5kKE9iamVjdFJlZmVyZW5jZVRhZyk7CkBAIC00NjIsNiArNDU3LDEzIEBAIHB1YmxpYzoKICAg
ICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwogICAgIH0KIAorICAgIHZvaWQgd3JpdGVEZW5z
ZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0aCkKKyAgICB7Cisg
ICAgICAgIGFwcGVuZChEZW5zZUFycmF5VGFnKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihudW1Q
cm9wZXJ0aWVzKTsKKyAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOworICAgIH0KKwogICAg
IFZlY3RvcjxCdWZmZXJWYWx1ZVR5cGU+JiBkYXRhKCkKICAgICB7CiAgICAgICAgIGZpbGxIb2xl
KCk7CkBAIC00NzksMTIgKzQ4MSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIGFwcGVuZChHZW5lcmF0
ZUZyZXNoT2JqZWN0VGFnKTsKICAgICB9CiAKLSAgICB2b2lkIHdyaXRlR2VuZXJhdGVGcmVzaEFy
cmF5KHVpbnQzMl90IGxlbmd0aCkKKyAgICB2b2lkIHdyaXRlR2VuZXJhdGVGcmVzaFNwYXJzZUFy
cmF5KHVpbnQzMl90IGxlbmd0aCkKICAgICB7Ci0gICAgICAgIGFwcGVuZChHZW5lcmF0ZUZyZXNo
QXJyYXlUYWcpOworICAgICAgICBhcHBlbmQoR2VuZXJhdGVGcmVzaFNwYXJzZUFycmF5VGFnKTsK
ICAgICAgICAgZG9Xcml0ZVVpbnQzMihsZW5ndGgpOwogICAgIH0KIAorICAgIHZvaWQgd3JpdGVH
ZW5lcmF0ZUZyZXNoRGVuc2VBcnJheSh1aW50MzJfdCBsZW5ndGgpCisgICAgeworICAgICAgICBh
cHBlbmQoR2VuZXJhdGVGcmVzaERlbnNlQXJyYXlUYWcpOworICAgICAgICBkb1dyaXRlVWludDMy
KGxlbmd0aCk7CisgICAgfQorCisKIHByaXZhdGU6CiAgICAgdm9pZCBkb1dyaXRlQXJyYXlCdWZm
ZXIoY29uc3QgQXJyYXlCdWZmZXImIGFycmF5QnVmZmVyKQogICAgIHsKQEAgLTYyMiwxMiArNjMx
LDYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoSlNGYWlsdXJlLCBzdGF0
ZSk7CiAgICAgfQogCi0gICAgU3RhdGVCYXNlKiB3cml0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwg
U3RhdGVCYXNlKiBzdGF0ZSkKLSAgICB7Ci0gICAgICAgIG1fd3JpdGVyLndyaXRlQXJyYXkobGVu
Z3RoKTsKLSAgICAgICAgcmV0dXJuIHBvcChzdGF0ZSk7Ci0gICAgfQotCiAgICAgU3RhdGVCYXNl
KiB3cml0ZU9iamVjdCh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCBTdGF0ZUJhc2UqIHN0YXRlKQog
ICAgIHsKICAgICAgICAgbV93cml0ZXIud3JpdGVPYmplY3QobnVtUHJvcGVydGllcyk7CkBAIC02
NDAsNiArNjQzLDEzIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHBvcChzdGF0ZSk7CiAgICAg
fQogCisgICAgU3RhdGVCYXNlKiB3cml0ZURlbnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGll
cywgdWludDMyX3QgbGVuZ3RoLCBTdGF0ZUJhc2UqIHN0YXRlKQorICAgIHsKKyAgICAgICAgbV93
cml0ZXIud3JpdGVEZW5zZUFycmF5KG51bVByb3BlcnRpZXMsIGxlbmd0aCk7CisgICAgICAgIHJl
dHVybiBwb3Aoc3RhdGUpOworICAgIH0KKworCiBwcml2YXRlOgogICAgIGNsYXNzIFN0YXRlQmFz
ZSB7CiAgICAgICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YXRlQmFzZSk7CkBAIC03MDAsMzQg
KzcxMCw2IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9OwogCi0jaWYgMAotICAgIC8vIEN1
cnJlbnRseSB1bnVzZWQsIHNlZSBjb21tZW50IGluIG5ld0FycmF5U3RhdGUuCi0gICAgY2xhc3Mg
QXJyYXlTdGF0ZSA6IHB1YmxpYyBTdGF0ZTx2ODo6QXJyYXk+IHsKLSAgICBwdWJsaWM6Ci0gICAg
ICAgIEFycmF5U3RhdGUodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5LCBTdGF0ZUJhc2UqIG5l
eHQpCi0gICAgICAgICAgICA6IFN0YXRlPHY4OjpBcnJheT4oYXJyYXksIG5leHQpCi0gICAgICAg
ICAgICAsIG1faW5kZXgoLTEpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1
YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCi0gICAgICAgIHsK
LSAgICAgICAgICAgICsrbV9pbmRleDsKLSAgICAgICAgICAgIGZvciAoOyBtX2luZGV4IDwgY29t
cG9zaXRlKCktPkxlbmd0aCgpOyArK21faW5kZXgpIHsKLSAgICAgICAgICAgICAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBjb21wb3NpdGUoKS0+R2V0KG1faW5kZXgpOwotICAgICAg
ICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5jaGVja0V4Y2Vw
dGlvbih0aGlzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwotICAgICAg
ICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5kb1NlcmlhbGl6
ZSh2YWx1ZSwgdGhpcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlQXJyYXkoY29t
cG9zaXRlKCktPkxlbmd0aCgpLCB0aGlzKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICB9OwotI2VuZGlmCi0KICAgICBjbGFzcyBBYnN0
cmFjdE9iamVjdFN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpPYmplY3Q+IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIEFic3RyYWN0T2JqZWN0U3RhdGUodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmpl
Y3QsIFN0YXRlQmFzZSogbmV4dCkKQEAgLTczOSwxNiArNzIxLDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgIHsKICAgICAgICAgfQogCi0gICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNl
cmlhbGl6ZXImIHNlcmlhbGl6ZXIpCisgICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXhlY0RlcHRo
KCkgY29uc3QgeyByZXR1cm4gbV9pc1NlcmlhbGl6aW5nQWNjZXNzb3IgPyAxIDogMDsgfQorCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNp
Z25lZCBudW1Qcm9wZXJ0aWVzLCBTZXJpYWxpemVyJikgPSAwOworCisgICAgICAgIFN0YXRlQmFz
ZSogc2VyaWFsaXplUHJvcGVydGllcyhib29sIGlnbm9yZUluZGV4ZWQsIFNlcmlhbGl6ZXImIHNl
cmlhbGl6ZXIpIAogICAgICAgICB7CiAgICAgICAgICAgICBtX2lzU2VyaWFsaXppbmdBY2Nlc3Nv
ciA9IGZhbHNlOwotICAgICAgICAgICAgaWYgKCFtX2luZGV4KSB7Ci0gICAgICAgICAgICAgICAg
bV9wcm9wZXJ0eU5hbWVzID0gY29tcG9zaXRlKCktPkdldFByb3BlcnR5TmFtZXMoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoU3RhdGVCYXNlKiBuZXdTdGF0ZSA9IHNlcmlhbGl6ZXIuY2hlY2tFeGNl
cHRpb24odGhpcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICAg
ICAgICAgICAgICBpZiAobV9wcm9wZXJ0eU5hbWVzLklzRW1wdHkoKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIucmVwb3J0RmFpbHVyZSh0aGlzKTsKLSAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHdoaWxlIChtX2luZGV4IDwgbV9wcm9wZXJ0eU5hbWVzLT5MZW5ndGgo
KSkgewogICAgICAgICAgICAgICAgIGJvb2wgaXNBY2Nlc3NvciA9IGZhbHNlOwogICAgICAgICAg
ICAgICAgIGlmICghbV9uYW1lRG9uZSkgewpAQCAtNzY2LDcgKzc0Niw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgIGlzQWNjZXNzb3IgPSBoYXNTdHJpbmdQcm9wZXJ0eSAmJiBjb21w
b3NpdGUoKS0+SGFzUmVhbE5hbWVkQ2FsbGJhY2tQcm9wZXJ0eShwcm9wZXJ0eU5hbWUuQXM8djg6
OlN0cmluZz4oKSk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRl
ID0gc2VyaWFsaXplci5jaGVja0V4Y2VwdGlvbih0aGlzKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuZXdTdGF0ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1N0cmluZ1By
b3BlcnR5IHx8IGhhc0luZGV4ZWRQcm9wZXJ0eSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhh
c1N0cmluZ1Byb3BlcnR5IHx8IChoYXNJbmRleGVkUHJvcGVydHkgJiYgIWlnbm9yZUluZGV4ZWQp
KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWU7
CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgKytt
X2luZGV4OwpAQCAtNzk5LDEzICs3NzksOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IG9iamVjdERvbmUobV9udW1TZXJpYWxpemVkUHJvcGVydGllcywgc2VyaWFsaXplcik7CiAgICAg
ICAgIH0KIAotICAgICAgICB2aXJ0dWFsIHVpbnQzMl90IGV4ZWNEZXB0aCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNTZXJpYWxpemluZ0FjY2Vzc29yID8gMSA6IDA7IH0KLQotICAgIHByb3RlY3RlZDoK
LSAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUodW5zaWduZWQgbnVtUHJvcGVy
dGllcywgU2VyaWFsaXplciYpID0gMDsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gbV9w
cm9wZXJ0eU5hbWVzOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gbV9wcm9wZXJ0eU5hbWVzOwogICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBtX3Byb3Bl
cnR5TmFtZTsKICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICAgICAgdW5zaWduZWQgbV9u
dW1TZXJpYWxpemVkUHJvcGVydGllczsKQEAgLTgyMiw2ICs3OTgsMTggQEAgcHJpdmF0ZToKICAg
ICAgICAgewogICAgICAgICB9CiAKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIGFkdmFuY2Uo
U2VyaWFsaXplciYgc2VyaWFsaXplcikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fcHJv
cGVydHlOYW1lcy5Jc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMg
PSBjb21wb3NpdGUoKS0+R2V0UHJvcGVydHlOYW1lcygpOworICAgICAgICAgICAgICAgIGlmIChT
dGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5jaGVja0V4Y2VwdGlvbih0aGlzKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgICAgICAgICAgICAgIGlmICht
X3Byb3BlcnR5TmFtZXMuSXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2Vy
aWFsaXplci5yZXBvcnRGYWlsdXJlKHRoaXMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIHNlcmlhbGl6ZVByb3BlcnRpZXMoZmFsc2UsIHNlcmlhbGl6ZXIpOworICAgICAgICB9
CisKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25l
KHVuc2lnbmVkIG51bVByb3BlcnRpZXMsIFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCiAgICAgICAg
IHsKQEAgLTgyOSwxMSArODE3LDUwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9OwogCisg
ICAgY2xhc3MgRGVuc2VBcnJheVN0YXRlIDogcHVibGljIEFic3RyYWN0T2JqZWN0U3RhdGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgRGVuc2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5
PiBhcnJheSwgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnR5TmFtZXMsIFN0YXRlQmFzZSog
bmV4dCkKKyAgICAgICAgICAgIDogQWJzdHJhY3RPYmplY3RTdGF0ZShhcnJheSwgbmV4dCkKKyAg
ICAgICAgICAgICwgbV9hcnJheUluZGV4KDApCisgICAgICAgICAgICAsIG1fYXJyYXlMZW5ndGgo
YXJyYXktPkxlbmd0aCgpKQorICAgICAgICB7CisgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZXMg
PSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6TmV3KHByb3BlcnR5TmFtZXMpOworICAgICAgICB9CisK
KyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIGFkdmFuY2UoU2VyaWFsaXplciYgc2VyaWFsaXpl
cikKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKG1fYXJyYXlJbmRleCA8IG1fYXJyYXlM
ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBj
b21wb3NpdGUoKS5Bczx2ODo6QXJyYXk+KCktPkdldChtX2FycmF5SW5kZXgpOworICAgICAgICAg
ICAgICAgIG1fYXJyYXlJbmRleCsrOworICAgICAgICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5l
d1N0YXRlID0gc2VyaWFsaXplci5jaGVja0V4Y2VwdGlvbih0aGlzKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgICAgICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5l
d1N0YXRlID0gc2VyaWFsaXplci5kb1NlcmlhbGl6ZSh2YWx1ZSwgdGhpcykpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiBzZXJpYWxpemVQcm9wZXJ0aWVzKHRydWUsIHNlcmlhbGl6ZXIpOworICAgICAgICB9CisK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25lKHVu
c2lnbmVkIG51bVByb3BlcnRpZXMsIFNlcmlhbGl6ZXImIHNlcmlhbGl6ZXIpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVyLndyaXRlRGVuc2VBcnJheShudW1Qcm9wZXJ0
aWVzLCBtX2FycmF5TGVuZ3RoLCB0aGlzKTsKKyAgICAgICAgfQorICAgIHByaXZhdGU6CisgICAg
ICAgIHVpbnQzMl90IG1fYXJyYXlJbmRleDsKKyAgICAgICAgdWludDMyX3QgbV9hcnJheUxlbmd0
aDsKKyAgICB9OworCiAgICAgY2xhc3MgU3BhcnNlQXJyYXlTdGF0ZSA6IHB1YmxpYyBBYnN0cmFj
dE9iamVjdFN0YXRlIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFNwYXJzZUFycmF5U3RhdGUodjg6
OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgICAgIFNwYXJz
ZUFycmF5U3RhdGUodjg6OkhhbmRsZTx2ODo6QXJyYXk+IGFycmF5LCB2ODo6SGFuZGxlPHY4OjpB
cnJheT4gcHJvcGVydHlOYW1lcywgU3RhdGVCYXNlKiBuZXh0KQogICAgICAgICAgICAgOiBBYnN0
cmFjdE9iamVjdFN0YXRlKGFycmF5LCBuZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBtX3By
b3BlcnR5TmFtZXMgPSB2ODo6TG9jYWw8djg6OkFycmF5Pjo6TmV3KHByb3BlcnR5TmFtZXMpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIGFkdmFuY2UoU2VyaWFsaXpl
ciYgc2VyaWFsaXplcikgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemVQ
cm9wZXJ0aWVzKGZhbHNlLCBzZXJpYWxpemVyKTsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVk
OgpAQCAtOTk0LDE3ICsxMDIxLDM2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fd3JpdGVyLndyaXRl
QXJyYXlCdWZmZXIoKmFycmF5QnVmZmVyKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RhdGVCYXNl
KiBuZXdBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBu
ZXh0KQorICAgIHN0YXRpYyBib29sIHNlcmlhbGl6ZURlbnNlbHkodWludDMyX3QgbGVuZ3RoLCB1
aW50MzJfdCBwcm9wZXJ0eUNvdW50KSAKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiB1c2UgcGxh
aW4gQXJyYXkgc3RhdGUgd2hlbiB3ZSBjYW4gcXVpY2tseSBjaGVjayB0aGF0Ci0gICAgICAgIC8v
IGFuIGFycmF5IGlzIG5vdCBzcGFyc2UgYW5kIGhhcyBvbmx5IGluZGV4ZWQgcHJvcGVydGllcy4K
LSAgICAgICAgcmV0dXJuIG5ldyBTcGFyc2VBcnJheVN0YXRlKGFycmF5LCBuZXh0KTsKKyAgICAg
ICAgLy8gTGV0IEsgYmUgdGhlIGNvc3Qgb2Ygc2VyaWFsaXppbmcgYWxsIHByb3BlcnR5IHZhbHVl
cyB0aGF0IGFyZSB0aGVyZQorICAgICAgICAvLyBDb3N0IG9mIHNlcmlhbGl6aW5nIHNwYXJzZWx5
OiA1KnByb3BlcnR5Q291bnQgKyBLICg1IGJ5dGVzIHBlciB1aW50MzJfdCBrZXkpCisgICAgICAg
IC8vIENvc3Qgb2Ygc2VyaWFsaXppbmcgZGVuc2VseTogSyArIDEqKGxlbmd0aCAtIHByb3BlcnR5
Q291bnQpICgxIGJ5dGUgZm9yIGFsbCBwcm9wZXJ0aWVzIHRoYXQgYXJlIG5vdCB0aGVyZSkKKyAg
ICAgICAgLy8gc28gZGVuc2x5IGlzIGJldHRlciB0aGFuIHNwYXJzbHkgd2hlbmV2ZXIgNipwcm9w
ZXJ0eUNvdW50ID4gbGVuZ3RoCisgICAgICAgIHJldHVybiA2ICogcHJvcGVydHlDb3VudCA+PSBs
ZW5ndGg7CisgICAgfQorCisgICAgU3RhdGVCYXNlKiBzdGFydEFycmF5U3RhdGUodjg6OkhhbmRs
ZTx2ODo6QXJyYXk+IGFycmF5LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgeworICAgICAgICB2ODo6
SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydHlOYW1lcyA9IGFycmF5LT5HZXRQcm9wZXJ0eU5hbWVz
KCk7CisgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gY2hlY2tFeGNlcHRpb24obmV4
dCkpCisgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7CisgICAgICAgIHVpbnQzMl90IGxlbmd0
aCA9IGFycmF5LT5MZW5ndGgoKTsKKworICAgICAgICBpZiAoc2VyaWFsaXplRGVuc2VseShsZW5n
dGgsIHByb3BlcnR5TmFtZXMtPkxlbmd0aCgpKSkgeworICAgICAgICAgICAgbV93cml0ZXIud3Jp
dGVHZW5lcmF0ZUZyZXNoRGVuc2VBcnJheShsZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIHB1
c2gobmV3IERlbnNlQXJyYXlTdGF0ZShhcnJheSwgcHJvcGVydHlOYW1lcywgbmV4dCkpOworICAg
ICAgICB9CisKKyAgICAgICAgbV93cml0ZXIud3JpdGVHZW5lcmF0ZUZyZXNoU3BhcnNlQXJyYXko
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHB1c2gobmV3IFNwYXJzZUFycmF5U3RhdGUoYXJyYXks
IHByb3BlcnR5TmFtZXMsIG5leHQpKTsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RhdGVCYXNlKiBu
ZXdPYmplY3RTdGF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgU3RhdGVCYXNlKiBu
ZXh0KQorICAgIFN0YXRlQmFzZSogc3RhcnRPYmplY3RTdGF0ZSh2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IG9iamVjdCwgU3RhdGVCYXNlKiBuZXh0KQogICAgIHsKKyAgICAgICAgbV93cml0ZXIud3Jp
dGVHZW5lcmF0ZUZyZXNoT2JqZWN0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBjaGVjayBub3QgYSB3
cmFwcGVyCi0gICAgICAgIHJldHVybiBuZXcgT2JqZWN0U3RhdGUob2JqZWN0LCBuZXh0KTsKKyAg
ICAgICAgcmV0dXJuIHB1c2gobmV3IE9iamVjdFN0YXRlKG9iamVjdCwgbmV4dCkpOwogICAgIH0K
IAogICAgIC8vIE1hcmtzIG9iamVjdCBhcyBoYXZpbmcgYmVlbiB2aXNpdGVkIGJ5IHRoZSBzZXJp
YWxpemVyIGFuZCBhc3NpZ25zIGl0IGEgdW5pcXVlIG9iamVjdCByZWZlcmVuY2UgSUQuCkBAIC0x
MDgyLDggKzExMjgsNyBAQCBTZXJpYWxpemVyOjpTdGF0ZUJhc2UqIFNlcmlhbGl6ZXI6OmRvU2Vy
aWFsaXplKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSwgU3RhdAogICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+SXNCb29sZWFuT2JqZWN0KCkpCiAgICAgICAgICAgICB3cml0ZUJvb2xlYW5PYmpl
Y3QodmFsdWUpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZS0+SXNBcnJheSgpKSB7Ci0gICAgICAg
ICAgICBtX3dyaXRlci53cml0ZUdlbmVyYXRlRnJlc2hBcnJheSh2YWx1ZS5Bczx2ODo6QXJyYXk+
KCktPkxlbmd0aCgpKTsKLSAgICAgICAgICAgIHJldHVybiBwdXNoKG5ld0FycmF5U3RhdGUodmFs
dWUuQXM8djg6OkFycmF5PigpLCBuZXh0KSk7CisgICAgICAgICAgICByZXR1cm4gc3RhcnRBcnJh
eVN0YXRlKHZhbHVlLkFzPHY4OjpBcnJheT4oKSwgbmV4dCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
VjhGaWxlOjpIYXNJbnN0YW5jZSh2YWx1ZSkpCiAgICAgICAgICAgICB3cml0ZUZpbGUodmFsdWUp
OwogICAgICAgICBlbHNlIGlmIChWOEJsb2I6Okhhc0luc3RhbmNlKHZhbHVlKSkKQEAgLTEwOTks
OCArMTE0NCw3IEBAIFNlcmlhbGl6ZXI6OlN0YXRlQmFzZSogU2VyaWFsaXplcjo6ZG9TZXJpYWxp
emUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0CiAgICAgICAgIGVsc2UgaWYgKHZh
bHVlLT5Jc09iamVjdCgpKSB7CiAgICAgICAgICAgICBpZiAoaXNIb3N0T2JqZWN0KGpzT2JqZWN0
KSB8fCBqc09iamVjdC0+SXNDYWxsYWJsZSgpIHx8IHZhbHVlLT5Jc05hdGl2ZUVycm9yKCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUVycm9yKERhdGFDbG9uZUVycm9yLCBuZXh0KTsK
LSAgICAgICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVzaE9iamVjdCgpOwotICAgICAg
ICAgICAgcmV0dXJuIHB1c2gobmV3T2JqZWN0U3RhdGUoanNPYmplY3QsIG5leHQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBzdGFydE9iamVjdFN0YXRlKGpzT2JqZWN0LCBuZXh0KTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25lRXJyb3IsIG5l
eHQpOwogICAgIH0KQEAgLTExMTcsMTEgKzExNjEsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBwdXNoT2JqZWN0UmVmZXJlbmNlKGNvbnN0IHY4OjpIYW5kbGU8djg6OlZhbHVlPiYpID0g
MDsKICAgICB2aXJ0dWFsIGJvb2wgdHJ5R2V0T2JqZWN0RnJvbU9iamVjdFJlZmVyZW5jZSh1aW50
MzJfdCByZWZlcmVuY2UsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKICAgICB2aXJ0dWFs
IGJvb2wgdHJ5R2V0VHJhbnNmZXJyZWRNZXNzYWdlUG9ydCh1aW50MzJfdCBpbmRleCwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBuZXdBcnJheSh1aW50MzJf
dCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbmV3U3BhcnNlQXJyYXkodWludDMyX3Qg
bGVuZ3RoKSA9IDA7CiAgICAgdmlydHVhbCBib29sIG5ld09iamVjdCgpID0gMDsKLSAgICB2aXJ0
dWFsIGJvb2wgY29tcGxldGVBcnJheSh1aW50MzJfdCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiopID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVPYmplY3QodWludDMyX3QgbnVt
UHJvcGVydGllcywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBjb21wbGV0ZVNwYXJzZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxl
bmd0aCwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjb21w
bGV0ZURlbnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoLCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7CiB9OwogCiAvLyBSZWFkZXIgaXMgcmVzcG9uc2li
bGUgZm9yIGRlc2VyaWFsaXppbmcgcHJpbWl0aXZlIHR5cGVzIGFuZApAQCAtMTIzNCwxNSArMTI3
OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNyZWF0b3IucHVzaE9iamVjdFJlZmVyZW5jZSgq
dmFsdWUpOwogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBBcnJheVRhZzogewot
ICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOwotICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50
MzIoJmxlbmd0aCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
aWYgKCFjcmVhdG9yLmNvbXBsZXRlQXJyYXkobGVuZ3RoLCB2YWx1ZSkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBSZWdFeHBUYWc6CisgICAgICAgY2FzZSBSZWdFeHBUYWc6CiAgICAgICAgICAgICBpZiAo
IXJlYWRSZWdFeHAodmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIGNyZWF0b3IucHVzaE9iamVjdFJlZmVyZW5jZSgqdmFsdWUpOwpAQCAtMTI2Niw2ICsx
MzAyLDE3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIERlbnNlQXJyYXlUYWc6IHsKKyAg
ICAgICAgICAgIHVpbnQzMl90IG51bVByb3BlcnRpZXM7CisgICAgICAgICAgICB1aW50MzJfdCBs
ZW5ndGg7CisgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbnVtUHJvcGVydGllcykpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50
MzIoJmxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
aWYgKCFjcmVhdG9yLmNvbXBsZXRlRGVuc2VBcnJheShudW1Qcm9wZXJ0aWVzLCBsZW5ndGgsIHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQogICAgICAgICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzogewogICAgICAgICAg
ICAgaWYgKG1fdmVyc2lvbiA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAg
LTEyODksMTMgKzEzMzYsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2Vu
ZXJhdGVGcmVzaEFycmF5VGFnOiB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVGcmVzaFNwYXJzZUFy
cmF5VGFnOiB7CisgICAgICAgICAgICBpZiAobV92ZXJzaW9uIDw9IDApCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOworICAgICAgICAg
ICAgaWYgKCFkb1JlYWRVaW50MzIoJmxlbmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgaWYgKCFjcmVhdG9yLm5ld1NwYXJzZUFycmF5KGxlbmd0aCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBHZW5lcmF0ZUZyZXNoRGVuc2VBcnJheVRhZzogewogICAg
ICAgICAgICAgaWYgKG1fdmVyc2lvbiA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKICAgICAgICAgICAgIGlmICghZG9SZWFk
VWludDMyKCZsZW5ndGgpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIGlmICghY3JlYXRvci5uZXdBcnJheShsZW5ndGgpKQorICAgICAgICAgICAgaWYgKCFjcmVh
dG9yLm5ld1NwYXJzZUFycmF5KGxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE3MDcsMTEgKzE3NjQs
OSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdmlydHVh
bCBib29sIG5ld0FycmF5KHVpbnQzMl90IGxlbmd0aCkKKyAgICB2aXJ0dWFsIGJvb2wgbmV3U3Bh
cnNlQXJyYXkodWludDMyX3QpCiAgICAgewotICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBh
cnJheSA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7Ci0gICAgICAgIGlmIChhcnJheS5Jc0VtcHR5
KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJy
YXk+IGFycmF5ID0gdjg6OkFycmF5OjpOZXcoMCk7CiAgICAgICAgIG9wZW5Db21wb3NpdGUoYXJy
YXkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNzgxLDEyICsxODM2LDM3IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBhcnJh
eSA9IGNvbXBvc2l0ZS5Bczx2ODo6QXJyYXk+KCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgYXJyYXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOworICAgICAgICAgICAgYXJyYXkgPSB2
ODo6QXJyYXk6Ok5ldygpOwogICAgICAgICBpZiAoYXJyYXkuSXNFbXB0eSgpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZU9iamVjdChhcnJheSwg
bnVtUHJvcGVydGllcywgdmFsdWUpOwogICAgIH0KIAorICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0
ZURlbnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoLCB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4qIHZhbHVlKQorICAgIHsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gYXJyYXk7CisgICAgICAgIGlmIChtX3ZlcnNpb24gPiAwKSB7CisgICAgICAgICAgICB2
ODo6TG9jYWw8djg6OlZhbHVlPiBjb21wb3NpdGU7CisgICAgICAgICAgICBpZiAoIWNsb3NlQ29t
cG9zaXRlKCZjb21wb3NpdGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGFycmF5ID0gY29tcG9zaXRlLkFzPHY4OjpBcnJheT4oKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBhcnJheSA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CisgICAgICAgIGlm
IChhcnJheS5Jc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlm
ICghaW5pdGlhbGl6ZU9iamVjdChhcnJheSwgbnVtUHJvcGVydGllcywgdmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAobGVuZ3RoID4gc3RhY2tEZXB0aCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwLCBz
dGFja1BvcyA9IHN0YWNrRGVwdGgoKSAtIGxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrLCBzdGFja1Bv
cysrKSB7CisgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZhbHVlPiBlbGVtID0gZWxlbWVudChz
dGFja1Bvcyk7CisgICAgICAgICAgICBpZiAoIWVsZW0tPklzVW5kZWZpbmVkKCkpCisgICAgICAg
ICAgICAgICAgYXJyYXktPlNldChpLCBlbGVtKTsKKyAgICAgICAgfQorICAgICAgICBwb3AobGVu
Z3RoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgdmlydHVhbCB2b2lkIHB1
c2hPYmplY3RSZWZlcmVuY2UoY29uc3Qgdjg6OkhhbmRsZTx2ODo6VmFsdWU+JiBvYmplY3QpCiAg
ICAgewogICAgICAgICBtX29iamVjdFBvb2wuYXBwZW5kKG9iamVjdCk7Cg==
</data>
<flag name="review"
          id="113886"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>115083</attachid>
            <date>2011-11-14 19:00:48 -0800</date>
            <delta_ts>2011-11-14 22:14:47 -0800</delta_ts>
            <desc>CR comments addressed</desc>
            <filename>72198.patch</filename>
            <type>text/plain</type>
            <size>24786</size>
            <attacher name="Dmitry Lomov">dslomov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwZTAwNjJmLi45OGY2NTg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMTEt
MTEgIERtaXRyeSBMb21vdiAgPGRzbG9tb3ZAZ29vZ2xlLmNvbT4KKworICAgICAgICBbVjhdW0No
cm9taXVtXVNlcmlhbGl6ZSBkZW5zZSBhcnJheXMgZGVuc2x5LgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTgKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVz
dHMvcG9zdG1lc3NhZ2UtY2xvbmUuanM6CisgICAgICAgICogZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wb3N0bWVzc2FnZS1hcnJheXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sOiBBZGRlZC4KKwogMjAx
MS0xMS0xNCAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IG1lZGlhL3RyYWNrL3RyYWNrLWN1ZXMtY3VlY2hhbmdlLmh0bWwgaXMgZmxha3kKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVzdHMvcG9zdG1lc3NhZ2Ut
Y2xvbmUuanMgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvc2NyaXB0LXRlc3RzL3Bvc3Rt
ZXNzYWdlLWNsb25lLmpzCmluZGV4IDQ4MGYxZWUuLjQ0MzkyNTQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9zY3JpcHQtdGVzdHMvcG9zdG1lc3NhZ2UtY2xvbmUuanMK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3NjcmlwdC10ZXN0cy9wb3N0bWVzc2Fn
ZS1jbG9uZS5qcwpAQCAtOTcsNyArOTcsNyBAQCB0cnlQb3N0TWVzc2FnZSh0aHVuaygKICAgICAg
ICAgJ2FbMV0gPSBiOyAnICsKICAgICAgICAgJ3JldHVybiBhOycKICAgICApLCBmYWxzZSwgImV2
YWxUaHVuayIsIGZ1bmN0aW9uKHYpIHsKLSAgICAgICAgZG9QYXNzRmFpbCh2Lmxlbmd0aCA9PT0g
MywgImxlbmd0aCBjb3JyZWN0Iik7IC8vIHVuZGVmaW5lZAorICAgICAgICBkb1Bhc3NGYWlsKHYu
bGVuZ3RoID09PSAzIHx8IHYubGVuZ3RoID09PSAyLCAibGVuZ3RoIGNvcnJlY3QiKTsgLy8gdW5k
ZWZpbmVkCiAgICAgICAgIGRvUGFzc0ZhaWwodlswXSA9PT0gMCwgImluZGV4IDAgT0siKTsgLy8g
bWFuZGF0b3J5CiAgICAgICAgIGRvUGFzc0ZhaWwodlsxXS54ID09PSA0MSwgImFjY2Vzc29yIHJl
YWNoZWQiKTsgLy8gbWFuZGF0b3J5CiAgICAgICAgIGRvUGFzc0ZhaWwodlsyXSA9PT0gdW5kZWZp
bmVkLCAiaW5kZXggMiB1bmRlZmluZWQiKTsgLy8gdW5kZWZpbmVkCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFycmF5cy1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3RtZXNzYWdlLWFy
cmF5cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgy
YjFmYwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5k
b3ctcG9zdG1lc3NhZ2UtYXJyYXlzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDMwIEBACitQQVNT
OiBpID0gMjkKK1BBU1M6IGkgPSAyOAorUEFTUzogaSA9IDI3CitQQVNTOiBpID0gMjYKK1BBU1M6
IGkgPSAyNQorUEFTUzogaSA9IDI0CitQQVNTOiBpID0gMjMKK1BBU1M6IGkgPSAyMgorUEFTUzog
aSA9IDIxCitQQVNTOiBpID0gMjAKK1BBU1M6IGkgPSAxOQorUEFTUzogaSA9IDE4CitQQVNTOiBp
ID0gMTcKK1BBU1M6IGkgPSAxNgorUEFTUzogaSA9IDE1CitQQVNTOiBpID0gMTQKK1BBU1M6IGkg
PSAxMworUEFTUzogaSA9IDEyCitQQVNTOiBpID0gMTEKK1BBU1M6IGkgPSAxMAorUEFTUzogaSA9
IDkKK1BBU1M6IGkgPSA4CitQQVNTOiBpID0gNworUEFTUzogaSA9IDYKK1BBU1M6IGkgPSA1CitQ
QVNTOiBpID0gNAorUEFTUzogaSA9IDMKK1BBU1M6IGkgPSAyCitQQVNTOiBpID0gMQorRG9uZS4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3Nh
Z2UtYXJyYXlzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXBvc3Rt
ZXNzYWdlLWFycmF5cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYx
MzE4ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2lu
ZG93LXBvc3RtZXNzYWdlLWFycmF5cy5odG1sCkBAIC0wLDAgKzEsNjIgQEAKKzxodG1sPgorPGhl
YWQvPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiIvPgorPGRpdiBpZD0iY29uc29sZSIv
PgorPHNjcmlwdD4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlv
dXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIu
d2FpdFVudGlsRG9uZSgpOworfQorCit2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjb25zb2xlIik7Cit2YXIgbWF4Q291bnQgPSAzMDsKKworZnVuY3Rpb24gcmVjaWV2ZU1l
c3NhZ2UoZXZ0KSB7CisgICAgdHJ5IHsKKyAgICAgIHZhciBkYXRhID0gZXZ0LmRhdGE7CisgICAg
ICBpZiAoZGF0YS5pID09IDApIHsKKyAgICAgICAgICBjb25zb2xlLmlubmVySFRNTCArPSAiRG9u
ZS4iCisgICAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgfQorICAgICAg
ZWxzZSB7CisgICAgICAgICAgaWYgKGRhdGEuaSA8IG1heENvdW50KSB7CisgICAgICAgICAgICAg
IHZhciBzdWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IGRhdGEuaTsg
aiA8IG1heENvdW50OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNz
ICYmIGRhdGEuYVtqXSA9PSBqOworICAgICAgICAgICAgICAgICAgaWYgKGRhdGEuYVtqXSAhPSBq
KSB7CisgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5pbm5lckhUTUwgKz0gIkZhaWx1cmU6
IGRhdGEuaSA9ICIgKyBkYXRhLmkgKyAiIGogPSAiICsgaiArICIgZGF0YS5hW2pdID0gIiArIGRh
dGEuYVtqXSArICI8YnI+IjsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoZGF0YS5hLmZv
b2JhciAhPSAiRm9vQmFyIikKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgaWYgKGRhdGEuYS5sZW5ndGggIT0gbWF4Q291bnQpIHsKKyAgICAgICAgICAg
ICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5uZXJI
VE1MICs9ICJGQUlMOiBpID0gIiArIGRhdGEuaSArICIgbGVuZ3RoID0gIiArIGRhdGEuYS5sZW5n
dGg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpCisgICAgICAg
ICAgICAgICAgICBjb25zb2xlLmlubmVySFRNTCArPSAiUEFTUzogaSA9ICIgKyBkYXRhLmkgKyAi
PGJyPiI7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGNvbnNvbGUuaW5u
ZXJIVE1MICs9ICJGQUlMOiBpID0gIiArIGRhdGEuaSArICIgYXJyYXk6ICIgKyBKU09OLnN0cmlu
Z2lmeShkYXRhLmEpICsgIjxicj4iOworICAgICAgICAgIH0KKyAgICAgICAgICB2YXIgYSA9IFtd
OworICAgICAgICAgIGZvciAodmFyIGogPSBkYXRhLmkgLSAxOyBqIDwgbWF4Q291bnQ7IGorKykg
eworICAgICAgICAgICAgICBhW2pdID0gajsKKyAgICAgICAgICB9OworICAgICAgICAgIGEuZm9v
YmFyID0gIkZvb0JhciI7CisgICAgICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHtpOmRhdGEuaSAt
IDEsIGE6YX0sICcqJyk7CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBjb25z
b2xlLmlubmVySFRNTCArPSAiRXhjZXB0aW9uICIgKyBlICsgIjxicj4iOworICAgICAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdt
ZXNzYWdlJywgcmVjaWV2ZU1lc3NhZ2UsIGZhbHNlKTsKKword2luZG93LnBvc3RNZXNzYWdlKHtp
Om1heENvdW50fSwgJyonKTsKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGFmM2M0NjMuLjJjZWYzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxMS0x
MS0xMSAgRG1pdHJ5IExvbW92ICA8ZHNsb21vdkBnb29nbGUuY29tPgorICAgICAgICAKKyAgICAg
ICAgW1Y4XVtDaHJvbWl1bV1TZXJpYWxpemUgZGVuc2UgYXJyYXlzIGRlbnNseQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzIxOTgKKyAgICAgICAgVGhp
cyBwYXRjaCBlbnN1cmVzIHRoYXQ6CisgICAgICAgIC0gRGVuc2UgYXJyYXlzIGFyZSBzZXJpYWxp
emVkIGRlbnNseSwgYW5kIG5vdCBhcyBuYW1lLXZhbHVlIHBhaXJzCisgICAgICAgIC0gU3BhcnNl
IGFycmF5cyBhcmUgYWxsb2NhdGVkIGFzIHNwYXJzZSBvbiBkZXNlcmlhbGl6YXRpb24uCisgICAg
ICAgIFRoZSBjcml0ZXJpYSB0byBjaG9vc2Ugd2hldGhlciB0byBzZXJpYWxpemUgZGVuc2x5IG9y
IHNwYXJzZWx5IGlzIHRoZSBzaXplCisgICAgICAgIG9mIGEgcmVzdWx0aW5nIHNlcmlhbGl6ZWQg
c3RyZWFtLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFRlc3Q6IGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcG9zdG1lc3NhZ2UtYXJyYXlzLmh0bWwKKwor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpWOE9iamVjdE1hcDo6V3JpdGVyOjp3cml0ZURlbnNlQXJyYXkpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3JpdGVHZW5lcmF0ZUZyZXNoU3BhcnNl
QXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OldyaXRlcjo6d3JpdGVHZW5l
cmF0ZUZyZXNoRGVuc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2Vy
aWFsaXplcjo6d3JpdGVEZW5zZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFw
OjpTZXJpYWxpemVyOjpBYnN0cmFjdE9iamVjdFN0YXRlOjpleGVjRGVwdGgpOgorICAgICAgICAo
V2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OkFic3RyYWN0T2JqZWN0U3RhdGU6OnNl
cmlhbGl6ZVByb3BlcnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlh
bGl6ZXI6Ok9iamVjdFN0YXRlOjphZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0
TWFwOjpTZXJpYWxpemVyOjpEZW5zZUFycmF5U3RhdGU6OkRlbnNlQXJyYXlTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFsaXplcjo6RGVuc2VBcnJheVN0YXRlOjph
ZHZhbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2JqZWN0TWFwOjpTZXJpYWxpemVyOjpEZW5z
ZUFycmF5U3RhdGU6Om9iamVjdERvbmUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OlNwYXJzZUFycmF5U3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OlNwYXJzZUFycmF5U3RhdGU6OmFk
dmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6OnNlcmlh
bGl6ZURlbnNlbHkpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6OlNlcmlhbGl6ZXI6
OnN0YXJ0QXJyYXlTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6U2VyaWFs
aXplcjo6c3RhcnRPYmplY3RTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6
U2VyaWFsaXplcjo6ZG9TZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6VjhPYmplY3RNYXA6
OlJlYWRlcjo6cmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVzZXJpYWxp
emVyOjpuZXdTcGFyc2VBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpWOE9iamVjdE1hcDo6RGVz
ZXJpYWxpemVyOjpjb21wbGV0ZVNwYXJzZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OlY4T2Jq
ZWN0TWFwOjpEZXNlcmlhbGl6ZXI6OmNvbXBsZXRlRGVuc2VBcnJheSk6CisKIDIwMTEtMTEtMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBnb29nbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNvbnNvbGUncyBwcm90b2NvbCBwYXlsb2FkIGRvZXMgbm90IGhhdmUgdXJsIGFuZCBs
aW5lIHByb3BlcnRpZXMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Vy
aWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCA5YmFlOTA4Li5jMWE2ODE3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
QEAgLTE4OSwxOCArMTg5LDE5IEBAIGVudW0gU2VyaWFsaXphdGlvblRhZyB7CiAgICAgRmlsZVRh
ZyA9ICdmJywgLy8gZmlsZTpSYXdGaWxlIC0+IEZpbGUgKHJlZikKICAgICBGaWxlTGlzdFRhZyA9
ICdsJywgLy8gbGVuZ3RoOnVpbnQzMl90LCBmaWxlczpSYXdGaWxlW2xlbmd0aF0gLT4gRmlsZUxp
c3QgKHJlZikKICAgICBJbWFnZURhdGFUYWcgPSAnIycsIC8vIHdpZHRoOnVpbnQzMl90LCBoZWln
aHQ6dWludDMyX3QsIHBpeGVsRGF0YUxlbmd0aDp1aW50MzJfdCwgZGF0YTpieXRlW3BpeGVsRGF0
YUxlbmd0aF0gLT4gSW1hZ2VEYXRhIChyZWYpCi0gICAgQXJyYXlUYWcgPSAnWycsIC8vIGxlbmd0
aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IGFycmF5IGZyb20gdGhlIG9wZW4gc3RhY2s7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBmaWxscyBpdCB3aXRoIHRo
ZSBsYXN0IGxlbmd0aCBlbGVtZW50cyBwdXNoZWQgb24gdGhlIGRlc2VyaWFsaXphdGlvbiBzdGFj
awogICAgIE9iamVjdFRhZyA9ICd7JywgLy8gbnVtUHJvcGVydGllczp1aW50MzJfdCAtPiBwb3Bz
IHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBvcGVuIHN0YWNrOwogICAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxscyBpdCB3aXRoIHRoZSBsYXN0IG51
bVByb3BlcnRpZXMgbmFtZSx2YWx1ZSBwYWlycyBwdXNoZWQgb250byB0aGUgZGVzZXJpYWxpemF0
aW9uIHN0YWNrCiAgICAgU3BhcnNlQXJyYXlUYWcgPSAnQCcsIC8vIG51bVByb3BlcnRpZXM6dWlu
dDMyX3QsIGxlbmd0aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBv
cGVuIHN0YWNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbHMgaXQgd2l0aCB0aGUgbGFzdCBudW1Qcm9w
ZXJ0aWVzIG5hbWUsdmFsdWUgcGFpcnMgcHVzaGVkIG9udG8gdGhlIGRlc2VyaWFsaXphdGlvbiBz
dGFjaworICAgIERlbnNlQXJyYXlUYWcgPSAnJCcsIC8vIG51bVByb3BlcnRpZXM6dWludDMyX3Qs
IGxlbmd0aDp1aW50MzJfdCAtPiBwb3BzIHRoZSBsYXN0IG9iamVjdCBmcm9tIHRoZSBvcGVuIHN0
YWNrOworICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmaWxscyBpdCB3aXRoIHRoZSBsYXN0IGxlbmd0aCBlbGVtZW50
cyBhbmQgbnVtUHJvcGVydGllcyBuYW1lLHZhbHVlIHBhaXJzIHB1c2hlZCBvbnRvIGRlc2VyaWFs
aXphdGlvbiBzdGFjawogICAgIFJlZ0V4cFRhZyA9ICdSJywgLy8gcGF0dGVybjpSYXdTdHJpbmcs
IGZsYWdzOnVpbnQzMl90IC0+IFJlZ0V4cCAocmVmKQogICAgIEFycmF5QnVmZmVyVGFnID0gJ0In
LCAvLyBieXRlTGVuZ3RoOnVpbnQzMl90LCBkYXRhOmJ5dGVbYnl0ZUxlbmd0aF0gLT4gQXJyYXlC
dWZmZXIgKHJlZikKICAgICBBcnJheUJ1ZmZlclZpZXdUYWcgPSAnVicsIC8vIHN1YnRhZzpieXRl
LCBieXRlT2Zmc2V0OnVpbnQzMl90LCBieXRlTGVuZ3RoOnVpbnQzMl90IC0+IEFycmF5QnVmZmVy
VmlldyAocmVmKS4gQ29uc3VtZXMgYW4gQXJyYXlCdWZmZXIgZnJvbSB0aGUgdG9wIG9mIHRoZSBk
ZXNlcmlhbGl6YXRpb24gc3RhY2suCiAgICAgT2JqZWN0UmVmZXJlbmNlVGFnID0gJ14nLCAvLyBy
ZWY6dWludDMyX3QgLT4gcmVmZXJlbmNlIHRhYmxlW3JlZl0KICAgICBHZW5lcmF0ZUZyZXNoT2Jq
ZWN0VGFnID0gJ28nLCAvLyAtPiBlbXB0eSBvYmplY3QgYWxsb2NhdGVkIGFuIG9iamVjdCBJRCBh
bmQgcHVzaGVkIG9udG8gdGhlIG9wZW4gc3RhY2sgKHJlZikKLSAgICBHZW5lcmF0ZUZyZXNoQXJy
YXlUYWcgPSAnYScsIC8vIGxlbmd0aDp1aW50MzJfdCAtPiBlbXB0eSBhcnJheVtsZW5ndGhdIGFs
bG9jYXRlZCBhbiBvYmplY3QgSUQgYW5kIHB1c2hlZCBvbnRvIHRoZSBvcGVuIHN0YWNrIChyZWYp
CisgICAgR2VuZXJhdGVGcmVzaFNwYXJzZUFycmF5VGFnID0gJ2EnLCAvLyBsZW5ndGg6dWludDMy
X3QgLT4gZW1wdHkgYXJyYXlbbGVuZ3RoXSBhbGxvY2F0ZWQgYW4gb2JqZWN0IElEIGFuZCBwdXNo
ZWQgb250byB0aGUgb3BlbiBzdGFjayAocmVmKQorICAgIEdlbmVyYXRlRnJlc2hEZW5zZUFycmF5
VGFnID0gJ0EnLCAvLyBsZW5ndGg6dWludDMyX3QgLT4gZW1wdHkgYXJyYXlbbGVuZ3RoXSBhbGxv
Y2F0ZWQgYW4gb2JqZWN0IElEIGFuZCBwdXNoZWQgb250byB0aGUgb3BlbiBzdGFjayAocmVmKQog
ICAgIFJlZmVyZW5jZUNvdW50VGFnID0gJz8nLCAvLyByZWZUYWJsZVNpemU6dWludDMyX3QgLT4g
SWYgdGhlIHJlZmVyZW5jZSB0YWJsZSBpcyBub3QgcmVmVGFibGVTaXplIGJpZywgZmFpbHMuCiAg
ICAgU3RyaW5nT2JqZWN0VGFnID0gJ3MnLCAvLyAgc3RyaW5nOlJhd1N0cmluZyAtPiBuZXcgU3Ry
aW5nKHN0cmluZykgKHJlZikKICAgICBOdW1iZXJPYmplY3RUYWcgPSAnbicsIC8vIHZhbHVlOmRv
dWJsZSAtPiBuZXcgTnVtYmVyKHZhbHVlKSAocmVmKQpAQCAtNDM3LDEyICs0MzgsNiBAQCBwdWJs
aWM6CiAgICAgICAgIGRvV3JpdGVVaW50MzIoaW5kZXgpOwogICAgIH0KIAotICAgIHZvaWQgd3Jp
dGVBcnJheSh1aW50MzJfdCBsZW5ndGgpCi0gICAgewotICAgICAgICBhcHBlbmQoQXJyYXlUYWcp
OwotICAgICAgICBkb1dyaXRlVWludDMyKGxlbmd0aCk7Ci0gICAgfQotCiAgICAgdm9pZCB3cml0
ZU9iamVjdFJlZmVyZW5jZSh1aW50MzJfdCByZWZlcmVuY2UpCiAgICAgewogICAgICAgICBhcHBl
bmQoT2JqZWN0UmVmZXJlbmNlVGFnKTsKQEAgLTQ2Miw2ICs0NTcsMTMgQEAgcHVibGljOgogICAg
ICAgICBkb1dyaXRlVWludDMyKGxlbmd0aCk7CiAgICAgfQogCisgICAgdm9pZCB3cml0ZURlbnNl
QXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywgdWludDMyX3QgbGVuZ3RoKQorICAgIHsKKyAg
ICAgICAgYXBwZW5kKERlbnNlQXJyYXlUYWcpOworICAgICAgICBkb1dyaXRlVWludDMyKG51bVBy
b3BlcnRpZXMpOworICAgICAgICBkb1dyaXRlVWludDMyKGxlbmd0aCk7CisgICAgfQorCiAgICAg
VmVjdG9yPEJ1ZmZlclZhbHVlVHlwZT4mIGRhdGEoKQogICAgIHsKICAgICAgICAgZmlsbEhvbGUo
KTsKQEAgLTQ3OSwxMiArNDgxLDE5IEBAIHB1YmxpYzoKICAgICAgICAgYXBwZW5kKEdlbmVyYXRl
RnJlc2hPYmplY3RUYWcpOwogICAgIH0KIAotICAgIHZvaWQgd3JpdGVHZW5lcmF0ZUZyZXNoQXJy
YXkodWludDMyX3QgbGVuZ3RoKQorICAgIHZvaWQgd3JpdGVHZW5lcmF0ZUZyZXNoU3BhcnNlQXJy
YXkodWludDMyX3QgbGVuZ3RoKQogICAgIHsKLSAgICAgICAgYXBwZW5kKEdlbmVyYXRlRnJlc2hB
cnJheVRhZyk7CisgICAgICAgIGFwcGVuZChHZW5lcmF0ZUZyZXNoU3BhcnNlQXJyYXlUYWcpOwog
ICAgICAgICBkb1dyaXRlVWludDMyKGxlbmd0aCk7CiAgICAgfQogCisgICAgdm9pZCB3cml0ZUdl
bmVyYXRlRnJlc2hEZW5zZUFycmF5KHVpbnQzMl90IGxlbmd0aCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChHZW5lcmF0ZUZyZXNoRGVuc2VBcnJheVRhZyk7CisgICAgICAgIGRvV3JpdGVVaW50MzIo
bGVuZ3RoKTsKKyAgICB9CisKKwogcHJpdmF0ZToKICAgICB2b2lkIGRvV3JpdGVBcnJheUJ1ZmZl
cihjb25zdCBBcnJheUJ1ZmZlciYgYXJyYXlCdWZmZXIpCiAgICAgewpAQCAtNjIyLDEyICs2MzEs
NiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihKU0ZhaWx1cmUsIHN0YXRl
KTsKICAgICB9CiAKLSAgICBTdGF0ZUJhc2UqIHdyaXRlQXJyYXkodWludDMyX3QgbGVuZ3RoLCBT
dGF0ZUJhc2UqIHN0YXRlKQotICAgIHsKLSAgICAgICAgbV93cml0ZXIud3JpdGVBcnJheShsZW5n
dGgpOwotICAgICAgICByZXR1cm4gcG9wKHN0YXRlKTsKLSAgICB9Ci0KICAgICBTdGF0ZUJhc2Uq
IHdyaXRlT2JqZWN0KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIFN0YXRlQmFzZSogc3RhdGUpCiAg
ICAgewogICAgICAgICBtX3dyaXRlci53cml0ZU9iamVjdChudW1Qcm9wZXJ0aWVzKTsKQEAgLTY0
MCw2ICs2NDMsMTMgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gcG9wKHN0YXRlKTsKICAgICB9
CiAKKyAgICBTdGF0ZUJhc2UqIHdyaXRlRGVuc2VBcnJheSh1aW50MzJfdCBudW1Qcm9wZXJ0aWVz
LCB1aW50MzJfdCBsZW5ndGgsIFN0YXRlQmFzZSogc3RhdGUpCisgICAgeworICAgICAgICBtX3dy
aXRlci53cml0ZURlbnNlQXJyYXkobnVtUHJvcGVydGllcywgbGVuZ3RoKTsKKyAgICAgICAgcmV0
dXJuIHBvcChzdGF0ZSk7CisgICAgfQorCisKIHByaXZhdGU6CiAgICAgY2xhc3MgU3RhdGVCYXNl
IHsKICAgICAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhdGVCYXNlKTsKQEAgLTcwMCwzNCAr
NzEwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH07CiAKLSNpZiAwCi0gICAgLy8gQ3Vy
cmVudGx5IHVudXNlZCwgc2VlIGNvbW1lbnQgaW4gbmV3QXJyYXlTdGF0ZS4KLSAgICBjbGFzcyBB
cnJheVN0YXRlIDogcHVibGljIFN0YXRlPHY4OjpBcnJheT4gewotICAgIHB1YmxpYzoKLSAgICAg
ICAgQXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIFN0YXRlQmFzZSogbmV4
dCkKLSAgICAgICAgICAgIDogU3RhdGU8djg6OkFycmF5PihhcnJheSwgbmV4dCkKLSAgICAgICAg
ICAgICwgbV9pbmRleCgtMSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdmlydHVh
bCBTdGF0ZUJhc2UqIGFkdmFuY2UoU2VyaWFsaXplciYgc2VyaWFsaXplcikKLSAgICAgICAgewot
ICAgICAgICAgICAgKyttX2luZGV4OwotICAgICAgICAgICAgZm9yICg7IG1faW5kZXggPCBjb21w
b3NpdGUoKS0+TGVuZ3RoKCk7ICsrbV9pbmRleCkgewotICAgICAgICAgICAgICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSA9IGNvbXBvc2l0ZSgpLT5HZXQobV9pbmRleCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKFN0YXRlQmFzZSogbmV3U3RhdGUgPSBzZXJpYWxpemVyLmNoZWNrRXhjZXB0
aW9uKHRoaXMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7Ci0gICAgICAg
ICAgICAgICAgaWYgKFN0YXRlQmFzZSogbmV3U3RhdGUgPSBzZXJpYWxpemVyLmRvU2VyaWFsaXpl
KHZhbHVlLCB0aGlzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVBcnJheShjb21w
b3NpdGUoKS0+TGVuZ3RoKCksIHRoaXMpOwotICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIH07Ci0jZW5kaWYKLQogICAgIGNsYXNzIEFic3Ry
YWN0T2JqZWN0U3RhdGUgOiBwdWJsaWMgU3RhdGU8djg6Ok9iamVjdD4gewogICAgIHB1YmxpYzoK
ICAgICAgICAgQWJzdHJhY3RPYmplY3RTdGF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVj
dCwgU3RhdGVCYXNlKiBuZXh0KQpAQCAtNzM5LDE2ICs3MjEsMTQgQEAgcHJpdmF0ZToKICAgICAg
ICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIGFkdmFuY2UoU2Vy
aWFsaXplciYgc2VyaWFsaXplcikKKyAgICAgICAgdmlydHVhbCB1aW50MzJfdCBleGVjRGVwdGgo
KSBjb25zdCB7IHJldHVybiBtX2lzU2VyaWFsaXppbmdBY2Nlc3NvciA/IDEgOiAwOyB9CisKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBvYmplY3REb25lKHVuc2ln
bmVkIG51bVByb3BlcnRpZXMsIFNlcmlhbGl6ZXImKSA9IDA7CisKKyAgICAgICAgU3RhdGVCYXNl
KiBzZXJpYWxpemVQcm9wZXJ0aWVzKGJvb2wgaWdub3JlSW5kZXhlZCwgU2VyaWFsaXplciYgc2Vy
aWFsaXplcikgCiAgICAgICAgIHsKICAgICAgICAgICAgIG1faXNTZXJpYWxpemluZ0FjY2Vzc29y
ID0gZmFsc2U7Ci0gICAgICAgICAgICBpZiAoIW1faW5kZXgpIHsKLSAgICAgICAgICAgICAgICBt
X3Byb3BlcnR5TmFtZXMgPSBjb21wb3NpdGUoKS0+R2V0UHJvcGVydHlOYW1lcygpOwotICAgICAg
ICAgICAgICAgIGlmIChTdGF0ZUJhc2UqIG5ld1N0YXRlID0gc2VyaWFsaXplci5jaGVja0V4Y2Vw
dGlvbih0aGlzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOwotICAgICAg
ICAgICAgICAgIGlmIChtX3Byb3BlcnR5TmFtZXMuSXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gc2VyaWFsaXplci5yZXBvcnRGYWlsdXJlKHRoaXMpOwotICAgICAgICAgICAg
fQogICAgICAgICAgICAgd2hpbGUgKG1faW5kZXggPCBtX3Byb3BlcnR5TmFtZXMtPkxlbmd0aCgp
KSB7CiAgICAgICAgICAgICAgICAgYm9vbCBpc0FjY2Vzc29yID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgaWYgKCFtX25hbWVEb25lKSB7CkBAIC03NjYsNyArNzQ2LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICAgICAgICAgaXNBY2Nlc3NvciA9IGhhc1N0cmluZ1Byb3BlcnR5ICYmIGNvbXBv
c2l0ZSgpLT5IYXNSZWFsTmFtZWRDYWxsYmFja1Byb3BlcnR5KHByb3BlcnR5TmFtZS5Bczx2ODo6
U3RyaW5nPigpKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKFN0YXRlQmFzZSogbmV3U3RhdGUg
PSBzZXJpYWxpemVyLmNoZWNrRXhjZXB0aW9uKHRoaXMpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5ld1N0YXRlOwotICAgICAgICAgICAgICAgICAgICBpZiAoaGFzU3RyaW5nUHJv
cGVydHkgfHwgaGFzSW5kZXhlZFByb3BlcnR5KQorICAgICAgICAgICAgICAgICAgICBpZiAoaGFz
U3RyaW5nUHJvcGVydHkgfHwgKGhhc0luZGV4ZWRQcm9wZXJ0eSAmJiAhaWdub3JlSW5kZXhlZCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICArK21f
aW5kZXg7CkBAIC03OTksMTMgKzc3OSw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4g
b2JqZWN0RG9uZShtX251bVNlcmlhbGl6ZWRQcm9wZXJ0aWVzLCBzZXJpYWxpemVyKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHZpcnR1YWwgdWludDMyX3QgZXhlY0RlcHRoKCkgY29uc3QgeyByZXR1
cm4gbV9pc1NlcmlhbGl6aW5nQWNjZXNzb3IgPyAxIDogMDsgfQotCi0gICAgcHJvdGVjdGVkOgot
ICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogb2JqZWN0RG9uZSh1bnNpZ25lZCBudW1Qcm9wZXJ0
aWVzLCBTZXJpYWxpemVyJikgPSAwOworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBtX3By
b3BlcnR5TmFtZXM7CiAKICAgICBwcml2YXRlOgotICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5
PiBtX3Byb3BlcnR5TmFtZXM7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IG1fcHJvcGVy
dHlOYW1lOwogICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgICAgICB1bnNpZ25lZCBtX251
bVNlcmlhbGl6ZWRQcm9wZXJ0aWVzOwpAQCAtODIyLDYgKzc5OCwxOCBAQCBwcml2YXRlOgogICAg
ICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShT
ZXJpYWxpemVyJiBzZXJpYWxpemVyKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wcm9w
ZXJ0eU5hbWVzLklzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9
IGNvbXBvc2l0ZSgpLT5HZXRQcm9wZXJ0eU5hbWVzKCk7CisgICAgICAgICAgICAgICAgaWYgKFN0
YXRlQmFzZSogbmV3U3RhdGUgPSBzZXJpYWxpemVyLmNoZWNrRXhjZXB0aW9uKHRoaXMpKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gbmV3U3RhdGU7CisgICAgICAgICAgICAgICAgaWYgKG1f
cHJvcGVydHlOYW1lcy5Jc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXJp
YWxpemVyLnJlcG9ydEZhaWx1cmUodGhpcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gc2VyaWFsaXplUHJvcGVydGllcyhmYWxzZSwgc2VyaWFsaXplcik7CisgICAgICAgIH0K
KwogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUo
dW5zaWduZWQgbnVtUHJvcGVydGllcywgU2VyaWFsaXplciYgc2VyaWFsaXplcikKICAgICAgICAg
ewpAQCAtODI5LDExICs4MTcsNTEgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH07CiAKKyAg
ICBjbGFzcyBEZW5zZUFycmF5U3RhdGUgOiBwdWJsaWMgQWJzdHJhY3RPYmplY3RTdGF0ZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBEZW5zZUFycmF5U3RhdGUodjg6OkhhbmRsZTx2ODo6QXJyYXk+
IGFycmF5LCB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydHlOYW1lcywgU3RhdGVCYXNlKiBu
ZXh0KQorICAgICAgICAgICAgOiBBYnN0cmFjdE9iamVjdFN0YXRlKGFycmF5LCBuZXh0KQorICAg
ICAgICAgICAgLCBtX2FycmF5SW5kZXgoMCkKKyAgICAgICAgICAgICwgbV9hcnJheUxlbmd0aChh
cnJheS0+TGVuZ3RoKCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcHJvcGVydHlOYW1lcyA9
IHY4OjpMb2NhbDx2ODo6QXJyYXk+OjpOZXcocHJvcGVydHlOYW1lcyk7CisgICAgICAgIH0KKwor
ICAgICAgICB2aXJ0dWFsIFN0YXRlQmFzZSogYWR2YW5jZShTZXJpYWxpemVyJiBzZXJpYWxpemVy
KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9hcnJheUluZGV4IDwgbV9hcnJheUxl
bmd0aCkgeworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGNv
bXBvc2l0ZSgpLkFzPHY4OjpBcnJheT4oKS0+R2V0KG1fYXJyYXlJbmRleCk7CisgICAgICAgICAg
ICAgICAgbV9hcnJheUluZGV4Kys7CisgICAgICAgICAgICAgICAgaWYgKFN0YXRlQmFzZSogbmV3
U3RhdGUgPSBzZXJpYWxpemVyLmNoZWNrRXhjZXB0aW9uKHRoaXMpKQorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbmV3U3RhdGU7CisgICAgICAgICAgICAgICAgaWYgKFN0YXRlQmFzZSogbmV3
U3RhdGUgPSBzZXJpYWxpemVyLmRvU2VyaWFsaXplKHZhbHVlLCB0aGlzKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG5ld1N0YXRlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0
dXJuIHNlcmlhbGl6ZVByb3BlcnRpZXModHJ1ZSwgc2VyaWFsaXplcik7CisgICAgICAgIH0KKwor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBTdGF0ZUJhc2UqIG9iamVjdERvbmUodW5z
aWduZWQgbnVtUHJvcGVydGllcywgU2VyaWFsaXplciYgc2VyaWFsaXplcikKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIud3JpdGVEZW5zZUFycmF5KG51bVByb3BlcnRp
ZXMsIG1fYXJyYXlMZW5ndGgsIHRoaXMpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICB1aW50MzJfdCBtX2FycmF5SW5kZXg7CisgICAgICAgIHVpbnQzMl90IG1fYXJyYXlMZW5n
dGg7CisgICAgfTsKKwogICAgIGNsYXNzIFNwYXJzZUFycmF5U3RhdGUgOiBwdWJsaWMgQWJzdHJh
Y3RPYmplY3RTdGF0ZSB7CiAgICAgcHVibGljOgotICAgICAgICBTcGFyc2VBcnJheVN0YXRlKHY4
OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgU3RhdGVCYXNlKiBuZXh0KQorICAgICAgICBTcGFy
c2VBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwgdjg6OkhhbmRsZTx2ODo6
QXJyYXk+IHByb3BlcnR5TmFtZXMsIFN0YXRlQmFzZSogbmV4dCkKICAgICAgICAgICAgIDogQWJz
dHJhY3RPYmplY3RTdGF0ZShhcnJheSwgbmV4dCkKICAgICAgICAgeworICAgICAgICAgICAgbV9w
cm9wZXJ0eU5hbWVzID0gdjg6OkxvY2FsPHY4OjpBcnJheT46Ok5ldyhwcm9wZXJ0eU5hbWVzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgU3RhdGVCYXNlKiBhZHZhbmNlKFNlcmlhbGl6
ZXImIHNlcmlhbGl6ZXIpIAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc2VyaWFsaXpl
UHJvcGVydGllcyhmYWxzZSwgc2VyaWFsaXplcik7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3Rl
ZDoKQEAgLTk5NCwxNyArMTAyMiwzNiBAQCBwcml2YXRlOgogICAgICAgICBtX3dyaXRlci53cml0
ZUFycmF5QnVmZmVyKCphcnJheUJ1ZmZlcik7CiAgICAgfQogCi0gICAgc3RhdGljIFN0YXRlQmFz
ZSogbmV3QXJyYXlTdGF0ZSh2ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXksIFN0YXRlQmFzZSog
bmV4dCkKKyAgICBzdGF0aWMgYm9vbCBzaG91bGRTZXJpYWxpemVEZW5zZWx5KHVpbnQzMl90IGxl
bmd0aCwgdWludDMyX3QgcHJvcGVydHlDb3VudCkgCiAgICAgewotICAgICAgICAvLyBGSVhNRTog
dXNlIHBsYWluIEFycmF5IHN0YXRlIHdoZW4gd2UgY2FuIHF1aWNrbHkgY2hlY2sgdGhhdAotICAg
ICAgICAvLyBhbiBhcnJheSBpcyBub3Qgc3BhcnNlIGFuZCBoYXMgb25seSBpbmRleGVkIHByb3Bl
cnRpZXMuCi0gICAgICAgIHJldHVybiBuZXcgU3BhcnNlQXJyYXlTdGF0ZShhcnJheSwgbmV4dCk7
CisgICAgICAgIC8vIExldCBLIGJlIHRoZSBjb3N0IG9mIHNlcmlhbGl6aW5nIGFsbCBwcm9wZXJ0
eSB2YWx1ZXMgdGhhdCBhcmUgdGhlcmUKKyAgICAgICAgLy8gQ29zdCBvZiBzZXJpYWxpemluZyBz
cGFyc2VseTogNSpwcm9wZXJ0eUNvdW50ICsgSyAoNSBieXRlcyBwZXIgdWludDMyX3Qga2V5KQor
ICAgICAgICAvLyBDb3N0IG9mIHNlcmlhbGl6aW5nIGRlbnNlbHk6IEsgKyAxKihsZW5ndGggLSBw
cm9wZXJ0eUNvdW50KSAoMSBieXRlIGZvciBhbGwgcHJvcGVydGllcyB0aGF0IGFyZSBub3QgdGhl
cmUpCisgICAgICAgIC8vIHNvIGRlbnNlbHkgaXMgYmV0dGVyIHRoYW4gc3BhcnNseSB3aGVuZXZl
ciA2KnByb3BlcnR5Q291bnQgPiBsZW5ndGgKKyAgICAgICAgcmV0dXJuIDYgKiBwcm9wZXJ0eUNv
dW50ID49IGxlbmd0aDsKICAgICB9CiAKLSAgICBzdGF0aWMgU3RhdGVCYXNlKiBuZXdPYmplY3RT
dGF0ZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCwgU3RhdGVCYXNlKiBuZXh0KQorICAg
IFN0YXRlQmFzZSogc3RhcnRBcnJheVN0YXRlKHY4OjpIYW5kbGU8djg6OkFycmF5PiBhcnJheSwg
U3RhdGVCYXNlKiBuZXh0KQogICAgIHsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IHBy
b3BlcnR5TmFtZXMgPSBhcnJheS0+R2V0UHJvcGVydHlOYW1lcygpOworICAgICAgICBpZiAoU3Rh
dGVCYXNlKiBuZXdTdGF0ZSA9IGNoZWNrRXhjZXB0aW9uKG5leHQpKQorICAgICAgICAgICAgcmV0
dXJuIG5ld1N0YXRlOworICAgICAgICB1aW50MzJfdCBsZW5ndGggPSBhcnJheS0+TGVuZ3RoKCk7
CisKKyAgICAgICAgaWYgKHNob3VsZFNlcmlhbGl6ZURlbnNlbHkobGVuZ3RoLCBwcm9wZXJ0eU5h
bWVzLT5MZW5ndGgoKSkpIHsKKyAgICAgICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVz
aERlbnNlQXJyYXkobGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBwdXNoKG5ldyBEZW5zZUFy
cmF5U3RhdGUoYXJyYXksIHByb3BlcnR5TmFtZXMsIG5leHQpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVzaFNwYXJzZUFycmF5KGxlbmd0aCk7CisgICAg
ICAgIHJldHVybiBwdXNoKG5ldyBTcGFyc2VBcnJheVN0YXRlKGFycmF5LCBwcm9wZXJ0eU5hbWVz
LCBuZXh0KSk7CisgICAgfQorCisgICAgU3RhdGVCYXNlKiBzdGFydE9iamVjdFN0YXRlKHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBTdGF0ZUJhc2UqIG5leHQpCisgICAgeworICAgICAg
ICBtX3dyaXRlci53cml0ZUdlbmVyYXRlRnJlc2hPYmplY3QoKTsKICAgICAgICAgLy8gRklYTUU6
IGNoZWNrIG5vdCBhIHdyYXBwZXIKLSAgICAgICAgcmV0dXJuIG5ldyBPYmplY3RTdGF0ZShvYmpl
Y3QsIG5leHQpOworICAgICAgICByZXR1cm4gcHVzaChuZXcgT2JqZWN0U3RhdGUob2JqZWN0LCBu
ZXh0KSk7CiAgICAgfQogCiAgICAgLy8gTWFya3Mgb2JqZWN0IGFzIGhhdmluZyBiZWVuIHZpc2l0
ZWQgYnkgdGhlIHNlcmlhbGl6ZXIgYW5kIGFzc2lnbnMgaXQgYSB1bmlxdWUgb2JqZWN0IHJlZmVy
ZW5jZSBJRC4KQEAgLTEwODIsOCArMTEyOSw3IEBAIFNlcmlhbGl6ZXI6OlN0YXRlQmFzZSogU2Vy
aWFsaXplcjo6ZG9TZXJpYWxpemUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlLCBTdGF0CiAg
ICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0Jvb2xlYW5PYmplY3QoKSkKICAgICAgICAgICAgIHdy
aXRlQm9vbGVhbk9iamVjdCh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5Jc0FycmF5
KCkpIHsKLSAgICAgICAgICAgIG1fd3JpdGVyLndyaXRlR2VuZXJhdGVGcmVzaEFycmF5KHZhbHVl
LkFzPHY4OjpBcnJheT4oKS0+TGVuZ3RoKCkpOwotICAgICAgICAgICAgcmV0dXJuIHB1c2gobmV3
QXJyYXlTdGF0ZSh2YWx1ZS5Bczx2ODo6QXJyYXk+KCksIG5leHQpKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGFydEFycmF5U3RhdGUodmFsdWUuQXM8djg6OkFycmF5PigpLCBuZXh0KTsKICAgICAg
ICAgfSBlbHNlIGlmIChWOEZpbGU6Okhhc0luc3RhbmNlKHZhbHVlKSkKICAgICAgICAgICAgIHdy
aXRlRmlsZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKFY4QmxvYjo6SGFzSW5zdGFuY2UodmFs
dWUpKQpAQCAtMTA5OSw4ICsxMTQ1LDcgQEAgU2VyaWFsaXplcjo6U3RhdGVCYXNlKiBTZXJpYWxp
emVyOjpkb1NlcmlhbGl6ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFN0YXQKICAgICAg
ICAgZWxzZSBpZiAodmFsdWUtPklzT2JqZWN0KCkpIHsKICAgICAgICAgICAgIGlmIChpc0hvc3RP
YmplY3QoanNPYmplY3QpIHx8IGpzT2JqZWN0LT5Jc0NhbGxhYmxlKCkgfHwgdmFsdWUtPklzTmF0
aXZlRXJyb3IoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlRXJyb3IoRGF0YUNsb25l
RXJyb3IsIG5leHQpOwotICAgICAgICAgICAgbV93cml0ZXIud3JpdGVHZW5lcmF0ZUZyZXNoT2Jq
ZWN0KCk7Ci0gICAgICAgICAgICByZXR1cm4gcHVzaChuZXdPYmplY3RTdGF0ZShqc09iamVjdCwg
bmV4dCkpOworICAgICAgICAgICAgcmV0dXJuIHN0YXJ0T2JqZWN0U3RhdGUoanNPYmplY3QsIG5l
eHQpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiBoYW5kbGVFcnJvcihEYXRh
Q2xvbmVFcnJvciwgbmV4dCk7CiAgICAgfQpAQCAtMTExNywxMSArMTE2MiwxMiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIHB1c2hPYmplY3RSZWZlcmVuY2UoY29uc3Qgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+JikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRPYmplY3RGcm9tT2JqZWN0
UmVmZXJlbmNlKHVpbnQzMl90IHJlZmVyZW5jZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KikgPSAw
OwogICAgIHZpcnR1YWwgYm9vbCB0cnlHZXRUcmFuc2ZlcnJlZE1lc3NhZ2VQb3J0KHVpbnQzMl90
IGluZGV4LCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIG5l
d0FycmF5KHVpbnQzMl90IGxlbmd0aCkgPSAwOworICAgIHZpcnR1YWwgYm9vbCBuZXdTcGFyc2VB
cnJheSh1aW50MzJfdCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgbmV3RGVuc2VBcnJh
eSh1aW50MzJfdCBsZW5ndGgpID0gMDsKICAgICB2aXJ0dWFsIGJvb2wgbmV3T2JqZWN0KCkgPSAw
OwotICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZUFycmF5KHVpbnQzMl90IGxlbmd0aCwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KikgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBjb21wbGV0ZU9iamVjdCh1
aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7CiAgICAg
dmlydHVhbCBib29sIGNvbXBsZXRlU3BhcnNlQXJyYXkodWludDMyX3QgbnVtUHJvcGVydGllcywg
dWludDMyX3QgbGVuZ3RoLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4qKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGNvbXBsZXRlRGVuc2VBcnJheSh1aW50MzJfdCBudW1Qcm9wZXJ0aWVzLCB1aW50MzJf
dCBsZW5ndGgsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiopID0gMDsKIH07CiAKIC8vIFJlYWRlciBp
cyByZXNwb25zaWJsZSBmb3IgZGVzZXJpYWxpemluZyBwcmltaXRpdmUgdHlwZXMgYW5kCkBAIC0x
MjM0LDE0ICsxMjgwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgY3JlYXRvci5wdXNoT2JqZWN0
UmVmZXJlbmNlKCp2YWx1ZSk7CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIEFy
cmF5VGFnOiB7Ci0gICAgICAgICAgICB1aW50MzJfdCBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAo
IWRvUmVhZFVpbnQzMigmbGVuZ3RoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICBpZiAoIWNyZWF0b3IuY29tcGxldGVBcnJheShsZW5ndGgsIHZhbHVlKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQogICAgICAgICBjYXNlIFJlZ0V4cFRhZzoKICAgICAgICAgICAgIGlmICghcmVhZFJlZ0V4cCh2
YWx1ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI2Niw2ICsxMzA0LDE3
IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQorICAgICAgICBjYXNlIERlbnNlQXJyYXlUYWc6IHsKKyAgICAgICAg
ICAgIHVpbnQzMl90IG51bVByb3BlcnRpZXM7CisgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGg7
CisgICAgICAgICAgICBpZiAoIWRvUmVhZFVpbnQzMigmbnVtUHJvcGVydGllcykpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmxl
bmd0aCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFj
cmVhdG9yLmNvbXBsZXRlRGVuc2VBcnJheShudW1Qcm9wZXJ0aWVzLCBsZW5ndGgsIHZhbHVlKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQogICAgICAgICBjYXNlIEFycmF5QnVmZmVyVmlld1RhZzogewogICAgICAgICAgICAgaWYg
KG1fdmVyc2lvbiA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTEyODks
MTMgKzEzMzgsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2VuZXJhdGVG
cmVzaEFycmF5VGFnOiB7CisgICAgICAgIGNhc2UgR2VuZXJhdGVGcmVzaFNwYXJzZUFycmF5VGFn
OiB7CiAgICAgICAgICAgICBpZiAobV92ZXJzaW9uIDw9IDApCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoOwogICAgICAgICAgICAgaWYg
KCFkb1JlYWRVaW50MzIoJmxlbmd0aCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICAgICAgaWYgKCFjcmVhdG9yLm5ld0FycmF5KGxlbmd0aCkpCisgICAgICAgICAgICBp
ZiAoIWNyZWF0b3IubmV3U3BhcnNlQXJyYXkobGVuZ3RoKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBj
YXNlIEdlbmVyYXRlRnJlc2hEZW5zZUFycmF5VGFnOiB7CisgICAgICAgICAgICBpZiAobV92ZXJz
aW9uIDw9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdWlu
dDMyX3QgbGVuZ3RoOworICAgICAgICAgICAgaWYgKCFkb1JlYWRVaW50MzIoJmxlbmd0aCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKCFjcmVhdG9yLm5l
d0RlbnNlQXJyYXkobGVuZ3RoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTcwNywxMSArMTc2NiwxNiBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29s
IG5ld0FycmF5KHVpbnQzMl90IGxlbmd0aCkKKyAgICB2aXJ0dWFsIGJvb2wgbmV3U3BhcnNlQXJy
YXkodWludDMyX3QpCisgICAgeworICAgICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiBhcnJheSA9
IHY4OjpBcnJheTo6TmV3KDApOworICAgICAgICBvcGVuQ29tcG9zaXRlKGFycmF5KTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIG5ld0RlbnNlQXJyYXko
dWludDMyX3QgbGVuZ3RoKQogICAgIHsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpBcnJheT4gYXJy
YXkgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgpOwotICAgICAgICBpZiAoYXJyYXkuSXNFbXB0eSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBvcGVuQ29tcG9zaXRlKGFycmF5
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTc4MSwxMiArMTg0NSwzNiBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYXJyYXkg
PSBjb21wb3NpdGUuQXM8djg6OkFycmF5PigpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg
IGFycmF5ID0gdjg6OkFycmF5OjpOZXcobGVuZ3RoKTsKKyAgICAgICAgICAgIGFycmF5ID0gdjg6
OkFycmF5OjpOZXcoKTsKICAgICAgICAgaWYgKGFycmF5LklzRW1wdHkoKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgcmV0dXJuIGluaXRpYWxpemVPYmplY3QoYXJyYXksIG51
bVByb3BlcnRpZXMsIHZhbHVlKTsKICAgICB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgY29tcGxldGVE
ZW5zZUFycmF5KHVpbnQzMl90IG51bVByb3BlcnRpZXMsIHVpbnQzMl90IGxlbmd0aCwgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHY4OjpMb2NhbDx2ODo6QXJy
YXk+IGFycmF5OworICAgICAgICBpZiAobV92ZXJzaW9uID4gMCkgeworICAgICAgICAgICAgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gY29tcG9zaXRlOworICAgICAgICAgICAgaWYgKCFjbG9zZUNvbXBv
c2l0ZSgmY29tcG9zaXRlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBhcnJheSA9IGNvbXBvc2l0ZS5Bczx2ODo6QXJyYXk+KCk7CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGFycmF5LklzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgaWYgKCFpbml0aWFsaXplT2JqZWN0KGFycmF5LCBudW1Qcm9wZXJ0aWVzLCB2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChsZW5ndGggPiBzdGFja0RlcHRo
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDAsIHN0YWNrUG9zID0gc3RhY2tEZXB0aCgpIC0gbGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyssIHN0
YWNrUG9zKyspIHsKKyAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGVsZW0gPSBlbGVt
ZW50KHN0YWNrUG9zKTsKKyAgICAgICAgICAgIGlmICghZWxlbS0+SXNVbmRlZmluZWQoKSkKKyAg
ICAgICAgICAgICAgICBhcnJheS0+U2V0KGksIGVsZW0pOworICAgICAgICB9CisgICAgICAgIHBv
cChsZW5ndGgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKICAgICB2aXJ0dWFsIHZv
aWQgcHVzaE9iamVjdFJlZmVyZW5jZShjb25zdCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4mIG9iamVj
dCkKICAgICB7CiAgICAgICAgIG1fb2JqZWN0UG9vbC5hcHBlbmQob2JqZWN0KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>