<?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>179835</bug_id>
          
          <creation_ts>2017-11-17 12:32:22 -0800</creation_ts>
          <short_desc>The recursive tail call optimisation is wrong on closures</short_desc>
          <delta_ts>2017-11-29 09:33:35 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180044</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1373212</commentid>
    <comment_count>0</comment_count>
      <attachid>327215</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-11-17 12:32:22 -0800</bug_when>
    <thetext>Created attachment 327215
testcase: merge-sort-cps.js

We speculate on the executable of the callee, instead of the callee itself. And two different instances of a closure share the same executable even when they have different captured variables.
This bug manifests as a non-deterministic infinite loop in merge-sort-cps.js (attached).
This happens when the only value that has been seen for cont in &quot;cont(result)&quot; is the &quot;(right) =&gt; {..}&quot; closure, because it is then turned into an infinite loop.

The problem is in the use of emitFunctionChecks: that function only checks the executable of the callee. If we checked for the callee itself in the case of closures, there would be no such problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1374994</commentid>
    <comment_count>1</comment_count>
      <attachid>327645</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-11-27 10:36:17 -0800</bug_when>
    <thetext>Created attachment 327645
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375436</commentid>
    <comment_count>2</comment_count>
      <attachid>327645</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-11-28 11:30:13 -0800</bug_when>
    <thetext>Comment on attachment 327645
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1436
&gt; +    // Currently we cannot do this optimisation for closures. The problem is that &quot;emitFunctionChecks&quot; which we use later is too coarse, only checking the executable
&gt; +    // and not the value of captured variables.
&gt; +    if (callLinkStatus[0].isClosureCall())
&gt; +        return false;

How is this only a problem with this code an not all of inlining? Can you elaborate? Is the bug if we constant fold loading a closure variable?

Can you add a semantic test for this and not just a benchmark?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375802</commentid>
    <comment_count>3</comment_count>
      <attachid>327852</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-11-29 07:37:29 -0800</bug_when>
    <thetext>Created attachment 327852
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375804</commentid>
    <comment_count>4</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2017-11-29 07:47:16 -0800</bug_when>
    <thetext>I have rebased the patch so it applies cleanly, and added a small stress test as requested.

How inlining avoids this problem is interesting and quite subtle:
- The variable is taken from a GetScope which in turn comes from a GetCallee.
- From DFGSpeculativeJIT, we see that GetCallee takes its value from origin.inlineCallFrame-&gt;calleeRecovery.virtualRegister() in the case where origin.inlineCallFrame-&gt;isClosureCall.
- inlineCallFrame-&gt;isClosureCall is set in the constructor of inlineStackEntry, called by inlineCall()
- inlineCallFrame-&gt;calleeRecovery is set in DFGStackLayoutPhase, from InlineVariableData::calleeVariable
- Finally, InlineVariableData::calleeVariable is set in inlineCall() in the DFGByteCodeParser.cpp

It is not clear at all how any of this machinery may be reused for this optimization.
So my current plan is to disable the optimization for closures altogether as a stopgap (this patch), and then try in https://bugs.webkit.org/show_bug.cgi?id=180044 to add it back a lot more carefully, probably with some explicit branch on the callee.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375867</commentid>
    <comment_count>5</comment_count>
      <attachid>327852</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-29 09:31:57 -0800</bug_when>
    <thetext>Comment on attachment 327852
Patch

Clearing flags on attachment: 327852

Committed r225270: &lt;https://trac.webkit.org/changeset/225270&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375868</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-29 09:31:59 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375870</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-29 09:33:35 -0800</bug_when>
    <thetext>&lt;rdar://problem/35749564&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>327215</attachid>
            <date>2017-11-17 12:32:22 -0800</date>
            <delta_ts>2017-11-17 12:32:22 -0800</delta_ts>
            <desc>testcase: merge-sort-cps.js</desc>
            <filename>merge-sort-cps.js</filename>
            <type>application/x-javascript</type>
            <size>3548</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">InVzZSBzdHJpY3QiOwoKZnVuY3Rpb24gY3JlYXRlUk5HKHNlZWQpCnsKICAgIHJldHVybiBmdW5j
dGlvbigpIHsKICAgICAgICAvLyBSb2JlcnQgSmVua2lucycgMzIgYml0IGludGVnZXIgaGFzaCBm
dW5jdGlvbi4KICAgICAgICBzZWVkID0gKChzZWVkICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAx
MikpICAmIDB4ZmZmZmZmZmY7CiAgICAgICAgc2VlZCA9ICgoc2VlZCBeIDB4Yzc2MWMyM2MpIF4g
KHNlZWQgPj4+IDE5KSkgJiAweGZmZmZmZmZmOwogICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDE2
NTY2N2IxKSArIChzZWVkIDw8IDUpKSAgICYgMHhmZmZmZmZmZjsKICAgICAgICBzZWVkID0gKChz
ZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8PCA5KSkgICAmIDB4ZmZmZmZmZmY7CiAgICAgICAg
c2VlZCA9ICgoc2VlZCArIDB4ZmQ3MDQ2YzUpICsgKHNlZWQgPDwgMykpICAgJiAweGZmZmZmZmZm
OwogICAgICAgIHNlZWQgPSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+PiAxNikpICYg
MHhmZmZmZmZmZjsKICAgICAgICByZXR1cm4gKHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAw
MDsKICAgIH07Cn0KCmxldCByYW5kb20gPSBjcmVhdGVSTkcoMHg3YTExYmVjOCk7CgpmdW5jdGlv
biBtZXJnZVNvcnRlZChhcnJheSwgY29udCkKewogICAgaWYgKGFycmF5Lmxlbmd0aCA8PSAxKQog
ICAgICAgIHJldHVybiBjb250KGFycmF5KTsKICAgIAogICAgbGV0IG1pZEluZGV4ID0gTWF0aC5m
bG9vcihhcnJheS5sZW5ndGggLyAyKTsKICAgIHJldHVybiBtZXJnZVNvcnRlZChhcnJheS5zbGlj
ZSgwLCBtaWRJbmRleCksIChsZWZ0KSA9PiB7CiAgICByZXR1cm4gbWVyZ2VTb3J0ZWQoYXJyYXku
c2xpY2UobWlkSW5kZXgpLCAocmlnaHQpID0+IHsKICAgIAogICAgbGV0IHJlc3VsdCA9IFtdOwog
ICAgCiAgICBmdW5jdGlvbiBmaW5pc2goc291cmNlLCBpbmRleCkKICAgIHsKICAgICAgICBpZiAo
aW5kZXggPj0gc291cmNlLmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIHJlc3Vs
dC5wdXNoKHNvdXJjZVtpbmRleF0pOwogICAgICAgIHJldHVybiBmaW5pc2goc291cmNlLCBpbmRl
eCArIDEpOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBtZXJnZShsZWZ0SW5kZXgsIHJpZ2h0SW5k
ZXgpCiAgICB7CiAgICAgICAgaWYgKGxlZnRJbmRleCA+PSBsZWZ0Lmxlbmd0aCkKICAgICAgICAg
ICAgcmV0dXJuIGZpbmlzaChyaWdodCwgcmlnaHRJbmRleCk7CiAgICAgICAgaWYgKHJpZ2h0SW5k
ZXggPj0gcmlnaHQubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gZmluaXNoKGxlZnQsIGxlZnRJ
bmRleCk7CiAgICAgICAgCiAgICAgICAgbGV0IGxlZnRWYWx1ZSA9IGxlZnRbbGVmdEluZGV4XTsK
ICAgICAgICBsZXQgcmlnaHRWYWx1ZSA9IHJpZ2h0W3JpZ2h0SW5kZXhdOwogICAgICAgIGlmIChs
ZWZ0VmFsdWUgPCByaWdodFZhbHVlKSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGxlZnRWYWx1
ZSk7CiAgICAgICAgICAgIHJldHVybiBtZXJnZShsZWZ0SW5kZXggKyAxLCByaWdodEluZGV4KTsK
ICAgICAgICB9CiAgICAgICAgcmVzdWx0LnB1c2gocmlnaHRWYWx1ZSk7CiAgICAgICAgcmV0dXJu
IG1lcmdlKGxlZnRJbmRleCwgcmlnaHRJbmRleCArIDEpOwogICAgfQogICAgCiAgICBtZXJnZSgw
LCAwKTsKICAgIAogICAgcmV0dXJuIGNvbnQocmVzdWx0KTsKfSk7IH0pOyB9CgpmdW5jdGlvbiBj
aGVja1NvcnRlZChhcnJheSkKewogICAgZnVuY3Rpb24gY2hlY2soaW5kZXgpCiAgICB7CiAgICAg
ICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAtIDEpCiAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAKICAgICAgICBpZiAoYXJyYXlbaW5kZXhdID4gYXJyYXlbaW5kZXggKyAxXSkKICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJhcnJheSBub3Qgc29ydGVkIGF0IGluZGV4ICIgKyBpbmRl
eCArICI6ICIgKyBhcnJheSk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIGNoZWNrKGluZGV4ICsg
MSk7CiAgICB9CiAgICAKICAgIGNoZWNrKDApOwp9CgpmdW5jdGlvbiBjaGVja1NwZWN0cnVtKGEs
IGIpCnsKICAgIHZhciBhTWFwID0gbmV3IE1hcCgpOwogICAgdmFyIGJNYXAgPSBuZXcgTWFwKCk7
CiAgICAKICAgIGZ1bmN0aW9uIGFkZChtYXAsIHZhbHVlKQogICAgewogICAgICAgIGxldCBleGlz
dGluZyA9IG1hcC5nZXQodmFsdWUpOwogICAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKQogICAg
ICAgICAgICBleGlzdGluZyA9IDA7CiAgICAgICAgbWFwLnNldCh2YWx1ZSwgZXhpc3RpbmcgKyAx
KTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gYnVpbGQobWFwLCBhcnJheSwgaW5kZXgpCiAgICB7
CiAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkKICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgIAogICAgICAgIGFkZChtYXAsIGFycmF5W2luZGV4XSk7CiAgICAgICAgcmV0dXJuIGJ1
aWxkKG1hcCwgYXJyYXksIGluZGV4ICsgMSk7CiAgICB9CiAgICAKICAgIGJ1aWxkKGFNYXAsIGEs
IDApOwogICAgYnVpbGQoYk1hcCwgYiwgMCk7CiAgICAKICAgIGZ1bmN0aW9uIGNvbXBhcmUoa2V5
cykKICAgIHsKICAgICAgICBsZXQgZW50cnkgPSBrZXlzLm5leHQoKTsKICAgICAgICBpZiAoZW50
cnkuZG9uZSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChhTWFwLmdldChlbnRyeS52
YWx1ZSkgIT0gYk1hcC5nZXQoZW50cnkudmFsdWUpKQogICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImFycmF5cyBkb24ndCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZjogIiArIGVudHJ5LnZhbHVl
ICsgIiAoYSA9ICIgKyBhICsgIiwgYiA9ICIgKyBiICsgIikiKTsKICAgICAgICByZXR1cm4gY29t
cGFyZShrZXlzKTsKICAgIH0KICAgIAogICAgY29tcGFyZShhTWFwLmtleXMoKSk7Cn0KCmZ1bmN0
aW9uIGJ1aWxkQXJyYXkobGVuZ3RoLCB2YWx1ZSkKewogICAgbGV0IGFycmF5ID0gW107CiAgICAK
ICAgIGZ1bmN0aW9uIGJ1aWxkKCkKICAgIHsKICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID49IGxl
bmd0aCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIGFycmF5LnB1c2godmFsdWUoYXJyYXku
bGVuZ3RoKSk7CiAgICAgICAgcmV0dXJuIGJ1aWxkKCk7CiAgICB9CiAgICAKICAgIGJ1aWxkKCk7
CiAgICAKICAgIHJldHVybiBhcnJheTsKfQoKbGV0IGFycmF5cyA9IFsKICAgIGJ1aWxkQXJyYXko
MTAsIHggPT4geCksCiAgICBidWlsZEFycmF5KDEwLCB4ID0+IC14KSwKICAgIGJ1aWxkQXJyYXko
MTAwMCwgeCA9PiByYW5kb20oKSkKXTsKCmZ1bmN0aW9uIHRlc3QoaW5kZXgpCnsKICAgIGlmIChp
bmRleCA+PSBhcnJheXMubGVuZ3RoKQogICAgICAgIHJldHVybjsKICAgIAogICAgbGV0IGFycmF5
ID0gYXJyYXlzW2luZGV4XTsKICAgIG1lcmdlU29ydGVkKGFycmF5LCAoc29ydGVkKSA9PiB7CiAg
ICBjaGVja1NvcnRlZChzb3J0ZWQpOwogICAgY2hlY2tTcGVjdHJ1bShhcnJheSwgc29ydGVkKTsK
ICAgIHRlc3QoaW5kZXggKyAxKTsKfSk7IH0KCmZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kp
CiAgICB0ZXN0KDApOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327645</attachid>
            <date>2017-11-27 10:36:17 -0800</date>
            <delta_ts>2017-11-29 07:37:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179835-20171127193615.patch</filename>
            <type>text/plain</type>
            <size>9418</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MmU2MWQzZTZmNTczN2UxMzcwOGU2NzgzZGJiODA0NDM4MmZiZWIzLi5iNDAwY2NlMWNjZmU1MTBm
NDA5MTEyMzQ4YmY2OWUxZDY1YjliY2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNy0xMS0yNyAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSByZWN1cnNpdmUgdGFpbCBjYWxsIG9wdGltaXNhdGlvbiBpcyB3
cm9uZyBvbiBjbG9zdXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5ODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBvbmx5IGNoZWNrIHRoZSBleGVjdXRhYmxl
IG9mIHRoZSBjYWxsZWUsIG5vdCB3aGF0ZXZlciB2YXJpYWJsZXMgbWlnaHQgaGF2ZSBiZWVuIGNh
cHR1cmVkLgorICAgICAgICBBcyBhIHN0b3BnYXAgbWVhc3VyZSB0aGlzIHBhdGNoIGp1c3QgZG9l
cyBub3QgZG8gdGhlIG9wdGltaXNhdGlvbiBmb3IgY2xvc3VyZXMuCisKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbCk6CisKIDIwMTctMTEtMjEgIFl1c3VrZSBTdXp1a2kg
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0RGR10gQWRkIE5vcm1hbGl6ZU1h
cEtleSBERkcgSVIKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKaW5kZXggODdhODIwNjRjMjY3ZjA3NzU2OTg1MmFlMzkzNzYwNjE2NDIwYmNhYS4u
Y2U3ZjllNzZhMmVjYWEzMGNkMjk3NmIwZjhkYTQ5OGFlZTcxODA4ZSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTE0MzAsNiArMTQz
MCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbChOb2Rl
KiBjYWxsVGFyZ2V0Tm9kZSwgY29uc3QgQ2FsbExpbgogICAgIGlmIChjYWxsTGlua1N0YXR1cy5j
b3VsZFRha2VTbG93UGF0aCgpIHx8IGNhbGxMaW5rU3RhdHVzLnNpemUoKSAhPSAxKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKKyAgICAvLyBDdXJyZW50bHkgd2UgY2Fubm90IGRvIHRoaXMgb3B0
aW1pc2F0aW9uIGZvciBjbG9zdXJlcy4gVGhlIHByb2JsZW0gaXMgdGhhdCAiZW1pdEZ1bmN0aW9u
Q2hlY2tzIiB3aGljaCB3ZSB1c2UgbGF0ZXIgaXMgdG9vIGNvYXJzZSwgb25seSBjaGVja2luZyB0
aGUgZXhlY3V0YWJsZQorICAgIC8vIGFuZCBub3QgdGhlIHZhbHVlIG9mIGNhcHR1cmVkIHZhcmlh
Ymxlcy4KKyAgICBpZiAoY2FsbExpbmtTdGF0dXNbMF0uaXNDbG9zdXJlQ2FsbCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKICAgICBhdXRvIHRhcmdldEV4ZWN1dGFibGUgPSBjYWxsTGlua1N0
YXR1c1swXS5leGVjdXRhYmxlKCk7CiAgICAgSW5saW5lU3RhY2tFbnRyeSogc3RhY2tFbnRyeSA9
IG1faW5saW5lU3RhY2tUb3A7CiAgICAgZG8gewpAQCAtMTQ0OSw4ICsxNDU0LDEwIEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxsKE5vZGUqIGNhbGxUYXJnZXRO
b2RlLCBjb25zdCBDYWxsTGluCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICB9CiAKLSAgICAgICAgLy8gV2UgbXVzdCBhZGQgc29tZSBjaGVjayB0aGF0IHRoZSBwcm9maWxp
bmcgaW5mb3JtYXRpb24gd2FzIGNvcnJlY3QgYW5kIHRoZSB0YXJnZXQgb2YgdGhpcyBjYWxsIGlz
IHdoYXQgd2UgdGhvdWdodAorICAgICAgICAvLyBXZSBtdXN0IGFkZCBzb21lIGNoZWNrIHRoYXQg
dGhlIHByb2ZpbGluZyBpbmZvcm1hdGlvbiB3YXMgY29ycmVjdCBhbmQgdGhlIHRhcmdldCBvZiB0
aGlzIGNhbGwgaXMgd2hhdCB3ZSB0aG91Z2h0LgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3Mo
Y2FsbExpbmtTdGF0dXNbMF0sIGNhbGxUYXJnZXROb2RlLCB0aGlzQXJndW1lbnQpOworICAgICAg
ICAvLyBXZSBmbHVzaCBldmVyeXRoaW5nLCBhcyBpZiB3ZSB3ZXJlIGluIHRoZSBiYWNrZWRnZSBv
ZiBhIGxvb3AgKHNlZSB0cmVhdG1lbnQgb2Ygb3Bfam1wIGluIHBhcnNlQmxvY2spLgorICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsKCk7CiAKICAgICAgICAgLy8gV2UgbXVzdCBzZXQgdGhlIGFyZ3Vt
ZW50cyB0byB0aGUgcmlnaHQgdmFsdWVzCiAgICAgICAgIGludCBhcmdJbmRleCA9IDA7CkBAIC0x
NDc4LDkgKzE0ODUsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVSZWN1cnNpdmVUYWls
Q2FsbChOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgY29uc3QgQ2FsbExpbgogICAgICAgICBtX2lubGlu
ZVN0YWNrVG9wID0gb2xkU3RhY2tUb3A7CiAgICAgICAgIG1fZXhpdE9LID0gZmFsc2U7CiAKLSAg
ICAgICAgLy8gV2UgZmx1c2ggZXZlcnl0aGluZywgYXMgaWYgd2Ugd2VyZSBpbiB0aGUgYmFja2Vk
Z2Ugb2YgYSBsb29wIChzZWUgdHJlYXRtZW50IG9mIG9wX2ptcCBpbiBwYXJzZUJsb2NrKS4KLSAg
ICAgICAgZmx1c2hGb3JUZXJtaW5hbCgpOwotCiAgICAgICAgIEJhc2ljQmxvY2sqKiBlbnRyeUJs
b2NrUHRyID0gdHJ5QmluYXJ5U2VhcmNoPEJhc2ljQmxvY2sqLCB1bnNpZ25lZD4oc3RhY2tFbnRy
eS0+bV9ibG9ja0xpbmtpbmdUYXJnZXRzLCBzdGFja0VudHJ5LT5tX2Jsb2NrTGlua2luZ1Rhcmdl
dHMuc2l6ZSgpLCBPUENPREVfTEVOR1RIKG9wX2VudGVyKSwgZ2V0Qnl0ZWNvZGVCZWdpbkZvckJs
b2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoZW50cnlCbG9ja1B0cik7CiAgICAgICAgIGFk
ZEp1bXBUbygqZW50cnlCbG9ja1B0cik7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9U
b29scy9DaGFuZ2VMb2cKaW5kZXggMGE1MTIyZWNjOTg0MjRmY2NhN2ZhNjNjMTlmZDU1ZjU3Yzdk
NjJlOC4uZmJjMTkwNWFlMmYyZDc5N2ZlMDZjYzQxYTc5MTdmNjQ5YjQ4MGIwMiAxMDA2NDQKLS0t
IGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBA
CisyMDE3LTExLTI3ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5jb20+CisKKyAg
ICAgICAgVGhlIHJlY3Vyc2l2ZSB0YWlsIGNhbGwgb3B0aW1pc2F0aW9uIGlzIHdyb25nIG9uIGNs
b3N1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
Nzk4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGp1c3QgaW5jbHVkZXMgbWVyZ2Utc29ydC1jcHMuanMgdG8gdGhlIGxpc3Qgb2YgYmVuY2ht
YXJrcyByYW4gYnkgcnVuLWpzYy1iZW5jaG1hcmtzIC0tdGFpbC1iZW5jaAorCisgICAgICAgICog
U2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3M6CisKIDIwMTctMTEtMjQgIERhcmluIEFkbGVyICA8
ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvT3B0
aW9uU2V0LmNwcDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtz
IGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKaW5kZXggMDUwNGE1N2FlN2EwMzYx
ZDI1MmYzYTY0ZmRhNTFhODcxZjQ0ZTMxMi4uNzEzZGRjYjQ4NmVmOGMzYjc0NjEzOGE0NDlkMzk0
MGY1NmQzZmM3YiAxMDA3NTUKLS0tIGEvVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MK
KysrIGIvVG9vbHMvU2NyaXB0cy9ydW4tanNjLWJlbmNobWFya3MKQEAgLTMwMzgsNyArMzAzOCw3
IEBAIGJlZ2luCiAgIH0KIAogICBUQUlMQkVOQ0ggPSBCZW5jaG1hcmtTdWl0ZS5uZXcoIlRhaWxC
ZW5jaCIsIDpnZW9tZXRyaWNNZWFuLCAwKQotICBbIm4tYm9keSIsICJtZXJnZS1zb3J0IiwgImJm
LWludGVycHJldGVyIl0uZWFjaCB7CisgIFsibi1ib2R5IiwgIm1lcmdlLXNvcnQiLCAibWVyZ2Ut
c29ydC1jcHMiLCAiYmYtaW50ZXJwcmV0ZXIiXS5lYWNoIHsKICAgICB8IG5hbWUgfAogICAgIFRB
SUxCRU5DSC5hZGQgVGFpbEJlbmNoQmVuY2htYXJrLm5ldyhuYW1lKTsKICAgfQpkaWZmIC0tZ2l0
IGEvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlMjZmNzQ0ZDlkZmY3YmYyZGZkNmQzNWRiYTA2NWNjNTE3MWYxZmE5Li5hZTcyZjIz
Y2RiNDAwYWE2NTE2Mjc4N2M0NWYxNmQwYTVjMjgxMmQ3IDEwMDY0NAotLS0gYS9QZXJmb3JtYW5j
ZVRlc3RzL0NoYW5nZUxvZworKysgYi9QZXJmb3JtYW5jZVRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI0IEBACisyMDE3LTExLTI3ICBSb2JpbiBNb3Jpc3NldCAgPHJtb3Jpc3NldEBhcHBsZS5j
b20+CisKKyAgICAgICAgVGhlIHJlY3Vyc2l2ZSB0YWlsIGNhbGwgb3B0aW1pc2F0aW9uIGlzIHdy
b25nIG9uIGNsb3N1cmVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzk4MzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBUaGlzIG5ldyBiZW5jaG1hcmsgaXMgYSB2ZXJ5IGNsb3NlIHZhcmlhbnQgb2YgdGhl
IG1lcmdlLXNvcnQgYmVuY2htYXJrLCB0aGF0IHdyaXRlcyBtZXJnZVNvcnRlZCBpbiBhIGtpbmRh
IENQUyBzdHlsZSwKKyAgICAgICAgdG8gc3RyZXNzIHRoZSB1c2Ugb2YgY2xvc3VyZXMsIGFuZCBv
ZiBwb2x5bW9ycGhpYyBjYWxscy4KKworICAgICAgICAqIFRhaWxCZW5jaDkwMDAvbWVyZ2Utc29y
dC1jcHMuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlUk5HKToKKyAgICAgICAgKG1lcmdlU29y
dGVkKToKKyAgICAgICAgKGNoZWNrU29ydGVkLmNoZWNrKToKKyAgICAgICAgKGFkZCk6CisgICAg
ICAgIChidWlsZCk6CisgICAgICAgIChjb21wYXJlKToKKyAgICAgICAgKGNoZWNrU3BlY3RydW0p
OgorICAgICAgICAoYnVpbGRBcnJheSk6CisgICAgICAgICh0ZXN0KToKKwogMjAxNy0xMS0yMiAg
QW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHBlcmZvcm1h
bmNlIHRlc3QgZm9yIGlubGluZXMgYW5kIGlubGluZS1ibG9ja3Mgd2l0aG91dCB0ZXh0CmRpZmYg
LS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL1RhaWxCZW5jaDkwMDAvbWVyZ2Utc29ydC1jcHMuanMg
Yi9QZXJmb3JtYW5jZVRlc3RzL1RhaWxCZW5jaDkwMDAvbWVyZ2Utc29ydC1jcHMuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZmZmMzFhNmI4ZDAxNGJiNmVhMTkxN2ZkYjJjNTU1YjE5MTg1ZjMzNwotLS0gL2Rldi9u
dWxsCisrKyBiL1BlcmZvcm1hbmNlVGVzdHMvVGFpbEJlbmNoOTAwMC9tZXJnZS1zb3J0LWNwcy5q
cwpAQCAtMCwwICsxLDE1MCBAQAorInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBjcmVhdGVSTkco
c2VlZCkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgICAgIC8vIFJvYmVydCBKZW5r
aW5zJyAzMiBiaXQgaW50ZWdlciBoYXNoIGZ1bmN0aW9uLgorICAgICAgICBzZWVkID0gKChzZWVk
ICsgMHg3ZWQ1NWQxNikgKyAoc2VlZCA8PCAxMikpICAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHNl
ZWQgPSAoKHNlZWQgXiAweGM3NjFjMjNjKSBeIChzZWVkID4+PiAxOSkpICYgMHhmZmZmZmZmZjsK
KyAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4MTY1NjY3YjEpICsgKHNlZWQgPDwgNSkpICAgJiAw
eGZmZmZmZmZmOworICAgICAgICBzZWVkID0gKChzZWVkICsgMHhkM2EyNjQ2YykgXiAoc2VlZCA8
PCA5KSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweGZkNzA0NmM1
KSArIChzZWVkIDw8IDMpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgc2VlZCA9ICgoc2VlZCBe
IDB4YjU1YTRmMDkpIF4gKHNlZWQgPj4+IDE2KSkgJiAweGZmZmZmZmZmOworICAgICAgICByZXR1
cm4gKHNlZWQgJiAweGZmZmZmZmYpIC8gMHgxMDAwMDAwMDsKKyAgICB9OworfQorCitsZXQgcmFu
ZG9tID0gY3JlYXRlUk5HKDB4N2ExMWJlYzgpOworCitmdW5jdGlvbiBtZXJnZVNvcnRlZChhcnJh
eSwgY29udCkKK3sKKyAgICBpZiAoYXJyYXkubGVuZ3RoIDw9IDEpCisgICAgICAgIHJldHVybiBj
b250KGFycmF5KTsKKyAgICAKKyAgICBsZXQgbWlkSW5kZXggPSBNYXRoLmZsb29yKGFycmF5Lmxl
bmd0aCAvIDIpOworICAgIHJldHVybiBtZXJnZVNvcnRlZChhcnJheS5zbGljZSgwLCBtaWRJbmRl
eCksIChsZWZ0KSA9PiB7CisgICAgcmV0dXJuIG1lcmdlU29ydGVkKGFycmF5LnNsaWNlKG1pZElu
ZGV4KSwgKHJpZ2h0KSA9PiB7CisgICAgCisgICAgbGV0IHJlc3VsdCA9IFtdOworICAgIAorICAg
IGZ1bmN0aW9uIGZpbmlzaChzb3VyY2UsIGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4
ID49IHNvdXJjZS5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJlc3VsdC5w
dXNoKHNvdXJjZVtpbmRleF0pOworICAgICAgICByZXR1cm4gZmluaXNoKHNvdXJjZSwgaW5kZXgg
KyAxKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gbWVyZ2UobGVmdEluZGV4LCByaWdodElu
ZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGxlZnRJbmRleCA+PSBsZWZ0Lmxlbmd0aCkKKyAgICAg
ICAgICAgIHJldHVybiBmaW5pc2gocmlnaHQsIHJpZ2h0SW5kZXgpOworICAgICAgICBpZiAocmln
aHRJbmRleCA+PSByaWdodC5sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmluaXNoKGxlZnQs
IGxlZnRJbmRleCk7CisgICAgICAgIAorICAgICAgICBsZXQgbGVmdFZhbHVlID0gbGVmdFtsZWZ0
SW5kZXhdOworICAgICAgICBsZXQgcmlnaHRWYWx1ZSA9IHJpZ2h0W3JpZ2h0SW5kZXhdOworICAg
ICAgICBpZiAobGVmdFZhbHVlIDwgcmlnaHRWYWx1ZSkgeworICAgICAgICAgICAgcmVzdWx0LnB1
c2gobGVmdFZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBtZXJnZShsZWZ0SW5kZXggKyAxLCBy
aWdodEluZGV4KTsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQucHVzaChyaWdodFZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIG1lcmdlKGxlZnRJbmRleCwgcmlnaHRJbmRleCArIDEpOworICAgIH0K
KyAgICAKKyAgICBtZXJnZSgwLCAwKTsKKyAgICAKKyAgICByZXR1cm4gY29udChyZXN1bHQpOwor
fSk7IH0pOyB9CisKK2Z1bmN0aW9uIGNoZWNrU29ydGVkKGFycmF5KQoreworICAgIGZ1bmN0aW9u
IGNoZWNrKGluZGV4KQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCAt
IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYXJyYXlbaW5k
ZXhdID4gYXJyYXlbaW5kZXggKyAxXSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXJy
YXkgbm90IHNvcnRlZCBhdCBpbmRleCAiICsgaW5kZXggKyAiOiAiICsgYXJyYXkpOworICAgICAg
ICAKKyAgICAgICAgcmV0dXJuIGNoZWNrKGluZGV4ICsgMSk7CisgICAgfQorICAgIAorICAgIGNo
ZWNrKDApOworfQorCitmdW5jdGlvbiBjaGVja1NwZWN0cnVtKGEsIGIpCit7CisgICAgdmFyIGFN
YXAgPSBuZXcgTWFwKCk7CisgICAgdmFyIGJNYXAgPSBuZXcgTWFwKCk7CisgICAgCisgICAgZnVu
Y3Rpb24gYWRkKG1hcCwgdmFsdWUpCisgICAgeworICAgICAgICBsZXQgZXhpc3RpbmcgPSBtYXAu
Z2V0KHZhbHVlKTsKKyAgICAgICAgaWYgKGV4aXN0aW5nID09IG51bGwpCisgICAgICAgICAgICBl
eGlzdGluZyA9IDA7CisgICAgICAgIG1hcC5zZXQodmFsdWUsIGV4aXN0aW5nICsgMSk7CisgICAg
fQorICAgIAorICAgIGZ1bmN0aW9uIGJ1aWxkKG1hcCwgYXJyYXksIGluZGV4KQorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4ID49IGFycmF5Lmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIGFkZChtYXAsIGFycmF5W2luZGV4XSk7CisgICAgICAgIHJldHVybiBi
dWlsZChtYXAsIGFycmF5LCBpbmRleCArIDEpOworICAgIH0KKyAgICAKKyAgICBidWlsZChhTWFw
LCBhLCAwKTsKKyAgICBidWlsZChiTWFwLCBiLCAwKTsKKyAgICAKKyAgICBmdW5jdGlvbiBjb21w
YXJlKGtleXMpCisgICAgeworICAgICAgICBsZXQgZW50cnkgPSBrZXlzLm5leHQoKTsKKyAgICAg
ICAgaWYgKGVudHJ5LmRvbmUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChhTWFw
LmdldChlbnRyeS52YWx1ZSkgIT0gYk1hcC5nZXQoZW50cnkudmFsdWUpKQorICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJhcnJheXMgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Y6ICIg
KyBlbnRyeS52YWx1ZSArICIgKGEgPSAiICsgYSArICIsIGIgPSAiICsgYiArICIpIik7CisgICAg
ICAgIHJldHVybiBjb21wYXJlKGtleXMpOworICAgIH0KKyAgICAKKyAgICBjb21wYXJlKGFNYXAu
a2V5cygpKTsKK30KKworZnVuY3Rpb24gYnVpbGRBcnJheShsZW5ndGgsIHZhbHVlKQoreworICAg
IGxldCBhcnJheSA9IFtdOworICAgIAorICAgIGZ1bmN0aW9uIGJ1aWxkKCkKKyAgICB7CisgICAg
ICAgIGlmIChhcnJheS5sZW5ndGggPj0gbGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhcnJheS5wdXNoKHZhbHVlKGFycmF5Lmxlbmd0aCkpOworICAgICAgICByZXR1cm4gYnVp
bGQoKTsKKyAgICB9CisgICAgCisgICAgYnVpbGQoKTsKKyAgICAKKyAgICByZXR1cm4gYXJyYXk7
Cit9CisKK2xldCBhcnJheXMgPSBbCisgICAgYnVpbGRBcnJheSgxMCwgeCA9PiB4KSwKKyAgICBi
dWlsZEFycmF5KDEwLCB4ID0+IC14KSwKKyAgICBidWlsZEFycmF5KDEwMDAsIHggPT4gcmFuZG9t
KCkpCitdOworCitmdW5jdGlvbiB0ZXN0KGluZGV4KQoreworICAgIGlmIChpbmRleCA+PSBhcnJh
eXMubGVuZ3RoKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbGV0IGFycmF5ID0gYXJyYXlz
W2luZGV4XTsKKyAgICBtZXJnZVNvcnRlZChhcnJheSwgKHNvcnRlZCkgPT4geworICAgIGNoZWNr
U29ydGVkKHNvcnRlZCk7CisgICAgY2hlY2tTcGVjdHJ1bShhcnJheSwgc29ydGVkKTsKKyAgICB0
ZXN0KGluZGV4ICsgMSk7Cit9KTsgfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQor
ICAgIHRlc3QoMCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327852</attachid>
            <date>2017-11-29 07:37:29 -0800</date>
            <delta_ts>2017-11-29 09:31:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-179835-20171129163728.patch</filename>
            <type>text/plain</type>
            <size>10796</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI1MjY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
YzJmOTEwNjk0MmUxMWY1NmZlMDQ4NWNkM2Y0YTY3MjA4OWFjZDQxLi4xMWQ4MmRlNGJkNWYxYWMw
MDMzMzVkMTFlOGU5MmVhZmViMjFkM2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNiBAQAorMjAxNy0xMS0yOSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUu
Y29tPgorCisgICAgICAgIFRoZSByZWN1cnNpdmUgdGFpbCBjYWxsIG9wdGltaXNhdGlvbiBpcyB3
cm9uZyBvbiBjbG9zdXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTc5ODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBvbmx5IGNoZWNrIHRoZSBleGVjdXRhYmxl
IG9mIHRoZSBjYWxsZWUsIG5vdCB3aGF0ZXZlciB2YXJpYWJsZXMgbWlnaHQgaGF2ZSBiZWVuIGNh
cHR1cmVkLgorICAgICAgICBBcyBhIHN0b3BnYXAgbWVhc3VyZSB0aGlzIHBhdGNoIGp1c3QgZG9l
cyBub3QgZG8gdGhlIG9wdGltaXNhdGlvbiBmb3IgY2xvc3VyZXMuCisKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpoYW5kbGVSZWN1cnNpdmVUYWlsQ2FsbCk6CisKIDIwMTctMTEtMjggIEpvc2VwaCBQZWNvcmFy
byAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBDbGVhbnVw
IEluc3BlY3RvciBjbGFzc2VzIGJlIG1vcmUgY29uc2lzdGVudCBhYm91dCB1c2luZyBmYXN0IG1h
bGxvYyAvIG5vbmNvcHlhYmxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IDUxNjU0ODkwZDc1MjFmYjI5ZjA2ZGRkYjJhYmRiOWNmOWE1
OTg2ZTYuLmVmMDBlNDI5M2VlNmUzMDJhOTg4Mjc5YTQ0MmE5NDBjMDlhZDY3ZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNDI3
LDYgKzE0MjcsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlUmVjdXJzaXZlVGFpbENh
bGwoQ2FsbFZhcmlhbnQgY2FsbFZhcmlhbnQsIGludCByZWdpc3QKICAgICBpZiAoVU5MSUtFTFko
IU9wdGlvbnM6Om9wdGltaXplUmVjdXJzaXZlVGFpbENhbGxzKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICAvLyBDdXJyZW50bHkgd2UgY2Fubm90IGRvIHRoaXMgb3B0aW1pc2F0aW9u
IGZvciBjbG9zdXJlcy4gVGhlIHByb2JsZW0gaXMgdGhhdCAiZW1pdEZ1bmN0aW9uQ2hlY2tzIiB3
aGljaCB3ZSB1c2UgbGF0ZXIgaXMgdG9vIGNvYXJzZSwgb25seSBjaGVja2luZyB0aGUgZXhlY3V0
YWJsZQorICAgIC8vIGFuZCBub3QgdGhlIHZhbHVlIG9mIGNhcHR1cmVkIHZhcmlhYmxlcy4KKyAg
ICBpZiAoY2FsbFZhcmlhbnQuaXNDbG9zdXJlQ2FsbCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBhdXRvIHRhcmdldEV4ZWN1dGFibGUgPSBjYWxsVmFyaWFudC5leGVjdXRhYmxlKCk7
CiAgICAgSW5saW5lU3RhY2tFbnRyeSogc3RhY2tFbnRyeSA9IG1faW5saW5lU3RhY2tUb3A7CiAg
ICAgZG8gewpAQCAtMTQ0Niw4ICsxNDUxLDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVJlY3Vyc2l2ZVRhaWxDYWxsKENhbGxWYXJpYW50IGNhbGxWYXJpYW50LCBpbnQgcmVnaXN0CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gV2Ug
bXVzdCBhZGQgc29tZSBjaGVjayB0aGF0IHRoZSBwcm9maWxpbmcgaW5mb3JtYXRpb24gd2FzIGNv
cnJlY3QgYW5kIHRoZSB0YXJnZXQgb2YgdGhpcyBjYWxsIGlzIHdoYXQgd2UgdGhvdWdodAorICAg
ICAgICAvLyBXZSBtdXN0IGFkZCBzb21lIGNoZWNrIHRoYXQgdGhlIHByb2ZpbGluZyBpbmZvcm1h
dGlvbiB3YXMgY29ycmVjdCBhbmQgdGhlIHRhcmdldCBvZiB0aGlzIGNhbGwgaXMgd2hhdCB3ZSB0
aG91Z2h0LgogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja0lmTmVlZGVkKCk7CisgICAgICAgIC8v
IFdlIGZsdXNoIGV2ZXJ5dGhpbmcsIGFzIGlmIHdlIHdlcmUgaW4gdGhlIGJhY2tlZGdlIG9mIGEg
bG9vcCAoc2VlIHRyZWF0bWVudCBvZiBvcF9qbXAgaW4gcGFyc2VCbG9jaykuCisgICAgICAgIGZs
dXNoRm9yVGVybWluYWwoKTsKIAogICAgICAgICAvLyBXZSBtdXN0IHNldCB0aGUgYXJndW1lbnRz
IHRvIHRoZSByaWdodCB2YWx1ZXMKICAgICAgICAgaW50IGFyZ0luZGV4ID0gMDsKQEAgLTE0NzUs
OSArMTQ4Miw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVJlY3Vyc2l2ZVRhaWxDYWxs
KENhbGxWYXJpYW50IGNhbGxWYXJpYW50LCBpbnQgcmVnaXN0CiAgICAgICAgIG1faW5saW5lU3Rh
Y2tUb3AgPSBvbGRTdGFja1RvcDsKICAgICAgICAgbV9leGl0T0sgPSBmYWxzZTsKIAotICAgICAg
ICAvLyBXZSBmbHVzaCBldmVyeXRoaW5nLCBhcyBpZiB3ZSB3ZXJlIGluIHRoZSBiYWNrZWRnZSBv
ZiBhIGxvb3AgKHNlZSB0cmVhdG1lbnQgb2Ygb3Bfam1wIGluIHBhcnNlQmxvY2spLgotICAgICAg
ICBmbHVzaEZvclRlcm1pbmFsKCk7Ci0KICAgICAgICAgQmFzaWNCbG9jayoqIGVudHJ5QmxvY2tQ
dHIgPSB0cnlCaW5hcnlTZWFyY2g8QmFzaWNCbG9jayosIHVuc2lnbmVkPihzdGFja0VudHJ5LT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMsIHN0YWNrRW50cnktPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5z
aXplKCksIE9QQ09ERV9MRU5HVEgob3BfZW50ZXIpLCBnZXRCeXRlY29kZUJlZ2luRm9yQmxvY2sp
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbnRyeUJsb2NrUHRyKTsKICAgICAgICAgYWRkSnVt
cFRvKCplbnRyeUJsb2NrUHRyKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCAxNThjMWJiNjg4MTA1NjZjYmVhOTdiYTcyYWY1N2ZlMjI3ZTRkZTM0
Li5lZTA0ZDQ0YWZjOTQ5OTU1YmUwZjBjNjA0N2UzMjZkNzFiODJkMzljIDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTctMTEtMjkgIFJvYmluIE1vcmlzc2V0ICA8cm1vcmlzc2V0QGFwcGxlLmNvbT4KKworICAgICAg
ICBUaGUgcmVjdXJzaXZlIHRhaWwgY2FsbCBvcHRpbWlzYXRpb24gaXMgd3Jvbmcgb24gY2xvc3Vy
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTgz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMg
anVzdCBpbmNsdWRlcyBtZXJnZS1zb3J0LWNwcy5qcyB0byB0aGUgbGlzdCBvZiBiZW5jaG1hcmtz
IHJhbiBieSBydW4tanNjLWJlbmNobWFya3MgLS10YWlsLWJlbmNoCisKKyAgICAgICAgKiBTY3Jp
cHRzL3J1bi1qc2MtYmVuY2htYXJrczoKKwogMjAxNy0xMS0yOCAgQ2FybG9zIEdhcmNpYSBDYW1w
b3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgV2ViRHJpdmVyOiBhZGQgYW4gb3B0
aW9uIHRvIGR1bXAgdGVzdCByZXN1bHRzIHRvIGEganNvbiBmaWxlCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3J1bi1qc2MtYmVuY2htYXJrcyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1iZW5j
aG1hcmtzCmluZGV4IDA1MDRhNTdhZTdhMDM2MWQyNTJmM2E2NGZkYTUxYTg3MWY0NGUzMTIuLjcx
M2RkY2I0ODZlZjhjM2I3NDYxMzhhNDQ5ZDM5NDBmNTZkM2ZjN2IgMTAwNzU1Ci0tLSBhL1Rvb2xz
L1NjcmlwdHMvcnVuLWpzYy1iZW5jaG1hcmtzCisrKyBiL1Rvb2xzL1NjcmlwdHMvcnVuLWpzYy1i
ZW5jaG1hcmtzCkBAIC0zMDM4LDcgKzMwMzgsNyBAQCBiZWdpbgogICB9CiAKICAgVEFJTEJFTkNI
ID0gQmVuY2htYXJrU3VpdGUubmV3KCJUYWlsQmVuY2giLCA6Z2VvbWV0cmljTWVhbiwgMCkKLSAg
WyJuLWJvZHkiLCAibWVyZ2Utc29ydCIsICJiZi1pbnRlcnByZXRlciJdLmVhY2ggeworICBbIm4t
Ym9keSIsICJtZXJnZS1zb3J0IiwgIm1lcmdlLXNvcnQtY3BzIiwgImJmLWludGVycHJldGVyIl0u
ZWFjaCB7CiAgICAgfCBuYW1lIHwKICAgICBUQUlMQkVOQ0guYWRkIFRhaWxCZW5jaEJlbmNobWFy
ay5uZXcobmFtZSk7CiAgIH0KZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYTI5ZGJhZTQ5YWRiNGYxMTIyMzdiNmEyYjNkNDExNmVhOTBlZDYz
ZS4uOWQ5MjkzMjNmMDEyNTA4ZTRhNDNkYjI2NjNiZmRhOTJhYjEzMTU1MSAxMDA2NDQKLS0tIGEv
SlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBA
QAorMjAxNy0xMS0yOSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisg
ICAgICAgIFRoZSByZWN1cnNpdmUgdGFpbCBjYWxsIG9wdGltaXNhdGlvbiBpcyB3cm9uZyBvbiBj
bG9zdXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTc5ODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBzdHJlc3MvY2xvc3VyZS1yZWN1cnNpdmUtdGFpbC1jYWxsLmpzOiBBZGRlZC4KKyAgICAgICAg
KG1ha2VDbG9zdXJlKToKKwogMjAxNy0xMS0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgSmF2YVNjcmlwdCByZXN0IGZ1bmN0aW9uIHBhcmFtZXRlciB3aXRo
IG5lZ2F0aXZlIGluZGV4IGxlYWRzIHRvIGJhZCBERkcgYWJzdHJhY3QgaW50ZXJwcmV0YXRpb24K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2Nsb3N1cmUtcmVjdXJzaXZlLXRhaWwtY2FsbC5q
cyBiL0pTVGVzdHMvc3RyZXNzL2Nsb3N1cmUtcmVjdXJzaXZlLXRhaWwtY2FsbC5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lNzBjOWFlNjc5Nzg3M2Y2MzliNmU4NDdlMDYwMDYzOGIyMjJmMWYwCi0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2xvc3VyZS1yZWN1cnNpdmUtdGFpbC1jYWxsLmpzCkBA
IC0wLDAgKzEsMjEgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gbWFrZUNsb3N1cmUoeCkK
K3sKKyAgICByZXR1cm4gKGYpID0+IHsKKyAgICAgICAgaWYgKHggPT0gNDIpIHsKKyAgICAgICAg
ICAgIHggPSAwOworICAgICAgICAgICAgcmV0dXJuIGYoZik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIHg7CisgICAgfQorfQorCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDA7ICsraSkgeworICAgIHZhciBnID0gbWFrZUNsb3N1cmUoNDIpOworICAgIHZhciBo
ID0gbWFrZUNsb3N1cmUoNDEpOworICAgIHZhciB2YWx1ZSA9IGcoaCk7CisgICAgaWYgKHZhbHVl
ICE9IDQxKQorICAgICAgICB0aHJvdyAiV3JvbmcgcmVzdWx0LCBnb3Q6ICIgKyB2YWx1ZTsKK30K
ZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggZTI2Zjc0NGQ5ZGZmN2JmMmRmZDZkMzVkYmEwNjVjYzUxNzFmMWZh
OS4uN2VjMzAyN2I5YjRlZjFmZmZmZWVkOWVhNmJhY2E0N2ZiMTFkYWNmNiAxMDA2NDQKLS0tIGEv
UGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwyNCBAQAorMjAxNy0xMS0yOSAgUm9iaW4gTW9yaXNzZXQgIDxybW9yaXNz
ZXRAYXBwbGUuY29tPgorCisgICAgICAgIFRoZSByZWN1cnNpdmUgdGFpbCBjYWxsIG9wdGltaXNh
dGlvbiBpcyB3cm9uZyBvbiBjbG9zdXJlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc5ODM1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBuZXcgYmVuY2htYXJrIGlzIGEgdmVyeSBjbG9zZSB2YXJp
YW50IG9mIHRoZSBtZXJnZS1zb3J0IGJlbmNobWFyaywgdGhhdCB3cml0ZXMgbWVyZ2VTb3J0ZWQg
aW4gYSBraW5kYSBDUFMgc3R5bGUsCisgICAgICAgIHRvIHN0cmVzcyB0aGUgdXNlIG9mIGNsb3N1
cmVzLCBhbmQgb2YgcG9seW1vcnBoaWMgY2FsbHMuCisKKyAgICAgICAgKiBUYWlsQmVuY2g5MDAw
L21lcmdlLXNvcnQtY3BzLmpzOiBBZGRlZC4KKyAgICAgICAgKGNyZWF0ZVJORyk6CisgICAgICAg
IChtZXJnZVNvcnRlZCk6CisgICAgICAgIChjaGVja1NvcnRlZC5jaGVjayk6CisgICAgICAgIChh
ZGQpOgorICAgICAgICAoYnVpbGQpOgorICAgICAgICAoY29tcGFyZSk6CisgICAgICAgIChjaGVj
a1NwZWN0cnVtKToKKyAgICAgICAgKGJ1aWxkQXJyYXkpOgorICAgICAgICAodGVzdCk6CisKIDIw
MTctMTEtMjIgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAgICAgIEFk
ZCBwZXJmb3JtYW5jZSB0ZXN0IGZvciBpbmxpbmVzIGFuZCBpbmxpbmUtYmxvY2tzIHdpdGhvdXQg
dGV4dApkaWZmIC0tZ2l0IGEvUGVyZm9ybWFuY2VUZXN0cy9UYWlsQmVuY2g5MDAwL21lcmdlLXNv
cnQtY3BzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9UYWlsQmVuY2g5MDAwL21lcmdlLXNvcnQtY3Bz
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZmZjMxYTZiOGQwMTRiYjZlYTE5MTdmZGIyYzU1NWIxOTE4NWYzMzcK
LS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL1RhaWxCZW5jaDkwMDAvbWVyZ2Ut
c29ydC1jcHMuanMKQEAgLTAsMCArMSwxNTAgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24g
Y3JlYXRlUk5HKHNlZWQpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgICAgICAvLyBS
b2JlcnQgSmVua2lucycgMzIgYml0IGludGVnZXIgaGFzaCBmdW5jdGlvbi4KKyAgICAgICAgc2Vl
ZCA9ICgoc2VlZCArIDB4N2VkNTVkMTYpICsgKHNlZWQgPDwgMTIpKSAgJiAweGZmZmZmZmZmOwor
ICAgICAgICBzZWVkID0gKChzZWVkIF4gMHhjNzYxYzIzYykgXiAoc2VlZCA+Pj4gMTkpKSAmIDB4
ZmZmZmZmZmY7CisgICAgICAgIHNlZWQgPSAoKHNlZWQgKyAweDE2NTY2N2IxKSArIChzZWVkIDw8
IDUpKSAgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgc2VlZCA9ICgoc2VlZCArIDB4ZDNhMjY0NmMp
IF4gKHNlZWQgPDwgOSkpICAgJiAweGZmZmZmZmZmOworICAgICAgICBzZWVkID0gKChzZWVkICsg
MHhmZDcwNDZjNSkgKyAoc2VlZCA8PCAzKSkgICAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHNlZWQg
PSAoKHNlZWQgXiAweGI1NWE0ZjA5KSBeIChzZWVkID4+PiAxNikpICYgMHhmZmZmZmZmZjsKKyAg
ICAgICAgcmV0dXJuIChzZWVkICYgMHhmZmZmZmZmKSAvIDB4MTAwMDAwMDA7CisgICAgfTsKK30K
KworbGV0IHJhbmRvbSA9IGNyZWF0ZVJORygweDdhMTFiZWM4KTsKKworZnVuY3Rpb24gbWVyZ2VT
b3J0ZWQoYXJyYXksIGNvbnQpCit7CisgICAgaWYgKGFycmF5Lmxlbmd0aCA8PSAxKQorICAgICAg
ICByZXR1cm4gY29udChhcnJheSk7CisgICAgCisgICAgbGV0IG1pZEluZGV4ID0gTWF0aC5mbG9v
cihhcnJheS5sZW5ndGggLyAyKTsKKyAgICByZXR1cm4gbWVyZ2VTb3J0ZWQoYXJyYXkuc2xpY2Uo
MCwgbWlkSW5kZXgpLCAobGVmdCkgPT4geworICAgIHJldHVybiBtZXJnZVNvcnRlZChhcnJheS5z
bGljZShtaWRJbmRleCksIChyaWdodCkgPT4geworICAgIAorICAgIGxldCByZXN1bHQgPSBbXTsK
KyAgICAKKyAgICBmdW5jdGlvbiBmaW5pc2goc291cmNlLCBpbmRleCkKKyAgICB7CisgICAgICAg
IGlmIChpbmRleCA+PSBzb3VyY2UubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICByZXN1bHQucHVzaChzb3VyY2VbaW5kZXhdKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaChzb3Vy
Y2UsIGluZGV4ICsgMSk7CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIG1lcmdlKGxlZnRJbmRl
eCwgcmlnaHRJbmRleCkKKyAgICB7CisgICAgICAgIGlmIChsZWZ0SW5kZXggPj0gbGVmdC5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gZmluaXNoKHJpZ2h0LCByaWdodEluZGV4KTsKKyAgICAg
ICAgaWYgKHJpZ2h0SW5kZXggPj0gcmlnaHQubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZp
bmlzaChsZWZ0LCBsZWZ0SW5kZXgpOworICAgICAgICAKKyAgICAgICAgbGV0IGxlZnRWYWx1ZSA9
IGxlZnRbbGVmdEluZGV4XTsKKyAgICAgICAgbGV0IHJpZ2h0VmFsdWUgPSByaWdodFtyaWdodElu
ZGV4XTsKKyAgICAgICAgaWYgKGxlZnRWYWx1ZSA8IHJpZ2h0VmFsdWUpIHsKKyAgICAgICAgICAg
IHJlc3VsdC5wdXNoKGxlZnRWYWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gbWVyZ2UobGVmdElu
ZGV4ICsgMSwgcmlnaHRJbmRleCk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LnB1c2gocmln
aHRWYWx1ZSk7CisgICAgICAgIHJldHVybiBtZXJnZShsZWZ0SW5kZXgsIHJpZ2h0SW5kZXggKyAx
KTsKKyAgICB9CisgICAgCisgICAgbWVyZ2UoMCwgMCk7CisgICAgCisgICAgcmV0dXJuIGNvbnQo
cmVzdWx0KTsKK30pOyB9KTsgfQorCitmdW5jdGlvbiBjaGVja1NvcnRlZChhcnJheSkKK3sKKyAg
ICBmdW5jdGlvbiBjaGVjayhpbmRleCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBhcnJh
eS5sZW5ndGggLSAxKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYg
KGFycmF5W2luZGV4XSA+IGFycmF5W2luZGV4ICsgMV0pCisgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoImFycmF5IG5vdCBzb3J0ZWQgYXQgaW5kZXggIiArIGluZGV4ICsgIjogIiArIGFycmF5
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBjaGVjayhpbmRleCArIDEpOworICAgIH0KKyAg
ICAKKyAgICBjaGVjaygwKTsKK30KKworZnVuY3Rpb24gY2hlY2tTcGVjdHJ1bShhLCBiKQorewor
ICAgIHZhciBhTWFwID0gbmV3IE1hcCgpOworICAgIHZhciBiTWFwID0gbmV3IE1hcCgpOworICAg
IAorICAgIGZ1bmN0aW9uIGFkZChtYXAsIHZhbHVlKQorICAgIHsKKyAgICAgICAgbGV0IGV4aXN0
aW5nID0gbWFwLmdldCh2YWx1ZSk7CisgICAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKQorICAg
ICAgICAgICAgZXhpc3RpbmcgPSAwOworICAgICAgICBtYXAuc2V0KHZhbHVlLCBleGlzdGluZyAr
IDEpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBidWlsZChtYXAsIGFycmF5LCBpbmRleCkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCA+PSBhcnJheS5sZW5ndGgpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgICAgICBhZGQobWFwLCBhcnJheVtpbmRleF0pOworICAgICAg
ICByZXR1cm4gYnVpbGQobWFwLCBhcnJheSwgaW5kZXggKyAxKTsKKyAgICB9CisgICAgCisgICAg
YnVpbGQoYU1hcCwgYSwgMCk7CisgICAgYnVpbGQoYk1hcCwgYiwgMCk7CisgICAgCisgICAgZnVu
Y3Rpb24gY29tcGFyZShrZXlzKQorICAgIHsKKyAgICAgICAgbGV0IGVudHJ5ID0ga2V5cy5uZXh0
KCk7CisgICAgICAgIGlmIChlbnRyeS5kb25lKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBpZiAoYU1hcC5nZXQoZW50cnkudmFsdWUpICE9IGJNYXAuZ2V0KGVudHJ5LnZhbHVlKSkKKyAg
ICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXJyYXlzIGRvbid0IGhhdmUgdGhlIHNhbWUgbnVt
YmVyIG9mOiAiICsgZW50cnkudmFsdWUgKyAiIChhID0gIiArIGEgKyAiLCBiID0gIiArIGIgKyAi
KSIpOworICAgICAgICByZXR1cm4gY29tcGFyZShrZXlzKTsKKyAgICB9CisgICAgCisgICAgY29t
cGFyZShhTWFwLmtleXMoKSk7Cit9CisKK2Z1bmN0aW9uIGJ1aWxkQXJyYXkobGVuZ3RoLCB2YWx1
ZSkKK3sKKyAgICBsZXQgYXJyYXkgPSBbXTsKKyAgICAKKyAgICBmdW5jdGlvbiBidWlsZCgpCisg
ICAgeworICAgICAgICBpZiAoYXJyYXkubGVuZ3RoID49IGxlbmd0aCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgYXJyYXkucHVzaCh2YWx1ZShhcnJheS5sZW5ndGgpKTsKKyAgICAgICAg
cmV0dXJuIGJ1aWxkKCk7CisgICAgfQorICAgIAorICAgIGJ1aWxkKCk7CisgICAgCisgICAgcmV0
dXJuIGFycmF5OworfQorCitsZXQgYXJyYXlzID0gWworICAgIGJ1aWxkQXJyYXkoMTAsIHggPT4g
eCksCisgICAgYnVpbGRBcnJheSgxMCwgeCA9PiAteCksCisgICAgYnVpbGRBcnJheSgxMDAwLCB4
ID0+IHJhbmRvbSgpKQorXTsKKworZnVuY3Rpb24gdGVzdChpbmRleCkKK3sKKyAgICBpZiAoaW5k
ZXggPj0gYXJyYXlzLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGxldCBhcnJh
eSA9IGFycmF5c1tpbmRleF07CisgICAgbWVyZ2VTb3J0ZWQoYXJyYXksIChzb3J0ZWQpID0+IHsK
KyAgICBjaGVja1NvcnRlZChzb3J0ZWQpOworICAgIGNoZWNrU3BlY3RydW0oYXJyYXksIHNvcnRl
ZCk7CisgICAgdGVzdChpbmRleCArIDEpOworfSk7IH0KKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDA7ICsraSkKKyAgICB0ZXN0KDApOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>