<?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>151322</bug_id>
          
          <creation_ts>2015-11-16 13:51:22 -0800</creation_ts>
          <short_desc>[JSC] Support Doubles with B3&apos;s Sub</short_desc>
          <delta_ts>2015-11-17 11:43:55 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1142318</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-16 13:51:22 -0800</bug_when>
    <thetext>[JSC] Support Doubles with B3&apos;s Sub.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142322</commentid>
    <comment_count>1</comment_count>
      <attachid>265613</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-16 13:56:43 -0800</bug_when>
    <thetext>Created attachment 265613
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142334</commentid>
    <comment_count>2</comment_count>
      <attachid>265619</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-16 14:23:04 -0800</bug_when>
    <thetext>Created attachment 265619
patch 2: added -M_PI and -1 to the test operands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142339</commentid>
    <comment_count>3</comment_count>
      <attachid>265619</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-11-16 14:32:28 -0800</bug_when>
    <thetext>Comment on attachment 265619
patch 2: added -M_PI and -1 to the test operands.

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

r=me

&gt; Source/JavaScriptCore/b3/testb3.cpp:4003
&gt; +// Some convenience functions for breviy.
&gt; +double posInfinity()
&gt; +{
&gt; +    return std::numeric_limits&lt;double&gt;::infinity();
&gt; +}
&gt; +
&gt; +double negInfinity()
&gt; +{
&gt; +    return -std::numeric_limits&lt;double&gt;::infinity();
&gt; +}

These functions plus their explanatory comment are net less brevity, since they are called in only one place.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4027
&gt; +#define DOUBLE_OPERAND(x__) { #x__, x__ }
&gt; +
&gt; +    static const std::array&lt;DoubleOperand, 9&gt; operands = {{
&gt; +        DOUBLE_OPERAND(M_PI),
&gt; +        DOUBLE_OPERAND(-M_PI),
&gt; +        DOUBLE_OPERAND(1),
&gt; +        DOUBLE_OPERAND(-1),
&gt; +        DOUBLE_OPERAND(0),
&gt; +        DOUBLE_OPERAND(negativeZero()),
&gt; +        DOUBLE_OPERAND(posInfinity()),
&gt; +        DOUBLE_OPERAND(negInfinity()),
&gt; +        DOUBLE_OPERAND(PNaN)
&gt; +    }};
&gt; +
&gt; +#undef DOUBLE_OPERAND

This code would be more readable and fewer characters if you just wrote out &apos;{ &quot;1&quot;, 1 }&apos;, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142394</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 16:29:02 -0800</bug_when>
    <thetext>Attachment 265619 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:4139:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4153:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4154:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 4 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>1142409</commentid>
    <comment_count>5</comment_count>
      <attachid>265619</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-11-16 17:05:46 -0800</bug_when>
    <thetext>Comment on attachment 265619
patch 2: added -M_PI and -1 to the test operands.

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

+1

Good idea on the testing.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4063
&gt; +            std::string testStr =                           \
&gt; +                std::string(#test) + &quot;(&quot; + a.name + &quot;, &quot; + b.name + &quot;)&quot;; \
&gt; +            if (!shouldRun(testStr.c_str()))                \

WTFString instead of std::string?

&gt; Source/JavaScriptCore/b3/air/AirOpcode.opcodes:174
&gt; +SubDouble U:F, UD:F

Lets put this with the Integer Substract opcodes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142486</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-16 23:30:10 -0800</bug_when>
    <thetext>Thanks for the reviews.  Responses below.

(In reply to comment #3)
&gt; &gt; Source/JavaScriptCore/b3/testb3.cpp:4003
&gt; &gt; +// Some convenience functions for breviy.
&gt; &gt; +double posInfinity()
&gt; &gt; +{
&gt; &gt; +    return std::numeric_limits&lt;double&gt;::infinity();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +double negInfinity()
&gt; &gt; +{
&gt; &gt; +    return -std::numeric_limits&lt;double&gt;::infinity();
&gt; &gt; +}
&gt; 
&gt; These functions plus their explanatory comment are net less brevity, since
&gt; they are called in only one place.

The brevity is in the test output.  For example:

testSubArgImmDouble(posInfinity(), posInfinity())...
testSubArgImmDouble(posInfinity(), posInfinity()): OK!
testSubArgImmDouble(posInfinity(), negInfinity())...
testSubArgImmDouble(posInfinity(), negInfinity()): OK!

vs ...

testSubArgImmDouble(std::numeric_limits&lt;double&gt;::infinity(), std::numeric_limits&lt;double&gt;::infinity())...
testSubArgImmDouble(std::numeric_limits&lt;double&gt;::infinity(), std::numeric_limits&lt;double&gt;::infinity()): OK!
testSubArgImmDouble(std::numeric_limits&lt;double&gt;::infinity(), -std::numeric_limits&lt;double&gt;::infinity())...
testSubArgImmDouble(std::numeric_limits&lt;double&gt;::infinity(), -std::numeric_limits&lt;double&gt;::infinity()): OK!

I find the first form easier to read.  I&apos;ve updated the comment to indicate that this is for brevity of the test output.  Do you still object to using these wrapper functions?

&gt; &gt; Source/JavaScriptCore/b3/testb3.cpp:4027
&gt; &gt; +#define DOUBLE_OPERAND(x__) { #x__, x__ }
&gt; &gt; +
&gt; &gt; +    static const std::array&lt;DoubleOperand, 9&gt; operands = {{
&gt; &gt; +        DOUBLE_OPERAND(M_PI),
&gt; &gt; +        DOUBLE_OPERAND(-M_PI),
&gt; &gt; +        DOUBLE_OPERAND(1),
&gt; &gt; +        DOUBLE_OPERAND(-1),
&gt; &gt; +        DOUBLE_OPERAND(0),
&gt; &gt; +        DOUBLE_OPERAND(negativeZero()),
&gt; &gt; +        DOUBLE_OPERAND(posInfinity()),
&gt; &gt; +        DOUBLE_OPERAND(negInfinity()),
&gt; &gt; +        DOUBLE_OPERAND(PNaN)
&gt; &gt; +    }};
&gt; &gt; +
&gt; &gt; +#undef DOUBLE_OPERAND
&gt; 
&gt; This code would be more readable and fewer characters if you just wrote out
&gt; &apos;{ &quot;1&quot;, 1 }&apos;, etc.

I still think it&apos;s better to use the macro.  Using the macro means less copy and pasting for each of the values (once as a string, once as a value).  Granted, the list is not large, and hence, the cut-and-pasting is not that big an issue.  In terms of readability, if you think of it as a pseudo constructor of DoubleOperand structs, it actually reads quite clearly.

Do you strongly object to using the DOUBLE_OPERAND macro?

(In reply to comment #5)
&gt; &gt; Source/JavaScriptCore/b3/testb3.cpp:4063
&gt; &gt; +            std::string testStr =                           \
&gt; &gt; +                std::string(#test) + &quot;(&quot; + a.name + &quot;, &quot; + b.name + &quot;)&quot;; \
&gt; &gt; +            if (!shouldRun(testStr.c_str()))                \
&gt; 
&gt; WTFString instead of std::string?

Fixed.

&gt; &gt; Source/JavaScriptCore/b3/air/AirOpcode.opcodes:174
&gt; &gt; +SubDouble U:F, UD:F
&gt; 
&gt; Lets put this with the Integer Substract opcodes.

OK.  I searched for AddDouble and inserted it in alphabetical order thereafter.  Turns out, AddDouble is not group with the rest of the Adds.  I&apos;ll fix the SubDouble case (as you suggested) in this patch.  I&apos;ll fix the Add case later when I refactor the Add tests to use the new test macros.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142487</commentid>
    <comment_count>7</comment_count>
      <attachid>265667</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-16 23:30:44 -0800</bug_when>
    <thetext>Created attachment 265667
patch 3: addressed with feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142488</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-11-16 23:33:25 -0800</bug_when>
    <thetext>Attachment 265667 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/testb3.cpp:4287:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4301:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:4302:  Multi line control clauses should use braces.  [whitespace/braces] [4]
Total errors found: 3 in 4 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>1142511</commentid>
    <comment_count>9</comment_count>
      <attachid>265619</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-11-17 02:50:02 -0800</bug_when>
    <thetext>Comment on attachment 265619
patch 2: added -M_PI and -1 to the test operands.

Cleared Geoffrey Garen&apos;s review+ from obsolete attachment 265619 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142562</commentid>
    <comment_count>10</comment_count>
      <attachid>265667</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-17 11:09:23 -0800</bug_when>
    <thetext>Comment on attachment 265667
patch 3: addressed with feedback.

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

LGTM other than minor nits.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4288
&gt; +        String testStr = String(#test) + &quot;(&quot; + a.name + &quot;)&quot;; \

You could also do:

CString testStr = toCString(#test, &quot;(&quot;, a.name, &quot;)&quot;);

It&apos;s not clear that this is better, but it means you can avoid the ascii conversion, below.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4293
&gt; +                const char* testName = testStr.ascii().data(); \

... then you&apos;d just do testStr.data() here.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4294
&gt; +                dataLog(testName, &quot;...\n&quot;);             \

Actually, you could just pass testStr here directly.  Both String and CString can be passed directly to dataLog().

&gt; Source/JavaScriptCore/b3/testb3.cpp:4296
&gt; +                dataLog(testName, &quot;: OK!\n&quot;);           \

Ditto.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4303
&gt; +            String testStr = String(#test) + &quot;(&quot; + a.name + &quot;, &quot; + b.name + &quot;)&quot;; \

See above.

&gt; Source/JavaScriptCore/b3/testb3.cpp:4312
&gt; +            }));                                            \

This line seems oddly indented - maybe it needs four more spaces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1142583</commentid>
    <comment_count>11</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-11-17 11:43:55 -0800</bug_when>
    <thetext>For the record, Geoff agreed with keeping the negInfinity() and posInfinity() functions.  Geoff thinks de-macrofying the DoubleOperand initializing values is better, and I&apos;ve applied this change. I&apos;ve also applied Fil&apos;s suggestion to use CString instead, and also fixed the indentation issue.

Landed in r192519: &lt;http://trac.webkit.org/r192519&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265613</attachid>
            <date>2015-11-16 13:56:43 -0800</date>
            <delta_ts>2015-11-16 14:23:04 -0800</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-151322.patch</filename>
            <type>text/plain</type>
            <size>8764</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTExLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBTdXBwb3J0IERvdWJsZXMgd2l0aCBCMydzIFN1Yi4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTMyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczoKKworICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViSW1tQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkFyZ0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3ViQXJnc0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViQXJnSW1tRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdWJJ
bW1BcmdEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkltbXNEb3VibGUpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6bmVnYXRp
dmVaZXJvKToKKyAgICAgICAgKEpTQzo6QjM6OnBvc0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6
QjM6Om5lZ0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmRvdWJsZU9wZXJhbmRzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgIC0gQWRkZWQgUlVOX1VOQVJZIGFuZCBSVU5f
QklOQVJZIG1hY3JvcyB0byBhdXRvIGdlbmVyYXRlIHBlcm11dGF0aW9ucworICAgICAgICAgIG9m
IG9wZXJhbmRzIGZvciB0aGUgdGVzdHMuCisgICAgICAgIC0gQWRkZWQgU3ViRG91YmxlIHRlc3Rz
IHVzaW5nIHRoZSBuZXcgbWFjcm9zLgorCiAyMDE1LTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgbWF0Y2hl
ciBjb3JyZWN0bHkgaGFuZGxlcyBTaGwoeCwgMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTI0NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0Myw3ICsx
MjQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJ
bnQoMCkpCiAgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxOZWczMiwgTmVnNjQsIEFpcjo6T29w
cz4obV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGFwcGVuZEJpbk9wPFN1YjMyLCBTdWI2NCwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFN1YjMyLCBT
dWI2NCwgU3ViRG91YmxlPihtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTI0NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTAgQEAKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KQEAgLTQ4OCw2ICs0OTAsNzAgQEAgdm9pZCB0ZXN0U3ViSW1tQXJnMzIoaW50IGEsIGlu
dCBiKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBiKSA9PSBhIC0gYik7CiB9
CiAKK3ZvaWQgdGVzdFN1YkFyZ0RvdWJsZShkb3VibGUgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
RlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENI
RUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCBhKSwgYSAtIGEpKTsK
K30KKwordm9pZCB0ZXN0U3ViQXJnc0RvdWJsZShkb3VibGUgYSwgZG91YmxlIGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBWYWx1ZSogdmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIFZhbHVlKiB2YWx1ZUIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUklu
Zm86OmFyZ3VtZW50RlBSMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWVBLCB2YWx1ZUIpKTsKKworICAgIENIRUNL
KGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCBhLCBiKSwgYSAtIGIpKTsK
K30KKwordm9pZCB0ZXN0U3ViQXJnSW1tRG91YmxlKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiB2YWx1ZUEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgVmFsdWUqIHZhbHVl
QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7
CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBP
cmlnaW4oKSwgdmFsdWVBLCB2YWx1ZUIpKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBp
bGVBbmRSdW48ZG91YmxlPihwcm9jLCBhKSwgYSAtIGIpKTsKK30KKwordm9pZCB0ZXN0U3ViSW1t
QXJnRG91YmxlKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZUEg
PSByb290LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGEpOwor
ICAgIFZhbHVlKiB2YWx1ZUIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWVBLCB2YWx1
ZUIpKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9j
LCBiKSwgYSAtIGIpKTsKK30KKwordm9pZCB0ZXN0U3ViSW1tc0RvdWJsZShkb3VibGUgYSwgZG91
YmxlIGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhKTsKKyAgICBWYWx1ZSogdmFsdWVCID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiKTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigp
LCB2YWx1ZUEsIHZhbHVlQikpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVB
bmRSdW48ZG91YmxlPihwcm9jKSwgYSAtIGIpKTsKK30KKwogdm9pZCB0ZXN0Qml0QW5kQXJncyhp
bnQ2NF90IGEsIGludDY0X3QgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTM5MjUsNiAr
Mzk5MSw0MiBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKICAgICByZXR1cm4gLXplcm8oKTsKIH0K
IAorLy8gU29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGJyZXZpeS4KK2RvdWJsZSBwb3NJ
bmZpbml0eSgpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKTsKK30KKworZG91YmxlIG5lZ0luZmluaXR5KCkKK3sKKyAgICByZXR1cm4gLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKK30KKworCitzdHJ1Y3QgRG91Ymxl
T3BlcmFuZCB7CisgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICBkb3VibGUgdmFsdWU7Cit9Owor
CitzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxEb3VibGVPcGVyYW5kLCA3PiYgZG91YmxlT3BlcmFu
ZHMoKQoreworI2RlZmluZSBET1VCTEVfT1BFUkFORCh4X18pIHsgI3hfXywgeF9fIH0KKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PERvdWJsZU9wZXJhbmQsIDc+IG9wZXJhbmRzID0ge3sK
KyAgICAgICAgRE9VQkxFX09QRVJBTkQoTV9QSSksCisgICAgICAgIERPVUJMRV9PUEVSQU5EKDEp
LAorICAgICAgICBET1VCTEVfT1BFUkFORCgwKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQobmVn
YXRpdmVaZXJvKCkpLAorICAgICAgICBET1VCTEVfT1BFUkFORChwb3NJbmZpbml0eSgpKSwKKyAg
ICAgICAgRE9VQkxFX09QRVJBTkQobmVnSW5maW5pdHkoKSksCisgICAgICAgIERPVUJMRV9PUEVS
QU5EKFBOYU4pLAorICAgIH19OworCisjdW5kZWYgRE9VQkxFX09QRVJBTkQKKworICAgIHJldHVy
biBvcGVyYW5kczsKK307CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
QEAgLTM5MzcsNiArNDAzOSwzNyBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKICAgICAgICAgICAg
ICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxz
ZSk7CiAKKyNkZWZpbmUgUlVOX1VOQVJZKHRlc3QsIHZhbHVlcykgXAorICAgIGZvciAoYXV0byBh
IDogdmFsdWVzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0ZDo6
c3RyaW5nIHRlc3RTdHIgPSBzdGQ6OnN0cmluZygjdGVzdCkgKyAiKCIgKyBhLm5hbWUgKyAiKSI7
IFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4odGVzdFN0ci5jX3N0cigpKSkgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oICAg
ICAgICAgIFwKKyAgICAgICAgICAgIFs9XSAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRlc3ROYW1lID0gdGVzdFN0
ci5jX3N0cigpOyBcCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0ZXN0TmFtZSwgIi4uLlxuIik7
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0ZXN0KGEudmFsdWUpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRhdGFMb2codGVzdE5hbWUsICI6IE9L
IVxuIik7ICAgICAgICAgICBcCisgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgUlVOX0JJTkFSWSh0ZXN0LCB2
YWx1ZXNBLCB2YWx1ZXNCKSBcCisgICAgZm9yIChhdXRvIGEgOiB2YWx1ZXNBKSB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAoYXV0byBiIDogdmFsdWVzQikg
eyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGQ6OnN0cmluZyB0
ZXN0U3RyID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgc3Rk
OjpzdHJpbmcoI3Rlc3QpICsgIigiICsgYS5uYW1lICsgIiwgIiArIGIubmFtZSArICIpIjsgXAor
ICAgICAgICAgICAgaWYgKCFzaG91bGRSdW4odGVzdFN0ci5jX3N0cigpKSkgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgdGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8dm9p
ZCgpPiggICAgICAgICAgXAorICAgICAgICAgICAgICAgIFs9XSAoKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiB0
ZXN0TmFtZSA9IHRlc3RTdHIuY19zdHIoKTsgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9n
KHRlc3ROYW1lLCAiLi4uXG4iKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0
ZXN0KGEudmFsdWUsIGIudmFsdWUpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICAgICBkYXRhTG9nKHRlc3ROYW1lLCAiOiBPSyFcbiIpOyAgICAgICAgICAgXAorICAgICAgICAg
ICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIH0KKwogdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwpAQCAtNDA1NSw2ICs0MTg4LDEyIEBAIHZvaWQgcnVuKGNvbnN0
IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFN1YkltbUFyZzMyKDEzLCAtNDIpKTsKICAgICBS
VU4odGVzdFN1YkltbUFyZzMyKC0xMywgNDIpKTsKIAorICAgIFJVTl9VTkFSWSh0ZXN0U3ViQXJn
RG91YmxlLCBkb3VibGVPcGVyYW5kcygpKTsKKyAgICBSVU5fQklOQVJZKHRlc3RTdWJBcmdzRG91
YmxlLCBkb3VibGVPcGVyYW5kcygpLCBkb3VibGVPcGVyYW5kcygpKTsKKyAgICBSVU5fQklOQVJZ
KHRlc3RTdWJBcmdJbW1Eb3VibGUsIGRvdWJsZU9wZXJhbmRzKCksIGRvdWJsZU9wZXJhbmRzKCkp
OworICAgIFJVTl9CSU5BUlkodGVzdFN1YkltbUFyZ0RvdWJsZSwgZG91YmxlT3BlcmFuZHMoKSwg
ZG91YmxlT3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0U3ViSW1tc0RvdWJsZSwgZG91
YmxlT3BlcmFuZHMoKSwgZG91YmxlT3BlcmFuZHMoKSk7CisKICAgICBSVU4odGVzdEJpdEFuZEFy
Z3MoNDMsIDQzKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRBcmdzKDQzLCAwKSk7CiAgICAgUlVOKHRl
c3RCaXRBbmRBcmdzKDEwLCAzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjQ3NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTE3
MSw2ICsxNzEsMTAgQEAgT3I2NCBVOkcsIFVEOkcKICAgICBUbXAsIFRtcAogICAgIEltbSwgVG1w
CiAKK1N1YkRvdWJsZSBVOkYsIFVEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCiBY
b3IzMiBVOkcsIFVEOkcKICAgICBUbXAsIFRtcAogICAgIEltbSwgVG1wCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265619</attachid>
            <date>2015-11-16 14:23:04 -0800</date>
            <delta_ts>2015-11-17 02:50:02 -0800</delta_ts>
            <desc>patch 2: added -M_PI and -1 to the test operands.</desc>
            <filename>bug-151322.patch</filename>
            <type>text/plain</type>
            <size>8824</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNDgzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTExLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBTdXBwb3J0IERvdWJsZXMgd2l0aCBCMydzIFN1Yi4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTMyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczoKKworICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViSW1tQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkFyZ0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3ViQXJnc0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViQXJnSW1tRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdWJJ
bW1BcmdEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkltbXNEb3VibGUpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6bmVnYXRp
dmVaZXJvKToKKyAgICAgICAgKEpTQzo6QjM6OnBvc0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6
QjM6Om5lZ0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmRvdWJsZU9wZXJhbmRzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgIC0gQWRkZWQgUlVOX1VOQVJZIGFuZCBSVU5f
QklOQVJZIG1hY3JvcyB0byBhdXRvIGdlbmVyYXRlIHBlcm11dGF0aW9ucworICAgICAgICAgIG9m
IG9wZXJhbmRzIGZvciB0aGUgdGVzdHMuCisgICAgICAgIC0gQWRkZWQgU3ViRG91YmxlIHRlc3Rz
IHVzaW5nIHRoZSBuZXcgbWFjcm9zLgorCiAyMDE1LTExLTE2ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgTWFrZSBzdXJlIHRoYXQgdGhlIGFkZHJlc3MgbWF0Y2hl
ciBjb3JyZWN0bHkgaGFuZGxlcyBTaGwoeCwgMSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAxOTI0NzUpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0Myw3ICsx
MjQzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChtX3ZhbHVlLT5jaGlsZCgwKS0+aXNJ
bnQoMCkpCiAgICAgICAgICAgICAgICAgYXBwZW5kVW5PcDxOZWczMiwgTmVnNjQsIEFpcjo6T29w
cz4obV92YWx1ZS0+Y2hpbGQoMSkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IGFwcGVuZEJpbk9wPFN1YjMyLCBTdWI2NCwgQWlyOjpPb3BzPihtX3ZhbHVlLT5jaGlsZCgwKSwg
bV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgICAgIGFwcGVuZEJpbk9wPFN1YjMyLCBT
dWI2NCwgU3ViRG91YmxlPihtX3ZhbHVlLT5jaGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCShyZXZpc2lvbiAxOTI0NzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsMTAgQEAKICNpbmNsdWRl
ICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJQdXJlTmFOLmgiCiAjaW5jbHVkZSAiVk0uaCIK
ICNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSA8d3RmL0xvY2su
aD4KICNpbmNsdWRlIDx3dGYvTnVtYmVyT2ZDb3Jlcy5oPgogI2luY2x1ZGUgPHd0Zi9UaHJlYWRp
bmcuaD4KQEAgLTQ4OCw2ICs0OTAsNzAgQEAgdm9pZCB0ZXN0U3ViSW1tQXJnMzIoaW50IGEsIGlu
dCBiKQogICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBiKSA9PSBhIC0gYik7CiB9
CiAKK3ZvaWQgdGVzdFN1YkFyZ0RvdWJsZShkb3VibGUgYSkKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2
YWx1ZSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
RlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigpLCB2YWx1ZSwgdmFsdWUpKTsKKworICAgIENI
RUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCBhKSwgYSAtIGEpKTsK
K30KKwordm9pZCB0ZXN0U3ViQXJnc0RvdWJsZShkb3VibGUgYSwgZG91YmxlIGIpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBWYWx1ZSogdmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIFZhbHVlKiB2YWx1ZUIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEZQUklu
Zm86OmFyZ3VtZW50RlBSMSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWVBLCB2YWx1ZUIpKTsKKworICAgIENIRUNL
KGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9jLCBhLCBiKSwgYSAtIGIpKTsK
K30KKwordm9pZCB0ZXN0U3ViQXJnSW1tRG91YmxlKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIFZhbHVlKiB2YWx1ZUEgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgVmFsdWUqIHZhbHVl
QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7
CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBP
cmlnaW4oKSwgdmFsdWVBLCB2YWx1ZUIpKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBp
bGVBbmRSdW48ZG91YmxlPihwcm9jLCBhKSwgYSAtIGIpKTsKK30KKwordm9pZCB0ZXN0U3ViSW1t
QXJnRG91YmxlKGRvdWJsZSBhLCBkb3VibGUgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiB2YWx1ZUEg
PSByb290LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGEpOwor
ICAgIFZhbHVlKiB2YWx1ZUIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWVBLCB2YWx1
ZUIpKTsKKworICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVBbmRSdW48ZG91YmxlPihwcm9j
LCBiKSwgYSAtIGIpKTsKK30KKwordm9pZCB0ZXN0U3ViSW1tc0RvdWJsZShkb3VibGUgYSwgZG91
YmxlIGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0
RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhKTsKKyAgICBWYWx1ZSogdmFsdWVCID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBiKTsKKyAgICBy
b290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPihwcm9jLCBTdWIsIE9yaWdpbigp
LCB2YWx1ZUEsIHZhbHVlQikpOworICAgIAorICAgIENIRUNLKGlzSWRlbnRpY2FsKGNvbXBpbGVB
bmRSdW48ZG91YmxlPihwcm9jKSwgYSAtIGIpKTsKK30KKwogdm9pZCB0ZXN0Qml0QW5kQXJncyhp
bnQ2NF90IGEsIGludDY0X3QgYikKIHsKICAgICBQcm9jZWR1cmUgcHJvYzsKQEAgLTM5MjUsNiAr
Mzk5MSw0NCBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKICAgICByZXR1cm4gLXplcm8oKTsKIH0K
IAorLy8gU29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIGJyZXZpeS4KK2RvdWJsZSBwb3NJ
bmZpbml0eSgpCit7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5m
aW5pdHkoKTsKK30KKworZG91YmxlIG5lZ0luZmluaXR5KCkKK3sKKyAgICByZXR1cm4gLXN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKK30KKworCitzdHJ1Y3QgRG91Ymxl
T3BlcmFuZCB7CisgICAgY29uc3QgY2hhciogbmFtZTsKKyAgICBkb3VibGUgdmFsdWU7Cit9Owor
CitzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxEb3VibGVPcGVyYW5kLCA5PiYgZG91YmxlT3BlcmFu
ZHMoKQoreworI2RlZmluZSBET1VCTEVfT1BFUkFORCh4X18pIHsgI3hfXywgeF9fIH0KKworICAg
IHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PERvdWJsZU9wZXJhbmQsIDk+IG9wZXJhbmRzID0ge3sK
KyAgICAgICAgRE9VQkxFX09QRVJBTkQoTV9QSSksCisgICAgICAgIERPVUJMRV9PUEVSQU5EKC1N
X1BJKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQoMSksCisgICAgICAgIERPVUJMRV9PUEVSQU5E
KC0xKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQoMCksCisgICAgICAgIERPVUJMRV9PUEVSQU5E
KG5lZ2F0aXZlWmVybygpKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQocG9zSW5maW5pdHkoKSks
CisgICAgICAgIERPVUJMRV9PUEVSQU5EKG5lZ0luZmluaXR5KCkpLAorICAgICAgICBET1VCTEVf
T1BFUkFORChQTmFOKQorICAgIH19OworCisjdW5kZWYgRE9VQkxFX09QRVJBTkQKKworICAgIHJl
dHVybiBvcGVyYW5kczsKK307CisKICNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFzaG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKQEAgLTM5MzcsNiArNDA0MSwzNyBAQCBkb3VibGUgbmVnYXRpdmVaZXJvKCkKICAgICAgICAg
ICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlIChm
YWxzZSk7CiAKKyNkZWZpbmUgUlVOX1VOQVJZKHRlc3QsIHZhbHVlcykgXAorICAgIGZvciAoYXV0
byBhIDogdmFsdWVzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0
ZDo6c3RyaW5nIHRlc3RTdHIgPSBzdGQ6OnN0cmluZygjdGVzdCkgKyAiKCIgKyBhLm5hbWUgKyAi
KSI7IFwKKyAgICAgICAgaWYgKCFzaG91bGRSdW4odGVzdFN0ci5jX3N0cigpKSkgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHRhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4o
ICAgICAgICAgIFwKKyAgICAgICAgICAgIFs9XSAoKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRlc3ROYW1lID0gdGVz
dFN0ci5jX3N0cigpOyBcCisgICAgICAgICAgICAgICAgZGF0YUxvZyh0ZXN0TmFtZSwgIi4uLlxu
Iik7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB0ZXN0KGEudmFsdWUpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGRhdGFMb2codGVzdE5hbWUsICI6
IE9LIVxuIik7ICAgICAgICAgICBcCisgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgUlVOX0JJTkFSWSh0ZXN0
LCB2YWx1ZXNBLCB2YWx1ZXNCKSBcCisgICAgZm9yIChhdXRvIGEgOiB2YWx1ZXNBKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAoYXV0byBiIDogdmFsdWVz
QikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBzdGQ6OnN0cmlu
ZyB0ZXN0U3RyID0gICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAg
c3RkOjpzdHJpbmcoI3Rlc3QpICsgIigiICsgYS5uYW1lICsgIiwgIiArIGIubmFtZSArICIpIjsg
XAorICAgICAgICAgICAgaWYgKCFzaG91bGRSdW4odGVzdFN0ci5jX3N0cigpKSkgICAgICAgICAg
ICAgICAgXAorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgdGFza3MuYXBwZW5kKGNyZWF0ZVNoYXJlZFRhc2s8
dm9pZCgpPiggICAgICAgICAgXAorICAgICAgICAgICAgICAgIFs9XSAoKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiB0ZXN0TmFtZSA9IHRlc3RTdHIuY19zdHIoKTsgXAorICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nKHRlc3ROYW1lLCAiLi4uXG4iKTsgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAg
ICB0ZXN0KGEudmFsdWUsIGIudmFsdWUpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgICAgICBkYXRhTG9nKHRlc3ROYW1lLCAiOiBPSyFcbiIpOyAgICAgICAgICAgXAorICAgICAg
ICAgICAgfSkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgIH0KKwogdm9pZCBydW4oY29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOwpAQCAtNDA1NSw2ICs0MTkwLDEyIEBAIHZvaWQgcnVuKGNv
bnN0IGNoYXIqIGZpbHRlcikKICAgICBSVU4odGVzdFN1YkltbUFyZzMyKDEzLCAtNDIpKTsKICAg
ICBSVU4odGVzdFN1YkltbUFyZzMyKC0xMywgNDIpKTsKIAorICAgIFJVTl9VTkFSWSh0ZXN0U3Vi
QXJnRG91YmxlLCBkb3VibGVPcGVyYW5kcygpKTsKKyAgICBSVU5fQklOQVJZKHRlc3RTdWJBcmdz
RG91YmxlLCBkb3VibGVPcGVyYW5kcygpLCBkb3VibGVPcGVyYW5kcygpKTsKKyAgICBSVU5fQklO
QVJZKHRlc3RTdWJBcmdJbW1Eb3VibGUsIGRvdWJsZU9wZXJhbmRzKCksIGRvdWJsZU9wZXJhbmRz
KCkpOworICAgIFJVTl9CSU5BUlkodGVzdFN1YkltbUFyZ0RvdWJsZSwgZG91YmxlT3BlcmFuZHMo
KSwgZG91YmxlT3BlcmFuZHMoKSk7CisgICAgUlVOX0JJTkFSWSh0ZXN0U3ViSW1tc0RvdWJsZSwg
ZG91YmxlT3BlcmFuZHMoKSwgZG91YmxlT3BlcmFuZHMoKSk7CisKICAgICBSVU4odGVzdEJpdEFu
ZEFyZ3MoNDMsIDQzKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRBcmdzKDQzLCAwKSk7CiAgICAgUlVO
KHRlc3RCaXRBbmRBcmdzKDEwLCAzKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDE5MjQ3NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAg
LTE3MSw2ICsxNzEsMTAgQEAgT3I2NCBVOkcsIFVEOkcKICAgICBUbXAsIFRtcAogICAgIEltbSwg
VG1wCiAKK1N1YkRvdWJsZSBVOkYsIFVEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAor
CiBYb3IzMiBVOkcsIFVEOkcKICAgICBUbXAsIFRtcAogICAgIEltbSwgVG1wCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>265667</attachid>
            <date>2015-11-16 23:30:44 -0800</date>
            <delta_ts>2015-11-17 11:09:23 -0800</delta_ts>
            <desc>patch 3: addressed with feedback.</desc>
            <filename>bug-151322.patch</filename>
            <type>text/plain</type>
            <size>8785</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkyNTA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBA
CisyMDE1LTExLTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBb
SlNDXSBTdXBwb3J0IERvdWJsZXMgd2l0aCBCMydzIFN1Yi4KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTMyMgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6bG93ZXIpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczoKKworICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViSW1tQXJnMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkFyZ0Rv
dWJsZSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3ViQXJnc0RvdWJsZSk6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0U3ViQXJnSW1tRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdWJJ
bW1BcmdEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN1YkltbXNEb3VibGUpOgorICAg
ICAgICAoSlNDOjpCMzo6dGVzdEJpdEFuZEFyZ3MpOgorICAgICAgICAoSlNDOjpCMzo6bmVnYXRp
dmVaZXJvKToKKyAgICAgICAgKEpTQzo6QjM6OnBvc0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6
QjM6Om5lZ0luZmluaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmRvdWJsZU9wZXJhbmRzKToKKyAg
ICAgICAgKEpTQzo6QjM6OnJ1bik6CisgICAgICAgIC0gQWRkZWQgUlVOX1VOQVJZIGFuZCBSVU5f
QklOQVJZIG1hY3JvcyB0byBhdXRvIGdlbmVyYXRlIHBlcm11dGF0aW9ucworICAgICAgICAgIG9m
IG9wZXJhbmRzIGZvciB0aGUgdGVzdHMuCisgICAgICAgIC0gQWRkZWQgU3ViRG91YmxlIHRlc3Rz
IHVzaW5nIHRoZSBuZXcgbWFjcm9zLgorCiAyMDE1LTExLTE2ICBCZW5qYW1pbiBQb3VsYWluICA8
YnBvdWxhaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtKU0NdIE1ha2UgRlRMT3V0cHV0J3MgbG9h
ZDgoKSBhbmQgbG9hZDE2KCkgY29tcGF0aWJsZSB3aXRoIEIzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTkyNTA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
NTUsNyArMTI1NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAobV92YWx1ZS0+Y2hpbGQo
MCktPmlzSW50KDApKQogICAgICAgICAgICAgICAgIGFwcGVuZFVuT3A8TmVnMzIsIE5lZzY0LCBB
aXI6Ok9vcHM+KG1fdmFsdWUtPmNoaWxkKDEpKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBhcHBlbmRCaW5PcDxTdWIzMiwgU3ViNjQsIEFpcjo6T29wcz4obV92YWx1ZS0+Y2hp
bGQoMCksIG1fdmFsdWUtPmNoaWxkKDEpKTsKKyAgICAgICAgICAgICAgICBhcHBlbmRCaW5PcDxT
dWIzMiwgU3ViNjQsIFN1YkRvdWJsZT4obV92YWx1ZS0+Y2hpbGQoMCksIG1fdmFsdWUtPmNoaWxk
KDEpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMTkyNTA4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDEwIEBACiAj
aW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
ICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiUHVyZU5hTi5oIgogI2luY2x1ZGUg
IlZNLmgiCiAjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CiAjaW5jbHVkZSA8d3RmL051bWJlck9mQ29yZXMuaD4KICNpbmNsdWRlIDx3dGYv
VGhyZWFkaW5nLmg+CkBAIC01NTIsNiArNTU0LDcwIEBAIHZvaWQgdGVzdFN1YkltbUFyZzMyKGlu
dCBhLCBpbnQgYikKICAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYikgPT0gYSAt
IGIpOwogfQogCit2b2lkIHRlc3RTdWJBcmdEb3VibGUoZG91YmxlIGEpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBW
YWx1ZSogdmFsdWUgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBPcmlnaW4oKSwgdmFsdWUsIHZhbHVlKSk7CisK
KyAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgYSksIGEg
LSBhKSk7Cit9CisKK3ZvaWQgdGVzdFN1YkFyZ3NEb3VibGUoZG91YmxlIGEsIGRvdWJsZSBiKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgVmFsdWUqIHZhbHVlQSA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgRlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICBWYWx1ZSog
dmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBGUFJJbmZvOjphcmd1bWVudEZQUjEpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHZhbHVlQSwgdmFsdWVCKSk7CisKKyAg
ICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgYSwgYiksIGEg
LSBiKSk7Cit9CisKK3ZvaWQgdGVzdFN1YkFyZ0ltbURvdWJsZShkb3VibGUgYSwgZG91YmxlIGIp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogdmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIFZhbHVl
KiB2YWx1ZUIgPSByb290LT5hcHBlbmROZXc8Q29uc3REb3VibGVWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIGIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IFN1YiwgT3JpZ2luKCksIHZhbHVlQSwgdmFsdWVCKSk7CisKKyAgICBDSEVDSyhpc0lkZW50aWNh
bChjb21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYywgYSksIGEgLSBiKSk7Cit9CisKK3ZvaWQgdGVz
dFN1YkltbUFyZ0RvdWJsZShkb3VibGUgYSwgZG91YmxlIGIpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSog
dmFsdWVBID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0RG91YmxlVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhKTsKKyAgICBWYWx1ZSogdmFsdWVCID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIFN1YiwgT3JpZ2luKCksIHZhbHVl
QSwgdmFsdWVCKSk7CisKKyAgICBDSEVDSyhpc0lkZW50aWNhbChjb21waWxlQW5kUnVuPGRvdWJs
ZT4ocHJvYywgYiksIGEgLSBiKSk7Cit9CisKK3ZvaWQgdGVzdFN1YkltbXNEb3VibGUoZG91Ymxl
IGEsIGRvdWJsZSBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIHZhbHVlQSA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYSk7CisgICAgVmFsdWUqIHZhbHVl
QiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdERvdWJsZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYik7
CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgU3ViLCBP
cmlnaW4oKSwgdmFsdWVBLCB2YWx1ZUIpKTsKKyAgICAKKyAgICBDSEVDSyhpc0lkZW50aWNhbChj
b21waWxlQW5kUnVuPGRvdWJsZT4ocHJvYyksIGEgLSBiKSk7Cit9CisKIHZvaWQgdGVzdEJpdEFu
ZEFyZ3MoaW50NjRfdCBhLCBpbnQ2NF90IGIpCiB7CiAgICAgUHJvY2VkdXJlIHByb2M7CkBAIC00
MTY3LDYgKzQyMzMsNDQgQEAgZG91YmxlIG5lZ2F0aXZlWmVybygpCiAgICAgcmV0dXJuIC16ZXJv
KCk7CiB9CiAKKy8vIFNvbWUgY29udmVuaWVuY2UgZnVuY3Rpb25zIGZvciBicmV2aXR5IG9mIHRo
ZSB0ZXN0IG91dHB1dC4KK2RvdWJsZSBwb3NJbmZpbml0eSgpCit7CisgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKK30KKworZG91YmxlIG5lZ0luZmlu
aXR5KCkKK3sKKyAgICByZXR1cm4gLXN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5p
dHkoKTsKK30KKworCitzdHJ1Y3QgRG91YmxlT3BlcmFuZCB7CisgICAgY29uc3QgY2hhciogbmFt
ZTsKKyAgICBkb3VibGUgdmFsdWU7Cit9OworCitzdGF0aWMgY29uc3Qgc3RkOjphcnJheTxEb3Vi
bGVPcGVyYW5kLCA5PiYgZG91YmxlT3BlcmFuZHMoKQoreworI2RlZmluZSBET1VCTEVfT1BFUkFO
RCh4X18pIHsgI3hfXywgeF9fIH0KKworICAgIHN0YXRpYyBjb25zdCBzdGQ6OmFycmF5PERvdWJs
ZU9wZXJhbmQsIDk+IG9wZXJhbmRzID0ge3sKKyAgICAgICAgRE9VQkxFX09QRVJBTkQoTV9QSSks
CisgICAgICAgIERPVUJMRV9PUEVSQU5EKC1NX1BJKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQo
MSksCisgICAgICAgIERPVUJMRV9PUEVSQU5EKC0xKSwKKyAgICAgICAgRE9VQkxFX09QRVJBTkQo
MCksCisgICAgICAgIERPVUJMRV9PUEVSQU5EKG5lZ2F0aXZlWmVybygpKSwKKyAgICAgICAgRE9V
QkxFX09QRVJBTkQocG9zSW5maW5pdHkoKSksCisgICAgICAgIERPVUJMRV9PUEVSQU5EKG5lZ0lu
ZmluaXR5KCkpLAorICAgICAgICBET1VCTEVfT1BFUkFORChQTmFOKQorICAgIH19OworCisjdW5k
ZWYgRE9VQkxFX09QRVJBTkQKKworICAgIHJldHVybiBvcGVyYW5kczsKK307CisKICNkZWZpbmUg
UlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKCFz
aG91bGRSdW4oI3Rlc3QpKSAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTQxNzksNiArNDI4MywzNiBAQCBkb3Vi
bGUgbmVnYXRpdmVaZXJvKCkKICAgICAgICAgICAgICAgICB9KSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKICAgICB9IHdoaWxlIChmYWxzZSk7CiAKKyNkZWZpbmUgUlVOX1VOQVJZKHRl
c3QsIHZhbHVlcykgXAorICAgIGZvciAoYXV0byBhIDogdmFsdWVzKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIFN0cmluZyB0ZXN0U3RyID0gU3RyaW5nKCN0ZXN0KSAr
ICIoIiArIGEubmFtZSArICIpIjsgXAorICAgICAgICBpZiAoIXNob3VsZFJ1bih0ZXN0U3RyLmFz
Y2lpKCkuZGF0YSgpKSkgICAgICAgICBcCisgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGFza3MuYXBwZW5kKGNyZWF0ZVNo
YXJlZFRhc2s8dm9pZCgpPiggICAgICAgICAgXAorICAgICAgICAgICAgWz1dICgpIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY29uc3QgY2hh
ciogdGVzdE5hbWUgPSB0ZXN0U3RyLmFzY2lpKCkuZGF0YSgpOyBcCisgICAgICAgICAgICAgICAg
ZGF0YUxvZyh0ZXN0TmFtZSwgIi4uLlxuIik7ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg
ICB0ZXN0KGEudmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
ICAgIGRhdGFMb2codGVzdE5hbWUsICI6IE9LIVxuIik7ICAgICAgICAgICBcCisgICAgICAgICAg
ICB9KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisK
KyNkZWZpbmUgUlVOX0JJTkFSWSh0ZXN0LCB2YWx1ZXNBLCB2YWx1ZXNCKSBcCisgICAgZm9yIChh
dXRvIGEgOiB2YWx1ZXNBKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGZvciAoYXV0byBiIDogdmFsdWVzQikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBTdHJpbmcgdGVzdFN0ciA9IFN0cmluZygjdGVzdCkgKyAiKCIgKyBhLm5h
bWUgKyAiLCAiICsgYi5uYW1lICsgIikiOyBcCisgICAgICAgICAgICBpZiAoIXNob3VsZFJ1bih0
ZXN0U3RyLmFzY2lpKCkuZGF0YSgpKSkgICAgICAgICBcCisgICAgICAgICAgICAgICAgY29udGlu
dWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0YXNr
cy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KCAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgWz1dICgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHRlc3ROYW1lID0gdGVzdFN0ci5hc2NpaSgpLmRh
dGEoKTsgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRlc3ROYW1lLCAiLi4uXG4iKTsg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICB0ZXN0KGEudmFsdWUsIGIudmFsdWUp
OyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKHRlc3ROYW1l
LCAiOiBPSyFcbiIpOyAgICAgICAgICAgXAorICAgICAgICAgICAgfSkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKwogdm9pZCBydW4o
Y29uc3QgY2hhciogZmlsdGVyKQogewogICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOwpA
QCAtNDMyMSw2ICs0NDU1LDEyIEBAIHZvaWQgcnVuKGNvbnN0IGNoYXIqIGZpbHRlcikKICAgICBS
VU4odGVzdFN1YkltbUFyZzMyKDEzLCAtNDIpKTsKICAgICBSVU4odGVzdFN1YkltbUFyZzMyKC0x
MywgNDIpKTsKIAorICAgIFJVTl9VTkFSWSh0ZXN0U3ViQXJnRG91YmxlLCBkb3VibGVPcGVyYW5k
cygpKTsKKyAgICBSVU5fQklOQVJZKHRlc3RTdWJBcmdzRG91YmxlLCBkb3VibGVPcGVyYW5kcygp
LCBkb3VibGVPcGVyYW5kcygpKTsKKyAgICBSVU5fQklOQVJZKHRlc3RTdWJBcmdJbW1Eb3VibGUs
IGRvdWJsZU9wZXJhbmRzKCksIGRvdWJsZU9wZXJhbmRzKCkpOworICAgIFJVTl9CSU5BUlkodGVz
dFN1YkltbUFyZ0RvdWJsZSwgZG91YmxlT3BlcmFuZHMoKSwgZG91YmxlT3BlcmFuZHMoKSk7Cisg
ICAgUlVOX0JJTkFSWSh0ZXN0U3ViSW1tc0RvdWJsZSwgZG91YmxlT3BlcmFuZHMoKSwgZG91Ymxl
T3BlcmFuZHMoKSk7CisKICAgICBSVU4odGVzdEJpdEFuZEFyZ3MoNDMsIDQzKSk7CiAgICAgUlVO
KHRlc3RCaXRBbmRBcmdzKDQzLCAwKSk7CiAgICAgUlVOKHRlc3RCaXRBbmRBcmdzKDEwLCAzKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29k
ZXMJKHJldmlzaW9uIDE5MjUwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDEwIEBAIFN1YjY0IFU6
RywgVUQ6RwogICAgIFRtcCwgVG1wCiAgICAgSW1tLCBUbXAKIAorU3ViRG91YmxlIFU6RiwgVUQ6
RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKIE5lZzMyIFVEOkcKICAgICBUbXAKICAg
ICBBZGRyCg==
</data>
<flag name="review"
          id="290692"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>