<?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>21404</bug_id>
          
          <creation_ts>2008-10-06 10:40:10 -0700</creation_ts>
          <short_desc>optimize op_jtrue, op_loop_if_true and op_not in various ways</short_desc>
          <delta_ts>2008-10-06 11:07:00 -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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>94240</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-06 10:40:10 -0700</bug_when>
    <thetext>It&apos;s possible to speed up opcodes that use toBoolean conversion in a number of ways:

        1) Make JSValue::toBoolean nonvirtual and completely inline by
        making use of the StructureID type field.

        2) Make JSValue::toBoolean not take an ExecState; doesn&apos;t need it.

        3) Make op_not, op_loop_if_true and op_jtrue not read the
        ExecState (toBoolean doesn&apos;t need it any more) and not check
        exceptions (toBoolean can&apos;t throw).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94241</commentid>
    <comment_count>1</comment_count>
      <attachid>24116</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-06 10:43:09 -0700</bug_when>
    <thetext>Created attachment 24116
speedup patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94242</commentid>
    <comment_count>2</comment_count>
      <attachid>24116</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-06 10:49:32 -0700</bug_when>
    <thetext>Comment on attachment 24116
speedup patch

r=me.  Please include the perf delta in the ChangeLog.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24116</attachid>
            <date>2008-10-06 10:43:09 -0700</date>
            <delta_ts>2008-10-06 10:49:32 -0700</delta_ts>
            <desc>speedup patch</desc>
            <filename>faster-toBoolean.txt</filename>
            <type>text/plain</type>
            <size>18254</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3MzMx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMDgtMTAt
MDYgIE1hY2llaiBTdGFjaG93aWFrICA8bWpzQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIC0gb3B0aW1pemUgb3BfanRy
dWUsIG9wX2xvb3BfaWZfdHJ1ZSBhbmQgb3Bfbm90IGluIHZhcmlvdXMgd2F5cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MDQKKyAgICAgICAgCisg
ICAgICAgIDEpIE1ha2UgSlNWYWx1ZTo6dG9Cb29sZWFuIG5vbnZpcnR1YWwgYW5kIGNvbXBsZXRl
bHkgaW5saW5lIGJ5CisgICAgICAgIG1ha2luZyB1c2Ugb2YgdGhlIFN0cnVjdHVyZUlEIHR5cGUg
ZmllbGQuCisgICAgICAgIAorICAgICAgICAyKSBNYWtlIEpTVmFsdWU6OnRvQm9vbGVhbiBub3Qg
dGFrZSBhbiBFeGVjU3RhdGU7IGRvZXNuJ3QgbmVlZCBpdC4KKyAgICAgICAgCisgICAgICAgIDMp
IE1ha2Ugb3Bfbm90LCBvcF9sb29wX2lmX3RydWUgYW5kIG9wX2p0cnVlIG5vdCByZWFkIHRoZQor
ICAgICAgICBFeGVjU3RhdGUgKHRvQm9vbGVhbiBkb2Vzbid0IG5lZWQgaXQgYW55IG1vcmUpIGFu
ZCBub3QgY2hlY2sKKyAgICAgICAgZXhjZXB0aW9ucyAodG9Cb29sZWFuIGNhbid0IHRocm93KS4K
KworICAgICAgICAqIEFQSS9KU1ZhbHVlUmVmLmNwcDoKKyAgICAgICAgKEpTVmFsdWVUb0Jvb2xl
YW4pOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBWTS9Db2RlQmxv
Y2suY3BwOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIFZNL01h
Y2hpbmUuY3BwOgorICAgICAgICAoSlNDOjpNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZSk6CisgICAg
ICAgIChKU0M6Ok1hY2hpbmU6OmN0aV9vcF9sb29wX2lmX3RydWUpOgorICAgICAgICAoSlNDOjpN
YWNoaW5lOjpjdGlfb3Bfbm90KToKKyAgICAgICAgKEpTQzo6TWFjaGluZTo6Y3RpX29wX2p0cnVl
KToKKyAgICAgICAgKiBranMvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjphcnJh
eVByb3RvRnVuY0ZpbHRlcik6CisgICAgICAgIChKU0M6OmFycmF5UHJvdG9GdW5jRXZlcnkpOgor
ICAgICAgICAoSlNDOjphcnJheVByb3RvRnVuY1NvbWUpOgorICAgICAgICAqIGtqcy9Cb29sZWFu
Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3RCb29sZWFuKToKKyAgICAg
ICAgKEpTQzo6Y2FsbEJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL0dldHRlclNl
dHRlci5oOgorICAgICAgICAqIGtqcy9KU0NlbGwuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
dG9Cb29sZWFuKToKKyAgICAgICAgKiBranMvSlNOdW1iZXJDZWxsLmNwcDoKKyAgICAgICAgKiBr
anMvSlNOdW1iZXJDZWxsLmg6CisgICAgICAgIChKU0M6OkpTTnVtYmVyQ2VsbDo6dG9Cb29sZWFu
KToKKyAgICAgICAgKiBranMvSlNPYmplY3QuY3BwOgorICAgICAgICAqIGtqcy9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6dG9Cb29sZWFuKToKKyAgICAgICAgKEpTQzo6SlND
ZWxsOjp0b0Jvb2xlYW4pOgorICAgICAgICAqIGtqcy9KU1N0cmluZy5jcHA6CisgICAgICAgICog
a2pzL0pTU3RyaW5nLmg6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjp0b0Jvb2xlYW4pOgorICAg
ICAgICAqIGtqcy9KU1ZhbHVlLmg6CisgICAgICAgICoga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6c2V0UmVnRXhwQ29uc3RydWN0b3JNdWx0aWxpbmUpOgorICAgICAg
ICAqIGtqcy9SZWdFeHBPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6Om1h
dGNoKToKKyAgICAgICAgKiBranMvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
cmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpOgorCiAyMDA4LTEwLTA2ICBBcml5YSBIaWRheWF0ICA8
YXJpeWEuaGlkYXlhdEB0cm9sbHRlY2guY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
LgpJbmRleDogSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
LmV4cAkocmV2aXNpb24gMzczMzEpCisrKyBKYXZhU2NyaXB0Q29yZS5leHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzNSw3ICszMzUsNiBAQCBfX1pOSzNKU0M4SlNPYmplY3Q4dG9OdW1iZXJFUE5TXzlF
eGVjU3RhCiBfX1pOSzNKU0M4SlNPYmplY3Q4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pO
SzNKU0M4SlNPYmplY3Q4dG9TdHJpbmdFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNKU0M4SlNPYmpl
Y3Q5Y2xhc3NOYW1lRXYKLV9fWk5LM0pTQzhKU09iamVjdDl0b0Jvb2xlYW5FUE5TXzlFeGVjU3Rh
dGVFCiBfX1pOSzNKU0M5Q29kZUJsb2NrMTdkZXJlZlN0cnVjdHVyZUlEc0VQTlNfMTFJbnN0cnVj
dGlvbkUKIF9fWk5LM0pTQzlIYXNoVGFibGUxMWNyZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0
YUUKIF9fWk5LM1dURjhDb2xsYXRvcjdjb2xsYXRlRVBLdG1TMl9tCkluZGV4OiBBUEkvSlNWYWx1
ZVJlZi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiAzNzMz
MSkKKysrIEFQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDExICsxODgs
OSBAQCBKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nKEpTQ29udGV4dFJlCiAgICAgcmV0dXJu
IHRvUmVmKGpzU3RyaW5nKGV4ZWMsIHN0cmluZy0+dXN0cmluZygpKSk7CiB9CiAKLWJvb2wgSlNW
YWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlKQorYm9vbCBK
U1ZhbHVlVG9Cb29sZWFuKEpTQ29udGV4dFJlZiwgSlNWYWx1ZVJlZiB2YWx1ZSkKIHsKLSAgICBF
eGVjU3RhdGUqIGV4ZWMgPSB0b0pTKGN0eCk7Ci0gICAgSlNWYWx1ZSoganNWYWx1ZSA9IHRvSlMo
dmFsdWUpOwotICAgIHJldHVybiBqc1ZhbHVlLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgcmV0dXJu
IHRvSlModmFsdWUpLT50b0Jvb2xlYW4oKTsKIH0KIAogZG91YmxlIEpTVmFsdWVUb051bWJlcihK
U0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24p
CkluZGV4OiBWTS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZNL0NvZGVCbG9jay5jcHAJ
KHJldmlzaW9uIDM3MzMxKQorKysgVk0vQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
ODEwLDEzICs4MTAsMTEgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBj
bwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90ZWFyX29m
Zl9hY3RpdmF0aW9uOiB7Ci0gICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsK
LSAgICAgICAgICAgIHByaW50ZigiWyU0ZF0gdGVhcl9vZmZfYWN0aXZhdGlvblx0ICVzXG4iLCBs
b2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5jX3N0cigpKTsKKyAgICAgICAgICAgIHByaW50Zigi
WyU0ZF0gdGVhcl9vZmZfYWN0aXZhdGlvblxuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hcmd1bWVudHM6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRm
KCJbJTRkXSB0ZWFyX29mZl9hcmd1bWVudHNcdCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFt
ZShyMCkuY19zdHIoKSk7CisgICAgICAgICAgICBwcmludGYoIlslNGRdIHRlYXJfb2ZmX2FyZ3Vt
ZW50c1xuIiwgbG9jYXRpb24pOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9yZXQ6IHsKSW5kZXg6IFZNL01hY2hpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFZN
L01hY2hpbmUuY3BwCShyZXZpc2lvbiAzNzMzMSkKKysrIFZNL01hY2hpbmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMTI3LDggKzIxMjcsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhl
Y3V0ZShFeGVjdXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBkc3QgPSAoKyt2UEMpLT51Lm9w
ZXJhbmQ7CiAgICAgICAgIGludCBzcmMgPSAoKyt2UEMpLT51Lm9wZXJhbmQ7Ci0gICAgICAgIEpT
VmFsdWUqIHJlc3VsdCA9IGpzQm9vbGVhbighcltzcmNdLmpzVmFsdWUoZXhlYyktPnRvQm9vbGVh
bihleGVjKSk7Ci0gICAgICAgIFZNX0NIRUNLX0VYQ0VQVElPTigpOworICAgICAgICBKU1ZhbHVl
KiByZXN1bHQgPSBqc0Jvb2xlYW4oIXJbc3JjXS5qc1ZhbHVlKGV4ZWMpLT50b0Jvb2xlYW4oKSk7
CiAgICAgICAgIHJbZHN0XSA9IHJlc3VsdDsKIAogICAgICAgICArK3ZQQzsKQEAgLTI5ODYsNyAr
Mjk4NSw3IEBAIEpTVmFsdWUqIE1hY2hpbmU6OnByaXZhdGVFeGVjdXRlKEV4ZWN1dGkKICAgICAg
ICAgICovCiAgICAgICAgIGludCBjb25kID0gKCsrdlBDKS0+dS5vcGVyYW5kOwogICAgICAgICBp
bnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpZiAocltjb25kXS5qc1Zh
bHVlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYykpIHsKKyAgICAgICAgaWYgKHJbY29uZF0uanNWYWx1
ZShleGVjKS0+dG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAg
ICAgICAgICBDSEVDS19GT1JfVElNRU9VVCgpOwogICAgICAgICAgICAgTkVYVF9PUENPREU7CkBA
IC0zMDAzLDcgKzMwMDIsNyBAQCBKU1ZhbHVlKiBNYWNoaW5lOjpwcml2YXRlRXhlY3V0ZShFeGVj
dXRpCiAgICAgICAgICovCiAgICAgICAgIGludCBjb25kID0gKCsrdlBDKS0+dS5vcGVyYW5kOwog
ICAgICAgICBpbnQgdGFyZ2V0ID0gKCsrdlBDKS0+dS5vcGVyYW5kOwotICAgICAgICBpZiAocltj
b25kXS5qc1ZhbHVlKGV4ZWMpLT50b0Jvb2xlYW4oZXhlYykpIHsKKyAgICAgICAgaWYgKHJbY29u
ZF0uanNWYWx1ZShleGVjKS0+dG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJn
ZXQ7CiAgICAgICAgICAgICBORVhUX09QQ09ERTsKICAgICAgICAgfQpAQCAtMzAxOSw3ICszMDE4
LDcgQEAgSlNWYWx1ZSogTWFjaGluZTo6cHJpdmF0ZUV4ZWN1dGUoRXhlY3V0aQogICAgICAgICAq
LwogICAgICAgICBpbnQgY29uZCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKICAgICAgICAgaW50IHRh
cmdldCA9ICgrK3ZQQyktPnUub3BlcmFuZDsKLSAgICAgICAgaWYgKCFyW2NvbmRdLmpzVmFsdWUo
ZXhlYyktPnRvQm9vbGVhbihleGVjKSkgeworICAgICAgICBpZiAoIXJbY29uZF0uanNWYWx1ZShl
eGVjKS0+dG9Cb29sZWFuKCkpIHsKICAgICAgICAgICAgIHZQQyArPSB0YXJnZXQ7CiAgICAgICAg
ICAgICBORVhUX09QQ09ERTsKICAgICAgICAgfQpAQCAtNDk4OCwxMSArNDk4Nyw3IEBAIGludCBN
YWNoaW5lOjpjdGlfb3BfbG9vcF9pZl90cnVlKENUSV9BUkcKIHsKICAgICBKU1ZhbHVlKiBzcmMx
ID0gQVJHX3NyYzE7CiAKLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLQotICAgIGJv
b2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29sZWFuKGV4ZWMpOwotICAgIFZNX0NIRUNLX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBzcmMxLT50b0Jvb2xl
YW4oKTsKIH0KIAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25lZ2F0ZShDVElfQVJHUykKQEAg
LTUxMTUsMjQgKzUxMTAsMTIgQEAgaW50IE1hY2hpbmU6OmN0aV9vcF9qbGVzcyhDVElfQVJHUykK
IAogSlNWYWx1ZSogTWFjaGluZTo6Y3RpX29wX25vdChDVElfQVJHUykKIHsKLSAgICBKU1ZhbHVl
KiBzcmMgPSBBUkdfc3JjMTsKLQotICAgIEV4ZWNTdGF0ZSogZXhlYyA9IEFSR19leGVjOwotCi0g
ICAgSlNWYWx1ZSogcmVzdWx0ID0ganNCb29sZWFuKCFzcmMtPnRvQm9vbGVhbihleGVjKSk7Ci0g
ICAgVk1fQ0hFQ0tfRVhDRVBUSU9OX0FUX0VORCgpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAg
cmV0dXJuIGpzQm9vbGVhbighQVJHX3NyYzEtPnRvQm9vbGVhbigpKTsKIH0KIAogaW50IFNGWF9D
QUxMIE1hY2hpbmU6OmN0aV9vcF9qdHJ1ZShDVElfQVJHUykKIHsKLSAgICBKU1ZhbHVlKiBzcmMx
ID0gQVJHX3NyYzE7Ci0KLSAgICBFeGVjU3RhdGUqIGV4ZWMgPSBBUkdfZXhlYzsKLQotICAgIGJv
b2wgcmVzdWx0ID0gc3JjMS0+dG9Cb29sZWFuKGV4ZWMpOwotICAgIFZNX0NIRUNLX0VYQ0VQVElP
Tl9BVF9FTkQoKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBBUkdfc3JjMS0+dG9C
b29sZWFuKCk7CiB9CiAKIEpTVmFsdWUqIE1hY2hpbmU6OmN0aV9vcF9wb3N0X2luYyhDVElfQVJH
UykKSW5kZXg6IGtqcy9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0FycmF5
UHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzczMzEpCisrKyBranMvQXJyYXlQcm90b3R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01ODIsNyArNTgyLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1
bmNGaWx0ZXIoRXhlY1N0YXRlKgogCiAgICAgICAgIEpTVmFsdWUqIHJlc3VsdCA9IGNhbGwoZXhl
YywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlzLCBlYWNoQXJndW1lbnRz
KTsKIAotICAgICAgICBpZiAocmVzdWx0LT50b0Jvb2xlYW4oZXhlYykpCisgICAgICAgIGlmIChy
ZXN1bHQtPnRvQm9vbGVhbigpKQogICAgICAgICAgICAgcmVzdWx0QXJyYXktPnB1dChleGVjLCBm
aWx0ZXJJbmRleCsrLCB2KTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdEFycmF5OwpAQCAtNjU2
LDcgKzY1Niw3IEBAIEpTVmFsdWUqIGFycmF5UHJvdG9GdW5jRXZlcnkoRXhlY1N0YXRlKiAKICAg
ICAgICAgZWFjaEFyZ3VtZW50cy5hcHBlbmQoanNOdW1iZXIoZXhlYywgaykpOwogICAgICAgICBl
YWNoQXJndW1lbnRzLmFwcGVuZCh0aGlzT2JqKTsKIAotICAgICAgICBib29sIHByZWRpY2F0ZVJl
c3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlUaGlz
LCBlYWNoQXJndW1lbnRzKS0+dG9Cb29sZWFuKGV4ZWMpOworICAgICAgICBib29sIHByZWRpY2F0
ZVJlc3VsdCA9IGNhbGwoZXhlYywgZnVuY3Rpb24sIGNhbGxUeXBlLCBjYWxsRGF0YSwgYXBwbHlU
aGlzLCBlYWNoQXJndW1lbnRzKS0+dG9Cb29sZWFuKCk7CiAKICAgICAgICAgaWYgKCFwcmVkaWNh
dGVSZXN1bHQpIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGpzQm9vbGVhbihmYWxzZSk7CkBAIC03
MjAsNyArNzIwLDcgQEAgSlNWYWx1ZSogYXJyYXlQcm90b0Z1bmNTb21lKEV4ZWNTdGF0ZSogZQog
ICAgICAgICBlYWNoQXJndW1lbnRzLmFwcGVuZChqc051bWJlcihleGVjLCBrKSk7CiAgICAgICAg
IGVhY2hBcmd1bWVudHMuYXBwZW5kKHRoaXNPYmopOwogCi0gICAgICAgIGJvb2wgcHJlZGljYXRl
UmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBseVRo
aXMsIGVhY2hBcmd1bWVudHMpLT50b0Jvb2xlYW4oZXhlYyk7CisgICAgICAgIGJvb2wgcHJlZGlj
YXRlUmVzdWx0ID0gY2FsbChleGVjLCBmdW5jdGlvbiwgY2FsbFR5cGUsIGNhbGxEYXRhLCBhcHBs
eVRoaXMsIGVhY2hBcmd1bWVudHMpLT50b0Jvb2xlYW4oKTsKIAogICAgICAgICBpZiAocHJlZGlj
YXRlUmVzdWx0KSB7CiAgICAgICAgICAgICByZXN1bHQgPSBqc0Jvb2xlYW4odHJ1ZSk7CkluZGV4
OiBranMvQm9vbGVhbkNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvQm9vbGVhbkNv
bnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzczMzEpCisrKyBranMvQm9vbGVhbkNvbnN0cnVjdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBCb29sZWFuQ29uc3RydWN0b3I6
OkJvb2xlYW5Db25zdHJ1Y3RvcihFCiBKU09iamVjdCogY29uc3RydWN0Qm9vbGVhbihFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgQm9vbGVhbk9iamVjdCogb2Jq
ID0gbmV3IChleGVjKSBCb29sZWFuT2JqZWN0KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+
Ym9vbGVhbk9iamVjdFN0cnVjdHVyZSgpKTsKLSAgICBvYmotPnNldEludGVybmFsVmFsdWUoanNC
b29sZWFuKGFyZ3MuYXQoZXhlYywgMCktPnRvQm9vbGVhbihleGVjKSkpOworICAgIG9iai0+c2V0
SW50ZXJuYWxWYWx1ZShqc0Jvb2xlYW4oYXJncy5hdChleGVjLCAwKS0+dG9Cb29sZWFuKCkpKTsK
ICAgICByZXR1cm4gb2JqOwogfQogCkBAIC01OSw3ICs1OSw3IEBAIENvbnN0cnVjdFR5cGUgQm9v
bGVhbkNvbnN0cnVjdG9yOjpnZXRDb24KIC8vIEVDTUEgMTUuNi4xCiBzdGF0aWMgSlNWYWx1ZSog
Y2FsbEJvb2xlYW5Db25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1
ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihhcmdzLmF0
KGV4ZWMsIDApLT50b0Jvb2xlYW4oZXhlYykpOworICAgIHJldHVybiBqc0Jvb2xlYW4oYXJncy5h
dChleGVjLCAwKS0+dG9Cb29sZWFuKCkpOwogfQogCiBDYWxsVHlwZSBCb29sZWFuQ29uc3RydWN0
b3I6OmdldENhbGxEYXRhKENhbGxEYXRhJiBjYWxsRGF0YSkKSW5kZXg6IGtqcy9HZXR0ZXJTZXR0
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBranMvR2V0dGVyU2V0dGVyLmgJKHJldmlzaW9uIDM3MzMxKQor
Kysga2pzL0dldHRlclNldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgSlNWYWx1ZSogdG9QcmltaXRpdmUoRXhl
Y1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIsIEpTVmFs
dWUqJiB2YWx1ZSk7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikg
Y29uc3Q7CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAg
ICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUqKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBVU3RyaW5nIHRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFs
IEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IGtqcy9KU0NlbGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBranMvSlNDZWxsLmgJKHJldmlzaW9uIDM3MzMxKQorKysga2pzL0pT
Q2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3ICs3Miw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAvLyBCYXNpYyBjb252ZXJzaW9ucy4KICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdCA9IDA7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91
YmxlJiBudW1iZXIsIEpTVmFsdWUqJikgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29s
ZWFuKEV4ZWNTdGF0ZSopIGNvbnN0ID0gMDsKKyAgICAgICAgYm9vbCB0b0Jvb2xlYW4oKSBjb25z
dDsKICAgICAgICAgdmlydHVhbCBkb3VibGUgdG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3QgPSAw
OwogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b09iamVjdChFeGVjU3RhdGUqKSBjb25zdCA9
IDA7CkBAIC0yNzIsOSArMjcyLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBh
c0NlbGwoKS0+Z2V0UHJpbWl0aXZlTnVtYmVyKGV4ZWMsIG51bWJlciwgdmFsdWUpOwogICAgIH0K
IAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OnRvQm9vbGVhbihFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6dG9Cb29sZWFuKCkgY29uc3QKICAgICB7Ci0g
ICAgICAgIHJldHVybiBKU0ltbWVkaWF0ZTo6aXNJbW1lZGlhdGUodGhpcykgPyBKU0ltbWVkaWF0
ZTo6dG9Cb29sZWFuKHRoaXMpIDogYXNDZWxsKCktPnRvQm9vbGVhbihleGVjKTsKKyAgICAgICAg
cmV0dXJuIEpTSW1tZWRpYXRlOjppc0ltbWVkaWF0ZSh0aGlzKSA/IEpTSW1tZWRpYXRlOjp0b0Jv
b2xlYW4odGhpcykgOiBhc0NlbGwoKS0+dG9Cb29sZWFuKCk7CiAgICAgfQogCiAgICAgQUxXQVlT
X0lOTElORSBkb3VibGUgSlNWYWx1ZTo6dG9OdW1iZXIoRXhlY1N0YXRlKiBleGVjKSBjb25zdApJ
bmRleDoga2pzL0pTTnVtYmVyQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTTnVtYmVyQ2Vs
bC5jcHAJKHJldmlzaW9uIDM3MzMxKQorKysga2pzL0pTTnVtYmVyQ2VsbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwLDExICs0MCw2IEBAIGJvb2wgSlNOdW1iZXJDZWxsOjpnZXRQcmltaXRpdmVO
dW1iZXIoRXgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBKU051bWJlckNlbGw6OnRvQm9v
bGVhbihFeGVjU3RhdGUqKSBjb25zdAotewotICAgIHJldHVybiBtX3ZhbHVlIDwgMC4wIHx8IG1f
dmFsdWUgPiAwLjA7IC8vIGZhbHNlIGZvciBOYU4KLX0KLQogZG91YmxlIEpTTnVtYmVyQ2VsbDo6
dG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3QKIHsKICAgcmV0dXJuIG1fdmFsdWU7CkluZGV4OiBr
anMvSlNOdW1iZXJDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTTnVtYmVyQ2VsbC5oCShyZXZp
c2lvbiAzNzMzMSkKKysrIGtqcy9KU051bWJlckNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTIs
NyArNTIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYg
bnVtYmVyLCBKU1ZhbHVlKiYgdmFsdWUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFu
KEV4ZWNTdGF0ZSopIGNvbnN0OworICAgICAgICBib29sIHRvQm9vbGVhbigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUgPCAwLjAgfHwgbV92YWx1ZSA+IDAuMDsgLyogZmFsc2UgZm9yIE5hTiAqLyB9
CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmcoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDoga2pz
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNPYmplY3QuY3BwCShyZXZpc2lvbiAz
NzMzMSkKKysrIGtqcy9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzMCwxMSArNDMw
LDYgQEAgdm9pZCBKU09iamVjdDo6Z2V0UHJvcGVydHlOYW1lcyhFeGVjU3RhdAogICAgIG1fc3Ry
dWN0dXJlSUQtPmdldEVudW1lcmFibGVQcm9wZXJ0eU5hbWVzKGV4ZWMsIHByb3BlcnR5TmFtZXMs
IHRoaXMpOwogfQogCi1ib29sIEpTT2JqZWN0Ojp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3QK
LXsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogZG91YmxlIEpTT2JqZWN0Ojp0b051bWJlcihFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgSlNWYWx1ZSogcHJpbWl0aXZlID0gdG9QcmltaXRp
dmUoZXhlYywgUHJlZmVyTnVtYmVyKTsKSW5kZXg6IGtqcy9KU09iamVjdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9KU09iamVjdC5oCShyZXZpc2lvbiAzNzMzMSkKKysrIGtqcy9KU09iamVjdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiQ29tbW9uSWRlbnRpZmll
cnMuaCIKICNpbmNsdWRlICJFeGVjU3RhdGUuaCIKICNpbmNsdWRlICJKU051bWJlckNlbGwuaCIK
KyNpbmNsdWRlICJKU1N0cmluZy5oIgogI2luY2x1ZGUgIlByb3BlcnR5TWFwLmgiCiAjaW5jbHVk
ZSAiUHJvcGVydHlTbG90LmgiCiAjaW5jbHVkZSAiUHV0UHJvcGVydHlTbG90LmgiCkBAIC0xMDks
NyArMTEwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBKU1ZhbHVlKiB0
b1ByaW1pdGl2ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJl
bmNlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBib29sIGdldFByaW1pdGl2ZU51bWJlcihFeGVj
U3RhdGUqLCBkb3VibGUmIG51bWJlciwgSlNWYWx1ZSomIHZhbHVlKTsKLSAgICAgICAgdmlydHVh
bCBib29sIHRvQm9vbGVhbihFeGVjU3RhdGUqKSBjb25zdDsKKyAgICAgICAgYm9vbCB0b0Jvb2xl
YW4oKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgZG91YmxlIHRvTnVt
YmVyKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFVTdHJpbmcgdG9TdHJpbmco
RXhlY1N0YXRlKikgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvT2JqZWN0KEV4
ZWNTdGF0ZSopIGNvbnN0OwpAQCAtMjQ2LDYgKzI0NywxNyBAQCBpbmxpbmUgYm9vbCBKU0NlbGw6
OmlzT2JqZWN0KGNvbnN0IENsYXNzCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCitpbmxpbmUgYm9v
bCBKU0NlbGw6OnRvQm9vbGVhbigpIGNvbnN0Cit7CisgICAgSlNUeXBlIHR5cGUgPSBzdHJ1Y3R1
cmVJRCgpLT50eXBlSW5mbygpLnR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBOdW1iZXJUeXBlKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNOdW1iZXJDZWxsKj4odGhpcyktPnRv
Qm9vbGVhbigpOworICAgIGlmICh0eXBlID09IE9iamVjdFR5cGUpCisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxjb25zdCBKU09iamVjdCo+KHRoaXMpLT50b0Jvb2xlYW4oKTsKKyAgICBBU1NF
UlQodHlwZSA9PSBTdHJpbmdUeXBlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgSlNT
dHJpbmcqPih0aGlzKS0+dG9Cb29sZWFuKCk7Cit9CisKIC8vIHRoaXMgbWV0aG9kIGlzIGhlcmUg
dG8gYmUgYWZ0ZXIgdGhlIGlubGluZSBkZWNsYXJhdGlvbiBvZiBKU0NlbGw6OmlzT2JqZWN0CiBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc09iamVjdChjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbykg
Y29uc3QKIHsKSW5kZXg6IGtqcy9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTU3Ry
aW5nLmNwcAkocmV2aXNpb24gMzczMzEpCisrKyBranMvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00MiwxMSArNDIsNiBAQCBib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIo
RXhlY1N0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4o
RXhlY1N0YXRlKikgY29uc3QKLXsKLSAgICByZXR1cm4gIW1fdmFsdWUuaXNFbXB0eSgpOwotfQot
CiBkb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fdmFsdWUudG9Eb3VibGUoKTsKSW5kZXg6IGtqcy9KU1N0cmluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9KU1N0cmluZy5oCShyZXZpc2lvbiAzNzMzMSkKKysrIGtqcy9KU1N0cmluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBjcmVhdGVTdHJ1Y3R1cmVJRChKU1ZhbHVl
KiBwcm90bykgeyByZXR1cm4gU3RydWN0dXJlSUQ6OmNyZWF0ZShwcm90bywgVHlwZUluZm8oU3Ry
aW5nVHlwZSwgTmVlZHNUaGlzQ29udmVyc2lvbikpOyB9CiAKKyAgICAgICAgYm9vbCB0b0Jvb2xl
YW4oKSBjb25zdCB7IHJldHVybiAhbV92YWx1ZS5pc0VtcHR5KCk7IH0KKwogICAgIHByaXZhdGU6
CiAgICAgICAgIGVudW0gVlB0clN0ZWFsaW5nSGFja1R5cGUgeyBWUHRyU3RlYWxpbmdIYWNrIH07
CiAgICAgICAgIEpTU3RyaW5nKFZQdHJTdGVhbGluZ0hhY2tUeXBlKSAKQEAgLTEwMSw3ICsxMDMs
NiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUqIHRvUHJpbWl0
aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVy
LCBKU1ZhbHVlKiYgdmFsdWUpOwotICAgICAgICB2aXJ0dWFsIGJvb2wgdG9Cb29sZWFuKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGRvdWJsZSB0b051bWJlcihFeGVjU3RhdGUq
KSBjb25zdDsKICAgICAgICAgdmlydHVhbCBKU09iamVjdCogdG9PYmplY3QoRXhlY1N0YXRlKikg
Y29uc3Q7CiAgICAgICAgIHZpcnR1YWwgVVN0cmluZyB0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25z
dDsKSW5kZXg6IGtqcy9KU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTVmFsdWUuaAkocmV2
aXNpb24gMzczMzEpCisrKyBranMvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5
Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBKU1ZhbHVlKiB0b1ByaW1pdGl2ZShFeGVj
U3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlID0gTm9QcmVmZXJlbmNlKSBjb25zdDsKICAg
ICAgICAgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1iZXIs
IEpTVmFsdWUqJik7CiAKLSAgICAgICAgYm9vbCB0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uc3Q7
CisgICAgICAgIGJvb2wgdG9Cb29sZWFuKCkgY29uc3Q7CiAKICAgICAgICAgLy8gdG9OdW1iZXIg
Y29udmVyc2lvbiBpcyBleHBlY3RlZCB0byBiZSBzaWRlIGVmZmVjdCBmcmVlIGlmIGFuIGV4Y2Vw
dGlvbiBoYXMKICAgICAgICAgLy8gYmVlbiBzZXQgaW4gdGhlIEV4ZWNTdGF0ZSBhbHJlYWR5LgpJ
bmRleDoga2pzL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvUmVnRXhw
Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzMzMSkKKysrIGtqcy9SZWdFeHBDb25zdHJ1Y3Rv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSw5ICszMTEsOSBAQCB2b2lkIHNldFJlZ0V4cENv
bnN0cnVjdG9ySW5wdXQoRXhlY1N0YXRlCiAgICAgc3RhdGljX2Nhc3Q8UmVnRXhwQ29uc3RydWN0
b3IqPihiYXNlT2JqZWN0KS0+c2V0SW5wdXQodmFsdWUtPnRvU3RyaW5nKGV4ZWMpKTsKIH0KIAot
dm9pZCBzZXRSZWdFeHBDb25zdHJ1Y3Rvck11bHRpbGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBKU1ZhbHVlKiB2YWx1ZSkKK3ZvaWQgc2V0UmVnRXhwQ29uc3RydWN0
b3JNdWx0aWxpbmUoRXhlY1N0YXRlKiwgSlNPYmplY3QqIGJhc2VPYmplY3QsIEpTVmFsdWUqIHZh
bHVlKQogewotICAgIHN0YXRpY19jYXN0PFJlZ0V4cENvbnN0cnVjdG9yKj4oYmFzZU9iamVjdCkt
PnNldE11bHRpbGluZSh2YWx1ZS0+dG9Cb29sZWFuKGV4ZWMpKTsKKyAgICBzdGF0aWNfY2FzdDxS
ZWdFeHBDb25zdHJ1Y3Rvcio+KGJhc2VPYmplY3QpLT5zZXRNdWx0aWxpbmUodmFsdWUtPnRvQm9v
bGVhbigpKTsKIH0KICAgCiAvLyBFQ01BIDE1LjEwLjQKSW5kZXg6IGtqcy9SZWdFeHBPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtqcy9SZWdFeHBPYmplY3QuY3BwCShyZXZpc2lvbiAzNzMzMSkK
KysrIGtqcy9SZWdFeHBPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcg
QEAgYm9vbCBSZWdFeHBPYmplY3Q6Om1hdGNoKEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgYm9vbCBnbG9iYWwgPSBnZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygp
Lmdsb2JhbCktPnRvQm9vbGVhbihleGVjKTsKKyAgICBib29sIGdsb2JhbCA9IGdldChleGVjLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkuZ2xvYmFsKS0+dG9Cb29sZWFuKCk7CiAgICAgaW50IGxhc3RJ
bmRleCA9IDA7CiAgICAgaWYgKGdsb2JhbCkgewogICAgICAgICBpZiAoZC0+bGFzdEluZGV4IDwg
MCB8fCBkLT5sYXN0SW5kZXggPiBpbnB1dC5zaXplKCkpIHsKSW5kZXg6IGtqcy9SZWdFeHBQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9SZWdFeHBQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAzNzMzMSkKKysrIGtqcy9SZWdFeHBQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDYsMTEgKzEwNiwxMSBAQCBKU1ZhbHVlKiByZWdFeHBQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3Rh
CiAKICAgICBVU3RyaW5nIHJlc3VsdCA9ICIvIiArIHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+
KHRoaXNWYWx1ZSktPmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuc291cmNlKS0+dG9T
dHJpbmcoZXhlYyk7CiAgICAgcmVzdWx0LmFwcGVuZCgnLycpOwotICAgIGlmIChzdGF0aWNfY2Fz
dDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmdsb2JhbCktPnRvQm9vbGVhbihleGVjKSkKKyAgICBpZiAoc3RhdGljX2Nhc3Q8UmVnRXhw
T2JqZWN0Kj4odGhpc1ZhbHVlKS0+Z2V0KGV4ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5nbG9i
YWwpLT50b0Jvb2xlYW4oKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgnZycpOwotICAgIGlmIChz
dGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5nZXQoZXhlYywgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmlnbm9yZUNhc2UpLT50b0Jvb2xlYW4oZXhlYykpCisgICAgaWYgKHN0YXRp
Y19jYXN0PFJlZ0V4cE9iamVjdCo+KHRoaXNWYWx1ZSktPmdldChleGVjLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuaWdub3JlQ2FzZSktPnRvQm9vbGVhbigpKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCdpJyk7Ci0gICAgaWYgKHN0YXRpY19jYXN0PFJlZ0V4cE9iamVjdCo+KHRoaXNWYWx1ZSktPmdl
dChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubXVsdGlsaW5lKS0+dG9Cb29sZWFuKGV4ZWMp
KQorICAgIGlmIChzdGF0aWNfY2FzdDxSZWdFeHBPYmplY3QqPih0aGlzVmFsdWUpLT5nZXQoZXhl
YywgZXhlYy0+cHJvcGVydHlOYW1lcygpLm11bHRpbGluZSktPnRvQm9vbGVhbigpKQogICAgICAg
ICByZXN1bHQuYXBwZW5kKCdtJyk7CiAgICAgcmV0dXJuIGpzTm9udHJpdmlhbFN0cmluZyhleGVj
LCByZXN1bHQpOwogfQo=
</data>
<flag name="review"
          id="10941"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>