<?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>34149</bug_id>
          
          <creation_ts>2010-01-25 16:28:23 -0800</creation_ts>
          <short_desc>Some methods in JSC JNI bridge need more error checking of results from JNI.</short_desc>
          <delta_ts>2010-01-26 14:01:12 -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>Java</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184443</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-25 16:28:23 -0800</bug_when>
    <thetext>In JNIUtility.h, callJNIMethodV&lt;jobject&gt; might return null (from CallObjectMethodV, via JNICaller&lt;jobject&gt;::callV) if an exception is thrown.

All clients of callJNIMethodV&lt;jobject&gt; that are calling methods on the returned object should null check first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184444</commentid>
    <comment_count>1</comment_count>
      <attachid>47376</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-25 16:44:05 -0800</bug_when>
    <thetext>Created attachment 47376
Preliminary patch (not even built!)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184470</commentid>
    <comment_count>2</comment_count>
      <attachid>47381</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-25 19:14:56 -0800</bug_when>
    <thetext>Created attachment 47381
a patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184707</commentid>
    <comment_count>3</comment_count>
      <attachid>47381</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2010-01-26 13:46:07 -0800</bug_when>
    <thetext>Comment on attachment 47381
a patch

Looks great! r=me with the changes we discussed (Change &quot;[UNKNOWN ...]&quot; to simply &quot;Unknown&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184714</commentid>
    <comment_count>4</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-01-26 14:01:12 -0800</bug_when>
    <thetext>Transmitting file data .......
Committed revision 53865.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47376</attachid>
            <date>2010-01-25 16:44:05 -0800</date>
            <delta_ts>2010-01-25 19:14:56 -0800</delta_ts>
            <desc>Preliminary patch (not even built!)</desc>
            <filename>patch.jnifix.1.txt</filename>
            <type>text/plain</type>
            <size>14020</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzgyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDEtMjUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNvbWUgbWV0aG9kcyBpbiBKU0MgSk5JIGJyaWRnZSBuZWVkIG1vcmUgZXJyb3IgY2hl
Y2tpbmcgb2YgcmVzdWx0cyBmcm9tIEpOSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0MTQ5CisKKyAgICAgICAgSW4gSk5JVXRpbGl0eS5oLCBjYWxs
Sk5JTWV0aG9kVjxqb2JqZWN0PiBtaWdodCByZXR1cm4gbnVsbCAoZnJvbSBDYWxsT2JqZWN0TWV0
aG9kViwgdmlhCisgICAgICAgIEpOSUNhbGxlcjxqb2JqZWN0Pjo6Y2FsbFYpIGlmIGFuIGV4Y2Vw
dGlvbiBpcyB0aHJvd24uICBBbGwgY2xpZW50cyBvZiBjYWxsSk5JTWV0aG9kVjxqb2JqZWN0Pgor
ICAgICAgICB0aGF0IGFyZSBjYWxsaW5nIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCBz
aG91bGQgbnVsbCBjaGVjayBmaXJzdC4KKworICAgICAgICAqIGJyaWRnZS9qbmkvSk5JQnJpZGdl
LmNwcDoKKyAgICAgICAgKEphdmFGaWVsZDo6SmF2YUZpZWxkKToKKyAgICAgICAgKEphdmFNZXRo
b2Q6OkphdmFNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvSk5JVXRpbGl0eS5oOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgorICAgICAgICAoSmF2YUNs
YXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpT
Qy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKToKKwogMjAxMC0wMS0y
NSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHJldmlzaW9u
IDUzODEzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE0ICs2MSwyMCBAQCBKYXZhUGFyYW1ldGVyOjpKYXZhUGFyYW1ldGVyKEpOSUVu
diogZW52CiAKIEphdmFGaWVsZDo6SmF2YUZpZWxkKEpOSUVudiogZW52LCBqb2JqZWN0IGFGaWVs
ZCkKIHsKLSAgICAvLyBHZXQgZmllbGQgdHlwZQotICAgIGpvYmplY3QgZmllbGRUeXBlID0gY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFz
czsiKTsKLSAgICBqc3RyaW5nIGZpZWxkVHlwZU5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihj
YWxsSk5JTWV0aG9kPGpvYmplY3Q+KGZpZWxkVHlwZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5n
L1N0cmluZzsiKSk7CisgICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFtZQorICAgIGpzdHJpbmcgZmll
bGRUeXBlTmFtZSA9IDA7CisgICAgaWYgKGpvYmplY3QgZmllbGRUeXBlID0gY2FsbEpOSU1ldGhv
ZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKSkKKyAg
ICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8
am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsK
KyAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCisgICAgICAgIGZpZWxkVHlwZU5hbWUgPSBlbnYtPk5l
d1N0cmluZ1VURigiW1VOS05PV04gRklFTEQgVFlQRSBOQU1FXSIpOwogICAgIG1fdHlwZSA9IEph
dmFTdHJpbmcoZW52LCBmaWVsZFR5cGVOYW1lKTsKKwogICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVG
cm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4U3RyaW5nKCkpOwogCiAgICAgLy8gR2V0IGZpZWxkIG5h
bWUKICAgICBqc3RyaW5nIGZpZWxkTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklN
ZXRob2Q8am9iamVjdD4oYUZpZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIp
KTsKKyAgICBpZiAoIWZpZWxkTmFtZSkKKyAgICAgICAgZmllbGROYW1lID0gZW52LT5OZXdTdHJp
bmdVVEYoIltVTktOT1dOIEZJRUxEIE5BTUVdIik7CiAgICAgbV9uYW1lID0gSmF2YVN0cmluZyhl
bnYsIGZpZWxkTmFtZSk7CiAKICAgICBtX2ZpZWxkID0gbmV3IEpPYmplY3RXcmFwcGVyKGFGaWVs
ZCk7CkBAIC0yNjEsOSArMjY3LDEzIEBAIHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFu
Y2UoRXhlY1MKIAogSmF2YU1ldGhvZDo6SmF2YU1ldGhvZChKTklFbnYqIGVudiwgam9iamVjdCBh
TWV0aG9kKQogewotICAgIC8vIEdldCByZXR1cm4gdHlwZQotICAgIGpvYmplY3QgcmV0dXJuVHlw
ZSA9IGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFJldHVyblR5cGUiLCAiKClM
amF2YS9sYW5nL0NsYXNzOyIpOwotICAgIGpzdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSBzdGF0aWNf
Y2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KHJldHVyblR5cGUsICJnZXROYW1l
IiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgIC8vIEdldCByZXR1cm4gdHlwZSBuYW1l
CisgICAganN0cmluZyByZXR1cm5UeXBlTmFtZSA9IDA7CisgICAgaWYgKGpvYmplY3QgcmV0dXJu
VHlwZSA9IGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldFJldHVyblR5cGUiLCAi
KClMamF2YS9sYW5nL0NsYXNzOyIpKQorICAgICAgICByZXR1cm5UeXBlTmFtZSA9IHN0YXRpY19j
YXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4ocmV0dXJuVHlwZSwgImdldE5hbWUi
LCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgaWYgKCFyZXR1cm5UeXBlTmFtZSkKKyAg
ICAgICAgcmV0dXJuVHlwZU5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiW1VOS05PV04gTUVUSE9E
IFJFVFVSTiBUWVBFIE5BTUVdIik7CisgICAgCiAgICAgbV9yZXR1cm5UeXBlID0gSmF2YVN0cmlu
ZyhlbnYsIHJldHVyblR5cGVOYW1lKTsKICAgICBtX0pOSVJldHVyblR5cGUgPSBKTklUeXBlRnJv
bUNsYXNzTmFtZShtX3JldHVyblR5cGUuVVRGOFN0cmluZygpKTsKICAgICBlbnYtPkRlbGV0ZUxv
Y2FsUmVmKHJldHVyblR5cGUpOwpAQCAtMjcxLDIyICsyODEsMjcgQEAgSmF2YU1ldGhvZDo6SmF2
YU1ldGhvZChKTklFbnYqIGVudiwgam9iagogCiAgICAgLy8gR2V0IG1ldGhvZCBuYW1lCiAgICAg
anN0cmluZyBtZXRob2ROYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxq
b2JqZWN0PihhTWV0aG9kLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAg
ICBpZiAoIXJldHVyblR5cGVOYW1lKQorICAgICAgICByZXR1cm5UeXBlTmFtZSA9IGVudi0+TmV3
U3RyaW5nVVRGKCJbVU5LTk9XTiBNRVRIT0QgTkFNRV0iKTsKICAgICBtX25hbWUgPSBKYXZhU3Ry
aW5nKGVudiwgbWV0aG9kTmFtZSk7CiAgICAgZW52LT5EZWxldGVMb2NhbFJlZihtZXRob2ROYW1l
KTsKIAogICAgIC8vIEdldCBwYXJhbWV0ZXJzCi0gICAgamFycmF5IGpwYXJhbWV0ZXJzID0gc3Rh
dGljX2Nhc3Q8amFycmF5PihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRQYXJh
bWV0ZXJUeXBlcyIsICIoKVtMamF2YS9sYW5nL0NsYXNzOyIpKTsKLSAgICBtX251bVBhcmFtZXRl
cnMgPSBlbnYtPkdldEFycmF5TGVuZ3RoKGpwYXJhbWV0ZXJzKTsKLSAgICBtX3BhcmFtZXRlcnMg
PSBuZXcgSmF2YVBhcmFtZXRlclttX251bVBhcmFtZXRlcnNdOwotCi0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBtX251bVBhcmFtZXRlcnM7IGkrKykgewotICAgICAgICBqb2JqZWN0IGFQYXJhbWV0
ZXIgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChzdGF0aWNfY2FzdDxqb2JqZWN0QXJyYXk+
KGpwYXJhbWV0ZXJzKSwgaSk7Ci0gICAgICAgIGpzdHJpbmcgcGFyYW1ldGVyTmFtZSA9IHN0YXRp
Y19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYVBhcmFtZXRlciwgImdldE5h
bWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7Ci0gICAgICAgIG1fcGFyYW1ldGVyc1tpXSA9
IEphdmFQYXJhbWV0ZXIoZW52LCBwYXJhbWV0ZXJOYW1lKTsKLSAgICAgICAgZW52LT5EZWxldGVM
b2NhbFJlZihhUGFyYW1ldGVyKTsKLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihwYXJhbWV0
ZXJOYW1lKTsKKyAgICBpZiAoamFycmF5IGpwYXJhbWV0ZXJzID0gc3RhdGljX2Nhc3Q8amFycmF5
PihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRQYXJhbWV0ZXJUeXBlcyIsICIo
KVtMamF2YS9sYW5nL0NsYXNzOyIpKSkgeworICAgICAgICBtX251bVBhcmFtZXRlcnMgPSBlbnYt
PkdldEFycmF5TGVuZ3RoKGpwYXJhbWV0ZXJzKTsKKyAgICAgICAgbV9wYXJhbWV0ZXJzID0gbmV3
IEphdmFQYXJhbWV0ZXJbbV9udW1QYXJhbWV0ZXJzXTsKKworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fbnVtUGFyYW1ldGVyczsgaSsrKSB7CisgICAgICAgICAgICBqb2JqZWN0IGFQYXJh
bWV0ZXIgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudChzdGF0aWNfY2FzdDxqb2JqZWN0QXJy
YXk+KGpwYXJhbWV0ZXJzKSwgaSk7CisgICAgICAgICAgICBqc3RyaW5nIHBhcmFtZXRlck5hbWUg
PSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFQYXJhbWV0ZXIs
ICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgICAgICAgICAgaWYgKCFw
YXJhbWV0ZXJOYW1lKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlck5hbWUgPSBlbnYtPk5ld1N0
cmluZ1VURigiW1VOS05PV04gTUVUSE9EIFBBUkFNRVRFUiBOQU1FXSIpOworICAgICAgICAgICAg
bV9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFtZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOworICAg
ICAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhUGFyYW1ldGVyKTsKKyAgICAgICAgICAgIGVu
di0+RGVsZXRlTG9jYWxSZWYocGFyYW1ldGVyTmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgZW52
LT5EZWxldGVMb2NhbFJlZihqcGFyYW1ldGVycyk7CiAgICAgfQotICAgIGVudi0+RGVsZXRlTG9j
YWxSZWYoanBhcmFtZXRlcnMpOwogCiAgICAgLy8gQ3JlYXRlZCBsYXppbHkuCiAgICAgbV9zaWdu
YXR1cmUgPSAwOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5oCShyZXZpc2lvbiA1MzgxMykK
KysrIFdlYkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDExICs4MSwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IEpOSUNhbGxlcjsKIHRl
bXBsYXRlPD4gc3RydWN0IEpOSUNhbGxlcjx2b2lkPiB7CiAgICAgc3RhdGljIHZvaWQgY2FsbEEo
am9iamVjdCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKICAgICB7Ci0gICAgICAg
IHJldHVybiBnZXRKTklFbnYoKS0+Q2FsbFZvaWRNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKKyAg
ICAgICAgZ2V0Sk5JRW52KCktPkNhbGxWb2lkTWV0aG9kQShvYmosIG1pZCwgYXJncyk7CiAgICAg
fQogICAgIHN0YXRpYyB2b2lkIGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9s
aXN0IGFyZ3MpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxWb2lkTWV0
aG9kVihvYmosIG1pZCwgYXJncyk7CisgICAgICAgIGdldEpOSUVudigpLT5DYWxsVm9pZE1ldGhv
ZFYob2JqLCBtaWQsIGFyZ3MpOwogICAgIH0KIH07CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2pu
aS9qbmlfanNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9q
c29iamVjdC5tbQkocmV2aXNpb24gNTM4MTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pz
b2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01ODAsMzAgKzU4MCwzMyBAQCBKU1ZhbHVlIEph
dmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhCiAgICAgLy8gU2VlIHNlY3Rpb24gMjIuNyBv
ZiAnSmF2YVNjcmlwdDogIFRoZSBEZWZpbml0aXZlIEd1aWRlLCA0dGggRWRpdGlvbicsCiAgICAg
Ly8gZmlndXJlIDIyLTQuCiAgICAgam9iamVjdCBjbGFzc09mSW5zdGFuY2UgPSBjYWxsSk5JTWV0
aG9kPGpvYmplY3Q+KHRoZU9iamVjdCwgImdldENsYXNzIiwgIigpTGphdmEvbGFuZy9DbGFzczsi
KTsKLSAgICBqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oY2xhc3NPZkluc3RhbmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwot
ICAgIAorICAgIGlmICghY2xhc3NPZkluc3RhbmNlKSB7CisgICAgICAgIEpTTG9jayBsb2NrKFNp
bGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0
ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAg
ICB9CisKICAgICAvLyBPbmx5IHRoZSBzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2Jq
ZWN0IGhhcyBhIG1lbWJlciBjYWxsZWQgbmF0aXZlSlNPYmplY3QuIFRoaXMgY2xhc3MgaXMKICAg
ICAvLyBjcmVhdGVkIGFib3ZlIHRvIHdyYXAgaW50ZXJuYWwgYnJvd3NlciBvYmplY3RzLiBUaGUg
Y29uc3RydWN0b3Igb2YgdGhpcyBjbGFzcyB0YWtlcyB0aGUgbmF0aXZlCiAgICAgLy8gcG9pbnRl
ciBhbmQgc3RvcmVzIGl0IGluIHRoaXMgb2JqZWN0LCBzbyB0aGF0IGl0IGNhbiBiZSByZXRyaWV2
ZWQgYmVsb3cuCi0gICAgaWYgKHN0cmNtcChKYXZhU3RyaW5nKGNsYXNzTmFtZSkuVVRGOFN0cmlu
ZygpLCAic3VuLnBsdWdpbi5qYXZhc2NyaXB0LndlYmtpdC5KU09iamVjdCIpID09IDApIHsKLSAg
ICAgICAgLy8gUHVsbCB0aGUgbmF0aXZlSlNPYmplY3QgdmFsdWUgZnJvbSB0aGUgSmF2YSBpbnN0
YW5jZS4gIFRoaXMgaXMgYQotICAgICAgICAvLyBwb2ludGVyIHRvIHRoZSBKU09iamVjdC4KLSAg
ICAgICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAgICAgICAgamZpZWxkSUQgZmllbGRJ
RCA9IGVudi0+R2V0RmllbGRJRCgoamNsYXNzKWNsYXNzT2ZJbnN0YW5jZSwgIm5hdGl2ZUpTT2Jq
ZWN0IiwgIkoiKTsKLSAgICAgICAgaWYgKGZpZWxkSUQgPT0gTlVMTCkgewotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgamxvbmcgbmF0aXZlSGFu
ZGxlID0gZW52LT5HZXRMb25nRmllbGQodGhlT2JqZWN0LCBmaWVsZElEKTsKLSAgICAgICAgaWYg
KG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpIHsKLSAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgICAgICB9Ci0gICAgICAgIEpTT2JqZWN0ICppbXAgPSBzdGF0aWNf
Y2FzdDxKU09iamVjdCo+KGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpKTsKLSAgICAgICAg
cmV0dXJuIGltcDsKKyAgICBqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRo
b2Q8am9iamVjdD4oY2xhc3NPZkluc3RhbmNlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3Ry
aW5nOyIpOworICAgIGlmICghY2xhc3NOYW1lIHx8IChzdHJjbXAoSmF2YVN0cmluZyhjbGFzc05h
bWUpLlVURjhTdHJpbmcoKSwgInN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJraXQuSlNPYmplY3Qi
KSAhPSAwKSkgeworICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwor
ICAgICAgICByZXR1cm4gSmF2YUluc3RhbmNlOjpjcmVhdGUodGhlT2JqZWN0LCBfcm9vdE9iamVj
dCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgfQogCi0gICAgSlNMb2NrIGxvY2so
U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLQotICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0
ZSh0aGVPYmplY3QsIF9yb290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKKyAg
ICAvLyBQdWxsIHRoZSBuYXRpdmVKU09iamVjdCB2YWx1ZSBmcm9tIHRoZSBKYXZhIGluc3RhbmNl
LiAgVGhpcyBpcyBhCisgICAgLy8gcG9pbnRlciB0byB0aGUgSlNPYmplY3QuCisgICAgSk5JRW52
ICplbnYgPSBnZXRKTklFbnYoKTsKKyAgICBqZmllbGRJRCBmaWVsZElEID0gZW52LT5HZXRGaWVs
ZElEKChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0aXZlSlNPYmplY3QiLCAiSiIpOworICAg
IGlmIChmaWVsZElEID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIGpsb25nIG5hdGl2ZUhhbmRsZSA9IGVudi0+R2V0TG9uZ0ZpZWxkKHRoZU9iamVj
dCwgZmllbGRJRCk7CisgICAgaWYgKG5hdGl2ZUhhbmRsZSA9PSBVbmRlZmluZWRIYW5kbGUpIHsK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIEpTT2JqZWN0ICppbXAg
PSBzdGF0aWNfY2FzdDxKU09iamVjdCo+KGpsb25nX3RvX2ltcHB0cihuYXRpdmVIYW5kbGUpKTsK
KyAgICByZXR1cm4gaW1wOwogfQogCiB2b2lkIEphdmFKU09iamVjdDo6Z2V0TGlzdEZyb21KQXJy
YXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0QXJyYXkgakFycmF5LCBNYXJrZWRBcmd1bWVudEJ1
ZmZlciYgbGlzdCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNz
SlNDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pT
Qy5jcHAJKHJldmlzaW9uIDUzODEzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xh
c3NKU0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw0OCArNDEsNTMgQEAgSmF2YUNsYXNzOjpK
YXZhQ2xhc3Moam9iamVjdCBhbkluc3RhbmNlKQogCiAgICAgaWYgKCFhQ2xhc3MpIHsKICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlczogIHVuYWJsZSB0byBjYWxsIGdldENsYXNzIG9uIGluc3Rh
bmNlICVwXG4iLCBfX1BSRVRUWV9GVU5DVElPTl9fLCBhbkluc3RhbmNlKTsKKyAgICAgICAgbV9u
YW1lID0gc3RyZHVwKCJbVU5LTk9XTiBDTEFTU10iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGpzdHJpbmcgY2xhc3NOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0
PihhQ2xhc3MsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAgY29uc3Qg
Y2hhciogY2xhc3NOYW1lQyA9IGdldENoYXJhY3RlcnNGcm9tSlN0cmluZyhjbGFzc05hbWUpOwot
ICAgIG1fbmFtZSA9IHN0cmR1cChjbGFzc05hbWVDKTsKLSAgICByZWxlYXNlQ2hhcmFjdGVyc0Zv
ckpTdHJpbmcoY2xhc3NOYW1lLCBjbGFzc05hbWVDKTsKKyAgICBpZiAoanN0cmluZyBjbGFzc05h
bWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFDbGFzcywgImdldE5hbWUiLCAi
KClMamF2YS9sYW5nL1N0cmluZzsiKSkgeworICAgICAgICBjb25zdCBjaGFyKiBjbGFzc05hbWVD
ID0gZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nKGNsYXNzTmFtZSk7CisgICAgICAgIG1fbmFtZSA9
IHN0cmR1cChjbGFzc05hbWVDKTsKKyAgICAgICAgcmVsZWFzZUNoYXJhY3RlcnNGb3JKU3RyaW5n
KGNsYXNzTmFtZSwgY2xhc3NOYW1lQyk7CisgICAgfSBlbHNlCisgICAgICAgIG1fbmFtZSA9IHN0
cmR1cCgiW1VOS05PV04gQ0xBU1MgTkFNRV0iKTsKIAogICAgIGludCBpOwogICAgIEpOSUVudiog
ZW52ID0gZ2V0Sk5JRW52KCk7CiAKICAgICAvLyBHZXQgdGhlIGZpZWxkcwotICAgIGphcnJheSBm
aWVsZHMgPSAoamFycmF5KWNhbGxKTklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0RmllbGRz
IiwgIigpW0xqYXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsiKTsKLSAgICBpbnQgbnVtRmllbGRzID0g
ZW52LT5HZXRBcnJheUxlbmd0aChmaWVsZHMpOwotICAgIGZvciAoaSA9IDA7IGkgPCBudW1GaWVs
ZHM7IGkrKykgewotICAgICAgICBqb2JqZWN0IGFKRmllbGQgPSBlbnYtPkdldE9iamVjdEFycmF5
RWxlbWVudCgoam9iamVjdEFycmF5KWZpZWxkcywgaSk7Ci0gICAgICAgIEphdmFGaWVsZCogYUZp
ZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGluIHRoZSBKYXZh
Q2xhc3MgZGVzdHJ1Y3RvcgotICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwotICAgICAgICAgICAgbV9maWVsZHMuc2V0KCgoVVN0cmluZylh
RmllbGQtPm5hbWUoKSkucmVwKCksIGFGaWVsZCk7CisgICAgaWYgKGphcnJheSBmaWVsZHMgPSAo
amFycmF5KWNhbGxKTklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0RmllbGRzIiwgIigpW0xq
YXZhL2xhbmcvcmVmbGVjdC9GaWVsZDsiKSkgeworICAgICAgICBpbnQgbnVtRmllbGRzID0gZW52
LT5HZXRBcnJheUxlbmd0aChmaWVsZHMpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtRmll
bGRzOyBpKyspIHsKKyAgICAgICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0
QXJyYXlFbGVtZW50KChqb2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKKyAgICAgICAgICAgIEphdmFG
aWVsZCogYUZpZWxkID0gbmV3IEphdmFGaWVsZChlbnYsIGFKRmllbGQpOyAvLyBkZWxldGVkIGlu
IHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7CisgICAgICAgICAgICAgICAgbV9m
aWVsZHMuc2V0KCgoVVN0cmluZylhRmllbGQtPm5hbWUoKSkucmVwKCksIGFGaWVsZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFKRmllbGQpOwogICAg
ICAgICB9Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CiAgICAgfQogCiAg
ICAgLy8gR2V0IHRoZSBtZXRob2RzCi0gICAgamFycmF5IG1ldGhvZHMgPSAoamFycmF5KWNhbGxK
TklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0TWV0aG9kcyIsICIoKVtMamF2YS9sYW5nL3Jl
ZmxlY3QvTWV0aG9kOyIpOwotICAgIGludCBudW1NZXRob2RzID0gZW52LT5HZXRBcnJheUxlbmd0
aChtZXRob2RzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbnVtTWV0aG9kczsgaSsrKSB7Ci0gICAg
ICAgIGpvYmplY3QgYUpNZXRob2QgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCgoam9iamVj
dEFycmF5KW1ldGhvZHMsIGkpOwotICAgICAgICBKYXZhTWV0aG9kKiBhTWV0aG9kID0gbmV3IEph
dmFNZXRob2QoZW52LCBhSk1ldGhvZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0
cnVjdG9yCi0gICAgICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7Ci0gICAgICAgIHsKLSAgICAg
ICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0KLSAgICAgICAgICAg
IG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KCgoVVN0cmluZylhTWV0aG9kLT5uYW1lKCkpLnJl
cCgpKTsKLSAgICAgICAgICAgIGlmICghbWV0aG9kTGlzdCkgewotICAgICAgICAgICAgICAgIG1l
dGhvZExpc3QgPSBuZXcgTWV0aG9kTGlzdCgpOwotICAgICAgICAgICAgICAgIG1fbWV0aG9kcy5z
ZXQoKChVU3RyaW5nKWFNZXRob2QtPm5hbWUoKSkucmVwKCksIG1ldGhvZExpc3QpOworICAgIGlm
IChqYXJyYXkgbWV0aG9kcyA9IChqYXJyYXkpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xhc3Ms
ICJnZXRNZXRob2RzIiwgIigpW0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7IikpIHsKKyAgICAg
ICAgaW50IG51bU1ldGhvZHMgPSBlbnYtPkdldEFycmF5TGVuZ3RoKG1ldGhvZHMpOworICAgICAg
ICBmb3IgKGkgPSAwOyBpIDwgbnVtTWV0aG9kczsgaSsrKSB7CisgICAgICAgICAgICBqb2JqZWN0
IGFKTWV0aG9kID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSltZXRo
b2RzLCBpKTsKKyAgICAgICAgICAgIEphdmFNZXRob2QqIGFNZXRob2QgPSBuZXcgSmF2YU1ldGhv
ZChlbnYsIGFKTWV0aG9kKTsgLy8gZGVsZXRlZCBpbiB0aGUgSmF2YUNsYXNzIGRlc3RydWN0b3IK
KyAgICAgICAgICAgIE1ldGhvZExpc3QqIG1ldGhvZExpc3Q7CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgICAg
ICAgICAgICAgIG1ldGhvZExpc3QgPSBtX21ldGhvZHMuZ2V0KCgoVVN0cmluZylhTWV0aG9kLT5u
YW1lKCkpLnJlcCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZExpc3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbWV0aG9kTGlzdCA9IG5ldyBNZXRob2RMaXN0KCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fbWV0aG9kcy5zZXQoKChVU3RyaW5nKWFNZXRob2QtPm5hbWUoKSkucmVwKCks
IG1ldGhvZExpc3QpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1ldGhvZExpc3QtPmFwcGVuZChhTWV0aG9kKTsKKyAgICAgICAgICAgIGVudi0+RGVsZXRl
TG9jYWxSZWYoYUpNZXRob2QpOwogICAgICAgICB9Ci0gICAgICAgIG1ldGhvZExpc3QtPmFwcGVu
ZChhTWV0aG9kKTsKLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhSk1ldGhvZCk7CiAgICAg
fQogCiAgICAgZW52LT5EZWxldGVMb2NhbFJlZihmaWVsZHMpOwpJbmRleDogV2ViQ29yZS9icmlk
Z2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkocmV2aXNpb24gNTM4MTMpCisrKyBXZWJD
b3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDYgKzkwLDExIEBAIEpTVmFsdWUgSmF2YUluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3QK
ICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogCiAgICAganN0cmluZyBz
dHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+
bV9pbnN0YW5jZSwgInRvU3RyaW5nIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7CisKKyAgICAv
LyBTaG91bGQgdGhyb3cgYSBKUyBleGNlcHRpb24sIHJhdGhlciB0aGFuIHJldHVybmluZyAiIj8g
LSBidXQgYmV0dGVyIHRoYW4gYSBudWxsIGRlcmVmZXJlbmNlLgorICAgIGlmICghc3RyaW5nVmFs
dWUpCisgICAgICAgIHJldHVybiBqc1N0cmluZyhleGVjLCBVU3RyaW5nKCkpOworCiAgICAgSk5J
RW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICBjb25zdCBqY2hhciogYyA9IGdldFVDaGFyYWN0
ZXJzRnJvbUpTdHJpbmdJbkVudihlbnYsIHN0cmluZ1ZhbHVlKTsKICAgICBVU3RyaW5nIHUoKGNv
bnN0IFVDaGFyKiljLCAoaW50KWVudi0+R2V0U3RyaW5nTGVuZ3RoKHN0cmluZ1ZhbHVlKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47381</attachid>
            <date>2010-01-25 19:14:56 -0800</date>
            <delta_ts>2010-01-26 13:46:06 -0800</delta_ts>
            <desc>a patch</desc>
            <filename>patch.jnifix.2.txt</filename>
            <type>text/plain</type>
            <size>15871</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzgyNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTAtMDEtMjUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFNvbWUgbWV0aG9kcyBpbiBKU0MgSk5JIGJyaWRnZSBuZWVkIG1vcmUgZXJyb3IgY2hl
Y2tpbmcgb2YgcmVzdWx0cyBmcm9tIEpOSS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM0MTQ5CisKKyAgICAgICAgSW4gSk5JVXRpbGl0eS5oLCBjYWxs
Sk5JTWV0aG9kVjxqb2JqZWN0PiBtaWdodCByZXR1cm4gbnVsbCAoZnJvbSBDYWxsT2JqZWN0TWV0
aG9kViwgdmlhCisgICAgICAgIEpOSUNhbGxlcjxqb2JqZWN0Pjo6Y2FsbFYpIGlmIGFuIGV4Y2Vw
dGlvbiBpcyB0aHJvd24uICBBbGwgY2xpZW50cyBvZiBjYWxsSk5JTWV0aG9kVjxqb2JqZWN0Pgor
ICAgICAgICB0aGF0IGFyZSBjYWxsaW5nIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCBz
aG91bGQgbnVsbCBjaGVjayBmaXJzdC4KKworICAgICAgICAqIGJyaWRnZS9qbmkvSk5JQnJpZGdl
LmNwcDoKKyAgICAgICAgKEphdmFGaWVsZDo6SmF2YUZpZWxkKToKKyAgICAgICAgKEphdmFNZXRo
b2Q6OkphdmFNZXRob2QpOgorICAgICAgICAqIGJyaWRnZS9qbmkvSk5JVXRpbGl0eS5oOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6KToKKyAgICAgICAgKiBicmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbToKKyAgICAgICAgKEphdmFKU09iamVjdDo6Y29udmVydEpPYmplY3RUb1ZhbHVlKToKKyAg
ICAgICAgKiBicmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwOgorICAgICAgICAoSmF2YUNs
YXNzOjpKYXZhQ2xhc3MpOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpT
Qy5jcHA6CisgICAgICAgIChKYXZhSW5zdGFuY2U6OnN0cmluZ1ZhbHVlKToKKwogMjAxMC0wMS0y
NSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgU2ltb24gRnJhc2VyLgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHJldmlzaW9u
IDUzODEzKQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYxLDE0ICs2MSwyMCBAQCBKYXZhUGFyYW1ldGVyOjpKYXZhUGFyYW1ldGVyKEpOSUVu
diogZW52CiAKIEphdmFGaWVsZDo6SmF2YUZpZWxkKEpOSUVudiogZW52LCBqb2JqZWN0IGFGaWVs
ZCkKIHsKLSAgICAvLyBHZXQgZmllbGQgdHlwZQotICAgIGpvYmplY3QgZmllbGRUeXBlID0gY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFz
czsiKTsKLSAgICBqc3RyaW5nIGZpZWxkVHlwZU5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihj
YWxsSk5JTWV0aG9kPGpvYmplY3Q+KGZpZWxkVHlwZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5n
L1N0cmluZzsiKSk7CisgICAgLy8gR2V0IGZpZWxkIHR5cGUgbmFtZQorICAgIGpzdHJpbmcgZmll
bGRUeXBlTmFtZSA9IDA7CisgICAgaWYgKGpvYmplY3QgZmllbGRUeXBlID0gY2FsbEpOSU1ldGhv
ZDxqb2JqZWN0PihhRmllbGQsICJnZXRUeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKSkKKyAg
ICAgICAgZmllbGRUeXBlTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8
am9iamVjdD4oZmllbGRUeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsK
KyAgICBpZiAoIWZpZWxkVHlwZU5hbWUpCisgICAgICAgIGZpZWxkVHlwZU5hbWUgPSBlbnYtPk5l
d1N0cmluZ1VURigiW1VOS05PV04gRklFTEQgVFlQRSBOQU1FXSIpOwogICAgIG1fdHlwZSA9IEph
dmFTdHJpbmcoZW52LCBmaWVsZFR5cGVOYW1lKTsKKwogICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVG
cm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4U3RyaW5nKCkpOwogCiAgICAgLy8gR2V0IGZpZWxkIG5h
bWUKICAgICBqc3RyaW5nIGZpZWxkTmFtZSA9IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklN
ZXRob2Q8am9iamVjdD4oYUZpZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIp
KTsKKyAgICBpZiAoIWZpZWxkTmFtZSkKKyAgICAgICAgZmllbGROYW1lID0gZW52LT5OZXdTdHJp
bmdVVEYoIltVTktOT1dOIEZJRUxEIE5BTUVdIik7CiAgICAgbV9uYW1lID0gSmF2YVN0cmluZyhl
bnYsIGZpZWxkTmFtZSk7CiAKICAgICBtX2ZpZWxkID0gbmV3IEpPYmplY3RXcmFwcGVyKGFGaWVs
ZCk7CkBAIC0yNjEsMzIgKzI2Nyw0NCBAQCB2b2lkIEphdmFGaWVsZDo6c2V0VmFsdWVUb0luc3Rh
bmNlKEV4ZWNTCiAKIEphdmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52KiBlbnYsIGpvYmplY3Qg
YU1ldGhvZCkKIHsKLSAgICAvLyBHZXQgcmV0dXJuIHR5cGUKLSAgICBqb2JqZWN0IHJldHVyblR5
cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1cm5UeXBlIiwgIigp
TGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICBqc3RyaW5nIHJldHVyblR5cGVOYW1lID0gc3RhdGlj
X2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFt
ZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICAvLyBHZXQgcmV0dXJuIHR5cGUgbmFt
ZQorICAgIGpzdHJpbmcgcmV0dXJuVHlwZU5hbWUgPSAwOworICAgIGlmIChqb2JqZWN0IHJldHVy
blR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1cm5UeXBlIiwg
IigpTGphdmEvbGFuZy9DbGFzczsiKSkgeworICAgICAgICAgICAgcmV0dXJuVHlwZU5hbWUgPSBz
dGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KHJldHVyblR5cGUsICJn
ZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7IikpOworICAgICAgICBpZiAoIXJldHVyblR5
cGVOYW1lKQorICAgICAgICAgICAgcmV0dXJuVHlwZU5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigi
W1VOS05PV04gTUVUSE9EIFJFVFVSTiBUWVBFIE5BTUVdIik7CisgICAgICAgIGVudi0+RGVsZXRl
TG9jYWxSZWYocmV0dXJuVHlwZSk7CisgICAgfQogICAgIG1fcmV0dXJuVHlwZSA9IEphdmFTdHJp
bmcoZW52LCByZXR1cm5UeXBlTmFtZSk7CiAgICAgbV9KTklSZXR1cm5UeXBlID0gSk5JVHlwZUZy
b21DbGFzc05hbWUobV9yZXR1cm5UeXBlLlVURjhTdHJpbmcoKSk7Ci0gICAgZW52LT5EZWxldGVM
b2NhbFJlZihyZXR1cm5UeXBlKTsKICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHJldHVyblR5cGVO
YW1lKTsKIAogICAgIC8vIEdldCBtZXRob2QgbmFtZQogICAgIGpzdHJpbmcgbWV0aG9kTmFtZSA9
IHN0YXRpY19jYXN0PGpzdHJpbmc+KGNhbGxKTklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdl
dE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgaWYgKCFyZXR1cm5UeXBlTmFt
ZSkKKyAgICAgICAgcmV0dXJuVHlwZU5hbWUgPSBlbnYtPk5ld1N0cmluZ1VURigiW1VOS05PV04g
TUVUSE9EIE5BTUVdIik7CiAgICAgbV9uYW1lID0gSmF2YVN0cmluZyhlbnYsIG1ldGhvZE5hbWUp
OwogICAgIGVudi0+RGVsZXRlTG9jYWxSZWYobWV0aG9kTmFtZSk7CiAKICAgICAvLyBHZXQgcGFy
YW1ldGVycwotICAgIGphcnJheSBqcGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGphcnJheT4oY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAiZ2V0UGFyYW1ldGVyVHlwZXMiLCAiKClbTGph
dmEvbGFuZy9DbGFzczsiKSk7Ci0gICAgbV9udW1QYXJhbWV0ZXJzID0gZW52LT5HZXRBcnJheUxl
bmd0aChqcGFyYW1ldGVycyk7Ci0gICAgbV9wYXJhbWV0ZXJzID0gbmV3IEphdmFQYXJhbWV0ZXJb
bV9udW1QYXJhbWV0ZXJzXTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1QYXJhbWV0
ZXJzOyBpKyspIHsKLSAgICAgICAgam9iamVjdCBhUGFyYW1ldGVyID0gZW52LT5HZXRPYmplY3RB
cnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqcGFyYW1ldGVycyksIGkpOwot
ICAgICAgICBqc3RyaW5nIHBhcmFtZXRlck5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxs
Sk5JTWV0aG9kPGpvYmplY3Q+KGFQYXJhbWV0ZXIsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9T
dHJpbmc7IikpOwotICAgICAgICBtX3BhcmFtZXRlcnNbaV0gPSBKYXZhUGFyYW1ldGVyKGVudiwg
cGFyYW1ldGVyTmFtZSk7Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYVBhcmFtZXRlcik7
Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYocGFyYW1ldGVyTmFtZSk7CisgICAgaWYgKGph
cnJheSBqcGFyYW1ldGVycyA9IHN0YXRpY19jYXN0PGphcnJheT4oY2FsbEpOSU1ldGhvZDxqb2Jq
ZWN0PihhTWV0aG9kLCAiZ2V0UGFyYW1ldGVyVHlwZXMiLCAiKClbTGphdmEvbGFuZy9DbGFzczsi
KSkpIHsKKyAgICAgICAgbV9udW1QYXJhbWV0ZXJzID0gZW52LT5HZXRBcnJheUxlbmd0aChqcGFy
YW1ldGVycyk7CisgICAgICAgIG1fcGFyYW1ldGVycyA9IG5ldyBKYXZhUGFyYW1ldGVyW21fbnVt
UGFyYW1ldGVyc107CisKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bVBhcmFtZXRl
cnM7IGkrKykgeworICAgICAgICAgICAgam9iamVjdCBhUGFyYW1ldGVyID0gZW52LT5HZXRPYmpl
Y3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqcGFyYW1ldGVycyksIGkp
OworICAgICAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmlu
Zz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZh
L2xhbmcvU3RyaW5nOyIpKTsKKyAgICAgICAgICAgIGlmICghcGFyYW1ldGVyTmFtZSkKKyAgICAg
ICAgICAgICAgICBwYXJhbWV0ZXJOYW1lID0gZW52LT5OZXdTdHJpbmdVVEYoIltVTktOT1dOIE1F
VEhPRCBQQVJBTUVURVIgTkFNRV0iKTsKKyAgICAgICAgICAgIG1fcGFyYW1ldGVyc1tpXSA9IEph
dmFQYXJhbWV0ZXIoZW52LCBwYXJhbWV0ZXJOYW1lKTsKKyAgICAgICAgICAgIGVudi0+RGVsZXRl
TG9jYWxSZWYoYVBhcmFtZXRlcik7CisgICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBh
cmFtZXRlck5hbWUpOworICAgICAgICB9CisgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoanBh
cmFtZXRlcnMpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fbnVtUGFyYW1ldGVycyA9IDA7Cisg
ICAgICAgIG1fcGFyYW1ldGVycyA9IDA7CiAgICAgfQotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYo
anBhcmFtZXRlcnMpOwogCiAgICAgLy8gQ3JlYXRlZCBsYXppbHkuCiAgICAgbV9zaWduYXR1cmUg
PSAwOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSVV0aWxpdHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JVXRpbGl0eS5oCShyZXZpc2lvbiA1MzgxMykKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9KTklVdGlsaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDExICs4
MSwxMSBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IEpOSUNhbGxlcjsKIHRlbXBsYXRl
PD4gc3RydWN0IEpOSUNhbGxlcjx2b2lkPiB7CiAgICAgc3RhdGljIHZvaWQgY2FsbEEoam9iamVj
dCBvYmosIGptZXRob2RJRCBtaWQsIGp2YWx1ZSogYXJncykKICAgICB7Ci0gICAgICAgIHJldHVy
biBnZXRKTklFbnYoKS0+Q2FsbFZvaWRNZXRob2RBKG9iaiwgbWlkLCBhcmdzKTsKKyAgICAgICAg
Z2V0Sk5JRW52KCktPkNhbGxWb2lkTWV0aG9kQShvYmosIG1pZCwgYXJncyk7CiAgICAgfQogICAg
IHN0YXRpYyB2b2lkIGNhbGxWKGpvYmplY3Qgb2JqLCBqbWV0aG9kSUQgbWlkLCB2YV9saXN0IGFy
Z3MpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0Sk5JRW52KCktPkNhbGxWb2lkTWV0aG9kVihv
YmosIG1pZCwgYXJncyk7CisgICAgICAgIGdldEpOSUVudigpLT5DYWxsVm9pZE1ldGhvZFYob2Jq
LCBtaWQsIGFyZ3MpOwogICAgIH0KIH07CiAKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9qbmlf
anNvYmplY3QubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2puaV9qc29iamVj
dC5tbQkocmV2aXNpb24gNTM4MTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvam5pX2pzb2JqZWN0
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hUb0phdmFTY3JpcHRUaHJlYWQoSgogICAgIGNvbXBsZXRpb25Tb3VyY2UgPSBDRlJ1bkxvb3BT
b3VyY2VDcmVhdGUoTlVMTCwgMCwgJnNvdXJjZUNvbnRleHQpOwogICAgIENGUnVuTG9vcEFkZFNv
dXJjZShjdXJyZW50UnVuTG9vcCwgY29tcGxldGlvblNvdXJjZSwga0NGUnVuTG9vcERlZmF1bHRN
b2RlKTsKICAgICAKLSAgICAvLyBXYWtldXAgSmF2YVNjcmlwdCBhY2Nlc3MgdGhyZWFkIGFuZCBt
YWtlIGl0IGRvIGl0J3Mgd29yay4KKyAgICAvLyBXYWtldXAgSmF2YVNjcmlwdCBhY2Nlc3MgdGhy
ZWFkIGFuZCBtYWtlIGl0IGRvIGl0cyB3b3JrLgogICAgIENGUnVuTG9vcFNvdXJjZVNpZ25hbChf
cGVyZm9ybUphdmFTY3JpcHRTb3VyY2UpOwogICAgIGlmIChDRlJ1bkxvb3BJc1dhaXRpbmcoX3Bl
cmZvcm1KYXZhU2NyaXB0UnVuTG9vcCkpCiAgICAgICAgIENGUnVuTG9vcFdha2VVcChfcGVyZm9y
bUphdmFTY3JpcHRSdW5Mb29wKTsKQEAgLTUzMyw3ICs1MzMsNyBAQCBqb2JqZWN0IEphdmFKU09i
amVjdDo6Y29udmVydFZhbHVlVG9KT2JqCiAgICAgICAgICAgICAvLyBXZSBlaXRoZXIgaGF2ZSBh
IHdyYXBwZXIgYXJvdW5kIGEgSmF2YSBpbnN0YW5jZSBvciBhIEphdmFTY3JpcHQKICAgICAgICAg
ICAgIC8vIG9iamVjdC4gIElmIHdlIGhhdmUgYSB3cmFwcGVyIGFyb3VuZCBhIEphdmEgaW5zdGFu
Y2UsIHJldHVybiB0aGF0CiAgICAgICAgICAgICAvLyBpbnN0YW5jZSwgb3RoZXJ3aXNlIGNyZWF0
ZSBhIG5ldyBKYXZhIEphdmFKU09iamVjdCB3aXRoIHRoZSBKU09iamVjdCoKLSAgICAgICAgICAg
IC8vIGFzIGl0J3MgbmF0aXZlSGFuZGxlLgorICAgICAgICAgICAgLy8gYXMgaXRzIG5hdGl2ZUhh
bmRsZS4KICAgICAgICAgICAgIGlmIChpbXAtPmNsYXNzSW5mbygpICYmIHN0cmNtcChpbXAtPmNs
YXNzSW5mbygpLT5jbGFzc05hbWUsICJSdW50aW1lT2JqZWN0IikgPT0gMCkgewogICAgICAgICAg
ICAgICAgIFJ1bnRpbWVPYmplY3RJbXAqIHJ1bnRpbWVJbXAgPSBzdGF0aWNfY2FzdDxSdW50aW1l
T2JqZWN0SW1wKj4oaW1wKTsKICAgICAgICAgICAgICAgICBKYXZhSW5zdGFuY2UgKnJ1bnRpbWVJ
bnN0YW5jZSA9IHN0YXRpY19jYXN0PEphdmFJbnN0YW5jZSAqPihydW50aW1lSW1wLT5nZXRJbnRl
cm5hbEluc3RhbmNlKCkpOwpAQCAtNTUyLDcgKzU1Miw3IEBAIGpvYmplY3QgSmF2YUpTT2JqZWN0
Ojpjb252ZXJ0VmFsdWVUb0pPYmoKICAgICAgICAgICAgIG5hdGl2ZUhhbmRsZSA9IFVuZGVmaW5l
ZEhhbmRsZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgLy8gTm93IGNyZWF0ZSB0aGUg
SmF2YSBKYXZhSlNPYmplY3QuICBMb29rIGZvciB0aGUgSmF2YUpTT2JqZWN0IGluIGl0J3MgbmV3
IChUaWdlcikKKyAgICAgICAgLy8gTm93IGNyZWF0ZSB0aGUgSmF2YSBKYXZhSlNPYmplY3QuICBM
b29rIGZvciB0aGUgSmF2YUpTT2JqZWN0IGluIGl0cyBuZXcgKFRpZ2VyKQogICAgICAgICAvLyBs
b2NhdGlvbiBhbmQgaW4gdGhlIG9yaWdpbmFsIEphdmEgMS40LjIgbG9jYXRpb24uCiAgICAgICAg
IGpjbGFzcyBKU09iamVjdENsYXNzOwogICAgICAgICAKQEAgLTU4MCwzMCArNTgwLDMxIEBAIEpT
VmFsdWUgSmF2YUpTT2JqZWN0Ojpjb252ZXJ0Sk9iamVjdFRvVmEKICAgICAvLyBTZWUgc2VjdGlv
biAyMi43IG9mICdKYXZhU2NyaXB0OiAgVGhlIERlZmluaXRpdmUgR3VpZGUsIDR0aCBFZGl0aW9u
JywKICAgICAvLyBmaWd1cmUgMjItNC4KICAgICBqb2JqZWN0IGNsYXNzT2ZJbnN0YW5jZSA9IGNh
bGxKTklNZXRob2Q8am9iamVjdD4odGhlT2JqZWN0LCAiZ2V0Q2xhc3MiLCAiKClMamF2YS9sYW5n
L0NsYXNzOyIpOwotICAgIGpzdHJpbmcgY2xhc3NOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhv
ZDxqb2JqZWN0PihjbGFzc09mSW5zdGFuY2UsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJp
bmc7Iik7Ci0gICAgCisgICAgaWYgKCFjbGFzc09mSW5zdGFuY2UpIHsKKyAgICAgICAgSlNMb2Nr
IGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgcmV0dXJuIEphdmFJbnN0YW5j
ZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOworICAgIH0KKwogICAgIC8vIE9ubHkgdGhlIHN1bi5wbHVnaW4uamF2YXNjcmlwdC53ZWJr
aXQuSlNPYmplY3QgaGFzIGEgbWVtYmVyIGNhbGxlZCBuYXRpdmVKU09iamVjdC4gVGhpcyBjbGFz
cyBpcwogICAgIC8vIGNyZWF0ZWQgYWJvdmUgdG8gd3JhcCBpbnRlcm5hbCBicm93c2VyIG9iamVj
dHMuIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGlzIGNsYXNzIHRha2VzIHRoZSBuYXRpdmUKICAgICAv
LyBwb2ludGVyIGFuZCBzdG9yZXMgaXQgaW4gdGhpcyBvYmplY3QsIHNvIHRoYXQgaXQgY2FuIGJl
IHJldHJpZXZlZCBiZWxvdy4KLSAgICBpZiAoc3RyY21wKEphdmFTdHJpbmcoY2xhc3NOYW1lKS5V
VEY4U3RyaW5nKCksICJzdW4ucGx1Z2luLmphdmFzY3JpcHQud2Via2l0LkpTT2JqZWN0IikgPT0g
MCkgewotICAgICAgICAvLyBQdWxsIHRoZSBuYXRpdmVKU09iamVjdCB2YWx1ZSBmcm9tIHRoZSBK
YXZhIGluc3RhbmNlLiAgVGhpcyBpcyBhCi0gICAgICAgIC8vIHBvaW50ZXIgdG8gdGhlIEpTT2Jq
ZWN0LgotICAgICAgICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOwotICAgICAgICBqZmllbGRJ
RCBmaWVsZElEID0gZW52LT5HZXRGaWVsZElEKChqY2xhc3MpY2xhc3NPZkluc3RhbmNlLCAibmF0
aXZlSlNPYmplY3QiLCAiSiIpOwotICAgICAgICBpZiAoZmllbGRJRCA9PSBOVUxMKSB7Ci0gICAg
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgfQotICAgICAgICBqbG9uZyBu
YXRpdmVIYW5kbGUgPSBlbnYtPkdldExvbmdGaWVsZCh0aGVPYmplY3QsIGZpZWxkSUQpOwotICAg
ICAgICBpZiAobmF0aXZlSGFuZGxlID09IFVuZGVmaW5lZEhhbmRsZSkgewotICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAgSlNPYmplY3QgKmltcCA9
IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSkpOwot
ICAgICAgICByZXR1cm4gaW1wOworICAgIGpzdHJpbmcgY2xhc3NOYW1lID0gKGpzdHJpbmcpY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihjbGFzc09mSW5zdGFuY2UsICJnZXROYW1lIiwgIigpTGphdmEv
bGFuZy9TdHJpbmc7Iik7CisgICAgaWYgKCFjbGFzc05hbWUgfHwgKHN0cmNtcChKYXZhU3RyaW5n
KGNsYXNzTmFtZSkuVVRGOFN0cmluZygpLCAic3VuLnBsdWdpbi5qYXZhc2NyaXB0LndlYmtpdC5K
U09iamVjdCIpICE9IDApKSB7CisgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRpb25z
T25seSk7CisgICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZSh0aGVPYmplY3QsIF9y
b290T2JqZWN0KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICB9CiAKLSAgICBKU0xv
Y2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotCi0gICAgcmV0dXJuIEphdmFJbnN0YW5j
ZTo6Y3JlYXRlKHRoZU9iamVjdCwgX3Jvb3RPYmplY3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4
ZWMpOworICAgIC8vIFB1bGwgdGhlIG5hdGl2ZUpTT2JqZWN0IHZhbHVlIGZyb20gdGhlIEphdmEg
aW5zdGFuY2UuICBUaGlzIGlzIGEKKyAgICAvLyBwb2ludGVyIHRvIHRoZSBKU09iamVjdC4KKyAg
ICBKTklFbnYgKmVudiA9IGdldEpOSUVudigpOworICAgIGpmaWVsZElEIGZpZWxkSUQgPSBlbnYt
PkdldEZpZWxkSUQoKGpjbGFzcyljbGFzc09mSW5zdGFuY2UsICJuYXRpdmVKU09iamVjdCIsICJK
Iik7CisgICAgaWYgKGZpZWxkSUQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgamxvbmcgbmF0aXZlSGFuZGxlID0gZW52LT5HZXRMb25nRmllbGQodGhlT2JqZWN0
LCBmaWVsZElEKTsKKyAgICBpZiAobmF0aXZlSGFuZGxlID09IFVuZGVmaW5lZEhhbmRsZSkKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgSlNPYmplY3QgKmltcCA9IHN0YXRpY19j
YXN0PEpTT2JqZWN0Kj4oamxvbmdfdG9faW1wcHRyKG5hdGl2ZUhhbmRsZSkpOworICAgIHJldHVy
biBpbXA7CiB9CiAKIHZvaWQgSmF2YUpTT2JqZWN0OjpnZXRMaXN0RnJvbUpBcnJheShFeGVjU3Rh
dGUqIGV4ZWMsIGpvYmplY3RBcnJheSBqQXJyYXksIE1hcmtlZEFyZ3VtZW50QnVmZmVyJiBsaXN0
KSBjb25zdApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhQ2xhc3NKU0MuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUNsYXNzSlNDLmNwcAkocmV2
aXNpb24gNTM4MTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFDbGFzc0pTQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQxLDUyICs0MSw1NyBAQCBKYXZhQ2xhc3M6OkphdmFDbGFzcyhq
b2JqZWN0IGFuSW5zdGFuY2UpCiAKICAgICBpZiAoIWFDbGFzcykgewogICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIiVzOiAgdW5hYmxlIHRvIGNhbGwgZ2V0Q2xhc3Mgb24gaW5zdGFuY2UgJXBcbiIs
IF9fUFJFVFRZX0ZVTkNUSU9OX18sIGFuSW5zdGFuY2UpOworICAgICAgICBtX25hbWUgPSBzdHJk
dXAoIltVTktOT1dOIENMQVNTXSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAganN0
cmluZyBjbGFzc05hbWUgPSAoanN0cmluZyljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFDbGFzcywg
ImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKTsKLSAgICBjb25zdCBjaGFyKiBjbGFz
c05hbWVDID0gZ2V0Q2hhcmFjdGVyc0Zyb21KU3RyaW5nKGNsYXNzTmFtZSk7Ci0gICAgbV9uYW1l
ID0gc3RyZHVwKGNsYXNzTmFtZUMpOwotICAgIHJlbGVhc2VDaGFyYWN0ZXJzRm9ySlN0cmluZyhj
bGFzc05hbWUsIGNsYXNzTmFtZUMpOworICAgIGlmIChqc3RyaW5nIGNsYXNzTmFtZSA9IChqc3Ry
aW5nKWNhbGxKTklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZUMgPSBnZXRDaGFy
YWN0ZXJzRnJvbUpTdHJpbmcoY2xhc3NOYW1lKTsKKyAgICAgICAgbV9uYW1lID0gc3RyZHVwKGNs
YXNzTmFtZUMpOworICAgICAgICByZWxlYXNlQ2hhcmFjdGVyc0ZvckpTdHJpbmcoY2xhc3NOYW1l
LCBjbGFzc05hbWVDKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9uYW1lID0gc3RyZHVwKCJbVU5L
Tk9XTiBDTEFTUyBOQU1FXSIpOwogCiAgICAgaW50IGk7CiAgICAgSk5JRW52KiBlbnYgPSBnZXRK
TklFbnYoKTsKIAogICAgIC8vIEdldCB0aGUgZmllbGRzCi0gICAgamFycmF5IGZpZWxkcyA9IChq
YXJyYXkpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xhc3MsICJnZXRGaWVsZHMiLCAiKClbTGph
dmEvbGFuZy9yZWZsZWN0L0ZpZWxkOyIpOwotICAgIGludCBudW1GaWVsZHMgPSBlbnYtPkdldEFy
cmF5TGVuZ3RoKGZpZWxkcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG51bUZpZWxkczsgaSsrKSB7
Ci0gICAgICAgIGpvYmplY3QgYUpGaWVsZCA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50KChq
b2JqZWN0QXJyYXkpZmllbGRzLCBpKTsKLSAgICAgICAgSmF2YUZpZWxkKiBhRmllbGQgPSBuZXcg
SmF2YUZpZWxkKGVudiwgYUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFDbGFzcyBkZXN0
cnVjdG9yCi0gICAgICAgIHsKLSAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVuY2VBc3NlcnRp
b25zT25seSk7Ci0gICAgICAgICAgICBtX2ZpZWxkcy5zZXQoKChVU3RyaW5nKWFGaWVsZC0+bmFt
ZSgpKS5yZXAoKSwgYUZpZWxkKTsKKyAgICBpZiAoamFycmF5IGZpZWxkcyA9IChqYXJyYXkpY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhQ2xhc3MsICJnZXRGaWVsZHMiLCAiKClbTGphdmEvbGFuZy9y
ZWZsZWN0L0ZpZWxkOyIpKSB7CisgICAgICAgIGludCBudW1GaWVsZHMgPSBlbnYtPkdldEFycmF5
TGVuZ3RoKGZpZWxkcyk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1GaWVsZHM7IGkrKykg
eworICAgICAgICAgICAgam9iamVjdCBhSkZpZWxkID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1l
bnQoKGpvYmplY3RBcnJheSlmaWVsZHMsIGkpOworICAgICAgICAgICAgSmF2YUZpZWxkKiBhRmll
bGQgPSBuZXcgSmF2YUZpZWxkKGVudiwgYUpGaWVsZCk7IC8vIGRlbGV0ZWQgaW4gdGhlIEphdmFD
bGFzcyBkZXN0cnVjdG9yCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgSlNMb2NrIGxv
Y2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICAgICAgICAgICAgICBtX2ZpZWxkcy5zZXQo
KChVU3RyaW5nKWFGaWVsZC0+bmFtZSgpKS5yZXAoKSwgYUZpZWxkKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUpGaWVsZCk7CiAgICAgICAgIH0KLSAg
ICAgICAgZW52LT5EZWxldGVMb2NhbFJlZihhSkZpZWxkKTsKKyAgICAgICAgZW52LT5EZWxldGVM
b2NhbFJlZihmaWVsZHMpOwogICAgIH0KIAogICAgIC8vIEdldCB0aGUgbWV0aG9kcwotICAgIGph
cnJheSBtZXRob2RzID0gKGphcnJheSljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFDbGFzcywgImdl
dE1ldGhvZHMiLCAiKClbTGphdmEvbGFuZy9yZWZsZWN0L01ldGhvZDsiKTsKLSAgICBpbnQgbnVt
TWV0aG9kcyA9IGVudi0+R2V0QXJyYXlMZW5ndGgobWV0aG9kcyk7Ci0gICAgZm9yIChpID0gMDsg
aSA8IG51bU1ldGhvZHM7IGkrKykgewotICAgICAgICBqb2JqZWN0IGFKTWV0aG9kID0gZW52LT5H
ZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSltZXRob2RzLCBpKTsKLSAgICAgICAg
SmF2YU1ldGhvZCogYU1ldGhvZCA9IG5ldyBKYXZhTWV0aG9kKGVudiwgYUpNZXRob2QpOyAvLyBk
ZWxldGVkIGluIHRoZSBKYXZhQ2xhc3MgZGVzdHJ1Y3RvcgotICAgICAgICBNZXRob2RMaXN0KiBt
ZXRob2RMaXN0OwotICAgICAgICB7Ci0gICAgICAgICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwotCi0gICAgICAgICAgICBtZXRob2RMaXN0ID0gbV9tZXRob2RzLmdldCgo
KFVTdHJpbmcpYU1ldGhvZC0+bmFtZSgpKS5yZXAoKSk7Ci0gICAgICAgICAgICBpZiAoIW1ldGhv
ZExpc3QpIHsKLSAgICAgICAgICAgICAgICBtZXRob2RMaXN0ID0gbmV3IE1ldGhvZExpc3QoKTsK
LSAgICAgICAgICAgICAgICBtX21ldGhvZHMuc2V0KCgoVVN0cmluZylhTWV0aG9kLT5uYW1lKCkp
LnJlcCgpLCBtZXRob2RMaXN0KTsKKyAgICBpZiAoamFycmF5IG1ldGhvZHMgPSAoamFycmF5KWNh
bGxKTklNZXRob2Q8am9iamVjdD4oYUNsYXNzLCAiZ2V0TWV0aG9kcyIsICIoKVtMamF2YS9sYW5n
L3JlZmxlY3QvTWV0aG9kOyIpKSB7CisgICAgICAgIGludCBudW1NZXRob2RzID0gZW52LT5HZXRB
cnJheUxlbmd0aChtZXRob2RzKTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG51bU1ldGhvZHM7
IGkrKykgeworICAgICAgICAgICAgam9iamVjdCBhSk1ldGhvZCA9IGVudi0+R2V0T2JqZWN0QXJy
YXlFbGVtZW50KChqb2JqZWN0QXJyYXkpbWV0aG9kcywgaSk7CisgICAgICAgICAgICBKYXZhTWV0
aG9kKiBhTWV0aG9kID0gbmV3IEphdmFNZXRob2QoZW52LCBhSk1ldGhvZCk7IC8vIGRlbGV0ZWQg
aW4gdGhlIEphdmFDbGFzcyBkZXN0cnVjdG9yCisgICAgICAgICAgICBNZXRob2RMaXN0KiBtZXRo
b2RMaXN0OworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEpTTG9jayBsb2NrKFNpbGVu
Y2VBc3NlcnRpb25zT25seSk7CisKKyAgICAgICAgICAgICAgICBtZXRob2RMaXN0ID0gbV9tZXRo
b2RzLmdldCgoKFVTdHJpbmcpYU1ldGhvZC0+bmFtZSgpKS5yZXAoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKCFtZXRob2RMaXN0KSB7CisgICAgICAgICAgICAgICAgICAgIG1ldGhvZExpc3QgPSBu
ZXcgTWV0aG9kTGlzdCgpOworICAgICAgICAgICAgICAgICAgICBtX21ldGhvZHMuc2V0KCgoVVN0
cmluZylhTWV0aG9kLT5uYW1lKCkpLnJlcCgpLCBtZXRob2RMaXN0KTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBtZXRob2RMaXN0LT5hcHBlbmQoYU1ldGhv
ZCk7CisgICAgICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFKTWV0aG9kKTsKICAgICAgICAg
fQotICAgICAgICBtZXRob2RMaXN0LT5hcHBlbmQoYU1ldGhvZCk7Ci0gICAgICAgIGVudi0+RGVs
ZXRlTG9jYWxSZWYoYUpNZXRob2QpOworICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKG1ldGhv
ZHMpOwogICAgIH0KIAotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoZmllbGRzKTsKLSAgICBlbnYt
PkRlbGV0ZUxvY2FsUmVmKG1ldGhvZHMpOwogICAgIGVudi0+RGVsZXRlTG9jYWxSZWYoYUNsYXNz
KTsKIH0KIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNw
cAkocmV2aXNpb24gNTM4MTMpCisrKyBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5j
ZUpTQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDExIEBAIEpTVmFsdWUgSmF2YUlu
c3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3QKICAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOwogCiAgICAganN0cmluZyBzdHJpbmdWYWx1ZSA9IChqc3RyaW5nKWNhbGxKTklN
ZXRob2Q8am9iamVjdD4obV9pbnN0YW5jZS0+bV9pbnN0YW5jZSwgInRvU3RyaW5nIiwgIigpTGph
dmEvbGFuZy9TdHJpbmc7Iik7CisKKyAgICAvLyBTaG91bGQgdGhyb3cgYSBKUyBleGNlcHRpb24s
IHJhdGhlciB0aGFuIHJldHVybmluZyAiIj8gLSBidXQgYmV0dGVyIHRoYW4gYSBudWxsIGRlcmVm
ZXJlbmNlLgorICAgIGlmICghc3RyaW5nVmFsdWUpCisgICAgICAgIHJldHVybiBqc1N0cmluZyhl
eGVjLCBVU3RyaW5nKCkpOworCiAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICBj
b25zdCBqY2hhciogYyA9IGdldFVDaGFyYWN0ZXJzRnJvbUpTdHJpbmdJbkVudihlbnYsIHN0cmlu
Z1ZhbHVlKTsKICAgICBVU3RyaW5nIHUoKGNvbnN0IFVDaGFyKiljLCAoaW50KWVudi0+R2V0U3Ry
aW5nTGVuZ3RoKHN0cmluZ1ZhbHVlKSk7Cg==
</data>
<flag name="review"
          id="29803"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>