<?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>150720</bug_id>
          
          <creation_ts>2015-10-30 10:42:33 -0700</creation_ts>
          <short_desc>B3 should be able to compile a control flow diamond</short_desc>
          <delta_ts>2015-10-30 14:50:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150725</blocked>
    
    <blocked>150279</blocked>
    
    <blocked>150721</blocked>
    
    <blocked>150726</blocked>
    
    <blocked>150727</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1137890</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 10:42:33 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137934</commentid>
    <comment_count>1</comment_count>
      <attachid>264411</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 12:43:22 -0700</bug_when>
    <thetext>Created attachment 264411
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137951</commentid>
    <comment_count>2</comment_count>
      <attachid>264413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 13:48:43 -0700</bug_when>
    <thetext>Created attachment 264413
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137952</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-30 13:50:25 -0700</bug_when>
    <thetext>Attachment 264413 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:540:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:541:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:541:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:573:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:574:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:574:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:603:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:604:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:604:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:67:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCode.cpp:88:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.cpp:146:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.cpp:178:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:47:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:48:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 15 in 31 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137970</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-30 14:40:51 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=264413&amp;action=review

&gt; Source/JavaScriptCore/b3/B3Const64Value.cpp:68
&gt; +    return proc.add&lt;Const64Value&gt;(origin(), m_value == other-&gt;asInt64());

Oops.

&gt; Source/JavaScriptCore/b3/B3Const64Value.cpp:75
&gt; +    return proc.add&lt;Const64Value&gt;(origin(), m_value != other-&gt;asInt64());

ditto

&gt; Source/JavaScriptCore/b3/B3ConstDoubleValue.cpp:68
&gt; +    return proc.add&lt;ConstDoubleValue&gt;(origin(), m_value == other-&gt;asDouble());

ditto

&gt; Source/JavaScriptCore/b3/B3ConstDoubleValue.cpp:75
&gt; +    return proc.add&lt;ConstDoubleValue&gt;(origin(), m_value != other-&gt;asDouble());

ditto

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:683
&gt; +        // In B3 it&apos;s possible to branch on any value. The semantics of:
&gt; +        //
&gt; +        //     Branch(value)
&gt; +        //
&gt; +        // Are guaranteed to be identical to:
&gt; +        //
&gt; +        //     Branch(NotEqual(value, 0))

I have the feeling this comment would have more visibility next to the opcode definition instead of at the lowering phase.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:253
&gt; +                m_changed = true;
&gt; +                m_changedCFG = true;

Might be easier to loop over (m_changed || m_changedCFG) since m_changedCFG implies m_changed

&gt; Source/JavaScriptCore/b3/B3UpsilonValue.h:42
&gt; +    void setPhi(Value* phi) { m_phi = phi; }

ASSERT(phi-&gt;type() == [value]-&gt;type());
ASSERT(phi-&gt;opcode() == phi)

&gt; Source/JavaScriptCore/b3/B3UpsilonValue.h:57
&gt; +        if (phi)

ASSERT(phi-&gt;opcode() == phi)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137972</commentid>
    <comment_count>5</comment_count>
      <attachid>264413</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-30 14:42:01 -0700</bug_when>
    <thetext>Comment on attachment 264413
the patch

Please check the previous comments before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137973</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 14:43:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264413&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Const64Value.cpp:68
&gt; &gt; +    return proc.add&lt;Const64Value&gt;(origin(), m_value == other-&gt;asInt64());
&gt; 
&gt; Oops.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Const64Value.cpp:75
&gt; &gt; +    return proc.add&lt;Const64Value&gt;(origin(), m_value != other-&gt;asInt64());
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ConstDoubleValue.cpp:68
&gt; &gt; +    return proc.add&lt;ConstDoubleValue&gt;(origin(), m_value == other-&gt;asDouble());
&gt; 
&gt; ditto
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ConstDoubleValue.cpp:75
&gt; &gt; +    return proc.add&lt;ConstDoubleValue&gt;(origin(), m_value != other-&gt;asDouble());
&gt; 
&gt; ditto

Fixed those.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:683
&gt; &gt; +        // In B3 it&apos;s possible to branch on any value. The semantics of:
&gt; &gt; +        //
&gt; &gt; +        //     Branch(value)
&gt; &gt; +        //
&gt; &gt; +        // Are guaranteed to be identical to:
&gt; &gt; +        //
&gt; &gt; +        //     Branch(NotEqual(value, 0))
&gt; 
&gt; I have the feeling this comment would have more visibility next to the
&gt; opcode definition instead of at the lowering phase.

B3Opcode.h has a sort of similar comment.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:253
&gt; &gt; +                m_changed = true;
&gt; &gt; +                m_changedCFG = true;
&gt; 
&gt; Might be easier to loop over (m_changed || m_changedCFG) since m_changedCFG
&gt; implies m_changed

I changed it so that the &quot;if (m_changedCFG)&quot; check in the fixpoint also sets m_changed, so if you set m_changedCFG it implies m_changed automatically.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3UpsilonValue.h:42
&gt; &gt; +    void setPhi(Value* phi) { m_phi = phi; }
&gt; 
&gt; ASSERT(phi-&gt;type() == [value]-&gt;type());
&gt; ASSERT(phi-&gt;opcode() == phi)
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3UpsilonValue.h:57
&gt; &gt; +        if (phi)
&gt; 
&gt; ASSERT(phi-&gt;opcode() == phi)

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137981</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-30 14:50:27 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/191816</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264411</attachid>
            <date>2015-10-30 12:43:22 -0700</date>
            <delta_ts>2015-10-30 13:48:43 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>33616</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuY3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw1
MCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjCiAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gY29uZCkKK3sKKyAgICBz
d2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJEb3VibGVFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRG91
YmxlTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUdyZWF0ZXJUaGFu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVM
ZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVMZXNzVGhhbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUxlc3NUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlRXF1YWxPclVub3JkZXJlZDoKKyAg
ICAgICAgb3V0LnByaW50KCJEb3VibGVFcXVhbE9yVW5vcmRlcmVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkOgor
ICAgICAgICBvdXQucHJpbnQoIkRvdWJsZU5vdEVxdWFsT3JVbm9yZGVyZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUdyZWF0ZXJUaGFuT3JVbm9y
ZGVyZWQ6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW5PckVxdWFsT3JVbm9yZGVyZWQ6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlR3JlYXRl
clRoYW5PckVxdWFsT3JVbm9yZGVyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6OkRvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQ6CisgICAgICAgIG91dC5wcmlu
dCgiRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQ6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTYxNCw2ICsxNjE0LDcgQEAgY2xh
c3MgUHJpbnRTdHJlYW07CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwogdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uKTsKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUNvbmRpdGlvbik7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkocmV2aXNpb24gMTkxNzk2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc1LDggKzc1LDkgQEAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvYwogfQogCiAvLyBUaGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJs
b2NrcyB0aGF0IGFyZW4ndCByZWFjaGFibGUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
Pgotdm9pZCByZXNldFJlYWNoYWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiYgYmxvY2tzKQordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgRGVs
ZXRlRnVuY3Rvcj4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoCisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcywgY29uc3QgRGVsZXRlRnVuY3RvciYgZGVsZXRl
RnVuY3RvcikKIHsKICAgICAvLyBDbGVhciBhbGwgcHJlZGVjZXNzb3IgbGlzdHMgZmlyc3QuCiAg
ICAgZm9yIChhdXRvJiBibG9jayA6IGJsb2NrcykKQEAgLTkyLDggKzkzLDEwIEBAIHZvaWQgcmVz
ZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6dW5pcXUKICAgICB9CiAKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmIChibG9ja3Nb
aV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS0+cHJl
ZGVjZXNzb3JzKCkuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBkZWxldGVGdW5jdG9yKGJsb2Nr
c1tpXS5nZXQoKSk7CiAgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAgICAgICB9
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5o
CShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKICAgICBDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQogICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxl
ZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChp
c0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKEIzOjppc0ludCh0eXBlKCkpKTsKICAgICAg
ICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKICAgICAgICAgQVNTRVJU
KG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENo
ZWNrTXVsKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2
aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdv
cmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDQzIEBAIGJvb2wgc2hvdWxkVmFsaWRhdGVJUigpOwog
Ym9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKIGJvb2wgc2hvdWxkU2F2ZUlSQmVm
b3JlUGhhc2UoKTsKIAordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUgSW5w
dXRUeXBlLCB0eXBlbmFtZSBCaXRzVHlwZT4KK2lubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFz
SW1wbChJbnB1dFR5cGUgb3JpZ2luYWxWYWx1ZSkKK3sKKyAgICAvLyBHZXQgdGhlIHJhdyBiaXRz
IG9mIHRoZSBvcmlnaW5hbCB2YWx1ZS4KKyAgICBCaXRzVHlwZSBvcmlnaW5hbEJpdHMgPSBiaXR3
aXNlX2Nhc3Q8Qml0c1R5cGU+KG9yaWdpbmFsVmFsdWUpOworCisgICAgLy8gQ29udmVydCB0aGUg
b3JpZ2luYWwgdmFsdWUgdG8gdGhlIGRlc2lyZWQgcmVzdWx0IHR5cGUuCisgICAgUmVzdWx0VHlw
ZSByZXN1bHQgPSBzdGF0aWNfY2FzdDxUPihvcmlnaW5hbFZhbHVlKTsKKworICAgIC8vIENvbnZl
cnQgdGhlIGNvbnZlcnRlZCB2YWx1ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCB0eXBlLiBUaGUgb3Jp
Z2luYWwgdmFsdWUgaXMgcmVwcmVzZW50YWJsZQorICAgIC8vIHVzaW5nIHRoZSBuZXcgdHlwZSBp
ZiBzdWNoIHJvdW5kLXRyaXBwaW5nIGRvZXNuJ3QgbG9zZSBiaXRzLgorICAgIElucHV0VHlwZSBu
ZXdWYWx1ZSA9IHN0YXRpY19jYXN0PElucHV0VHlwZT4ocmVzdWx0KTsKKworICAgIC8vIEdldCB0
aGUgcmF3IGJpdHMgb2YgdGhlIHJvdW5kLXRyaXBwZWQgdmFsdWUuCisgICAgQml0c1R5cGUgbmV3
Qml0cyA9IGJpdHdpc2VfY2FzdDxCaXRzVHlwZT4obmV3VmFsdWUpOworICAgIAorICAgIHJldHVy
biBvcmlnaW5hbEJpdHMgPT0gbmV3Qml0czsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0
VHlwZT4KK2lubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFzKGludDMyX3QgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzSW1wbDxSZXN1bHRUeXBlLCBpbnQzMl90LCBpbnQz
Ml90Pih2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGU+CitpbmxpbmUg
Ym9vbCBpc1JlcHJlc2VudGFibGVBcyhpbnQ2NF90IHZhbHVlKQoreworICAgIHJldHVybiBpc1Jl
cHJlc2VudGFibGVBc0ltcGw8UmVzdWx0VHlwZSwgaW50NjRfdCwgaW50NjRfdD4odmFsdWUpOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgoraW5saW5lIGJvb2wgaXNSZXByZXNl
bnRhYmxlQXMoZG91YmxlIHZhbHVlKQoreworICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBc0lt
cGw8UmVzdWx0VHlwZSwgZG91YmxlLCBpbnQ2NF90Pih2YWx1ZSk7Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwogCiAjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMTkxNzk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjEsNiArNjEsMjAgQEAgVmFsdWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQo
UHJvY2VkdQogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3Zh
bHVlIC0gb3RoZXItPmFzSW50MzIoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OmVxdWFs
Q29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXItPmFzSW50
MzIoKSk7Cit9CisKK1ZhbHVlKiBDb25zdDMyVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgIT0gb3RoZXItPmFzSW50MzIoKSk7Cit9CisKIHZv
aWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAg
IG91dC5wcmludChtX3ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBwdWJs
aWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBlcXVhbENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIG5v
dEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsK
IAogcHJvdGVjdGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEs
MjAgQEAgVmFsdWUqIENvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdQogICAgIHJldHVy
biBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzSW50
NjQoKSk7CiB9CiAKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRW
YWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgPT0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1ZhbHVl
KiBDb25zdDY0VmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSog
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgIT0gb3RoZXItPmFzSW50NjQoKSk7Cit9CisKIHZvaWQgQ29uc3Q2NFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIG91dC5wcmludChtX3ZhbHVl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZp
c2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFk
ZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAg
IFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVl
KiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJv
Y2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKIAogcHJvdGVjdGVkOgogICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZpc2lv
biAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsNiArNjEsMjAgQEAgVmFsdWUqIENvbnN0RG91Ymxl
VmFsdWU6OnN1YkNvbnN0YW50KFBybwogICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZh
bHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0RvdWJsZSgpKTsKIH0KIAorVmFsdWUq
IENvbnN0RG91YmxlVmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSog
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmln
aW4oKSwgbV92YWx1ZSA9PSBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1ZhbHVlKiBDb25zdERv
dWJsZVZhbHVlOjpub3RFcXVhbENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVy
KSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgIT0gb3RoZXItPmFzRG91YmxlKCkpOworfQorCiB2b2lkIENvbnN0RG91YmxlVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50Zigi
JWxlIiwgbV92YWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDgg
QEAgcHVibGljOgogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMy
X3Qgb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNv
bnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNywxOSBAQCBDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQogewogfQog
Cit2b2lkIENvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcChjb25zdCBGcmVxdWVudGVkQmxvY2sm
IGRlc3RpbmF0aW9uKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gaW5kZXgoKTsKKyAgICBPcmln
aW4gb3JpZ2luID0gb3JpZ2luKCk7CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25l
cjsKKworICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOworCisgICAgbmV3
ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgZGVzdGluYXRpb24pOwor
CisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKK30KKwogdm9pZCBDb250cm9sVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KGxpc3REdW1wKG1f
c3VjY2Vzc29ycykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZh
bHVlLmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02NCw2ICs2NCwxMyBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yczsgfQogICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1
Y2Nlc3NvcnM7IH0KIAorICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFrZW4oKSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3IoMCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHRha2VuKCkgeyBy
ZXR1cm4gc3VjY2Vzc29yKDApOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBub3RUYWtl
bigpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcigxKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYg
bm90VGFrZW4oKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoMSk7IH0KKworICAgIHZvaWQgY29u
dmVydFRvSnVtcChjb25zdCBGcmVxdWVudGVkQmxvY2smIGRlc3RpbmF0aW9uKTsKKwogcHJvdGVj
dGVkOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTcsMTIgKzIxNyw4IEBAIHB1Ymxp
YzoKIAogICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQogICAgIHsKLSAgICAgICAgaWYgKHZhbHVl
LT5oYXNJbnQoKSkgewotICAgICAgICAgICAgaW50NjRfdCBmdWxsVmFsdWUgPSB2YWx1ZS0+YXNJ
bnQoKTsKLSAgICAgICAgICAgIGludDMyX3QgaW1tZWRpYXRlVmFsdWUgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihmdWxsVmFsdWUpOwotICAgICAgICAgICAgaWYgKGZ1bGxWYWx1ZSA9PSBpbW1lZGlh
dGVWYWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0oaW1tZWRpYXRlVmFsdWUp
OwotICAgICAgICB9CisgICAgICAgIGlmICh2YWx1ZS0+cmVwcmVzZW50YWJsZUFzPGludDMyX3Q+
KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0odmFsdWUtPmFzTnVtYmVyPGludDMyX3Q+
KCkpOwogICAgICAgICByZXR1cm4gQXJnKCk7CiAgICAgfQogCkBAIC02NTcsNiArNjUzLDY2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgYm9vbCB0cnlVcHNp
bG9uKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZCgKKyAgICAgICAgICAgIHJl
bGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgIGltbU9yVG1wKHZh
bHVlKSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+
cGhpKCkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlQaGko
KQorICAgIHsKKyAgICAgICAgLy8gT3VyIHNlbWFudGljcyBhcmUgZGV0ZXJtaW5lZCBieSBVcHNp
bG9ucywgc28gd2UgaGF2ZSBub3RoaW5nIHRvIGRvIGhlcmUuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgdHJ5QnJhbmNoKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYnJhbmNoIGZ1c2lvbiBieSBkZWxlZ2F0aW5nIHRvIGEg
cGF0dGVybiBtYXRjaGVyIGZvciBjb21wYXJpc29ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyMQorCisgICAgICAgIC8vIEluIEIzIGl0
J3MgcG9zc2libGUgdG8gYnJhbmNoIG9uIGFueSB2YWx1ZS4gVGhlIHNlbWFudGljcyBvZjoKKyAg
ICAgICAgLy8KKyAgICAgICAgLy8gICAgIEJyYW5jaCh2YWx1ZSkKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQXJlIGd1YXJhbnRlZWQgdG8gYmUgaWRlbnRpY2FsIHRvOgorICAgICAgICAvLworICAg
ICAgICAvLyAgICAgQnJhbmNoKE5vdEVxdWFsKHZhbHVlLCAwKSkKKworICAgICAgICBpZiAoIWlz
SW50KHZhbHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRv
dWJsZSBicmFuY2hlcy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA3MjcKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgICAgIEFpcjo6T3Bjb2RlIG9wY29kZTsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS0+
dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBvcGNvZGUgPSBCcmFu
Y2hUZXN0MzI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgIG9wY29kZSA9IEJyYW5jaFRlc3Q2NDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgQXJnIHJlc0NvbmQgPSBBcmc6
OnJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8pOworCisgICAgICAgIEFyZyBhZGRyID0g
bG9hZEFkZHIodmFsdWUpOworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByZXNDb25k
LmtpbmQoKSwgYWRkci5raW5kKCksIEFyZzo6SW1tKSkgeworICAgICAgICAgICAgY29tbWl0SW50
ZXJuYWwodmFsdWUpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgYWRkciwg
QXJnOjppbW0oLTEpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAg
ICAgICAgYXBwZW5kKG9wY29kZSwgcmVzQ29uZCwgdG1wKHZhbHVlKSwgQXJnOjppbW0oLTEpKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCiAgICAgYm9vbCB0cnlJZGVudGl0eShWYWx1
ZSogdmFsdWUpCiAgICAgewogICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVl
LT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVy
bnMJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsMTEgQEAgQ29u
c3Q2NCA9IENvbnN0NjQoKQogU3RhY2tTbG90ID0gU3RhY2tTbG90KCkKIEZyYW1lUG9pbnRlciA9
IEZyYW1lUG9pbnRlcigpCiAKK1Vwc2lsb24gPSBVcHNpbG9uKHZhbHVlKQorUGhpID0gUGhpKCkK
KworQnJhbmNoID0gQnJhbmNoKHZhbHVlKQorCiAjIEl0IHdvdWxkIGJlIGZhbnRhc3RpYyB0byBu
b3QgaGF2ZSB0byBoYXZlIHRoaXMgaGVyZSwgYnV0IHRoZSBwaGlsb3NvcGh5IG9mIG91ciBsb3dl
cmluZyBpcyB0aGF0CiAjIGl0IHNob3VsZCBiZSBzb3VuZCBldmVuIGlmIHdlIGhhdmVuJ3QgcnVu
IG9wdGltaXphdGlvbnMuCiBJZGVudGl0eSA9IElkZW50aXR5KHZhbHVlKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw3IEBA
IGVudW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgRFRvSTMyLAogCiAgICAgLy8gUG9seW1vcnBo
aWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMy
IDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCi0gICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAg
ICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLCBhbmQgIlRvQm9vbGVhbiIgaXMganVzdCBOb3RFcXVh
bCh4LCAwKS4KICAgICBFcXVhbCwKICAgICBOb3RFcXVhbCwKICAgICBMZXNzVGhhbiwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTkxNzk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjIsNyArNjIsMTMgQEAgdm9pZCBQcm9jZWR1cmU6OnJlc2V0VmFsdWVPd25lcnMo
KQogCiB2b2lkIFByb2NlZHVyZTo6cmVzZXRSZWFjaGFiaWxpdHkoKQogewotICAgIEIzOjpyZXNl
dFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KAorICAg
ICAgICBtX2Jsb2NrcywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBkZWxldGVkKSB7CisgICAg
ICAgICAgICAvLyBHb3R0YSBkZWxldGUgdGhlIHZhbHVlcyBpbiB0aGlzIGJsb2NrLgorICAgICAg
ICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqZGVsZXRlZCkKKyAgICAgICAgICAgICAgICBkZWxl
dGVWYWx1ZSh2YWx1ZSk7CisgICAgICAgIH0pOwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw2
ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICAgICAg
ZG8gewogICAgICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7CisgICAgICAgICAgICBtX2NoYW5n
ZWRDRkcgPSBmYWxzZTsKIAogICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
cHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAgICAgICAgICBtX2Jsb2NrID0gYmxv
Y2s7CkBAIC02Myw2ICs2NCw5IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICBibG9jay0+cmVt
b3ZlTm9wcyhtX3Byb2MpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAobV9jaGFu
Z2VkQ0ZHKQorICAgICAgICAgICAgICAgIG1fcHJvYy5yZXNldFJlYWNoYWJpbGl0eSgpOworCiAg
ICAgICAgICAgICBVc2VDb3VudHMgdXNlQ291bnRzKG1fcHJvYyk7CiAgICAgICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IG1fcHJvYy52YWx1ZXMoKSkgewogICAgICAgICAgICAgICAgIGlmICgh
dXNlQ291bnRzW3ZhbHVlXSAmJiAhdmFsdWUtPmVmZmVjdHMoKS5tdXN0RXhlY3V0ZSgpKSB7CkBA
IC0xMDksMTAgKzExMyw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXNJbnQobV92YWx1
ZS0+dHlwZSgpKSkgewogICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0YW50
ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKICAgICAgICAgICAg
ICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENvbnN0
YW50KTsKLSAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFkZCA9IG1faW5zZXJ0aW9uU2V0Lmlu
c2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+b3JpZ2luKCks
IG1fdmFsdWUtPmNoaWxkKDApLCBuZWdhdGVkQ29uc3RhbnQpOwotICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFkZCk7Ci0gICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTcyLDYgKzE3NSw3OSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAgIGNh
c2UgRXF1YWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisKKyAgICAgICAg
ICAgIC8vIFR1cm4gdGhpczogRXF1YWwoRXF1YWwoeCwgMCksIDApCisgICAgICAgICAgICAvLyBJ
bnRvIHRoaXM6IE5vdEVxdWFsKHgsIDApCisgICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBFcXVhbCAmJiB2YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMCkKKyAgICAg
ICAgICAgICAgICAmJiB2YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDEpLT5pc051bWJlcigwKSkgewor
ICAgICAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAg
ICAgTm90RXF1YWwsIHZhbHVlLT5vcmlnaW4oKSwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUt
PmNoaWxkKDApLT5jaGlsZCgwKSwgdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhp
cyBFcXVhbChib29sLCAxKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBib29sCisgICAgICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDApLT5yZXR1cm5zQm9vbCgpICYmIHZhbHVlLT5jaGlsZCgx
KS0+aXNJbnQzMigxKSkgeworICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50
aXR5KHZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
RklYTUU6IEhhdmUgYSBjb21wYXJlLWZsaXBwaW5nIG9wdGltaXphdGlvbiwgbGlrZSBFcXVhbChM
ZXNzVGhhbihhLCBiKSwgMCkgdHVybnMgaW50bworICAgICAgICAgICAgLy8gR3JlYXRlckVxdWFs
KGEsIGIpLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDcyNgorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0MSwg
Y29uc3QyKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCisgICAg
ICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKHZhbHVlLT5jaGlsZCgwKS0+ZXF1YWxDb25zdGFu
dChtX3Byb2MsIHZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAKKyAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0
aXZpdHkoKTsKKworICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2wo
KSkgeworICAgICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMCkKKyAg
ICAgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGJvb2wKKyAgICAgICAgICAgICAgICBpZiAodmFs
dWUtPmNoaWxkKDEpLT5pc0ludDMyKDApKSB7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5y
ZXBsYWNlV2l0aElkZW50aXR5KHZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6
IE5vdEVxdWFsKGJvb2wsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBFcXVhbChi
b29sLCAwKQorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMSktPmlzSW50MzIoMSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXc8VmFsdWU+KAorICAgICAgICAg
ICAgICAgICAgICAgICAgRXF1YWwsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUtPmNoaWxkKDApLCB2
YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1
YWwoY29uc3QxLCBjb25zdDIpCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IGNvbnN0MSAhPSBj
b25zdDIKKyAgICAgICAgICAgIHJlcGxhY2VXaXRoTmV3VmFsdWUodmFsdWUtPmNoaWxkKDApLT5u
b3RFcXVhbENvbnN0YW50KG1fcHJvYywgdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hp
bGQoMCktPmlzTnVtYmVyKDApKSB7CisgICAgICAgICAgICAgICAgdmFsdWUtPmNvbnZlcnRUb0p1
bXAodmFsdWUtPm5vdFRha2VuKCkpOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKS0+
aXNOb3ROdW1iZXIoMCkpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+Y29udmVydFRvSnVtcCh2
YWx1ZS0+dGFrZW4oKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBtX2NoYW5nZWRDRkcgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDYsNiArMjgy
LDEyIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIHJlcGxhY2VXaXRo
TmV3KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXBsYWNlV2l0aE5l
d1ZhbHVlKG1fcHJvYy5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pKTsKKyAgICB9CisKICAg
ICB2b2lkIHJlcGxhY2VXaXRoTmV3VmFsdWUoVmFsdWUqIG5ld1ZhbHVlKQogICAgIHsKICAgICAg
ICAgaWYgKCFuZXdWYWx1ZSkKQEAgLTIyMSw2ICszMDMsNyBAQCBwcml2YXRlOgogICAgIHVuc2ln
bmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CiAgICAgYm9vbCBtX2NoYW5nZWQ7Cisg
ICAgYm9vbCBtX2NoYW5nZWRDRkc7CiB9OwogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNp
b24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTMgQEAgVXBzaWxvblZhbHVlOjp+VXBzaWxv
blZhbHVlKCkKIAogdm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworICAgIGlmICht
X3BoaSkKKyAgICAgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBXZSB3YW50IHRvIGhhdmUgYSBkdW1wIGZvciB3aGVuIHRoZSBQaGkgaXNu
J3Qgc2V0IHlldCwgc2luY2UgYWx0aG91Z2ggc3VjaCBJUiB3b24ndCBwYXNzCisgICAgICAgIC8v
IHZhbGlkYXRpb24sIHdlIG1heSBoYXZlIHN1Y2ggSVIgYXMgYW4gaW50ZXJtZWRpYXRlIHN0ZXAu
CisgICAgICAgIG91dC5wcmludCgiXihudWxsKSIpOworICAgIH0KIH0KIAogfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE4ICszOSwyMyBAQCBwdWJsaWM6CiAg
ICAgflVwc2lsb25WYWx1ZSgpOwogCiAgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGhpOyB9CisgICAgdm9pZCBzZXRQaGkoVmFsdWUqIHBoaSkgeyBtX3BoaSA9IHBoaTsgfQogCiBw
cm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Ci0gICAgCi0gICAgVXBz
aWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwaGkpCisKKyAgICAvLyBOb3RlIHRoYXQgcGFzc2luZyB0aGUgUGhpIGR1cmluZyBjb25z
dHJ1Y3Rpb24gaXMgb3B0aW9uYWwuIEEgdmFsaWQgcGF0dGVybiBpcyB0byBmaXJzdCBjcmVhdGUK
KyAgICAvLyB0aGUgVXBzaWxvbnMgd2l0aG91dCB0aGUgUGhpLCB0aGVuIGNyZWF0ZSB0aGUgUGhp
LCB0aGVuIGdvIGJhY2sgYW5kIHRlbGwgdGhlIFVwc2lsb25zIGFib3V0CisgICAgLy8gdGhlIFBo
aS4gVGhpcyBhbGxvd3MgeW91IHRvIGVtaXQgY29kZSBpbiBpdHMgbmF0dXJhbCBvcmRlci4KKyAg
ICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1
ZSwgVmFsdWUqIHBoaSA9IG51bGxwdHIpCiAgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSkKICAgICAgICAgLCBtX3BoaShwaGkpCiAgICAgewotICAgICAgICBB
U1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgICAgIGlmIChwaGkpCisg
ICAgICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CiAgICAgfQog
CiAgICAgVmFsdWUqIG1fcGhpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNiArMjgxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgogICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4o
KS0+cGhpKCksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+cGhpKCkt
PnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZUluUHJvYy5jb250YWlucyh2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpLT5waGkoKSksICgiQXQg
IiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw2ICsxMjcsNDUgQEAg
VmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYQogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitWYWx1ZSogVmFsdWU6OmVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
KSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitWYWx1ZSogVmFsdWU6Om5vdEVx
dWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25zdAoreworICAgIHJldHVybiBudWxs
cHRyOworfQorCitib29sIFZhbHVlOjpyZXR1cm5zQm9vbCgpIGNvbnN0Cit7CisgICAgaWYgKHR5
cGUoKSAhPSBJbnQzMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN3aXRjaCAob3Bjb2Rl
KCkpIHsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIHJldHVybiBhc0ludDMyKCkgPT0gMCB8
fCBhc0ludDMyKCkgPT0gMTsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgcmV0dXJuIGNoaWxk
KDEpLT5pc0ludDMyKDEpOworICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAg
ICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1
YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJl
bG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGNhc2UgUGhpOgorICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGhhdmUgYSBzdG9yeSBoZXJlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNzI1CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCiBFZmZlY3RzIFZhbHVlOjplZmZl
Y3RzKCkgY29uc3QKIHsKICAgICBFZmZlY3RzIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTgsMTIgKzk4LDIyIEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CiAKKyAg
ICAvLyBXaGF0IGZvbGxvd3MgYXJlIGEgYnVuY2ggb2YgaGVscGVycyBmb3IgaW5zcGVjdGluZyBh
bmQgbW9kaWZ5aW5nIHZhbHVlcy4gTm90ZSB0aGF0IHdlIGhhdmUgYQorICAgIC8vIGJ1bmNoIG9m
IGRpZmZlcmVudCBpZGlvbXMgZm9yIGltcGxlbWVudGluZyBzdWNoIGhlbHBlcnMuIFlvdSBjYW4g
dXNlIHZpcnR1YWwgbWV0aG9kcywgYW5kCisgICAgLy8gb3ZlcnJpZGUgZnJvbSB0aGUgdmFyaW91
cyBWYWx1ZSBzdWJjbGFzc2VzLiBZb3UgY2FuIHB1dCB0aGUgbWV0aG9kIGluc2lkZSBWYWx1ZSBh
bmQgbWFrZSBpdAorICAgIC8vIG5vbi12aXJ0dWFsLCBhbmQgdGhlIGltcGxlbWVudGF0aW9uIGNh
biBzd2l0Y2ggb24gb3Bjb2RlLiBUaGUgbWV0aG9kIGNvdWxkIGJlIGlubGluZSBvciBub3QuCisg
ICAgLy8gSWYgYSBtZXRob2QgaXMgc3BlY2lmaWMgdG8gc29tZSBWYWx1ZSBzdWJjbGFzcywgeW91
IGNvdWxkIHB1dCBpdCBpbiB0aGUgc3ViY2xhc3MsIG9yIHlvdSBjb3VsZAorICAgIC8vIHB1dCBp
dCBvbiBWYWx1ZSBhbnl3YXkuIEl0J3MgZmluZSB0byBwaWNrIHdoYXRldmVyIGZlZWxzIHJpZ2h0
LCBhbmQgd2Ugc2hvdWxkbid0IHJlc3RyaWN0CisgICAgLy8gb3Vyc2VsdmVzIHRvIGFueSBwYXJ0
aWN1bGFyIGlkaW9tLgorCiAgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CiAgICAgCiAgICAg
dmlydHVhbCBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Q7CiAgICAgdmlydHVh
bCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Q7CiAg
ICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBj
b25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSog
b3RoZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIGVxdWFsQ29uc3RhbnQoUHJvY2VkdXJl
JiwgVmFsdWUqIG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBub3RFcXVhbENvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CiAKICAgICBib29sIGhhc0ludDMy
KCkgY29uc3Q7CiAgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CkBAIC0xMjEsNiArMTMxLDE2
IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OwogICAgIGRvdWJsZSBhc0Rv
dWJsZSgpIGNvbnN0OwogCisgICAgYm9vbCBoYXNOdW1iZXIoKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBib29sIHJlcHJlc2VudGFibGVBcygpIGNvbnN0OworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IFQgYXNOdW1iZXIoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBib29sIGlzTnVtYmVyKFQgdmFsdWUpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IGJvb2wgaXNOb3ROdW1iZXIoVCB2YWx1ZSkgY29uc3Q7CisKKyAgICAvLyBCb29sZWFucyBpbiBC
MyBhcmUgQ29uc3QzMigwKSBvciBDb25zdDMyKDEpLiBTbyB0aGlzIGlzIHRydWUgaWYgdGhlIHR5
cGUgaXMgSW50MzIgYW5kIHRoZSBvbmx5CisgICAgLy8gcG9zc2libGUgcmV0dXJuIHZhbHVlcyBh
cmUgMCBvciAxLiBJdCdzIE9LIGZvciB0aGlzIG1ldGhvZCB0byBjb25zZXJ2YXRpdmVseSByZXR1
cm4gZmFsc2UuCisgICAgYm9vbCByZXR1cm5zQm9vbCgpIGNvbnN0OworCiAgICAgRWZmZWN0cyBl
ZmZlY3RzKCkgY29uc3Q7CiAKICAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxOTE3OTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTIzLDYgKzEyMyw3MSBAQCBpbmxpbmUgZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0CiAgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7CiB9CiAKK2lu
bGluZSBib29sIFZhbHVlOjpoYXNOdW1iZXIoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQo
KSB8fCBoYXNEb3VibGUoKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29s
IFZhbHVlOjpyZXByZXNlbnRhYmxlQXMoKSBjb25zdAoreworICAgIHN3aXRjaCAob3Bjb2RlKCkp
IHsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxU
Pihhc0ludDMyKCkpOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgcmV0dXJuIGlzUmVwcmVz
ZW50YWJsZUFzPFQ+KGFzSW50NjQoKSk7CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAg
cmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzRG91YmxlKCkpOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citp
bmxpbmUgVCBWYWx1ZSBWYWx1ZTo6YXNOdW1iZXIoKSBjb25zdAoreworICAgIHN3aXRjaCAob3Bj
b2RlKCkpIHsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxU
Pihhc0ludDMyKCkpOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PFQ+KGFzSW50NjQoKSk7CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQ+KGFzRG91YmxlKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBUKCk7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgVmFs
dWU6OmlzTnVtYmVyKFQgdmFsdWUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChvcGNvZGUoKSkgewor
ICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFz
SW50MzIoKSkgJiYgc3RhdGljX2Nhc3Q8VD4oYXNJbnQzMigpKSA9PSB2YWx1ZTsKKyAgICBjYXNl
IENvbnN0NjQ6CisgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0ludDY0KCkp
ICYmIHN0YXRpY19jYXN0PFQ+KGFzSW50NjQoKSkgPT0gdmFsdWU7CisgICAgY2FzZSBDb25zdERv
dWJsZToKKyAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzPFQ+KGFzRG91YmxlKCkpICYm
IHN0YXRpY19jYXN0PFQ+KGFzRG91YmxlKCkpID09IHZhbHVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citpbmxp
bmUgYm9vbCBWYWx1ZTo6aXNOb3ROdW1iZXIoVCB2YWx1ZSkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG9wY29kZSgpKSB7CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICByZXR1cm4gaXNSZXByZXNl
bnRhYmxlQXM8VD4oYXNJbnQzMigpKSAmJiBzdGF0aWNfY2FzdDxUPihhc0ludDMyKCkpICE9IHZh
bHVlOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFz
PFQ+KGFzSW50NjQoKSkgJiYgc3RhdGljX2Nhc3Q8VD4oYXNJbnQ2NCgpKSAhPSB2YWx1ZTsKKyAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8VD4o
YXNEb3VibGUoKSkgJiYgc3RhdGljX2Nhc3Q8VD4oYXNEb3VibGUoKSkgIT0gdmFsdWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogaW5saW5lIFN0YWNr
bWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQogewogICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFz
PENoZWNrVmFsdWU+KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDkgQEAgdm9pZCBBcmc6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKICAgICBjYXNlIFJlc0NvbmQ6CiAgICAgICAgIG91dC5w
cmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91
YmxlQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzRG91YmxlQ29uZGl0aW9uKCkpOworICAgICAg
ICByZXR1cm47CiAgICAgY2FzZSBTcGVjaWFsOgogICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAoc3BlY2lhbCgpKSk7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjQsNiArNjQsNyBAQCBwdWJs
aWM6CiAgICAgICAgIC8vIHNlY29uZGFyeSBvcGNvZGVzLiBUaGV5IGFyZSBhbHdheXMgIlVzZSIn
ZC4KICAgICAgICAgUmVsQ29uZCwKICAgICAgICAgUmVzQ29uZCwKKyAgICAgICAgRG91YmxlQ29u
ZCwKICAgICAgICAgU3BlY2lhbAogICAgIH07CiAKQEAgLTI2Niw2ICsyNjcsMTQgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIHN0YXRpYyBBcmcgZG91Ymxl
Q29uZChNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBEb3VibGVDb25kOwor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCiAgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lh
bCkKICAgICB7CiAgICAgICAgIEFyZyByZXN1bHQ7CkBAIC0zNDAsNiArMzQ5LDExIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOwogICAgIH0KIAorICAgIGJvb2wg
aXNEb3VibGVDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gRG91
YmxlQ29uZDsKKyAgICB9CisKICAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CkBAIC02NjIsNiArNjc2LDEyIEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAgICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29u
ZGl0aW9uIGFzRG91YmxlQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0RvdWJsZUNvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6RG91YmxlQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVU
eXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZp
c2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4MywxMSBAQCBDQ2FsbFNwZWNpYWwqIENvZGU6OmND
YWxsU3BlY2lhbCgpCiAKIHZvaWQgQ29kZTo6cmVzZXRSZWFjaGFiaWxpdHkoKQogewotICAgIEIz
OjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5
KAorICAgICAgICBtX2Jsb2NrcywKKyAgICAgICAgWyZdIChCYXNpY0Jsb2NrKikgeworICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsIGZvciBkZWxldGVk
IGJsb2Nrcy4KKyAgICAgICAgfSk7CiB9CiAKIHZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDIy
IEBAIE1vdmU2NFRvRG91YmxlIFU6RywgRDpGCiBNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RwogICAg
IFRtcCwgVG1wCiAKK0JyYW5jaFRlc3QzMiBVOkcsIFU6RywgVTpHIC9icmFuY2gKKyAgICBSZXND
b25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIFRtcCwgSW1tCisgICAgUmVzQ29uZCwgQWRkciwg
SW1tCisgICAgUmVzQ29uZCwgSW5kZXgsIEltbQorCitCcmFuY2hUZXN0NjQgVTpHLCBVOkcsIFU6
RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBUbXAsIEltbQor
ICAgIFJlc0NvbmQsIEFkZHIsIEltbQorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorICAgIFJlc0Nv
bmQsIEluZGV4LCBJbW0KKworQnJhbmNoRG91YmxlIFU6RywgVTpELCBVOkQgL2JyYW5jaAorICAg
IERvdWJsZUNvbmQsIFRtcCwgVG1wCisKIEJyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFu
Y2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAgIFJlc0NvbmQsIEltbSwgVG1wCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShy
ZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9n
ZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAsNyBAQCBkZWYgaXNHRih0
b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2VuKQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwo
SW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCisgICAg
dG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQp
fChSZXNDb25kKXwoRG91YmxlQ29uZCkpXFovCiBlbmQKIAogZGVmIGlzS2V5d29yZCh0b2tlbikK
QEAgLTI0Niw3ICsyNDYsNyBAQCBjbGFzcyBQYXJzZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAog
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKLSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgb3IgUmVzQ29u
ZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQg
a2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3Ig
RG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKICAgICAgICAgYWR2YW5jZQogICAg
ICAgICByZXN1bHQKICAgICBlbmQKQEAgLTgzMCw2ICs4MzAsOCBAQCB3cml0ZUgoIk9wY29kZUdl
bmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4
fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29u
ZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1
bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJEb3VibGVDb25kIgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0RvdWJsZUNvbmRpdGlv
bigpIgogICAgICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264413</attachid>
            <date>2015-10-30 13:48:43 -0700</date>
            <delta_ts>2015-10-30 14:42:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50344</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxODEwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBA
QAorMjAxNS0xMC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEIzIHNob3VsZCBiZSBhYmxlIHRvIGNvbXBpbGUgYSBjb250cm9sIGZsb3cgZGlhbW9uZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzIwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBzdXBwb3J0
IGZvciBCcmFuY2gsIEp1bXAsIFVwc2lsb24sIGFuZCBQaGkuIEFkZHMgc29tZSBiYXNpYyBzdHJl
bmd0aCByZWR1Y3Rpb24gZm9yCisgICAgICAgIGNvbXBhcmlzb25zIGFuZCBib29sZWFuLWxpa2Ug
b3BlcmF0aW9ucy4KKworICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6Cisg
ICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg6CisgICAgICAgIChK
U0M6OkIzOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFj
aGFiaWxpdHkpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOgorICAgICAgICAqIGIzL0Iz
Q29tbW9uLmg6CisgICAgICAgIChKU0M6OkIzOjppc1JlcHJlc2VudGFibGVBc0ltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6aXNSZXByZXNlbnRhYmxlQXMpOgorICAgICAgICAqIGIzL0IzQ29uc3Qz
MlZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChK
U0M6OkIzOjpDb25zdDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJW
YWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjplcXVhbENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6
bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6OmR1bXBN
ZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29u
c3REb3VibGVWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpz
dWJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjplcXVhbENv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEpOgor
ICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29udHJv
bFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1
ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmNvbnZlcnRUb0p1bXApOgorICAg
ICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjND
b250cm9sVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9BaXIuY3BwOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjppbW0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjp0cnlVcHNpbG9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5
UGhpKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QnJhbmNoKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5SnVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUlkZW50aXR5KToKKyAgICAgICAgKiBiMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJuczoKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAq
IGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6cmVzZXRS
ZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDoKKyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1
ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5oOgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVl
OjphY2NlcHRzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhp
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6VXBzaWxvblZhbHVl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmNwcDoKKyAgICAgICAgKiBiMy9C
M1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdWJDb25zdGFudCk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6ZXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6bm90RXF1YWxDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmV0dXJu
c0Jvb2wpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzVHJpU3RhdGUpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmVmZmVjdHMpOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDoKKyAgICAg
ICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50
MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50UHRyKToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludFB0cik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6aXNFcXVhbFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNOdW1iZXIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcHJlc2VudGFibGVB
cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNOdW1iZXIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OnN0YWNrbWFwKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6ZG91YmxlQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3Bl
Y2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0RvdWJsZUNvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6YXNSZXN1bHRDb25kaXRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFz
RG91YmxlQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcpOgorICAg
ICAgICAqIGIzL2Fpci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToK
KyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6CisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKGhp
ZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQpOgorICAgICAgICAodXNhZ2UpOgorICAg
ICAgICAoSlNDOjpCMzo6Y29tcGlsZSk6CisgICAgICAgIChKU0M6OkIzOjppbnZva2UpOgorICAg
ICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0NDIp
OgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3REaWFtb25kKToKKyAg
ICAgICAgKEpTQzo6QjM6OnRlc3RCcmFuY2hOb3RFcXVhbCk6CisgICAgICAgIChKU0M6OkIzOjp0
ZXN0QnJhbmNoRm9sZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0RGlhbW9uZEZvbGQpOgorICAg
ICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAgKHJ1bik6CisgICAgICAgIChtYWluKToKKwog
MjAxNS0xMC0yOSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAg
ICAgIFdlYiBJbnNwZWN0b3I6IERvIG5vdCBzaG93IEphdmFTY3JpcHRDb3JlIGJ1aWx0aW5zIGlu
IGluc3BlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTIsNiArMTEyLDUwIEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWMK
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25k
KQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJs
ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUVxdWFsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVOb3RFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJEb3VibGVOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiRG91Ymxl
R3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkRvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6OkRvdWJsZUxlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUxlc3NUaGFuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhh
bk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlTGVzc1RoYW5PckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVFcXVhbE9yVW5v
cmRlcmVkOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUVxdWFsT3JVbm9yZGVyZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZU5vdEVxdWFsT3JV
bm9yZGVyZWQ6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlTm90RXF1YWxPclVub3JkZXJlZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlR3JlYXRl
clRoYW5PclVub3JkZXJlZDoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVHcmVhdGVyVGhhbk9y
VW5vcmRlcmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZDoKKyAgICAgICAgb3V0LnByaW50KCJE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZDoKKyAgICAg
ICAgb3V0LnByaW50KCJEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3Jk
ZXJlZDoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjE0LDYgKzE2
MTQsNyBAQCBjbGFzcyBQcmludFN0cmVhbTsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7CiB2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24pOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2Vt
Ymxlcjo6RG91YmxlQ29uZGl0aW9uKTsKIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAx
OTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAko
d29ya2luZyBjb3B5KQpAQCAtNzUsOCArNzUsOSBAQCBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBibG9jCiB9CiAKIC8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5k
IHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KLXRlbXBsYXRlPHR5cGVuYW1l
IEJhc2ljQmxvY2s+Ci12b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0
eXBlbmFtZSBEZWxldGVGdW5jdG9yPgordm9pZCByZXNldFJlYWNoYWJpbGl0eSgKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzLCBjb25zdCBEZWxldGVGdW5j
dG9yJiBkZWxldGVGdW5jdG9yKQogewogICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0
cyBmaXJzdC4KICAgICBmb3IgKGF1dG8mIGJsb2NrIDogYmxvY2tzKQpAQCAtODYsMTQgKzg3LDE2
IEBAIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6dW5pcXUKICAgICB3b3JrbGlz
dC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CiAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0g
d29ya2xpc3QucG9wKCkpIHsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBi
bG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKLSAgICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNo
KHN1Y2Nlc3NvcikpCi0gICAgICAgICAgICAgICAgYWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBi
bG9jayk7CisgICAgICAgICAgICBhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKyAg
ICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKICAgICAgICAgfQogICAgIH0KIAog
ICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAg
ICAgaWYgKGJsb2Nrc1tpXS0+cHJlZGVjZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICBpZiAo
YmxvY2tzW2ldLT5wcmVkZWNlc3NvcnMoKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGRlbGV0
ZUZ1bmN0b3IoYmxvY2tzW2ldLmdldCgpKTsKICAgICAgICAgICAgIGJsb2Nrc1tpXSA9IG51bGxw
dHI7CisgICAgICAgIH0KICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBwcml2
YXRlOgogICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCiAgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQogICAgIHsKLSAg
ICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQoQjM6OmlzSW50KHR5
cGUoKSkpOwogICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOwog
ICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8
fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNDMgQEAgYm9vbCBzaG91bGRW
YWxpZGF0ZUlSKCk7CiBib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOwogYm9vbCBz
aG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOwogCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZSBJbnB1dFR5cGUsIHR5cGVuYW1lIEJpdHNUeXBlPgoraW5saW5lIGJvb2wgaXNS
ZXByZXNlbnRhYmxlQXNJbXBsKElucHV0VHlwZSBvcmlnaW5hbFZhbHVlKQoreworICAgIC8vIEdl
dCB0aGUgcmF3IGJpdHMgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLgorICAgIEJpdHNUeXBlIG9yaWdp
bmFsQml0cyA9IGJpdHdpc2VfY2FzdDxCaXRzVHlwZT4ob3JpZ2luYWxWYWx1ZSk7CisKKyAgICAv
LyBDb252ZXJ0IHRoZSBvcmlnaW5hbCB2YWx1ZSB0byB0aGUgZGVzaXJlZCByZXN1bHQgdHlwZS4K
KyAgICBSZXN1bHRUeXBlIHJlc3VsdCA9IHN0YXRpY19jYXN0PFJlc3VsdFR5cGU+KG9yaWdpbmFs
VmFsdWUpOworCisgICAgLy8gQ29udmVydCB0aGUgY29udmVydGVkIHZhbHVlIGJhY2sgdG8gdGhl
IG9yaWdpbmFsIHR5cGUuIFRoZSBvcmlnaW5hbCB2YWx1ZSBpcyByZXByZXNlbnRhYmxlCisgICAg
Ly8gdXNpbmcgdGhlIG5ldyB0eXBlIGlmIHN1Y2ggcm91bmQtdHJpcHBpbmcgZG9lc24ndCBsb3Nl
IGJpdHMuCisgICAgSW5wdXRUeXBlIG5ld1ZhbHVlID0gc3RhdGljX2Nhc3Q8SW5wdXRUeXBlPihy
ZXN1bHQpOworCisgICAgLy8gR2V0IHRoZSByYXcgYml0cyBvZiB0aGUgcm91bmQtdHJpcHBlZCB2
YWx1ZS4KKyAgICBCaXRzVHlwZSBuZXdCaXRzID0gYml0d2lzZV9jYXN0PEJpdHNUeXBlPihuZXdW
YWx1ZSk7CisgICAgCisgICAgcmV0dXJuIG9yaWdpbmFsQml0cyA9PSBuZXdCaXRzOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlPgoraW5saW5lIGJvb2wgaXNSZXByZXNlbnRhYmxl
QXMoaW50MzJfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXNJbXBsPFJl
c3VsdFR5cGUsIGludDMyX3QsIGludDMyX3Q+KHZhbHVlKTsKK30KKwordGVtcGxhdGU8dHlwZW5h
bWUgUmVzdWx0VHlwZT4KK2lubGluZSBib29sIGlzUmVwcmVzZW50YWJsZUFzKGludDY0X3QgdmFs
dWUpCit7CisgICAgcmV0dXJuIGlzUmVwcmVzZW50YWJsZUFzSW1wbDxSZXN1bHRUeXBlLCBpbnQ2
NF90LCBpbnQ2NF90Pih2YWx1ZSk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGU+
CitpbmxpbmUgYm9vbCBpc1JlcHJlc2VudGFibGVBcyhkb3VibGUgdmFsdWUpCit7CisgICAgcmV0
dXJuIGlzUmVwcmVzZW50YWJsZUFzSW1wbDxSZXN1bHRUeXBlLCBkb3VibGUsIGludDY0X3Q+KHZh
bHVlKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCiAKICNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
Y3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwyMCBAQCBWYWx1ZSogQ29u
c3QzMlZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNJbnQzMigpKTsKIH0KIAorVmFs
dWUqIENvbnN0MzJWYWx1ZTo6ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBv
dGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwg
bV92YWx1ZSA9PSBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVmFsdWUqIENvbnN0MzJWYWx1ZTo6
bm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoIW90aGVyLT5oYXNJbnQzMigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhl
ci0+YXNJbnQzMigpKTsKK30KKwogdm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgb3V0LnByaW50KG1fdmFsdWUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5MTc5NikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw2ICs0NCw4IEBAIHB1YmxpYzoKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUq
IHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgVmFsdWUqIGVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBv
dmVycmlkZTsKKyAgICBWYWx1ZSogbm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSog
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAxOTE3
OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSwyMCBAQCBWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzdWJDb25z
dGFudChQcm9jZWR1CiAgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCks
IG1fdmFsdWUgLSBvdGhlci0+YXNJbnQ2NCgpKTsKIH0KIAorVmFsdWUqIENvbnN0NjRWYWx1ZTo6
ZXF1YWxDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSA9PSBvdGhlci0+
YXNJbnQ2NCgpKTsKK30KKworVmFsdWUqIENvbnN0NjRWYWx1ZTo6bm90RXF1YWxDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8
Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhlci0+YXNJbnQ2NCgpKTsKK30K
Kwogdm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7
CiAgICAgb3V0LnByaW50KG1fdmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw2ICs0NCw4IEBA
IHB1YmxpYzoKICAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2Nl
ZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGVxdWFsQ29u
c3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogbm90RXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RE
b3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwy
MCBAQCBWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvCiAgICAgcmV0dXJu
IHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFz
RG91YmxlKCkpOwogfQogCitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6ZXF1YWxDb25zdGFudChQ
cm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5o
YXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRk
PENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlID09IG90aGVyLT5hc0RvdWJsZSgp
KTsKK30KKworVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6Om5vdEVxdWFsQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91
YmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dERvdWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAhPSBvdGhlci0+YXNEb3VibGUoKSk7Cit9
CisKIHZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKIHsKICAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5MTc5NikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNiArNDQsOCBAQCBwdWJsaWM6CiAgICAgVmFsdWUqIGFkZENvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgVmFs
dWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVy
cmlkZTsKICAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBlcXVhbENvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogbm90RXF1YWxD
b25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CiAK
IHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJ
KHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDE5IEBAIENvbnRyb2xWYWx1ZTo6
fkNvbnRyb2xWYWx1ZSgpCiB7CiB9CiAKK3ZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9KdW1w
KGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZGVzdGluYXRpb24pCit7CisgICAgdW5zaWduZWQgaW5k
ZXggPSB0aGlzLT5pbmRleCgpOworICAgIE9yaWdpbiBvcmlnaW4gPSB0aGlzLT5vcmlnaW4oKTsK
KyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworCisgICAgdGhpcy0+Q29udHJv
bFZhbHVlOjp+Q29udHJvbFZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIENvbnRyb2xWYWx1ZShp
bmRleCwgSnVtcCwgb3JpZ2luLCBkZXN0aW5hdGlvbik7CisKKyAgICB0aGlzLT5vd25lciA9IG93
bmVyOworfQorCiB2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKIHsKICAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMTkxNzk2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDYgKzY0LDEzIEBAIHB1YmxpYzoKICAgICBjb25zdCBTdWNjZXNzb3JMaXN0
JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CiAgICAgU3VjY2Vz
c29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQogCisgICAgY29u
c3QgRnJlcXVlbnRlZEJsb2NrJiB0YWtlbigpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcigwKTsg
fQorICAgIEZyZXF1ZW50ZWRCbG9jayYgdGFrZW4oKSB7IHJldHVybiBzdWNjZXNzb3IoMCk7IH0K
KyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5vdFRha2VuKCkgY29uc3QgeyByZXR1cm4gc3Vj
Y2Vzc29yKDEpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBub3RUYWtlbigpIHsgcmV0dXJuIHN1
Y2Nlc3NvcigxKTsgfQorCisgICAgdm9pZCBjb252ZXJ0VG9KdW1wKGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgZGVzdGluYXRpb24pOworCiBwcm90ZWN0ZWQ6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkxNzk2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAi
QjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KQEAgLTIxNywxMiAr
MjE4LDggQEAgcHVibGljOgogCiAgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCiAgICAgewotICAg
ICAgICBpZiAodmFsdWUtPmhhc0ludCgpKSB7Ci0gICAgICAgICAgICBpbnQ2NF90IGZ1bGxWYWx1
ZSA9IHZhbHVlLT5hc0ludCgpOwotICAgICAgICAgICAgaW50MzJfdCBpbW1lZGlhdGVWYWx1ZSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KGZ1bGxWYWx1ZSk7Ci0gICAgICAgICAgICBpZiAoZnVsbFZh
bHVlID09IGltbWVkaWF0ZVZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiBBcmc6OmltbShp
bW1lZGlhdGVWYWx1ZSk7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlLT5yZXByZXNlbnRh
YmxlQXM8aW50MzJfdD4oKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+YXNO
dW1iZXI8aW50MzJfdD4oKSk7CiAgICAgICAgIHJldHVybiBBcmcoKTsKICAgICB9CiAKQEAgLTY1
Nyw2ICs2NTQsNzIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKKyAg
ICBib29sIHRyeVVwc2lsb24oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKAor
ICAgICAgICAgICAgcmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLAorICAgICAgICAg
ICAgaW1tT3JUbXAodmFsdWUpLAorICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZS0+YXM8VXBz
aWxvblZhbHVlPigpLT5waGkoKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHRyeVBoaSgpCisgICAgeworICAgICAgICAvLyBPdXIgc2VtYW50aWNzIGFyZSBkZXRl
cm1pbmVkIGJ5IFVwc2lsb25zLCBzbyB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlCcmFuY2goVmFsdWUqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBicmFuY2ggZnVzaW9uIGJ5IGRl
bGVnYXRpbmcgdG8gYSBwYXR0ZXJuIG1hdGNoZXIgZm9yIGNvbXBhcmlzb25zLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNzIxCisKKyAgICAg
ICAgLy8gSW4gQjMgaXQncyBwb3NzaWJsZSB0byBicmFuY2ggb24gYW55IHZhbHVlLiBUaGUgc2Vt
YW50aWNzIG9mOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgQnJhbmNoKHZhbHVlKQorICAg
ICAgICAvLworICAgICAgICAvLyBBcmUgZ3VhcmFudGVlZCB0byBiZSBpZGVudGljYWwgdG86Cisg
ICAgICAgIC8vCisgICAgICAgIC8vICAgICBCcmFuY2goTm90RXF1YWwodmFsdWUsIDApKQorCisg
ICAgICAgIGlmICghaXNJbnQodmFsdWUtPnR5cGUoKSkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgZG91YmxlIGJyYW5jaGVzLgorICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyNworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisKKyAgICAgICAgQWlyOjpPcGNvZGUgb3Bjb2RlOworICAgICAgICBz
d2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
IG9wY29kZSA9IEJyYW5jaFRlc3QzMjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgb3Bjb2RlID0gQnJhbmNoVGVzdDY0OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBBcmcg
cmVzQ29uZCA9IEFyZzo6cmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybyk7CisKKyAgICAg
ICAgQXJnIGFkZHIgPSBsb2FkQWRkcih2YWx1ZSk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShv
cGNvZGUsIHJlc0NvbmQua2luZCgpLCBhZGRyLmtpbmQoKSwgQXJnOjpJbW0pKSB7CisgICAgICAg
ICAgICBjb21taXRJbnRlcm5hbCh2YWx1ZSk7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBy
ZXNDb25kLCBhZGRyLCBBcmc6OmltbSgtMSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBhcHBlbmQob3Bjb2RlLCByZXNDb25kLCB0bXAodmFsdWUpLCBB
cmc6OmltbSgtMSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRy
eUp1bXAoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKEFpcjo6SnVtcCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKwogICAgIGJvb2wgdHJ5SWRlbnRpdHkoVmFsdWUqIHZhbHVlKQogICAg
IHsKICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1t
T3JUbXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAx
OTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDEyIEBAIENvbnN0NjQgPSBDb25zdDY0
KCkKIFN0YWNrU2xvdCA9IFN0YWNrU2xvdCgpCiBGcmFtZVBvaW50ZXIgPSBGcmFtZVBvaW50ZXIo
KQogCitVcHNpbG9uID0gVXBzaWxvbih2YWx1ZSkKK1BoaSA9IFBoaSgpCisKK0JyYW5jaCA9IEJy
YW5jaCh2YWx1ZSkKK0p1bXAgPSBKdW1wKCkKKwogIyBJdCB3b3VsZCBiZSBmYW50YXN0aWMgdG8g
bm90IGhhdmUgdG8gaGF2ZSB0aGlzIGhlcmUsIGJ1dCB0aGUgcGhpbG9zb3BoeSBvZiBvdXIgbG93
ZXJpbmcgaXMgdGhhdAogIyBpdCBzaG91bGQgYmUgc291bmQgZXZlbiBpZiB3ZSBoYXZlbid0IHJ1
biBvcHRpbWl6YXRpb25zLgogSWRlbnRpdHkgPSBJZGVudGl0eSh2YWx1ZSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNyBA
QCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIERUb0kzMiwKIAogICAgIC8vIFBvbHltb3Jw
aGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQz
MiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgotICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisg
ICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKSwgYW5kICJUb0Jvb2xlYW4iIGlzIGp1c3QgTm90RXF1
YWwoeCwgMCkuCiAgICAgRXF1YWwsCiAgICAgTm90RXF1YWwsCiAgICAgTGVzc1RoYW4sCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5MTc5
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYyLDcgKzYyLDEzIEBAIHZvaWQgUHJvY2VkdXJlOjpyZXNldFZhbHVlT3duZXJz
KCkKIAogdm9pZCBQcm9jZWR1cmU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKIHsKLSAgICBCMzo6cmVz
ZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eSgKKyAg
ICAgICAgbV9ibG9ja3MsCisgICAgICAgIFsmXSAoQmFzaWNCbG9jayogZGVsZXRlZCkgeworICAg
ICAgICAgICAgLy8gR290dGEgZGVsZXRlIHRoZSB2YWx1ZXMgaW4gdGhpcyBibG9jay4KKyAgICAg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmRlbGV0ZWQpCisgICAgICAgICAgICAgICAgZGVs
ZXRlVmFsdWUodmFsdWUpOworICAgICAgICB9KTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAorI2luY2x1ZGUgIkIzQ29udHJvbFZh
bHVlLmgiCiAjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNN
ZW1vcnlWYWx1ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgpAQCAtNTIsNiArNTMsNyBA
QCBwdWJsaWM6CiAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgIGRvIHsKICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IGZhbHNlOworICAgICAgICAgICAgbV9jaGFuZ2VkQ0ZHID0g
ZmFsc2U7CiAKICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpAQCAt
NjMsNiArNjUsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgYmxvY2stPnJlbW92ZU5vcHMo
bV9wcm9jKTsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKG1fY2hhbmdlZENGRykK
KyAgICAgICAgICAgICAgICBtX3Byb2MucmVzZXRSZWFjaGFiaWxpdHkoKTsKKwogICAgICAgICAg
ICAgVXNlQ291bnRzIHVzZUNvdW50cyhtX3Byb2MpOwogICAgICAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiBtX3Byb2MudmFsdWVzKCkpIHsKICAgICAgICAgICAgICAgICBpZiAoIXVzZUNvdW50
c1t2YWx1ZV0gJiYgIXZhbHVlLT5lZmZlY3RzKCkubXVzdEV4ZWN1dGUoKSkgewpAQCAtMTA5LDEw
ICsxMTQsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlzSW50KG1fdmFsdWUtPnR5cGUo
KSkpIHsKICAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5lZ2F0ZWRDb25zdGFudCA9IG1fdmFs
dWUtPmNoaWxkKDEpLT5uZWdDb25zdGFudChtX3Byb2MpKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5lZ2F0ZWRDb25zdGFudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFZhbHVlKiBhZGQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFs
dWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgbV9pbmRleCwgQWRkLCBtX3ZhbHVlLT5vcmln
aW4oKSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoYWRkKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVdpdGhO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgQWRkLCBtX3ZhbHVlLT5vcmlnaW4o
KSwgbV92YWx1ZS0+Y2hpbGQoMCksIG5lZ2F0ZWRDb25zdGFudCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIApAQCAtMTcyLDYg
KzE3Niw5NSBAQCBwcml2YXRlOgogICAgICAgICAgICAgCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgRXF1YWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRh
dGl2aXR5KCk7CisKKyAgICAgICAgICAgIC8vIFR1cm4gdGhpczogRXF1YWwoRXF1YWwoeCwgMCks
IDApCisgICAgICAgICAgICAvLyBJbnRvIHRoaXM6IE5vdEVxdWFsKHgsIDApCisgICAgICAgICAg
ICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEVxdWFsICYmIG1fdmFsdWUtPmNo
aWxkKDEpLT5pc0ludDMyKDApCisgICAgICAgICAgICAgICAgJiYgbV92YWx1ZS0+Y2hpbGQoMCkt
PmNoaWxkKDEpLT5pc0xpa2VaZXJvKCkpIHsKKyAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIE5vdEVxdWFsLCBtX3ZhbHVlLT5vcmlnaW4o
KSwKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCktPmNoaWxkKDApLCBtX3Zh
bHVlLT5jaGlsZCgwKS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBUdXJuIHRoaXMgRXF1YWwoYm9vbCwgMSkKKyAgICAg
ICAgICAgIC8vIEludG8gdGhpczogYm9vbAorICAgICAgICAgICAgaWYgKG1fdmFsdWUtPmNoaWxk
KDApLT5yZXR1cm5zQm9vbCgpICYmIG1fdmFsdWUtPmNoaWxkKDEpLT5pc0ludDMyKDEpKSB7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGls
ZCgwKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IEhhdmUgYSBj
b21wYXJlLWZsaXBwaW5nIG9wdGltaXphdGlvbiwgbGlrZSBFcXVhbChMZXNzVGhhbihhLCBiKSwg
MCkgdHVybnMgaW50bworICAgICAgICAgICAgLy8gR3JlYXRlckVxdWFsKGEsIGIpLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDcyNgor
CisgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IEVxdWFsKGNvbnN0MSwgY29uc3QyKQorICAgICAg
ICAgICAgLy8gSW50byB0aGlzOiBjb25zdDEgPT0gY29uc3QyCisgICAgICAgICAgICByZXBsYWNl
V2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5lcXVhbENvbnN0YW50KG1fcHJvYywgbV92
YWx1ZS0+Y2hpbGQoMSkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAg
ICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CisK
KyAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+cmV0dXJuc0Jvb2woKSkgeworICAg
ICAgICAgICAgICAgIC8vIFR1cm4gdGhpczogTm90RXF1YWwoYm9vbCwgMCkKKyAgICAgICAgICAg
ICAgICAvLyBJbnRvIHRoaXM6IGJvb2wKKyAgICAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hp
bGQoMSktPmlzSW50MzIoMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eShtX3ZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBUdXJuIHRoaXM6IE5v
dEVxdWFsKGJvb2wsIDEpCisgICAgICAgICAgICAgICAgLy8gSW50byB0aGlzOiBFcXVhbChib29s
LCAwKQorICAgICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgxKS0+aXNJbnQzMigxKSkg
eworICAgICAgICAgICAgICAgICAgICByZXBsYWNlV2l0aE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgICAgICAgICBFcXVhbCwgbV92YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBO
b3RFcXVhbChjb25zdDEsIGNvbnN0MikKKyAgICAgICAgICAgIC8vIEludG8gdGhpczogY29uc3Qx
ICE9IGNvbnN0MgorICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGls
ZCgwKS0+bm90RXF1YWxDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEJyYW5jaDogeworICAgICAgICAgICAgQ29u
dHJvbFZhbHVlKiBicmFuY2ggPSBtX3ZhbHVlLT5hczxDb250cm9sVmFsdWU+KCk7CisKKyAgICAg
ICAgICAgIC8vIFR1cm4gdGhpczogQnJhbmNoKE5vdEVxdWFsKHgsIDApKQorICAgICAgICAgICAg
Ly8gSW50byB0aGlzOiBCcmFuY2goeCkKKyAgICAgICAgICAgIGlmIChicmFuY2gtPmNoaWxkKDAp
LT5vcGNvZGUoKSA9PSBOb3RFcXVhbCAmJiBicmFuY2gtPmNoaWxkKDApLT5jaGlsZCgxKS0+aXNM
aWtlWmVybygpKSB7CisgICAgICAgICAgICAgICAgYnJhbmNoLT5jaGlsZCgwKSA9IGJyYW5jaC0+
Y2hpbGQoMCktPmNoaWxkKDApOworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFRyaVN0YXRlIHRyaVN0YXRl
ID0gYnJhbmNoLT5jaGlsZCgwKS0+YXNUcmlTdGF0ZSgpOworCisgICAgICAgICAgICAvLyBUdXJu
IHRoaXM6IEJyYW5jaCgwLCB0aGVuLCBlbHNlKQorICAgICAgICAgICAgLy8gSW50byB0aGlzOiBK
dW1wKGVsc2UpCisgICAgICAgICAgICBpZiAodHJpU3RhdGUgPT0gRmFsc2VUcmlTdGF0ZSkgewor
ICAgICAgICAgICAgICAgIGJyYW5jaC0+Y29udmVydFRvSnVtcChicmFuY2gtPm5vdFRha2VuKCkp
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgbV9j
aGFuZ2VkQ0ZHID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gVHVybiB0aGlzOiBCcmFuY2gobm90IDAsIHRoZW4sIGVsc2UpCisg
ICAgICAgICAgICAvLyBJbnRvIHRoaXM6IEp1bXAodGhlbikKKyAgICAgICAgICAgIGlmICh0cmlT
dGF0ZSA9PSBUcnVlVHJpU3RhdGUpIHsKKyAgICAgICAgICAgICAgICBicmFuY2gtPmNvbnZlcnRU
b0p1bXAoYnJhbmNoLT50YWtlbigpKTsKKyAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZENGRyA9IHRydWU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMjA2LDYgKzI5OSwxMiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgdm9pZCByZXBsYWNlV2l0aE5ldyhBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3Byb2MuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRz
Li4uKSk7CisgICAgfQorCiAgICAgdm9pZCByZXBsYWNlV2l0aE5ld1ZhbHVlKFZhbHVlKiBuZXdW
YWx1ZSkKICAgICB7CiAgICAgICAgIGlmICghbmV3VmFsdWUpCkBAIC0yMjEsNiArMzIwLDcgQEAg
cHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogICAg
IGJvb2wgbV9jaGFuZ2VkOworICAgIGJvb2wgbV9jaGFuZ2VkQ0ZHOwogfTsKIAogfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9u
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2ls
b25WYWx1ZS5jcHAJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDEzIEBAIFVw
c2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCiAKIHZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5p
bmRleCgpKTsKKyAgICBpZiAobV9waGkpCisgICAgICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5p
bmRleCgpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gV2Ugd2FudCB0byBoYXZlIGEgZHVtcCBm
b3Igd2hlbiB0aGUgUGhpIGlzbid0IHNldCB5ZXQsIHNpbmNlIGFsdGhvdWdoIHN1Y2ggSVIgd29u
J3QgcGFzcworICAgICAgICAvLyB2YWxpZGF0aW9uLCB3ZSBtYXkgaGF2ZSBzdWNoIElSIGFzIGFu
IGludGVybWVkaWF0ZSBzdGVwLgorICAgICAgICBvdXQucHJpbnQoIl4obnVsbCkiKTsKKyAgICB9
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwyNSAr
MzIsMzAgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CiAKLWNsYXNzIFVwc2ls
b25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBVcHNpbG9u
VmFsdWUgOiBwdWJsaWMgVmFsdWUgewogcHVibGljOgogICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KIAogICAgIH5VcHNp
bG9uVmFsdWUoKTsKIAogICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQor
ICAgIHZvaWQgc2V0UGhpKFZhbHVlKiBwaGkpIHsgbV9waGkgPSBwaGk7IH0KIAogcHJvdGVjdGVk
OgogICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwotICAgIAotICAgIFVwc2lsb25WYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhp
KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisKKyAg
ICAvLyBOb3RlIHRoYXQgcGFzc2luZyB0aGUgUGhpIGR1cmluZyBjb25zdHJ1Y3Rpb24gaXMgb3B0
aW9uYWwuIEEgdmFsaWQgcGF0dGVybiBpcyB0byBmaXJzdCBjcmVhdGUKKyAgICAvLyB0aGUgVXBz
aWxvbnMgd2l0aG91dCB0aGUgUGhpLCB0aGVuIGNyZWF0ZSB0aGUgUGhpLCB0aGVuIGdvIGJhY2sg
YW5kIHRlbGwgdGhlIFVwc2lsb25zIGFib3V0CisgICAgLy8gdGhlIFBoaS4gVGhpcyBhbGxvd3Mg
eW91IHRvIGVtaXQgY29kZSBpbiBpdHMgbmF0dXJhbCBvcmRlci4KKyAgICBVcHNpbG9uVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSA9
IG51bGxwdHIpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFVwc2lsb24sIFZvaWQsIG9yaWdpbiwg
dmFsdWUpCiAgICAgICAgICwgbV9waGkocGhpKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHZhbHVl
LT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgICAgICBpZiAocGhpKQorICAgICAgICAgICAg
QVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOwogICAgIH0KIAogICAgIFZhbHVl
KiBtX3BoaTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJl
dmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjgxLDYgKzI4MSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCktPnBoaSgpLCAo
IkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpID09IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCktPnBoaSgpLT50eXBlKCksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnModmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+cGhpKCkpLCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkocmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjcsNiArMTI3LDYwIEBAIFZhbHVlKiBWYWx1
ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmEKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAor
VmFsdWUqIFZhbHVlOjplcXVhbENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFZhbHVlOjpub3RFcXVhbENvbnN0YW50
KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
Ym9vbCBWYWx1ZTo6cmV0dXJuc0Jvb2woKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gSW50
MzIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAg
Y2FzZSBDb25zdDMyOgorICAgICAgICByZXR1cm4gYXNJbnQzMigpID09IDAgfHwgYXNJbnQzMigp
ID09IDE7CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIHJldHVybiBjaGlsZCgxKS0+aXNJbnQz
MigxKTsKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNz
VGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNh
c2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBj
YXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBoYXZlIGEgc3Rv
cnkgaGVyZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDcyNQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KK30KKworVHJpU3RhdGUgVmFsdWU6OmFzVHJpU3RhdGUoKSBj
b25zdAoreworICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICBjYXNlIENvbnN0MzI6CisgICAg
ICAgIHJldHVybiB0cmlTdGF0ZSghIWFzSW50MzIoKSk7CisgICAgY2FzZSBDb25zdDY0OgorICAg
ICAgICByZXR1cm4gdHJpU3RhdGUoISFhc0ludDY0KCkpOworICAgIGNhc2UgQ29uc3REb3VibGU6
CisgICAgICAgIC8vIFVzZSAiIT0gMCIgdG8gcmVhbGx5IGVtcGhhc2l6ZSB3aGF0IHRoaXMgbWVh
biB3aXRoIHJlc3BlY3QgdG8gTmFOIGFuZCBzdWNoLgorICAgICAgICByZXR1cm4gdHJpU3RhdGUo
YXNEb3VibGUoKSAhPSAwKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gTWl4ZWRUcmlT
dGF0ZTsKKyAgICB9Cit9CisKIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogewogICAg
IEVmZmVjdHMgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZp
c2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05OCwxOCArOTgsMzAgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgY29uc3QgVCogYXMoKSBjb25zdDsKIAorICAgIC8vIFdoYXQgZm9sbG93cyBh
cmUgYSBidW5jaCBvZiBoZWxwZXJzIGZvciBpbnNwZWN0aW5nIGFuZCBtb2RpZnlpbmcgdmFsdWVz
LiBOb3RlIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gYnVuY2ggb2YgZGlmZmVyZW50IGlkaW9tcyBm
b3IgaW1wbGVtZW50aW5nIHN1Y2ggaGVscGVycy4gWW91IGNhbiB1c2UgdmlydHVhbCBtZXRob2Rz
LCBhbmQKKyAgICAvLyBvdmVycmlkZSBmcm9tIHRoZSB2YXJpb3VzIFZhbHVlIHN1YmNsYXNzZXMu
IFlvdSBjYW4gcHV0IHRoZSBtZXRob2QgaW5zaWRlIFZhbHVlIGFuZCBtYWtlIGl0CisgICAgLy8g
bm9uLXZpcnR1YWwsIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN3aXRjaCBvbiBvcGNvZGUu
IFRoZSBtZXRob2QgY291bGQgYmUgaW5saW5lIG9yIG5vdC4KKyAgICAvLyBJZiBhIG1ldGhvZCBp
cyBzcGVjaWZpYyB0byBzb21lIFZhbHVlIHN1YmNsYXNzLCB5b3UgY291bGQgcHV0IGl0IGluIHRo
ZSBzdWJjbGFzcywgb3IgeW91IGNvdWxkCisgICAgLy8gcHV0IGl0IG9uIFZhbHVlIGFueXdheS4g
SXQncyBmaW5lIHRvIHBpY2sgd2hhdGV2ZXIgZmVlbHMgcmlnaHQsIGFuZCB3ZSBzaG91bGRuJ3Qg
cmVzdHJpY3QKKyAgICAvLyBvdXJzZWx2ZXMgdG8gYW55IHBhcnRpY3VsYXIgaWRpb20uCisKICAg
ICBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIFZhbHVlKiBuZWdD
b25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFu
dChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdDsKICAgICB2aXJ0dWFsIFZhbHVlKiBh
ZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0OwogICAgIHZpcnR1YWwg
VmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSogZXF1YWxDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNv
bnN0OworICAgIHZpcnR1YWwgVmFsdWUqIG5vdEVxdWFsQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFs
dWUqIG90aGVyKSBjb25zdDsKIAogICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKICAgICBpbnQz
Ml90IGFzSW50MzIoKSBjb25zdDsKKyAgICBib29sIGlzSW50MzIoaW50MzJfdCkgY29uc3Q7CiAg
ICAgCiAgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OwogICAgIGludDY0X3QgYXNJbnQ2NCgpIGNv
bnN0OworICAgIGJvb2wgaXNJbnQ2NChpbnQ2NF90KSBjb25zdDsKIAogICAgIGJvb2wgaGFzSW50
KCkgY29uc3Q7CiAgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OwpAQCAtMTE3LDEwICsxMjksMjQg
QEAgcHVibGljOgogCiAgICAgYm9vbCBoYXNJbnRQdHIoKSBjb25zdDsKICAgICBpbnRwdHJfdCBh
c0ludFB0cigpIGNvbnN0OworICAgIGJvb2wgaXNJbnRQdHIoaW50cHRyX3QpIGNvbnN0OwogCiAg
ICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKICAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsK
KyAgICBib29sIGlzRXF1YWxUb0RvdWJsZShkb3VibGUpIGNvbnN0OyAvLyBXZSBzYXkgImlzRXF1
YWxUb0RvdWJsZSIgYmVjYXVzZSAiaXNEb3VibGUiIHdvdWxkIGJlIGEgYml0IGVxdWFsaXR5Lgog
CisgICAgYm9vbCBoYXNOdW1iZXIoKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBi
b29sIHJlcHJlc2VudGFibGVBcygpIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IFQg
YXNOdW1iZXIoKSBjb25zdDsKKworICAgIC8vIEJvb2xlYW5zIGluIEIzIGFyZSBDb25zdDMyKDAp
IG9yIENvbnN0MzIoMSkuIFNvIHRoaXMgaXMgdHJ1ZSBpZiB0aGUgdHlwZSBpcyBJbnQzMiBhbmQg
dGhlIG9ubHkKKyAgICAvLyBwb3NzaWJsZSByZXR1cm4gdmFsdWVzIGFyZSAwIG9yIDEuIEl0J3Mg
T0sgZm9yIHRoaXMgbWV0aG9kIHRvIGNvbnNlcnZhdGl2ZWx5IHJldHVybiBmYWxzZS4KKyAgICBi
b29sIHJldHVybnNCb29sKCkgY29uc3Q7CisKKyAgICBUcmlTdGF0ZSBhc1RyaVN0YXRlKCkgY29u
c3Q7CisgICAgYm9vbCBpc0xpa2VaZXJvKCkgY29uc3QgeyByZXR1cm4gYXNUcmlTdGF0ZSgpID09
IEZhbHNlVHJpU3RhdGU7IH0KKyAgICBib29sIGlzTGlrZU5vblplcm8oKSBjb25zdCB7IHJldHVy
biBhc1RyaVN0YXRlKCkgPT0gVHJ1ZVRyaVN0YXRlOyB9CisgICAgCiAgICAgRWZmZWN0cyBlZmZl
Y3RzKCkgY29uc3Q7CiAKICAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAxOTE3OTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNzQsNiArNzQsMTEgQEAgaW5saW5lIGludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAog
ICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7CiB9CiAKK2lubGluZSBib29s
IFZhbHVlOjppc0ludDMyKGludDMyX3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0lu
dDMyKCkgJiYgYXNJbnQzMigpID09IHZhbHVlOworfQorCiBpbmxpbmUgYm9vbCBWYWx1ZTo6aGFz
SW50NjQoKSBjb25zdAogewogICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKQEAgLTg0
LDYgKzg5LDExIEBAIGlubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKICAgICBy
ZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOwogfQogCitpbmxpbmUgYm9vbCBWYWx1
ZTo6aXNJbnQ2NChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQ2NCgp
ICYmIGFzSW50NjQoKSA9PSB2YWx1ZTsKK30KKwogaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludCgp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFzSW50NjQoKTsKQEAgLTExMyw2
ICsxMjMsMTEgQEAgaW5saW5lIGludHB0cl90IFZhbHVlOjphc0ludFB0cigpIGNvbnN0CiAgICAg
cmV0dXJuIGFzSW50MzIoKTsKIH0KIAoraW5saW5lIGJvb2wgVmFsdWU6OmlzSW50UHRyKGludHB0
cl90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnRQdHIoKSAmJiBhc0ludFB0cigp
ID09IHZhbHVlOworfQorCiBpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOwpAQCAtMTIzLDYgKzEzOCw0NiBA
QCBpbmxpbmUgZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0CiAgICAgcmV0dXJuIGFzPENv
bnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7CiB9CiAKK2lubGluZSBib29sIFZhbHVlOjppc0Vx
dWFsVG9Eb3VibGUoZG91YmxlIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNEb3VibGUo
KSAmJiBhc0RvdWJsZSgpID09IHZhbHVlOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzTnVt
YmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgfHwgaGFzRG91YmxlKCk7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBWYWx1ZTo6cmVwcmVzZW50YWJsZUFz
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBDb25zdDMyOgor
ICAgICAgICByZXR1cm4gaXNSZXByZXNlbnRhYmxlQXM8VD4oYXNJbnQzMigpKTsKKyAgICBjYXNl
IENvbnN0NjQ6CisgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVBczxUPihhc0ludDY0KCkp
OworICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIHJldHVybiBpc1JlcHJlc2VudGFibGVB
czxUPihhc0RvdWJsZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIFQgVmFsdWU6OmFzTnVtYmVy
KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBDb25zdDMyOgor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VD4oYXNJbnQzMigpKTsKKyAgICBjYXNlIENvbnN0
NjQ6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihhc0ludDY0KCkpOworICAgIGNhc2Ug
Q29uc3REb3VibGU6CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUPihhc0RvdWJsZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gVCgpOworICAgIH0KK30KKwogaW5saW5lIFN0
YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQogewogICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9
IGFzPENoZWNrVmFsdWU+KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
cmV2aXNpb24gMTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5l
cy5oIgogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkluaXRpYWxpemVUaHJl
YWRpbmcuaCIKQEAgLTQxLDYgKzQyLDE2IEBACiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2lu
Y2x1ZGUgIlZNLmgiCiAKKy8vIFdlIGRvbid0IGhhdmUgYSBOT19SRVRVUk5fRFVFX1RPX0VYSVQs
IG5vciBzaG91bGQgd2UuIFRoYXQncyByaWRpY3Vsb3VzLgorc3RhdGljIGJvb2wgaGlkZGVuVHJ1
dGhCZWNhdXNlTm9SZXR1cm5Jc1N0dXBpZCgpIHsgcmV0dXJuIHRydWU7IH0KKworc3RhdGljIHZv
aWQgdXNhZ2UoKQoreworICAgIGRhdGFMb2coIlVzYWdlOiB0ZXN0YjMgWzxmaWx0ZXI+XVxuIik7
CisgICAgaWYgKGhpZGRlblRydXRoQmVjYXVzZU5vUmV0dXJuSXNTdHVwaWQoKSkKKyAgICAgICAg
ZXhpdCgxKTsKK30KKwogI2lmIEVOQUJMRShCM19KSVQpCiAKIHVzaW5nIG5hbWVzcGFjZSBKU0M7
CkBAIC01MywxNyArNjQsMjcgQEAgbmFtZXNwYWNlIHsKIAogVk0qIHZtOwogCi10ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci1UIGNvbXBpbGVBbmRSdW4oUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29tcGlsZShQcm9jZWR1cmUmIHByb2NlZHVyZSkKIHsKICAgICBDQ2FsbEhlbHBlcnMg
aml0KHZtKTsKICAgICBnZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7CiAgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKLSAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
Y29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgaW52b2tlKGNvbnN0IE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiYgY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKICAgICBUICgq
ZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4p
Pihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKICAgICByZXR1cm4gZnVuY3Rpb24o
YXJndW1lbnRzLi4uKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorVCBjb21waWxlQW5kUnVuKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBpbnZva2U8VD4oY29tcGlsZShwcm9jZWR1cmUp
LCBhcmd1bWVudHMuLi4pOworfQorCiB2b2lkIHRlc3Q0MigpCiB7CiAgICAgUHJvY2VkdXJlIHBy
b2M7CkBAIC00OTMsMTcgKzUxNCwxNjcgQEAgdm9pZCB0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KGlu
dCB2YWx1ZSkKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpID09IHZh
bHVlKTsKIH0KIAordm9pZCB0ZXN0QnJhbmNoKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIHRo
ZW5DYXNlID0gcHJvYy5hZGRCbG9jaygpOworICAgIEJhc2ljQmxvY2sqIGVsc2VDYXNlID0gcHJv
Yy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAg
ICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFy
Z3VtZW50R1BSMCkpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNhc2UpLCBGcmVxdWVu
dGVkQmxvY2soZWxzZUNhc2UpKTsKKworICAgIHRoZW5DYXNlLT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgdGhlbkNhc2Ut
PmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSk7CisKKyAgICBlbHNl
Q2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgMCkpOworCisgICAgYXV0byBjb2RlID0gY29tcGlsZShwcm9jKTsKKyAgICBDSEVD
SyhpbnZva2U8aW50Pihjb2RlLCA0MikgPT0gMSk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oY29k
ZSwgMCkgPT0gMCk7Cit9CisKK3ZvaWQgdGVzdERpYW1vbmQoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNC
bG9jayogdGhlbkNhc2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZWxzZUNh
c2UgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgQmFzaWNCbG9jayogZG9uZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApKSwKKyAgICAgICAgRnJlcXVlbnRlZEJsb2NrKHRoZW5DYXNlKSwgRnJlcXVlbnRlZEJsb2Nr
KGVsc2VDYXNlKSk7CisKKyAgICBVcHNpbG9uVmFsdWUqIHRoZW5SZXN1bHQgPSB0aGVuQ2FzZS0+
YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdpbigpLCB0aGVuQ2Fz
ZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKTsKKyAgICB0aGVu
Q2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCksIEZyZXF1
ZW50ZWRCbG9jayhkb25lKSk7CisKKyAgICBVcHNpbG9uVmFsdWUqIGVsc2VSZXN1bHQgPSBlbHNl
Q2FzZS0+YXBwZW5kTmV3PFVwc2lsb25WYWx1ZT4oCisgICAgICAgIHByb2MsIE9yaWdpbigpLCBl
bHNlQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKyAg
ICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgSnVtcCwgT3JpZ2luKCks
IEZyZXF1ZW50ZWRCbG9jayhkb25lKSk7CisKKyAgICBWYWx1ZSogcGhpID0gZG9uZS0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBQaGksIEludDMyLCBPcmlnaW4oKSk7CisgICAgdGhlblJlc3VsdC0+
c2V0UGhpKHBoaSk7CisgICAgZWxzZVJlc3VsdC0+c2V0UGhpKHBoaSk7CisgICAgZG9uZS0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgcGhpKTsKKworICAg
IGF1dG8gY29kZSA9IGNvbXBpbGUocHJvYyk7CisgICAgQ0hFQ0soaW52b2tlPGludD4oY29kZSwg
NDIpID09IDEpOworICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDApID09IDApOworfQorCit2
b2lkIHRlc3RCcmFuY2hOb3RFcXVhbCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQ2Fz
ZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbHNlQ2FzZSA9IHByb2MuYWRk
QmxvY2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBw
cm9jLCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgTm90RXF1YWwsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCks
CisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSksCisgICAgICAgIEZyZXF1
ZW50ZWRCbG9jayh0aGVuQ2FzZSksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQ2FzZSkpOworCisgICAg
dGhlbkNhc2UtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLAorICAgICAgICB0aGVuQ2FzZS0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDEpKTsKKworICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgZWxzZUNhc2UtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBhdXRvIGNv
ZGUgPSBjb21waWxlKHByb2MpOworICAgIENIRUNLKGludm9rZTxpbnQ+KGNvZGUsIDQyKSA9PSAx
KTsKKyAgICBDSEVDSyhpbnZva2U8aW50Pihjb2RlLCAwKSA9PSAwKTsKK30KKwordm9pZCB0ZXN0
QnJhbmNoRm9sZChpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiBlbHNlQ2FzZSA9IHByb2MuYWRkQmxv
Y2soKTsKKworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBCcmFuY2gsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgdmFsdWUpLAorICAgICAgICBGcmVxdWVudGVkQmxvY2sodGhlbkNh
c2UpLCBGcmVxdWVudGVkQmxvY2soZWxzZUNhc2UpKTsKKworICAgIHRoZW5DYXNlLT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgdGhlbkNhc2UtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSk7
CisKKyAgICBlbHNlQ2FzZS0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2Ms
IFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIGVsc2VDYXNlLT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+
KHByb2MpID09ICEhdmFsdWUpOworfQorCit2b2lkIHRlc3REaWFtb25kRm9sZChpbnQgdmFsdWUp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBCYXNpY0Jsb2NrKiB0aGVuQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBCYXNpY0Jsb2NrKiBlbHNlQ2FzZSA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBCYXNpY0Jsb2Nr
KiBkb25lID0gcHJvYy5hZGRCbG9jaygpOworCisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIEJyYW5jaCwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCB2YWx1ZSksCisgICAgICAgIEZy
ZXF1ZW50ZWRCbG9jayh0aGVuQ2FzZSksIEZyZXF1ZW50ZWRCbG9jayhlbHNlQ2FzZSkpOworCisg
ICAgVXBzaWxvblZhbHVlKiB0aGVuUmVzdWx0ID0gdGhlbkNhc2UtPmFwcGVuZE5ldzxVcHNpbG9u
VmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgdGhlbkNhc2UtPmFwcGVuZE5ldzxDb25z
dDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSk7CisgICAgdGhlbkNhc2UtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2soZG9uZSkp
OworCisgICAgVXBzaWxvblZhbHVlKiBlbHNlUmVzdWx0ID0gZWxzZUNhc2UtPmFwcGVuZE5ldzxV
cHNpbG9uVmFsdWU+KAorICAgICAgICBwcm9jLCBPcmlnaW4oKSwgZWxzZUNhc2UtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisgICAgZWxzZUNhc2UtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIEp1bXAsIE9yaWdpbigpLCBGcmVxdWVudGVkQmxvY2so
ZG9uZSkpOworCisgICAgVmFsdWUqIHBoaSA9IGRvbmUtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywg
UGhpLCBJbnQzMiwgT3JpZ2luKCkpOworICAgIHRoZW5SZXN1bHQtPnNldFBoaShwaGkpOworICAg
IGVsc2VSZXN1bHQtPnNldFBoaShwaGkpOworICAgIGRvbmUtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIHBoaSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5k
UnVuPGludD4ocHJvYykgPT0gISF2YWx1ZSk7Cit9CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3Qp
KSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgZGF0YUxvZygjdGVzdCAiOlxuIik7ICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgZGlkUnVuKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdo
aWxlIChmYWxzZSk7CiAKLXZvaWQgcnVuKCkKK3ZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikK
IHsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKICAgICB2bSA9ICZWTTo6Y3JlYXRl
KExhcmdlSGVhcCkubGVha1JlZigpOwogCisgICAgYXV0byBzaG91bGRSdW4gPSBbJl0gKGNvbnN0
IGNoYXIqIHRlc3ROYW1lKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuICEhc3RyY2FzZXN0cih0
ZXN0TmFtZSwgZmlsdGVyKTsKKyAgICB9OworICAgIHVuc2lnbmVkIGRpZFJ1biA9IDA7CisKICAg
ICBSVU4odGVzdDQyKCkpOwogICAgIFJVTih0ZXN0TG9hZDQyKCkpOwogICAgIFJVTih0ZXN0QXJn
KDQzKSk7CkBAIC01MzIsMTMgKzcwMywyMyBAQCB2b2lkIHJ1bigpCiAgICAgUlVOKHRlc3RTdGFj
a1Nsb3QoKSk7CiAgICAgUlVOKHRlc3RMb2FkRnJvbUZyYW1lUG9pbnRlcigpKTsKICAgICBSVU4o
dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCg1MCkpOworICAgIFJVTih0ZXN0QnJhbmNoKCkpOworICAg
IFJVTih0ZXN0RGlhbW9uZCgpKTsKKyAgICBSVU4odGVzdEJyYW5jaE5vdEVxdWFsKCkpOworICAg
IFJVTih0ZXN0QnJhbmNoRm9sZCg0MikpOworICAgIFJVTih0ZXN0QnJhbmNoRm9sZCgwKSk7Cisg
ICAgUlVOKHRlc3REaWFtb25kRm9sZCg0MikpOworICAgIFJVTih0ZXN0RGlhbW9uZEZvbGQoMCkp
OworCisgICAgaWYgKCFkaWRSdW4pCisgICAgICAgIHVzYWdlKCk7CiB9CiAKIH0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQogCiAjZWxzZSAvLyBFTkFCTEUoQjNfSklUKQogCi1zdGF0aWMgdm9pZCBy
dW4oKQorc3RhdGljIHZvaWQgcnVuKGNvbnN0IGNoYXIqKQogewogICAgIGRhdGFMb2coIkIzIEpJ
VCBpcyBub3QgZW5hYmxlZC5cbiIpOwogfQpAQCAtNTQ3LDEwICs3MjgsMTkgQEAgc3RhdGljIHZv
aWQgcnVuKCkKIAogaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogewotICAgIFVOVVNF
RF9QQVJBTShhcmdjKTsKLSAgICBVTlVTRURfUEFSQU0oYXJndik7CisgICAgY29uc3QgY2hhciog
ZmlsdGVyID0gIiI7CisgICAgc3dpdGNoIChhcmdjKSB7CisgICAgY2FzZSAxOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIDI6CisgICAgICAgIGZpbHRlciA9IGFyZ3ZbMV07CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHVzYWdlKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KICAgICAKLSAgICBydW4oKTsKKyAgICBydW4oZmlsdGVyKTsKICAgICByZXR1cm4gMDsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24g
MTkxNzk2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03Nyw2ICs3Nyw5IEBAIHZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CiAgICAgY2FzZSBSZXNDb25kOgogICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRD
b25kaXRpb24oKSk7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUNvbmQ6CisgICAg
ICAgIG91dC5wcmludChhc0RvdWJsZUNvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgU3BlY2lhbDoKICAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkp
OwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDE5MTc5NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogICAgICAgICAv
LyBzZWNvbmRhcnkgb3Bjb2Rlcy4gVGhleSBhcmUgYWx3YXlzICJVc2UiJ2QuCiAgICAgICAgIFJl
bENvbmQsCiAgICAgICAgIFJlc0NvbmQsCisgICAgICAgIERvdWJsZUNvbmQsCiAgICAgICAgIFNw
ZWNpYWwKICAgICB9OwogCkBAIC0yNjYsNiArMjY3LDE0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKICAgICB9CiAKKyAgICBzdGF0aWMgQXJnIGRvdWJsZUNvbmQoTWFjcm9Bc3Nl
bWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRG91YmxlQ29uZDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwog
ICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCiAgICAgewogICAg
ICAgICBBcmcgcmVzdWx0OwpAQCAtMzQwLDYgKzM0OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gUmVzQ29uZDsKICAgICB9CiAKKyAgICBib29sIGlzRG91YmxlQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IERvdWJsZUNvbmQ7CisgICAg
fQorCiAgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBTcGVjaWFsOwpAQCAtNDQ2LDYgKzQ2MCw3IEBAIHB1YmxpYzoKICAgICAgICAgY2Fz
ZSBDYWxsQXJnOgogICAgICAgICBjYXNlIFJlbENvbmQ6CiAgICAgICAgIGNhc2UgUmVzQ29uZDoK
KyAgICAgICAgY2FzZSBEb3VibGVDb25kOgogICAgICAgICBjYXNlIFNwZWNpYWw6CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgY2FzZSBUbXA6CkBAIC00NjIsNiArNDc3LDcgQEAg
cHVibGljOgogICAgICAgICBjYXNlIEltbToKICAgICAgICAgY2FzZSBSZWxDb25kOgogICAgICAg
ICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgRG91YmxlQ29uZDoKICAgICAgICAgY2FzZSBT
cGVjaWFsOgogICAgICAgICBjYXNlIEludmFsaWQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC02NjIsNiArNjc4LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKICAgICB9CiAKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uIGFzRG91YmxlQ29uZGl0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0RvdWJsZUNvbmQoKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6RG91YmxlQ29uZGl0aW9uPihtX29mZnNldCk7
CisgICAgfQorCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBBcmco
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Mywx
MSBAQCBDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCiAKIHZvaWQgQ29kZTo6cmVz
ZXRSZWFjaGFiaWxpdHkoKQogewotICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7
CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KAorICAgICAgICBtX2Jsb2NrcywKKyAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKikgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byBkbyBh
bnl0aGluZyBzcGVjaWFsIGZvciBkZWxldGVkIGJsb2Nrcy4KKyAgICAgICAgfSk7CiB9CiAKIHZv
aWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAxOTE3OTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDIyIEBAIE1vdmU2NFRvRG91YmxlIFU6RywgRDpGCiBN
b3ZlRG91YmxlVG82NCBVOkYsIEQ6RwogICAgIFRtcCwgVG1wCiAKK0JyYW5jaFRlc3QzMiBVOkcs
IFU6RywgVTpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIFRt
cCwgSW1tCisgICAgUmVzQ29uZCwgQWRkciwgSW1tCisgICAgUmVzQ29uZCwgSW5kZXgsIEltbQor
CitCcmFuY2hUZXN0NjQgVTpHLCBVOkcsIFU6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBU
bXAKKyAgICBSZXNDb25kLCBUbXAsIEltbQorICAgIFJlc0NvbmQsIEFkZHIsIEltbQorICAgIFJl
c0NvbmQsIEFkZHIsIFRtcAorICAgIFJlc0NvbmQsIEluZGV4LCBJbW0KKworQnJhbmNoRG91Ymxl
IFU6RywgVTpGLCBVOkYgL2JyYW5jaAorICAgIERvdWJsZUNvbmQsIFRtcCwgVG1wCisKIEJyYW5j
aEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKICAgICBSZXNDb25kLCBUbXAsIFRtcAogICAg
IFJlc0NvbmQsIEltbSwgVG1wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAxOTE3OTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAg
LTE4MCw3ICsxODAsNyBAQCBkZWYgaXNHRih0b2tlbikKIGVuZAogCiBkZWYgaXNLaW5kKHRva2Vu
KQotICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChS
ZWxDb25kKXwoUmVzQ29uZCkpXFovCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02
NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKXwoRG91YmxlQ29uZCkpXFovCiBl
bmQKIAogZGVmIGlzS2V5d29yZCh0b2tlbikKQEAgLTI0Niw3ICsyNDYsNyBAQCBjbGFzcyBQYXJz
ZXIKIAogICAgIGRlZiBjb25zdW1lS2luZAogICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
LSAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRy
LCBJbmRleCwgUmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJ
bmRleCwgUmVsQ29uZCwgUmVzQ29uZCwgb3IgRG91YmxlQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJl
c3VsdCkKICAgICAgICAgYWR2YW5jZQogICAgICAgICByZXN1bHQKICAgICBlbmQKQEAgLTgzMCw2
ICs4MzAsOCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCiAg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJEb3VibGVDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc0RvdWJsZUNvbmRpdGlvbigpIgogICAgICAgICAgICAgICAgIGVuZAogICAg
ICAgICAgICAgfQogCg==
</data>
<flag name="review"
          id="289546"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>