<?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>25159</bug_id>
          
          <creation_ts>2009-04-13 13:59:31 -0700</creation_ts>
          <short_desc>Support Array.prototype.reduce</short_desc>
          <delta_ts>2009-04-15 23:49:56 -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>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>jwalden+bwo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>117340</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-13 13:59:31 -0700</bug_when>
    <thetext>Tracking bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117346</commentid>
    <comment_count>1</comment_count>
      <attachid>29440</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-13 14:33:13 -0700</bug_when>
    <thetext>Created attachment 29440
implement reduce</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117351</commentid>
    <comment_count>2</comment_count>
      <attachid>29440</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-13 14:42:56 -0700</bug_when>
    <thetext>Comment on attachment 29440
implement reduce

perf is abysmal</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117683</commentid>
    <comment_count>3</comment_count>
      <attachid>29519</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-15 15:28:30 -0700</bug_when>
    <thetext>Created attachment 29519
Performant implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117690</commentid>
    <comment_count>4</comment_count>
      <attachid>29521</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-15 16:24:01 -0700</bug_when>
    <thetext>Created attachment 29521
Reduce redux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117696</commentid>
    <comment_count>5</comment_count>
      <attachid>29521</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-04-15 16:32:17 -0700</bug_when>
    <thetext>Comment on attachment 29521
Reduce redux

cachedCall.setArgument(1, array-&gt;getIndex(i));

I think this should probably now be:

cachedCall.setArgument(1, v);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117697</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-15 16:35:47 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	JavaScriptCore/ChangeLog
	M	JavaScriptCore/runtime/ArrayPrototype.cpp
	M	LayoutTests/ChangeLog
	A	LayoutTests/fast/js/array-reduce-expected.txt
	A	LayoutTests/fast/js/array-reduce.html
	A	LayoutTests/fast/js/resources/array-reduce.js
Committed r42563
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29440</attachid>
            <date>2009-04-13 14:33:13 -0700</date>
            <delta_ts>2009-04-15 15:28:30 -0700</delta_ts>
            <desc>implement reduce</desc>
            <filename>reduce.patch</filename>
            <type>text/plain</type>
            <size>8559</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCBlNzYyY2M4Li5iMTQ4YzA0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMDktMDQtMTMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjUxNTk6IFN1cHBv
cnQgQXJyYXkucHJvdG90eXBlLnJlZHVjZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1MTU5PgorCisgICAgICAgIEltcGxlbWVudCBBcnJheS5wcm90
b3R5cGUucmVkdWNlCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2UpOgorCiAyMDA5LTA0LTA5ICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJv
c2t1cnlha292LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRl
eCA2NTQzODZiLi5iNDMzN2EzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcApAQCAtNTYsNiArNTYsNyBAQCBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVu
Y1NvbWUoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcgogc3RhdGlj
IEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNTdGF0ZSosIEpTT2JqZWN0Kiwg
SlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90
b0Z1bmNGaWx0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdM
aXN0Jik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY01hcChFeGVjU3RhdGUqLCBK
U09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlUHRy
IGFycmF5UHJvdG9GdW5jUmVkdWNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwg
Y29uc3QgQXJnTGlzdCYpOwogc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNMYXN0SW5k
ZXhPZihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
IAogfQpAQCAtMTA0LDYgKzEwNSw3IEBAIGNvbnN0IENsYXNzSW5mbyBBcnJheVByb3RvdHlwZTo6
aW5mbyA9IHsiQXJyYXkiLCAmSlNBcnJheTo6aW5mbywgMCwgRXhlY1N0YXRlOjphCiAgIGluZGV4
T2YgICAgICAgIGFycmF5UHJvdG9GdW5jSW5kZXhPZiAgICAgICAgRG9udEVudW18RnVuY3Rpb24g
MQogICBsYXN0SW5kZXhPZiAgICBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mICAgIERvbnRFbnVt
fEZ1bmN0aW9uIDEKICAgZmlsdGVyICAgICAgICAgYXJyYXlQcm90b0Z1bmNGaWx0ZXIgICAgICAg
ICBEb250RW51bXxGdW5jdGlvbiAxCisgIHJlZHVjZSAgICAgICAgIGFycmF5UHJvdG9GdW5jUmVk
dWNlICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQogICBtYXAgICAgICAgICAgICBhcnJheVBy
b3RvRnVuY01hcCAgICAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKIEBlbmQKICovCkBAIC03
NDksNiArNzUxLDUwIEBAIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSog
ZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCitKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jUmVkdWNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sK
KyAgICBKU09iamVjdCogdGhpc09iaiA9IHRoaXNWYWx1ZS50b1RoaXNPYmplY3QoZXhlYyk7Cisg
ICAgCisgICAgSlNWYWx1ZVB0ciBmdW5jdGlvbiA9IGFyZ3MuYXQoZXhlYywgMCk7CisgICAgQ2Fs
bERhdGEgY2FsbERhdGE7CisgICAgQ2FsbFR5cGUgY2FsbFR5cGUgPSBmdW5jdGlvbi5nZXRDYWxs
RGF0YShjYWxsRGF0YSk7CisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAg
ICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKworICAgIHVuc2lnbmVkIGkg
PSAwOworICAgIEpTVmFsdWVQdHIgcnY7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gdGhpc09iai0+
Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLnRvVUludDMyKGV4ZWMpOwor
ICAgIGlmICghbGVuZ3RoICYmIGFyZ3Muc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPj0gMikK
KyAgICAgICAgcnYgPSBhcmdzLmF0KGV4ZWMsIDEpOworICAgIGVsc2UgeworICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIHJ2ID0gZ2V0UHJvcGVydHko
ZXhlYywgdGhpc09iaiwgaSk7CisgICAgICAgICAgICBpZiAocnYpCisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFydikKKyAgICAgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgICAgIGkrKzsKKyAgICB9CisKKyAgICBm
b3IgKDsgaSA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraSkgeworICAgICAg
ICBKU1ZhbHVlUHRyIHByb3AgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpKTsKKyAgICAg
ICAgaWYgKCFwcm9wKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBB
cmdMaXN0IGVhY2hBcmd1bWVudHM7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHJ2KTsK
KyAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQocHJvcCk7CisgICAgICAgIGVhY2hBcmd1bWVu
dHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGkpKTsKKyAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBl
bmQodGhpc09iaik7CisgICAgICAgIAorICAgICAgICBydiA9IGNhbGwoZXhlYywgZnVuY3Rpb24s
IGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCksIGVhY2hBcmd1bWVudHMpOworICAgIH0KKyAg
ICByZXR1cm4gcnY7Cit9CisKIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlz
dCYgYXJncykKIHsKICAgICAvLyBKYXZhU2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxsYQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDFjNDUwNjAuLmJmMjFmNDggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxv
ZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNC0x
MyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgQXJyYXkucHJvdG90eXBl
LnJlZHVjZQorCisgICAgICAgICogZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LXJlZHVjZS5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2pzL3Jlc291cmNlcy9hcnJheS1yZWR1Y2UuanM6IEFkZGVkLgorICAgICAgICAo
dG9PYmplY3QpOgorCiAyMDA5LTA0LTEzICBKdXN0aW4gR2FyY2lhICA8anVzdGluLmdhcmNpYUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LXJlZHVjZS1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LXJlZHVjZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNWIyMTRkYQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvanMvYXJyYXktcmVkdWNlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACitU
aGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgcmVkdWNlKCkgbWV0aG9kIG9uIGEg
bnVtYmVyIG9mIG9iamVjdHMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IFswLDEsMiwzXS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9KSBpcyA2CitQ
QVNTIFsxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSkgaXMgNgor
UEFTUyBbMCwxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkg
aXMgMTAKK1BBU1MgWzEsMiwzXS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9
LCA0KSBpcyAxMAorUEFTUyB0b09iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIp
eyByZXR1cm4gYSArIGI7IH0pIGlzIDYKK1BBU1MgdG9PYmplY3QoWzEsMiwzXSkucmVkdWNlKGZ1
bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSkgaXMgNgorUEFTUyB0b09iamVjdChbMCwxLDIs
M10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQpIGlzIDEwCitQQVNT
IHRvT2JqZWN0KFsxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0s
IDQpIGlzIDEwCitQQVNTIHNwYXJzZUFycmF5LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4g
YSArIGI7IH0sIDApIGlzIDEwCitQQVNTIHRvT2JqZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCAwKSBpcyAxMAorUEFTUyBzcGFyc2VBcnJheS5y
ZWR1Y2UoZnVuY3Rpb24oYSxiKXsgY2FsbENvdW50Kys7IH0pOyBjYWxsQ291bnQgaXMgMAorUEFT
UyB0b09iamVjdChzcGFyc2VBcnJheSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsr
OyB9KTsgY2FsbENvdW50IGlzIDAKK1BBU1Mgc3BhcnNlQXJyYXkucmVkdWNlKGZ1bmN0aW9uKGEs
Yil7IGNhbGxDb3VudCsrOyB9LCAwKTsgY2FsbENvdW50IGlzIDEKK1BBU1MgdG9PYmplY3Qoc3Bh
cnNlQXJyYXkpLnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSwgMCk7IGNhbGxD
b3VudCBpcyAxCitQQVNTIFswLDEsMiwzLDRdLnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291
bnQrKzsgfSwgMCk7IGNhbGxDb3VudCBpcyA1CitQQVNTIFswLDEsMiwzLDRdLnJlZHVjZShmdW5j
dGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSk7IGNhbGxDb3VudCBpcyA0CitQQVNTIFtbMCwxXSwg
WzIsM10sIFs0LDVdXS5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7cmV0dXJuIGEuY29uY2F0KGIpO30s
IFtdKSBpcyBbMCwxLDIsMyw0LDVdCitQQVNTIHRvT2JqZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVd
XSkucmVkdWNlKGZ1bmN0aW9uKGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkgaXMgWzAs
MSwyLDMsNCw1XQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktcmVkdWNlLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LXJlZHVjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjUwNWQ0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9mYXN0L2pzL2FycmF5LXJlZHVjZS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBI
VE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvYXJyYXktcmVkdWNlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5
LXJlZHVjZS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LXJlZHVjZS5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjkwZjIzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJyYXktcmVkdWNlLmpzCkBA
IC0wLDAgKzEsNDAgQEAKK2Rlc2NyaXB0aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2
aW9yIG9mIHRoZSByZWR1Y2UoKSBtZXRob2Qgb24gYSBudW1iZXIgb2Ygb2JqZWN0cy4iCispOwor
CitmdW5jdGlvbiB0b09iamVjdChhcnJheSkgeworICAgIHZhciBvID0ge307CisgICAgZm9yICh2
YXIgaSBpbiBhcnJheSkKKyAgICAgICAgb1tpXSA9IGFycmF5W2ldOworICAgIG8ubGVuZ3RoID0g
YXJyYXkubGVuZ3RoOworICAgIG8ucmVkdWNlID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKKyAg
ICByZXR1cm4gbzsKK30KKworc2hvdWxkQmUoIlswLDEsMiwzXS5yZWR1Y2UoZnVuY3Rpb24oYSxi
KXsgcmV0dXJuIGEgKyBiOyB9KSIsICI2Iik7CitzaG91bGRCZSgiWzEsMiwzXS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9KSIsICI2Iik7CitzaG91bGRCZSgiWzAsMSwyLDNd
LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQpIiwgIjEwIik7CitzaG91
bGRCZSgiWzEsMiwzXS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCA0KSIs
ICIxMCIpOworc2hvdWxkQmUoInRvT2JqZWN0KFswLDEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEs
Yil7IHJldHVybiBhICsgYjsgfSkiLCAiNiIpOworc2hvdWxkQmUoInRvT2JqZWN0KFsxLDIsM10p
LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIiwgIjYiKTsKK3Nob3VsZEJl
KCJ0b09iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7
IH0sIDQpIiwgIjEwIik7CitzaG91bGRCZSgidG9PYmplY3QoWzEsMiwzXSkucmVkdWNlKGZ1bmN0
aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkiLCAiMTAiKTsKK3NwYXJzZUFycmF5ID0gW107
CitzcGFyc2VBcnJheVsxMF0gPSAxMDsKK3Nob3VsZEJlKCJzcGFyc2VBcnJheS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCAwKSIsICIxMCIpOworc2hvdWxkQmUoInRvT2Jq
ZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCAw
KSIsICIxMCIpOwordmFyIGNhbGxDb3VudCA9IDA7CitzaG91bGRCZSgic3BhcnNlQXJyYXkucmVk
dWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50IiwgIjAiKTsKK2Nh
bGxDb3VudCA9IDA7CitzaG91bGRCZSgidG9PYmplY3Qoc3BhcnNlQXJyYXkpLnJlZHVjZShmdW5j
dGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSk7IGNhbGxDb3VudCIsICIwIik7Cit2YXIgY2FsbENv
dW50ID0gMDsKK3Nob3VsZEJlKCJzcGFyc2VBcnJheS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgY2Fs
bENvdW50Kys7IH0sIDApOyBjYWxsQ291bnQiLCAiMSIpOworY2FsbENvdW50ID0gMDsKK3Nob3Vs
ZEJlKCJ0b09iamVjdChzcGFyc2VBcnJheSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3Vu
dCsrOyB9LCAwKTsgY2FsbENvdW50IiwgIjEiKTsKK2NhbGxDb3VudCA9IDA7CitzaG91bGRCZSgi
WzAsMSwyLDMsNF0ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9LCAwKTsgY2Fs
bENvdW50IiwgIjUiKTsKK2NhbGxDb3VudCA9IDA7CitzaG91bGRCZSgiWzAsMSwyLDMsNF0ucmVk
dWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50IiwgIjQiKTsKK3No
b3VsZEJlKCJbWzAsMV0sIFsyLDNdLCBbNCw1XV0ucmVkdWNlKGZ1bmN0aW9uKGEsYikge3JldHVy
biBhLmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIpOworc2hvdWxkQmUoInRvT2Jq
ZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVdXSkucmVkdWNlKGZ1bmN0aW9uKGEsYikge3JldHVybiBh
LmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIpOworc3VjY2Vzc2Z1bGx5UGFyc2Vk
ID0gdHJ1ZTsK
</data>
<flag name="review"
          id="14657"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29519</attachid>
            <date>2009-04-15 15:28:30 -0700</date>
            <delta_ts>2009-04-15 16:24:01 -0700</delta_ts>
            <desc>Performant implementation</desc>
            <filename>reducePatch.patch</filename>
            <type>text/plain</type>
            <size>11561</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3NGU1MzhlLi40MDM5NDJmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMDktMDQtMTMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjUxNTk6IFN1cHBv
cnQgQXJyYXkucHJvdG90eXBlLnJlZHVjZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1MTU5PgorCisgICAgICAgIEltcGxlbWVudCBBcnJheS5wcm90
b3R5cGUucmVkdWNlCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2UpOgorCiAyMDA5LTA0LTE1ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChC
dWlsZCBmaXgpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRl
eCAyMzU1ZGI3Li4zYjRlYmUyIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAq
CkBAIC01Nyw2ICs1Nyw3IEBAIHN0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29tZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyCiBzdGF0aWMgSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0Zp
bHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
IHN0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQ
cm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9CkBA
IC0xMDUsNiArMTA2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjppbmZvID0g
eyJBcnJheSIsICZKU0FycmF5OjppbmZvLCAwLCBFeGVjU3RhdGU6OmEKICAgaW5kZXhPZiAgICAg
ICAgYXJyYXlQcm90b0Z1bmNJbmRleE9mICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIGxh
c3RJbmRleE9mICAgIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YgICAgRG9udEVudW18RnVuY3Rp
b24gMQogICBmaWx0ZXIgICAgICAgICBhcnJheVByb3RvRnVuY0ZpbHRlciAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDEKKyAgcmVkdWNlICAgICAgICAgYXJyYXlQcm90b0Z1bmNSZWR1Y2UgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIG1hcCAgICAgICAgICAgIGFycmF5UHJvdG9GdW5j
TWFwICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQogQGVuZAogKi8KQEAgLTc2Nyw2ICs3
NjksNzAgQEAgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKKyAgICAKKyAg
ICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgdW5zaWduZWQgaSA9IDA7Cisg
ICAgSlNWYWx1ZVB0ciBydjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYg
KCFsZW5ndGggJiYgYXJncy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IDA7CisgICAgaWYgKGlzSlNB
cnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqKSkKKyAgICAgICAgYXJyYXkgPSBhc0Fy
cmF5KHRoaXNPYmopOworCisgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpCisgICAgICAgIHJ2ID0g
YXJncy5hdChleGVjLCAxKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXgoMCkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleCgwKTsKKyAgICAgICAgaSA9IDE7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBydiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGkpOworICAgICAgICAg
ICAgaWYgKHJ2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
ICghcnYpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwor
ICAgICAgICBpKys7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYg
YXJyYXkgJiYgYXJyYXktPmNhbkdldEluZGV4KGxlbmd0aCAtIDEpKSB7CisgICAgICAgIENhY2hl
ZENhbGwgY2FjaGVkQ2FsbChleGVjLCBhc0Z1bmN0aW9uKGZ1bmN0aW9uKSwgNCwgZXhlYy0+ZXhj
ZXB0aW9uU2xvdCgpKTsKKyAgICAgICAgZm9yICg7IGkgPCBsZW5ndGggJiYgIWV4ZWMtPmhhZEV4
Y2VwdGlvbigpOyArK2kpIHsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0VGhpcyhqc051bGwo
KSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDAsIHJ2KTsKKyAgICAgICAg
ICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMSwgYXJyYXktPmdldEluZGV4KGkpKTsKKyAgICAg
ICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQoMiwganNOdW1iZXIoZXhlYywgaSkpOworICAg
ICAgICAgICAgY2FjaGVkQ2FsbC5zZXRBcmd1bWVudCgzLCBhcnJheSk7CisgICAgICAgICAgICBy
diA9IGNhY2hlZENhbGwuY2FsbCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBydjsKKyAg
ICB9CisKKyAgICBmb3IgKDsgaSA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsr
aSkgeworICAgICAgICBKU1ZhbHVlUHRyIHByb3AgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2Jq
LCBpKTsKKyAgICAgICAgaWYgKCFwcm9wKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IAorICAgICAgICBBcmdMaXN0IGVhY2hBcmd1bWVudHM7CisgICAgICAgIGVhY2hBcmd1bWVudHMu
YXBwZW5kKHJ2KTsKKyAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQocHJvcCk7CisgICAgICAg
IGVhY2hBcmd1bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGkpKTsKKyAgICAgICAgZWFjaEFy
Z3VtZW50cy5hcHBlbmQodGhpc09iaik7CisgICAgICAgIAorICAgICAgICBydiA9IGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCksIGVhY2hBcmd1bWVudHMp
OworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNJ
bmRleE9mKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwg
Y29uc3QgQXJnTGlzdCYgYXJncykKIHsKICAgICAvLyBKYXZhU2NyaXB0IDEuNSBFeHRlbnNpb24g
YnkgTW96aWxsYQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDYyYjI2YTIuLjcxYWU0MzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBA
QAorMjAwOS0wNC0xMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgQXJy
YXkucHJvdG90eXBlLnJlZHVjZQorCisgICAgICAgICogZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LXJlZHVjZS5odG1sOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9hcnJheS1yZWR1Y2UuanM6IEFkZGVk
LgorICAgICAgICAodG9PYmplY3QpOgorCiAyMDA5LTA0LTE1ICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3QgZXhwZWN0ZWQgcmVz
dWx0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZmUyYmQKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5LXJlZHVjZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzNSBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlZHVjZSgp
IG1ldGhvZCBvbiBhIG51bWJlciBvZiBvYmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBz
ZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVU
RSIuCisKKworUEFTUyBbMCwxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsg
YjsgfSkgaXMgNgorUEFTUyBbMSwyLDNdLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSAr
IGI7IH0pIGlzIDYKK1BBU1MgWzAsMSwyLDNdLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4g
YSArIGI7IH0sIDQpIGlzIDEwCitQQVNTIFsxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJl
dHVybiBhICsgYjsgfSwgNCkgaXMgMTAKK1BBU1MgdG9PYmplY3QoWzAsMSwyLDNdKS5yZWR1Y2Uo
ZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9KSBpcyA2CitQQVNTIHRvT2JqZWN0KFsxLDIs
M10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIGlzIDYKK1BBU1MgdG9P
YmplY3QoWzAsMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCA0
KSBpcyAxMAorUEFTUyB0b09iamVjdChbMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0
dXJuIGEgKyBiOyB9LCA0KSBpcyAxMAorUEFTUyB0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsM10p
LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIGlzIDYKK1BBU1MgdG9Vbm9y
ZGVyZWRPYmplY3QoWzEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsg
fSkgaXMgNgorUEFTUyB0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlv
bihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQpIGlzIDEwCitQQVNTIHRvVW5vcmRlcmVkT2JqZWN0
KFsxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQpIGlzIDEw
CitQQVNTIHNwYXJzZUFycmF5LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0s
IDApIGlzIDEwCitQQVNTIHRvT2JqZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVuY3Rpb24oYSxi
KXsgcmV0dXJuIGEgKyBiOyB9LCAwKSBpcyAxMAorUEFTUyBzcGFyc2VBcnJheS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKXsgY2FsbENvdW50Kys7IH0pOyBjYWxsQ291bnQgaXMgMAorUEFTUyB0b09iamVj
dChzcGFyc2VBcnJheSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2Fs
bENvdW50IGlzIDAKK1BBU1Mgc3BhcnNlQXJyYXkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxD
b3VudCsrOyB9LCAwKTsgY2FsbENvdW50IGlzIDEKK1BBU1MgdG9PYmplY3Qoc3BhcnNlQXJyYXkp
LnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSwgMCk7IGNhbGxDb3VudCBpcyAx
CitQQVNTIFswLDEsMiwzLDRdLnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSwg
MCk7IGNhbGxDb3VudCBpcyA1CitQQVNTIFswLDEsMiwzLDRdLnJlZHVjZShmdW5jdGlvbihhLGIp
eyBjYWxsQ291bnQrKzsgfSk7IGNhbGxDb3VudCBpcyA0CitQQVNTIFtbMCwxXSwgWzIsM10sIFs0
LDVdXS5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7cmV0dXJuIGEuY29uY2F0KGIpO30sIFtdKSBpcyBb
MCwxLDIsMyw0LDVdCitQQVNTIHRvT2JqZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVdXSkucmVkdWNl
KGZ1bmN0aW9uKGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkgaXMgWzAsMSwyLDMsNCw1
XQorUEFTUyB0b09iamVjdChbMCwxLDIsMyw0LDVdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiLGkpIHty
ZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSBpcyBbMCwwLDEsMSwyLDIsMywzLDQsNCw1LDVd
CitQQVNTIHRvVW5vcmRlcmVkT2JqZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVdXSkucmVkdWNlKGZ1
bmN0aW9uKGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkgaXMgWzAsMSwyLDMsNCw1XQor
UEFTUyB0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsMyw0LDVdKS5yZWR1Y2UoZnVuY3Rpb24oYSxi
LGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSBpcyBbMCwwLDEsMSwyLDIsMywzLDQs
NCw1LDVdCitQQVNTIFswLDEsMiwzLDQsNV0ucmVkdWNlKGZ1bmN0aW9uKGEsYixpKSB7cmV0dXJu
IGEuY29uY2F0KFtpLGJdKTt9LCBbXSkgaXMgWzAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1XQorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktcmVkdWNlLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2pzL2FycmF5LXJlZHVjZS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjUwNWQ0OGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL2FycmF5
LXJlZHVjZS5odG1sCkBAIC0wLDAgKzEsMTMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9InJlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9
ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvYXJyYXktcmVkdWNlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LXJlZHVjZS5qcyBiL0xh
eW91dFRlc3RzL2Zhc3QvanMvcmVzb3VyY2VzL2FycmF5LXJlZHVjZS5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjhhYTE4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9qcy9yZXNvdXJjZXMvYXJyYXktcmVkdWNlLmpzCkBAIC0wLDAgKzEsNTkgQEAK
K2Rlc2NyaXB0aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSByZWR1
Y2UoKSBtZXRob2Qgb24gYSBudW1iZXIgb2Ygb2JqZWN0cy4iCispOworCitmdW5jdGlvbiB0b09i
amVjdChhcnJheSkgeworICAgIHZhciBvID0ge307CisgICAgZm9yICh2YXIgaSBpbiBhcnJheSkK
KyAgICAgICAgb1tpXSA9IGFycmF5W2ldOworICAgIG8ubGVuZ3RoID0gYXJyYXkubGVuZ3RoOwor
ICAgIG8ucmVkdWNlID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKKyAgICByZXR1cm4gbzsKK30K
K2Z1bmN0aW9uIHRvVW5vcmRlcmVkT2JqZWN0KGFycmF5KSB7CisgICAgdmFyIG8gPSB7fTsKKyAg
ICB2YXIgcHJvcHMgPSBbXTsKKyAgICBmb3IgKHZhciBpIGluIGFycmF5KQorICAgICAgICBwcm9w
cy5wdXNoKGkpOworICAgIGZvciAodmFyIGkgPSBwcm9wcy5sZW5ndGggLSAxOyBpID49IDA7IGkt
LSkKKyAgICAgICAgb1twcm9wc1tpXV0gPSBhcnJheVtwcm9wc1tpXV07CisgICAgby5sZW5ndGgg
PSBhcnJheS5sZW5ndGg7CisgICAgby5yZWR1Y2UgPSBBcnJheS5wcm90b3R5cGUucmVkdWNlOwor
ICAgIHJldHVybiBvOworfQorCitzaG91bGRCZSgiWzAsMSwyLDNdLnJlZHVjZShmdW5jdGlvbihh
LGIpeyByZXR1cm4gYSArIGI7IH0pIiwgIjYiKTsKK3Nob3VsZEJlKCJbMSwyLDNdLnJlZHVjZShm
dW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIiwgIjYiKTsKK3Nob3VsZEJlKCJbMCwxLDIs
M10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkiLCAiMTAiKTsKK3No
b3VsZEJlKCJbMSwyLDNdLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQp
IiwgIjEwIik7CitzaG91bGRCZSgidG9PYmplY3QoWzAsMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24o
YSxiKXsgcmV0dXJuIGEgKyBiOyB9KSIsICI2Iik7CitzaG91bGRCZSgidG9PYmplY3QoWzEsMiwz
XSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSkiLCAiNiIpOworc2hvdWxk
QmUoInRvT2JqZWN0KFswLDEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsg
YjsgfSwgNCkiLCAiMTAiKTsKK3Nob3VsZEJlKCJ0b09iamVjdChbMSwyLDNdKS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCA0KSIsICIxMCIpOworc2hvdWxkQmUoInRvVW5v
cmRlcmVkT2JqZWN0KFswLDEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsg
YjsgfSkiLCAiNiIpOworc2hvdWxkQmUoInRvVW5vcmRlcmVkT2JqZWN0KFsxLDIsM10pLnJlZHVj
ZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIiwgIjYiKTsKK3Nob3VsZEJlKCJ0b1Vu
b3JkZXJlZE9iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSAr
IGI7IH0sIDQpIiwgIjEwIik7CitzaG91bGRCZSgidG9Vbm9yZGVyZWRPYmplY3QoWzEsMiwzXSku
cmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkiLCAiMTAiKTsKK3NwYXJz
ZUFycmF5ID0gW107CitzcGFyc2VBcnJheVsxMF0gPSAxMDsKK3Nob3VsZEJlKCJzcGFyc2VBcnJh
eS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCAwKSIsICIxMCIpOworc2hv
dWxkQmUoInRvT2JqZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJu
IGEgKyBiOyB9LCAwKSIsICIxMCIpOwordmFyIGNhbGxDb3VudCA9IDA7CitzaG91bGRCZSgic3Bh
cnNlQXJyYXkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50
IiwgIjAiKTsKK2NhbGxDb3VudCA9IDA7CitzaG91bGRCZSgidG9PYmplY3Qoc3BhcnNlQXJyYXkp
LnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSk7IGNhbGxDb3VudCIsICIwIik7
Cit2YXIgY2FsbENvdW50ID0gMDsKK3Nob3VsZEJlKCJzcGFyc2VBcnJheS5yZWR1Y2UoZnVuY3Rp
b24oYSxiKXsgY2FsbENvdW50Kys7IH0sIDApOyBjYWxsQ291bnQiLCAiMSIpOworY2FsbENvdW50
ID0gMDsKK3Nob3VsZEJlKCJ0b09iamVjdChzcGFyc2VBcnJheSkucmVkdWNlKGZ1bmN0aW9uKGEs
Yil7IGNhbGxDb3VudCsrOyB9LCAwKTsgY2FsbENvdW50IiwgIjEiKTsKK2NhbGxDb3VudCA9IDA7
CitzaG91bGRCZSgiWzAsMSwyLDMsNF0ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsr
OyB9LCAwKTsgY2FsbENvdW50IiwgIjUiKTsKK2NhbGxDb3VudCA9IDA7CitzaG91bGRCZSgiWzAs
MSwyLDMsNF0ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50
IiwgIjQiKTsKK3Nob3VsZEJlKCJbWzAsMV0sIFsyLDNdLCBbNCw1XV0ucmVkdWNlKGZ1bmN0aW9u
KGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIpOworc2hv
dWxkQmUoInRvT2JqZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVdXSkucmVkdWNlKGZ1bmN0aW9uKGEs
Yikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIpOworc2hvdWxk
QmUoInRvT2JqZWN0KFswLDEsMiwzLDQsNV0pLnJlZHVjZShmdW5jdGlvbihhLGIsaSkge3JldHVy
biBhLmNvbmNhdChbaSxiXSk7fSwgW10pIiwgIlswLDAsMSwxLDIsMiwzLDMsNCw0LDUsNV0iKTsK
K3Nob3VsZEJlKCJ0b1Vub3JkZXJlZE9iamVjdChbWzAsMV0sIFsyLDNdLCBbNCw1XV0pLnJlZHVj
ZShmdW5jdGlvbihhLGIpIHtyZXR1cm4gYS5jb25jYXQoYik7fSwgW10pIiwgIlswLDEsMiwzLDQs
NV0iKTsKK3Nob3VsZEJlKCJ0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsMyw0LDVdKS5yZWR1Y2Uo
ZnVuY3Rpb24oYSxiLGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSIsICJbMCwwLDEs
MSwyLDIsMywzLDQsNCw1LDVdIik7CitzaG91bGRCZSgiWzAsMSwyLDMsNCw1XS5yZWR1Y2UoZnVu
Y3Rpb24oYSxiLGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSIsICJbMCwwLDEsMSwy
LDIsMywzLDQsNCw1LDVdIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>29521</attachid>
            <date>2009-04-15 16:24:01 -0700</date>
            <delta_ts>2009-04-15 16:32:17 -0700</delta_ts>
            <desc>Reduce redux</desc>
            <filename>reducePatch.patch</filename>
            <type>text/plain</type>
            <size>12935</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA3NGU1MzhlLi40MDM5NDJmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMDktMDQtMTMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMjUxNTk6IFN1cHBv
cnQgQXJyYXkucHJvdG90eXBlLnJlZHVjZQorICAgICAgICA8aHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI1MTU5PgorCisgICAgICAgIEltcGxlbWVudCBBcnJheS5wcm90
b3R5cGUucmVkdWNlCisKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNSZWR1Y2UpOgorCiAyMDA5LTA0LTE1ICBPbGl2ZXIg
SHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChC
dWlsZCBmaXgpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAppbmRl
eCAyMzU1ZGI3Li5hYmM2ZmQ2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5UHJvdG90eXBlLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90
eXBlLmNwcApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAg
SGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwMywgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAg
Q29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAq
CkBAIC01Nyw2ICs1Nyw3IEBAIHN0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jU29tZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyCiBzdGF0aWMgSlNWYWx1
ZVB0ciBhcnJheVByb3RvRnVuY0luZGV4T2YoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVl
UHRyLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0Zp
bHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsK
IHN0YXRpYyBKU1ZhbHVlUHRyIGFycmF5UHJvdG9GdW5jTWFwKEV4ZWNTdGF0ZSosIEpTT2JqZWN0
KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgYXJyYXlQ
cm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBB
cmdMaXN0Jik7CiBzdGF0aWMgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY0xhc3RJbmRleE9mKEV4
ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29uc3QgQXJnTGlzdCYpOwogCiB9CkBA
IC0xMDUsNiArMTA2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEFycmF5UHJvdG90eXBlOjppbmZvID0g
eyJBcnJheSIsICZKU0FycmF5OjppbmZvLCAwLCBFeGVjU3RhdGU6OmEKICAgaW5kZXhPZiAgICAg
ICAgYXJyYXlQcm90b0Z1bmNJbmRleE9mICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIGxh
c3RJbmRleE9mICAgIGFycmF5UHJvdG9GdW5jTGFzdEluZGV4T2YgICAgRG9udEVudW18RnVuY3Rp
b24gMQogICBmaWx0ZXIgICAgICAgICBhcnJheVByb3RvRnVuY0ZpbHRlciAgICAgICAgIERvbnRF
bnVtfEZ1bmN0aW9uIDEKKyAgcmVkdWNlICAgICAgICAgYXJyYXlQcm90b0Z1bmNSZWR1Y2UgICAg
ICAgICBEb250RW51bXxGdW5jdGlvbiAxCiAgIG1hcCAgICAgICAgICAgIGFycmF5UHJvdG9GdW5j
TWFwICAgICAgICAgICAgRG9udEVudW18RnVuY3Rpb24gMQogQGVuZAogKi8KQEAgLTc2Nyw2ICs3
NjksNzYgQEAgSlNWYWx1ZVB0ciBhcnJheVByb3RvRnVuY1NvbWUoRXhlY1N0YXRlKiBleGVjLCBK
U09iamVjdCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
K0pTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNSZWR1Y2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVj
dCosIEpTVmFsdWVQdHIgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIEpT
T2JqZWN0KiB0aGlzT2JqID0gdGhpc1ZhbHVlLnRvVGhpc09iamVjdChleGVjKTsKKyAgICAKKyAg
ICBKU1ZhbHVlUHRyIGZ1bmN0aW9uID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBDYWxsRGF0YSBj
YWxsRGF0YTsKKyAgICBDYWxsVHlwZSBjYWxsVHlwZSA9IGZ1bmN0aW9uLmdldENhbGxEYXRhKGNh
bGxEYXRhKTsKKyAgICBpZiAoY2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgdW5zaWduZWQgaSA9IDA7Cisg
ICAgSlNWYWx1ZVB0ciBydjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSB0aGlzT2JqLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudG9VSW50MzIoZXhlYyk7CisgICAgaWYg
KCFsZW5ndGggJiYgYXJncy5zaXplKCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKKyAgICBKU0FycmF5KiBhcnJheSA9IDA7CisgICAgaWYgKGlzSlNB
cnJheSgmZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqKSkKKyAgICAgICAgYXJyYXkgPSBhc0Fy
cmF5KHRoaXNPYmopOworCisgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDIpCisgICAgICAgIHJ2ID0g
YXJncy5hdChleGVjLCAxKTsKKyAgICBlbHNlIGlmIChhcnJheSAmJiBhcnJheS0+Y2FuR2V0SW5k
ZXgoMCkpeworICAgICAgICBydiA9IGFycmF5LT5nZXRJbmRleCgwKTsKKyAgICAgICAgaSA9IDE7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBydiA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGkpOworICAgICAgICAg
ICAgaWYgKHJ2KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlm
ICghcnYpCisgICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOwor
ICAgICAgICBpKys7CisgICAgfQorCisgICAgaWYgKGNhbGxUeXBlID09IENhbGxUeXBlSlMgJiYg
YXJyYXkpIHsKKyAgICAgICAgQ2FjaGVkQ2FsbCBjYWNoZWRDYWxsKGV4ZWMsIGFzRnVuY3Rpb24o
ZnVuY3Rpb24pLCA0LCBleGVjLT5leGNlcHRpb25TbG90KCkpOworICAgICAgICBmb3IgKDsgaSA8
IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraSkgeworICAgICAgICAgICAgY2Fj
aGVkQ2FsbC5zZXRUaGlzKGpzTnVsbCgpKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJn
dW1lbnQoMCwgcnYpOworICAgICAgICAgICAgSlNWYWx1ZVB0ciB2OworICAgICAgICAgICAgaWYg
KExJS0VMWShhcnJheS0+Y2FuR2V0SW5kZXgoaSkpKQorICAgICAgICAgICAgICAgIHYgPSBhcnJh
eS0+Z2V0SW5kZXgoaSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYnJlYWs7
IC8vIGxlbmd0aCBoYXMgYmVlbiBtYWRlIHVuc2FmZSB3aGlsZSB3ZSBlbnVtZXJhdGUgZmFsbGJh
Y2sgdG8gc2xvdyBwYXRoCisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDEsIGFy
cmF5LT5nZXRJbmRleChpKSk7CisgICAgICAgICAgICBjYWNoZWRDYWxsLnNldEFyZ3VtZW50KDIs
IGpzTnVtYmVyKGV4ZWMsIGkpKTsKKyAgICAgICAgICAgIGNhY2hlZENhbGwuc2V0QXJndW1lbnQo
MywgYXJyYXkpOworICAgICAgICAgICAgcnYgPSBjYWNoZWRDYWxsLmNhbGwoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoaSA9PSBsZW5ndGgpIC8vIG9ubHkgcmV0dXJuIGlmIHdlIHJlYWNoZWQg
dGhlIGVuZCBvZiB0aGUgYXJyYXkKKyAgICAgICAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAg
ICBmb3IgKDsgaSA8IGxlbmd0aCAmJiAhZXhlYy0+aGFkRXhjZXB0aW9uKCk7ICsraSkgeworICAg
ICAgICBKU1ZhbHVlUHRyIHByb3AgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlzT2JqLCBpKTsKKyAg
ICAgICAgaWYgKCFwcm9wKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAg
ICBBcmdMaXN0IGVhY2hBcmd1bWVudHM7CisgICAgICAgIGVhY2hBcmd1bWVudHMuYXBwZW5kKHJ2
KTsKKyAgICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQocHJvcCk7CisgICAgICAgIGVhY2hBcmd1
bWVudHMuYXBwZW5kKGpzTnVtYmVyKGV4ZWMsIGkpKTsKKyAgICAgICAgZWFjaEFyZ3VtZW50cy5h
cHBlbmQodGhpc09iaik7CisgICAgICAgIAorICAgICAgICBydiA9IGNhbGwoZXhlYywgZnVuY3Rp
b24sIGNhbGxUeXBlLCBjYWxsRGF0YSwganNOdWxsKCksIGVhY2hBcmd1bWVudHMpOworICAgIH0K
KyAgICByZXR1cm4gcnY7Cit9CisKIEpTVmFsdWVQdHIgYXJyYXlQcm90b0Z1bmNJbmRleE9mKEV4
ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlUHRyIHRoaXNWYWx1ZSwgY29uc3QgQXJn
TGlzdCYgYXJncykKIHsKICAgICAvLyBKYXZhU2NyaXB0IDEuNSBFeHRlbnNpb24gYnkgTW96aWxs
YQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDYyYjI2YTIuLjcxYWU0MzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0w
NC0xMyAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0ZXN0cyBmb3IgQXJyYXkucHJvdG90
eXBlLnJlZHVjZQorCisgICAgICAgICogZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2FycmF5LXJlZHVjZS5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL3Jlc291cmNlcy9hcnJheS1yZWR1Y2UuanM6IEFkZGVkLgorICAgICAg
ICAodG9PYmplY3QpOgorCiAyMDA5LTA0LTE1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpbmNvcnJlY3QgZXhwZWN0ZWQgcmVzdWx0LgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9qcy9hcnJheS1yZWR1Y2UtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTRmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9mYXN0L2pzL2FycmF5LXJlZHVjZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOSBA
QAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlZHVjZSgpIG1ldGhvZCBv
biBhIG51bWJlciBvZiBvYmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBbMCwxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSkgaXMg
NgorUEFTUyBbMSwyLDNdLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIGlz
IDYKK1BBU1MgWzAsMSwyLDNdLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0s
IDQpIGlzIDEwCitQQVNTIFsxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsg
YjsgfSwgNCkgaXMgMTAKK1BBU1MgdG9PYmplY3QoWzAsMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24o
YSxiKXsgcmV0dXJuIGEgKyBiOyB9KSBpcyA2CitQQVNTIHRvT2JqZWN0KFsxLDIsM10pLnJlZHVj
ZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIGlzIDYKK1BBU1MgdG9PYmplY3QoWzAs
MSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCA0KSBpcyAxMAor
UEFTUyB0b09iamVjdChbMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBi
OyB9LCA0KSBpcyAxMAorUEFTUyB0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsM10pLnJlZHVjZShm
dW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0pIGlzIDYKK1BBU1MgdG9Vbm9yZGVyZWRPYmpl
Y3QoWzEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSkgaXMgNgor
UEFTUyB0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyBy
ZXR1cm4gYSArIGI7IH0sIDQpIGlzIDEwCitQQVNTIHRvVW5vcmRlcmVkT2JqZWN0KFsxLDIsM10p
LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDQpIGlzIDEwCitQQVNTIHNw
YXJzZUFycmF5LnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDApIGlzIDEw
CitQQVNTIHRvT2JqZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJu
IGEgKyBiOyB9LCAwKSBpcyAxMAorUEFTUyBzcGFyc2VBcnJheS5yZWR1Y2UoZnVuY3Rpb24oYSxi
KXsgY2FsbENvdW50Kys7IH0pOyBjYWxsQ291bnQgaXMgMAorUEFTUyB0b09iamVjdChzcGFyc2VB
cnJheSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50IGlz
IDAKK1BBU1Mgc3BhcnNlQXJyYXkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IGNhbGxDb3VudCsrOyB9
LCAwKTsgY2FsbENvdW50IGlzIDEKK1BBU1MgdG9PYmplY3Qoc3BhcnNlQXJyYXkpLnJlZHVjZShm
dW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSwgMCk7IGNhbGxDb3VudCBpcyAxCitQQVNTIFsw
LDEsMiwzLDRdLnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsgfSwgMCk7IGNhbGxD
b3VudCBpcyA1CitQQVNTIFswLDEsMiwzLDRdLnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291
bnQrKzsgfSk7IGNhbGxDb3VudCBpcyA0CitQQVNTIFsxLCAyLCAzLCA0XS5yZWR1Y2UoZnVuY3Rp
b24oYSxiLCBpLCB0aGlzT2JqKXsgdGhpc09iai5sZW5ndGgtLTsgY2FsbENvdW50Kys7IHJldHVy
biBhICsgYjsgfSwgMCk7IGNhbGxDb3VudCBpcyAyCitQQVNTIFsxLCAyLCAzLCA0XS5yZWR1Y2Uo
ZnVuY3Rpb24oYSxiLCBpLCB0aGlzT2JqKXsgdGhpc09iai5sZW5ndGgrKzsgY2FsbENvdW50Kys7
IHJldHVybiBhICsgYjsgfSwgMCk7IGNhbGxDb3VudCBpcyA0CitQQVNTIHRvT2JqZWN0KFsxLCAy
LCAzLCA0XSkucmVkdWNlKGZ1bmN0aW9uKGEsYiwgaSwgdGhpc09iail7IHRoaXNPYmoubGVuZ3Ro
LS07IGNhbGxDb3VudCsrOyByZXR1cm4gYSArIGI7IH0sIDApOyBjYWxsQ291bnQgaXMgNAorUEFT
UyB0b09iamVjdChbMSwgMiwgMywgNF0pLnJlZHVjZShmdW5jdGlvbihhLGIsIGksIHRoaXNPYmop
eyB0aGlzT2JqLmxlbmd0aCsrOyBjYWxsQ291bnQrKzsgcmV0dXJuIGEgKyBiOyB9LCAwKTsgY2Fs
bENvdW50IGlzIDQKK1BBU1MgW1swLDFdLCBbMiwzXSwgWzQsNV1dLnJlZHVjZShmdW5jdGlvbihh
LGIpIHtyZXR1cm4gYS5jb25jYXQoYik7fSwgW10pIGlzIFswLDEsMiwzLDQsNV0KK1BBU1MgdG9P
YmplY3QoW1swLDFdLCBbMiwzXSwgWzQsNV1dKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7cmV0dXJu
IGEuY29uY2F0KGIpO30sIFtdKSBpcyBbMCwxLDIsMyw0LDVdCitQQVNTIHRvT2JqZWN0KFswLDEs
MiwzLDQsNV0pLnJlZHVjZShmdW5jdGlvbihhLGIsaSkge3JldHVybiBhLmNvbmNhdChbaSxiXSk7
fSwgW10pIGlzIFswLDAsMSwxLDIsMiwzLDMsNCw0LDUsNV0KK1BBU1MgdG9Vbm9yZGVyZWRPYmpl
Y3QoW1swLDFdLCBbMiwzXSwgWzQsNV1dKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKSB7cmV0dXJuIGEu
Y29uY2F0KGIpO30sIFtdKSBpcyBbMCwxLDIsMyw0LDVdCitQQVNTIHRvVW5vcmRlcmVkT2JqZWN0
KFswLDEsMiwzLDQsNV0pLnJlZHVjZShmdW5jdGlvbihhLGIsaSkge3JldHVybiBhLmNvbmNhdChb
aSxiXSk7fSwgW10pIGlzIFswLDAsMSwxLDIsMiwzLDMsNCw0LDUsNV0KK1BBU1MgWzAsMSwyLDMs
NCw1XS5yZWR1Y2UoZnVuY3Rpb24oYSxiLGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtd
KSBpcyBbMCwwLDEsMSwyLDIsMywzLDQsNCw1LDVdCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9q
cy9hcnJheS1yZWR1Y2UuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktcmVkdWNlLmh0
bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA1ZDQ4YgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvanMvYXJyYXktcmVkdWNlLmh0bWwKQEAgLTAsMCAr
MSwxMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icmVzb3VyY2VzL2pz
LXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9hcnJheS1yZWR1
Y2UuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXBvc3QuanMi
Pjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9qcy9yZXNvdXJjZXMvYXJyYXktcmVkdWNlLmpzIGIvTGF5b3V0VGVzdHMvZmFzdC9qcy9yZXNv
dXJjZXMvYXJyYXktcmVkdWNlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LjU5YjM0ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2pzL3Jlc291cmNl
cy9hcnJheS1yZWR1Y2UuanMKQEAgLTAsMCArMSw2OCBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0
ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHJlZHVjZSgpIG1ldGhvZCBvbiBhIG51bWJl
ciBvZiBvYmplY3RzLiIKKyk7CisKK2Z1bmN0aW9uIHRvT2JqZWN0KGFycmF5KSB7CisgICAgdmFy
IG8gPSB7fTsKKyAgICBmb3IgKHZhciBpIGluIGFycmF5KQorICAgICAgICBvW2ldID0gYXJyYXlb
aV07CisgICAgby5sZW5ndGggPSBhcnJheS5sZW5ndGg7CisgICAgby5yZWR1Y2UgPSBBcnJheS5w
cm90b3R5cGUucmVkdWNlOworICAgIHJldHVybiBvOworfQorZnVuY3Rpb24gdG9Vbm9yZGVyZWRP
YmplY3QoYXJyYXkpIHsKKyAgICB2YXIgbyA9IHt9OworICAgIHZhciBwcm9wcyA9IFtdOworICAg
IGZvciAodmFyIGkgaW4gYXJyYXkpCisgICAgICAgIHByb3BzLnB1c2goaSk7CisgICAgZm9yICh2
YXIgaSA9IHByb3BzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKQorICAgICAgICBvW3Byb3BzW2ld
XSA9IGFycmF5W3Byb3BzW2ldXTsKKyAgICBvLmxlbmd0aCA9IGFycmF5Lmxlbmd0aDsKKyAgICBv
LnJlZHVjZSA9IEFycmF5LnByb3RvdHlwZS5yZWR1Y2U7CisgICAgcmV0dXJuIG87Cit9CisKK3No
b3VsZEJlKCJbMCwxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSki
LCAiNiIpOworc2hvdWxkQmUoIlsxLDIsM10ucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBh
ICsgYjsgfSkiLCAiNiIpOworc2hvdWxkQmUoIlswLDEsMiwzXS5yZWR1Y2UoZnVuY3Rpb24oYSxi
KXsgcmV0dXJuIGEgKyBiOyB9LCA0KSIsICIxMCIpOworc2hvdWxkQmUoIlsxLDIsM10ucmVkdWNl
KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkiLCAiMTAiKTsKK3Nob3VsZEJlKCJ0
b09iamVjdChbMCwxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0p
IiwgIjYiKTsKK3Nob3VsZEJlKCJ0b09iamVjdChbMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxi
KXsgcmV0dXJuIGEgKyBiOyB9KSIsICI2Iik7CitzaG91bGRCZSgidG9PYmplY3QoWzAsMSwyLDNd
KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9LCA0KSIsICIxMCIpOworc2hv
dWxkQmUoInRvT2JqZWN0KFsxLDIsM10pLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSAr
IGI7IH0sIDQpIiwgIjEwIik7CitzaG91bGRCZSgidG9Vbm9yZGVyZWRPYmplY3QoWzAsMSwyLDNd
KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgcmV0dXJuIGEgKyBiOyB9KSIsICI2Iik7CitzaG91bGRC
ZSgidG9Vbm9yZGVyZWRPYmplY3QoWzEsMiwzXSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVy
biBhICsgYjsgfSkiLCAiNiIpOworc2hvdWxkQmUoInRvVW5vcmRlcmVkT2JqZWN0KFswLDEsMiwz
XSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7IHJldHVybiBhICsgYjsgfSwgNCkiLCAiMTAiKTsKK3No
b3VsZEJlKCJ0b1Vub3JkZXJlZE9iamVjdChbMSwyLDNdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsg
cmV0dXJuIGEgKyBiOyB9LCA0KSIsICIxMCIpOworc3BhcnNlQXJyYXkgPSBbXTsKK3NwYXJzZUFy
cmF5WzEwXSA9IDEwOworc2hvdWxkQmUoInNwYXJzZUFycmF5LnJlZHVjZShmdW5jdGlvbihhLGIp
eyByZXR1cm4gYSArIGI7IH0sIDApIiwgIjEwIik7CitzaG91bGRCZSgidG9PYmplY3Qoc3BhcnNl
QXJyYXkpLnJlZHVjZShmdW5jdGlvbihhLGIpeyByZXR1cm4gYSArIGI7IH0sIDApIiwgIjEwIik7
Cit2YXIgY2FsbENvdW50ID0gMDsKK3Nob3VsZEJlKCJzcGFyc2VBcnJheS5yZWR1Y2UoZnVuY3Rp
b24oYSxiKXsgY2FsbENvdW50Kys7IH0pOyBjYWxsQ291bnQiLCAiMCIpOworY2FsbENvdW50ID0g
MDsKK3Nob3VsZEJlKCJ0b09iamVjdChzcGFyc2VBcnJheSkucmVkdWNlKGZ1bmN0aW9uKGEsYil7
IGNhbGxDb3VudCsrOyB9KTsgY2FsbENvdW50IiwgIjAiKTsKK3ZhciBjYWxsQ291bnQgPSAwOwor
c2hvdWxkQmUoInNwYXJzZUFycmF5LnJlZHVjZShmdW5jdGlvbihhLGIpeyBjYWxsQ291bnQrKzsg
fSwgMCk7IGNhbGxDb3VudCIsICIxIik7CitjYWxsQ291bnQgPSAwOworc2hvdWxkQmUoInRvT2Jq
ZWN0KHNwYXJzZUFycmF5KS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgY2FsbENvdW50Kys7IH0sIDAp
OyBjYWxsQ291bnQiLCAiMSIpOworY2FsbENvdW50ID0gMDsKK3Nob3VsZEJlKCJbMCwxLDIsMyw0
XS5yZWR1Y2UoZnVuY3Rpb24oYSxiKXsgY2FsbENvdW50Kys7IH0sIDApOyBjYWxsQ291bnQiLCAi
NSIpOworY2FsbENvdW50ID0gMDsKK3Nob3VsZEJlKCJbMCwxLDIsMyw0XS5yZWR1Y2UoZnVuY3Rp
b24oYSxiKXsgY2FsbENvdW50Kys7IH0pOyBjYWxsQ291bnQiLCAiNCIpOworY2FsbENvdW50ID0g
MDsKK3Nob3VsZEJlKCJbMSwgMiwgMywgNF0ucmVkdWNlKGZ1bmN0aW9uKGEsYiwgaSwgdGhpc09i
ail7IHRoaXNPYmoubGVuZ3RoLS07IGNhbGxDb3VudCsrOyByZXR1cm4gYSArIGI7IH0sIDApOyBj
YWxsQ291bnQiLCAiMiIpOworY2FsbENvdW50ID0gMDsKK3Nob3VsZEJlKCJbMSwgMiwgMywgNF0u
cmVkdWNlKGZ1bmN0aW9uKGEsYiwgaSwgdGhpc09iail7IHRoaXNPYmoubGVuZ3RoKys7IGNhbGxD
b3VudCsrOyByZXR1cm4gYSArIGI7IH0sIDApOyBjYWxsQ291bnQiLCAiNCIpOworY2FsbENvdW50
ID0gMDsKK3Nob3VsZEJlKCJ0b09iamVjdChbMSwgMiwgMywgNF0pLnJlZHVjZShmdW5jdGlvbihh
LGIsIGksIHRoaXNPYmopeyB0aGlzT2JqLmxlbmd0aC0tOyBjYWxsQ291bnQrKzsgcmV0dXJuIGEg
KyBiOyB9LCAwKTsgY2FsbENvdW50IiwgIjQiKTsKK2NhbGxDb3VudCA9IDA7CitzaG91bGRCZSgi
dG9PYmplY3QoWzEsIDIsIDMsIDRdKS5yZWR1Y2UoZnVuY3Rpb24oYSxiLCBpLCB0aGlzT2JqKXsg
dGhpc09iai5sZW5ndGgrKzsgY2FsbENvdW50Kys7IHJldHVybiBhICsgYjsgfSwgMCk7IGNhbGxD
b3VudCIsICI0Iik7CisKK3Nob3VsZEJlKCJbWzAsMV0sIFsyLDNdLCBbNCw1XV0ucmVkdWNlKGZ1
bmN0aW9uKGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIp
Oworc2hvdWxkQmUoInRvT2JqZWN0KFtbMCwxXSwgWzIsM10sIFs0LDVdXSkucmVkdWNlKGZ1bmN0
aW9uKGEsYikge3JldHVybiBhLmNvbmNhdChiKTt9LCBbXSkiLCAiWzAsMSwyLDMsNCw1XSIpOwor
c2hvdWxkQmUoInRvT2JqZWN0KFswLDEsMiwzLDQsNV0pLnJlZHVjZShmdW5jdGlvbihhLGIsaSkg
e3JldHVybiBhLmNvbmNhdChbaSxiXSk7fSwgW10pIiwgIlswLDAsMSwxLDIsMiwzLDMsNCw0LDUs
NV0iKTsKK3Nob3VsZEJlKCJ0b1Vub3JkZXJlZE9iamVjdChbWzAsMV0sIFsyLDNdLCBbNCw1XV0p
LnJlZHVjZShmdW5jdGlvbihhLGIpIHtyZXR1cm4gYS5jb25jYXQoYik7fSwgW10pIiwgIlswLDEs
MiwzLDQsNV0iKTsKK3Nob3VsZEJlKCJ0b1Vub3JkZXJlZE9iamVjdChbMCwxLDIsMyw0LDVdKS5y
ZWR1Y2UoZnVuY3Rpb24oYSxiLGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSIsICJb
MCwwLDEsMSwyLDIsMywzLDQsNCw1LDVdIik7CitzaG91bGRCZSgiWzAsMSwyLDMsNCw1XS5yZWR1
Y2UoZnVuY3Rpb24oYSxiLGkpIHtyZXR1cm4gYS5jb25jYXQoW2ksYl0pO30sIFtdKSIsICJbMCww
LDEsMSwyLDIsMywzLDQsNCw1LDVdIik7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwo=
</data>
<flag name="review"
          id="14721"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>