<?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>125755</bug_id>
          
          <creation_ts>2013-12-14 22:04:04 -0800</creation_ts>
          <short_desc>FTL: a + b overflow check shouldn&apos;t keep both a and b alive on the exit path if they wouldn&apos;t have otherwise both been live</short_desc>
          <delta_ts>2014-01-10 20:26:43 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>126545</dup_id>
          
          <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>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>959908</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 22:04:04 -0800</bug_when>
    <thetext>Consider that we have a program like:

    return a + b

Currently we&apos;ll emit code like:

    movl %ecx, %rax
    addl %edx, %rax
    jo slow

Note the movl.  That&apos;s there because the OSR exit slow path will want both a and b, and so the result of the addition must go into a different register than either of the inputs.

But we could fix that if the OSR exit path undid the addition:

    %result = @llvm.sadd.with.overflow(%a, %b)
    if (extract %result, 1)
        exit(%a, %result - %a)

In this case, we can do an addl that destroys %b.

I&apos;ve written some code at the FTL lowering level that does this, and it does seem to remove a bunch of movl&apos;s from the code for V8v7/crypto&apos;s am3() function.  But it&apos;s not an overall speed-up.  I suspect it would be better to do this optimization in LLVM.  It&apos;s pretty weird to do this at the time of LLVM IR generation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>959909</commentid>
    <comment_count>1</comment_count>
      <attachid>219271</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-12-14 22:05:36 -0800</bug_when>
    <thetext>Created attachment 219271
the patch

I don&apos;t think this works yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>966739</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-01-10 20:26:43 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 126545 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>219271</attachid>
            <date>2013-12-14 22:05:36 -0800</date>
            <delta_ts>2013-12-14 22:05:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>17752</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYwNjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBA
CisyMDEzLTEyLTE0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMOiBhICsgYiBvdmVyZmxvdyBjaGVjayBzaG91bGRuJ3Qga2VlcCBib3RoIGEgYW5kIGIgYWxp
dmUgb24gdGhlIGV4aXQgcGF0aCBpZiB0aGV5IHdvdWxkbid0IGhhdmUgb3RoZXJ3aXNlIGJvdGgg
YmVlbiBsaXZlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMjU3NTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIFRoaXMgZG9lc24ndCBsZWFkIHRvIGEgc3BlZWQtdXAuIEJ1dCBtYXliZSBpdCB3
aWxsIGRvIHNvIGluIHRoZSBmdXR1cmUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkU3ViKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudCk6CisgICAgICAgICog
ZnRsL0ZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpS
ZWNvdmVyeU92ZXJyaWRlOjp+UmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgIChKU0M6OkZUTDo6
QWRkUmVjb3ZlcnlPdmVycmlkZTo6fkFkZFJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlND
OjpGVEw6OkFkZFJlY292ZXJ5T3ZlcnJpZGU6OnRyeU92ZXJyaWRlSW1wbCk6CisgICAgICAgIChK
U0M6OkZUTDo6U3ViUmVjb3ZlcnlPdmVycmlkZTo6flN1YlJlY292ZXJ5T3ZlcnJpZGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OlN1YlJlY292ZXJ5T3ZlcnJpZGU6OnRyeU92ZXJyaWRlSW1wbCk6Cisg
ICAgICAgICogZnRsL0ZUTFJlY292ZXJ5T3ZlcnJpZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkZUTDo6UmVjb3ZlcnlPdmVycmlkZTo6UmVjb3ZlcnlPdmVycmlkZSk6CisgICAgICAgIChKU0M6
OkZUTDo6UmVjb3ZlcnlPdmVycmlkZTo6dHJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpGVEw6
OlJlY292ZXJ5T3ZlcnJpZGU6Om5leHQpOgorICAgICAgICAoSlNDOjpGVEw6OkFkZFJlY292ZXJ5
T3ZlcnJpZGU6OkFkZFJlY292ZXJ5T3ZlcnJpZGUpOgorICAgICAgICAoSlNDOjpGVEw6OlN1YlJl
Y292ZXJ5T3ZlcnJpZGU6OlN1YlJlY292ZXJ5T3ZlcnJpZGUpOgorCiAyMDEzLTEyLTE0ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRlRMIHNob3VsZCAqcmVhbGx5
KiBrbm93IHdoZW4gdGhpbmdzIGFyZSBmbHVzaGVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTYwNjA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI2
Nyw2ICsyNjcsOCBAQAogCQkwRjY2NkVDRDE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0
aW9uRm9yVmFsaWRhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjY2NkVDQjE4MzZCMzdFMDBEMDE3RjEgLyogREZHUmVzdXJyZWN0aW9u
Rm9yVmFsaWRhdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNjZF
MTY4MTRERjNGMTMwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2NkUxNkMxNERGM0YxNjAwQjdC
MkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNjZFMTY5MTRERjNGMTMwMEI3QjJFNCAvKiBERkdFZGdlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEY2QjFDQjExODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQUYxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJl
Y292ZXJ5T3ZlcnJpZGUuY3BwICovOyB9OworCQkwRjZCMUNCMjE4NUQ1OTZCMDA4NDVEOTcgLyog
RlRMUmVjb3ZlcnlPdmVycmlkZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY2QjFDQjAxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJp
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNzAyNUE3MTcx
NEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwICovOyB9OwogCQkw
RjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjcwMjVBODE3MTRC
MEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY3MTRDQTQxNkVBOTJGMDAwRjNF
QkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY3MTRDQTExNkVBOTJFRDAwRjNFQkVCIC8q
IERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwICovOyB9OwpAQCAtMTU3OSw2ICsxNTgx
LDggQEAKIAkJMEY2NjZFQ0IxODM2QjM3RTAwRDAxN0YxIC8qIERGR1Jlc3VycmVjdGlvbkZvclZh
bGlkYXRpb25QaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdSZXN1
cnJlY3Rpb25Gb3JWYWxpZGF0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdSZXN1cnJlY3Rpb25G
b3JWYWxpZGF0aW9uUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUx
NjgxNERGM0YxMzAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQWRqYWNlbmN5TGlzdC5oOyBwYXRoID0gZGZnL0RGR0FkamFj
ZW5jeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2NkUxNjkxNERGM0Yx
MzAwQjdCMkU0IC8qIERGR0VkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHRWRnZS5oOyBwYXRoID0gZGZnL0RGR0VkZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEY2QjFDQUYxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMUmVjb3ZlcnlPdmVycmlk
ZS5jcHA7IHBhdGggPSBmdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGNkIxQ0IwMTg1RDU5NkIwMDg0NUQ5NyAvKiBGVExSZWNvdmVyeU92
ZXJyaWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFJlY292ZXJ5T3Zl
cnJpZGUuaDsgcGF0aCA9IGZ0bC9GVExSZWNvdmVyeU92ZXJyaWRlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNzAyNUE3MTcxNEIwRjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjcwMjVBODE3MTRCMEY4
MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RjcxNENBMTE2RUE5MkVEMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdCYWNrd2FyZHNQcm9w
YWdhdGlvblBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI4NzQsNiArMjg3OCw4IEBACiAJ
CQkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oICovLAog
CQkJCTBGRUEwQTI5MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwICovLAogCQkJCTBG
RUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAqLywKKwkJCQkwRjZCMUNBRjE4
NUQ1OTZCMDA4NDVEOTcgLyogRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHAgKi8sCisJCQkJMEY2QjFD
QjAxODVENTk2QjAwODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuaCAqLywKIAkJCQkwRkNF
RkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovLAogCQkJCTBGQ0VG
QUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovLAogCQkJCTBGMjVGMUFB
MTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwICovLApAQCAtNDU1OSw2ICs0
NTY1LDcgQEAKIAkJCQlDMjREMzFFMzE2MUNENjk1MDAyQUE0REIgLyogSGVhcFN0YXRpc3RpY3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMxMTgzNTY2RjkwMEQwMTdGMSAvKiBGdWxsQnl0
ZWNvZGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFNTI2QkUxNTkwRUYwMDAwNTRF
NDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QjFDQjIxODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4
MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQzI1RjhCQ0UxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC01NDQ3LDYgKzU0NTQsNyBAQAogCQkJCUMyOTgxRkQ4MTdC
QUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzI5ODFGREMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXcml0ZUJhcnJp
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBE
RkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEY2QjFDQjExODVENTk2QjAw
ODQ1RDk3IC8qIEZUTFJlY292ZXJ5T3ZlcnJpZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
ODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkYwRjE5RTE2QjcyQTBCMDA1REY5NUIgLyogREZHRWRnZS5jcHAgaW4gU291
cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNjA2MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBA
QAogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWRO
b2RlVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExSZWNvdmVy
eU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgpAQCAtNzQsNiArNzUsNyBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9oZWFwcyhzdGF0ZS5jb250ZXh0KQogICAgICAgICAsIG1fb3V0KHN0
YXRlLmNvbnRleHQpCiAgICAgICAgICwgbV9hdmFpbGFiaWxpdHkoT3BlcmFuZHNMaWtlLCBzdGF0
ZS5ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fb3ZlcnJpZGUo
MCkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgICAgICAsIG1faW50ZXJwcmV0
ZXIoc3RhdGUuZ3JhcGgsIG1fc3RhdGUpCiAgICAgICAgICwgbV9zdGFja21hcElEcygwKQpAQCAt
NTA0LDYgKzUwNiw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0
cykKICAgICAgICAgICAgIG1faW50ZXJwcmV0ZXIuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsK
ICAgICAgICAgCisgICAgICAgIEFTU0VSVCghbV9vdmVycmlkZSk7CisgICAgICAgIAogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTcxOCw4ICs3MjIsNDUgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGlzU3ViID8gbV9vdXQu
c3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpIDogbV9vdXQuYWRkV2l0aE92ZXJmbG93MzIo
bGVmdCwgcmlnaHQpOwotCi0gICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUo
KSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlY292ZXJ5T3ZlcnJp
ZGU+IHJlY292ZXJ5OworICAgICAgICAgICAgICAgIGlmIChmYWxzZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoaXNTdWIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
PmNoaWxkMigpLmRvZXNLaWxsKCkgJiYgIW1fbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0IC0gcmlnaHQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAtIHJpZ2h0ID0gcmVzdWx0IC0gbGVmdAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJpZ2h0ID0gbGVmdCAtIHJlc3VsdAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY292ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJS
ZWNvdmVyeU92ZXJyaWRlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVy
cmlkZSwgbV9ub2RlLT5jaGlsZDIoKS5ub2RlKCksIFZhbHVlRm9ybWF0SW50MzIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQs
IDApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9ub2RlLT5jaGlsZDEo
KS5kb2VzS2lsbCgpICYmICFtX25vZGUtPmNoaWxkMSgpLT5oYXNDb25zdGFudCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzdWx0ID0gbGVmdCAtIHJpZ2h0CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gbGVmdCA9IHJlc3VsdCArIHJpZ2h0CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmVjb3ZlcnkgPSBzdGQ6Om1ha2VfdW5pcXVlPEFkZFJlY292ZXJ5
T3ZlcnJpZGU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX292ZXJyaWRlLCBt
X25vZGUtPmNoaWxkMSgpLm5vZGUoKSwgVmFsdWVGb3JtYXRJbnQzMiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmlnaHQsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLmRvZXNLaWxsKCkg
JiYgIW1fbm9kZS0+Y2hpbGQyKCktPmhhc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyByZXN1bHQgPSBsZWZ0ICsgcmlnaHQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyByaWdodCA9IHJlc3VsdCAtIGxlZnQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWNvdmVyeSA9IHN0ZDo6bWFrZV91bmlxdWU8U3ViUmVjb3ZlcnlPdmVycmlkZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fb3ZlcnJpZGUsIG1fbm9kZS0+Y2hpbGQy
KCkubm9kZSgpLCBWYWx1ZUZvcm1hdEludDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSwgbGVmdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKG1fbm9kZS0+Y2hpbGQxKCkuZG9lc0tpbGwoKSAmJiAhbV9u
b2RlLT5jaGlsZDEoKS0+aGFzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIHJlc3VsdCA9IGxlZnQgKyByaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGxlZnQgPSByZXN1bHQgLSByaWdodAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
Y292ZXJ5ID0gc3RkOjptYWtlX3VuaXF1ZTxTdWJSZWNvdmVyeU92ZXJyaWRlPigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9vdmVycmlkZSwgbV9ub2RlLT5jaGlsZDIoKS5ub2Rl
KCksIFZhbHVlRm9ybWF0SW50MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApLCByaWdodCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCks
IDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICAgICAgc2V0SW50MzIobV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwg
MCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQxMDYsNiArNDE0NywxNCBA
QCBwcml2YXRlOgogICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChleGl0
LCBpbmRleCwgbm9kZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgICAgICBm
b3IgKFJlY292ZXJ5T3ZlcnJpZGUqIG92ZXJyaWRlID0gbV9vdmVycmlkZTsgb3ZlcnJpZGU7IG92
ZXJyaWRlID0gb3ZlcnJpZGUtPm5leHQoKSkgeworICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUg
dmFsdWUgPSBvdmVycmlkZS0+dHJ5T3ZlcnJpZGUobm9kZSwgbV9vdXQpOworICAgICAgICAgICAg
aWYgKCEhdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJn
dW1lbnRzLCBpbmRleCwgdmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1
ZSA9IG1faW50MzJWYWx1ZXMuZ2V0KG5vZGUpOwogICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkp
IHsKICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBW
YWx1ZUZvcm1hdEludDMyLCB2YWx1ZS52YWx1ZSgpKTsKQEAgLTQxNzUsNiArNDIyNCwxMiBAQCBw
cml2YXRlOgogICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKICAgICB9CiAgICAgCisg
ICAgdm9pZCBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1
bWVudExpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQgaW5kZXgsIEZvcm1hdHRlZFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgs
IHZhbHVlLmZvcm1hdCgpLCB2YWx1ZS52YWx1ZSgpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBv
YnNlcnZlTW92SGludChOb2RlKiBub2RlKQogICAgIHsKICAgICAgICAgQVNTRVJUKG5vZGUtPmNv
bnRhaW5zTW92SGludCgpKTsKQEAgLTQzNDgsNiArNDQwMyw4IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgT3BlcmFuZHM8QXZhaWxhYmlsaXR5PiBtX2F2YWlsYWJpbGl0eTsKICAgICAKKyAgICBSZWNv
dmVyeU92ZXJyaWRlKiBtX292ZXJyaWRlOworICAgIAogICAgIEluUGxhY2VBYnN0cmFjdFN0YXRl
IG1fc3RhdGU7CiAgICAgQWJzdHJhY3RJbnRlcnByZXRlcjxJblBsYWNlQWJzdHJhY3RTdGF0ZT4g
bV9pbnRlcnByZXRlcjsKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWNvdmVyeU92ZXJyaWRlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlk
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMUmVjb3ZlcnlPdmVycmlkZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworUmVjb3ZlcnlPdmVycmlkZTo6flJlY292ZXJ5
T3ZlcnJpZGUoKQoreworICAgIEFTU0VSVChtX2hlYWQgPT0gdGhpcyk7CisgICAgKm1faGVhZCA9
IG1fbmV4dDsKK30KKworQWRkUmVjb3ZlcnlPdmVycmlkZTo6fkFkZFJlY292ZXJ5T3ZlcnJpZGUo
KSB7IH0KKworRm9ybWF0dGVkVmFsdWUgQWRkUmVjb3ZlcnlPdmVycmlkZTo6dHJ5T3ZlcnJpZGVJ
bXBsKE91dHB1dCYgb3V0KQoreworICAgIHJldHVybiBGb3JtYXR0ZWRWYWx1ZShtX2Zvcm1hdCwg
b3V0LmFkZChtX2xlZnQsIG1fcmlnaHQpKTsKK30KKworU3ViUmVjb3ZlcnlPdmVycmlkZTo6flN1
YlJlY292ZXJ5T3ZlcnJpZGUoKSB7IH0KKworRm9ybWF0dGVkVmFsdWUgU3ViUmVjb3ZlcnlPdmVy
cmlkZTo6dHJ5T3ZlcnJpZGVJbXBsKE91dHB1dCYgb3V0KQoreworICAgIHJldHVybiBGb3JtYXR0
ZWRWYWx1ZShtX2Zvcm1hdCwgb3V0LnN1YihtX2xlZnQsIG1fcmlnaHQpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMUmVjb3ZlcnlPdmVycmlkZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExSZWNvdmVyeU92ZXJy
aWRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExSZWNvdmVyeU92ZXJyaWRl
X2gKKyNkZWZpbmUgRlRMUmVjb3ZlcnlPdmVycmlkZV9oCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgor
I2luY2x1ZGUgIkZUTE91dHB1dC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK2NsYXNzIFJlY292ZXJ5T3ZlcnJpZGUgeworcHJvdGVjdGVkOgorICAgIFJlY292ZXJ5T3Zl
cnJpZGUoUmVjb3ZlcnlPdmVycmlkZSomIGhlYWQsIERGRzo6Tm9kZSogbm9kZSkKKyAgICAgICAg
OiBtX2hlYWQoJmhlYWQpCisgICAgICAgICwgbV9uZXh0KGhlYWQpCisgICAgICAgICwgbV9ub2Rl
KG5vZGUpCisgICAgeworICAgICAgICAqbV9oZWFkID0gdGhpczsKKyAgICB9CisgICAgCitwdWJs
aWM6CisgICAgdmlydHVhbCB+UmVjb3ZlcnlPdmVycmlkZSgpOworICAgIAorICAgIEZvcm1hdHRl
ZFZhbHVlIHRyeU92ZXJyaWRlKERGRzo6Tm9kZSogbm9kZSwgT3V0cHV0JiBvdXQpCisgICAgewor
ICAgICAgICBpZiAobm9kZSA9PSBtX25vZGUpCisgICAgICAgICAgICByZXR1cm4gdHJ5T3ZlcnJp
ZGVJbXBsKG91dCk7CisgICAgICAgIHJldHVybiBGb3JtYXR0ZWRWYWx1ZSgpOworICAgIH0KKyAg
ICAKKyAgICBSZWNvdmVyeU92ZXJyaWRlKiBuZXh0KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0OyB9
CisgICAgCitwcml2YXRlOgorICAgIFJlY292ZXJ5T3ZlcnJpZGUqKiBtX2hlYWQ7CisgICAgUmVj
b3ZlcnlPdmVycmlkZSogbV9uZXh0OworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRm9y
bWF0dGVkVmFsdWUgdHJ5T3ZlcnJpZGVJbXBsKE91dHB1dCYpID0gMDsKKyAgICAKKyAgICBERkc6
Ok5vZGUqIG1fbm9kZTsKK307CisKK2NsYXNzIEFkZFJlY292ZXJ5T3ZlcnJpZGUgOiBwdWJsaWMg
UmVjb3ZlcnlPdmVycmlkZSB7CitwdWJsaWM6CisgICAgQWRkUmVjb3ZlcnlPdmVycmlkZSgKKyAg
ICAgICAgUmVjb3ZlcnlPdmVycmlkZSomIGhlYWQsIERGRzo6Tm9kZSogbm9kZSwgVmFsdWVGb3Jt
YXQgZm9ybWF0LCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQorICAgICAgICA6IFJlY292ZXJ5
T3ZlcnJpZGUoaGVhZCwgbm9kZSkKKyAgICAgICAgLCBtX2Zvcm1hdChmb3JtYXQpCisgICAgICAg
ICwgbV9sZWZ0KGxlZnQpCisgICAgICAgICwgbV9yaWdodChyaWdodCkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHZpcnR1YWwgfkFkZFJlY292ZXJ5T3ZlcnJpZGUoKTsKKyAgICAKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIEZvcm1hdHRlZFZhbHVlIHRyeU92ZXJyaWRlSW1wbChPdXRwdXQmKSBP
VkVSUklERTsKKworcHJpdmF0ZToKKyAgICBWYWx1ZUZvcm1hdCBtX2Zvcm1hdDsKKyAgICBMVmFs
dWUgbV9sZWZ0OworICAgIExWYWx1ZSBtX3JpZ2h0OworfTsKKworY2xhc3MgU3ViUmVjb3ZlcnlP
dmVycmlkZSA6IHB1YmxpYyBSZWNvdmVyeU92ZXJyaWRlIHsKK3B1YmxpYzoKKyAgICBTdWJSZWNv
dmVyeU92ZXJyaWRlKAorICAgICAgICBSZWNvdmVyeU92ZXJyaWRlKiYgaGVhZCwgREZHOjpOb2Rl
KiBub2RlLCBWYWx1ZUZvcm1hdCBmb3JtYXQsIExWYWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpCisg
ICAgICAgIDogUmVjb3ZlcnlPdmVycmlkZShoZWFkLCBub2RlKQorICAgICAgICAsIG1fZm9ybWF0
KGZvcm1hdCkKKyAgICAgICAgLCBtX2xlZnQobGVmdCkKKyAgICAgICAgLCBtX3JpZ2h0KHJpZ2h0
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+U3ViUmVjb3ZlcnlPdmVycmlkZSgp
OworICAgIAorcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgRm9ybWF0dGVkVmFsdWUgdHJ5T3ZlcnJp
ZGVJbXBsKE91dHB1dCYpOworCitwcml2YXRlOgorICAgIFZhbHVlRm9ybWF0IG1fZm9ybWF0Owor
ICAgIExWYWx1ZSBtX2xlZnQ7CisgICAgTFZhbHVlIG1fcmlnaHQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTFJlY292ZXJ5T3ZlcnJpZGVfaAorCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>