<?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>193869</bug_id>
          
          <creation_ts>2019-01-26 10:14:01 -0800</creation_ts>
          <short_desc>[BigInt] Support constant fold of BigInts on DFG</short_desc>
          <delta_ts>2019-01-31 00:04:22 -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>NEW</bug_status>
          <resolution></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>
          
          <blocked>186173</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Caio Lima">ticaiolima</reporter>
          <assigned_to name="Caio Lima">ticaiolima</assigned_to>
          <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1498730</commentid>
    <comment_count>0</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2019-01-26 10:14:01 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498732</commentid>
    <comment_count>1</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2019-01-26 10:28:14 -0800</bug_when>
    <thetext>What I have in mind to make it possible is to follow what we do with Strings right now. The idea is to use LazyJSValue, since we can only allocate heap objects after compilation is finished. In the case of LazyJaValues of BigInts, the plan is to record following information:

1. lhs and rhs operands;
2. Type of operation;

To have a robust implementation and fold constants properly, lhs and rhs should be LazyJSValues that also can be computed on further steps.
We need to change JSBigInt API to support arithmetic operations that can&apos;t fail due OOM.
Also, we need to guarantee when constant fold happens that we won&apos;t overflow BigInt::maxSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498733</commentid>
    <comment_count>2</comment_count>
      <attachid>360242</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2019-01-26 10:33:08 -0800</bug_when>
    <thetext>Created attachment 360242
WIP - Patch

Here is a very simple version to illustrate what I have in mind now. I&apos;m creating LazyBigIntValue to store required information to calculate BigInts properly. A LazyJSValue(NewBigInt) can have KnowValue or other LazyBigIntValue as operands. This enables us fold cascaded constants. The Folding is being done during Strengthreduction, following String rules as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1498992</commentid>
    <comment_count>3</comment_count>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2019-01-28 05:27:03 -0800</bug_when>
    <thetext>(In reply to Caio Lima from comment #1)
&gt; What I have in mind to make it possible is to follow what we do with Strings
&gt; right now. The idea is to use LazyJSValue, since we can only allocate heap
&gt; objects after compilation is finished. In the case of LazyJaValues of
&gt; BigInts, the plan is to record following information:
&gt; 
&gt; 1. lhs and rhs operands;
&gt; 2. Type of operation;
&gt; 
&gt; To have a robust implementation and fold constants properly, lhs and rhs
&gt; should be LazyJSValues that also can be computed on further steps.
&gt; We need to change JSBigInt API to support arithmetic operations that can&apos;t
&gt; fail due OOM.
&gt; Also, we need to guarantee when constant fold happens that we won&apos;t overflow
&gt; BigInt::maxSize.

I think we also can have a special case when BigInts are proven to be 64-bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1500480</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-01-31 00:04:22 -0800</bug_when>
    <thetext>Sounds good to me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>360242</attachid>
            <date>2019-01-26 10:33:08 -0800</date>
            <delta_ts>2019-01-26 10:33:08 -0800</delta_ts>
            <desc>WIP - Patch</desc>
            <filename>big-int-const-fold.diff</filename>
            <type>text/plain</type>
            <size>17307</size>
            <attacher name="Caio Lima">ticaiolima</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaAppbmRleCA3NTgxYTFhNzc0Ni4uNjdhZTM1M2I5NTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgKQEAgLTI1OCw2ICsyNTgsOSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQog
ICAgICAgICBjYXNlIExhenlKU1ZhbHVlOjpOZXdTdHJpbmdJbXBsOgogICAgICAgICAgICAgc2V0
VHlwZUZvck5vZGUobm9kZSwgU3BlY1N0cmluZyk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBMYXp5SlNWYWx1ZTo6TmV3QmlnSW50QWRkOgorICAgICAgICAgICAgc2V0VHlwZUZv
ck5vZGUobm9kZSwgU3BlY0JpZ0ludCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5k
ZXggMTUxZjU3MzZjN2EuLjgyOGM1OTA0ZDViIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiREZHUHJvcGVydHlUeXBlS2V5Lmgi
CiAjaW5jbHVkZSAiREZHU2Nhbm5hYmxlLmgiCiAjaW5jbHVkZSAiRnVsbEJ5dGVjb2RlTGl2ZW5l
c3MuaCIKKyNpbmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0
dGluZ0FWYWx1ZVByb2ZpbGUuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CiAjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTEwNjYsNiArMTA2Nyw3IEBAIHB1YmxpYzoKICAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlclNsb3RzOwogICAgIAogICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2xvY2Fs
U3RyaW5nczsKKyAgICBWZWN0b3I8TGF6eUJpZ0ludFZhbHVlPiBtX2xvY2FsTGF6eUJpZ0ludHM7
CiAgICAgSGFzaE1hcDxjb25zdCBTdHJpbmdJbXBsKiwgU3RyaW5nPiBtX2NvcGllZFN0cmluZ3M7
CiAKICNpZiBVU0UoSlNWQUxVRTMyXzY0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdMYXp5SlNWYWx1ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0xhenlKU1ZhbHVlLmNwcAppbmRleCA0M2JlYWQ2MmZmOS4uNTY1M2M0MzIyZjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCkBAIC0zMCw2ICszMCw3
IEBACiAKICNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgor
I2luY2x1ZGUgIkpTQmlnSW50LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKIApAQCAtNDMsNiArNDQsMjAgQEAgTGF6eUpTVmFsdWUgTGF6eUpTVmFs
dWU6Om5ld1N0cmluZyhHcmFwaCYgZ3JhcGgsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKK0xhenlKU1ZhbHVlIExhenlKU1ZhbHVlOjpuZXdCaWdJbnQoR3Jh
cGgmIGdyYXBoLCBMYXp5SlNWYWx1ZSBsaHMsIExhenlKU1ZhbHVlIHJocywgTGF6eUpTVmFsdWU6
OkJpZ0ludE9wZXJhdGlvblR5cGUgb3BUeXBlKQoreworICAgIExhenlCaWdJbnRWYWx1ZSBsYXp5
QmlnSW50OworICAgIGxhenlCaWdJbnQubGVmdCA9IGxoczsKKyAgICBsYXp5QmlnSW50LnJpZ2h0
ID0gcmhzOworICAgIGxhenlCaWdJbnQub3BUeXBlID0gb3BUeXBlOworICAgIGdyYXBoLm1fbG9j
YWxMYXp5QmlnSW50cy5hcHBlbmQobGF6eUJpZ0ludCk7CisKKyAgICBMYXp5SlNWYWx1ZSByZXN1
bHQ7CisgICAgcmVzdWx0Lm1fa2luZCA9IE5ld0JpZ0ludEFkZDsKKyAgICByZXN1bHQudS5iaWdJ
bnRJbmZvID0gJmdyYXBoLm1fbG9jYWxMYXp5QmlnSW50cy5sYXN0KCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwogSlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjb25zdAog
ewogICAgIHN3aXRjaCAobV9raW5kKSB7CkBAIC01NCw2ICs2OSwxMyBAQCBKU1ZhbHVlIExhenlK
U1ZhbHVlOjpnZXRWYWx1ZShWTSYgdm0pIGNvbnN0CiAgICAgICAgIHJldHVybiBqc1N0cmluZygm
dm0sIHUuc3RyaW5nSW1wbCk7CiAgICAgY2FzZSBOZXdTdHJpbmdJbXBsOgogICAgICAgICByZXR1
cm4ganNTdHJpbmcoJnZtLCBBdG9taWNTdHJpbmdJbXBsOjphZGQodS5zdHJpbmdJbXBsKSk7Cisg
ICAgY2FzZSBOZXdCaWdJbnRBZGQ6IHsKKyAgICAgICAgSlNWYWx1ZSBsZWZ0VmFsdWUgPSB0aGlz
LT51LmJpZ0ludEluZm8tPmxlZnQuZ2V0VmFsdWUodm0pOworICAgICAgICBBU1NFUlQobGVmdFZh
bHVlLmlzQmlnSW50KCkpOworICAgICAgICBKU1ZhbHVlIHJpZ2h0VmFsdWUgPSB0aGlzLT51LmJp
Z0ludEluZm8tPnJpZ2h0LmdldFZhbHVlKHZtKTsKKyAgICAgICAgQVNTRVJUKHJpZ2h0VmFsdWUu
aXNCaWdJbnQoKSk7CisgICAgICAgIHJldHVybiBKU0JpZ0ludDo6dW5jaGVja2VkQWRkKHZtLCBh
c0JpZ0ludChsZWZ0VmFsdWUpLCBhc0JpZ0ludChyaWdodFZhbHVlKSk7CisgICAgfQogICAgIH0K
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBKU1ZhbHVlKCk7
CkBAIC0xNDIsNiArMTY0LDggQEAgVHJpU3RhdGUgTGF6eUpTVmFsdWU6OnN0cmljdEVxdWFsKGNv
bnN0IExhenlKU1ZhbHVlJiBvdGhlcikgY29uc3QKICAgICAgICAgY2FzZSBLbm93blN0cmluZ0lt
cGw6CiAgICAgICAgIGNhc2UgTmV3U3RyaW5nSW1wbDoKICAgICAgICAgICAgIHJldHVybiBlcXVh
bFRvU3RyaW5nSW1wbCh2YWx1ZSgpLT52YWx1ZSgpLCBvdGhlci5zdHJpbmdJbXBsKCkpOworICAg
ICAgICBjYXNlIE5ld0JpZ0ludEFkZDoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZVRyaVN0YXRl
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nOgpAQCAtMTY3LDYgKzE5MSw4IEBAIFRyaVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVh
bChjb25zdCBMYXp5SlNWYWx1ZSYgb3RoZXIpIGNvbnN0CiAgICAgICAgICAgICByZXR1cm4gb3Ro
ZXIuc3RyaWN0RXF1YWwoKnRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgTmV3QmlnSW50QWRkOgorICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKICAgICB9CiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gRmFsc2VUcmlTdGF0
ZTsKQEAgLTI1OCw2ICsyODQsOSBAQCB2b2lkIExhenlKU1ZhbHVlOjpkdW1wSW5Db250ZXh0KFBy
aW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0KiBjb250ZXh0KSBjb25zdAogICAgIGNhc2UgTmV3
U3RyaW5nSW1wbDoKICAgICAgICAgb3V0LnByaW50KCJMYXp5Ok5ld1N0cmluZygiLCBzdHJpbmdJ
bXBsKCksICIpIik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5ld0JpZ0ludEFkZDoKKyAg
ICAgICAgb3V0LnByaW50KCJMYXp5Ok5ld0JpZ0ludEFkZCgpIik7CisgICAgICAgIHJldHVybjsK
ICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuaAppbmRleCAxOGJiNTk2MGZjMy4uYjI4ODg4
OTYyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFs
dWUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmgKQEAg
LTM4LDYgKzM4LDcgQEAgY2xhc3MgQ0NhbGxIZWxwZXJzOwogbmFtZXNwYWNlIERGRyB7CiAKIGNs
YXNzIEdyYXBoOworY2xhc3MgTGF6eUJpZ0ludFZhbHVlOwogCiAvLyBSZXByZXNlbnRzIGVpdGhl
ciBhIEpTVmFsdWUsIG9yIGZvciBKU1ZhbHVlcyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBpbiB0
aGUgaGVhcCwKIC8vIGl0IHRlbGxzIHlvdSBldmVyeXRoaW5nIHlvdSdkIG5lZWQgdG8ga25vdyBp
biBvcmRlciB0byBhbGxvY2F0ZSBpdC4KQEAgLTQ4LDcgKzQ5LDEyIEBAIHB1YmxpYzoKICAgICAg
ICAgS25vd25WYWx1ZSwKICAgICAgICAgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nLAogICAgICAgICBL
bm93blN0cmluZ0ltcGwsCi0gICAgICAgIE5ld1N0cmluZ0ltcGwKKyAgICAgICAgTmV3U3RyaW5n
SW1wbCwKKyAgICAgICAgTmV3QmlnSW50QWRkCisgICAgfTsKKworICAgIGVudW0gY2xhc3MgQmln
SW50T3BlcmF0aW9uVHlwZSB7CisgICAgICAgIEFkZAogICAgIH07CiAKICAgICBMYXp5SlNWYWx1
ZShGcm96ZW5WYWx1ZSogdmFsdWUgPSBGcm96ZW5WYWx1ZTo6ZW1wdHlTaW5nbGV0b24oKSkKQEAg
LTc0LDYgKzgwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBu
ZXdTdHJpbmcoR3JhcGgmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgTGF6eUpTVmFsdWUg
bmV3QmlnSW50KEdyYXBoJiwgTGF6eUpTVmFsdWUgbGhzLCBMYXp5SlNWYWx1ZSByaHMsIEJpZ0lu
dE9wZXJhdGlvblR5cGUpOwogCiAgICAgTGF6aW5lc3NLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KICAgICAKQEAgLTEyMiwxMCArMTI5LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IEZyb3plblZhbHVlKiB2YWx1ZTsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyOwogICAgICAgICBT
dHJpbmdJbXBsKiBzdHJpbmdJbXBsOworICAgICAgICBMYXp5QmlnSW50VmFsdWUqIGJpZ0ludElu
Zm87CiAgICAgfSB1OwogICAgIExhemluZXNzS2luZCBtX2tpbmQ7CiB9OwogCitjbGFzcyBMYXp5
QmlnSW50VmFsdWUgeworcHVibGljOgorICAgIExhenlKU1ZhbHVlIGxlZnQ7CisgICAgTGF6eUpT
VmFsdWUgcmlnaHQ7CisgICAgTGF6eUpTVmFsdWU6OkJpZ0ludE9wZXJhdGlvblR5cGUgb3BUeXBl
OworfTsKKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcAppbmRleCAzZDFjM2JhMTM3
Ni4uMzM0Mzg1ZmU1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmNwcApAQCAt
MzA5LDYgKzMwOSwxNSBAQCBTdHJpbmcgTm9kZTo6dHJ5R2V0U3RyaW5nKEdyYXBoJiBncmFwaCkK
ICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKK0xhenlKU1ZhbHVlIE5vZGU6OmdldExhenlKU1Zh
bHVlKCkKK3sKKyAgICBBU1NFUlQoaXNDb25zdGFudE9yTGF6eUNvbnN0YW50KCkpOworICAgIGlm
IChoYXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4gTGF6eUpTVmFsdWUoY29uc3RhbnQoKSk7
CisgICAgaWYgKGhhc0xhenlKU1ZhbHVlKCkpCisgICAgICAgIHJldHVybiBsYXp5SlNWYWx1ZSgp
OworfQorCiBQcm9tb3RlZExvY2F0aW9uRGVzY3JpcHRvciBOb2RlOjpwcm9tb3RlZExvY2F0aW9u
RGVzY3JpcHRvcigpCiB7CiAgICAgcmV0dXJuIFByb21vdGVkTG9jYXRpb25EZXNjcmlwdG9yKHN0
YXRpY19jYXN0PFByb21vdGVkTG9jYXRpb25LaW5kPihtX29wSW5mby5hczx1aW50MzJfdD4oKSks
IG1fb3BJbmZvMi5hczx1aW50MzJfdD4oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5o
CmluZGV4IDRjN2RlYjZhZDY4Li5iMGU2OWZmNzQ1NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgKQEAgLTUwMSw2ICs1MDEsMTEgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgfQog
ICAgIAorICAgIGJvb2wgaXNDb25zdGFudE9yTGF6eUNvbnN0YW50KCkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0NvbnN0YW50KCkgfHwgaGFzTGF6eUpTVmFsdWUoKTsKKyAgICB9CisKICAgICBi
b29sIGhhc0NvbnN0YW50KCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewpAQCAtODgw
LDYgKzg4NSw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0cnlHZXRTdHJpbmcoR3JhcGgmKTsK
IAorICAgIExhenlKU1ZhbHVlIGdldExhenlKU1ZhbHVlKCk7CisKICAgICBKU1ZhbHVlIGluaXRp
YWxpemF0aW9uVmFsdWVGb3JBY3RpdmF0aW9uKCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VS
VChvcCgpID09IENyZWF0ZUFjdGl2YXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAKaW5kZXggZDRhMGE3YWVlZTguLjM4MTA1MjJmZDI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTEzODIsNyArMTM4
Miw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25BZGRCaWdJbnQoRXhlY1N0YXRl
KiBleGVjLCBKU0NlbGwqIG9wMSwgSlNDZWxsKiBvCiAgICAgSlNCaWdJbnQqIGxlZnRPcGVyYW5k
ID0ganNDYXN0PEpTQmlnSW50Kj4ob3AxKTsKICAgICBKU0JpZ0ludCogcmlnaHRPcGVyYW5kID0g
anNDYXN0PEpTQmlnSW50Kj4ob3AyKTsKICAgICAKLSAgICByZXR1cm4gSlNCaWdJbnQ6OmFkZChl
eGVjLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKKyAgICByZXR1cm4gSlNCaWdJbnQ6OnRy
eUFkZChleGVjLCBsZWZ0T3BlcmFuZCwgcmlnaHRPcGVyYW5kKTsKIH0KIAogSlNDZWxsKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkJpdE9yQmlnSW50KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBv
cDEsIEpTQ2VsbCogb3AyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggMThiZWM2OTNlMmQuLjE2MDdkNzUw
MjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVk
dWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5n
dGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTM3NSw4ICszNzUsMTYgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYgKG1fbm9k
ZS0+YmluYXJ5VXNlS2luZCgpID09IEJpZ0ludFVzZSkKKyAgICAgICAgICAgIGlmIChtX25vZGUt
PmJpbmFyeVVzZUtpbmQoKSA9PSBCaWdJbnRVc2UpIHsKKyAgICAgICAgICAgICAgICAvLyBoYW5k
bGUgY29uc3RhbnQgcHJvcGFnYXRpb24KKyAgICAgICAgICAgICAgICBpZiAobV9ub2RlLT5jaGls
ZDEoKS0+aXNDb25zdGFudE9yTGF6eUNvbnN0YW50KCkgJiYgbV9ub2RlLT5jaGlsZDIoKS0+aXND
b25zdGFudE9yTGF6eUNvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IENoZWNrIGlmIGNvbnN0YW50IGlzIGEgQmlnSW50CisgICAgICAgICAgICAgICAgICAgIGNvbnZl
cnRUb0xhenlKU1ZhbHVlKG1fbm9kZSwgTGF6eUpTVmFsdWU6Om5ld0JpZ0ludChtX2dyYXBoLCBt
X25vZGUtPmNoaWxkMSgpLT5nZXRMYXp5SlNWYWx1ZSgpLCBtX25vZGUtPmNoaWxkMigpLT5nZXRM
YXp5SlNWYWx1ZSgpLCBMYXp5SlNWYWx1ZTo6QmlnSW50T3BlcmF0aW9uVHlwZTo6QWRkKSk7Cisg
ICAgICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7ICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICAgIGhhbmRs
ZUNvbW11dGF0aXZpdHkoKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmln
SW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAppbmRl
eCAyYmNhYTliNjc2Mi4uY2M5Zjk4ZjdmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQmlnSW50LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0JpZ0ludC5jcHAKQEAgLTkwLDE3ICs5MCwxNiBAQCBpbmxpbmUgc2l6ZV90IEpTQmln
SW50OjphbGxvY2F0aW9uU2l6ZSh1bnNpZ25lZCBsZW5ndGgpCiAgICAgcmV0dXJuIHNpemVXaXRo
UGFkZGluZyArIGxlbmd0aCAqIHNpemVvZihEaWdpdCk7CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0lu
dDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGxlbmd0aCkK
K0pTQmlnSW50KiBKU0JpZ0ludDo6dHJ5Q3JlYXRlV2l0aExlbmd0aChFeGVjU3RhdGUqIGV4ZWMs
IFZNJiB2bSwgdW5zaWduZWQgbGVuZ3RoKQogewotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0g
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwotCi0gICAgaWYgKFVOTElL
RUxZKGxlbmd0aCA+IG1heExlbmd0aCkpIHsKLSAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9y
KGV4ZWMsIHNjb3BlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQorICAgIGlmIChl
eGVjKSB7CisgICAgICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAot
ICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICAgICAgaWYgKFVOTElLRUxZKGxlbmd0aCA+IG1heExl
bmd0aCkpIHsKKyAgICAgICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjLCBzY29wZSk7
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0gICAKIAogICAg
IHJldHVybiBjcmVhdGVXaXRoTGVuZ3RoVW5jaGVja2VkKHZtLCBsZW5ndGgpOwogfQpAQCAtMjQ4
LDcgKzI0Nyw3IEBAIEpTQmlnSW50KiBKU0JpZ0ludDo6bXVsdGlwbHkoRXhlY1N0YXRlKiBleGVj
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgICAgIHJldHVybiB5OwogCiAgICAgdW5z
aWduZWQgcmVzdWx0TGVuZ3RoID0geC0+bGVuZ3RoKCkgKyB5LT5sZW5ndGgoKTsKLSAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhlYywgcmVzdWx0
TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gSlNCaWdJbnQ6OnRyeUNyZWF0ZVdpdGhM
ZW5ndGgoZXhlYywgdm0sIHJlc3VsdExlbmd0aCk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgbnVsbHB0cik7CiAgICAgcmVzdWx0LT5pbml0aWFsaXplKEluaXRpYWxpemF0aW9uVHlw
ZTo6V2l0aFplcm8pOwogCkBAIC0zNTIsMTUgKzM1MSwxNCBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6
OnJlbWFpbmRlcihFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKICAg
ICByZXR1cm4gcmVtYWluZGVyLT5yaWdodFRyaW0odm0pOwogfQogCi1KU0JpZ0ludCogSlNCaWdJ
bnQ6OmFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK0pTQmln
SW50KiBKU0JpZ0ludDo6YWRkKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0JpZ0ludCogeCwg
SlNCaWdJbnQqIHkpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBib29sIHhTaWdu
ID0geC0+c2lnbigpOwogCiAgICAgLy8geCArIHkgPT0geCArIHkKICAgICAvLyAteCArIC15ID09
IC0oeCArIHkpCiAgICAgaWYgKHhTaWduID09IHktPnNpZ24oKSkKLSAgICAgICAgcmV0dXJuIGFi
c29sdXRlQWRkKGV4ZWMsIHgsIHksIHhTaWduKTsKKyAgICAgICAgcmV0dXJuIGFic29sdXRlQWRk
KGV4ZWMsIHZtLCB4LCB5LCB4U2lnbik7CiAKICAgICAvLyB4ICsgLXkgPT0geCAtIHkgPT0gLSh5
IC0geCkKICAgICAvLyAteCArIHkgPT0geSAtIHggPT0gLSh4IC0geSkKQEAgLTM3MSw2ICszNjks
MTkgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphZGQoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCog
eCwgSlNCaWdJbnQqIHkpCiAgICAgcmV0dXJuIGFic29sdXRlU3ViKHZtLCB5LCB4LCAheFNpZ24p
OwogfQogCitKU0JpZ0ludCogSlNCaWdJbnQ6OnRyeUFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOyAgIAorICAg
IHJldHVybiBhZGQoZXhlYywgdm0sIHgsIHkpOworfQorCitKU0JpZ0ludCogSlNCaWdJbnQ6OnVu
Y2hlY2tlZEFkZChWTSYgdm0sIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSkKK3sKKyAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gYWRkKG51bGxwdHIsIHZtLCB4LCB5KTsKKyAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTQmlnSW50KiBKU0JpZ0ludDo6
c3ViKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KQogewogICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CkBAIC0zNzgsNyArMzg5LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50
OjpzdWIoRXhlY1N0YXRlKiBleGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpCiAgICAgaWYg
KHhTaWduICE9IHktPnNpZ24oKSkgewogICAgICAgICAvLyB4IC0gKC15KSA9PSB4ICsgeQogICAg
ICAgICAvLyAoLXgpIC0geSA9PSAtKHggKyB5KQotICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQo
ZXhlYywgeCwgeSwgeFNpZ24pOworICAgICAgICByZXR1cm4gYWJzb2x1dGVBZGQoZXhlYywgdm0s
IHgsIHksIHhTaWduKTsKICAgICB9CiAgICAgLy8geCAtIHkgPT0gLSh5IC0geCkKICAgICAvLyAo
LXgpIC0gKC15KSA9PSB5IC0geCA9PSAtKHggLSB5KQpAQCAtODIyLDEyICs4MzMsMTAgQEAgaW5s
aW5lIEpTQmlnSW50OjpDb21wYXJpc29uUmVzdWx0IEpTQmlnSW50OjphYnNvbHV0ZUNvbXBhcmUo
SlNCaWdJbnQqIHgsIEpTQmlnSW4KICAgICByZXR1cm4geC0+ZGlnaXQoaSkgPiB5LT5kaWdpdChp
KSA/IENvbXBhcmlzb25SZXN1bHQ6OkdyZWF0ZXJUaGFuIDogQ29tcGFyaXNvblJlc3VsdDo6TGVz
c1RoYW47CiB9CiAKLUpTQmlnSW50KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoRXhlY1N0YXRlKiBl
eGVjLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2lnbikKK0pTQmlnSW50
KiBKU0JpZ0ludDo6YWJzb2x1dGVBZGQoRXhlY1N0YXRlKiBleGVjLCBWTSYgdm0sIEpTQmlnSW50
KiB4LCBKU0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKQogewotICAgIFZNJiB2bSA9IGV4ZWMt
PnZtKCk7Ci0KICAgICBpZiAoeC0+bGVuZ3RoKCkgPCB5LT5sZW5ndGgoKSkKLSAgICAgICAgcmV0
dXJuIGFic29sdXRlQWRkKGV4ZWMsIHksIHgsIHJlc3VsdFNpZ24pOworICAgICAgICByZXR1cm4g
YWJzb2x1dGVBZGQoZXhlYywgdm0sIHksIHgsIHJlc3VsdFNpZ24pOwogCiAgICAgaWYgKHgtPmlz
WmVybygpKSB7CiAgICAgICAgIEFTU0VSVCh5LT5pc1plcm8oKSk7CkBAIC04MzcsNyArODQ2LDcg
QEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEpTQmln
SW50KiB4LCBKU0JpZ0ludCogeSwgYm9vbAogICAgIGlmICh5LT5pc1plcm8oKSkKICAgICAgICAg
cmV0dXJuIHJlc3VsdFNpZ24gPT0geC0+c2lnbigpID8geCA6IHVuYXJ5TWludXModm0sIHgpOwog
Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0cnlDcmVhdGVXaXRoTGVuZ3RoKGV4
ZWMsIHgtPmxlbmd0aCgpICsgMSk7CisgICAgSlNCaWdJbnQqIHJlc3VsdCA9IEpTQmlnSW50Ojp0
cnlDcmVhdGVXaXRoTGVuZ3RoKGV4ZWMsIHZtLCB4LT5sZW5ndGgoKSArIDEpOwogICAgIGlmICgh
cmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBEaWdpdCBjYXJyeSA9IDA7CkBA
IC05NjUsNyArOTc0LDcgQEAgdm9pZCBKU0JpZ0ludDo6YWJzb2x1dGVEaXZXaXRoQmlnSW50RGl2
aXNvcihFeGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiBkaXZpZGVuZCwKICAgICAKICAgICAvLyBJ
biBlYWNoIGl0ZXJhdGlvbiwge3FoYXR2fSBob2xkcyB7ZGl2aXNvcn0gKiB7Y3VycmVudCBxdW90
aWVudCBkaWdpdH0uCiAgICAgLy8gInYiIGlzIHRoZSBib29rJ3MgbmFtZSBmb3Ige2Rpdmlzb3J9
LCAicWhhdCIgdGhlIGN1cnJlbnQgcXVvdGllbnQgZGlnaXQuCi0gICAgSlNCaWdJbnQqIHFoYXR2
ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChleGVjLCBuICsgMSk7CisgICAgSlNCaWdJbnQqIHFoYXR2
ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChleGVjLCB2bSwgbiArIDEpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04oc2NvcGUsIHZvaWQoKSk7CiAgICAgCiAgICAgLy8gRDEuCkBAIC0xMTE5LDcgKzEx
MjgsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRlTGVmdFNoaWZ0QWx3YXlzQ29weShF
eGVjU3RhdGUqIGV4ZWMsIEpTQmlnSW50KiB4LCB1bgogCiAgICAgdW5zaWduZWQgbiA9IHgtPmxl
bmd0aCgpOwogICAgIHVuc2lnbmVkIHJlc3VsdExlbmd0aCA9IG1vZGUgPT0gTGVmdFNoaWZ0TW9k
ZTo6QWx3YXlzQWRkT25lRGlnaXQgPyBuICsgMSA6IG47Ci0gICAgSlNCaWdJbnQqIHJlc3VsdCA9
IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhlYywgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCog
cmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChleGVjLCBleGVjLT52bSgpLCByZXN1bHRMZW5n
dGgpOwogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIApAQCAtMTI0
MCw3ICsxMjQ5LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjphYnNvbHV0ZUFkZE9uZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTQmlnSW50KiB4LCBTaWduT3B0aW9uIHNpZ24KICAgICB9CiAKICAgICB1bnNp
Z25lZCByZXN1bHRMZW5ndGggPSBpbnB1dExlbmd0aCArIHdpbGxPdmVyZmxvdzsKLSAgICBKU0Jp
Z0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExlbmd0aChleGVjLCByZXN1bHRMZW5ndGgpOwor
ICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVhdGVXaXRoTGVuZ3RoKGV4ZWMsIGV4ZWMtPnZt
KCksIHJlc3VsdExlbmd0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCkBAIC0xMjY2LDcgKzEyNzUsNyBAQCBKU0JpZ0ludCogSlNCaWdJbnQ6OmFic29sdXRl
U3ViT25lKEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIHVuc2lnbmVkIHJlc3VsdAogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NP
UEUodm0pOwogCi0gICAgSlNCaWdJbnQqIHJlc3VsdCA9IHRyeUNyZWF0ZVdpdGhMZW5ndGgoZXhl
YywgcmVzdWx0TGVuZ3RoKTsKKyAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExl
bmd0aChleGVjLCB2bSwgcmVzdWx0TGVuZ3RoKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCBudWxscHRyKTsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHgtPmxlbmd0aCgpOwpAQCAt
MTMwNSw3ICsxMzE0LDcgQEAgSlNCaWdJbnQqIEpTQmlnSW50OjpsZWZ0U2hpZnRCeUFic29sdXRl
KEV4ZWNTdGF0ZSogZXhlYywgSlNCaWdJbnQqIHgsIEpTQmlnSW50KgogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKICAgICB9CiAKLSAgICBKU0JpZ0ludCogcmVzdWx0ID0gdHJ5Q3JlYXRlV2l0aExl
bmd0aChleGVjLCByZXN1bHRMZW5ndGgpOworICAgIEpTQmlnSW50KiByZXN1bHQgPSB0cnlDcmVh
dGVXaXRoTGVuZ3RoKGV4ZWMsIHZtLCByZXN1bHRMZW5ndGgpOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIG51bGxwdHIpOwogICAgIGlmICghYml0c1NoaWZ0KSB7CiAgICAgICAgIHVu
c2lnbmVkIGkgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNCaWdJbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQmlnSW50LmgKaW5k
ZXggZGJiZjYzZGVkMWMuLjdhMzJlNjYzMDA3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0JpZ0ludC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQmlnSW50LmgKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIFN0
cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBKU1ZhbHVlIHBy
b3RvdHlwZSk7CiAgICAgc3RhdGljIEpTQmlnSW50KiBjcmVhdGVaZXJvKFZNJik7Ci0gICAgc3Rh
dGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3RoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkIGxl
bmd0aCk7CisgICAgc3RhdGljIEpTQmlnSW50KiB0cnlDcmVhdGVXaXRoTGVuZ3RoKEV4ZWNTdGF0
ZSosIFZNJiwgdW5zaWduZWQgbGVuZ3RoKTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGNyZWF0ZVdp
dGhMZW5ndGhVbmNoZWNrZWQoVk0mLCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgc3RhdGljIEpT
QmlnSW50KiBjcmVhdGVGcm9tKFZNJiwgaW50MzJfdCB2YWx1ZSk7CkBAIC0xMTUsMTIgKzExNSwx
NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgQ29tcGFyaXNvblJlc3VsdCBzdGF0aWMgY29tcGFyZVRv
RG91YmxlKEpTQmlnSW50KiB4LCBkb3VibGUgeSk7CiAKLSAgICBzdGF0aWMgSlNCaWdJbnQqIGFk
ZChFeGVjU3RhdGUqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworICAgIHN0YXRpYyBKU0Jp
Z0ludCogYWRkKEV4ZWNTdGF0ZSosIFZNJiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKKwor
ICAgIHN0YXRpYyBKU0JpZ0ludCogdHJ5QWRkKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7CiAgICAgc3RhdGljIEpTQmlnSW50KiBzdWIoRXhlY1N0YXRlKiwgSlNCaWdJbnQq
IHgsIEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGRpdmlkZShFeGVjU3RhdGUq
LCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwogICAgIHN0YXRpYyBKU0JpZ0ludCogcmVtYWlu
ZGVyKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiB4LCBKU0JpZ0ludCogeSk7CiAgICAgc3RhdGljIEpT
QmlnSW50KiB1bmFyeU1pbnVzKFZNJiwgSlNCaWdJbnQqIHgpOwogCisgICAgc3RhdGljIEpTQmln
SW50KiB1bmNoZWNrZWRBZGQoVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOworCiAgICAg
c3RhdGljIEpTQmlnSW50KiBiaXR3aXNlQW5kKEV4ZWNTdGF0ZSosIEpTQmlnSW50KiB4LCBKU0Jp
Z0ludCogeSk7CiAgICAgc3RhdGljIEpTQmlnSW50KiBiaXR3aXNlT3IoRXhlY1N0YXRlKiwgSlNC
aWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKICAgICBzdGF0aWMgSlNCaWdJbnQqIGJpdHdpc2VYb3Io
RXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50KiB5KTsKQEAgLTIxOCw3ICsyMjIsNyBA
QCBwcml2YXRlOgogICAgIEpTQmlnSW50KiByaWdodFRyaW0oVk0mKTsKIAogICAgIHZvaWQgaW5w
bGFjZU11bHRpcGx5QWRkKERpZ2l0IG11bHRpcGxpZXIsIERpZ2l0IHBhcnQpOwotICAgIHN0YXRp
YyBKU0JpZ0ludCogYWJzb2x1dGVBZGQoRXhlY1N0YXRlKiwgSlNCaWdJbnQqIHgsIEpTQmlnSW50
KiB5LCBib29sIHJlc3VsdFNpZ24pOworICAgIHN0YXRpYyBKU0JpZ0ludCogYWJzb2x1dGVBZGQo
RXhlY1N0YXRlKiwgVk0mLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHksIGJvb2wgcmVzdWx0U2ln
bik7CiAgICAgc3RhdGljIEpTQmlnSW50KiBhYnNvbHV0ZVN1YihWTSYsIEpTQmlnSW50KiB4LCBK
U0JpZ0ludCogeSwgYm9vbCByZXN1bHRTaWduKTsKIAogICAgIHN0YXRpYyBKU0JpZ0ludCogbGVm
dFNoaWZ0QnlBYnNvbHV0ZShFeGVjU3RhdGUqLCBKU0JpZ0ludCogeCwgSlNCaWdJbnQqIHkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAppbmRleCA4MzZm
OTUzYzNhOC4uODcyNzVmMmU1ZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wZXJhdGlvbnMuY3BwCkBAIC03MSw3ICs3MSw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIGpz
QWRkU2xvd0Nhc2UoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIp
CiAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
fHwgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAg
ICAgICAgaWYgKFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYykg
JiYgV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpIHsKICAg
ICAgICAgICAgIHNjb3BlLnJlbGVhc2UoKTsKLSAgICAgICAgICAgIHJldHVybiBKU0JpZ0ludDo6
YWRkKGNhbGxGcmFtZSwgV1RGOjpnZXQ8SlNCaWdJbnQqPihsZWZ0TnVtZXJpYyksIFdURjo6Z2V0
PEpTQmlnSW50Kj4ocmlnaHROdW1lcmljKSk7CisgICAgICAgICAgICByZXR1cm4gSlNCaWdJbnQ6
OnRyeUFkZChjYWxsRnJhbWUsIFdURjo6Z2V0PEpTQmlnSW50Kj4obGVmdE51bWVyaWMpLCBXVEY6
OmdldDxKU0JpZ0ludCo+KHJpZ2h0TnVtZXJpYykpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgc2NvcGUsICJJbnZhbGlkIG1peCBvZiBCaWdJ
bnQgYW5kIG90aGVyIHR5cGUgaW4gYWRkaXRpb24uIl9zKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>