<?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>227101</bug_id>
          
          <creation_ts>2021-06-16 16:52:03 -0700</creation_ts>
          <short_desc>[JSC] Optimize JSON.parse with small data by changing Identifier pool mechanism</short_desc>
          <delta_ts>2021-06-19 00:38:39 -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>New Bugs</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>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1770469</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-16 16:52:03 -0700</bug_when>
    <thetext>[JSC] Optimize JSON.parse with small data by changing Identifier pool mechanism</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770471</commentid>
    <comment_count>1</comment_count>
      <attachid>431622</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-16 16:55:37 -0700</bug_when>
    <thetext>Created attachment 431622
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770502</commentid>
    <comment_count>2</comment_count>
      <attachid>431622</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-06-16 18:33:44 -0700</bug_when>
    <thetext>Comment on attachment 431622
Patch

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

r=me with some suggestions.

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        if JSON.parse is invoked for small data. This patch changes this pool mechanism so that we do not allocate
&gt; +        Identifiers until we really need.

I suggest adding a bit more detail:
&quot;This patch changes this pool mechanism so that we do not allocate Identifiers until we really need.&quot; =&gt; &quot;This patch changes this pool mechanism so that we do not waste effort allocating null Identifiers to pre-populate the recent identifiers pool. Instead, we now use a m_recentIdentifiersIndex uint8_t array to indicate whether there&apos;s a cached recent identifier for each given first character.&quot;

&gt; Source/JavaScriptCore/runtime/LiteralParser.cpp:174
&gt; +    if (indexPlusOne) {

I see.  The reason for using indexPlusOne instead if index is so that 0 can mean no entry.  I think this is worth a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770507</commentid>
    <comment_count>3</comment_count>
      <attachid>431622</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-16 19:04:19 -0700</bug_when>
    <thetext>Comment on attachment 431622
Patch

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

Thanks

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        Identifiers until we really need.
&gt; 
&gt; I suggest adding a bit more detail:
&gt; &quot;This patch changes this pool mechanism so that we do not allocate Identifiers until we really need.&quot; =&gt; &quot;This patch changes this pool mechanism so that we do not waste effort allocating null Identifiers to pre-populate the recent identifiers pool. Instead, we now use a m_recentIdentifiersIndex uint8_t array to indicate whether there&apos;s a cached recent identifier for each given first character.&quot;

Changed.

&gt;&gt; Source/JavaScriptCore/runtime/LiteralParser.cpp:174
&gt;&gt; +    if (indexPlusOne) {
&gt; 
&gt; I see.  The reason for using indexPlusOne instead if index is so that 0 can mean no entry.  I think this is worth a comment.

Added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770513</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-16 20:10:06 -0700</bug_when>
    <thetext>Committed r278971 (238897@main): &lt;https://commits.webkit.org/238897@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770514</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-16 20:11:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/79429814&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771080</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-06-19 00:38:39 -0700</bug_when>
    <thetext>This improved JetStream2/FlightPlanner by 25% in some devices too!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431622</attachid>
            <date>2021-06-16 16:55:37 -0700</date>
            <delta_ts>2021-06-16 18:33:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-227101-20210616165537.patch</filename>
            <type>text/plain</type>
            <size>13809</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4OTU0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
ZDYyNGM1Y2UwN2M3MDFhYmU5NTQxYjcyODk3MjgyZWZhMWI1ZTI2Li45ZWU1ZjdiZThhMDI0MGJi
ZDFjNjE5MDNhNWYyZWQ3MDkxYWNhNDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNyBAQAorMjAyMS0wNi0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIE9wdGltaXplIEpTT04ucGFyc2Ugd2l0aCBzbWFsbCBkYXRhIGJ5
IGNoYW5naW5nIElkZW50aWZpZXIgcG9vbCBtZWNoYW5pc20KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNzEwMQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvdW5kIHRoYXQgc3RkOjphcnJheTxJZGVudGlm
aWVyLCAxMjg+IHBvb2wgaW4gTGl0ZXJhbFBhcnNlciBpcyB0b28gY29zdGx5IGZvciBjb25zdHJ1
Y3Rpb24gYW5kIGRlc3RydWN0aW9uCisgICAgICAgIGlmIEpTT04ucGFyc2UgaXMgaW52b2tlZCBm
b3Igc21hbGwgZGF0YS4gVGhpcyBwYXRjaCBjaGFuZ2VzIHRoaXMgcG9vbCBtZWNoYW5pc20gc28g
dGhhdCB3ZSBkbyBub3QgYWxsb2NhdGUKKyAgICAgICAgSWRlbnRpZmllcnMgdW50aWwgd2UgcmVh
bGx5IG5lZWQuCisKKyAgICAgICAgV2UgYWxzbyB1c2UgS2V5d29yZExvb2t1cC5oJ3MgQ09NUEFS
RV9YQ0hBUlMgdG8gcGVyZm9ybSAidHJ1ZSIgLyAiZmFsc2UiIC8gIm51bGwiIGxleGluZyBpbiBK
U09OIHBhcnNlci4KKyAgICAgICAgUm91Z2hseSAyMCUgaW1wcm92ZW1lbnQgaW4gbWljcm9iZW5j
aG1hcmsuIEFuZCByb3VnaGx5IDItMyUgaW1wcm92ZW1lbnQgaW4gU3BlZWRvbWV0ZXIyL0ZsaWdo
dC1Ub2RvTVZDLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFRvVCAgICAgICAgICAgICAgICAgICAgIFBhdGNoZWQKKworICAgICAgICAgICAgZmxpZ2h0LXRv
ZG9tdmMtanNvbiAgICAgICA2Ny44NzU1Ky0xLjEyMDIgICAgIF4gICAgIDU2LjcxMTQrLTAuNTA0
OCAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTk2OXggZmFzdGVyCisKKyAgICAgICAgKiBydW50aW1l
L0lkZW50aWZpZXIuY3BwOgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAg
ICAoSlNDOjpJZGVudGlmaWVyOjphZGQ4KToKKyAgICAgICAgKiBydW50aW1lL0lkZW50aWZpZXIu
aDoKKyAgICAgICAgKEpTQzo6SWRlbnRpZmllcjo6SWRlbnRpZmllcik6CisgICAgICAgIChKU0M6
OklkZW50aWZpZXI6OmFkZCk6CisgICAgICAgICogcnVudGltZS9JZGVudGlmaWVySW5saW5lcy5o
OgorICAgICAgICAoSlNDOjpJZGVudGlmaWVyOjphZGQpOgorICAgICAgICAoSlNDOjpJZGVudGlm
aWVyOjpmcm9tU3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpjb21wYXJlM0NoYXJzKToKKyAgICAgICAgKEpTQzo6Y29tcGFyZTRDaGFy
cyk6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjptYWtlSWRlbnRpZmll
cik6CisgICAgICAgIChKU0M6OkxpdGVyYWxQYXJzZXI8Q2hhclR5cGU+OjpMZXhlcjo6bGV4KToK
KyAgICAgICAgKiBydW50aW1lL0xpdGVyYWxQYXJzZXIuaDoKKwogMjAyMS0wNi0xNiAgWWlqaWEg
SHVhbmcgIDx5aWppYV9odWFuZ0BhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIEFpciBvcGNvZGUg
c3ViMzIvNjQoUmVnLCBJbW0sIFJlZykgZm9ybSBmb3IgQVJNNjQgYW5kIHNlbGVjdCB0aGlzIGlu
c3RydWN0aW9uIGluIEFpcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlm
aWVyLmNwcAppbmRleCBhMjA0MTUxYzEwYzFkNGQ3MDJhY2E1ZjU2ODE2NGQwYTdkODBlYjRlLi4z
Y2Y4YWVjMTVkNjI4MDdmYjc1MWIwMmVjZDcyODhhOTE0YmUyZjlhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9JZGVudGlmaWVyLmNwcApAQCAtMjcsNyArMjcsNyBAQAogCiBu
YW1lc3BhY2UgSlNDIHsKIAotUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSYgdm0s
IGNvbnN0IGNoYXIqIGMpCitSZWY8QXRvbVN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSYg
dm0sIGNvbnN0IGNoYXIqIGMpCiB7CiAgICAgQVNTRVJUKGMpOwogICAgIEFTU0VSVChjWzBdKTsK
QEAgLTM3LDcgKzM3LDcgQEAgUmVmPFN0cmluZ0ltcGw+IElkZW50aWZpZXI6OmFkZChWTSYgdm0s
IGNvbnN0IGNoYXIqIGMpCiAgICAgcmV0dXJuICpBdG9tU3RyaW5nSW1wbDo6YWRkKGMpOwogfQog
Ci1SZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkOChWTSYgdm0sIGNvbnN0IFVDaGFyKiBz
LCBpbnQgbGVuZ3RoKQorUmVmPEF0b21TdHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQ4KFZNJiB2
bSwgY29uc3QgVUNoYXIqIHMsIGludCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAxKSB7
CiAgICAgICAgIFVDaGFyIGMgPSBzWzBdOwpAQCAtNDYsNyArNDYsNyBAQCBSZWY8U3RyaW5nSW1w
bD4gSWRlbnRpZmllcjo6YWRkOChWTSYgdm0sIGNvbnN0IFVDaGFyKiBzLCBpbnQgbGVuZ3RoKQog
ICAgICAgICAgICAgcmV0dXJuIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdS
ZXAoYyk7CiAgICAgfQogICAgIGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gKlN0cmluZ0lt
cGw6OmVtcHR5KCk7CisgICAgICAgIHJldHVybiAqc3RhdGljX2Nhc3Q8QXRvbVN0cmluZ0ltcGwq
PihTdHJpbmdJbXBsOjplbXB0eSgpKTsKIAogICAgIHJldHVybiAqQXRvbVN0cmluZ0ltcGw6OmFk
ZChzLCBsZW5ndGgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSWRlbnRpZmllci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmll
ci5oCmluZGV4IDBkNDI2NWViMDI1OTBkYWM2ZTA4OWY1MDViODc4YmY4YjRlNmFlMDkuLjFjOWZl
NTU2NTAxZjBhMmE3Y2YwZDA4ZTExODJiNjU5N2MwMWMwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JZGVudGlmaWVyLmgKQEAgLTExNyw2ICsxMTcsNyBAQCBjbGFzcyBJZGVu
dGlmaWVyIHsKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwgY29uc3QgVUNo
YXIqLCBpbnQgbGVuZ3RoKTsKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5nKFZNJiwg
Y29uc3QgU3RyaW5nJik7CiAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIEF0
b21TdHJpbmdJbXBsKik7CisgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhWTSYsIFJl
ZjxBdG9tU3RyaW5nSW1wbD4mJik7CiAgICAgc3RhdGljIElkZW50aWZpZXIgZnJvbVN0cmluZyhW
TSYsIGNvbnN0IEF0b21TdHJpbmcmKTsKICAgICBzdGF0aWMgSWRlbnRpZmllciBmcm9tU3RyaW5n
KFZNJiB2bSwgU3ltYm9sSW1wbCopOwogICAgIHN0YXRpYyBJZGVudGlmaWVyIGZyb21TdHJpbmco
Vk0mLCBjb25zdCBjaGFyKik7CkBAIC0xNTksNyArMTYwLDcgQEAgY2xhc3MgSWRlbnRpZmllciB7
CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU3RyaW5nSW1wbCogYSwgY29uc3QgU3RyaW5n
SW1wbCogYikgeyByZXR1cm4gOjplcXVhbChhLCBiKTsgfQogCiAgICAgLy8gT25seSB0byBiZSB1
c2VkIHdpdGggc3RyaW5nIGxpdGVyYWxzLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBS
ZWY8U3RyaW5nSW1wbD4gYWRkKFZNJiwgY29uc3QgY2hhciopOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBSZWY8QXRvbVN0cmluZ0ltcGw+IGFkZChWTSYsIGNvbnN0IGNoYXIqKTsKIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCkBAIC0xNzcsMTAgKzE3OCwxMyBA
QCBjbGFzcyBJZGVudGlmaWVyIHsKICAgICBJZGVudGlmaWVyKFZNJiB2bSwgY29uc3QgU3RyaW5n
JiBzdHJpbmcpIDogbV9zdHJpbmcoYWRkKHZtLCBzdHJpbmcuaW1wbCgpKSkgeyBBU1NFUlQobV9z
dHJpbmcuaW1wbCgpLT5pc0F0b20oKSk7IH0KICAgICBJZGVudGlmaWVyKFZNJiB2bSwgU3RyaW5n
SW1wbCogcmVwKSA6IG1fc3RyaW5nKGFkZCh2bSwgcmVwKSkgeyBBU1NFUlQobV9zdHJpbmcuaW1w
bCgpLT5pc0F0b20oKSk7IH0KIAorICAgIElkZW50aWZpZXIoVk0mLCBSZWY8QXRvbVN0cmluZ0lt
cGw+JiYgaW1wbCkKKyAgICAgICAgOiBtX3N0cmluZyhXVEZNb3ZlKGltcGwpKQorICAgIHsgfQor
CiAgICAgSWRlbnRpZmllcihTeW1ib2xJbXBsJiB1aWQpCiAgICAgICAgIDogbV9zdHJpbmcoJnVp
ZCkKLSAgICB7Ci0gICAgfQorICAgIHsgfQogCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJU
eXBlPgogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIHVpbnQzMl90IHRvVUludDMyRnJvbUNoYXJh
Y3RlcnMoY29uc3QgQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgYm9vbCYg
b2spOwpAQCAtMTg4LDExICsxOTIsMTEgQEAgY2xhc3MgSWRlbnRpZmllciB7CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgSWRlbnRpZmllciYgYSwgY29uc3QgSWRlbnRpZmllciYgYikgeyBy
ZXR1cm4gYS5tX3N0cmluZy5pbXBsKCkgPT0gYi5tX3N0cmluZy5pbXBsKCk7IH0KICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBJZGVudGlmaWVyJiBhLCBjb25zdCBMQ2hhciogYikgeyByZXR1
cm4gZXF1YWwoYS5tX3N0cmluZy5pbXBsKCksIGIpOyB9CiAKLSAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQoVk0mLCBjb25zdCBUKiwgaW50IGxlbmd0
aCk7Ci0gICAgc3RhdGljIFJlZjxTdHJpbmdJbXBsPiBhZGQ4KFZNJiwgY29uc3QgVUNoYXIqLCBp
bnQgbGVuZ3RoKTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIFJlZjxBdG9tU3Ry
aW5nSW1wbD4gYWRkKFZNJiwgY29uc3QgVCosIGludCBsZW5ndGgpOworICAgIHN0YXRpYyBSZWY8
QXRvbVN0cmluZ0ltcGw+IGFkZDgoVk0mLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgpOwogICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBUPiBBTFdBWVNfSU5MSU5FIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoVCk7CiAKLSAgICBzdGF0aWMgUmVmPFN0cmlu
Z0ltcGw+IGFkZChWTSYsIFN0cmluZ0ltcGwqKTsKKyAgICBzdGF0aWMgUmVmPEF0b21TdHJpbmdJ
bXBsPiBhZGQoVk0mLCBTdHJpbmdJbXBsKik7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgY2hlY2tDdXJyZW50QXRvbVN0cmluZ1RhYmxlKFZNJik7
CkBAIC0yMTMsNyArMjE3LDcgQEAgdGVtcGxhdGUgPD4gQUxXQVlTX0lOTElORSBjb25zdGV4cHIg
Ym9vbCBJZGVudGlmaWVyOjpjYW5Vc2VTaW5nbGVDaGFyYWN0ZXJTdHJpbmcKIH0KIAogdGVtcGxh
dGUgPHR5cGVuYW1lIFQ+Ci1SZWY8U3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNJiB2bSwg
Y29uc3QgVCogcywgaW50IGxlbmd0aCkKK1JlZjxBdG9tU3RyaW5nSW1wbD4gSWRlbnRpZmllcjo6
YWRkKFZNJiB2bSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoID09
IDEpIHsKICAgICAgICAgVCBjID0gc1swXTsKQEAgLTIyMSw3ICsyMjUsNyBAQCBSZWY8U3RyaW5n
SW1wbD4gSWRlbnRpZmllcjo6YWRkKFZNJiB2bSwgY29uc3QgVCogcywgaW50IGxlbmd0aCkKICAg
ICAgICAgICAgIHJldHVybiB2bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVw
KGMpOwogICAgIH0KICAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuICpTdHJpbmdJbXBs
OjplbXB0eSgpOworICAgICAgICByZXR1cm4gKnN0YXRpY19jYXN0PEF0b21TdHJpbmdJbXBsKj4o
U3RyaW5nSW1wbDo6ZW1wdHkoKSk7CiAKICAgICByZXR1cm4gKkF0b21TdHJpbmdJbXBsOjphZGQo
cywgbGVuZ3RoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0lkZW50aWZpZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JZGVu
dGlmaWVySW5saW5lcy5oCmluZGV4IDE4ZTg4ZDdjMGNlNGVlMjEyOWEzN2Q4MjAyNjhhY2Y2MzYw
ZjUyYWUuLmE1NzJmNTdhNWM5Y2YzODUxOGUwZmIyZWE1YzI4MjU1ZTg2MGI0NmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lkZW50aWZpZXJJbmxpbmVzLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSWRlbnRpZmllcklubGluZXMuaApAQCAt
NTUsNyArNTUsNyBAQCBpbmxpbmUgSWRlbnRpZmllcjo6SWRlbnRpZmllcihWTSYgdm0sIGNvbnN0
IEF0b21TdHJpbmcmIHN0cmluZykKICNlbmRpZgogfQogCi1pbmxpbmUgUmVmPFN0cmluZ0ltcGw+
IElkZW50aWZpZXI6OmFkZChWTSYgdm0sIFN0cmluZ0ltcGwqIHIpCitpbmxpbmUgUmVmPEF0b21T
dHJpbmdJbXBsPiBJZGVudGlmaWVyOjphZGQoVk0mIHZtLCBTdHJpbmdJbXBsKiByKQogewogI2lm
bmRlZiBOREVCVUcKICAgICBjaGVja0N1cnJlbnRBdG9tU3RyaW5nVGFibGUodm0pOwpAQCAtMTEx
LDYgKzExMSwxMSBAQCBpbmxpbmUgSWRlbnRpZmllciBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKFZN
JiB2bSwgQXRvbVN0cmluZ0ltcGwqIGF0b21TdHJpbmdJbXBsKQogICAgIHJldHVybiBJZGVudGlm
aWVyKHZtLCBhdG9tU3RyaW5nSW1wbCk7CiB9CiAKK2lubGluZSBJZGVudGlmaWVyIElkZW50aWZp
ZXI6OmZyb21TdHJpbmcoVk0mIHZtLCBSZWY8QXRvbVN0cmluZ0ltcGw+JiYgYXRvbVN0cmluZ0lt
cGwpCit7CisgICAgcmV0dXJuIElkZW50aWZpZXIodm0sIFdURk1vdmUoYXRvbVN0cmluZ0ltcGwp
KTsKK30KKwogaW5saW5lIElkZW50aWZpZXIgSWRlbnRpZmllcjo6ZnJvbVN0cmluZyhWTSYgdm0s
IGNvbnN0IEF0b21TdHJpbmcmIGF0b21TdHJpbmcpCiB7CiAgICAgcmV0dXJuIElkZW50aWZpZXIo
dm0sIGF0b21TdHJpbmcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTGl0ZXJhbFBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRl
cmFsUGFyc2VyLmNwcAppbmRleCBiMjg1MWIzMTU5YmQyMDdlZjA5YWVkNGQ5Y2U3ZjE0OGUxMzM0
NmQyLi5lMGE0ZDM0NGFhZGY0ZTBkMjlmZTg4YjI3MjMwMjY0ZDQ1ZTNkMmJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFyc2VyLmNwcApAQCAtMzYsOCAr
MzYsMjggQEAKICNpbmNsdWRlIDx3dGYvZHRvYS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0NvbmNhdGVuYXRlLmg+CiAKKyNpbmNsdWRlICJLZXl3b3JkTG9va3VwLmgiCisKIG5hbWVzcGFj
ZSBKU0MgewogCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK0FMV0FZU19JTkxJTkUgYm9v
bCBjb21wYXJlM0NoYXJzKGNvbnN0IENoYXJUeXBlKiBzb3VyY2UsIENoYXJUeXBlIGMwLCBDaGFy
VHlwZSBjMSwgQ2hhclR5cGUgYzIpCit7CisgICAgaWYgY29uc3RleHByIChzaXplb2YoQ2hhclR5
cGUpID09IDEpCisgICAgICAgIHJldHVybiBDT01QQVJFXzNDSEFSUyhzb3VyY2UsIGMwLCBjMSwg
YzIpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIENPTVBBUkVfM1VDSEFSUyhzb3VyY2UsIGMw
LCBjMSwgYzIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyVHlwZT4KK0FMV0FZU19JTkxJ
TkUgYm9vbCBjb21wYXJlNENoYXJzKGNvbnN0IENoYXJUeXBlKiBzb3VyY2UsIENoYXJUeXBlIGMw
LCBDaGFyVHlwZSBjMSwgQ2hhclR5cGUgYzIsIENoYXJUeXBlIGMzKQoreworICAgIGlmIGNvbnN0
ZXhwciAoc2l6ZW9mKENoYXJUeXBlKSA9PSAxKQorICAgICAgICByZXR1cm4gQ09NUEFSRV80Q0hB
UlMoc291cmNlLCBjMCwgYzEsIGMyLCBjMyk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gQ09N
UEFSRV80VUNIQVJTKHNvdXJjZSwgYzAsIGMxLCBjMiwgYzMpOworfQorCiB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQ2hhclR5cGU+CiBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzSlNPTldoaXRlU3Bh
Y2UoY29uc3QgQ2hhclR5cGUmIGMpCiB7CkBAIC0xNDEsMTggKzE2MSwzMSBAQCBBTFdBWVNfSU5M
SU5FIElkZW50aWZpZXIgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46Om1ha2VJZGVudGlmaWVyKGNv
bnN0IExpdGVyYWxDaAogICAgIGF1dG8gZmlyc3RDaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzWzBdOwog
ICAgIGlmIChsZW5ndGggPT0gMSkgewogICAgICAgICBpZiBjb25zdGV4cHIgKHNpemVvZihMaXRl
cmFsQ2hhclR5cGUpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0
cmluZyh2bSwgdm0uc21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChmaXJzdENo
YXJhY3RlcikucHRyKCkpOworICAgICAgICAgICAgcmV0dXJuIElkZW50aWZpZXI6OmZyb21TdHJp
bmcodm0sIHZtLnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmdSZXAoZmlyc3RDaGFy
YWN0ZXIpKTsKICAgICAgICAgaWYgKGZpcnN0Q2hhcmFjdGVyIDw9IG1heFNpbmdsZUNoYXJhY3Rl
clN0cmluZykKLSAgICAgICAgICAgIHJldHVybiBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCB2
bS5zbWFsbFN0cmluZ3Muc2luZ2xlQ2hhcmFjdGVyU3RyaW5nUmVwKGZpcnN0Q2hhcmFjdGVyKS5w
dHIoKSk7CisgICAgICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgdm0u
c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZ1JlcChmaXJzdENoYXJhY3RlcikpOwog
ICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hhcmFjdGVycywgbGVu
Z3RoKTsKICAgICB9CiAKICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPj0gbWF4aW11bUNhY2hhYmxl
Q2hhcmFjdGVyKQogICAgICAgICByZXR1cm4gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKLSAgICBpZiAoIW1fcmVjZW50SWRlbnRpZmllcnNbZmlyc3RDaGFy
YWN0ZXJdLmlzTnVsbCgpICYmIElkZW50aWZpZXI6OmVxdWFsKG1fcmVjZW50SWRlbnRpZmllcnNb
Zmlyc3RDaGFyYWN0ZXJdLmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKLSAgICAgICAgcmV0
dXJuIG1fcmVjZW50SWRlbnRpZmllcnNbZmlyc3RDaGFyYWN0ZXJdOwotICAgIG1fcmVjZW50SWRl
bnRpZmllcnNbZmlyc3RDaGFyYWN0ZXJdID0gSWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgY2hh
cmFjdGVycywgbGVuZ3RoKTsKLSAgICByZXR1cm4gbV9yZWNlbnRJZGVudGlmaWVyc1tmaXJzdENo
YXJhY3Rlcl07CisKKyAgICB1aW50OF90IGluZGV4UGx1c09uZSA9IG1fcmVjZW50SWRlbnRpZmll
cnNJbmRleFtmaXJzdENoYXJhY3Rlcl07CisgICAgaWYgKGluZGV4UGx1c09uZSkgeworICAgICAg
ICB1aW50OF90IGluZGV4ID0gaW5kZXhQbHVzT25lIC0gMTsKKyAgICAgICAgYXV0byYgaWRlbnQg
PSBtX3JlY2VudElkZW50aWZpZXJzW2luZGV4XTsKKyAgICAgICAgaWYgKElkZW50aWZpZXI6OmVx
dWFsKGlkZW50LmltcGwoKSwgY2hhcmFjdGVycywgbGVuZ3RoKSkKKyAgICAgICAgICAgIHJldHVy
biBpZGVudDsKKyAgICAgICAgYXV0byByZXN1bHQgPSBJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZt
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgICAgICBtX3JlY2VudElkZW50aWZpZXJzW2luZGV4
XSA9IHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBhdXRvIHJl
c3VsdCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIGNoYXJhY3RlcnMsIGxlbmd0aCk7Cisg
ICAgbV9yZWNlbnRJZGVudGlmaWVycy51bmNoZWNrZWRBcHBlbmQocmVzdWx0KTsKKyAgICBpbmRl
eFBsdXNPbmUgPSBtX3JlY2VudElkZW50aWZpZXJzLnNpemUoKTsKKyAgICBtX3JlY2VudElkZW50
aWZpZXJzSW5kZXhbZmlyc3RDaGFyYWN0ZXJdID0gaW5kZXhQbHVzT25lOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIC8vIDI1NiBMYXRpbi0xIGNvZGVzCkBAIC03MDgsNyArNzQxLDcgQEAgQUxX
QVlTX0lOTElORSBUb2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyOjpsZXgo
TGl0ZXJhbFBhcnNlclRva2VuPEMKICAgICAgICAgY2FzZSBUb2tJZGVudGlmaWVyOiB7CiAgICAg
ICAgICAgICBzd2l0Y2ggKGNoYXJhY3RlcikgewogICAgICAgICAgICAgY2FzZSAndCc6Ci0gICAg
ICAgICAgICAgICAgaWYgKG1fZW5kIC0gbV9wdHIgPj0gNCAmJiBtX3B0clsxXSA9PSAncicgJiYg
bV9wdHJbMl0gPT0gJ3UnICYmIG1fcHRyWzNdID09ICdlJykgeworICAgICAgICAgICAgICAgIGlm
IChtX2VuZCAtIG1fcHRyID49IDQgJiYgY29tcGFyZTNDaGFyczxDaGFyVHlwZT4obV9wdHIgKyAx
LCAncicsICd1JywgJ2UnKSkgewogICAgICAgICAgICAgICAgICAgICBtX3B0ciArPSA0OwogICAg
ICAgICAgICAgICAgICAgICB0b2tlbi50eXBlID0gVG9rVHJ1ZTsKICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4uZW5kID0gbV9wdHI7CkBAIC03MTYsNyArNzQ5LDcgQEAgQUxXQVlTX0lOTElORSBU
b2tlblR5cGUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNl
clRva2VuPEMKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA1
ICYmIG1fcHRyWzFdID09ICdhJyAmJiBtX3B0clsyXSA9PSAnbCcgJiYgbV9wdHJbM10gPT0gJ3Mn
ICYmIG1fcHRyWzRdID09ICdlJykgeworICAgICAgICAgICAgICAgIGlmIChtX2VuZCAtIG1fcHRy
ID49IDUgJiYgY29tcGFyZTRDaGFyczxDaGFyVHlwZT4obV9wdHIgKyAxLCAnYScsICdsJywgJ3Mn
LCAnZScpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcHRyICs9IDU7CiAgICAgICAgICAgICAg
ICAgICAgIHRva2VuLnR5cGUgPSBUb2tGYWxzZTsKICAgICAgICAgICAgICAgICAgICAgdG9rZW4u
ZW5kID0gbV9wdHI7CkBAIC03MjQsNyArNzU3LDcgQEAgQUxXQVlTX0lOTElORSBUb2tlblR5cGUg
TGl0ZXJhbFBhcnNlcjxDaGFyVHlwZT46OkxleGVyOjpsZXgoTGl0ZXJhbFBhcnNlclRva2VuPEMK
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlICduJzoKLSAgICAgICAgICAgICAgICBpZiAobV9lbmQgLSBtX3B0ciA+PSA0ICYmIG1fcHRy
WzFdID09ICd1JyAmJiBtX3B0clsyXSA9PSAnbCcgJiYgbV9wdHJbM10gPT0gJ2wnKSB7CisgICAg
ICAgICAgICAgICAgaWYgKG1fZW5kIC0gbV9wdHIgPj0gNCAmJiBjb21wYXJlM0NoYXJzPENoYXJU
eXBlPihtX3B0ciArIDEsICd1JywgJ2wnLCAnbCcpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1f
cHRyICs9IDQ7CiAgICAgICAgICAgICAgICAgICAgIHRva2VuLnR5cGUgPSBUb2tOdWxsOwogICAg
ICAgICAgICAgICAgICAgICB0b2tlbi5lbmQgPSBtX3B0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0xpdGVyYWxQYXJzZXIuaAppbmRleCAwNzE4MjBmNTIyZDJjN2ZjNzIxYTk4
Y2Y5YTczNmVhMTRjOGI3YjI4Li5jZTY4NTEyOGFiNTdiYmQ1ZTM3NDE1MTQ0YTk1MmNhOTRkYTll
MTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9MaXRlcmFsUGFy
c2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTGl0ZXJhbFBhcnNlci5o
CkBAIC0xNzUsMTIgKzE3NSwxMyBAQCBjbGFzcyBMaXRlcmFsUGFyc2VyIHsKICAgICAgICAgU3Ry
aW5nIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIG1fbGV4RXJyb3JNZXNzYWdlOyB9CiAgICAg
ICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFN0cmluZyBtX2xleEVycm9yTWVzc2FnZTsKICAg
ICAgICAgVG9rZW5UeXBlIGxleChMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5cGU+Jik7CiAgICAg
ICAgIEFMV0FZU19JTkxJTkUgVG9rZW5UeXBlIGxleElkZW50aWZpZXIoTGl0ZXJhbFBhcnNlclRv
a2VuPENoYXJUeXBlPiYpOwogICAgICAgICBBTFdBWVNfSU5MSU5FIFRva2VuVHlwZSBsZXhTdHJp
bmcoTGl0ZXJhbFBhcnNlclRva2VuPENoYXJUeXBlPiYsIENoYXJUeXBlIHRlcm1pbmF0b3IpOwog
ICAgICAgICBUb2tlblR5cGUgbGV4U3RyaW5nU2xvdyhMaXRlcmFsUGFyc2VyVG9rZW48Q2hhclR5
cGU+JiwgY29uc3QgQ2hhclR5cGUqIHJ1blN0YXJ0LCBDaGFyVHlwZSB0ZXJtaW5hdG9yKTsKICAg
ICAgICAgQUxXQVlTX0lOTElORSBUb2tlblR5cGUgbGV4TnVtYmVyKExpdGVyYWxQYXJzZXJUb2tl
bjxDaGFyVHlwZT4mKTsKKworICAgICAgICBTdHJpbmcgbV9sZXhFcnJvck1lc3NhZ2U7CiAgICAg
ICAgIExpdGVyYWxQYXJzZXJUb2tlbjxDaGFyVHlwZT4gbV9jdXJyZW50VG9rZW47CiAgICAgICAg
IFBhcnNlck1vZGUgbV9tb2RlOwogICAgICAgICBjb25zdCBDaGFyVHlwZSogbV9wdHI7CkBAIC0x
OTQsMTUgKzE5NSwxNyBAQCBjbGFzcyBMaXRlcmFsUGFyc2VyIHsKICAgICBjbGFzcyBTdGFja0d1
YXJkOwogICAgIEpTVmFsdWUgcGFyc2UoUGFyc2VyU3RhdGUpOwogCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgTGl0ZXJhbENoYXJUeXBlPgorICAgIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBtYWtl
SWRlbnRpZmllcihjb25zdCBMaXRlcmFsQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5n
dGgpOworCiAgICAgSlNHbG9iYWxPYmplY3QqIG1fZ2xvYmFsT2JqZWN0OwogICAgIENvZGVCbG9j
ayogbV9udWxsT3JDb2RlQmxvY2s7CiAgICAgdHlwZW5hbWUgTGl0ZXJhbFBhcnNlcjxDaGFyVHlw
ZT46OkxleGVyIG1fbGV4ZXI7CiAgICAgUGFyc2VyTW9kZSBtX21vZGU7CiAgICAgU3RyaW5nIG1f
cGFyc2VFcnJvck1lc3NhZ2U7CiAgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBtYXhpbXVt
Q2FjaGFibGVDaGFyYWN0ZXIgPSAxMjg7Ci0gICAgc3RkOjphcnJheTxJZGVudGlmaWVyLCBtYXhp
bXVtQ2FjaGFibGVDaGFyYWN0ZXI+IG1fcmVjZW50SWRlbnRpZmllcnM7Ci0gICAgdGVtcGxhdGU8
dHlwZW5hbWUgTGl0ZXJhbENoYXJUeXBlPgotICAgIEFMV0FZU19JTkxJTkUgSWRlbnRpZmllciBt
YWtlSWRlbnRpZmllcihjb25zdCBMaXRlcmFsQ2hhclR5cGUqIGNoYXJhY3RlcnMsIHNpemVfdCBs
ZW5ndGgpOworICAgIHN0ZDo6YXJyYXk8dWludDhfdCwgbWF4aW11bUNhY2hhYmxlQ2hhcmFjdGVy
PiBtX3JlY2VudElkZW50aWZpZXJzSW5kZXggeyB9OworICAgIFZlY3RvcjxJZGVudGlmaWVyLCBt
YXhpbXVtQ2FjaGFibGVDaGFyYWN0ZXI+IG1fcmVjZW50SWRlbnRpZmllcnM7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBKU0MK
</data>
<flag name="review"
          id="453430"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>