<?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>175895</bug_id>
          
          <creation_ts>2017-08-23 11:34:08 -0700</creation_ts>
          <short_desc>[DFG] Add constant folding rule to convert CompareStrictEq(Untyped, Untyped [with non string cell constant]) to CompareEqPtr(Untyped)</short_desc>
          <delta_ts>2017-08-29 17:31:26 -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>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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1341673</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 11:34:08 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341675</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 11:35:32 -0700</bug_when>
    <thetext>We start holding map bucket in js property. And we perform CompareSrictEq onto this.
Current DFG code looks nice. But we can optimize further by introducing SpecCellOther fixup and CellOtherUse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1341676</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-23 11:36:34 -0700</bug_when>
    <thetext>Or, we can say NotStringCellUse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342643</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 02:51:44 -0700</bug_when>
    <thetext>Maybe, this is simpler.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342644</commentid>
    <comment_count>4</comment_count>
      <attachid>319134</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 03:01:24 -0700</bug_when>
    <thetext>Created attachment 319134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342653</commentid>
    <comment_count>5</comment_count>
      <attachid>319134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-26 09:25:08 -0700</bug_when>
    <thetext>Comment on attachment 319134
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))

Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:88
&gt; +

I think AI would be better at proving this than what you’re doing here. Maybe write such a rule in AI/constant folding?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342683</commentid>
    <comment_count>6</comment_count>
      <attachid>319134</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 17:19:28 -0700</bug_when>
    <thetext>Comment on attachment 319134
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt;&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))
&gt; 
&gt; Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that

In the other cases, we do not need to convert CompareStrictEq to CompareEqPtr. It is already fast and optimized enough in DFG speculative JIT.
And DFGSpeculativeJIT curretnly only supports CompareEqPtr(Untyped). I do not think CompareEqPtr(VariousType) is worth adding.

&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:88
&gt;&gt; +
&gt; 
&gt; I think AI would be better at proving this than what you’re doing here. Maybe write such a rule in AI/constant folding?

OK, I&apos;ll move this to AI/constant folding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342687</commentid>
    <comment_count>7</comment_count>
      <attachid>319144</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 17:50:36 -0700</bug_when>
    <thetext>Created attachment 319144
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342703</commentid>
    <comment_count>8</comment_count>
      <attachid>319134</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-26 19:40:26 -0700</bug_when>
    <thetext>Comment on attachment 319134
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt;&gt;&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))
&gt;&gt; 
&gt;&gt; Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that
&gt; 
&gt; In the other cases, we do not need to convert CompareStrictEq to CompareEqPtr. It is already fast and optimized enough in DFG speculative JIT.
&gt; And DFGSpeculativeJIT curretnly only supports CompareEqPtr(Untyped). I do not think CompareEqPtr(VariousType) is worth adding.

My point was that all you need to do to make this work is keep convert it to a CompareEqPtr and and add a Check right before the CompareEqPtr.
Also, it’s worth making sure this doesn’t need to be aware of document.all</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342706</commentid>
    <comment_count>9</comment_count>
      <attachid>319134</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 20:03:47 -0700</bug_when>
    <thetext>Comment on attachment 319134
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt;&gt;&gt;&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))
&gt;&gt;&gt; 
&gt;&gt;&gt; Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that
&gt;&gt; 
&gt;&gt; In the other cases, we do not need to convert CompareStrictEq to CompareEqPtr. It is already fast and optimized enough in DFG speculative JIT.
&gt;&gt; And DFGSpeculativeJIT curretnly only supports CompareEqPtr(Untyped). I do not think CompareEqPtr(VariousType) is worth adding.
&gt; 
&gt; My point was that all you need to do to make this work is keep convert it to a CompareEqPtr and and add a Check right before the CompareEqPtr.
&gt; Also, it’s worth making sure this doesn’t need to be aware of document.all

One concern is that it can hurt efficiency in 32bit environment. In 32bit, if we have CompareStrictEq(ObjectType, ObjectConstant), we can perform 32bit pointer comparison.
However, if we convert it to Check(Object) and CompareEqPtr(Untyped), it needs to perform 64bit comparison against JSValue. It is efficient in 64bit environment (since we can perform 64bit comparison), but it is not in 32bit environment.
I think the current conversion rule is good in efficiency. CompareStrictEq(Untyped, Untyped) anyway needs to perform JSValue comparison. If we can convert it to ComparePtrEq, it is always more efficient than CompareStrictEq.

One solution is adding CompareEqPtr(ObjectUse) etc. in 32bit environment (I don&apos;t think adding it to 64bit is good, since it can add an additional cell type check that is not necessary right now.) But I do not think it is worth adding.

I will add masquarade as undefined check too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1342707</commentid>
    <comment_count>10</comment_count>
      <attachid>319134</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-26 20:07:20 -0700</bug_when>
    <thetext>Comment on attachment 319134
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt;&gt;&gt;&gt;&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that
&gt;&gt;&gt; 
&gt;&gt;&gt; In the other cases, we do not need to convert CompareStrictEq to CompareEqPtr. It is already fast and optimized enough in DFG speculative JIT.
&gt;&gt;&gt; And DFGSpeculativeJIT curretnly only supports CompareEqPtr(Untyped). I do not think CompareEqPtr(VariousType) is worth adding.
&gt;&gt; 
&gt;&gt; My point was that all you need to do to make this work is keep convert it to a CompareEqPtr and and add a Check right before the CompareEqPtr.
&gt;&gt; Also, it’s worth making sure this doesn’t need to be aware of document.all
&gt; 
&gt; One concern is that it can hurt efficiency in 32bit environment. In 32bit, if we have CompareStrictEq(ObjectType, ObjectConstant), we can perform 32bit pointer comparison.
&gt; However, if we convert it to Check(Object) and CompareEqPtr(Untyped), it needs to perform 64bit comparison against JSValue. It is efficient in 64bit environment (since we can perform 64bit comparison), but it is not in 32bit environment.
&gt; I think the current conversion rule is good in efficiency. CompareStrictEq(Untyped, Untyped) anyway needs to perform JSValue comparison. If we can convert it to ComparePtrEq, it is always more efficient than CompareStrictEq.
&gt; 
&gt; One solution is adding CompareEqPtr(ObjectUse) etc. in 32bit environment (I don&apos;t think adding it to 64bit is good, since it can add an additional cell type check that is not necessary right now.) But I do not think it is worth adding.
&gt; 
&gt; I will add masquarade as undefined check too.

Ah, I do not need to add masquerade as undefined case since it is CompareStrictEq.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343168</commentid>
    <comment_count>11</comment_count>
      <attachid>319144</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-29 11:37:26 -0700</bug_when>
    <thetext>Comment on attachment 319144
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:158
&gt; +                    if (isNonStringCellConstant(child1Constant)) {
&gt; +                        node-&gt;convertToCompareEqPtr(m_graph.freezeStrong(child1Constant.asCell()), node-&gt;child2());
&gt; +                        changed = true;
&gt; +                    } else if (isNonStringCellConstant(child2Constant)) {
&gt; +                        node-&gt;convertToCompareEqPtr(m_graph.freezeStrong(child2Constant.asCell()), node-&gt;child1());
&gt; +                        changed = true;
&gt; +                    }

When we do BigInt, we need to make sure we change this rule...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343169</commentid>
    <comment_count>12</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-29 11:38:33 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #9)
&gt; Comment on attachment 319134 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319134&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:82
&gt; &gt;&gt;&gt;&gt; +            if (!m_node-&gt;isBinaryUseKind(UntypedUse))
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Why does this matter? It seems like your rewriting rule should work regardless? Or is this just because of the use kinds CompareEqPtr supports? If so, you can just convert this to a Check and then imagery the CompareEqPtr after that
&gt; &gt;&gt; 
&gt; &gt;&gt; In the other cases, we do not need to convert CompareStrictEq to CompareEqPtr. It is already fast and optimized enough in DFG speculative JIT.
&gt; &gt;&gt; And DFGSpeculativeJIT curretnly only supports CompareEqPtr(Untyped). I do not think CompareEqPtr(VariousType) is worth adding.
&gt; &gt; 
&gt; &gt; My point was that all you need to do to make this work is keep convert it to a CompareEqPtr and and add a Check right before the CompareEqPtr.
&gt; &gt; Also, it’s worth making sure this doesn’t need to be aware of document.all
&gt; 
&gt; One concern is that it can hurt efficiency in 32bit environment. In 32bit,
&gt; if we have CompareStrictEq(ObjectType, ObjectConstant), we can perform 32bit
&gt; pointer comparison.
&gt; However, if we convert it to Check(Object) and CompareEqPtr(Untyped), it
&gt; needs to perform 64bit comparison against JSValue. It is efficient in 64bit
&gt; environment (since we can perform 64bit comparison), but it is not in 32bit
&gt; environment.
&gt; I think the current conversion rule is good in efficiency.
&gt; CompareStrictEq(Untyped, Untyped) anyway needs to perform JSValue
&gt; comparison. If we can convert it to ComparePtrEq, it is always more
&gt; efficient than CompareStrictEq.
&gt; 
&gt; One solution is adding CompareEqPtr(ObjectUse) etc. in 32bit environment (I
&gt; don&apos;t think adding it to 64bit is good, since it can add an additional cell
&gt; type check that is not necessary right now.) But I do not think it is worth
&gt; adding.
&gt; 
&gt; I will add masquarade as undefined check too.

Yeah this makes sense. Also, you&apos;re totally right that ComapreStrictEq(ObjectUse:, some other use) is already fast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343332</commentid>
    <comment_count>13</comment_count>
      <attachid>319144</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-29 17:11:40 -0700</bug_when>
    <thetext>Comment on attachment 319144
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:158
&gt;&gt; +                    }
&gt; 
&gt; When we do BigInt, we need to make sure we change this rule...

Yeah. Or we can take the similar approach to the current Symbol: interning BigInt cells by WeakGCMap to ensure the pointer comparison works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343336</commentid>
    <comment_count>14</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-08-29 17:14:52 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #13)
&gt; Comment on attachment 319144 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319144&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:158
&gt; &gt;&gt; +                    }
&gt; &gt; 
&gt; &gt; When we do BigInt, we need to make sure we change this rule...
&gt; 
&gt; Yeah. Or we can take the similar approach to the current Symbol: interning
&gt; BigInt cells by WeakGCMap to ensure the pointer comparison works.

I don&apos;t think we&apos;d want to intern these. That&apos;ll mean every math operation over them is doing some sort of hash-consing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343339</commentid>
    <comment_count>15</comment_count>
      <attachid>319144</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-29 17:16:56 -0700</bug_when>
    <thetext>Comment on attachment 319144
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGConstantFoldingPhase.cpp:158
&gt;&gt;&gt;&gt; +                    }
&gt;&gt;&gt; 
&gt;&gt;&gt; When we do BigInt, we need to make sure we change this rule...
&gt;&gt; 
&gt;&gt; Yeah. Or we can take the similar approach to the current Symbol: interning BigInt cells by WeakGCMap to ensure the pointer comparison works.
&gt; 
&gt; I don&apos;t think we&apos;d want to intern these. That&apos;ll mean every math operation over them is doing some sort of hash-consing.

OK, I&apos;ll add FIXME about it for the future BigInt integration :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343343</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-08-29 17:29:45 -0700</bug_when>
    <thetext>Committed r221328: &lt;http://trac.webkit.org/changeset/221328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343344</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-29 17:31:26 -0700</bug_when>
    <thetext>&lt;rdar://problem/34148115&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319134</attachid>
            <date>2017-08-26 03:01:24 -0700</date>
            <delta_ts>2017-08-26 17:50:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175895-20170826190123.patch</filename>
            <type>text/plain</type>
            <size>4020</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjI1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZmQ5NWExMGFiNTcwMGVhYmFlMWMxNmZkYzEwZmYyNzhiMzhhMDY1Li5kNWRhZjUyMTA3MmNiMDFi
YzIzMTRlNDNlZWU0YThhZWNiODcyOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzMiBAQAogMjAxNy0wOC0yNiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBbREZHXSBBZGQgQ29tcGFyZUVxUHRyIHN0cmVuZ3RoIHJlZHVjdGlv
biBmb3IgQ29tcGFyZVN0cmljdEVxKFVudHlwZWQsIFVudHlwZWQpCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4OTUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBoYXZlIGBidWNrZXQgPT09IEBzZW50
aW5lbE1hcEJ1Y2tldGAgY29kZSBpbiBidWlsdGluLiBTaW5jZSBAc2VudGluZWxNYXBCdWNrZXQg
YW5kIGJ1Y2tldAorICAgICAgICBhcmUgTWFwQnVja2V0IGNlbGwgKFNwZWNDZWxsT3RoZXIpLCB3
ZSBkbyBub3QgaGF2ZSBhbnkgZ29vZCBmaXh1cCBmb3IgQ29tcGFyZVN0cmljdEVxLgorICAgICAg
ICBCdXQgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYSBzcGVjaWFsIGZpeHVwIGVkZ2UgKGxpa2Us
IE5vblN0cmluZ0NlbGxVc2UpLCBjb252ZXJ0aW5nCisgICAgICAgIENvbXBhcmVTdHJpY3RFcShV
bnR5cGVkLCBVbnR5cGVkKSB0byBDb21wYXJlRXFQdHIgaXMgc2ltcGxlci4KKyAgICAgICAgSW4g
c3RyZW5ndGggcmVkdWN0aW9uIHBoYXNlLCB3ZSBjb252ZXJ0IENvbXBhcmVTdHJpY3RFcShVbnR5
cGVkLCBVbnR5cGVkKSB0byBDb21wYXJlRXFQdHIoVW50eXBlZCkKKyAgICAgICAgaWYgb25lIHNp
ZGUgb2YgdGhlIGNoaWxkcmVuIGlzIGNvbnN0YW50IG5vbiBTdHJpbmcgY2VsbC4KKworICAgICAg
ICBUaGlzIHNsaWdodGx5IG9wdGltaXplcyBtYXAvc2V0IGl0ZXJhdGlvbi4KKworICAgICAgICBz
ZXQtZm9yLWVhY2ggICAgICAgICAgICAgICA0LjIwNTMrLTAuMzQzMiAgICAgXiAgICAgIDMuNDQx
OCstMC4yNTk1ICAgICAgICBeIGRlZmluaXRlbHkgMS4yMjE4eCBmYXN0ZXIKKyAgICAgICAgbGFy
Z2UtbWFwLWl0ZXJhdGlvbiAgICAgICA1NS43ODAwKy0yLjIyODEgICAgICAgICAgIDUyLjgyNTQr
LTIuMTEzNCAgICAgICAgICBtaWdodCBiZSAxLjA1NTl4IGZhc3RlcgorICAgICAgICBzZXQtZm9y
LW9mICAgICAgICAgICAgICAgICA4Ljg2MjcrLTAuNTQ1MyAgICAgICAgICAgIDguMzQyOSstMC40
OTY2ICAgICAgICAgIG1pZ2h0IGJlIDEuMDYyM3ggZmFzdGVyCisgICAgICAgIG1hcC1mb3ItZWFj
aCAgICAgICAgICAgICAgIDQuNTcxNystMC4zMjQ4ICAgICBeICAgICAgMy40OTI4Ky0wLjI1MDAg
ICAgICAgIF4gZGVmaW5pdGVseSAxLjMwODl4IGZhc3RlcgorICAgICAgICBtYXAtZm9yLW9mICAg
ICAgICAgICAgICAgIDEyLjgwNzErLTAuOTY4OSAgICAgPyAgICAgMTIuODE3MSstMC42MjA4ICAg
ICAgICA/CisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5v
ZGU6OmNvbnZlcnRUb0NvbXBhcmVFcVB0cik6CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhh
c2U6OmhhbmRsZU5vZGUpOgorCisyMDE3LTA4LTI2ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50
ZWFAZ21haWwuY29tPgorCiAgICAgICAgIFVucmV2aWV3ZWQsIHN1cHByZXNzIHdhcm5pbmdzIGlu
IEdUSyBwb3J0CiAKICAgICAgICAgVGhlICJibG9jayIgdmFyaWFibGUgaGlkZXMgdGhlIGFyZ3Vt
ZW50IHZhcmlhYmxlLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAppbmRleCBlNzBkYjk2
MTFjNGIwNDI4Mjk1OTYzNDMwMjVhNzMzOTNmMTdjYjE0Li4zZTIzZDA0MzIxZTg1MzYxMTk4MmQ0
MjFmZGEzY2JlNzgxMmFkZmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAt
NjgyLDYgKzY4MiwxNSBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIEFTU0VSVChtX29wID09IEFy
aXRoQWJzICYmIGNoaWxkMSgpLnVzZUtpbmQoKSA9PSBJbnQzMlVzZSk7CiAgICAgICAgIG1fb3Ag
PSBBcml0aE5lZ2F0ZTsKICAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRUb0NvbXBhcmVFcVB0cihG
cm96ZW5WYWx1ZSogY2VsbCwgRWRnZSBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fb3Ag
PT0gQ29tcGFyZVN0cmljdEVxKTsKKyAgICAgICAgc2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29tcGFy
ZUVxUHRyKTsKKyAgICAgICAgY2hpbGRyZW4uc2V0Q2hpbGQxKG5vZGUpOworICAgICAgICBjaGls
ZHJlbi5zZXRDaGlsZDIoRWRnZSgpKTsKKyAgICAgICAgbV9vcEluZm8gPSBjZWxsOworICAgIH0K
ICAgICAKICAgICB2b2lkIGNvbnZlcnRUb0RpcmVjdENhbGwoRnJvemVuVmFsdWUqKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAKaW5kZXggNjVhZmI0YWU4OTVhZDQ4N2JmNWZhYmVjZGZlYjU5NzhlY2VjMDA0ZC4u
Y2U5OTBhZGI1MDhhOGJhMGY1Y2VmNjIwNzQ4NjZkMzkzNmVmMzA2MCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CkBAIC03OCw2ICs3OCwyNCBAQCBjbGFzcyBTdHJlbmd0aFJlZHVjdGlvblBoYXNlIDogcHVibGlj
IFBoYXNlIHsKICAgICB2b2lkIGhhbmRsZU5vZGUoKQogICAgIHsKICAgICAgICAgc3dpdGNoICht
X25vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6IHsKKyAgICAgICAg
ICAgIGlmICghbV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpCisgICAgICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGF1dG8gaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQg
PSBbXSAoRWRnZSYgZWRnZSkgeworICAgICAgICAgICAgICAgIHJldHVybiBlZGdlLT5pc0NlbGxD
b25zdGFudCgpICYmICFlZGdlLT5hc0NlbGwoKS0+aXNTdHJpbmcoKTsKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmIChpc05vblN0cmluZ0NlbGxDb25zdGFudChtX25vZGUtPmNoaWxk
MSgpKSkgeworICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvQ29tcGFyZUVxUHRyKG1f
Z3JhcGguZnJlZXplU3Ryb25nKG1fbm9kZS0+Y2hpbGQxKCktPmFzQ2VsbCgpKSwgbV9ub2RlLT5j
aGlsZDIoKSk7CisgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQobV9ub2RlLT5jaGlsZDIoKSkpIHsK
KyAgICAgICAgICAgICAgICBtX25vZGUtPmNvbnZlcnRUb0NvbXBhcmVFcVB0cihtX2dyYXBoLmZy
ZWV6ZVN0cm9uZyhtX25vZGUtPmNoaWxkMigpLT5hc0NlbGwoKSksIG1fbm9kZS0+Y2hpbGQxKCkp
OworICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgQml0T3I6CiAgICAgICAg
ICAgICBoYW5kbGVDb21tdXRhdGl2aXR5KCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319144</attachid>
            <date>2017-08-26 17:50:36 -0700</date>
            <delta_ts>2017-08-29 11:37:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-175895-20170827095035.patch</filename>
            <type>text/plain</type>
            <size>5703</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxMjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZmQ5NWExMGFiNTcwMGVhYmFlMWMxNmZkYzEwZmYyNzhiMzhhMDY1Li45Y2VhZGFkYTU0NDFmNjU3
MjRkMTUzODJmYTY0OTQ2N2EzZmVmZDZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwzNCBAQAogMjAxNy0wOC0yNiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KIAorICAgICAgICBbREZHXSBBZGQgY29uc3RhbnQgZm9sZGluZyBydWxlIHRvIGNvbnZl
cnQgQ29tcGFyZVN0cmljdEVxKFVudHlwZWQsIFVudHlwZWQgW3dpdGggbm9uIHN0cmluZyBjZWxs
IGNvbnN0YW50XSkgdG8gQ29tcGFyZUVxUHRyKFVudHlwZWQpCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzU4OTUKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBoYXZlIGBidWNrZXQgPT09IEBzZW50aW5l
bE1hcEJ1Y2tldGAgY29kZSBpbiBidWlsdGluLiBTaW5jZSBAc2VudGluZWxNYXBCdWNrZXQgYW5k
IGJ1Y2tldAorICAgICAgICBhcmUgTWFwQnVja2V0IGNlbGwgKFNwZWNDZWxsT3RoZXIpLCB3ZSBk
byBub3QgaGF2ZSBhbnkgZ29vZCBmaXh1cCBmb3IgQ29tcGFyZVN0cmljdEVxLgorICAgICAgICBC
dXQgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgYSBzcGVjaWFsIGZpeHVwIGVkZ2UgKGxpa2UsIE5v
blN0cmluZ0NlbGxVc2UpLCBjb252ZXJ0aW5nCisgICAgICAgIENvbXBhcmVTdHJpY3RFcShVbnR5
cGVkLCBVbnR5cGVkKSB0byBDb21wYXJlRXFQdHIgaXMgc2ltcGxlci4KKyAgICAgICAgSW4gY29u
c3RhbnQgZm9sZGluZyBwaGFzZSwgd2UgY29udmVydCBDb21wYXJlU3RyaWN0RXEoVW50eXBlZCwg
VW50eXBlZCkgdG8gQ29tcGFyZUVxUHRyKFVudHllZCkKKyAgICAgICAgaWYgb25lIHNpZGUgb2Yg
dGhlIGNoaWxkcmVuIGlzIGNvbnN0YW50IG5vbiBTdHJpbmcgY2VsbC4KKworICAgICAgICBUaGlz
IHNsaWdodGx5IG9wdGltaXplcyBtYXAvc2V0IGl0ZXJhdGlvbi4KKworICAgICAgICBzZXQtZm9y
LWVhY2ggICAgICAgICAgNC41MDY0Ky0wLjMwNzIgICAgIF4gICAgICAzLjI4NjIrLTAuMjA5OCAg
ICAgICAgXiBkZWZpbml0ZWx5IDEuMzcxM3ggZmFzdGVyCisgICAgICAgIGxhcmdlLW1hcC1pdGVy
YXRpb24gIDU2LjI1ODMrLTEuNjY0MCAgICAgICAgICAgNTMuNjc5OCstMi4wMDk3ICAgICAgICAg
IG1pZ2h0IGJlIDEuMDQ4MHggZmFzdGVyCisgICAgICAgIHNldC1mb3Itb2YgICAgICAgICAgICA4
LjgwNTgrLTAuNTk1MyAgICAgXiAgICAgIDcuNTgzMistMC4zODA1ICAgICAgICBeIGRlZmluaXRl
bHkgMS4xNjEyeCBmYXN0ZXIKKyAgICAgICAgbWFwLWZvci1lYWNoICAgICAgICAgIDQuMjYzMyst
MC4yNjk0ICAgICBeICAgICAgMy4zOTY3Ky0wLjMwMTMgICAgICAgIF4gZGVmaW5pdGVseSAxLjI1
NTF4IGZhc3RlcgorICAgICAgICBtYXAtZm9yLW9mICAgICAgICAgICAxMy4xNTU2Ky0wLjU3MDcg
ICAgICAgICAgIDEyLjQ5MTErLTAuNjAwNCAgICAgICAgICBtaWdodCBiZSAxLjA1MzJ4IGZhc3Rl
cgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4
ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkNvbnN0YW50Rm9sZGluZ1BoYXNlOjpmb2xkQ29uc3RhbnRz
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmNv
bnZlcnRUb0NvbXBhcmVFcVB0cik6CisKKzIwMTctMDgtMjYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKICAgICAgICAgVW5yZXZpZXdlZCwgc3VwcHJlc3Mgd2Fybmlu
Z3MgaW4gR1RLIHBvcnQKIAogICAgICAgICBUaGUgImJsb2NrIiB2YXJpYWJsZSBoaWRlcyB0aGUg
YXJndW1lbnQgdmFyaWFibGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggYmJhMDZkYWNkZjE5YTNm
OTZhMzdiNDk2YjBjMjc4ZGFiMWRhMmU0MS4uZTUyYWU5NDgzYmU4MDI4MGJmYzAzY2U5ZjI4YjBm
MWRiOTNlZGJmZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMTQ5OSw2ICsxNDk5LDE4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KKworICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKFVudHlw
ZWRVc2UpKSB7CisgICAgICAgICAgICBhdXRvIGlzTm9uU3RyaW5nQ2VsbENvbnN0YW50ID0gW10g
KEpTVmFsdWUgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUu
aXNDZWxsKCkgJiYgIXZhbHVlLmlzU3RyaW5nKCk7CisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBpZiAoaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQobGVmdCkgfHwgaXNOb25TdHJpbmdDZWxs
Q29uc3RhbnQocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgbV9zdGF0ZS5zZXRGb3VuZENvbnN0
YW50cyh0cnVlKTsKKyAgICAgICAgICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Jv
b2xlYW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBsZWZ0TFVCID0gbGVhc3RVcHBlckJv
dW5kT2ZTdHJpY3RseUVxdWl2YWxlbnRTcGVjdWxhdGlvbnMoZm9yTm9kZShsZWZ0Tm9kZSkubV90
eXBlKTsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcmlnaHRMVUIgPSBsZWFzdFVwcGVyQm91bmRP
ZlN0cmljdGx5RXF1aXZhbGVudFNwZWN1bGF0aW9ucyhmb3JOb2RlKHJpZ2h0Tm9kZSkubV90eXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xk
aW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRp
bmdQaGFzZS5jcHAKaW5kZXggNzM0NWNkNDA2YzBhNTkyOTNjOWEyOTcyYmQ4N2I2NDU4ODVhMGJl
Ny4uNzI2NjdhZDlmNzdiZmIwMjk2MTE2YmFhMDRmY2U5NTk4ODg5ZjY3NiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAK
QEAgLTEzOSw2ICsxMzksMjcgQEAgY2xhc3MgQ29uc3RhbnRGb2xkaW5nUGhhc2UgOiBwdWJsaWMg
UGhhc2UgewogICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NDg0NAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogeworICAgICAgICAgICAg
ICAgIGlmIChub2RlLT5pc0JpbmFyeVVzZUtpbmQoVW50eXBlZFVzZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSBjaGlsZDFDb25zdGFudCA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5j
aGlsZDEoKS5ub2RlKCkpLnZhbHVlKCk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgY2hp
bGQyQ29uc3RhbnQgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQyKCkubm9kZSgpKS52YWx1
ZSgpOworCisgICAgICAgICAgICAgICAgICAgIGF1dG8gaXNOb25TdHJpbmdDZWxsQ29uc3RhbnQg
PSBbXSAoSlNWYWx1ZSB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZh
bHVlICYmIHZhbHVlLmlzQ2VsbCgpICYmICF2YWx1ZS5pc1N0cmluZygpOworICAgICAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgIGlmIChpc05vblN0cmluZ0NlbGxDb25z
dGFudChjaGlsZDFDb25zdGFudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNv
bnZlcnRUb0NvbXBhcmVFcVB0cihtX2dyYXBoLmZyZWV6ZVN0cm9uZyhjaGlsZDFDb25zdGFudC5h
c0NlbGwoKSksIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTm9uU3RyaW5nQ2Vs
bENvbnN0YW50KGNoaWxkMkNvbnN0YW50KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+Y29udmVydFRvQ29tcGFyZUVxUHRyKG1fZ3JhcGguZnJlZXplU3Ryb25nKGNoaWxkMkNvbnN0
YW50LmFzQ2VsbCgpKSwgbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CiAgICAgICAgICAgICBjYXNlIEFy
cmF5aWZ5VG9TdHJ1Y3R1cmU6IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5kZXgg
ZTcwZGI5NjExYzRiMDQyODI5NTk2MzQzMDI1YTczMzkzZjE3Y2IxNC4uM2UyM2QwNDMyMWU4NTM2
MTE5ODJkNDIxZmRhM2NiZTc4MTJhZGZmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
LmgKQEAgLTY4Miw2ICs2ODIsMTUgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQobV9v
cCA9PSBBcml0aEFicyAmJiBjaGlsZDEoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpOwogICAgICAg
ICBtX29wID0gQXJpdGhOZWdhdGU7CiAgICAgfQorCisgICAgdm9pZCBjb252ZXJ0VG9Db21wYXJl
RXFQdHIoRnJvemVuVmFsdWUqIGNlbGwsIEVkZ2Ugbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX29wID09IENvbXBhcmVTdHJpY3RFcSk7CisgICAgICAgIHNldE9wQW5kRGVmYXVsdEZsYWdz
KENvbXBhcmVFcVB0cik7CisgICAgICAgIGNoaWxkcmVuLnNldENoaWxkMShub2RlKTsKKyAgICAg
ICAgY2hpbGRyZW4uc2V0Q2hpbGQyKEVkZ2UoKSk7CisgICAgICAgIG1fb3BJbmZvID0gY2VsbDsK
KyAgICB9CiAgICAgCiAgICAgdm9pZCBjb252ZXJ0VG9EaXJlY3RDYWxsKEZyb3plblZhbHVlKik7
CiAK
</data>
<flag name="review"
          id="339480"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>